Set a special window property for windows with menus
authorClaudio Saavedra <csaavedra@igalia.com>
Tue, 8 Sep 2009 15:42:30 +0000 (18:42 +0300)
committerClaudio Saavedra <csaavedra@igalia.com>
Fri, 11 Sep 2009 13:04:43 +0000 (16:04 +0300)
* hildon/hildon-window-private.h: Add private
hildon_window_set_menu_flag()
* hildon/hildon-window.c: (+do_set_has_menu),
(+hildon_window_set_menu_flag): set
"_HILDON_WM_WINDOW_MENU_INDICATOR" to 1 in the window
or remove the property.
(hildon_window_set_main_menu),
(hildon_window_set_app_menu): call above methods to set or remove
the property when a menu is added or removed from the window.

Partially fixes: NB#137814 (Indicator for view menu in app title area)

ChangeLog
hildon/hildon-window-private.h
hildon/hildon-window.c

index 22bb7dc..6d41b2f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,21 @@
 2009-09-08  Claudio Saavedra  <csaavedra@igalia.com>
 
+       Set a special window property for windows with menus
+
+       * hildon/hildon-window-private.h: Add private
+       hildon_window_set_menu_flag()
+       * hildon/hildon-window.c: (+do_set_has_menu),
+       (+hildon_window_set_menu_flag): set
+       "_HILDON_WM_WINDOW_MENU_INDICATOR" to 1 in the window
+       or remove the property.
+       (hildon_window_set_main_menu),
+       (hildon_window_set_app_menu): call above methods to set or remove
+       the property when a menu is added or removed from the window.
+
+       Partially fixes: NB#137814 (Indicator for view menu in app title area)
+
+2009-09-08  Claudio Saavedra  <csaavedra@igalia.com>
+
        Rename and move the methods to set flags to hildon-private.h
 
        * hildon/hildon-gtk.c: (do_set_progress_indicator),
index 97034a6..c9f3368 100644 (file)
@@ -84,6 +84,9 @@ hildon_window_get_active_window                 (void);
 void G_GNUC_INTERNAL
 hildon_window_update_title                      (HildonWindow *window);
 
+void G_GNUC_INTERNAL
+hildon_window_set_menu_flag                     (HildonWindow *window,
+                                                 gboolean   has_menu);
 G_END_DECLS
 
 #endif                                          /* __HILDON_WINDOW_PRIVATE_H__ */
index e61c920..990a2bd 100644 (file)
@@ -95,6 +95,7 @@
 #include                                        "hildon-app-menu-private.h"
 #include                                        "hildon-find-toolbar.h"
 #include                                        "hildon-defines.h"
+#include                                        "hildon-private.h"
 
 #define                                         _(String) gettext(String)
 
@@ -1958,6 +1959,25 @@ hildon_window_add_accel_group (HildonWindow *self,
     gtk_window_add_accel_group (GTK_WINDOW (self), accel_group);
 }
 
+static void
+do_set_has_menu (GtkWindow *window,
+                 gpointer   boolptr)
+{
+    gboolean has_menu = GPOINTER_TO_INT (boolptr);
+    hildon_gtk_window_set_clear_window_flag (window, "_HILDON_WM_WINDOW_MENU_INDICATOR",
+                                             XA_INTEGER, has_menu);
+    g_signal_handlers_disconnect_matched (window, G_SIGNAL_MATCH_FUNC,
+                                          0, 0, NULL, do_set_has_menu, NULL);
+}
+
+void
+hildon_window_set_menu_flag (HildonWindow *window,
+                             gboolean   has_menu)
+{
+    hildon_gtk_window_set_flag (GTK_WINDOW (window), (HildonFlagFunc) do_set_has_menu,
+                                GUINT_TO_POINTER (has_menu));
+}
+
 /**
  * hildon_window_set_main_menu:
  * @self: A #HildonWindow
@@ -1983,6 +2003,8 @@ hildon_window_set_main_menu (HildonWindow* self,
 
     priv = HILDON_WINDOW_GET_PRIVATE (self);
 
+    hildon_window_set_menu_flag (self, menu != NULL);
+
     if (priv->menu != NULL)
     {
        accel_group = gtk_menu_get_accel_group (priv->menu);
@@ -2088,6 +2110,8 @@ hildon_window_set_app_menu                      (HildonWindow  *self,
 
     old_menu = priv->app_menu;
 
+    hildon_window_set_menu_flag (self, menu != NULL);
+
     /* Add new menu */
     priv->app_menu = menu;
     if (menu)