Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/shell
diff options
context:
space:
mode:
authorMarco Pesenti Gritti <mpg@redhat.com>2005-09-08 09:44:27 (GMT)
committer Marco Pesenti Gritti <marco@src.gnome.org>2005-09-08 09:44:27 (GMT)
commit4942d62b873cfac27dc8e4bf3c800f22e0890d0c (patch)
tree7331de5002123b3e27eb8f0541954de95288ff78 /shell
parentc9b59f59087e4a65eb67a93dbbae5b5589dc0fd8 (diff)
Add a signal for link activation.
2005-09-08 Marco Pesenti Gritti <mpg@redhat.com> * shell/ev-sidebar-links.c: (ev_sidebar_links_class_init), (selection_changed_callback): * shell/ev-sidebar-links.h: Add a signal for link activation. * shell/ev-view.c: (ev_view_goto_link), (ev_view_button_release_event): * shell/ev-view.h: * shell/ev-window.c: (sidebar_links_link_activated_cb), (ev_window_init): Implement the signal so that we can handle all link types. * shell/ev-page-cache.c: Remove unused set_link function
Diffstat (limited to 'shell')
-rw-r--r--shell/ev-page-cache.c10
-rw-r--r--shell/ev-page-cache.h2
-rw-r--r--shell/ev-sidebar-links.c16
-rw-r--r--shell/ev-sidebar-links.h3
-rw-r--r--shell/ev-view.c8
-rw-r--r--shell/ev-view.h4
-rw-r--r--shell/ev-window.c12
7 files changed, 34 insertions, 21 deletions
diff --git a/shell/ev-page-cache.c b/shell/ev-page-cache.c
index eb88ed9..29d2179 100644
--- a/shell/ev-page-cache.c
+++ b/shell/ev-page-cache.c
@@ -341,16 +341,6 @@ ev_page_cache_set_page_label (EvPageCache *page_cache,
return FALSE;
}
-void
-ev_page_cache_set_link (EvPageCache *page_cache,
- EvLink *link)
-{
- g_return_if_fail (EV_IS_PAGE_CACHE (page_cache));
- g_return_if_fail (EV_IS_LINK (link));
-
- ev_page_cache_set_current_page (page_cache, ev_link_get_page (link));
-}
-
const char *
ev_page_cache_get_title (EvPageCache *page_cache)
{
diff --git a/shell/ev-page-cache.h b/shell/ev-page-cache.h
index ae0c179..0d9d2b6 100644
--- a/shell/ev-page-cache.h
+++ b/shell/ev-page-cache.h
@@ -66,8 +66,6 @@ void ev_page_cache_set_current_page (EvPageCache *page_cache,
int page);
gboolean ev_page_cache_set_page_label (EvPageCache *page_cache,
const char *page_label);
-void ev_page_cache_set_link (EvPageCache *page_cache,
- EvLink *link);
gboolean ev_page_cache_next_page (EvPageCache *page_cache);
gboolean ev_page_cache_prev_page (EvPageCache *page_cache);
diff --git a/shell/ev-sidebar-links.c b/shell/ev-sidebar-links.c
index 58dac08..4107063 100644
--- a/shell/ev-sidebar-links.c
+++ b/shell/ev-sidebar-links.c
@@ -55,6 +55,10 @@ enum {
PROP_WIDGET,
};
+enum {
+ LINK_ACTIVATED,
+ N_SIGNALS
+};
static void links_page_num_func (GtkTreeViewColumn *tree_column,
GtkCellRenderer *cell,
@@ -77,6 +81,7 @@ static gboolean ev_sidebar_links_support_document (EvSidebarPage *sidebar_page,
EvDocument *document);
static const gchar* ev_sidebar_links_get_label (EvSidebarPage *sidebar_page);
+static guint signals[N_SIGNALS];
G_DEFINE_TYPE_EXTENDED (EvSidebarLinks,
ev_sidebar_links,
@@ -177,6 +182,14 @@ ev_sidebar_links_class_init (EvSidebarLinksClass *ev_sidebar_links_class)
g_object_class->get_property = ev_sidebar_links_get_property;
g_object_class->dispose = ev_sidebar_links_dispose;
+ signals[LINK_ACTIVATED] = g_signal_new ("link-activated",
+ G_TYPE_FROM_CLASS (g_object_class),
+ G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+ G_STRUCT_OFFSET (EvSidebarLinksClass, link_activated),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__OBJECT,
+ G_TYPE_NONE, 1, G_TYPE_OBJECT);
+
g_object_class_install_property (g_object_class,
PROP_MODEL,
g_param_spec_object ("model",
@@ -216,8 +229,7 @@ selection_changed_callback (GtkTreeSelection *selection,
g_signal_handler_block (ev_sidebar_links->priv->page_cache,
ev_sidebar_links->priv->page_changed_id);
- /* FIXME: we should handle this better. This breaks w/ URLs */
- ev_page_cache_set_link (ev_sidebar_links->priv->page_cache, link);
+ g_signal_emit (ev_sidebar_links, signals[LINK_ACTIVATED], 0, link);
g_signal_handler_unblock (ev_sidebar_links->priv->page_cache,
ev_sidebar_links->priv->page_changed_id);
diff --git a/shell/ev-sidebar-links.h b/shell/ev-sidebar-links.h
index b9691e3..533f99c 100644
--- a/shell/ev-sidebar-links.h
+++ b/shell/ev-sidebar-links.h
@@ -48,6 +48,9 @@ struct _EvSidebarLinks {
struct _EvSidebarLinksClass {
GtkVBoxClass base_class;
+
+ void (* link_activated) (EvSidebarLinks *sidebar_links,
+ EvLink *link);
};
GType ev_sidebar_links_get_type (void);
diff --git a/shell/ev-view.c b/shell/ev-view.c
index fa0f087..49b0be6 100644
--- a/shell/ev-view.c
+++ b/shell/ev-view.c
@@ -245,8 +245,6 @@ static void find_page_at_location (EvView
static EvLink* get_link_at_location (EvView *view,
gdouble x,
gdouble y);
-static void go_to_link (EvView *view,
- EvLink *link);
static char* tip_from_link (EvView *view,
EvLink *link);
@@ -1108,8 +1106,8 @@ scroll_to_xyz_link (EvView *view, EvLink *link)
gtk_adjustment_set_value (view->vadjustment, view_point.y);
}
-static void
-go_to_link (EvView *view, EvLink *link)
+void
+ev_view_goto_link (EvView *view, EvLink *link)
{
EvLinkType type;
const char *uri;
@@ -1641,7 +1639,7 @@ ev_view_button_release_event (GtkWidget *widget,
link = get_link_at_location (view, event->x + view->scroll_x, event->y + view->scroll_y);
if (link) {
- go_to_link (view, link);
+ ev_view_goto_link (view, link);
}
}
diff --git a/shell/ev-view.h b/shell/ev-view.h
index 09ac1ee..ad60e70 100644
--- a/shell/ev-view.h
+++ b/shell/ev-view.h
@@ -118,9 +118,11 @@ const char *ev_view_get_find_status (EvView *view);
void ev_view_hide_cursor (EvView *view);
void ev_view_show_cursor (EvView *view);
-/* Scrolling */
+/* Navigation */
void ev_view_scroll (EvView *view,
EvScrollType scroll);
+void ev_view_goto_link (EvView *view,
+ EvLink *link);
G_END_DECLS
diff --git a/shell/ev-window.c b/shell/ev-window.c
index 139ab67..ac6dcd9 100644
--- a/shell/ev-window.c
+++ b/shell/ev-window.c
@@ -2980,7 +2980,7 @@ activate_link_cb (EvPageAction *page_action, EvLink *link, EvWindow *window)
{
g_return_if_fail (EV_IS_WINDOW (window));
- ev_page_cache_set_link (window->priv->page_cache, link);
+ ev_view_goto_link (EV_VIEW (window->priv->view), link);
gtk_widget_grab_focus (window->priv->view);
}
@@ -3215,6 +3215,12 @@ window_configure_event_cb (EvWindow *window, GdkEventConfigure *event, gpointer
}
static void
+sidebar_links_link_activated_cb (EvSidebarLinks *sidebar_links, EvLink *link, EvWindow *window)
+{
+ ev_view_goto_link (EV_VIEW (window->priv->view), link);
+}
+
+static void
ev_window_init (EvWindow *ev_window)
{
GtkActionGroup *action_group;
@@ -3312,6 +3318,10 @@ ev_window_init (EvWindow *ev_window)
"notify::model",
G_CALLBACK (sidebar_widget_model_set),
ev_window);
+ g_signal_connect (sidebar_widget,
+ "link_activated",
+ G_CALLBACK (sidebar_links_link_activated_cb),
+ ev_window);
sidebar_page_main_widget_update_cb (G_OBJECT (sidebar_widget), NULL, ev_window);
gtk_widget_show (sidebar_widget);
ev_sidebar_add_page (EV_SIDEBAR (ev_window->priv->sidebar),