[maemo-commits] [maemo-commits] r9638 - in projects/haf/branches/gtk+/maemo-gtk-2-10: . gtk

From: subversion at stage.maemo.org subversion at stage.maemo.org
Date: Mon Feb 5 16:21:28 EET 2007
Author: mitch
Date: 2007-02-05 16:21:23 +0200 (Mon, 05 Feb 2007)
New Revision: 9638

Modified:
   projects/haf/branches/gtk+/maemo-gtk-2-10/ChangeLog
   projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtkaccellabel.c
   projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtklabel.c
   projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtkmenushell.c
   projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtksettings.c
   projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtkwindow.c
Log:
2007-02-05  Michael Natterer  <mitch at imendio.com>

	Merge from upstream trunk:

	* gtk/gtksettings.c: add new boolean settings gtk-enable-accels
	and gtk-enable-mnemonics which enable/disable accelerators and
	mnemonics (bug #72375, based on a patch from Tommi Komulainen).

	* gtk/gtkwindow.c (gtk_window_activate_key)
	* gtk/gtkmenushell.c (gtk_menu_shell_key_press): don't invoke them
	if the resp. setting is FALSE.

	* gtk/gtkaccellabel.c (gtk_accel_label_refetch)
	* gtk/gtklabel.c (gtk_label_set_pattern_internal): don't display
	them if the setting is FALSE.

	* gtk/gtklabel.c: added signal connection to the screen's settings
	object and traverse all widgets on the screen when the setting
	changes. It's slightly ugly to also update GtkAccelLabels here,
	but less ugly than connecting and traversing all widgets twice.



Modified: projects/haf/branches/gtk+/maemo-gtk-2-10/ChangeLog
===================================================================
--- projects/haf/branches/gtk+/maemo-gtk-2-10/ChangeLog	2007-02-05 13:03:24 UTC (rev 9637)
+++ projects/haf/branches/gtk+/maemo-gtk-2-10/ChangeLog	2007-02-05 14:21:23 UTC (rev 9638)
@@ -1,5 +1,26 @@
 2007-02-05  Michael Natterer  <mitch at imendio.com>
 
+	Merge from upstream trunk:
+
+	* gtk/gtksettings.c: add new boolean settings gtk-enable-accels
+	and gtk-enable-mnemonics which enable/disable accelerators and
+	mnemonics (bug #72375, based on a patch from Tommi Komulainen).
+
+	* gtk/gtkwindow.c (gtk_window_activate_key)
+	* gtk/gtkmenushell.c (gtk_menu_shell_key_press): don't invoke them
+	if the resp. setting is FALSE.
+
+	* gtk/gtkaccellabel.c (gtk_accel_label_refetch)
+	* gtk/gtklabel.c (gtk_label_set_pattern_internal): don't display
+	them if the setting is FALSE.
+
+	* gtk/gtklabel.c: added signal connection to the screen's settings
+	object and traverse all widgets on the screen when the setting
+	changes. It's slightly ugly to also update GtkAccelLabels here,
+	but less ugly than connecting and traversing all widgets twice.
+
+2007-02-05  Michael Natterer  <mitch at imendio.com>
+
 	Merge from upstream:
 
 	* gtk/gtktextbuffer.h (enum GtkTextBufferTargetInfo): changed

Modified: projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtkaccellabel.c
===================================================================
--- projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtkaccellabel.c	2007-02-05 13:03:24 UTC (rev 9637)
+++ projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtkaccellabel.c	2007-02-05 14:21:23 UTC (rev 9638)
@@ -661,6 +661,8 @@
 gboolean
 gtk_accel_label_refetch (GtkAccelLabel *accel_label)
 {
+  gboolean enable_accels;
+
   g_return_val_if_fail (GTK_IS_ACCEL_LABEL (accel_label), FALSE);
 
   if (accel_label->accel_string)
@@ -669,7 +671,11 @@
       accel_label->accel_string = NULL;
     }
 
-  if (accel_label->accel_closure)
+  g_object_get (gtk_widget_get_settings (GTK_WIDGET (accel_label)),
+                "gtk-enable-accels", &enable_accels,
+                NULL);
+
+  if (enable_accels && accel_label->accel_closure)
     {
       GtkAccelKey *key = gtk_accel_group_find (accel_label->accel_group, find_accel, accel_label->accel_closure);
 

Modified: projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtklabel.c
===================================================================
--- projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtklabel.c	2007-02-05 13:03:24 UTC (rev 9637)
+++ projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtklabel.c	2007-02-05 14:21:23 UTC (rev 9638)
@@ -27,6 +27,7 @@
 #include <math.h>
 #include <string.h>
 #include "gtklabel.h"
+#include "gtkaccellabel.h"
 #include "gtkdnd.h"
 #include "gtkmain.h"
 #include "gtkmarshalers.h"
@@ -966,12 +967,76 @@
 }
 
 static void
+label_shortcut_setting_apply (GtkLabel *label)
+{
+  gtk_label_recalculate (label);
+  if (GTK_IS_ACCEL_LABEL (label))
+    gtk_accel_label_refetch (GTK_ACCEL_LABEL (label));
+}
+
+static void
+label_shortcut_setting_traverse_container (GtkWidget *widget,
+                                           gpointer   data)
+{
+  if (GTK_IS_LABEL (widget))
+    label_shortcut_setting_apply (GTK_LABEL (widget));
+  else if (GTK_IS_CONTAINER (widget))
+    gtk_container_forall (GTK_CONTAINER (widget),
+                          label_shortcut_setting_traverse_container, data);
+}
+
+static void
+label_shortcut_setting_changed (GtkSettings *settings)
+{
+  GList *list, *l;
+
+  list = gtk_window_list_toplevels ();
+
+  for (l = list; l ; l = l->next)
+    {
+      GtkWidget *widget = l->data;
+
+      if (gtk_widget_get_settings (widget) == settings)
+        gtk_container_forall (GTK_CONTAINER (widget),
+                              label_shortcut_setting_traverse_container, NULL);
+    }
+
+  g_list_free (list);
+}
+
+static void
 gtk_label_screen_changed (GtkWidget *widget,
 			  GdkScreen *old_screen)
 {
-  gtk_label_clear_layout (GTK_LABEL (widget));
+  GtkSettings *settings;
+  gboolean shortcuts_connected;
+
+  if (!gtk_widget_has_screen (widget))
+    return;
+
+  settings = gtk_widget_get_settings (widget);
+
+  shortcuts_connected =
+    GPOINTER_TO_INT (g_object_get_data (G_OBJECT (settings),
+                                        "gtk-label-shortcuts-connected"));
+
+  if (! shortcuts_connected)
+    {
+      g_signal_connect (settings, "notify::gtk-enable-mnemonics",
+                        G_CALLBACK (label_shortcut_setting_changed),
+                        NULL);
+      g_signal_connect (settings, "notify::gtk-enable-accels",
+                        G_CALLBACK (label_shortcut_setting_changed),
+                        NULL);
+
+      g_object_set_data (G_OBJECT (settings), "gtk-label-shortcuts-connected",
+                         GINT_TO_POINTER (TRUE));
+    }
+
+  label_shortcut_setting_apply (GTK_LABEL (widget));
 }
 
+
 static void
 label_mnemonic_widget_weak_notify (gpointer      data,
 				   GObject      *where_the_object_was)
@@ -1458,9 +1523,15 @@
 				const gchar *pattern)
 {
   PangoAttrList *attrs;
+  gboolean enable_mnemonics;
+
   g_return_if_fail (GTK_IS_LABEL (label));
-  
-  if (pattern)
+
+  g_object_get (gtk_widget_get_settings (GTK_WIDGET (label)),
+		"gtk-enable-mnemonics", &enable_mnemonics,
+		NULL);
+
+  if (enable_mnemonics && pattern)
     attrs = gtk_label_pattern_to_attrs (label, pattern);
   else
     attrs = NULL;

Modified: projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtkmenushell.c
===================================================================
--- projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtkmenushell.c	2007-02-05 13:03:24 UTC (rev 9637)
+++ projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtkmenushell.c	2007-02-05 14:21:23 UTC (rev 9638)
@@ -701,6 +701,7 @@
 			  GdkEventKey *event)
 {
   GtkMenuShell *menu_shell;
+  gboolean enable_mnemonics;
   
   g_return_val_if_fail (GTK_IS_MENU_SHELL (widget), FALSE);
   g_return_val_if_fail (event != NULL, FALSE);
@@ -713,7 +714,14 @@
   if (gtk_bindings_activate_event (GTK_OBJECT (widget), event))
     return TRUE;
 
-  return gtk_menu_shell_activate_mnemonic (menu_shell, event);
+  g_object_get (gtk_widget_get_settings (widget),
+		"gtk-enable-mnemonics", &enable_mnemonics,
+		NULL);
+
+  if (enable_mnemonics)
+    return gtk_menu_shell_activate_mnemonic (menu_shell, event);
+
+  return FALSE;
 }
 
 static gint

Modified: projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtksettings.c
===================================================================
--- projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtksettings.c	2007-02-05 13:03:24 UTC (rev 9637)
+++ projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtksettings.c	2007-02-05 14:21:23 UTC (rev 9638)
@@ -95,7 +95,9 @@
   PROP_KEYNAV_CURSOR_ONLY,
   PROP_KEYNAV_WRAP_AROUND,
   PROP_ERROR_BELL,
-  PROP_COLOR_HASH
+  PROP_COLOR_HASH,
+  PROP_ENABLE_MNEMONICS,
+  PROP_ENABLE_ACCELS
 };
 
 
