Package: gpicview Version: 0.1.9-2 Severity: grave Justification: causes non-serious data loss Tags: patch
*** Please type your report below this line *** Save or auto-save on gif files will empty that file. It is because the gdk_pixbuf_save() is only supporting bmp/ico/jpeg/png/tiff currently. Other formats like gif/pcx/pnm/xbm/xpm... is not supported and if we directly call that function, it erases the file. The patch detects which formats are currently supported by gdk-pixbuf and only do the save on supported types. -- System Information: Debian Release: lenny/sid APT prefers testing APT policy: (500, 'testing') Architecture: i386 (i686) Kernel: Linux 2.6.26-1-686 (SMP w/1 CPU core) Locale: LANG=zh_TW.UTF-8, LC_CTYPE=zh_TW.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash Versions of packages gpicview depends on: ii libatk1.0-0 1.22.0-1 The ATK accessibility toolkit ii libc6 2.7-13 GNU C Library: Shared libraries ii libcairo2 1.6.4-6 The Cairo 2D vector graphics libra ii libglib2.0-0 2.16.5-1 The GLib library of C routines ii libgtk2.0-0 2.12.11-3 The GTK+ graphical user interface ii libjpeg62 6b-14 The Independent JPEG Group's JPEG ii libpango1.0-0 1.20.5-1 Layout and rendering of internatio ii libx11-6 2:1.1.4-2 X11 client-side library Versions of packages gpicview recommends: ii xdg-utils 1.0.2-6 desktop integration utilities from gpicview suggests no packages. -- no debconf information -- PaulLiu(劉穎駿) E-mail address: [EMAIL PROTECTED]
Index: main-win.c =================================================================== --- main-win.c (revision 848) +++ main-win.c (working copy) @@ -1285,6 +1285,9 @@ gboolean main_win_save( MainWin* mw, const char* file_path, const char* type, gboolean confirm ) { + gboolean result1,gdk_save_supported; + GSList *gdk_formats; + GSList *gdk_formats_i; if( ! mw->pix ) return FALSE; @@ -1306,13 +1309,38 @@ } } + /* detect if the current type can be save by gdk_pixbuf_save() */ + gdk_save_supported = FALSE; + gdk_formats = gdk_pixbuf_get_formats(); + for (gdk_formats_i = gdk_formats; gdk_formats_i; + gdk_formats_i = g_slist_next(gdk_formats_i)) + { + GdkPixbufFormat *data; + data = gdk_formats_i->data; + if (gdk_pixbuf_format_is_writable(data)) + { + if ( strcmp(type, gdk_pixbuf_format_get_name(data))==0) + { + gdk_save_supported = TRUE; + break; + } + } + } + g_slist_free (gdk_formats); + GError* err = NULL; - if( ! gdk_pixbuf_save( mw->pix, file_path, type, &err, NULL ) ) + if (!gdk_save_supported) { + /* FIXME: we should show some error messages here when the type + is not supported to save */ + return FALSE; + } + result1 = gdk_pixbuf_save( mw->pix, file_path, type, &err, NULL ); + if( ! result1 ) + { main_win_show_error( mw, err->message ); return FALSE; } - return TRUE; }
signature.asc
Description: OpenPGP digital signature