[maemo-commits] [maemo-commits] r19305 - in projects/haf/trunk/gtk+: . gtk

From: subversion at stage.maemo.org subversion at stage.maemo.org
Date: Tue Sep 8 11:53:15 EEST 2009
Author: kris
Date: 2009-09-08 11:52:40 +0300 (Tue, 08 Sep 2009)
New Revision: 19305

Modified:
   projects/haf/trunk/gtk+/ChangeLog
   projects/haf/trunk/gtk+/gtk/gtkmenu.c
Log:
2009-09-08  Kristian Rietveld  <kris at lanedo.com>

	Fixes: NB#129022 - CSM is not proper while rotating from portrait mode
	to landscape mode, viceversa

	* gtk/gtkmenu.c: connect to GdkScreen::size-changed and reposition the
	menu in the signal handler,
	(menu_change_screen): re-connect the signal.



Modified: projects/haf/trunk/gtk+/ChangeLog
===================================================================
--- projects/haf/trunk/gtk+/ChangeLog	2009-09-08 08:03:05 UTC (rev 19304)
+++ projects/haf/trunk/gtk+/ChangeLog	2009-09-08 08:52:40 UTC (rev 19305)
@@ -1,3 +1,12 @@
+2009-09-08  Kristian Rietveld  <kris at lanedo.com>
+
+	Fixes: NB#129022 - CSM is not proper while rotating from portrait mode
+	to landscape mode, viceversa
+
+	* gtk/gtkmenu.c: connect to GdkScreen::size-changed and reposition the
+	menu in the signal handler,
+	(menu_change_screen): re-connect the signal.
+
 2009-09-07  Kristian Rietveld  <kris at lanedo.com>
 
 	Fixes: NB#137421 - Context menu opening takes too long time

Modified: projects/haf/trunk/gtk+/gtk/gtkmenu.c
===================================================================
--- projects/haf/trunk/gtk+/gtk/gtkmenu.c	2009-09-08 08:03:05 UTC (rev 19304)
+++ projects/haf/trunk/gtk+/gtk/gtkmenu.c	2009-09-08 08:52:40 UTC (rev 19305)
@@ -113,6 +113,9 @@
   gboolean context_menu;
   int popup_pointer_x;
   int popup_pointer_y;
+
+  /* Handling GdkScreen::size-changed */
+  guint size_changed_id;
 #endif /* MAEMO_CHANGES */
 };
 
@@ -268,6 +271,9 @@
 
 #ifdef MAEMO_CHANGES
 static gint context_menu_counter = 0;
+
+static void menu_screen_size_changed (GdkScreen *screen,
+                                      GtkMenu   *menu);
 #endif
 
 static GtkMenuPrivate *
@@ -1098,6 +1104,11 @@
   priv->context_menu = FALSE;
   priv->popup_pointer_x = -1;
   priv->popup_pointer_y = -1;
+
+  priv->size_changed_id =
+      g_signal_connect (gtk_widget_get_screen (menu->toplevel), "size_changed",
+                        G_CALLBACK (menu_screen_size_changed),
+                        menu);
 #endif /* MAEMO_CHANGES */
 
   priv->have_layout = FALSE;
@@ -1158,10 +1169,28 @@
       priv->title = NULL;
     }
 
+#ifdef MAEMO_CHANGES
+  if (priv->size_changed_id)
+    {
+      g_signal_handler_disconnect (gtk_widget_get_screen (GTK_WIDGET (object)),
+                                   priv->size_changed_id);
+      priv->size_changed_id = 0;
+    }
+#endif /* MAEMO_CHANGES */
+
   GTK_OBJECT_CLASS (gtk_menu_parent_class)->destroy (object);
 }
 
+#ifdef MAEMO_CHANGES
 static void
+menu_screen_size_changed (GdkScreen *screen,
+                          GtkMenu   *menu)
+{
+  gtk_menu_reposition (menu);
+}
+#endif /* MAEMO_CHANGES */
+
+static void
 menu_change_screen (GtkMenu   *menu,
 		    GdkScreen *new_screen)
 {
@@ -1173,6 +1202,15 @@
 	return;
     }
 
+#ifdef MAEMO_CHANGES
+  if (private->size_changed_id)
+    {
+      g_signal_handler_disconnect (gtk_widget_get_screen (GTK_WIDGET (menu)),
+                                   private->size_changed_id);
+      private->size_changed_id = 0;
+    }
+#endif /* MAEMO_CHANGES */
+
   if (menu->torn_off)
     {
       gtk_window_set_screen (GTK_WINDOW (menu->tearoff_window), new_screen);
@@ -1181,6 +1219,12 @@
 
   gtk_window_set_screen (GTK_WINDOW (menu->toplevel), new_screen);
   private->monitor_num = -1;
+
+#ifdef MAEMO_CHANGES
+  private->size_changed_id = g_signal_connect (new_screen, "size_changed",
+                                               G_CALLBACK (menu_screen_size_changed),
+                                               menu);
+#endif /* MAEMO_CHANGES */
 }
 
 static void

More information about the maemo-commits mailing list