diff options
author | yetist <[email protected]> | 2018-04-27 15:20:40 +0800 |
---|---|---|
committer | raveit65 <[email protected]> | 2018-05-30 15:44:02 +0200 |
commit | 263157786e7881f1c98f0a6d839447d8f0c57dbd (patch) | |
tree | 968ce9df1f0f42f8fabb01efaf2dbb81b46a41c7 /mate-panel/panel-addto.c | |
parent | 10b2021f0a98f1575400aac2beffd8e3c47ecdd5 (diff) | |
download | mate-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.c | 93 |
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); } |