[gnome-shell] padOsd: Implement edition of actions for rings/strips
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] padOsd: Implement edition of actions for rings/strips
- Date: Mon, 17 Jul 2017 17:51:50 +0000 (UTC)
commit c64a38f7da0b06601e4aa761504f54eba096fabe
Author: Carlos Garnacho <carlosg gnome org>
Date: Thu Jul 6 00:05:22 2017 +0200
padOsd: Implement edition of actions for rings/strips
Customization of keycombo actions for strips/rings was lost in the
porting to new incarnation of Wacom support.
The UI here is slightly different, instead of requiring the user to
rotate/swipe in each direction to map each keycombo, the UI will
navigate the user through edition of both options, first one, then
the other.
https://bugzilla.gnome.org/show_bug.cgi?id=782033
js/ui/padOsd.js | 116 ++++++++++++++++++++++++++++++++++++++++++++----------
1 files changed, 94 insertions(+), 22 deletions(-)
---
diff --git a/js/ui/padOsd.js b/js/ui/padOsd.js
index 7358b00..e143fa8 100644
--- a/js/ui/padOsd.js
+++ b/js/ui/padOsd.js
@@ -293,6 +293,8 @@ const PadDiagram = new Lang.Class({
_init: function (params) {
let file = Gio.File.new_for_uri('resource:///org/gnome/shell/theme/pad-osd.css');
let [success, css, etag] = file.load_contents(null);
+ this._curEdited = null;
+ this._prevEdited = null;
this._css = css;
this._labels = [];
this._activeButtons = [];
@@ -560,19 +562,29 @@ const PadDiagram = new Lang.Class({
label.show();
},
- stopEdition: function (str) {
+ stopEdition: function (continues, str) {
this._editorActor.hide();
+ if (this._prevEdited) {
+ let [label, action, idx, dir] = this._prevEdited;
+ this._applyLabel(label, action, idx, dir, str);
+ this._prevEdited = null;
+ }
+
if (this._curEdited) {
let [label, action, idx, dir] = this._curEdited;
this._applyLabel(label, action, idx, dir, str);
+ if (continues)
+ this._prevEdited = this._curEdited;
this._curEdited = null;
}
},
startEdition: function(action, idx, dir) {
let editedLabel;
- this.stopEdition();
+
+ if (this._curEdited)
+ return;
for (let i = 0; i < this._labels.length; i++) {
let [label, itemAction, itemIdx, itemDir] = this._labels[i];
@@ -666,7 +678,7 @@ const PadOsd = new Lang.Class({
this._updatePadChooser();
this._actionEditor = new ActionEditor();
- this._actionEditor.connect('done', Lang.bind(this, this._endButtonActionEdition));
+ this._actionEditor.connect('done', Lang.bind(this, this._endActionEdition));
this._padDiagram = new PadDiagram({ image: this._imagePath,
left_handed: settings.get_boolean('left-handed'),
@@ -753,8 +765,10 @@ const PadOsd = new Lang.Class({
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;
- if (this._editionMode)
+ /* Buttons that switch between modes cannot be edited */
+ if (this._editionMode && !isModeSwitch)
this._startButtonActionEdition(event.get_button());
return Clutter.EVENT_STOP;
} else if (event.type() == Clutter.EventType.PAD_BUTTON_RELEASE &&
@@ -763,11 +777,23 @@ const PadOsd = new Lang.Class({
return Clutter.EVENT_STOP;
} else if (event.type() == Clutter.EventType.KEY_PRESS &&
(!this._editionMode || event.get_key_symbol() == Clutter.Escape)) {
- if (this._editingButtonAction != null)
- this._endButtonActionEdition();
+ if (this._editedAction != null)
+ this._endActionEdition();
else
this.destroy();
return Clutter.EVENT_STOP;
+ } else if (event.get_source_device() == this.padDevice &&
+ event.type() == Clutter.EventType.PAD_STRIP) {
+ if (this._editionMode) {
+ let [retval, number, mode] = event.get_pad_event_details();
+ this._startStripActionEdition(number, UP, mode);
+ }
+ } else if (event.get_source_device() == this.padDevice &&
+ event.type() == Clutter.EventType.PAD_RING) {
+ if (this._editionMode) {
+ let [retval, number, mode] = event.get_pad_event_details();
+ this._startRingActionEdition(number, CCW, mode);
+ }
}
// If the event comes from another pad in the same group,
@@ -800,33 +826,79 @@ const PadOsd = new Lang.Class({
this._titleLabel.clutter_text.set_markup('<span size="larger"><b>' + title + '</b></span>');
},
- _endButtonActionEdition: function () {
+ _isEditedAction: function (type, number, dir) {
+ if (!this._editedAction)
+ return false;
+
+ return (this._editedAction.type == type &&
+ this._editedAction.number == number &&
+ this._editedAction.dir == dir);
+ },
+
+ _followUpActionEdition: function (str) {
+ let { type, dir, number, mode } = this._editedAction;
+ let hasNextAction = (type == Meta.PadActionType.RING && dir == CCW ||
+ type == Meta.PadActionType.STRIP && dir == UP);
+ if (!hasNextAction)
+ return false;
+
+ this._padDiagram.stopEdition(true, str);
+ this._editedAction = null;
+ if (type == Meta.PadActionType.RING)
+ this._startRingActionEdition(number, CW, mode);
+ else
+ this._startStripActionEdition(number, DOWN, mode);
+
+ return true;
+ },
+
+ _endActionEdition: function () {
this._actionEditor.close();
- if (this._editingButtonAction != null) {
+ if (this._editedAction != null) {
let str = global.display.get_pad_action_label(this.padDevice,
- Meta.PadActionType.BUTTON,
- this._editingButtonAction);
- this._padDiagram.stopEdition(str ? str : _("None"))
- this._editingButtonAction = null;
+ this._editedAction.type,
+ this._editedAction.number);
+ if (this._followUpActionEdition(str))
+ return;
+
+ this._padDiagram.stopEdition(false, str ? str : _("None"))
+ this._editedAction = null;
}
- this._editedButtonSettings = null;
+ this._editedActionSettings = null;
},
- _startButtonActionEdition: function (button) {
- if (this._editingButtonAction == button)
+ _startActionEdition: function (key, type, number, dir, mode) {
+ if (this._isEditedAction(type, number, dir))
return;
- this._endButtonActionEdition();
- this._editingButtonAction = button;
+ this._endActionEdition();
+ this._editedAction = { type, number, dir, mode };
- let ch = String.fromCharCode('A'.charCodeAt() + button);
- let settingsPath = this._settings.path + "button" + ch + '/';
- this._editedButtonSettings =
Gio.Settings.new_with_path('org.gnome.desktop.peripherals.tablet.pad-button',
+ let settingsPath = this._settings.path + key + '/';
+ this._editedActionSettings =
Gio.Settings.new_with_path('org.gnome.desktop.peripherals.tablet.pad-button',
settingsPath);
- this._actionEditor.setSettings(this._editedButtonSettings);
- this._padDiagram.startEdition(Meta.PadActionType.BUTTON, button);
+ this._actionEditor.setSettings(this._editedActionSettings);
+ this._padDiagram.startEdition(type, number, dir);
+ },
+
+ _startButtonActionEdition: function (button) {
+ let ch = String.fromCharCode('A'.charCodeAt() + button);
+ let key = 'button' + ch;
+ this._startActionEdition(key, Meta.PadActionType.BUTTON, button);
+ },
+
+ _startRingActionEdition: function (ring, dir, mode) {
+ let ch = String.fromCharCode('A'.charCodeAt() + ring);
+ let key = 'ring%s-%s-mode-%d'.format(ch, dir == CCW ? 'ccw' : 'cw', mode);
+ this._startActionEdition(key, Meta.PadActionType.RING, ring, dir, mode);
+ },
+
+ _startStripActionEdition: function (strip, dir, mode) {
+ let ch = String.fromCharCode('A'.charCodeAt() + strip);
+ let key = 'strip%s-%s-mode-%d'.format(ch, dir == UP ? 'up' : 'down', mode);
+ this._startActionEdition(key, Meta.PadActionType.STRIP, strip, dir, mode);
},
setEditionMode: function (editionMode) {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]