Merged into folder_browser_new: nothing ever changes the URI of an

* folder-browser.c (folder_browser_set_uri): Merged into
	folder_browser_new: nothing ever changes the URI of an existing
	folder browser any more.
	(folder_browser_new): Make this take a uri argument and do the
	work folder_browser_set_uri used to do, except that we set fb->uri
	right away, so that if the folder browser's control is activated
	before got_folder() gets called, then folder_browser_ui_add_list()
	will have access to the correct uri for purposes of setting
	ViewThreaded, etc. Fixes #4913.
	(got_folder): Don't set fb->uri here since it will already have
	been set. Don't call message_list_set_threaded, since it should be
	a noop now (and if it's not, it would make the message list not
	match the menu item).

	* folder-browser-ui.c (folder_browser_ui_add_list): Remove some
	code that was failing to work around the problems above.

	* message-browser.c (message_browser_new): Pass uri to
	folder_browser_new, remove call to set_uri.

	* folder-browser-factory.c (folder_browser_factory_new_control):
	Likewise. Also fix a s/destroy/unref/ in an error cleanup.

svn path=/trunk/; revision=12954
This commit is contained in:
Dan Winship
2001-09-18 21:12:37 +00:00
parent 54141f67b7
commit e73fea5ecf
6 changed files with 36 additions and 41 deletions

View File

@ -1,3 +1,28 @@
2001-09-18 Dan Winship <danw@ximian.com>
* folder-browser.c (folder_browser_set_uri): Merged into
folder_browser_new: nothing ever changes the URI of an existing
folder browser any more.
(folder_browser_new): Make this take a uri argument and do the
work folder_browser_set_uri used to do, except that we set fb->uri
right away, so that if the folder browser's control is activated
before got_folder() gets called, then folder_browser_ui_add_list()
will have access to the correct uri for purposes of setting
ViewThreaded, etc. Fixes #4913.
(got_folder): Don't set fb->uri here since it will already have
been set. Don't call message_list_set_threaded, since it should be
a noop now (and if it's not, it would make the message list not
match the menu item).
* folder-browser-ui.c (folder_browser_ui_add_list): Remove some
code that was failing to work around the problems above.
* message-browser.c (message_browser_new): Pass uri to
folder_browser_new, remove call to set_uri.
* folder-browser-factory.c (folder_browser_factory_new_control):
Likewise. Also fix a s/destroy/unref/ in an error cleanup.
2001-09-18 Jeffrey Stedfast <fejj@ximian.com>
* mail-session.c (get_password): Pass a 'cache-me' argument to

View File

