[gnome-panel] status-notifier: respect the menu-icon-size setting
- From: Alberts Muktupāvels <muktupavels src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-panel] status-notifier: respect the menu-icon-size setting
- Date: Wed, 31 Jan 2018 21:20:12 +0000 (UTC)
commit 223143c53e2c3e1335a2d425632e7f55b68b08c5
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date: Tue Jan 30 23:45:10 2018 +0200
status-notifier: respect the menu-icon-size setting
modules/status-notifier/sn-dbus-menu-item.c | 40 ++++++++++++++++++++++-----
modules/status-notifier/sn-dbus-menu-item.h | 8 +++++-
modules/status-notifier/sn-dbus-menu.c | 23 ++++++++++++++-
modules/status-notifier/sn-dbus-menu.h | 4 ++-
modules/status-notifier/sn-item.c | 2 +-
5 files changed, 65 insertions(+), 12 deletions(-)
---
diff --git a/modules/status-notifier/sn-dbus-menu-item.c b/modules/status-notifier/sn-dbus-menu-item.c
index 8bbed4f..95a3ab9 100644
--- a/modules/status-notifier/sn-dbus-menu-item.c
+++ b/modules/status-notifier/sn-dbus-menu-item.c
@@ -23,14 +23,15 @@
static void
set_image_from_icon_name (GpImageMenuItem *item,
- const gchar *icon_name)
+ const gchar *icon_name,
+ guint icon_size)
{
GtkWidget *image;
image = gtk_image_new ();
gtk_image_set_from_icon_name (GTK_IMAGE (image), icon_name, GTK_ICON_SIZE_MENU);
- gtk_image_set_pixel_size (GTK_IMAGE (image), 16);
+ gtk_image_set_pixel_size (GTK_IMAGE (image), icon_size);
gp_image_menu_item_set_image (item, image);
}
@@ -61,14 +62,15 @@ get_pixbuf_at_size (GdkPixbuf *pixbuf,
static void
set_image_from_pixbuf (GpImageMenuItem *item,
- GdkPixbuf *pixbuf)
+ GdkPixbuf *pixbuf,
+ guint icon_size)
{
GtkWidget *image;
GdkPixbuf *tmp;
image = gtk_image_new ();
- tmp = get_pixbuf_at_size (pixbuf, 16);
+ tmp = get_pixbuf_at_size (pixbuf, icon_size);
gtk_image_set_from_pixbuf (GTK_IMAGE (image), tmp);
g_object_unref (tmp);
@@ -79,16 +81,18 @@ static void
update_icon (SnDBusMenuItem *item)
{
GpImageMenuItem *menu_item;
+ guint icon_size;
if (!GP_IS_IMAGE_MENU_ITEM (item->item))
return;
menu_item = GP_IMAGE_MENU_ITEM (item->item);
+ icon_size = gp_applet_get_menu_icon_size (GP_APPLET (item->applet));
if (item->icon_name)
- set_image_from_icon_name (menu_item, item->icon_name);
+ set_image_from_icon_name (menu_item, item->icon_name, icon_size);
else if (item->icon_data)
- set_image_from_pixbuf (menu_item, item->icon_data);
+ set_image_from_pixbuf (menu_item, item->icon_data, icon_size);
else
gp_image_menu_item_set_image (menu_item, NULL);
}
@@ -195,8 +199,17 @@ sn_shortcuts_free (SnShortcut **shortcuts)
g_free (shortcuts);
}
+static void
+menu_icon_size_cb (GpApplet *applet,
+ GParamSpec *pspec,
+ SnDBusMenuItem *item)
+{
+ update_icon (item);
+}
+
SnDBusMenuItem *
-sn_dbus_menu_item_new (GVariant *props)
+sn_dbus_menu_item_new (SnApplet *applet,
+ GVariant *props)
{
SnDBusMenuItem *item;
GVariantIter iter;
@@ -205,6 +218,8 @@ sn_dbus_menu_item_new (GVariant *props)
item = g_new0 (SnDBusMenuItem, 1);
+ item->applet = applet;
+
item->enabled = TRUE;
item->toggle_state = -1;
item->visible = TRUE;
@@ -268,6 +283,11 @@ sn_dbus_menu_item_new (GVariant *props)
{
item->item = gp_image_menu_item_new ();
+ item->menu_icon_size_id = g_signal_connect (item->applet,
+ "notify::menu-icon-size",
+ G_CALLBACK (menu_icon_size_cb),
+ item);
+
update_icon (item);
}
@@ -323,6 +343,12 @@ sn_dubs_menu_item_free (gpointer data)
if (item == NULL)
return;
+ if (item->menu_icon_size_id != 0)
+ {
+ g_signal_handler_disconnect (item->applet, item->menu_icon_size_id);
+ item->menu_icon_size_id = 0;
+ }
+
g_clear_pointer (&item->accessible_desc, g_free);
g_clear_pointer (&item->children_display, g_free);
g_clear_pointer (&item->disposition, g_free);
diff --git a/modules/status-notifier/sn-dbus-menu-item.h b/modules/status-notifier/sn-dbus-menu-item.h
index c89de5c..b943ff3 100644
--- a/modules/status-notifier/sn-dbus-menu-item.h
+++ b/modules/status-notifier/sn-dbus-menu-item.h
@@ -19,6 +19,7 @@
#define SN_DUBS_MENU_ITEM_H
#include <gtk/gtk.h>
+#include "sn-applet.h"
G_BEGIN_DECLS
@@ -30,6 +31,8 @@ typedef struct
typedef struct
{
+ SnApplet *applet;
+
gchar *accessible_desc;
gchar *children_display;
gchar *disposition;
@@ -47,9 +50,12 @@ typedef struct
GtkMenu *submenu;
gulong activate_id;
+
+ gulong menu_icon_size_id;
} SnDBusMenuItem;
-SnDBusMenuItem *sn_dbus_menu_item_new (GVariant *props);
+SnDBusMenuItem *sn_dbus_menu_item_new (SnApplet *applet,
+ GVariant *props);
void sn_dubs_menu_item_free (gpointer data);
diff --git a/modules/status-notifier/sn-dbus-menu.c b/modules/status-notifier/sn-dbus-menu.c
index 4f28f49..2d7e567 100644
--- a/modules/status-notifier/sn-dbus-menu.c
+++ b/modules/status-notifier/sn-dbus-menu.c
@@ -25,6 +25,8 @@ struct _SnDBusMenu
{
GtkMenu parent;
+ SnApplet *applet;
+
GHashTable *items;
GCancellable *cancellable;
@@ -40,6 +42,8 @@ enum
{
PROP_0,
+ PROP_APPLET,
+
PROP_BUS_NAME,
PROP_OBJECT_PATH,
@@ -97,7 +101,7 @@ layout_update_item (SnDBusMenu *menu,
if (item == NULL)
{
- item = sn_dbus_menu_item_new (props);
+ item = sn_dbus_menu_item_new (menu->applet, props);
g_object_set_data (G_OBJECT (item->item), "item-id", GUINT_TO_POINTER (id));
gtk_menu_shell_append (GTK_MENU_SHELL (gtk_menu), item->item);
@@ -378,6 +382,8 @@ sn_dbus_menu_dispose (GObject *object)
menu = SN_DBUS_MENU (object);
+ menu->applet = NULL;
+
if (menu->name_id > 0)
{
g_bus_unwatch_name (menu->name_id);
@@ -418,6 +424,11 @@ sn_dbus_menu_set_property (GObject *object,
switch (property_id)
{
+ case PROP_APPLET:
+ g_assert (menu->applet == NULL);
+ menu->applet = g_value_get_object (value);
+ break;
+
case PROP_BUS_NAME:
menu->bus_name = g_value_dup_string (value);
break;
@@ -435,6 +446,12 @@ sn_dbus_menu_set_property (GObject *object,
static void
install_properties (GObjectClass *object_class)
{
+ properties[PROP_APPLET] =
+ g_param_spec_object ("applet", "Applet", "Applet",
+ SN_TYPE_APPLET,
+ G_PARAM_CONSTRUCT_ONLY | G_PARAM_WRITABLE |
+ G_PARAM_STATIC_STRINGS);
+
properties[PROP_BUS_NAME] =
g_param_spec_string ("bus-name", "bus-name", "bus-name", NULL,
G_PARAM_CONSTRUCT_ONLY | G_PARAM_WRITABLE |
@@ -471,10 +488,12 @@ sn_dbus_menu_init (SnDBusMenu *menu)
}
GtkMenu *
-sn_dbus_menu_new (const gchar *bus_name,
+sn_dbus_menu_new (SnApplet *applet,
+ const gchar *bus_name,
const gchar *object_path)
{
return g_object_new (SN_TYPE_DBUS_MENU,
+ "applet", applet,
"bus-name", bus_name,
"object-path", object_path,
NULL);
diff --git a/modules/status-notifier/sn-dbus-menu.h b/modules/status-notifier/sn-dbus-menu.h
index 39907d0..4c40768 100644
--- a/modules/status-notifier/sn-dbus-menu.h
+++ b/modules/status-notifier/sn-dbus-menu.h
@@ -19,13 +19,15 @@
#define SN_DBUS_MENU_H
#include <gtk/gtk.h>
+#include "sn-applet.h"
G_BEGIN_DECLS
#define SN_TYPE_DBUS_MENU sn_dbus_menu_get_type ()
G_DECLARE_FINAL_TYPE (SnDBusMenu, sn_dbus_menu, SN, DBUS_MENU, GtkMenu)
-GtkMenu *sn_dbus_menu_new (const gchar *bus_name,
+GtkMenu *sn_dbus_menu_new (SnApplet *applet,
+ const gchar *bus_name,
const gchar *object_path);
G_END_DECLS
diff --git a/modules/status-notifier/sn-item.c b/modules/status-notifier/sn-item.c
index a5254e9..eb1ae29 100644
--- a/modules/status-notifier/sn-item.c
+++ b/modules/status-notifier/sn-item.c
@@ -248,7 +248,7 @@ sn_item_ready (SnItem *item)
return;
priv = sn_item_get_instance_private (item);
- priv->menu = sn_dbus_menu_new (priv->bus_name, menu);
+ priv->menu = sn_dbus_menu_new (priv->applet, priv->bus_name, menu);
g_object_ref_sink (priv->menu);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]