gint remaining;
guint page;
guint pages;
+ guint timeout;
gboolean running;
};
cairo_stroke (cr);
if(ev_timer->priv->running && ev_timer->priv->time > 0 && ev_timer->priv->remaining > 0)
{
- gdouble progress = ev_presentation_timer_progress (ev_timer->priv->time, ev_timer->priv->remaining)*(allocation.width);
- cairo_rectangle (cr, allocation.width-progress, 10, (allocation.width-(allocation.width-progress))-10, allocation.height-5);
+ gdouble progress = ev_presentation_timer_progress (ev_timer->priv->time,
+ ev_timer->priv->remaining)*(allocation.width);
+ cairo_rectangle (cr, allocation.width-progress,
+ 10,
+ (allocation.width-(allocation.width-progress))-10,
+ allocation.height-5);
cairo_stroke_preserve (cr);
cairo_fill(cr);
}
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;
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 (ev_timer->priv->timeout > 0)
+ g_source_remove (ev_timer->priv->timeout);
ev_timer->priv->remaining = 0;
}
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)
{
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 *