mirror of
https://github.com/leahneukirchen/cwm.git
synced 2023-08-10 21:13:12 +03:00
Further simplify Xinerama init and re-init on XRR events.
While testing for Xinerama during setup was done display-wide, each time XineramaQueryScreens() is called either in start-up or due to an XRR event, the library re-tests for the Xinerama extension anyway before moving on; so the initial test is redundant and allows another global to go away with one other change: always fill in sc->xinerama (and _no), regardless of the success of malloc in XineramaQueryScreens(), and use it to see if Xinerama dimensions exist when asked by client and/or menu code.
This commit is contained in:
parent
3f956098d9
commit
013497c79c
7
calmwm.c
7
calmwm.c
@ -44,7 +44,7 @@ Cursor Cursor_resize;
|
||||
struct screen_ctx_q Screenq = TAILQ_HEAD_INITIALIZER(Screenq);
|
||||
struct client_ctx_q Clientq = TAILQ_HEAD_INITIALIZER(Clientq);
|
||||
|
||||
int HasXinerama, HasRandr, Randr_ev;
|
||||
int HasRandr, Randr_ev;
|
||||
struct conf Conf;
|
||||
|
||||
static void sigchld_cb(int);
|
||||
@ -97,7 +97,7 @@ main(int argc, char **argv)
|
||||
static void
|
||||
dpy_init(const char *dpyname)
|
||||
{
|
||||
int i, fake;
|
||||
int i;
|
||||
|
||||
XSetErrorHandler(x_errorhandler);
|
||||
|
||||
@ -110,9 +110,6 @@ dpy_init(const char *dpyname)
|
||||
XSync(X_Dpy, False);
|
||||
XSetErrorHandler(x_errorhandler);
|
||||
|
||||
if (XineramaQueryExtension(X_Dpy, &fake, &fake) == 1 &&
|
||||
((HasXinerama = XineramaIsActive(X_Dpy)) == 1))
|
||||
HasXinerama = 1;
|
||||
HasRandr = XRRQueryExtension(X_Dpy, &Randr_ev, &i);
|
||||
}
|
||||
|
||||
|
20
screen.c
20
screen.c
@ -74,21 +74,11 @@ screen_updatestackingorder(struct screen_ctx *sc)
|
||||
void
|
||||
screen_init_xinerama(struct screen_ctx *sc)
|
||||
{
|
||||
XineramaScreenInfo *info;
|
||||
int no;
|
||||
XineramaScreenInfo *info = NULL;
|
||||
int no = 0;
|
||||
|
||||
if (HasXinerama == 0 || XineramaIsActive(X_Dpy) == 0) {
|
||||
HasXinerama = 0;
|
||||
sc->xinerama_no = 0;
|
||||
}
|
||||
|
||||
info = XineramaQueryScreens(X_Dpy, &no);
|
||||
if (info == NULL) {
|
||||
/* Is xinerama actually off, instead of a malloc failure? */
|
||||
if (sc->xinerama == NULL)
|
||||
HasXinerama = 0;
|
||||
return;
|
||||
}
|
||||
if (XineramaIsActive(X_Dpy))
|
||||
info = XineramaQueryScreens(X_Dpy, &no);
|
||||
|
||||
if (sc->xinerama != NULL)
|
||||
XFree(sc->xinerama);
|
||||
@ -105,7 +95,7 @@ screen_find_xinerama(struct screen_ctx *sc, int x, int y)
|
||||
XineramaScreenInfo *info;
|
||||
int i;
|
||||
|
||||
if (HasXinerama == 0)
|
||||
if (sc->xinerama == NULL)
|
||||
return (NULL);
|
||||
|
||||
for (i = 0; i < sc->xinerama_no; i++) {
|
||||
|
Loading…
Reference in New Issue
Block a user