[Goodies-commits] r3317 - ristretto/trunk/src

Stephan Arts stephan at xfce.org
Mon Oct 8 23:28:51 CEST 2007


Author: stephan
Date: 2007-10-08 21:28:51 +0000 (Mon, 08 Oct 2007)
New Revision: 3317

Modified:
   ristretto/trunk/src/picture_viewer.c
Log:
Fix picture viewer refresh


Modified: ristretto/trunk/src/picture_viewer.c
===================================================================
--- ristretto/trunk/src/picture_viewer.c	2007-10-08 09:19:26 UTC (rev 3316)
+++ ristretto/trunk/src/picture_viewer.c	2007-10-08 21:28:51 UTC (rev 3317)
@@ -29,6 +29,7 @@
     GdkPixbufLoader  *loader;
     GdkPixbufAnimation *animation;
     GdkPixbufAnimationIter *iter;
+    GIOChannel       *io_channel;
     GdkPixbuf        *src_pixbuf;
     GdkPixbuf        *dst_pixbuf; /* The pixbuf which ends up on screen */
     RsttoNavigator   *navigator;
@@ -692,9 +693,9 @@
         }
         if (viewer->priv->loader)
         {
-            gdk_pixbuf_loader_close(viewer->priv->loader, NULL);
             g_signal_handlers_disconnect_by_func(viewer->priv->loader , cb_rstto_picture_viewer_area_prepared, viewer);
             g_signal_handlers_disconnect_by_func(viewer->priv->loader , cb_rstto_picture_viewer_area_updated, viewer);
+            gdk_pixbuf_loader_close(viewer->priv->loader, NULL);
             g_object_unref(viewer->priv->loader);
         }
         viewer->priv->loader = gdk_pixbuf_loader_new();
@@ -705,9 +706,9 @@
         ThunarVfsInfo *info = rstto_navigator_entry_get_info(entry);
         gchar *path = thunar_vfs_path_dup_string(info->path);
 
-        GIOChannel *io_channel = g_io_channel_new_file(path, "r", NULL);
-        g_io_channel_set_encoding(io_channel, NULL, NULL);
-        g_io_add_watch(io_channel, G_IO_IN | G_IO_PRI, (GIOFunc)cb_rstto_picture_viewer_read_file, viewer);
+        viewer->priv->io_channel = g_io_channel_new_file(path, "r", NULL);
+        g_io_channel_set_encoding(viewer->priv->io_channel, NULL, NULL);
+        g_io_add_watch(viewer->priv->io_channel, G_IO_IN | G_IO_PRI, (GIOFunc)cb_rstto_picture_viewer_read_file, viewer);
     }
     else
     {
@@ -808,31 +809,39 @@
     GError *error = NULL;
 
 
-    GIOStatus status = g_io_channel_read_chars(io_channel, buffer, 1024, &bytes_read,  &error);
+    GIOStatus status;
+    if (viewer->priv->io_channel == io_channel)
+    {
+        status = g_io_channel_read_chars(io_channel, buffer, 1024, &bytes_read,  &error);
 
-    switch (status)
-    {
-        case G_IO_STATUS_NORMAL:
-            if(gdk_pixbuf_loader_write(viewer->priv->loader, (const guchar *)buffer, bytes_read, NULL) == FALSE)
-            {
+        switch (status)
+        {
+            case G_IO_STATUS_NORMAL:
+                if(gdk_pixbuf_loader_write(viewer->priv->loader, (const guchar *)buffer, bytes_read, NULL) == FALSE)
+                {
+                    gdk_pixbuf_loader_close(viewer->priv->loader, NULL);
+                    viewer->priv->io_channel = NULL;
+                    return FALSE;
+                }
+                return TRUE;
+                break;
+            case G_IO_STATUS_EOF:
+                gdk_pixbuf_loader_write(viewer->priv->loader, (const guchar *)buffer, bytes_read, NULL);
                 gdk_pixbuf_loader_close(viewer->priv->loader, NULL);
+                viewer->priv->io_channel = NULL;
                 return FALSE;
-            }
-            return TRUE;
-            break;
-        case G_IO_STATUS_EOF:
-            gdk_pixbuf_loader_write(viewer->priv->loader, (const guchar *)buffer, bytes_read, NULL);
-            gdk_pixbuf_loader_close(viewer->priv->loader, NULL);
-            return FALSE;
-            break;
-        case G_IO_STATUS_ERROR:
-            gdk_pixbuf_loader_close(viewer->priv->loader, NULL);
-            return FALSE;
-            break;
-        case G_IO_STATUS_AGAIN:
-            return TRUE;
-            break;
+                break;
+            case G_IO_STATUS_ERROR:
+                gdk_pixbuf_loader_close(viewer->priv->loader, NULL);
+                viewer->priv->io_channel = NULL;
+                return FALSE;
+                break;
+            case G_IO_STATUS_AGAIN:
+                return TRUE;
+                break;
+        }
     }
+    g_io_channel_shutdown(io_channel, FALSE, NULL);
     return FALSE;
 }
 
@@ -858,7 +867,7 @@
     if (time != -1)
     {
         /* update frame */
-        g_debug("Timeout: %u\n");
+        g_debug("Timeout: %u\n", time);
     }   
 }
 
@@ -904,4 +913,6 @@
     }
     rstto_picture_viewer_refresh(viewer);
     rstto_picture_viewer_paint(GTK_WIDGET(viewer));
+    if (0)
+        cb_rstto_picture_viewer_update_image(NULL);
 }




More information about the Goodies-commits mailing list