screen_client_moveto: Make sure client ends up on target screen
This function tried to move the client to its new screen based on
shifting around its current geometry. However, it assumed that the
client was actually visible on its current screen, which is not always
the case.
Fix this by just forcing the client into its new screen if our moving
approach does not work.
This also reverts commit d5e365804c
which
is no longer necessary. This commit only hid the issue (partly).
Fixes: https://github.com/awesomeWM/awesome/issues/318
Signed-off-by: Uli Schlachter <psychon@znc.in>
This commit is contained in:
parent
c57208d1a8
commit
1332288f9d
|
@ -914,14 +914,17 @@ screen_client_moveto(client_t *c, screen_t *new_screen, bool doresize)
|
||||||
new_geometry.x = to.x + to.width - new_geometry.width;
|
new_geometry.x = to.x + to.width - new_geometry.width;
|
||||||
if(new_geometry.y + new_geometry.height > to.y + to.height)
|
if(new_geometry.y + new_geometry.height > to.y + to.height)
|
||||||
new_geometry.y = to.y + to.height - new_geometry.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 */
|
/* move / resize the client */
|
||||||
client_resize(c, new_geometry, false);
|
client_resize(c, new_geometry, false);
|
||||||
|
|
||||||
/* Emit signal, but only in case the call to client_resize had not changed
|
/* emit signal */
|
||||||
* it already. */
|
|
||||||
if(old_screen != c->screen)
|
|
||||||
{
|
|
||||||
luaA_object_push(L, c);
|
luaA_object_push(L, c);
|
||||||
if(old_screen != NULL)
|
if(old_screen != NULL)
|
||||||
luaA_object_push(L, old_screen);
|
luaA_object_push(L, old_screen);
|
||||||
|
@ -929,7 +932,6 @@ screen_client_moveto(client_t *c, screen_t *new_screen, bool doresize)
|
||||||
lua_pushnil(L);
|
lua_pushnil(L);
|
||||||
luaA_object_emit_signal(L, -2, "property::screen", 1);
|
luaA_object_emit_signal(L, -2, "property::screen", 1);
|
||||||
lua_pop(L, 1);
|
lua_pop(L, 1);
|
||||||
}
|
|
||||||
|
|
||||||
if(had_focus)
|
if(had_focus)
|
||||||
client_focus(c);
|
client_focus(c);
|
||||||
|
|
Loading…
Reference in New Issue