commit 43e30577d46f24c3a430a3b949eacaed8a9a1d72 from: Omar Polo date: Sat Oct 20 16:12:51 2018 UTC Free some stuff (fonts, xftdraw, xim, xic...) commit - 043d71ef876cd2652757beca6c7f6a0d3c1176c0 commit + 43e30577d46f24c3a430a3b949eacaed8a9a1d72 blob - 1283eddb1e053fd36d3fa4fa6cf7c2186c583ac9 blob + 1fd1ba8c8910e94cdadfd8600a2349f24db97650 --- mymenu.c +++ mymenu.c @@ -99,6 +99,7 @@ big struct to rule them all */ struct rendering { Display *d; /* Connection to xorg */ Window w; + XIM xim; int width; int height; int p_padding[4]; @@ -512,8 +513,7 @@ readlines(char ***lns, char **buf) 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); @@ -1344,16 +1344,15 @@ load_font(struct rendering *r, const char *fontname) 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); } @@ -1371,7 +1370,7 @@ xim_init(struct rendering *r, XrmDatabase *xdb) 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); } @@ -1385,7 +1384,7 @@ create_window(struct rendering *r, Window parent_windo 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, @@ -1955,7 +1954,6 @@ main(int argc, char **argv) /* 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 */ @@ -2053,10 +2051,34 @@ main(int argc, char **argv) } 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); @@ -2068,6 +2090,8 @@ main(int argc, char **argv) free(vlines); compls_delete(cs); + XFreeColormap(r.d, cmap); + XDestroyWindow(r.d, r.w); XCloseDisplay(r.d);