X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=shell%2Fev-history.c;h=9b59014ca90eb473af6ca40a6739e266c7136f96;hb=0150c0ba0b405fde29edd989c86e6040e7eb970c;hp=a1e79543bb4e8a9bd35e97c4fefc495f77d1406d;hpb=ff47948e26ca64f7f4897299a38858594ce39ed0;p=evince.git diff --git a/shell/ev-history.c b/shell/ev-history.c index a1e79543..9b59014c 100644 --- a/shell/ev-history.c +++ b/shell/ev-history.c @@ -13,28 +13,34 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * - * $Id$ */ #include "config.h" #include +#include #include "ev-history.h" + +enum +{ + HISTORY_CHANGED, + N_SIGNALS +}; + +static guint signals[N_SIGNALS] = {0, }; + struct _EvHistoryPrivate { GList *links; - int current_index; }; static void ev_history_init (EvHistory *history); static void ev_history_class_init (EvHistoryClass *class); -static GObjectClass *parent_class = NULL; - G_DEFINE_TYPE (EvHistory, ev_history, G_TYPE_OBJECT) #define EV_HISTORY_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), EV_TYPE_HISTORY, EvHistoryPrivate)) @@ -45,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 @@ -62,7 +67,7 @@ ev_history_finalize (GObject *object) free_links_list (history->priv->links); - parent_class->finalize (object); + G_OBJECT_CLASS (ev_history_parent_class)->finalize (object); } static void @@ -72,54 +77,47 @@ ev_history_class_init (EvHistoryClass *class) object_class->finalize = ev_history_finalize; - parent_class = g_type_class_peek_parent (class); + 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) -{ - EvLink *link; - char *title; - - g_return_if_fail (EV_IS_HISTORY (history)); - - title = g_strdup_printf (_("Page %d\n"), page); - link = ev_link_new_page (title, page); - 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); + } + + g_signal_emit (history, signals[HISTORY_CHANGED], 0); } EvLink * @@ -142,24 +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; -} - EvHistory * ev_history_new (void) { return EV_HISTORY (g_object_new (EV_TYPE_HISTORY, NULL)); } +