i3 - improved tiling WM


i3bar: Introducing noninteractive mode

Patch status: rejected

Patch by Tony Crisci

Long description:

When the `--noninteractive` flag is passed to i3bar, it will ignore
mouse events.

To apply this patch, use:
curl http://cr.i3wm.org/patch/296/raw.patch | git am

b/i3bar/include/config.h

17
@@ -25,6 +25,7 @@ typedef struct config_t {
18
     struct xcb_color_strings_t colors;
19
     bool         disable_binding_mode_indicator;
20
     bool         disable_ws;
21
+    bool         noninteractive;
22
     char         *bar_id;
23
     char         *command;
24
     char         *fontname;

b/i3bar/src/main.c

29
@@ -57,6 +57,7 @@ void print_usage(char *elf_name) {
30
     printf("\n");
31
     printf("-b, --bar_id  <bar_id>\tBar ID for which to get the configuration\n");
32
     printf("-s, --socket  <sock_path>\tConnect to i3 via <sock_path>\n");
33
+    printf("-n, --noninteractive\tBar will not respond to mouse interaction\n");
34
     printf("-h, --help    Display this help-message and exit\n");
35
     printf("-v, --version Display version number and exit\n");
36
     printf("\n");
37
@@ -98,12 +99,13 @@ int main(int argc, char **argv) {
38
     static struct option long_opt[] = {
39
         { "socket",               required_argument, 0, 's' },
40
         { "bar_id",               required_argument, 0, 'b' },
41
+        { "noninteractive",       no_argument,       0, 'n' },
42
         { "help",                 no_argument,       0, 'h' },
43
         { "version",              no_argument,       0, 'v' },
44
         { NULL,                   0,                 0, 0}
45
     };
46
 
47
-    while ((opt = getopt_long(argc, argv, "b:s:hv", long_opt, &option_index)) != -1) {
48
+    while ((opt = getopt_long(argc, argv, "b:s:hvn", long_opt, &option_index)) != -1) {
49
         switch (opt) {
50
             case 's':
51
                 socket_path = expand_path(optarg);
52
@@ -115,6 +117,9 @@ int main(int argc, char **argv) {
53
             case 'b':
54
                 config.bar_id = sstrdup(optarg);
55
                 break;
56
+            case 'n':
57
+                config.noninteractive = true;
58
+                break;
59
             default:
60
                 print_usage(argv[0]);
61
                 exit(EXIT_SUCCESS);

b/i3bar/src/xcb.c

66
@@ -791,7 +791,11 @@ void xcb_chk_cb(struct ev_loop *loop, ev_check *watcher, int revents) {
67
                 break;
68
             case XCB_BUTTON_PRESS:
69
                 /* Button-press-events are mouse-buttons clicked on one of our bars */
70
-                handle_button((xcb_button_press_event_t*) event);
71
+                if (config.noninteractive)
72
+                    DLOG("Noninteractive mode: ignoring button press.\n");
73
+                else
74
+                    handle_button((xcb_button_press_event_t*) event);
75
+
76
                 break;
77
             case XCB_CLIENT_MESSAGE:
78
                 /* Client messages are used for client-to-client communication, for