]> git.lizzy.rs Git - bspwm.git/blob - events.c
Locate window
[bspwm.git] / events.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <xcb/xcb.h>
4 #include <xcb/xcb_event.h>
5 #include "helpers.h"
6 #include "types.h"
7 #include "bspwm.h"
8 #include "utils.h"
9 #include "events.h"
10 #include "tree.h"
11
12 void handle_event(xcb_generic_event_t *evt)
13 {
14     switch (XCB_EVENT_RESPONSE_TYPE(evt)) {
15         case XCB_MAP_REQUEST:
16             PUTS("received a map request\n");
17             map_request(evt);
18             break;
19         case XCB_CONFIGURE_REQUEST:
20             PUTS("received a configure request\n");
21             break;
22         case XCB_UNGRAB_KEY:
23             /* PUTS("ungrab key received"); */
24             break;
25         case XCB_KEY_PRESS:
26             PUTS("keypress received");
27             break;
28         case XCB_KEY_RELEASE:
29             PUTS("keyrelease received");
30             break;
31         case XCB_BUTTON_PRESS:
32         case XCB_BUTTON_RELEASE:
33             PUTS("button event");
34             break;
35         default:
36             PRINTF("received event %i\n", XCB_EVENT_RESPONSE_TYPE(evt));
37     }
38 }
39
40 void map_request(xcb_generic_event_t *evt)
41 {
42     xcb_map_request_event_t *e = (xcb_map_request_event_t *) evt;
43     xcb_get_window_attributes_reply_t  *wa;
44     xcb_window_t win = e->window;
45     wa = xcb_get_window_attributes_reply(dpy, xcb_get_window_attributes(dpy, win), NULL);
46
47     if ((wa != NULL && wa->override_redirect) || is_managed(win))
48         return;
49
50     free(wa);
51     bool takes_focus = true;
52     client_t *c = make_client(win);
53     num_clients++;
54     node_t *birth = make_node();
55     birth->client = c;
56     insert_node(desk, birth);
57     if (takes_focus)
58         focus_node(desk, birth);
59     xcb_map_window(dpy, c->window);
60 }