awful.rules.execute: use delayed_call for emitting request::activate

This is a followup to commit 90fde13, which caused the client not to be
visible during the request::activate callback.

This requires an initial call to `awesome_refresh` before the main loop
to get `awesome.startup` right.

Ref: https://github.com/awesomeWM/awesome/commit/90fde139#commitcomment-9308225
This commit is contained in:
Daniel Hahler 2015-01-21 12:38:49 +01:00
parent 3ab3bb900a
commit 6963ede3dc
2 changed files with 9 additions and 1 deletions

View File

@ -545,6 +545,10 @@ main(int argc, char **argv)
g_main_context_set_poll_func(g_main_context_default(), &a_glib_poll);
gettimeofday(&last_wakeup, NULL);
/* Do all deferred work now once outside of the loop to get awesome.startup
* right. */
awesome_refresh();
/* main event loop */
globalconf.loop = g_main_loop_new(NULL, FALSE);
g_main_loop_run(globalconf.loop);

View File

@ -12,6 +12,7 @@ local ipairs = ipairs
local pairs = pairs
local aclient = require("awful.client")
local atag = require("awful.tag")
local timer = require("gears.timer")
--- Apply rules to clients at startup.
-- awful.rules
@ -234,7 +235,10 @@ function rules.execute(c, props, callbacks)
-- Do this at last so we do not erase things done by the focus
-- signal.
if props.focus and (type(props.focus) ~= "function" or props.focus(c)) then
c:emit_signal('request::activate',"rules")
local cb = function(c)
c:emit_signal('request::activate', "rules")
end
timer.delayed_call(cb, c)
end
end