X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=shell%2Fev-page-action.c;h=57b9bfceb886b3a1002c753b51ba083fbc0c8977;hb=d58f069362465e0bd50814853b86ab5341beba79;hp=18415a3675be8c381b1caab35ccf4d4ef2b2f9fb;hpb=b41413ce1926cfaca270c46139f4aee4a59e8fb5;p=evince.git diff --git a/shell/ev-page-action.c b/shell/ev-page-action.c index 18415a36..57b9bfce 100644 --- a/shell/ev-page-action.c +++ b/shell/ev-page-action.c @@ -63,6 +63,9 @@ static GType ev_page_action_widget_get_type (void); static void ev_page_action_widget_init (EvPageActionWidget *action_widget); static void ev_page_action_widget_class_init (EvPageActionWidgetClass *action_widget); +#define EV_TYPE_PAGE_ACTION_WIDGET (ev_page_action_widget_get_type ()) +#define EV_PAGE_ACTION_WIDGET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EV_TYPE_PAGE_ACTION_WIDGET, EvPageActionWidget)) + G_DEFINE_TYPE (EvPageActionWidget, ev_page_action_widget, GTK_TYPE_TOOL_ITEM) static void @@ -72,11 +75,37 @@ ev_page_action_widget_init (EvPageActionWidget *action_widget) } static void -ev_page_action_widget_class_init (EvPageActionWidgetClass *action_widget) +ev_page_action_widget_set_page_cache (EvPageActionWidget *action_widget, + EvPageCache *page_cache) +{ + if (action_widget->page_cache != NULL) { + g_object_remove_weak_pointer (G_OBJECT (action_widget->page_cache), + (gpointer *)&action_widget->page_cache); + action_widget->page_cache = NULL; + } + + if (page_cache != NULL) { + action_widget->page_cache = page_cache; + g_object_add_weak_pointer (G_OBJECT (page_cache), + (gpointer *)&action_widget->page_cache); + } +} + +static void +ev_page_action_widget_finalize (GObject *object) { + EvPageActionWidget *action_widget = EV_PAGE_ACTION_WIDGET (object); + + ev_page_action_widget_set_page_cache (action_widget, NULL); } +static void +ev_page_action_widget_class_init (EvPageActionWidgetClass *class) +{ + GObjectClass *object_class = G_OBJECT_CLASS (class); + object_class->finalize = ev_page_action_widget_finalize; +} static void ev_page_action_init (EvPageAction *action); static void ev_page_action_class_init (EvPageActionClass *class); @@ -103,7 +132,11 @@ update_pages_label (EvPageActionWidget *proxy, gint n_pages; n_pages = page_cache ? ev_page_cache_get_n_pages (page_cache) : 0; - label_text = g_strdup_printf (_("(%d of %d)"), page + 1, n_pages); + if (ev_page_cache_has_nonnumeric_page_labels (page_cache)) { + label_text = g_strdup_printf (_("(%d of %d)"), page + 1, n_pages); + } else { + label_text = g_strdup_printf (_("of %d"), n_pages); + } gtk_label_set_text (GTK_LABEL (proxy->label), label_text); g_free (label_text); } @@ -193,10 +226,10 @@ update_page_cache (EvPageAction *page, GParamSpec *pspec, EvPageActionWidget *pr g_signal_handler_disconnect (proxy->page_cache, proxy->signal_id); if (page_cache != NULL) { - signal_id = g_signal_connect (page_cache, - "page-changed", - G_CALLBACK (page_changed_cb), - proxy); + signal_id = g_signal_connect_object (page_cache, + "page-changed", + G_CALLBACK (page_changed_cb), + proxy, 0); /* Set the initial value */ page_changed_cb (page_cache, ev_page_cache_get_current_page (page_cache), @@ -206,7 +239,7 @@ update_page_cache (EvPageAction *page, GParamSpec *pspec, EvPageActionWidget *pr signal_id = 0; page_changed_cb (NULL, 0, proxy); } - proxy->page_cache = page_cache; + ev_page_action_widget_set_page_cache (proxy, page_cache); proxy->signal_id = signal_id; }