X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=shell%2Fev-history.c;h=c72612053e8bfa9fb78d22dd3f7c1af17dfbd3fa;hb=4cec7958f9bfd4f2950bdf0b257757348b26dafc;hp=d4aa8225a6320b8ab709a4edb31904f2b74455f5;hpb=d7e6cc64dd485a4971b955285b025a52966c1ebc;p=evince.git diff --git a/shell/ev-history.c b/shell/ev-history.c index d4aa8225..c7261205 100644 --- a/shell/ev-history.c +++ b/shell/ev-history.c @@ -20,18 +20,22 @@ #include "config.h" #include +#include #include "ev-history.h" -struct _EvHistoryPrivate + +enum { - GList *links; - int current_index; + HISTORY_CHANGED, + N_SIGNALS }; -enum { - PROP_0, - PROP_INDEX +static guint signals[N_SIGNALS] = {0, }; + +struct _EvHistoryPrivate +{ + GList *links; }; static void ev_history_init (EvHistory *history); @@ -47,7 +51,6 @@ ev_history_init (EvHistory *history) history->priv = EV_HISTORY_GET_PRIVATE (history); history->priv->links = NULL; - history->priv->current_index = -1; } static void @@ -67,116 +70,54 @@ ev_history_finalize (GObject *object) G_OBJECT_CLASS (ev_history_parent_class)->finalize (object); } -static void -ev_history_get_property (GObject *object, guint prop_id, GValue *value, - GParamSpec *param_spec) -{ - EvHistory *self; - - self = EV_HISTORY (object); - - switch (prop_id) { - case PROP_INDEX: - g_value_set_int (value, self->priv->current_index); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, - prop_id, - param_spec); - break; - } -} - -static void -ev_history_set_property (GObject *object, guint prop_id, const GValue *value, - GParamSpec *param_spec) -{ - EvHistory *self; - - self = EV_HISTORY (object); - - switch (prop_id) { - case PROP_INDEX: - ev_history_set_current_index (self, g_value_get_int (value)); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, - prop_id, - param_spec); - break; - } -} - static void ev_history_class_init (EvHistoryClass *class) { GObjectClass *object_class = G_OBJECT_CLASS (class); object_class->finalize = ev_history_finalize; - object_class->set_property = ev_history_set_property; - object_class->get_property = ev_history_get_property; - - g_object_class_install_property (object_class, - PROP_INDEX, - g_param_spec_int ("index", - "Current Index", - "The current index", - -1, - G_MAXINT, - 0, - G_PARAM_READWRITE)); + + signals[HISTORY_CHANGED] = + g_signal_new ("changed", + G_OBJECT_CLASS_TYPE (object_class), + G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, + G_STRUCT_OFFSET (EvHistoryClass, changed), + NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0); g_type_class_add_private (object_class, sizeof (EvHistoryPrivate)); } +#define HISTORY_LENGTH 7 + void ev_history_add_link (EvHistory *history, EvLink *link) { - int length; + GList *l; g_return_if_fail (EV_IS_HISTORY (history)); g_return_if_fail (EV_IS_LINK (link)); - length = g_list_length (history->priv->links); - if (history->priv->current_index < length - 1) { - GList *l = g_list_nth (history->priv->links, - history->priv->current_index + 1); - - if (l->prev) { - l->prev->next = NULL; - free_links_list (l); - } else { - free_links_list (history->priv->links); - history->priv->links = NULL; + for (l = history->priv->links; l; l = l->next) { + if (!strcmp (ev_link_get_title (EV_LINK (l->data)), ev_link_get_title (link))) { + g_object_unref (G_OBJECT (l->data)); + history->priv->links = g_list_delete_link (history->priv->links, l); + break; } } g_object_ref (link); history->priv->links = g_list_append (history->priv->links, link); - - length = g_list_length (history->priv->links); - history->priv->current_index = length - 1; -} - -void -ev_history_add_page (EvHistory *history, int page, const gchar *label) -{ - EvLink *link; - EvLinkDest *dest; - EvLinkAction *action; - gchar *title; - - g_return_if_fail (EV_IS_HISTORY (history)); + + if (g_list_length (history->priv->links) > HISTORY_LENGTH) { + g_object_unref (G_OBJECT (history->priv->links->data)); + history->priv->links = g_list_delete_link (history->priv->links, + history->priv->links); + } - title = g_strdup_printf (_("Page: %s"), label); - - dest = ev_link_dest_new_page (page); - action = ev_link_action_new_dest (dest); - link = ev_link_new (title, action); - g_free (title); - - ev_history_add_link (history, link); + g_signal_emit (history, signals[HISTORY_CHANGED], 0); } EvLink * @@ -199,26 +140,9 @@ ev_history_get_n_links (EvHistory *history) return g_list_length (history->priv->links); } -int -ev_history_get_current_index (EvHistory *history) -{ - g_return_val_if_fail (EV_IS_HISTORY (history), -1); - - return history->priv->current_index; -} - -void -ev_history_set_current_index (EvHistory *history, int index) -{ - g_return_if_fail (EV_IS_HISTORY (history)); - - history->priv->current_index = index; - - g_object_notify (G_OBJECT (history), "index"); -} - EvHistory * ev_history_new (void) { return EV_HISTORY (g_object_new (EV_TYPE_HISTORY, NULL)); } +