[gnome-panel] menu: add two properties to GpMenu
- From: Alberts Muktupāvels <muktupavels src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-panel] menu: add two properties to GpMenu
- Date: Sun, 4 Feb 2018 21:05:21 +0000 (UTC)
commit 4b6e93014e631143ba0bb43b5c4bff86825581f9
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date: Sun Feb 4 22:39:38 2018 +0200
menu: add two properties to GpMenu
modules/menu/gp-menu-bar-applet.c | 2 +-
modules/menu/gp-menu.c | 76 +++++++++++++++++++++++++++++++++----
modules/menu/gp-menu.h | 3 +-
3 files changed, 71 insertions(+), 10 deletions(-)
---
diff --git a/modules/menu/gp-menu-bar-applet.c b/modules/menu/gp-menu-bar-applet.c
index 6c52641..3d29312 100644
--- a/modules/menu/gp-menu-bar-applet.c
+++ b/modules/menu/gp-menu-bar-applet.c
@@ -123,7 +123,7 @@ append_applications_item (GpMenuBarApplet *applet)
menu = get_applications_menu ();
- applet->applications_menu = gp_menu_new (GP_APPLET (applet), menu);
+ applet->applications_menu = gp_menu_new (GP_APPLET (applet), menu, TRUE);
g_free (menu);
gtk_menu_item_set_submenu (GTK_MENU_ITEM (applet->applications_item),
diff --git a/modules/menu/gp-menu.c b/modules/menu/gp-menu.c
index 64f708e..6976d80 100644
--- a/modules/menu/gp-menu.c
+++ b/modules/menu/gp-menu.c
@@ -30,9 +30,12 @@ struct _GpMenu
gchar *name;
GpApplet *applet;
+ gboolean required;
GMenuTree *tree;
+ gboolean empty;
+
guint reload_id;
gulong locked_down_id;
@@ -45,6 +48,9 @@ enum
PROP_NAME,
PROP_APPLET,
+ PROP_REQUIRED,
+
+ PROP_EMPTY,
LAST_PROP
};
@@ -274,22 +280,42 @@ static void
menu_reload (GpMenu *menu)
{
GError *error;
- GMenuTreeDirectory *directory;
+ gboolean loaded;
+ GList *children;
+ gboolean empty;
gtk_container_foreach (GTK_CONTAINER (menu), remove_item, NULL);
error = NULL;
- if (!gmenu_tree_load_sync (menu->tree, &error))
+ loaded = gmenu_tree_load_sync (menu->tree, &error);
+
+ if (error != NULL)
{
- g_warning ("Failed to load menu: %s", error->message);
+ if (menu->required)
+ g_warning ("%s", error->message);
+
g_clear_error (&error);
+ }
+
+ if (loaded)
+ {
+ GMenuTreeDirectory *directory;
- return;
+ directory = gmenu_tree_get_directory_from_path (menu->tree, "/");
+ directory_to_menu_items (directory, GTK_WIDGET (menu), menu);
+ gmenu_tree_item_unref (directory);
}
- directory = gmenu_tree_get_directory_from_path (menu->tree, "/");
- directory_to_menu_items (directory, GTK_WIDGET (menu), menu);
- gmenu_tree_item_unref (directory);
+ children = gtk_container_get_children (GTK_CONTAINER (menu));
+ empty = g_list_length (children) == 0;
+ g_list_free (children);
+
+ if (menu->empty == empty)
+ return;
+
+ menu->empty = empty;
+
+ g_object_notify_by_pspec (G_OBJECT (menu), menu_properties[PROP_EMPTY]);
}
static gboolean
@@ -418,6 +444,10 @@ gp_menu_get_property (GObject *object,
GValue *value,
GParamSpec *pspec)
{
+ GpMenu *menu;
+
+ menu = GP_MENU (object);
+
switch (property_id)
{
case PROP_NAME:
@@ -428,6 +458,14 @@ gp_menu_get_property (GObject *object,
g_assert_not_reached ();
break;
+ case PROP_REQUIRED:
+ g_assert_not_reached ();
+ break;
+
+ case PROP_EMPTY:
+ g_value_set_boolean (value, menu->empty);
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
@@ -456,6 +494,14 @@ gp_menu_set_property (GObject *object,
menu->applet = g_value_get_object (value);
break;
+ case PROP_REQUIRED:
+ menu->required = g_value_get_boolean (value);
+ break;
+
+ case PROP_EMPTY:
+ g_assert_not_reached ();
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
@@ -477,6 +523,18 @@ install_properties (GObjectClass *object_class)
G_PARAM_CONSTRUCT_ONLY | G_PARAM_WRITABLE |
G_PARAM_STATIC_STRINGS);
+ menu_properties[PROP_REQUIRED] =
+ g_param_spec_boolean ("required", "Required", "Required",
+ TRUE,
+ G_PARAM_CONSTRUCT_ONLY | G_PARAM_WRITABLE |
+ G_PARAM_STATIC_STRINGS);
+
+ menu_properties[PROP_EMPTY] =
+ g_param_spec_boolean ("empty", "Empty", "Empty",
+ TRUE,
+ G_PARAM_READABLE | G_PARAM_EXPLICIT_NOTIFY |
+ G_PARAM_STATIC_STRINGS);
+
g_object_class_install_properties (object_class, LAST_PROP, menu_properties);
}
@@ -503,10 +561,12 @@ gp_menu_init (GpMenu *menu)
GtkWidget *
gp_menu_new (GpApplet *applet,
- const gchar *name)
+ const gchar *name,
+ gboolean required)
{
return g_object_new (GP_TYPE_MENU,
"applet", applet,
"name", name,
+ "required", required,
NULL);
}
diff --git a/modules/menu/gp-menu.h b/modules/menu/gp-menu.h
index 8f468b6..9367545 100644
--- a/modules/menu/gp-menu.h
+++ b/modules/menu/gp-menu.h
@@ -26,7 +26,8 @@ G_BEGIN_DECLS
G_DECLARE_FINAL_TYPE (GpMenu, gp_menu, GP, MENU, GtkMenu)
GtkWidget *gp_menu_new (GpApplet *applet,
- const gchar *name);
+ const gchar *name,
+ gboolean required);
G_END_DECLS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]