diff --git a/meson.build b/meson.build index 956c3c7..91c25ac 100644 --- a/meson.build +++ b/meson.build @@ -52,7 +52,7 @@ gnome = import('gnome') # Required minimum versions gtk_min_version = '>= 3.18.0' -mate_min_version = '>= 1.16.0' +mate_min_version = '>= 1.21.0' glib_min_version = '>= 2.44.0' # GTK/UI deps diff --git a/src/backend/apps/apps-backend.c b/src/backend/apps/apps-backend.c index 0e76607..1328c48 100644 --- a/src/backend/apps/apps-backend.c +++ b/src/backend/apps/apps-backend.c @@ -19,6 +19,8 @@ BRISK_BEGIN_PEDANTIC #include "apps-section.h" #include #include + +#define MATEMENU_I_KNOW_THIS_IS_UNSTABLE #include BRISK_END_PEDANTIC @@ -72,9 +74,11 @@ static void brisk_apps_backend_launch_action(GSimpleAction *action, GVariant *pa DEF_AUTOFREE(gchar, g_free) DEF_AUTOFREE(GSList, g_slist_free) DEF_AUTOFREE(MateMenuTreeDirectory, matemenu_tree_item_unref) -DEF_AUTOFREE(MateMenuTreeItem, matemenu_tree_item_unref) -DEF_AUTOFREE(MateMenuTree, matemenu_tree_unref) +DEF_AUTOFREE(MateMenuTreeEntry, matemenu_tree_item_unref) +DEF_AUTOFREE(MateMenuTreeIter, matemenu_tree_iter_unref) +DEF_AUTOFREE(MateMenuTree, g_object_unref) DEF_AUTOFREE(GDesktopAppInfo, g_object_unref) +DEF_AUTOFREE(GError, g_error_free) /** * Due to a glib weirdness we must fully invalidate the monitor's cache @@ -352,12 +356,18 @@ static gboolean brisk_apps_backend_build_from_tree(BriskAppsBackend *self, const { autofree(MateMenuTree) *tree = NULL; autofree(MateMenuTreeDirectory) *dir = NULL; + autofree(GError) *error = NULL; - tree = matemenu_tree_lookup(menu_id, MATEMENU_TREE_FLAGS_NONE); + tree = matemenu_tree_new(menu_id, MATEMENU_TREE_FLAGS_NONE); if (!tree) { return FALSE; } + if (!matemenu_tree_load_sync(tree, &error)) { + g_message("Failed to load tree: %s", error->message); + return FALSE; + } + dir = matemenu_tree_get_root_directory(tree); if (!dir) { return FALSE; @@ -392,37 +402,31 @@ static void brisk_apps_backend_recurse_root(BriskAppsBackend *self, MateMenuTreeDirectory *directory, MateMenuTreeDirectory *root) { - autofree(GSList) *kids = NULL; - GSList *elem = NULL; + autofree(MateMenuTreeIter) *iter = NULL; + MateMenuTreeItemType type; - kids = matemenu_tree_directory_get_contents(directory); + iter = matemenu_tree_directory_iter(directory); /* Iterate the root tree */ - for (elem = kids; elem; elem = elem->next) { - autofree(MateMenuTreeItem) *item = elem->data; - - switch (matemenu_tree_item_get_type(item)) { + while ((type = matemenu_tree_iter_next(iter)) != MATEMENU_TREE_ITEM_INVALID) { + switch (type) { case MATEMENU_TREE_ITEM_DIRECTORY: { - MateMenuTreeDirectory *dir = MATEMENU_TREE_DIRECTORY(item); + autofree(MateMenuTreeDirectory) *dir = + matemenu_tree_iter_get_directory(iter); autofree(MateMenuTreeDirectory) *parent = NULL; + autofree(MateMenuTreeIter) *children = NULL; BriskSection *section = NULL; - GSList *children = NULL; - guint n_children = 0; - parent = matemenu_tree_item_get_parent(item); + parent = matemenu_tree_directory_get_parent(dir); /* Nested menus basically only happen in mate-settings.menu */ if (parent != root) { goto recurse_root; } - children = matemenu_tree_directory_get_contents(dir); - if (children) { - n_children = g_slist_length(children); - g_slist_free_full(children, matemenu_tree_item_unref); - } + children = matemenu_tree_directory_iter(dir); /* Skip empty sections entirely */ - if (n_children < 1) { + if (matemenu_tree_iter_next(children) == MATEMENU_TREE_ITEM_INVALID) { continue; } @@ -437,7 +441,7 @@ static void brisk_apps_backend_recurse_root(BriskAppsBackend *self, brisk_apps_backend_recurse_root(self, dir, root); } break; case MATEMENU_TREE_ITEM_ENTRY: { - MateMenuTreeEntry *entry = MATEMENU_TREE_ENTRY(item); + autofree(MateMenuTreeEntry) *entry = matemenu_tree_iter_get_entry(iter); autofree(GDesktopAppInfo) *info = NULL; const gchar *desktop_file = NULL; BriskItem *app_item = NULL; diff --git a/src/backend/apps/apps-section.c b/src/backend/apps/apps-section.c index 27d52c4..97dcbdb 100644 --- a/src/backend/apps/apps-section.c +++ b/src/backend/apps/apps-section.c @@ -54,48 +54,22 @@ static const GIcon *brisk_apps_section_get_icon(BriskSection *item); static const gchar *brisk_apps_section_get_backend_id(BriskSection *item); static gboolean brisk_apps_section_can_show_item(BriskSection *section, BriskItem *item); -/** - * Create a GIcon for the given path - */ -static GIcon *brisk_apps_section_create_path_icon(const gchar *path) -{ - autofree(GFile) *file = NULL; - - file = g_file_new_for_path(path); - if (!file) { - return NULL; - } - return g_file_icon_new(file); -} - static void brisk_apps_section_update_directory(BriskAppsSection *self, MateMenuTreeDirectory *directory) { g_clear_object(&self->icon); g_clear_pointer(&self->id, g_free); g_clear_pointer(&self->name, g_free); - const gchar *icon = NULL; if (!directory) { return; } - /* Set our ID and name */ + /* Set our ID, name, and icon */ self->id = g_strdup_printf("%s.mate-directory", matemenu_tree_directory_get_menu_id(directory)); self->name = g_strdup(matemenu_tree_directory_get_name(directory)); - - icon = matemenu_tree_directory_get_icon(directory); - if (!icon) { - return; - } - - /* Set an appropriate icon based on the string */ - if (icon[0] == '/') { - self->icon = brisk_apps_section_create_path_icon(icon); - } else { - self->icon = g_themed_icon_new_with_default_fallbacks(icon); - } + self->icon = matemenu_tree_directory_get_icon(directory); } static void brisk_apps_section_set_property(GObject *object, guint id, const GValue *value, diff --git a/src/backend/apps/apps-section.h b/src/backend/apps/apps-section.h index bc10044..26dcdb8 100644 --- a/src/backend/apps/apps-section.h +++ b/src/backend/apps/apps-section.h @@ -13,6 +13,8 @@ #include #include + +#define MATEMENU_I_KNOW_THIS_IS_UNSTABLE #include #include "../section.h" diff --git a/src/frontend/classic/desktop-button.h b/src/frontend/classic/desktop-button.h index 2dd9cce..b6e25c3 100644 --- a/src/frontend/classic/desktop-button.h +++ b/src/frontend/classic/desktop-button.h @@ -13,7 +13,6 @@ #include #include -#include #include "launcher.h"