JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
xcb_flush before polling for events
[spectrwm.git] / spectrwm.c
index 7a16ea7..a4c7ee1 100644 (file)
@@ -156,8 +156,16 @@ static const char  *buildstr = SPECTRWM_VERSION;
 
 #define SWM_DEBUG
 #ifdef SWM_DEBUG
-#define DPRINTF(x...)          do { if (swm_debug) fprintf(stderr, x); } while (0)
-#define DNPRINTF(n,x...)       do { if (swm_debug & n) fprintf(stderr, x); } while (0)
+#define DPRINTF(x...) do {                                                     \
+       if (swm_debug)                                                          \
+               fprintf(stderr, x);                                             \
+} while (0)
+#define DNPRINTF(n,x...) do {                                                  \
+       if (swm_debug & n) {                                                    \
+               fprintf(stderr, "%ld ", (long)(time(NULL) - time_started));     \
+               fprintf(stderr, x);                                             \
+       }                                                                       \
+} while (0)
 #define SWM_D_MISC             0x0001
 #define SWM_D_EVENT            0x0002
 #define SWM_D_WS               0x0004
@@ -249,7 +257,7 @@ xcb_atom_t          a_swm_iconic;
 volatile sig_atomic_t   running = 1;
 volatile sig_atomic_t   restart_wm = 0;
 int                    outputs = 0;
-int                    last_focus_event = FocusOut;
+/*int                  last_focus_event = FocusOut;*/
 int                    (*xerrorxlib)(Display *, XErrorEvent *);
 int                    other_wm;
 int                    ss_enabled = 0;
@@ -343,6 +351,7 @@ int                 spawn_position = SWM_STACK_TOP;
 int                    disable_border = 0;
 int                    border_width = 1;
 int                    verbose_layout = 0;
+time_t                 time_started;
 pid_t                  bar_pid;
 XFontSet               bar_fs;
 XFontSetExtents                *bar_fs_extents;
@@ -2477,11 +2486,11 @@ focus_win(struct ws_win *win)
                unfocus_win(cfw);
        else {
                /* use larger hammer since the window was killed somehow */
-               TAILQ_FOREACH(cfw, &win->ws->winlist, entry)
+               /* TAILQ_FOREACH(cfw, &win->ws->winlist, entry)
                        if (cfw->ws && cfw->ws->r && cfw->ws->r->s)
                                xcb_change_window_attributes(conn, cfw->id,
                                    XCB_CW_BORDER_PIXEL,
-                                   &cfw->ws->r->s->c[SWM_S_COLOR_UNFOCUS].color);
+                                   &cfw->ws->r->s->c[SWM_S_COLOR_UNFOCUS].color);*/
        }
 
        win->ws->focus = win;
@@ -4152,7 +4161,7 @@ update_window(struct ws_win *win)
 void
 resize(struct ws_win *win, union arg *args)
 {
-       xcb_timestamp_t         time = 0;
+       xcb_timestamp_t         timestamp = 0;
        struct swm_region       *r = NULL;
        int                     resize_step = 0;
        struct swm_geometry     g;
@@ -4257,6 +4266,7 @@ resize(struct ws_win *win, union arg *args)
                return;
        }
 
+       xcb_flush(conn);
        buttonrelease = 0;
        while ((evt = xcb_poll_for_event(conn)) && buttonrelease != 1) {
                /*
@@ -4316,8 +4326,8 @@ resize(struct ws_win *win, union arg *args)
                        constrain_window(win, r, 1);
 
                        /* not free, don't sync more than 120 times / second */
-                       if ((mne->time - time) > (1000 / 120) ) {
-                               time = mne->time;
+                       if ((mne->time - timestamp) > (1000 / 120) ) {
+                               timestamp = mne->time;
                                do_sync();
                                update_window(win);
                        }
@@ -4328,7 +4338,7 @@ resize(struct ws_win *win, union arg *args)
                }
                free(evt);
        }
