X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8a2984cfc10c881df1b094fef3a9198dc6375cbd..8946ede10c2702c7acbb194fe8bd2793d7fb8358:/src/gtk/animate.cpp?ds=sidebyside diff --git a/src/gtk/animate.cpp b/src/gtk/animate.cpp index 206b36180e..02e2886873 100644 --- a/src/gtk/animate.cpp +++ b/src/gtk/animate.cpp @@ -23,6 +23,7 @@ #endif #include "wx/wfstream.h" + #include @@ -117,7 +118,8 @@ bool wxAnimation::Load(wxInputStream &stream, wxAnimationType type) if (!loader) { - wxLogDebug(wxT("Could not create the loader for '%s' animation type"), anim_type); + wxLogDebug(wxT("Could not create the loader for '%s' animation type: %s"), + anim_type, error->message); return false; } @@ -125,6 +127,7 @@ bool wxAnimation::Load(wxInputStream &stream, wxAnimationType type) g_signal_connect(loader, "area-updated", G_CALLBACK(gdk_pixbuf_area_updated), this); guchar buf[2048]; + bool data_written = false; while (stream.IsOk()) { // read a chunk of data @@ -133,21 +136,32 @@ bool wxAnimation::Load(wxInputStream &stream, wxAnimationType type) // fetch all data into the loader if (!gdk_pixbuf_loader_write(loader, buf, stream.LastRead(), &error)) { + wxLogDebug(wxT("Could not write to the loader: %s"), error->message); + + // gdk_pixbuf_loader_close wants the GError == NULL; reset it: + error = NULL; gdk_pixbuf_loader_close(loader, &error); - wxLogDebug(wxT("Could not write to the loader")); return false; } + + data_written = true; + } + + if (!data_written) + { + wxLogDebug("Could not read data from the stream..."); + return false; } // load complete if (!gdk_pixbuf_loader_close(loader, &error)) { - wxLogDebug(wxT("Could not close the loader")); + wxLogDebug(wxT("Could not close the loader: %s"), error->message); return false; } // wait until we get the last area_updated signal - return true; + return data_written; } wxImage wxAnimation::GetFrame(unsigned int WXUNUSED(frame)) const @@ -210,6 +224,7 @@ bool wxAnimationCtrl::Create( wxWindow *parent, wxWindowID id, SetWindowStyle(style); m_widget = gtk_image_new(); + g_object_ref(m_widget); gtk_widget_show(m_widget); m_parent->DoAddChild( this ); @@ -235,6 +250,8 @@ wxAnimationCtrl::~wxAnimationCtrl() bool wxAnimationCtrl::LoadFile(const wxString &filename, wxAnimationType type) { wxFileInputStream fis(filename); + if (!fis.IsOk()) + return false; return Load(fis, type); }