diff options
author | Jannis Pohlmann <jannis@xfce.org> | 2009-04-04 23:56:19 +0200 |
---|---|---|
committer | Jannis Pohlmann <jannis@xfce.org> | 2009-04-04 23:56:19 +0200 |
commit | 681672a4bf447a33ecd36dda83fdc1323bd83745 (patch) | |
tree | 825e5f3a03c8198b08e70b2f34c2a820c863a2dc | |
parent | 1beaec37e3e59a734660624928b8fbe77b864cf8 (diff) | |
download | garcon-681672a4bf447a33ecd36dda83fdc1323bd83745.tar.gz |
* AUTHORS: Add Travis Watkins as a contributor.
* docs/reference: Update API docs.
* libxfce4menu/xfce-menu-directory.{c,h},
libxfce4menu/xfce-menu-element.{c,h},
libxfce4menu/xfce-menu-item.c,
libxfce4menu/xfce-menu-separator.c, libxfce4menu/xfce-menu.c: Add
xfce_menu_element_get_visible() to XfceMenuElement. The
XfceMenuSeparator implementation always returns TRUE while the
XfceMenuItem implementation checks the Hidden/OnlyShowIn/NotShowIn
values of the corresponding desktop entry. XfceMenu checks the
Hidden/OnlyShowIn/NotShowIn values of its XfceMenuDirectory as well
as whether there are any visible child elements. Thanks to Travis
Watkins for the patch.
* tests/test-display-menu.c, tests/test-menu-spec.c: Update tests to
reflect the latest API changes. Thanks to Travis for updating
test-display-menu.c.
-rw-r--r-- | AUTHORS | 3 | ||||
-rw-r--r-- | ChangeLog | 19 | ||||
-rw-r--r-- | docs/reference/libxfce4menu-sections.txt | 2 | ||||
-rw-r--r-- | libxfce4menu/xfce-menu-directory.c | 17 | ||||
-rw-r--r-- | libxfce4menu/xfce-menu-directory.h | 1 | ||||
-rw-r--r-- | libxfce4menu/xfce-menu-element.c | 10 | ||||
-rw-r--r-- | libxfce4menu/xfce-menu-element.h | 2 | ||||
-rw-r--r-- | libxfce4menu/xfce-menu-item.c | 24 | ||||
-rw-r--r-- | libxfce4menu/xfce-menu-separator.c | 11 | ||||
-rw-r--r-- | libxfce4menu/xfce-menu.c | 33 | ||||
-rw-r--r-- | po/libxfce4menu-0.1.pot | 6 | ||||
-rw-r--r-- | tests/test-display-menu.c | 3 | ||||
-rw-r--r-- | tests/test-menu-spec.c | 14 |
13 files changed, 134 insertions, 11 deletions
@@ -1 +1,4 @@ Jannis Pohlmann <jannis@xfce.org> + +Contributors: +Travis Watkins <amaranth@ubuntu.com> @@ -1,3 +1,22 @@ +2009-04-04 Jannis Pohlmann <jannis@xfce.org> + + * AUTHORS: Add Travis Watkins as a contributor. + * docs/reference: Update API docs. + * libxfce4menu/xfce-menu-directory.{c,h}, + libxfce4menu/xfce-menu-element.{c,h}, + libxfce4menu/xfce-menu-item.c, + libxfce4menu/xfce-menu-separator.c, libxfce4menu/xfce-menu.c: Add + xfce_menu_element_get_visible() to XfceMenuElement. The + XfceMenuSeparator implementation always returns TRUE while the + XfceMenuItem implementation checks the Hidden/OnlyShowIn/NotShowIn + values of the corresponding desktop entry. XfceMenu checks the + Hidden/OnlyShowIn/NotShowIn values of its XfceMenuDirectory as well + as whether there are any visible child elements. Thanks to Travis + Watkins for the patch. + * tests/test-display-menu.c, tests/test-menu-spec.c: Update tests to + reflect the latest API changes. Thanks to Travis for updating + test-display-menu.c. + 2009-03-15 Jannis Pohlmann <jannis@xfce.org> * STATUS: Update STATUS file. diff --git a/docs/reference/libxfce4menu-sections.txt b/docs/reference/libxfce4menu-sections.txt index 3a8c831..36765c6 100644 --- a/docs/reference/libxfce4menu-sections.txt +++ b/docs/reference/libxfce4menu-sections.txt @@ -35,6 +35,7 @@ xfce_menu_directory_get_no_display xfce_menu_directory_set_no_display xfce_menu_directory_get_hidden xfce_menu_directory_show_in_environment +xfce_menu_directory_get_visible xfce_menu_directory_equal <SUBSECTION Standard> XFCE_MENU_DIRECTORY @@ -186,6 +187,7 @@ XfceMenuElement XfceMenuElementIface xfce_menu_element_get_name xfce_menu_element_get_icon_name +xfce_menu_element_get_visible <SUBSECTION Standard> XFCE_MENU_ELEMENT XFCE_IS_MENU_ELEMENT diff --git a/libxfce4menu/xfce-menu-directory.c b/libxfce4menu/xfce-menu-directory.c index 58e3571..450b4ec 100644 --- a/libxfce4menu/xfce-menu-directory.c +++ b/libxfce4menu/xfce-menu-directory.c @@ -624,6 +624,23 @@ xfce_menu_directory_show_in_environment (XfceMenuDirectory *directory) gboolean +xfce_menu_directory_get_visible (XfceMenuDirectory *directory) +{ + g_return_val_if_fail (XFCE_IS_MENU_DIRECTORY (directory), FALSE); + + if (!xfce_menu_directory_show_in_environment (directory)) + return FALSE; + else if (xfce_menu_directory_get_hidden (directory)) + return FALSE; + else if (xfce_menu_directory_get_no_display (directory)) + return FALSE; + + return TRUE; +} + + + +gboolean xfce_menu_directory_equal (XfceMenuDirectory *directory, XfceMenuDirectory *other) { diff --git a/libxfce4menu/xfce-menu-directory.h b/libxfce4menu/xfce-menu-directory.h index 562621a..7bc71e2 100644 --- a/libxfce4menu/xfce-menu-directory.h +++ b/libxfce4menu/xfce-menu-directory.h @@ -59,6 +59,7 @@ void xfce_menu_directory_set_no_display (XfceMenuDirect gboolean no_display); gboolean xfce_menu_directory_get_hidden (XfceMenuDirectory *directory); gboolean xfce_menu_directory_show_in_environment (XfceMenuDirectory *directory); +gboolean xfce_menu_directory_get_visible (XfceMenuDirectory *directory); gboolean xfce_menu_directory_equal (XfceMenuDirectory *directory, XfceMenuDirectory *other); diff --git a/libxfce4menu/xfce-menu-element.c b/libxfce4menu/xfce-menu-element.c index 2a77dfa..8390a61 100644 --- a/libxfce4menu/xfce-menu-element.c +++ b/libxfce4menu/xfce-menu-element.c @@ -83,3 +83,13 @@ xfce_menu_element_get_icon_name (XfceMenuElement *element) g_return_val_if_fail (XFCE_IS_MENU_ELEMENT (element), NULL); return (*XFCE_MENU_ELEMENT_GET_IFACE (element)->get_icon_name) (element); } + + + +gboolean +xfce_menu_element_get_visible (XfceMenuElement *element) +{ + g_return_val_if_fail (XFCE_IS_MENU_ELEMENT (element), FALSE); + return (*XFCE_MENU_ELEMENT_GET_IFACE (element)->get_visible) (element); +} + diff --git a/libxfce4menu/xfce-menu-element.h b/libxfce4menu/xfce-menu-element.h index c262445..1aefde7 100644 --- a/libxfce4menu/xfce-menu-element.h +++ b/libxfce4menu/xfce-menu-element.h @@ -46,12 +46,14 @@ struct _XfceMenuElementIface /* Virtual methods */ const gchar *(*get_name) (XfceMenuElement *element); const gchar *(*get_icon_name) (XfceMenuElement *element); + gboolean (*get_visible) (XfceMenuElement *element); }; GType xfce_menu_element_get_type (void) G_GNUC_CONST; const gchar *xfce_menu_element_get_name (XfceMenuElement *element); const gchar *xfce_menu_element_get_icon_name (XfceMenuElement *element); +gboolean xfce_menu_element_get_visible (XfceMenuElement *element); G_END_DECLS diff --git a/libxfce4menu/xfce-menu-item.c b/libxfce4menu/xfce-menu-item.c index 06e4016..5ba4597 100644 --- a/libxfce4menu/xfce-menu-item.c +++ b/libxfce4menu/xfce-menu-item.c @@ -69,6 +69,7 @@ static void xfce_menu_item_set_property (GObject GParamSpec *pspec); static const gchar *xfce_menu_item_get_element_name (XfceMenuElement *element); static const gchar *xfce_menu_item_get_element_icon_name (XfceMenuElement *element); +static gboolean xfce_menu_item_get_element_visible (XfceMenuElement *element); @@ -362,6 +363,7 @@ xfce_menu_item_element_init (XfceMenuElementIface *iface) { iface->get_name = xfce_menu_item_get_element_name; iface->get_icon_name = xfce_menu_item_get_element_icon_name; + iface->get_visible = xfce_menu_item_get_element_visible; } @@ -1249,3 +1251,25 @@ xfce_menu_item_get_element_icon_name (XfceMenuElement *element) g_return_val_if_fail (XFCE_IS_MENU_ITEM (element), NULL); return XFCE_MENU_ITEM (element)->priv->icon_name; } + + + +gboolean +xfce_menu_item_get_element_visible (XfceMenuElement *element) +{ + XfceMenuItem *item; + + g_return_val_if_fail (XFCE_IS_MENU_ITEM (element), FALSE); + + item = XFCE_MENU_ITEM (element); + + if (!xfce_menu_item_show_in_environment (item)) + return FALSE; + else if (xfce_menu_item_get_no_display (item)) + return FALSE; + + /* TODO Check TryExec as well */ + + return TRUE; +} + diff --git a/libxfce4menu/xfce-menu-separator.c b/libxfce4menu/xfce-menu-separator.c index 8cdc3d8..72f53da 100644 --- a/libxfce4menu/xfce-menu-separator.c +++ b/libxfce4menu/xfce-menu-separator.c @@ -34,6 +34,7 @@ static void xfce_menu_separator_init (XfceMenuSeparator static void xfce_menu_separator_finalize (GObject *object); static const gchar *xfce_menu_separator_get_element_name (XfceMenuElement *element); static const gchar *xfce_menu_separator_get_element_icon_name (XfceMenuElement *element); +static gboolean xfce_menu_separator_get_element_visible (XfceMenuElement *element); @@ -134,6 +135,7 @@ xfce_menu_separator_element_init (XfceMenuElementIface *iface) { iface->get_name = xfce_menu_separator_get_element_name; iface->get_icon_name = xfce_menu_separator_get_element_icon_name; + iface->get_visible = xfce_menu_separator_get_element_visible; } @@ -174,3 +176,12 @@ xfce_menu_separator_get_element_icon_name (XfceMenuElement *element) { return NULL; } + + + +static gboolean +xfce_menu_separator_get_element_visible (XfceMenuElement *element) +{ + return TRUE; +} + diff --git a/libxfce4menu/xfce-menu.c b/libxfce4menu/xfce-menu.c index 8d82117..6c55653 100644 --- a/libxfce4menu/xfce-menu.c +++ b/libxfce4menu/xfce-menu.c @@ -133,6 +133,7 @@ static gint xfce_menu_compare_items (gcon gconstpointer *b); static const gchar *xfce_menu_get_element_name (XfceMenuElement *element); static const gchar *xfce_menu_get_element_icon_name (XfceMenuElement *element); +static gboolean xfce_menu_get_element_visible (XfceMenuElement *element); static void xfce_menu_monitor_start (XfceMenu *menu); static void xfce_menu_monitor_stop (XfceMenu *menu); @@ -267,6 +268,7 @@ xfce_menu_element_init (XfceMenuElementIface *iface) { iface->get_name = xfce_menu_get_element_name; iface->get_icon_name = xfce_menu_get_element_icon_name; + iface->get_visible = xfce_menu_get_element_visible; } @@ -1449,6 +1451,37 @@ xfce_menu_get_element_icon_name (XfceMenuElement *element) +static gboolean +xfce_menu_get_element_visible (XfceMenuElement *element) +{ + XfceMenu *menu; + GList *items; + GList *iter; + gboolean visible = FALSE; + + g_return_val_if_fail (XFCE_IS_MENU (element), FALSE); + + menu = XFCE_MENU (element); + + if (menu->priv->directory != NULL) + { + if (!xfce_menu_directory_get_visible (menu->priv->directory)) + return FALSE; + } + + items = xfce_menu_get_elements (menu); + for (iter = items; visible != TRUE && iter != NULL; iter = g_list_next (iter)) + { + if (xfce_menu_element_get_visible (XFCE_MENU_ELEMENT (iter->data))) + visible = TRUE; + } + + g_list_free (items); + return visible; +} + + + static void item_monitor_start (const gchar *desktop_id, XfceMenuItem *item, diff --git a/po/libxfce4menu-0.1.pot b/po/libxfce4menu-0.1.pot index 107b314..ef7825d 100644 --- a/po/libxfce4menu-0.1.pot +++ b/po/libxfce4menu-0.1.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-03-15 04:13+0100\n" +"POT-Creation-Date: 2009-04-04 23:40+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -26,11 +26,11 @@ msgstr "" msgid "Could not load menu file data from %s" msgstr "" -#: .././tests/test-display-menu.c:354 +#: .././tests/test-display-menu.c:357 msgid "XfceMenu: Display Menu Test" msgstr "" #. Create button -#: .././tests/test-display-menu.c:363 +#: .././tests/test-display-menu.c:366 msgid "_Show menu" msgstr "" diff --git a/tests/test-display-menu.c b/tests/test-display-menu.c index c94149d..3bf97cb 100644 --- a/tests/test-display-menu.c +++ b/tests/test-display-menu.c @@ -262,6 +262,9 @@ create_menu_widgets (GtkWidget *gtk_menu, /* Iterate over menu items */ for (iter = items; iter != NULL; iter = g_list_next (iter)) { + if (!xfce_menu_element_get_visible (iter->data)) + continue; + if (XFCE_IS_MENU_ITEM (iter->data)) { /* Add menu item to the menu */ diff --git a/tests/test-menu-spec.c b/tests/test-menu-spec.c index 7d51d29..516f770 100644 --- a/tests/test-menu-spec.c +++ b/tests/test-menu-spec.c @@ -43,6 +43,9 @@ print_menu (XfceMenu *menu, const gchar *path) GList *iter; gchar *name; + if (!xfce_menu_element_get_visible (XFCE_MENU_ELEMENT (menu))) + return; + /* Determine menu name */ directory = xfce_menu_get_directory (menu); @@ -61,10 +64,8 @@ print_menu (XfceMenu *menu, const gchar *path) /* Print child menus */ for (iter = menus; iter != NULL; iter = g_list_next (iter)) { - XfceMenuDirectory *submenu_directory = xfce_menu_get_directory (XFCE_MENU (iter->data)); - - /* Don't display hidden menus */ - if (G_LIKELY (submenu_directory == NULL || !xfce_menu_directory_get_no_display (submenu_directory))) + /* Only display menus which are not hidden or excluded from this environment */ + if (G_LIKELY (xfce_menu_element_get_visible (iter->data))) print_menu (XFCE_MENU (iter->data), name); } @@ -77,10 +78,7 @@ print_menu (XfceMenu *menu, const gchar *path) /* Print menu items */ for (iter = items; iter != NULL; iter = g_list_next (iter)) { - if (!XFCE_IS_MENU_ITEM (iter->data)) - continue; - - if (G_UNLIKELY (!xfce_menu_item_get_no_display (iter->data))) + if (XFCE_IS_MENU_ITEM (iter->data) && xfce_menu_element_get_visible (iter->data)) g_printf ("%s\t%s\t%s\n", name, xfce_menu_item_get_desktop_id (iter->data), xfce_menu_item_get_filename (iter->data)); } |