Dash: don't show a tooltip over an application with a popup menu

If the popup menu associated with the application icon is open,
make sure that the tooltip is hidden.

https://bugzilla.gnome.org/show_bug.cgi?id=705611
This commit is contained in:
Giovanni Campagna 2013-08-18 16:20:22 +02:00 committed by Giovanni Campagna
parent 8b93c97a09
commit 1b206fe94c
2 changed files with 19 additions and 6 deletions

View File

@ -878,6 +878,7 @@ const AppIcon = new Lang.Class({
this.actor.set_hover(true);
this._menu.popup();
this._menuManager.ignoreRelease();
this.emit('sync-tooltip');
return false;
},
@ -924,7 +925,11 @@ const AppIcon = new Lang.Class({
// we show as the item is being dragged.
getDragActorSource: function() {
return this.icon.icon;
}
},
shouldShowTooltip: function() {
return this.actor.hover && (!this._menu || !this._menu.isOpen);
},
});
Signals.addSignalMethods(AppIcon.prototype);

View File

@ -502,15 +502,21 @@ const Dash = new Lang.Class({
Main.queueDeferredWork(this._workId);
},
_hookUpLabel: function(item) {
_hookUpLabel: function(item, appIcon) {
item.child.connect('notify::hover', Lang.bind(this, function() {
this._onHover(item);
this._syncLabel(item, appIcon);
}));
Main.overview.connect('hiding', Lang.bind(this, function() {
this._labelShowing = false;
item.hideLabel();
}));
if (appIcon) {
appIcon.connect('sync-tooltip', Lang.bind(this, function() {
this._syncLabel(item, appIcon);
}));
}
},
_createAppItem: function(app) {
@ -539,7 +545,7 @@ const Dash = new Lang.Class({
item.setLabelText(app.get_name());
appIcon.icon.setIconSize(this.iconSize);
this._hookUpLabel(item);
this._hookUpLabel(item, appIcon);
return item;
},
@ -557,8 +563,10 @@ const Dash = new Lang.Class({
}
},
_onHover: function (item) {
if (item.child.get_hover()) {
_syncLabel: function (item, appIcon) {
let shouldShow = appIcon ? appIcon.shouldShowTooltip() : item.child.get_hover();
if (shouldShow) {
if (this._showLabelTimeoutId == 0) {
let timeout = this._labelShowing ? 0 : DASH_ITEM_HOVER_TIMEOUT;
this._showLabelTimeoutId = Mainloop.timeout_add(timeout,