i3
|
#include <ev.h>
#include <stdbool.h>
#include <yajl/yajl_gen.h>
#include <yajl/yajl_parse.h>
#include "data.h"
#include "tree.h"
#include "config.h"
#include "i3/ipc.h"
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 )(int, uint8_t *, int, uint32_t, uint32_t) |
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. More... | |
int | ipc_create_socket (const char *filename) |
Creates the UNIX domain socket at the given path, sets it to non-blocking mode, bind()s and listen()s on it. More... | |
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. More... | |
void | ipc_shutdown (void) |
Calls shutdown() on each socket and closes it. More... | |
void | dump_node (yajl_gen gen, Con *con, bool inplace_restart) |
void | ipc_send_workspace_focus_event (Con *current, Con *old) |
For the workspace "focus" event we send, along the usual "change" field, also the current and previous workspace, in "current" and "old" respectively. More... | |
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". More... | |
void | ipc_send_barconfig_update_event (Barconfig *barconfig) |
For the barconfig update events, we send the serialized barconfig. More... | |
Variables | |
char * | current_socketpath |
#define IPC_HANDLER | ( | name | ) |
typedef void(* handler_t)(int, uint8_t *, int, uint32_t, uint32_t) |
typedef struct ipc_client ipc_client |
void dump_node | ( | yajl_gen | gen, |
Con * | con, | ||
bool | inplace_restart | ||
) |
Definition at line 154 of file ipc.c.
References BS_NONE, BS_NORMAL, BS_PIXEL, con_is_split(), con_orientation(), DLOG, Match::dock, dump_node(), DUMP_PROPERTY, dump_rect(), DUMP_REGEX, focused, HORIZ, i3string_as_utf8(), Match::insert_where, L_DEFAULT, L_DOCKAREA, L_OUTPUT, L_SPLITH, L_SPLITV, L_STACKED, L_TABBED, TAILQ_FOREACH, y, and ystr.
Referenced by dump_node(), IPC_HANDLER(), ipc_send_window_event(), ipc_send_workspace_focus_event(), and store_restart_layout().
int ipc_create_socket | ( | const char * | filename | ) |
Creates the UNIX domain socket at the given path, sets it to non-blocking mode, bind()s and listen()s on it.
Definition at line 1007 of file ipc.c.
References current_socketpath, DLOG, FREE, mkdirp(), path_exists(), resolve_tilde(), and sstrdup().
Referenced by main().
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 973 of file ipc.c.
References DLOG, ipc_receive_message(), scalloc(), and TAILQ_INSERT_TAIL.
Referenced by main().
void ipc_send_barconfig_update_event | ( | Barconfig * | barconfig | ) |
For the barconfig update events, we send the serialized barconfig.
Definition at line 1120 of file ipc.c.
References DLOG, dump_bar_config(), Barconfig::id, ipc_send_event(), y, and ygenalloc.
Referenced by update_barconfig().
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 75 of file ipc.c.
References ipc_client::events, ipc_client::fd, ipc_send_message(), ipc_client::num_events, and TAILQ_FOREACH.
Referenced by _workspace_show(), cmd_move_workspace_to_output(), cmd_reload(), cmd_rename_workspace(), con_on_remove_child(), handle_screen_change(), ipc_send_barconfig_update_event(), ipc_send_window_event(), ipc_send_workspace_focus_event(), switch_mode(), workspace_get(), and workspace_update_urgent_flag().
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".
Definition at line 1091 of file ipc.c.
References DLOG, dump_node(), Window::id, ipc_send_event(), Con::window, y, ygenalloc, and ystr.
Referenced by con_toggle_fullscreen(), handle_windowname_change(), handle_windowname_change_legacy(), manage_window(), and x_push_changes().
For the workspace "focus" event we send, along the usual "change" field, also the current and previous workspace, in "current" and "old" respectively.
Definition at line 1058 of file ipc.c.
References dump_node(), ipc_send_event(), y, ygenalloc, and ystr.
Referenced by _workspace_show(), and move_to_output_directed().
void ipc_shutdown | ( | void | ) |
Calls shutdown() on each socket and closes it.
This function to be called when exiting or restarting only!
Definition at line 98 of file ipc.c.
References ipc_client::fd, TAILQ_EMPTY, TAILQ_FIRST, and TAILQ_REMOVE.
Referenced by cmd_exit(), cmd_restart(), and i3_restart().
char* current_socketpath |
Definition at line 23 of file ipc.c.
Referenced by ipc_create_socket(), and x_set_i3_atoms().