Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 16 additions & 12 deletions src/HotCorners/Barrier.vala
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright 2024 elementary, Inc. (https://elementary.io)
* Copyright 2024-2025 elementary, Inc. (https://elementary.io)
* SPDX-License-Identifier: GPL-3.0-or-later
*/

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

public bool triggered { get; set; default = false; }
public bool triggered { get; private set; default = false; }
/**
* Automatically release barrier events.
* May be useful for disabling barrier's pointer 'grabbing' when moving it between monitors.
*/
public bool release_events { get; set; default = false; }

public double trigger_pressure_threshold { get; construct; }
public double release_pressure_threshold { get; construct; }
Expand Down Expand Up @@ -66,21 +71,20 @@ public class Gala.Barrier : Object {
pressure += event.dy.abs ();
}

if (!triggered && pressure > trigger_pressure_threshold) {
if (
!triggered && pressure > trigger_pressure_threshold ||
triggered && pressure.abs () > retrigger_pressure_threshold && event.time > retrigger_delay + triggered_time
) {
emit_trigger (event.time);
}

if (!triggered && pressure > release_pressure_threshold) {
barrier.release (event);
}

if (triggered && event.time - triggered_time > 150) {
if (
release_events ||
!triggered && pressure > release_pressure_threshold ||
triggered && event.time - triggered_time > 150
) {
barrier.release (event);
}

if (triggered && pressure.abs () > retrigger_pressure_threshold && event.time > retrigger_delay + triggered_time) {
emit_trigger (event.time);
}
}

private void emit_trigger (uint32 time) {
Expand Down
7 changes: 6 additions & 1 deletion src/ShellClients/HideTracker.vala
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright 2024 elementary, Inc. (https://elementary.io)
* Copyright 2024-2025 elementary, Inc. (https://elementary.io)
* SPDX-License-Identifier: GPL-3.0-or-later
*
* Authored by: Leonhard Kargl <[email protected]>
Expand All @@ -15,6 +15,7 @@ public class Gala.HideTracker : Object {

public Meta.Display display { get; construct; }
public unowned PanelWindow panel { get; construct; }
public bool release_barrier_events { get; set; default = false; }

private static GLib.Settings behavior_settings;

Expand Down Expand Up @@ -176,6 +177,10 @@ public class Gala.HideTracker : Object {
warning ("Barrier side not supported yet");
break;
}

if (barrier != null) {
bind_property ("release-barrier-events", barrier, "release-events", DEFAULT);
}
}

private void setup_barrier_top (Mtk.Rectangle monitor_geom, int offset) {
Expand Down
14 changes: 5 additions & 9 deletions src/ShellClients/PanelWindow.vala
Original file line number Diff line number Diff line change
Expand Up @@ -66,8 +66,8 @@ public class Gala.PanelWindow : ShellWindow, RootTarget {
};

hide_tracker = new HideTracker (wm.get_display (), this);
hide_tracker.hide.connect (hide);
hide_tracker.show.connect (show);
hide_tracker.hide.connect (() => user_gesture_controller.goto (1));
hide_tracker.show.connect (() => user_gesture_controller.goto (0));

workspace_gesture_controller = new GestureController (CUSTOM, wm) {
progress = 1.0
Expand Down Expand Up @@ -143,14 +143,10 @@ public class Gala.PanelWindow : ShellWindow, RootTarget {
public override void propagate (GestureTarget.UpdateType update_type, GestureAction action, double progress) {
workspace_hide_tracker.update (update_type, action, progress);
base.propagate (update_type, action, progress);
}

private void hide () {
user_gesture_controller.goto (1);
}

private void show () {
user_gesture_controller.goto (0);
// Forcefully release barrier events when we are fully visible
// to avoid interference with multiple monitors workflow
hide_tracker.release_barrier_events = get_hidden_progress () == 1.0;
}

private bool update_overlap (Meta.Workspace workspace) {
Expand Down