summaryrefslogtreecommitdiff
path: root/mate-panel/panel-addto.c
diff options
context:
space:
mode:
authoryetist <[email protected]>2018-04-27 15:20:40 +0800
committerraveit65 <[email protected]>2018-05-30 15:44:02 +0200
commit263157786e7881f1c98f0a6d839447d8f0c57dbd (patch)
tree968ce9df1f0f42f8fabb01efaf2dbb81b46a41c7 /mate-panel/panel-addto.c
parent10b2021f0a98f1575400aac2beffd8e3c47ecdd5 (diff)
downloadmate-panel-263157786e7881f1c98f0a6d839447d8f0c57dbd.tar.bz2
mate-panel-263157786e7881f1c98f0a6d839447d8f0c57dbd.tar.xz
Support new mate-menus api
Diffstat (limited to 'mate-panel/panel-addto.c')
-rw-r--r--mate-panel/panel-addto.c93
1 files changed, 54 insertions, 39 deletions
diff --git a/mate-panel/panel-addto.c b/mate-panel/panel-addto.c
index 98064220..dfebba26 100644
--- a/mate-panel/panel-addto.c
+++ b/mate-panel/panel-addto.c
@@ -517,13 +517,15 @@ panel_addto_prepend_directory (GSList **parent_list,
const char *filename)
{
PanelAddtoAppList *data;
+ GIcon *gicon;
data = g_new0 (PanelAddtoAppList, 1);
+ gicon = matemenu_tree_directory_get_icon (directory);
data->item_info.type = PANEL_ADDTO_MENU;
data->item_info.name = g_strdup (matemenu_tree_directory_get_name (directory));
data->item_info.description = g_strdup (matemenu_tree_directory_get_comment (directory));
- data->item_info.icon = g_strdup (matemenu_tree_directory_get_icon (directory));
+ data->item_info.icon = gicon ? g_icon_to_string(gicon) : g_strdup(PANEL_ICON_UNKNOWN);
data->item_info.menu_filename = g_strdup (filename);
data->item_info.menu_path = matemenu_tree_directory_make_path (directory, NULL);
data->item_info.static_data = FALSE;
@@ -547,13 +549,18 @@ panel_addto_prepend_entry (GSList **parent_list,
const char *filename)
{
PanelAddtoAppList *data;
+ GDesktopAppInfo *ginfo;
+ GIcon *gicon;
+
+ ginfo = matemenu_tree_entry_get_app_info (entry);
+ gicon = g_app_info_get_icon(G_APP_INFO(ginfo));
data = g_new0 (PanelAddtoAppList, 1);
data->item_info.type = PANEL_ADDTO_LAUNCHER;
- data->item_info.name = g_strdup (matemenu_tree_entry_get_display_name (entry));
- data->item_info.description = g_strdup (matemenu_tree_entry_get_comment (entry));
- data->item_info.icon = g_strdup (matemenu_tree_entry_get_icon (entry));
+ data->item_info.name = g_strdup (g_app_info_get_display_name(G_APP_INFO(ginfo)));
+ data->item_info.description = g_strdup (g_app_info_get_description(G_APP_INFO(ginfo)));
+ data->item_info.icon = gicon ? g_icon_to_string(gicon) : g_strdup(PANEL_ICON_UNKNOWN);
data->item_info.launcher_path = g_strdup (matemenu_tree_entry_get_desktop_file_path (entry));
data->item_info.static_data = FALSE;
@@ -565,28 +572,28 @@ panel_addto_prepend_alias (GSList **parent_list,
MateMenuTreeAlias *alias,
const char *filename)
{
- MateMenuTreeItem *aliased_item;
-
- aliased_item = matemenu_tree_alias_get_item (alias);
+ gpointer item;
- switch (matemenu_tree_item_get_type (aliased_item)) {
+ switch (matemenu_tree_alias_get_aliased_item_type (alias)) {
case MATEMENU_TREE_ITEM_DIRECTORY:
+ item = matemenu_tree_alias_get_directory(alias);
panel_addto_prepend_directory (parent_list,
- MATEMENU_TREE_DIRECTORY (aliased_item),
- filename);
+ item,
+ filename);
+ matemenu_tree_item_unref (item);
break;
case MATEMENU_TREE_ITEM_ENTRY:
+ item = matemenu_tree_alias_get_aliased_entry(alias);
panel_addto_prepend_entry (parent_list,
- MATEMENU_TREE_ENTRY (aliased_item),
- filename);
+ item,
+ filename);
+ matemenu_tree_item_unref (item);
break;
default:
break;
}
-
- matemenu_tree_item_unref (aliased_item);
}
static void
@@ -594,33 +601,34 @@ panel_addto_make_application_list (GSList **parent_list,
MateMenuTreeDirectory *directory,
const char *filename)
{
- GSList *items;
- GSList *l;
-
- items = matemenu_tree_directory_get_contents (directory);
-
- for (l = items; l; l = l->next) {
- switch (matemenu_tree_item_get_type (l->data)) {
+ MateMenuTreeIter *iter;
+ iter = matemenu_tree_directory_iter (directory);
+ MateMenuTreeItemType type;
+ while ((type = matemenu_tree_iter_next (iter)) != MATEMENU_TREE_ITEM_INVALID) {
+ gpointer item;
+ switch (type) {
case MATEMENU_TREE_ITEM_DIRECTORY:
- panel_addto_prepend_directory (parent_list, l->data, filename);
+ item = matemenu_tree_iter_get_directory(iter);
+ panel_addto_prepend_directory (parent_list, item, filename);
+ matemenu_tree_item_unref (item);
break;
case MATEMENU_TREE_ITEM_ENTRY:
- panel_addto_prepend_entry (parent_list, l->data, filename);
+ item = matemenu_tree_iter_get_entry (iter);
+ panel_addto_prepend_entry (parent_list, item, filename);
+ matemenu_tree_item_unref (item);
break;
case MATEMENU_TREE_ITEM_ALIAS:
- panel_addto_prepend_alias (parent_list, l->data, filename);
+ item = matemenu_tree_iter_get_alias(iter);
+ panel_addto_prepend_alias (parent_list, item, filename);
+ matemenu_tree_item_unref (item);
break;
-
default:
break;
}
-
- matemenu_tree_item_unref (l->data);
}
-
- g_slist_free (items);
+ matemenu_tree_iter_unref (iter);
*parent_list = g_slist_reverse (*parent_list);
}
@@ -662,16 +670,21 @@ static void panel_addto_make_application_model(PanelAddtoDialog* dialog)
GtkTreeStore* store;
MateMenuTree* tree;
MateMenuTreeDirectory* root;
+ GError *error = NULL;
if (dialog->filter_application_model != NULL)
return;
store = gtk_tree_store_new(NUMBER_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER, G_TYPE_STRING);
- tree = matemenu_tree_lookup("mate-applications.menu", MATEMENU_TREE_FLAGS_NONE);
- matemenu_tree_set_sort_key(tree, MATEMENU_TREE_SORT_DISPLAY_NAME);
+ tree = matemenu_tree_new ("mate-applications.menu", MATEMENU_TREE_FLAGS_SORT_DISPLAY_NAME);
+ if (! matemenu_tree_load_sync (tree, &error)) {
+ g_warning("Applications menu tree loading got error:%s\n", error->message);
+ g_error_free(error);
+ g_clear_object(&tree);
+ }
- if ((root = matemenu_tree_get_root_directory (tree)))
+ if ((root = matemenu_tree_get_root_directory (tree)) != NULL )
{
panel_addto_make_application_list(&dialog->application_list, root, "mate-applications.menu");
panel_addto_populate_application_model(store, NULL, dialog->application_list);
@@ -679,10 +692,14 @@ static void panel_addto_make_application_model(PanelAddtoDialog* dialog)
matemenu_tree_item_unref(root);
}
- matemenu_tree_unref(tree);
+ g_clear_object(&tree);
- tree = matemenu_tree_lookup("mate-settings.menu", MATEMENU_TREE_FLAGS_NONE);
- matemenu_tree_set_sort_key(tree, MATEMENU_TREE_SORT_DISPLAY_NAME);
+ tree = matemenu_tree_new ("mate-settings.menu", MATEMENU_TREE_FLAGS_SORT_DISPLAY_NAME);
+ if (! matemenu_tree_load_sync (tree, &error)) {
+ g_warning("Settings menu tree loading got error:%s\n", error->message);
+ g_error_free(error);
+ g_clear_object(&tree);
+ }
if ((root = matemenu_tree_get_root_directory(tree)))
{
@@ -697,7 +714,7 @@ static void panel_addto_make_application_model(PanelAddtoDialog* dialog)
matemenu_tree_item_unref(root);
}
- matemenu_tree_unref(tree);
+ g_object_unref(tree);
dialog->application_model = GTK_TREE_MODEL(store);
dialog->filter_application_model = gtk_tree_model_filter_new(GTK_TREE_MODEL(dialog->application_model), NULL);
@@ -970,9 +987,7 @@ panel_addto_dialog_free (PanelAddtoDialog *dialog)
g_object_unref (dialog->application_model);
dialog->application_model = NULL;
- if (dialog->menu_tree)
- matemenu_tree_unref (dialog->menu_tree);
- dialog->menu_tree = NULL;
+ g_clear_object (&dialog->menu_tree);
g_free (dialog);
}