X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Faction.c;h=bd8ae9e40fd9192706c51ec9f8347274088cea19;hb=ed4c6995ca199e5d015f1ca90654b4030c7ea760;hp=17d951cfe83dffcd29dbf21701c5e6c115fe3a3a;hpb=7c80db2552c97be9145ce88dd40f80b0873f56ef;p=chaz%2Fopenbox diff --git a/openbox/action.c b/openbox/action.c index 17d951cf..bd8ae9e4 100644 --- a/openbox/action.c +++ b/openbox/action.c @@ -591,6 +591,11 @@ ActionString actionstrings[] = action_toggle_maximize_vert, setup_client_action }, + { + "togglefullscreen", + action_toggle_fullscreen, + setup_client_action + }, { "sendtodesktop", action_send_to_desktop, @@ -676,6 +681,11 @@ ActionString actionstrings[] = action_moveresize, setup_action_resize }, + { + "toggledockautohide", + action_toggle_dockautohide, + NULL + }, { "toggleshowdesktop", action_toggle_show_desktop, @@ -979,14 +989,23 @@ void action_run_string(const gchar *name, struct _ObClient *c) void action_execute(union ActionData *data) { GError *e = NULL; - gchar *cmd; + gchar *cmd, **argv = 0; if (data->execute.path) { cmd = g_filename_from_utf8(data->execute.path, -1, NULL, NULL, NULL); if (cmd) { - if (!g_spawn_command_line_async(cmd, &e)) { + if (!g_shell_parse_argv (cmd, NULL, &argv, &e)) { g_warning("failed to execute '%s': %s", cmd, e->message); g_error_free(e); + } else { + if (!g_spawn_async(NULL, argv, NULL, G_SPAWN_SEARCH_PATH | + G_SPAWN_DO_NOT_REAP_CHILD, + NULL, NULL, NULL, &e)) { + g_warning("failed to execute '%s': %s", + cmd, e->message); + g_error_free(e); + } + g_strfreev(argv); } g_free(cmd); } else { @@ -1041,7 +1060,10 @@ void action_raiselower(union ActionData *data) } } - action_run_string((raise ? "Raise" : "Lower"), c); + if (raise) + action_raise(data); + else + action_lower(data); } void action_raise(union ActionData *data) @@ -1054,17 +1076,17 @@ void action_raise(union ActionData *data) void action_unshaderaise(union ActionData *data) { if (data->client.any.c->shaded) - action_run_string("Unshade", data->client.any.c); + action_unshade(data); else - action_run_string("Raise", data->client.any.c); + action_raise(data); } void action_shadelower(union ActionData *data) { if (data->client.any.c->shaded) - action_run_string("Lower", data->client.any.c); + action_lower(data); else - action_run_string("Shade", data->client.any.c); + action_shade(data); } void action_lower(union ActionData *data) @@ -1072,8 +1094,6 @@ void action_lower(union ActionData *data) client_action_start(data); stacking_lower(CLIENT_AS_WINDOW(data->client.any.c)); client_action_end(data); - - focus_order_to_bottom(data->client.any.c); } void action_close(union ActionData *data) @@ -1219,6 +1239,14 @@ void action_toggle_maximize_vert(union ActionData *data) client_action_end(data); } +void action_toggle_fullscreen(union ActionData *data) +{ + client_action_start(data); + client_fullscreen(data->client.any.c, + !(data->client.any.c->fullscreen), TRUE); + client_action_end(data); +} + void action_send_to_desktop(union ActionData *data) { ObClient *c = data->sendto.any.c; @@ -1396,7 +1424,7 @@ void action_cycle_windows(union ActionData *data) on us */ event_halt_focus_delay(); - focus_cycle(data->cycle.forward, data->cycle.linear, + focus_cycle(data->cycle.forward, data->cycle.linear, data->any.interactive, data->cycle.dialog, data->cycle.inter.final, data->cycle.inter.cancel); } @@ -1408,6 +1436,7 @@ void action_directional_focus(union ActionData *data) event_halt_focus_delay(); focus_directional_cycle(data->interdiraction.direction, + data->any.interactive, data->interdiraction.dialog, data->interdiraction.inter.final, data->interdiraction.inter.cancel); @@ -1451,6 +1480,10 @@ void action_growtoedge(union ActionData *data) ObClient *c = data->diraction.any.c; Rect *a; + //FIXME growtoedge resizes shaded windows to 0 height + if (c->shaded) + return; + a = screen_area(c->desktop); x = c->frame->area.x; y = c->frame->area.y; @@ -1524,6 +1557,12 @@ void action_toggle_layer(union ActionData *data) client_action_end(data); } +void action_toggle_dockautohide(union ActionData *data) +{ + config_dock_hide = !config_dock_hide; + dock_configure(); +} + void action_toggle_show_desktop(union ActionData *data) { screen_show_desktop(!screen_showing_desktop);