From 4942d62b873cfac27dc8e4bf3c800f22e0890d0c Mon Sep 17 00:00:00 2001 From: Marco Pesenti Gritti Date: Thu, 08 Sep 2005 09:44:27 +0000 Subject: Add a signal for link activation. 2005-09-08 Marco Pesenti Gritti * 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 --- diff --git a/ChangeLog b/ChangeLog index 89e97c2..a9d259f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,25 @@ 2005-09-08 Marco Pesenti Gritti + * 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 + +2005-09-08 Marco Pesenti Gritti + * lib/ev-tooltip.c: (ev_tooltip_set_position): Add some space from the cursor, hardcoded but I couldnt 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), -- cgit v0.9.1