From c3bca6ac344577781858e06c83e310b69ac9a4e0 Mon Sep 17 00:00:00 2001 From: Uli Schlachter Date: Fri, 4 Oct 2013 16:12:06 +0200 Subject: [PATCH] client: Don't move clients around across restarts (FS#1159) This kind of forces every client to have a window gravity of "static". This fixes most of the problem of clients moving around across restarts due to the titlebar. What is left is that they move due to the border width which should be handled in another patch. Also, another patch should make this honor the client's actual window gravity. Signed-off-by: Uli Schlachter --- awesome.c | 6 ++++++ objects/client.c | 11 +++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/awesome.c b/awesome.c index 05bd4b2e9..743010b75 100644 --- a/awesome.c +++ b/awesome.c @@ -65,6 +65,12 @@ awesome_atexit(bool restart) lua_pushboolean(globalconf.L, restart); signal_object_emit(globalconf.L, &global_signals, "exit", 1); + /* TODO: Reparent windows back to root window, placing them according to + * their window gravity. Right now we pretend to use static gravity and that + * works automatically thanks to xcb_change_save_set(). See + * titlebar_resize(). + */ + a_dbus_cleanup(); systray_cleanup(); diff --git a/objects/client.c b/objects/client.c index bdbcaaeb6..4dd318c11 100644 --- a/objects/client.c +++ b/objects/client.c @@ -1558,16 +1558,23 @@ titlebar_resize(client_t *c, client_titlebar_t bar, int size) return; /* Now resize the client (and titlebars!) suitably (the client without - * titlebars should keep its current size!) */ + * titlebars should keep its current size!) + * TODO: I guess that this should honor the client's window gravity, right + * now we pretend to have static gravity. See awesome_atexit(). + */ area_t geometry = c->geometry; int change = size - c->titlebar[bar].size; switch (bar) { case CLIENT_TITLEBAR_TOP: + geometry.y -= change; + /* fall through */; case CLIENT_TITLEBAR_BOTTOM: geometry.height += change; break; - case CLIENT_TITLEBAR_RIGHT: case CLIENT_TITLEBAR_LEFT: + geometry.x -= change; + /* fall through */; + case CLIENT_TITLEBAR_RIGHT: geometry.width += change; break; default: