#include <gtk/gtklabel.h>
#include <gtk/gtkhbox.h>
#include <string.h>
+#include <stdlib.h>
struct _EvPageActionPrivate
{
enum
{
ACTIVATE_LINK,
- ACTIVATE_LABEL,
N_SIGNALS
};
EvPageAction *page = EV_PAGE_ACTION (action);
EvPageCache *page_cache;
const char *text;
- gboolean changed;
+ gchar *page_label;
+
+ EvLinkDest *link_dest;
+ EvLinkAction *link_action;
+ EvLink *link;
+ gchar *link_text;
text = gtk_entry_get_text (GTK_ENTRY (entry));
page_cache = page->priv->page_cache;
- g_signal_emit (action, signals[ACTIVATE_LABEL], 0, text, &changed);
+
+ link_dest = ev_link_dest_new_page_label (text);
+ link_action = ev_link_action_new_dest (link_dest);
+ link_text = g_strdup_printf ("Page: %s", text);
+ link = ev_link_new (link_text, link_action);
- if (!changed) {
- /* rest the entry to the current page if we were unable to
- * change it */
- gchar *page_label =
- ev_page_cache_get_page_label (page_cache,
- ev_page_cache_get_current_page (page_cache));
- gtk_entry_set_text (GTK_ENTRY (entry), page_label);
- gtk_editable_set_position (GTK_EDITABLE (entry), -1);
- g_free (page_label);
- }
+ g_signal_emit (action, signals[ACTIVATE_LINK], 0, link);
+
+ g_object_unref (link);
+ g_free (link_text);
+
+ /* rest the entry to the current page if we were unable to
+ * change it */
+ page_label = ev_page_cache_get_page_label (page_cache,
+ ev_page_cache_get_current_page (page_cache));
+ gtk_entry_set_text (GTK_ENTRY (entry), page_label);
+ gtk_editable_set_position (GTK_EDITABLE (entry), -1);
+ g_free (page_label);
+}
+
+static gboolean page_scroll_cb(GtkWidget *widget, GdkEventScroll *event, EvPageAction* action)
+{
+ gint pageno;
+
+ pageno = ev_page_cache_get_current_page (action->priv->page_cache);
+ if ((event->direction == GDK_SCROLL_DOWN) &&
+ (pageno < ev_page_cache_get_n_pages(action->priv->page_cache) - 1))
+ pageno++;
+ if ((event->direction == GDK_SCROLL_UP) && (pageno > 0))
+ pageno--;
+ ev_page_cache_set_current_page (action->priv->page_cache, pageno);
+
+ return TRUE;
}
static GtkWidget *
gtk_box_set_spacing (GTK_BOX (hbox), 6);
proxy->entry = gtk_entry_new ();
+ g_signal_connect(proxy->entry, "scroll-event",G_CALLBACK(page_scroll_cb),action);
+ gtk_widget_add_events(GTK_WIDGET(proxy->entry),GDK_BUTTON_MOTION_MASK);
gtk_entry_set_width_chars (GTK_ENTRY (proxy->entry), 5);
gtk_box_pack_start (GTK_BOX (hbox), proxy->entry, FALSE, FALSE, 0);
gtk_widget_show (proxy->entry);
g_cclosure_marshal_VOID__OBJECT,
G_TYPE_NONE, 1,
G_TYPE_OBJECT);
- signals[ACTIVATE_LABEL] = g_signal_new ("activate_label",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
- G_STRUCT_OFFSET (EvPageActionClass, activate_label),
- NULL, NULL,
- ev_marshal_BOOLEAN__STRING,
- G_TYPE_BOOLEAN, 1,
- G_TYPE_STRING);
g_object_class_install_property (object_class,
PROP_PAGE_CACHE,