diff -ur ratpoison.cjp-xinerama-2/src/data.h ratpoison/src/data.h --- ratpoison.cjp-xinerama-2/src/data.h 2003-11-25 20:40:01.000000000 +0800 +++ ratpoison/src/data.h 2003-11-27 19:50:37.000000000 +0800 @@ -51,6 +51,9 @@ /* For determining the last frame. */ int last_access; + /* The screen that this frame is situated on. */ + rp_screen *scr; + struct list_head node; }; diff -ur ratpoison.cjp-xinerama-2/src/frame.c ratpoison/src/frame.c --- ratpoison.cjp-xinerama-2/src/frame.c 2003-05-25 18:56:19.000000000 +0800 +++ ratpoison/src/frame.c 2003-11-27 19:51:00.000000000 +0800 @@ -114,6 +114,7 @@ f = xmalloc (sizeof (rp_frame)); f->number = numset_request (s->frames_numset); + f->scr = s; f->last_access = 0; return f; diff -ur ratpoison.cjp-xinerama-2/src/split.c ratpoison/src/split.c --- ratpoison.cjp-xinerama-2/src/split.c 2003-11-25 23:12:36.000000000 +0800 +++ ratpoison/src/split.c 2003-11-27 19:49:28.000000000 +0800 @@ -99,6 +99,11 @@ { frame->win_number = win->number; win->frame_number = frame->number; + + /* We need to make sure that win and frame are on the same screen, + * since with Xinerama, windows can move from one screen to another. + */ + win->scr = frame->scr; } else { diff -ur ratpoison.cjp-xinerama-2/src/window.c ratpoison/src/window.c --- ratpoison.cjp-xinerama-2/src/window.c 2003-11-25 23:12:19.000000000 +0800 +++ ratpoison/src/window.c 2003-11-27 19:49:00.000000000 +0800 @@ -470,7 +470,6 @@ if (rp_have_xinerama) { frame = screen_get_frame (current_screen(), current_screen()->current_frame); - win->scr = current_screen(); } else {