r14390 - in /desktop/unstable/gtk+2.0/debian: changelog patches/095_gtk-im-module-setting.patch patches/series

lool at users.alioth.debian.org lool at users.alioth.debian.org
Tue Jan 29 20:18:28 UTC 2008


Author: lool
Date: Tue Jan 29 20:18:28 2008
New Revision: 14390

URL: http://svn.debian.org/wsvn/pkg-gnome/?sc=1&rev=14390
Log:
* New patch, 095_gtk-im-module-setting, adds XSETTINGS support for immodule;
  from GNOME 502446.

Added:
    desktop/unstable/gtk+2.0/debian/patches/095_gtk-im-module-setting.patch
Modified:
    desktop/unstable/gtk+2.0/debian/changelog
    desktop/unstable/gtk+2.0/debian/patches/series

Modified: desktop/unstable/gtk+2.0/debian/changelog
URL: http://svn.debian.org/wsvn/pkg-gnome/desktop/unstable/gtk%2B2.0/debian/changelog?rev=14390&op=diff
==============================================================================
--- desktop/unstable/gtk+2.0/debian/changelog (original)
+++ desktop/unstable/gtk+2.0/debian/changelog Tue Jan 29 20:18:28 2008
@@ -11,6 +11,8 @@
     - New patch, 094_directfb-deprecation-fixes, fixes directfb build with
       GLib 2.15 deprecation of G_GNUC_FUNCTION in favor of G_STRLOC.
   * Fix ordering in series.
+  * New patch, 095_gtk-im-module-setting, adds XSETTINGS support for immodule;
+    from GNOME 502446.
 
  -- Loic Minier <lool at dooz.org>  Mon, 21 Jan 2008 18:42:28 +0100
 

