diff --git a/src/config_struct.h b/src/config_struct.h index 64929c9..e9356c9 100644 --- a/src/config_struct.h +++ b/src/config_struct.h @@ -192,6 +192,7 @@ func_name_list_t func_list[] = {"client_raise", uicb_client_raise }, {"tile_switch", uicb_tile_switch }, {"toggle_free", uicb_togglefree }, + {"screen_select", uicb_screen_select }, {"reload", uicb_reload } }; diff --git a/src/event.c b/src/event.c index bc8b7e3..226dd6b 100644 --- a/src/event.c +++ b/src/event.c @@ -119,10 +119,8 @@ clientmessageevent(XClientMessageEvent *ev) /* Manage _NET_ACTIVE_WINDOW */ else if(mess_t == net_active_window) if((c = client_gb_win((Window)ev->data.l[0]))) - { - tag_set(c->tag); client_focus(c); - } + } /* Manage _NET_WM_STATE */ diff --git a/src/ewmh.c b/src/ewmh.c index 10d4b4c..1c52c13 100644 --- a/src/ewmh.c +++ b/src/ewmh.c @@ -184,6 +184,7 @@ ewmh_manage_net_wm_state(long data_l[], Client *c) { if(data_l[0] == _NET_WM_STATE_ADD) { + screen_set_sel(c->screen); tag_set(c->tag); client_focus(c); } diff --git a/src/mouse.c b/src/mouse.c index fd55f00..502b570 100644 --- a/src/mouse.c +++ b/src/mouse.c @@ -46,7 +46,7 @@ mouse_move(Client *c) XRectangle geo = c->geo; XEvent ev; - if(c->max || c->tile || c->lmax) + if(c->max || c->tile || c->lmax || c->state_fullscreen) return; if(XGrabPointer(dpy, ROOT, False, MouseMask, GrabModeAsync, GrabModeAsync, @@ -91,7 +91,7 @@ mouse_resize(Client *c) XRectangle geo = c->geo; XEvent ev; - if(c->max || c->lmax || c->tile) + if(c->max || c->lmax || c->tile || c->state_fullscreen) return; if(XGrabPointer(dpy, ROOT, False, MouseMask, GrabModeAsync, GrabModeAsync, diff --git a/src/screen.c b/src/screen.c index 82de0b8..2dd0851 100644 --- a/src/screen.c +++ b/src/screen.c @@ -102,6 +102,24 @@ screen_get_with_geo(int x, int y) return r; } +/** Set the selected screen + *\param screen Number of the wanted selected screen +*/ +void +screen_set_sel(int screen) +{ + if(screen < 0 || screen > screen_count() - 1) + screen = 0; + + 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; +} + /** Get and set the selected screen *\return The number of the selected screen */ @@ -137,4 +155,15 @@ screen_init_geo(void) return; } +/** Uicb screen select + * \param cmd Screen uicb_t type +*/ +void +uicb_screen_select(uicb_t cmd) +{ + int s = atoi(cmd); + screen_set_sel(s); + + return; +} diff --git a/src/wmfs.h b/src/wmfs.h index 43b8f2f..9e405e4 100644 --- a/src/wmfs.h +++ b/src/wmfs.h @@ -215,7 +215,9 @@ int screen_count(void); XRectangle screen_get_geo(int s); int screen_get_with_geo(int x, int y); int screen_get_sel(void); +void screen_set_sel(int screen); void screen_init_geo(void); +void uicb_screen_select(uicb_t cmd); /* layout.c */ void arrange(void);