all repos — openbox @ 700e551390a86ffdb92ddc061914ec7687658d18

openbox fork - make it a bit more like ryudo

fix a bunch of memleaks from valgrind and stuff
Dana Jansens danakj@orodu.net
commit

700e551390a86ffdb92ddc061914ec7687658d18

parent

5baa7c802a500ee30fe9719f226d88923ee6e59d

M openbox/menu.copenbox/menu.c

@@ -190,6 +190,7 @@ parse_register(menu_parse_inst, "item", parse_menu_item, &parse_state);

parse_register(menu_parse_inst, "separator", parse_menu_separator, &parse_state); parse_tree(menu_parse_inst, doc, node->xmlChildrenNode); + xmlFreeDoc(doc); } }
M openbox/menuframe.copenbox/menuframe.c

@@ -170,6 +170,8 @@ ObMenuFrame *f;

for (f = self; f; f = f->parent) menu_frame_move(f, f->area.x + dx, f->area.y + dy); + for (f = self->child; f; f = f->child) + menu_frame_move(f, f->area.x + dx, f->area.y + dy); XWarpPointer(ob_display, None, None, 0, 0, 0, 0, dx, dy); } }

@@ -424,6 +426,11 @@ }

void menu_frame_show(ObMenuFrame *self, ObMenuFrame *parent) { + GList *it; + + if (g_list_find(menu_frame_visible, self)) + return; + if (parent) { if (parent->child) menu_frame_hide(parent->child);

@@ -437,14 +444,20 @@ grab_pointer(TRUE, None);

grab_keyboard(TRUE); } - if (!g_list_find(menu_frame_visible, self)) { - menu_frame_visible = g_list_prepend(menu_frame_visible, self); - + /* determine if the underlying menu is already visible */ + for (it = menu_frame_visible; it; it = g_list_next(it)) { + ObMenuFrame *f = it->data; + if (f->menu == self->menu) + break; + } + if (!it) { if (self->menu->update_func) self->menu->update_func(self, self->menu->data); - menu_frame_update(self); } + menu_frame_visible = g_list_prepend(menu_frame_visible, self); + menu_frame_update(self); + menu_frame_move_on_screen(self); XMapWindow(ob_display, self->window);

@@ -452,7 +465,12 @@ }

void menu_frame_hide(ObMenuFrame *self) { - menu_frame_visible = g_list_remove(menu_frame_visible, self); + GList *it = g_list_find(menu_frame_visible, self); + + if (!it) + return; + + menu_frame_visible = g_list_delete_link(menu_frame_visible, it); if (self->child) menu_frame_hide(self->child);
M openbox/openbox.copenbox/openbox.c

@@ -235,6 +235,7 @@ /* parse/load user options */

if (parse_load_rc(&doc, &node)) parse_tree(i, doc, node->xmlChildrenNode); /* we're done with parsing now, kill it */ + xmlFreeDoc(doc); parse_shutdown(i); menu_parse();

@@ -290,6 +291,10 @@ RrInstanceFree(ob_rr_inst);

session_shutdown(); g_free(ob_sm_id); + +#ifdef USE_LIBSN + sn_display_unref(ob_sn_display); +#endif XCloseDisplay(ob_display);
M openbox/prop.copenbox/prop.c

@@ -392,6 +392,7 @@ str = g_string_append_c(str, '\0');

} XChangeProperty(ob_display, win, prop, prop_atoms.utf8, 8, PropModeReplace, (guchar*)str->str, str->len); + g_string_free(str, TRUE); } void prop_erase(Window win, Atom prop)
M openbox/screen.copenbox/screen.c

@@ -67,6 +67,7 @@ Time timestamp;

wm_sn = g_strdup_printf("WM_S%d", ob_screen); wm_sn_atom = XInternAtom(ob_display, wm_sn, FALSE); + g_free(wm_sn); current_wm_sn_owner = XGetSelectionOwner(ob_display, wm_sn_atom); if (current_wm_sn_owner) {
M render/color.crender/color.c

@@ -59,6 +59,8 @@

void RrColorFree(RrColor *c) { if (c) { + if (c->pixel) XFreeColors(RrDisplay(c->inst), RrColormap(c->inst), + &c->pixel, 1, 0); if (c->gc) XFreeGC(RrDisplay(c->inst), c->gc); g_free(c); }
M render/font.crender/font.c

@@ -226,5 +226,7 @@

XftDrawStringUtf8(d, &c, t->font->xftfont, x, t->font->xftfont->ascent + y, (FcChar8*)text->str, l); + + g_string_free(text, TRUE); return; }
M render/theme.crender/theme.c

@@ -506,14 +506,20 @@ if (!read_appearance(db, inst,

"window.button.toggled.focus", theme->a_toggled_focused_max, TRUE)) + { + RrAppearanceFree(theme->a_toggled_focused_max); theme->a_toggled_focused_max = RrAppearanceCopy(theme->a_focused_pressed_max); + } if (!read_appearance(db, inst, "window.button.toggled.unfocus", theme->a_toggled_unfocused_max, TRUE)) + { + RrAppearanceFree(theme->a_toggled_unfocused_max); theme->a_toggled_unfocused_max = RrAppearanceCopy(theme->a_unfocused_pressed_max); + } if (!read_appearance(db, inst, "window.button.focus", theme->a_focused_unpressed_max,

@@ -528,14 +534,20 @@ if (!read_appearance(db, inst,

"window.button.hover.focus", theme->a_hover_focused_max, TRUE)) + { + RrAppearanceFree(theme->a_hover_focused_max); theme->a_hover_focused_max = RrAppearanceCopy(theme->a_focused_unpressed_max); + } if (!read_appearance(db, inst, "window.button.hover.unfocus", theme->a_hover_unfocused_max, TRUE)) + { + RrAppearanceFree(theme->a_hover_unfocused_max); theme->a_hover_unfocused_max = RrAppearanceCopy(theme->a_unfocused_unpressed_max); + } theme->a_disabled_focused_close = RrAppearanceCopy(theme->a_disabled_focused_max);

@@ -877,6 +889,7 @@ RrColorFree(theme->menu_color);

RrColorFree(theme->menu_title_color); RrColorFree(theme->menu_disabled_color); RrColorFree(theme->menu_hilite_color); + RrColorFree(theme->menu_bullet_color); RrPixmapMaskFree(theme->max_mask); RrPixmapMaskFree(theme->max_toggled_mask);