mouse.c
author Anselm R. Garbe <garbeam@wmii.de>
Thu, 13 Jul 2006 10:25:57 +0200
changeset 41 fc9ccd34b8ab
parent 31 386649deb651
permissions -rw-r--r--
removed obsolete stuff
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
18
1efa34c6e1b6 added mouse-based resizals
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
     1
/*
1efa34c6e1b6 added mouse-based resizals
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
     2
 * (C)opyright MMVI Anselm R. Garbe <garbeam at gmail dot com>
1efa34c6e1b6 added mouse-based resizals
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
     3
 * See LICENSE file for license details.
1efa34c6e1b6 added mouse-based resizals
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
     4
 */
1efa34c6e1b6 added mouse-based resizals
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
     5
1efa34c6e1b6 added mouse-based resizals
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
     6
#include <stdlib.h>
1efa34c6e1b6 added mouse-based resizals
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
     7
#include <string.h>
1efa34c6e1b6 added mouse-based resizals
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
     8
#include <unistd.h>
1efa34c6e1b6 added mouse-based resizals
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
     9
1efa34c6e1b6 added mouse-based resizals
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
    10
#include "wm.h"
1efa34c6e1b6 added mouse-based resizals
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
    11
1efa34c6e1b6 added mouse-based resizals
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
    12
#define ButtonMask      (ButtonPressMask | ButtonReleaseMask)
1efa34c6e1b6 added mouse-based resizals
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
    13
#define MouseMask       (ButtonMask | PointerMotionMask)
1efa34c6e1b6 added mouse-based resizals
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
    14
1efa34c6e1b6 added mouse-based resizals
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
    15
void
1efa34c6e1b6 added mouse-based resizals
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
    16
mresize(Client *c)
1efa34c6e1b6 added mouse-based resizals
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
    17
{
1efa34c6e1b6 added mouse-based resizals
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
    18
	XEvent ev;
41
fc9ccd34b8ab removed obsolete stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 31
diff changeset
    19
	int ocx, ocy;
18
1efa34c6e1b6 added mouse-based resizals
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
    20
41
fc9ccd34b8ab removed obsolete stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 31
diff changeset
    21
	ocx = c->x;
fc9ccd34b8ab removed obsolete stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 31
diff changeset
    22
	ocy = c->y;
19
b5510d0c6d43 added basic mouse support (actually we don't need more)
Anselm R. Garbe <garbeam@wmii.de>
parents: 18
diff changeset
    23
	if(XGrabPointer(dpy, root, False, MouseMask, GrabModeAsync, GrabModeAsync,
18
1efa34c6e1b6 added mouse-based resizals
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
    24
				None, cursor[CurResize], CurrentTime) != GrabSuccess)
1efa34c6e1b6 added mouse-based resizals
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
    25
		return;
20
4560e0882c1d made code more readable
Anselm R. Garbe <garbeam@wmii.de>
parents: 19
diff changeset
    26
	XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w, c->h);
18
1efa34c6e1b6 added mouse-based resizals
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
    27
	for(;;) {
26
e8f627998d6f simplified several portions of code through replacing rect structs with x,y,h,w counterparts (much more readable)
Anselm R. Garbe <garbeam@wmii.de>
parents: 20
diff changeset
    28
		XMaskEvent(dpy, MouseMask | ExposureMask, &ev);
18
1efa34c6e1b6 added mouse-based resizals
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
    29
		switch(ev.type) {
1efa34c6e1b6 added mouse-based resizals
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
    30
		default: break;
26
e8f627998d6f simplified several portions of code through replacing rect structs with x,y,h,w counterparts (much more readable)
Anselm R. Garbe <garbeam@wmii.de>
parents: 20
diff changeset
    31
		case Expose:
e8f627998d6f simplified several portions of code through replacing rect structs with x,y,h,w counterparts (much more readable)
Anselm R. Garbe <garbeam@wmii.de>
parents: 20
diff changeset
    32
			handler[Expose](&ev);
e8f627998d6f simplified several portions of code through replacing rect structs with x,y,h,w counterparts (much more readable)
Anselm R. Garbe <garbeam@wmii.de>
parents: 20
diff changeset
    33
			break;
18
1efa34c6e1b6 added mouse-based resizals
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
    34
		case MotionNotify:
26
e8f627998d6f simplified several portions of code through replacing rect structs with x,y,h,w counterparts (much more readable)
Anselm R. Garbe <garbeam@wmii.de>
parents: 20
diff changeset
    35
			XFlush(dpy);
41
fc9ccd34b8ab removed obsolete stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 31
diff changeset
    36
			c->w = abs(ocx - ev.xmotion.x);
fc9ccd34b8ab removed obsolete stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 31
diff changeset
    37
			c->h = abs(ocy - ev.xmotion.y);
fc9ccd34b8ab removed obsolete stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 31
diff changeset
    38
			c->x = (ocx <= ev.xmotion.x) ? ocx : ocx - c->w;
fc9ccd34b8ab removed obsolete stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 31
diff changeset
    39
			c->y = (ocy <= ev.xmotion.y) ? ocy : ocy - c->h;
31
386649deb651 before leaning things up
Anselm R. Garbe <garbeam@wmii.de>
parents: 26
diff changeset
    40
			resize(c);
18
1efa34c6e1b6 added mouse-based resizals
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
    41
			break;
1efa34c6e1b6 added mouse-based resizals
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
    42
		case ButtonRelease:
1efa34c6e1b6 added mouse-based resizals
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
    43
			XUngrabPointer(dpy, CurrentTime);
1efa34c6e1b6 added mouse-based resizals
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
    44
			return;
1efa34c6e1b6 added mouse-based resizals
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
    45
		}
1efa34c6e1b6 added mouse-based resizals
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
    46
	}
1efa34c6e1b6 added mouse-based resizals
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
    47
}
1efa34c6e1b6 added mouse-based resizals
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
    48
