]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/animate.cpp
don't use wxVector<wxDataFormat> from wx/clipbrd.h as wxDataFormat definition is...
[wxWidgets.git] / src / gtk / animate.cpp
index 206b36180e8722212c535f81c2730e3a704885df..02e2886873af7e874cb8423bb9d6d201f9c74509 100644 (file)
@@ -23,6 +23,7 @@
 #endif
 
 #include "wx/wfstream.h"
+
 #include <gtk/gtk.h>
 
 
@@ -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);
 }