i3
ipc.h File Reference
#include <config.h>
#include <libev/ev.h>
#include <yajl/yajl_gen.h>
#include <yajl/yajl_parse.h>
#include "data.h"
#include "tree.h"
#include "configuration.h"
#include "i3/ipc.h"
Include dependency graph for ipc.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  ipc_client
 

Macros

#define IPC_HANDLER(name)
 

Typedefs

typedef struct ipc_client ipc_client
 
typedef void(* handler_t) (ipc_client *, uint8_t *, int, uint32_t, uint32_t)
 

Enumerations

enum  shutdown_reason_t { SHUTDOWN_REASON_RESTART , SHUTDOWN_REASON_EXIT }
 Calls to ipc_shutdown() should provide a reason for the shutdown. More...
 

Functions

void ipc_new_client (EV_P_ struct ev_io *w, int revents)
 Handler for activity on the listening socket, meaning that a new client has just connected and we should accept() him.
 
ipc_clientipc_new_client_on_fd (EV_P_ int fd)
 ipc_new_client_on_fd() only sets up the event handler for activity on the new connection and inserts the file descriptor into the list of clients.
 
void ipc_send_event (const char *event, uint32_t message_type, const char *payload)
 Sends the specified event to all IPC clients which are currently connected and subscribed to this kind of event.
 
void ipc_shutdown (shutdown_reason_t reason, int exempt_fd)
 Calls shutdown() on each socket and closes it.
 
void dump_node (yajl_gen gen, Con *con, bool inplace_restart)
 
yajl_gen ipc_marshal_workspace_event (const char *change, Con *current, Con *old)
 Generates a json workspace event.
 
void ipc_send_workspace_event (const char *change, Con *current, Con *old)
 For the workspace events we send, along with the usual "change" field, also the workspace container in "current".
 
void ipc_send_window_event (const char *property, Con *con)
 For the window events we send, along the usual "change" field, also the window container, in "container".
 
void ipc_send_barconfig_update_event (Barconfig *barconfig)
 For the barconfig update events, we send the serialized barconfig.
 
void ipc_send_binding_event (const char *event_type, Binding *bind, const char *modename)
 For the binding events, we send the serialized binding struct.
 
void ipc_set_kill_timeout (ev_tstamp new)
 Set the maximum duration that we allow for a connection with an unwriteable socket.
 
void ipc_confirm_restart (ipc_client *client)
 Sends a restart reply to the IPC client on the specified fd.
 

Variables

char * current_socketpath
 

Macro Definition Documentation

◆ IPC_HANDLER

#define IPC_HANDLER ( name)
Value:
static void handle_##name(ipc_client *client, uint8_t *message, \
int size, uint32_t message_size, \
uint32_t message_type)

Definition at line 59 of file ipc.h.

Typedef Documentation

◆ handler_t

typedef void(* handler_t) (ipc_client *, uint8_t *, int, uint32_t, uint32_t)

Definition at line 56 of file ipc.h.

◆ ipc_client

typedef struct ipc_client ipc_client

Enumeration Type Documentation

◆ shutdown_reason_t

Calls to ipc_shutdown() should provide a reason for the shutdown.

Enumerator
SHUTDOWN_REASON_RESTART 
SHUTDOWN_REASON_EXIT 

Definition at line 93 of file ipc.h.

Function Documentation

◆ dump_node()

◆ ipc_confirm_restart()

void ipc_confirm_restart ( ipc_client * client)

Sends a restart reply to the IPC client on the specified fd.

Definition at line 1735 of file ipc.c.

References DLOG, ipc_client::fd, ipc_push_pending(), and ipc_send_client_message().

Referenced by main().

Here is the call graph for this function:

◆ ipc_marshal_workspace_event()

yajl_gen ipc_marshal_workspace_event ( const char * change,
Con * current,
Con * old )

Generates a json workspace event.

Returns a dynamically allocated yajl generator. Free with yajl_gen_free().

Definition at line 1599 of file ipc.c.

References dump_node(), y, ygenalloc, and ystr.

Referenced by con_on_remove_child(), ipc_send_workspace_event(), and workspace_show().

Here is the call graph for this function:

◆ ipc_new_client()

