From: Corey Thompson <[email protected]>
* client.c: Previous geometry as argument to property::geometry signal
* client.lua: Initialize floating_geometry using the previous argumment
Conflicts:
lib/awful/client.lua.in
objects/client.c
Signed-off-by: Corey Thompson <[email protected]>
---
lib/awful/client.lua.in | 14 +++++++++-----
objects/client.c | 23 ++++++++++++++++++-----
2 files changed, 27 insertions(+), 10 deletions(-)
diff --git a/lib/awful/client.lua.in b/lib/awful/client.lua.in
index 03dcfab..ed84b41 100644
--- a/lib/awful/client.lua.in
+++ b/lib/awful/client.lua.in
@@ -586,11 +586,15 @@ end
-- Store the initial client geometry.
capi.client.connect_signal("new", function(c)
- local function store_init_geometry(c)
- property.set(c, "floating_geometry", c:geometry())
- c:disconnect_signal("property::border_width", store_init_geometry)
- end
- c:connect_signal("property::border_width", store_init_geometry)
+ local function store_init_geometry(c, p)
+ -- the first property::geometry signal is emitted before
+ -- borders and titlebar have been added, so hold off for
+ -- the second signal and then take the previous geometry
+ if not p then return end
+ property.set(c, "floating_geometry", p)
+ c:disconnect_signal("property::geometry", store_init_geometry)
+ end
+ c:connect_signal("property::geometry", store_init_geometry)
end)
capi.client.connect_signal("manage", function(c)
diff --git a/objects/client.c b/objects/client.c
index 452f801..7ac860b 100644
--- a/objects/client.c
+++ b/objects/client.c
@@ -619,15 +619,28 @@ client_resize(client_t *c, area_t geometry)
screen_client_moveto(c, new_screen, false);
luaA_object_push(globalconf.L, c);
- luaA_object_emit_signal(globalconf.L, -1, "property::geometry", 0);
+ int nargs = luaA_pusharea(globalconf.L, geometry_prev);
+ luaA_object_emit_signal(globalconf.L, -1 - nargs,
"property::geometry", nargs);
if (old_geometry.x != geometry.x)
- luaA_object_emit_signal(globalconf.L, -1, "property::x", 0);
+ {
+ lua_pushnumber(globalconf.L, geometry_prev.x);
+ luaA_object_emit_signal(globalconf.L, -2, "property::x", 1);
+ }
if (old_geometry.y != geometry.y)
- luaA_object_emit_signal(globalconf.L, -1, "property::y", 0);
+ {
+ lua_pushnumber(globalconf.L, geometry_prev.y);
+ luaA_object_emit_signal(globalconf.L, -2, "property::y", 1);
+ }
if (old_geometry.width != geometry.width)
- luaA_object_emit_signal(globalconf.L, -1, "property::width", 0);
+ {
+ lua_pushnumber(globalconf.L, geometry_prev.width);
+ luaA_object_emit_signal(globalconf.L, -2, "property::width", 1);
+ }
if (old_geometry.height != geometry.height)
- luaA_object_emit_signal(globalconf.L, -1, "property::height", 0);
+ {
+ lua_pushnumber(globalconf.L, geometry_prev.height);
+ luaA_object_emit_signal(globalconf.L, -2, "property::height", 1);
+ }
lua_pop(globalconf.L, 1);
return true;
--
1.7.9.4
--
To unsubscribe, send mail to [email protected].