commit - 043d71ef876cd2652757beca6c7f6a0d3c1176c0
commit + 43e30577d46f24c3a430a3b949eacaed8a9a1d72
blob - 1283eddb1e053fd36d3fa4fa6cf7c2186c583ac9
blob + 1fd1ba8c8910e94cdadfd8600a2349f24db97650
--- mymenu.c
+++ mymenu.c
struct rendering {
Display *d; /* Connection to xorg */
Window w;
+ XIM xim;
int width;
int height;
int p_padding[4];
int
text_extents(char *str, int len, struct rendering *r, int *ret_width, int *ret_height)
{
- int height;
- int width;
+ int height, width;
#ifdef USE_XFT
XGlyphInfo gi;
XftTextExtentsUtf8(r->d, r->font, str, len, &gi);
void
xim_init(struct rendering *r, XrmDatabase *xdb)
{
- XIM xim;
XIMStyle best_match_style;
XIMStyles *xis;
int i;
/* Open the X input method */
- xim = XOpenIM(r->d, *xdb, resname, resclass);
- check_allocation(xim);
+ r->xim = XOpenIM(r->d, *xdb, resname, resclass);
+ check_allocation(r->xim);
- if (XGetIMValues(xim, XNQueryInputStyle, &xis, NULL) || !xis) {
+ if (XGetIMValues(r->xim, XNQueryInputStyle, &xis, NULL) || !xis) {
fprintf(stderr, "Input Styles could not be retrieved\n");
exit(EX_UNAVAILABLE);
}
if (!best_match_style)
fprintf(stderr, "No matching input style could be determined\n");
- r->xic = XCreateIC(xim, XNInputStyle, best_match_style, XNClientWindow, r->w, XNFocusWindow, r->w, NULL);
+ r->xic = XCreateIC(r->xim, XNInputStyle, best_match_style, XNClientWindow, r->w, XNFocusWindow, r->w, NULL);
check_allocation(r->xic);
}
attr.override_redirect = 1;
attr.border_pixel = 0;
attr.background_pixel = 0x80808080;
- attr.event_mask = ExposureMask | KeyPressMask | VisibilityChangeMask;
+ attr.event_mask = StructureNotifyMask | ExposureMask | KeyPressMask | KeymapStateMask | ButtonPress | VisibilityChangeMask;
r->w = XCreateWindow(r->d,
parent_window,
/* Create the window */
create_window(&r, parent_window, cmap, vinfo, x, y, offset_x, offset_y);
set_win_atoms_hints(r.d, r.w, r.width, r.height);
- XSelectInput(r.d, r.w, StructureNotifyMask | KeyPressMask | KeymapStateMask | ButtonPressMask);
XMapRaised(r.d, r.w);
/* If embed, listen for other events as well */
}
XUngrabKeyboard(r.d, CurrentTime);
+
+#ifdef USE_XFT
+ for (i = 0; i < 3; ++i)
+ XftColorFree(r.d, vinfo.visual, cmap, &r.xft_colors[i]);
+#endif
+
+ for (i = 0; i < 3; ++i) {
+ XFreeGC(r.d, r.fgs[i]);
+ XFreeGC(r.d, r.bgs[i]);
+ }
+ for (i = 0; i < 4; ++i) {
+ XFreeGC(r.d, r.borders_bg[i]);
+ XFreeGC(r.d, r.p_borders_bg[i]);
+ XFreeGC(r.d, r.c_borders_bg[i]);
+ XFreeGC(r.d, r.ch_borders_bg[i]);
+ }
+
+ XDestroyIC(r.xic);
+ XCloseIM(r.xim);
+
#ifdef USE_XFT
for (i = 0; i < 3; ++i)
XftColorFree(r.d, vinfo.visual, cmap, &r.xft_colors[i]);
+ XftFontClose(r.d, r.font);
+ XftDrawDestroy(r.xftdraw);
+#else
+ XFreeFontSet(r.d, r.font);
#endif
free(r.ps1);
free(vlines);
compls_delete(cs);
+ XFreeColormap(r.d, cmap);
+
XDestroyWindow(r.d, r.w);
XCloseDisplay(r.d);