When sending a message from a composer window, it seems pointless to
write message to Outbox only to immediately read it back and mark it
for deletion. Instead, bypass the Outbox folder when sending, and if
an error occurs, offer to save the message to Outbox instead.
'Send' and 'Save Draft' are now asynchronous and run outside of
Evolution's MailMsg infrastructure.
Add an EActivityBar to the composer window so these asynchronous
operations can be tracked and cancelled even in the absense of a main
window. Also add an EAlertBar to the composer window so error messages
can be shown directly in the window.
Instead of calling e_alert_dialog_run_for_args(), call e_alert_submit()
and pass the EMsgComposer as the widget argument. The EMsgComposer will
decide whether to show an EAlertDialog or use the EAlertBar, depending
on the GtkMessageType of the alert.
Given the way the autosave feature was awkwardly bolted on to the
composer, an EExtension seemed like a natural fit. And it helped
clean up some object lifecycle hacks (and bugs).
What we have now is a new module consisting of two EExtensions:
EComposerAutosave extends EMsgComposer and determines when to
kick off an asynchronous autosave operation.
EComposerRegistry extends EShell and offers to restore orphaned
autosave files on startup (which is also asynchronous now).
e-autosave-utils.c holds the actual asynchronous functions and a few
other miscellaneous utility functions.
Source code for the new module lives in /modules/composer-autosave.
Remove various utility functions that conditionally create
a lite composer, and just use the normal functions to
create a composer. The composer will know by itself whether
it needs to adjust for small screens.
Signed-off-by: Federico Mena Quintero <federico@novell.com>
EFocusTracker tracks the input focus within a window and helps keep
the sensitivity of "selectable" actions in the main menu up-to-date.
Selectable actions include Cut, Copy, Paste, Select All and Delete.
EFocusTracker has built-in support for widgets that implement the
GtkEditable interface such as GtkEntry and GtkTextView. It also
supports custom widgets that implement the ESelectable interface,
which is a subset of GtkEditable and can apply to anything that
displays selectable content (esp. tree views and ETables).
This commit integrates EFocusTracker with EShellWindow, CompEditor,
EMsgComposer, and ESignatureManager.
It also bumps the GtkHTML requirement to 2.29.5 to utilize the new
GtkhtmlEditor:html constructor property.
This is due to an old hack that hiding a composer means we're closing
it so save_draft_done() destroys the composer after saved draft. But
in Anjal, the composer widget is always hidden (since the editor is
reparented to the tab), and will be wrongly destroyed by
save_draft_done() when you clicked "Save Draft" button.
This patch improved the old hack, by adding a new API
e_msg_composer_request_close() that can be used to request closing a
composer (so the old hack is no longer needed). Internally,
composer->priv->application_exiting is used to store this exiting
status.
So by this we no longer use a composer's visibility to check whether
we're to close it. When you no longer need a composer after saved
draft, call e_msg_composer_request_close() before sending the
save-draft signal.
The e_msg_composer_is_exiting() (removed by 983bea9) has to be bring
back, which is needed by other programs that use the composer (Anjal
here).
(forward ported from 08150f6 of gnome-2-28)
A new field "mail_sent" is added to the Composer to indicate whether the
mail is sent successfully or not. This is needed by Anjal to know
whether it can destroy the composer or not.
Closing the last main window no longer takes composer windows down with
it, so we no longer need the "holy crap we're shutting down, quick save
to disk!" logic.
Completely rewrite how composer headers are managed. There's now two
sets of headers (with some overlap): one set is for sending an email
message, the other is for posting to a newsgroup. The correct set of
headers is chosen on-the-fly based on the currently selected account
type. The user's "view" preferences for these two sets are stored
separately, so that switching between an email account and a news
account will no longer stomp on your preferences.
This also eliminates the need for the "Post New Message to Folder" and
"Post a Reply" actions, so they've been removed. Usenet users can now
just highlight a newsgroup in the folder tree and click New or Reply,
and the composer window will show the correct set of headers with the
Post-To field filled in automatically.
Comment #6 in the bug discusses other standard news reader behaviors we
still don't get right, particularly the missing "Followup To" header.
These will be dealt with separately.
- Break the UI out of Glade and into small, manageable widgets:
ESignatureEditor (moved from mail to widgets/misc)
ESignatureManager
ESignatureTreeView
ESignatureScriptDialog
- Move several signature utilities to e-util/e-signature-utils.c so
they're accessible from widgets/misc without introducing circular
dependences.
- Have EMailShellModule listen for new GtkhtmlEditor windows (from which
EMsgComposer and ESignatureEditor are derived) and configure the window
with spelling and HTML editing user preferences.
- Drastically simplifies em-composer-prefs.c.
svn path=/branches/kill-bonobo/; revision=37239
dependencies in our libraries. The circular dependency between the composer
and the mail module is still causing me headaches. And it doesn't help that
the addressbook and calendar also want to link to the composer.
svn path=/branches/kill-bonobo/; revision=36782
2008-11-05 Matthew Barnes <mbarnes@redhat.com>
** Fixes part of bug #559371
* composer/e-msg-composer.c (e_load_spell_languages):
New function loads a list of GtkhtmlSpellLanguage structs from
GConf, taking care of details like converting language codes to
structs and ensuring the returned list is non-empty.
* composer/e-msg-composer.c (e_save_spell_languages):
New function saves a list of GtkhtmlSpellLanguage structs to
GConf, taking care of details like converting the structs to
language codes.
* composer/e-msg-composer.c (msg_composer_constructor):
* mail/em-composer-prefs.c (spell_language_save), (spell_setup):
Simplify the logic by using e_load_spell_languages() and
e_save_spell_languages().
svn path=/trunk/; revision=36743
2008-04-17 Milan Crha <mcrha@redhat.com>
** Fix for bug #526741 (gnome-vfs to gio/gvfs port)
* configure.in: Drop dependency on gnome-vfs, depend on gio instead.
* addressbook/gui/contact-editor/e-contact-editor.c: Do not include gnome-vfs.
* calendar/gui/e-meeting-store.c: (start_async_read), (freebusy_async),
(async_read): Read data with gio, not with gnome-vfs.
* calendar/gui/e-meeting-store.c: (async_close): Function removed.
* calendar/gui/migration.c:
* calendar/gui/e-memos.c:
* calendar/gui/alarm-notify/notify-main.c:
* calendar/gui/e-tasks.c:
* calendar/gui/main.c:
* calendar/gui/e-meeting-list-view.c:
Do not include gnome-vfs.
* calendar/gui/dialogs/comp-editor.c: (set_attachment_list):
* calendar/gui/dialogs/comp-editor.c: (attachment_guess_mime_type):
Function removed, use e-util function instead.
* calendar/gui/e-cal-popup.c: (temp_save_part):
Reflect changes in CamelStreamVFS.
* calendar/gui/e-cal-popup.c: (ecalp_apps_open_in), (ecalp_apps_popup_free),
(ecalp_standard_menu_factory): Use gio to fill popup and launch app.
* calendar/gui/e-cal-component-preview.h: (e_cal_comp_preview_url_requested_cb):
* calendar/gui/e-cal-component-preview.c: (e_cal_comp_preview_url_requested_cb):
New helper function to manage file:// urls for GtkHTML component.
* calendar/gui/e-cal-component-preview.c: (e_cal_component_preview_init):
* calendar/gui/e-cal-component-memo-preview.c:
(e_cal_comp_preview_url_requested_cb):
Use above helper function.
* calendar/gui/e-cal-component-memo-preview.c: (url_requested_cb):
* calendar/gui/e-cal-component-preview.c: (url_requested_cb): Function removed.
* composer/e-msg-composer.h: (e_msg_composer_guess_mime_type):
* composer/e-msg-composer.c: (e_msg_composer_guess_mime_type), (handle_uri),
(e_msg_composer_add_inline_image_from_file):
Use shared e_util_guess_mime_type instead of its own.
* e-util/e-gui-utils.c: Do not include gnome-vfs.
* e-util/e-util.c: (e_write_file_uri), (e_file_get_save_path):
* e-util/e-dialog-utils.c: (e_file_can_save), (e_file_check_local):
Use gio instead of gnome-vfs.
* e-util/e-util.h:
* e-util/e-util.c: (e_util_guess_mime_type), (e_util_filename_to_uri),
(e_util_uri_to_filename), (e_util_read_file): New helper functions.
* mail/Makefile.am:
* mail/em-vfs-stream.h:
* mail/em-vfs-stream.c: Removed from project, not used anywhere.
* mail/em-menu.c:
* mail/em-config.c: Do not include gnome-vfs.
* mail/mail-ops.c: (save_messages_exec), (save_part_exec):
Changes related to Data Server change of CamelStreamVFS.
* mail/em-format.c: (em_format_describe_part):
* mail/em-format-html-display.c: (efhd_bonobo_object), (efhd_find_handler),
(efhd_use_component), (efhd_bonobo_unknown), (efhd_check_server_prop),
(efhd_format_attachment): Drop use of deprecated gnome-vfs functions.
* mail/em-utils.c: (em_utils_snoop_type): Use gio to guess the mime_type.
* mail/em-popup.c: (emp_apps_open_in), (emp_apps_popup_free),
(emp_standard_menu_factory): Use gio to fill popup and launch app.
* plugins/import-ics-attachments/icsimporter.c: Do not include gnome-vfs.
* plugins/ipod-sync/ical-format.c: (do_save_calendar_ical):
* plugins/ipod-sync/ipod-sync.c: (destination_save_addressbook):
Write to gio GOutputStream instead of gnome-vfs handle.
* plugins/ipod-sync/format-handler.h: (open_for_writing):
* plugins/ipod-sync/ipod-sync.c: (open_for_writing): New helper function.
* plugins/publish-calendar/publish-format-fb.h: (publish_calendar_as_fb):
* plugins/publish-calendar/publish-format-fb.c: (write_calendar), (publish_calendar_as_fb):
* plugins/publish-calendar/publish-format-ical.h: (publish_calendar_as_ical):
* plugins/publish-calendar/publish-format-ical.c: (write_calendar), (publish_calendar_as_ical):
Use gio GOutputStream instead of gnome-vfs handle.
* plugins/publish-calendar/url-editor-dialog.c: (create_uri): Use glib function to escape URI.
* plugins/publish-calendar/publish-location.c: (migrateURI): Use EUri to parse URI.
* plugins/publish-calendar/publish-calendar.c: (publish_online), (unmount_done_cb),
(struct mnt_struct), (mount_ready_cb), (ask_password), (ask_question),
(mount_first), (publish):
Use gio instead of gnome-vfs for opening (remote) files.
* plugins/save-calendar/ical-format.c: (do_save_calendar_ical):
* plugins/save-calendar/csv-format.c: (do_save_calendar_csv):
* plugins/save-calendar/rdf-format.c: (do_save_calendar_rdf):
Use gio GOutpuStream instead of gnome-vfs handle.
* plugins/save-calendar/format-handler.h: (open_for_writing):
* plugins/save-calendar/save-calendar.c: (open_for_writing): New helper function.
* shell/e-shell-window-commands.c: (command_quick_reference):
Use gio instead of gnome-vfs.
* widgets/misc/e-attachment.h: (struct _EAttachment):
* widgets/misc/e-attachment.c: (finalise), (init), (attachment_guess_mime_type),
(e_attachment_new), (struct DownloadInfo), (download_info_free),
(data_ready_cb), (download_to_local_path),
(e_attachment_new_remote_file):
Use gio instead of gnome-vfs to download remote files.
* widgets/misc/e-image-chooser.c: (image_drag_data_received_cb):
Use new util function to read file.
* widgets/misc/e-attachment-bar.c: (size_to_string): Stolen from gnome-vfs.
svn path=/trunk/; revision=35378