Skip to content
Permalink
Browse files

Update to new API from mate-menus 1.21

  • Loading branch information...
vkareh committed Jun 6, 2018
1 parent a28e660 commit 6883163fa0c5ed974e30cdda9a8d6f57ef4bbbfe
@@ -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
@@ -19,6 +19,8 @@ BRISK_BEGIN_PEDANTIC
#include "apps-section.h"
#include <gio/gio.h>
#include <glib/gi18n.h>

#define MATEMENU_I_KNOW_THIS_IS_UNSTABLE
#include <matemenu-tree.h>
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;
@@ -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,
@@ -13,6 +13,8 @@

#include <gio/gio.h>
#include <glib-object.h>

#define MATEMENU_I_KNOW_THIS_IS_UNSTABLE
#include <matemenu-tree.h>

#include "../section.h"
@@ -13,7 +13,6 @@

#include <glib-object.h>
#include <gtk/gtk.h>
#include <matemenu-tree.h>

#include "launcher.h"

0 comments on commit 6883163

Please sign in to comment.
You can’t perform that action at this time.