i3
Macros | Functions
startup.c File Reference
#include "all.h"
#include "sd-daemon.h"
#include <sys/types.h>
#include <sys/wait.h>
#include <paths.h>
#include <libsn/sn-launcher.h>
Include dependency graph for startup.c:

Go to the source code of this file.

Macros

#define I3__FILE__   "startup.c"
 
#define SN_API_NOT_YET_FROZEN   1
 

Functions

static TAILQ_HEAD (startup_sequence_head, Startup_Sequence)
 
static int _prune_startup_sequences (void)
 
void startup_sequence_delete (struct Startup_Sequence *sequence)
 Deletes a startup sequence, ignoring whether its timeout has elapsed. More...
 
void start_application (const char *command, bool no_startup_id)
 Starts the given application by passing it through a shell. More...
 
void startup_monitor_event (SnMonitorEvent *event, void *userdata)
 Called by libstartup-notification when something happens. More...
 
struct Startup_Sequencestartup_sequence_get (i3Window *cwindow, xcb_get_property_reply_t *startup_id_reply, bool ignore_mapped_leader)
 Gets the stored startup sequence for the _NET_STARTUP_ID of a given window. More...
 
char * startup_workspace_for_window (i3Window *cwindow, xcb_get_property_reply_t *startup_id_reply)
 Checks if the given window belongs to a startup notification by checking if the _NET_STARTUP_ID property is set on the window (or on its leader, if it’s unset). More...
 

Macro Definition Documentation

#define I3__FILE__   "startup.c"

Definition at line 2 of file startup.c.

#define SN_API_NOT_YET_FROZEN   1

Definition at line 22 of file startup.c.

Function Documentation

static int _prune_startup_sequences ( void  )
static

Definition at line 72 of file startup.c.

References Startup_Sequence::delete_at, startup_sequence_delete(), TAILQ_END, TAILQ_FIRST, and TAILQ_NEXT.

Referenced by startup_monitor_event().

Here is the call graph for this function:

void start_application ( const char *  command,
bool  no_startup_id 
)

Starts the given application by passing it through a shell.

We use double fork to avoid zombie processes. As the started application’s parent exits (immediately), the application is reparented to init (process-id 1), which correctly handles childs, so we don’t have to do it :-).

The shell is determined by looking for the SHELL environment variable. If it does not exist, /bin/sh is used.

The no_startup_id flag determines whether a startup notification context (and ID) should be created, which is the default and encouraged behavior.

Definition at line 133 of file startup.c.

References con_get_workspace(), conn_screen, context, Startup_Sequence::context, focused, Startup_Sequence::id, last_timestamp, listen_fds, LOG, main_loop, Con::name, original_rlimit_core, scalloc(), SD_LISTEN_FDS_START, sndisplay, sstrdup(), TAILQ_INSERT_TAIL, Startup_Sequence::workspace, xcb_set_root_cursor(), XCURSOR_CURSOR_WATCH, xcursor_set_root_cursor(), and xcursor_supported.

Referenced by cmd_exec().

Here is the call graph for this function:

void startup_monitor_event ( SnMonitorEvent *  event,
void *  userdata 
)

Called by libstartup-notification when something happens.

Definition at line 214 of file startup.c.

References _prune_startup_sequences(), Startup_Sequence::delete_at, DLOG, Startup_Sequence::id, TAILQ_FOREACH, xcb_set_root_cursor(), XCURSOR_CURSOR_POINTER, xcursor_set_root_cursor(), and xcursor_supported.

Referenced by property_handlers_init().

Here is the call graph for this function:

void startup_sequence_delete ( struct Startup_Sequence sequence)

Deletes a startup sequence, ignoring whether its timeout has elapsed.

Useful when e.g. a window is moved between workspaces and its children shouldn't spawn on the original workspace.

Definition at line 104 of file startup.c.

References Startup_Sequence::context, Startup_Sequence::delete_at, DLOG, FREE, Startup_Sequence::id, TAILQ_REMOVE, and Startup_Sequence::workspace.

Referenced by _prune_startup_sequences(), con_move_to_workspace(), and startup_workspace_for_window().

struct Startup_Sequence* startup_sequence_get ( i3Window cwindow,
xcb_get_property_reply_t *  startup_id_reply,
bool  ignore_mapped_leader 
)

Gets the stored startup sequence for the _NET_STARTUP_ID of a given window.

Definition at line 264 of file startup.c.

References con_by_window_id(), conn, DLOG, FREE, Startup_Sequence::id, Window::id, Window::leader, and TAILQ_FOREACH.

Referenced by con_move_to_workspace(), and startup_workspace_for_window().

Here is the call graph for this function:

char* startup_workspace_for_window ( i3Window cwindow,
xcb_get_property_reply_t *  startup_id_reply 
)

Checks if the given window belongs to a startup notification by checking if the _NET_STARTUP_ID property is set on the window (or on its leader, if it’s unset).

If so, returns the workspace on which the startup was initiated. Returns NULL otherwise.

Definition at line 342 of file startup.c.

References Startup_Sequence::delete_at, DLOG, Startup_Sequence::id, startup_sequence_delete(), startup_sequence_get(), and Startup_Sequence::workspace.

Referenced by manage_window().

Here is the call graph for this function:

static TAILQ_HEAD ( startup_sequence_head  ,
Startup_Sequence   
)
static

Definition at line 25 of file startup.c.

References DLOG, Startup_Sequence::id, and TAILQ_FOREACH.