added basic mouse support (actually we don't need more)
This commit is contained in:
		
							parent
							
								
									b9da4b082e
								
							
						
					
					
						commit
						48b6e9a396
					
				
					 4 changed files with 15 additions and 24 deletions
				
			
		
							
								
								
									
										11
									
								
								client.c
									
										
									
									
									
								
							
							
						
						
									
										11
									
								
								client.c
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -70,8 +70,7 @@ manage(Window w, XWindowAttributes *wa)
 | 
			
		|||
	c->r[RFloat].y = wa->y;
 | 
			
		||||
	c->r[RFloat].width = wa->width;
 | 
			
		||||
	c->r[RFloat].height = wa->height;
 | 
			
		||||
	c->border = wa->border_width;
 | 
			
		||||
	XSetWindowBorderWidth(dpy, c->win, 0);
 | 
			
		||||
	XSetWindowBorderWidth(dpy, c->win, 1);
 | 
			
		||||
	XSelectInput(dpy, c->win, CLIENT_MASK);
 | 
			
		||||
	XGetTransientForHint(dpy, c->win, &c->trans);
 | 
			
		||||
	if(!XGetWMNormalHints(dpy, c->win, &c->size, &msize) || !c->size.flags)
 | 
			
		||||
| 
						 | 
				
			
			@ -97,7 +96,11 @@ manage(Window w, XWindowAttributes *wa)
 | 
			
		|||
	c->snext = stack;
 | 
			
		||||
	stack = c;
 | 
			
		||||
	XMapWindow(dpy, c->win);
 | 
			
		||||
	XGrabButton(dpy, AnyButton, Mod1Mask, c->win, False, ButtonPressMask,
 | 
			
		||||
	XGrabButton(dpy, Button1, Mod1Mask, c->win, False, ButtonPressMask,
 | 
			
		||||
			GrabModeAsync, GrabModeSync, None, None);
 | 
			
		||||
	XGrabButton(dpy, Button2, Mod1Mask, c->win, False, ButtonPressMask,
 | 
			
		||||
			GrabModeAsync, GrabModeSync, None, None);
 | 
			
		||||
	XGrabButton(dpy, Button3, Mod1Mask, c->win, False, ButtonPressMask,
 | 
			
		||||
			GrabModeAsync, GrabModeSync, None, None);
 | 
			
		||||
	focus(c);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -116,7 +119,7 @@ resize(Client *c)
 | 
			
		|||
	e.y = c->r[RFloat].y;
 | 
			
		||||
	e.width = c->r[RFloat].width;
 | 
			
		||||
	e.height = c->r[RFloat].height;
 | 
			
		||||
	e.border_width = c->border;
 | 
			
		||||
	e.border_width = 0;
 | 
			
		||||
	e.above = None;
 | 
			
		||||
	e.override_redirect = False;
 | 
			
		||||
	XSelectInput(dpy, c->win, CLIENT_MASK & ~StructureNotifyMask);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										2
									
								
								event.c
									
										
									
									
									
								
							
							
						
						
									
										2
									
								
								event.c
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -86,8 +86,6 @@ configurerequest(XEvent *e)
 | 
			
		|||
			c->r[RFloat].width = ev->width;
 | 
			
		||||
		if(ev->value_mask & CWHeight)
 | 
			
		||||
			c->r[RFloat].height = ev->height;
 | 
			
		||||
		if(ev->value_mask & CWBorderWidth)
 | 
			
		||||
			c->border = ev->border_width;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	wc.x = ev->x;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										12
									
								
								mouse.c
									
										
									
									
									
								
							
							
						
						
									
										12
									
								
								mouse.c
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -42,7 +42,7 @@ mresize(Client *c)
 | 
			
		|||
 | 
			
		||||
	old_cx = c->r[RFloat].x;
 | 
			
		||||
	old_cy = c->r[RFloat].y;
 | 
			
		||||
	if(XGrabPointer(dpy, c->win, False, MouseMask, GrabModeAsync, GrabModeAsync,
 | 
			
		||||
	if(XGrabPointer(dpy, root, False, MouseMask, GrabModeAsync, GrabModeAsync,
 | 
			
		||||
				None, cursor[CurResize], CurrentTime) != GrabSuccess)
 | 
			
		||||
		return;
 | 
			
		||||
	XGrabServer(dpy);
 | 
			
		||||
| 
						 | 
				
			
			@ -55,10 +55,12 @@ mresize(Client *c)
 | 
			
		|||
		case MotionNotify:
 | 
			
		||||
			XUngrabServer(dpy);
 | 
			
		||||
			mmatch(c, old_cx, old_cy, ev.xmotion.x, ev.xmotion.y);
 | 
			
		||||
			resize(c);
 | 
			
		||||
			XResizeWindow(dpy, c->win, c->r[RFloat].width, c->r[RFloat].height);
 | 
			
		||||
			XGrabServer(dpy);
 | 
			
		||||
			break;
 | 
			
		||||
		case ButtonRelease:
 | 
			
		||||
			resize(c);
 | 
			
		||||
			XUngrabServer(dpy);
 | 
			
		||||
			XUngrabPointer(dpy, CurrentTime);
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -75,7 +77,7 @@ mmove(Client *c)
 | 
			
		|||
 | 
			
		||||
	old_cx = c->r[RFloat].x;
 | 
			
		||||
	old_cy = c->r[RFloat].y;
 | 
			
		||||
	if(XGrabPointer(dpy, c->win, False, MouseMask, GrabModeAsync, GrabModeAsync,
 | 
			
		||||
	if(XGrabPointer(dpy, root, False, MouseMask, GrabModeAsync, GrabModeAsync,
 | 
			
		||||
				None, cursor[CurMove], CurrentTime) != GrabSuccess)
 | 
			
		||||
		return;
 | 
			
		||||
	XQueryPointer(dpy, root, &dummy, &dummy, &x1, &y1, &di, &di, &dui);
 | 
			
		||||
| 
						 | 
				
			
			@ -88,10 +90,12 @@ mmove(Client *c)
 | 
			
		|||
			XUngrabServer(dpy);
 | 
			
		||||
			c->r[RFloat].x = old_cx + (ev.xmotion.x - x1);
 | 
			
		||||
			c->r[RFloat].y = old_cy + (ev.xmotion.y - y1);
 | 
			
		||||
			resize(c);
 | 
			
		||||
			XMoveResizeWindow(dpy, c->win, c->r[RFloat].x, c->r[RFloat].y,
 | 
			
		||||
					c->r[RFloat].width, c->r[RFloat].height);
 | 
			
		||||
			XGrabServer(dpy);
 | 
			
		||||
			break;
 | 
			
		||||
		case ButtonRelease:
 | 
			
		||||
			resize(c);
 | 
			
		||||
			XUngrabServer(dpy);
 | 
			
		||||
			XUngrabPointer(dpy, CurrentTime);
 | 
			
		||||
			return;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										14
									
								
								wm.h
									
										
									
									
									
								
							
							
						
						
									
										14
									
								
								wm.h
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -13,19 +13,6 @@
 | 
			
		|||
 | 
			
		||||
typedef struct Client Client;
 | 
			
		||||
typedef struct Key Key;
 | 
			
		||||
typedef enum Align Align;
 | 
			
		||||
 | 
			
		||||
enum Align {
 | 
			
		||||
	NORTH = 0x01,
 | 
			
		||||
	EAST  = 0x02,
 | 
			
		||||
	SOUTH = 0x04,
 | 
			
		||||
	WEST  = 0x08,
 | 
			
		||||
	NEAST = NORTH | EAST,
 | 
			
		||||
	NWEST = NORTH | WEST,
 | 
			
		||||
	SEAST = SOUTH | EAST,
 | 
			
		||||
	SWEST = SOUTH | WEST,
 | 
			
		||||
	CENTER = NEAST | SWEST
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* atoms */
 | 
			
		||||
enum { WMProtocols, WMDelete, WMLast };
 | 
			
		||||
| 
						 | 
				
			
			@ -40,7 +27,6 @@ enum { RFloat, RGrid, RLast };
 | 
			
		|||
struct Client {
 | 
			
		||||
	char name[256];
 | 
			
		||||
	char tag[256];
 | 
			
		||||
	unsigned int border;
 | 
			
		||||
	int proto;
 | 
			
		||||
	Bool fixedsize;
 | 
			
		||||
	Window win;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue