Merge lp:~bratsche/appmenu-gtk/icons into lp:appmenu-gtk/0.4

Proposed by Cody Russell
Status: Merged
Merged at revision: 53
Proposed branch: lp:~bratsche/appmenu-gtk/icons
Merge into: lp:appmenu-gtk/0.4
Diff against target: 145 lines (+114/-0)
1 file modified
src/bridge.c (+114/-0)
To merge this branch: bzr merge lp:~bratsche/appmenu-gtk/icons
Reviewer Review Type Date Requested Status
Ted Gould (community) Approve
Review via email: mp+29147@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Ted Gould (ted) wrote :
Download full text (5.0 KiB)

The only thing that I'd say is that for the bug, I think we need to
handle bitmap items as well. That can be done with using
dbusmenu_menuitem_property_set_image(). I'm not sure if we want all
that in one merge request or not, I'll let you choose :)

  review approve

On Sat, 2010-07-03 at 13:31 +0000, Cody Russell wrote:
> Cody Russell has proposed merging lp:~bratsche/appmenu-gtk/icons into lp:appmenu-gtk.
>
> Requested reviews:
> Canonical Desktop Experience Team (canonical-dx-team)
> Related bugs:
> #598528 doesn't display icons
> https://bugs.launchpad.net/bugs/598528
>
> differences between files attachment (review-diff.txt)
> === modified file 'src/bridge.c'
> --- src/bridge.c 2010-07-02 18:03:46 +0000
> +++ src/bridge.c 2010-07-03 13:31:27 +0000
> @@ -372,6 +372,93 @@
> }
> }
>
> +static gboolean
> +should_show_image (GtkImage *image)
> +{
> + GtkWidget *item;
> +
> + item = gtk_widget_get_ancestor (GTK_WIDGET (image),
> + GTK_TYPE_IMAGE_MENU_ITEM);
> +
> + if (item)
> + {
> + GtkSettings *settings;
> + gboolean gtk_menu_images;
> +
> + settings = gtk_widget_get_settings (item);
> +
> + g_object_get (settings, "gtk-menu-images", &gtk_menu_images, NULL);
> +
> + if (gtk_menu_images)
> + return TRUE;
> +
> + return gtk_image_menu_item_get_always_show_image (GTK_IMAGE_MENU_ITEM (item));
> + }
> +
> + return FALSE;
> +}
> +
> +static gboolean
> +update_stock_item (DbusmenuMenuitem *menuitem,
> + GtkWidget *widget)
> +{
> + GtkStockItem stock;
> + GtkImage *image;
> +
> + g_return_val_if_fail (GTK_IS_IMAGE (widget), FALSE);
> +
> + image = GTK_IMAGE (widget);
> +
> + if (gtk_image_get_storage_type (image) != GTK_IMAGE_STOCK)
> + return FALSE;
> +
> + gtk_stock_lookup (image->data.stock.stock_id, &stock);
> +
> + if (should_show_image (image))
> + dbusmenu_menuitem_property_set (menuitem,
> + DBUSMENU_MENUITEM_PROP_ICON_NAME,
> + image->data.stock.stock_id);
> + else
> + dbusmenu_menuitem_property_remove (menuitem,
> + DBUSMENU_MENUITEM_PROP_ICON_NAME);
> +
> + const gchar * label = dbusmenu_menuitem_property_get (menuitem,
> + DBUSMENU_MENUITEM_PROP_LABEL);
> +
> + if (stock.label != NULL && label != NULL)
> + {
> + dbusmenu_menuitem_property_set (menuitem,
> + DBUSMENU_MENUITEM_PROP_LABEL,
> + stock.label);
> +
> + return TRUE;
> + }
> +
> + return FALSE;
> +}
> +
> +static void
> +update_icon_name (DbusmenuMenuitem *menuitem,
> + GtkWidget *widget)
> +{
> + GtkImage *image;
> +
> + g_return_if_fail (GTK_IS_IMAGE (widget));
> +
> + image = GTK_IMAGE (widget);
> +
> + if (gtk_image_get_storage_type (image) != GTK_IMAGE_ICON_NAME)
> + return;
> +
> + if (should_show_image (image))
> + dbusmenu_menuitem_property_set (menuitem,
> + DBUSMENU_MENUITEM_PROP_ICON_NAME,
> + ...

Read more...

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/bridge.c'
2--- src/bridge.c 2010-07-02 18:03:46 +0000
3+++ src/bridge.c 2010-07-03 13:31:27 +0000
4@@ -372,6 +372,93 @@
5 }
6 }
7
8+static gboolean
9+should_show_image (GtkImage *image)
10+{
11+ GtkWidget *item;
12+
13+ item = gtk_widget_get_ancestor (GTK_WIDGET (image),
14+ GTK_TYPE_IMAGE_MENU_ITEM);
15+
16+ if (item)
17+ {
18+ GtkSettings *settings;
19+ gboolean gtk_menu_images;
20+
21+ settings = gtk_widget_get_settings (item);
22+
23+ g_object_get (settings, "gtk-menu-images", &gtk_menu_images, NULL);
24+
25+ if (gtk_menu_images)
26+ return TRUE;
27+
28+ return gtk_image_menu_item_get_always_show_image (GTK_IMAGE_MENU_ITEM (item));
29+ }
30+
31+ return FALSE;
32+}
33+
34+static gboolean
35+update_stock_item (DbusmenuMenuitem *menuitem,
36+ GtkWidget *widget)
37+{
38+ GtkStockItem stock;
39+ GtkImage *image;
40+
41+ g_return_val_if_fail (GTK_IS_IMAGE (widget), FALSE);
42+
43+ image = GTK_IMAGE (widget);
44+
45+ if (gtk_image_get_storage_type (image) != GTK_IMAGE_STOCK)
46+ return FALSE;
47+
48+ gtk_stock_lookup (image->data.stock.stock_id, &stock);
49+
50+ if (should_show_image (image))
51+ dbusmenu_menuitem_property_set (menuitem,
52+ DBUSMENU_MENUITEM_PROP_ICON_NAME,
53+ image->data.stock.stock_id);
54+ else
55+ dbusmenu_menuitem_property_remove (menuitem,
56+ DBUSMENU_MENUITEM_PROP_ICON_NAME);
57+
58+ const gchar * label = dbusmenu_menuitem_property_get (menuitem,
59+ DBUSMENU_MENUITEM_PROP_LABEL);
60+
61+ if (stock.label != NULL && label != NULL)
62+ {
63+ dbusmenu_menuitem_property_set (menuitem,
64+ DBUSMENU_MENUITEM_PROP_LABEL,
65+ stock.label);
66+
67+ return TRUE;
68+ }
69+
70+ return FALSE;
71+}
72+
73+static void
74+update_icon_name (DbusmenuMenuitem *menuitem,
75+ GtkWidget *widget)
76+{
77+ GtkImage *image;
78+
79+ g_return_if_fail (GTK_IS_IMAGE (widget));
80+
81+ image = GTK_IMAGE (widget);
82+
83+ if (gtk_image_get_storage_type (image) != GTK_IMAGE_ICON_NAME)
84+ return;
85+
86+ if (should_show_image (image))
87+ dbusmenu_menuitem_property_set (menuitem,
88+ DBUSMENU_MENUITEM_PROP_ICON_NAME,
89+ image->data.name.icon_name);
90+ else
91+ dbusmenu_menuitem_property_remove (menuitem,
92+ DBUSMENU_MENUITEM_PROP_ICON_NAME);
93+}
94+
95 static void
96 widget_notify_cb (GtkWidget *widget,
97 GParamSpec *pspec,
98@@ -397,6 +484,14 @@
99 DBUSMENU_MENUITEM_PROP_VISIBLE,
100 gtk_widget_get_visible (widget));
101 }
102+ else if (pspec->name == g_intern_static_string ("stock"))
103+ {
104+ update_stock_item (child, widget);
105+ }
106+ else if (pspec->name == g_intern_static_string ("icon-name"))
107+ {
108+ update_icon_name (child, widget);
109+ }
110 }
111
112 static void
113@@ -484,6 +579,7 @@
114 else
115 {
116 gboolean visible = FALSE;
117+ gboolean label_set = FALSE;
118
119 g_signal_connect (widget,
120 "accel-closures-changed",
121@@ -506,6 +602,24 @@
122 mi);
123 }
124
125+ if (GTK_IS_IMAGE_MENU_ITEM (widget))
126+ {
127+ GtkWidget *image;
128+ GtkImageType image_type;
129+
130+ image = gtk_image_menu_item_get_image (GTK_IMAGE_MENU_ITEM (widget));
131+ image_type = gtk_image_get_storage_type (GTK_IMAGE (image));
132+
133+ if (image_type == GTK_IMAGE_STOCK)
134+ {
135+ label_set = update_stock_item (mi, image);
136+ }
137+ else if (image_type == GTK_IMAGE_ICON_NAME)
138+ {
139+ update_icon_name (mi, image);
140+ }
141+ }
142+
143 dbusmenu_menuitem_property_set (mi,
144 "label",
145 get_menu_label_text (widget));

Subscribers

People subscribed via source and target branches