summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJannis Pohlmann <jannis@xfce.org>2009-04-04 23:56:19 +0200
committerJannis Pohlmann <jannis@xfce.org>2009-04-04 23:56:19 +0200
commit681672a4bf447a33ecd36dda83fdc1323bd83745 (patch)
tree825e5f3a03c8198b08e70b2f34c2a820c863a2dc
parent1beaec37e3e59a734660624928b8fbe77b864cf8 (diff)
downloadgarcon-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--AUTHORS3
-rw-r--r--ChangeLog19
-rw-r--r--docs/reference/libxfce4menu-sections.txt2
-rw-r--r--libxfce4menu/xfce-menu-directory.c17
-rw-r--r--libxfce4menu/xfce-menu-directory.h1
-rw-r--r--libxfce4menu/xfce-menu-element.c10
-rw-r--r--libxfce4menu/xfce-menu-element.h2
-rw-r--r--libxfce4menu/xfce-menu-item.c24
-rw-r--r--libxfce4menu/xfce-menu-separator.c11
-rw-r--r--libxfce4menu/xfce-menu.c33
-rw-r--r--po/libxfce4menu-0.1.pot6
-rw-r--r--tests/test-display-menu.c3
-rw-r--r--tests/test-menu-spec.c14
13 files changed, 134 insertions, 11 deletions
diff --git a/AUTHORS b/AUTHORS
index c40ddc1..93558e3 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -1 +1,4 @@
Jannis Pohlmann <jannis@xfce.org>
+
+Contributors:
+Travis Watkins <amaranth@ubuntu.com>
diff --git a/ChangeLog b/ChangeLog
index d17a513..a9d4887 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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));
}