summaryrefslogtreecommitdiff
path: root/src/actions.c
diff options
context:
space:
mode:
authorsabetts <sabetts>2005-10-20 06:21:44 +0000
committersabetts <sabetts>2005-10-20 06:21:44 +0000
commitc7b7f18ea8e839f142688ad2f2fa3e3b128abfad (patch)
treefbd16bfc8527e9842f57f798589eddd66e320238 /src/actions.c
parent0f52e43fa926565b8ab1b0f95fc401e15a4bd8c7 (diff)
downloadratpoison-c7b7f18ea8e839f142688ad2f2fa3e3b128abfad.zip
* src/window.c: include unistd.h
(get_child_info): new function (add_to_window_list): get the window's client's pid if possible and assign the window the appropriate group and frame. (add_to_window_list): init intended_frame_number (save_mouse_position): save the position relative to the window (give_window_focus): restore the position relative to the window (set_active_window_body): put the window in the frame contained in intended_frame_number when appropriate. * src/screen.c (screen_find_frame_by_frame): new function (init_screen): add the net_supported atom to the root window. * src/main.c (main): init netwm atoms * src/group.c (groups_find_group_by_group): new function * src/globals.c (_net_wm_pid, _net_supported): new globals * src/data.h (struct rp_window): new field intended_frame_number. (struct rp_child_info): new fields group, frame, screen. * src/actions.c (spawn): call the command directly when new argument, raw, is non zero. all callers updated. (spawn): fill in the frame, group and screen for the child.
Diffstat (limited to 'src/actions.c')
-rw-r--r--src/actions.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/actions.c b/src/actions.c
index 62a5ee9..ff4a5bf 100644
--- a/src/actions.c
+++ b/src/actions.c
@@ -2452,12 +2452,12 @@ cmd_colon (int interactive, struct cmdarg **args)
cmdret *
cmd_exec (int interactive, struct cmdarg **args)
{
- spawn (ARG_STRING(0));
+ spawn (ARG_STRING(0), 0);
return cmdret_new (RET_SUCCESS, NULL);
}
int
-spawn(char *cmd)
+spawn(char *cmd, int raw)
{
rp_child_info *child;
int pid;
@@ -2476,6 +2476,9 @@ spawn(char *cmd)
#elif defined (HAVE_SETPGRP)
setpgrp (0, 0);
#endif
+ /* raw means don't run it through sh. */
+ if (raw)
+ execl (cmd, 0);
execl("/bin/sh", "sh", "-c", cmd, 0);
_exit(EXIT_FAILURE);
}
@@ -2488,6 +2491,9 @@ spawn(char *cmd)
child->cmd = strdup (cmd);
child->pid = pid;
child->terminated = 0;
+ child->frame = current_frame();
+ child->group = rp_current_group;
+ child->screen = current_screen();
list_add (&child->node, &rp_children);
@@ -4224,7 +4230,7 @@ cmd_tmpwm (int interactive, struct cmdarg **args)
/* Disable our SIGCHLD handler */
set_sig_handler (SIGCHLD, SIG_IGN);
/* Launch the new WM and wait for it to terminate. */
- pid = spawn (ARG_STRING(0));
+ pid = spawn (ARG_STRING(0), 0);
PRINT_DEBUG (("spawn pid: %d\n", pid));
do
{
@@ -4441,7 +4447,7 @@ cmdret *
cmd_verbexec (int interactive, struct cmdarg **args)
{
marked_message_printf(0, 0, "Running %s", ARG_STRING(0));
- spawn (ARG_STRING(0));
+ spawn (ARG_STRING(0), 0);
return cmdret_new (RET_SUCCESS, NULL);
}