diff --git a/src/config.c b/src/config.c index cd7aeba..871c32c 100644 --- a/src/config.c +++ b/src/config.c @@ -70,6 +70,7 @@ func_name_list_t tmp_func_list[] = {"screen_select", uicb_screen_select }, {"screen_next", uicb_screen_next }, {"screen_prev", uicb_screen_prev }, + {"screen_prev_sel", uicb_screen_prev_sel}, {"reload", uicb_reload }, {"launcher", uicb_launcher }, {"set_layout", uicb_set_layout }, diff --git a/src/screen.c b/src/screen.c index d5e5d92..a767909 100644 --- a/src/screen.c +++ b/src/screen.c @@ -123,10 +123,13 @@ screen_set_sel(int screen) if(screen < 0 || screen > screen_count() - 1) screen = 0; + prevselscreen = selscreen; + client_focus(NULL); XWarpPointer(dpy, None, ROOT, 0, 0, 0, 0, sgeo[screen].x + sgeo[screen].width / 2, sgeo[screen].y + sgeo[screen].height / 2); + selscreen = screen; return; @@ -138,6 +141,8 @@ screen_set_sel(int screen) int screen_get_sel(void) { + int os = selscreen; + selscreen = 0; #ifdef HAVE_XINERAMA @@ -157,6 +162,9 @@ screen_get_sel(void) XChangeProperty(dpy, ROOT, net_atom[wmfs_current_screen], XA_CARDINAL, 32, PropModeReplace, (uchar*)&selscreen, 1); + if(os != selscreen) + prevselscreen = os; + return selscreen; } @@ -251,3 +259,18 @@ uicb_screen_prev(uicb_t cmd) return; } + +/** Uicb: screen prev sel + * \param cmd uicb_t type unused + */ +void +uicb_screen_prev_sel(uicb_t cmd) +{ + screen_get_sel(); + + screen_set_sel(prevselscreen); + + return; +} + + diff --git a/src/wmfs.h b/src/wmfs.h index 5c8f65f..95e8914 100644 --- a/src/wmfs.h +++ b/src/wmfs.h @@ -282,6 +282,7 @@ void screen_init_geo(void); void uicb_screen_select(uicb_t); void uicb_screen_next(uicb_t); void uicb_screen_prev(uicb_t); +void uicb_screen_prev_sel(uicb_t); /* status.c */ int statustext_rectangle(StatusRec *r, char *str); @@ -360,6 +361,7 @@ void uicb_reload(uicb_t); Display *dpy; GC gc, gc_stipple; int selscreen; +int prevselscreen; Conf conf; Key *keys; Bool exiting, estatus;