+}
+
+void action_lower(union ActionData *data)
+{
+ if (data->client.c)
+ stacking_lower(CLIENT_AS_WINDOW(data->client.c));
+}
+
+void action_close(union ActionData *data)
+{
+ if (data->client.c)
+ client_close(data->client.c);
+}
+
+void action_kill(union ActionData *data)
+{
+ if (data->client.c)
+ client_kill(data->client.c);
+}
+
+void action_shade(union ActionData *data)
+{
+ if (data->client.c)
+ client_shade(data->client.c, TRUE);
+}
+
+void action_unshade(union ActionData *data)
+{
+ if (data->client.c)
+ client_shade(data->client.c, FALSE);
+}
+
+void action_toggle_shade(union ActionData *data)
+{
+ if (data->client.c)
+ client_shade(data->client.c, !data->client.c->shaded);
+}
+
+void action_toggle_omnipresent(union ActionData *data)
+{
+ if (data->client.c)
+ client_set_desktop(data->client.c,
+ data->client.c->desktop == DESKTOP_ALL ?
+ screen_desktop : DESKTOP_ALL, FALSE);
+}
+
+void action_move_relative_horz(union ActionData *data)
+{
+ Client *c = data->relative.c;
+ if (c)
+ client_configure(c, Corner_TopLeft,
+ c->area.x + data->relative.delta, c->area.y,
+ c->area.width, c->area.height, TRUE, TRUE);
+}
+
+void action_move_relative_vert(union ActionData *data)
+{
+ Client *c = data->relative.c;
+ if (c)
+ client_configure(c, Corner_TopLeft,
+ c->area.x, c->area.y + data->relative.delta,
+ c->area.width, c->area.height, TRUE, TRUE);
+}
+
+void action_resize_relative_horz(union ActionData *data)
+{
+ Client *c = data->relative.c;
+ if (c)
+ client_configure(c, Corner_TopLeft, c->area.x, c->area.y,
+ c->area.width +
+ data->relative.delta * c->size_inc.width,
+ c->area.height, TRUE, TRUE);
+}
+
+void action_resize_relative_vert(union ActionData *data)
+{
+ Client *c = data->relative.c;
+ if (c && !c->shaded)
+ client_configure(c, Corner_TopLeft, c->area.x, c->area.y,
+ c->area.width, c->area.height +
+ data->relative.delta * c->size_inc.height,
+ TRUE, TRUE);
+}
+
+void action_maximize_full(union ActionData *data)
+{
+ if (data->client.c)
+ client_maximize(data->client.c, TRUE, 0, TRUE);
+}
+
+void action_unmaximize_full(union ActionData *data)
+{
+ if (data->client.c)
+ client_maximize(data->client.c, FALSE, 0, TRUE);
+}
+
+void action_toggle_maximize_full(union ActionData *data)
+{
+ if (data->client.c)
+ client_maximize(data->client.c,
+ !(data->client.c->max_horz ||
+ data->client.c->max_vert),
+ 0, TRUE);
+}
+
+void action_maximize_horz(union ActionData *data)
+{
+ if (data->client.c)
+ client_maximize(data->client.c, TRUE, 1, TRUE);
+}
+
+void action_unmaximize_horz(union ActionData *data)
+{
+ if (data->client.c)
+ client_maximize(data->client.c, FALSE, 1, TRUE);
+}
+
+void action_toggle_maximize_horz(union ActionData *data)
+{
+ if (data->client.c)
+ client_maximize(data->client.c, !data->client.c->max_horz, 1, TRUE);
+}
+
+void action_maximize_vert(union ActionData *data)
+{
+ if (data->client.c)
+ client_maximize(data->client.c, TRUE, 2, TRUE);
+}
+
+void action_unmaximize_vert(union ActionData *data)
+{
+ if (data->client.c)
+ client_maximize(data->client.c, FALSE, 2, TRUE);
+}
+
+void action_toggle_maximize_vert(union ActionData *data)
+{
+ if (data->client.c)
+ client_maximize(data->client.c, !data->client.c->max_vert, 2, TRUE);
+}
+
+void action_send_to_desktop(union ActionData *data)
+{
+ if (data->sendto.c) {
+ if (data->sendto.desk < screen_num_desktops ||
+ data->sendto.desk == DESKTOP_ALL) {
+ client_set_desktop(data->desktop.c,
+ data->sendto.desk, data->sendto.follow);
+ if (data->sendto.follow) screen_set_desktop(data->sendto.desk);
+ }
+ }
+}
+
+void action_desktop(union ActionData *data)
+{
+ if (data->desktop.desk < screen_num_desktops ||
+ data->desktop.desk == DESKTOP_ALL)
+ screen_set_desktop(data->desktop.desk);