a really gross hack, disable all search handlers before setting the search

2004-03-11  Not Zed  <NotZed@Ximian.com>

        * em-folder-browser.c (emfb_set_folder): a really gross hack,
        disable all search handlers before setting the search and set hte
        search manually rather than going through the callbacks.  Partial
        fix for #55267, and ugly as it is.
        (emfb_init): save the search signal id's.
        (emfb_set_folder): ugh, properly set the defaults if the settings
        haven't been stored on the folder, and properly move them upstream
        to the bonobo menus.

svn path=/trunk/; revision=25027
This commit is contained in:
Not Zed
2004-03-11 08:52:03 +00:00
committed by Michael Zucci
parent 4138eb99da
commit fff0d51842
2 changed files with 61 additions and 19 deletions

View File

@ -1,5 +1,14 @@
2004-03-11 Not Zed <NotZed@Ximian.com>
* em-folder-browser.c (emfb_set_folder): a really gross hack,
disable all search handlers before setting the search and set hte
search manually rather than going through the callbacks. Partial
fix for #55267, and ugly as it is.
(emfb_init): save the search signal id's.
(emfb_set_folder): ugh, properly set the defaults if the settings
haven't been stored on the folder, and properly move them upstream
to the bonobo menus.
* em-folder-tree-model.c (sort_cb): when we sort, handle not
having the node in the tree. otherwise we always compare against
"" which puts it at the head of the branch, rather than the tail.

View File

@ -98,6 +98,10 @@ struct _EMFolderBrowserPrivate {
GalViewInstance *view_instance;
GalViewMenus *view_menus;
guint search_menu_activated_id;
guint search_activated_id;
guint search_query_changed_id;
guint vpane_resize_id;
guint list_built_id; /* hook onto list-built for delayed 'select first unread' stuff */
@ -187,9 +191,9 @@ emfb_init(GObject *o)
e_search_bar_set_menu ((ESearchBar *)emfb->search, emfb_search_items);
gtk_widget_show((GtkWidget *)emfb->search);
g_signal_connect(emfb->search, "menu_activated", G_CALLBACK(emfb_search_menu_activated), emfb);
g_signal_connect(emfb->search, "search_activated", G_CALLBACK(emfb_search_search_activated), emfb);
g_signal_connect(emfb->search, "query_changed", G_CALLBACK(emfb_search_query_changed), emfb);
p->search_menu_activated_id = g_signal_connect(emfb->search, "menu_activated", G_CALLBACK(emfb_search_menu_activated), emfb);
p->search_activated_id = g_signal_connect(emfb->search, "search_activated", G_CALLBACK(emfb_search_search_activated), emfb);
p->search_query_changed_id = g_signal_connect(emfb->search, "query_changed", G_CALLBACK(emfb_search_query_changed), emfb);
gtk_box_pack_start((GtkBox *)emfb, (GtkWidget *)emfb->search, FALSE, TRUE, 0);
}
@ -912,6 +916,7 @@ static void
emfb_set_folder(EMFolderView *emfv, CamelFolder *folder, const char *uri)
{
EMFolderBrowser *emfb = (EMFolderBrowser *) emfv;
struct _EMFolderBrowserPrivate *p = emfb->priv;
emfb_parent->set_folder(emfv, folder, uri);
@ -920,27 +925,55 @@ emfb_set_folder(EMFolderView *emfv, CamelFolder *folder, const char *uri)
defaults */
if (folder) {
char *sstate;
int state;
GConfClient *gconf = mail_config_get_gconf_client();
/* FIXME: this mostly copied from activate() */
if ((sstate = camel_object_meta_get(folder, "evolution:show_preview"))) {
state = sstate[0] != '0';
g_free(sstate);
} else
state = gconf_client_get_bool(gconf, "/apps/evolution/mail/display/show_preview", NULL);
em_folder_browser_show_preview(emfb, state);
if (emfv->uic)
bonobo_ui_component_set_prop(emfv->uic, "/commands/ViewPreview", "state", state?"1":"0", NULL);
if ((sstate = camel_object_meta_get (folder, "evolution:show_preview"))) {
em_folder_browser_show_preview (emfb, sstate[0] != '0');
g_free (sstate);
}
if ((sstate = camel_object_meta_get (folder, "evolution:thread_list"))) {
message_list_set_threaded (emfv->list, sstate[0] != '0');
g_free (sstate);
}
sstate = camel_object_meta_get (folder, "evolution:search_state");
g_object_set (emfb->search, "state", sstate, NULL);
g_free (sstate);
if ((sstate = camel_object_meta_get(folder, "evolution:thread_list"))) {
state = sstate[0] != '0';
g_free(sstate);
} else
state = gconf_client_get_bool(gconf, "/apps/evolution/mail/display/thread_list", NULL);
message_list_set_threaded(emfv->list, state);
if (emfv->uic)
bonobo_ui_component_set_prop(emfv->uic, "/commands/ViewThreaded", "state", state?"1":"0", NULL);
/* gross, but effective? */
g_signal_handler_block(emfb->search, p->search_menu_activated_id);
g_signal_handler_block(emfb->search, p->search_activated_id);
g_signal_handler_block(emfb->search, p->search_query_changed_id);
sstate = camel_object_meta_get(folder, "evolution:search_state");
g_object_set(emfb->search, "state", sstate, NULL);
g_free(sstate);
g_signal_handler_unblock(emfb->search, p->search_menu_activated_id);
g_signal_handler_unblock(emfb->search, p->search_activated_id);
g_signal_handler_unblock(emfb->search, p->search_query_changed_id);
/* set the query manually, so we dont pop up advanced or saved search stuff */
g_object_get(emfb->search, "query", &sstate, NULL);
message_list_set_search(emfb->view.list, sstate);
g_free(sstate);
if ((sstate = camel_object_meta_get (folder, "evolution:selected_uid")))
emfb->priv->select_uid = sstate;
else {
g_free(p->select_uid);
p->select_uid = NULL;
}
if (emfv->list->cursor_uid == NULL && emfb->priv->list_built_id == 0)
emfb->priv->list_built_id =
g_signal_connect (emfv->list, "message_list_built", G_CALLBACK (emfb_list_built), emfv);
emfb->priv->list_built_id = g_signal_connect(emfv->list, "message_list_built", G_CALLBACK (emfb_list_built), emfv);
/*emfb_create_view_instance (emfb, folder, uri);*/
if (emfv->uic)