summaryrefslogtreecommitdiff
path: root/src/actions.c
diff options
context:
space:
mode:
authorsabetts <sabetts>2000-12-09 11:34:43 +0000
committersabetts <sabetts>2000-12-09 11:34:43 +0000
commit1a8458cd5a3252f9d2141de13ef67a30b215476c (patch)
tree4d4b0b7c70c141f83c66c2adff651cb5b8c9d49e /src/actions.c
parent7ee9190d0849e8df707611b63b42e976bbd8d827 (diff)
downloadratpoison-1a8458cd5a3252f9d2141de13ef67a30b215476c.zip
* input.c (cook_keycode): properly handle LockMask
* input.h: added prototype for keysym_to_string * input.c (keysym_to_string): added * bar.c (show_bar): update_window_names(s) is called whether the bar is raised or not. * conf.h: Added BAR_Y_PADDING BAR_X_PADDING * list.c (goto_window_name): return success or failure * list.h: updated prototype for goto_window_name * events.c (handle_key): Added a message indicating an unbound key. * bar.c (display_msg_in_bar): added (update_window_names): uses BAR_X_PADDING instead of `5' (update_window_names): Updated BAR_PADDING to BAR_Y_PADDING * input.c (cook_keycode): mod is now an usigned int (read_key): Ignores modifier keys. Now returns keysym and modifiers. (get_input): Updated BAR_PADDING to BAR_Y_PADDING and BAR_X_PADDING. * events.c (handle_key): uses read_key instead of XMaskEvent to read a key. * actions.c (goto_window_number): window list is displayed on failure. (bye): added (switch_to): added (execute_command): no longer seg faults when no windows exist.
Diffstat (limited to 'src/actions.c')
-rw-r--r--src/actions.c53
1 files changed, 51 insertions, 2 deletions
diff --git a/src/actions.c b/src/actions.c
index 323f519..095604b 100644
--- a/src/actions.c
+++ b/src/actions.c
@@ -67,8 +67,15 @@ next_window (void *data)
void
last_window (void *data)
{
+ rp_window *oldwin = rp_current_window;
+
rp_current_window = find_last_accessed_window ();
set_active_window (rp_current_window);
+
+ if (rp_current_window == oldwin)
+ {
+ display_msg_in_bar (&screens[0], "No other window.");
+ }
}
@@ -145,7 +152,17 @@ execute_command (void *data)
{
char cmd[100];
- get_input (rp_current_window->scr, "Command: ", cmd, 100);
+ if (rp_current_window)
+ {
+ get_input (rp_current_window->scr, "Command: ", cmd, 100);
+ }
+ else
+ {
+ /* FIXME: We can always assume there is 1 screen, but which one
+ is the active one? Need to test on multi-screen x-servers. */
+ get_input (&screens[0], "Command: ", cmd, 100);
+ }
+
PRINT_DEBUG ("user entered: %s\n", cmd);
spawn (cmd);
@@ -163,8 +180,10 @@ spawn(void *data)
if (fork() == 0) {
putenv(DisplayString(dpy));
execlp(prog, prog, 0);
- fprintf (stderr, "exec %s ", prog);
+
+ PRINT_ERROR ("exec %s ", prog);
perror(" failed");
+
exit(EXIT_FAILURE);
}
exit(0);
@@ -173,6 +192,32 @@ spawn(void *data)
PRINT_DEBUG ("spawned %s\n", prog);
}
+/* Switch to a different Window Manager. Thanks to
+"Chr. v. Stuckrad" <stucki@math.fu-berlin.de> for the patch. */
+void
+switch_to(void *which)
+{
+ char *prog=(char *)which;
+
+ PRINT_DEBUG ("Switching to %s\n", prog);
+
+ putenv(DisplayString(dpy));
+ execlp(prog, prog, 0);
+
+ PRINT_ERROR ("exec %s ", prog);
+ perror(" failed");
+}
+
+/* Quit ratpoison. Thanks to
+"Chr. v. Stuckrad" <stucki@math.fu-berlin.de> for the patch. */
+void
+bye(void *dummy)
+{
+ PRINT_DEBUG ("Exiting\n");
+ clean_up ();
+ exit (EXIT_SUCCESS);
+}
+
void
goto_window_number (int n)
{
@@ -180,6 +225,10 @@ goto_window_number (int n)
if ((win = find_window_by_number (n)) == NULL)
{
+ /* Display window list to indicate failure. */
+ /* FIXME: We can always assume there is 1 screen, but which one
+ is the active one? Need to test on multi-screen x-servers. */
+ show_bar (&screens[0]);
return;
}