]> git.mdlowis.com Git - proto/labwc.git/commitdiff
menu: add menu_finish()
authorJohan Malm <jgm323@gmail.com>
Thu, 22 Oct 2020 18:43:27 +0000 (19:43 +0100)
committerJohan Malm <jgm323@gmail.com>
Thu, 22 Oct 2020 18:43:27 +0000 (19:43 +0100)
include/menu/menu.h
src/main.c
src/menu/menu.c

index bc583c10e1e3748e15c7c36cce12e0a7e7de12c2..2054c338cf7d2e01aad4857f19050eea4c10905a 100644 (file)
@@ -22,6 +22,7 @@ struct menu {
 
 /* menu_create - create menu */
 void menu_init(struct server *server, struct menu *menu);
+void menu_finish(struct menu *menu);
 
 /* menu_move - move to position (x, y) */
 void menu_move(struct menu *menu, int x, int y);
index 90528ae4e92cf06cb8c89c8401d42af69741473a..d30d0cef330623a425acb4303db2f17ae153308c 100644 (file)
@@ -62,9 +62,9 @@ main(int argc, char *argv[])
        theme_read(rc.theme_name);
        xbm_load(server.renderer);
 
-       struct menu menu = { 0 };
-       menu_init(&server, &menu);
-       server.rootmenu = &menu;
+       struct menu rootmenu = { 0 };
+       menu_init(&server, &rootmenu);
+       server.rootmenu = &rootmenu;
 
        session_autostart_init();
        if (startup_cmd) {
@@ -75,6 +75,7 @@ main(int argc, char *argv[])
 
        server_finish(&server);
        rcxml_finish();
+       menu_finish(server.rootmenu);
        pango_cairo_font_map_set_default(NULL);
        return 0;
 }
index 048e7d9e1ab1fdd58771f79e07deae995afbbdaa..eb9d726379d21be3b1b9ab4cd02b3f9a2250b37d 100644 (file)
@@ -87,6 +87,24 @@ menu_init(struct server *server, struct menu *menu)
        menu_move(menu, 100, 100);
 }
 
+void
+menu_finish(struct menu *menu)
+{
+       struct menuitem *menuitem, *next;
+       wl_list_for_each_safe(menuitem, next, &menu->menuitems, link) {
+               if (menuitem->action)
+                       free(menuitem->action);
+               if (menuitem->command)
+                       free(menuitem->command);
+               if (menuitem->active_texture)
+                       free(menuitem->active_texture);
+               if (menuitem->inactive_texture)
+                       free(menuitem->inactive_texture);
+               wl_list_remove(&menuitem->link);
+               free(menuitem);
+       }
+}
+
 void
 menu_move(struct menu *menu, int x, int y)
 {