[panel] separate "active" state from hover state in PanelBaseMenuItem

When doing keyboard navigation, the active menu item may not be the
one under the mouse.

https://bugzilla.gnome.org/show_bug.cgi?id=619008
This commit is contained in:
Dan Winship 2010-05-18 13:23:41 -04:00
parent 320adb316d
commit 2179f5836e
2 changed files with 24 additions and 1 deletions

View File

@ -142,7 +142,7 @@ StTooltip {
padding: 6px 20px; padding: 6px 20px;
} }
.panel-menu-item:hover { .panel-menu-item:active {
background-color: #4c4c4c; background-color: #4c4c4c;
} }

View File

@ -138,11 +138,34 @@ PanelBaseMenuItem.prototype = {
x_fill: true, x_fill: true,
y_fill: true, y_fill: true,
x_align: St.Align.START }); x_align: St.Align.START });
this.active = false;
if (reactive) { if (reactive) {
this.actor.connect('button-release-event', Lang.bind(this, function (actor, event) { this.actor.connect('button-release-event', Lang.bind(this, function (actor, event) {
this.emit('activate', event); this.emit('activate', event);
})); }));
this.actor.connect('notify::hover', Lang.bind(this, this._hoverChanged));
}
},
_hoverChanged: function (actor) {
this.setActive(actor.hover);
},
activate: function (event) {
this.emit('activate', event);
},
setActive: function (active) {
let activeChanged = active != this.active;
if (activeChanged) {
this.active = active;
if (active)
this.actor.add_style_pseudo_class('active');
else
this.actor.remove_style_pseudo_class('active');
this.emit('active-changed', active);
} }
} }
}; };