]> Dogcows Code - chaz/openbox/commitdiff
fix a mem leak, and make suer the menus arent visible when they are modified
authorDana Jansens <danakj@orodu.net>
Sun, 14 Sep 2003 21:04:30 +0000 (21:04 +0000)
committerDana Jansens <danakj@orodu.net>
Sun, 14 Sep 2003 21:04:30 +0000 (21:04 +0000)
openbox/menu.c

index cd4b5cb168fe2e2d79563b5adb1ac2f7efcf1aef..231777f214e589850975e36262480582f96336e3 100644 (file)
@@ -161,6 +161,8 @@ void menu_pipe_execute(ObMenu *self)
     } else {
         g_warning("Invalid output from pipe-menu: %s", self->execute);
     }
+
+    g_free(output);
 }
 
 static ObMenu* menu_from_name(gchar *name)
@@ -260,7 +262,17 @@ ObMenu* menu_new(gchar *name, gchar *title, gpointer data)
 
 static void menu_destroy_hash_value(ObMenu *self)
 {
-    /* XXX make sure its not visible */
+    /* make sure its not visible */
+    {
+        GList *it;
+        ObMenuFrame *f;
+
+        for (it = menu_frame_visible; it; it = g_list_next(it)) {
+            f = it->data;
+            if (f->menu == self)
+                menu_frame_hide_all();
+        }
+    }
 
     if (self->destroy_func)
         self->destroy_func(self, self->data);
@@ -269,6 +281,8 @@ static void menu_destroy_hash_value(ObMenu *self)
     g_free(self->name);
     g_free(self->title);
     g_free(self->execute);
+
+    g_free(self);
 }
 
 void menu_free(ObMenu *menu)
@@ -341,7 +355,18 @@ void menu_entry_free(ObMenuEntry *self)
 
 void menu_clear_entries(ObMenu *self)
 {
-    /* XXX assert that the menu isn't visible */
+#ifdef DEBUG
+    /* assert that the menu isn't visible */
+    {
+        GList *it;
+        ObMenuFrame *f;
+
+        for (it = menu_frame_visible; it; it = g_list_next(it)) {
+            f = it->data;
+            g_assert(f->menu != self);
+        }
+    }
+#endif
 
     while (self->entries) {
        menu_entry_free(self->entries->data);
This page took 0.024922 seconds and 4 git commands to generate.