wm.c
changeset 8 7066ff2fe8bc
parent 7 49e2fc9fb94f
child 9 d567f430a81d
equal deleted inserted replaced
7:49e2fc9fb94f 8:7066ff2fe8bc
    22 Bool running = True;
    22 Bool running = True;
    23 Client *client = NULL;
    23 Client *client = NULL;
    24 
    24 
    25 char *bartext, tag[256];
    25 char *bartext, tag[256];
    26 int screen, sel_screen;
    26 int screen, sel_screen;
    27 unsigned int lock_mask, numlock_mask;
       
    28 
    27 
    29 /* draw structs */
    28 /* draw structs */
    30 Brush brush = {0};
    29 Brush brush = {0};
    31 
    30 
    32 enum { WM_PROTOCOL_DELWIN = 1 };
    31 enum { WM_PROTOCOL_DELWIN = 1 };
   142 	other_wm_running = True;
   141 	other_wm_running = True;
   143 	return -1;
   142 	return -1;
   144 }
   143 }
   145 
   144 
   146 static void
   145 static void
   147 init_lock_keys()
       
   148 {
       
   149 	XModifierKeymap *modmap;
       
   150 	KeyCode numlock;
       
   151 	int i;
       
   152 	static int masks[] = {
       
   153 		ShiftMask, LockMask, ControlMask, Mod1Mask,
       
   154 		Mod2Mask, Mod3Mask, Mod4Mask, Mod5Mask
       
   155 	};
       
   156 
       
   157 	numlock_mask = 0;
       
   158 	modmap = XGetModifierMapping(dpy);
       
   159 	numlock = XKeysymToKeycode(dpy, XStringToKeysym("Num_Lock"));
       
   160 
       
   161 	if(modmap && modmap->max_keypermod > 0) {
       
   162 		int max = (sizeof(masks) / sizeof(int)) * modmap->max_keypermod;
       
   163 		for(i = 0; i < max; i++)
       
   164 			if(numlock && (modmap->modifiermap[i] == numlock))
       
   165 				numlock_mask = masks[i / modmap->max_keypermod];
       
   166 	}
       
   167 	XFreeModifiermap(modmap);
       
   168 
       
   169 	lock_mask = 255 & ~(numlock_mask | LockMask);
       
   170 }
       
   171 
       
   172 static void
       
   173 cleanup()
   146 cleanup()
   174 {
   147 {
   175 	/*
   148 	/*
   176 	Client *c;
   149 	Client *c;
   177 	for(c=client; c; c=c->next)
   150 	for(c=client; c; c=c->next)
   241 	/* init cursors */
   214 	/* init cursors */
   242 	cursor[CurNormal] = XCreateFontCursor(dpy, XC_left_ptr);
   215 	cursor[CurNormal] = XCreateFontCursor(dpy, XC_left_ptr);
   243 	cursor[CurResize] = XCreateFontCursor(dpy, XC_sizing);
   216 	cursor[CurResize] = XCreateFontCursor(dpy, XC_sizing);
   244 	cursor[CurMove] = XCreateFontCursor(dpy, XC_fleur);
   217 	cursor[CurMove] = XCreateFontCursor(dpy, XC_fleur);
   245 
   218 
   246 	init_lock_keys();
   219 	update_keys();
   247 
   220 
   248 	brush.drawable = XCreatePixmap(dpy, root, rect.width, rect.height,
   221 	brush.drawable = XCreatePixmap(dpy, root, rect.width, rect.height,
   249 			DefaultDepth(dpy, screen));
   222 			DefaultDepth(dpy, screen));
   250 	brush.gc = XCreateGC(dpy, root, 0, 0);
   223 	brush.gc = XCreateGC(dpy, root, 0, 0);
   251 
   224