diff options
Diffstat (limited to 'mail')
-rw-r--r-- | mail/ChangeLog | 4 | ||||
-rw-r--r-- | mail/folder-browser-factory.c | 66 | ||||
-rw-r--r-- | mail/folder-browser-ui.c | 79 | ||||
-rw-r--r-- | mail/folder-browser.c | 13 |
4 files changed, 89 insertions, 73 deletions
diff --git a/mail/ChangeLog b/mail/ChangeLog index 8786c608be..5fa615e530 100644 --- a/mail/ChangeLog +++ b/mail/ChangeLog @@ -1,5 +1,9 @@ 2002-11-11 Jeffrey Stedfast <fejj@ximian.com> + * folder-browser-ui.c: Ported. + + * folder-browser-factory.c: Ported. + * folder-browser.c: Ported. * e-searching-tokenizer.c: Roughly ported. diff --git a/mail/folder-browser-factory.c b/mail/folder-browser-factory.c index e1057cd7e7..763605bf9d 100644 --- a/mail/folder-browser-factory.c +++ b/mail/folder-browser-factory.c @@ -153,31 +153,32 @@ control_activate_cb (BonoboControl *control, } static void -control_destroy_cb (BonoboControl *control, - GtkObject *folder_browser) +control_destroy_cb (GtkObject *fb, GObject *deadbeef) { gtk_object_destroy (folder_browser); } static void -browser_destroy_cb (FolderBrowser *fb, - BonoboControl *control) +browser_destroy_cb (BonoboControl *control, GObject *deadbeef) { EIterator *it; - + /* We do this from browser_destroy_cb rather than * control_destroy_cb because currently, the controls * don't seem to all get destroyed properly at quit * time (but the widgets get destroyed by X). FIXME. */ - - for (it = e_list_get_iterator (control_list); e_iterator_is_valid (it); e_iterator_next (it)) { + + it = e_list_get_iterator (control_list); + while (e_iterator_is_valid (it)) { if (e_iterator_get (it) == control) { e_iterator_delete (it); break; } + e_iterator_next (it); } - gtk_object_unref (GTK_OBJECT (it)); + + g_object_unref (it); } BonoboControl * @@ -185,36 +186,32 @@ folder_browser_factory_new_control (const char *uri, const GNOME_Evolution_Shell shell) { BonoboControl *control; - GtkWidget *folder_browser; - - folder_browser = folder_browser_new (shell, uri); - if (folder_browser == NULL) + GtkWidget *fb; + + if (!(fb = folder_browser_new (shell, uri))) return NULL; - + FOLDER_BROWSER (folder_browser)->pref_master = TRUE; /* save UI settings changed in this FB */ - + gtk_widget_show (folder_browser); control = bonobo_control_new (folder_browser); if (control == NULL) { - gtk_object_unref (GTK_OBJECT (folder_browser)); + g_object_unref (fb); return NULL; } - gtk_signal_connect (GTK_OBJECT (control), "activate", - control_activate_cb, folder_browser); - - gtk_signal_connect (GTK_OBJECT (control), "destroy", - control_destroy_cb, folder_browser); - gtk_signal_connect (GTK_OBJECT (folder_browser), "destroy", - browser_destroy_cb, control); - + g_signal_connect (control, "activate", GTK_SIGNAL_FUNC (control_activate_cb), fb); + + g_object_weak_ref (control, (GWeakNotify) control_destroy_cb, fb); + g_object_weak_ref (fb, (GWeakNotify) browser_destroy_cb, control); + if (!control_list) control_list = e_list_new (NULL, NULL, NULL); - + e_list_append (control_list, control); - + return control; } @@ -233,21 +230,24 @@ folder_browser_factory_get_browser(const char *uri) EIterator *it; BonoboControl *control; FolderBrowser *fb = NULL; - + if (control_list == NULL) return NULL; controls = folder_browser_factory_get_control_list (); - for (it = e_list_get_iterator (controls); e_iterator_is_valid (it); e_iterator_next (it)) { + + it = e_list_get_iterator (controls); + while (e_iterator_is_valid (it)) { control = BONOBO_CONTROL (e_iterator_get (it)); - fb = FOLDER_BROWSER(bonobo_control_get_widget(control)); - if (fb->uri && strcmp(fb->uri, uri) == 0) + fb = FOLDER_BROWSER (bonobo_control_get_widget (control)); + if (fb->uri && strcmp (fb->uri, uri) == 0) break; fb = NULL; + + e_iterator_next (it); } - gtk_object_unref (GTK_OBJECT(it)); - + + g_object_unref (it); + return fb; } - - diff --git a/mail/folder-browser-ui.c b/mail/folder-browser-ui.c index a5a6db41cc..a4736baedf 100644 --- a/mail/folder-browser-ui.c +++ b/mail/folder-browser-ui.c @@ -26,7 +26,6 @@ #include <config.h> #endif -#include <libgnome/gnome-defs.h> #include <libgnome/gnome-util.h> /* gnome_util_prepend_user_home */ #include <bonobo/bonobo-exception.h> @@ -348,7 +347,7 @@ folder_browser_ui_setup_view_menus (FolderBrowser *fb) char *local_dir; GalViewFactory *factory; - collection = gal_view_collection_new(); + collection = gal_view_collection_new (); gal_view_collection_set_title (collection, _("Mail")); @@ -359,15 +358,15 @@ folder_browser_ui_setup_view_menus (FolderBrowser *fb) local_dir); g_free (local_dir); - spec = e_table_specification_new(); - e_table_specification_load_from_file(spec, EVOLUTION_ETSPECDIR "/message-list.etspec"); + spec = e_table_specification_new (); + e_table_specification_load_from_file (spec, EVOLUTION_ETSPECDIR "/message-list.etspec"); factory = gal_view_factory_etable_new (spec); - gtk_object_unref (GTK_OBJECT (spec)); + g_object_unref (spec); gal_view_collection_add_factory (collection, factory); - gtk_object_unref (GTK_OBJECT (factory)); + g_object_unref (factory); - gal_view_collection_load(collection); + gal_view_collection_load (collection); } id = mail_config_folder_to_safe_url(fb->folder); @@ -390,17 +389,17 @@ folder_browser_ui_setup_view_menus (FolderBrowser *fb) GalView *view; spec = e_table_specification_new(); - e_table_specification_load_from_file(spec, EVOLUTION_ETSPECDIR "/message-list.etspec"); - view = gal_view_etable_new(spec, ""); - gtk_object_unref (GTK_OBJECT (spec)); + e_table_specification_load_from_file (spec, EVOLUTION_ETSPECDIR "/message-list.etspec"); + view = gal_view_etable_new (spec, ""); + g_object_unref (spec); state = e_table_state_new (); e_table_state_load_from_file (state, path); gal_view_etable_set_state (GAL_VIEW_ETABLE (view), state); - gtk_object_unref (GTK_OBJECT (state)); + g_object_unref (state); gal_view_instance_set_custom_view (fb->view_instance, view); - gtk_object_unref (GTK_OBJECT (view)); + g_object_unref (view); } g_free (path); } @@ -411,9 +410,9 @@ folder_browser_ui_setup_view_menus (FolderBrowser *fb) /* Due to CORBA reentrancy, the view could be gone now. */ if (fb->view_instance == NULL) return; - - gtk_signal_connect (GTK_OBJECT (fb->view_instance), "display_view", - display_view, fb); + + g_signal_connect (fb->view_instance, "display_view", GTK_SIGNAL_FUNC (display_view), fb); + display_view (fb->view_instance, gal_view_instance_get_current_view (fb->view_instance), fb); } @@ -424,10 +423,10 @@ folder_browser_ui_discard_view_menus (FolderBrowser *fb) g_assert (fb->view_instance != NULL); g_assert (fb->view_menus != NULL); - gtk_object_unref (GTK_OBJECT (fb->view_instance)); + g_object_unref (fb->view_instance); fb->view_instance = NULL; - gtk_object_unref (GTK_OBJECT (fb->view_menus)); + g_object_unref (fb->view_menus); fb->view_menus = NULL; } @@ -453,6 +452,19 @@ folder_browser_ui_message_list_unfocus (FolderBrowser *fb) "sensitive", "0", NULL);*/ } +static const char * +basename (const char *path) +{ + const char *base; + + if (!(base = strrchr (path, '/'))) + base = path; + else + base++; + + return base; +} + static void folder_browser_setup_property_menu (FolderBrowser *fb, BonoboUIComponent *uic) { @@ -462,12 +474,12 @@ folder_browser_setup_property_menu (FolderBrowser *fb, BonoboUIComponent *uic) url = camel_url_new (fb->uri, NULL); if (url) { if (url->fragment) - base = g_basename (url->fragment); + base = basename (url->fragment); else - base = g_basename (url->path); + base = basename (url->path); } - if (base && base [0] != 0) + if (base && base[0] != '\0') name = g_strdup_printf (_("Properties for \"%s\""), base); else name = g_strdup (_("Properties")); @@ -554,6 +566,7 @@ folder_browser_ui_add_list (FolderBrowser *fb) } else { state = mail_config_get_hide_deleted (); } + bonobo_ui_component_set_prop (uic, "/commands/HideDeleted", "state", state ? "1" : "0", NULL); bonobo_ui_component_add_listener (uic, "HideDeleted", folder_browser_toggle_hide_deleted, fb); /* FIXME: this kind of bypasses bonobo but seems the only way when we change components */ @@ -591,7 +604,7 @@ folder_browser_ui_add_global (FolderBrowser *fb) BonoboUIComponent *uic = fb->uicomp; if (fb->sensitise_state) { - g_hash_table_destroy(fb->sensitise_state); + g_hash_table_destroy (fb->sensitise_state); fb->sensitise_state = NULL; } @@ -607,7 +620,7 @@ folder_browser_ui_add_global (FolderBrowser *fb) /* Stop button */ /* TODO: Go through cache, but we can't becaus eof mail-mt.c:set_stop at the moment */ - bonobo_ui_component_set_prop(uic, "/commands/MailStop", "sensitive", "0", NULL); + bonobo_ui_component_set_prop (uic, "/commands/MailStop", "sensitive", "0", NULL); } void @@ -640,7 +653,7 @@ fbui_sensitise_item (FolderBrowser *fb, const char *item, int state) } if (fb->uicomp) { - name = alloca (strlen (item) + strlen ("/commands/") + 1); + name = g_alloca (strlen (item) + strlen ("/commands/") + 1); sprintf (name, "/commands/%s", item); bonobo_ui_component_set_prop (fb->uicomp, name, "sensitive", state ? "1" : "0", NULL); g_hash_table_insert (fb->sensitise_state, (char *) item, (gpointer) state); @@ -676,16 +689,15 @@ folder_browser_ui_scan_selection (FolderBrowser *fb) message_list_foreach (fb->message_list, enumerate_msg, uids); for (i = 0; i < uids->len; i++) { - info = camel_folder_get_message_info (fb->folder, uids->pdata[i]); if (info == NULL) continue; - + if (info->flags & CAMEL_MESSAGE_DELETED) temp_mask |= HAS_DELETED; else temp_mask |= HAS_UNDELETED; - + if (info->flags & CAMEL_MESSAGE_SEEN) temp_mask |= HAS_READ; else @@ -695,14 +707,13 @@ folder_browser_ui_scan_selection (FolderBrowser *fb) temp_mask |= HAS_IMPORTANT; else temp_mask |= HAS_UNIMPORTANT; - - + camel_folder_free_message_info (fb->folder, info); g_free (uids->pdata[i]); } - + g_ptr_array_free (uids, TRUE); - + /* yeah, the naming is a bit backwards, but we need to support * the case when, say, both a deleted and an undeleted message * are selected. Both the Delete and Undelete menu items should @@ -711,10 +722,10 @@ folder_browser_ui_scan_selection (FolderBrowser *fb) * so that it's sensible both above and in the definition of * the UI items, so deal with it. */ - + enable_mask |= (~temp_mask & HAS_FLAGS); } - + if (folder_browser_is_drafts (fb)) { enable_mask |= IS_DRAFTS_FOLDER; outgoing = TRUE; @@ -750,7 +761,7 @@ folder_browser_ui_scan_selection (FolderBrowser *fb) enable_mask |= SELECTION_NONE; break; } - + fbui_sensitize_items (fb, enable_mask); } @@ -762,7 +773,7 @@ folder_browser_ui_set_selection_state (FolderBrowser *fb, FolderBrowserSelection * a recheck of the flags of the selected * messages. */ - + if (state == fb->selection_state && state != FB_SELSTATE_SINGLE && state != FB_SELSTATE_MULTIPLE) diff --git a/mail/folder-browser.c b/mail/folder-browser.c index b62b31940e..7b52727220 100644 --- a/mail/folder-browser.c +++ b/mail/folder-browser.c @@ -809,7 +809,8 @@ update_status_bar_idle_cb(gpointer data) update_status_bar (fb); fb->update_status_bar_idle_id = 0; - gtk_object_unref (GTK_OBJECT (fb)); + g_object_unref (fb); + return FALSE; } @@ -817,7 +818,7 @@ static void update_status_bar_idle(FolderBrowser *fb) { if (fb->update_status_bar_idle_id == 0) { - gtk_object_ref (GTK_OBJECT (fb)); + g_object_ref (fb); fb->update_status_bar_idle_id = g_idle_add (update_status_bar_idle_cb, fb); } } @@ -830,10 +831,10 @@ static void main_folder_changed(CamelObject *o, void *event_data, void *data) return; /* so some corba unref doesnt blow us away while we're busy */ - gtk_object_ref((GtkObject *)fb); - update_status_bar(fb); + g_object_ref (fb); + update_status_bar (fb); folder_browser_ui_scan_selection (fb); - gtk_object_unref((GtkObject *)fb); + g_object_unref (fb); } static void folder_changed (CamelObject *obj, void *event_data, void *user_data) @@ -2046,7 +2047,7 @@ on_right_click (ETree *tree, gint row, ETreePath path, gint col, GdkEvent *event closures = g_ptr_array_new (); label_menu[0].closure = g_new (struct _label_data, 1); g_ptr_array_add (closures, label_menu[0].closure); - gtk_object_ref (GTK_OBJECT (fb)); + g_object_ref (fb); ((struct _label_data *) label_menu[0].closure)->fb = fb; ((struct _label_data *) label_menu[0].closure)->label = NULL; |