-       if (time) {
+       if (timestamp) {
                do_sync();
                update_window(win);
        }
@@ -4359,7 +4369,7 @@ resize_step(struct swm_region *r, union arg *args)
 void
 move(struct ws_win *win, union arg *args)
 {
-       xcb_timestamp_t         time = 0;
+       xcb_timestamp_t         timestamp = 0;
        int                     move_step = 0, buttonrelease;
        struct swm_region       *r = NULL;
        xcb_font_t                      cursor_font;
@@ -4450,6 +4460,7 @@ move(struct ws_win *win, union arg *args)
                return;
        }
 
+       xcb_flush(conn);
        buttonrelease = 0;
        while ((evt = xcb_poll_for_event(conn)) && buttonrelease != 1) {
                /*
@@ -4468,8 +4479,8 @@ move(struct ws_win *win, union arg *args)
                        constrain_window(win, r, 0);
 
                        /* not free, don't sync more than 120 times / second */
-                       if ((mne->time - time) > (1000 / 120) ) {
-                               time = mne->time;
+                       if ((mne->time - timestamp) > (1000 / 120) ) {
+                               timestamp = mne->time;
                                do_sync();
                                update_window(win);
                        }
@@ -4480,7 +4491,7 @@ move(struct ws_win *win, union arg *args)
                }
                free(evt);
        }
-       if (time) {
+       if (timestamp) {
                do_sync();
                update_window(win);
        }
@@ -7552,18 +7563,35 @@ event_handle(xcb_generic_event_t *evt)
        EVENT(0, event_error);
        EVENT(XCB_BUTTON_PRESS, buttonpress);
        /*EVENT(XCB_BUTTON_RELEASE, buttonpress);*/
+       /*EVENT(XCB_CIRCULATE_NOTIFY, );*/
+       /*EVENT(XCB_CIRCULATE_REQUEST, );*/
        EVENT(XCB_CLIENT_MESSAGE, clientmessage);
+       /*EVENT(XCB_COLORMAP_NOTIFY, );*/
        EVENT(XCB_CONFIGURE_NOTIFY, configurenotify);
        EVENT(XCB_CONFIGURE_REQUEST, configurerequest);
+       /*EVENT(XCB_CREATE_NOTIFY, );*/
        EVENT(XCB_DESTROY_NOTIFY, destroynotify);
        EVENT(XCB_ENTER_NOTIFY, enternotify);
        EVENT(XCB_EXPOSE, expose);
+       /*EVENT(XCB_FOCUS_IN, );*/
+       /*EVENT(XCB_FOCUS_OUT, );*/
+       /*EVENT(XCB_GRAPHICS_EXPOSURE, );*/
+       /*EVENT(XCB_GRAVITY_NOTIFY, );*/
        EVENT(XCB_KEY_PRESS, keypress);
        /*EVENT(XCB_KEY_RELEASE, keypress);*/
+       /*EVENT(XCB_KEYMAP_NOTIFY, );*/
+       /*EVENT(XCB_LEAVE_NOTIFY, );*/
        EVENT(XCB_MAP_NOTIFY, mapnotify);
        EVENT(XCB_MAP_REQUEST, maprequest);
        EVENT(XCB_MAPPING_NOTIFY, mappingnotify);
+       /*EVENT(XCB_MOTION_NOTIFY, );*/
+       /*EVENT(XCB_NO_EXPOSURE, );*/
        EVENT(XCB_PROPERTY_NOTIFY, propertynotify);
+       /*EVENT(XCB_REPARENT_NOTIFY, );*/
+       /*EVENT(XCB_RESIZE_REQUEST, );*/
+       /*EVENT(XCB_SELECTION_CLEAR, );*/
+       /*EVENT(XCB_SELECTION_NOTIFY, );*/
+       /*EVENT(XCB_SELECTION_REQUEST, );*/
        EVENT(XCB_UNMAP_NOTIFY, unmapnotify);
        EVENT(XCB_VISIBILITY_NOTIFY, visibilitynotify);
 #undef EVENT
@@ -7586,6 +7614,8 @@ main(int argc, char *argv[])
        struct sigaction        sact;
        xcb_generic_event_t     *evt;
 
+       time_started = time(NULL);
+
        start_argv = argv;
        warnx("Welcome to spectrwm V%s Build: %s", SPECTRWM_VERSION, buildstr);
        if (!setlocale(LC_CTYPE, "") || !setlocale(LC_TIME, "") ||
@@ -7726,7 +7756,7 @@ noconfig:
 
        while (running) {
                while ((evt = xcb_poll_for_event(conn))) {
-                       DNPRINTF(SWM_D_EVENT, "XCB Event: %s (%d)\n",
+                       DNPRINTF(SWM_D_EVENT, "XCB Event: %s(%d)\n",
                            xcb_event_get_label(XCB_EVENT_RESPONSE_TYPE(evt)),
                            XCB_EVENT_RESPONSE_TYPE(evt));
                        if (running == 0)