Merge pull request #1780 from psychon/fix-setting-screen
Fix setting screen
This commit is contained in:
commit
260002b632
|
@ -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.
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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 *);
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue