added basic mouse support (actually we don't need more)
This commit is contained in:
		
							parent
							
								
									b9da4b082e
								
							
						
					
					
						commit
						48b6e9a396
					
				
							
								
								
									
										11
									
								
								client.c
								
								
								
								
							
							
						
						
									
										11
									
								
								client.c
								
								
								
								
							| 
						 | 
					@ -70,8 +70,7 @@ manage(Window w, XWindowAttributes *wa)
 | 
				
			||||||
	c->r[RFloat].y = wa->y;
 | 
						c->r[RFloat].y = wa->y;
 | 
				
			||||||
	c->r[RFloat].width = wa->width;
 | 
						c->r[RFloat].width = wa->width;
 | 
				
			||||||
	c->r[RFloat].height = wa->height;
 | 
						c->r[RFloat].height = wa->height;
 | 
				
			||||||
	c->border = wa->border_width;
 | 
						XSetWindowBorderWidth(dpy, c->win, 1);
 | 
				
			||||||
	XSetWindowBorderWidth(dpy, c->win, 0);
 | 
					 | 
				
			||||||
	XSelectInput(dpy, c->win, CLIENT_MASK);
 | 
						XSelectInput(dpy, c->win, CLIENT_MASK);
 | 
				
			||||||
	XGetTransientForHint(dpy, c->win, &c->trans);
 | 
						XGetTransientForHint(dpy, c->win, &c->trans);
 | 
				
			||||||
	if(!XGetWMNormalHints(dpy, c->win, &c->size, &msize) || !c->size.flags)
 | 
						if(!XGetWMNormalHints(dpy, c->win, &c->size, &msize) || !c->size.flags)
 | 
				
			||||||
| 
						 | 
					@ -97,7 +96,11 @@ manage(Window w, XWindowAttributes *wa)
 | 
				
			||||||
	c->snext = stack;
 | 
						c->snext = stack;
 | 
				
			||||||
	stack = c;
 | 
						stack = c;
 | 
				
			||||||
	XMapWindow(dpy, c->win);
 | 
						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);
 | 
								GrabModeAsync, GrabModeSync, None, None);
 | 
				
			||||||
	focus(c);
 | 
						focus(c);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -116,7 +119,7 @@ resize(Client *c)
 | 
				
			||||||
	e.y = c->r[RFloat].y;
 | 
						e.y = c->r[RFloat].y;
 | 
				
			||||||
	e.width = c->r[RFloat].width;
 | 
						e.width = c->r[RFloat].width;
 | 
				
			||||||
	e.height = c->r[RFloat].height;
 | 
						e.height = c->r[RFloat].height;
 | 
				
			||||||
	e.border_width = c->border;
 | 
						e.border_width = 0;
 | 
				
			||||||
	e.above = None;
 | 
						e.above = None;
 | 
				
			||||||
	e.override_redirect = False;
 | 
						e.override_redirect = False;
 | 
				
			||||||
	XSelectInput(dpy, c->win, CLIENT_MASK & ~StructureNotifyMask);
 | 
						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;
 | 
								c->r[RFloat].width = ev->width;
 | 
				
			||||||
		if(ev->value_mask & CWHeight)
 | 
							if(ev->value_mask & CWHeight)
 | 
				
			||||||
			c->r[RFloat].height = ev->height;
 | 
								c->r[RFloat].height = ev->height;
 | 
				
			||||||
		if(ev->value_mask & CWBorderWidth)
 | 
					 | 
				
			||||||
			c->border = ev->border_width;
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	wc.x = ev->x;
 | 
						wc.x = ev->x;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										12
									
								
								mouse.c
								
								
								
								
							
							
						
						
									
										12
									
								
								mouse.c
								
								
								
								
							| 
						 | 
					@ -42,7 +42,7 @@ mresize(Client *c)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	old_cx = c->r[RFloat].x;
 | 
						old_cx = c->r[RFloat].x;
 | 
				
			||||||
	old_cy = c->r[RFloat].y;
 | 
						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)
 | 
									None, cursor[CurResize], CurrentTime) != GrabSuccess)
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
	XGrabServer(dpy);
 | 
						XGrabServer(dpy);
 | 
				
			||||||