1efa34c6e1b6 added mouse-based resizals
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
    49
void
1efa34c6e1b6 added mouse-based resizals
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
    50
mmove(Client *c)
1efa34c6e1b6 added mouse-based resizals
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
    51
{
1efa34c6e1b6 added mouse-based resizals
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
    52
	XEvent ev;
41
fc9ccd34b8ab removed obsolete stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 31
diff changeset
    53
	int x1, y1, ocx, ocy, di;
18
1efa34c6e1b6 added mouse-based resizals
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
    54
	unsigned int dui;
1efa34c6e1b6 added mouse-based resizals
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
    55
	Window dummy;
1efa34c6e1b6 added mouse-based resizals
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
    56
41
fc9ccd34b8ab removed obsolete stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 31
diff changeset
    57
	ocx = c->x;
fc9ccd34b8ab removed obsolete stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 31
diff changeset
    58
	ocy = c->y;
19
b5510d0c6d43 added basic mouse support (actually we don't need more)
Anselm R. Garbe <garbeam@wmii.de>
parents: 18
diff changeset
    59
	if(XGrabPointer(dpy, root, False, MouseMask, GrabModeAsync, GrabModeAsync,
18
1efa34c6e1b6 added mouse-based resizals
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
    60
				None, cursor[CurMove], CurrentTime) != GrabSuccess)
1efa34c6e1b6 added mouse-based resizals
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
    61
		return;
1efa34c6e1b6 added mouse-based resizals
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
    62
	XQueryPointer(dpy, root, &dummy, &dummy, &x1, &y1, &di, &di, &dui);
1efa34c6e1b6 added mouse-based resizals
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
    63
	for(;;) {
26
e8f627998d6f simplified several portions of code through replacing rect structs with x,y,h,w counterparts (much more readable)
Anselm R. Garbe <garbeam@wmii.de>
parents: 20
diff changeset
    64
		XMaskEvent(dpy, MouseMask | ExposureMask, &ev);
18
1efa34c6e1b6 added mouse-based resizals
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
    65
		switch (ev.type) {
1efa34c6e1b6 added mouse-based resizals
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
    66
		default: break;
26
e8f627998d6f simplified several portions of code through replacing rect structs with x,y,h,w counterparts (much more readable)
Anselm R. Garbe <garbeam@wmii.de>
parents: 20
diff changeset
    67
		case Expose:
e8f627998d6f simplified several portions of code through replacing rect structs with x,y,h,w counterparts (much more readable)
Anselm R. Garbe <garbeam@wmii.de>
parents: 20
diff changeset
    68
			handler[Expose](&ev);
e8f627998d6f simplified several portions of code through replacing rect structs with x,y,h,w counterparts (much more readable)
Anselm R. Garbe <garbeam@wmii.de>
parents: 20
diff changeset
    69
			break;
18
1efa34c6e1b6 added mouse-based resizals
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
    70
		case MotionNotify:
26
e8f627998d6f simplified several portions of code through replacing rect structs with x,y,h,w counterparts (much more readable)
Anselm R. Garbe <garbeam@wmii.de>
parents: 20
diff changeset
    71
			XFlush(dpy);
41
fc9ccd34b8ab removed obsolete stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 31
diff changeset
    72
			c->x = ocx + (ev.xmotion.x - x1);
fc9ccd34b8ab removed obsolete stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 31
diff changeset
    73
			c->y = ocy + (ev.xmotion.y - y1);
31
386649deb651 before leaning things up
Anselm R. Garbe <garbeam@wmii.de>
parents: 26
diff changeset
    74
			resize(c);
18
1efa34c6e1b6 added mouse-based resizals
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
    75
			break;
1efa34c6e1b6 added mouse-based resizals
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
    76
		case ButtonRelease:
1efa34c6e1b6 added mouse-based resizals
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
    77
			XUngrabPointer(dpy, CurrentTime);
1efa34c6e1b6 added mouse-based resizals
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
    78
			return;
1efa34c6e1b6 added mouse-based resizals
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
    79
		}
1efa34c6e1b6 added mouse-based resizals
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
    80
	}
1efa34c6e1b6 added mouse-based resizals
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
    81
}