]> git.sur5r.net Git - i3/i3/blob - include/client.h
45b8f4a7ef2d6525ca1cc6a0618955c2b470aef4
[i3/i3] / include / client.h
1 /*
2  * vim:ts=8:expandtab
3  *
4  * i3 - an improved dynamic tiling window manager
5  *
6  * © 2009 Michael Stapelberg and contributors
7  *
8  * See file LICENSE for license information.
9  *
10  */
11 #include <xcb/xcb.h>
12
13 #include "data.h"
14
15 #ifndef _CLIENT_H
16 #define _CLIENT_H
17
18 /**
19  * Removes the given client from the container, either because it will be
20  * inserted into another one or because it was unmapped
21  *
22  */
23 void client_remove_from_container(xcb_connection_t *conn, Client *client,
24                                   Container *container,
25                                   bool remove_from_focusstack);
26
27 /**
28  * Warps the pointer into the given client (in the middle of it, to be
29  * specific), therefore selecting it
30  *
31  */
32 void client_warp_pointer_into(xcb_connection_t *conn, Client *client);
33
34 /**
35  * Kills the given window using WM_DELETE_WINDOW or xcb_kill_window
36  *
37  */
38 void client_kill(xcb_connection_t *conn, Client *window);
39
40 /**
41  * Checks if the given window class and title match the given client Window
42  * title is passed as "normal" string and as UCS-2 converted string for
43  * matching _NET_WM_NAME capable clients as well as those using legacy hints.
44  *
45  */
46 bool client_matches_class_name(Client *client, char *to_class, char *to_title,
47                                char *to_title_ucs, int to_title_ucs_len);
48
49 /**
50  * Enters fullscreen mode for the given client. This is called by toggle_fullscreen
51  * and when moving a fullscreen client to another screen.
52  *
53  */
54 void client_enter_fullscreen(xcb_connection_t *conn, Client *client, bool global);
55
56 /**
57  * Leaves fullscreen mode for the given client. This is called by toggle_fullscreen.
58  *
59  */
60 void client_leave_fullscreen(xcb_connection_t *conn, Client *client);
61
62 /**
63  * Leaves fullscreen mode for the current client. This is called by toggle_fullscreen.
64  *
65  */
66 void client_leave_fullscreen(xcb_connection_t *conn, Client *client);
67
68 /**
69  * Toggles fullscreen mode for the given client. It updates the data
70  * structures and reconfigures (= resizes/moves) the client and its frame to
71  * the full size of the screen. When leaving fullscreen, re-rendering the
72  * layout is forced.
73  *
74  */
75 void client_toggle_fullscreen(xcb_connection_t *conn, Client *client);
76
77 /**
78  * Like client_toggle_fullscreen(), but putting it in global fullscreen-mode.
79  *
80  */
81 void client_toggle_fullscreen_global(xcb_connection_t *conn, Client *client);
82
83 /**
84  * Sets the position of the given client in the X stack to the highest (tiling
85  * layer is always on the same position, so this doesn’t matter) below the
86  * first floating client, so that floating windows are always on top.
87  *
88  */
89 void client_set_below_floating(xcb_connection_t *conn, Client *client);
90
91 /**
92  * Returns true if the client is floating. Makes the code more beatiful, as
93  * floating is not simply a boolean, but also saves whether the user selected
94  * the current state or whether it was automatically set.
95  *
96  */
97 bool client_is_floating(Client *client);
98
99 /**
100  * Change the border type for the given client to normal (n), 1px border (p) or
101  * completely borderless (b).
102  *
103  */
104 void client_change_border(xcb_connection_t *conn, Client *client, char border_type);
105
106 /**
107  * Change the border type for the given client to normal (n), 1px border (p) or
108  * completely borderless (b) without actually re-rendering the layout. Useful
109  * for calling it when initializing a new client.
110  *
111  */
112 bool client_init_border(xcb_connection_t *conn, Client *client, char border_type);
113
114 /**
115  * Unmap the client, correctly setting any state which is needed.
116  *
117  */
118 void client_unmap(xcb_connection_t *conn, Client *client);
119
120 /**
121  * Map the client, correctly restoring any state needed.
122  *
123  */
124 void client_map(xcb_connection_t *conn, Client *client);
125
126 /**
127  * Set the given mark for this client. Used for jumping to the client
128  * afterwards (like m<mark> and '<mark> in vim).
129  *
130  */
131 void client_mark(xcb_connection_t *conn, Client *client, const char *mark);
132
133 /**
134  * Returns the minimum height of a specific window. The height is calculated
135  * by using 2 pixels (for the client window itself), possibly padding this to
136  * comply with the client’s base_height and then adding the decoration height.
137  *
138  */
139 uint32_t client_min_height(Client *client);
140
141 /**
142  * See client_min_height.
143  *
144  */
145 uint32_t client_min_width(Client *client);
146
147 /**
148  * Pretty-prints the client’s information into the logfile.
149  *
150  */
151 #define CLIENT_LOG(client) do { \
152                 DLOG("Window: frame 0x%08x, child 0x%08x\n", client->frame, client->child); \
153         } while (0)
154
155 #endif