@@ -571,6 +573,40 @@
 						       GTK_PARAM_READABLE));
 
   class_n_properties++;
+
+  /**
+   * GtkSettings:gtk-enable-mnemonics:
+   *
+   * Whether labels and menu items should have visible mnemonics which
+   * can be activated.
+   *
+   * Since: 2.12
+   */
+  result = settings_install_property_parser (class,
+                                             g_param_spec_boolean ("gtk-enable-mnemonics",
+                                                                   P_("Enable Mnemonics"),
+                                                                   P_("Whether labels should have mnemonics"),
+                                                                   TRUE,
+                                                                   GTK_PARAM_READWRITE),
+                                             NULL);
+  g_assert (result == PROP_ENABLE_MNEMONICS);
+
+  /**
+   * GtkSettings:gtk-enable-accels:
+   *
+   * Whether menu items should have visible accelerators which can be
+   * activated.
+   *
+   * Since: 2.12
+   */
+  result = settings_install_property_parser (class,
+                                             g_param_spec_boolean ("gtk-enable-accels",
+                                                                   P_("Enable Accelerators"),
+                                                                   P_("Whether menu items should have accelerators"),
+                                                                   TRUE,
+                                                                   GTK_PARAM_READWRITE),
+                                             NULL);
+  g_assert (result == PROP_ENABLE_ACCELS);
 }
 
 static void

