Screen: Add screen_prev_sel function to go to the last used screen. (Feature #30 requested by Erus)
This commit is contained in:
@@ -70,6 +70,7 @@ func_name_list_t tmp_func_list[] =
|
|||||||
{"screen_select", uicb_screen_select },
|
{"screen_select", uicb_screen_select },
|
||||||
{"screen_next", uicb_screen_next },
|
{"screen_next", uicb_screen_next },
|
||||||
{"screen_prev", uicb_screen_prev },
|
{"screen_prev", uicb_screen_prev },
|
||||||
|
{"screen_prev_sel", uicb_screen_prev_sel},
|
||||||
{"reload", uicb_reload },
|
{"reload", uicb_reload },
|
||||||
{"launcher", uicb_launcher },
|
{"launcher", uicb_launcher },
|
||||||
{"set_layout", uicb_set_layout },
|
{"set_layout", uicb_set_layout },
|
||||||
|
|||||||
23
src/screen.c
23
src/screen.c
@@ -123,10 +123,13 @@ screen_set_sel(int screen)
|
|||||||
if(screen < 0 || screen > screen_count() - 1)
|
if(screen < 0 || screen > screen_count() - 1)
|
||||||
screen = 0;
|
screen = 0;
|
||||||
|
|
||||||
|
prevselscreen = selscreen;
|
||||||
|
|
||||||
client_focus(NULL);
|
client_focus(NULL);
|
||||||
XWarpPointer(dpy, None, ROOT, 0, 0, 0, 0,
|
XWarpPointer(dpy, None, ROOT, 0, 0, 0, 0,
|
||||||
sgeo[screen].x + sgeo[screen].width / 2,
|
sgeo[screen].x + sgeo[screen].width / 2,
|
||||||
sgeo[screen].y + sgeo[screen].height / 2);
|
sgeo[screen].y + sgeo[screen].height / 2);
|
||||||
|
|
||||||
selscreen = screen;
|
selscreen = screen;
|
||||||
|
|
||||||
return;
|
return;
|
||||||
@@ -138,6 +141,8 @@ screen_set_sel(int screen)
|
|||||||
int
|
int
|
||||||
screen_get_sel(void)
|
screen_get_sel(void)
|
||||||
{
|
{
|
||||||
|
int os = selscreen;
|
||||||
|
|
||||||
selscreen = 0;
|
selscreen = 0;
|
||||||
|
|
||||||
#ifdef HAVE_XINERAMA
|
#ifdef HAVE_XINERAMA
|
||||||
@@ -157,6 +162,9 @@ screen_get_sel(void)
|
|||||||
XChangeProperty(dpy, ROOT, net_atom[wmfs_current_screen], XA_CARDINAL, 32,
|
XChangeProperty(dpy, ROOT, net_atom[wmfs_current_screen], XA_CARDINAL, 32,
|
||||||
PropModeReplace, (uchar*)&selscreen, 1);
|
PropModeReplace, (uchar*)&selscreen, 1);
|
||||||
|
|
||||||
|
if(os != selscreen)
|
||||||
|
prevselscreen = os;
|
||||||
|
|
||||||
return selscreen;
|
return selscreen;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -251,3 +259,18 @@ uicb_screen_prev(uicb_t cmd)
|
|||||||
|
|
||||||
return;
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -282,6 +282,7 @@ void screen_init_geo(void);
|
|||||||
void uicb_screen_select(uicb_t);
|
void uicb_screen_select(uicb_t);
|
||||||
void uicb_screen_next(uicb_t);
|
void uicb_screen_next(uicb_t);
|
||||||
void uicb_screen_prev(uicb_t);
|
void uicb_screen_prev(uicb_t);
|
||||||
|
void uicb_screen_prev_sel(uicb_t);
|
||||||
|
|
||||||
/* status.c */
|
/* status.c */
|
||||||
int statustext_rectangle(StatusRec *r, char *str);
|
int statustext_rectangle(StatusRec *r, char *str);
|
||||||
@@ -360,6 +361,7 @@ void uicb_reload(uicb_t);
|
|||||||
Display *dpy;
|
Display *dpy;
|
||||||
GC gc, gc_stipple;
|
GC gc, gc_stipple;
|
||||||
int selscreen;
|
int selscreen;
|
||||||
|
int prevselscreen;
|
||||||
Conf conf;
|
Conf conf;
|
||||||
Key *keys;
|
Key *keys;
|
||||||
Bool exiting, estatus;
|
Bool exiting, estatus;
|
||||||
|
|||||||
Reference in New Issue
Block a user