Screen: Add screen_prev_sel function to go to the last used screen. (Feature #30 requested by Erus)

This commit is contained in:
Martin Duquesnoy 2010-02-26 23:40:16 +01:00
parent 2e0b050be3
commit 7a714c03a9
3 changed files with 26 additions and 0 deletions

View File

@ -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 },

View File

@ -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;
}

View File

@ -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;