| 
						 | 
					@ -55,10 +55,12 @@ mresize(Client *c)
 | 
				
			||||||
		case MotionNotify:
 | 
							case MotionNotify:
 | 
				
			||||||
			XUngrabServer(dpy);
 | 
								XUngrabServer(dpy);
 | 
				
			||||||
			mmatch(c, old_cx, old_cy, ev.xmotion.x, ev.xmotion.y);
 | 
								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);
 | 
								XGrabServer(dpy);
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
		case ButtonRelease:
 | 
							case ButtonRelease:
 | 
				
			||||||
 | 
								resize(c);
 | 
				
			||||||
 | 
								XUngrabServer(dpy);
 | 
				
			||||||
			XUngrabPointer(dpy, CurrentTime);
 | 
								XUngrabPointer(dpy, CurrentTime);
 | 
				
			||||||
			return;
 | 
								return;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
| 
						 | 
					@ -75,7 +77,7 @@ mmove(Client *c)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	old_cx = c->r[RFloat].x;
 | 
						old_cx = c->r[RFloat].x;
 | 
				
			||||||
	old_cy = c->r[RFloat].y;
 | 
						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)
 | 
									None, cursor[CurMove], CurrentTime) != GrabSuccess)
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
	XQueryPointer(dpy, root, &dummy, &dummy, &x1, &y1, &di, &di, &dui);
 | 
						XQueryPointer(dpy, root, &dummy, &dummy, &x1, &y1, &di, &di, &dui);
 | 
				
			||||||
| 
						 | 
					@ -88,10 +90,12 @@ mmove(Client *c)
 | 
				
			||||||
			XUngrabServer(dpy);
 | 
								XUngrabServer(dpy);
 | 
				
			||||||
			c->r[RFloat].x = old_cx + (ev.xmotion.x - x1);
 | 
								c->r[RFloat].x = old_cx + (ev.xmotion.x - x1);
 | 
				
			||||||
			c->r[RFloat].y = old_cy + (ev.xmotion.y - y1);
 | 
								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);
 | 
								XGrabServer(dpy);
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
		case ButtonRelease:
 | 
							case ButtonRelease:
 | 
				
			||||||
 | 
								resize(c);
 | 
				
			||||||
			XUngrabServer(dpy);
 | 
								XUngrabServer(dpy);
 | 
				
			||||||
			XUngrabPointer(dpy, CurrentTime);
 | 
								XUngrabPointer(dpy, CurrentTime);
 | 
				
			||||||
			return;
 | 
								return;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										14
									
								
								wm.h
								
								
								
								
							
							
						
						
									
										14
									
								
								wm.h
								
								
								
								
							| 
						 | 
					@ -13,19 +13,6 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef struct Client Client;
 | 
					typedef struct Client Client;
 | 
				
			||||||
typedef struct Key Key;
 | 
					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 */
 | 
					/* atoms */
 | 
				
			||||||
enum { WMProtocols, WMDelete, WMLast };
 | 
					enum { WMProtocols, WMDelete, WMLast };
 | 
				
			||||||
| 
						 | 
					@ -40,7 +27,6 @@ enum { RFloat, RGrid, RLast };
 | 
				
			||||||
struct Client {
 | 
					struct Client {
 | 
				
			||||||
	char name[256];
 | 
						char name[256];
 | 
				
			||||||
	char tag[256];
 | 
						char tag[256];
 | 
				
			||||||
	unsigned int border;
 | 
					 | 
				
			||||||
	int proto;
 | 
						int proto;
 | 
				
			||||||
	Bool fixedsize;
 | 
						Bool fixedsize;
 | 
				
			||||||
	Window win;
 | 
						Window win;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue