diff options
author | Vincent Sanders <vince@kyllikki.org> | 2019-10-10 18:04:32 +0100 |
---|---|---|
committer | Vincent Sanders <vince@kyllikki.org> | 2019-10-10 18:04:32 +0100 |
commit | 8e986ae214fcf373d9d459b72b643ae62ffa054a (patch) | |
tree | bd7c413bad40f46ab772a20dc5fb254b1a007fa0 /frontends/gtk/menu.c | |
parent | fed47dc35b2d6022e894cc4d387c515b0b391fd6 (diff) | |
download | netsurf-8e986ae214fcf373d9d459b72b643ae62ffa054a.tar.gz netsurf-8e986ae214fcf373d9d459b72b643ae62ffa054a.tar.bz2 |
ensure menu resources are released
this ensures all the menu resources are freed when the containing
window receives the destroy signal. Previously these resources
were leaked.
Diffstat (limited to 'frontends/gtk/menu.c')
-rw-r--r-- | frontends/gtk/menu.c | 75 |
1 files changed, 72 insertions, 3 deletions
diff --git a/frontends/gtk/menu.c b/frontends/gtk/menu.c index 08af970f3..d0a984a99 100644 --- a/frontends/gtk/menu.c +++ b/frontends/gtk/menu.c @@ -263,8 +263,8 @@ nsgtk_menu_toolbars_submenu(GtkAccelGroup *group) * \param group the 'global' in a gtk sense accelerator reference */ -static struct nsgtk_developer_submenu *nsgtk_menu_developer_submenu( - GtkAccelGroup *group) +static struct nsgtk_developer_submenu * +nsgtk_menu_developer_submenu(GtkAccelGroup *group) { struct nsgtk_developer_submenu *dmenu = malloc(sizeof(struct nsgtk_developer_submenu)); @@ -423,7 +423,6 @@ static struct nsgtk_nav_menu *nsgtk_menu_nav_submenu(GtkAccelGroup *group) ADD_SEP(nav, ret); IMAGE_ITEM(nav, openlocation, gtkOpenLocation, ret, group); - return ret; } @@ -597,3 +596,73 @@ nsgtk_link_menu_create(GtkAccelGroup *group) return nmenu; } + + +/* exported function documented in gtk/menu.h */ +nserror nsgtk_menu_bar_destroy(struct nsgtk_bar_submenu *menu) +{ + gtk_widget_destroy(GTK_WIDGET(menu->bar_menu)); + + free(menu->file_submenu->export_submenu); + free(menu->file_submenu); + free(menu->edit_submenu); + free(menu->view_submenu->tabs_submenu); + free(menu->view_submenu->toolbars_submenu); + free(menu->view_submenu->scaleview_submenu); + free(menu->view_submenu); + free(menu->nav_submenu); + free(menu->tabs_submenu); + free(menu->tools_submenu->developer_submenu); + free(menu->tools_submenu); + free(menu->help_submenu); + free(menu); + + return NSERROR_OK; +} + +/* exported function documented in gtk/menu.h */ +nserror nsgtk_burger_menu_destroy(struct nsgtk_burger_menu *menu) +{ + gtk_widget_destroy(GTK_WIDGET(menu->burger_menu)); + + free(menu->file_submenu->export_submenu); + free(menu->file_submenu); + free(menu->edit_submenu); + free(menu->view_submenu->tabs_submenu); + free(menu->view_submenu->toolbars_submenu); + free(menu->view_submenu->scaleview_submenu); + free(menu->view_submenu); + free(menu->nav_submenu); + free(menu->tabs_submenu); + free(menu->tools_submenu->developer_submenu); + free(menu->tools_submenu); + free(menu->help_submenu); + free(menu); + + return NSERROR_OK; +} + + +/* exported function documented in gtk/menu.h */ +nserror nsgtk_popup_menu_destroy(struct nsgtk_popup_menu *menu) +{ + gtk_widget_destroy(GTK_WIDGET(menu->popup_menu)); + + free(menu->toolbars_submenu); + free(menu->tools_submenu->developer_submenu); + free(menu->tools_submenu); + free(menu); + + return NSERROR_OK; +} + + +/* exported function documented in gtk/menu.h */ +nserror nsgtk_link_menu_destroy(struct nsgtk_link_menu *menu) +{ + gtk_widget_destroy(GTK_WIDGET(menu->link_menu)); + + free(menu); + + return NSERROR_OK; +} |