Mercurial > geeqie
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); } }