client.c
changeset 734 6283adb1fcf2
parent 733 1950833a5614
child 752 9fe042b02e18
equal deleted inserted replaced
733:1950833a5614 734:6283adb1fcf2
   118 		if(c->win == w)
   118 		if(c->win == w)
   119 			return c;
   119 			return c;
   120 	return NULL;
   120 	return NULL;
   121 }
   121 }
   122 
   122 
       
   123 Bool
       
   124 isprotodel(Client *c) {
       
   125 	int i, n;
       
   126 	Atom *protocols;
       
   127 	Bool ret = False;
       
   128 
       
   129 	if(XGetWMProtocols(dpy, c->win, &protocols, &n)) {
       
   130 		for(i = 0; !ret && i < n; i++)
       
   131 			if(protocols[i] == wmatom[WMDelete])
       
   132 				ret = True;
       
   133 		XFree(protocols);
       
   134 	}
       
   135 	return ret;
       
   136 }
       
   137 
   123 void
   138 void
   124 killclient(Arg *arg) {
   139 killclient(Arg *arg) {
   125 	if(!sel)
   140 	if(!sel)
   126 		return;
   141 		return;
   127 	if(sel->proto & PROTODELWIN)
   142 	if(isprotodel(sel))
   128 		sendevent(sel->win, wmatom[WMProtocols], wmatom[WMDelete]);
   143 		sendevent(sel->win, wmatom[WMProtocols], wmatom[WMDelete]);
   129 	else
   144 	else
   130 		XKillClient(dpy, sel->win);
   145 		XKillClient(dpy, sel->win);
   131 }
   146 }
   132 
   147 
   157 			c->x = wax;
   172 			c->x = wax;
   158 		if(c->y < way)
   173 		if(c->y < way)
   159 			c->y = way;
   174 			c->y = way;
   160 	}
   175 	}
   161 	updatesizehints(c);
   176 	updatesizehints(c);
   162 	c->proto = getproto(c->win);
       
   163 	XSelectInput(dpy, c->win,
   177 	XSelectInput(dpy, c->win,
   164 		StructureNotifyMask | PropertyChangeMask | EnterWindowMask);
   178 		StructureNotifyMask | PropertyChangeMask | EnterWindowMask);
   165 	XGetTransientForHint(dpy, c->win, &trans);
   179 	XGetTransientForHint(dpy, c->win, &trans);
   166 	grabbuttons(c, False);
   180 	grabbuttons(c, False);
   167 	XSetWindowBorder(dpy, c->win, dc.norm[ColBorder]);
   181 	XSetWindowBorder(dpy, c->win, dc.norm[ColBorder]);