From 7089e90e6ba75e15ebf3734ee8887e21cd6d3c39 Mon Sep 17 00:00:00 2001 From: Claudio Saavedra Date: Thu, 10 Sep 2009 12:48:37 +0300 Subject: [PATCH] Add hildon_app_menu_has_visible_children() private method * hildon/hildon-app-menu-private.h: Add below private method. * hildon/hildon-app-menu.c: (hildon_app_menu_has_visible_children): New method to check the visibility of a HildonAppMenu children. --- ChangeLog | 8 +++++++ hildon/hildon-app-menu-private.h | 3 +++ hildon/hildon-app-menu.c | 46 ++++++++++++++++++++++++++------------ 3 files changed, 43 insertions(+), 14 deletions(-) diff --git a/ChangeLog b/ChangeLog index f776eb3..1c1cd66 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2009-09-10 Claudio Saavedra + + Add hildon_app_menu_has_visible_children() private method + + * hildon/hildon-app-menu-private.h: Add below private method. + * hildon/hildon-app-menu.c: (hildon_app_menu_has_visible_children): + New method to check the visibility of a HildonAppMenu children. + 2009-09-09 Claudio Saavedra Set the window menu flag for application-common menus diff --git a/hildon/hildon-app-menu-private.h b/hildon/hildon-app-menu-private.h index 9ca1a30..0588b50 100644 --- a/hildon/hildon-app-menu-private.h +++ b/hildon/hildon-app-menu-private.h @@ -50,6 +50,9 @@ hildon_app_menu_set_parent_window (HildonAppMenu *self, gpointer G_GNUC_INTERNAL hildon_app_menu_get_parent_window (HildonAppMenu *self); +gboolean G_GNUC_INTERNAL +hildon_app_menu_has_visible_children (HildonAppMenu *menu); + G_END_DECLS #endif /* __HILDON_APP_MENU_PRIVATE_H__ */ diff --git a/hildon/hildon-app-menu.c b/hildon/hildon-app-menu.c index 73ab87d..243c173 100644 --- a/hildon/hildon-app-menu.c +++ b/hildon/hildon-app-menu.c @@ -803,6 +803,37 @@ hildon_app_menu_repack_items (HildonAppMenu *menu, } /** + * hildon_app_menu_has_visible_children: + * @menu: a #HildonAppMenu + * + * Returns whether this menu has any visible items + * and/or filters. If this is %FALSE, the menu will + * not be popped up. + * + * Returns: whether there are visible items or filters + * + * Since: 2.2 + **/ +gboolean +hildon_app_menu_has_visible_children (HildonAppMenu *menu) +{ + HildonAppMenuPrivate *priv; + GList *i; + gboolean show_menu = FALSE; + + priv = HILDON_APP_MENU_GET_PRIVATE (menu); + + /* Don't show menu if it doesn't contain visible items */ + for (i = priv->buttons; i && !show_menu; i = i->next) + show_menu = GTK_WIDGET_VISIBLE (i->data); + + for (i = priv->filters; i && !show_menu; i = i->next) + show_menu = GTK_WIDGET_VISIBLE (i->data); + + return show_menu; +} + +/** * hildon_app_menu_popup: * @menu: a #HildonAppMenu * @parent_window: a #GtkWindow @@ -816,23 +847,10 @@ void hildon_app_menu_popup (HildonAppMenu *menu, GtkWindow *parent_window) { - HildonAppMenuPrivate *priv; - gboolean show_menu = FALSE; - GList *i; - g_return_if_fail (HILDON_IS_APP_MENU (menu)); g_return_if_fail (GTK_IS_WINDOW (parent_window)); - priv = HILDON_APP_MENU_GET_PRIVATE (menu); - - /* Don't show menu if it doesn't contain visible items */ - for (i = priv->buttons; i && !show_menu; i = i->next) - show_menu = GTK_WIDGET_VISIBLE (i->data); - - for (i = priv->filters; i && !show_menu; i = i->next) - show_menu = GTK_WIDGET_VISIBLE (i->data); - - if (show_menu) { + if (hildon_app_menu_has_visible_children (menu)) { hildon_app_menu_set_parent_window (menu, parent_window); gtk_widget_show (GTK_WIDGET (menu)); } -- 1.7.9.5