[gnome-panel] menu: add a standalone menu
- From: Alberts Muktupāvels <muktupavels src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-panel] menu: add a standalone menu
- Date: Mon, 17 Sep 2018 14:57:45 +0000 (UTC)
commit 26b81379c755c214f48c6cf8b1f273d1be7398b5
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date: Mon Sep 17 15:01:11 2018 +0300
menu: add a standalone menu
modules/menu/gp-menu-module.c | 141 ++++++++++++++++++++++++++++++++++++++++++
1 file changed, 141 insertions(+)
---
diff --git a/modules/menu/gp-menu-module.c b/modules/menu/gp-menu-module.c
index 291b2bc6b..c22189f3f 100644
--- a/modules/menu/gp-menu-module.c
+++ b/modules/menu/gp-menu-module.c
@@ -24,13 +24,18 @@
#include <glib/gi18n-lib.h>
#include <gmenu-tree.h>
+#include <libgnome-panel/gp-image-menu-item.h>
#include <libgnome-panel/gp-module.h>
+#include "gp-lock-logout.h"
#include "gp-main-menu-applet.h"
#include "gp-menu-bar-applet.h"
#include "gp-menu-button-applet.h"
#include "gp-menu-utils.h"
+#include "gp-menu.h"
#include "gp-user-menu-applet.h"
+#include "gp-user-menu.h"
+#include "gp-places-menu.h"
typedef struct
{
@@ -429,6 +434,140 @@ menu_get_applet_id_from_iid (const gchar *iid)
return NULL;
}
+typedef struct
+{
+ gboolean enable_tooltips;
+ gboolean locked_down;
+ guint menu_icon_size;
+
+ GpLockLogout *lock_logout;
+} StandaloneMenuData;
+
+static void
+standalone_menu_data_free (gpointer user_data)
+{
+ StandaloneMenuData *data;
+
+ data = (StandaloneMenuData *) user_data;
+
+ g_object_unref (data->lock_logout);
+ g_free (data);
+}
+
+static void
+append_places_item (StandaloneMenuData *data,
+ GtkMenu *menu)
+{
+ GtkWidget *icon;
+ GtkWidget *item;
+ GtkWidget *places_menu;
+
+ icon = gtk_image_new_from_icon_name ("folder", GTK_ICON_SIZE_MENU);
+ gtk_image_set_pixel_size (GTK_IMAGE (icon), data->menu_icon_size);
+
+ item = gp_image_menu_item_new_with_label (_("Places"));
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
+ gp_image_menu_item_set_image (GP_IMAGE_MENU_ITEM (item), icon);
+ gtk_widget_show (item);
+
+ places_menu = gp_places_menu_new ();
+ gtk_menu_item_set_submenu (GTK_MENU_ITEM (item), places_menu);
+
+ g_object_set (places_menu,
+ "enable-tooltips", data->enable_tooltips,
+ "locked-down", data->locked_down,
+ "menu-icon-size", data->menu_icon_size,
+ NULL);
+}
+
+static void
+append_user_item (StandaloneMenuData *data,
+ GtkMenu *menu)
+{
+
+ GtkWidget *icon;
+ gchar *user_name;
+ GtkWidget *item;
+ GtkWidget *user_menu;
+
+ icon = gtk_image_new_from_icon_name ("computer", GTK_ICON_SIZE_MENU);
+ gtk_image_set_pixel_size (GTK_IMAGE (icon), data->menu_icon_size);
+
+ user_name = gp_menu_utils_get_user_name ();
+ item = gp_image_menu_item_new_with_label (user_name);
+ g_free (user_name);
+
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
+ gp_image_menu_item_set_image (GP_IMAGE_MENU_ITEM (item), icon);
+ gtk_widget_show (item);
+
+ user_menu = gp_user_menu_new ();
+ gtk_menu_item_set_submenu (GTK_MENU_ITEM (item), user_menu);
+
+ g_object_set (user_menu,
+ "enable-tooltips", data->enable_tooltips,
+ "locked-down", data->locked_down,
+ "menu-icon-size", data->menu_icon_size,
+ NULL);
+
+ g_object_bind_property (user_menu, "empty", item, "visible",
+ G_BINDING_DEFAULT | G_BINDING_SYNC_CREATE |
+ G_BINDING_INVERT_BOOLEAN);
+}
+
+static void
+append_menu_items_cb (GtkMenu *menu,
+ StandaloneMenuData *data)
+{
+ append_separator_if_needed (GTK_MENU (menu));
+ append_places_item (data, menu);
+ append_user_item (data, menu);
+
+ gp_lock_logout_append_to_menu (data->lock_logout, GTK_MENU (menu));
+}
+
+static GtkWidget *
+menu_get_standalone_menu (gboolean enable_tooltips,
+ gboolean locked_down,
+ guint menu_icon_size)
+{
+ StandaloneMenuData *data;
+ gchar *filename;
+ GtkWidget *menu;
+
+ data = g_new0 (StandaloneMenuData, 1);
+
+ data->enable_tooltips = enable_tooltips;
+ data->locked_down = locked_down;
+ data->menu_icon_size = menu_icon_size;
+
+ filename = gp_menu_utils_get_applications_menu ();
+
+ menu = g_object_new (GP_TYPE_MENU,
+ "name", filename,
+ "required", TRUE,
+ "enable-tooltips", data->enable_tooltips,
+ "locked-down", data->locked_down,
+ "menu-icon-size", data->menu_icon_size,
+ NULL);
+
+ data->lock_logout = g_object_new (GP_TYPE_LOCK_LOGOUT,
+ "enable-tooltips", data->enable_tooltips,
+ "locked-down", data->locked_down,
+ "menu-icon-size", data->menu_icon_size,
+ NULL);
+
+ gp_menu_set_append_func (GP_MENU (menu),
+ (GpAppendMenuItemsFunc) append_menu_items_cb,
+ data);
+
+ g_object_set_data_full (G_OBJECT (menu), "data", data,
+ standalone_menu_data_free);
+ g_free (filename);
+
+ return menu;
+}
+
void
gp_module_load (GpModule *module)
{
@@ -446,4 +585,6 @@ gp_module_load (GpModule *module)
gp_module_set_get_applet_info (module, menu_get_applet_info);
gp_module_set_compatibility (module, menu_get_applet_id_from_iid);
+
+ gp_module_set_standalone_menu (module, menu_get_standalone_menu);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]