X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=include%2Fipc.h;h=e1c18816715e1fccddc199a19f736ed184e1b6e2;hb=988cc3ccaf59a0c25d9df47337bb9bd8826f6b31;hp=63d59141cee191c5325e50d79f3bc2364b5eb1d8;hpb=f7a1a9fb20b793a32dacdc8ca319952be31ace60;p=i3%2Fi3 diff --git a/include/ipc.h b/include/ipc.h index 63d59141..e1c18816 100644 --- a/include/ipc.h +++ b/include/ipc.h @@ -1,29 +1,35 @@ /* - * vim:ts=8:expandtab + * vim:ts=4:sw=4:expandtab * * i3 - an improved dynamic tiling window manager + * © 2009 Michael Stapelberg and contributors (see also: LICENSE) * - * © 2009-2010 Michael Stapelberg and contributors - * - * See file LICENSE for license information. + * ipc.c: UNIX domain socket IPC (initialization, client handling, protocol). * */ - -#ifndef _IPC_H -#define _IPC_H +#pragma once #include +#include +#include +#include + +#include "data.h" +#include "tree.h" +#include "config.h" #include "i3/ipc.h" +extern char *current_socketpath; + typedef struct ipc_client { - int fd; + int fd; - /* The events which this client wants to receive */ - int num_events; - char **events; + /* The events which this client wants to receive */ + int num_events; + char **events; - TAILQ_ENTRY(ipc_client) clients; + TAILQ_ENTRY(ipc_client) clients; } ipc_client; /* @@ -36,13 +42,13 @@ typedef struct ipc_client { * message_type is the type of the message as the sender specified it. * */ -typedef void(*handler_t)(int, uint8_t*, int, uint32_t, uint32_t); +typedef void (*handler_t)(int, uint8_t *, int, uint32_t, uint32_t); /* Macro to declare a callback */ -#define IPC_HANDLER(name) \ - static void handle_ ## name (int fd, uint8_t *message, \ - int size, uint32_t message_size, \ - uint32_t message_type) +#define IPC_HANDLER(name) \ + static void handle_##name(int fd, uint8_t *message, \ + int size, uint32_t message_size, \ + uint32_t message_type) /** * Handler for activity on the listening socket, meaning that a new client @@ -72,6 +78,35 @@ void ipc_send_event(const char *event, uint32_t message_type, const char *payloa * when exiting or restarting only! * */ -void ipc_shutdown(); +void ipc_shutdown(void); + +void dump_node(yajl_gen gen, Con *con, bool inplace_restart); + +/** + * Generates a json workspace event. Returns a dynamically allocated yajl + * generator. Free with yajl_gen_free(). + */ +yajl_gen ipc_marshal_workspace_event(const char *change, Con *current, Con *old); -#endif +/** + * 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". + */ +void ipc_send_workspace_event(const char *change, Con *current, Con *old); + +/** + * For the window events we send, along the usual "change" field, + * also the window container, in "container". + */ +void ipc_send_window_event(const char *property, Con *con); + +/** + * For the barconfig update events, we send the serialized barconfig. + */ +void ipc_send_barconfig_update_event(Barconfig *barconfig); + +/** + * For the binding events, we send the serialized binding struct. + */ +void ipc_send_binding_event(const char *event_type, Binding *bind);