Fix memory leaks from results of gtk_tree_model_get().
[claws.git] / src / plugins / managesieve / sieve_manager.c
index ba19e416eefa44e22acc28fe40346948b34e845a..8a9af4ced484574de5560ef087b6f186b05143dc 100644 (file)
@@ -80,6 +80,13 @@ static GSList *manager_pages = NULL;
                if ((page = (SieveManagerPage *)cur->data) && \
                        page->active_session == session)
 
+void sieve_managers_done()
+{
+       GSList *list = manager_pages;
+       manager_pages = NULL;
+       g_slist_free_full(list, (GDestroyNotify)sieve_manager_done);
+}
+
 static void filters_list_clear(SieveManagerPage *page)
 {
        GtkListStore *list_store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(page->filters_list)));
@@ -179,11 +186,12 @@ static void filter_edit(GtkWidget *widget, SieveManagerPage *page)
 {
        SieveEditorPage *editor;
        SieveSession *session = page->active_session;
+       gchar *filter_name;
 
        if (!session)
                return;
 
-       gchar *filter_name = filters_list_get_selected_filter(page->filters_list);
+       filter_name = filters_list_get_selected_filter(page->filters_list);
        if (!filter_name)
                return;
 
@@ -195,6 +203,8 @@ static void filter_edit(GtkWidget *widget, SieveManagerPage *page)
                sieve_editor_load(editor,
                        (sieve_session_cb_fn)filter_got_load_error, page);
        }
+
+       g_free(filter_name);
 }
 
 static void filter_renamed(SieveSession *session, gboolean abort,
@@ -315,8 +325,8 @@ static void filter_delete(GtkWidget *widget, SieveManagerPage *page)
        g_snprintf(buf, sizeof(buf),
                   _("Do you really want to delete the filter '%s'?"), filter_name);
        if (alertpanel_full(_("Delete filter"), buf,
-                               GTK_STOCK_CANCEL, GTK_STOCK_DELETE, NULL, FALSE,
-                               NULL, ALERT_WARNING, G_ALERTDEFAULT) != G_ALERTALTERNATE)
+                               GTK_STOCK_CANCEL, GTK_STOCK_DELETE, NULL, ALERTFOCUS_FIRST, FALSE,
+                               NULL, ALERT_WARNING) != G_ALERTALTERNATE)
                return;
 
        cmd_data = g_new(CommandDataName, 1);
@@ -450,6 +460,7 @@ static void filters_create_list_view_columns(SieveManagerPage *page,
 {
        GtkTreeViewColumn *column;
        GtkCellRenderer *renderer;
+       GtkWidget *label;
 
        /* Name */
        renderer = gtk_cell_renderer_text_new();
@@ -472,8 +483,14 @@ static void filters_create_list_view_columns(SieveManagerPage *page,
                 NULL);
        gtk_tree_view_append_column(GTK_TREE_VIEW(list_view), column);
        gtk_tree_view_column_set_alignment (column, 0.5);
-       CLAWS_SET_TIP(gtk_tree_view_column_get_widget(column),
+
+       /* the column header needs a widget to have a tooltip */
+       label = gtk_label_new(gtk_tree_view_column_get_title(column));
+       gtk_widget_show(label);
+       gtk_tree_view_column_set_widget(column, label);
+       CLAWS_SET_TIP(label,
                        _("An account can only have one active script at a time."));
+
        g_signal_connect(G_OBJECT(renderer), "toggled",
                         G_CALLBACK(filter_active_toggled), page);
 
@@ -591,6 +608,9 @@ static void account_changed(GtkWidget *widget, SieveManagerPage *page)
        PrefsAccount *account;
        SieveSession *session;
 
+       if (page->accounts_menu == NULL)
+               return;
+
        account_id = combobox_get_active_data(GTK_COMBO_BOX(page->accounts_menu));
        account = account_find_from_id(account_id);
        if (!account)
@@ -657,6 +677,8 @@ static SieveManagerPage *sieve_manager_page_new()
                                      GDK_HINT_MIN_SIZE);
        gtk_widget_set_size_request(window, sieve_config.manager_win_width,
                        sieve_config.manager_win_height);
+       gtk_window_set_type_hint(GTK_WINDOW(window),
+                       GDK_WINDOW_TYPE_HINT_DIALOG);
 
        vbox = gtk_vbox_new (FALSE, 10);
        gtk_container_add (GTK_CONTAINER (window), vbox);
@@ -689,6 +711,7 @@ static SieveManagerPage *sieve_manager_page_new()
        if (!default_account) {
                gtk_widget_destroy(label);
                gtk_widget_destroy(accounts_menu);
+               accounts_menu = NULL;
        }
 
        /* status */
@@ -715,7 +738,7 @@ static SieveManagerPage *sieve_manager_page_new()
 
        /* Buttons */
 
-       vbox_allbuttons = gtk_vbox_new (FALSE, 0);
+       vbox_allbuttons = gtk_vbox_new (FALSE, 8);
        gtk_box_pack_start (GTK_BOX (hbox), vbox_allbuttons, FALSE, FALSE, 0);
 
        /* buttons that depend on there being a connection */
@@ -742,7 +765,7 @@ static SieveManagerPage *sieve_manager_page_new()
                        G_CALLBACK (filter_delete), page);
 
        /* rename */
-       btn = gtk_button_new_with_label("Rename");
+       btn = gtk_button_new_with_label(_("Rename"));
        gtk_box_pack_start (GTK_BOX (vbox_buttons), btn, FALSE, FALSE, 0);
        g_signal_connect (G_OBJECT(btn), "clicked",
                        G_CALLBACK (filter_rename), page);