Added: desktop/unstable/gtk+2.0/debian/patches/095_gtk-im-module-setting.patch
URL: http://svn.debian.org/wsvn/pkg-gnome/desktop/unstable/gtk%2B2.0/debian/patches/095_gtk-im-module-setting.patch?rev=14390&op=file
==============================================================================
--- desktop/unstable/gtk+2.0/debian/patches/095_gtk-im-module-setting.patch (added)
+++ desktop/unstable/gtk+2.0/debian/patches/095_gtk-im-module-setting.patch Tue Jan 29 20:18:28 2008
@@ -1,0 +1,353 @@
+GNOME 502446; Adds XSETTINGS support for immodule
+
+--- a/gdk/x11/gdksettings.c	2008-01-29 04:36:31.000000000 +0100
++++ b/gdk/x11/gdksettings.c	2008-01-29 21:14:07.000000000 +0100
+@@ -65,7 +65,8 @@
+   "Xft/RGBA\0"                "gtk-xft-rgba\0"
+   "Xft/DPI\0"                 "gtk-xft-dpi\0"
+   "Net/FallbackIconTheme\0"   "gtk-fallback-icon-theme\0"
+-  "Gtk/TouchscreenMode\0"     "gtk-touchscreen-mode\0";
++  "Gtk/TouchscreenMode\0"     "gtk-touchscreen-mode\0"
++  "Gtk/IMModule\0"            "gtk-im-module\0";
+ 
+ static const struct
+ {
+@@ -107,5 +108,6 @@
+   { 1197, 1206 },
+   { 1219, 1227 },
+   { 1239, 1261 },
+-  { 1285, 1305 }
++  { 1285, 1305 },
++  { 1460, 1473 }
+ };
+--- a/gtk/gtkimmulticontext.c	2008-01-29 04:35:46.000000000 +0100
++++ b/gtk/gtkimmulticontext.c	2008-01-29 21:13:12.000000000 +0100
+@@ -85,6 +85,7 @@
+ 							     gint               n_chars,
+ 							     GtkIMMulticontext *multicontext);
+ 
++static const gchar *user_context_id = NULL;
+ static const gchar *global_context_id = NULL;
+ 
+ G_DEFINE_TYPE (GtkIMMulticontext, gtk_im_multicontext, GTK_TYPE_IM_CONTEXT)
+@@ -141,6 +142,7 @@
+   GtkIMMulticontext *multicontext = GTK_IM_MULTICONTEXT (object);
+   
+   gtk_im_multicontext_set_slave (multicontext, NULL, TRUE);
++  g_free (multicontext->context_id);
+ 
+   G_OBJECT_CLASS (gtk_im_multicontext_parent_class)->finalize (object);
+ }
+@@ -224,35 +226,68 @@
+     {
+       GtkIMContext *slave;
+ 
+-      if (!global_context_id)
+-	{
+-	  gchar *locale = _gtk_get_lc_ctype ();
+-	  global_context_id = _gtk_im_module_get_default_context_id (locale);
+-	  g_free (locale);
+-	}
+-	
++      if (!global_context_id) 
++        {
++          if (user_context_id)
++            global_context_id = user_context_id;
++          else
++            global_context_id = _gtk_im_module_get_default_context_id (multicontext->priv->client_window);
++        }
+       slave = _gtk_im_module_create (global_context_id);
+       gtk_im_multicontext_set_slave (multicontext, slave, FALSE);
+       g_object_unref (slave);
+ 
+-      multicontext->context_id = global_context_id;
++      multicontext->context_id = g_strdup (global_context_id);
+     }
+ 
+   return multicontext->slave;
+ }
+ 
+ static void
++im_module_setting_changed (GtkSettings *settings, 
++                           gpointer     data)
++{
++  global_context_id = NULL;
++}
++
++
++static void
+ gtk_im_multicontext_set_client_window (GtkIMContext *context,
+ 				       GdkWindow    *window)
+ {
+   GtkIMMulticontext *multicontext = GTK_IM_MULTICONTEXT (context);
+-  
+-  GtkIMContext *slave = gtk_im_multicontext_get_slave (multicontext);
++  GtkIMContext *slave; 
++  GdkScreen *screen; 
++  GtkSettings *settings;
++  gboolean connected;
+ 
+   multicontext->priv->client_window = window;
+-  
++
++  slave = gtk_im_multicontext_get_slave (multicontext);
++
+   if (slave)
+     gtk_im_context_set_client_window (slave, window);
++
++  if (window == NULL) 
++    return;
++   
++  screen = gdk_drawable_get_screen (GDK_DRAWABLE (window));
++  if (screen)
++    settings = gtk_settings_get_for_screen (screen);
++  else
++    settings = gtk_settings_get_default ();
++
++  connected = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (settings),
++                                                  "gtk-im-module-connected"));
++  if (!connected) 
++    {
++      g_signal_connect (settings, "notify::gtk-im-module",
++                        G_CALLBACK (im_module_setting_changed), NULL);
++      g_object_set_data (G_OBJECT (settings), "gtk-im-module-connected",
++                         GINT_TO_POINTER (TRUE));
++
++      global_context_id = NULL;  
++    }
+ }
+ 
+ static void
+@@ -298,7 +333,8 @@
+    * using before, get rid of the old slave and create a new one
+    * for the new global context type.
+    */
+-  if (!multicontext->context_id ||
++  if (multicontext->context_id == NULL || 
++      global_context_id == NULL ||
+       strcmp (global_context_id, multicontext->context_id) != 0)
+     gtk_im_multicontext_set_slave (multicontext, NULL, FALSE);
+ 
+@@ -459,7 +495,8 @@
+ 
+       gtk_im_context_reset (GTK_IM_CONTEXT (context));
+       
+-      global_context_id = id;
++      user_context_id = id;
++      global_context_id = NULL;
+       gtk_im_multicontext_set_slave (context, NULL, FALSE);
+     }
+ }
+@@ -500,12 +537,22 @@
+   const GtkIMContextInfo **contexts;
+   guint n_contexts, i;
+   GSList *group = NULL;
++  GtkWidget *menuitem;
+   
++  menuitem = gtk_radio_menu_item_new_with_label (group, Q_("input method menu|System"));
++  if (!user_context_id)
++    gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menuitem), TRUE);
++  group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (menuitem));
++  g_object_set_data (G_OBJECT (menuitem), I_("gtk-context-id"), NULL);
++  g_signal_connect (menuitem, "activate", G_CALLBACK (activate_cb), context);
++
++  gtk_widget_show (menuitem);
++  gtk_menu_shell_append (menushell, menuitem);
++
+   _gtk_im_module_list (&contexts, &n_contexts);
+ 
+-  for (i=0; i < n_contexts; i++)
++  for (i = 0; i < n_contexts; i++)
+     {
+-      GtkWidget *menuitem;
+       const gchar *translated_name;
+ #ifdef ENABLE_NLS
+       if (contexts[i]->domain && contexts[i]->domain[0])
+@@ -562,11 +609,9 @@
+       menuitem = gtk_radio_menu_item_new_with_label (group,
+ 						     translated_name);
+       
+-      if ((global_context_id == NULL && group == NULL) ||
+-          (global_context_id &&
+-           strcmp (contexts[i]->context_id, global_context_id) == 0))
+-        gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menuitem),
+-                                        TRUE);
++      if ((user_context_id &&
++           strcmp (contexts[i]->context_id, user_context_id) == 0))
++        gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menuitem), TRUE);
+       
+       group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (menuitem));
+       
+--- a/gtk/gtkimmulticontext.h	2008-01-29 04:35:46.000000000 +0100
++++ b/gtk/gtkimmulticontext.h	2008-01-29 21:13:12.000000000 +0100
+@@ -45,7 +45,7 @@
+ 
+   GtkIMMulticontextPrivate *priv;
+ 
+-  const gchar *context_id;
++  gchar *context_id;
+ };
+ 
+ struct _GtkIMMulticontextClass
+--- a/gtk/gtksettings.c	2008-01-29 21:11:57.000000000 +0100
++++ b/gtk/gtksettings.c	2008-01-29 21:13:12.000000000 +0100
+@@ -106,7 +106,8 @@
+   PROP_PRINT_PREVIEW_COMMAND,
+   PROP_ENABLE_MNEMONICS,
+   PROP_ENABLE_ACCELS,
+-  PROP_RECENT_FILES_LIMIT
++  PROP_RECENT_FILES_LIMIT,
++  PROP_IM_MODULE
+ };
+ 
+ 
+@@ -805,6 +806,20 @@
+  							       GTK_PARAM_READWRITE),
+ 					     NULL);
+   g_assert (result == PROP_RECENT_FILES_LIMIT);
++
++  /**
++   * GtkSettings:gtk-im-module:
++   *
++   * Which IM module should be used by default.
++   */
++  result = settings_install_property_parser (class,
++					     g_param_spec_string ("gtk-im-module",
++								  P_("Default IM module"),
++								  P_("Which IM module should be used by default"),
++								  NULL,
++								  GTK_PARAM_READWRITE),
++					     NULL);
++  g_assert (result == PROP_IM_MODULE);
+ }
+ 
+ static void
+--- a/gtk/gtkimmodule.c	2008-01-29 21:11:57.000000000 +0100
++++ b/gtk/gtkimmodule.c	2008-01-29 21:13:12.000000000 +0100
+@@ -37,6 +37,8 @@
+ #include <pango/pango-utils.h>
+ #include "gtkimmodule.h"
+ #include "gtkimcontextsimple.h"
++#include "gtksettings.h"
++#include "gtkmain.h"
+ #include "gtkrc.h"
+ #include "gtkintl.h"
+ #include "gtkalias.h"
+@@ -471,7 +473,7 @@
+ #endif
+ 		GtkIMContextInfo simple_context_info = {
+     SIMPLE_ID,
+-    N_("Default"),
++    N_("Simple"),
+     GETTEXT_PACKAGE,
+ #ifdef GTK_LOCALEDIR
+     GTK_LOCALEDIR,
+@@ -599,17 +601,15 @@
+ 
+ /**
+  * _gtk_im_module_get_default_context_id:
+- * @locale: a locale id in the form 'en_US'
++ * @client_window: a window
+  * 
+- * Return the context_id of the best IM context type
+- * for the given locale ID.
++ * Return the context_id of the best IM context type 
++ * for the given window.
+  * 
+  * Return value: the context ID (will never be %NULL)
+- *    the value is newly allocated and must be freed
+- *    with g_free().
+  **/
+ const gchar *
+-_gtk_im_module_get_default_context_id (const gchar *locale)
++_gtk_im_module_get_default_context_id (GdkWindow *client_window)
+ {
+   GSList *tmp_list;
+   const gchar *context_id = NULL;
+@@ -617,6 +617,8 @@
+   gint i;
+   gchar *tmp_locale, *tmp;
+   const gchar *envvar;
++  GdkScreen *screen;
++  GtkSettings *settings;
+       
+   if (!contexts_hash)
+     gtk_im_module_initialize ();
+@@ -624,12 +626,41 @@
+   envvar = g_getenv ("GTK_IM_MODULE");
+   if (envvar &&
+       (strcmp (envvar, SIMPLE_ID) == 0 ||
+-       g_hash_table_lookup (contexts_hash, envvar)))
+-    return g_strdup (envvar);
++       g_hash_table_lookup (contexts_hash, envvar))) 
++    return envvar;
++
++  /* Check if the certain immodule is set in XSETTINGS.
++   */
++  if (client_window != NULL && GDK_IS_DRAWABLE (client_window))
++    {
++      screen = gdk_drawable_get_screen (GDK_DRAWABLE (client_window));
++      if (screen)
++        settings = gtk_settings_get_for_screen (screen);
++      else
++        settings = gtk_settings_get_default ();
++
++      g_object_get (G_OBJECT (settings), "gtk-im-module", &tmp, NULL);
++      if (tmp)
++        {
++          if (strcmp (tmp, SIMPLE_ID) == 0)
++            context_id = SIMPLE_ID;
++          else 
++            {
++              GtkIMModule *module;
++              module = g_hash_table_lookup (contexts_hash, tmp);
++              if (module)
++                context_id = module->contexts[0]->context_id;
++            }
++          g_free (tmp);
++
++       	  if (context_id) 
++            return context_id;
++        }
++    }
+ 
+   /* Strip the locale code down to the essentials
+    */
+-  tmp_locale = g_strdup (locale);
++  tmp_locale = _gtk_get_lc_ctype ();
+   tmp = strchr (tmp_locale, '.');
+   if (tmp)
+     *tmp = '\0';
+@@ -642,7 +673,7 @@
+     {
+       GtkIMModule *module = tmp_list->data;
+      
+-      for (i=0; i<module->n_contexts; i++)
++      for (i = 0; i < module->n_contexts; i++)
+ 	{
+ 	  const gchar *p = module->contexts[i]->default_locales;
+ 	  while (p)
+@@ -665,5 +696,5 @@
+ 
+   g_free (tmp_locale);
+   
+-  return g_strdup (context_id ? context_id : SIMPLE_ID);
++  return context_id ? context_id : SIMPLE_ID;
+ }
+--- a/gtk/gtkimmodule.h	2008-01-29 04:35:47.000000000 +0100
++++ b/gtk/gtkimmodule.h	2008-01-29 21:13:12.000000000 +0100
+@@ -38,10 +38,10 @@
+ 
+ /* Functions for use within GTK+
+  */
+-void          _gtk_im_module_list                   (const GtkIMContextInfo ***contexts,
+-						    guint                    *n_contexts);
+-GtkIMContext *_gtk_im_module_create                 (const gchar             *context_id);
+-const gchar * _gtk_im_module_get_default_context_id (const gchar             *lang);
++void           _gtk_im_module_list                   (const GtkIMContextInfo ***contexts,
++						      guint                    *n_contexts);
++GtkIMContext * _gtk_im_module_create                 (const gchar              *context_id);
++const gchar  * _gtk_im_module_get_default_context_id (GdkWindow                *client_window);
+ 
+ /* The following entry points are exported by each input method module
+  */

Modified: desktop/unstable/gtk+2.0/debian/patches/series
URL: http://svn.debian.org/wsvn/pkg-gnome/desktop/unstable/gtk%2B2.0/debian/patches/series?rev=14390&op=diff
==============================================================================
--- desktop/unstable/gtk+2.0/debian/patches/series (original)
+++ desktop/unstable/gtk+2.0/debian/patches/series Tue Jan 29 20:18:28 2008
@@ -23,3 +23,4 @@
 092_recentfiles-recursion-fix.patch
 093_directfb-type-changes.patch
 094_directfb-deprecation-fixes.patch
+095_gtk-im-module-setting.patch 




More information about the pkg-gnome-commits mailing list