popupMenu: Accept either an icon name or a GIcon on PopupImageMenuItem

Add an extra check to setIcon() so that either a GIcon or an string
with the icon's name is handlded, so that we can create menu items
in different ways (e.g. by passing a GIcon created from a resource).

https://bugzilla.gnome.org/show_bug.cgi?id=782166
This commit is contained in:
Mario Sanchez Prada 2017-05-08 11:36:35 +01:00
parent be95a63a03
commit 28ca96064b

View File

@ -2,6 +2,8 @@
const Clutter = imports.gi.Clutter; const Clutter = imports.gi.Clutter;
const Gtk = imports.gi.Gtk; const Gtk = imports.gi.Gtk;
const Gio = imports.gi.Gio;
const GObject = imports.gi.GObject;
const Lang = imports.lang; const Lang = imports.lang;
const Shell = imports.gi.Shell; const Shell = imports.gi.Shell;
const Signals = imports.signals; const Signals = imports.signals;
@ -389,7 +391,7 @@ const PopupImageMenuItem = new Lang.Class({
Name: 'PopupImageMenuItem', Name: 'PopupImageMenuItem',
Extends: PopupBaseMenuItem, Extends: PopupBaseMenuItem,
_init: function (text, iconName, params) { _init: function (text, icon, params) {
this.parent(params); this.parent(params);
this.label = new St.Label({ text: text }); this.label = new St.Label({ text: text });
@ -398,11 +400,15 @@ const PopupImageMenuItem = new Lang.Class({
this.actor.add_child(this._icon, { align: St.Align.END }); this.actor.add_child(this._icon, { align: St.Align.END });
this.actor.label_actor = this.label; this.actor.label_actor = this.label;
this.setIcon(iconName); this.setIcon(icon);
}, },
setIcon: function(name) { setIcon: function(icon) {
this._icon.icon_name = name; // The 'icon' parameter can be either a Gio.Icon or a string.
if (GObject.type_is_a(icon, Gio.Icon))
this._icon.gicon = icon;
else
this._icon.icon_name = icon;
} }
}); });