* ipc.c: UNIX domain socket IPC (initialization, client handling, protocol).
*
*/
-#ifndef I3_IPC_H
-#define I3_IPC_H
+#pragma once
#include <ev.h>
#include <stdbool.h>
#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;
/*
* 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)
+
+/**
+ * Emulates mkdir -p (creates any missing folders)
+ *
+ */
+bool mkdirp(const char *path);
/**
* Handler for activity on the listening socket, meaning that a new client
*/
void ipc_send_workspace_focus_event(Con *current, Con *old);
-#endif
+/**
+ * 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);