Skip to content

Commit 95f06b0

Browse files
authored
Merge pull request #261 from dsheeler/258-features-request-window-validation
Change some behavior of clicks and keypresses
2 parents 34a9d22 + 7753378 commit 95f06b0

File tree

1 file changed

+64
-21
lines changed

1 file changed

+64
-21
lines changed

src/switcher.js

Lines changed: 64 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,8 @@ export class Switcher {
8484
this._logger = this._manager.logger;
8585
this._iconFadeInOut = this._settings.icon_add_remove_effects === "Fade Only" || this._settings.icon_add_remove_effects === "Fade and Scale";
8686
this._iconScaleUpDown = this._settings.icon_add_remove_effects === "Scale Only" || this._settings.icon_add_remove_effects === "Fade and Scale";
87+
this._lastButtonPressPositionX = -1;
88+
this._lastButtonPressPositionY = -1;
8789

8890
this._logger.log(`Creating Switcher`);
8991
this._logger.increaseIndent();
@@ -195,9 +197,11 @@ export class Switcher {
195197
preview.addIcon();
196198
}
197199
}
200+
201+
198202
for (let preview of this._allPreviews) {
199203
preview.set_reactive(false)
200-
preview.connect('button-press-event', this._previewButtonPressEvent.bind(this, preview));
204+
preview.connect('button-press-event', this._previewButtonPressEvent.bind(this));
201205
}
202206

203207
// hide windows and showcd Coverflow actors
@@ -294,6 +298,8 @@ export class Switcher {
294298
if (this._haveModal) {
295299
this.actor.disconnect(this._key_press_handler_id);
296300
this.actor.disconnect(this._key_release_handler_id);
301+
this.actor.disconnect(this._button_press_handler_id);
302+
this.actor.disconnect(this._button_release_handler_id)
297303
Main.popModal(this._grab);
298304
this._haveModal = false;
299305
}
@@ -303,6 +309,8 @@ export class Switcher {
303309
if (this._haveModal) return;
304310
this._key_press_handler_id = this.actor.connect('key-press-event', this._keyPressEvent.bind(this));
305311
this._key_release_handler_id = this.actor.connect('key-release-event', this._keyReleaseEvent.bind(this));
312+
this._button_press_handler_id = this.actor.connect('button-press-event', this._buttonPressEvent.bind(this));
313+
this._button_release_handler_id = this.actor.connect('button-release-event', this._buttonReleaseEvent.bind(this));
306314
this._grab = Main.pushModal(this.actor)
307315
if (!this._grab) {
308316
this._activateSelected();
@@ -799,15 +807,18 @@ export class Switcher {
799807
}
800808

801809
// eslint-disable-next-line complexity
802-
_keyPressEvent(actor, event) {
810+
_keyPressEvent(_actor, event) {
803811
if (this.gestureInProgress) return false;
804812
switch(event.get_key_symbol()) {
805813

806814
case Clutter.KEY_Return:
815+
this._activateSelected();
816+
return true;
817+
807818
case Clutter.KEY_Escape:
808819
case Clutter.Escape:
809820
// Esc -> close CoverFlow
810-
this._activateSelected();
821+
this._activateWithoutSelection();
811822
return true;
812823

813824
case Clutter.KEY_Right:
@@ -873,6 +884,29 @@ export class Switcher {
873884
}
874885
return true;
875886
}
887+
888+
_buttonPressEvent(_actor, event) {
889+
890+
if (event.get_button() === Clutter.BUTTON_PRIMARY) {
891+
if (this.gestureInProgress) {
892+
this._lastButtonPressPositionX = -1;
893+
this._lastButtonPressPositionY = -1;
894+
return;
895+
}
896+
[this._lastButtonPressPositionX, this._lastButtonPressPositionY] = event.get_coords();
897+
}
898+
}
899+
900+
_buttonReleaseEvent(_actor, event) {
901+
if (this.gestureInProgress) return;
902+
if (event.get_button() === Clutter.BUTTON_PRIMARY) {
903+
let [x, y] = event.get_coords();
904+
if (x === this._lastButtonPressPositionX && y === this._lastButtonPressPositionY) {
905+
this._activateWithoutSelection();
906+
}
907+
}
908+
}
909+
876910
_windowDestroyed(wm, actor) {
877911
this._removeDestroyedWindow(actor.meta_window);
878912
}
@@ -900,16 +934,23 @@ export class Switcher {
900934
}
901935
}
902936

903-
_previewButtonPressEvent(preview) {
904-
for (let [i, p] of this._previews.entries()) {
905-
if (preview === p) {
906-
this._setCurrentIndex(i);
907-
this._activateSelected(true);
908-
break;
937+
_previewButtonPressEvent(preview, event) {
938+
if (event.get_button() === Clutter.BUTTON_PRIMARY) {
939+
for (let [i, p] of this._previews.entries()) {
940+
if (preview === p) {
941+
this._setCurrentIndex(i);
942+
this._activateSelected(true);
943+
break;
944+
}
909945
}
910946
}
911947
}
912948

949+
_activateWithoutSelection() {
950+
this._currentIndex = -1;
951+
this.animateClosed(CloseReason.ACTIVATE_SELECTED);
952+
}
953+
913954
_activateSelected(reset_current_window_title) {
914955
this._swipeTracker.enabled = false;
915956
let preview = this._previews[this._currentIndex];
@@ -1160,20 +1201,22 @@ export class Switcher {
11601201
});
11611202
}
11621203
}
1163-
let current_preview = this._previews[Math.round(this._currentIndex)];
1164-
let current_preview_transient = current_preview.metaWin.get_transient_for()
1165-
if (current_preview_transient !== null) {
1166-
for (let p of this._allPreviews) {
1167-
if (p.metaWin === current_preview_transient) {
1168-
p.make_top_layer(this.previewActor);
1169-
break;
1204+
if (this._currentIndex >= 0) {
1205+
let current_preview = this._previews[Math.round(this._currentIndex)];
1206+
let current_preview_transient = current_preview.metaWin.get_transient_for()
1207+
if (current_preview_transient !== null) {
1208+
for (let p of this._allPreviews) {
1209+
if (p.metaWin === current_preview_transient) {
1210+
p.make_top_layer(this.previewActor);
1211+
break;
1212+
}
11701213
}
11711214
}
1172-
}
1173-
current_preview.make_top_layer(this.previewActor);
1174-
for (let p of this._allPreviews) {
1175-
if (p.metaWin.get_transient_for() === current_preview.metaWin) {
1176-
this.previewActor.set_child_above_sibling(p, current_preview);
1215+
current_preview.make_top_layer(this.previewActor);
1216+
for (let p of this._allPreviews) {
1217+
if (p.metaWin.get_transient_for() === current_preview.metaWin) {
1218+
this.previewActor.set_child_above_sibling(p, current_preview);
1219+
}
11771220
}
11781221
}
11791222
this._raiseIcons();

0 commit comments

Comments
 (0)