summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBernhard R. Link <brlink@debian.org>2008-10-11 13:30:58 +0200
committerBernhard R. Link <brlink@debian.org>2008-10-11 13:30:58 +0200
commit96f8765e306e2a5ed27546d2fec9b08613d369c2 (patch)
tree038784f40037a112cc1ad5a8817ff2975da50580
parentcdf47ffa11181bee433fd52f01fbc9d29f6d5323 (diff)
downloadratpoison-96f8765e306e2a5ed27546d2fec9b08613d369c2.zip
cmd_swap checks that both frames are on the same screen
-rw-r--r--src/actions.c10
-rw-r--r--src/frame.h2
-rw-r--r--src/split.c4
3 files changed, 12 insertions, 4 deletions
diff --git a/src/actions.c b/src/actions.c
index c7534bc..4187877 100644
--- a/src/actions.c
+++ b/src/actions.c
@@ -4185,12 +4185,20 @@ cmd_exchangeright (int interactive, struct cmdarg **args)
cmdret *
cmd_swap (int interactive, struct cmdarg **args)
{
+ rp_screen *s;
rp_frame *dest_frame;
rp_frame *src_frame;
dest_frame = ARG(0, frame);
src_frame = args[1] ? ARG (1, frame) : current_frame();
-
+
+ if (!rp_have_xinerama)
+ {
+ s = frames_screen(src_frame);
+ if (screen_find_frame_by_frame(s, dest_frame) == NULL)
+ return cmdret_new (RET_FAILURE, "swap: frames on different screens");
+ }
+
exchange_with_frame (current_screen(), src_frame, dest_frame);
return cmdret_new (RET_SUCCESS, NULL);
diff --git a/src/frame.h b/src/frame.h
index 7fad406..611ecc0 100644
--- a/src/frame.h
+++ b/src/frame.h
@@ -42,4 +42,6 @@ rp_frame *frame_copy (rp_frame *frame);
char *frame_dump (rp_frame *frame, rp_screen *screen);
rp_frame *frame_read (char *str, rp_screen *screen);
+rp_screen *frames_screen (rp_frame *);
+
#endif
diff --git a/src/split.c b/src/split.c
index 6a6773d..9b31b89 100644
--- a/src/split.c
+++ b/src/split.c
@@ -29,8 +29,6 @@
#define VERTICALLY 0
#define HORIZONTALLY 1
-static rp_screen *frames_screen(rp_frame *);
-
static void
update_last_access (rp_frame *frame)
{
@@ -110,7 +108,7 @@ set_frames_window (rp_frame *frame, rp_window *win)
return find_window_number (last_win);
}
-static rp_screen *
+rp_screen *
frames_screen (rp_frame *frame)
{
int i;