JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
if 0 the select() code in the event loop.
[spectrwm.git] / spectrwm.c
index 5025482..93ed998 100644 (file)
@@ -1836,7 +1836,7 @@ bar_setup(struct swm_region *r)
        int                     num_missing_charsets = 0;
        int                     i;
        xcb_screen_t            *screen = get_screen(r->s->idx);
-       uint32_t                wa[2];
+       uint32_t                wa[3];
 
        if (bar_fs) {
                XFreeFontSet(display, bar_fs);
@@ -1885,10 +1885,12 @@ bar_setup(struct swm_region *r)
        r->bar->id = xcb_generate_id(conn);
        wa[0] = r->s->c[SWM_S_COLOR_BAR].color;
        wa[1] = r->s->c[SWM_S_COLOR_BAR_BORDER].color;
+       wa[2] = XCB_EVENT_MASK_EXPOSURE;
        xcb_create_window(conn, XCB_COPY_FROM_PARENT, r->bar->id, r->s->root,
            X(r->bar), Y(r->bar), WIDTH(r->bar), HEIGHT(r->bar),
            bar_border_width, XCB_WINDOW_CLASS_INPUT_OUTPUT,
-           XCB_COPY_FROM_PARENT, XCB_CW_BACK_PIXEL | XCB_CW_BORDER_PIXEL, wa);
+           XCB_COPY_FROM_PARENT, XCB_CW_BACK_PIXEL | XCB_CW_BORDER_PIXEL
+           | XCB_CW_EVENT_MASK, wa);
 
        r->bar->buffer = xcb_generate_id(conn);
        xcb_create_pixmap(conn, screen->root_depth, r->bar->buffer, r->bar->id,
@@ -4266,6 +4268,7 @@ resize(struct ws_win *win, union arg *args)
                return;
        }
 
+       xcb_flush(conn);
        buttonrelease = 0;
        while ((evt = xcb_poll_for_event(conn)) && buttonrelease != 1) {
                /*
@@ -4459,6 +4462,7 @@ move(struct ws_win *win, union arg *args)
                return;
        }
 
+       xcb_flush(conn);
        buttonrelease = 0;
        while ((evt = xcb_poll_for_event(conn)) && buttonrelease != 1) {
                /*
@@ -6635,7 +6639,18 @@ focus_magic(struct ws_win *win)
 void
 expose(xcb_expose_event_t *e)
 {
+       int                     i, num_screens;
+       struct swm_region       *r;
+
        DNPRINTF(SWM_D_EVENT, "expose: window: 0x%x\n", e->window);
+
+       num_screens = xcb_setup_roots_length(xcb_get_setup(conn));
+       for (i = 0; i < num_screens; i++)
+               TAILQ_FOREACH(r, &screens[i].rl, entry)
+                       if (e->window == WINID(r->bar))
+                               bar_update();
+
+       xcb_flush(conn);
 }
 
 void
@@ -7603,14 +7618,16 @@ main(int argc, char *argv[])
 {
        struct swm_region       *r, *rr;
        struct ws_win           *winfocus = NULL;
-       struct timeval          tv;
        union arg               a;
        char                    conf[PATH_MAX], *cfile = NULL;
        struct stat             sb;
        int                     xfd, i, num_screens;
-       fd_set                  rd;
        struct sigaction        sact;
        xcb_generic_event_t     *evt;
+#if 0
+       struct timeval          tv;
+       fd_set                  rd;
+#endif
 
        time_started = time(NULL);
 
@@ -7783,6 +7800,7 @@ noconfig:
                        continue;
                }
 
+#if 0
                FD_ZERO(&rd);
                FD_SET(xfd, &rd);
                tv.tv_sec = 1;
@@ -7790,6 +7808,7 @@ noconfig:
                if (select(xfd + 1, &rd, NULL, NULL, &tv) == -1)
                        if (errno != EINTR)
                                DNPRINTF(SWM_D_MISC, "select failed");
+#endif
                if (restart_wm == 1)
                        restart(NULL, NULL);
                if (search_resp == 1)