]> www.fi.muni.cz Git - evince.git/blobdiff - shell/ev-presentation-timer.c
cleanup
[evince.git] / shell / ev-presentation-timer.c
index 12c7d1be380e14a4629c7d4a8ef89f67398d8318..0ab7018da7e9eba43bcece6a970a538317fd2b7a 100644 (file)
@@ -37,6 +37,7 @@ struct _EvPresentationTimerPrivate
        gint       remaining;
        guint      page;
        guint      pages;
+       guint      timeout;
        gboolean   running;
 };
 
@@ -94,12 +95,16 @@ timeout_cb (gpointer data)
 void
 ev_presentation_timer_set_pages (EvPresentationTimer *ev_timer, guint pages)
 {
+       if(!EV_IS_PRESENTATION_TIMER (ev_timer))
+               return;
        ev_timer->priv->pages = pages -1;
 }
 
 void
 ev_presentation_timer_set_page (EvPresentationTimer *ev_timer, guint page)
 {
+       if(!EV_IS_PRESENTATION_TIMER (ev_timer))
+               return;
        if (page >= ev_timer->priv->pages)
        {
                page = ev_timer->priv->pages;
@@ -117,23 +122,30 @@ ev_presentation_timer_init (EvPresentationTimer *ev_timer)
        ev_timer->priv->pages = 0;
        ev_timer->priv->remaining = 0;
        ev_timer->priv->time = 0;
+       ev_timer->priv->timeout = 0;
        ev_timer->priv->running = FALSE;
 }
 
 void
 ev_presentation_timer_start (EvPresentationTimer *ev_timer)
 {
+       if (!EV_IS_PRESENTATION_TIMER (ev_timer))
+               return;
        if (ev_timer->priv->running == FALSE)
        {
                ev_timer->priv->remaining = (ev_timer->priv->time)*60;
                ev_timer->priv->running = TRUE;
-               g_timeout_add_seconds (1, timeout_cb, ev_timer);
+               ev_timer->priv->timeout = g_timeout_add_seconds (1, timeout_cb, ev_timer);
        }
 }
 
 void
 ev_presentation_timer_stop (EvPresentationTimer *ev_timer)
 {
+       if (!EV_IS_PRESENTATION_TIMER (ev_timer))
+               return;
+       if (priv->timeout > 0)
+               g_source_remove (priv->timeout);
        ev_timer->priv->remaining = 0;
 }
 
@@ -141,12 +153,23 @@ void
 ev_presentation_timer_set_time (EvPresentationTimer *ev_timer,
                                gint time)
 {
+       if (!EV_IS_PRESENTATION_TIMER (ev_timer))
+               return;
        if(ev_timer->priv->running)
                ev_timer->priv->remaining = ((ev_timer->priv->remaining)/(ev_timer->priv->time)*time);
-
        ev_timer->priv->time = (time < -1)? -1:time;
 }
 
+static void
+ev_presentation_timer_dispose (GObject *gobject)
+{
+       EvPresentationTimer *ev_timer = EV_PRESENTATION_TIMER (gobject);
+       EvPresentationTimerPrivate *priv = EV_PRESENTATION_TIMER (ev_timer)->priv;
+       if (priv->timeout > 0)
+               g_source_remove (priv->timeout);
+       G_OBJECT_CLASS (ev_presentation_timer_parent_class)->dispose (gobject);
+}
+
 static void
 ev_presentation_timer_class_init (EvPresentationTimerClass *klass)
 {
@@ -154,7 +177,7 @@ ev_presentation_timer_class_init (EvPresentationTimerClass *klass)
        GtkWidgetClass  *widget_class = GTK_WIDGET_CLASS (klass);
        g_type_class_add_private (object_class, sizeof (EvPresentationTimerPrivate));
        widget_class->draw = ev_presentation_timer_draw;
-       /*object_class->finalize = ev_presentation_timer_finalize;*/
+       object_class->dispose =  ev_presentation_timer_dispose;
 }
 
 GtkWidget *