From dc986b2bb03257e902729539c5a3624e6e84c1d0 Mon Sep 17 00:00:00 2001 From: Vishal Rao Date: Mon, 7 Sep 2026 19:53:57 +0530 Subject: [PATCH] Shift centered windows considering dock and wingpanel heights Windows are centered based on monitor/screen dimensions. The wingpanel height and dock height are different, dock being thicker than wingpanel. This makes the centered windows appear positioned closer to the dock and farther away from the panel. This proposes to shift centered windows closer towards the wingpanel so that the gaps look even. This does not affect user repositioned windows whos coordinates are stored in sqlite db for later restoration. --- src/Misc/WindowStateSaver.vala | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/Misc/WindowStateSaver.vala b/src/Misc/WindowStateSaver.vala index 3fb15fcc0..7c5f9ee97 100644 --- a/src/Misc/WindowStateSaver.vala +++ b/src/Misc/WindowStateSaver.vala @@ -15,6 +15,10 @@ public class Gala.WindowStateSaver : GLib.Object { private static GLib.HashTable> app_windows; private static LoginManager? login_manager; private static Sqlite.Database db; + private static int dock_height; + private static int wingpanel_height; + private static Settings dock_settings; + private static Settings wingpanel_settings; public static void init (WindowTracker window_tracker) { WindowStateSaver.window_tracker = window_tracker; @@ -22,6 +26,18 @@ public class Gala.WindowStateSaver : GLib.Object { connect_to_logind.begin (); + dock_settings = new Settings ("io.elementary.dock"); + dock_height = dock_settings.get_int ("height"); + dock_settings.changed["height"].connect (() => { + dock_height = dock_settings.get_int ("height"); + }); + + wingpanel_settings = new Settings ("io.elementary.desktop.wingpanel"); + wingpanel_height = wingpanel_settings.get_int ("height"); + wingpanel_settings.changed["height"].connect (() => { + wingpanel_height = wingpanel_settings.get_int ("height"); + }); + var dir = Path.build_filename (GLib.Environment.get_user_data_dir (), "io.elementary.gala"); Posix.mkdir (dir, 0775); var path = Path.build_filename (dir, "windowstate.db"); @@ -142,6 +158,12 @@ public class Gala.WindowStateSaver : GLib.Object { var frame_rect = window.get_frame_rect (); + frame_rect.y += (wingpanel_height - dock_height) / 2; + + if (validate_last_window_position (window.display, { frame_rect.x, frame_rect.y, frame_rect.width, frame_rect.height })) { + window.move_resize_frame (true, frame_rect.x, frame_rect.y, frame_rect.width, frame_rect.height); + } + const string INSERT_QUERY = "INSERT INTO apps (app_id, window_index, last_x, last_y, last_width, last_height) VALUES ($app_id, $window_index, $last_x, $last_y, $last_width, $last_height);"; rc = db.prepare_v2 (INSERT_QUERY, INSERT_QUERY.length, out stmt); if (rc != Sqlite.OK) {