]> git.sur5r.net Git - i3/i3/commitdiff
i3-input: use IPC functions from libi3
authorMichael Stapelberg <michael@stapelberg.de>
Sun, 23 Oct 2011 12:15:20 +0000 (13:15 +0100)
committerMichael Stapelberg <michael@stapelberg.de>
Sun, 23 Oct 2011 12:15:20 +0000 (13:15 +0100)
i3-input/Makefile
i3-input/i3-input.h
i3-input/ipc.c
i3-input/main.c

index 5929b4c490c6c8009d07ef8d8227b90369e07b0b..493df784d7e1aacfe5c549fa6dd60dbbf8c09240 100644 (file)
@@ -3,6 +3,8 @@ TOPDIR=..
 
 include $(TOPDIR)/common.mk
 
+CPPFLAGS += -I$(TOPDIR)/include
+
 # Depend on the object files of all source-files in src/*.c and on all header files
 FILES=$(patsubst %.c,%.o,$(wildcard *.c))
 HEADERS=$(wildcard *.h)
@@ -14,9 +16,12 @@ HEADERS=$(wildcard *.h)
 
 all: i3-input
 
-i3-input: ${FILES}
+i3-input: $(TOPDIR)/libi3/libi3.a ${FILES}
        echo "[i3-input] LINK i3-input"
-       $(CC) $(LDFLAGS) -o $@ ${FILES} $(LIBS)
+       $(CC) $(LDFLAGS) -o $@ $(filter-out libi3/libi3.a,$^) $(LIBS)
+
+$(TOPDIR)/libi3/%.a: $(TOPDIR)/libi3/*.c
+       $(MAKE) -C $(TOPDIR)/libi3
 
 install: all
        echo "[i3-input] INSTALL"
index 581203d4b19682683954200142eb42852de5cd7b..d0861cedabb0a61c4592d7c9bd341ecd5b06c089 100644 (file)
@@ -16,11 +16,9 @@ extern xcb_window_t root;
 
 char *convert_ucs_to_utf8(char *input);
 char *convert_utf8_to_ucs2(char *input, int *real_strlen);
+int connect_ipc(char *socket_path);
 uint32_t get_colorpixel(xcb_connection_t *conn, char *hex);
 uint32_t get_mod_mask(xcb_connection_t *conn, uint32_t keycode);
-int connect_ipc(char *socket_path);
-void ipc_send_message(int sockfd, uint32_t message_size,
-                      uint32_t message_type, uint8_t *payload);
 xcb_window_t open_input_window(xcb_connection_t *conn, uint32_t width, uint32_t height);
 int get_font_id(xcb_connection_t *conn, char *pattern, int *font_height);
 void xcb_change_gc_single(xcb_connection_t *conn, xcb_gcontext_t gc, uint32_t mask, uint32_t value);
index 2d11f0e05a36c7077a92090d06366d0211dc649a..8851e8110ad3302f477322eeadea986a0cc35c12 100644 (file)
 #include <unistd.h>
 #include <err.h>
 
-/*
- * Formats a message (payload) of the given size and type and sends it to i3 via
- * the given socket file descriptor.
- *
- */
-void ipc_send_message(int sockfd, uint32_t message_size,
-                      uint32_t message_type, uint8_t *payload) {
-        int buffer_size = strlen("i3-ipc") + sizeof(uint32_t) + sizeof(uint32_t) + message_size;
-        char msg[buffer_size];
-        char *walk = msg;
-
-        strcpy(walk, "i3-ipc");
-        walk += strlen("i3-ipc");
-        memcpy(walk, &message_size, sizeof(uint32_t));
-        walk += sizeof(uint32_t);
-        memcpy(walk, &message_type, sizeof(uint32_t));
-        walk += sizeof(uint32_t);
-        memcpy(walk, payload, message_size);
-
-        int sent_bytes = 0;
-        int bytes_to_go = buffer_size;
-        while (sent_bytes < bytes_to_go) {
-                int n = write(sockfd, msg + sent_bytes, bytes_to_go);
-                if (n == -1)
-                        err(EXIT_FAILURE, "write() failed");
-
-                sent_bytes += n;
-                bytes_to_go -= n;
-        }
-}
-
 /*
  * Connects to the i3 IPC socket and returns the file descriptor for the
  * socket. die()s if anything goes wrong.
index 7e1a18ff004093dce92d972ff0b3cc6b335b78c8..fbc776e2f6c1a1ca6b863cc099677ed847da071b 100644 (file)
@@ -35,6 +35,8 @@
 
 #include "i3-input.h"
 
+#include "libi3.h"
+
 /* IPC format string. %s will be replaced with what the user entered, then
  * the command will be sent to i3 */
 static char *format;
@@ -57,42 +59,6 @@ static int prompt_len;
 static int limit;
 xcb_window_t root;
 
-/*
- * Try to get the socket path from X11 and return NULL if it doesn’t work.
- * As i3-msg is a short-running tool, we don’t bother with cleaning up the
- * connection and leave it up to the operating system on exit.
- *
- */
-static char *socket_path_from_x11() {
-    xcb_connection_t *conn;
-    int screen;
-    if ((conn = xcb_connect(NULL, &screen)) == NULL ||
-        xcb_connection_has_error(conn))
-        return NULL;
-    xcb_screen_t *root_screen = xcb_aux_get_screen(conn, screen);
-    xcb_window_t root = root_screen->root;
-
-    xcb_intern_atom_cookie_t atom_cookie;
-    xcb_intern_atom_reply_t *atom_reply;
-
-    atom_cookie = xcb_intern_atom(conn, 0, strlen("I3_SOCKET_PATH"), "I3_SOCKET_PATH");
-    atom_reply = xcb_intern_atom_reply(conn, atom_cookie, NULL);
-    if (atom_reply == NULL)
-        return NULL;
-
-    xcb_get_property_cookie_t prop_cookie;
-    xcb_get_property_reply_t *prop_reply;
-    prop_cookie = xcb_get_property_unchecked(conn, false, root, atom_reply->atom,
-                                             XCB_GET_PROPERTY_TYPE_ANY, 0, PATH_MAX);
-    prop_reply = xcb_get_property_reply(conn, prop_cookie, NULL);
-    if (prop_reply == NULL || xcb_get_property_value_length(prop_reply) == 0)
-        return NULL;
-    if (asprintf(&socket_path, "%.*s", xcb_get_property_value_length(prop_reply),
-                 (char*)xcb_get_property_value(prop_reply)) == -1)
-        return NULL;
-    return socket_path;
-}
-
 /*
  * Concats the glyphs (either UCS-2 or UTF-8) to a single string, suitable for
  * rendering it (UCS-2) or sending it to i3 (UTF-8).