[evince] Add selection-changed signal to EvView to notify that selection has changed



commit 571c029b39457f4971a58f73819f67bd5dcd5145
Author: Carlos Garcia Campos <carlosgc gnome org>
Date:   Mon Jan 11 10:48:17 2010 +0100

    Add selection-changed signal to EvView to notify that selection has changed
    
    And remove has-selection property that was used for that.

 libview/ev-view-private.h |    1 +
 libview/ev-view.c         |   52 ++++++++++----------------------------------
 shell/ev-window.c         |   25 +++++++++------------
 3 files changed, 24 insertions(+), 54 deletions(-)
---
diff --git a/libview/ev-view-private.h b/libview/ev-view-private.h
index 4c2457e..09f6163 100644
--- a/libview/ev-view-private.h
+++ b/libview/ev-view-private.h
@@ -193,6 +193,7 @@ struct _EvViewClass {
 					   EvLinkAction   *action);
 	void    (*popup_menu)		  (EvView         *view,
 					   EvLink         *link);
+	void    (*selection_changed)      (EvView         *view);
 };
 
 void _get_page_size_for_scale_and_rotation (EvDocument *document,
diff --git a/libview/ev-view.c b/libview/ev-view.c
index 334cb9b..7ef1dd8 100644
--- a/libview/ev-view.c
+++ b/libview/ev-view.c
@@ -48,16 +48,12 @@
 #define EV_VIEW_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), EV_TYPE_VIEW, EvViewClass))
 
 enum {
-	PROP_0,
-	PROP_HAS_SELECTION
-};
-
-enum {
 	SIGNAL_BINDING_ACTIVATED,
 	SIGNAL_HANDLE_LINK,
 	SIGNAL_EXTERNAL_LINK,
 	SIGNAL_POPUP_MENU,
-	N_SIGNALS,
+	SIGNAL_SELECTION_CHANGED,
+	N_SIGNALS
 };
 
 enum {
@@ -217,10 +213,6 @@ static void       on_adjustment_value_changed                (GtkAdjustment
 /*** GObject ***/
 static void       ev_view_finalize                           (GObject            *object);
 static void       ev_view_destroy                            (GtkObject          *object);
-static void       ev_view_get_property                       (GObject            *object,
-							      guint               prop_id,
-							      GValue             *value,
-							      GParamSpec         *pspec);
 static void       ev_view_class_init                         (EvViewClass        *class);
 static void       ev_view_init                               (EvView             *view);
 
@@ -4207,24 +4199,6 @@ ev_view_get_accessible (GtkWidget *widget)
 }
 
 static void
-ev_view_get_property (GObject *object,
-		      guint prop_id,
-		      GValue *value,
-		      GParamSpec *pspec)
-{
-	EvView *view = EV_VIEW (object);
-
-	switch (prop_id) {
-	        case PROP_HAS_SELECTION:
-			g_value_set_boolean (value,
-					     view->selection_info.selections != NULL);
-			break;
-	        default:
-			G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-	}
-}
-
-static void
 ev_view_class_init (EvViewClass *class)
 {
 	GObjectClass *object_class = G_OBJECT_CLASS (class);
@@ -4234,7 +4208,6 @@ ev_view_class_init (EvViewClass *class)
 	GtkBindingSet *binding_set;
 
 	object_class->finalize = ev_view_finalize;
-	object_class->get_property = ev_view_get_property;
 
 	widget_class->expose_event = ev_view_expose_event;
 	widget_class->button_press_event = ev_view_button_press_event;
@@ -4295,15 +4268,14 @@ ev_view_class_init (EvViewClass *class)
 		         g_cclosure_marshal_VOID__OBJECT,
 		         G_TYPE_NONE, 1,
 			 G_TYPE_OBJECT);
-
-
-	g_object_class_install_property (object_class,
-					 PROP_HAS_SELECTION,
-					 g_param_spec_boolean ("has-selection",
-							       "Has selection",
-							       "The view has selections",
-							       FALSE,
-							       G_PARAM_READABLE));
+	signals[SIGNAL_SELECTION_CHANGED] = g_signal_new ("selection-changed",
+                         G_TYPE_FROM_CLASS (object_class),
+                         G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+                         G_STRUCT_OFFSET (EvViewClass, selection_changed),
+                         NULL, NULL,
+			 g_cclosure_marshal_VOID__VOID,
+                         G_TYPE_NONE, 0,
+                         G_TYPE_NONE);
 
 	binding_set = gtk_binding_set_by_class (class);
 
@@ -5345,7 +5317,7 @@ merge_selection_region (EvView *view,
 	g_list_free (view->selection_info.selections);
 	view->selection_info.selections = new_list;
 	ev_pixbuf_cache_set_selection_list (view->pixbuf_cache, new_list);
-	g_object_notify (G_OBJECT (view), "has-selection");
+	g_signal_emit (view, signals[SIGNAL_SELECTION_CHANGED], 0, NULL);
 
 	new_list_ptr = new_list;
 	old_list_ptr = old_list;
@@ -5488,7 +5460,7 @@ clear_selection (EvView *view)
 	view->selection_info.in_selection = FALSE;
 	if (view->pixbuf_cache)
 		ev_pixbuf_cache_set_selection_list (view->pixbuf_cache, NULL);
-	g_object_notify (G_OBJECT (view), "has-selection");
+	g_signal_emit (view, signals[SIGNAL_SELECTION_CHANGED], 0, NULL);
 }
 
 void
diff --git a/shell/ev-window.c b/shell/ev-window.c
index 086a4be..a22b961 100644
--- a/shell/ev-window.c
+++ b/shell/ev-window.c
@@ -854,6 +854,13 @@ view_handle_link_cb (EvView *view, EvLink *link, EvWindow *window)
 }
 
 static void
+view_selection_changed_cb (EvView   *view,
+			   EvWindow *window)
+{
+	ev_window_update_actions (window);
+}
+
+static void
 ev_window_page_changed_cb (EvWindow        *ev_window,
 			   gint             old_page,
 			   gint             new_page,
@@ -4153,12 +4160,6 @@ ev_window_inverted_colors_changed_cb (EvDocumentModel *model,
 }
 
 static void
-ev_window_has_selection_changed_cb (EvView *view, GParamSpec *pspec, EvWindow *window)
-{
-        ev_window_update_actions (window);
-}
-
-static void
 ev_window_dual_mode_changed_cb (EvDocumentModel *model,
 				GParamSpec      *pspec,
 				EvWindow        *ev_window)
@@ -6287,10 +6288,12 @@ ev_window_init (EvWindow *ev_window)
 	g_signal_connect_object (ev_window->priv->view, "handle-link",
 			         G_CALLBACK (view_handle_link_cb),
 			         ev_window, 0);
-	g_signal_connect_object (ev_window->priv->view,
-			         "popup",
+	g_signal_connect_object (ev_window->priv->view, "popup",
 				 G_CALLBACK (view_menu_popup_cb),
 				 ev_window, 0);
+	g_signal_connect_object (ev_window->priv->view, "selection-changed",
+				 G_CALLBACK (view_selection_changed_cb),
+				 ev_window, 0);
 	gtk_widget_show (ev_window->priv->view);
 	gtk_widget_show (ev_window->priv->password_view);
 
@@ -6336,16 +6339,10 @@ ev_window_init (EvWindow *ev_window)
 			  "notify::dual-page",
 			  G_CALLBACK (ev_window_dual_mode_changed_cb),
 			  ev_window);
-
-	/* Connect to view signals */
 	g_signal_connect (ev_window->priv->model,
 			  "notify::inverted-colors",
 			  G_CALLBACK (ev_window_inverted_colors_changed_cb),
 			  ev_window);
-	g_signal_connect (ev_window->priv->view,
-			  "notify::has-selection",
-			  G_CALLBACK (ev_window_has_selection_changed_cb),
-			  ev_window);
 
      	/* Connect sidebar signals */
 	g_signal_connect (ev_window->priv->sidebar,



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]