X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=src%2Fhandlers.c;h=1e6b634c6cfd33de2f9367525deaa8b91b5e7f04;hb=a2a32ab1ee04c0d29217b6e8b51897140e09239c;hp=27e899ea89072e6380c25239b8b6c338d6c94aba;hpb=1c5ab5fa36ce82b8cbb7e33dbeb350e57f927d03;p=i3%2Fi3 diff --git a/src/handlers.c b/src/handlers.c index 27e899ea..1e6b634c 100644 --- a/src/handlers.c +++ b/src/handlers.c @@ -651,18 +651,18 @@ static void handle_expose_event(xcb_expose_event_t *event) { return; } -#define _NET_WM_MOVERESIZE_SIZE_TOPLEFT 0 -#define _NET_WM_MOVERESIZE_SIZE_TOP 1 -#define _NET_WM_MOVERESIZE_SIZE_TOPRIGHT 2 -#define _NET_WM_MOVERESIZE_SIZE_RIGHT 3 -#define _NET_WM_MOVERESIZE_SIZE_BOTTOMRIGHT 4 -#define _NET_WM_MOVERESIZE_SIZE_BOTTOM 5 -#define _NET_WM_MOVERESIZE_SIZE_BOTTOMLEFT 6 -#define _NET_WM_MOVERESIZE_SIZE_LEFT 7 -#define _NET_WM_MOVERESIZE_MOVE 8 /* movement only */ -#define _NET_WM_MOVERESIZE_SIZE_KEYBOARD 9 /* size via keyboard */ -#define _NET_WM_MOVERESIZE_MOVE_KEYBOARD 10 /* move via keyboard */ -#define _NET_WM_MOVERESIZE_CANCEL 11 /* cancel operation */ +#define _NET_WM_MOVERESIZE_SIZE_TOPLEFT 0 +#define _NET_WM_MOVERESIZE_SIZE_TOP 1 +#define _NET_WM_MOVERESIZE_SIZE_TOPRIGHT 2 +#define _NET_WM_MOVERESIZE_SIZE_RIGHT 3 +#define _NET_WM_MOVERESIZE_SIZE_BOTTOMRIGHT 4 +#define _NET_WM_MOVERESIZE_SIZE_BOTTOM 5 +#define _NET_WM_MOVERESIZE_SIZE_BOTTOMLEFT 6 +#define _NET_WM_MOVERESIZE_SIZE_LEFT 7 +#define _NET_WM_MOVERESIZE_MOVE 8 /* movement only */ +#define _NET_WM_MOVERESIZE_SIZE_KEYBOARD 9 /* size via keyboard */ +#define _NET_WM_MOVERESIZE_MOVE_KEYBOARD 10 /* move via keyboard */ +#define _NET_WM_MOVERESIZE_CANCEL 11 /* cancel operation */ /* * Handle client messages (EWMH) @@ -804,21 +804,6 @@ static void handle_client_message(xcb_client_message_event_t *event) { XCB_ATOM_CARDINAL, 32, 4, &r); xcb_flush(conn); - } else if (event->type == A_WM_CHANGE_STATE) { - /* http://tronche.com/gui/x/icccm/sec-4.html#s-4.1.4 */ - Con *con = con_by_window_id(event->window); - - if (con && event->data.data32[0] == 3) { - /* this request is so we can play some animiation showing the - * window physically moving to the tray before we close it (I - * think) */ - DLOG("Client has requested iconic state. Closing this con. (con = %p)\n", con); - tree_close(con, DONT_KILL_WINDOW, false, false); - tree_render(); - } else { - DLOG("Not handling WM_CHANGE_STATE request. (window = %d, state = %d)\n", event->window, event->data.data32[0]); - } - } else if (event->type == A__NET_CURRENT_DESKTOP) { /* This request is used by pagers and bars to change the current * desktop likely as a result of some user action. We interpret this as @@ -1257,12 +1242,21 @@ void handle_event(int type, xcb_generic_event_t *event) { DLOG("xkb event, need to handle it.\n"); xcb_xkb_state_notify_event_t *state = (xcb_xkb_state_notify_event_t *)event; - if (state->xkbType == XCB_XKB_MAP_NOTIFY) { + if (state->xkbType == XCB_XKB_NEW_KEYBOARD_NOTIFY) { + DLOG("xkb new keyboard notify, sequence %d, time %d\n", state->sequence, state->time); + xcb_key_symbols_free(keysyms); + keysyms = xcb_key_symbols_alloc(conn); + ungrab_all_keys(conn); + translate_keysyms(); + grab_all_keys(conn, false); + } else if (state->xkbType == XCB_XKB_MAP_NOTIFY) { if (event_is_ignored(event->sequence, type)) { DLOG("Ignoring map notify event for sequence %d.\n", state->sequence); } else { DLOG("xkb map notify, sequence %d, time %d\n", state->sequence, state->time); add_ignore_event(event->sequence, type); + xcb_key_symbols_free(keysyms); + keysyms = xcb_key_symbols_alloc(conn); ungrab_all_keys(conn); translate_keysyms(); grab_all_keys(conn, false); @@ -1273,7 +1267,7 @@ void handle_event(int type, xcb_generic_event_t *event) { /* See The XKB Extension: Library Specification, section 14.1 */ /* We check if the current group (each group contains * two levels) has been changed. Mode_switch activates - * group XkbGroup2Index */ + * group XCB_XKB_GROUP_2 */ if (xkb_current_group == state->group) return; xkb_current_group = state->group; @@ -1283,7 +1277,7 @@ void handle_event(int type, xcb_generic_event_t *event) { grab_all_keys(conn, false); } else { DLOG("Mode_switch enabled\n"); - grab_all_keys(conn, false); + grab_all_keys(conn, true); } } @@ -1297,6 +1291,7 @@ void handle_event(int type, xcb_generic_event_t *event) { break; case XCB_BUTTON_PRESS: + case XCB_BUTTON_RELEASE: handle_button_press((xcb_button_press_event_t *)event); break;