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

From: subversion at stage.maemo.org subversion at stage.maemo.org
Date: Wed Jan 24 13:43:03 EET 2007
Author: mitch
Date: 2007-01-24 13:43:02 +0200 (Wed, 24 Jan 2007)
New Revision: 9285

Modified:
   projects/haf/branches/gtk+/maemo-gtk-2-10/ChangeLog
   projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtkwidget.c
Log:
2007-01-24  Michael Natterer  <mitch at imendio.com>

	* gtk/gtkwidget.c: port over set_extension_events_internal() which
	allows setting extension events on already realized widgets (applied
	updated and cleaned up patch from upstream bug #79550).



Modified: projects/haf/branches/gtk+/maemo-gtk-2-10/ChangeLog
===================================================================
--- projects/haf/branches/gtk+/maemo-gtk-2-10/ChangeLog	2007-01-24 10:30:16 UTC (rev 9284)
+++ projects/haf/branches/gtk+/maemo-gtk-2-10/ChangeLog	2007-01-24 11:43:02 UTC (rev 9285)
@@ -1,5 +1,11 @@
 2007-01-24  Michael Natterer  <mitch at imendio.com>
 
+	* gtk/gtkwidget.c: port over set_extension_events_internal() which
+	allows setting extension events on already realized widgets (applied
+	updated and cleaned up patch from upstream bug #79550).
+
+2007-01-24  Michael Natterer  <mitch at imendio.com>
+
 	* gdk/gdkwindow.h (enum GdkWindowTypeHint): do not use maemo enum
 	values outside the #ifdef MAEMO_CHANGES blocks.
 

Modified: projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtkwidget.c
===================================================================
--- projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtkwidget.c	2007-01-24 10:30:16 UTC (rev 9284)
+++ projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtkwidget.c	2007-01-24 11:43:02 UTC (rev 9285)
@@ -2631,6 +2631,51 @@
     }
 }
 
+static void
+gtk_widget_set_extension_events_internal (GtkWidget        *widget,
+                                          GdkExtensionMode  mode,
+                                          GList            *window_list)
+{
+  GList *free_list = NULL;
+  GList *l;
+
+  if (window_list == NULL)
+    {
+      if (!GTK_WIDGET_NO_WINDOW (widget))
+        window_list = g_list_prepend (NULL, widget->window);
+      else
+        window_list = gdk_window_get_children (widget->window);
+
+      free_list = window_list;
+    }
+
+  for (l = window_list; l != NULL; l = l->next)
+    {
+      GdkWindow *window = l->data;
+      gpointer user_data;
+
+      gdk_window_get_user_data (window, &user_data);
+      if (user_data == widget)
+        {
+          GList *children;
+
+          gdk_input_set_extension_events (window,
+                                          gdk_window_get_events (window),
+                                          mode);
+
+          children = gdk_window_get_children (window);
+          if (children)
+            {
+              gtk_widget_set_extension_events_internal (widget, mode, children);
+              g_list_free (children);
+            }
+        }
+    }
+
+  if (free_list)
+    g_list_free (free_list);
+}
+
 /**
  * gtk_widget_realize:
  * @widget: a #GtkWidget
@@ -2658,8 +2703,6 @@
 void
 gtk_widget_realize (GtkWidget *widget)
 {
-  gint events;
-  GdkExtensionMode mode;
   GtkWidgetShapeInfo *shape_info;
   
   g_return_if_fail (GTK_IS_WIDGET (widget));
@@ -2703,15 +2746,14 @@
 					     shape_info->offset_y);
 
       if (!GTK_WIDGET_NO_WINDOW (widget))
-	{
-	  mode = gtk_widget_get_extension_events (widget);
-	  if (mode != GDK_EXTENSION_EVENTS_NONE)
-	    {
-	      events = gtk_widget_get_events (widget);
-	      gdk_input_set_extension_events (widget->window, events, mode);
-	    }
-	}
-      
+        {
+          GdkExtensionMode mode;
+
+          mode = gtk_widget_get_extension_events (widget);
+
+          if (mode != GDK_EXTENSION_EVENTS_NONE)
+            gtk_widget_set_extension_events_internal (widget, mode, NULL);
+        }
     }
 }
 
@@ -6559,21 +6601,23 @@
  *
  * Sets the extension events mask to @mode. See #GdkExtensionMode
  * and gdk_input_set_extension_events().
- * 
  **/
 void
 gtk_widget_set_extension_events (GtkWidget *widget,
 				 GdkExtensionMode mode)
 {
   GdkExtensionMode *modep;
-  
+
   g_return_if_fail (GTK_IS_WIDGET (widget));
-  
+
   modep = g_object_get_qdata (G_OBJECT (widget), quark_extension_event_mode);
-  
+
   if (!modep)
     modep = g_slice_new (GdkExtensionMode);
-  
+
+  if (GTK_WIDGET_REALIZED (widget))
+    gtk_widget_set_extension_events_internal (widget, mode, NULL);
+
   *modep = mode;
   g_object_set_qdata (G_OBJECT (widget), quark_extension_event_mode, modep);
   g_object_notify (G_OBJECT (widget), "extension-events");


More information about the maemo-commits mailing list