mirror of
https://github.com/leahneukirchen/cwm.git
synced 2023-08-10 21:13:12 +03:00
Replace screen region info gathering with XRandR equivalent of Xinerama
queries (currently act on XRandR events anyway). Fall-back mode without XRandR is still what X provides. This removes -lXinerama.
This commit is contained in:
parent
ee400b08a8
commit
8aa40078d1
2
Makefile
2
Makefile
@ -13,7 +13,7 @@ CPPFLAGS+= -I${X11BASE}/include -I${X11BASE}/include/freetype2 -I${.CURDIR}
|
||||
CFLAGS+= -Wall
|
||||
|
||||
LDADD+= -L${X11BASE}/lib -lXft -lXrender -lX11 -lxcb -lXau -lXdmcp \
|
||||
-lfontconfig -lexpat -lfreetype -lz -lXinerama -lXrandr -lXext
|
||||
-lfontconfig -lexpat -lfreetype -lz -lXrandr -lXext
|
||||
|
||||
MANDIR= ${X11BASE}/man/man
|
||||
MAN= cwm.1 cwmrc.5
|
||||
|
1
calmwm.h
1
calmwm.h
@ -28,7 +28,6 @@
|
||||
#include <X11/Xproto.h>
|
||||
#include <X11/Xutil.h>
|
||||
#include <X11/cursorfont.h>
|
||||
#include <X11/extensions/Xinerama.h>
|
||||
#include <X11/extensions/Xrandr.h>
|
||||
#include <X11/keysym.h>
|
||||
|
||||
|
43
screen.c
43
screen.c
@ -152,9 +152,8 @@ screen_find_xinerama(struct screen_ctx *sc, int x, int y, int flags)
|
||||
void
|
||||
screen_update_geometry(struct screen_ctx *sc)
|
||||
{
|
||||
XineramaScreenInfo *info = NULL;
|
||||
struct region_ctx *region;
|
||||
int info_num = 0, i;
|
||||
int i;
|
||||
|
||||
sc->view.x = 0;
|
||||
sc->view.y = 0;
|
||||
@ -166,25 +165,37 @@ screen_update_geometry(struct screen_ctx *sc)
|
||||
sc->work.w = sc->view.w - (sc->gap.left + sc->gap.right);
|
||||
sc->work.h = sc->view.h - (sc->gap.top + sc->gap.bottom);
|
||||
|
||||
/* RandR event may have a CTRC added or removed. */
|
||||
if (XineramaIsActive(X_Dpy))
|
||||
info = XineramaQueryScreens(X_Dpy, &info_num);
|
||||
|
||||
while ((region = TAILQ_FIRST(&sc->regionq)) != NULL) {
|
||||
TAILQ_REMOVE(&sc->regionq, region, entry);
|
||||
free(region);
|
||||
}
|
||||
for (i = 0; i < info_num; i++) {
|
||||
region = xmalloc(sizeof(*region));
|
||||
region->num = i;
|
||||
region->area.x = info[i].x_org;
|
||||
region->area.y = info[i].y_org;
|
||||
region->area.w = info[i].width;
|
||||
region->area.h = info[i].height;
|
||||
TAILQ_INSERT_TAIL(&sc->regionq, region, entry);
|
||||
|
||||
if (HasRandr) {
|
||||
XRRScreenResources *sr;
|
||||
XRRCrtcInfo *ci;
|
||||
|
||||
sr = XRRGetScreenResources(X_Dpy, sc->rootwin);
|
||||
for (i = 0, ci = NULL; i < sr->ncrtc; i++) {
|
||||
ci = XRRGetCrtcInfo(X_Dpy, sr, sr->crtcs[i]);
|
||||
if (ci == NULL)
|
||||
continue;
|
||||
if (ci->noutput == 0) {
|
||||
XRRFreeCrtcInfo(ci);
|
||||
continue;
|
||||
}
|
||||
|
||||
region = xmalloc(sizeof(*region));
|
||||
region->num = i;
|
||||
region->area.x = ci->x;
|
||||
region->area.y = ci->y;
|
||||
region->area.w = ci->width;
|
||||
region->area.h = ci->height;
|
||||
TAILQ_INSERT_TAIL(&sc->regionq, region, entry);
|
||||
|
||||
XRRFreeCrtcInfo(ci);
|
||||
}
|
||||
XRRFreeScreenResources(sr);
|
||||
}
|
||||
if (info)
|
||||
XFree(info);
|
||||
|
||||
xu_ewmh_net_desktop_geometry(sc);
|
||||
xu_ewmh_net_workarea(sc);
|
||||
|
Loading…
Reference in New Issue
Block a user