Skip to content

Commit

Permalink
Further simplify Xinerama init and re-init on XRR events.
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
okan committed Jul 18, 2012
1 parent 3f95609 commit 013497c
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 20 deletions.
7 changes: 2 additions & 5 deletions calmwm.c
Expand Up @@ -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);
Expand Down Expand Up @@ -97,7 +97,7 @@ main(int argc, char **argv)
static void
dpy_init(const char *dpyname)
{
int i, fake;
int i;

XSetErrorHandler(x_errorhandler);

Expand All @@ -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);
}

Expand Down
20 changes: 5 additions & 15 deletions screen.c
Expand Up @@ -74,21 +74,11 @@ screen_updatestackingorder(struct screen_ctx *sc)
void
screen_init_xinerama(struct screen_ctx *sc)
{
XineramaScreenInfo *info;
int no;

if (HasXinerama == 0 || XineramaIsActive(X_Dpy) == 0) {
HasXinerama = 0;
sc->xinerama_no = 0;
}
XineramaScreenInfo *info = NULL;
int 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);
Expand All @@ -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++) {
Expand Down

0 comments on commit 013497c

Please sign in to comment.