+ 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;
+ 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;
+}
+
+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);