X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=shell%2Fev-presentation-timer.c;h=0ab7018da7e9eba43bcece6a970a538317fd2b7a;hb=6027c05a2886353bf5454561d8b4f82527b125b9;hp=12c7d1be380e14a4629c7d4a8ef89f67398d8318;hpb=b5f235502262de83dbd8e1181977c3007b90f393;p=evince.git diff --git a/shell/ev-presentation-timer.c b/shell/ev-presentation-timer.c index 12c7d1be..0ab7018d 100644 --- a/shell/ev-presentation-timer.c +++ b/shell/ev-presentation-timer.c @@ -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 *