diff --git a/objects/screen.c b/objects/screen.c index 533f578e..9ed3db96 100644 --- a/objects/screen.c +++ b/objects/screen.c @@ -914,22 +914,24 @@ screen_client_moveto(client_t *c, screen_t *new_screen, bool doresize) new_geometry.x = to.x + to.width - new_geometry.width; if(new_geometry.y + new_geometry.height > to.y + to.height) new_geometry.y = to.y + to.height - new_geometry.height; + if(!screen_area_in_screen(new_screen, new_geometry)) + { + /* If all else fails, force the client to end up on screen. */ + new_geometry.x = to.x; + new_geometry.y = to.y; + } /* move / resize the client */ client_resize(c, new_geometry, false); - /* Emit signal, but only in case the call to client_resize had not changed - * it already. */ - if(old_screen != c->screen) - { - luaA_object_push(L, c); - if(old_screen != NULL) - luaA_object_push(L, old_screen); - else - lua_pushnil(L); - luaA_object_emit_signal(L, -2, "property::screen", 1); - lua_pop(L, 1); - } + /* emit signal */ + luaA_object_push(L, c); + if(old_screen != NULL) + luaA_object_push(L, old_screen); + else + lua_pushnil(L); + luaA_object_emit_signal(L, -2, "property::screen", 1); + lua_pop(L, 1); if(had_focus) client_focus(c);