From e2c6c45a2636b24b7efd1dacd2227689a0fe08c6 Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Tue, 16 Nov 2021 16:09:18 +0100 Subject: rc/workspace: handle screen removal cleanly --- workspace.lua | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'workspace.lua') diff --git a/workspace.lua b/workspace.lua index 51eff90..82e5511 100644 --- a/workspace.lua +++ b/workspace.lua @@ -74,6 +74,26 @@ function Workspace:_apply_state() timer.delayed_call(awful.screen.focus, orig_focus) end +-- save pages when a screen is removed +function Workspace:_tag_request_screen(page) + local desk_idx = utils.tag_desk_idx(page) + local page_idx = utils.tag_page_idx(page) + + if page.selected then + self.desktops[desk_idx].indices_free:push(page_idx) + page.selected = false + end + + self.desktops[desk_idx].screen_map[page_idx] = nil + + for s_other in screen do + if s_other ~= page.screen then + page.screen = s_other + break + end + end +end + function Workspace:view(screen, desktop_idx, page_idx) local desktop = self.desktops[desktop_idx] @@ -203,6 +223,16 @@ function Workspace:new(layouts) o:_add_desktop(i, "Desktop " .. i, 10) end + -- handle screen removal + tag.connect_signal("request::screen", + function(t) + o:_tag_request_screen(t) + end) + screen.connect_signal("removed", + function (s) + o.screen_state[s] = nil + end) + return o end -- cgit v1.2.3