From 6267672397870996554c47cb2b174e9fc3a28e72 Mon Sep 17 00:00:00 2001 From: lenemter Date: Wed, 21 Aug 2024 15:40:57 +0900 Subject: [PATCH] Focus window when it demands attention --- src/WindowAttentionTracker.vala | 16 ++++++++++++++++ src/WindowManager.vala | 1 + src/meson.build | 1 + 3 files changed, 18 insertions(+) create mode 100644 src/WindowAttentionTracker.vala diff --git a/src/WindowAttentionTracker.vala b/src/WindowAttentionTracker.vala new file mode 100644 index 000000000..2d01542a2 --- /dev/null +++ b/src/WindowAttentionTracker.vala @@ -0,0 +1,16 @@ +/* + * SPDX-License-Identifier: GPL-3.0-or-later + * SPDX-FileCopyrightText: 2024 elementary, Inc. (https://elementary.io) + */ + +public class Gala.WindowAttentionTracker : GLib.Object { + public static void init (Meta.Display display) { + display.window_demands_attention.connect (on_window_demands_attention); + display.window_marked_urgent.connect (on_window_demands_attention); + } + + private static void on_window_demands_attention (Meta.Window window) { + window.raise (); + window.get_workspace ().activate_with_focus (window, window.display.get_current_time ()); + } +} diff --git a/src/WindowManager.vala b/src/WindowManager.vala index 7dba0a2bc..7ea8f3edc 100644 --- a/src/WindowManager.vala +++ b/src/WindowManager.vala @@ -174,6 +174,7 @@ namespace Gala { window_tracker = new WindowTracker (); WindowStateSaver.init (window_tracker); window_tracker.init (display); + WindowAttentionTracker.init (display); notification_stack = new NotificationStack (display); diff --git a/src/meson.build b/src/meson.build index 5351711d0..e2e61807b 100644 --- a/src/meson.build +++ b/src/meson.build @@ -14,6 +14,7 @@ gala_bin_sources = files( 'ScreenSaverManager.vala', 'ScreenshotManager.vala', 'SessionManager.vala', + 'WindowAttentionTracker.vala', 'WindowGrabTracker.vala', 'WindowListener.vala', 'WindowManager.vala',