[gedit/wip/loader-saver: 2/3] tab: clear_loading() function



commit d51500b6a08a0301f7ec8bd4054ce5ed0b98d557
Author: Sébastien Wilmet <swilmet gnome org>
Date:   Wed Jun 25 19:54:25 2014 +0200

    tab: clear_loading() function

 gedit/gedit-tab.c |   35 ++++++++++++++++++++++++++++-------
 1 files changed, 28 insertions(+), 7 deletions(-)
---
diff --git a/gedit/gedit-tab.c b/gedit/gedit-tab.c
index 953a271..499cac2 100644
--- a/gedit/gedit-tab.c
+++ b/gedit/gedit-tab.c
@@ -221,6 +221,14 @@ gedit_tab_set_property (GObject      *object,
 }
 
 static void
+clear_loading (GeditTab *tab)
+{
+       g_clear_object (&tab->priv->loader);
+       g_clear_object (&tab->priv->cancellable);
+       tab->priv->load_create = FALSE;
+}
+
+static void
 gedit_tab_dispose (GObject *object)
 {
        GeditTab *tab = GEDIT_TAB (object);
@@ -235,6 +243,8 @@ gedit_tab_dispose (GObject *object)
        g_clear_object (&tab->priv->tmp_save_location);
        g_clear_object (&tab->priv->editor);
 
+       clear_loading (tab);
+
        G_OBJECT_CLASS (gedit_tab_parent_class)->dispose (object);
 }
 
@@ -608,6 +618,7 @@ io_loading_error_info_bar_response (GtkWidget *info_bar,
                        tab->priv->editable = TRUE;
                        gtk_text_view_set_editable (GTK_TEXT_VIEW (view), TRUE);
                        set_info_bar (tab, NULL, GTK_RESPONSE_NONE);
+                       clear_loading (tab);
                        break;
 
                default:
@@ -661,6 +672,8 @@ unrecoverable_reverting_error_info_bar_response (GtkWidget *info_bar,
 
        set_info_bar (tab, NULL, GTK_RESPONSE_NONE);
 
+       clear_loading (tab);
+
        view = gedit_tab_get_view (tab);
        gtk_widget_grab_focus (GTK_WIDGET (view));
 }
@@ -2043,13 +2056,11 @@ load_cb (GtkSourceFileLoader *loader,
 
        if (error == NULL)
        {
-               g_clear_object (&tab->priv->loader);
-               g_clear_object (&tab->priv->cancellable);
-               tab->priv->load_create = FALSE;
-
-               g_signal_emit_by_name (doc, "loaded", NULL);
+               clear_loading (tab);
        }
 
+       g_signal_emit_by_name (doc, "loaded", NULL);
+
 end:
        /* Async operation finished. */
        g_object_unref (tab);
@@ -2117,11 +2128,16 @@ _gedit_tab_load (GeditTab                *tab,
        g_return_if_fail (GEDIT_IS_TAB (tab));
        g_return_if_fail (G_IS_FILE (location));
        g_return_if_fail (tab->priv->state == GEDIT_TAB_STATE_NORMAL);
-       g_return_if_fail (tab->priv->loader == NULL);
 
        doc = gedit_tab_get_document (tab);
        file = gedit_document_get_file (doc);
 
+       if (tab->priv->loader != NULL)
+       {
+               g_warning ("GeditTab: file loader already exists.");
+               g_object_unref (tab->priv->loader);
+       }
+
        tab->priv->loader = gtk_source_file_loader_new (file, location);
 
        tab->priv->load_create = create != FALSE;
@@ -2142,11 +2158,16 @@ _gedit_tab_load_stream (GeditTab                *tab,
        g_return_if_fail (GEDIT_IS_TAB (tab));
        g_return_if_fail (G_IS_INPUT_STREAM (stream));
        g_return_if_fail (tab->priv->state == GEDIT_TAB_STATE_NORMAL);
-       g_return_if_fail (tab->priv->loader == NULL);
 
        doc = gedit_tab_get_document (tab);
        file = gedit_document_get_file (doc);
 
+       if (tab->priv->loader != NULL)
+       {
+               g_warning ("GeditTab: file loader already exists.");
+               g_object_unref (tab->priv->loader);
+       }
+
        tab->priv->loader = gtk_source_file_loader_new_from_stream (file, stream);
 
        load (tab, encoding, line_pos, column_pos);


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