diff --git a/src/xfdesktop-file-icon-manager.c b/src/xfdesktop-file-icon-manager.c index cbf0ec57..af18b02e 100644 --- a/src/xfdesktop-file-icon-manager.c +++ b/src/xfdesktop-file-icon-manager.c @@ -146,8 +146,7 @@ struct _XfdesktopFileIconManagerPrivate GtkTargetList *drop_targets; #ifdef HAVE_THUNARX - GList *thunarx_menu_providers; - GList *thunarx_properties_providers; + ThunarxProviderFactory *thunarx_pfac; #endif XfdesktopThumbnailer *thumbnailer; @@ -1376,6 +1375,7 @@ xfdesktop_file_icon_manager_populate_context_menu(XfceDesktop *desktop, GFile *templates_dir = NULL, *home_dir; const gchar *templates_dir_path = NULL; #ifdef HAVE_THUNARX + GList *thunarx_menu_providers; GtkWidget *toplevel = gtk_widget_get_toplevel(GTK_WIDGET(fmanager->priv->icon_view)); #endif @@ -1803,13 +1803,17 @@ xfdesktop_file_icon_manager_populate_context_menu(XfceDesktop *desktop, } #ifdef HAVE_THUNARX - if(!multi_sel_special && fmanager->priv->thunarx_menu_providers) { + thunarx_menu_providers = + thunarx_provider_factory_list_providers(fmanager->priv->thunarx_pfac, + THUNARX_TYPE_MENU_PROVIDER); + + if(!multi_sel_special && thunarx_menu_providers) { GList *menu_items = NULL; ThunarxMenuProvider *provider; if(selected->data == fmanager->priv->desktop_icon) { /* click on the desktop itself, only show folder actions */ - for(l = fmanager->priv->thunarx_menu_providers; l; l = l->next) { + for(l = thunarx_menu_providers; l; l = l->next) { provider = THUNARX_MENU_PROVIDER(l->data); menu_items = g_list_concat(menu_items, thunarx_menu_provider_get_folder_menu_items(provider, @@ -1819,7 +1823,7 @@ xfdesktop_file_icon_manager_populate_context_menu(XfceDesktop *desktop, } else { /* thunar file specific actions (allows them to operate on folders * that are on the desktop as well) */ - for(l = fmanager->priv->thunarx_menu_providers; l; l = l->next) { + for(l = thunarx_menu_providers; l; l = l->next) { provider = THUNARX_MENU_PROVIDER(l->data); menu_items = g_list_concat(menu_items, thunarx_menu_provider_get_file_menu_items(provider, @@ -1839,6 +1843,8 @@ xfdesktop_file_icon_manager_populate_context_menu(XfceDesktop *desktop, gtk_menu_shell_append(GTK_MENU_SHELL(menu), mi); } } + + g_list_free(thunarx_menu_providers); #endif if(file_icon == fmanager->priv->desktop_icon) { @@ -3188,9 +3194,6 @@ xfdesktop_file_icon_manager_real_init(XfdesktopIconViewManager *manager, XfdesktopFileIconManager *fmanager = XFDESKTOP_FILE_ICON_MANAGER(manager); GFileInfo *desktop_info; gint i; -#ifdef HAVE_THUNARX - ThunarxProviderFactory *thunarx_pfac; -#endif if(fmanager->priv->inited) { g_warning("Initializing icon manager when already inited"); @@ -3261,16 +3264,7 @@ xfdesktop_file_icon_manager_real_init(XfdesktopIconViewManager *manager, } #ifdef HAVE_THUNARX - thunarx_pfac = thunarx_provider_factory_get_default(); - - fmanager->priv->thunarx_menu_providers = - thunarx_provider_factory_list_providers(thunarx_pfac, - THUNARX_TYPE_MENU_PROVIDER); - fmanager->priv->thunarx_properties_providers = - thunarx_provider_factory_list_providers(thunarx_pfac, - THUNARX_TYPE_PROPERTY_PAGE_PROVIDER); - - g_object_unref(G_OBJECT(thunarx_pfac)); + fmanager->priv->thunarx_pfac = thunarx_provider_factory_get_default(); #endif desktop_info = g_file_query_info(fmanager->priv->folder, @@ -3388,13 +3382,7 @@ xfdesktop_file_icon_manager_fini(XfdesktopIconViewManager *manager) fmanager->priv->desktop_icon = NULL; #ifdef HAVE_THUNARX - g_list_foreach(fmanager->priv->thunarx_menu_providers, - (GFunc)g_object_unref, NULL); - g_list_free(fmanager->priv->thunarx_menu_providers); - - g_list_foreach(fmanager->priv->thunarx_properties_providers, - (GFunc)g_object_unref, NULL); - g_list_free(fmanager->priv->thunarx_properties_providers); + g_object_unref(G_OBJECT(fmanager->priv->thunarx_pfac)); #endif g_hash_table_destroy(fmanager->priv->special_icons);