Merge pull request #1780 from psychon/fix-setting-screen

Fix setting screen
This commit is contained in:
Emmanuel Lepage Vallée 2017-05-15 02:38:41 -04:00 committed by GitHub
commit 260002b632
4 changed files with 22 additions and 42 deletions

View File

@ -1743,20 +1743,6 @@ client_resize_do(client_t *c, area_t geometry)
bool bool
client_resize(client_t *c, area_t geometry, bool honor_hints) client_resize(client_t *c, area_t geometry, bool honor_hints)
{ {
area_t area;
/* offscreen appearance fixes */
area = display_area_get();
if(geometry.x > area.width)
geometry.x = area.width - geometry.width;
if(geometry.y > area.height)
geometry.y = area.height - geometry.height;
if(geometry.x + geometry.width < 0)
geometry.x = 0;
if(geometry.y + geometry.height < 0)
geometry.y = 0;
if (honor_hints) { if (honor_hints) {
/* We could get integer underflows in client_remove_titlebar_geometry() /* We could get integer underflows in client_remove_titlebar_geometry()
* without these checks here. * without these checks here.

View File

@ -859,20 +859,6 @@ void screen_update_workarea(screen_t *screen)
lua_pop(L, 1); lua_pop(L, 1);
} }
/** Get display info.
* \return The display area.
*/
area_t
display_area_get(void)
{
xcb_screen_t *s = globalconf.screen;
area_t area = { .x = 0,
.y = 0,
.width = s->width_in_pixels,
.height = s->height_in_pixels };
return area;
}
/** Move a client to a virtual screen. /** Move a client to a virtual screen.
* \param c The client to move. * \param c The client to move.
* \param new_screen The destination screen. * \param new_screen The destination screen.
@ -928,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; 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. */ luaA_object_push(L, c);
if(old_screen != c->screen) if(old_screen != NULL)
{ luaA_object_push(L, old_screen);
luaA_object_push(L, c); else
if(old_screen != NULL) lua_pushnil(L);
luaA_object_push(L, old_screen); luaA_object_emit_signal(L, -2, "property::screen", 1);
else lua_pop(L, 1);
lua_pushnil(L);
luaA_object_emit_signal(L, -2, "property::screen", 1);
lua_pop(L, 1);
}
if(had_focus) if(had_focus)
client_focus(c); client_focus(c);

View File

@ -52,7 +52,6 @@ screen_t *screen_getbycoord(int, int);
bool screen_coord_in_screen(screen_t *, int, int); bool screen_coord_in_screen(screen_t *, int, int);
bool screen_area_in_screen(screen_t *, area_t); bool screen_area_in_screen(screen_t *, area_t);
int screen_get_index(screen_t *); int screen_get_index(screen_t *);
area_t display_area_get(void);
void screen_client_moveto(client_t *, screen_t *, bool); void screen_client_moveto(client_t *, screen_t *, bool);
void screen_update_primary(void); void screen_update_primary(void);
void screen_update_workarea(screen_t *); void screen_update_workarea(screen_t *);

View File

@ -248,7 +248,7 @@ local dispositions = {
end, end,
}, },
-- Corner case 2: Nothing at 0x0. -- Corner case 2a: Nothing at 0x0.
-- As some position may fallback to 0x0 this need to be tested often. It -- As some position may fallback to 0x0 this need to be tested often. It
-- also caused issues such as #154 -- also caused issues such as #154
{ {
@ -270,6 +270,13 @@ local dispositions = {
end end
}, },
-- Corner case 2b: Still nothing at 0x0
{
function() return { x = 0, y = 32, width = 32, height = 32, } end,
function() return { x = 32, y = 0, width = 32, height = 32, } end,
function() return { x = 64, y = 16, width = 32, height = 32, } end,
},
-- Corner case 3: Many very small screens. -- Corner case 3: Many very small screens.
-- On the embedded side of the compuverse, it is possible -- On the embedded side of the compuverse, it is possible
-- to buy 32x32 RGB OLED screens. They are usually used to display single -- to buy 32x32 RGB OLED screens. They are usually used to display single