[virt-tools-list] [PATCH virt-viewer 2/3] Report errors when saving screenshot
Pavel Grunt
pgrunt at redhat.com
Thu Jul 20 06:56:42 UTC 2017
On Wed, 2017-07-19 at 16:49 -0500, Jonathon Jongsma wrote:
> Currently, the user gets no feedback if the screenshot fails (e.g. if
> they don't have permission to write in the chosen directory, etc). This
> patch adds a simple dialog showing the error message when a screenshot
> fails.
Ack,
Pavel
> ---
> src/virt-viewer-window.c | 24 ++++++++++++++++--------
> 1 file changed, 16 insertions(+), 8 deletions(-)
>
> diff --git a/src/virt-viewer-window.c b/src/virt-viewer-window.c
> index 9a6a738..95a760f 100644
> --- a/src/virt-viewer-window.c
> +++ b/src/virt-viewer-window.c
> @@ -938,34 +938,37 @@ static GdkPixbufFormat *get_image_format(const char
> *filename)
> return g_hash_table_lookup(image_formats_once.retval, ext);
> }
>
> -static void
> +static gboolean
> virt_viewer_window_save_screenshot(VirtViewerWindow *self,
> - const char *file)
> + const char *file,
> + GError **error)
> {
> VirtViewerWindowPrivate *priv = self->priv;
> GdkPixbuf *pix = virt_viewer_display_get_pixbuf(VIRT_VIEWER_DISPLAY(priv-
> >display));
> GdkPixbufFormat *format = get_image_format(file);
> + gboolean result;
>
> if (format == NULL) {
> g_debug("unknown file extension, falling back to png");
> if (!g_str_has_suffix(file, ".png")) {
> char *png_filename;
> png_filename = g_strconcat(file, ".png", NULL);
> - gdk_pixbuf_save(pix, png_filename, "png", NULL,
> - "tEXt::Generator App", PACKAGE, NULL);
> + result = gdk_pixbuf_save(pix, png_filename, "png", error,
> + "tEXt::Generator App", PACKAGE, NULL);
> g_free(png_filename);
> } else {
> - gdk_pixbuf_save(pix, file, "png", NULL,
> - "tEXt::Generator App", PACKAGE, NULL);
> + result = gdk_pixbuf_save(pix, file, "png", error,
> + "tEXt::Generator App", PACKAGE, NULL);
> }
> } else {
> char *type = gdk_pixbuf_format_get_name(format);
> g_debug("saving to %s", type);
> - gdk_pixbuf_save(pix, file, type, NULL, NULL);
> + result = gdk_pixbuf_save(pix, file, type, error, NULL);
> g_free(type);
> }
>
> g_object_unref(pix);
> + return result;
> }
>
> G_MODULE_EXPORT void
> @@ -994,9 +997,14 @@ virt_viewer_window_menu_file_screenshot(GtkWidget *menu
> G_GNUC_UNUSED,
>
> if (gtk_dialog_run(GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) {
> char *filename;
> + GError *error = NULL;
>
> filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER (dialog));
> - virt_viewer_window_save_screenshot(self, filename);
> + if (!virt_viewer_window_save_screenshot(self, filename, &error)) {
> + virt_viewer_app_simple_message_dialog(self->priv->app,
> + error->message);
> + g_error_free(error);
> + }
> g_free(filename);
> }
>
More information about the virt-tools-list
mailing list