client: Add swapped, raised and lowered signals
This allow layout "arrange" to be called less often and react on the cause of the change itself rather than it's consequences (usually, the "focus" signal). Previously, the layout were re-arranged everytime the focus changed. Now, with "raised" and "lowered", it require less "arrange". "swapped" allow smarted layouts. Currently, swapped cause a full re-arrange. It re-read the "index" list from scratch and create a "new" layout. With "swapped", incremental layout changes are possible. Fixes https://github.com/awesomeWM/awesome/issues/616
This commit is contained in:
parent
0d1c98a314
commit
55190646c4
|
@ -205,7 +205,8 @@ for s = 1, capi.screen.count() do
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
capi.client.connect_signal("focus", function(c) layout.arrange(c.screen) end)
|
capi.client.connect_signal("raised", function(c) layout.arrange(c.screen) end)
|
||||||
|
capi.client.connect_signal("lowered", function(c) layout.arrange(c.screen) end)
|
||||||
capi.client.connect_signal("list", function()
|
capi.client.connect_signal("list", function()
|
||||||
for screen = 1, capi.screen.count() do
|
for screen = 1, capi.screen.count() do
|
||||||
layout.arrange(screen)
|
layout.arrange(screen)
|
||||||
|
|
|
@ -1602,6 +1602,17 @@ luaA_client_swap(lua_State *L)
|
||||||
*ref_swap = c;
|
*ref_swap = c;
|
||||||
|
|
||||||
luaA_class_emit_signal(L, &client_class, "list", 0);
|
luaA_class_emit_signal(L, &client_class, "list", 0);
|
||||||
|
|
||||||
|
luaA_object_push(L, swap);
|
||||||
|
lua_pushboolean(L, true);
|
||||||
|
luaA_object_emit_signal(L, -4, "swapped", 2);
|
||||||
|
lua_pop(L, 2);
|
||||||
|
|
||||||
|
luaA_object_push(L, swap);
|
||||||
|
luaA_object_push(L, c);
|
||||||
|
lua_pushboolean(L, false);
|
||||||
|
luaA_object_emit_signal(L, -3, "swapped", 2);
|
||||||
|
lua_pop(L, 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1688,7 +1699,13 @@ static int
|
||||||
luaA_client_raise(lua_State *L)
|
luaA_client_raise(lua_State *L)
|
||||||
{
|
{
|
||||||
client_t *c = luaA_checkudata(L, 1, &client_class);
|
client_t *c = luaA_checkudata(L, 1, &client_class);
|
||||||
|
|
||||||
|
/* Avoid sending the signal if nothing was done */
|
||||||
|
if (c->transient_for == NULL && globalconf.stack.tab[globalconf.stack.len-1] == c)
|
||||||
|
return 0;
|
||||||
|
|
||||||
client_raise(c);
|
client_raise(c);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1701,12 +1718,21 @@ luaA_client_lower(lua_State *L)
|
||||||
{
|
{
|
||||||
client_t *c = luaA_checkudata(L, 1, &client_class);
|
client_t *c = luaA_checkudata(L, 1, &client_class);
|
||||||
|
|
||||||
|
/* Avoid sending the signal if nothing was done */
|
||||||
|
if (globalconf.stack.len && globalconf.stack.tab[0] == c)
|
||||||
|
return 0;
|
||||||
|
|
||||||
stack_client_push(c);
|
stack_client_push(c);
|
||||||
|
|
||||||
/* Traverse all transient layers. */
|
/* Traverse all transient layers. */
|
||||||
for(client_t *tc = c->transient_for; tc; tc = tc->transient_for)
|
for(client_t *tc = c->transient_for; tc; tc = tc->transient_for)
|
||||||
stack_client_push(tc);
|
stack_client_push(tc);
|
||||||
|
|
||||||
|
/* Notify the listeners */
|
||||||
|
luaA_object_push(L, c);
|
||||||
|
luaA_object_emit_signal(L, -1, "lowered", 0);
|
||||||
|
lua_pop(L, 1);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2736,6 +2762,12 @@ client_class_setup(lua_State *L)
|
||||||
* @signal .list
|
* @signal .list
|
||||||
*/
|
*/
|
||||||
signal_add(&client_class.signals, "list");
|
signal_add(&client_class.signals, "list");
|
||||||
|
/** When 2 clients are swapped
|
||||||
|
* @args client The other client
|
||||||
|
* @args is_source If self is the source or the destination of the swap
|
||||||
|
* @signal .swapped
|
||||||
|
*/
|
||||||
|
signal_add(&client_class.signals, "swapped");
|
||||||
/**
|
/**
|
||||||
* @signal .manage
|
* @signal .manage
|
||||||
*/
|
*/
|
||||||
|
@ -2979,6 +3011,14 @@ client_class_setup(lua_State *L)
|
||||||
* @tag t The tag object.
|
* @tag t The tag object.
|
||||||
*/
|
*/
|
||||||
signal_add(&client_class.signals, "untagged");
|
signal_add(&client_class.signals, "untagged");
|
||||||
|
/**
|
||||||
|
* @signal .raised
|
||||||
|
*/
|
||||||
|
signal_add(&client_class.signals, "raised");
|
||||||
|
/**
|
||||||
|
* @signal .lowered
|
||||||
|
*/
|
||||||
|
signal_add(&client_class.signals, "lowered");
|
||||||
}
|
}
|
||||||
|
|
||||||
// vim: filetype=c:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:textwidth=80
|
// vim: filetype=c:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:textwidth=80
|
||||||
|
|
|
@ -208,6 +208,12 @@ client_raise(client_t *c)
|
||||||
|
|
||||||
/* Push c on top of the stack. */
|
/* Push c on top of the stack. */
|
||||||
stack_client_append(c);
|
stack_client_append(c);
|
||||||
|
|
||||||
|
/* Notify the listeners */
|
||||||
|
lua_State *L = globalconf_get_lua_State();
|
||||||
|
luaA_object_push(L, c);
|
||||||
|
luaA_object_emit_signal(L, -1, "raised", 0);
|
||||||
|
lua_pop(L, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Check if a client has fixed size.
|
/** Check if a client has fixed size.
|
||||||
|
|
Loading…
Reference in New Issue