summaryrefslogtreecommitdiff
path: root/workspace.lua
diff options
context:
space:
mode:
Diffstat (limited to 'workspace.lua')
-rw-r--r--workspace.lua30
1 files changed, 30 insertions, 0 deletions
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