Merge pull request #544 from blueyed/client-snid-should-be-nil-without-snid

c.startup_id should be nil when launched without startup notification support
This commit is contained in:
Daniel Hahler 2015-11-05 23:24:54 +01:00
commit bef7dfad47
3 changed files with 51 additions and 3 deletions

View File

@ -31,7 +31,7 @@ install:
- sudo apt-get install -y libcairo2-dev xmlto asciidoc libpango1.0-dev gperf luadoc libxcb-xtest0-dev libxcb-icccm4-dev libxcb-randr0-dev libxcb-keysyms1-dev libxcb-xinerama0-dev libxcb-image0-dev libev-dev libimlib2-dev libdbus-1-dev libxdg-basedir-dev libstartup-notification0-dev imagemagick libxcb1-dev libxcb-shape0-dev libxcb-util0-dev libxcursor-dev libx11-xcb-dev libxcb-cursor-dev libxcb-xkb-dev libxkbcommon-dev libxkbcommon-x11-dev - sudo apt-get install -y libcairo2-dev xmlto asciidoc libpango1.0-dev gperf luadoc libxcb-xtest0-dev libxcb-icccm4-dev libxcb-randr0-dev libxcb-keysyms1-dev libxcb-xinerama0-dev libxcb-image0-dev libev-dev libimlib2-dev libdbus-1-dev libxdg-basedir-dev libstartup-notification0-dev imagemagick libxcb1-dev libxcb-shape0-dev libxcb-util0-dev libxcursor-dev libx11-xcb-dev libxcb-cursor-dev libxcb-xkb-dev libxkbcommon-dev libxkbcommon-x11-dev
# Deps for functional tests. # Deps for functional tests.
- sudo apt-get install -y dbus-x11 xterm xdotool xterm xvfb - sudo apt-get install -y dbus-x11 xterm xdotool xterm xvfb rxvt-unicode
# Install Lua (per env). # Install Lua (per env).
- sudo apt-get install -y lib${LUANAME}-dev ${LUANAME} ${INSTALL_PKGS} - sudo apt-get install -y lib${LUANAME}-dev ${LUANAME} ${INSTALL_PKGS}

10
spawn.c
View File

@ -283,7 +283,14 @@ spawn_launchee_timeout(gpointer context)
static void static void
spawn_callback(gpointer user_data) spawn_callback(gpointer user_data)
{ {
SnLauncherContext *context = (SnLauncherContext *) user_data;
setsid(); setsid();
if (context)
sn_launcher_context_setup_child_process(context);
else
/* Unset in case awesome was already started with this variable set */
unsetenv("DESKTOP_STARTUP_ID");
} }
/** Parse a command line. /** Parse a command line.
@ -400,11 +407,10 @@ luaA_spawn(lua_State *L)
/* app will have AWESOME_SPAWN_TIMEOUT seconds to complete, /* app will have AWESOME_SPAWN_TIMEOUT seconds to complete,
* or the timeout function will terminate the launch sequence anyway */ * or the timeout function will terminate the launch sequence anyway */
g_timeout_add_seconds(AWESOME_SPAWN_TIMEOUT, spawn_launchee_timeout, context); g_timeout_add_seconds(AWESOME_SPAWN_TIMEOUT, spawn_launchee_timeout, context);
sn_launcher_context_setup_child_process(context);
} }
retval = g_spawn_async_with_pipes(NULL, argv, NULL, G_SPAWN_SEARCH_PATH, retval = g_spawn_async_with_pipes(NULL, argv, NULL, G_SPAWN_SEARCH_PATH,
spawn_callback, NULL, &pid, spawn_callback, context, &pid,
stdin_ptr, stdout_ptr, stderr_ptr, &error); stdin_ptr, stdout_ptr, stderr_ptr, &error);
g_strfreev(argv); g_strfreev(argv);
if(!retval) if(!retval)

42
tests/test-spawn-snid.lua Normal file
View File

@ -0,0 +1,42 @@
--- Tests for spawn's startup notifications.
local spawn = require("awful.spawn")
local manage_called, c_snid
client.connect_signal("manage", function(c)
manage_called = true
c_snid = c.startup_id
end)
local ret, snid
local steps = {
function(count)
if count == 1 then
ret, snid = spawn('urxvt', true)
elseif manage_called then
local c = client.get()[1]
assert(ret)
assert(snid)
assert(snid == c_snid)
return true
end
end,
-- Test that c.startup_id is nil for a client without startup notifications,
-- and especially not the one from the previous spawn.
function(count)
if count == 1 then
manage_called = false
ret, snid = spawn('urxvt', false)
elseif manage_called then
assert(ret)
assert(snid == nil)
assert(c_snid == nil, "c.startup_snid should be nil!")
return true
end
end
}
require("_runner").run_steps(steps)