Blame SOURCES/0044-Report-errors-when-saving-screenshot.patch

1efd99
From e327a522719e5bc2237a3e8c4064e40b41fb9d15 Mon Sep 17 00:00:00 2001
1efd99
From: Jonathon Jongsma <jjongsma@redhat.com>
1efd99
Date: Mon, 17 Jul 2017 16:15:12 -0500
1efd99
Subject: [PATCH] Report errors when saving screenshot
1efd99
1efd99
Currently, the user gets no feedback if the screenshot fails (e.g. if
1efd99
they don't have permission to write in the chosen directory, etc). This
1efd99
patch adds a simple dialog showing the error message when a screenshot
1efd99
fails.
1efd99
---
1efd99
 src/virt-viewer-window.c | 24 ++++++++++++++++--------
1efd99
 1 file changed, 16 insertions(+), 8 deletions(-)
1efd99
1efd99
diff --git a/src/virt-viewer-window.c b/src/virt-viewer-window.c
1efd99
index ef40ec7..41794a6 100644
1efd99
--- a/src/virt-viewer-window.c
1efd99
+++ b/src/virt-viewer-window.c
1efd99
@@ -936,34 +936,37 @@ static GdkPixbufFormat *get_image_format(const char *filename)
1efd99
     return g_hash_table_lookup(image_formats_once.retval, ext);
1efd99
 }
1efd99
 
1efd99
-static void
1efd99
+static gboolean
1efd99
 virt_viewer_window_save_screenshot(VirtViewerWindow *self,
1efd99
-                                   const char *file)
1efd99
+                                   const char *file,
1efd99
+                                   GError **error)
1efd99
 {
1efd99
     VirtViewerWindowPrivate *priv = self->priv;
1efd99
     GdkPixbuf *pix = virt_viewer_display_get_pixbuf(VIRT_VIEWER_DISPLAY(priv->display));
1efd99
     GdkPixbufFormat *format = get_image_format(file);
1efd99
+    gboolean result;
1efd99
 
1efd99
     if (format == NULL) {
1efd99
         g_debug("unknown file extension, falling back to png");
1efd99
         if (!g_str_has_suffix(file, ".png")) {
1efd99
             char *png_filename;
1efd99
             png_filename = g_strconcat(file, ".png", NULL);
1efd99
-            gdk_pixbuf_save(pix, png_filename, "png", NULL,
1efd99
-                            "tEXt::Generator App", PACKAGE, NULL);
1efd99
+            result = gdk_pixbuf_save(pix, png_filename, "png", error,
1efd99
+                                     "tEXt::Generator App", PACKAGE, NULL);
1efd99
             g_free(png_filename);
1efd99
         } else {
1efd99
-            gdk_pixbuf_save(pix, file, "png", NULL,
1efd99
-                            "tEXt::Generator App", PACKAGE, NULL);
1efd99
+            result = gdk_pixbuf_save(pix, file, "png", error,
1efd99
+                                     "tEXt::Generator App", PACKAGE, NULL);
1efd99
         }
1efd99
     } else {
1efd99
         char *type = gdk_pixbuf_format_get_name(format);
1efd99
         g_debug("saving to %s", type);
1efd99
-        gdk_pixbuf_save(pix, file, type, NULL, NULL);
1efd99
+        result = gdk_pixbuf_save(pix, file, type, error, NULL);
1efd99
         g_free(type);
1efd99
     }
1efd99
 
1efd99
     g_object_unref(pix);
1efd99
+    return result;
1efd99
 }
1efd99
 
1efd99
 G_MODULE_EXPORT void
1efd99
@@ -992,9 +995,14 @@ virt_viewer_window_menu_file_screenshot(GtkWidget *menu G_GNUC_UNUSED,
1efd99
 
1efd99
     if (gtk_dialog_run(GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) {
1efd99
         char *filename;
1efd99
+        GError *error = NULL;
1efd99
 
1efd99
         filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER (dialog));
1efd99
-        virt_viewer_window_save_screenshot(self, filename);
1efd99
+        if (!virt_viewer_window_save_screenshot(self, filename, &error)) {
1efd99
+            virt_viewer_app_simple_message_dialog(self->priv->app,
1efd99
+                                                  error->message);
1efd99
+            g_error_free(error);
1efd99
+        }
1efd99
         g_free(filename);
1efd99
     }
1efd99
 
1efd99
-- 
1efd99
2.13.6
1efd99