Xinqi Bao's Git
2 * (C)opyright MMVI Anselm R. Garbe <garbeam at gmail dot com>
3 * See LICENSE file for license details.
14 update_name(Client
*c
)
22 XGetTextProperty(dpy
, c
->win
, &name
, net_atom
[NetWMName
]);
24 XGetWMName(dpy
, c
->win
, &name
);
27 if(name
.encoding
== XA_STRING
)
28 strncpy(c
->name
, (char *)name
.value
, sizeof(c
->name
));
30 if(XmbTextPropertyToTextList(dpy
, &name
, &list
, &n
) >= Success
33 strncpy(c
->name
, *list
, sizeof(c
->name
));
34 XFreeStringList(list
);
44 for(l
=&stack
; *l
&& *l
!= c
; l
=&(*l
)->snext
);
49 XRaiseWindow(dpy
, c
->win
);
50 XSetInputFocus(dpy
, c
->win
, RevertToPointerRoot
, CurrentTime
);
55 manage(Window w
, XWindowAttributes
*wa
)
58 XSetWindowAttributes twa
;
61 c
= emallocz(sizeof(Client
));
63 c
->r
[RFloat
].x
= wa
->x
;
64 c
->r
[RFloat
].y
= wa
->y
;
65 c
->r
[RFloat
].width
= wa
->width
;
66 c
->r
[RFloat
].height
= wa
->height
;
67 c
->border
= wa
->border_width
;
68 XSetWindowBorderWidth(dpy
, c
->win
, 0);
69 XGetTransientForHint(dpy
, c
->win
, &c
->trans
);
70 if(!XGetWMNormalHints(dpy
, c
->win
, &c
->size
, &msize
) || !c
->size
.flags
)
71 c
->size
.flags
= PSize
;
73 (c
->size
.flags
& PMinSize
&& c
->size
.flags
& PMaxSize
74 && c
->size
.min_width
== c
->size
.max_width
75 && c
->size
.min_height
== c
->size
.max_height
);
77 twa
.override_redirect
= 1;
78 twa
.background_pixmap
= ParentRelative
;
79 twa
.event_mask
= ExposureMask
;
81 c
->title
= XCreateWindow(dpy
, root
, c
->r
[RFloat
].x
, c
->r
[RFloat
].y
,
82 c
->r
[RFloat
].width
, barrect
.height
, 0,
83 DefaultDepth(dpy
, screen
), CopyFromParent
,
84 DefaultVisual(dpy
, screen
),
85 CWOverrideRedirect
| CWBackPixmap
| CWEventMask
, &twa
);
87 for(l
=&clients
; *l
; l
=&(*l
)->next
);
88 c
->next
= *l
; /* *l == nil */
92 XMapWindow(dpy
, c
->win
);
97 dummy_error_handler(Display
*dpy
, XErrorEvent
*error
)
108 XSetErrorHandler(dummy_error_handler
);
110 XUnmapWindow(dpy
, c
->win
);
111 XDestroyWindow(dpy
, c
->title
);
113 for(l
=&clients
; *l
&& *l
!= c
; l
=&(*l
)->next
);
116 for(l
=&stack
; *l
&& *l
!= c
; l
=&(*l
)->snext
);
122 XSetErrorHandler(error_handler
);
124 flush_events(EnterWindowMask
);
132 for(c
= clients
; c
; c
= c
->next
)