X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=spectrwm.c;h=665d02074784c2a5491d53898e2bd5192f33f1d7;hb=b4ff36a69396ed4afb8712ddc0d5e2cf557b4edc;hp=75aec9cf4796edefe95ac39274b46dd89fef3b4c;hpb=c646259731aa2e159b196f00d65f313737920a65;p=spectrwm.git diff --git a/spectrwm.c b/spectrwm.c index 75aec9c..665d020 100644 --- a/spectrwm.c +++ b/spectrwm.c @@ -2802,6 +2802,7 @@ get_pointer_win(xcb_window_t root) } else { DNPRINTF(SWM_D_EVENT, "get_pointer_win: none.\n"); } + free(r); } return win; @@ -4488,24 +4489,28 @@ get_win_name(xcb_window_t win) XCB_GET_PROPERTY_TYPE_ANY, 0, UINT_MAX); r = xcb_get_property_reply(conn, c, NULL); - if (!r || r->type == XCB_NONE) { - free(r); - /* Use WM_NAME instead; no UTF-8. */ - c = xcb_get_property(conn, 0, win, XCB_ATOM_WM_NAME, - XCB_GET_PROPERTY_TYPE_ANY, 0, UINT_MAX); - r = xcb_get_property_reply(conn, c, NULL); - - if(!r || r->type == XCB_NONE) { + if (r) { + if (r->type == XCB_NONE) { free(r); - return NULL; + /* Use WM_NAME instead; no UTF-8. */ + c = xcb_get_property(conn, 0, win, XCB_ATOM_WM_NAME, + XCB_GET_PROPERTY_TYPE_ANY, 0, UINT_MAX); + r = xcb_get_property_reply(conn, c, NULL); + + if (!r) + return (NULL); + if (r->type == XCB_NONE) { + free(r); + return (NULL); + } } - } + if (r->length > 0) + name = strndup(xcb_get_property_value(r), + xcb_get_property_value_length(r)); - if (r->length > 0) - name = strndup(xcb_get_property_value(r), - xcb_get_property_value_length(r)); + free(r); + } - free(r); return (name); } @@ -6177,7 +6182,7 @@ grabkeys(void) { struct key *kp; int num_screens, k, j; - unsigned int modifiers[3]; + unsigned int modifiers[4]; xcb_keycode_t *code; DNPRINTF(SWM_D_MISC, "grabkeys\n"); @@ -6185,7 +6190,8 @@ grabkeys(void) modifiers[0] = 0; modifiers[1] = numlockmask; - modifiers[2] = numlockmask | XCB_MOD_MASK_LOCK; + modifiers[2] = XCB_MOD_MASK_LOCK; + modifiers[3] = numlockmask | XCB_MOD_MASK_LOCK; num_screens = xcb_setup_roots_length(xcb_get_setup(conn)); for (k = 0; k < num_screens; k++) { @@ -6211,16 +6217,25 @@ grabkeys(void) void grabbuttons(struct ws_win *win) { - int i; + unsigned int modifiers[4]; + int i, j; DNPRINTF(SWM_D_MOUSE, "grabbuttons: win 0x%x\n", win->id); + updatenumlockmask(); + + modifiers[0] = 0; + modifiers[1] = numlockmask; + modifiers[2] = XCB_MOD_MASK_LOCK; + modifiers[3] = numlockmask | XCB_MOD_MASK_LOCK; for (i = 0; i < LENGTH(buttons); i++) if (buttons[i].action == client_click) - xcb_grab_button(conn, 0, win->id, BUTTONMASK, - XCB_GRAB_MODE_SYNC, XCB_GRAB_MODE_ASYNC, - XCB_WINDOW_NONE, XCB_CURSOR_NONE, - buttons[i].button, buttons[i].mask); + for (j = 0; j < LENGTH(modifiers); ++j) + xcb_grab_button(conn, 0, win->id, BUTTONMASK, + XCB_GRAB_MODE_SYNC, XCB_GRAB_MODE_ASYNC, + XCB_WINDOW_NONE, XCB_CURSOR_NONE, + buttons[i].button, buttons[i].mask | + modifiers[j]); } const char *quirkname[] = { @@ -7657,9 +7672,10 @@ configurerequest(xcb_configure_request_event_t *e) WIDTH(win) = win->g_float.w; HEIGHT(win) = win->g_float.h; - stack_floater(win, win->ws->r); - - focus_flush(); + if (r) { + stack_floater(win, r); + focus_flush(); + } } else { config_win(win, e); xcb_flush(conn);