]> www.fi.muni.cz Git - evince.git/commitdiff
Add a signal for link activation.
authorMarco Pesenti Gritti <mpg@redhat.com>
Thu, 8 Sep 2005 09:44:27 +0000 (09:44 +0000)
committerMarco Pesenti Gritti <marco@src.gnome.org>
Thu, 8 Sep 2005 09:44:27 +0000 (09:44 +0000)
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

ChangeLog
shell/ev-page-cache.c
shell/ev-page-cache.h
shell/ev-sidebar-links.c
shell/ev-sidebar-links.h
shell/ev-view.c
shell/ev-view.h
shell/ev-window.c

index 89e97c2c839eba688907423e674d360d6ec27fda..a9d259f63c5b2c3c967032abaad1cf84cf428bd0 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,23 @@
+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
+
 2005-09-08  Marco Pesenti Gritti  <mpg@redhat.com>
 
        * lib/ev-tooltip.c: (ev_tooltip_set_position):
index eb88ed9d607880b346382bc6378e848a1d40c5ae..29d2179bf8f11871b0398d3715f4c151f7427738 100644 (file)
@@ -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)
 {
index ae0c1796b36e9e4481a816ced71846093bbf80e2..0d9d2b6a3b95f38bfe3705d3715622ffa753a832 100644 (file)
@@ -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);
 
index 58dac08ca9f835ed39c9688dc128c00bf8a3f80d..4107063ad2310fd8049df3a1bb0adc0931f3ca32 100644 (file)
@@ -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);
 
index b9691e35a6bcf566ecf4136fd73de24990636d30..533f99c8b3098add88cb1de45249653eee4d3d68 100644 (file)
@@ -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);
index fa0f087635b922e3c720859b5342418136faa7e1..49b0be61aaacbb15277a91244419cd7a6d418365 100644 (file)
@@ -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);
                }
        }
 
index 09ac1eec1e699750e2d24d27d763f82d1e7599c4..ad60e707dd1b550f2c3e423dc9e113f68ec6517b 100644 (file)
@@ -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
 
index 139ab675291db97c86f5a484081a631c3ed4862c..ac6dcd98c2557db868d0306203893b5e16310664 100644 (file)
@@ -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);
 }
 
@@ -3214,6 +3214,12 @@ window_configure_event_cb (EvWindow *window, GdkEventConfigure *event, gpointer
        return FALSE;
 }
 
+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)
 {
@@ -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),