diff options
author | Nickolay V. Shmyrev <nshmyrev@yandex.ru> | 2007-01-28 20:43:21 (GMT) |
---|---|---|
committer | Nickolay V. Shmyrev <nshmyrev@src.gnome.org> | 2007-01-28 20:43:21 (GMT) |
commit | 4bb9bc83e2de5cd88fa2e3f81a7da6e7d81cbf99 (patch) | |
tree | 383ed65fe7f662c84084859ec42a655a1772f058 /shell/ev-history.c | |
parent | 40bdbed8a127356fadf9790aa0b479854c1c1d22 (diff) |
Implements another history variant
2007-01-28 Nickolay V. Shmyrev <nshmyrev@yandex.ru>
* NOTES:
* backend/djvu/djvu-links.c: (djvu_links_get_links_model):
* backend/pdf/ev-poppler.cc:
* libdocument/ev-document-links.h:
* libdocument/ev-link.c: (ev_link_get_page):
* libdocument/ev-link.h:
* shell/ev-history.c: (ev_history_init), (ev_history_class_init),
(ev_history_add_link):
* shell/ev-history.h:
* shell/ev-navigation-action.c: (activate_menu_item_cb),
(new_history_menu_item), (build_menu):
* shell/ev-page-cache.c: (ev_page_cache_set_current_page_history):
* shell/ev-sidebar-links.c: (create_loading_model),
(print_section_cb), (ev_sidebar_links_construct),
(fill_page_labels), (update_page_callback_foreach),
(update_page_callback), (job_finished_callback):
* shell/ev-view.c: (ev_view_handle_link):
* shell/ev-window.c: (ev_window_find_chapter),
(ev_window_add_history), (view_handle_link_cb),
(history_changed_cb):
Implements another history variant
svn path=/trunk/; revision=2264
Diffstat (limited to 'shell/ev-history.c')
-rw-r--r-- | shell/ev-history.c | 119 |
1 files changed, 18 insertions, 101 deletions
diff --git a/shell/ev-history.c b/shell/ev-history.c index 87a506f..c06fa25 100644 --- a/shell/ev-history.c +++ b/shell/ev-history.c @@ -20,18 +20,13 @@ #include "config.h" #include <glib/gi18n.h> +#include <string.h> #include "ev-history.h" struct _EvHistoryPrivate { GList *links; - int current_index; -}; - -enum { - PROP_0, - PROP_INDEX }; static void ev_history_init (EvHistory *history); @@ -47,7 +42,6 @@ ev_history_init (EvHistory *history) history->priv = EV_HISTORY_GET_PRIVATE (history); history->priv->links = NULL; - history->priv->current_index = -1; } static void @@ -68,102 +62,42 @@ ev_history_finalize (GObject *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)); 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)); + 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)); - - 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); + + 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); + } } EvLink * @@ -186,26 +120,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)); } + |