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;
|
border: 1px solid #a1a1a1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.notification-button:focus {
|
||||||
|
background-color: #666666;
|
||||||
|
}
|
||||||
|
|
||||||
.notification-button:active {
|
.notification-button:active {
|
||||||
border: 1px solid #a1a1a1;
|
border: 1px solid #a1a1a1;
|
||||||
background-color: #2b2b2b;
|
background-color: #2b2b2b;
|
||||||
@ -933,6 +937,10 @@ StTooltip StLabel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.notification-icon-button:hover {
|
.notification-icon-button:hover {
|
||||||
|
border: 2px rgba(161,161,161,0.7);
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification-icon-button:focus {
|
||||||
background: rgba(192,192,192,0.7);
|
background: rgba(192,192,192,0.7);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -262,6 +262,7 @@ Notification.prototype = {
|
|||||||
this._titleFitsInBannerMode = true;
|
this._titleFitsInBannerMode = true;
|
||||||
this._spacing = 0;
|
this._spacing = 0;
|
||||||
|
|
||||||
|
this._buttonFocusManager = null;
|
||||||
this._hasFocus = false;
|
this._hasFocus = false;
|
||||||
this._lockTrayOnFocusGrab = false;
|
this._lockTrayOnFocusGrab = false;
|
||||||
// We use this._prevFocusedWindow and this._prevKeyFocusActor to return the
|
// We use this._prevFocusedWindow and this._prevKeyFocusActor to return the
|
||||||
@ -504,7 +505,7 @@ Notification.prototype = {
|
|||||||
this._buttonBox = box;
|
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)) {
|
if (this._useActionIcons && Gtk.IconTheme.get_default().has_icon(id)) {
|
||||||
button.add_style_class_name('notification-icon-button');
|
button.add_style_class_name('notification-icon-button');
|
||||||
@ -514,8 +515,15 @@ Notification.prototype = {
|
|||||||
button.label = label;
|
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._buttonBox.add(button);
|
||||||
|
this._buttonFocusManager.add_group(this._buttonBox);
|
||||||
button.connect('clicked', Lang.bind(this, this._onActionInvoked, id));
|
button.connect('clicked', Lang.bind(this, this._onActionInvoked, id));
|
||||||
|
|
||||||
this._updated();
|
this._updated();
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -665,6 +673,10 @@ Notification.prototype = {
|
|||||||
this._focusActorChangedId = global.stage.connect('notify::key-focus', Lang.bind(this, this._focusActorChanged));
|
this._focusActorChangedId = global.stage.connect('notify::key-focus', Lang.bind(this, this._focusActorChanged));
|
||||||
|
|
||||||
this._hasFocus = true;
|
this._hasFocus = true;
|
||||||
|
|
||||||
|
if (this._buttonFocusManager)
|
||||||
|
this._buttonBox.get_children()[0].grab_key_focus();
|
||||||
|
|
||||||
if (lockTray)
|
if (lockTray)
|
||||||
Main.messageTray.lock();
|
Main.messageTray.lock();
|
||||||
},
|
},
|
||||||
|
Loading…
Reference in New Issue
Block a user