*
* 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 <glib/gi18n.h>
+#include <string.h>
#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))
free_links_list (history->priv->links);
- parent_class->finalize (object);
+ G_OBJECT_CLASS (ev_history_parent_class)->finalize (object);
}
static void
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));
+ 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;
-
- g_print ("Set current\n");
-}
-
-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 *
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));
}
+