7 void action_execute(char *path)
10 if (!g_spawn_command_line_async(path, &e)) {
11 g_warning("failed to execute '%s': %s", path, e->message);
15 void action_iconify(Client *c)
17 client_iconify(c, TRUE, TRUE);
20 void action_raise(Client *c)
25 void action_lower(Client *c)
30 void action_close(Client *c)
35 void action_shade(Client *c)
37 client_shade(c, TRUE);
40 void action_unshade(Client *c)
42 client_shade(c, FALSE);
45 void action_toggle_shade(Client *c)
47 client_shade(c, !c->shaded);
50 void action_toggle_omnipresent(Client *c)
52 client_set_desktop(c, c->desktop == DESKTOP_ALL ?
53 screen_desktop : DESKTOP_ALL);
56 void action_move_relative(Client *c, int dx, int dy)
58 client_configure(c, Corner_TopLeft, c->area.x + dx, c->area.y + dy,
59 c->area.width, c->area.height, TRUE, TRUE);
62 void action_resize_relative(Client *c, int dx, int dy)
64 client_configure(c, Corner_TopLeft, c->area.x, c->area.y,
65 c->area.width + dx, c->area.height + dy, TRUE, TRUE);
68 void action_maximize_full(Client *c)
70 client_maximize(c, TRUE, 0, TRUE);
73 void action_unmaximize_full(Client *c)
75 client_maximize(c, FALSE, 0, TRUE);
78 void action_toggle_maximize_full(Client *c)
80 client_maximize(c, !(c->max_horz || c->max_vert), 0, TRUE);
83 void action_maximize_horz(Client *c)
85 client_maximize(c, TRUE, 1, TRUE);
88 void action_unmaximize_horz(Client *c)
90 client_maximize(c, FALSE, 1, TRUE);
93 void action_toggle_maximize_horz(Client *c)
95 client_maximize(c, !c->max_horz, 1, TRUE);
98 void action_maximize_vert(Client *c)
100 client_maximize(c, TRUE, 2, TRUE);
103 void action_unmaximize_vert(Client *c)
105 client_maximize(c, FALSE, 2, TRUE);
108 void action_toggle_maximize_vert(Client *c)
110 client_maximize(c, !c->max_vert, 2, TRUE);
113 void action_send_to_desktop(Client *c, guint desktop)
115 if (desktop < screen_num_desktops || desktop == DESKTOP_ALL)
116 client_set_desktop(c, desktop);
119 void action_send_to_next_desktop(Client *c, gboolean wrap, gboolean follow)
123 d = screen_desktop + 1;
124 if (d >= screen_num_desktops) {
128 client_set_desktop(c, d);
129 if (follow) screen_set_desktop(d);
132 void action_send_to_previous_desktop(Client *c, gboolean wrap, gboolean follow)
136 d = screen_desktop - 1;
137 if (d >= screen_num_desktops) {
139 d = screen_num_desktops - 1;
141 client_set_desktop(c, d);
142 if (follow) screen_set_desktop(d);
145 void action_desktop(guint desktop)
147 if (desktop < screen_num_desktops || desktop == DESKTOP_ALL)
148 screen_set_desktop(desktop);
151 void action_next_desktop(gboolean wrap)
155 d = screen_desktop + 1;
156 if (d >= screen_num_desktops) {
160 screen_set_desktop(d);
163 void action_previous_desktop(gboolean wrap)
167 d = screen_desktop - 1;
168 if (d >= screen_num_desktops) {
170 d = screen_num_desktops - 1;
172 screen_set_desktop(d);
175 static void cur_row_col(guint *r, guint *c)
177 switch (screen_desktop_layout.orientation) {
178 case Orientation_Horz:
179 switch (screen_desktop_layout.start_corner) {
181 *r = screen_desktop / screen_desktop_layout.columns;
182 *c = screen_desktop % screen_desktop_layout.columns;
184 case Corner_BottomLeft:
185 *r = screen_desktop_layout.rows - 1 -
186 screen_desktop / screen_desktop_layout.columns;
187 *c = screen_desktop % screen_desktop_layout.columns;
190 case Corner_TopRight:
191 *r = screen_desktop / screen_desktop_layout.columns;
192 *c = screen_desktop_layout.columns - 1 -
193 screen_desktop % screen_desktop_layout.columns;
195 case Corner_BottomRight:
196 *r = screen_desktop_layout.rows - 1 -
197 screen_desktop / screen_desktop_layout.columns;
198 *c = screen_desktop_layout.columns - 1 -
199 screen_desktop % screen_desktop_layout.columns;
203 case Orientation_Vert:
204 switch (screen_desktop_layout.start_corner) {
206 *r = screen_desktop % screen_desktop_layout.rows;
207 *c = screen_desktop / screen_desktop_layout.rows;
209 case Corner_BottomLeft:
210 *r = screen_desktop_layout.rows - 1 -
211 screen_desktop % screen_desktop_layout.rows;
212 *c = screen_desktop / screen_desktop_layout.rows;
215 case Corner_TopRight:
216 *r = screen_desktop % screen_desktop_layout.rows;
217 *c = screen_desktop_layout.columns - 1 -
218 screen_desktop / screen_desktop_layout.rows;
220 case Corner_BottomRight:
221 *r = screen_desktop_layout.rows - 1 -
222 screen_desktop % screen_desktop_layout.rows;
223 *c = screen_desktop_layout.columns - 1 -
224 screen_desktop / screen_desktop_layout.rows;
232 static guint translate_row_col(guint r, guint c)
234 switch (screen_desktop_layout.orientation) {
235 case Orientation_Horz:
236 switch (screen_desktop_layout.start_corner) {
238 return r * screen_desktop_layout.columns + c;
239 case Corner_BottomLeft:
240 return (screen_desktop_layout.rows - 1 - r) *
241 screen_desktop_layout.columns + c;
242 case Corner_TopRight:
243 return r * screen_desktop_layout.columns +
244 (screen_desktop_layout.columns - 1 - c);
245 case Corner_BottomRight:
246 return (screen_desktop_layout.rows - 1 - r) *
247 screen_desktop_layout.columns +
248 (screen_desktop_layout.columns - 1 - c);
250 case Orientation_Vert:
251 switch (screen_desktop_layout.start_corner) {
253 return c * screen_desktop_layout.rows + r;
254 case Corner_BottomLeft:
255 return c * screen_desktop_layout.rows +
256 (screen_desktop_layout.rows - 1 - r);
257 case Corner_TopRight:
258 return (screen_desktop_layout.columns - 1 - c) *
259 screen_desktop_layout.rows + r;
260 case Corner_BottomRight:
261 return (screen_desktop_layout.columns - 1 - c) *
262 screen_desktop_layout.rows +
263 (screen_desktop_layout.rows - 1 - r);
266 g_assert_not_reached();
270 void action_next_desktop_column(gboolean wrap)
276 d = translate_row_col(r, c);
277 if (d >= screen_num_desktops) {
281 if (d >= screen_num_desktops)
283 d = translate_row_col(r, c);
284 if (d < screen_num_desktops)
285 screen_set_desktop(d);
288 void action_previous_desktop_column(gboolean wrap)
294 d = translate_row_col(r, c);
295 if (d >= screen_num_desktops) {
297 c = screen_desktop_layout.columns - 1;
299 if (d >= screen_num_desktops)
301 d = translate_row_col(r, c);
302 if (d < screen_num_desktops)
303 screen_set_desktop(d);
306 void action_next_desktop_row(gboolean wrap)
312 d = translate_row_col(r, c);
313 if (d >= screen_num_desktops) {
317 if (d >= screen_num_desktops)
319 d = translate_row_col(r, c);
320 if (d < screen_num_desktops)
321 screen_set_desktop(d);
324 void action_previous_desktop_row(gboolean wrap)
330 d = translate_row_col(r, c);
331 if (d >= screen_num_desktops) {
333 c = screen_desktop_layout.rows - 1;
335 if (d >= screen_num_desktops)
337 d = translate_row_col(r, c);
338 if (d < screen_num_desktops)
339 screen_set_desktop(d);
342 void action_toggle_decorations(Client *c)
344 c->disabled_decorations = c->disabled_decorations ? 0 : ~0;
345 client_setup_decor_and_functions(c);