Enables navigation using arrow keys in notifications with buttons.
Users can now use the keyboard and mouse to navigate with buttons interchangeably, instead of entirely using only mouse. https://bugzilla.gnome.org/show_bug.cgi?id=630937
This commit is contained in:
parent
33100cd204
commit
0e4a47c0aa
@ -921,6 +921,10 @@ StTooltip StLabel {
|
||||
border: 1px solid #a1a1a1;
|
||||
}
|
||||
|
||||
.notification-button:focus {
|
||||
background-color: #666666;
|
||||
}
|
||||
|
||||
.notification-button:active {
|
||||
border: 1px solid #a1a1a1;
|
||||
background-color: #2b2b2b;
|
||||
@ -933,6 +937,10 @@ StTooltip StLabel {
|
||||
}
|
||||
|
||||
.notification-icon-button:hover {
|
||||
border: 2px rgba(161,161,161,0.7);
|
||||
}
|
||||
|
||||
.notification-icon-button:focus {
|
||||
background: rgba(192,192,192,0.7);
|
||||
}
|
||||
|
||||
|
@ -262,6 +262,7 @@ Notification.prototype = {
|
||||
this._titleFitsInBannerMode = true;
|
||||
this._spacing = 0;
|
||||
|
||||
this._buttonFocusManager = null;
|
||||
this._hasFocus = false;
|
||||
this._lockTrayOnFocusGrab = false;
|
||||
// We use this._prevFocusedWindow and this._prevKeyFocusActor to return the
|
||||
@ -504,7 +505,7 @@ Notification.prototype = {
|
||||
this._buttonBox = box;
|
||||
}
|
||||
|
||||
let button = new St.Button();
|
||||
let button = new St.Button({ can_focus: true });
|
||||
|
||||
if (this._useActionIcons && Gtk.IconTheme.get_default().has_icon(id)) {
|
||||
button.add_style_class_name('notification-icon-button');
|
||||
@ -514,8 +515,15 @@ Notification.prototype = {
|
||||
button.label = label;
|
||||
}
|
||||
|
||||
if (!this._buttonFocusManager)
|
||||
this._buttonFocusManager = St.FocusManager.get_for_stage(global.stage);
|
||||
if (this._buttonBox.get_children().length > 0)
|
||||
this._buttonFocusManager.remove_group(this._buttonBox);
|
||||
|
||||
this._buttonBox.add(button);
|
||||
this._buttonFocusManager.add_group(this._buttonBox);
|
||||
button.connect('clicked', Lang.bind(this, this._onActionInvoked, id));
|
||||
|
||||
this._updated();
|
||||
},
|
||||
|
||||
@ -665,6 +673,10 @@ Notification.prototype = {
|
||||
this._focusActorChangedId = global.stage.connect('notify::key-focus', Lang.bind(this, this._focusActorChanged));
|
||||
|
||||
this._hasFocus = true;
|
||||
|
||||
if (this._buttonFocusManager)
|
||||
this._buttonBox.get_children()[0].grab_key_focus();
|
||||
|
||||
if (lockTray)
|
||||
Main.messageTray.lock();
|
||||
},
|
||||
|
Loading…
Reference in New Issue
Block a user