diff src/pixbuf-renderer.c @ 25:0c3b353b666e

Fri Mar 25 22:39:30 2005 John Ellis <johne@verizon.net> * image.c: Connect to 'zoom' signal of pixbuf-renderer and notify listener to update. Fix delay flip by listening for 'render_complete'. * pixbuf-renderer.[ch]: Add complete property and and emit a 'render-complete' signal when changing complete back to TRUE. * view_dir_tree.c (vdtree_row_expanded): Populate a folder node whenever it is expanded. ##### Note: GQview CVS on sourceforge is not always up to date, please use ##### ##### an offical release when making enhancements and translation updates. #####
author gqview
date Sat, 26 Mar 2005 03:50:35 +0000
parents 104e34f9ab1f
children acd9885ebd78
line wrap: on
line diff
--- a/src/pixbuf-renderer.c	Wed Mar 23 05:29:45 2005 +0000
+++ b/src/pixbuf-renderer.c	Sat Mar 26 03:50:35 2005 +0000
@@ -135,6 +135,7 @@
 	SIGNAL_ZOOM = 0,
 	SIGNAL_CLICKED,
 	SIGNAL_SCROLL_NOTIFY,
+	SIGNAL_RENDER_COMPLETE,
 	SIGNAL_COUNT
 };
 
@@ -149,6 +150,7 @@
 	PROP_SCROLL_RESET,
 	PROP_DELAY_FLIP,
 	PROP_LOADING,
+	PROP_COMPLETE,
 	PROP_CACHE_SIZE_DISPLAY,
 	PROP_CACHE_SIZE_TILES,
 	PROP_WINDOW_FIT,
@@ -172,6 +174,7 @@
 					 GValue *value, GParamSpec *pspec);
 static gint pixbuf_renderer_expose(GtkWidget *widget, GdkEventExpose *event);
 
+static void pr_render_complete_signal(PixbufRenderer *pr);
 
 static void pr_overlay_list_clear(PixbufRenderer *pr);
 static void pr_scroller_timer_set(PixbufRenderer *pr, gint start);
@@ -327,6 +330,14 @@
 							     G_PARAM_READABLE | G_PARAM_WRITABLE));
 
 	g_object_class_install_property(gobject_class,
+					PROP_COMPLETE,
+					g_param_spec_boolean("complete",
+							     "Image rendering complete",
+							     NULL,
+							     FALSE,
+							     G_PARAM_READABLE | G_PARAM_WRITABLE));
+
+	g_object_class_install_property(gobject_class,
 					PROP_CACHE_SIZE_DISPLAY,
 					g_param_spec_uint("cache_display",
 							  "Display cache size MB",
@@ -400,6 +411,15 @@
 			     NULL, NULL,
 			     g_cclosure_marshal_VOID__VOID,
 			     G_TYPE_NONE, 0);
+
+	signals[SIGNAL_RENDER_COMPLETE] = 
+		g_signal_new("render-complete",
+			     G_OBJECT_CLASS_TYPE(gobject_class),
+			     G_SIGNAL_RUN_LAST,
+			     G_STRUCT_OFFSET(PixbufRendererClass, render_complete),
+			     NULL, NULL,
+			     g_cclosure_marshal_VOID__VOID,
+			     G_TYPE_NONE, 0);
 }
 
 static void pixbuf_renderer_init(PixbufRenderer *pr)
@@ -501,6 +521,9 @@
 		case PROP_LOADING:
 			pr->loading = g_value_get_boolean(value);
 			break;
+		case PROP_COMPLETE:
+			pr->complete = g_value_get_boolean(value);
+			break;
 		case PROP_CACHE_SIZE_DISPLAY:
 			pr->tile_cache_max = g_value_get_uint(value);
 			break;
@@ -558,6 +581,9 @@
 		case PROP_LOADING:
 			g_value_set_boolean(value, pr->loading);
 			break;
+		case PROP_COMPLETE:
+			g_value_set_boolean(value, pr->complete);
+			break;
 		case PROP_CACHE_SIZE_DISPLAY:
 			g_value_set_uint(value, pr->tile_cache_max);
 			break;
@@ -2010,9 +2036,7 @@
 	    (!pr->draw_queue && !pr->draw_queue_2pass) ||
 	    pr->draw_idle_id == -1)
 		{
-#if 0
-		if (!pr->completed) image_complete_util(pr, FALSE);
-#endif
+		pr_render_complete_signal(pr);
 
 		pr->draw_idle_id = -1;
 		return FALSE;
@@ -2087,9 +2111,7 @@
 
 	if (!pr->draw_queue && !pr->draw_queue_2pass)
 		{
-#if 0
-		if (!pr->completed) image_complete_util(pr, FALSE);
-#endif
+		pr_render_complete_signal(pr);
 
 		pr->draw_idle_id = -1;
 		return FALSE;
@@ -2311,14 +2333,23 @@
 	g_signal_emit(pr, signals[SIGNAL_ZOOM], 0, pr->zoom);
 }
 
+static void pr_clicked_signal(PixbufRenderer *pr, GdkEventButton *bevent)
+{
+	g_signal_emit(pr, signals[SIGNAL_CLICKED], 0, bevent);
+}
+
 static void pr_scroll_notify_signal(PixbufRenderer *pr)
 {
 	g_signal_emit(pr, signals[SIGNAL_SCROLL_NOTIFY], 0);
 }
 
-static void pr_button_signal(PixbufRenderer *pr, GdkEventButton *bevent)
+static void pr_render_complete_signal(PixbufRenderer *pr)
 {
-	g_signal_emit(pr, signals[SIGNAL_CLICKED], 0, bevent);
+	if (!pr->complete)
+		{
+		g_signal_emit(pr, signals[SIGNAL_RENDER_COMPLETE], 0);
+		g_object_set(G_OBJECT(pr), "complete", TRUE, NULL);
+		}
 }
 
 /*
@@ -2859,7 +2890,7 @@
 			pr->drag_moved = 0;
 			break;
 		case 3:
-			pr_button_signal(pr, bevent);
+			pr_clicked_signal(pr, bevent);
 			break;
 		default:
 			break;
@@ -2901,7 +2932,7 @@
 			}
 		else if (bevent->button == 1 || bevent->button == 2)
 			{
-			pr_button_signal(pr, bevent);
+			pr_clicked_signal(pr, bevent);
 			}
 		}