Fix Xinerama detection
This commit is contained in:
parent
bf4071397a
commit
3b295beaed
|
@ -78,15 +78,24 @@ screensinfo_new(xcb_connection_t *conn)
|
||||||
int xinerama_screen_number, screen, screen_to_test;
|
int xinerama_screen_number, screen, screen_to_test;
|
||||||
xcb_screen_t *s;
|
xcb_screen_t *s;
|
||||||
bool drop;
|
bool drop;
|
||||||
|
xcb_xinerama_is_active_reply_t *r = NULL;
|
||||||
|
|
||||||
si = p_new(ScreensInfo, 1);
|
si = p_new(ScreensInfo, 1);
|
||||||
|
|
||||||
|
/* Check for extension before checking for Xinerama */
|
||||||
|
if(xcb_get_extension_data(conn, &xcb_xinerama_id)->present)
|
||||||
|
{
|
||||||
|
r = xcb_xinerama_is_active_reply(conn, xcb_xinerama_is_active(conn), NULL);
|
||||||
|
si->xinerama_is_active = r->state;
|
||||||
|
p_delete(&r);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(si->xinerama_is_active)
|
||||||
|
{
|
||||||
xsq = xcb_xinerama_query_screens_reply(conn,
|
xsq = xcb_xinerama_query_screens_reply(conn,
|
||||||
xcb_xinerama_query_screens_unchecked(conn),
|
xcb_xinerama_query_screens_unchecked(conn),
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
if((si->xinerama_is_active = xinerama_is_active(conn)) && xsq)
|
|
||||||
{
|
|
||||||
xsi = xcb_xinerama_query_screens_screen_info(xsq);
|
xsi = xcb_xinerama_query_screens_screen_info(xsq);
|
||||||
xinerama_screen_number = xcb_xinerama_query_screens_screen_info_length(xsq);
|
xinerama_screen_number = xcb_xinerama_query_screens_screen_info_length(xsq);
|
||||||
|
|
||||||
|
@ -121,6 +130,8 @@ screensinfo_new(xcb_connection_t *conn)
|
||||||
p_delete(&si->geometry);
|
p_delete(&si->geometry);
|
||||||
si->geometry = newgeometry;
|
si->geometry = newgeometry;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
p_delete(&xsq);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -136,9 +147,6 @@ screensinfo_new(xcb_connection_t *conn)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(xsq)
|
|
||||||
p_delete(&xsq);
|
|
||||||
|
|
||||||
return si;
|
return si;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -132,22 +132,6 @@ x_get_transient_for_hint(xcb_connection_t *c, xcb_window_t win,
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
|
||||||
xinerama_is_active(xcb_connection_t *c)
|
|
||||||
{
|
|
||||||
bool ret;
|
|
||||||
xcb_xinerama_is_active_reply_t *r = NULL;
|
|
||||||
|
|
||||||
r = xcb_xinerama_is_active_reply(c, xcb_xinerama_is_active(c), NULL);
|
|
||||||
if(!r)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
ret = r->state;
|
|
||||||
p_delete(&r);
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
xcb_window_t
|
xcb_window_t
|
||||||
root_window(xcb_connection_t *c, int screen_number)
|
root_window(xcb_connection_t *c, int screen_number)
|
||||||
{
|
{
|
||||||
|
|
|
@ -77,7 +77,6 @@ unsigned int xgetnumlockmask(xcb_connection_t *);
|
||||||
|
|
||||||
/* Common function defined in Xlib but not in XCB */
|
/* Common function defined in Xlib but not in XCB */
|
||||||
bool x_get_transient_for_hint(xcb_connection_t *, xcb_window_t, xcb_window_t *);
|
bool x_get_transient_for_hint(xcb_connection_t *, xcb_window_t, xcb_window_t *);
|
||||||
bool xinerama_is_active(xcb_connection_t *);
|
|
||||||
xcb_window_t root_window(xcb_connection_t *, int);
|
xcb_window_t root_window(xcb_connection_t *, int);
|
||||||
|
|
||||||
typedef struct _class_hint_t
|
typedef struct _class_hint_t
|
||||||
|
|
Loading…
Reference in New Issue