[glade3] * gladeui/glade-signal-model.c: Watch the "support-changed" signal on GladeWidget and update sup



commit ffd323a79d05bd2ced358e533617dd6ddc98fef3
Author: Tristan Van Berkom <tristan van berkom gmail com>
Date:   Thu Jan 13 18:21:07 2011 +0900

    	* gladeui/glade-signal-model.c: Watch the "support-changed" signal on GladeWidget and
    	  update support warnings on dummy rows as well as emit "row-changed" for all rows
    
    	* gladeui/glade-signal-editor.c: Left align the warning icon and expand the first
    	  row of the signal tree when loading a widget.

 ChangeLog                     |    8 ++++++
 gladeui/glade-signal-editor.c |   13 +++++++++-
 gladeui/glade-signal-model.c  |   55 ++++++++++++++++++++++++++++++++++------
 gladeui/glade-signal.c        |    2 +
 4 files changed, 68 insertions(+), 10 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 6df5d45..bca39dd 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2011-01-13  Tristan Van Berkom <tristanvb openismus com>
+
+	* gladeui/glade-signal-model.c: Watch the "support-changed" signal on GladeWidget and
+	  update support warnings on dummy rows as well as emit "row-changed" for all rows
+
+	* gladeui/glade-signal-editor.c: Left align the warning icon and expand the first
+	  row of the signal tree when loading a widget.
+
 2011-01-12  Tristan Van Berkom <tristanvb openismus com>
 
 	* gladeui/glade-palette.c: Fixed leaking project (set_project NULL when
diff --git a/gladeui/glade-signal-editor.c b/gladeui/glade-signal-editor.c
index 9c63aef..337a6a9 100644
--- a/gladeui/glade-signal-editor.c
+++ b/gladeui/glade-signal-editor.c
@@ -395,6 +395,8 @@ glade_signal_editor_load_widget (GladeSignalEditor *editor,
 				 GladeWidget *widget)
 {
   GladeSignalEditorPrivate *priv = editor->priv;
+  GtkTreePath *path;
+  GtkTreeIter  iter;
 	
   if (priv->widget != widget)
     {	
@@ -416,6 +418,13 @@ glade_signal_editor_load_widget (GladeSignalEditor *editor,
 
   priv->model = glade_widget_get_signal_model (widget);
   gtk_tree_view_set_model (GTK_TREE_VIEW (priv->signal_tree), priv->model);
+
+  if (gtk_tree_model_iter_children (priv->model, &iter, NULL))
+    {
+      path = gtk_tree_model_get_path (priv->model, &iter);
+      gtk_tree_view_expand_row (GTK_TREE_VIEW (priv->signal_tree), path, FALSE);
+      gtk_tree_path_free (path);
+    }
 }
 
 /**
@@ -751,7 +760,9 @@ glade_signal_editor_init (GladeSignalEditor *self)
 	
   /* version warning */
   renderer = gtk_cell_renderer_pixbuf_new ();
-  g_object_set (G_OBJECT (renderer), "icon-name", GTK_STOCK_DIALOG_WARNING,
+  g_object_set (G_OBJECT (renderer), 
+		"icon-name", GTK_STOCK_DIALOG_WARNING,
+		"xalign", 0.0,
                 NULL);
   gtk_tree_view_column_set_cell_data_func (priv->column_name, renderer,
 					   glade_signal_editor_warning_cell_data_func,
diff --git a/gladeui/glade-signal-model.c b/gladeui/glade-signal-model.c
index b2fccd4..25e79c1 100644
--- a/gladeui/glade-signal-model.c
+++ b/gladeui/glade-signal-model.c
@@ -56,6 +56,7 @@ static void on_glade_signal_model_removed (GladeWidget* widget, const GladeSigna
 					   GladeSignalModel* model);
 static void on_glade_signal_model_changed (GladeWidget* widget, const GladeSignal* signal,
 					   GladeSignalModel* model);	
+static void on_glade_widget_support_changed (GladeWidget *widget, GladeSignalModel* model);
 
 G_DEFINE_TYPE_WITH_CODE (GladeSignalModel, glade_signal_model, G_TYPE_OBJECT,
                          G_IMPLEMENT_INTERFACE (GTK_TYPE_TREE_MODEL,
@@ -133,12 +134,12 @@ glade_signal_model_set_property (GObject *object, guint prop_id, const GValue *v
       g_signal_connect (sig_model->priv->widget,
 			"add-signal-handler",
 			G_CALLBACK (on_glade_signal_model_added), sig_model);
-      g_signal_connect (sig_model->priv->widget,
-			"remove-signal-handler",
+      g_signal_connect (sig_model->priv->widget, "remove-signal-handler",
 			G_CALLBACK (on_glade_signal_model_removed), sig_model);
-      g_signal_connect (sig_model->priv->widget,
-			"change-signal-handler",
-			G_CALLBACK (on_glade_signal_model_changed), sig_model);			
+      g_signal_connect (sig_model->priv->widget, "change-signal-handler",
+			G_CALLBACK (on_glade_signal_model_changed), sig_model);
+      g_signal_connect (sig_model->priv->widget, "support-changed",
+			G_CALLBACK (on_glade_widget_support_changed), sig_model);
       break;
     case PROP_SIGNALS:
       sig_model->priv->signals = g_value_get_pointer (value);
@@ -294,6 +295,8 @@ glade_signal_model_get_dummy_handler (GladeSignalModel* model,
       g_hash_table_insert (model->priv->dummy_signals, 
 			   (gpointer) glade_signal_class_get_name (sig_class), 
 			   signal);
+
+      glade_project_verify_signal (model->priv->widget, signal);
     }
   return signal;
 }
@@ -389,14 +392,12 @@ on_glade_signal_model_changed (GladeWidget* widget, const GladeSignal* signal,
 {
   GtkTreeIter iter;
   GtkTreePath* path;
-  const GladeSignalClass* sig_class =
-    glade_signal_get_class (signal);
+  const GladeSignalClass* sig_class = glade_signal_get_class (signal);
   glade_signal_model_create_signal_iter (model,
 					 glade_signal_class_get_type (sig_class),
 					 signal, 
 					 &iter);
-  path = gtk_tree_model_get_path (GTK_TREE_MODEL (model),
-				  &iter);
+  path = gtk_tree_model_get_path (GTK_TREE_MODEL (model), &iter);
   gtk_tree_model_row_changed (GTK_TREE_MODEL (model),
 			      path,
 			      &iter);
@@ -404,6 +405,42 @@ on_glade_signal_model_changed (GladeWidget* widget, const GladeSignal* signal,
   model->priv->stamp++;
 }
 
+static void
+verify_dummies (const gchar      *signal_name,
+		GladeSignal      *signal,
+		GladeSignalModel *model)
+{
+  glade_project_verify_signal (model->priv->widget, signal);
+
+  on_glade_signal_model_changed (model->priv->widget, signal, model);
+}
+
+static void
+emit_changed (const gchar      *signal_name,
+	      GPtrArray        *signals,
+	      GladeSignalModel *model)
+{
+  gint i;
+  GladeSignal *signal;
+
+  for (i = 0; i < signals->len; i++)
+    {
+      signal = (GladeSignal *)signals->pdata[i];
+      on_glade_signal_model_changed (model->priv->widget, signal, model);
+    }
+}
+
+static void
+on_glade_widget_support_changed (GladeWidget      *widget, 
+				 GladeSignalModel *model)
+{
+  /* Update support warning on dummy signals */
+  g_hash_table_foreach (model->priv->dummy_signals, (GHFunc)verify_dummies, model);
+
+  /* row changed on every row */
+  g_hash_table_foreach (model->priv->signals, (GHFunc)emit_changed, model);
+}
+
 static gboolean
 glade_signal_model_get_iter (GtkTreeModel* model,
                              GtkTreeIter* iter,
diff --git a/gladeui/glade-signal.c b/gladeui/glade-signal.c
index 73efb99..77c8d1a 100644
--- a/gladeui/glade-signal.c
+++ b/gladeui/glade-signal.c
@@ -238,6 +238,8 @@ glade_signal_new (const GladeSignalClass* sig_class,
 		  gboolean after, 
 		  gboolean swapped)
 {
+  g_return_if_fail (sig_class != NULL);
+
   return (GladeSignal *)g_object_new (GLADE_TYPE_SIGNAL,
 				      "class", sig_class,
 				      "handler", handler,



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