base-icon: Always recreate icon texture on style changes
Currently the icon texture is only updated on style changes when the icon size is set from CSS and differs from the previously used icon size. As the style change may have been triggered by an icon theme change, textures that are created for themed icons should always be recreated; given that this is the case for most uses (with the exception of file thumbnails), recreate the icon texture unconditionally to avoid complexity. https://bugzilla.gnome.org/show_bug.cgi?id=643738
This commit is contained in:
parent
d6e29be980
commit
e01971eac7
@ -52,8 +52,7 @@ BaseIcon.prototype = {
|
|||||||
this.createIcon = params.createIcon;
|
this.createIcon = params.createIcon;
|
||||||
this._setSizeManually = params.setSizeManually;
|
this._setSizeManually = params.setSizeManually;
|
||||||
|
|
||||||
this.icon = this.createIcon(this.iconSize);
|
this.icon = null;
|
||||||
this._iconBin.set_child(this.icon);
|
|
||||||
},
|
},
|
||||||
|
|
||||||
_allocate: function(actor, box, flags) {
|
_allocate: function(actor, box, flags) {
|
||||||
@ -116,14 +115,15 @@ BaseIcon.prototype = {
|
|||||||
if (!this._setSizeManually)
|
if (!this._setSizeManually)
|
||||||
throw new Error('setSizeManually has to be set to use setIconsize');
|
throw new Error('setSizeManually has to be set to use setIconsize');
|
||||||
|
|
||||||
this._setIconSize(size);
|
|
||||||
},
|
|
||||||
|
|
||||||
_setIconSize: function(size) {
|
|
||||||
if (size == this.iconSize)
|
if (size == this.iconSize)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
this.icon.destroy();
|
this._createIconTexture(size);
|
||||||
|
},
|
||||||
|
|
||||||
|
_createIconTexture: function(size) {
|
||||||
|
if (this.icon)
|
||||||
|
this.icon.destroy();
|
||||||
this.iconSize = size;
|
this.iconSize = size;
|
||||||
this.icon = this.createIcon(this.iconSize);
|
this.icon = this.createIcon(this.iconSize);
|
||||||
|
|
||||||
@ -139,12 +139,15 @@ BaseIcon.prototype = {
|
|||||||
let node = this.actor.get_theme_node();
|
let node = this.actor.get_theme_node();
|
||||||
this._spacing = node.get_length('spacing');
|
this._spacing = node.get_length('spacing');
|
||||||
|
|
||||||
if (this._setSizeManually)
|
let size;
|
||||||
return;
|
if (this._setSizeManually) {
|
||||||
|
size = this.iconSize;
|
||||||
|
} else {
|
||||||
|
let [found, len] = node.lookup_length('icon-size', false);
|
||||||
|
size = found ? len : ICON_SIZE;
|
||||||
|
}
|
||||||
|
|
||||||
let len = node.get_length('icon-size');
|
this._createIconTexture(size);
|
||||||
if (len > 0)
|
|
||||||
this._setIconSize(len);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user