summaryrefslogtreecommitdiff
path: root/openbox/action.c
diff options
context:
space:
mode:
Diffstat (limited to 'openbox/action.c')
-rw-r--r--openbox/action.c28
1 files changed, 21 insertions, 7 deletions
diff --git a/openbox/action.c b/openbox/action.c
index 8ad60931..7d41d712 100644
--- a/openbox/action.c
+++ b/openbox/action.c
@@ -33,6 +33,7 @@
#include "dock.h"
#include "config.h"
#include "mainloop.h"
+#include "startupnotify.h"
#include <glib.h>
@@ -1005,7 +1006,7 @@ ObAction *action_parse(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
}
void action_run_list(GSList *acts, ObClient *c, ObFrameContext context,
- guint state, guint button, gint x, gint y,
+ guint state, guint button, gint x, gint y, Time time,
gboolean cancel, gboolean done)
{
GSList *it;
@@ -1048,6 +1049,8 @@ void action_run_list(GSList *acts, ObClient *c, ObFrameContext context,
a->data.any.button = button;
+ a->data.any.time = time;
+
if (a->data.any.interactive) {
a->data.inter.cancel = cancel;
a->data.inter.final = done;
@@ -1068,7 +1071,7 @@ void action_run_list(GSList *acts, ObClient *c, ObFrameContext context,
}
}
-void action_run_string(const gchar *name, struct _ObClient *c)
+void action_run_string(const gchar *name, struct _ObClient *c, Time time)
{
ObAction *a;
GSList *l;
@@ -1078,7 +1081,7 @@ void action_run_string(const gchar *name, struct _ObClient *c)
l = g_slist_append(NULL, a);
- action_run(l, c, 0);
+ action_run(l, c, 0, time);
}
void action_execute(union ActionData *data)
@@ -1093,13 +1096,21 @@ void action_execute(union ActionData *data)
cmd, e->message);
g_error_free(e);
} else {
- if (!g_spawn_async(NULL, argv, NULL, G_SPAWN_SEARCH_PATH |
+ gchar **env, *program;
+
+ program = g_path_get_basename(argv[0]);
+ env = sn_get_spawn_environment(program,
+ data->execute.any.time);
+ if (!g_spawn_async(NULL, argv, env, 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);
+ sn_spawn_cancel();
}
+ g_strfreev(env);
+ g_free(program);
g_strfreev(argv);
}
g_free(cmd);
@@ -1119,7 +1130,8 @@ void action_activate(union ActionData *data)
moving on us */
event_halt_focus_delay();
- client_activate(data->activate.any.c, data->activate.here, TRUE);
+ client_activate(data->activate.any.c, data->activate.here, TRUE,
+ data->activate.any.time);
}
}
@@ -1594,7 +1606,8 @@ void action_cycle_windows(union ActionData *data)
focus_cycle(data->cycle.forward, data->cycle.linear, data->any.interactive,
data->cycle.dialog,
- data->cycle.inter.final, data->cycle.inter.cancel);
+ data->cycle.inter.final, data->cycle.inter.cancel,
+ data->cycle.inter.any.time);
}
void action_directional_focus(union ActionData *data)
@@ -1607,7 +1620,8 @@ void action_directional_focus(union ActionData *data)
data->any.interactive,
data->interdiraction.dialog,
data->interdiraction.inter.final,
- data->interdiraction.inter.cancel);
+ data->interdiraction.inter.cancel,
+ data->interdiraction.inter.any.time);
}
void action_movetoedge(union ActionData *data)