[libgda] Browser: now schema is updated on meta-update



commit bad3b85659683931c811c22a1ea06484ec41b491
Author: Daniel Espinosa Ortiz <esodan gmail com>
Date:   Fri Mar 8 18:35:36 2019 -0600

    Browser: now schema is updated on meta-update
    
    Fix https://gitlab.gnome.org/GNOME/libgda/issues/170

 tools/browser/browser-window.c                       | 11 +++++++++++
 tools/browser/browser-window.h                       |  1 +
 tools/browser/schema-browser/objects-index.c         |  5 +++++
 .../schema-browser/schema-browser-perspective.c      | 20 +++++++++++++++-----
 4 files changed, 32 insertions(+), 5 deletions(-)
---
diff --git a/tools/browser/browser-window.c b/tools/browser/browser-window.c
index 0b7f49a73..15d6ad3bf 100644
--- a/tools/browser/browser-window.c
+++ b/tools/browser/browser-window.c
@@ -59,6 +59,7 @@ static void cnc_status_changed_cb (TConnection *tcnc, GdaConnectionStatus status
 
 enum {
         FULLSCREEN_CHANGED,
+        META_UPDATED,
         LAST_SIGNAL
 };
 
@@ -140,6 +141,15 @@ browser_window_class_init (BrowserWindowClass *klass)
                               g_cclosure_marshal_VOID__BOOLEAN,
                               G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
 
+       browser_window_signals[META_UPDATED] =
+                g_signal_new ("meta-updated",
+                              G_TYPE_FROM_CLASS (object_class),
+                              G_SIGNAL_RUN_LAST,
+                              G_STRUCT_OFFSET (BrowserWindowClass, meta_updated),
+                              NULL, NULL,
+                              NULL,
+                              G_TYPE_NONE, 1, G_TYPE_OBJECT);
+
        object_class->dispose = browser_window_dispose;
 }
 
@@ -724,6 +734,7 @@ connection_meta_update_cb (G_GNUC_UNUSED GSimpleAction *action, GVariant *parame
     gtk_widget_destroy (msg);
     g_clear_error (&error);
   }
+  g_signal_emit (bwin, browser_window_signals[META_UPDATED], 0, bwin->priv->tcnc, NULL);
        //gtk_widget_insert_action_group (GTK_WIDGET (bwin), "win", NULL);
 }
 
diff --git a/tools/browser/browser-window.h b/tools/browser/browser-window.h
index 360aa188b..3e8c5be46 100644
--- a/tools/browser/browser-window.h
+++ b/tools/browser/browser-window.h
@@ -50,6 +50,7 @@ struct _BrowserWindowClass
        
        /* signals */
        void                (*fullscreen_changed) (BrowserWindow *bwin, gboolean fullscreen);