@ -166,23 +166,18 @@ folder_browser_factory_new_control (const char *uri,
BonoboControl *control;
GtkWidget *folder_browser;
folder_browser = folder_browser_new (shell);
folder_browser = folder_browser_new (shell, uri);
if (folder_browser == NULL)
return NULL;
FOLDER_BROWSER (folder_browser)->pref_master = TRUE; /* save UI settings changed in this FB */
if (!folder_browser_set_uri (FOLDER_BROWSER (folder_browser), uri)) {
gtk_object_sink (GTK_OBJECT (folder_browser));
return NULL;
}
gtk_widget_show (folder_browser);
control = bonobo_control_new (folder_browser);
if (control == NULL) {
gtk_object_destroy (GTK_OBJECT (folder_browser));
gtk_object_unref (GTK_OBJECT (folder_browser));
return NULL;
}

View File

@ -343,10 +343,8 @@ folder_browser_ui_add_list (FolderBrowser *fb)
/* Threaded toggle */
state = mail_config_get_thread_list (FOLDER_BROWSER (fb)->uri);
bonobo_ui_component_set_prop (uic, "/commands/ViewThreaded", "state", state ? "1" : "0", NULL);
bonobo_ui_component_add_listener (uic, "ViewThreaded", folder_browser_toggle_threads, fb);
/* FIXME: this kind of bypasses bonobo but seems the only way when we change components */
folder_browser_toggle_threads (uic, "", Bonobo_UIComponent_STATE_CHANGED, state ? "1" : "0", fb);
bonobo_ui_component_set_prop (uic, "/commands/ViewThreaded", "state", state ? "1" : "0", NULL);
/* Property menu */
folder_browser_setup_property_menu (fb, fb->uicomp);

View File

@ -687,22 +687,13 @@ got_folder(char *uri, CamelFolder *folder, void *data)
d(printf ("got folder '%s' = %p\n", uri, folder));
if (fb->folder == folder)
goto done;
if (fb->folder)
camel_object_unref (CAMEL_OBJECT (fb->folder));
g_free (fb->uri);
fb->uri = g_strdup (uri);
fb->folder = folder;
if (folder == NULL)
goto done;
camel_object_ref (CAMEL_OBJECT (folder));
gtk_widget_set_sensitive (GTK_WIDGET (fb->search), camel_folder_has_search_capability (folder));
message_list_set_threaded (fb->message_list, mail_config_get_thread_list (fb->uri));
message_list_set_folder (fb->message_list, folder,
folder_browser_is_drafts (fb) ||
folder_browser_is_sent (fb) ||
@ -723,17 +714,6 @@ got_folder(char *uri, CamelFolder *folder, void *data)
gtk_signal_emit (GTK_OBJECT (fb), folder_browser_signals [FOLDER_LOADED], fb->uri);
}
gboolean
folder_browser_set_uri (FolderBrowser *folder_browser, const char *uri)
{
if (uri && *uri) {
gtk_object_ref((GtkObject *)folder_browser);
mail_get_folder(uri, got_folder, folder_browser);
}
return TRUE;
}
void
folder_browser_set_ui_component (FolderBrowser *fb, BonoboUIComponent *uicomp)
{
@ -1471,8 +1451,6 @@ on_right_click (ETree *tree, gint row, ETreePath path, gint col, GdkEvent *event
g_free (uids->pdata[i]);
g_ptr_array_free (uids, TRUE);
display_menu:
/* generate the "Filter on Mailing List menu item name */
if (mailing_list_name == NULL) {
enable_mask |= IS_MAILING_LIST;
@ -1867,7 +1845,7 @@ my_folder_browser_init (GtkObject *object)
}
GtkWidget *
folder_browser_new (const GNOME_Evolution_Shell shell)
folder_browser_new (const GNOME_Evolution_Shell shell, const char *uri)
{
CORBA_Environment ev;
FolderBrowser *folder_browser;
@ -1877,7 +1855,6 @@ folder_browser_new (const GNOME_Evolution_Shell shell)
folder_browser = gtk_type_new (folder_browser_get_type ());
my_folder_browser_init (GTK_OBJECT (folder_browser));
folder_browser->uri = NULL;
folder_browser->shell = CORBA_Object_duplicate (shell, &ev);
if (ev._major != CORBA_NO_EXCEPTION) {
@ -1889,6 +1866,10 @@ folder_browser_new (const GNOME_Evolution_Shell shell)
CORBA_exception_free (&ev);
folder_browser->uri = g_strdup (uri);
gtk_object_ref (GTK_OBJECT (folder_browser));
mail_get_folder (folder_browser->uri, got_folder, folder_browser);
return GTK_WIDGET (folder_browser);
}

View File

@ -95,14 +95,12 @@ struct fb_ondemand_closure {
};
GtkType folder_browser_get_type (void);
GtkWidget *folder_browser_new (const GNOME_Evolution_Shell shell);
GtkWidget *folder_browser_new (const GNOME_Evolution_Shell shell,
const char *uri);
void folder_browser_set_ui_component (FolderBrowser *fb,
BonoboUIComponent *uicomp);
gboolean folder_browser_set_uri (FolderBrowser *folder_browser,
const char *uri);
void folder_browser_set_message_preview (FolderBrowser *folder_browser,
gboolean show_message_preview);
void folder_browser_clear_search (FolderBrowser *fb);

View File

@ -222,7 +222,7 @@ message_browser_new (const GNOME_Evolution_Shell shell, const char *uri, const c
gtk_object_set_data_full (GTK_OBJECT (new), "uid", g_strdup (uid), g_free);
fb = FOLDER_BROWSER (folder_browser_new (shell));
fb = FOLDER_BROWSER (folder_browser_new (shell, uri));
new->fb = fb;
set_bonobo_ui (GTK_WIDGET (new), fb);
@ -253,8 +253,6 @@ message_browser_new (const GNOME_Evolution_Shell shell, const char *uri, const c
gtk_signal_connect (GTK_OBJECT (fb), "message_loaded",
message_browser_message_loaded, new);
folder_browser_set_uri (fb, uri);
return GTK_WIDGET (new);
}