From 9fe6eab514c8d4b8b8d561b257559f1f68ca32c8 Mon Sep 17 00:00:00 2001 From: lenemter Date: Sat, 1 Mar 2025 12:07:35 +0300 Subject: [PATCH 1/3] DesktopIntegration: add 'time-appeared-on-workspace' property --- src/DesktopIntegration.vala | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/DesktopIntegration.vala b/src/DesktopIntegration.vala index c949552e4..503959b21 100644 --- a/src/DesktopIntegration.vala +++ b/src/DesktopIntegration.vala @@ -16,19 +16,24 @@ public class Gala.DesktopIntegration : GLib.Object { GLib.HashTable properties; } - private unowned WindowManagerGala wm; public uint version { get; default = 1; } public signal void running_applications_changed (); public signal void windows_changed (); public signal void active_workspace_changed (); public signal void workspace_removed (int index); + private unowned WindowManagerGala wm; + private GLib.HashTable time_appeared_on_workspace; + public DesktopIntegration (WindowManagerGala wm) { this.wm = wm; + time_appeared_on_workspace = new GLib.HashTable (GLib.direct_hash, GLib.direct_equal); + wm.window_tracker.windows_changed.connect (() => windows_changed ()); unowned var display = wm.get_display (); unowned var workspace_manager = display.get_workspace_manager (); + workspace_manager.active_workspace_changed.connect (() => { active_workspace_changed (); windows_changed (); // windows have 'on-active-workspace' property that we need to update @@ -43,6 +48,17 @@ public class Gala.DesktopIntegration : GLib.Object { // TODO: figure out if there's a better way to handle ws rearrangement display.window_created.connect ((window) => { window.workspace_changed.connect (() => windows_changed ()); + + time_appeared_on_workspace[window] = GLib.get_real_time (); + + window.workspace_changed.connect ((_window) => { + time_appeared_on_workspace[_window] = GLib.get_real_time (); + windows_changed (); + }); + + window.unmanaging.connect ((_window) => { + time_appeared_on_workspace.remove (_window); + }); }); } @@ -117,6 +133,10 @@ public class Gala.DesktopIntegration : GLib.Object { properties.insert ("sandboxed-app-id", new GLib.Variant.string (sandboxed_app_id)); } + if (window in time_appeared_on_workspace && time_appeared_on_workspace[window] != null) { + properties.insert ("time-appeared-on-workspace", new GLib.Variant.int64 (time_appeared_on_workspace[window])); + } + returned_windows += Window () { uid = window.get_id (), properties = properties From d26cac10333a7abcc4fdb49afaaa6fb7627f0d51 Mon Sep 17 00:00:00 2001 From: lenemter Date: Sun, 2 Mar 2025 18:21:38 +0300 Subject: [PATCH 2/3] Use `GLib.get_monotonic_time ()` --- src/DesktopIntegration.vala | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/DesktopIntegration.vala b/src/DesktopIntegration.vala index 503959b21..74df031c8 100644 --- a/src/DesktopIntegration.vala +++ b/src/DesktopIntegration.vala @@ -49,10 +49,10 @@ public class Gala.DesktopIntegration : GLib.Object { display.window_created.connect ((window) => { window.workspace_changed.connect (() => windows_changed ()); - time_appeared_on_workspace[window] = GLib.get_real_time (); + time_appeared_on_workspace[window] = GLib.get_monotonic_time (); window.workspace_changed.connect ((_window) => { - time_appeared_on_workspace[_window] = GLib.get_real_time (); + time_appeared_on_workspace[_window] = GLib.get_monotonic_time (); windows_changed (); }); From 45e58aa60b2dc8330f2ed3127240e73bb3e9a977 Mon Sep 17 00:00:00 2001 From: lenemter Date: Sat, 8 Mar 2025 13:38:36 +0300 Subject: [PATCH 3/3] Fix merge --- src/DesktopIntegration.vala | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/DesktopIntegration.vala b/src/DesktopIntegration.vala index 74df031c8..bfff84552 100644 --- a/src/DesktopIntegration.vala +++ b/src/DesktopIntegration.vala @@ -47,8 +47,6 @@ public class Gala.DesktopIntegration : GLib.Object { // TODO: figure out if there's a better way to handle ws rearrangement display.window_created.connect ((window) => { - window.workspace_changed.connect (() => windows_changed ()); - time_appeared_on_workspace[window] = GLib.get_monotonic_time (); window.workspace_changed.connect ((_window) => {