Modified: projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtkwindow.c
===================================================================
--- projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtkwindow.c	2007-02-05 13:03:24 UTC (rev 9637)
+++ projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtkwindow.c	2007-02-05 14:21:23 UTC (rev 9638)
@@ -7698,13 +7698,29 @@
 
   if (found_entry)
     {
+      gboolean enable_mnemonics;
+      gboolean enable_accels;
+
+      g_object_get (gtk_widget_get_settings (GTK_WIDGET (window)),
+                    "gtk-enable-mnemonics", &enable_mnemonics,
+                    "gtk-enable-accels", &enable_accels,
+                    NULL);
+
       if (found_entry->is_mnemonic)
-	return gtk_window_mnemonic_activate (window, found_entry->keyval, found_entry->modifiers);
+        {
+          if (enable_mnemonics)
+            return gtk_window_mnemonic_activate (window, found_entry->keyval,
+                                                 found_entry->modifiers);
+        }
       else
-	return gtk_accel_groups_activate (G_OBJECT (window), found_entry->keyval, found_entry->modifiers);
+        {
+          if (enable_accels)
+            return gtk_accel_groups_activate (G_OBJECT (window), found_entry->keyval,
+                                              found_entry->modifiers);
+        }
     }
-  else
-    return FALSE;
+
+  return FALSE;
 }
 
 static void


More information about the maemo-commits mailing list