-void action_debug(union ActionData *data)
-{
- if (data->debug.string)
- g_print("%s\n", data->debug.string);
-}
-
-void action_execute(union ActionData *data)
-{
- GError *e = NULL;
- gchar *cmd, **argv = 0;
- if (data->execute.path) {
- cmd = g_filename_from_utf8(data->execute.path, -1, NULL, NULL, NULL);
- if (cmd) {
- /* If there is an interactive action going on, then cancel it
- to release the keyboard, so that the run application
- can grab the keyboard if it wants to. */
- if (keyboard_interactively_grabbed())
- keyboard_interactive_cancel();
-
- if (!g_shell_parse_argv (cmd, NULL, &argv, &e)) {
- g_message(_("Failed to execute '%s': %s"),
- cmd, e->message);
- g_error_free(e);
- } else if (data->execute.startupnotify) {
- gchar *program;
-
- program = g_path_get_basename(argv[0]);
- /* sets up the environment */
- sn_setup_spawn_environment(program,
- data->execute.name,
- data->execute.icon_name,
- /* launch it on the current
- desktop */
- screen_desktop,
- data->execute.any.time);
- if (!g_spawn_async(NULL, argv, NULL, G_SPAWN_SEARCH_PATH |
- G_SPAWN_DO_NOT_REAP_CHILD,
- NULL, NULL, NULL, &e)) {
- g_message(_("Failed to execute '%s': %s"),
- cmd, e->message);
- g_error_free(e);
- sn_spawn_cancel();
- }
- unsetenv("DESKTOP_STARTUP_ID");
- g_free(program);
- g_strfreev(argv);
- } else {
- if (!g_spawn_async(NULL, argv, NULL, G_SPAWN_SEARCH_PATH |
- G_SPAWN_DO_NOT_REAP_CHILD,
- NULL, NULL, NULL, &e))
- {
- g_message(_("Failed to execute '%s': %s"),
- cmd, e->message);
- g_error_free(e);
- }
- g_strfreev(argv);
- }
- g_free(cmd);
- } else {
- g_message(_("Failed to convert the path '%s' from utf8"),
- data->execute.path);
- }
- }
-}
-
-void action_activate(union ActionData *data)
-{
- if (data->client.any.c) {
- if (!data->any.button || client_mouse_focusable(data->client.any.c) ||
- (data->any.context != OB_FRAME_CONTEXT_CLIENT &&
- data->any.context != OB_FRAME_CONTEXT_FRAME))
- {
- /* if using focus_delay, stop the timer now so that focus doesn't
- go moving on us */
- event_halt_focus_delay();
-
- client_activate(data->activate.any.c, data->activate.here, TRUE);
- }
- } else {
- /* focus action on something other than a client, make keybindings
- work for this openbox instance, but don't focus any specific client
- */
- focus_nothing();
- }
-}
-
-void action_focus(union ActionData *data)
-{
- if (data->client.any.c) {
- if (!data->any.button || client_mouse_focusable(data->client.any.c) ||
- (data->any.context != OB_FRAME_CONTEXT_CLIENT &&
- data->any.context != OB_FRAME_CONTEXT_FRAME))
- {
- /* if using focus_delay, stop the timer now so that focus doesn't
- go moving on us */
- event_halt_focus_delay();
-
- client_focus(data->client.any.c);
- }
- } else {
- /* focus action on something other than a client, make keybindings
- work for this openbox instance, but don't focus any specific client
- */
- focus_nothing();
- }
-}
-