]> git.draconx.ca Git - liblbx.git/blobdiff - src/gui/lbxgui.c
lbxgui: Fix an error handling regression.
[liblbx.git] / src / gui / lbxgui.c
index da03cfbcfc823ecd3754b57d346e442f39f83db4..9e462e65dd5c7df7eecc021111b267b4f7d9c86f 100644 (file)
@@ -63,7 +63,7 @@ void set_frame(GtkSpinButton *spin, gpointer data)
 {
        unsigned frame = gtk_spin_button_get_value_as_int(spin);
 
-       if (image)
+       if (image && framebuf)
                render_to_pixbuf(image, framebuf, frame);
        gdk_window_invalidate_rect(canvas->window, NULL, FALSE);
 }
@@ -83,7 +83,7 @@ static void tick(void *p, double delta)
        struct lbx_imginfo info;
        GtkSpinButton   *spin;
        GtkToggleButton *play;
-       unsigned frame;
+       unsigned frame, newframe;
 
        if (!image)
                return;
@@ -97,20 +97,22 @@ static void tick(void *p, double delta)
                return;
 
        elapsed += delta;
+       newframe = frame;
        while (elapsed > seconds_per_frame) {
                elapsed -= seconds_per_frame;
 
-               if (++frame >= info.nframes) {
+               if (++newframe >= info.nframes) {
                        if (!info.looping) {
                                gtk_toggle_button_set_active(play, FALSE);
                                break;
                        }
 
-                       frame = info.loopstart;
+                       newframe = info.loopstart;
                }
-
-               gtk_spin_button_set_value(spin, frame);
        }
+
+       if (frame != newframe)
+               gtk_spin_button_set_value(spin, newframe);
 }
 
 static gboolean timeout(gpointer data)
@@ -492,7 +494,7 @@ int main(int argc, char **argv)
        init_interface();
        gtk_builder_connect_signals(builder, window);
 
-       g_timeout_add(10, timeout, NULL);
+       g_timeout_add_full(G_PRIORITY_DEFAULT_IDLE, 10, timeout, NULL, NULL);
        gtk_widget_show_all(window);
 
        init_background(canvas->window);