got rid of compile time xidx configuration, querying mouse pointer instead
parent
9086f98068
commit
c86ed46a1b
|
@ -13,10 +13,6 @@ static uint snap = 32; /* snap pixel */
|
||||||
static Bool showbar = True; /* False means no bar */
|
static Bool showbar = True; /* False means no bar */
|
||||||
static Bool topbar = True; /* False means bottom bar */
|
static Bool topbar = True; /* False means bottom bar */
|
||||||
|
|
||||||
#ifdef XINERAMA
|
|
||||||
static uint xidx = 0; /* Xinerama screen index to use */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* tagging */
|
/* tagging */
|
||||||
static const char tags[][MAXTAGLEN] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
|
static const char tags[][MAXTAGLEN] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
|
||||||
|
|
||||||
|
|
31
dwm.c
31
dwm.c
|
@ -44,16 +44,17 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* macros */
|
/* macros */
|
||||||
#define MAX(a, b) ((a) > (b) ? (a) : (b))
|
|
||||||
#define MIN(a, b) ((a) < (b) ? (a) : (b))
|
|
||||||
#define BUTTONMASK (ButtonPressMask|ButtonReleaseMask)
|
#define BUTTONMASK (ButtonPressMask|ButtonReleaseMask)
|
||||||
#define CLEANMASK(mask) (mask & ~(numlockmask|LockMask))
|
#define CLEANMASK(mask) (mask & ~(numlockmask|LockMask))
|
||||||
|
#define INRECT(X,Y,RX,RY,RW,RH) ((X) >= (RX) && (X) < (RX) + (RW) && (Y) >= (RY) && (Y) < (RY) + (RH))
|
||||||
|
#define ISVISIBLE(x) (x->tags & tagset[seltags])
|
||||||
#define LENGTH(x) (sizeof x / sizeof x[0])
|
#define LENGTH(x) (sizeof x / sizeof x[0])
|
||||||
|
#define MAX(a, b) ((a) > (b) ? (a) : (b))
|
||||||
|
#define MIN(a, b) ((a) < (b) ? (a) : (b))
|
||||||
#define MAXTAGLEN 16
|
#define MAXTAGLEN 16
|
||||||
#define MOUSEMASK (BUTTONMASK|PointerMotionMask)
|
#define MOUSEMASK (BUTTONMASK|PointerMotionMask)
|
||||||
#define TAGMASK ((int)((1LL << LENGTH(tags)) - 1))
|
#define TAGMASK ((int)((1LL << LENGTH(tags)) - 1))
|
||||||
#define TEXTW(x) (textnw(x, strlen(x)) + dc.font.height)
|
#define TEXTW(x) (textnw(x, strlen(x)) + dc.font.height)
|
||||||
#define ISVISIBLE(x) (x->tags & tagset[seltags])
|
|
||||||
|
|
||||||
/* enums */
|
/* enums */
|
||||||
enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */
|
enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */
|
||||||
|
@ -974,7 +975,7 @@ monocle(void) {
|
||||||
|
|
||||||
void
|
void
|
||||||
movemouse(const Arg *arg) {
|
movemouse(const Arg *arg) {
|
||||||
int x1, y1, ocx, ocy, di, nx, ny;
|
int x, y, ocx, ocy, di, nx, ny;
|
||||||
unsigned int dui;
|
unsigned int dui;
|
||||||
Client *c;
|
Client *c;
|
||||||
Window dummy;
|
Window dummy;
|
||||||
|
@ -988,7 +989,7 @@ movemouse(const Arg *arg) {
|
||||||
if(XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync,
|
if(XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync,
|
||||||
None, cursor[CurMove], CurrentTime) != GrabSuccess)
|
None, cursor[CurMove], CurrentTime) != GrabSuccess)
|
||||||
return;
|
return;
|
||||||
XQueryPointer(dpy, root, &dummy, &dummy, &x1, &y1, &di, &di, &dui);
|
XQueryPointer(dpy, root, &dummy, &dummy, &x, &y, &di, &di, &dui);
|
||||||
for(;;) {
|
for(;;) {
|
||||||
XMaskEvent(dpy, MOUSEMASK|ExposureMask|SubstructureRedirectMask, &ev);
|
XMaskEvent(dpy, MOUSEMASK|ExposureMask|SubstructureRedirectMask, &ev);
|
||||||
switch (ev.type) {
|
switch (ev.type) {
|
||||||
|
@ -1002,8 +1003,8 @@ movemouse(const Arg *arg) {
|
||||||
break;
|
break;
|
||||||
case MotionNotify:
|
case MotionNotify:
|
||||||
XSync(dpy, False);
|
XSync(dpy, False);
|
||||||
nx = ocx + (ev.xmotion.x - x1);
|
nx = ocx + (ev.xmotion.x - x);
|
||||||
ny = ocy + (ev.xmotion.y - y1);
|
ny = ocy + (ev.xmotion.y - y);
|
||||||
if(snap && nx >= wx && nx <= wx + ww
|
if(snap && nx >= wx && nx <= wx + ww
|
||||||
&& ny >= wy && ny <= wy + wh) {
|
&& ny >= wy && ny <= wy + wh) {
|
||||||
if(abs(wx - nx) < snap)
|
if(abs(wx - nx) < snap)
|
||||||
|
@ -1557,12 +1558,24 @@ updatebar(void) {
|
||||||
void
|
void
|
||||||
updategeom(void) {
|
updategeom(void) {
|
||||||
#ifdef XINERAMA
|
#ifdef XINERAMA
|
||||||
int i;
|
int n;
|
||||||
|
unsigned int xidx = 0;
|
||||||
XineramaScreenInfo *info = NULL;
|
XineramaScreenInfo *info = NULL;
|
||||||
|
|
||||||
/* window area geometry */
|
/* window area geometry */
|
||||||
if(XineramaIsActive(dpy)) {
|
if(XineramaIsActive(dpy)) {
|
||||||
info = XineramaQueryScreens(dpy, &i);
|
info = XineramaQueryScreens(dpy, &n);
|
||||||
|
if(n > 1) {
|
||||||
|
int di, i, x, y;
|
||||||
|
unsigned int dui;
|
||||||
|
Window dummy;
|
||||||
|
if(XQueryPointer(dpy, root, &dummy, &dummy, &x, &y, &di, &di, &dui))
|
||||||
|
for(i = 0; i < n; i++)
|
||||||
|
if(INRECT(x, y, info[i].x_org, info[i].y_org, info[i].width, info[i].height)) {
|
||||||
|
xidx = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
wx = info[xidx].x_org;
|
wx = info[xidx].x_org;
|
||||||
wy = showbar && topbar ? info[xidx].y_org + bh : info[xidx].y_org;
|
wy = showbar && topbar ? info[xidx].y_org + bh : info[xidx].y_org;
|
||||||
ww = info[xidx].width;
|
ww = info[xidx].width;
|
||||||
|
|
Loading…
Reference in New Issue