81 lines
3.0 KiB
Diff
81 lines
3.0 KiB
Diff
|
From 2bb826291c420dd1b601758c7a686ac48e1086a6 Mon Sep 17 00:00:00 2001
|
||
|
From: Carlos Garnacho <carlosg@gnome.org>
|
||
|
Date: Mon, 16 Dec 2019 12:39:49 +0100
|
||
|
Subject: [PATCH] padOsd: Re-query action labels after mode switches
|
||
|
|
||
|
Do this so the pad OSD is able to update dynamically to mode changes,
|
||
|
showing immediately the new actions for the current mode(s).
|
||
|
|
||
|
https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/898
|
||
|
---
|
||
|
js/ui/padOsd.js | 31 ++++++++++++++++++++++++++++---
|
||
|
1 file changed, 28 insertions(+), 3 deletions(-)
|
||
|
|
||
|
diff --git a/js/ui/padOsd.js b/js/ui/padOsd.js
|
||
|
index a4af47297..b4b3fe453 100644
|
||
|
--- a/js/ui/padOsd.js
|
||
|
+++ b/js/ui/padOsd.js
|
||
|
@@ -555,6 +555,14 @@ var PadDiagram = GObject.registerClass({
|
||
|
this.add_actor(label);
|
||
|
}
|
||
|
|
||
|
+ updateLabels(callback) {
|
||
|
+ for (let i = 0; i < this._labels.length; i++) {
|
||
|
+ let [label, action, idx, dir] = this._labels[i];
|
||
|
+ let str = callback(action, idx, dir);
|
||
|
+ label.set_text(str);
|
||
|
+ }
|
||
|
+ }
|
||
|
+
|
||
|
_applyLabel(label, action, idx, dir, str) {
|
||
|
if (str != null) {
|
||
|
label.set_text(str);
|
||
|
@@ -758,17 +766,29 @@ var PadOsd = class {
|
||
|
global.display.request_pad_osd(pad, editionMode);
|
||
|
}
|
||
|
|
||
|
- _createLabel(type, number, dir) {
|
||
|
+ _getActionText(type, number) {
|
||
|
let str = global.display.get_pad_action_label(this.padDevice, type, number);
|
||
|
- let label = new St.Label({ text: str ? str : _("None") });
|
||
|
+ return str ? str : _("None");
|
||
|
+ }
|
||
|
+
|
||
|
+ _createLabel(type, number, dir) {
|
||
|
+ let label = new St.Label({ text: this._getActionText(type, number) });
|
||
|
this._padDiagram.addLabel(label, type, number, dir);
|
||
|
}
|
||
|
|
||
|
+ _updateActionLabels() {
|
||
|
+ this._padDiagram.updateLabels(this._getActionText.bind(this));
|
||
|
+ }
|
||
|
+
|
||
|
_onCapturedEvent(actor, event) {
|
||
|
+ let isModeSwitch =
|
||
|
+ (event.type() == Clutter.EventType.PAD_BUTTON_PRESS ||
|
||
|
+ event.type() == Clutter.EventType.PAD_BUTTON_RELEASE) &&
|
||
|
+ this.padDevice.get_mode_switch_button_group(event.get_button()) >= 0;
|
||
|
+
|
||
|
if (event.type() == Clutter.EventType.PAD_BUTTON_PRESS &&
|
||
|
event.get_source_device() == this.padDevice) {
|
||
|
this._padDiagram.activateButton(event.get_button());
|
||
|
- let isModeSwitch = this.padDevice.get_mode_switch_button_group(event.get_button()) >= 0;
|
||
|
|
||
|
/* Buttons that switch between modes cannot be edited */
|
||
|
if (this._editionMode && !isModeSwitch)
|
||
|
@@ -777,6 +797,11 @@ var PadOsd = class {
|
||
|
} else if (event.type() == Clutter.EventType.PAD_BUTTON_RELEASE &&
|
||
|
event.get_source_device() == this.padDevice) {
|
||
|
this._padDiagram.deactivateButton(event.get_button());
|
||
|
+
|
||
|
+ if (isModeSwitch) {
|
||
|
+ this._endActionEdition();
|
||
|
+ this._updateActionLabels();
|
||
|
+ }
|
||
|
return Clutter.EVENT_STOP;
|
||
|
} else if (event.type() == Clutter.EventType.KEY_PRESS &&
|
||
|
(!this._editionMode || event.get_key_symbol() == Clutter.Escape)) {
|
||
|
--
|
||
|
2.24.0
|
||
|
|