[libgda/LIBGDA_4.2] Honor the GdauiDataSelector::selection-changed signal for GdauiForm and GdauiGrid



commit 8db0d6e0c6cdf081b129e5e9df49e5cd8c28c021
Author: Vivien Malerba <malerba gnome-db org>
Date:   Tue Oct 18 21:09:52 2011 +0200

    Honor the GdauiDataSelector::selection-changed signal for GdauiForm and GdauiGrid

 libgda-ui/gdaui-form.c |   34 ++++++++++++++++++++++++++++++++++
 libgda-ui/gdaui-grid.c |   31 +++++++++++++++++++++++++++++++
 2 files changed, 65 insertions(+), 0 deletions(-)
---
diff --git a/libgda-ui/gdaui-form.c b/libgda-ui/gdaui-form.c
index 9bd6d7e..26c675b 100644
--- a/libgda-ui/gdaui-form.c
+++ b/libgda-ui/gdaui-form.c
@@ -30,6 +30,7 @@
 
 static void gdaui_form_class_init (GdauiFormClass * class);
 static void gdaui_form_init (GdauiForm *wid);
+static void gdaui_form_dispose (GObject *object);
 
 static void gdaui_form_set_property (GObject *object,
 				     guint param_id,
@@ -145,6 +146,7 @@ gdaui_form_class_init (GdauiFormClass *class)
 	GObjectClass   *object_class = G_OBJECT_CLASS (class);
 
 	parent_class = g_type_class_peek_parent (class);
+	object_class->dispose = gdaui_form_dispose;
 
 	/* Properties */
 
@@ -180,6 +182,12 @@ form_layout_changed_cb (G_GNUC_UNUSED GdauiBasicForm *raw_form, GdauiForm *form)
 }
 
 static void
+form_selection_changed_cb (G_GNUC_UNUSED GdauiRawForm *rawform, GdauiForm *form)
+{
+	g_signal_emit_by_name (G_OBJECT (form), "selection-changed");
+}
+
+static void
 gdaui_form_init (GdauiForm *form)
 {
 	form->priv = g_new0 (GdauiFormPriv, 1);
@@ -191,6 +199,8 @@ gdaui_form_init (GdauiForm *form)
 	gtk_widget_show (form->priv->raw_form);
 	g_signal_connect (form->priv->raw_form, "layout-changed",
 			  G_CALLBACK (form_layout_changed_cb), form);
+	g_signal_connect (form->priv->raw_form, "selection-changed",
+			  G_CALLBACK (form_selection_changed_cb), form);
 
 	form->priv->info = gdaui_data_proxy_info_new (GDAUI_DATA_PROXY (form->priv->raw_form),
 						      GDAUI_DATA_PROXY_INFO_CURRENT_ROW |
@@ -200,6 +210,30 @@ gdaui_form_init (GdauiForm *form)
 
 }
 
+static void
+gdaui_form_dispose (GObject *object)
+{
+	GdauiForm *form;
+
+	g_return_if_fail (GDAUI_IS_FORM (object));
+	form = GDAUI_FORM (object);
+
+	if (form->priv) {
+		g_signal_handlers_disconnect_by_func (form->priv->raw_form,
+						      G_CALLBACK (form_layout_changed_cb), form);
+		g_signal_handlers_disconnect_by_func (form->priv->raw_form,
+						      G_CALLBACK (form_selection_changed_cb), form);
+
+		/* the private area itself */
+		g_free (form->priv);
+		form->priv = NULL;
+	}
+
+	/* for the parent class */
+	parent_class->dispose (object);
+}
+
+
 /**
  * gdaui_form_new:
  * @model: a #GdaDataModel
diff --git a/libgda-ui/gdaui-grid.c b/libgda-ui/gdaui-grid.c
index 4638073..0afa3e7 100644
--- a/libgda-ui/gdaui-grid.c
+++ b/libgda-ui/gdaui-grid.c
@@ -30,6 +30,7 @@
 
 static void gdaui_grid_class_init (GdauiGridClass * class);
 static void gdaui_grid_init (GdauiGrid *wid);
+static void gdaui_grid_dispose (GObject *object);
 
 static void gdaui_grid_set_property (GObject *object,
 				     guint param_id,
@@ -146,6 +147,7 @@ gdaui_grid_class_init (GdauiGridClass *class)
 	GObjectClass   *object_class = G_OBJECT_CLASS (class);
 
 	parent_class = g_type_class_peek_parent (class);
+	object_class->dispose = gdaui_grid_dispose;
 
 	/* Properties */
         object_class->set_property = gdaui_grid_set_property;
@@ -170,6 +172,12 @@ gdaui_grid_class_init (GdauiGridClass *class)
 }
 
 static void
+raw_grid_selection_changed_cb (G_GNUC_UNUSED GdauiRawGrid *rawgrid, GdauiGrid *grid)
+{
+	g_signal_emit_by_name (G_OBJECT (grid), "selection-changed");
+}
+
+static void
 gdaui_grid_init (GdauiGrid *grid)
 {
 	GtkWidget *sw;
@@ -187,6 +195,8 @@ gdaui_grid_init (GdauiGrid *grid)
 	grid->priv->raw_grid = gdaui_raw_grid_new (NULL);
 	gtk_container_add (GTK_CONTAINER (sw), grid->priv->raw_grid);
 	gtk_widget_show (grid->priv->raw_grid);
+	g_signal_connect (grid->priv->raw_grid, "selection-changed",
+			  G_CALLBACK (raw_grid_selection_changed_cb), grid);
 
 	grid->priv->info = gdaui_data_proxy_info_new (GDAUI_DATA_PROXY (grid->priv->raw_grid),
 						      GDAUI_DATA_PROXY_INFO_CURRENT_ROW);
@@ -194,6 +204,27 @@ gdaui_grid_init (GdauiGrid *grid)
 	gtk_widget_show (grid->priv->info);
 }
 
+static void
+gdaui_grid_dispose (GObject *object)
+{
+	GdauiGrid *grid;
+
+	g_return_if_fail (GDAUI_IS_GRID (object));
+	grid = GDAUI_GRID (object);
+
+	if (grid->priv) {
+		g_signal_handlers_disconnect_by_func (grid->priv->raw_grid,
+						      G_CALLBACK (raw_grid_selection_changed_cb), grid);
+
+		/* the private area itself */
+		g_free (grid->priv);
+		grid->priv = NULL;
+	}
+
+	/* for the parent class */
+	parent_class->dispose (object);
+}
+
 /**
  * gdaui_grid_new:
  * @model: a #GdaDataModel



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