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
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) {
/* We could get integer underflows in client_remove_titlebar_geometry()
* without these checks here.

View File

@ -859,20 +859,6 @@ void screen_update_workarea(screen_t *screen)
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.
* \param c The client to move.
* \param new_screen The destination screen.
@ -928,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;
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)
{
/* emit signal */
luaA_object_push(L, c);
if(old_screen != NULL)
luaA_object_push(L, old_screen);
@ -943,7 +932,6 @@ screen_client_moveto(client_t *c, screen_t *new_screen, bool doresize)
lua_pushnil(L);
luaA_object_emit_signal(L, -2, "property::screen", 1);
lua_pop(L, 1);
}
if(had_focus)
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_area_in_screen(screen_t *, area_t);
int screen_get_index(screen_t *);
area_t display_area_get(void);
void screen_client_moveto(client_t *, screen_t *, bool);
void screen_update_primary(void);
void screen_update_workarea(screen_t *);

View File

@ -248,7 +248,7 @@ local dispositions = {
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
-- also caused issues such as #154
{
@ -270,6 +270,13 @@ local dispositions = {
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.
-- On the embedded side of the compuverse, it is possible
-- to buy 32x32 RGB OLED screens. They are usually used to display single