]> git.sur5r.net Git - i3/i3/commitdiff
Make hide_on_modifier configurable
authorAxel Wagner <mail@merovius.de>
Wed, 25 Aug 2010 22:02:35 +0000 (00:02 +0200)
committerAxel Wagner <mail@merovius.de>
Wed, 25 Aug 2010 22:02:35 +0000 (00:02 +0200)
i3bar/include/common.h
i3bar/include/config.h [new file with mode: 0644]
i3bar/src/main.c
i3bar/src/xcb.c

index d6b63a7ecea532a71b8c55844c1d57580a294a85..dcb0bac3024de37cb888dfdb2e89ceecc960c339 100644 (file)
@@ -25,6 +25,7 @@ struct rect_t {
 
 #include "queue.h"
 #include "child.h"
+#include "config.h"
 #include "ipc.h"
 #include "outputs.h"
 #include "util.h"
diff --git a/i3bar/include/config.h b/i3bar/include/config.h
new file mode 100644 (file)
index 0000000..cbf158a
--- /dev/null
@@ -0,0 +1,10 @@
+#ifndef CONFIG_H_
+#define CONFIL_H_
+
+typedef struct config_t {
+    int hide_on_modifier;
+} config_t;
+
+config_t config;
+
+#endif
index 63b60367c1ceb4ad4951bec1082e8d538c403399..5afda24136828d2919542170a0451488546b2ca9 100644 (file)
@@ -53,16 +53,20 @@ int main(int argc, char **argv) {
     char *command = NULL;
     char *fontname = NULL;
 
+    /* Definition of the standard-config */
+    config.hide_on_modifier = 0;
+
     static struct option long_opt[] = {
         { "socket",  required_argument, 0, 's' },
         { "command", required_argument, 0, 'c' },
+        { "hide",    no_argument,       0, 'm' },
         { "font",    required_argument, 0, 'f' },
         { "help",    no_argument,       0, 'h' },
         { "version", no_argument,       0, 'v' },
         { NULL,      0,                 0, 0}
     };
 
-    while ((opt = getopt_long(argc, argv, "s:c:f:hv", long_opt, &option_index)) != -1) {
+    while ((opt = getopt_long(argc, argv, "s:c:mf:hv", long_opt, &option_index)) != -1) {
         switch (opt) {
             case 's':
                 socket_path = expand_path(optarg);
@@ -70,6 +74,9 @@ int main(int argc, char **argv) {
             case 'c':
                 command = strdup(optarg);
                 break;
+            case 'm':
+                config.hide_on_modifier = 1;
+                break;
             case 'f':
                 fontname = strdup(optarg);
                 break;
index 7f479b4e51b5ee9322c7c4293e466cb2d5b9093a..d5a72ae3d8dd057b80dffa7497184bd6a42e0be3 100644 (file)
@@ -72,6 +72,10 @@ uint32_t get_colorpixel(const char *s) {
  *
  */
 void hide_bars() {
+    if (!config.hide_on_modifier) {
+        return;
+    }
+
     i3_output *walk;
     SLIST_FOREACH(walk, outputs, slist) {
         xcb_unmap_window(xcb_connection, walk->bar);
@@ -84,6 +88,10 @@ void hide_bars() {
  *
  */
 void unhide_bars() {
+    if (!config.hide_on_modifier) {
+        return;
+    }
+
     i3_output           *walk;
     xcb_void_cookie_t   cookie;
     xcb_generic_error_t *err;
@@ -345,55 +353,57 @@ void init_xcb(char *fontname) {
                                                 strlen(fontname),
                                                 fontname);
 
-    int xkb_major, xkb_minor, xkb_errbase, xkb_err;
-    xkb_major = XkbMajorVersion;
-    xkb_minor = XkbMinorVersion;
+    if (config.hide_on_modifier) {
+        int xkb_major, xkb_minor, xkb_errbase, xkb_err;
+        xkb_major = XkbMajorVersion;
+        xkb_minor = XkbMinorVersion;
 
-    xkb_dpy = XkbOpenDisplay(":0",
-                             &xkb_event_base,
-                             &xkb_errbase,
-                             &xkb_major,
-                             &xkb_minor,
-                             &xkb_err);
+        xkb_dpy = XkbOpenDisplay(":0",
+                                 &xkb_event_base,
+                                 &xkb_errbase,
+                                 &xkb_major,
+                                 &xkb_minor,
+                                 &xkb_err);
 
-    if (xkb_dpy == NULL) {
-        printf("ERROR: No XKB!\n");
-        exit(EXIT_FAILURE);
-    }
+        if (xkb_dpy == NULL) {
+            printf("ERROR: No XKB!\n");
+            exit(EXIT_FAILURE);
+        }
 
-    if (fcntl(ConnectionNumber(xkb_dpy), F_SETFD, FD_CLOEXEC) == -1) {
-        fprintf(stderr, "Could not set FD_CLOEXEC on xkbdpy\n");
-        exit(EXIT_FAILURE);
-    }
+        if (fcntl(ConnectionNumber(xkb_dpy), F_SETFD, FD_CLOEXEC) == -1) {
+            fprintf(stderr, "Could not set FD_CLOEXEC on xkbdpy\n");
+            exit(EXIT_FAILURE);
+        }
 
-    int i1;
-    if (!XkbQueryExtension(xkb_dpy, &i1, &xkb_event_base, &xkb_errbase, &xkb_major, &xkb_minor)) {
-        printf("ERROR: XKB not supported by X-server!\n");
-        exit(EXIT_FAILURE);
-    }
+        int i1;
+        if (!XkbQueryExtension(xkb_dpy, &i1, &xkb_event_base, &xkb_errbase, &xkb_major, &xkb_minor)) {
+            printf("ERROR: XKB not supported by X-server!\n");
+            exit(EXIT_FAILURE);
+        }
 
-    if (!XkbSelectEvents(xkb_dpy, XkbUseCoreKbd, XkbStateNotifyMask, XkbStateNotifyMask)) {
-        printf("Could not grab Key!\n");
-        exit(EXIT_FAILURE);
+        if (!XkbSelectEvents(xkb_dpy, XkbUseCoreKbd, XkbStateNotifyMask, XkbStateNotifyMask)) {
+            printf("Could not grab Key!\n");
+            exit(EXIT_FAILURE);
+        }
+
+        xkb_io = malloc(sizeof(ev_io));
+        ev_io_init(xkb_io, &xkb_io_cb, ConnectionNumber(xkb_dpy), EV_READ);
+        ev_io_start(main_loop, xkb_io);
+        XFlush(xkb_dpy);
     }
 
     /* The varios Watchers to communicate with xcb */
     xcb_io = malloc(sizeof(ev_io));
     xcb_prep = malloc(sizeof(ev_prepare));
     xcb_chk = malloc(sizeof(ev_check));
-    xkb_io = malloc(sizeof(ev_io));
 
     ev_io_init(xcb_io, &xcb_io_cb, xcb_get_file_descriptor(xcb_connection), EV_READ);
     ev_prepare_init(xcb_prep, &xcb_prep_cb);
     ev_check_init(xcb_chk, &xcb_chk_cb);
-    ev_io_init(xkb_io, &xkb_io_cb, ConnectionNumber(xkb_dpy), EV_READ);
 
     ev_io_start(main_loop, xcb_io);
     ev_prepare_start(main_loop, xcb_prep);
     ev_check_start(main_loop, xcb_chk);
-    ev_io_start(main_loop, xkb_io);
-
-    XFlush(xkb_dpy);
 
     /* Now we get the atoms and save them in a nice data-structure */
     get_atoms();
@@ -492,8 +502,8 @@ void reconfig_windows() {
             mask = XCB_CW_BACK_PIXEL | XCB_CW_OVERRIDE_REDIRECT | XCB_CW_EVENT_MASK;
             /* Black background */
             values[0] = xcb_screens->black_pixel;
-            /* i3 is not supposed to manage our bar-windows */
-            values[1] = 1;
+            /* If hide_on_modifier is set, i3 is not supposed to manage our bar-windows */
+            values[1] = config.hide_on_modifier;
             /* The events we want to receive */
             values[2] = XCB_EVENT_MASK_EXPOSURE |
                         XCB_EVENT_MASK_BUTTON_PRESS;