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=47fa300cb752ae267973c907ddda543c40005635;hpb=2c91588d544c80f08526a54c98b25aabe3777ef7;p=evince.git diff --git a/shell/ev-history.c b/shell/ev-history.c index 47fa300c..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)) @@ -61,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 @@ -71,45 +77,50 @@ 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)); } -void -ev_history_add_link (EvHistory *history, EvBookmark *bookmark) -{ - int length; - - g_return_if_fail (EV_IS_HISTORY (history)); - g_return_if_fail (EV_IS_BOOKMARK (bookmark)); - - g_object_ref (bookmark); - history->priv->links = g_list_append (history->priv->links, - bookmark); - - length = g_list_length (history->priv->links); - history->priv->current_index = length - 1; - - g_print ("Set current\n"); -} +#define HISTORY_LENGTH 7 void -ev_history_add_page (EvHistory *history, int page) +ev_history_add_link (EvHistory *history, EvLink *link) { - EvBookmark *bookmark; - char *title; + GList *l; g_return_if_fail (EV_IS_HISTORY (history)); + g_return_if_fail (EV_IS_LINK (link)); - title = g_strdup_printf (_("Page %d\n"), page); - bookmark = ev_bookmark_new_link (title, page); - g_free (title); + 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; + } + } - ev_history_add_link (history, bookmark); + g_object_ref (link); + history->priv->links = g_list_append (history->priv->links, + 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); } -EvBookmark * +EvLink * ev_history_get_link_nth (EvHistory *history, int index) { GList *l; @@ -118,7 +129,7 @@ ev_history_get_link_nth (EvHistory *history, int index) l = g_list_nth (history->priv->links, index); - return EV_BOOKMARK (l->data); + return EV_LINK (l->data); } int @@ -129,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)); } +