2 * vim:ts=4:sw=4:expandtab
4 * i3 - an improved dynamic tiling window manager
5 * © 2009-2011 Michael Stapelberg and contributors (see also: LICENSE)
7 * startup.c: Startup notification code. Ensures a startup notification context
8 * is setup when launching applications. We store the current
9 * workspace to open windows in that startup notification context on
10 * the appropriate workspace.
16 #define SN_API_NOT_YET_FROZEN 1
17 #include <libsn/sn-monitor.h>
20 * Starts the given application by passing it through a shell. We use double
21 * fork to avoid zombie processes. As the started application’s parent exits
22 * (immediately), the application is reparented to init (process-id 1), which
23 * correctly handles childs, so we don’t have to do it :-).
25 * The shell is determined by looking for the SHELL environment variable. If
26 * it does not exist, /bin/sh is used.
28 * The no_startup_id flag determines whether a startup notification context
29 * (and ID) should be created, which is the default and encouraged behavior.
32 void start_application(const char *command, bool no_startup_id);
35 * Deletes a startup sequence, ignoring whether its timeout has elapsed.
36 * Useful when e.g. a window is moved between workspaces and its children
37 * shouldn't spawn on the original workspace.
40 void startup_sequence_delete(struct Startup_Sequence *sequence);
43 * Called by libstartup-notification when something happens
46 void startup_monitor_event(SnMonitorEvent *event, void *userdata);
49 * Gets the stored startup sequence for the _NET_STARTUP_ID of a given window.
52 struct Startup_Sequence *startup_sequence_get(i3Window *cwindow,
53 xcb_get_property_reply_t *startup_id_reply, bool ignore_mapped_leader);
56 * Checks if the given window belongs to a startup notification by checking if
57 * the _NET_STARTUP_ID property is set on the window (or on its leader, if it’s
60 * If so, returns the workspace on which the startup was initiated.
61 * Returns NULL otherwise.
64 char *startup_workspace_for_window(i3Window *cwindow, xcb_get_property_reply_t *startup_id_reply);