+       void                (*meta_updated) (BrowserWindow *bwin, GdaConnection *cnc);
 };
 
 /**
diff --git a/tools/browser/schema-browser/objects-index.c b/tools/browser/schema-browser/objects-index.c
index b6bc21c39..3320b3d92 100644
--- a/tools/browser/schema-browser/objects-index.c
+++ b/tools/browser/schema-browser/objects-index.c
@@ -82,6 +82,8 @@ static void
 objects_index_init (ObjectsIndex *index, G_GNUC_UNUSED ObjectsIndexClass *klass)
 {
        index->priv = g_new0 (ObjectsIndexPrivate, 1);
+       index->priv->tcnc = NULL;
+       index->priv->cloud = NULL;
 
        gtk_orientable_set_orientation (GTK_ORIENTABLE (index), GTK_ORIENTATION_VERTICAL);
 }
@@ -196,12 +198,15 @@ objects_index_update (ObjectsIndex *index)
                g_signal_handlers_disconnect_by_func (GTK_WIDGET (index->priv->cloud),
                                                      G_CALLBACK (cloud_object_selected_cb), index);
                gtk_widget_destroy (GTK_WIDGET (index->priv->cloud));
+               index->priv->cloud = NULL;
+               g_message ("Destroied cloud object");
        }
 
        mstruct = t_connection_get_meta_struct (index->priv->tcnc);
        cloud = objects_cloud_new (mstruct, OBJECTS_CLOUD_TYPE_TABLE);
        objects_cloud_show_schemas (OBJECTS_CLOUD (cloud), TRUE);
        gtk_box_pack_start (GTK_BOX (index), cloud, TRUE, TRUE, 0);
+       gtk_widget_show_all (GTK_WIDGET (index));
        index->priv->cloud = OBJECTS_CLOUD (cloud);
        g_signal_connect (cloud, "selected",
                          G_CALLBACK (cloud_object_selected_cb), index);
diff --git a/tools/browser/schema-browser/schema-browser-perspective.c 
b/tools/browser/schema-browser/schema-browser-perspective.c
index 646b9c08b..6cf86549d 100644
--- a/tools/browser/schema-browser/schema-browser-perspective.c
+++ b/tools/browser/schema-browser/schema-browser-perspective.c
@@ -55,6 +55,7 @@ struct _SchemaBrowserPerspectivePrivate {
        GtkWidget *favorites;
        gboolean favorites_shown;
        BrowserWindow *bwin;
+       GtkWidget *objects_index;
 };
 
 GType
@@ -124,6 +125,8 @@ static void fav_selection_changed_cb (GtkWidget *widget, gint fav_id, TFavorites
                                      const gchar *selection, SchemaBrowserPerspective *bpers);
 static void objects_index_selection_changed_cb (GtkWidget *widget, TFavoritesType fav_type,
                                                const gchar *selection, SchemaBrowserPerspective *bpers);
+
+static void meta_updated (BrowserWindow *bwin, GdaConnection *cnc, SchemaBrowserPerspective *perps);
 /**
  * schema_browser_perspective_new
  *
@@ -159,15 +162,15 @@ schema_browser_perspective_new (BrowserWindow *bwin)
        perspective->priv->notebook = nb;
        gtk_paned_add2 (GTK_PANED (paned), nb);
 
-       wid = objects_index_new (tcnc);
-       g_signal_connect (wid, "selection-changed",
+       perspective->priv->objects_index = GTK_WIDGET (objects_index_new (tcnc));
+       g_signal_connect (perspective->priv->objects_index, "selection-changed",
                          G_CALLBACK (objects_index_selection_changed_cb), bpers);
-       gtk_notebook_append_page (GTK_NOTEBOOK (nb), wid,
+       gtk_notebook_append_page (GTK_NOTEBOOK (nb), perspective->priv->objects_index,
                                  ui_make_tab_label_with_icon (_("Index"), "help-about", FALSE, NULL));
-       gtk_notebook_set_tab_reorderable (GTK_NOTEBOOK (nb), wid, TRUE);
+       gtk_notebook_set_tab_reorderable (GTK_NOTEBOOK (nb), perspective->priv->objects_index, TRUE);
        gtk_notebook_set_group_name (GTK_NOTEBOOK (nb), "schema-browser");
 
-       gtk_notebook_set_menu_label (GTK_NOTEBOOK (nb), wid,
+       gtk_notebook_set_menu_label (GTK_NOTEBOOK (nb), perspective->priv->objects_index,
                                     ui_make_tab_label_with_icon (_("Index"), "help-about", FALSE, NULL));
        gtk_box_pack_start (GTK_BOX (bpers), paned, TRUE, TRUE, 0);
        gtk_widget_show_all (paned);
@@ -175,9 +178,16 @@ schema_browser_perspective_new (BrowserWindow *bwin)
        if (perspective->priv->favorites && !perspective->priv->favorites_shown)
                gtk_widget_hide (perspective->priv->favorites);
 
+       g_signal_connect (bwin, "meta-updated", G_CALLBACK (meta_updated), perspective);
+
        return bpers;
 }
 
+static void meta_updated (BrowserWindow *bwin, GdaConnection *cnc, SchemaBrowserPerspective *perps)
+{
+       objects_index_update ((ObjectsIndex*) perps->priv->objects_index);
+}
+
 static void
 close_button_clicked_cb (G_GNUC_UNUSED GtkWidget *wid, GtkWidget *page_widget)
 {


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