aboutsummaryrefslogtreecommitdiffstats
path: root/plugins/groupwise-features
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/groupwise-features')
-rw-r--r--plugins/groupwise-features/ChangeLog6
-rw-r--r--plugins/groupwise-features/proxy.c121
2 files changed, 76 insertions, 51 deletions
diff --git a/plugins/groupwise-features/ChangeLog b/plugins/groupwise-features/ChangeLog
index 662f48dc91..c192e841f7 100644
--- a/plugins/groupwise-features/ChangeLog
+++ b/plugins/groupwise-features/ChangeLog
@@ -1,3 +1,9 @@
+2005-07-20 Shreyas Srinivasan <sshreyas@novell.com>
+
+ * proxy.c: Fix #310710. Make code little smart. Stop
+ adding tabs continously. Still does not reuse structures
+ on multiple invocations though.
+
2005-07-20 Vivek Jain <jvivek@novell.com>
* mail-send-options.c: connect to sod-signal and get the input data in
diff --git a/plugins/groupwise-features/proxy.c b/plugins/groupwise-features/proxy.c
index 4f9d5f31ef..9b32c2aa4b 100644
--- a/plugins/groupwise-features/proxy.c
+++ b/plugins/groupwise-features/proxy.c
@@ -89,6 +89,7 @@ struct _proxyDialogPrivate {
GtkTreeStore *store;
/* Check Boxes for storing proxy priveleges*/
+ GtkWidget *tab_dialog;
GtkWidget *account_name;
GtkWidget *mail_read;
GtkWidget *mail_write;
@@ -133,6 +134,15 @@ free_proxy_handler (proxyHandler *handler)
handler->proxy_email = NULL;
}
+void
+free_proxy_list (GList *proxy_list)
+{
+ g_list_foreach (proxy_list, (GFunc) free_proxy_handler, NULL);
+ g_list_free (proxy_list);
+ proxy_list = NULL;
+
+}
+
static void
proxy_dialog_finalize (GObject *object)
{
@@ -145,14 +155,14 @@ proxy_dialog_finalize (GObject *object)
if(priv->proxy_name_selector)
g_object_unref (priv->proxy_name_selector);
- g_free (priv->help_section);
- g_object_unref (priv->xml_tab);
-
- if (prd->priv) {
- g_free (prd->priv);
+ if (priv) {
+ g_free (priv->help_section);
+ g_object_unref (priv->xml_tab);
+ g_object_unref (prd->priv);
prd->priv = NULL;
}
+ prd = NULL;
if (parent_class->finalize)
(* parent_class->finalize) (object);
}
@@ -182,7 +192,8 @@ proxy_dialog_init (GObject *object)
priv = g_new0 (proxyDialogPrivate, 1);
prd->priv = priv;
-
+
+ priv->tab_dialog = NULL;
priv->xml = NULL;
priv->xml_tab = NULL;
priv->main = NULL;
@@ -364,7 +375,7 @@ proxy_dialog_store_widgets_data (EAccount *account, gint32 dialog)
new_proxy->uniqueid = NULL;
new_proxy->flags = E_GW_PROXY_NEW;
new_proxy->permissions = proxy_get_permissions_from_dialog (account);
- g_object_set_data((GObject *) account,"proxy_list",g_list_append (g_object_get_data ((GObject*) account,"proxy_list"), new_proxy));
+ g_object_set_data_full ((GObject *) account, "proxy_list", g_list_append (g_object_get_data ((GObject*) account,"proxy_list"), new_proxy), (GDestroyNotify) free_proxy_list);
}
}
break;
@@ -494,8 +505,10 @@ proxy_abort (GtkWidget *button, EConfigHookItemFactoryData *data)
g_list_foreach (proxy_list, (GFunc) free_proxy_handler, NULL);
g_list_free (proxy_list);
+ proxy_list = NULL;
g_object_unref (prd);
+ prd = NULL;
}
void
proxy_commit (GtkWidget *button, EConfigHookItemFactoryData *data)
@@ -539,8 +552,10 @@ proxy_commit (GtkWidget *button, EConfigHookItemFactoryData *data)
proxy_list = (GList *) g_object_get_data ((GObject *) account, "proxy_dialog");
g_list_foreach (proxy_list, (GFunc) free_proxy_handler, NULL);
g_list_free (proxy_list);
+ proxy_list = NULL;
g_object_unref (prd);
+ prd = NULL;
}
static void
@@ -605,7 +620,6 @@ org_gnome_proxy (EPlugin *epl, EConfigHookItemFactoryData *data)
{
EMConfigTargetAccount *target_account;
EAccount *account;
- GtkWidget *tab_dialog = NULL;
GList *proxy_list = NULL;
GtkButton *addProxy, *removeProxy, *editProxy;
proxyDialog *prd;
@@ -613,52 +627,57 @@ org_gnome_proxy (EPlugin *epl, EConfigHookItemFactoryData *data)
target_account = (EMConfigTargetAccount *)data->config->target;
account = target_account->account;
-
- if (account->enabled) {
+ if (g_strrstr (e_account_get_string(account, E_ACCOUNT_SOURCE_URL), "groupwise://"))
+ {
prd = proxy_dialog_new ();
- g_object_set_data ((GObject *) account, "prd", prd);
+ g_object_set_data_full ((GObject *) account, "prd", prd, (GDestroyNotify) g_object_unref);
priv = prd->priv;
-
- if(!g_strrstr (e_account_get_string(account, E_ACCOUNT_SOURCE_URL), "groupwise://"))
- return NULL;
-
priv->xml_tab = glade_xml_new (EVOLUTION_GLADEDIR "/proxy-listing.glade", "proxy_vbox", NULL);
- tab_dialog = GTK_WIDGET (glade_xml_get_widget (priv->xml_tab, "proxy_vbox"));
- priv->tree = GTK_TREE_VIEW (glade_xml_get_widget (priv->xml_tab, "proxy_access_list"));
- priv->store = gtk_tree_store_new (2,
- GDK_TYPE_PIXBUF,
- G_TYPE_STRING
- );
- proxy_setup_meta_tree_view (account);
-
- addProxy = (GtkButton *) glade_xml_get_widget (priv->xml_tab, "add_proxy");
- removeProxy = (GtkButton *) glade_xml_get_widget (priv->xml_tab, "remove_proxy");
- editProxy = (GtkButton *) glade_xml_get_widget (priv->xml_tab, "edit_proxy");
-
- g_signal_connect (addProxy, "clicked", G_CALLBACK(proxy_add_account), account);
- g_signal_connect (removeProxy, "clicked", G_CALLBACK(proxy_remove_account), account);
- g_signal_connect (editProxy, "clicked", G_CALLBACK(proxy_edit_account), account);
-
- prd->cnc = proxy_get_cnc(account);
-
- if (e_gw_connection_get_proxy_access_list(prd->cnc, &proxy_list)!= E_GW_CONNECTION_STATUS_OK)
- return NULL;
-
- g_object_set_data ((GObject *) account, "proxy_list", proxy_list);
- proxy_update_tree_view (account);
- gtk_notebook_append_page ((GtkNotebook *)(data->parent), (GtkWidget *)tab_dialog, gtk_label_new("Proxy"));
- gtk_widget_show_all (tab_dialog);
- } else {
- GtkWidget *err_tab;
- GtkWidget *label;
-
- err_tab = gtk_vbox_new (TRUE, 10);
- label = gtk_label_new (_("The Proxy tab will be available only when the account is enabled."));
- gtk_box_pack_start ((GtkBox *)err_tab, label, TRUE, TRUE, 10);
-
- gtk_notebook_append_page ((GtkNotebook *)(data->parent), (GtkWidget *)err_tab, gtk_label_new("Proxy"));
- gtk_widget_show_all (err_tab);
+ if (account->enabled) {
+ priv->tab_dialog = GTK_WIDGET (glade_xml_get_widget (priv->xml_tab, "proxy_vbox"));
+ priv->tree = GTK_TREE_VIEW (glade_xml_get_widget (priv->xml_tab, "proxy_access_list"));
+ priv->store = gtk_tree_store_new (2,
+ GDK_TYPE_PIXBUF,
+ G_TYPE_STRING
+ );
+ proxy_setup_meta_tree_view (account);
+
+ addProxy = (GtkButton *) glade_xml_get_widget (priv->xml_tab, "add_proxy");
+ removeProxy = (GtkButton *) glade_xml_get_widget (priv->xml_tab, "remove_proxy");
+ editProxy = (GtkButton *) glade_xml_get_widget (priv->xml_tab, "edit_proxy");
+
+ g_signal_connect (addProxy, "clicked", G_CALLBACK(proxy_add_account), account);
+ g_signal_connect (removeProxy, "clicked", G_CALLBACK(proxy_remove_account), account);
+ g_signal_connect (editProxy, "clicked", G_CALLBACK(proxy_edit_account), account);
+
+ prd->cnc = proxy_get_cnc(account);
+
+ if (e_gw_connection_get_proxy_access_list(prd->cnc, &proxy_list)!= E_GW_CONNECTION_STATUS_OK)
+ return NULL;
+
+ g_object_set_data_full ((GObject *) account, "proxy_list", proxy_list, (GDestroyNotify) free_proxy_list);
+ proxy_update_tree_view (account);
+ } else {
+ GtkWidget *label;
+ priv->tab_dialog = gtk_vbox_new (TRUE, 10);
+ label = gtk_label_new (_("The Proxy tab will be available only when the account is enabled."));
+ gtk_box_pack_start ((GtkBox *)priv->tab_dialog, label, TRUE, TRUE, 10);
+ }
+
+ gtk_notebook_append_page ((GtkNotebook *)(data->parent), (GtkWidget *)priv->tab_dialog, gtk_label_new("Proxy"));
+ gtk_widget_show_all (priv->tab_dialog);
+ } else if (!g_strrstr (e_account_get_string(account, E_ACCOUNT_SOURCE_URL), "groupwise://")) {
+ prd = g_object_get_data ((GObject *) account, "prd");
+
+ if (prd) {
+ priv = prd->priv;
+ int pag_num;
+ if (priv) {
+ pag_num = gtk_notebook_page_num ( (GtkNotebook *)(data->parent), (GtkWidget *) priv->tab_dialog);
+ gtk_notebook_remove_page ( (GtkNotebook *)(data->parent), pag_num);
+ }
+ }
}
return NULL;
}
@@ -685,7 +704,7 @@ proxy_add_ok (GtkWidget *button, EAccount *account)
prd = g_object_get_data ((GObject *)account, "prd");
priv = prd->priv;
- if ( proxy_dialog_store_widgets_data (account, PROXY_ADD_DIALOG) < 0)
+ if (proxy_dialog_store_widgets_data (account, PROXY_ADD_DIALOG) < 0)
return;
proxy_update_tree_view (account);