Skip to content

Commit 8496a15

Browse files
committed
Release barrier events when panel is fully visible
1 parent afe9660 commit 8496a15

File tree

3 files changed

+27
-22
lines changed

3 files changed

+27
-22
lines changed

src/HotCorners/Barrier.vala

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2024 elementary, Inc. (https://elementary.io)
2+
* Copyright 2024-2025 elementary, Inc. (https://elementary.io)
33
* SPDX-License-Identifier: GPL-3.0-or-later
44
*/
55

@@ -9,7 +9,12 @@
99
public class Gala.Barrier : Object {
1010
public signal void trigger ();
1111

12-
public bool triggered { get; set; default = false; }
12+
public bool triggered { get; private set; default = false; }
13+
/**
14+
* Automatically release barrier events.
15+
* May be useful for disabling barrier's pointer 'grabbing' when moving it between monitors.
16+
*/
17+
public bool release_events { get; set; default = false; }
1318

1419
public double trigger_pressure_threshold { get; construct; }
1520
public double release_pressure_threshold { get; construct; }
@@ -66,21 +71,20 @@ public class Gala.Barrier : Object {
6671
pressure += event.dy.abs ();
6772
}
6873

69-
if (!triggered && pressure > trigger_pressure_threshold) {
74+
if (
75+
!triggered && pressure > trigger_pressure_threshold ||
76+
triggered && pressure.abs () > retrigger_pressure_threshold && event.time > retrigger_delay + triggered_time
77+
) {
7078
emit_trigger (event.time);
7179
}
7280

73-
if (!triggered && pressure > release_pressure_threshold) {
74-
barrier.release (event);
75-
}
76-
77-
if (triggered && event.time - triggered_time > 150) {
81+
if (
82+
release_events ||
83+
!triggered && pressure > release_pressure_threshold ||
84+
triggered && event.time - triggered_time > 150
85+
) {
7886
barrier.release (event);
7987
}
80-
81-
if (triggered && pressure.abs () > retrigger_pressure_threshold && event.time > retrigger_delay + triggered_time) {
82-
emit_trigger (event.time);
83-
}
8488
}
8589

8690
private void emit_trigger (uint32 time) {

src/ShellClients/HideTracker.vala

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2024 elementary, Inc. (https://elementary.io)
2+
* Copyright 2024-2025 elementary, Inc. (https://elementary.io)
33
* SPDX-License-Identifier: GPL-3.0-or-later
44
*
55
* Authored by: Leonhard Kargl <[email protected]>
@@ -15,6 +15,7 @@ public class Gala.HideTracker : Object {
1515

1616
public Meta.Display display { get; construct; }
1717
public unowned PanelWindow panel { get; construct; }
18+
public bool release_barrier_events { get; set; default = false; }
1819

1920
private static GLib.Settings behavior_settings;
2021

@@ -176,6 +177,10 @@ public class Gala.HideTracker : Object {
176177
warning ("Barrier side not supported yet");
177178
break;
178179
}
180+
181+
if (barrier != null) {
182+
bind_property ("release-barrier-events", barrier, "release-events", DEFAULT);
183+
}
179184
}
180185

181186
private void setup_barrier_top (Mtk.Rectangle monitor_geom, int offset) {

src/ShellClients/PanelWindow.vala

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,8 @@ public class Gala.PanelWindow : ShellWindow, RootTarget {
6666
};
6767

6868
hide_tracker = new HideTracker (wm.get_display (), this);
69-
hide_tracker.hide.connect (hide);
70-
hide_tracker.show.connect (show);
69+
hide_tracker.hide.connect (() => user_gesture_controller.goto (1));
70+
hide_tracker.show.connect (() => user_gesture_controller.goto (0));
7171

7272
workspace_gesture_controller = new GestureController (CUSTOM, wm) {
7373
progress = 1.0
@@ -143,14 +143,10 @@ public class Gala.PanelWindow : ShellWindow, RootTarget {
143143
public override void propagate (GestureTarget.UpdateType update_type, GestureAction action, double progress) {
144144
workspace_hide_tracker.update (update_type, action, progress);
145145
base.propagate (update_type, action, progress);
146-
}
147-
148-
private void hide () {
149-
user_gesture_controller.goto (1);
150-
}
151146

152-
private void show () {
153-
user_gesture_controller.goto (0);
147+
// Forcefully release barrier events when we are fully visible
148+
// to avoid interference with multiple monitors workflow
149+
hide_tracker.release_barrier = get_hidden_progress () == 1.0;
154150
}
155151

156152
private bool update_overlap (Meta.Workspace workspace) {

0 commit comments

Comments
 (0)