diff options
author | sabetts <sabetts> | 2005-10-20 06:21:44 +0000 |
---|---|---|
committer | sabetts <sabetts> | 2005-10-20 06:21:44 +0000 |
commit | c7b7f18ea8e839f142688ad2f2fa3e3b128abfad (patch) | |
tree | fbd16bfc8527e9842f57f798589eddd66e320238 /src/actions.c | |
parent | 0f52e43fa926565b8ab1b0f95fc401e15a4bd8c7 (diff) | |
download | ratpoison-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.c | 14 |
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); } |