]> git.sur5r.net Git - i3/i3/blob - include/handlers.h
huge change: implement RandR instead of Xinerama
[i3/i3] / include / handlers.h
1 /*
2  * vim:ts=8:expandtab
3  *
4  * i3 - an improved dynamic tiling window manager
5  *
6  * © 2009-2010 Michael Stapelberg and contributors
7  *
8  * See file LICENSE for license information.
9  *
10  */
11 #ifndef _HANDLERS_H
12 #define _HANDLERS_H
13
14 #include <xcb/randr.h>
15
16 /**
17  * Due to bindings like Mode_switch + <a>, we need to bind some keys in
18  * XCB_GRAB_MODE_SYNC.  Therefore, we just replay all key presses.
19  *
20  */
21 int handle_key_release(void *ignored, xcb_connection_t *conn,
22                        xcb_key_release_event_t *event);
23
24 /**
25  * There was a key press. We compare this key code with our bindings table and
26  * pass the bound action to parse_command().
27  *
28  */
29 int handle_key_press(void *ignored, xcb_connection_t *conn,
30                      xcb_key_press_event_t *event);
31
32 /**
33  * When the user moves the mouse pointer onto a window, this callback gets
34  * called.
35  *
36  */
37 int handle_enter_notify(void *ignored, xcb_connection_t *conn,
38                         xcb_enter_notify_event_t *event);
39
40 /**
41  * When the user moves the mouse but does not change the active window
42  * (e.g. when having no windows opened but moving mouse on the root screen
43  * and crossing virtual screen boundaries), this callback gets called.
44  *
45  */
46 int handle_motion_notify(void *ignored, xcb_connection_t *conn,
47                          xcb_motion_notify_event_t *event);
48
49 /**
50  * Called when the keyboard mapping changes (for example by using Xmodmap),
51  * we need to update our key bindings then (re-translate symbols).
52  *
53  */
54 int handle_mapping_notify(void *ignored, xcb_connection_t *conn,
55                           xcb_mapping_notify_event_t *event);
56
57 /**
58  * Checks if the button press was on a stack window, handles focus setting and
59  * returns true if so, or false otherwise.
60  *
61  */
62 int handle_button_press(void *ignored, xcb_connection_t *conn,
63                         xcb_button_press_event_t *event);
64
65 /**
66  * A new window appeared on the screen (=was mapped), so let’s manage it.
67  *
68  */
69 int handle_map_request(void *prophs, xcb_connection_t *conn,
70                        xcb_map_request_event_t *event);
71
72 /**
73  * Configuration notifies are only handled because we need to set up ignore
74  * for the following enter notify events
75  *
76  */
77 int handle_configure_event(void *prophs, xcb_connection_t *conn, xcb_configure_notify_event_t *event);
78
79 /**
80  * Gets triggered upon a RandR screen change event, that is when the user
81  * changes the screen configuration in any way (mode, position, …)
82  *
83  */
84 int handle_screen_change(void *prophs, xcb_connection_t *conn,
85                          xcb_generic_event_t *e);
86
87 /**
88  * Configure requests are received when the application wants to resize
89  * windows on their own.
90  *
91  * We generate a synthethic configure notify event to signalize the client its
92  * "new" position.
93  *
94  */
95 int handle_configure_request(void *prophs, xcb_connection_t *conn,
96                              xcb_configure_request_event_t *event);
97
98 /**
99  * Our window decorations were unmapped. That means, the window will be killed
100  * now, so we better clean up before.
101  *
102  */
103 int handle_unmap_notify_event(void *data, xcb_connection_t *conn, xcb_unmap_notify_event_t *event);
104
105 /**
106  * Called when a window changes its title
107  *
108  */
109 int handle_windowname_change(void *data, xcb_connection_t *conn, uint8_t state,
110                              xcb_window_t window, xcb_atom_t atom,
111                              xcb_get_property_reply_t *prop);
112
113 /**
114  * We handle legacy window names (titles) which are in COMPOUND_TEXT
115  * encoding. However, we just pass them along, so when containing non-ASCII
116  * characters, those will be rendering incorrectly. In order to correctly
117  * render unicode window titles in i3, an application has to set _NET_WM_NAME,
118  * which is in UTF-8 encoding.
119  *
120  * On every update, a message is put out to the user, so he may improve the
121  * situation and update applications which display filenames in their title to
122  * correctly use _NET_WM_NAME and therefore support unicode.
123  *
124  */
125 int handle_windowname_change_legacy(void *data, xcb_connection_t *conn,
126                                     uint8_t state, xcb_window_t window,
127                                     xcb_atom_t atom, xcb_get_property_reply_t
128                                     *prop);
129
130 /**
131  * Store the window classes for jumping to them later.
132  *
133  */
134 int handle_windowclass_change(void *data, xcb_connection_t *conn, uint8_t state,
135                               xcb_window_t window, xcb_atom_t atom,
136                               xcb_get_property_reply_t *prop);
137
138
139 /**
140  * Expose event means we should redraw our windows (= title bar)
141  *
142  */
143 int handle_expose_event(void *data, xcb_connection_t *conn,
144                         xcb_expose_event_t *event);
145
146 /**
147  * Handle client messages (EWMH)
148  *
149  */
150 int handle_client_message(void *data, xcb_connection_t *conn,
151                           xcb_client_message_event_t *event);
152
153 /**
154  * Handles _NET_WM_WINDOW_TYPE changes
155  *
156  */
157 int handle_window_type(void *data, xcb_connection_t *conn, uint8_t state,
158                        xcb_window_t window, xcb_atom_t atom,
159                        xcb_get_property_reply_t *property);
160
161 /**
162  * Handles the size hints set by a window, but currently only the part
163  * necessary for displaying clients proportionally inside their frames
164  * (mplayer for example)
165  *
166  * See ICCCM 4.1.2.3 for more details
167  *
168  */
169 int handle_normal_hints(void *data, xcb_connection_t *conn, uint8_t state,
170                         xcb_window_t window, xcb_atom_t name,
171                         xcb_get_property_reply_t *reply);
172
173 /**
174  * Handles the WM_HINTS property for extracting the urgency state of the window.
175  *
176  */
177 int handle_hints(void *data, xcb_connection_t *conn, uint8_t state, xcb_window_t window,
178                   xcb_atom_t name, xcb_get_property_reply_t *reply);
179
180 /**
181  * Handles the transient for hints set by a window, signalizing that this
182  * window is a popup window for some other window.
183  *
184  * See ICCCM 4.1.2.6 for more details
185  *
186  */
187 int handle_transient_for(void *data, xcb_connection_t *conn, uint8_t state,
188                          xcb_window_t window, xcb_atom_t name,
189                          xcb_get_property_reply_t *reply);
190
191 /**
192  * Handles changes of the WM_CLIENT_LEADER atom which specifies if this is a
193  * toolwindow (or similar) and to which window it belongs (logical parent).
194  *
195  */
196 int handle_clientleader_change(void *data, xcb_connection_t *conn,
197                                uint8_t state, xcb_window_t window,
198                                xcb_atom_t name, xcb_get_property_reply_t *prop);
199
200 #endif