static void save_as_response_cb (GtkDialog *file_sel, int response, SaveData *save_data) { GFile *file; const char *mime_type; GFile *folder; char *folder_uri; GthTask *task; if (response != GTK_RESPONSE_OK) { GthMediaViewerPage *page = save_data->page; if (save_data->playing_before_screenshot) gst_element_set_state (gth_media_viewer_page_get_playbin (page), GST_STATE_PLAYING); save_date_free (save_data); gtk_widget_destroy (GTK_WIDGET (file_sel)); return; } if (! gth_file_chooser_dialog_get_file (GTH_FILE_CHOOSER_DIALOG (file_sel), &file, &mime_type)) return; folder = g_file_get_parent (file); folder_uri = g_file_get_uri (folder); g_settings_set_string (save_data->settings, PREF_GSTREAMER_TOOLS_SCREESHOT_LOCATION, folder_uri); save_data->file_data = gth_file_data_new (file, NULL); gth_file_data_set_mime_type (save_data->file_data, mime_type); task = gth_save_image_task_new (save_data->image, mime_type, save_data->file_data, GTH_OVERWRITE_RESPONSE_YES); g_signal_connect (task, "completed", G_CALLBACK (save_screenshot_task_completed_cb), save_data); gth_browser_exec_task (GTH_BROWSER (save_data->browser), task, FALSE); gtk_widget_destroy (GTK_WIDGET (file_sel)); g_free (folder_uri); g_object_unref (folder); g_object_unref (file); }
void gth_browser_activate_action_tool_desktop_background (GtkAction *action, GthBrowser *browser) { WallpaperData *wdata; gboolean saving_wallpaper = FALSE; GList *items; GList *file_list; GthFileData *file_data; const char *mime_type; wdata = wallpaper_data_new (browser); items = gth_file_selection_get_selected (GTH_FILE_SELECTION (gth_browser_get_file_list_view (browser))); file_list = gth_file_list_get_files (GTH_FILE_LIST (gth_browser_get_file_list (browser)), items); file_data = (file_list != NULL) ? file_list->data : NULL; mime_type = (file_data != NULL) ? gth_file_data_get_mime_type (file_data) : NULL; if (gth_main_extension_is_active ("image_viewer") && (gth_browser_get_file_modified (browser) || ! _gdk_pixbuf_mime_type_is_readable (mime_type))) { GtkWidget *viewer_page; viewer_page = gth_browser_get_viewer_page (browser); if (viewer_page != NULL) { GthImage *image; GthTask *task; image = gth_image_new_for_surface (gth_image_viewer_page_get_image (GTH_IMAGE_VIEWER_PAGE (viewer_page))); file_data = gth_file_data_new (wdata->new_style.file, NULL); task = gth_save_image_task_new (image, "image/jpeg", file_data, GTH_OVERWRITE_RESPONSE_YES); g_signal_connect (task, "completed", G_CALLBACK (save_wallpaper_task_completed_cb), wdata); gth_browser_exec_task (GTH_BROWSER (browser), task, FALSE); saving_wallpaper = TRUE; _g_object_unref (task); g_object_unref (image); } } if (saving_wallpaper) return; if (file_data == NULL) return; if (g_file_is_native (file_data->file)) { _g_object_unref (wdata->new_style.file); wdata->new_style.file = g_file_dup (file_data->file); wallpaper_data_set (wdata); } else g_file_copy_async (file_data->file, wdata->new_style.file, G_FILE_COPY_OVERWRITE, G_PRIORITY_DEFAULT, NULL, NULL, NULL, copy_wallpaper_ready_cb, wdata); _g_object_list_unref (file_list); _gtk_tree_path_list_free (items); }