Mailing List Archive

r19305 - in projects/haf/trunk/gtk+: . gtk
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@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@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@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

_______________________________________________
maemo-commits mailing list
maemo-commits@maemo.org
https://lists.maemo.org/mailman/listinfo/maemo-commits