void ipc_new_client ( EV_P_ struct ev_io * w,
int revents )

Handler for activity on the listening socket, meaning that a new client has just connected and we should accept() him.

Sets up the event handler for activity on the new connection and inserts the file descriptor into the list of clients.

Definition at line 1550 of file ipc.c.

Referenced by main().

◆ ipc_new_client_on_fd()

ipc_client * ipc_new_client_on_fd ( EV_P_ int fd)

ipc_new_client_on_fd() only sets up the event handler for activity on the new connection and inserts the file descriptor into the list of clients.

This variant is useful for the inherited IPC connection when restarting.

Definition at line 1575 of file ipc.c.

References DLOG, ipc_client::fd, ipc_receive_message(), ipc_socket_writeable_cb(), ipc_client::read_callback, scalloc(), set_nonblock(), TAILQ_INSERT_TAIL, and ipc_client::write_callback.

Referenced by main().

Here is the call graph for this function:

◆ ipc_send_barconfig_update_event()

void ipc_send_barconfig_update_event ( Barconfig * barconfig)

For the barconfig update events, we send the serialized barconfig.

Definition at line 1679 of file ipc.c.

References DLOG, dump_bar_config(), Barconfig::id, ipc_send_event(), y, and ygenalloc.

Referenced by cmd_bar_hidden_state(), cmd_bar_mode(), and cmd_reload().

Here is the call graph for this function:

◆ ipc_send_binding_event()

void ipc_send_binding_event ( const char * event_type,
Binding * bind,
const char * modename )

For the binding events, we send the serialized binding struct.

Definition at line 1698 of file ipc.c.

References DLOG, dump_binding(), ipc_send_event(), Binding::keycode, Binding::symbol, y, ygenalloc, and ystr.

Referenced by run_binding().

Here is the call graph for this function:

◆ ipc_send_event()

void ipc_send_event ( const char * event,
uint32_t message_type,
const char * payload )

Sends the specified event to all IPC clients which are currently connected and subscribed to this kind of event.

Definition at line 147 of file ipc.c.

References ipc_client::events, ipc_send_client_message(), ipc_client::num_events, and TAILQ_FOREACH.

Referenced by con_on_remove_child(), handle_configure_notify(), handle_screen_change(), IPC_HANDLER(), ipc_send_barconfig_update_event(), ipc_send_binding_event(), ipc_send_shutdown_event(), ipc_send_window_event(), ipc_send_workspace_event(), switch_mode(), and workspace_show().

Here is the call graph for this function:

◆ ipc_send_window_event()

void ipc_send_window_event ( const char * property,
Con * con )

◆ ipc_send_workspace_event()

void ipc_send_workspace_event ( const char * change,
Con * current,
Con * old )

For the workspace events we send, along with the usual "change" field, also the workspace container in "current".

For focus events, we send the previously focused workspace in "old".

Definition at line 1634 of file ipc.c.

References ipc_marshal_workspace_event(), ipc_send_event(), and y.

Referenced by cmd_append_layout(), cmd_reload(), cmd_rename_workspace(), create_workspace_on_output(), workspace_get(), workspace_move_to_output(), workspace_show(), and workspace_update_urgent_flag().

Here is the call graph for this function:

◆ ipc_set_kill_timeout()

void ipc_set_kill_timeout ( ev_tstamp new)

Set the maximum duration that we allow for a connection with an unwriteable socket.

Referenced by CFGFUN().

◆ ipc_shutdown()

void ipc_shutdown ( shutdown_reason_t reason,
int exempt_fd )

Calls shutdown() on each socket and closes it.

This function is to be called when exiting or restarting only!

exempt_fd is never closed. Set to -1 to close all fds.

Definition at line 192 of file ipc.c.

References ipc_client::fd, free_ipc_client(), ipc_send_shutdown_event(), TAILQ_EMPTY, and TAILQ_FIRST.

Referenced by cmd_restart(), i3_exit(), and i3_restart().

Here is the call graph for this function:

Variable Documentation

◆ current_socketpath

char* current_socketpath
extern

Definition at line 26 of file ipc.c.

Referenced by main(), start_application(), and x_set_i3_atoms().