[gnome-shell] system: Switch between alternatives on long-press
- From: Florian Müllner <fmuellner src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] system: Switch between alternatives on long-press
- Date: Thu, 16 Feb 2017 00:38:24 +0000 (UTC)
commit 2c070d38fb417dced66bf8589c4caa66bbd2d9ed
Author: Florian Müllner <fmuellner gnome org>
Date: Mon Mar 2 12:14:54 2015 +0100
system: Switch between alternatives on long-press
On systems that support both shutdown and suspend, the latter operation
is currently only accessible via pressing the Alt key. As using the
keyboard may be inconvenient or simply not possible (e.g. on touch),
allow switching between alternatives via long-press as well.
https://bugzilla.gnome.org/show_bug.cgi?id=721173
js/ui/status/system.js | 31 +++++++++++++++++++++++++++++--
1 files changed, 29 insertions(+), 2 deletions(-)
---
diff --git a/js/ui/status/system.js b/js/ui/status/system.js
index 1d666cf..92ccf4c 100644
--- a/js/ui/status/system.js
+++ b/js/ui/status/system.js
@@ -48,8 +48,14 @@ const AltSwitcher = new Lang.Class({
this._capturedEventId = global.stage.connect('captured-event', Lang.bind(this,
this._onCapturedEvent));
+ this._flipped = false;
+
+ this._clickAction = new Clutter.ClickAction();
+ this._clickAction.connect('long-press', Lang.bind(this, this._onLongPress));
+
this.actor = new St.Bin();
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
+ this.actor.connect('notify::mapped', () => { this._flipped = false; });
},
_sync: function() {
@@ -58,14 +64,25 @@ const AltSwitcher = new Lang.Class({
if (this._standard.visible && this._alternate.visible) {
let [x, y, mods] = global.get_pointer();
let altPressed = (mods & Clutter.ModifierType.MOD1_MASK) != 0;
- childToShow = altPressed ? this._alternate : this._standard;
+ if (this._flipped)
+ childToShow = altPressed ? this._standard : this._alternate;
+ else
+ childToShow = altPressed ? this._alternate : this._standard;
} else if (this._standard.visible) {
childToShow = this._standard;
} else if (this._alternate.visible) {
childToShow = this._alternate;
}
- if (this.actor.get_child() != childToShow) {
+ let childShown = this.actor.get_child();
+ if (childShown != childToShow) {
+ if (childShown) {
+ if (childShown.fake_release)
+ childShown.fake_release();
+ childShown.remove_action(this._clickAction);
+ }
+ childToShow.add_action(this._clickAction);
+
let hasFocus = this.actor.contains(global.stage.get_key_focus());
this.actor.set_child(childToShow);
if (hasFocus)
@@ -96,6 +113,16 @@ const AltSwitcher = new Lang.Class({
return Clutter.EVENT_PROPAGATE;
},
+
+ _onLongPress: function(action, actor, state) {
+ if (state == Clutter.LongPressState.QUERY ||
+ state == Clutter.LongPressState.CANCEL)
+ return true;
+
+ this._flipped = !this._flipped;
+ this._sync();
+ return true;
+ }
});
const Indicator = new Lang.Class({
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]