aboutsummaryrefslogtreecommitdiffstats
path: root/shell
diff options
context:
space:
mode:
authornobody <nobody@localhost>2003-05-03 19:02:31 +0800
committernobody <nobody@localhost>2003-05-03 19:02:31 +0800
commit003db0ae2e1ed2b175e0b69c860d07e9967534a7 (patch)
tree1445967f5c0ef4c749bc1b4030295ea1a12e3c00 /shell
parent19f2626e65d1700ff9c631a70ecb917f98dfcb38 (diff)
downloadgsoc2013-evolution-GNOME_PILOT_CONDUITS_2_0_8.tar.gz
gsoc2013-evolution-GNOME_PILOT_CONDUITS_2_0_8.tar.zst
gsoc2013-evolution-GNOME_PILOT_CONDUITS_2_0_8.zip
This commit was manufactured by cvs2svn to create tagGNOME_PILOT_CONDUITS_2_0_8
'GNOME_PILOT_CONDUITS_2_0_8'. svn path=/tags/GNOME_PILOT_CONDUITS_2_0_8/; revision=21067
Diffstat (limited to 'shell')
-rw-r--r--shell/.cvsignore28
-rw-r--r--shell/ChangeLog15219
-rw-r--r--shell/Evolution-Activity.idl106
-rw-r--r--shell/Evolution-ConfigControl.idl34
-rw-r--r--shell/Evolution-Offline.idl78
-rw-r--r--shell/Evolution-Session.idl41
-rw-r--r--shell/Evolution-Shell.idl135
-rw-r--r--shell/Evolution-ShellComponent.idl185
-rw-r--r--shell/Evolution-ShellComponentDnd.idl98
-rw-r--r--shell/Evolution-ShellView.idl25
-rw-r--r--shell/Evolution-Shortcuts.idl55
-rw-r--r--shell/Evolution-Storage.idl178
-rw-r--r--shell/Evolution-StorageSetView.idl37
-rw-r--r--shell/Evolution-Wizard.idl42
-rw-r--r--shell/Evolution-common.idl36
-rw-r--r--shell/Evolution.idl26
-rw-r--r--shell/GNOME_Evolution_Shell.server.in.in51
-rw-r--r--shell/GNOME_Evolution_TestComponent.server41
-rw-r--r--shell/Makefile.am383
-rw-r--r--shell/README14
-rw-r--r--shell/apps_evolution_shell.schemas253
-rw-r--r--shell/check-empty.xpm21
-rw-r--r--shell/check-filled.xpm21
-rw-r--r--shell/check-missing.xpm20
-rw-r--r--shell/e-activity-handler.c588
-rw-r--r--shell/e-activity-handler.h72
-rw-r--r--shell/e-component-info.c288
-rw-r--r--shell/e-component-info.h66
-rw-r--r--shell/e-component-registry.c525
-rw-r--r--shell/e-component-registry.h80
-rw-r--r--shell/e-config-upgrade.c1879
-rw-r--r--shell/e-config-upgrade.h28
-rw-r--r--shell/e-corba-config-page.c265
-rw-r--r--shell/e-corba-config-page.h68
-rw-r--r--shell/e-corba-shortcuts.c349
-rw-r--r--shell/e-corba-shortcuts.h66
-rw-r--r--shell/e-corba-storage-registry.c494
-rw-r--r--shell/e-corba-storage-registry.h69
-rw-r--r--shell/e-corba-storage.c1074
-rw-r--r--shell/e-corba-storage.h89
-rw-r--r--shell/e-folder-dnd-bridge.c487
-rw-r--r--shell/e-folder-dnd-bridge.h55
-rw-r--r--shell/e-folder-list.c692
-rw-r--r--shell/e-folder-list.h115
-rw-r--r--shell/e-folder-tree.c460
-rw-r--r--shell/e-folder-tree.h60
-rw-r--r--shell/e-folder-type-registry.c536
-rw-r--r--shell/e-folder-type-registry.h107
-rw-r--r--shell/e-folder.c552
-rw-r--r--shell/e-folder.h108
-rw-r--r--shell/e-history.c261
-rw-r--r--shell/e-history.h83
-rw-r--r--shell/e-icon-factory.c162
-rw-r--r--shell/e-icon-factory.h33
-rw-r--r--shell/e-local-folder.c560
-rw-r--r--shell/e-local-folder.h84
-rw-r--r--shell/e-local-storage.c1236
-rw-r--r--shell/e-local-storage.h67
-rw-r--r--shell/e-setup.c333
-rw-r--r--shell/e-setup.h32
-rw-r--r--shell/e-shell-about-box.c426
-rw-r--r--shell/e-shell-about-box.h62
-rw-r--r--shell/e-shell-config-autocompletion.c129
-rw-r--r--shell/e-shell-config-autocompletion.h34
-rw-r--r--shell/e-shell-config-default-folders.c203
-rw-r--r--shell/e-shell-config-default-folders.h34
-rw-r--r--shell/e-shell-config-folder-settings.c82
-rw-r--r--shell/e-shell-config-folder-settings.h32
-rw-r--r--shell/e-shell-config-offline.c168
-rw-r--r--shell/e-shell-config-offline.h33
-rw-r--r--shell/e-shell-config.c69
-rw-r--r--shell/e-shell-config.h30
-rw-r--r--shell/e-shell-constants.h50
-rw-r--r--shell/e-shell-corba-icon-utils.c208
-rw-r--r--shell/e-shell-corba-icon-utils.h40
-rw-r--r--shell/e-shell-folder-commands.c653
-rw-r--r--shell/e-shell-folder-commands.h42
-rw-r--r--shell/e-shell-folder-creation-dialog.c568
-rw-r--r--shell/e-shell-folder-creation-dialog.h49
-rw-r--r--shell/e-shell-folder-selection-dialog.c548
-rw-r--r--shell/e-shell-folder-selection-dialog.h82
-rw-r--r--shell/e-shell-folder-title-bar.c749
-rw-r--r--shell/e-shell-folder-title-bar.h84
-rw-r--r--shell/e-shell-importer.c1235
-rw-r--r--shell/e-shell-importer.h32
-rw-r--r--shell/e-shell-marshal.list28
-rw-r--r--shell/e-shell-offline-handler.c869
-rw-r--r--shell/e-shell-offline-handler.h81
-rw-r--r--shell/e-shell-offline-sync.c433
-rw-r--r--shell/e-shell-offline-sync.h33
-rw-r--r--shell/e-shell-settings-dialog.c392
-rw-r--r--shell/e-shell-settings-dialog.h65
-rw-r--r--shell/e-shell-shared-folder-picker-dialog.c540
-rw-r--r--shell/e-shell-shared-folder-picker-dialog.h33
-rw-r--r--shell/e-shell-startup-wizard.c800
-rw-r--r--shell/e-shell-startup-wizard.h30
-rw-r--r--shell/e-shell-user-creatable-items-handler.c796
-rw-r--r--shell/e-shell-user-creatable-items-handler.h74
-rw-r--r--shell/e-shell-utils.c149
-rw-r--r--shell/e-shell-utils.h34
-rw-r--r--shell/e-shell-view-menu.c868
-rw-r--r--shell/e-shell-view-menu.h32
-rw-r--r--shell/e-shell-view.c2925
-rw-r--r--shell/e-shell-view.h128
-rw-r--r--shell/e-shell.c2252
-rw-r--r--shell/e-shell.h170
-rw-r--r--shell/e-shortcuts-view-model.c341
-rw-r--r--shell/e-shortcuts-view-model.h66
-rw-r--r--shell/e-shortcuts-view.c800
-rw-r--r--shell/e-shortcuts-view.h74
-rw-r--r--shell/e-shortcuts.c1288
-rw-r--r--shell/e-shortcuts.h167
-rw-r--r--shell/e-splash.c451
-rw-r--r--shell/e-splash.h71
-rw-r--r--shell/e-storage-set-store.c1361
-rw-r--r--shell/e-storage-set-store.h91
-rw-r--r--shell/e-storage-set-view-checkboxes.etstate5
-rw-r--r--shell/e-storage-set-view-no-checkboxes.etstate4
-rw-r--r--shell/e-storage-set-view.c2444
-rw-r--r--shell/e-storage-set-view.etspec8
-rw-r--r--shell/e-storage-set-view.h122
-rw-r--r--shell/e-storage-set.c885
-rw-r--r--shell/e-storage-set.h123
-rw-r--r--shell/e-storage.c848
-rw-r--r--shell/e-storage.h214
-rw-r--r--shell/e-task-bar.c187
-rw-r--r--shell/e-task-bar.h71
-rw-r--r--shell/e-task-widget.c251
-rw-r--r--shell/e-task-widget.h78
-rw-r--r--shell/e-uri-schema-registry.c181
-rw-r--r--shell/e-uri-schema-registry.h70
-rw-r--r--shell/evolution-activity-client.c449
-rw-r--r--shell/evolution-activity-client.h91
-rw-r--r--shell/evolution-config-control.c241
-rw-r--r--shell/evolution-config-control.h70
-rw-r--r--shell/evolution-folder-selector-button.c455
-rw-r--r--shell/evolution-folder-selector-button.h81
-rw-r--r--shell/evolution-nognome.in13
-rw-r--r--shell/evolution-session.c169
-rw-r--r--shell/evolution-session.h67
-rw-r--r--shell/evolution-shell-client.c698
-rw-r--r--shell/evolution-shell-client.h97
-rw-r--r--shell/evolution-shell-component-client.c924
-rw-r--r--shell/evolution-shell-component-client.h142
-rw-r--r--shell/evolution-shell-component-dnd.c294
-rw-r--r--shell/evolution-shell-component-dnd.h136
-rw-r--r--shell/evolution-shell-component-utils.c169
-rw-r--r--shell/evolution-shell-component-utils.h54
-rw-r--r--shell/evolution-shell-component.c1227
-rw-r--r--shell/evolution-shell-component.h217
-rw-r--r--shell/evolution-shell-view.c258
-rw-r--r--shell/evolution-shell-view.h76
-rw-r--r--shell/evolution-storage-listener.c386
-rw-r--r--shell/evolution-storage-listener.h94
-rw-r--r--shell/evolution-storage-set-view-factory.c74
-rw-r--r--shell/evolution-storage-set-view-factory.h30
-rw-r--r--shell/evolution-storage-set-view-listener.c287
-rw-r--r--shell/evolution-storage-set-view-listener.h81
-rw-r--r--shell/evolution-storage-set-view.c481
-rw-r--r--shell/evolution-storage-set-view.h70
-rw-r--r--shell/evolution-storage.c1349
-rw-r--r--shell/evolution-storage.h185
-rw-r--r--shell/evolution-test-component.c715
-rw-r--r--shell/evolution-wizard.c409
-rw-r--r--shell/evolution-wizard.h83
-rw-r--r--shell/glade/.cvsignore4
-rw-r--r--shell/glade/Makefile.am9
-rw-r--r--shell/glade/e-active-connection-dialog.glade144
-rw-r--r--shell/glade/e-folder-list.glade110
-rw-r--r--shell/glade/e-shell-config-default-folders.glade194
-rw-r--r--shell/glade/e-shell-folder-creation-dialog.glade180
-rw-r--r--shell/glade/e-shell-shared-folder-picker-dialog.glade252
-rw-r--r--shell/glade/evolution-startup-wizard.glade92
-rw-r--r--shell/importer/.cvsignore10
-rw-r--r--shell/importer/GNOME_Evolution_Importer.idl97
-rw-r--r--shell/importer/Makefile.am66
-rw-r--r--shell/importer/evolution-importer-client.c251
-rw-r--r--shell/importer/evolution-importer-client.h74
-rw-r--r--shell/importer/evolution-importer-listener.c224
-rw-r--r--shell/importer/evolution-importer-listener.h71
-rw-r--r--shell/importer/evolution-importer.c229
-rw-r--r--shell/importer/evolution-importer.h96
-rw-r--r--shell/importer/evolution-intelligent-importer.c197
-rw-r--r--shell/importer/evolution-intelligent-importer.h74
-rw-r--r--shell/importer/import.glade119
-rw-r--r--shell/importer/intelligent.c484
-rw-r--r--shell/importer/intelligent.h28
-rw-r--r--shell/main.c630
188 files changed, 0 insertions, 69532 deletions
diff --git a/shell/.cvsignore b/shell/.cvsignore
deleted file mode 100644
index 635e84bd20..0000000000
--- a/shell/.cvsignore
+++ /dev/null
@@ -1,28 +0,0 @@
-*.lo
-.deps
-.libs
-.pure
-Evolution-Addressbook-SelectNames-common.c
-Evolution-Addressbook-SelectNames-skels.c
-Evolution-Addressbook-SelectNames-stubs.c
-Evolution-Addressbook-SelectNames.h
-Evolution-common.c
-Evolution-skels.c
-Evolution-stubs.c
-Evolution.h
-Evolution-Wombat-common.c
-Evolution-Wombat-skels.c
-Evolution-Wombat-stubs.c
-Evolution-Wombat.h
-ID
-Makefile
-Makefile.in
-evolution
-evolution-nognome
-evolution-test-component
-evolution.pure
-libeshell.la
-e-shell-marshal.c
-e-shell-marshal.h
-GNOME_Evolution_Shell.server
-GNOME_Evolution_Shell.server.in \ No newline at end of file
diff --git a/shell/ChangeLog b/shell/ChangeLog
deleted file mode 100644
index ae2abc409a..0000000000
--- a/shell/ChangeLog
+++ /dev/null
@@ -1,15219 +0,0 @@
-2003-05-01 Dan Winship <danw@ximian.com>
-
- * glade/e-shell-shared-folder-picker-dialog.glade: Don't expand
- the select-names entry, because we don't want it as tall as the
- button.
-
-2003-04-30 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-folder-selection-dialog.c
- (e_shell_folder_selection_dialog_construct): Set the default
- response to GTK_RESPONSE_OK.
-
-2003-04-29 Rodney Dawes <dobey@ximian.com>
-
- * Makefile.am: Fix install of evolution
-
-2003-04-28 Not Zed <NotZed@Ximian.com>
-
- [#41013]
-
- * e-shell-importer.c (html_size_req): removed.
- (create_help): renamed from create_html. Only creates a plain
- label widget now, with line wrap turned on. Also make the
- g_return an assert, it failing is entirely based on internal code.
- (show_import_wizard): s/create_html/create_help/g
-
- [#41648]
-
- * e-config-upgrade.c (upgrade_xml_file): upgrade_xml_file_1_0 made
- a bit more generic, this handles io, a callback handles xml
- changes.
- (is_xml1encoded): new function to tell if a string is in gal's
- xml1 'encoded' format, or raw locale text.
- (decode_xml1): decode xml1 encoded format to valid utf8.
- (upgrade_xml_1_2_rec): upgrades xml1 encoded or badly encoded xml
- content for specific parent->child nodes.
- (CONF_REVISION): bump the config revision to 1.3.1.
- (e_config_upgrade): if config revision < 1.3.1, then check xml
- files for xml1 content.
-
-2003-04-28 Rodney Dawes <dobey@ximian.com>
-
- * Makefile.am: Fix up some stuff for the nognome script
- * evolution-nognome.in: Fix up nognome script for Sun GNOME2
-
-2003-04-28 Rodrigo Moya <rodrigo@ximian.com>
-
- Fixes #41916
-
- * evolution-storage.c (get_folder_list_foreach): removed comment which
- does not apply any more.
- (impl_Storage__get_folderList): set sequence's maximum number of items
- to e_folder_tree_get_count as is.
-
-2003-04-28 Ettore Perazzoli <ettore@ximian.com>
-
- Patch from Sanshao Jiang <alex.jiang@sun.com>.
-
- [#41484]
-
- * main.c (main): Add e_proxy_init()
-
-2003-04-24 Dan Winship <danw@ximian.com>
-
- * evolution-shell-component.c (impl_setOwner): Comment out the
- pinging code again since it's only being used by Connector, where
- it's triggering an unrelated bug.
-
-2003-04-25 Ettore Perazzoli <ettore@ximian.com>
-
- [#41059]
-
- * e-corba-storage.c (async_open_cb): Added a missing unref of the
- storage in the closure.
- (async_open_folder_idle): Add the pending open to the pending open
- list before calling asyncOpenFolder, instead of after.
-
-2003-04-23 Not Zed <NotZed@Ximian.com>
-
- * e-local-storage.c (load_folder): cast to remove warning.
- (construct): set a physiucal uri on the root folder, so we dont
- get warnings when we add it later.
-
-2003-04-22 Anna Marie Dirks <anna@ximian.com>
-
- * e-shell-settings-dialog.c (init): Add appropriate padding
- to the Evolution Settings window. This is another bit of the
- fix for #41392.
-
- * e-corba-config-page.c (e_corba_config_page_construct): Add
- appropriate padding to the corba_config_page widget. Partial
- fix for #41392.
-
-2003-04-23 Anna Marie Dirks <anna@ximian.com>
-
- * glade/e-folder-list.glade: replaced buttons with stock buttons
- and added HIG-blessed spacing. Fixes 41145.
-
-2003-04-22 Anna Marie Dirks <anna@ximian.com>
-
- * e-shortcuts-view.c
- (destroy_group_cb): Set the border width of the message dialog
- to 6. Also corrected the capitalization for "Remove Shortcut
- Dialog". Fixes 41569
- (show_new_group_dialog): Fixed the title of "Create New Shortcut
- Group" . Partially fixes 41038.
- (rename_shortcut_cb): Corrected the label capitalization for
- Rename dialog. Fixes 41567.
-
-2003-04-21 Chris Toshok <toshok@ximian.com>
-
- * e-folder-list.c (e_folder_list_parse_xml): this should never
- happen unless you're really trying, but don't crash if the xml
- setting is malformed.
-
-2003-04-21 Ettore Perazzoli <ettore@ximian.com>
-
- * e-local-storage.c (create_folder_directory): Don't signal an
- error if mkdir() returns EEXIST. This should at least help with
- situations like the one described in #40989.
-
-2003-04-21 Anna Marie Dirks <anna@ximian.com>
-
- * e-shell-folder-commands.c (delete_dialog): Corrected border
- with for Delete Folder dialog. Fixes 41036.
- (e_shell_command_copy_folder): Corrected capitalization of the "Copy
- Folder" window title. Partial fix for 41025.
- (e_shell_command_move_folder): Corrected the capitalization of the
- "Move Folder" dialog. Fixes 41024.
-
-
-2003-04-21 Anna Marie Dirks <anna@ximian.com>
-
- * e-shell-folder-selection-dialog.c
- (e_shell_folder_selection_dialog_construct): Added appropriate border
- width to the folder selection dialog. Fixes 41022, 41146, 41147,
- 41010, partially fixes 41025.
-
-
-2003-04-21 Anna Marie Dirks <anna@ximian.com>
-
- * glade/evolution-startup-wizard.glade: Added spacing/padding to
- first-run dialog. Fixes 41242.
-
-2003-04-21 Anna Marie Dirks <anna@ximian.com>
-
- * glade/e-shell-folder-creation-dialog.glade: Misc HIG-related tweaks,
- mostly spacing and padding related. Fixes 41008.
-
- * e-shell-folder-creation-dialog.c (add_storage_set_view): Added
- appropriate spacing to the main vbox of the folder creation dialog.
- Partially fixes 41008.
-
-2003-04-21 Anna Marie Dirks <anna@ximian.com>
-
- * glade/e-shell-config-default-folders.glade: Added appropriate
- spacing/padding to the default folder pages of the settings dialog.
- Partial fix for 41128.
-
-
-2003-04-21 Anna Marie Dirks <anna@ximian.com>
-
- * glade/e-active-connection-dialog.glade: Fixed padding/spacing/caps
- of the "Go Offline" dialog. Fixes 41225 and 41227.
-
-2003-04-18 Rodney Dawes <dobey@ximian.com>
-
- * e-shell-view.c: Use PREFIX instead of EVOLUTION_DATADIR for
- bonobo_ui_util_set_ui () [#21499]
-
-2003-04-17 Dan Winship <danw@ximian.com>
-
- * e-shell-folder-creation-dialog.c (add_folder_types): If the
- default_type is "foo/bar" and "foo" appears in the list but
- "foo/bar" doesn't, use "foo" as the default type. [#41468] Also,
- remove a workaround for a gtk 1.2 bug.
-
-2003-04-16 Dan Winship <danw@ximian.com>
-
- * e-corba-storage.c (async_create_folder): If the new folder's
- parent has unresolved children, async_open the parent first, then
- create the new folder. [#41413]
- (async_create_folder, async_remove_folder, async_xfer_folder,
- async_open_folder, async_discover_shared_folder,
- async_remove_shared_folder): Ref the storage.
- (async_folder_cb, async_folder_discovery_cb): Unref it
-
-2003-04-16 Jeffrey Stedfast <fejj@ximian.com>
-
- * e-config-upgrade.c: Turn off debugging. Fixes bug #41469.
-
-2003-04-16 Ettore Perazzoli <ettore@ximian.com>
-
- * apps_evolution_shell.schemas: Increase the default value for
- /schemas/apps/evolution/shell/view_defaults/folder_bar/width to
- 200. [#41002]
-
- * evolution-shell-component.c (owner_ping_callback): Enable this
- again.
- (setup_owner_pinging): Same.
- (impl_setOwner): Check if the shell is in-process and, if so, call
- setup_owner_pinging().
-
-2003-04-15 Hans Petter Jansson <hpj@ximian.com>
-
- * e-setup.c (e_setup_check_config): Free the temporary string.
-
- * e-shell-user-creatable-items-handler.c (append_xml_for_menu_item):
- Free the icon xml string.
-
- * e-shell.c (parse_default_uri): Free the component name, the
- configuration path and the temporary path.
-
-2003-04-15 Dan Winship <danw@ximian.com>
-
- * e-folder.c (e_folder_get_has_subfolders,
- e_folder_set_has_subfolders): new boolean flag.
-
- * e-storage.c (EStoragePrivate, impl_finalize, init): Remove the
- pseudofolders hash
- (e_storage_async_open_folder): Replace the pseudofolders test with
- a test of whether the folder has the "has_subfolders" flag set.
- (e_storage_new_folder): Likewise (for the folder's parent).
- (e_storage_declare_has_subfolders): Set "has_subfolders" on the
- folder.
- (e_storage_get_has_subfolders): Check "has_subfolders" on the
- folder.
- Should fix #33919.
-
-2003-04-14 Not Zed <NotZed@Ximian.com>
-
- * glade/e-active-connection-dialog.glade: fix the title of the
- dialogue box. #41304.
-
-2003-04-09 Dan Winship <danw@ximian.com>
-
- * e-folder-list.c: Update for e_option_menu prototype
- constification
-
-2003-04-08 Ettore Perazzoli <ettore@ximian.com>
-
- * e-setup.c (setup_bonobo_conf_private_directory): Removed.
- (e_setup): Do not call here. Also, removed hacks for
- ~/evolution/config and ~/evolution/local/Trash.
-
-2003-04-08 Dan Winship <danw@ximian.com>
-
- * main.c (main): Add a "--setup-only" flag, to just run e_setup()
- and exit. (For #40889)
-
- * glade/evolution-startup-wizard.glade: Remove the color specs so
- the druid will use theme colors
-
- * importer/import.glade: Likewise
-
-2003-04-08 Ettore Perazzoli <ettore@ximian.com>
-
- [#40912]
-
- * e-shell-folder-selection-dialog.c (impl_dispose):
- g_object_weak_unref() the shell here.
-
-2003-04-07 Dan Winship <danw@ximian.com>
-
- * evolution-storage.c (evolution_storage_class_init): Fix arg
- types on REMOVED_SHARED_FOLDER signal. #40888
-
- * evolution-folder-selector-button.c (clicked): Desensitize the
- window's top-level container rather than desensitizing the window
- itself, which causes strange problems [#40854]. Also fix up the
- code that tries to watch for the parent window being destroyed.
-
- * e-shell.c (impl_Shell_selectUserFolder): Use
- e_dialog_set_transient_for_xid.
-
- * e-shell-folder-selection-dialog.c (impl_response): Treat
- GTK_RESPONSE_DELETE_EVENT the same as GTK_RESPONSE_CANCEL.
- (e_shell_folder_selection_dialog_construct): No need to catch
- "delete_event" signal.
-
-2003-04-07 Dan Winship <danw@ximian.com>
-
- * Makefile.am ($(server_in_files)): Substitute version number into
- the evolution binary name in the server file
- (INCLUDES): define EVOLUTION_TOOLSDIR
-
- * GNOME_Evolution_Shell.server.in.in: Clean up server names. Add
- "-@VERSION@" to the end of the shell binary name
-
- * main.c (main): if KILL_PROCESS_CMD is defined, add a
- --force-shutdown argument that runs killev and exits.
-
-2003-04-07 Not Zed <NotZed@Ximian.com>
-
- [#40536]
-
- * evolution-shell-component.c (impl_interactive): If going
- interactive, track the view id in a private area.
- (evolution_shell_component_get_parent_view_xid): Accessor method
- to retrieve the current view xid.
-
-2003-04-06 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view.c (update_window_icon): Get the large version of
- the icon instead of the small one, so it works more nicely with
- modern WMs.
-
-2003-04-04 Ettore Perazzoli <ettore@ximian.com>
-
- [#40413]
-
- * e-shell-folder-selection-dialog.c: Define RESPONSE_NEW for the
- "New" button in the dialog.
- (impl_response): Handle RESPONSE_NEW.
- (e_shell_folder_selection_dialog_construct): Add the "new" button
- with RESPONSE_NEW response_id.
-
-2003-04-04 Ettore Perazzoli <ettore@ximian.com>
-
- [#40748]
-
- * apps_evolution_shell.schemas: Remove the icon_modes schema.
-
- * e-shell-view.c (setup_defaults): Don't set the icon modes from
- GConf, they are already stored in the shortcuts.xml file.
- (e_shell_view_save_defaults): Likewise, don't set it here.
-
- * e-config-upgrade.c: Remove translation from
- ShortcutBarGroup%iIconMode to
- shell/view_defaults/shortcut_bar/icon_types.
-
-2003-04-02 Rodrigo Moya <rodrigo@ximian.com>
-
- * importer/GNOME_Evolution_Importer.idl:
- * importer/evolution-importer.[ch]: added "foldertype" argument to
- GNOME::Evolution::Importer.
-
- * importer/evolution-importer-client.[ch]
- (evolution_importer_client_load_file): added "folder_type" argument
- and use it in the call to GNOME_Evolution_Importer_loadFile.
-
- * e-shell-importer.c (start_import): added "folder_type" argument and
- use it in the call to evolution_importer_client_load_file.
- (folder_selected): pass in the "folder_type" argument to start_import,
-
-2003-04-02 Not Zed <NotZed@Ximian.com>
-
- [#40652]
-
- * e-shell-view.c (setup_widgets): Pack the folder and shortcut
- bars into the paned as sizeable.
-
- [#39467]
-
- * e-shell.c (e_shell_construct): Change the splash logic slightly,
- so that if we can't create the splash, we dont try and cast/use
- it.
- * e-splash.c (e_splash_new): dont use a g_return* for what could
- be a valid (tho incorrect) runtime condition.
-
- [#40590]
-
- * e-config-upgrade.c (identity_map[]): Move the signature stuff to
- a child node.
- (identity_sig_map[]): Define the signature node. Fix
- *autogenerated_signature_%i to map to "auto".
-
-2003-04-01 Not Zed <NotZed@Ximian.com>
-
- [#40474]
-
- * e-config-upgrade.c (gconf_remap_list[]): The summary settings
- start at "My-Evolution", not "/My-Evolution".
- (import_bonobo_config): Same for mail summary settings, and hex
- decode the string for the strlist. Add a few extra debug
- printf's.
-
-2003-03-28 Ettore Perazzoli <ettore@ximian.com>
-
- [#40377]
-
- * main.c (kill_old_wombat): New.
- (kill_wombat): New.
- (idle_cb): Call kill_old_wombat().
-
-2003-03-27 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-offline-handler.c (update_dialog_tree_view): Renamed
- from update_dialog_clist, Ported to GtkTreeView.
- (update_dialog_tree_view_hash_foreach): Likewise.
-
- * glade/e-active-connection-dialog.glade: Rename
- "active_connection_clist" to "active_connection_treeview".
-
-2003-03-27 Not Zed <NotZed@Ximian.com>
-
- * e-shell-about-box.c: Make Radek's surname correct, Doulík,
- inserted utf8 into the name string. For bug #17034.
-
-2003-03-26 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view.c (e_shell_view_construct): Pass "evolution-1.4" as
- the app name to bonobo_ui_util_set_ui() instead of "evolution".
-
-2003-03-26 Ettore Perazzoli <ettore@ximian.com>
-
- [Shell part of #7153.]
-
- * e-local-storage.c (load_folder): Call e_storage_new_folder()
- instead of new_folder() here so the folder doesn't get added to
- the EvolutionStorage. Since the EvolutionStorage has its own
- CORBAfied copy of the folder info [sigh] and it can't be updated,
- we have to set up the EvolutionStorage after setup_stock_folders()
- has been called.
- (setup_corba_storage): New function to set up the CORBA storage.
- (load_all_folders): Call setup_corba_storage() after
- setup_stock_folders().
-
-2003-03-25 Not Zed <NotZed@Ximian.com>
-
- * e-shell-settings-dialog.c (set_dialog_size): Use
- set_default_size instead of size_request so we allow the user to
- resize the window. Also try using 60x30 rather than 72x35 as the
- approximate font cell size. For bug #39706.
-
-2003-03-25 Dan Winship <danw@ximian.com>
-
- * e-folder-dnd-bridge.c: Update for e_notice move.
- * e-setup.c: Likewise
- * e-shell-folder-commands.c: Likewise
- * e-shell-folder-creation-dialog.c: Likewise
- * e-shell-offline-sync.c: Likewise
- * e-shell-shared-folder-picker-dialog.c: Likewise
- * e-shell-view-menu.c: Likewise
- * e-shell.c: Likewise
- * evolution-shell-component-utils.c: Likewise
-
- * Makefile.am (libeshell_la_LIBADD): libeshell depends on
- libeutil.
-
- * e-corba-storage.c: Fix warnings
-
- * glade/evolution-startup-wizard.glade: Fix colors again
-
-2003-03-25 Dan Winship <danw@ximian.com>
-
- * Evolution-ShellComponent.idl (interactive): add a "new_view_xid"
- arg, so the component has a window id to make use of as a parent
- if it needs to pop up a dialog.
-
- * e-shell.c (set_interactive): Pass the new_view_xid when going
- interactive.
- (e_shell_set_interactive): Remove this since it wasn't being used,
- and couldn't be used for anything except lying to the components.
-
- * evolution-shell-component.c
- (evolution_shell_component_class_init): Update "interactive"
- signal definition
- (impl_interactive): Update prototype and signal emission
-
- * e-shell-marshal.list (NONE:BOOL,INT): add
-
-2003-03-21 Dan Winship <danw@ximian.com>
-
- * e-corba-storage.c (async_open_folder_idle): If we get a second
- request to open a folder we're already waiting for, don't send a
- second CORBA request, just remember the additional request.
- (async_open_cb): Call the callbacks for all pending requests for
- this folder.
- (init): grumble-grumble-non-g_new0-using-people-grumbe
-
-2003-03-20 JP Rosevear <jpr@ximian.com>
-
- * e-shell-view-menu.c: remove unused command
-
-2003-03-19 Not Zed <NotZed@Ximian.com>
-
- * e-config-upgrade.c (e_config_upgrade): Added some more doco just
- to make it clear how it was intended to be used/expanded.
-
-2003-03-18 Ettore Perazzoli <ettore@ximian.com>
-
- * importer/evolution-importer.c
- (impl_GNOME_Evolution_Importer_loadFile): Get a physical_uri arg
- instead of a folderpath arg.
-
- * importer/evolution-importer-client.c
- (evolution_importer_client_load_file): Get a physical_uri arg.
-
- * e-shell-importer.c (start_import): Get a physical_uri arg
- instead of a folderpath.
- (folder_selected): Updated accordingly.
-
-2003-03-19 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-importer.c (get_name_from_component_info): Look for the
- "evolution:menu_name" property instead of "evolution:menu-name".
- [#39692]
-
-2003-03-19 Ettore Perazzoli <ettore@ximian.com>
-
- * evolution-folder-selector-button.c (set_folder): If you can't
- get a pixbuf icon for the folder's type, do not crash. [#39599]
-
- * e-shell.c (impl_Shell__get_displayName): Removed. [#38974]
- (e_shell_class_init): Do not install anymore.
-
- * Evolution-Shell.idl: Remove displayName attribute.
-
-2003-03-18 Ettore Perazzoli <ettore@ximian.com>
-
- * importer/evolution-importer.c
- (impl_GNOME_Evolution_Importer_loadFile): Get a physical_uri arg
- instead of a folderpath arg.
-
- * importer/evolution-importer-client.c
- (evolution_importer_client_load_file): Get a physical_uri arg.
-
- * e-shell-importer.c (start_import): Get a physical_uri arg
- instead of a folderpath.
- (folder_selected): Updated accordingly.
-
-2003-03-14 Dan Winship <danw@ximian.com>
-
- * e-storage.c (e_storage_get_has_subfolders): Add
- (e_storage_declare_has_subfolders): Rename from
- e_storage_has_subfolders to make it clearer that this is a setter,
- not a getter. (Can't call it e_storage_set_has_subfolders because
- that sounds like it belongs in e-storage-set.)
-
- * e-corba-storage.c (impl_StorageListener_notifyHasSubfolders):
- update for e_storage_declare_has_subfolders name change
- (get_folder): Override the default EStorage implementation: if
- asked for a folder under a not-yet-expanded folder, attempt to
- force the parent(s) to expand so that the child is available.
- Fixes part of #30415
-
-2003-03-14 Dan Winship <danw@ximian.com>
-
- * Evolution-Storage.idl (asyncOpenFolder): add a Bonobo::Listener
- to this like the other async interfaces, rather than having a
- hacky way to signal failure.
-
- * evolution-storage.c (impl_Storage_asyncOpenFolder): Update to
- take a listener and emit it as part of the signal
- (evolution_storage_class_init): update OPEN_FOLDER signal
- prototype.
-
- * e-shell-marshal.list (NONE:POINTER,STRING): add, for changed
- EvolutionStorage open_folder signal
-
- * e-storage.c (e_storage_async_open_folder): add a callback arg
- (impl_async_open_folder): call the callback with NOTIMPLEMENTED.
- (class_init): remove the CLOSE_FOLDER signal
- (e_storage_has_subfolders): Don't emit CLOSE_FOLDER since it
- doesn't exist any more, and this function is used for that side
- effect any more anyway.
-
- * e-corba-storage.c (async_open_folder): add the callback arg and
- create a proper closure.
- (async_open_folder_idle): Call the callback in case of error.
- Create a listener and pass that to the CORBA call.
- (async_open_cb): Listener callback.
-
- * e-storage-set.c (storage_set_view_folder_opened): Pass a
- callback to e_storage_async_open_folder.
- (async_open_cb): emit CLOSE_FOLDER if the open failed
- (storage_close_folder_cb): Remove this since the signal no longer
- exists.
-
-2003-03-11 Dan Winship <danw@ximian.com>
-
- * e-shell-startup-wizard.c (start_wizard): If the wizard factory
- returns NULL, we'll get a NIL wizard but no exception. Deal with
- that case. (ie, try the next wizard).
- (finish_func): Simplify for e-timezone-dialog changes.
- (prepare_timezone_page): If there is already a timezone set in
- gconf, set the map to point to it. (For connector autoconfig.)
-
-2003-03-07 Not Zed <NotZed@Ximian.com>
-
- ** reverted the following patch from ettore, this is a gnome 2.2
- api change, and shouldn't be used yet.
-
- * e-shell.c (impl_finalize): Use
- bonobo_activation_unregister_active_server() instead of
- bonobo_activation_active_server_unregister().
- (e_shell_construct): Use
- bonobo_activation_register_active_server() instead of
- bonobo_activation_active_server_register().
-
-2003-03-04 Not Zed <NotZed@Ximian.com>
-
- * main.c (show_development_warning): Separated the current stable
- version number from the warning prompt, and fixed a minor
- grammatical error. For bug #38775.
-
-2003-03-06 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell.c (impl_Shell_selectUserFolder): At least for now,
- disable the nasty XWMHints trick to fool WMs; it is not needed now
- that everything is in-proc.
-
-2003-03-06 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-utils.c (e_shell_folder_name_is_valid): Do not allow
- names with a "#" in them either.
-
-2003-03-06 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view.c (update_other_users_folder_items_sensitivity):
- New function to toggle the "open other user's folder" menu item
- sensitivity on or off depending on whether there are any storages
- that actually support that.
- (storage_set_removed_storage_callback): New callback for the
- EStorageSet's "removed_storage" signal; it updates the sensitivity
- if necessary.
- (storage_set_new_storage_callback): Likewise, new callback for the
- EStorageSet's "new_storage" signal.
- (e_shell_view_construct): Connect these two signal callbacks here.
- Also, call update_other_users_folder_items_sensitivity() to set up
- the initial sensitivity of the menu item.
- (update_for_current_uri): Add a missing EStorageSetView cast here.
-
-2003-03-06 Ettore Perazzoli <ettore@ximian.com>
-
- [#34371]
-
- * e-shell-shared-folder-picker-dialog.c
- (folder_name_entry_changed_callback): New callback to set the
- sensitivity of the OK button according to whether the folder name
- entry is empty or not.
- (show_dialog): Connect here. Pop up an error message if no user
- is selected.
-
-2003-03-06 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell.c (impl_finalize): Use
- bonobo_activation_unregister_active_server() instead of
- bonobo_activatino_active_server_unregister().
- (e_shell_construct): Use
- bonobo_activation_register_active_server() instead of
- bonobo_activation_active_server_register().
-
-2003-03-06 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-importer.c (IN): Use G_GNUC_FUNCTION instead of
- __FUNCTION__.
- (OUT): Likewise.
-
-2003-03-06 Ettore Perazzoli <ettore@ximian.com>
-
- Patch from Not Zed <NotZed@Ximian.com>:
-
- * main.c (show_development_warning): Separated the current stable
- version number from the warning prompt, and fixed a minor
- grammatical error. For bug #38775.
-
-2003-03-06 Ettore Perazzoli <ettore@ximian.com>
-
- * e-config-upgrade.c (import_bonobo_config): Protect from val
- being NULL when printf()ing -- should fix #39096 (Solaris-specific
- crash).
-
-2003-03-05 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view-menu.c: Added icon for "/popups/NewPopup/Folder".
-
-2003-03-05 Ettore Perazzoli <ettore@ximian.com>
-
- * importer/Makefile.am (BUILT_SOURCES): $(IDL_GENERATED), not
- $(IDL_GENERATED_H).
- (CLEANFILES): Make the same as $(BUILT_SOURCES).
- (GNOME_Evolution_Importer-impl.o): Removed useless rule.
-
-2003-03-04 Mike Kestner <mkestner@ximian.com>
-
- * e-shell-view.c (update_for_current_uri): only set current
- folder when the folder_path is different from the current folder.
-
-2003-03-04 Ettore Perazzoli <ettore@ximian.com>
-
- * e-folder-dnd-bridge.c (find_matching_target_for_drag_context):
- Handle p->data as a GdkAtom instead of a GdkAtom *.
- (handle_data_received_non_path): Set the target member of the
- corba_data struct to be the name of the atom.
-
- * e-storage-set-view.c (impl_tree_drag_data_get): Pass the name of
- the atom instead of the atom itself.
-
- * Evolution-ShellComponentDnd.idl: Changed the type of Data.target
- to string.
-
-2003-03-03 Ettore Perazzoli <ettore@ximian.com>
-
- * glade/e-shell-shared-folder-picker-dialog.glade: Swap Cancel/OK
- buttons as per the HIG. Also added proper response_ids.
-
-2003-03-03 Ettore Perazzoli <ettore@ximian.com>
-
- * evolution-folder-selector-button.c (impl_finalize): Protect
- against priv->possible_types being NULL.
-
-2003-02-27 Rodney Dawes <dobey@ximian.com>
-
- * Makefile.am (evolution_SOURCES): Add e-config-upgrade.h
-
-2003-02-26 Chris Toshok <toshok@ximian.com>
-
- * e-folder-list.c (e_folder_list_parse_xml): make this more robust
- - only assume it's a folderlistitem node if the name of the node
- is "folder".
-
-2003-02-26 Jeffrey Stedfast <fejj@ximian.com>
-
- * e-config-upgrade.c: Change the type of load_http_images to INT
- rather than BOOL. Fixes bug #38767.
-
-2003-02-26 Dan Winship <danw@ximian.com>
-
- * e-shell-startup-wizard.c (start_wizard): New routine to attempt
- to start each available startup wizard in priority order, and
- return once it has successfully started one. (Allows Connector,
- etc, to override the mailer startup wizard.)
- (make_corba_dialog_pages): Use it.
-
-2003-02-26 Not Zed <NotZed@Ximian.com>
-
- * apps_evolution_shell.schemas: Added a key for
- /apps/evolution/version - seems the best place to put it. This
- should not return any value if unset, so i'm not sure if this is
- the right mechanism ...
-
- * e-config-upgrade.c: Upgrade settings from earlier versions of
- evolution.
-
- * main.c (upgrade_from_1_0_if_needed): Removed.
- (main): Call e_config_upgrade before going into gmainloop.
- (main): Turn off the --force-upgrade option, since it doesn't work
- yet ...
-
-2003-02-25 Dan Winship <danw@ximian.com>
-
- * Evolution-Wizard.idl: Change this to let the Wizard provide an
- array of title/icon/control triplets, instead of just controls, so
- the shell doesn't need to know the name of each page a priori.
-
- * glade/evolution-startup-wizard.glade: Remove the mailer-specific
- pages, which are now inserted at run time based on info from the
- mailer.
-
- * evolution-wizard.c: Update for new idl.
- (evolution_wizard_new): Now takes no arguments.
- (evolution_wizard_add_page): New function to add page info to the
- wizard.
-
- * e-shell-startup-wizard.c: Various renamings to make this
- slightly less mailer-centric, though it still explicitly launches
- the mailer startup wizard.
- (make_corba_page): Replaces make_identity_page, make_receive_page,
- etc. Uses the new Wizard idl to generically create a page and
- insert it into the druid.
- (e_shell_startup_wizard_create): Update
-
-2003-02-25 Dan Winship <danw@ximian.com>
-
- * e-shell-startup-wizard.c (connect_page, make_importer_page): Use
- g_signal_connect_after to connect to the "prepare" signal to work
- around a GnomeDruidPageStandard bug (b.g.o 81869)
- (e_shell_startup_wizard_create): Remove the "return TRUE" that was
- added here a while back to disable the startup wizard.
-
- * glade/evolution-startup-wizard.glade: Change "Next" and "Finish"
- in the text to "Forward" and "Apply" to match the gnome 2 druid
- buttons.
-
-2003-02-24 Rodney Dawes <dobey@ximian.com>
-
- * e-shell-view.c: Doh, forgot to remove the e-gray-bar.h include
-
-2003-02-24 Rodney Dawes <dobey@ximian.com>
-
- * Makefile.am: We don't need e-gray-bar.[ch] anymore
- * e-gray-bar.[ch]: Remove these unused files now
- * e-shell-folder-title-bar.c: We are themeable now!!!!
- Use GtkArrows now instead of pixmaps
- Get rid of the hardcoded colors
- Add an expose_event to paint a flat box for the background
- * e-shell-view.c: Don't need e-gray-bar anymore
-
-2003-02-24 Ettore Perazzoli <ettore@ximian.com>
-
- * evolution-shell-component.c (impl_populateFolderContextMenu):
- Don't release_unref the corba_uih since
- bonobo_ui_component_set_container() takes ownership of the object
- without reffing it.
-
-2003-02-24 Ettore Perazzoli <ettore@ximian.com>
-
- * glade/e-active-connection-dialog.glade: Update dialog to use
- stock response IDs.
-
-2003-02-20 Not Zed <NotZed@Ximian.com>
-
- * main.c (upgrade_from_1_0_if_needed): fix the conf keys, currently unused.
-
- * e-shell.c (save_settings_for_component): lower-case the config prefix.
-
-2003-02-20 Dan Winship <danw@ximian.com>
-
- * Makefile.am (evolution_LDADD):
- s/libemiscwidgets.a/libemiscwidgets.la/ and likewise for
- libetimezonedialog
-
-2003-02-18 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shortcuts.c (shortcut_item_new): Get the name from the name,
- not the type. Fixes #37952, pointed out by Lonnie Borntreger.
-
-2003-02-17 Chris Toshok <toshok@ximian.com>
-
- * e-shortcuts.c (load_shortcuts): plug memory leak - free path.
-
-2003-02-13 Ettore Perazzoli <ettore@ximian.com>
-
- [Ported SIGSEGV signal redirection hack from mail/.]
-
- * main.c (segv_redirect): New, SIGSEGV signal handler.
- (setup_segv_redirect): New function to set it up.
- (main): Call setup_segv_redirect().
-
-2003-02-12 Ettore Perazzoli <ettore@ximian.com>
-
- * e-setup.c (DEFAULT_USER_PATH): Look into evolution/$BASE_VERSION
- instead of evolution-$BASE_VERSION.
-
-2003-02-11 Joe Shaw <joe@ximian.com>
-
- * main.c (show_development_warning): Suggest people use 1.2.x instead
- of 1.0.x.
-
-2003-02-09 Larry Ewing <lewing@ximian.com>
-
- * e-local-storage.c (remove_folder_directory): fix length calculation.
- (create_folder_directory): remove alloca usage, clears up crash.
-
-2003-02-07 Larry Ewing <lewing@ximian.com>
-
- * e-shell-folder-creation-dialog.c
- (folder_name_entry_activate_cb): add an activate handler that
- returns a response OK if the OK response would be active.
-
-2003-02-06 Dan Winship <danw@ximian.com>
-
- * evolution-test-component.c (main): s/PACKAGE/GETTEXT_PACKAGE/ in
- gettext init.
-
-2003-02-06 Not Zed <NotZed@Ximian.com>
-
- * e-shortcuts-view.c (class_init): use POINTER_STRING_BOOL for
- activate_shortcut.
-
- * e-shell-marshal.list: Added NONE,STRING,BOOL, and
- POINTER,STRING,BOOL, removed POINTER,STRING,INT
-
- * evolution-shell-view.c (evolution_shell_view_class_init): Use
- STRING_BOOL for the set_message signal to match rest of command.
-
- * e-shell-marshal.list: Added NONE,STRING,STRING,STRING
-
- * evolution-shell-component.c
- (evolution_shell_component_class_init): Change the
- user_create_new_item marshaller to STRING_STRING_STRING to match
- the rest of the call. The 'new' button should work now.
-
- * e-setup.c (copy_default_stuff): We want to copy whats in the
- default user dir, not the default user dir.
-
-2003-02-05 Dan Winship <danw@ximian.com>
-
- * Makefile.am (INCLUDES): Define EVOLUTION_IMAGES using
- $(imagesdir). Define EVOLUTION_GLADEDIR using $(gladedir)
- (eshellincludedir): Define in terms of $(privincludedir)
- (evolution_LDFLAGS): Remove this. gmodule-2's LDFLAGS include the
- equivalent of -export-dynamic for us.
- (serverdir, etspecdir): Remove. Defined in configure.in now.
-
- * e-folder.c: #include <string.h>
- * e-corba-config-page.c: Likewise
- * e-shell-config.c: Likewise
- * e-shell-folder-creation-dialog.c: Likewise
- * e-shell-folder-title-bar.c: Likewise
- * e-shell-startup-wizard.c: Likewise
- * evolution-activity-client.c: Likewise.
- * evolution-shell-component-client.c: Likewise
- * evolution-shell-component-utils.c: Likewise
- * evolution-storage.c: Likewise
- * evolution-test-component.c: Likewise
-
- * e-shortcuts-view.c (destroy_group_cb): Remove unused variable
-
- * importer/Makefile.am (INCLUDES): Remove -I$(includedir). Define
- EVOLUTION_GLADEDIR using $(gladedir).
- (libevolution_importerincludedir): Define in terms of
- $(privincludedir)
- (gladedir): Removed. Defined in configure.in now.
-
- * glade/Makefile.am (gladedir): Likewise
-
-2003-02-05 Dan Winship <danw@ximian.com>
-
- * importer/evolution-intelligent-importer.c:
- s/BonoboXObject/BonoboObject/
-
- * e-folder-list.c (e_folder_list_class_init):
- s/glade_gnome_init/glade_init/
-
- * main.c (main): Likewise
-
-2003-02-05 Not Zed <NotZed@Ximian.com>
-
- * e-shell-startup-wizard.c (start_importers): re-enable.
- (prepare_importer_page): re-enable importer code.
-
- * e-shell-importer.c (druid_finish_button_change): removed, since
- its not such a hack to change anymore. Dunno how to get an icon
- on it tho, without a stock button.
- (show_import_wizard): Change the apply button to "Import" here.
-
-2003-01-28 Not Zed <NotZed@Ximian.com>
-
- * e-local-storage.c (create_folder_directory): We can't use
- pointer arithmetic with g_path_get_*, so adjust code accordingly.
-
-2003-01-16 Not Zed <NotZed@Ximian.com>
-
- * e-shell-startup-wizard.c (e_shell_startup_wizard_create): Hook
- onto finish instead of next on the last page.
-
-2003-01-28 Ettore Perazzoli <ettore@ximian.com>
-
- * Makefile.am ($(SELECT_NAMES_IDL_GENERATED_C)): No need for the
- @true command.
- ($(IDL_GENERATED_C)): Likewise.
- (e-shell-marshal.h, e-shell-marshal.c): Use different names for
- the .tmp files so these can be generated in parallel.
-
- * importer/Makefile.am (GNOME_Evolution_Importer-impl.o): Remove
- unused rule.
- ($(IDL_GENERATED_C)): Remove useless @true command.
- (BUILT_SOURCES): Put the .h generated files in here as well.
-
-2003-01-28 Ettore Perazzoli <ettore@ximian.com>
-
- * Makefile.am (Evolution-impl.o): Removed unused rule.
-
-2003-01-28 Ettore Perazzoli <ettore@ximian.com>
-
- * importer/Makefile.am: Make this work with parallel make as well.
-
-2003-01-28 Ettore Perazzoli <ettore@ximian.com>
-
- * Makefile.am: Use a little trick for the IDL compilation so that
- it works with parallel makes.
-
-2003-01-28 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell.c (e_shell_construct): Use
- bonobo_activation_server_register() instead of
- bonobo_activation_register_active_server() again, since we want to
- be able to build against bonobo-activation 2.0 and the latter is
- 2.2-specific.
- (impl_finalize): Likewise, use
- bonobo_activation_active_server_unregister() instead of
- bonobo_activation_unregister_active_server().
-
-2003-01-27 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-importer.c (choose_importer_from_list): Set
- GTK_RESPONSE_OK as the default response.
-
- * Makefile.am (INCLUDES): Add -DGNOME_DISABLE_DEPRECATED,
- -DBONOBO_DISABLE_DEPRECATED.
-
- * e-shortcuts.c (update_shortcut_and_emit_signal): Use
- g_signal_emit() instead of gtk_signal_emit().
-
- * e-shortcuts-view.c (destroy_group_cb): Port from GnomeMessageBox
- to GtkMessageDialog.
-
- * e-shell.c (get_icon_path_for_component_info): Use
- gnome_program_locate_file() instead of gnome_pixmap_file().
- (impl_finalize): Use bonobo_activation_unregister_active_server()
- instead of bonobo_activation_active_server_register().
- (e_shell_construct): Use
- bonobo_activation_register_active_server() instead of
- bonobo_activation_active_server_register().
-
- * e-shell-view-menu.c (command_submit_bug): Use e_notice().
- (launch_pilot_settings): Use g_find_program_in_path() instead of
- gnome_is_program_in_path().
- (command_submit_bug): Likewise.
-
- * e-shell-utils.c (get_icon_path): Use g_file_test() instead of
- g_file_exists().
-
- * e-shell-startup-wizard.c (prepare_importer_page): Port from
- GnomeMessageBox to GtkMessageDialog.
-
- * e-shell-shared-folder-picker-dialog.c (show_dialog): Update for
- GtkDialog.
- (progress_dialog_close_callback): Removed.
- (progress_dialog_clicked_callback): Removed.
- (progress_dialog_response_callback): New.
- (create_progress_dialog): Ported to GnomeDialog.
-
- * e-shell-offline-sync.c: Add member parent_window to struct
- SyncData.
- (e_shell_offline_sync_all_folders): Set it from the parent_window
- arg.
- (progress_dialog_close_callback): Removed.
- (progress_dialog_clicked_callback): Removed.
- (progress_dialog_response_callback): New.
- (setup_dialog): Create a GtkDialog instead of a GnomeDialog.
- (sync_folder): Updated for GtkDialog.
-
- * e-shell-offline-handler.c (dialog_handle_ok): Make it get a
- GtkDialog instead of a GnomeDialog.
- (dialog_handle_cancel): Likewise.
- (dialog_clicked_cb): Removed.
- (dialog_response_cb): New.
- (pop_up_confirmation_dialog): Connect the new dialog_response_cb()
- instead of the old dialog_clicked_cb(). Removed
- gnome_dialog_set_default() call.
-
- * e-shell-folder-creation-dialog.c (dialog_response_cb): Make
- first arg a GtkDialog, not a GnomeDialog.
-
- * e-shell-folder-commands.c (e_shell_command_delete_folder):
- Expect delete_dialog() to return a GtkResponseType.
- (delete_dialog): Ported to GtkMessageDialog; Return a
- GtkResponseType.
-
- * e-shell-config-default-folders.c
- (e_shell_config_default_folders_create_widget): Removed unused
- variable.
-
- * e-setup.c (check_evolution_directory): Remove Evolution
- directory installation message.
- (e_setup): Remove check for the Executive-Summary directory.
-
- * e-local-storage.c (create_folder_directory): Use g_file_test()
- instead of g_file_exists().
-
- * evolution-shell-component-utils.c (e_pixmaps_update): Use
- g_build_filename() of g_concat_dir_and_file().
- * e-folder-dnd-bridge.c (handle_data_received_path): Likewise.
- * e-local-folder.c (construct_loading_metadata): Likewise.
- (save_metadata): Likewise.
- * e-local-storage.c (remove_folder_directory): Likewise.
- (append_xfer_item_list): Likewise.
- * e-setup.c (check_dir_recur): Likewise.
- (e_shell_rm_dir): Likewise.
- (setup_bonobo_conf_private_directory): Likewise.
- * e-shell-folder-commands.c
- (folder_selection_dialog_folder_selected_callback): Likewise.
- (e_shell_command_rename_folder): Likewise.
- * e-shell-folder-creation-dialog.c (dialog_response_cb): Likewise.
- * e-shell-settings-dialog.c (load_pages): Likewise.
- * e-shell-utils.c (get_icon_path): Likewise.
- * e-shell.c (setup_local_storage): Likewise.
- (get_icon_path_for_component_info): Likewise.
- (e_shell_construct): Likewise.
- * main.c (main): Likewise.
-
-2003-01-27 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-about-box.c (timeout_callback): Pass a the context's
- language to pango_context_get_metrics() instead of NULL, so the
- heights are computed correctly.
-
-2003-01-27 Ettore Perazzoli <ettore@ximian.com>
-
- * evolution-shell-component.c (owner_ping_callback): #if 0'ed out
- for now, since it seems to cause trouble for local components.
- (setup_owner_pinging): Likewise.
-
- * e-shell-user-creatable-items-handler.c
- (get_default_action_for_view): Return default_menu_item [instead
- of NULL] if there is no view displayed. [#32736]
-
-2003-01-23 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-folder-title-bar.c (get_max_clipped_label_width): Use
- clipped_label->layout instead of creating a new PangoLayout; this
- way we respect the actual font being used.
-
-2003-01-23 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view.c (create_label_for_empty_page): Update for new
- args to e_clipped_label_new().
-
- * e-shell-folder-title-bar.c (e_shell_folder_title_bar_construct):
- Make the title label bold and larger using the new args to
- e_clipped_label_new().
-
-2002-01-23 Ettore Perazzoli <ettore@ximian.com>
-
- [Port fix for #34129 from evolution-1-2-branch, unread count in
- shortcut bar doesn't update properly.]
-
- * e-shortcuts.c (update_shortcuts_by_path): Use
- e_shell_parse_uri() so we handle default shortcuts properly as
- well.
- (update_shortcut_and_emit_signal): Use shortcut_item_update()
- once, and use the return value from it. [Thanks to Leon Zhang
- <leon.zhang@sun.com> for pointing out the brokenness of this
- code.]
-
-2003-01-23 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-about-box.c: Update copyright year.
-
-2003-01-22 Ettore Perazzoli <ettore@ximian.com>
-
- * Makefile.am: Install the shell executable as
- evolution-$(BASE_VERSION) using an install-exec-local hack. Also
- put libeshell in $(privlibdir) instead of $(libdir).
- (eshellincludedir): Version using $(BASE_VERSION).
- (INCLUDES): Update for the new locations of things.
- (etspecdir): Likewise.
-
- * e-shell-view.c (e_shell_view_construct): Get evolution.xml from
- EVOLUTION_UIDIR.
-
- * importer/Makefile.am: Install libevolution-importer in
- $(privlibdir) instead of $(libdir).
- (INCLUDES): Updated for the new versioned paths. Define
- EVOLUTION_UIDIR.
- (libevolution_importerincludedir): Version using $(BASE_VERSION).
- (gladedir): Likewise.
-
- * glade/Makefile.am (gladedir): Version using $(BASE_VERSION).
-
- * e-setup.c (DEFAULT_USER_PATH): New #define.
- (check_evolution_directory): Use it.
- (copy_default_stuff): Likewise. Also, remove old shortcuts.xml
- removal cruft.
-
-2003-01-17 Chris Toshok <toshok@ximian.com>
-
- * e-shell-settings-dialog.c (set_dialog_size): pass
- pango_context_get_language (context) to
- pango_context_get_metrics.
-
-2003-01-14 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-folder-selection-dialog.c
- (e_shell_folder_selection_dialog_construct): Make dialog
- New/Cancel/OK to match HIG.
-
- * glade/e-shell-folder-creation-dialog.glade: Swap Cancel/OK
- buttons to match HIG.
-
- * e-shell-importer.c (choose_importer_from_list): Make dialog
- Cancel/OK to match HIG.
-
- * e-shell-folder-selection-dialog.c
- (e_shell_folder_selection_dialog_construct): Make dialog Cancel/OK
- to match HIG.
-
- * e-shell-view.c: Do not #include "e-bonobo-widget.h".
-
-2003-01-14 Ettore Perazzoli <ettore@ximian.com>
-
- * Makefile.am (EXTRA_DIST): Add $(schema_DATA) here.
-
-2003-01-14 Rodney Dawes <dobey@ximian.com>
-
- * e-shell-view.c: Use GtkPaned instead of EPaned
-
-2003-01-13 Dan Winship <danw@ximian.com>
-
- * s/BonoboXObject/BonoboObject/ (for BONOBO_DISABLE_DEPRECATED)
-
-2003-01-10 Ettore Perazzoli <ettore@ximian.com>
-
- * evolution-shell-component.c (impl_setOwner): Don't duplicate the
- shell object here before passing to evolution_shell_client_new().
-
- * evolution-shell-client.c (evolution_shell_client_construct):
- Dupliate the @corba_shell before storing into the
- EvolutionShellClientPrivate struct.
-
- * e-shell-config-default-folders.c
- (e_shell_config_default_folders_create_widget): Do not duplicate
- the shell's CORBA objref.
-
- * e-shell-config-autocompletion.c
- (e_shell_config_autocompletion_create_widget): Do not duplicate
- the shell's CORBA objref.
-
-2003-01-10 Dan Winship <danw@ximian.com>
-
- * e-storage-set-view.c (popup_folder_menu): Make this work again.
-
-2003-01-10 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view.c (e_shell_view_save_defaults): Save the expansion
- state of the EStorageSetView.
- (setup_defaults): Load the expansion state.
-
-2003-01-10 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell.c (e_shell_request_close_view): Make the view save its
- settings as the default ones if it's the last one.
-
- * e-shell-view-menu.c (command_quit): Make this view save its
- settings as the defaults before quitting.
-
-2003-01-10 Ettore Perazzoli <ettore@ximian.com>
-
- * main.c (main): Generate the URI list from the popt context
- fetched from the GnomeProgram object.
-
- * e-shell-view.c (setup_defaults): Removed @setup_default_uri arg.
- Don't load any URI here.
- (e_shell_view_construct): Open the URI here instead.
-
-2003-01-10 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell.c (parse_default_uri): Remove bogus is_default check.
-
-2003-01-10 Ettore Perazzoli <ettore@ximian.com>
-
- * e-setup.c (set_default_folder_physical_uri_from_path): New
- function.
- (e_setup_check_config): Call it for each of the *_path keys. Do
- not set the default for *_path keys as those come from the GConf
- schema anyways.
-
-2003-01-10 Ettore Perazzoli <ettore@ximian.com>
-
- * apps_evolution_shell.schemas: Set defaults for
- /apps/evolution/shell/default_folders/... .
-
- * e-shortcuts-view.c (pop_up_right_click_menu_for_group): Destroy
- the popup_menu with gtk_widget_destroy() instead of
- gtk_widget_unref().
-
-2003-01-10 Not Zed <NotZed@Ximian.com>
-
- * evolution-config-control.c (impl_apply): remove cast to
- GTK_OBJECT, it isn't, nor needed.
-
-2003-01-09 Chris Toshok <toshok@ximian.com>
-
- * e-shell-settings-dialog.c (set_dialog_size): use
- pango_layout_get_pixel_size here instead of
- pango_layout_get_width, which returns 0 (unless it's been set by
- the user before, I believe).
-
-2003-01-09 Ettore Perazzoli <ettore@ximian.com>
-
- * evolution-shell-client.c (impl_dispose): Properly reset
- activity_interface to NULL.
- (evolution_shell_client_construct): Ref the shell object here.
-
- * e-shell.c (view_weak_notify): Ref the shell since it's being
- passed to notify_no_views_left_idle_cb as the data.
- (notify_no_views_left_idle_cb): Only unref the shell here.
-
-2003-01-08 Not Zed <NotZed@Ximian.com>
-
- * e-shell-settings-dialog.c (set_dialog_size): dont unref the
- pango context, get_context() doesn't create a ref.
-
-2003-01-08 Ettore Perazzoli <ettore@ximian.com>
-
- * Makefile.am: Images are now in $(datadir)/evolution/images
- instead of $(datadir)/images/evolution.
-
- * e-folder-list.c (e_folder_list_class_init): Remove
- "EFolderList::" prefix from the properties.
-
-2003-01-08 Ettore Perazzoli <ettore@ximian.com>
-
- * Makefile.am (evolution_LDFLAGS): -export-dynamic so custom
- widgets in libglade work.
-
-2003-01-07 Dan Winship <danw@ximian.com>
-
- * main.c (main): setup gettext
-
-2003-01-06 Not Zed <NotZed@Ximian.com>
-
- * evolution-folder-selector-button.c (set_folder): dont
- double-free storage_lname.
-
-2003-01-06 Dan Winship <danw@ximian.com>
-
- * Makefile.am: Remove idldir definition. (It's defined in
- configure.in now).
-
- * importer/Makefile.am: Likewise
-
-2002-12-19 Ettore Perazzoli <ettore@ximian.com>
-
- [With this commit, the shell compiles without deprecated GLib/GTK+
- functions, except for a couple of places were we use GtkCList.]
-
- * Makefile.am (INCLUDES): Add `-DG_DISABLE_DEPRECATED
- -DGTK_DISABLE_DEPRECATED'.
-
- * evolution-test-component.c (create_new_folder_selector): No
- gtk_window_set_policy().
-
- * main.c (quit_box_new): gtk_window_set_resizable() instead of
- gtk_window_set_policy().
- (view_map_callback): g_signal_handlers_disconnect_by_func()
- instead of gtk_signal_disconnect_by_func().
- (main): No need to push the GdkRGB visual/cmap anymore.
- (new_view_created_callback): Likewise.
-
- * e-task-widget.c: Renamed member pixmap of ETaskWidgetPrivate to
- `image'.
- (init): Updated accordingly.
- (e_task_widget_construct): Use GtkImage, not GtkPixmap.
-
- * e-storage.c (class_init): Converted from gtk_signal_new() to
- g_signal_new().
-
- * e-storage-set.c (class_init): Converted from gtk_signal_new() to
- g_signal_new().
-
- * e-storage-set-view.c
- (setup_folder_properties_items_if_corba_storage_clicked):
- g_string_append_printf() instead of g_string_sprintfa().
- (class_init): Converted from gtk_signal_new() to g_signal_new().
- (setup_folder_changed_callbacks): Use
- e_signal_connect_while_alive() and
- e_signal_connect_full_while_alive().
-
- * e-splash.c (e_splash_construct): gtk_window_set_resizable()
- instead of gtk_window_set_policy().
-
- * e-shortcuts.c: Do not #include e-unicode.h.
- (shortcut_item_update): Use g_path_get_basename() instead of
- g_basename().
- (e_shortcuts_add_default_shortcuts): No need to de-utfize strings.
- (e_shortcuts_add_default_group): Same here.
-
- * e-shortcuts-view.c: Do not #include <e-unicode.h>.
- (class_init): Converted from gtk_signal_new() to g_signal_new().
- (destroy_group_cb): No need to convert the text from UTF8.
-
- * e-shell.c (impl_dispose): g_signal_handlers_disconnect_by_func()
- instead of gtk_signal_disconnect_by_func().
- (class_init): Use g_signal_new() instead of gtk_signal_new().
-
- * e-shell-view.c: Do not #include e-unicode.h. Renamed member
- offline_toggle_pixmap to offline_toggle_image in
- EShellViewPrivate.
- (update_folder_title_bar): No need to de-UTF8-ize the title.
- (cleanup_delayed_selection):
- g_signal_handlers_disconnect_by_func() instead of
- gtk_signal_disconnect_by_func().
- (ui_engine_add_hint_callback): gtk_label_set_text(), not
- gtk_label_set().
- (class_init): Use g_signal_new() instead of gtk_signal_new().
- (update_for_current_uri): No need to convert the title from UTF8.
- (setup_offline_toggle): Changed to set up a GtkImage, not a
- GtkPixmap.
- (update_offline_toggle_status): Accordingly (gtk_image* instead of
- gtk_pixmap*).
- (set_current_notebook_page): gtk_notebook_set_current_page(), not
- gtk_notebook_set_page().
- (get_storage_set_path_from_uri): g_ascii_strncasecmp() instead of
- g_strncasecmp().
- (folder_bar_popup_map_callback): Use
- e_signal_connect_while_alive() instead of
- gtk_signal_connect_while_alive().
- (e_shell_view_construct): Likewise.
- (display_uri): g_signal_connect_after() instead of
- gtk_signal_connect_full().
- (update_for_current_uri):
- g_signal_handlers_{block,unblock}_by_func() instead of
- gtk_signal_handler_{block,unblock}_by_func().
-
- * e-shell-view-menu.c (command_about_box):
- gtk_window_set_resizable() instead of gtk_window_set_policy().
-
- * e-shell-utils.c (get_mini_name): g_path_get_basename() instead
- of g_basename().
-
- * e-shell-user-creatable-items-handler.c
- (append_xml_for_menu_item): g_string_append_printf() instead of
- g_string_sprintfa().
- (create_menu_xml): Likewise.
-
- * e-shell-shared-folder-picker-dialog.c: Do not #include
- e-unicode.h.
- (progress_bar_timeout_callback): Expect a GtkProgressBar data and
- just use gtk_progress_bar_pulse().
- (create_progress_dialog): gtk_window_set_resizable() instead of
- gtk_window_set_policy(). No gtk_progress_set_activity_mode().
- (setup_server_option_menu): Just use
- gtk_menu_item_new_with_label() instead of
- e_utf8_gtk_menu_item_new_with_label().
-
- * e-shell-settings-dialog.c (set_dialog_size): Ported to Pango.
-
- * e-shell-offline-sync.c
- (impl_SyncFolderProgressListener_updateProgress):
- gtk_progress_set_fraction() instead of
- gtk_progress_bar_set_percentage().
- (sync_folder): Likewise.
- (setup_dialog): gtk_window_set_resizable() instead of
- gtk_window_set_policy().
- (sync_folder): No gtk_progress_set_activity_mode().
-
- * e-shell-offline-handler.c: #undef {G,GTK}_DISABLE_DEPRECATED
- here for now (need to port from GtkCList).
- (class_init): Use g_signal_new()
-
- * e-shell-importer.c: #undef {G,GTK}_DISABLE_DEPRECATED here for
- now (need to port from GtkCList).
-
- * e-shell-folder-title-bar.c (create_image_widget_from_xpm):
- Renamed from create_pixmap_widget_from_xpm(); handle GtkImage
- instead of GtkPixmap.
- (new_empty_image_widget): Renamed from new_empty_pixmap_widget();
- return a GtkImage instead of a GtkPixmap.
- (add_navigation_buttons): Updated accordingly; so use GtkImages
- instead of GtkPixmaps.
- (e_shell_folder_title_bar_construct): Likewise.
- (e_shell_folder_title_bar_set_icon): Use gtk_image_* instead of
- gtk_pixmap_* on the image widgets.
- (class_init): Converted to use g_signal_new() instead of
- gtk_signal_new().
- (e_shell_folder_title_bar_new): No need for pushing the GdkRGB
- visual/cmap anymore.
-
- * e-shell-folder-selection-dialog.c (check_folder_type_valid):
- Just use strcmp instead of strcasecmp().
- (class_init): g_signal_new() instead of gtk_signal_new().
- (e_shell_folder_selection_dialog_construct): Removed call to
- gtk_window_set_policy().
-
- * e-shell-folder-creation-dialog.c
- (type_with_display_name_compare_func): Changed to use
- g_utf8_casefold().
-
- * e-shell-folder-commands.c: Do not #include e-unicode.h.
- (e_shell_command_rename_folder): g_path_get_dirname() instead of
- g_dirname().
- (folder_selection_dialog_folder_selected_callback):
- g_path_get_basename() instead of g_basename().
- (rename_cb): Likewise.
- (delete_dialog): Do not convert from UTF8 for display purposes.
- (e_shell_command_rename_folder): Likewise.
-
- * e-shell-about-box.c (timeout_callback): Ported to Pango and use
- gdk_window_invalidate_rect() instead of gtk_widget_draw().
-
- * e-setup.c (check_evolution_directory): Use
- gtk_window_set_resizable() instead of gtk_window_set_policy().
-
- * e-local-storage.c: Do not include e-unicode.h.
- (create_folder): Use g_path_get_basename() instead of
- g_basename().
- (create_folder_directory): Likewise.
- (remove_folder_directory): Likewise.
- (append_xfer_item_list): Likewise.
-
- * e-local-folder.c (construct_loading_metadata): Use
- g_path_get_basename() instead of g_basename().
-
- * e-folder-dnd-bridge.c (handle_evolution_path_drag_motion): Use
- g_path_get_basename() instead of g_basename().
-
- * e-corba-storage-registry.c: G_STRUCT_OFFSET instead of
- GTK_STRUCT_OFFSET.
-
- * e-corba-shortcuts.c: G_STRUCT_OFFSET instead of
- GTK_STRUCT_OFFSET.
-
- * e-component-registry.c
- (sleep_with_g_main_loop_timeout_callback): g_main_loop_* instead
- of g_main_*.
- (sleep_with_g_main_loop): Likewise.
-
- * e-activity-handler.c: G_STRUCT_OFFSET instead of
- GTK_STRUCT_OFFSET.
-
- * evolution-wizard.c (evolution_wizard_class_init): g_signal_new()
- instead of gtk_signal_new().
-
- * evolution-storage-listener.c (class_init): g_signal_new()
- instead of gtk_signal_new().
-
- * evolution-shell-view.c (class_init): g_signal_new() instead of
- gtk_signal_new().
-
- * evolution-shell-component-dnd.c: G_STRUCT_OFFSET instead of
- GTK_STRUCT_OFFSET.
-
- * evolution-shell-component.c: G_STRUCT_OFFSET instead of
- GTK_STRUCT_OFFSET.
-
- * evolution-session.c: G_STRUCT_OFFSET instead of
- GTK_STRUCT_OFFSET.
-
- * evolution-folder-selector-button.c: Do not include e-unicode.h.
- (set_folder): No need to convert from UTF8 to locale encoding
- anymore. Removed unused variable.
-
- * evolution-config-control.c (class_init): Use g_signal_new()
- instead of gtk_signal_new().
-
- * evolution-activity-client.c (class_init): Use g_signal_new()
- instead of gtk_signal_new().
-
- * e-folder-list.c: Do not include e-unicode.h. Use E_MAKE_TYPE().
- (e_folder_list_get_type): Removed explicit implementation of this.
- (e_folder_list_set_arg): Removed.
- (e_folder_list_get_arg): Removed.
- (e_folder_list_set_property): New.
- (e_folder_list_get_property): New.
- (e_folder_list_destroy): Removed.
- (e_folder_list_dispose): New.
- (e_folder_list_class_init): Updated accordingly.
-
- * e-folder.c (impl_save_info): Use G_OBJECT_TYPE_NAME() instead of
- gtk_type_name().
- (impl_load_info): Likewise.
- (impl_remove): Likewise.
- (class_init): Use g_signal_new() instead of gtk_signal_new().
-
-2002-12-16 Jeffrey Stedfast <fejj@ximian.com>
-
- * e-shell-importer.c: Don't #include "e-util/e-html-utils.h" as
- we don't use it.
-
-2002-12-13 Chris Toshok <toshok@ximian.com>
-
- [ fixes bug #35394 ]
-
- * e-shell-shared-folder-picker-dialog.c (setup_name_selector):
- return the SelectNames corba interface too.
- (show_dialog): unref the corba interface when closing the dialog.
-
-2002-12-05 Chris Toshok <toshok@ximian.com>
-
- * e-shell-config-default-folders.c: use "contacts",
- "contacts/ldap" as the accepted contacts types, so it'll allow
- both normal and ldap contact folders.
-
-2002-12-04 Ettore Perazzoli <ettore@ximian.com>
-
- * e-component-registry.c (component_free): Only invoke
- wait_for_corba_object_to_die on components that are out-of-proc.
-
-2002-11-27 Not Zed <NotZed@Ximian.com>
-
- * main.c (show_development_warning): changed to use a gtkdialog
- instead of a gnome one.
- (warning_dialog_response_callback): clicked->response.
-
- * e-shell-folder-selection-dialog.c: Include gtk/gtkstock.h
-
- * e-shell-folder-creation-dialog.c: include gnome-dialog.h
- (dialog_response_cb): gtk_entry_get_text now returns const. Dont
- free result.
-
- * e-setup.c: include gnome-messagebox.h
-
- * *.c: (re)run fix.sh over all, for e_notice changes & pick up
- some deprecated functions.
-
- * e-shell-shared-folder-picker-dialog.c
- (shared_folder_discovery_callback): reformat e_notice call for
- script.
-
- * e-shell-offline-sync.c
- (impl_SyncFolderProgressListener_reportFailure): Fix e_notice
- call, we weren't passing type in.
-
- * e-shell-folder-commands.c (xfer_result_callback): changed around
- slightly to save some processing & allow a script to run.
- (e_shell_command_rename_folder): reformat e_notice call to help script.
- Include gnome-messagebox.h
-
-2002-11-25 Dan Winship <danw@ximian.com>
-
- * e-shell-settings-dialog.c (page_new): e_get_language_list now
- returns language codes that actually work with oaf, making the
- _()s here redundant.
-
- * e-component-info.c (get_i18n_value): Remove code to turn "fr_FR"
- into "fr", since e_get_language_list will return both now.
-
-2002-11-25 Ettore Perazzoli <ettore@ximian.com>
-
- * apps_evolution_shell.schemas: Fix <key> -> <applyto> typo.
-
-2002-11-25 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-offline-sync.c (e_shell_offline_sync_all_folders):
- Filled in, use GConf.
- (cleanup): Re-enabled again.
- (sync_folder): Likewise.
- (progress_dialog_close_callback): Likewise.
- (progress_dialog_clicked_callback): Likewise.
- (setup_dialog): Likewise.
- (setup_progress_listener): Likewise.
- (impl_SyncFolderProgressListener_reportFailure): Likewise.
- (impl_SyncFolderProgressListener_reportSuccess): Likewise.
- (impl_SyncFolderProgressListener_updateProgress): Likewise.
- (progress_listener_servant_free): Likewise.
- (progress_listener_servant_new): Likewise.
-
-2002-11-25 Ettore Perazzoli <ettore@ximian.com>
-
- * evolution-storage-set-view.c
- (impl_StorageSetView__set_checkedFolders): Updated to pass a
- GSList to e_storage_set_view_set_checkboxes_list() [instead of a
- GList].
- (impl_StorageSetView__get_checkedFolders): Likewise with the
- return value from e_storage_set_view_get_checkboxes_list().
-
- * e-shell-config-offline.c (config_control_apply_callback): Filled
- in, using GConf.
- (init_storage_set_view_status_from_config): Likewise.
-
- * e-storage-set-view.c (e_storage_set_view_get_checkboxes_list):
- Return a GSList instead of a GList.
- (essv_add_to_list): Update for the GSList.
- (e_storage_set_view_set_checkboxes_list): Get a GSList instead of
- a GList.
-
- * apps_evolution_shell.schemas: Added
- /schemas/apps/evolution/shell/offline/folder_paths.
-
-2002-11-20 Ettore Perazzoli <ettore@ximian.com>
-
- * main.c (idle_cb): Set displayed_any in the case when we are
- calling e_shell_create_view(). Also initialize displayed_any to
- FALSE earlier so we dont' end up opening two views at startup by
- default.
-
-2002-11-20 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-folder-selection-dialog.c (impl_dispose): Save the
- expansion state for the EStorageSetView here.
- (impl_finalize): Instead of here.
-
-2002-11-20 Chris Toshok <toshok@ximian.com>
-
- * e-folder-list.c (e_folder_list_class_init): use e_shell_
- marshallers, and make sure STRING parameters map to *_STRING*
- marshallers.
-
- * evolution-wizard.c (evolution_wizard_class_init): same.
-
- * evolution-storage.c (class_init): same.
-
- * evolution-storage-set-view-listener.c (class_init): same.
-
- * evolution-storage-listener.c (class_init): same.
-
- * evolution-shell-view.c (class_init): same.
-
- * evolution-session.c (class_init): same.
-
- * evolution-folder-selector-button.c (class_init): same.
-
- * evolution-config-control.c (class_init): same.
-
- * evolution-activity-client.c (class_init): same.
-
- * e-storage-set.c (class_init): same.
-
- * e-shortcuts.c (class_init): same.
-
- * e-shortcuts-view.c (class_init): same.
-
- * e-shell.c (class_init): same.
-
- * e-shell-view.c (class_init): same.
-
- * e-shell-offline-handler.c (class_init): same.
-
- * e-shell-folder-title-bar.c (class_init): same.
-
- * e-shell-folder-selection-dialog.c (class_init): same.
-
- * e-folder.c (class_init): same.
-
- * e-shell-marshal.list: add all the STRING marshallers.
-
-2002-11-20 Not Zed <NotZed@Ximian.com>
-
- * e-shell-importer.c (prepare_intelligent_page): gnome message box
- -> gtk message dialog.
- (prepare_intelligent_page): Fix the signature on this. This could
- NEVER have worked.
-
-2002-11-19 Ettore Perazzoli <ettore@ximian.com>
-
- * main.c (upgrade_from_1_0_if_needed): Disabled for now.
-
- * e-shell-startup-wizard.c: Removed member config_listener from
- struct SWData.
- (e_shell_startup_wizard_create): Updated accordingly, just use
- GConf, checking the /apps/evolution/mail/account-list key.
- (finish_func): Use GConf.
-
- * e-shell-config-default-folders.c: Removed member config_listener
- in struct EvolutionDefaultFolderConfig.
- (e_shell_config_default_folders_create_widget): Do not initialize
- here. GConfified the paths.
- (config_control_destroy_notify): No unref of the config_listener
- anymore.
- (config_control_apply_cb): Use GConf.
- (setup_folder_selector): Likewise.
-
- * e-shell-config-autocompletion.c: Removed member config_listener
- from EvolutionAutocompletionConfig.
- (config_control_destroy_notify): Do not unref.
- (config_control_apply_callback): Use a GConfClient.
-
- * e-folder-list.c (e_folder_list_init): Add missing cast.
-
- * main.c (show_development_warning): Use GConf.
-
- * e-setup.c (e_setup_check_config): Removed arg @listener.
- GConfified.
-
- * e-shell-view.c (e_shell_view_save_defaults): New.
- (e_shell_view_save_settings): Removed.
- (e_shell_view_load_settings): Removed.
- (setup_defaults): New helper function.
- (e_shell_view_construct): New arg @uri.
- (e_shell_view_new): New arg @uri.
-
- * e-shell.c: Removed member config_listener in struct
- EShellPrivate.
- (impl_dispose): Do not unref.
- (init): Do not initialize.
- (get_config_start_offline): New helper function.
- (e_shell_construct): Use this to get the startup mode in case
- E_SHELL_STARTUP_LINE_MODE_CONFIG.
- (save_misc_settings): Changed to use GConfClient instead of
- EConfigListener.
- (e_shell_create_view_from_settings): Removed.
- (e_shell_restore_from_settings): Removed.
- (e_shell_get_config_listener): Removed.
- (e_shell_disconnect_db): Removed.
- (parse_default_uri): Use GConf.
-
- * main.c (idle_cb): Simplified the logic here. Always assume that
- the view will be created with the default folder open by just
- using e_shell_create_view().
-
-2002-11-19 Not Zed <NotZed@Ximian.com>
-
- * e-shell-shared-folder-picker-dialog.c (show_dialog): Pass type
- to bonobo_widget::set_property.
-
-2002-11-18 Not Zed <NotZed@Ximian.com>
-
- * e-shell-view-menu.c (file_verbs[]): re-enable importer wizard.
-
- * importer/importer.c (dialog_response_cb): from clicked_cb.
- (start_import): gtkdialogise.
-
- * e-shell-importer.c: removed redundant header.
- (create_html): Removed utf8 from locale stuff.
- (get_name_from_component_info): oaf->bonobo activation.
- (get_iid_for_filetype): "
- (create_plugin_menu): Likewise, and change oafiid to bonoboiid
- (get_intelligent_importers): "
- (prepare_intelligent_page): "
- (show_import_wizard): add null domain to glade_xml_new.
- (choose_importer_from_list): gtkdialogise.
- (dialog_response_cb): changed from dialog_clicked_cb.
- (start_import): gtkdialogise.
- (show_error): use gtk message box.
- (error_response_cb): callback to close error box.
- (show_import_wizard): gnome_druid_page_start/finish ->
- gnome_druid_page_edge.
- (prepare_file_page):
- (filename_changed): set HELP button insensitive.
- (create_plugin_menu): casts for warnings and fix a typo,
- set_data->set_data_full.
- (import_druid_finish): folder_selection_dialog api change(?),
- allow create.
- (dialog_weak_notify): renamed from close_dialog().
- (show_import_wizard): remove gnome_dialog_close_hides -> its a
- gtkwindow anyway(!).
-
- * Makefile.am (evolution_LDADD): Added back importer.
- (evolution_SOURCES): Added back importer.
-
- * importer/intelligent.c (get_intelligent_importers):
- bonobo-activationised.
- (create_gui): gtkdialogise.
- (intelligent_importer_init): gtkdialogise.
- (create_gui): remove gnome_util_user_home().
- (intelligent_importer_init): "
-
- * importer/evolution-importer.c (finalise): from destroy.
- (evolution_importer_new): type_new->object_new.
-
- * importer/evolution-importer-listener.c (finalise): from destroy.
- (evolution_importer_listener_new): type_new->object_new.
-
- * importer/evolution-importer-client.c (destroy): removed, as it
- wasn't used anyway.
- (evolution_importer_client_new): g_object_new.
- (finalise): added, tho doesn't do anythign yet, should it unref
- the client->objref? This whole class doesn't seem much use.
-
- * importer/evolution-importer-client.h: removed
- bonobo-object-client, change to g_object.
-
- * importer/*.[ch]: ran fix script over everything.
-
- * importer/evolution-intelligent-importer.c: gobjectise.
- (finalise): renamed from destroy.
- (evolution_intelligent_importer_new): gtk_type_new -> g_object_new
-
-2002-11-18 Chris Toshok <toshok@ximian.com>
-
- * importer/import.glade: run libglade-convert.
-
-2002-11-16 Chris Toshok <toshok@ximian.com>
-
- * e-folder-list.c (e_folder_list_init): force the scrolled table
- to be shown, apparently a bug in libglade2.
-
- * e-shell-config-default-folders.c (setup_folder_selector): same,
- but with the evolution-folder-selector-button's.
-
-2002-11-16 Chris Toshok <toshok@ximian.com>
-
- * e-shell-settings-dialog.c (load_pages): init the corba exception
- before loading each config page, so previous errors don't make
- subsequence pages to fail to load.
-
-2002-11-15 Ettore Perazzoli <ettore@ximian.com>
-
- * Makefile.am: Added rule to generate
- GNOME_Evolution_Shell.server.in from
- GNOME_Evolution_Shell.server.in.in, substituting @BINDIR@.
-
- * GNOME_Evolution_Shell.server.in.in: Renamed from
- GNOME_Evolution_Shell.server.in. Prepend @BINDIR@ to the location
- of the executable.
-
-2002-11-15 Ettore Perazzoli <ettore@ximian.com>
-
- * evolution-storage.c (impl_finalize): Fix typo; p -> sp.
-
-2002-11-15 Ettore Perazzoli <ettore@ximian.com>
-
- * e-activity-handler.c (impl_operationStarted): No need to check
- for priv being NULL here anymore.
- (impl_operationProgressing): Likewise.
- (impl_operationFinished): Likewise.
- (impl_requestDialog): Likewise.
-
- * evolution-folder-selector-button.c (clicked): Use
- g_object_add_weak_pointer() on the parent_window instead of using
- GTK_OBJECT_DESTROYED().
-
-2002-11-15 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-startup-wizard.c (e_shell_startup_wizard_create): For
- now, always return TRUE.
-
-2002-11-14 Ettore Perazzoli <ettore@ximian.com>
-
- * evolution-shell-client.c (class_init): Pass the right parent
- type to gtk_type_class().
-
-2002-11-14 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-user-creatable-items-handler.c,
- * e-shell-user-creatable-items-handler.c: Changed into a GObject
- subclass instead of a GtkObject subclass.
-
- * e-component-registry.c,
- * e-component-registri.h: Changed into a GObject subclass instead
- of a GtkObject subclass.
-
- * evolution-shell-view.c (impl_ShellView_set_message): Remove
- bogus GTK_OBJECT() cast in call to g_signal_emit().
- (impl_ShellView_unset_message): Likewise.
- (impl_ShellView_change_current_view): Likewise.
- (impl_ShellView_set_title): Likewise.
-
- * e-shell-view.c (init): Ref/sink the GtkTooltips.
-
- * e-uri-schema-registry.c (schema_handler_free): g_object_unref()
- on the component instead of bonobo_object_unref().
-
-2002-11-14 Ettore Perazzoli <ettore@ximian.com>
-
- * main.c (no_views_left_cb): Use bonobo_main_quit() instead of
- gtk_main_quit().
- (shell_weak_notify): Likewise.
- (idle_cb): Likewise.
-
- * e-shell.c (notify_no_views_left_idle_cb): New idle function to
- emit the "no_views_left" signal.
- (view_weak_notify): Put it on the idle loop instead of firing the
- signal here.
-
- * e-task-widget.c (e_task_widget_construct): Ref/sink the
- GtkTooltips object.
-
-2002-11-14 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell.c (save_settings_for_views): Removed.
- (e_shell_save_settings): Do not call it here.
-
-2002-11-14 Ettore Perazzoli <ettore@ximian.com>
-
- * e-storage-set-view.c (impl_dispose): NULL priv->ui_component
- after unreffing it.
-
-2002-11-14 Ettore Perazzoli <ettore@ximian.com>
-
- * evolution-shell-component-client.c (destroy_listener_interface):
- Avoid freeing the servant for now, it looks like something is
- messed up and this causes a crash on exit.
-
- * evolution-storage-set-view-listener.c (impl_finalize): Do not
- invoke POA_GNOME_Evolution_StorageSetViewListener__fini().
-
- * evolution-storage-listener.c (impl_finalize): Do not invoke
- POA_GNOME_Evolution_StorageListener__fini().
-
- * e-shell-offline-sync.c (progress_listener_servant_free): Do not
- invoke POA_GNOME_Evolution_SyncFolderProgressListener__fini().
-
- * e-shell-offline-handler.c (progress_listener_servant_free): Do
- not invoke POA_GNOME_Evolution_OfflineProgressListener__fini().
-
- * e-corba-storage.c (impl_dispose): Do not invoke
- POA_GNOME_Evolution_StorageListener__fini().
-
- * evolution-shell-component-client.c (destroy_listener_interface):
- Do not invoke POA_GNOME_Evolution_ShellComponentListener__fini().
-
-2002-11-14 Ettore Perazzoli <ettore@ximian.com>
-
- * main.c (quit_box_destroyed_callback): Removed.
- (no_views_left_cb): Use g_object_add_weak_pointer() instad of
- connecting to the "destroy" signal.
- (destroy_cb): Removed.
- (shell_weak_notify): New.
- (idle_cb): Use g_object_weak_ref() on the shell object instead of
- connecting to the "destroy" signal.
-
- * evolution-test-component.c (dialog_destroy_callback): Removed.
- (dialog_weak_notify): New.
- (create_new_folder_selector): Use g_object_weak_ref() on the
- dialog instead of connecting the "destroy" signal.
-
- * e-shortcuts.c (view_destroyed_cb): Removed.
- (view_weak_notify): New.
- (e_shortcuts_new_view): g_object_weak_ref() the new view instead
- of connecting the "destroy" signal.
- (impl_dispose): Free the ->views and g_object_weak_unref() all the
- items.
-
- * e-shell.c (view_destroy_cb): Removed.
- (view_weak_notify): New.
- (create_view): Use g_object_weak_ref() on the newly created view
- instead of connecting to the "destroy" signal.
- (impl_dispose): g_object_weak_unref() the views.
- (e_shell_show_settings): Use g_object_add_weak_pointer() on the
- settings_dialog instead of connecting to the "destroy" signal.
- (settings_dialog_destroy_cb): Removed.
-
- * e-shell-shared-folder-picker-dialog.c
- (progress_bar_weak_notify): New.
- (progress_bar_destroy_callback): Removed.
- (create_progress_dialog): Use g_object_weak_ref() on the progress
- bar object instead of connecting to its "destroy" signal.
- (shell_destroy_callback): Removed.
- (shell_view_destroy_callback): Removed.
- (storage_destroy_callback): Removed.
- (shell_weak_notify): New.
- (shell_view_weak_notify): New.
- (storage_weak_notify): New.
- (discover_folder): Use g_object_weak_ref() on the shell, parent,
- storage objects instead of connecting to their "destroy" signals.
-
- * e-shell-importer.c: Removed member destroyed from
- ImporterComponentData.
- (import_cb): Instead of checking if ->destroyed is TRUE, check if
- ->dialog is NULL to decide whether the dialog has been destroyed
- or not.
- (dialog_destroy_cb): Removed.
- (start_import): Use g_object_weak_ref() on the dialog object
- instead of connecting to its "destroy" signal.
- (dialog_close): Removed.
- (dialog_weak_notify): New.
- (show_import_wizard): Use g_object_weak_ref() on the dialog object
- instead of connecting to its "destroy" signal.
- (import_druid_destroy): New.
- (import_druid_weak_notify): New.
- (show_import_wizard): Use g_object_weak_ref() on the druid object
- instead of connecting to its "destroy" signal.
-
- * e-shell-folder-selection-dialog.c
- (e_shell_folder_selection_dialog_construct): g_object_weak_ref()
- the shell object instead of connecting to its "destroy" signal.
-
- * e-shell-folder-creation-dialog.c (dialog_destroy_cb): Removed.
- (dialog_destroy_notify): New.
- (e_shell_show_folder_creation_dialog): g_object_weak_ref() the
- dialog instead of connecting to its "destroy" signal.
- (shell_destroy_cb): Removed.
- (shell_destroy_notify): New.
- (e_shell_show_folder_creation_dialog): g_object_weak_ref() the
- shell object instead of connecting to its "destroy" signal.
-
- * e-shell-config-offline.c (config_control_destroy_callback):
- Removed.
- (config_control_destroy_notify): New.
- (e_shell_config_offline_create_widget): g_object_weak_ref() the
- config_control instead of connecting to its "destroy" signal.
-
- * e-shell-config-default-folders.c
- (config_control_destroy_callback): Removed.
- (config_control_destroy_notify): New.
- (e_shell_config_default_folders_create_widget):
- g_object_weak_ref() instead of connecting to the "destroy" signal.
-
- * e-shell-config-autocompletion.c (config_control_destroy_notify):
- New.
- (config_control_destroy_callback): Removed.
- (e_shell_config_autocompletion_create_widget):
- g_object_weak_ref() instead of connecting to the "destroy" signal.
-
- * e-activity-handler.c (task_bar_destroy_cb): Removed.
- (task_bar_destroy_notify): New.
- (e_activity_handler_attach_task_bar): Weak_ref the task_bar using
- task_bar_destroy_notify.
- (impl_dispose): Weak_unref the task bars in priv->task_bars.
-
-2002-11-13 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-startup-wizard.c: Change type of member etd in
- TimezoneDialogPage to GObject from GtkObject.
- (make_timezone_page): Cast to G_OBJECT() not GTK_OBJECT().
-
-2002-11-13 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-startup-wizard.c (e_shell_startup_wizard_create):
- Connect finish_func to the "next" signal for now, since GnomeDruid
- seems to be borked.
-
- * e-uri-schema-registry.c (schema_handler_new): g_object_ref()
- @component instead of bonobo_object_ref().
-
- * e-local-storage.c (create_folder): g_object_ref() for the
- component_client, instead of bonobo_object_ref().
- (remove_folder_step): Likewise.
-
-2002-11-13 Not Zed <NotZed@Ximian.com>
-
- * evolution-storage.c: remove GTK_OBJECT cast and other GTK stuff.
-
- * evolution-storage.h: this is a gobject not a gtkobject, fix cast
- macros, and get_type call.
-
-2002-11-11 Chris Toshok <toshok@ximian.com>
-
- * e-task-widget.c (impl_finalize): need to assign priv here, fixes
- a crash.
-
-2002-11-11 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell.c (impl_dispose): Do unref the config_listener here [I
- fixed the finalize crash we were getting].
-
-2002-11-11 Ettore Perazzoli <ettore@ximian.com>
-
- * e-storage-set-view.c (impl_finalize): Protect against
- priv->checkboxes being NULL.
-
-2002-11-11 Ettore Perazzoli <ettore@ximian.com>
-
- * e-component-registry.c: Make separate dispose/finalize overrides
- of just overriding destroy.
- * e-corba-config-page.c: Likewise.
- * e-corba-storage.c: Likewise.
- * e-folder-type-registry.c: Likewise.
- * e-folder.c: Likewise.
- * e-history.c: Likewise.
- * e-local-folder.c: Likewise.
- * e-local-storage.c: Likewise.
- * e-shell-folder-selection-dialog.c: Likewise.
- * e-shell-folder-title-bar.c: Likewise.
- * e-shell-offline-handler.c: Likewise.
- * e-shell-settings-dialog.c: Likewise.
- * e-shell-user-creatable-items-handler.c: Likewise.
- * e-shell-view.c: Likewise.
- * e-shortcuts-view-model.c: Likewise.
- * e-shortcuts-view.c: Likewise.
- * e-shortcuts.c: Likewise.
- * e-storage-set-view.c: Likewise.
- * e-storage-set.c: Likewise.
- * e-storage.c: Likewise.
- * e-task-bar.c: Likewise.
- * e-task-widget.c: Likewise.
- * e-uri-schema-registry.c: Likewise.
- * evolution-activity-client.c: Likewise.
- * evolution-folder-selector-button.c: Likewise.
- * evolution-storage-listener.c: Likewise.
- * evolution-storage-set-view-listener.c: Likewise.
- * evolution-test-component.c: Likewise.
-
-2002-11-08 Rodrigo Moya <rodrigo@ximian.com>
-
- * importer/Makefile.am: use correctly IDL flags.
-
-2002-11-07 Chris Toshok <toshok@ximian.com>
-
- * e-task-widget.c (impl_destroy): guard against multiple calls.
- fixes a crash whenever a task finishes (the addressbook finishing
- loading, etc.).
-
- * e-shell-marshal.list: add NONE:BOOL for
- evolution-shell-component.
-
- * evolution-shell-component.c (class_init): register the signals
- with g_signal_new.
-
-2002-11-05 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell.c (e_shell_show_settings): Allow type being NULL.
-
-2002-11-05 Ettore Perazzoli <ettore@ximian.com>
-
- * e-local-storage.c (load_folder): Do add folders with an unknown
- type.
-
-2002-11-05 Ettore Perazzoli <ettore@ximian.com>
-
- * glade/e-shell-folder-creation-dialog.glade (ok_button): Set
- response_id to GTK_RESPONSE_OK.
- (cancel_button): Likewise, with GTK_RESPONSE_CANCEL.
-
- * e-shell-folder-creation-dialog.h,
- e-shell-folder-creation-dialog.c: Ported to GtkDialog.
-
-2002-11-05 Ettore Perazzoli <ettore@ximian.com>
-
- * e-folder-list.c: Use g_object_get_data() instead of
- gtk_object_get_data().
- * e-shell-config-default-folders.c: Likewise.
- * e-shell-folder-creation-dialog.c: Likewise.
- * e-shell-importer.c: Likewise.
- * e-shell-shared-folder-picker-dialog.c: Likewise.
- * e-shell-user-creatable-items-handler.c: Likewise.
- * e-shell-view.c: Likewise.
- * e-shell.c: Likewise.
- * e-storage.c: Likewise.
-
-2002-11-05 Ettore Perazzoli <ettore@ximian.com>
-
- * e-activity-handler.c: Split finalize/dispose.
- * e-corba-shortcuts.c: Likewise.
- * e-corba-storage-registry.c: Likewise.
- * e-shell-about-box.c: Likewise.
- * e-shell.c: Likewise.
- * e-splash.c: Likewise.
- * evolution-config-control.c: Likewise.
- * evolution-session.c: Likewise.
- * evolution-shell-component.c: Likewise.
- * evolution-shell-view.c: Likewise.
- * evolution-storage-set-view.c: Likewise.
- * evolution-storage.c: Likewise.
- * evolution-wizard.c: Likewise.
-
-2002-11-05 Ettore Perazzoli <ettore@ximian.com>
-
- * All: g_object_unref instead of bonobo_object_unref for the
- EvolutionShellComponentClient and EvolutionShellClient interfaces.
-
-2002-11-05 Ettore Perazzoli <ettore@ximian.com>
-
- * evolution-shell-client.c (impl_dispose): New.
- (impl_finalize): New.
- (destroy): Removed.
- (class_init): Install dispose, finalize handlers.
-
- * All: Use evolution_shell_client_corba_objref() or
- evolution_shell_component_client_corba_objref() instead of
- BONOBO_OBJREF() or bonobo_object_corba_objref() where needed.
-
- * e-folder-type-registry.c (set_handler): Use g_object_ref() for
- the handler, not bonobo_object_ref().
- (folder_type_free): Likewise for unref.
-
- * evolution-shell-component-client.c
- (evolution_shell_component_client_corba_objref): New.
- (impl_dispose): Moved from impl_destroy; only unref things.
- (impl_finalize) New.
- (class_init): Install dispose/finalize.
- (evolution_shell_component_client_get_dnd_source_interface): Use
- priv->corba_objref instead of bonobo_object_corba_objref() since
- we are not a BonoboObject anymore.
- (evolution_shell_component_client_get_dnd_destination_interface):
- Likewise.
- (evolution_shell_component_client_get_offline_interface): Likewise.
- (evolution_shell_component_client_set_owner): Likewise.
- (evolution_shell_component_client_unset_owner): Likewise.
- (evolution_shell_component_client_create_view): Likewise.
- (evolution_shell_component_client_handle_external_uri): Likewise.
- (evolution_shell_component_client_async_create_folder): Likewise.
- (evolution_shell_component_client_async_xfer_folder): Likewise.
- (evolution_shell_component_client_populate_folder_context_menu): Likewise.
- (evolution_shell_component_client_unpopulate_folder_context_menu): Likewise.
-
- * e-component-registry.c (register_component): Use
- evolution_shell_component_client_corba_objref().
- (e_component_registry_restart_component): Likewise.
- (component_free): Likewise.
-
- * evolution-shell-component-client.c: g_object_new() instead of gtk_type_new().
- * e-component-registry.c: Likewise.
- * e-corba-config-page.c
- * e-folder-list.c: Likewise.
- * e-folder-type-registry.c: Likewise.
- * e-folder.c: Likewise.
- * e-gray-bar.c: Likewise.
- * e-history.c: Likewise.
- * e-local-folder.c: Likewise.
- * e-local-folder.c: Likewise.
- * e-local-storage.c: Likewise.
- * e-shell-about-box.c: Likewise.
- * e-shell-config-default-folders.c: Likewise.
- * e-shell-folder-selection-dialog.c: Likewise.
- * e-shell-folder-title-bar.c: Likewise.
- * e-shell-offline-handler.c: Likewise.
- * e-shell-settings-dialog.c: Likewise.
- * e-shell-user-creatable-items-handler.c: Likewise.
- * e-shell-view.c: Likewise.
- * e-shortcuts-view-model.c: Likewise.
- * e-shortcuts-view.c: Likewise.
- * e-shortcuts.c: Likewise.
- * e-splash.c: Likewise.
- * e-storage-set-view.c: Likewise.
- * e-storage-set.c: Likewise.
- * e-storage.c: Likewise.
- * e-task-bar.c: Likewise.
- * e-task-widget.c: Likewise.
- * e-uri-schema-registry.c: Likewise.
- * evolution-activity-client.c: Likewise.
- * evolution-folder-selector-button.c: Likewise.
- * evolution-shell-client.c: Likewise.
- * evolution-shell-view.c: Likewise.
- * evolution-storage-listener.c: Likewise.
- * evolution-storage-set-view-listener.c: Likewise.
- * evolution-storage-set-view.c: Likewise.
- * evolution-wizard.c: Likewise.
-
- * GNOME_Evolution_TestComponent.server: Renamed from
- GNOME_Evolution_TestComponent.oaf.
-
- * evolution-test-component.c (spit_out_shortcuts): Use
- BONOBO_EX_REPOID().
- (create_new_folder_selector): Ported to use GtkDialog instead of
- GnomeDialog.
- (storage_cancel_discover_shared_folder_callback): Add missing
- G_OBJECT() cast.
- (shared_folder_discovery_timeout_callback): Likewise.
- (storage_discover_shared_folder_callback): Likewise.
- (timeout_callback_2): Likewise.
- (timeout_callback_1): Likewise.
- (shared_folder_discovery_timeout_callback): Use
- g_object_get_data() instead of gtk_object_get_data().
- (storage_cancel_discover_shared_folder_callback): Likewise.
- (timeout_callback_2): Likewise.
- (timeout_callback_2): g_timeout_add() instead of
- gtk_timeout_add().
- (create_view_fn): Likewise.
- (timeout_callback_1): Likewise.
- (timeout_callback_1): Pass NULL as the error arg to
- gdk_pixbuf_new_from_file().
- (register_component): Use bonobo-activation instead of OAF.
-
- * e-shell-about-box.c (impl_destroy): Removed.
- (impl_finalize): New.
- (class_init): Install finalize handler, not destroy.
-
- * e-shell-view-menu.c (command_about_box): Use a GtkWindow again.
- Set the GTK_WINDOW_TYPE_HINT_DIALOG hint.
-
- * e-shell-about-box.c (e_shell_about_box_construct): Removed.
-
-2002-11-04 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-folder-commands.c (e_shell_command_copy_folder): Pass
- TRUE for arg allow_creation to
- e_shell_folder_selection_dialog_new().
- (e_shell_command_move_folder): Likewise.
- * e-shell-view-menu.c (command_goto_folder): Likewise.
- (command_new_shortcut): Likewise.
- * e-shell.c (impl_Shell_selectUserFolder): Likewise.
-
- * e-shell-folder-selection-dialog.c
- (e_shell_folder_selection_dialog_set_allow_creation): Removed.
- (e_shell_folder_selection_dialog_get_allow_creation): Removed.
- (e_shell_folder_selection_dialog_new): New arg allow_creation.
- (e_shell_folder_selection_dialog_construct): Likewise. Also, do
- set priv->shell.
-
- * e-shell-folder-selection-dialog.h,
- e-shell-folder-selection-dialog.c: Port to GtkDialog.
-
-2002-11-04 Ettore Perazzoli <ettore@ximian.com>
-
- * e-folder-type-registry.c
- (e_folder_type_registry_get_handler_for_type): Remove warning for
- when the type is unknown.
- (e_folder_type_registry_type_is_user_creatable): Likewise.
- (e_folder_type_registry_get_display_name_for_type): Likewise.
- (e_folder_type_registry_get_description_for_type): Likewise.
- (e_folder_type_registry_get_exported_dnd_types_for_type):
- Likewise.
- (e_folder_type_registry_get_accepted_dnd_types_for_type):
- Likewise.
- (e_folder_type_registry_unregister_type): Likewise.
- (e_folder_type_registry_get_icon_name_for_type): Likewise.
- (e_folder_type_registry_get_icon_for_type): Likewise.
- (set_handler): Removed warning here too.
-
-2002-11-04 Ettore Perazzoli <ettore@ximian.com>
-
- * e-folder-list.c: Replace gtk_signal_emit() with g_signal_emit().
- * e-folder.c: Likewise.
- * e-shell-folder-selection-dialog.c: Likewise.
- * e-shell-folder-title-bar.c: Likewise.
- * e-shell-offline-handler.c: Likewise.
- * e-shell-view.c: Likewise.
- * e-shortcuts-view.c: Likewise.
- * e-shortcuts.c: Likewise.
- * e-storage-set-view.c: Likewise.
- * e-storage-set.c: Likewise.
- * e-storage.c: Likewise.
- * evolution-activity-client.c: Likewise.
- * evolution-folder-selector-button.c: Likewise.
- * evolution-storage-listener.c: Likewise.
- * evolution-storage-set-view-listener.c: Likewise.
-
-2002-11-04 Ettore Perazzoli <ettore@ximian.com>
-
- * e-folder-list.c: Use g_object_set_data() instead of
- gtk_object_set_data().
- * e-shell-config-default-folders.c: Likewise.
- * e-shell-folder-creation-dialog.c: Likewise.
- * e-shell-importer.c: Likewise.
- * e-shell-shared-folder-picker-dialog.c: Likewise.
- * e-shell-user-creatable-items-handler.c: Likewise.
- * e-shell-view.c: Likewise.
- * e-shell.c: Likewise.
- * e-storage-set-view.c: Likewise.
- * e-storage.c: Likewise.
- * evolution-test-component.c: Likewise.
-
- * e-storage-set-view.c (e_storage_set_view_construct): Use
- g_object_weakref() instead of gtk_object_weakref() for the
- ui_container.
- (ui_container_destroy_notify): Add param where_the_object_was to
- match the GWeakNotify prototype.
-
- * e-shell.c: Use g_signal_emit() instead of gtk_signal_emit().
-
-2002-11-03 Ettore Perazzoli <ettore@ximian.com>
-
- * glade/e-active-connection-dialog.glade: Converted to Glade2
- format.
- * glade/evolution-startup-wizard.glade: Likewise.
- * glade/e-shell-shared-folder-picker-dialog.glade: Likewise.
- * glade/e-shell-folder-creation-dialog.glade: Likewise.
- * glade/e-shell-config-default-folders.glade: Likewise.
- * glade/e-folder-list.glade: Likewise.
-
-2002-11-03 Ettore Perazzoli <ettore@ximian.com>
-
- * *.c, *.h: Changed all gtk_object_refs()/gtk_object_unrefs() into
- g_object_refs()/g_object_unrefs() and all gtk_signal_connect_*()
- into g_signal_connect_*(). [Except for some case where we have
- gtk_signal_connect_full() or gtk_signal_connect_while_alive()
- calls that cannot be trivially ported to use the g_signal_*
- functions, we'll have to fix those later.]
-
- * e-splash.c (impl_finalize): Finalize implementation, copied over
- from impl_destroy.
- (impl_destroy): Removed.
- (class_init): Override finalize, not destroy.
-
- * e-activity-handler.c: Ported from GtkObject to GObject.
- * evolution-storage.c: Likewise.
- * e-corba-shortcuts.c: Likewise.
- * evolution-session.h: Likewise.
- * evolution-config-control.c: Likewise.
- * evolution-shell-component-dnd.c: Likewise.
- * evolution-shell-component.c: Likewise.
- * evolution-shell-view.c: Likewise.
- * evolution-storage-set-view.c: Likewise.
- * evolution-wizard.c: Likewise.
-
-2002-11-03 Ettore Perazzoli <ettore@ximian.com>
-
- * e-component-info.c: Updated for libxml2.
- * e-shortcuts.c: Likewise.
- * e-folder-list.c: Likewise.
- * e-local-folder.c: Likewise.
-
-2002-11-03 Ettore Perazzoli <ettore@ximian.com>
-
- * GNOME_Evolution_Shell.server.in: Renamed from
- GNOME_Evolution_Shell.oaf.in.
-
- * Makefile.am: Port from OAF to bonobo-activation.
- (INCLUDES): Define SYSCONFDIR, DATADIR, LIBDIR.
-
- * main.c (main): Use gnome_program_init().
-
- * e-corba-storage-registry.c (e_corba_storage_registry_new):
- g_object_new(), not gtk_type_new().
- (impl_finalize): New, ported over from destroy.
- (destroy): Removed.
- (class_init): Install finalize handler, not destroy handler, since
- we are not a GtkObject anymore.
-
- * e-corba-storage.c (e_corba_storage_new): g_object_new(), not
- gtk_type_new().
-
- * e-shell.c (class_init): Override finalize, not destroy.
- (impl_finalize): Finalize implementation, basically the old
- destroy renamed.
- (e_shell_new): g_object_new(), not gtk_type_new().
- (class_init): Use e_shell_marshal_NONE__INT for
- line_status_changed instead of using an ENUM.
- (e_shell_construct): Use g_signal_connect_object() instead of
- gtk_signal_connect_while_alive().
-
- * e-setup.c (e_setup): Do not unref local_folder if NULL.
-
- * e-folder.c (init): Make not floating.
- (e_folder_construct): No need to make it floating here anymore.
-
- * e-shell.c (impl_Shell_selectUserFolder): For now don't set
- dialog parent from xid.
-
- * main.c (no_views_left_cb): Add missing GTK_SIGNAL_FUNC() cast.
- (new_view_created_callback): Likewise.
- (warning_dialog_clicked_callback): Update to use the
- EConfigListener from the shell instead of bonobo-conf.
- (show_development_warning): Likewise.
- (upgrade_from_1_0_if_needed): BONOBO_EX_ID -> BONOBO_EX_REPOID.
- (idle_cb): Use bonobo-activation and BONOBO_EX_REPOID().
- (main): Cleaned up the various things that are unneeded in GNOME
- 2.
- (upgrade_from_1_0_if_needed): Use EConfigListener.
-
- * evolution-storage-set-view.h, evolution-storage-set-view.c:
- BonoboXObjectified.
-
- * e-storage.c (class_init): GLIB2-ified and made to use
- e-shell-marshal.h.
- (ES_CLASS): Use GTK_OBJECT_GET_CLASS().
- (e_storage_new_folder): Added missing GTK_SIGNAL_FUNC() prototype.
-
- * e-storage-set.c (class_init): GLIB2-ified and made to use
- e-shell-marshal.h.
-
- * e-storage-set-view.c (popup_folder_menu): For now, do not add
- the pop-up since we lack bonobo_ui_container_get_win() and I am
- not sure how to work around it.
- (popup_folder_menu): Pass self as the for_widget arg to
- gnome_popup_menu_do_popup_modal().
- (class_init): GLIB2-ified, and got to use e-shell-marshal.h.
- (marshal_NONE__GDKDRAGCONTEXT_STRING_STRING_STRING): Removed.
- (impl_tree_drag_data_get): Don't set the selection for now -- we
- have to fix the CORBA target stuff to match GTK 2.
- (e_storage_set_view_construct): Pass NULL as the opt_ev arg to
- bonobo_ui_component_set_container().
-
- * e-splash.c: #include <libgnomecanvas/gnome-canvas-pixbuf.h>
- instead of <gdk-pixbuf/gnome-canvas-pixbuf.h>.
- (e_splash_new): Pass NULL as the error arg to
- gdk_pixbuf_new_from_file().
-
- * e-shortcuts.c (class_init): GLIB2-ified. Also use the
- e-shell-marshal marshallers.
- (e_shortcuts_new_view): Add missing GTK_SIGNAL_FUNC() cast.
-
- * e-shortcuts-view.c: Use GTK_STOCK_* stuff instead of
- GNOME_STOCK_* stuff.
- (pop_up_right_click_menu_for_group): Pass self as the for_widget
- arg to gnome_popup_menu_do_popup_modal().
- (pop_up_right_click_menu_for_shortcut): Likewise.
- (class_init): GLIB2-ified.
-
- * e-shell.c: Do not #include <gal/util/e-unicode-i18n.h> or
- #include <libgnome/gnome-defs.h>.
- (set_interactive): Use BONOBO_EX_REPOID().
- (setup_local_storage): Use _() not U_().
- (destroy): Use gtk_widget_destroy() instead of
- gtk_object_destroy() on priv->settings_dialog.
- (class_init): GLIB2-ized.
- (init): Initialize config_listener member.
- (get_icon_path_for_component_info): Port to bonobo-activation from
- OAF.
- (setup_components): Likewise.
- (destroy): Likewise.
- (e_shell_construct): Use e_setup_check_config(), not
- e_setup_check_db (). Use the e_config_listener instead of
- bonobo-conf.
- (save_settings_for_views): Likewise.
- (save_misc_settings): Likewise.
- (e_shell_restore_from_settings): Likewise.
- (parse_default_uri): Likewise.
- (e_shell_component_maybe_crashed): Pass NULL for opt_ev arg to
- bonobo_unkown_ping()
- (e_shell_component_maybe_crashed): Use
- bonobo_engine_deregister_dead_components() instead of
- bonobo_window_deregister_component_by_ref() which is no more.
- (e_shell_send_receive): BONOBO_EX_REPOID() instead of
- BONOBO_EX_ID().
- (e_shell_get_config_listener): Return the config_listener.
-
- * e-shell-view.c (find_inbox_in_storage): Use _() instead of U_().
- (load_images): Pass NULL as the error arg to
- gdk_pixbuf_new_from_file().
- (load_images): Likewise.
- (find_inbox_in_storage): Work around the lack of
- g_utf8_strcasecmp() in glib-2.0.
- (class_init): GLIB2-ified. Also, use the marshallers in
- e-shell-marshal.h.
- (pop_up_folder_bar): Use gtk_window_move()/gtk_widget_show()
- instead gtk_widget_popup().
- (unmerge_on_error): Work around the death of
- bonobo_ui_component_get_win() and
- bonobo_window_deregister_component_by_ref().
- (e_shell_view_construct): Pass NULL as the uic arg to
- bonobo_window_construct(). Add missing GTK_SIGNAL_FUNC() cast.
- Match the new BonoboWindow behavior wrt the UIContainer and the
- new opt_ev args.
- (display_uri): Use bonobo_ui_engine_freeze() and
- bonobo_ui_engine_thaw() since bonobo_window_freeze() and
- bonobo_window_thaw() got axed [sigh].
- (e_shell_view_save_settings): Use EConfigListener.
- (e_shell_view_load_settings): Likewise.
- (get_view_for_uri): Use bonobo_widget_new_control_from_objref()
- instead of e_bonobo_widget_new_control_from_objref().
-
- * e-shell-view-menu.c (command_help_faq): Pass NULL for the error
- arg to gnome_url_show().
- (command_about_box): Use GtkDialog instead of a GtkWindow of a
- type GTK_WINDOW_DIALOG [which does not exist anymore].
- (command_xml_dump): Removed.
- (menu_do_misc): Do not add the corresponding verb.
-
- * e-shell-user-creatable-items-handler.c (execute_verb): Use
- BONOBO_EX_REPOID().
-
- * e-shell-startup-wizard.c: Remove id member from SWData. Replace
- member db with config_listener.
- (e_shell_startup_wizard_create): Initialize config_listener.
- (make_mail_dialog_pages): Do not set the listener id here.
- (druid_event_notify_cb): Pass FALSE as the help_sensitive arg to
- gnome_druid_set_buttons_sensitive().
- (e_shell_startup_wizard_create): Likewise.
- (make_mail_dialog_pages): Use bonobo-activation instead of OAF.
- (get_intelligent_importers): Likewise.
- (prepare_importer_page): Likewise.
- (start_importers): Do nothing here for now.
- (finish_func): Constify local variable displayname.
- (finish_func): Updated to use the config_listener instead of the
- bono-conf db.
- (prepare_importer_page): Do not actually run the importer yet.
- (e_shell_startup_wizard_create): Pass NULL as the domain arg to
- glade_xml_new(). Use the config_listener.
-
- * e-shell-shared-folder-picker-dialog.c (user_clicked):
- BONOBO_EX_REPOID() instead of BONOBO_EX_ID().
- (setup_name_selector): Likewise.
- (setup_name_selector): Use bonobo-activation.
- (show_dialog): Pass NULL as the domain arg to glade_xml_new().
- (setup_name_selector): Add a missing GTK_SIGNAL_FUNC() cast.
-
- * e-shell-settings-dialog.c: #include
- <bonobo-activation/bonobo-activation.h>. Use
- Bonobo_ActivationProperty instead of OAF_Property.
- (set_dialog_size): Use gtk_style_get_font() to get the font from
- the widget->style.
- (load_pages): Converted to use bonobo-activation instead of OAF.
- Pass NULL as the error arg to gdk_pixbuf_new_from_file().
-
- * e-shell-offline-sync.c (sync_folder): BONOBO_EX_REPOID(), not
- BONOBO_EX_ID().
- (e_shell_offline_sync_all_folders): For now, avoid doing anything
- [see changes to e-shell-config-offline.c below].
- (setup_progress_listener): #if 0 for now.
- (setup_dialog): Likewise.
- (sync_folder): Likewise.
- (cleanup): Likewise.
- (progress_listener_servant_free): Likewise.
- (progress_listener_servant_new): Likewise.
- (impl_SyncFolderProgressListener_updateProgress): Likewise.
- (impl_SyncFolderProgressListener_reportSuccess): Likewise.
- (impl_SyncFolderProgressListener_reportFailure): Likewise.
- (progress_dialog_close_callback): Likewise.
- (progress_dialog_clicked_callback): Likewise.
-
- * e-shell-offline-handler.c (prepare_for_offline): Use
- BONOBO_EX_REPOID().
- (pop_up_confirmation_dialog): Pass NULL as the domain arg to
- glade_xml_new().
- (class_init): GLIB2-ified.
-
- * Makefile.am: Do not compile e-shell-importer.c,
- e-shell-importer.h for now.
-
- * e-shell-folder-title-bar.c (get_max_clipped_label_width): Use
- gtk_style_get_font() to retrieve the font.
- (class_init): GLIB2-ified.
- (e_shell_folder_title_bar_construct): Get {x,y}thickness from
- widget->style, not from widget->style->klass.
-
- * e-shell-folder-selection-dialog.c: #include <string.h>,
- <gtk/gtklabel.h> and <gtk/gtksignal.h>.
- (class_init): GLIB2-ified.
-
- * e-shell-folder-creation-dialog.c: No <libgnome/gnome-defs.h>,
- add some GTK includes.
- (e_shell_show_folder_creation_dialog): Pass NULL as the domain arg
- to glade_xml_new(). Added missing GTK_SIGNAL_FUNC() cast.
-
- * e-shell-folder-commands.c: Do not #include
- <libgnomeui/gnome-stock.h> and #include
- <bonobo-conf/Bonobo_Config.h>.
-
- * e-shell-config-default-folders.c: Replace member db in
- EvolutionDefaultFolderConfig with config_listener.
- (e_shell_config_default_folders_create_widget): Init here.
- (config_control_destroy_cb): Unref here.
- (config_control_apply_cb): Use EConfigListener instead of
- BonoboConf.
- (setup_folder_selector): Likewise.
- (e_shell_config_default_folders_create_widget): Pass NULL as the
- domain arg to glade_xml_new().
-
- * e-shell-config-offline.c (config_control_apply_callback): For
- now, do not change the configuration. [Needs to be ported to
- EConfigListener or something, but we were storing a sequence using
- typecodes here and there is no trivial way to do that right now.]
- (init_storage_set_view_status_from_config): Likewise, do not
- retrieve the configuration here.
-
- * e-shell-marshal.list: Removed duplicates, added a bunch new
- marshallers.
-
-2002-11-02 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-config-autocompletion.c: No bonobo-conf; removed member
- db in struct EvolutionAutocompletionConfig and replaced with a
- config_listener arg.
- (e_shell_config_autocompletion_create_widget): Init it here.
- (config_control_destroy_callback): Unref it here.
- (config_control_apply_callback): Updated to use the
- config_listener.
-
- * e-shell-config.c (e_shell_config_factory_register): Use
- bonobo_generic_factory_new() instead of
- bonobo_generic_factory_new_multi().
-
- * e-shell-about-box.c (impl_realize): Pass NULL as the error arg
- to gdk_pixbuf_new_from_file().
- (timeout_callback): Use gtk_style_get_font() to retrieve the
- style's font instead of style->font.
- (impl_draw): Removed.
- (impl_expose_event): Do the drawing of the pixmap here.
-
- * e-setup.c (e_setup_check_db): Removed.
- (e_setup_check_config): New, version using EConfigListener instead
- of bonobo-conf.
-
- * e-setup.h: #include "e-util/e-config-listener.h" instead of
- <bonobo-conf/bonobo-config-database.h>.
-
- * e-local-storage.c (construct): Use _() instead of U_().
- (setup_stock_folders): Likewise.
-
- * e-icon-factory.c (load_icon): Pass NULL as the error arg to
- gdk_pixbuf_new_from_file().
-
- * e-folder-type-registry.c (folder_type_new): Pass NULL as the
- error arg to gdk_pixbuf_new_from_file().
-
- * e-folder-dnd-bridge.c (find_matching_target_for_drag_context):
- GdkAtom is not an integer anymore; update accordingly.
-
- * e-corba-storage.c (async_folder_cb): Constified args
- appropriately to match BonoboListenerCallbackFn.
- (async_folder_discovery_cb): Likewise.
- (cancel_discover_shared_folder): BONOBO_EX_ID() ->
- BONOBO_EX_REPOID().
- (e_corba_storage_show_folder_properties): Likewise.
-
- * e-corba-storage-registry.h, e-corba-storage-registry.c:
- BonoboXObjectified.
-
- * e-corba-config-page.c: Removed member listener_id in struct
- ECorbaConfigPagePrivate.
- (init): Don't init.
- (setup_listener): Bonobo_EventSource_addListener doesn't return an
- ID anymore.
- (impl_destroy): Just pass the listener to
- Bonobo_EventSource_removeListener.
- (setup_listener): BONOBO_EX_REPOID() instead of BONOBO_EX_ID().
- (impl_apply): Likewise.
- (listener_event_callback): Constified args appropriately to match
- BonoboListenerCallbackFn.
- (e_corba_config_page_construct): Likewise.
-
- * e-component-registry.c (wait_for_corba_object_to_die): Pass NULL
- for the exception arg to bonobo_unknown_ping().
-
- * e-shell-view.h: <bonobo/bonobo-window.h>, not
- <bonobo/bonobo-win.h>.
-
- * e-shell.c: Replace member db in EShellPrivate with an
- EConfigListener config_listener.
- (destroy): Do not call e_shell_disconnect_db(). Unref
- EConfigListener. Destroy settings_dialog if not NULL. Pass
- config_listener to e_setup_check_db().
- (e_shell_get_config_db): Removed.
- (e_shell_get_config_listener): New.
- (e_shell_construct): Set up the config_listener, instead of the
- Bonobo_ConfigDatabase.
-
- * e-shell.h: #include <bonobo-activation/bonobo-activation.h>
- instead of <liboaf/oaf.h>. No
- <bonobo-conf/bonobo-config-database.h>.
-
- * e-component-registry.c: #include
- <bonobo-activation/bonobo-activation.h> instead of <liboaf/oaf.h>.
-
- * e-activity-handler.c (task_widget_button_press_event_callback):
- Use BONOBO_EX() and BONOBO_EX_REPOID().
- (impl_operationStarted): Don't use GTK_OBJECT_DESTROYED() [needs
- to be fixed later].
- (impl_operationProgressing): Likewise.
- (impl_operationFinished): Likewise.
- (impl_requestDialog): Likewise.
-
- * evolution-wizard.c (evolution_wizard_class_init): GLIB2-ified.
-
- * evolution-wizard.h: Remove BEGIN_GNOME_DECLS/END_GNOME_DECLS.
-
- * evolution-storage.c: Chagned to use generated marshallers
- instead of custom ones or GAL's.
-
- * eshell-marshal.list: New.
- * Makefile.am: Added rule to build eshell-marshal.[ch] and link
- them in.
-
- * evolution-storage.h, evolution-storage.c: BonoboXObjectified.
-
- * evolution-storage-set-view-listener.c (class_init): GLIB2-ified.
-
- * evolution-storage-listener.c (class_init): GLIB2-ified.
-
- * evolution-shell-view.h, evolution-shell-view.c:
- BonoboXObjectified.
-
- * evolution-shell-component-utils.c: #include
- <bonobo-activation/bonobo-activation.h>.
- (e_pixmaps_update): Pass NULL as the error arg to
- gdk_pixbuf_new_from_file().
- (e_activation_failure_dialog): Bonobo_GeneralError instead of
- OAF_GeneralError.
- (e_get_activation_failure_msg): Likewise.
-
- * evolution-shell-component-dnd.h, evolution-shell-component-dnd.c:
- BonoboXObjectified.
-
- * evolution-shell-component.c: #include <unistd.h>.
- (owner_ping_callback): Pass NULL for the opt_ev arg to
- bonobo_unknown_ping().
- (impl_populateFolderContextMenu): Pass NULL for the opt_ev arg to
- bonobo_ui_component_set_container().
- (class_init): GLIB2-ified.
-
- * e-component-registry.c (component_free): Use g_object_unref() on
- the EvolutionShellComponentClient instead of
- bonobo_object_unref().
- (register_component): Likewise.
- (component_new): Likewise, use g_object_ref() instead of
- bonobo_object_ref().
-
- * evolution-shell-component-client.c: New member corba_objref in
- EvolutionShellComponentClientPrivate.
- (init): Init to CORBA_OBJECT_NIL.
- (impl_destroy): Unref. Also CORBA_OBJECT_NILify all the pointers
- to unreffed objects.
- (corba_exception_to_result): Use BONOBO_EX_REPOID(ev) instead of
- ev->_repo_id.
- (evolution_shell_component_client_construct): Set the corba_objref
- pointer, do not call bonobo_object_client_construct().
- (evolution_shell_component_client_new): Use
- bonobo_activation_activate_from_id() here instead of
- oaf_activate_from_id().
-
- * evolution-shell-component-client.h,
- evolution-shell-component-client.c: Derive from GObject instead of
- BonoboObjectClient.
-
- * evolution-shell-client.c
- (evolution_shell_client_create_storage_set_view): Use
- BONOBO_EX_REPOID() instead of BONOBO_EX_ID().
-
- * evolution-folder-selector-button.c (destroy): g_object_unref the
- EvolutionShellClient instead of bonobo_object_unref().
- (evolution_folder_selector_button_construct): Likewise.
-
- * e-folder-list.c (e_folder_list_destroy): g_object_unref the
- EvolutionShellClient instead of bonobo_object_unref().
- (e_folder_list_construct): g_object_ref the EvolutionShellClient
- instead of bonobo_object_ref().
-
- * evolution-shell-client.c: New member corba_objref in
- EvolutionShellClientPrivate.
- (init): Init to CORBA_OBJECT_NIL.
- (destroy): Unref/release.
- (query_shell_interface): Use BONOBO_EX() and BONOBO_EX_REPOID()
- instead of ._major and ._repo_id.
- (destroy): Likewise.
- (evolution_shell_client_get_local_storage): Likewise.
-
- * evolution-shell-client.h: Derive from GObject instead of
- BonoboObjectClient.
-
- * evolution-session.c (corba_class_init): Get klass arg.
- (class_init): Pass klass arg. GLIB2-ified.
- (evolution_session_construct): Removed.
- (evolution_session_new): Just return what gtk_type_new() returns.
-
- * evolution-session.h, evolution-session.c: Derive from
- BonoboXObject.
-
- * evolution-folder-selector-button.c (init): Make icon a GtkImage
- instead of a BonoboUIToolbarIcon.
- (set_folder, class_init): GLIB2-ified.
-
- * evolution-config-control.c (class_init): GLIB2-ified.
-
- * evolution-activity-client.c (corba_update_progress): Use
- BONOBO_EX_REPOID() instead of ._major and ._repo_id.
- (evolution_activity_client_request_dialog): Likewise.
- (impl_destroy): Likewise.
- (class_init): GLIB2-ified.
-
- * e-folder-list.c: #include <gtk/gtframe.h> and #include
- <string.h>.
- (e_folder_list_destroy): bonobo_object_unref(), not
- bonobo_object_client_unref().
- (e_folder_list_init): Pass NULL as the domain to glade_xml_new().
-
- * e-folder-list.h: #include <gtk/gtkvbox.h>.
-
- * e-folder.c (impl_remove): Renamed from remove().
- (impl_get_physical_uri): Renamed from get_physical_uri().
- (impl_load_info): Renamed from load_info().
- (impl_save_info): Renamed from save_info().
- (class_init): GLIB2-ified.
-
- * Evolution-Session.idl: #include <Bonobo.idl>, not <Bonobo.h>.
- * Evolution-Offline.idl: Likewise.
- * Evolution-ShellComponent.idl: Likewise.
- * Evolution-ShellComponentDnd.idl: Likewise.
- * Evolution-Storage.idl: Likewise.
-
- * Makefile.am: Do not compile the importer directory for now.
-
- * evolution-wizard.c (evolution_wizard_set_buttons_sensitive):
- ORBit2-ize type names.
- (evolution_wizard_set_show_finish): Likewise.
- (evolution_wizard_set_page): Likewise.
-
-2002-10-28 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-settings-dialog.c (set_dialog_size): Increase the width
- slightly.
-
- * e-shell-view-menu.c: Set "settings.png" as the icon for
- /menu/Tools/Settings.
-
-2002-10-25 Ettore Perazzoli <ettore@ximian.com>
-
- [#31303]
-
- * e-shell-view (storage_set_view_box_button_release_event_cb): Pop
- down the popup folder bar if it's a toplevel node.
- (folder_bar_popup_map_callback): Connect to the "folder_opened"
- signal on the storage_set_view.
-
-2002-10-25 Ettore Perazzoli <ettore@ximian.com>
-
- * e-folder-list.c (create_display_string): Don't turn the string
- from UTF-8 to GTK. [#32032]
-
-2002-10-23 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell.c (setup_local_storage): Set the is_stock flag to TRUE
- for the summary folder.
-
- * e-shell-view.c (setup_verb_sensitivity_for_folder): Don't allow
- folder operations on pseudo-folders that have a NULL physical_uri.
-
- * e-corba-storage.c (async_remove_folder): Make sure the folder
- has a physical URI. [#30950]
-
-2002-10-23 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-shared-folder-picker-dialog.c
- (setup_server_option_menu): Use
- e_utf8_gtk_menu_item_new_with_label() to create the option menu
- items from the storage's UTF-8 name. [#31564]
-
-2002-10-21 Ettore Perazzoli <ettore@ximian.com>
-
- * evolution-shell-component-utils.c
- (e_get_activation_failure_msg): If the exception_id is NULL,
- return NULL instead of crashing. [#25891]
-
-2002-10-17 Ettore Perazzoli <ettore@ximian.com>
-
- [Implement the Cancel button in the "Open other user's folder"
- dialog, as per #27735.]
-
- * e-corba-storage.c (cancel_discover_shared_folder): New,
- implementation for the cancel_discover_shared_folder virtual
- method.
- (class_init): Install.
-
- * evolution-test-component.c
- (storage_discover_shared_folder_callback): Instead of passing the
- listener to the timeout function, just pass the storage. Put the
- listener and the timeout ID on the storage object by using
- gtk_object_set_data().
- (shared_folder_discovery_timeout_callback): Updated accordingly.
- (storage_cancel_discover_shared_folder_callback): New, callback
- for the cancel_discover_shared_folder signal.
- (setup_custom_storage): Connect.
-
- * e-shell-shared-folder-picker-dialog.c: New member storage in
- struct DiscoveryData. While I am at it, rename member user to
- user_email_address.
- (discover_folder): Set the storage member.
- (cleanup_discovery): Unref storage member.
- (progress_dialog_clicked_callback): New, callback for the
- "clicked" signal on the dialog.
- (discover_folder): Connect.
-
- * evolution-storage.c (class_init): Install signal
- "cancel_discover_shared_folder".
- (impl_Storage_cancelDiscoverSharedFolder): New, implementation for
- the cancelDiscoverSharedFolder CORBA method; emit
- "cancel_discover_shared_folder".
- (evolution_storage_get_epv): Install CORBA method implementation.
-
- * evolution-storage.h: Add signal cancel_discover_shared_folder.
-
- * e-storage.c (e_storage_cancel_discover_shared_folder): New.
-
- * e-storage.h: New virtual method cancel_discover_shared_folder.
-
- * Evolution-Storage.idl (cancelDiscoverSharedFolder): New.
-
-2002-10-07 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-importer.c (choose_importer_from_list): Change the
- selection mode to GTK_SELECTION_BROWSE so there is always a
- selection. The code here doesn't handle a NULL selection.
- [#31690]
-
- * e-shell-importer.c (import_cb): Only delay half a second
- (instead of 5 seconds) when getting EVOLUTION_IMPORTER_NOT_READY
- or EVOLUTION_IMPORTER_BUSY.
-
- * importer/evolution-importer-listener.c
- (impl_GNOME_Evolution_ImporterListener_notifyResult): Removed
- debugging message.
-
-2002-10-04 Chris Toshok <toshok@ximian.com>
-
- * e-shell-folder-selection-dialog.c (delete_event_cb): new
- function, emit cancelled so the folder selector button will
- sensitize the parent window again.
- (e_shell_folder_selection_dialog_construct): connect the
- delete_event signal.
-
-2002-09-30 Aaron Weber <aaron@ximian.com>
-
- * importer/import.glade: Import Assistant vs. Importer assistant.
-
- * glade/evolution-startup-wizard.glade: setup/set up confusion in 15.
-
-2002-09-30 Dan Winship <danw@ximian.com>
-
- * e-shell-view-menu.c (command_remove_other_users_folder): Calls
- e_shell_command_remove_shared_folder.
- (file_verbs): Set up command_remove_other_users_folder.
-
- * e-shell-folder-commands.c
- (e_shell_command_remove_shared_folder): New. Calls
- e_storage_set_async_remove_shared_folder with a callback to pop up
- an error dialog if it fails.
-
- * e-storage-set.c (e_storage_set_async_remove_shared_folder):
- Implement. Mostly like async_remove_folder.
-
- * e-storage.c (e_storage_supports_shared_folders,
- e_storage_async_discover_shared_folder,
- e_storage_async_remove_shared_folder): New methods. Default
- implementations return FALSE, NOTIMPLEMENTED, and NOTIMPLEMENTED.
-
- * e-corba-storage.c (supports_shared_folders,
- async_discover_shared_folder, async_remove_shared_folder):
- Implement using CORBA.
-
- * Evolution-Storage.idl: add Storage_asyncRemoveSharedFolder
-
- * e-shell-shared-folder-picker-dialog.c: Remove all the CORBA
- stuff from here and use the new EStorage methods.
- (setup_server_option_menu): Use e_storage_supports_shared_folders.
- (discover_folder): Use e_storage_async_discover_shared_folder.
-
- * evolution-storage.c (impl_Storage_asyncRemoveSharedFolder):
- Implement this by emitting a REMOVE_SHARED_FOLDER signal.
- (impl_Storage_asyncDiscoverSharedFolder): Make the
- DISCOVER_SHARED_FOLDER signal put the Bonobo_Listener first like
- all the other signals do.
- (class_init): Set up REMOVE_SHARED_FOLDER signal.
-
-2002-09-30 Dan Winship <danw@ximian.com>
-
- * evolution-folder-selector-button.c (clicked): If we return from
- evolution_shell_client_user_select_folder to find that our parent
- window has been destroyed, unref it and bail out, since that means
- we've been destroyed (and probably finalized) too. #31360
-
-2002-09-26 Ettore Perazzoli <ettore@ximian.com>
-
- * e-local-storage.c (load_folder): Always return TRUE, even in the
- unknown-type case.
-
-2002-09-25 Rodrigo Moya <rodrigo@ximian.com>
-
- * e-shell-importer.c (importer_file_page_new): set history_id on
- GnomeFileEntry, to actually get the history.
-
-2002-09-25 Dan Winship <danw@ximian.com>
-
- * e-shell-folder-selection-dialog.c (check_folder_type_valid):
- If one of the allowed types is "type/*", allow anything starting
- with "type/".
- (impl_clicked): If the first allowed type is "type/*", pass "type"
- to e_shell_show_folder_creation_dialog.
-
- * evolution-folder-selector-button.c
- (evolution_folder_selector_button_set_uri): Handle "type/*" as an
- allowed type.
-
- * e-shell-settings-dialog.c (e_shell_settings_dialog_show_type):
- If there are no pages for the current folder type, try the parent
- type (eg, "mail" for "mail/public").
-
- * e-shell-config-autocompletion.c
- (e_shell_config_autocompletion_create_widget): Use "contacts/*" as
- the allowed folder type.
-
-2002-09-25 Ettore Perazzoli <ettore@ximian.com>
-
- [Finish fixing #11645.]
-
- * e-shell-folder-commands.c (xfer_result_callback): Don't update
- the shortcuts here anymore since now the shell takes care of it.
-
- * e-shell.c (storage_set_moved_folder_callback): New callback for
- EStorageSetView::folder_moved; update the shortcuts.
- (e_shell_construct): Connect.
-
- * e-storage-set.c: Renamed StorageConverterCallbackData to
- StorageCallbackData. New members destination_folder,
- source_folder, operation in it.
- (class_init): Install "moved_folder" signal.
- (storage_callback_data_new): Renamed from
- storage_converter_callback_data_new.
- (storage_callback_data_free): New.
- (storage_callback): Renamed from storage_callback_converter. Use
- storage_callback_data_free().
- (e_storage_set_async_create_folder): Updated to use the
- storage_callback and storage_callback_data_new().
- (e_storage_set_async_remove_folder): Likewise.
- (e_storage_set_async_xfer_folder): Likewise.
-
- * e-storage-set.h: New signal "moved_folder".
-
-2002-09-24 Ettore Perazzoli <ettore@ximian.com>
-
- [Fix #11645 for menu-based folder move operations. Still requires
- fixage for the DnD case.]
-
- * e-shell-view-menu.c (launch_pilot_settings): Placate compiler.
-
- * e-shell-folder-commands.c (xfer_result_callback): When
- FOLDER_COMMAND_MOVE, update the shortcuts by using
- e_shortcuts_update_shortcuts_for_changed_uri().
-
- * e-shortcuts.c (e_shortcuts_update_shortcuts_for_changed_uri):
- New.
-
-2002-09-24 Dan Winship <danw@ximian.com>
-
- * e-shell.c (folder_selection_dialog_folder_selected_cb): Don't
- destroy the dialog. It does that itself whenever it emits
- folder_selected.
-
- * e-shell-folder-selection-dialog.c (double_click_cb): Don't close
- the dialog if the user double-clicks a bad folder. Just ignore it
- (like we do when they click OK on a bad folder).
-
-2002-09-24 Ettore Perazzoli <ettore@ximian.com>
-
- [#14019]
-
- * e-shell-view-menu.c: Add PilotConduitSettings verb.
- (command_pilot_conduit_settings): Implementation for the verb.
- (launch_pilot_settings): Helper function.
-
-2002-09-24 Mike Kestner <mkestner@ximian.com>
-
- * e-storage-set-view.c (e_storage_set_enable_search): Use the new
- e_tree_set_search_column function instead of my lameass sort hack.
-
-2002-09-23 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell.c (e_shell_construct): Oops, no @shell argument to
- e_shell_startup_wizard_create().
-
-2002-09-23 Ettore Perazzoli <ettore@ximian.com>
-
- [#28317]
-
- * e-shell-view-menu.c (command_close): Use
- e_shell_request_close_view().
-
- * e-shell.c (e_shell_request_close_view): New, code moved out of
- view_delete_event_cb().
- (view_delete_event_cb): Use it.
-
-2002-09-23 Ettore Perazzoli <ettore@ximian.com>
-
- [Fix #16556.]
-
- * e-shell.c (e_shell_construct): Pass self to
- e_shell_startup_wizard_create.
-
- * e-shell-startup-wizard.c (e_shell_startup_wizard_create): Get a
- shell argument. Set the shell interactive when doing the start-up
- wizard thing.
-
- * e-shell.c (e_shell_set_interactive): New.
-
-2002-09-23 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-folder-creation-dialog.c (get_type_from_parent_path):
- Return "mail" instead of NULL when we don't have a parent folder.
- [#28232]
-
-2002-09-23 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-about-box.c: Added some missing names.
-
- * main.c (main): Declare --force-upgrade correctly so it works.
-
-2002-09-20 Ettore Perazzoli <ettore@ximian.com>
-
- * e-storage-set-view.c (class_init): Use PARENT_TYPE instead of
- e_tree_get_type().
-
-2002-09-20 Ettore Perazzoli <ettore@ximian.com>
-
- * e-storage-set-view.c: Removed member sort_idle_id in
- EStorageSetViewPrivate.
- (resort): Removed.
- (sort_traverse_callback): Removed.
- (sort_idle_callback): Removed.
- (queue_resort): Removed.
- (impl_destroy): Removed.
- (folder_name_changed_cb): Sort now instead of queueing a resort.
-
-2002-09-19 Ettore Perazzoli <ettore@ximian.com>
-
- [Fix #28495 with a lame hack that works around Bonobo sizing
- brokenness]
-
- * e-shell-settings-dialog.c (set_dialog_size): New.
- (impl_realize): Override for GtkWidget::realize; invoke
- set_dialog_size() to set a minimum size.
- (class_init): Install.
-
-2002-09-19 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-folder-creation-dialog.c (async_create_cb): Don't set
- the current folder for E_STORAGE_EXISTS. [#30533]
-
-2002-09-19 Ettore Perazzoli <ettore@ximian.com>
-
- * evolution-storage.c (evolution_storage_update_folder): Do not
- stop propagating the notification to the listeners if
- ::notifyFolderUpdate() fails. [#27662 (?)]
-
-2002-09-19 Ettore Perazzoli <ettore@ximian.com>
-
- * e-storage-set-view.c (resort): New.
- (sort_idle_callback): Use it.
- (insert_storages): Use resort() instead of queue_resort() so we
- sort immediately.
-
-2002-09-18 Mike Kestner <mkestner@ximian.com>
-
- * e-storage-set-view.c (etree_value_at): bandaid for 30248.
-
-2002-09-18 Not Zed <NotZed@Ximian.com>
-
- * evolution-wizard.c (impl_GNOME_Evolution_Wizard_notifyAction):
- Allow 'back' to run if we're on the finish page. For #29293.
-
-2002-09-17 Ettore Perazzoli <ettore@ximian.com>
-
- * e-storage.c (e_storage_result_to_string): Add description for
- E_STORAGE_NOTONLINE.
-
- * e-corba-storage.c
- (e_corba_storage_corba_result_to_storage_result): Support
- GNOME_Evolution_Storage_NOT_ONLINE (E_STORAGE_NOTONLINE).
-
- * Evolution-Storage.idl: Add NOT_ONLINE to enum Result.
-
- * e-storage.h: Add E_STORAGE_NOTONLINE to EStorageResult enum.
-
-2002-09-17 Ettore Perazzoli <ettore@ximian.com>
-
- * e-storage-set-view.c (sort_idle_callback): Remove unused
- variable.
-
- * e-shell-view.c (shell_line_status_changed_cb): Make Send/Receive
- insensitive when in offline mode. [#27855]
-
-2002-09-17 Ettore Perazzoli <ettore@ximian.com>
-
- [Fix #28451.]
-
- * e-storage-set-view.c: New member sort_idle_id in
- EStorageSetViewPrivate.
- (init): Init to zero.
- (impl_destroy): Remove the idle source if not zero.
- (queue_resort): New.
- (sort_idle_callback): Idle function to sort.
- (setup_folder_changed_callback): New.
- (new_folder_cb): Call it on the new folder so we get the callback
- for new folders too.
- (popup_folder_menu): Ref the folder before popping up the menu,
- unref it after popping it down [the folder might be unreffed in
- gnome_popup_menu_do_popup_modal() because of a folder action].
- (new_storage_cb): Just queue_resort() instead of sorting.
- (new_folder_cb): Likewise.
- (insert_folders): Likewise.
- (insert_storages): Likewise.
- (folder_changed_cb): Queue a resort here too.
-
- * e-folder.c (class_init): Set up "name_changed" signal.
- (e_folder_set_name): Emit "name_changed".
-
- * e-folder.h: New signal "name_changed".
-
-2002-09-17 Kjartan Maraas <kmaraas@gnome.org>
-
- * e-shell-settings-dialog.c (page_new): Invoke gettext on
- strings coming from the .oaf files.
-
-2002-09-17 Ettore Perazzoli <ettore@ximian.com>
-
- * e-local-storage.c: Remove some leftover junk.
-
-2002-09-17 Kjartan Maraas <kmaraas@gnome.org>
-
- * e-folder-list.c (create_display_string): Mark a string for
- translation.
-
- * evolution-folder-selection-button.c (set_folder): Same here.
-
-2002-09-17 Ettore Perazzoli <ettore@ximian.com>
-
- * e-storage.c (e_storage_removed_folder): When a highlighted
- folder gets removed, update the parent to not have a highlight.
- [#24062]
-
-2002-09-16 Ettore Perazzoli <ettore@ximian.com>
-
- * evolution-nognome.in: New script to run Evolution under a
- non-GNOME session when using a non-default GNOME prefix and a
- non-default Evolution prefix.
-
-2002-09-11 Ettore Perazzoli <ettore@ximian.com>
-
- * e-setup.c (setup_bonobo_conf_private_directory): g_free() not
- free(), since we allocate with glib functions. [#19899]
-
-2002-09-05 Mike Kestner <mkestner@ximian.com>
-
- * Makefile.am : no longer distribute the etstate files.
- * e-shell-folder-selection-dialog.c : enable_search on the view.
- * e-storage-set-view.c : add search_enabled flag handling.
- (e_storage_set_view_set_show_checkboxes): manipulate the existing state
- instead of loading a state file from disk.
- (e_storage_set_view_enable_search): new. set a column in the sort_info
- on the etree to allow keystroke jumping in the etree.
-
-2002-09-05 Anna Marie Dirks <anna@ximian.com>
-
- * GNOME_Evolution_Shell.oaf.in : Changed the description
- of the folders page in the settings dialog to be more specific.
-
-2002-09-04 Ettore Perazzoli <ettore@ximian.com>
-
- * Makefile.am (INCLUDES): Add a -DPREFIX.
-
- * main.c (main): New command-line option "force-upgrade".
- (show_development_warning): Suggest 1.0.8, not 1.0.5.
- (upgrade_from_1_0_if_needed): New.
- (idle_cb): Call it.
-
-2002-09-04 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view.c (new_folder_cb): Pass FALSE as @queue to
- e_shell_view_display_uri() here.
-
-2002-09-04 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view.c (e_shell_view_get_current_component_id): If the
- current_folder_type is NULL, just return NULL instead of passing
- it to e_folder_type_registry_get_handler_for_type() [and generate
- a warning]. [#21122]
-
-2002-09-04 Dan Winship <danw@ximian.com>
-
- * glade/e-shell-shared-folder-picker-dialog.glade: Remove the
- "blah blah" text for now and change "Server" to "Account".
-
-2002-09-04 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell.c (create_view): Pass TRUE as @queue to
- e_shell_view_display_uri().
-
- * e-shell-view-menu.c (command_activate_view): Pass TRUE as @queue
- to e_shell_view_display_uri().
- (goto_folder_dialog_folder_selected_cb): Likewise.
-
- * e-shell-shared-folder-picker-dialog.c
- (shared_folder_discovery_listener_callback): Pass TRUE as @queue
- to e_shell_view_display_uri().
-
- * e-shell-view.c
- (display_uri): New arg @queue. If true, it allows the
- delayed_selection mechanism to happen transparently (returning
- TRUE, while before it used to return FALSE). Otherwise, refuse to
- queue the URI and return FALSE.
- (e_shell_view_display_uri): New arg @queue; pass it to
- display_uri().
- (handle_current_folder_removed): Pass TRUE as @queue to
- e_shell_view_display_uri().
- (set_folder_timeout): Likewise.
- (switch_on_folder_tree_click): Likewise.
- (activate_shortcut_cb): Likewise.
- (corba_interface_change_current_view_cb): Likewise.
- (socket_destroy_cb): Likewise.
- (socket_destroy_cb): Likewise.
- (e_shell_view_load_settings): Here, try displaying the old URI
- with @queue set to FALSE; if this fails, display the default URI
- and then invoke display again using @queue = TRUE so it gets
- queued up. This should fix #27721.
-
-2002-09-04 Ettore Perazzoli <ettore@ximian.com>
-
- * main.c (idle_cb): Pass FALSE as @restore_all_views to
- e_shell_restore_from_settings() so we only restore the first view.
-
- * e-shell.c (e_shell_restore_from_settings): New arg
- @restore_all_views.
-
-2002-09-04 Ettore Perazzoli <ettore@ximian.com>
-
- * e-storage-set-view.c (popup_folder_menu): Remove the context
- menu items using
- evolution_shell_component_client_unpopulate_folder_context_menu()
- instead of doing it ourself, since BonoboUI sucks.
-
- * evolution-shell-component-client.c
- (evolution_shell_component_client_unpopulate_folder_context_menu):
- New.
-
- * evolution-test-component.c (register_component): Pass NULL as
- @unpopulate_folder_context_menu_fn to
- evolution_shell_component_new().
-
- * evolution-shell-component.c: New member
- unpopulate_folder_context_menu_fn in
- EvolutionShellComponentPrivate. New member uic in
- EvolutionShellComponentPrivate.
- (init): Init new members to NULL.
- (destroy): bonobo_object_unref() priv->uic if not NULL.
- (evolution_shell_component_new): New arg
- @unpopulate_folder_context_menu_fn.
- (evolution_shell_component_construct): Likewise.
- (impl_populateFolderContextMenu): Set priv->uic to the newly
- created UIComponent.
- (impl_unpopulateFolderContextMenu): New, implementation for the
- ::unpopulateFolderContextMenu CORBA method.
- (class_init): Install.
-
- * Evolution-ShellComponent.idl (unpopulateFolderContextMenu): New
- method.
- (AlreadyPopulated): New exception.
- (populateFolderContextMenu): Can raise it.
- (NotPopulated): New exception.
-
-2002-09-03 Ettore Perazzoli <ettore@ximian.com>
-
- * e-storage-set-view.c (popup_folder_menu): Create an Items
- placeholder under ComponentPlaceholder, and then
- bonobo_ui_component_rm() it after we are done with the menu. This
- -should- fix #29782, but it doesn't. I am not sure why.
-
- * evolution-shell-component.h
- (EVOLUTION_SHELL_COMPONENT_POPUP_PLACEHOLDER): Append a "/Items"
- part.
-
-2002-09-03 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-importer.c (show_import_wizard): Make the WM close
- button in the dialog hide instead of destroying, using
- gnome_dialog_close_hides(). [#15572]
-
-2002-08-28 Dan Winship <danw@ximian.com>
-
- * e-shell.c (setup_components): Pass a selection_order to
- oaf_query so we get the components back in a consistent order.
- Hack fix for #28490 for 1.2 by ensuring that Connector gets
- started before evolution-mail.
- (get_icon_path_for_component_info): Rename the oaf icon name
- property to use underscores to match the launch order property
- (which needs to use underscores because dashes are interpreted as
- subtraction in the selection_order context).
-
-2002-08-27 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shortcuts-view.c (get_shortcut_info): Make sure
- *custom_icon_name_return is at least set to NULL on return [it
- used to leave it uninitialized if the URI was not prefixed with
- E_SHELL_URI_PREFIX]. Also use e_shell_parse_uri() to parse the
- URI so we handle the default shortcuts properly, too.
-
-2002-08-19 Dan Winship <danw@ximian.com>
-
- * e-shell-shared-folder-picker-dialog.c (show_dialog): Get the
- "addresses" property of the select names control rather than
- "text", so we get the email address too. #28953
-
- * e-folder-type-registry.c
- (e_folder_type_registry_type_registered,
- e_folder_type_registry_unregister_type): Fix the names of these
- functions. (They previously used "register" instead of
- "registry".)
-
- * e-component-registry.c (register_type): Update for renaming
-
- * e-local-storage.c (load_folder): Likewise
-
-2002-08-16 Dan Winship <danw@ximian.com>
-
- * evolution-folder-selector-button.c
- (evolution_folder_selector_button_set_uri): If the selected URI is
- of an invalid type, don't accept it.
- (evolution_folder_selector_button_get_folder): Returns the
- selected folder.
- (various): updates to support get_folder, and to simplify.
-
-2002-08-09 Dan Winship <danw@ximian.com>
-
- * e-shell-shared-folder-picker-dialog.c (create_progress_dialog):
- Remove both timeouts when the dialog is destroyed, not just one of
- them.
- (shared_folder_discovery_listener_callback): Don't try to access
- fields of discovery_data after destroying it. Interpret the result
- argument correctly, and put up an error dialog (using
- e_corba_storage_corba_result_to_storage_result and
- e_storage_result_to_string) if something went wrong.
-
- * e-corba-storage.c
- (e_corba_storage_corba_result_to_storage_result): convert a
- GNOME_Evolution_Storage_Result to an EStorageResult.
- (async_folder_cb): Use that.
-
-2002-08-06 Dan Winship <danw@ximian.com>
-
- * e-storage-set-view.c (folder_property_item_verb_callback): Don't
- include the storage name in the path passed to
- e_corba_storage_show_folder_properties, for consistency with the
- other EStorage methods.
-
-2002-08-06 Ettore Perazzoli <ettore@ximian.com>
-
- * evolution-test-component.c
- (storage_show_folder_properties_callback): New callback for the
- show_folder_properties signal.
- (setup_custom_storage): Add two property items, and connect the
- callback to the signal.
-
- * e-storage-set-view.c: Renamed private member container into
- ui_container; new member ui_component.
- (init): Initialize ui_component to NULL.
- (impl_destroy): Unref if not NULL.
- (e_storage_set_view_construct): If @ui_container is not NULL,
- weakref it and create a new ui_component that uses it as its
- container.
- (ui_container_destroy_notify): New, weakref destroy callback for
- priv->ui_container.
- (remove_property_items): New helper function.
- (setup_folder_properties_items_if_corba_storage_clicked): New
- helper function.
- (folder_property_item_verb_callback): New callback for the verbs
- associated to the folder property items.
- (popup_folder_menu): Set up the per-storage folder property items
- using setup_folder_properties_items_if_corba_storage_clicked() and
- remove them with remove_property_items() after the menu has been
- popped down. Don't invoke populate_folder_context_menu if there
- is no handler for this node [this avoids a spurious warning].
-
- * e-corba-storage.c (e_corba_storage_show_folder_properties): New.
- (e_corba_storage_get_folder_property_items): New.
- (e_corba_storage_free_property_items_list): New.
-
- * evolution-storage.c: New private member folder_property_items.
- (init): Init to NULL.
- (destroy): Free.
- (impl_showFolderProperties): New, implementation for the
- Storage::showFolderProperties CORBA method.
- (class_init): Set up the "show_folder_properties" signal here.
- (impl_Storage__get_propertyItems): New, getter for the
- Storage::propertyItems property.
- (corba_class_init): Install the new methods.
- (evolution_storage_add_property_item): New function to add
- property items to the storage.
-
- * evolution-storage.h: New signal show_folder_properties.
-
- * e-storage-set.c (e_storage_set_create_new_view): Renamed from
- e_storage_set_new_view().
-
- * Evolution-Storage.idl: Added attribute folderPropertyItems and
- method ::showFolderProperties.
-
-2002-08-01 Ettore Perazzoli <ettore@ximian.com>
-
- * e-gray-bar.c (endarken_style): Set the color for
- GTK_STATE_INSENSITIVE too so it doesn't look ugly when we quit.
-
-2002-07-31 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shortcuts-view.c (create_default_shortcuts_cb): New, implement
- a right-click -> "Add Default Shortcuts" menu item.
- (rename_group_cb): Remove double casts. *lol*
-
- * e-shortcuts.c (e_shortcuts_add_default_shortcuts): New.
- (e_shortcuts_add_default_group): Use
- e_shortcuts_add_default_shortcuts().
-
-2002-07-31 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-user-creatable-items-handler.c (ensure_menu_items):
- Don't sort the menu_items here.
- (create_menu_xml): Instead, sort here, and only sort the
- non-default section of the menu.
- (get_default_action_for_view): Just get the first item that is
- default; since we don't sort anymore, this works.
- (find_menu_item_for_verb): Removed since it is not used anymore.
-
-2002-07-31 Ettore Perazzoli <ettore@ximian.com>
-
- * evolution-test-component.c (register_component): Pass NULL for
- @folder_type to
- evolution_shell_component_add_user_creatable_item().
-
- * e-shell-user-creatable-items-handler.c: New member folder_type
- in struct MenuItem.
- (ensure_menu_items): Initialize ->folder_type.
- (item_is_default): New helper function.
- (create_menu_xml): New arg @folder_type. Put the items on the top
- using item_is_default().
- (shell_view_view_changed_callback): Pass the folder type to
- create_menu_xml().
-
- * evolution-shell-component.c: New member folder_type in
- UserCreatableItemType.
- (user_creatable_item_type_new): New arg @folder_type.
- (user_creatable_item_type_free): Free ->folder_type.
- (evolution_shell_component_add_user_creatable_item): New arg
- @folder_type.
- (impl__get_userCreatableItemTypes): Set ->folderType in the
- returned CORBA structs.
-
- * Evolution-ShellComponent.idl: New member folderType in struct
- UserCreatableItemType.
-
- * e-shell-user-creatable-items-handler.c: New member component_id
- in struct MenuItem. Removed member menu_xml from
- EShellUserCreatableItemsHandlerPrivate.
- (init): No need to initialize menu_xml here anymore.
- (impl_destroy): ...And no need to free here, either.
- (setup_menu_xml): New, derived from ensure_menu_xml(). This
- orders the menu so that the items for the current component go at
- the top.
- (create_menu_xml): Removed.
- (e_shell_user_creatable_items_handler_attach_menus): Set up
- properly for the current component ID, using setup_menu_xml().
-
-2002-07-29 Jeffrey Stedfast <fejj@ximian.com>
-
- * evolution-folder-selector-button.c
- (evolution_folder_selector_button_set_uri): New function to set
- the uri programatically on a EvolutionFolderSelectorButton dingus.
-
-2002-07-26 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view-menu.c (command_new_shortcut): Capitalize the title
- of the dialog for consistency.
-
- * e-shell-folder-creation-dialog.c (setup_dialog): Don't prepend
- the window's title with "Evolution -" since we don't do that
- anywhere else. Also capitalize properly.
-
-2002-07-26 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-user-creatable-items-handler.c (ensure_menu_xml): Put in
- the ComponentItems placeholder, instead of NewItems.
-
-2002-07-26 Ettore Perazzoli <ettore@ximian.com>
-
- * e-local-storage.c (load_all_folders): Don't return FALSE if any
- of the folders fails to load; otherwise, if the user has played
- with ~/evolution, he might end up not seeing any folders at all.
-
-2002-07-24 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view-menu.c (command_work_online): Remove debugging
- message.
- (command_work_offline): Likewise.
-
-2002-07-18 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-folder-selection-dialog.c (double_click_cb): Renamed
- from `dbl_click_cb'.
- (check_folder_type): Don't pop up an error dialog anymore.
- (check_folder_type_valid): Renamed from check_folder_type().
- (folder_selected_cb): Make the OK button sensitive only if the
- type of the selected folder is in the list of valid types;
- otherwise, make it insensitive. [#848]
-
-2002-07-18 Rodrigo Moya <rodrigo@ximian.com>
-
- * e-shell-importer.c (start_import): removed check for local folders,
- so that we can import into non-local ones.
-
-2002-07-18 Ettore Perazzoli <ettore@ximian.com>
-
- * evolution-storage-set-view.c
- (impl_StorageSetView__set_checkedFolders): Removed unused
- variable.
-
- * e-shell-folder-title-bar.c (e_shell_folder_title_bar_construct):
- Removed unused variable.
-
- Mass-replaced G_DIR_SEPARATOR and G_DIR_SEPARATOR_S with
- E_PATH_SEPARATOR and E_PATH_SEPARATOR_S:
-
- * e-storage.c
- (e_storage_path_is_absolute)
- (e_storage_path_is_relative)
- (e_storage_async_xfer_folder)
- * e-storage-set.c
- (make_full_path)
- (get_storage_for_path)
- (signal_new_folder_for_all_folders_under_paths)
- (signal_new_folder_for_all_folders_in_storage)
- (e_storage_set_get_path_for_physical_uri)
- * e-storage-set-view.c
- (storage_sort_callback)
- (new_storage_cb)
- (removed_storage_cb)
- (new_folder_cb)
- * e-shortcuts-view.c
- (get_shortcut_info)
- * e-shell-view.c
- (handle_current_folder_removed)
- * e-shell-utils.c
- (e_shell_folder_name_is_valid)
- * e-local-storage.c
- (construct)
- * e-folder-tree.c
- (get_parent_path)
- (get_parent_path)
- (e_folder_tree_destroy)
- (e_folder_tree_add)
- (e_folder_tree_foreach)
- * e-folder-dnd-bridge.c
- (handle_data_received_path)
- * evolution-storage.c
- (make_full_uri)
-
- * e-shell-constants.h: New #defines E_PATH_SEPARATOR and
- E_PATH_SEPARATOR_S.
-
- * e-local-storage.c (load_folder): Don't add the folder if its
- type isn't registered.
-
-2002-07-17 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shortcuts-view-model.c (get_icon_for_item): Get the
- EStorageSet from the shortcut's shell since there is no
- e_shortcuts_get_storage_set() anymore.
- * e-shortcuts-view.c (get_shortcut_info): Likewise.
- (impl_shortcut_drag_motion): Likewise.
- (impl_shortcut_drag_data_received): Likewise.
-
- * e-shell.c (e_shell_construct): e_shortcuts_new_from_file(), not
- e_shortcuts_new() here.
-
- * e-shortcuts.c: Removed members storage_set and
- folder_type_registy in EShortcutsPrivate. New member shell.
- (init): Init to NULL.
- (e_shortcuts_construct): Removed arg @storage_set and
- @folder_type_registry, new arg @shell.
- (e_shortcuts_new): Removed.
- (e_shortcuts_new_from_file): New.
- (impl_destroy): Renamed from destroy().
- (e_shortcuts_get_storage_set): Removed.
- (e_shortcuts_get_shell): New.
- (load_shortcuts): Accept any URI that can be parsed (by
- e_shell_parse_uri).
-
- * e-shell.c (e_shell_parse_uri): New.
-
- * e-shell-view.c (evolution_uri_for_default_uri): New.
- (display_uri): Use it to determine the evolution: uri given a
- default: uri.
-
- * e-shell.c (impl_Shell_handleURI): Pass it over to
- e_shell_create_view_from_uri_and_settings() even if it's an
- E_SHELL_DEFAULTURI_PREFIX.
- (handle_default_uri): Removed.
-
-2002-07-12 Peter Williams <peterw@ximian.com>
-
- * Makefile.am (INCLUDES): Add -I$(builddir)/libical/src/libical
- for the generated ical.h (some headers rely on this because
- they too get installed.)
-
-2002-07-14 Rodrigo Moya <rodrigo@ximian.com>
-
- * evolution-storage.c (impl_Storage_getFolderAtPath): no need to
- convert the value returned by e_folder_tree_get_folder to a
- GNOME_Evolution_Folder, since it already is, and duplicate it before
- returning.
-
-2002-07-14 Chris Toshok <toshok@ximian.com>
-
- * e-shell.c (folder_selection_dialog_folder_selected_cb): set
- corba_folder.customIconName so we don't crash.
- (impl_Shell_selectUserFolder): remove the default_type parameter
- to fix a compiler warning.
-
-2002-07-12 Dan Winship <danw@ximian.com>
-
- * evolution-storage.c (impl_Storage_asyncDiscoverSharedFolder):
- dup the listener, for consistency with the other signals
-
-2002-07-12 Ettore Perazzoli <ettore@ximian.com>
-
- * evolution-folder-selector-button.c (clicked): Ref the
- parent_window and then unref after you are done using it.
- [#27673]
-
-2002-07-12 Peter Williams <peterw@ximian.com>
-
- * Makefile.am (eshellinclude_HEADERS): Install some headers
- that weren't getting installed.
-
-2002-07-11 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-folder-title-bar.c (e_shell_folder_title_bar_set_icon):
- Allow a NULL icon [remove the precondition].
-
- * e-shell-view.c (update_folder_title_bar): Only unref the
- folder_icon if not NULL.
-
-2002-07-11 Ettore Perazzoli <ettore@ximian.com>
-
- * evolution-storage-set-view.c
- (impl_StorageSetView__set_checkedFolders): Handle
- Folder.evolutionUri as a URI, not as a path. Also use
- e_free_string_list().
-
-2002-07-11 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view.c (update_folder_title_bar): Ref the folder_icon
- that we get from e_folder_type_registry_get_icon_for_type().
-
-2002-07-11 Ettore Perazzoli <ettore@ximian.com>
-
- * evolution-storage.c (get_folder_list_foreach): Copy
- customIconName and sortingPriority in the new_corba_folder.
- [#27670]
-
-2002-07-11 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-folder-title-bar.c: Remove some `#if 0'ed broken code.
- New members title_icon and title_button_icon in struct
- EShellFolderTitleBarPrivate. Remove member icon_widget. New
- static global variable empty_pixbuf.
- (init): Initialize these new members to NULL. Don't initialize
- icon_widget anymore since it's gone.
- (e_shell_folder_title_bar_construct): Create the title_button_icon
- and pack it into the title_button_hbox. Also, create the
- title_icon and pack that one as well. Retouched some of the
- hardcoded padding values.
- (size_allocate_icon): Rewritten to use the title_icon and return
- the allocated space like size_allocate_navigation_buttons.
- (e_shell_folder_title_bar_set_icon): Remove bogus const from the
- @icon arg. Ref the pixbuf, and update the two pixmap widgets from
- it. If @icon is NULL, use the empty_pixbuf.
- (impl_destroy): Renamed from destroy().
- (realize): Removed.
- (unrealize): Removed.
- (impl_size_allocate): Renamed from size_allocate().
- (class_init): Call it.
- (add_icon_widget): Removed.
- (new_empty_pixbuf): New.
- (new_empty_pixmap_widget): New.
- (size_allocate_navigation_buttons_and_title_icon): Renamed from
- size_allocate_navigation_buttons; set up the title_icon too.
-
- * e-shell-view.c (update_folder_title_bar): Unref the folder_icon
- after using it.
-
- * e-icon-factory.c (e_icon_factory_get_icon): Ref the returned pixbuf.
-
-2002-07-10 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view.c (update_folder_title_bar): Get a @folder arg
- instead of a @type arg. Use the custom icon if the folder has
- one.
- (update_for_current_uri): Updated accordingly.
-
-2002-07-10 Ettore Perazzoli <ettore@ximian.com>
-
- * evolution-test-component.c (setup_custom_storage): Pass
- @sorting_priority to evolution_storage_new_folder() so we test it.
- Also make /FirstFolder have an "inbox" custom icon.
-
- * e-local-storage.c (new_folder): Pass zero as @sorting_priority
- to evolution_storage_new_folder().
-
- * evolution-storage.c (evolution_storage_new_folder): New arg
- @sorting_priority; put it in the CORBA folder struct.
-
- * evolution-shell-client.c
- (impl_FolderSelectionListener_selected): Copy the sortingPriority
- as well.
-
- * e-folder.c (e_folder_to_corba): Set sortingPriority.
-
- * e-corba-storage-registry.c
- (impl_StorageRegistry_getFolderByUri): Set sortingPriority in the
- new CORBA Folder struct.
-
- * e-corba-storage.c (impl_StorageListener_notifyFolderCreated):
- Set the custom_icon if folder->customIconName is not an empty
- string. Likewise, set the sorting_priority
-
- * Evolution-common.idl: New member sortingPriority in struct
- Folder.
-
- * e-storage-set-view.c (folder_sort_callback): Sort according to
- the sorting_priorities.
-
- * e-folder.c: New member sorting_priority in EFolderPrivate.
- (init): Init to zero.
- (e_folder_set_custom_icon): Emit "changed" if required.
- (e_folder_set_sorting_priority): New.
-
-2002-07-09 Ettore Perazzoli <ettore@ximian.com>
-
- * e-icon-factory.c (load_icon): Ooops. Swapped the large/small
- pixbufs here. Also, plug a leak.
-
-2002-07-09 Ettore Perazzoli <ettore@ximian.com>
-
- * evolution-test-component.c (setup_custom_storage): Pass NULL for
- @custom_icon_name to evolution_storage_new_folder().
-
- * e-local-storage.c (new_folder): Pass the custom_icon_name here
- to evolution_storage_new_folder().
-
- * evolution-shell-client.c
- (impl_FolderSelectionListener_selected): Set customIconName here
- too.
-
- * e-folder.c (e_folder_to_corba): Set customIconName too.
-
- * e-corba-storage-registry.c
- (impl_StorageRegistry_getFolderByUri): Set customIconName. Also,
- use e_safe_corba_string() to clean up the code a bit.
-
- * evolution-storage.c (evolution_storage_new_folder): New arg
- @custom_icon_name.
-
- * Evolution-common.idl: New member customIconName in struct
- Folder.
-
-2002-07-09 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shortcuts-view-model.c (get_icon_for_item): If the
- custom_icon_name is not NULL, return the pixbuf for it.
-
- * e-storage-set-view.c: #include "e-icon-factory.h".
-
- * e-shortcuts-view.c (impl_shortcut_dropped): Pass the
- custom_icon_name.
- (get_shortcut_info): New arg @custom_icon_name_return.
- (rename_shortcut_cb): Pass the custom_icon_name here.
-
- * e-shell-view-menu.c (new_shortcut_dialog_folder_selected_cb):
- Pass the custom_icon_name for the folder's shortcut.
-
- * e-shell-folder-commands.c (e_shell_command_add_to_shortcut_bar):
- Pass the custom_icon_name for the folder's shortcut.
-
- * e-corba-shortcuts.c (impl_add): Use the customIconName member in
- struct ::Shortcuts::Shortcut.
- (shorcut_list_to_corba): Set the customIconName member on the
- returned shortcuts.
- (impl_get): Likewise.
-
- * Evolution-Shortcuts.idl: New member customIconName in struct
- Shortcut.
-
- * e-shortcuts.c (shortcut_item_new): New arg @custom_icon_name;
- initialize the member in EShortcutItem from it.
- (shortcut_item_update): New arg @custom_icon_name; set the
- custom_icon_name from it. Also remove some braindeadness from
- this code.
- (update_shortcut_and_emit_signal): New arg @custom_icon_name.
- (load_shortcuts): Load the custom icon name from the XML
- [eg. <item name="foo" type="mail" icon="inbox">].
- (save_shortcuts): Save the custom icon name in the XML.
- (e_shortcuts_add_shortcut): New arg @custom_icon_name.
- (update_shortcuts_by_path): Pass the custom_icon_name to
- update_shortcut_and_emit_signal().
- (e_shortcuts_update_shortcut): New arg @custom_icon_name; pass it
- to update_shortcut_and_emit_signal().
- (e_shortcuts_add_default_group): Pass "inbox" as the
- custom_icon_name for the inbox shortcut, and NULL for the other
- shortcuts.
-
- * e-shortcuts.h: New member custom_icon_name in EShortcutItem.
-
-2002-07-09 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shortcuts-view.c (impl_shortcut_drag_motion): Remove debugging
- message.
- (impl_shortcut_drag_motion): Likewise.
-
- * e-local-storage.c (remove_folder_step): Remove debugging message.
-
- * e-folder-dnd-bridge.c (e_folder_dnd_bridge_data_received):
- Remove debugging message.
-
-2002-07-09 Ettore Perazzoli <ettore@ximian.com>
-
- * main.c (main): Call e_icon_factory_init().
-
- * e-local-storage.c (setup_folder_as_stock): New arg @icon_name;
- if not NULL, set up a custom icon for the folder.
- (setup_stock_folders): Set up custom icons for inbox and outbox.
-
- * e-storage-set-view.c (get_pixbuf_for_folder): If the folder has
- a custom icon, return the custom icon.
-
- * e-folder.c: New member custom_icon_name.
- (init): Initialize to NULL.
- (destroy): Free.
- (e_folder_get_custom_icon): New.
- (e_folder_set_custom_icon): New.
-
- * e-icon-cache.c: New.
- * e-icon-cache.h: New.
-
-2002-07-09 Ettore Perazzoli <ettore@ximian.com>
-
- * e-local-storage.c (remove_folder): Remove unused variable.
-
-2002-07-08 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shortcuts-view.c (toggle_large_icons_cb): Change the group
- icon size using e_shortcuts_set_group_uses_small_icons() instead
- of changing it on the widget directly.
- (toggle_small_icons_cb): Likewise.
- (group_change_icon_size_callback): New, callback for the
- "group_change_icon_size" signal on the EShortcuts object.
- (e_shortcuts_view_construct): Connect. Also, initialize the icon
- sizes in the icon bars from the EShortcuts object.
-
- * e-shell-view.c (e_shell_view_load_settings): Don't set the
- shortcut group icon modes here anymore.
-
- * e-shortcuts.c: New member use_small_icons in struct
- ShortcutGroup.
- (shortcut_group_new): Init to FALSE.
- (e_shortcuts_set_group_uses_small_icons): New.
- (e_shortcuts_get_group_uses_small_icons): New.
- (class_init): Install "group_change_icon_size" signal.
- (save_shortcuts): Save the icon size per-group
- here, i.e. <group title="foo" icon_size="small">.
- (load_shortcuts): Set the icon size from the group's definition
- here.
-
- * e-shortcuts.h: New signal "group_change_icon_size" in
- EShortcutsClass.
-
-2002-07-08 Ettore Perazzoli <ettore@ximian.com>
-
- * e-folder.c (safe_corba_string_dup): New helper function.
- (e_folder_to_corba): Use it here.
-
- * Makefile.am (libeshell_la_SOURCES): Move e-folder.c here, from
- evolution_SOURCES.
- (eshellinclude_HEADERS): Likewise, move e-folder.h here.
-
- * evolution-storage.c (impl_Storage_getFolderAtPath): New,
- implementation for Evoluiton::Storage::getFolderAtPath.
- (evolution_storage_get_epv): Install CORBA method here.
-
- * Evolution-Storage.idl (getFolderAtPath): New method in
- Evolution::Storage.
-
-2002-07-05 Ettore Perazzoli <ettore@ximian.com>
-
- [Fix #22047, Crash after running the start-up wizard. The patch
- was applied a while ago to the evolution-1-0-branch but not on
- the trunk.]
-
- * e-shell-startup-wizard.c (startup_wizard_cancel): Unref the
- ETimezoneDialog.
- (finish_func): Likewise.
-
-2002-07-03 Ettore Perazzoli <ettore@ximian.com>
-
- [Fixes #27354.]
-
- * e-storage-set-view.c (impl_tree_drag_drop): Invoke
- e_folder_dnd_bridge_drop().
-
- * e-folder-dnd-bridge.c (find_matching_target_for_drag_context):
- New arg @atom_return. Return the GdkAtom associated with the type
- through it.
- (e_folder_dnd_bridge_drop): New.
-
-2002-07-02 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell.c (e_shell_show_settings): Don't set up the settings
- dialog as a transient. [#25776]
-
-2002-07-02 Ettore Perazzoli <ettore@ximian.com>
-
- * e-local-storage.c (bonobo_interface_remove_folder_cb): Add
- parameter @listener to match the signal's signature. [#24413]
-
-2002-07-02 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-user-creatable-items-handler.c: New member tooltip in
- struct MenuItem.
- (ensure_menu_items): Initialize the tooltip member.
- (shell_view_view_changed_callback): Set the tooltip for the "New"
- button.
- (ensure_menu_xml): Set up the tooltip here as well.
-
- * evolution-shell-component.c: Add tooltip member to struct
- UserCreatableItemType.
- (user_creatable_item_type_new): New arg @tooltip.
- (evolution_shell_component_add_user_creatable_item): New arg
- @tooltip.
- (impl__get_userCreatableItemTypes): Put the tooltip in the struct
- as well.
-
- * e-shell-user-creatable-items-handler.c (setup_toolbar_button):
- Create a GtkTooltips object and attach it to the combo_button
- using gtk_object_set_data().
- (shell_view_view_changed_callback): Set up a tooltip for the
- button, according to the default.
-
- * Evolution-ShellComponent.idl: Add a tooltip member to struct
- UserCreatableItemType.
-
-2002-07-01 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell.c (e_shell_prepare_for_quit): Remove debugging message.
-
- * e-shell-view.c (setup_verb_sensitivity_for_folder): Set
- sensitivity of /commands/AddFolderToShortcutBar,
- /commands/OpenFolder and /commands/OpenFolderInNewWindow too,
- depending on whether the node that was right-clicked can be opened
- as a folder.
-
- * e-storage-set-view.c (popup_folder_menu): Pop up the right-click
- menu even if we are not clicking on a folder with a proper
- handler.
-
-2002-07-01 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell.c: New member preparing_to_quit in EShellPrivate.
- (init): Initialize to FALSE.
- (e_shell_prepare_for_quit): Set preparing_to_quit to TRUE on
- entering, and set it to FALSE on return.
- (view_delete_event_cb): Don't call e_shell_prepare_for_quit() if
- preparing_for_quit is TRUE.
-
-2002-06-28 Ettore Perazzoli <ettore@ximian.com>
-
- * evolution-storage.c (impl_Storage_updateFolder): Don't stop
- notifying the listeners if ::notifyFolderUpdated() fails. Should
- fix #25598.
-
-2002-06-28 Ettore Perazzoli <ettore@ximian.com>
-
- [Fix #10681, Incorrect behavior when deleting a hierarchy of local
- folders.]
-
- * e-local-storage.c: Change the ASyncRemoveFolderCallbackData
- struct to have only storage and next_paths_to_delete members.
- (remove_folder_step): New.
- (component_async_remove_folder_callback): Start deletion for the
- next path in next_paths_to_delete, so we handle recursion
- properly.
- (create_subfolder_list): New.
- (remove_folder): Create the list with create_subfolder_list,
- initialize the ASyncRemoveFolderCallbackData with the
- next_paths_to_delete list and do the first deletion. This way we
- handle recursion properly.
-
-2002-06-26 Iain <iain@ximian.com>
-
- * e-shell-importer.c (show_import_wizard): Only let the dialog be
- opened once.
-
-2002-06-26 Iain <iain@ximian.com>
-
- * Evolution-StorageSetView.idl: Add a notifyFolderToggled method,
- allow checkedFolders to be writable.
-
- * e-shell-importer.c (free_iid_list): Free the list of iid infos.
- (get_name_from_component_info): Move this function from futher down
- the file to here because it's useful.
- (choose_importer_from_list): Present the user with a list of importer
- names to select the one they want to use.
- (get_iid_for_filetype): Store the name of the importer as well as the
- iid in the list. If there are multiple matches, show the user a list.
-
- * evolution-storage-set-view-listener.[ch]: Add a folder toggled signal.
- (impl_GNOME_Evolution_StorageSetViewListener_notifyFolderToggled):
- Notify listeners that a folder has been toggled.
- (corba_class_init): Hook up the new method.
- (class_init): Create the new signal.
-
- * evolution-storage-set-view.c
- (storage_set_view_widget_folder_toggled_cb): Call the CORBA method for
- each listener.
- (impl_StorageSetView__set_checkedFolders): Set the checked folders
- from the list.
- (impl_StorageSetView__get_checkedFolders): Don't include blanks in the
- list.
-
-2002-06-24 Ettore Perazzoli <ettore@ximian.com>
-
- * e-local-storage.c (remove_folder): Removed arg @physical_uri.
-
- * e-shell-folder-selection-dialog.c (impl_clicked): Pass
- default_type to e_shell_show_folder_creation_dialog() properly.
- [Patch by Christian Kreibich <christian@whoop.org>.]
-
-2002-06-19 Kjartan Maraas <kmaraas@gnome.org>
-
- * e-corba-config-page.h: Remove #include <config.h>
- * e-shell-about-box.h: Same
- * e-history.h: Same
- * e-shell-importer.c: gtk_widget_show() all items in the optionmenu
- before showing it.
- * e-shell-offline-handler.h: Remove #include <config.h>
- * e-shell-settings-dialog.h: Same.
-
-2002-05-31 Ettore Perazzoli <ettore@ximian.com>
-
- * evolution-storage-set-view.c
- (impl_StorageSetView__get_checkedFolders): Set release for the
- CORBA path sequence to TRUE.
-
- * evolution-shell-component.c
- (fill_corba_sequence_from_null_terminated_string_array): Set
- release for the CORBA sequence to TRUE so it gets freed properly.
- (impl__get_externalUriSchemas): Likewise for the returned
- uri_chema_list.
-
- * e-shell-offline-handler.c (duplicate_connection_list): Set
- release for the connection sequence to TRUE.
-
- * e-shell-config-offline.c (config_control_apply_callback): Set
- release for the path sequence to TRUE.
-
- * e-corba-storage-registry.c
- (impl_StorageRegistry_getStorageList): Set release for the storage
- sequence to TRUE.
-
- * evolution-storage.c (impl_Storage__get_folderList): Set release
- for the folder sequence to TRUE.
-
-2002-05-30 Ettore Perazzoli <ettore@ximian.com>
-
- [This fixes #25361.]
-
- * e-folder-list.c (e_folder_list_construct): Use
- bonobo_object_ref() instead of bonobo_object_client_ref() as the
- former only refs the CORBA object [Sigh].
-
- * e-shell-config-autocompletion.c
- (e_shell_config_autocompletion_create_widget): Don't unref the
- shell_client here, as we need it. :-)
-
-2002-05-30 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view-menu.c (command_about_box): Connect
- about_box_event_callback() to the "key_press_event" signal as
- well. This way the about box is closed when you press a key too.
- [#25349]
-
-2002-05-28 Chris Toshok <toshok@ximian.com>
-
- * e-folder-list.c (e_folder_list_set_items): skip folders that
- aren't valid uri's.
- (e_folder_list_get_items): didn't update this to track the change
- in model columns. bad toshok.
-
-2002-05-24 Chris Toshok <toshok@ximian.com>
-
- [ fixes 90% of #25047 ]
- * e-folder-list.c (get_folder_for_uri): shamelessly lifted from
- evolution-folder-selector-button.c.
- (create_display_string): modeled again after
- evolution-folder-selector-button.c, so we can give a little more
- context (and make the table look like the folder selector
- buttons.)
- (SPEC): add a pixbuf column, also remove the sorting behavior.
- (columns): add a pixbuf column and another string column (for the
- display string).
- (add_clicked): create the display string and get the proper
- pixbuf, and insert both.
- (edit_clicked): removed.
- (update_buttons): remove edit button handling from here.
- (e_folder_list_init): remove the hooking up of button-edit's
- "clicked" signal.
- (e_folder_list_construct): get a reference to the storage registry
- so we can look up folders.
- (e_folder_list_set_items): analogous change to add_clicked - get
- the display string and pixbuf and insert them.
-
- * glade/e-folder-list.glade: remove the edit button.
-
- * glade/e-shell-config-default-folders.glade: remove the
- frame/vbox, since we embed it in a notebook and the tab has the
- title already.
-
- * e-shell-config.c (config_control_factory_cb): the only config
- control we deal with here now is the folder settings control.
-
- * e-shell-config-default-folders.c
- (e_shell_config_default_folders_create_widget): rename
- e_shell_config_default_folders_create_control to this, return the
- widget, and take the config control to use as an arg.
-
- * e-shell-config-offline.c (e_shell_config_offline_create_widget):
- make an analogous change here as with
- default_folders_create_widget.
-
- * e-shell-config-default-folders.h
- (e_shell_config_default_folders_create_widget): track change to
- prototype.
-
- * e-shell-config-offline.h (e_shell_config_offline_create_widget): same.
-
- * GNOME_Evolution_Shell.oaf.in: remove the DefaultFolders and
- OfflineFolders controls and add a FolderSettings_Control.
-
- * Makefile.am (evolution_SOURCES): add
- e-shell-config-folder-settings.[ch] and
- e-shell-config-autocompletion.[ch].
-
- * e-shell-config-folder-settings.[ch]: new files, embed (after a
- fashion) the default folder, offline, and autocompletion UI's in a
- notebook.
-
- * e-shell-config-autocompletion.[ch]: Basically copy over and
- shell-ize the addressbook autocompletion config control so it can
- be embedded more easily with the other folder settings.
-
-2002-05-23 Ettore Perazzoli <ettore@ximian.com>
-
- * main.c (quit_box_new): Set @allow_shrink and @allow_grow to
- FALSE for the window. Fixes #17534.
-
-2002-05-23 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-folder-selection-dialog.c
- (e_shell_folder_selection_dialog_construct): Pass FALSE for
- @allow_shrink. Fixes #15688.
-
-2002-05-23 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-folder-commands.c (delete_dialog): Make a little bit
- prettier. Default to "Delete", not "Cancel".
-
-2002-05-23 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shortcuts-view.c (rename_group_cb): Set the view type from the
- original group, thus preserving the small-icon/large-icon state.
- Fixes #6732.
-
-2002-05-23 Ettore Perazzoli <ettore@ximian.com>
-
- * main.c (show_development_warning): Add a toggle to avoid
- displaying the dialog again. Don't display the dialog at all if
- the /Shell/skip_warning_dialog_1_1 bonobo-conf key is set to
- FALSE.
- (warning_dialog_clicked_callback): Set
- /Shell/skip_warning_dialog_1_1 according to the state of the check
- button.
-
-2002-05-22 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell.c (impl_Shell_selectUserFolder): No more @default_type
- arg to e_shell_folder_selection_dialog_new().
-
- * e-shell-view-menu.c (command_goto_folder): No more @default_type
- arg to e_shell_folder_selection_dialog_new().
- (command_new_shortcut): Likewise.
-
- * e-shell-importer.c (import_druid_finish): No more @default_type
- arg to e_shell_folder_selection_dialog_new().
-
- * e-shell-folder-commands.c (e_shell_command_move_folder): No more
- @default_type arg to e_shell_folder_selection_dialog_new().
- (e_shell_command_copy_folder): Likewise.
-
- * e-shell-folder-selection-dialog.c: Removed default_type member
- in EShellFolderSelectionDialogPrivate.
- (e_shell_folder_selection_dialog_new): Removed @default_type arg.
- (e_shell_folder_selection_dialog_construct): Likewise.
- (impl_clicked): Just pass the first of the allowed types to
- e_shell_show_folder_creation_dialog() for the default type.
-
- * evolution-shell-client.c (user_select_folder): No more
- @default_type arg to the ::userSelectFolder CORBA method.
-
- * Evolution-Shell.idl (selectUserFolder): Remove arg
- @default_type.
-
-2002-05-22 Ettore Perazzoli <ettore@ximian.com>
-
- * main.c (view_map_callback): New callback for when the first
- created view in the shell gets mapped.
- (new_view_created_callback): New callback for when the first view
- of the shell gets created.
- (show_development_warning): New function to display a warning
- about the fact that Evolution is unstable.
- (idle_cb): Call show_development_warning() here unless the
- EVOLVE_ME_HARDER environment variable is set.
-
- * e-shell.c (class_init): Add the "new_view_created" signal here.
- (create_view): Emit the signal here.
-
- * e-shell.h: New signal "new_view_created".
-
-2002-05-22 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-user-creatable-items-handler.c: New member
- default_menu_item in EShellUserCreatableItemsHandlerPrivate.
- (ensure_menu_items): Set ->default_menu_item.
- (get_default_action_for_view): When no default item is specified,
- just return ->default_menu_item.
-
-2002-05-22 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell.c (e_shell_prepare_for_quit): Only refuse quitting if
- the result is CANCEL. This way we allow quitting if one of the
- components has crashed or something else otherwise goes wrong.
- Fixes #25093.
-
- * evolution-shell-component-client.c
- (result_from_async_corba_result): Handle
- GNOME_Evolution_ShellComponentListener_CANCEL.
-
-2002-05-21 Christopher James Lahey <clahey@ximian.com>
-
- * e-corba-storage.c (async_open_folder_idle): Do async_open_folder
- in an idle callback.
-
- * e-shell-shared-folder-picker-dialog.c (user_clicked),
- glade/e-shell-shared-folder-picker-dialog.glade: Added a select
- names button here.
-
-2002-05-20 Chris Toshok <toshok@ximian.com>
-
- * evolution-folder-selector-button.c (clicked): set the parent
- window insensitive before popping up the dialog and sensitive
- after it's popped down, to give us semi-modal behavior. Also,
- emit a "popped_up" signal when popping up the dialog, and emit
- "canceled" when the return folder is NULL (when the user canceled
- the dialog).
- (class_init): fix typo (?) - parent type isn't
- bonobo_object_get_type(), it's PARENT_TYPE. Also, initialize the
- POPPED_UP and CANCELED signals.
-
- * evolution-folder-selector-button.h (struct
- _EvolutionFolderSelectorButtonClass): add popped_up and canceled
- signals.
-
-2002-05-20 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-offline-sync.c (sync_folder): Skip the folder if it
- doesn't have the can_sync_offline property set.
-
-2002-05-20 Ettore Perazzoli <ettore@ximian.com>
-
- * e-corba-storage.c (impl_StorageListener_notifyFolderCreated):
- Set the can_sync_offline property on the EFolder based on the
- canSyncOffline value on the CORBA folder.
-
- * evolution-test-component.c (setup_custom_storage): Pass FALSE
- for @sync_offline to evolution_storage_new_folder().
-
- * e-local-storage.c (new_folder): Pass FALSE for @sync_offline to
- evolution_storage_new_folder().
-
- * evolution-storage.h (evolution_storage_new_folder): New arg
- @can_sync_offline.
-
-2002-05-20 Ettore Perazzoli <ettore@ximian.com>
-
- * Evolution-Offline.idl (syncFolder): Remove exception.
- (cancelSyncFolder): Remove exception.
-
- * e-shell-config-offline.c (storage_set_view_has_checkbox_func):
- New.
- (e_shell_config_offline_create_control): Pass it as the
- @has_checkbox_func.
-
- * e-folder.c: New member can_sync_offline in EFolderPrivate.
- (init): Init to FALSE.
- (e_folder_get_can_sync_offline): New.
- (e_folder_to_corba): Set canSyncOffline in the returned CORBA
- folder.
- (e_folder_set_physical_uri): Protect from when @physical_uri and
- ->physical_uri are the same thing.
- (e_folder_set_description): Same here with description.
- (e_folder_set_type_string): And type.
-
- * Evolution-common.idl: New member canSyncOffline in struct
- Folder.
-
-2002-05-20 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-config-offline.c
- (e_shell_config_offline_create_control): Pass NULL for
- @has_checkbox_func and @has_checkbox_func_data.
-
- * evolution-storage-set-view.c
- (impl_StorageSetView__set_showCheckboxes): Pass NULL for
- @has_checkbox_func and @has_checkbox_func_data.
-
- * e-storage-set-view.c: New member has_checkbox_func and
- has_checkbox_func_data in EStorageSetViewPrivate.
- (init): Init to NULL.
- (e_storage_set_view_set_show_checkboxes): New args
- @has_checkbox_func and @func_data.
- (has_checkbox): Always return FALSE for the toplevels. For the
- other ones return TRUE unless ->has_checkbox_func is not-NULL; in
- which case, we use that function to determine whether the folder
- is actually checkable.
-
- * Evolution-ShellComponent.idl (requestQuit): Remove exception.
-
-2002-05-16 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell.c (view_delete_event_cb): Ask e_shell_prepare_for_quit()
- before destroying the view if it's the last one.
-
- * e-shell-view-menu.c (command_close): Synthesize a delete_event
- on the view instead of directly destroying it.
-
-2002-05-15 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view-menu.c (command_quit): Check with
- e_shell_prepare_for_quit() before quitting.
-
- * e-shell.c (e_shell_prepare_for_quit): New.
-
- * evolution-test-component.c (request_quit_fn): New function
- asking for confirmation to quit.
-
- * evolution-shell-component.c (evolution_shell_component_new): New
- arg @request_quit_fn.
- (impl_requestQuit): New, implementation for
- EvolutionShellComponent::requestQuit.
- (evolution_shell_component_result_to_string): Handle
- EVOLUTION_SHELL_COMPONENT_CANCEL.
- (evolution_shell_component_client_request_quit): New.
-
- * Evolution-ShellComponent.idl (requestQuit): New.
-
-2002-05-15 Iain <iain@ximian.com>
-
- * e-corba-storage-registry.c (impl_StorageRegistry_addStorage): Remove
- debuggin spew
-
-2002-05-15 Iain <iain@ximian.com>
-
- * e-corba-storage-registry.c (impl_StorageRegistry_addStorage): Apply
- patch from Peter Williams to notify listeners when a new storage is
- created.
-
-2002-05-14 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-offline-handler.c
- (e_shell_offline_handler_put_components_offline): Call
- e_shell_offline_sync_all_folders() if no connection is reported
- here.
- (dialog_handle_ok): Sync all the folders here through
- e_shell_offline_sync_all_folders().
-
- * e-shell-offline-sync.c: New.
- * e-shell-offline-sync.h: New.
-
- * Evolution-Offline.idl (syncFolder): Make oneway.
- (cancelSyncFolder): Likewise.
- (SyncFolderProgressListener::reportSuccess): New method.
-
-2002-05-14 Christopher James Lahey <clahey@ximian.com>
-
- * Makefile.am: Added check-empty.xpm, check-filled.xpm, and
- check-missing.xpm.
-
- * check-empty.xpm, check-filled.xpm, check-missing.xpm: New xpms.
- Copied from gal. check-missing.xpm is simply a transparent xpm of
- the correct size.
-
- * e-storage-set-view.c (etree_value_at): When getting, check if
- the path doesn't have a check box and return 2 in that case.
- (etree_set_value_at): Check if the path doesn't have a check box
- and don't change it in that case. Also, just invert the value
- here instead of paying attention to the set value passed in.
- (class_init): Initialize the checks GdkPixbufs.
- (e_storage_set_view_construct): Create the "optional_checkbox"
- cell.
-
- * e-storage-set-view.etspec: Changed the cell for the checkbox
- column to "optional_checkbox".
-
-2002-05-14 Christopher James Lahey <clahey@ximian.com>
-
- * evolution-storage.c (evolution_storage_new_folder): Compute the
- evolutionUri here and pass it in.
-
-2002-05-14 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-config-offline.c
- (init_storage_set_view_status_from_config): Add a missing
- CORBA_free in the case in which the typecode of the
- /OfflineFolders/Paths key in the ConfigDatabase doesn't match the
- expected type.
-
-2002-05-14 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell.c (e_shell_go_offline): Pass self to
- e_shell_offline_handler_new() instead of the component registry.
-
- * e-shell-offline-handler.c: Replace member `component_registry'
- in EShellOfflineHandlerPrivate with a `shell' member. Updated all
- the code to retrieve the component registry from the shell instead
- of directly.
- (e_shell_offline_handler_construct): Get a @shell instead of a
- @component_registry.
-
-2002-05-13 Christopher James Lahey <clahey@ximian.com>
-
- * e-storage-set-view.c (e_storage_set_view_get_checkboxes_list):
- Changed this to just walk the hash table to get the list of
- checked checkboxes instead of walking the tree. (Makes it so that
- checked paths will remain checked, even if they're not shown in
- the tree when the list is gotten.)
-
-2002-05-13 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-config.c: Handle the e-shell-config-offline and
- e-shell-config-default-folders pages.
-
- * e-shell-config-offline.h: New.
- * e-shell-config-offline.c: New.
-
- * e-shell-config-default-folders.h: New.
- * e-shell-config-default-folders.c: New. Moved default folder
- page configuration in from e-shell-config.c.
-
- * GNOME_Evolution_Shell.oaf.in: Add
- GNOME_Evolution_Shell_Config_OfflineFolders_Control.
-
-2002-05-13 Christopher James Lahey <clahey@ximian.com>
-
- * e-storage-set-view.c (etree_set_value_at): Added a signal when
- the value of the checkboxes changes.
-
-2002-05-10 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-shared-folder-picker-dialog.c: Add members `parent' and
- `shell' in DiscoveryData.
- (shell_view_destroy_callback): Callback for destruction of
- ->parent; set ->parent to NULL.
- (shell_destroy_callback): Callback for the desctruction of the
- shell; clean up everything.
- (discover_folder): Initialize ->parent and shell, and add the
- corresponding destruction handlers.
- (shared_folder_discovery_listener_callback): Open the discovered
- folder.
- (setup_progress_dialog): Renamed from `show_progress_dialog'. Set
- up a timeout for displaying the dialog instead of displaying it
- right away.
- (progress_dialog_show_timeout_callback): Callback for showing the
- dialog after the callback.
-
-2002-05-10 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-shared-folder-picker-dialog.c
- (shared_folder_discovery_listener_callback): Updated for
- FolderResult instead of DiscoverSharedFolderResult.
-
- * Evolution-Storage.idl: Remove struct DiscoverSharedFolderResult;
- we want to just use FolderResult for asyncDiscoverSharedFolder.
-
-2002-05-10 Ettore Perazzoli <ettore@ximian.com>
-
- * evolution-test-component.c: Added some tests for the custom
- storage.
-
- * evolution-storage.c: New signal DISCOVER_SHARED_FOLDER.
- (impl_Storage_asyncXferFolder): Renamed from
- impl_Storage_async_xfer_folder.
- (impl_Storage_asyncRemoveFolder): Renamed from
- impl_Storage_async_remove_folder.
- (impl_Storage_asyncCreateFolder): Renamed from
- impl_Storage_async_create_folder.
- (impl_Storage_asyncOpenFolder): Renamed from
- impl_storage_async_open_folder.
- (impl_Storage_addListener): Renamed from
- impl_Storage_add_listener.
- (impl_Storage_removeListener): Renamed from
- impl_Storage_remove_listener.
- (impl_Storage_asyncDiscoverSharedFolder): New, implementation for
- ::asyncDiscoverSharedFolder.
- (evolution_storage_get_epv): Install the CORBA method here.
- (class_init): Set up the "discover_shared_folder" signal here.
- (e_marshal_NONE__POINTER_POINTER): Yet Another Marshaller. Die
- die die.
-
- * Evolution-Storage.idl (Storage::asyncDiscoverSharedFolder): New
- method.
- (StorageListener::notifySharedFolderDiscovered): New method.
-
- * e-shell-shared-folder-picker-dialog.c: New.
- * e-shell-shared-folder-picker-dialog.h: New.
-
- * e-shell-view-menu.c (command_open_other_users_folder): New,
- implementation for the FileOpenOtherUsersFolder verb.
-
- * Makefile.am: Generate stubs and skels for
- Evolution::Addressbook::SelectNames as well.
-
- * glade/e-shell-shared-folder-picker-dialog.glade: New.
-
-2002-05-09 Ettore Perazzoli <ettore@ximian.com>
-
- * e-local-storage.c (construct): Pass %FALSE as
- @has_shared_folders to evolution_storage_new().
-
- * evolution-storage.c: New member has_shared_folders in
- EvolutionStoragePrivate.
- (init): Initialize to FALSE.
- (evolution_storage_new): New arg @has_shared_folders.
- (evolution_storage_construct): Likewise.
- (impl_Storage__get_folderList): Renamed from
- impl_Storage__get_folder_list.
- (impl_Storage__get_hasSharedFolders): New, implementation for
- ::hasSharedFolders.
- (evolution_storage_get_epv): Install the CORBA method
- implementation.
-
- * Evolution-Storage.idl: Make Storage::name a readonly attribute. New attribute Storage::
-
-2002-05-09 Ettore Perazzoli <ettore@ximian.com>
-
- * Evolution-Offline.idl: Rename NotPrepared to notPrepared and
- NotSyncing to notSyncing.
-
- * evolution-storage.c (impl_Storage__get_folder_list): Renamed
- from impl_Storage_get_folder_list().
-
- * Evolution-Storage.idl: Don't typedef FolderList here. Replace
- `getFolderList' method with a readonly attribute.
-
-2002-05-07 Ettore Perazzoli <ettore@ximian.com>
-
- * Evolution-Offline.idl: New interface SyncFolderProgressListener.
- (Offline::cancelSyncFolder): New.
- (Offline::syncFolder): New.
-
-2002-05-07 JP Rosevear <jpr@ximian.com>
-
- * evolution-storage.c (get_folder_list_foreach): add every folder
- to the sequence except the root folder
- (impl_Storage_get_folder_list): implement corba method
- (evolution_storage_get_epv): set new method implementation
-
- * evolution-folder-selector-button.h: fix signal prototype
-
- * e-folder-tree.h: new proto
-
- * e-folder-tree.c (e_folder_tree_get_count): count nodes
- (count_nodes): bump count foreach path
-
- * e-corba-storage-registry.c
- (impl_StorageRegistry_getStorageList): implement idl method
- (corba_class_init): set epv method
-
- * Evolution-Storage.idl: add getStorageList and getFolderList
- methods
-
-2002-05-07 Ettore Perazzoli <ettore@ximian.com>
-
- * evolution-test-component.c (create_new_folder_selector): Use the
- new evolution_shell_client_create_storage_set_view() call.
-
- * evolution-shell-client.c
- (evolution_shell_client_create_storage_set_view): New.
-
-2002-05-07 Ettore Perazzoli <ettore@ximian.com>
-
- * evolution-storage-set-view-factory.c
- (evolution_storage_set_view_factory_new_view): Put the
- EStorageSetView in an EScrollFrame.
-
- * e-shell.c (impl_Shell_createStorageSetView):
- CORBA_Object_duplicate the object before returning.
-
- * evolution-test-component.c
- (create_new_folder_selector): New function to create a simple test
- environment for the new checkbox-enabled StorageSetView.
- (register_component): Add user-creatable type FolderSelector.
- (user_create_new_item_callback): Handle FolderSelector.
- (dialog_clicked_callback): Print out the checked items in the
- folder selector.
- (main): Print out a message before going into bonobo_main().
-
- * evolution-storage-set-view.c
- (impl_StorageSetView__get_showFolders): Renamed from
- impl_StorageSetView__get_show_folders.
- (impl_StorageSetView__set_showFolders): Renamed from
- impl_StorageSetView__set_show_folders.
- (impl_StorageSetView__set_showCheckboxes): New, write the
- showCheckboxes CORBA attribute.
- (impl_StorageSetView__get_showCheckboxes): New, read the
- showCheckboxes CORBA attribute.
- (impl_StorageSetView__get_checkedFolders): New, read the
- checkedFolders CORBA attribute.
- (corba_class_init): Install the new CORBA methods methods.
-
- * e-storage-set-view.c (essv_add_to_list): strdup() the path.
- (e_storage_set_view_get_storage_set): New.
-
- * e-folder.c (e_folder_to_corba): New.
-
- * Evolution-StorageSetView.idl: Add showCheckboxes and
- checkedFolders attributes.
-
- * Evolution-common.idl: Add typedef for FolderList.
-
-2002-05-03 Christopher James Lahey <clahey@ximian.com>
-
- * e-folder-list.c: Use bonobo_object_client_(un)?ref instead of
- gtk_object_(un)?ref.
- (add_clicked): Don't pass NULL to
- evolution_shell_client_user_select_folder.
-
- * glade/Makefile.am: Added e-folder-list.glade
-
- * glade/e-folder-list.glade: The glade file for e-folder-list.
-
-2002-05-03 Christopher James Lahey <clahey@ximian.com>
-
- * Makefile.am (eshellinclude_HEADERS): Added e-folder-list.h.
- (libeshell_la_SOURCES): Added e-folder-list.c.
-
- * e-folder-list.c, e-folder-list.h: New widget for editing a list
- of folder uris.
-
-2002-04-29 Christopher James Lahey <clahey@ximian.com>
-
- * e-storage-set-view.c (e_storage_set_view_set_checkboxes_list,
- e_storage_set_view_get_checkboxes_list): Added these functions.
- Implemented checkboxes in the ETreeModel here.
-
-2002-04-19 Anna Marie Dirks <anna@ximian.com>
-
- * glade/e-shell-config-default-folders.glade: Minor label tweaks;
- changed "Default folders" to "Default Folders", and added
- accelerators.
-
-2002-04-18 JP Rosevear <jpr@ximian.com>
-
- * evolution-shell-view.c (impl_ShellView_show_settings): emit
- show_settings signal
- (corba_class_init): assign epv method
- (class_init): add signal
-
- * evolution-shell-view.h: new signal
-
- * e-shell.c (init): init settings_dialog private member
- (settings_dialog_destroy_cb): reset dialog pointer
- (e_shell_show_settings): show the settings dialog, bring it to the
- front if one already exists for this shell
-
- * e-shell.h: new proto
-
- * e-shell-view.c (corba_interface_show_settings): implement
- showSettings method
- (setup_corba_interface): listen for show_settings signal
- (e_shell_view_show_settings): show the settings dialog
-
- * e-shell-view.h: new proto
-
- * e-shell-view-menu.c (command_settings): call
- e_shell_view_show_settings instead
-
- * Evolution-ShellView.idl: add showSettings method
-
-2002-04-17 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shortcuts-view.c (impl_shortcut_drag_motion): New, override
- for EShortcutBar::shortcut_drag_motion.
- (impl_shortcut_drag_data_received): New, override for
- EShortcutBar::shortcut_drag_data_received.
- (class_init): Install the method overrides.
-
-2002-04-17 Christopher James Lahey <clahey@ximian.com>
-
- * e-activity-handler.c: Updated this to match the new EPopupMenu.
-
-2002-04-17 Ettore Perazzoli <ettore@ximian.com>
-
- * e-storage-set-view.c (handle_evolution_path_drag_motion):
- Removed.
- (impl_tree_drag_motion): Rewritten to use
- `e_folder_dnd_bridge_motion()'.
- (impl_tree_drag_data_received): Rewritten to use
- `e_folder_dnd_bridge_data_received()'.
- (convert_gdk_drag_action_to_corba): Removed.
- (convert_corba_drag_action_to_gdk): Removed.
- (find_matching_target_for_drag_context): Removed.
-
- * e-folder-dnd-bridge.c: New.
- * e-folder-dnd-bridge.h: New.
-
-2002-04-10 Dan Winship <danw@ximian.com>
-
- * e-shell-config.c: Shell config page routines. Right now
- handles the default folders page.
-
- * glade/e-shell-config-default-folders.glade: New.
-
- * GNOME_Evolution_Shell.oaf.in: Add info for the default folders
- config page.
-
- * main.c (idle_cb): If we successfully registered the shell,
- register the config factory.
-
- * evolution-shell-client.c (evolution_shell_client_new): Note the
- fact that it frees the corba_shell when it is destroyed.
-
- * evolution-folder-selector-button.c
- (evolution_folder_selector_button_construct, destroy): Use
- bonobo_object_ref/unref on the shell client, not gtk.
-
- * e-shell.c (e_shell_construct): Pass local_directory to
- e_setup_check_db.
- (handle_default_uri): Fix the config db paths here to match the
- other routines.
-
- * e-setup.c (e_setup_check_db): Make this take the evolution
- directory path as well so we can properly set up file: URIs for
- the default folders.
-
-2002-04-09 Ettore Perazzoli <ettore@ximian.com>
-
- * main.c (idle_cb): Change the logic for displaying a default
- window, so we don't end up with two windows all the time.
-
-2002-04-09 Ettore Perazzoli <ettore@ximian.com>
-
- [Patch from Max Horn <max@quendi.de>.]
-
- * e-local-storage.c: Move <dirent.h> down the #include list so it
- compiles on Darwin.
-
-2002-04-09 Dan Winship <danw@ximian.com>
-
- * e-setup.c (e_setup_check_db): New. Check that things that need
- to be in the config db are. Right now it sets up the default
- folders.
-
- * e-shell.c (e_shell_construct): Call e_setup_check_db after
- getting the config db.
- (impl_Shell_handleURI): Handle "default:" URIs by looking up the
- default folders in the config db.
-
- * main.c (idle_cb): Check for "default:" URIs and treat them the
- same way as "evolution:" URIs. If the shell fails to display all
- of the requested URIs, fall back to the default URI (Summary).
-
- * e-shell-constants.h: Add E_SUMMARY_URI, E_LOCAL_INBOX_URI, etc.
-
- * e-shortcuts.c (e_shortcuts_add_default_group): Use
- E_LOCAL_INBOX_URI, etc.
-
- * e-shell-view.c: #define FALLBACK_URI to E_SUMMARY_URI
-
-2002-04-09 Dan Winship <danw@ximian.com>
-
- * Evolution-ShellComponent.idl (createView): Add a "view_info"
- argument.
-
- * e-shell-view.c (get_view_for_uri): if the URI contains a '#',
- split it into a URI and a "view_info" at that point. (Otherwise,
- pass "" for the view_info to ShellComponent_createView.) This can
- be used for things like specifying day/month/week view to the
- calendar.
-
- * e-shell.c (create_view): Ignore e_shell_view_display_uri's
- return code: it's possible/likely that the requested URL is remote
- and hasn't been filled in yet.
- (impl_Shell_handleURI): Don't use Shell_createNewView directly,
- call e_shell_create_view_from_uri_and_settings. (For the above fix
- and some others.)
-
- * evolution-shell-component.c (impl_createView): Add view_info.
-
- * evolution-shell-component-client.c
- (evolution_shell_component_client_create_view): Add view_info.
-
- * evolution-test-component.c (create_view_fn): add view_data.
-
- * e-corba-storage-registry.c
- (impl_StorageRegistry_getFolderByUri): kill a warning
-
-2002-04-08 Dan Winship <danw@ximian.com>
-
- Fix "evolution evolution:/path/to/folder" to use default view
- prefs.
-
- * e-shell.c (impl_Shell_createNewView): Use
- e_shell_create_view_from_uri_and_settings to create the new view
- based on saved view 0 instead of always using the initial
- evolution defaults.
- (e_shell_create_view_from_uri_and_settings): Renamed and
- simplified; the template_view argument was useless and
- settings_found would always be set to TRUE in the context it was
- being used it.
- (e_shell_restore_from_settings): Simplify for
- e_shell_create_view_from_uri_and_settings changes.
-
- * e-shell-view.c (e_shell_view_load_settings): Only load the
- DisplayedURI if the view isn't already displaying a URI. Also,
- pass an &ev to the first bonobo_config_get_long so we can tell if
- it failed and bail out.
-
- * e-shell-view.h: Remove a prototype for a non-existent function
- (e_shell_view_remove_control_for_uri).
-
- * main.c (idle_cb): Add some comments here and remove some dead
- code.
-
-2002-04-06 JP Rosevear <jpr@ximian.com>
-
- * e-shell-settings-dialog.c (page_new): set type
- (load_pages): get the oaf property for type and track the page
- number of the highest priority for each type
- (destroy_type_entry): destroy hash func
- (impl_destroy): destroy the hash table
- (init): create private struct and hash table
- (e_shell_settings_dialog_show_type): show the page of the given
- type
-
- * e-shell-view-menu.c (command_settings): show the page for the
- current folder type by default
-
- * e-shell-settings-dialog.h: new proto
-
-2002-04-06 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-settings-dialog.c (init): Set the title of the dialog.
-
-2002-04-04 Dan Winship <danw@ximian.com>
-
- * evolution-shell-client.c
- (evolution_shell_client_get_pixbuf_for_type): Fix a memory mixup.
-
-2002-04-04 Dan Winship <danw@ximian.com>
-
- * evolution-folder-selector-button.c: New widget for a button that
- displays a folder selection in a standard form, and when clicked
- lets the user select a new folder.
-
- * Evolution-Shell.idl (FolderSelectionListener:notifySelected):
- Make this take an Evolution:Folder instead of a pair of uris.
- (Shell:getIconByType): New method to get the icon for a type from
- the folder type registry.
-
- * Evolution-common.idl (Folder): add "evolutionUri" to the folder
- structure.
-
- * Evolution-Storage.idl (StorageRegistry:getFolderByUri): get an
- Evolution:Folder for a given uri.
-
- * evolution-shell-client.c
- (evolution_shell_client_user_select_folder): Update this to
- reflect the IDL change: return a GNOME_Evolution_Folder instead of
- a pair of URIs. Make sure it always sets *@folder_return to %NULL
- if it fails (even if it's a g_return_if_fail).
- (evolution_shell_client_get_storage_registry_interface): New.
- (evolution_shell_client_get_pixbuf_for_type): New. Uses
- Shell_getIconByType, but caches results.
-
- * e-shell.c (folder_selection_dialog_folder_selected_cb): Update
- for API change. (Return a GNOME_Evolution_Folder.)
- (impl_Shell_getIconByType): Implement.
-
- * e-corba-storage-registry.c
- (impl_StorageRegistry_getFolderByUri): Implement.
-
- * evolution-storage.c (evolution_storage_new_folder): Add a
- (dummy) evolutionUri to the folder.
-
- * Makefile.am (libeshell_la_SOURCES): add
- evolution-folder-selector-button.c
- (eshellinclude_HEADERS): and .h
-
-2002-04-04 Ettore Perazzoli <ettore@ximian.com>
-
- * evolution-shell-component.c: Change type of parent_class to
- BonoboXObjectClass.
-
- * e-shell.c (pop_up_activation_error_dialog): New helper function
- to pop up a dialog if one of the components couldn't be activated,
- getting the description for the error from
- e_get_activation_failure_msg().
- (setup_components): Use this function in case of activation error.
- (set_owner_on_components): Likewise, when the component gets
- restarted. Also get a @splash arg so we can set the parent for
- this dialog correctly.
-
- * e-component-registry.c (register_component): New arg @ev.
- (e_component_registry_register_component): Likewise.
- (e_component_registry_restart_component): Likewise. Also, remove
- some bogus code that was #if'ed out.
-
- * evolution-shell-component-client.c
- (evolution_shell_component_client_new): New arg @ev.
-
- * evolution-shell-component-utils.c
- (e_get_activation_failure_msg): New.
-
-2002-04-03 Dan Winship <danw@ximian.com>
-
- * e-storage.c (get_path_for_physical_uri_foreach): Deal with
- folders with no physical_uri.
-
-2002-04-02 Christopher James Lahey <clahey@ximian.com>
-
- * e-storage-set-view.c (e_storage_set_view_set_show_checkboxes):
- Set the show_checkboxes field here instead of the show_folders
- field.
-
-2002-04-02 Christopher James Lahey <clahey@ximian.com>
-
- * e-storage-set-view.c (etree_value_at): If folder is NULL, return
- the correct type of data.
-
-2002-04-02 Christopher James Lahey <clahey@ximian.com>
-
- * Makefile.am (etspec_DATA): Added
- e-storage-set-view-checkboxes.etstate and
- e-storage-set-view-no-checkboxes.etstate here.
-
- * e-storage-set-view-checkboxes.etstate,
- e-storage-set-view-no-checkboxes.etstate: The two possible states
- of the EStorageSetView.
-
- * e-storage-set-view.c, e-storage-set-view.h
- (e_storage_set_view_set_show_checkboxes,
- e_storage_set_view_get_show_checkboxes): Added this functionality.
- Added a model column to the underlying table for the checkbox
- data.
-
- * e-storage-set-view.etspec: Added a view column for the
- checkboxes.
-
-2002-03-29 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-settings-dialog.c: Add type "Page".
- (page_new): New helper function.
- (page_free): New helper function.
- (compare_page_func): Callback for sorting a GList of pages.
- (sort_page_list): New helper function.
- (load_pages): Create the pages, sort them, add them sorted. Now
- we have a priority field that overrides alphabetical sorting.
-
-2002-03-26 Ettore Perazzoli <ettore@ximian.com>
-
- * e-component-info.c: New.
- * e-component-info.h: New.
-
-2002-03-26 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-settings-dialog.c (load_pages): g_warning if the control
- cannot be activated.
-
-2002-03-25 Dan Winship <danw@ximian.com>
-
- * e-shell.c (e_shell_construct): Register a "working" folder type
- with the hourglass icon. (Would eventually like an animated gif,
- when ETable supports that.)
-
- * e-storage.c (e_storage_has_subfolders): Use "working" rather
- than "noselect" as the folder type.
-
- * e-shell-view.c (get_view_for_uri): Simplify a bit.
-
-2002-03-22 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-settings-dialog.c (get_language_list): Removed.
- (load_pages): Use e_get_language_list() here instead. Also, free
- using e_free_language_list().
-
-2002-03-22 Dan Winship <danw@ximian.com>
-
- * evolution-storage.c (evolution_storage_update_folder): Fix a
- "how can this ever have worked" bug to make unread message counts
- start working again. (#22293 etc)
- (evolution_storage_removed_folder): Oops. Fix here too.
- (evolution_storage_has_subfolders): And here. When cut and paste
- goes bad...
-
- * e-shell-folder-commands.c (e_shell_command_rename_folder): Use
- e_folder_get_name. Don't assume it's the same as the last path
- element.
-
-2002-03-21 Dan Winship <danw@ximian.com>
-
- * e-splash.c (e_splash_construct): Set the wmclass to
- "evolution-splash" so sawfish knows it's not the same kind of
- window as the main window.
-
-2002-03-20 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view-menu.c: Make all the verb/menu arrays appropriately
- static.
-
-2002-03-20 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view-menu.c (command_send_receive): New, implementation
- for the "SendReceive" verb.
-
- * e-shell.c (e_shell_send_receive): New.
-
- * evolution-shell-component.c (impl_sendReceive): Implementation
- of ShellComponent::sendReceive.
- (class_init): Add the "send_receive" signal.
-
- * evolution-shell-component.h: Added `send_receive' signal.
-
- * Evolution-ShellComponent.idl: Added ShellComponent::sendReceive.
-
-2002-03-18 Ettore Perazzoli <ettore@ximian.com>
-
- * e-storage-set-view.etspec: Add `search="string"' for the
- keyboard navigability search thingy.
-
-2002-03-15 Jeffrey Stedfast <fejj@ximian.com>
-
- * e-activity-handler.c (show_cancellation_popup): Updated to use
- new EPopupMenu API.
-
-2002-03-14 Dan Winship <danw@ximian.com>
-
- Support for delayed filling-in of storages/folders.
-
- * Evolution-Storage.idl (StorageListener): add
- notifyHasSubfolders, to announce that a folder has currently-
- unknown subfolders.
- (Storage): add asyncOpenFolder, to request that previously-
- announced subfolders be filled in.
-
- * evolution-storage.c (impl_Storage_async_open_folder): emit
- OPEN_FOLDER.
- (evolution_storage_has_subfolders): Implement by calling
- notifyHasSubfolders on all of its listeners.
-
- * evolution-storage-listener.c
- (impl_GNOME_Evolution_StorageListener_notifyHasSubfolders): emit
- HAS_SUBFOLDERS.
-
- * e-corba-storage.c (impl_StorageListener_notifyHasSubfolders):
- Implement by calling e_storage_has_subfolders.
- (async_open_folder): Implement by calling asyncOpenFolder on the
- CORBA storage.
-
- * e-storage.c (EStoragePrivate, init, destroy): Keep a list of
- pseudofolders representing un-filled-in subtrees.
- (impl_async_open_folder): No-op default implementation
- (e_storage_async_open_folder): New function to request that
- un-filled-in subtrees be filled in.
- (e_storage_new_folder): If the new folder's parent has an
- "un-filled-in children" pseudofolder, remove it.
- (e_storage_has_subfolders): New function to note that a folder has
- unknown children. If the folder previously was marked as having
- real children, remove them, and emit CLOSE_FOLDER to reset it back
- to an a "unknown subfolders" state.
-
- * e-storage-set.c (make_full_path): Make this deal with path being
- "/", since that case gets used from storage_close_folder_cb
- sometimes.
- (storage_close_folder_cb): Proxy EStorage's CLOSE_FOLDER signal.
- (storage_set_view_folder_opened): Handle EStorageSetView's
- FOLDER_OPENED signal by calling e_storage_async_open_folder.
-
- * e-storage-set-view.c (etree_fill_in_children): If the given node
- is its parent's first child, emit FOLDER_OPENED for the parent.
- (close_folder_cb): Handler for EStorageSet's CLOSE_FOLDER signal.
- Ask the model to close that node.
- (e_storage_set_view_construct): Set the default expanded state for
- the tree to FALSE rather than TRUE, to prevent unwanted expansion
- of delayed nodes. (This only affects the very first time the tree
- is displayed anyway: after that its state is loaded off disk.)
-
- * e-shell.c (e_shell_construct): Register the "noselect" type with
- the folder type registry, so icon lookups on placeholder folders
- will work.
-
-2002-03-13 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-settings-dialog.c (load_pages): Use
- `evolution:config_item:icon_name' instead of
- `evolution:config_item:icon_path'. If it's not an absolute path,
- load from the IMAGESDIR. Also, no need to specify the language
- list for this one, as the icon name shouldn't be translated.
-
-2002-03-12 Ettore Perazzoli <ettore@ximian.com>
-
- * evolution-test-component.c (create_configuration_page): Update
- to create an EvolutionConfigControl instead of just a
- BonoboControl.
-
- * e-corba-config-page.c (e_corba_config_page_construct): Get a
- GNOME_Evolution_ConfigControl instead of a CORBA_Object. Retrieve
- the control from it using ::_get_control instead of just assuming
- it's a control. Also return a boolen indicating success or
- failure.
- (e_corba_config_page_new): Likewise, get a
- GNOME_Evolution_ConfigControl.
- (setup_listener): Renamed from `setup_config_control_interface'.
- Get a ::ConfigControl instead of a CORBA::Object. Thus, no need
- to queryInterface here anymore.
-
- * evolution-config-control.c, evolution-config-control.h: New,
- implementation for the Evolution::ConfigControl interface.
-
- * Evolution-ConfigControl.idl: New attribute `control'.
-
-2002-03-09 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-folder-commands.c (e_shell_command_rename_folder): Make
- old_name_locale non-const to placate a compiler warning.
- (get_corba_null_value): Likewise.
-
- * e-activity-handler.c (report_task_event): `#if 0' out.
-
-2002-03-09 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-settings-dialog.c (load_pages): Use ECorbaConfigPages.
-
- * e-corba-config-page.c: New.
- * e-corba-config-page.h: New.
-
- * Evolution.idl: #include <Evolution-ConfigControl.idl>.
-
- * Evolution-ConfigControl.idl: New IDL for configuration Controls
- that will be displayed in the global config dialog.
-
-2002-03-08 Dan Winship <danw@ximian.com>
-
- * e-storage-set-view.[ch]: Note that e_storage_set_view_new
- shouldn't be used directly.
-
- * e-shell-view.c (setup_storage_set_subwindow): Use
- e_storage_set_new_view instead of e_storage_set_view_new.
-
- * evolution-storage-set-view-factory.c
- (evolution_storage_set_view_factory_new_view): Likewise.
-
-2002-03-07 Ettore Perazzoli <ettore@ximian.com>
-
- * evolution-test-component.c (create_configuration_page): New
- function to create a test configuration page for the test
- component.
- (configuration_control_factory_fn): Factory function for the
- configuration controls.
- (register_configuration_control_factory): New function to register
- the factory.
- (main): Call it.
-
- * e-shell-view-menu.c: Add verb "Settings".
- (command_settings): Implementation for the "Settings" verb.
-
- * GNOME_Evolution_TestComponent.oaf: Add a configuration control.
-
- * e-shell-settings-dialog.c: New.
- * e-shell-settings-dialog.h: New.
-
-2002-03-07 Dan Winship <danw@ximian.com>
-
- Addendum to previous commit: Remove "storage_selected" vs
- "folder_selected" distinction.
-
- * evolution-storage-set-view.c
- (storage_set_view_widget_storage_selected_cb): Removed.
-
- * evolution-storage-set-view-listener.c
- (impl_GNOME_Evolution_StorageSetViewListener_notifyStorageSelected):
- Removed.
- (class_init): Remove STORAGE_SELECTED signal.
-
- * e-storage-set-view.c (impl_cursor_activated): Always emit
- FOLDER_SELECTED, never STORAGE_SELECTED.
- (class_init): Remove STORAGE_SELECTED signal.
-
- * e-shell-view.c (storage_selected_cb): Removed.
-
- * e-shell-folder-creation-dialog.c
- (storage_set_view_storage_selected_cb): Removed.
-
- * Evolution-StorageSetView.idl (StorageSetViewListener): Remove
- notifyStorageSelected.
-
-2002-03-07 Dan Winship <danw@ximian.com>
-
- Make storages-with-toplevel-views less of a hack.
-
- * e-folder-tree.c (e_folder_tree_add): Allow the caller to "add" a
- root folder, if the existing root folder has no children.
- (e_folder_tree_new): Use e_folder_tree_add to create the root
- folder, since it can do that now.
-
- * e-storage.c: (e_storage_construct): Replace toplevel_node_uri
- and toplevel_node_type args with root_folder.
- (e_storage_new): Likewise.
- (*): Remove toplevel uri/type stuff everywhere. Also remove
- display_name since now we will use the name of the root folder for
- that.
-
- * evolution-storage.c: Remove toplevel uri/type stuff everywhere.
-
- * e-local-storage.c (construct): Pass root_folder to
- e_storage_construct instead of toplevel uri/type.
- Also, evolution_storage_new no longer takes toplevel uri/type.
-
- * e-corba-storage.c (e_corba_storage_construct): Out with toplevel
- uri/type, in with root_folder.
- (e_corba_storage_new): Remove toplevel uri/type.
-
- * e-shell.c (setup_local_storage): Create a top-level folder of
- type "summary" for the Summary storage.
-
- * e-storage-set-view.c (set_e_shortcut_selection): Remove
- special-case for storages.
- (etree_icon_at): Remove special case for figuring out storage
- icons (but leave the code for storages without icons).
- (etree_value_at): Remove special case for storage names. (But
- still make storages always bold.) Remove unused special-case code
- for Summary.
-
- * e-shortcuts.c (load_shortcuts): Remove special case for
- storages, reorganize a bit.
-
- * e-shortcuts-view.c (get_shortcut_info): Remove special case for
- storages.
-
- * e-shell-view.c (update_for_current_uri): Remove special case for
- storages.
- (socket_destroy_cb): Likewise.
- (get_type_for_storage): No longer needed.
- (get_view_for_uri): No longer needs to special-case storages (but
- add a special case for folders of type "noselect", to make them
- unselectable like storages-without-toplevel-views used to be).
-
- * e-storage-set.c (get_storage_for_path): If passed "/foo", return
- "/" as subpath_return so e_storage_set_get_folder will DTRT in the
- NWO.
-
- * Evolution-Storage.idl (addStorage): Remove the toplevel_node_uri
- and toplevel_node_type arguments.
-
- * e-corba-storage-registry.c (impl_StorageRegistry_addStorage):
- Likewise.
-
-2002-03-06 Dan Winship <danw@ximian.com>
-
- * e-storage.c: Keep the storage name and display_name in
- EStoragePriv.
- (impl_get_name, impl_get_display_name): Return them.
- (e_storage_construct): Set them here.
- (e_storage_new): And here.
-
- * e-local-storage.c: (impl_get_name, impl_get_display_name):
- Removed.
- (construct): Pass E_LOCAL_STORAGE_NAME and U_("Local Folders") to
- e_storage_construct.
-
- * e-corba-storage.c: Remove priv->name.
- (get_name, get_display_name): Removed.
- (e_corba_storage_construct): Pass name to e_storage_construct().
-
- * e-summary-storage.[ch]: Gone. This didn't override anything in
- EStorage but get_name/get_display_name, and the defaults for those
- DTRT now.
-
- * e-shell-constants.h: Move E_SUMMARY_STORAGE_NAME here from
- e-summary-storage.h, and move E_LOCAL_STORAGE_NAME too for
- consistency.
-
- * e-storage-set-view.c: Fix up #includes.
-
- * e-shell-importer.c: Likewise
-
- * e-shell.c: Likewise. Create summary_storage as a plain EStorage
- since ESummaryStorage is gone now.
-
- * Makefile.am (evolution_SOURCES): Remove e-summary-storage.[ch]
-
-2002-03-06 Dan Winship <danw@ximian.com>
-
- * e-corba-storage-registry.c
- (impl_StorageRegistry_removeListener): Fix up GList/GSList
- confusion.
-
- * e-shell-user-creatable-items-handler.c
- (get_default_action_for_view): Don't look into the types list if
- it's empty.
-
-2002-03-06 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-about-box.c: Reduce width of the copyright message so it
- looks prettier with the new Rupert artwork.
-
-2002-03-04 Iain Holmes <iain@ximian.com>
-
- * Evolution-Storage.idl: Add some methods to the StorageRegistry
- interface to get a storage, and add or remove listeners. Also add a
- new exception and some structs and enums for messages.
-
- * e-corba_storage-registry.c: Add a GSList to the private stuct for
- recording the listeners.
- (listener_notify): Send a message to the listeners.
- (impl_StorageRegistry_getStorageByName): Implementation of the
- getStorageByName method. Returns the associated storage interface
- (storage_set_foreach): Loop through all the storages in the storageset
- and notify the listeners about them.
- (find_listener): Find a listener in the list of them.
- (impl_StorageRegistry_addListener): Add a new listener to the
- registry.
- (impl_StorageRegistry_removeListener): Remove a listener.
- (corba_class_init): Add the new methods to the EPV.
- (init): NULL the listeners list.
-
- * e-corba-storage.[ch] (e_corba_storage_get_corba_objref): Get the CORBA
- interface from the GtkObject.
-
-2002-03-04 Ettore Perazzoli <ettore@ximian.com>
-
- [Fix #20234, Deleting Folder gratuitiously causes /local to open.]
-
- * e-shell-view.c (find_inbox_in_storage): New helper function to
- heuristically find an Inbox folder.
- (handle_current_folder_removed): New function to handle the
- removal of the currently displayed folder in a slightly smarter
- way than before. It tries to display the parent folder of the
- folder that got deleted and, if not possible, the Inbox in the
- same storage. If neither of this is possible, it displays the
- default local Inbox. [It still doesn't handle the case where you
- have no Inbox gracefully, but that can come later.]
- (storage_set_removed_folder_callback): Call
- `handle_current_folder_removed'.
-
-2002-03-04 Ettore Perazzoli <ettore@ximian.com>
-
- [Fix #20237, Shell silently drops xfer_folder errors.]
-
- * e-shell-folder-commands.c (xfer_result_callback): Display an
- error message if the operation failed.
-
-2002-02-26 Ettore Perazzoli <ettore@ximian.com>
-
- [This gets rid of some spurious "could not find handler" messages
- on exit. What happened is that the signal would be disconnected
- twice, once by cleanup_delayed_selection() and once by the
- while_alive handler.]
-
- * e-shell-view.c (destroy): Call cleanup_delayed_selection() here.
- (e_shell_view_display_uri): Use gtk_signal_connect_full(), not
- e_gtk_signal_connect_full_while_alive().
-
-2002-02-23 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-about-box.c: Add year 2002 to the copyright.
-
-2002-02-23 Ettore Perazzoli <ettore@ximian.com>
-
- * e-storage-set-view.c (impl_destroy): Renamed from `destroy'.
- (impl_right_click): Renamed from `right_click'.
- (impl_cursor_activated): Renamed from `cursor_activated'.
- (impl_tree_start_drag): Renamed from `tree_start_drag'.
- (impl_tree_drag_begin): Renamed from `tree_drag_begin'.
- (impl_tree_drag_end): Renamed from `tree_drag_end'.
- (impl_tree_drag_data_get): Renamed from `tree_drag_data_get'.
- (impl_tree_drag_data_delete): Renamed from
- `tree_drag_data_delete'.
- (impl_tree_drag_motion): Renamed from `tree_drag_motion'.
- (impl_tree_drag_leave): Renamed from `tree_drag_leave'.
- (impl_tree_drag_drop): Renamed from `tree_drag_drop'.
- (impl_tree_drag_data_received): Renamed from
- `tree_drag_data_received'.
-
-2002-02-22 Ettore Perazzoli <ettore@ximian.com>
-
- [Fix #3029, Offline mode should be preserved across sessions.]
-
- * main.c (idle_cb): Use the e_shell_new() API below so that we use
- the saved offline settings at the next start-up if neither
- --offline nor --online has been specified.
-
- * e-shell.c (save_misc_settings): New function. For now, just
- save `/Shell/StartOffline' indicating whether the shell should
- start in offline mode or not.
- (e_shell_construct): Replace @start_online with
- @startup_line_mode.
- (e_shell_new): Likewise.
-
- * e-shell.h: New enum EShellStartupLineMode.
-
-2002-02-22 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view.c (remove_uri_from_history): New helper function to
- remove all the matching URIs from the history.
- (history_uri_matching_func): Compare function for using
- e_history_remove_matching.
- (storage_set_removed_folder_callback): Call
- `remove_uri_from_history()'.
-
- * e-history.c (e_history_remove_matching): New.
-
-2002-02-22 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view.c (update_navigation_buttons): New.
- (display_uri): Call it before returning so the navigation buttons
- always have the right sensitivity.
-
- * e-shell-folder-title-bar.c
- (e_shell_folder_title_bar_update_navigation_buttons): New.
- (add_navigation_buttons): Remove the "Back" label.
-
-2002-02-22 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view.c: New member `history' in `EShellViewPrivate'.
- (init): Initialize.
- (destroy): Unref.
- (e_shell_view_display_uri): Make it a no-op if the URI is the same
- as the current one. Also, moved code into `display_uri' and use
- it.
- (back_clicked_callback): New, callback for the back button on the
- folder title bar.
- (forward_clicked_callback): Likewise for the forward button.
-
- * e-history.c: New.
- * e-history.h: New.
-
-2002-02-22 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view.c (e_shell_view_show_folder_bar):
- `e_shell_folder_title_bar_set_title_clickable()', not
- `e_shell_folder_title_bar_set_clickable()'.
-
- * e-shell-folder-title-bar.c: Rename `button', `button_label' and
- `button_arrow' to `title_button', `title_button_label' and
- `title_button_arrow'. Renamed `label' to `title_label'. Renamed
- `arrow_xpm' to `down_arrow_xpm'. Added `left_arrow.xpm' and
- `right_arrow.xpm'.
- (class_init): Add the "back_clicked" and "forward_clicked"
- signals.
- (add_navigation_buttons): New function to add the navigation
- buttons to the title bar.
- (back_button_clicked_callback): Callback for the back button,
- emits "back_clicked".
- (forward_button_clicked_callback): Callback for the forward
- button, emits "forward_clicked".
- (e_shell_folder_title_bar_construct): Call
- `add_navigation_buttons()'.
- (forward_button_clicked_callback):
- (create_arrow_pixmap): Removed.
- (create_pixmap_widget_from_xpm): New.
- (title_button_box_realize_cb): Removed.
- (e_shell_folder_title_bar_construct): Don't connect. Just add the
- icon normally using the new `create_pixmap_widget_from_xpm()'.
- (e_shell_folder_title_bar_set_title_clickable): Renamed from
- `e_shell_folder_title_bar_set_clickable'.
- (size_allocate_navigation_buttons): New.
- (size_allocate_title_button): Get an @offset.
- (size_allocate_label): Get an @offset.
- (size_allocate): Allocate the navigation buttons and offset
- everything else accordingly.
-
- * e-shell-folder-title-bar.h: New signals "back_clicked",
- "forward_clicked".
-
-2002-02-21 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-user-creatable-items-handler.c
- (get_default_action_for_view): Return NULL if there is no
- component ID for the current view.
-
-2002-02-21 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-user-creatable-items-handler.c (ensure_menu_items): Set
- the icons for all the "New..." menu items from the specified one
- in the type definitions.
-
- * e-activity-handler.c (create_gdk_pixbuf_from_corba_icon):
- Removed.
- (impl_operationStarted): Just use
- `e_new_gdk_pixbuf_from_corba_icon()'.
-
- * e-shell-corba-icon-utils.c (e_new_gdk_pixbuf_from_corba_icon):
- New.
-
-2002-02-20 Ettore Perazzoli <ettore@ximian.com>
-
- [Fix #20311, new window from Shortcuts should not show the folder
- bar and the shortcut bar. Also do the same for right-click on the
- folder bar.]
-
- * e-shell-view-menu.c (command_open_folder_in_new_window): Don't
- show the folder bar and the shortcut bar in the new window.
-
- * e-shell-view.c (activate_shortcut_cb): Don't show the folder bar
- and the shortcut bar in the new window.
-
- * e-shell-view.c (e_shell_create_view): Don't flush the GTK events
- here.
-
-2002-02-20 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell.c (e_shell_construct): New arg @start_online. If true,
- invoke `e_shell_go_online()' before returning.
- (e_shell_new): New arg @start_online. Pass it to
- e_shell_construct().
- (init): Default ->line_status to E_SHELL_LINE_STATUS_OFFLINE.
-
- * main.c (main): Add "--offline" and "--online" options.
-
-2002-01-30 Not Zed <NotZed@Ximian.com>
-
- * e-storage-set-view.c (popup_folder_menu): Use
- right_click_row_path rather than selected_row_path, so clients get
- the uri that was actually clicked on.
-
-2002-01-27 Ettore Perazzoli <ettore@ximian.com>
-
- * Makefile.am: Use SHELL_CFLAGS and SHELL_LIBS.
- * importer/Makefile.am: Likewise.
-
-2002-01-24 Ettore Perazzoli <ettore@ximian.com>
-
- * Makefile.am: Just use BONOBO_HTML_GNOME_CFLAGS and
- BONOBO_HTML_GNOME_LIBS for compiling/linking; we don't need the
- other ones.
-
-2002-01-23 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-user-creatable-items-handler.c: New member `id' in
- struct `Component'. New member `icon' in struct `MenuItem'.
- (component_free): Free ->id.
- (component_new): Renamed from `component_new_from_client'. Get an
- @id arg and set ->id accordingly.
- (e_shell_user_creatable_items_handler_add_component): New arg @id.
- Pass it to `component_new'.
- (e_shell_user_creatable_items_handler_setup_menus): New arg
- @current_component_id.
- (e_shell_user_creatable_items_handler_update_menus): New.
- (set_current_component): New helper function.
- (get_component_by_id): New helper function.
- (add_verbs): Renamed from `add_verbs_to_ui_component()'. Get a
- @shell_view instead of a @ui_component. Set the SHELL_VIEW_KEY on
- the ui_component of the shell_view to point to the shell_view
- itself.
- (ensure_menu_items): Set item->icon to NULL.
- (free_menu_items): Unref item->icon.
- (ensure_menu_xml): Set the icon as well.
- (get_default_action_for_view): New helper function.
- (find_menu_item_for_verb): New helper function.
- (shell_view_view_changed_callback): New callback, set up the label
- on the "New" button depending on the current component.
- (e_shell_user_creatable_items_handler_attach_menus): New. For
- now, do not display the toolbar button yet.
- (execute_verb): New helper function, splitting out code from
- `verb_fn'.
- (verb_fn): Use `execute_verb'.
- (combo_button_activate_default_callback): Callback for the
- "activate_default" signal on the EComboButton.
- (setup_toolbar_button): Connect.
-
- * evolution-shell-component.c: New member `icon' in
- `UserCreatableItemType'.
- (impl__get_userCreatableItemTypes): Put the ->icon in the
- corba_type as well.
- (user_creatable_item_type_new): Get a new @icon argument.
- (evolution_shell_component_add_user_creatable_item): New arg
- @icon.
-
- * Evolution-ShellComponent.idl: New member `icon' in struct
- `UserCreatableItemType'.
-
- * evolution-test-component.c (register_component): Pass a NULL
- @icon to `evolution_shell_component_add_user_creatable_item()'.
-
- * e-shell-view.c (class_init): Add the signal to the class.
- (e_shell_view_display_uri): Emit "view_changed".
- (e_shell_view_get_current_component_id): New.
-
- * evolution-shell-component-client.c: New member `id' in
- EvolutionShellComponentClientPrivate.
- (init): Init to NULL.
- (impl_destroy): Free.
- (evolution_shell_component_client_new_for_objref): Removed.
- (evolution_shell_component_client_construct): New arg @id.
- Initialize ->id from it.
- (evolution_shell_component_client_get_id): New.
-
- * e-shell-view.h: New signal "view_changed".
-
- * evolution-activity-client.c (create_icon_from_pixbuf): Removed.
- (create_corba_animated_icon_from_pixbuf_array): Removed.
- (evolution_activity_client_construct): Use
- `e_new_corba_animated_icon_from_pixbuf_array()' instead.
-
- * e-shell-icon-utils.h: New.
- * e-shell-icon-utils.c: New.
-
-2002-01-23 Ettore Perazzoli <ettore@ximian.com>
-
- [Patch by Michael Meeks <michael@ximian.com>.]
-
- * e-splash.c (e_splash_set_icon_highlight): g_return if there is
- no num-th icon.
-
-2002-01-15 Iain Holmes <iain@ximian.com>
-
- * e-shell-importer.c (show_import_wizard): Set the importer druid
- as a transient window of the parent shell.
-
-2002-01-15 Ettore Perazzoli <ettore@ximian.com>
-
- [Fix #17441, Crash trying to import Multiple VCard file into LDAP
- folder.]
-
- * e-shell-importer.c (show_error): Add a NULL in the call to
- `gnome_message_box_new()'.
-
-2001-12-14 Michael Meeks <michael@ximian.com>
-
- * e-shell-view.c (set_current_notebook_page): re-order
- activate / de-activate to minimise flicker switching between
- identical components.
-
-2002-01-11 Damon Chaplin <damon@ximian.com>
-
- * e-shell-startup-wizard.c (finish_func): handle translated timezone
- names.
-
- * Makefile.am (INCLUDES): added -I$(top_srcdir)/libical/src/libical.
-
-2001-12-17 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-about-box.c: Add Michael MacDonald.
-
-2001-12-17 Ettore Perazzoli <ettore@ximian.com>
-
- [Fix #17377, Evolution doesn't work on multi-depth displays.]
-
- * main.c (main): Push GdkRGB visual and colormap.
-
-2001-12-17 Ettore Perazzoli <ettore@ximian.com>
-
- [Fix #16693. What happens there is that the user closed the
- dialog before the async operation was completed, so when the
- notification was received the shell crashed.]
-
- * e-shell-folder-creation-dialog.c: New member
- `creation_in_progress' in `DialogData'.
- (e_shell_show_folder_creation_dialog): Init to %FALSE.
- (async_create_cb): Set to %FALSE. Also, if the
- dialog_data->dialog is %NULL, free the dialog_data before
- returning.
- (dialog_clicked_cb): Set to %TRUE.
- (dialog_destroy_cb): If a creation is in progress, just set the
- widget pointers in the DialogData struct to %NULL instead of
- freeing the whole struct.
- (async_create_cb): Make the OK and Cancel buttons sensitive.
- (dialog_clicked_cb): Make them insensitive here.
-
-2001-12-12 Ettore Perazzoli <ettore@ximian.com>
-
- [Fix #17258, shell displays splash even if Evolution is already
- running.]
-
- * e-shell.c (e_shell_construct): Display the splash screen only if
- the registration succeeds.
-
-2001-12-10 Ettore Perazzoli <ettore@ximian.com>
-
- [Fix #14838, saving passwords doesn't work. It is actually a
- workaround for some obscure Bonobo-conf bug.]
-
- * e-setup.c (setup_bonobo_conf_private_directory): New helper
- function to create the `~/evolution/private' directory.
- (e_setup): Call it.
-
-2001-12-07 Iain Holmes <iain@ximian.com>
-
- [Trying to fix #14701, importing locks up Evolution.]
-
- * e-shell-importer.c (show_error): Show an error message, but not
- modally.
- (start_import): Use above function so none of the errors are modal.
- (folder_selected): Hide the folder dialog.
-
-2001-12-04 Ettore Perazzoli <ettore@ximian.com>
-
- [Fix #7827, Switching desktops leaves the folder bar popped up.]
-
- * e-shell-view.c (folder_bar_popup_map_callback): And grab the
- keyboard as well.
- (popdown_transient_folder_bar): Ungrab the keyboard as well.
- (switch_on_folder_tree_click): Likewise.
-
- [Fix #16507, Right Click -> View does nothing.]
-
- * e-shell-view-menu.c: New verb "ActivateView".
- (command_activate_view): New, callback for the "ActivateView"
- verb.
-
-2001-11-15 Zbigniew Chyla <cyba@gnome.pl>
-
- * e-shell-folder-commands.c (e_shell_command_rename_folder): Convert
- folder name to locale's encoding before using it as part of the prompt.
-
-2001-11-28 Federico Mena Quintero <federico@ximian.com>
-
- Fixes bug #3290.
-
- * e-shell-folder-selection-dialog.c
- (e_shell_folder_selection_dialog_construct): Use our own filename
- for the collapsation state of the tree, instead of sharing the one
- of shell view number 0.
- (save_expanded_state): New function, saves the collapsation state
- of the tree.
- (impl_destroy): Call save_expanded_state().
-
-2001-11-14 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-about-box.c: Add more contributors to the box.
-
-2001-11-14 Damon Chaplin <damon@ximian.com>
-
- * e-shell-startup-wizard.c (finish_func): make timezone default to
- "UTC" rather than "".
-
-2001-11-12 Iain Holmes <iain@ximian.com>
-
- * e-shell-startup-wizard.c (make_identity_page): Check for exception.
- (make_receive_page): Check for exception.
- (make_extra_page): Check for exception.
- (make_transport_page): Check for exception.
- (make_management_page): Check for exception.
-
-2001-11-06 Iain Holmes <iain@ximian.com>
-
- * e-shell-startup-wizard.c (make_timezone_page): Move the call to
- e_timezone_dialog_new out of the the GTK_OBJECT macro to stop it
- being called 4 times, and leaking 3.
-
-2001-11-05 Ettore Perazzoli <ettore@ximian.com>
-
- * e-storage-set-view.c (set_e_shortcut_selection): Get the storage
- name if we are dragging a storage instead of a folder.
-
-2001-11-01 Anna Marie Dirks <anna@ximian.com>
-
- * e-shell-importer.c (prepare_intelligent_page): Fixed spacing and
- alignment probelms. (See bug #14281)
-
- * e-shell-startup-wizard.c (prepare_importer_page): Fixed
- spacing and alignment problems. (See bug #14281)
-
-2001-11-05 Dan Winship <danw@ximian.com>
-
- * e-storage-set-view.c (set_e_shortcut_selection): Set the
- shortcut name to be the folder name, not just the last component
- of its path, which may be different.
-
-2001-11-01 Ettore Perazzoli <ettore@ximian.com>
-
- * glade/evolution-startup-wizard.glade: `timezone-48.png', not
- `timezone.png'.
-
-2001-11-01 Anna Marie Dirks <anna@ximian.com>
-
- * glade/evolution-startup-wizard.glade: Changed the welcome
- message and the finishing message to be more descriptive. Also
- changed the window title to be "Evolution Setup Assistant". Finally,
- fixed a misnamed icon (replaced timezone.png with timezone-48.png).
- Partially fixes bug #14281 and totally fixes #14286.
-
-2001-10-31 Christopher James Lahey <clahey@ximian.com>
-
- * e-storage-set-view.c (cursor_activated): Don't do operations on
- a NULL path.
- (updated_folder_cb, folder_changed_cb): Send pre_change signal
- here.
-
-2001-10-31 Ettore Perazzoli <ettore@ximian.com>
-
- * e-storage-set-view.c (handle_evolution_path_drag_motion): If the
- source folder is stock and the operation is GDK_ACTION_MOVE,
- always return %FALSE as we don't want that to be allowed ever.
-
-2001-10-30 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view.c (bonobo_widget_is_dead): Removed.
- (show_existing_view): Don't call it.
-
-2001-10-30 Ettore Perazzoli <ettore@ximian.com>
-
- * e-component-registry.c (sleep_with_g_main_loop): New utility
- function.
- (sleep_with_g_main_loop_timeout_callback): Callback function for
- `sleep_with_g_main_loop()'.
- (wait_for_corba_object_to_die): Use `sleep_with_g_main_loop()'
- instead of `sleep()'.
-
-2001-10-30 Ettore Perazzoli <ettore@ximian.com>
-
- * main.c (development_warning): Removed.
- (idle_cb): Don't call it.
- (warning_dialog_clicked_callback): Removed.
-
-2001-10-30 Iain Holmes <iain@ximian.com>
-
- * e-shell-view.c (e_shell_view_load_settings): If the display uri is
- NULL, set the view to the default.
-
-2001-10-30 Ettore Perazzoli <ettore@ximian.com>
-
- * evolution-shell-component.c (owner_ping_callback): Duplicate the
- owner before pinging it. Fixes #13802.
-
-2001-10-30 Ettore Perazzoli <ettore@ximian.com>
-
- * evolution-shell-component.c (impl_owner_unset): New.
- (class_init): Install it.
- (impl_unsetOwner): Just emit the "owner_unset" signal as the
- default implementation for that signal does all the work now.
- (impl_owner_died): Set the owner_client to %NULL before unreffing
- it.
- (destroy): Likewise.
- (impl_owner_unset): Likewise.
-
-2001-10-30 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view.c (e_shell_view_construct): Connect to the
- "removed_folder" signal with gtk_signal_connect_while_alive() so
- we don't crash if the view gets destroyed. Fixes #13285.
-
-2001-10-29 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-startup-wizard.c (next_func): If we're not at the end of
- the druid list, tell the druid we're going to change the page.
- (back_func): Same for going back a page. This way we can properly
- synchronise with the druid object and not race with the wizard
- object to set the right page. Part of fix for #12127.
-
-2001-10-29 Ettore Perazzoli <ettore@ximian.com>
-
- * evolution-shell-component.c (owner_ping_callback): Slightly
- change the debugigng message for when the shell has disappeared.
-
-2001-10-29 Ettore Perazzoli <ettore@ximian.com>
-
- * evolution-shell-component.c (owner_ping_callback): Remove
- ping debugging messages.
-
-2001-10-29 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell.c (set_interactive): Remove debugging message.
-
-2001-10-29 Damon Chaplin <damon@ximian.com>
-
- * Makefile.am (evolution_LDADD): use libical-evolution.la
-
-2001-10-29 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view.c (e_shell_view_construct): Ref the shell.
- (destroy): Unref the shell.
- (destroy): Free the delayed_selection. No need to call
- `cleanup_delayed_selection()' as the signal handler will have
- already be disconnected at this point [as we are using
- connect_while_alive()'].
-
-2001-10-28 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view.c (destroy): Call `cleanup_delayed_selection()' as
- there is a slight chance that the callback gets invoked during the
- cleanup phase.
- (e_shell_view_display_uri): For extra safety, make sure we don't
- get invoked on a dead object by connecting the "new_folder" signal
- with `e_gtk_signal_connect_full_while_alive()' instead of using
- plain `gtk_signal_connect_after()'.
-
-2001-10-28 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view.c (new_folder_cb): Don't do the
- `gtk_signal_disconnect_by_func()' as it's already done in
- `cleanup_delayed_selection()'.
- (e_shell_view_construct): Set the ->shell member as the first
- thing.
- (set_current_notebook_page): Add a cast to make the compiler
- happy.
- (new_folder_cb): Don't set priv->uri before calling
- `e_shell_view_display_uri()', because the latter does it anyways,
- and also if you set it before calling it, the selection in the
- folder tree doesn't get updated properly.
-
-2001-10-29 <NotZed@Ximian.com>
-
- * evolution-storage.c (class_init): Set the return type of the
- signal handlers to GTK_TYPE_NONE.
-
-2001-10-28 Ettore Perazzoli <ettore@ximian.com>
-
- [The following should fix #13802, crash on exit.]
-
- * evolution-shell-component.c (impl_unsetOwner): Set the ping
- timeout ID to -1 when removing the source.
- (impl_destroy): Likewise.
- (impl_unsetOwner): Remove the timeout before unreffing, not after
- unreffing.
-
-2001-10-28 Jon Trowbridge <trow@ximian.com>
-
- * e-shell-about-box.c: Distribute credit equally.
-
-2001-10-27 <NotZed@Ximian.com>
-
- * evolution-storage.c (impl_Storage_async_xfer_folder): We want
- XFER_FOLDER not REMOVE_FOLDER!
-
-2001-10-26 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-offline-handler.c (prepare_for_offline): Remove
- debugging messages.
- (finalize_offline_hash_foreach): Likewise.
-
-2001-10-26 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-offline-handler.c: New member `finished' in
- `EShellOfflineHandlerPrivate'.
- (finalize_offline): Ref the handler as we might get destroyed
- while putting every component offline.
- (impl_OfflineProgressListener_updateProgress): Don't emit
- ::offline_procedure_finished if ->finished is %TRUE. Also, set it
- to %TRUE after emitting the signal.
- (cancel_offline): Likewise.
- (finalize_offline): Likewise.
- (update_dialog_clist): Guard against NULL ->dialog_gui.
-
-2001-10-26 Ettore Perazzoli <ettore@ximian.com>
-
- * evolution-storage.c (impl_Storage_async_xfer_folder): Implement.
- (class_init): Add the signal "xfer_folder" signal.
-
- * evolution-storage.h: New signal "xfer_folder".
-
-2001-10-26 Ettore Perazzoli <ettore@ximian.com>
-
- * e-corba-storage.c
- (async_xfer_folder): New, implementation for the
- ::async_xfer_folder method.
- (class_init): Install it.
-
-2001-10-26 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell.c (destroy): Set ->is_initialized to %FALSE.
- (e_shell_unregister_all): Same here.
-
-2001-10-26 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-importer.c (prepare_intelligent_page):
- gtk_widget_show_now() the dialog.
- * e-shell-startup-wizard.c (prepare_importer_page): Likewise.
-
-2001-10-26 Ettore Perazzoli <ettore@ximian.com>
-
- * main.c (quit_box_new): Use gtk_widget_show_now() so the stupid
- dialog hopefully displays all the time.
-
-2001-10-26 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view.c (set_current_notebook_page): Clear the folder bar
- label to be empty. [#12553]
-
-2001-10-26 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-about-box.c (timeout_callback): Draw one more line.
-
-2001-10-26 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view-menu.c (command_about_box): Set the GtkWindow
- policy so that @allow_shrink, @allow_grow and @auto_shrink are all
- %FALSE.
-
-2001-10-26 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-folder-commands.c (e_shell_command_rename_folder): Don't
- allow invalid folder names. [#12027]
-
- * e-shell-folder-creation-dialog.c (entry_name_is_valid): Removed.
- (dialog_clicked_cb): Use `e_shell_folder_name_is_valid()' instead.
-
- * e-shell-utils.c (e_shell_folder_name_is_valid): New. Sorry I18N
- people, it breaks the string freeze slighty.
-
- * e-component-registry.c (component_free): Add a cast.
- (e_component_registry_restart_component): Argh, use the
- corba_objref properly in calling `wait_for_corba_object_to_die()'.
-
-2001-10-25 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view-menu.c (update_offline_menu_item): Add accelerators
- for "Work Offline" and "Work Online".
-
-2001-10-25 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view.c (update_for_current_uri): Don't allow translators
- to translate "Ximian Evolution".
-
-2001-10-25 Ettore Perazzoli <ettore@ximian.com>
-
- * e-component-registry.c (wait_for_corba_object_to_die): New
- helper function.
- (e_component_registry_restart_component): Use it.
- (component_free): Call it to wait for the unowned object to die.
-
-2001-10-25 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell.c (impl_Shell_selectUserFolder): Handle failure from
- XGetClassHint properly. Also, free res_name and res_class in case
- of success. Fixes #13554.
-
-2001-10-25 Ettore Perazzoli <ettore@ximian.com>
-
- * e-storage-set-view.c (etree_icon_at): Don't display an icon for
- storages that have subfolders.
-
-2001-10-25 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-importer.c: #include "e-util/e-gtk-utils.h".
-
- * e-shell-folder-creation-dialog.c
- (e_shell_show_folder_creation_dialog): Constify a local variable
- to placate a warning.
-
- * e-activity-handler.c (task_widget_cancel_callback): #if 0'ed
- out.
-
- * evolution-shell-component-client.c
- (evolution_shell_component_client_new): Remove unused variable
- `ior'.
-
-2001-10-25 Ettore Perazzoli <ettore@ximian.com>
-
- * e-activity-handler.c (impl_destroy): Set ->priv to NULL.
- (impl_operationStarted): Check for priv not being NULL.
- (impl_operationProgressing): Likewise.
- (impl_operationFinished): Likewise.
- (impl_requestDialog): Likewise.
-
-2001-10-25 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-startup-wizard.c (make_mail_dialog_pages): Set the
- ->mailer to be CORBA_OBJECT_NIL in case of an exception, otherwise
- the caller will not realize about the problem.
-
-2001-10-25 Ettore Perazzoli <ettore@ximian.com>
-
- * evolution-wizard.c (evolution_wizard_set_buttons_sensitive):
- Don't use __FUNCTION__.
- (evolution_wizard_set_show_finish): Likewise.
- (evolution_wizard_set_page): Likewise.
-
- * e-shell-startup-wizard.c (make_mail_dialog_pages): Do not use
- __FUNCTION__ and __LINE__. This breaks the string freeze, but the
- old way made Evolution non-compilable with non-GNU compilers.
-
-2001-10-24 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-about-box.c: Add a few names to the box.
-
-2001-10-24 Dan Winship <danw@ximian.com>
-
- * evolution-storage.c (evolution_storage_new_folder):
- g_return_if_fail if the display_name is NULL. "Fixes" 11182
- although there may be a few more cases lying around that pass
- NULLs in.
-
-2001-10-24 Ettore Perazzoli <ettore@ximian.com>
-
- * main.c (quit_box_new): Set the WMClass of the quit dialog to be
- different from the default one in an attempt to fix #13441.
-
-2001-10-24 Ettore Perazzoli <ettore@ximian.com>
-
- * e-local-storage.c (storage_result_from_component_result): New.
- (async_xfer_folder_callback): Use it so we get the right error
- message.
- (async_xfer_folder_complete): New arg @success. Don't remove the
- directory and the metadata if @success is %FALSE.
-
-2001-10-23 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-folder-commands.c (rename_callback_data_new): Get the
- path and the shell view instead.
- (rename_callback_data_free): Updated accordingly.
- (rename_cb): Set the name on the folder based on the path, not the
- actual object [as the old object gets unreffed -- of course].
-
-2001-10-23 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-folder-commands.c (rename_callback_data_new): New.
- (rename_callback_data_free): New.
- (rename_cb): Rename the folder here.
- (e_shell_command_rename_folder): Don't rename the EFolder here.
-
-2001-10-23 Ettore Perazzoli <ettore@ximian.com>
-
- * e-local-storage.c (async_xfer_folder_callback): Handle the
- return codes properly, and invoke the result callback too.
-
-2001-10-23 Ettore Perazzoli <ettore@ximian.com>
-
- * e-activity-handler.c (show_cancellation_popup): #if 0'ed for
- now, per #7427.
-
-2001-10-23 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view.c (storage_set_removed_folder_callback): Explicitly
- deactivate the control frame, and display the default URI before
- destroying the dead one.
-
- * e-shell.c (e_shell_component_maybe_crashed): If the URI is of a
- folder that doesn't exist anymore, don't assume that the
- corresponding component has crashed. Also, try pinging the
- component first; if the component responds, don't pop up the
- dialog.
-
-2001-10-22 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view-menu.c (command_open_folder_in_new_window): No need
- to gtk_widget_show() the view anymore.
-
- * e-shell-view.c (activate_shortcut_cb): No need to
- gtk_widget_show() the view anymore.
-
- * e-shell.c (impl_Shell_createNewView): Don't explicitly show the
- new view.
- (e_shell_create_view): gtk_widget_show() the new view and flush
- the GTK+ event loop before sending the ::interactive notification.
- (create_view): New helper function.
- (e_shell_create_view): Use it.
- (e_shell_create_view_from_settings): New.
- (e_shell_restore_from_settings): Use
- `e_shell_create_view_from_settings()'.
-
-2001-10-22 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view-menu.c (command_open_folder_in_new_window): Don't
- explicitly show the new view.
-
-2001-10-22 Ettore Perazzoli <ettore@ximian.com>
-
- * evolution-shell-component.c (impl_unsetOwner): Remove the ping
- timeout.
-
-2001-10-22 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell.c (impl_Shell_selectUserFolder): Don't die if the parent
- window has no WMHints.
-
-2001-10-22 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view.c (show_existing_view): If the view is dead, just
- return FALSE. Prevents crash #12483.
-
-2001-10-22 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell.c: New member `is_interactive' in `EShellPrivate'.
- (init): Init to %FALSE.
- (set_interactive): New.
- (e_shell_create_view): Make interactive.
- (view_destroy_cb): If no views are left, make non-interactive.
-
- * evolution-shell-component.c (class_init): Set up the
- "interactive" signal.
- (impl_interactive): New implementation for the ::interactive
- method.
- (class_init): Install.
-
- * evolution-shell-component.h: New signal `interactive'.
-
- * Evolution-ShellComponent.idl: New method ::interactive.
-
-2001-10-19 Ettore Perazzoli <ettore@ximian.com>
-
- * e-storage-set-view.c (tree_drag_data_received): Pass the
- @folder_type to ::handleDrop.
-
- * evolution-shell-component-dnd.c
- (impl_GNOME_Evolution_ShellComponentDnd_DestinationFolder_handleMotion):
- New arg @folder_type.
- (impl_GNOME_Evolution_ShellComponentDnd_DestinationFolder_handleDrop):
- Likewise.
-
- * evolution-shell-component-dnd.h: Add @folder_type to
- `DndDestinationFolderHandleDropFn' and
- `DndDestinationFolderHandleMotionFn'.
-
- * e-storage-set-view.c (tree_drag_motion): Pass the folder type to
- `::handleMotion'.
-
- * Evolution-ShellComponentDnd.idl: Pass @folder_type in
- ::handleDrop and ::handleMotion.
-
-2001-10-19 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view-menu.c (command_about_box): Use EShellAboutBox.
- (zero_pointer): Removed.
-
- * e-shell-about-box.h: New.
- * e-shell-about-box.c: New.
-
-2001-10-18 Ettore Perazzoli <ettore@ximian.com>
-
- * Makefile.am (evolution_SOURCES): Ooops. Remove stale files
- `e-shell-about-box.[ch]'.
-
-2001-10-17 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell.c (impl_Shell_selectUserFolder): Set the parent
- according to the XID we get.
-
- * Evolution-Shell.idl: New arg @parent_xid in `::selectUserFolder'.
-
- * evolution-shell-client.c
- (evolution_shell_client_user_select_folder): New arg @parent.
- (user_select_folder): Likewise. Pass it to the CORBA method.
-
-2001-10-17 Ettore Perazzoli <ettore@ximian.com>
-
- * main.c (idle_cb): Urgh. Remove stale line that caused
- `display_default' to be set to TRUE for all the non-NULL shell
- cases.
-
-2001-10-17 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell.c (set_owner_on_components): Re-set the owner on the
- component that raised OldOwnerHasDied.
-
-2001-10-15 Iain Holmes <iain@ximian.com>
-
- * e-shell-startup-wizard.c (prepare_importer_page): Stop the prepare
- running twice.
-
-2001-10-14 Dan Winship <danw@ximian.com>
-
- * e-corba-storage.c (async_folder_cb):
- * e-storage.c (e_storage_result_to_string): Add two missing codes.
-
-2001-10-13 Dan Winship <danw@ximian.com>
-
- * evolution-shell-component-utils.c (e_activation_failure_dialog):
- New function to try to activate a component when you know it's
- going to fail, and then pop up a dialog explaining why it failed.
-
-2001-10-12 Iain Holmes <iain@ximian.com>
-
- * e-shell-importer.c (prepare_intelligent_page): Flush the gdk
- functions so that the window will be shown.
-
- * e-shell-startup-wizard.c (make_mail_dialog_pages): Fix some
- strings.
- (prepare_importer_page): Flush GDK functions so that the window
- is shown.
-
-2001-10-12 Ettore Perazzoli <ettore@ximian.com>
-
- [Fix #7643, Starting new view doesn't honor "view" settings.]
-
- * e-shell-view-menu.c (command_open_folder_in_new_window): Pass
- the parent @shell_view as the @template_view arg to
- `e_shell_create_view()'
-
- * e-shell-view.c (activate_shortcut_cb): Pass the _view as the
- @template_view arg to `e_shell_create_view()'.
-
- * e-shell-folder-commands.c
- (e_shell_command_open_folder_in_other_window): Pass the parent
- @shell_view as the @template_view arg to `e_shell_create_view()'.
-
- * e-shell.c (e_shell_create_view): New arg @template_view.
- (impl_Shell_createNewView): Pass %NULL as @template_view when
- calling it.
- (e_shell_restore_from_settings): Likewise.
-
-2001-10-12 Ettore Perazzoli <ettore@ximian.com>
-
- * main.c (quit_box_new): Also flush GDK after flushing GTK.
- Otherwise GTK might queue draw requests to X that don't get
- executed.
-
-2001-10-12 Ettore Perazzoli <ettore@ximian.com>
-
- [Hopefully really fix #8615 and friends.]
-
- * main.c (no_views_left_cb): Invoke `e_shell_disconnect_db()'
- before unreffing the shell.
-
- * e-shell.c (e_shell_disconnect_db): New.
- (destroy): Call it instead of unreffing the db manually here.
-
-2001-10-12 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-folder-commands.c
- (folder_selection_dialog_folder_selected_callback): Don't free the
- folder_command_data here. It is supposed to be freed in the async
- callback. The leak that Dan supposedly fixed was probably only
- due to the fact that the component that was supposed to perform
- the xfer didn't report a result. Now that xfer actually works, it
- was triggering the crash instead. [Fixes #9769.]
-
-2001-10-12 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-offline-handler.c (prepare_for_offline): Only invoke
- `progress_listener_servant_free()', no need to also do `__fini()'
- on it as `__fini()' is also called by the former. [Fixes #12329.]
- Also, print out the CORBA exception that gets raised so we have
- some more clues about what is wrong.
-
-2001-10-11 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view.c
- (reparent_storage_set_view_box_and_destroy_popup): Don't die if
- the folder_bar_popup is %NULL. Fixes #10922.
-
-2001-10-11 Ettore Perazzoli <ettore@ximian.com>
-
- * main.c (idle_cb): Display the default view only if we are
- starting our own shell, or if the command-line has no arguments
- and we are talking to an already existing shell.
-
- * e-uri-schema-registry.c
- (e_uri_schema_registry_set_handler_for_schema): Do not return a
- value.
-
-2001-10-11 Dan Winship <danw@ximian.com>
-
- * Evolution-Storage.idl: Remove "display_name" arg from update
- methods. It was only there to do the "Inbox (5)" hack, which is
- supported directly now.
-
- * evolution-storage.c (impl_Storage_updateFolder): no longer takes
- display_name.
- (evolution_storage_update_folder,
- evolution_storage_update_folder_by_uri): Likewise.
- (class_init): Update signal signature.
-
- * evolution-storage-listener.c
- (impl_GNOME_Evolution_StorageListener_notifyFolderUpdated): No
- longer takes display_name, but make it pass the unread_count along
- in the signal it emits.
- (class_init): Update signal signature.
-
- * e-local-storage.c (bonobo_interface_update_folder_cb):
- * e-corba-storage.c (impl_StorageListener_notifyFolderUpdated): No
- longer take display_name.
-
-2001-10-10 Ettore Perazzoli <ettore@ximian.com>
-
- * e-storage-set-view.c (handle_evolution_path_drag_motion): Ooops,
- remove debugging message.
-
-2001-10-10 Ettore Perazzoli <ettore@ximian.com>
-
- * e-storage.c (e_storage_async_xfer_folder): Make this a no-op if
- the source and the destination path are the same.
-
- * e-local-storage.c (impl_async_xfer_folder): return after
- returning `E_STORAGE_CANTCHANGESTOCKFOLDER' to the callback.
-
- * e-storage-set-view.c (handle_evolution_path_drag_motion): Make
- the check for dragging a folder over itself a little bit more
- accurate.
-
-2001-10-05 Jon Trowbridge <trow@ximian.com>
-
- * e-shell-view-menu.c (command_work_offline): This is a message,
- not a warning!
- (command_work_online): This is also a message, not a warning!
- (I'm feeling very anal today.)
-
-2001-10-05 Ettore Perazzoli <ettore@ximian.com>
-
- * main.c (idle_cb): Do not invoke
- `e_shell_restore_from_settings()' if `shell' is NULL.
-
-2001-10-05 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view.c (e_shell_view_save_settings): Get the right
- hpaned positions for when the shortcut bar and/or the folder bar
- are visible.
-
-2001-10-05 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell.c (impl_Shell_handleURI): Handle the return value from
- `evolution_shell_component_client_handle_external_uri()' as an
- EvolutionShellComponentClientResult instead of treating it as a
- boolean. This prevents the incorrect NotFound exceptions we were
- getting for `mailto:' invocations.
-
-2001-10-05 Ettore Perazzoli <ettore@ximian.com>
-
- * main.c (quit_box_new): Also `gdk_flush()'.
- (idle_cb): If the user doesn't specify at least one `evolution:'
- URI, restore from the settings. [Fixes #6093.]
-
-2001-10-05 Ettore Perazzoli <ettore@ximian.com>
-
- * evolution-shell-component.c: New member `ping_timeout_id' in
- `EvolutionShellComponentPrivate'.
- (setup_owner_pinging): New helper function.
- (impl_owner_died): Unref the owner and set ->owner_client to
- %NULL.
- (impl_setOwner): Don't unref here.
- (destroy): Remove the source for ->ping_timeout_id if not -1.
-
-2001-10-05 Ettore Perazzoli <ettore@ximian.com>
-
- * main.c: #include "e-util/e-gtk-utils.h".
- (quit_box_new): Queue a draw on the window; otherwise it seems to
- fail to redraw in some cases for some reason [see #11412].
-
-2001-10-05 Ettore Perazzoli <ettore@ximian.com>
-
- * evolution-shell-component.c (impl_setOwner): If the owner is
- dead, emit "owner_died" instead of "owner_unset".
- (impl_owner_died): New, default implementation for "owner_died".
- (class_init): Install it.
-
- * evolution-shell-component.h: New signal "owner_died".
-
-2001-10-05 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell.c (set_owner_on_components): If setting the owner fails,
- print the a warning message out. Then restart the component.
-
- * e-component-registry.c (component_free): Return a boolean value.
- %FALSE if ::unsetOwner raises an exception.
- (register_type): New arg @override_duplicate, to avoid complaining
- if a component gets re-registered.
- (register_component): Likewise.
- (e_component_registry_restart_component): New.
-
- * e-uri-schema-registry.c
- (e_uri_schema_registry_set_handler_for_schema): Changed return
- type to `void'. Just remove the old handler and set up the new
- one.
-
- * evolution-shell-component-client.c (corba_exception_to_result):
- Translate ::OldOwnerHasDied into
- EVOLUTION_SHELL_COMPONENT_OLDOWNERHASDIED.
-
- * evolution-shell-component.h: New enum value
- `EVOLUTION_SHELL_COMPONENT_OLDOWNERHASDIED'.
-
- * evolution-shell-component.c (impl_setOwner): If the old owner is
- not alive anymore [use CORBA_Object_non_existent() to figure this
- out], emit OWNER_UNSET and raise `OldOwnerHasDied'.
- (evolution_shell_component_result_to_string): New.
-
- * Evolution-ShellComponent.idl: New exception `OldOwnerHasDied'.
- (ShellComponent::setOwner): Can raise it.
-
- * e-folder-type-registry.c
- (e_folder_type_register_type_registered): New.
- (e_folder_type_register_unregister_type): New.
-
-2001-10-04 Rodrigo Moya <rodrigo@ximian.com>
-
- * importer/Makefile.am: added BONOBO_GNOME_CFLAGS to make it compile
- with latest Bonobo
-
-2001-10-02 Ettore Perazzoli <ettore@ximian.com>
-
- [Fix #11326, The folder list can become detached from its parent
- window.]
-
- * e-shell-view.c (folder_context_menu_popped_down_cb): Pop down
- the folder bar if it's popped up.
-
-2001-10-02 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell.c (e_shell_component_maybe_crashed): Make the crash
- message less dorky. [#10264]
-
-2001-10-02 Ettore Perazzoli <ettore@ximian.com>
-
- [Don't allow dragging from a folder to one of its descendants or
- onto itself, when the operation is GDK_DRAG_MOVE. This fixes bugs
- like #8737.]
-
- * e-storage-set-view.c (handle_evolution_path_drag_motion): Don't
- highlight if the user is attempting to move a folder to one of its
- descendants.
-
-2001-10-02 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view.c (e_shell_view_construct): Use
- `bonobo_ui_component_new_default()', not
- `bonobo_ui_component_new()'.
-
-2001-10-02 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view.c (storage_set_removed_folder_callback): New,
- callback for the ::removed_folder signal on the shell's
- EStorageSet.
- (e_shell_view_construct): Connect.
- (e_shell_view_remove_control_for_uri): Removed.
-
- * e-shell-folder-commands.c
- (folder_selection_dialog_folder_selected_callback): Don't call
- `e_shell_view_remove_control_for_uri()'.
- (e_shell_command_delete_folder): Not here either. And don't
- display the default URI either.
-
-2001-09-28 Ettore Perazzoli <ettore@ximian.com>
-
- [Fix #8053, `GNOME_Evolution_Shortcuts' doesn't seem to work.]
-
- * e-shell.c (e_shell_construct): Don't create the EShortcuts
- object a second time.
-
-2001-09-28 Ettore Perazzoli <ettore@ximian.com>
-
- [Fix #8434, Shortcut bar not shown properly.]
-
- * e-shell-view.c (e_shell_view_show_shortcut_bar): Set the
- hpaned_position from the EPaned *before* hiding it -- otherwise,
- the position will of course always be zero.
- (e_shell_view_save_settings): Save from ->hpaned_position and
- ->view_hpaned_position.
-
-2001-09-28 Iain Holmes <iain@ximian.com>
-
- * importer/import.glade: Add new pages.
-
- * e-shell-importer.c (show_import_wizard): Set up new pages.
- (import_druid_finish): Check which type of importer to run.
-
-2001-09-26 Iain Holmes <iain@ximian.com>
-
- * Evolution-Shell.idl: Added a default_type parameter for setting the
- default folder creation type.
-
- * e-shell-folder-commands.c (e_shell_command_create_new_folder): Add NULL
- for default type.
- (e_shell_command_move_folder): Add NULL for default type.
-
- * e-shell-folder-creation-dialog.c (add_folder_types): Check for the
- default_type instead of for mail.
- (get_type_from_parent_path): Get the folder type from the parent folder
- (e_shell_show_folder_creation_dialog): Get the default folder type
- before creating the menu.
-
- * e-shell-folder-creation-dialog.h: Update headers.
-
- * e-shell-folder-selection-dialog.c (impl_clicked): Add default type.
- (e_shell_folder_selection_dialog_construct): Add default type.
- (e_shell_folder_selection_dialog_new): Add default type.
-
- * e-shell-folder-selection-dialog.h: Update headers.
-
- * e-shell-importer.c (import_druid_finish): Add NULL for default type.
-
- * e-shell-view-menu.c (command_new_folder): Set NULL for default type.
- (command_goto_folder): Set NULL for default type.
-
- * e-shell.c (impl_Shell_selectUserFolder): Update for the new default
- type.
-
- * evolution-shell-client.c (user_select_folder): Add "" for default type
-
-2001-09-27 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view-menu.c (DEFINE_UNIMPLEMENTED): Remove.
- (command_new_mail_message): Removed.
- (command_pilot_settings): New.
- (e_shell_view_menu_setup): Add tools verbs.
-
-2001-09-26 Ettore Perazzoli <ettore@ximian.com>
- * e-shell-view.c (setup_verb_sensitivity_for_folder): New helper
- function.
- (folder_selected_cb): Call it.
- (folder_context_menu_popping_up_cb): New callback for the
- "folder_context_menu_popping_up" signal on the folder bar's
- EStorageSetView; set the sensitivities of the verbs according to
- the right-clicked folder.
- (folder_context_menu_popped_down_cb): New, callback for the
- "folder_context_menu_popped_down" signal on the folder bar's
- EStorageSetView; set the sensitivities of the verbs according to
- the currently displayed folder.
- (e_shell_view_get_folder_bar_right_click_path): Add a cast to
- placate a warning.
-
- * e-storage-set-view.c (class_init): Set up the
- "folder_context_menu_popping_up" and
- "folder_context_menu_popped_down" signals.
- (right_click): Emit "folder_context_menu_popping_up" before
- popping up the menu, "folder_context_menu_popped_down" after the
- menu is gone.
-
- * e-storage-set-view.h: New signals
- "folder_context_menu_popping_up" and
- "folder_context_menu_popped_down".
-
-2001-09-25 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-folder-commands.c (e_shell_command_rename_folder):
- Change the name on the EFolder object too.
-
-2001-09-25 Ettore Perazzoli <ettore@ximian.com>
-
- * e-storage.c (e_storage_async_xfer_folder): Ooops. Make the
- check for CANTMOVETODESCENDANT really work.
-
- * e-storage-set-view.c (tree_drag_data_received): Pass the
- EStorageSetView as the data for the async_xfer function.
- (folder_xfer_callback): Display an error dialog if something goes
- wrong.
-
- * e-shell-view-menu.c (command_rename_folder): Enable again.
-
- * e-shell-folder-commands.c (e_shell_command_rename_folder):
- Re-implemented.
- (delete_dialog): Use double quotes instead of single quotes around
- the folder name, for consistency with the other dialogs.
-
-2001-09-25 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view-menu.c (get_path_for_folder_op): New helper
- function.
- (command_move_folder): Pass the @folder_path argument to
- `e_shell_command_move_folder' by using it.
- (command_copy_folder): Pass the @folder_path argument to
- `e_shell_command_copy_folder' by using it.
- (command_delete_folder): Pass the @folder_path argument to
- `e_shell_command_delete_folder()' by using it.
- (command_add_folder_to_shortcut_bar): Pass the @folder_path
- argument to `e_shell_command_add_to_shortcut_bar()' by using it.
- (command_create_folder): Pass the @parent_folder_path argument to
- `e_shell_command_create_new_folder()' by using it.
- (command_new_folder): Use `get_path_for_folder_op()'.
-
- * e-shell-folder-commands.c (e_shell_command_add_to_shortcut_bar):
- New arg @folder_path.
- (e_shell_command_copy_folder): New arg @folder_path.
- (e_shell_command_move_folder): New arg @folder_path.
- (e_shell_command_open_folder_in_other_window): New arg @folder_path.
- (e_shell_command_create_new_folder): New arg @parent_folder_path.
- (e_shell_command_delete_folder): New arg @folder_path.
-
- * e-shell-view.c (e_shell_view_get_folder_bar_right_click_path): New.
-
- * e-storage-set-view.c: New member `right_click_row_path'.
- (init): Init to NULL.
- (destroy): Free.
- (right_click): Set.
- (popup_folder_menu): Use `gnome_popup_menu_do_popup_modal()' so we
- are stuck in here until the menu disappears. After that, destroy
- the menu and call `e_tree_right_click_up()'.
- (e_storage_set_view_get_right_click_path): New.
-
-2001-09-21 Iain Holmes <iain@ximian.com>
-
- * e-shell-importer.c (folder_selected): Use GNOME functions to get
- full expanded path from file entry.
-
-2001-09-20 Ettore Perazzoli <ettore@ximian.com>
-
- * e-storage-set-view.c (tree_drag_motion): Check for a component
- for the given row *after* trying to handle
- EVOLUTION_PATH_TARGET_TYPE. Otherwise, we always fail in the case
- of dnd between a folder and the toplevel node of its storage.
- (find_matching_target_for_drag_context): If not on a folder,
- always return EVOLUTION_PATH_TARGET_TYPE.
-
-2001-09-20 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view.c (storage_set_view_box_event_cb): Removed.
- (folder_bar_popup_map_callback): Don't connect.
- (reparent_storage_set_view_box_and_destroy_popup): Don't ungrab
- here.
- (popdown_transient_folder_bar): Ungrab here.
- (popdown_transient_folder_bar_idle): New.
- (switch_on_folder_tree_click): Invoke it in the idle loop. Also,
- ungrab.
-
-2001-09-20 Iain Holmes <iain@ximian.com>
-
- * e-shell-startup-wizard.c (e_shell_startup_wizard_create): Check
- the number of mail accounts that exist and display the dialog it this
- is 0.
-
-2001-09-19 Ettore Perazzoli <ettore@ximian.com>
-
- * e-task-widget.c: New member `tooltips' in `ETaskWidgetPrivate'.
- (init): Init to NULL.
- (e_task_widget_construct): Create a GtkTooltips and make
- `tooltips' point to it.
- (e_task_widget_update): Set the tooltip for the label too.
-
-2001-09-19 Ettore Perazzoli <ettore@ximian.com>
-
- * evolution-test-component.c: Removed globals `activity_client',
- `progress'.
- (timeout_callback_3): Get the activity client from @data.
- (timeout_callback_2): Likewise here. Pass the activity client as
- the user data pointer for `gtk_timeout_add()'. Put the progress
- count in a "my_progress" GtkObject data key.
- (timeout_callback_1): Pass the newly created EActivityClient as
- the user data pointer for `gtk_timeout_add()'. Also, dispatch
- itself again with a random timeout delay, for a maximum of
- NUM_ACTIVITES times. Initialize the "my_progress" GtkObject data
- to be -1.
-
- [Lame hack to reduce the number of parallel operations reported by
- the same component displayed in the task bar.]
-
- * e-activity-handler.c: New member `component_id' in
- `ActivityInfo'.
- (activity_info_new): New arg @component_id. Init the
- `component_id' member accordingly.
- (activity_info_free): Free the `component_id' member.
- (impl_operationStarted): Pass the component_id to
- `activity_info_new()'.
- (task_widget_new_from_activity_info): Pass the component_id to the
- activity_info.
-
- * e-task-widget.c: New member `component_id' in
- `ETaskWidgetPrivate'.
- (impl_destroy): Free it.
- (init): Init to NULL. Also init all the other members to NULL as
- well.
- (e_task_widget_construct): New arg @component_id. Assign
- ->component_id to match it.
- (e_task_widget_new): New arg @component_id here as well. Pass it
- over to `e_task_widget_construct()'.
- (e_task_widget_get_component_id): New.
-
-2001-09-18 Ettore Perazzoli <ettore@ximian.com>
-
- * e-storage-set-view.c (handle_evolution_path_drag_motion): New
- arg @row. Highlight that row.
- (tree_drag_motion): Pass @row to
- `handle_evolution_path_drag_motion()'.
-
-2001-09-18 Ettore Perazzoli <ettore@ximian.com>
-
- * e-splash.c: #include "e-gtk-utils.h".
-
-2001-09-18 Ettore Perazzoli <ettore@ximian.com>
-
- * e-splash.c (e_splash_construct): Make the canvas backing stored.
-
-2001-09-17 Ettore Perazzoli <ettore@ximian.com>
-
- * main.c (quit_box_new): Call `e_make_widget_backing_stored()' on
- the widget so it refreshes properly even when we are busy waiting
- on CORBA calls.
-
-2001-09-17 Ettore Perazzoli <ettore@ximian.com>
-
- * main.c (quit_box_new): New.
- (quit_box_destroyed_callback): New.
- (no_views_left_cb): Use these two functions to display a warning
- message when Evolution is quitting.
-
-2001-09-17 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell.c (impl_Shell_getLocalStorage): Only raise NotReady if
- the local storage pointer is actually NULL. This way it is
- possible for the components to access the local storage during
- initialization even if the shell is not quite finished
- initializing yet.
-
-2001-09-17 Ettore Perazzoli <ettore@ximian.com>
-
- [Fix #9060, Shell crash after mailer crash.]
-
- * e-shell-view.c (hash_foreach_destroy_view): Renamed from
- `hash_forall_destroy_view'. Don't free `name'.
- (socket_destroy_cb): Use `g_hash_table_lookup()' instead of
- `g_hash_table_lookup_extended()'. Don't free the URI.
- (e_shell_view_remove_control_for_uri): Likewise.
- (show_existing_view): Use view->uri as the key when inserting the
- view. Remove the old view from the hash when destroying it.
- (create_new_view_for_uri): Same here.
-
-2001-09-16 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view.c (e_shell_view_show_folder_bar): Hide the
- storage_set_view_box *before* getting the child1_size [otherwise,
- the latter will, um, always be zero].
-
-2001-09-16 Christopher James Lahey <clahey@ximian.com>
-
- * e-storage-set-view.c (etree_get_node_by_id): Made save_id const
- here.
-
-2001-09-14 Ettore Perazzoli <ettore@ximian.com>
-
- [Automake 1.5 fixes pointed out by Richard Boulton
- <richard@tartarus.org>, as per #9258.]
-
- * importer/Makefile.am (CLEANFILES): Assign directly using `=',
- instead of `+='.
- * Makefile.am (CLEANFILES): Likewise.
-
-2001-09-14 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell.c (impl_Shell_getLocalStorage): Return a proper value.
- (impl_Shell_createStorageSetView): Likewise.
- (impl_Shell_setLineStatus): Likewise.
- (impl_Shell__get_displayName): Likewise.
- (impl_Shell_getComponentByType): Likewise.
- (impl_Shell_createNewView): Likewise.
- (impl_Shell_handleURI): Likewise.
-
-2001-09-14 Iain Holmes <iain@ximian.com>
-
- * e-shell-importer.c (start_import): Only check for local path if the
- folderpath != NULL.
-
- * e-shell-startup-wizard.c (prepare_importer_page): Remove GTK_CLIST
- cast.
-
-2001-09-12 Iain Holmes <iain@ximian.com>
-
- * evolution-wizard.c: Remove spewage.
-
-2001-09-14 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-importer.c (start_import): Removed unused variable.
-
-2001-09-14 Ettore Perazzoli <ettore@ximian.com>
-
- [Fix #8204 and the other bugs caused by allowing invocations on
- the ::Shell interface to happen before the shell is actually fully
- initialized. This is a lame hack and not a nice, complete
- solution for the problem, but it should do for now.]
-
- * e-shell.c: New member `is_initialized' in `EShellPrivate'.
- (init): Initialize to %FALSE.
- (e_shell_construct): Set `is_initialized' to %TRUE after the
- initialization sequence is finished.
- (raise_exception_if_not_ready): New utility function to raise the
- notReady exception if the shell is not ready.
- (impl_Shell__get_displayName): Call it.
- (impl_Shell_getComponentByType): Likewise.
- (impl_Shell_createNewView): Likewise.
- (impl_Shell_handleURI): Likewise.
- (impl_Shell_selectUserFolder): Likewise.
- (impl_Shell_getLocalStorage): Likewise.
- (impl_Shell_createStorageSetView): Likewise.
- (impl_Shell_setLineStatus): Likewise.
- (e_shell_construct): Print out the repo_id of the exception from
- `bonobo_get_object()' if it fails. Also, register on OAF just
- before displaying the splash.
-
- * Evolution-Shell.idl: New exception `NotReady'. All the CORBA
- methods on ::Shell can now raise this exception.
-
-2001-09-13 Ettore Perazzoli <ettore@ximian.com>
-
- [Fix #5990, Remembering Evolution window geometry.]
-
- * e-shell.c (impl_Shell_createNewView): gtk_widget_show() the new
- view returned by `e_shell_create_view()'.
- (e_shell_restore_from_settings): Same here, after loading the
- settings.
-
- * e-shell-view.c (activate_shortcut_cb): gtk_widget_show() the new
- view returned by `e_shell_create_view()'.
-
- * e-shell-view-menu.c (command_open_folder_in_new_window):
- gtk_widget_show() the view returned by `e_shell_create_view()'.
-
- * e-shell-folder-commands.c
- (e_shell_command_open_folder_in_other_window): gtk_widget_show()
- the view returned by `e_shell_create_view()'.
-
- * e-shell.c (e_shell_create_view): Don't show the view
- automatically anymore.
-
- * e-shell-view.c (e_shell_view_save_settings): Save the width and
- height of the window.
- (e_shell_view_load_settings): Restore the width and the height and
- gtk_window_set_default_size() based on them.
-
-2001-09-13 Ettore Perazzoli <ettore@ximian.com>
-
- [Remove a bunch of debugging messages, as per #7741.]
-
- * evolution-wizard.c (impl_GNOME_Evolution_Wizard_notifyAction):
- Removed debugging messages.
-
- * e-storage-set.c (storage_removed_folder_cb): Removed debugging
- message.
-
- * e-storage-set-view.c (tree_drag_begin): Removed debugging
- message.
- (tree_drag_data_received): Removed debugging messages.
-
- * e-shortcuts.c (idle_cb): Removed debugging message.
-
- * e-shortcuts-view-model.c (get_icon_for_item): Removed debugging
- message.
-
- * e-shell.c (setup_components): Removed debugging message.
-
- * e-shell-startup-wizard.c (druid_event_notify_cb): Removed
- debugging message.
- (e_shell_startup_wizard_create): Removed debugging message.
-
- * e-shell-offline-handler.c (finalize_offline_hash_foreach):
- Removed debugging message.
-
- * e-shell-importer.c (start_import): Removed debugging message.
- (item_selected): Same here.
-
- * e-local-storage.c (async_xfer_folder_step): Removed debugging
- message.
-
- * e-corba-storage.c (impl_StorageListener_notifyFolderCreated):
- Changed the error from a g_print() into a g_warning(). Removed
- debugging message.
-
- * e-corba-storage-registry.c (impl_StorageRegistry_addStorage):
- Removed debugging message.
- (impl_StorageRegistry_removeStorageByName): Likewise.
-
- * e-component-registry.c (component_free): Removed debugging
- message.
- (register_component): Don't printf() about the registered folder
- type.
- (register_component): Don't printf() about the registered schema
- type.
-
-2001-09-13 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view.c (pop_up_folder_bar): Disable DnD on the
- EStorageSetView to avoid strange behaviors.
- (reparent_storage_set_view_box_and_destroy_popup): Re-enable DnD
- here.
- (popdown_transient_folder_bar): And here as well.
-
- * evolution-storage-set-view-factory.c
- (evolution_storage_set_view_factory_new_view): Disable DnD on the
- EStorageSetView.
-
- * e-shell-folder-selection-dialog.c
- (e_shell_folder_selection_dialog_construct): Disable DnD on the
- EStorageSetView.
-
- * e-shell-folder-creation-dialog.c (add_storage_set_view): Disable
- DnD on the EStorageSetView.
-
- * e-storage-set-view.c: New member `allow_dnd' in
- `EStorageSetViewPrivate'.
- (init): Init to `allow_dnd' %TRUE.
- (tree_start_drag): If `allow_dnd' is false, don't start the drag
- and return %FALSE.
- (tree_drag_motion): If `allow_dnd' is false, return %FALSE.
- (e_storage_set_view_get_allow_dnd): New.
- (e_storage_set_view_set_allow_dnd): New.
-
-2001-09-12 Ettore Perazzoli <ettore@ximian.com>
-
- * main.c (main): Add SUB_VERSION to the version string passed to
- `gnome_init_with_popt_table()'.
-
-2001-09-12 Chris Toshok <toshok@ximian.com>
-
- * e-shell-importer.c (start_import): only allow importing to
- /local folders.
-
-2001-09-12 Ettore Perazzoli <ettore@ximian.com>
-
- [Fix #4962, "Highlighting is left after a drag".]
-
- * e-storage-set-view.c (tree_drag_motion): Only highlight when
- moving over allowed targets.
-
-2001-09-12 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-folder-title-bar.c (unrealize): Only
- gtk_widget_destroy() the icon_widget if it's not NULL.
-
-2001-09-12 Iain Holmes <iain@ximian.com>
-
- * importers/evolution-importer-client.c
- (evolution_importer_client_process_item): Remove spew.
-
-2001-09-10 Dan Winship <danw@ximian.com>
-
- * e-shell-view.c (socket_destroy_cb): Oops. Remove duplicate free.
-
-2001-09-09 Dan Winship <danw@ximian.com>
-
- Purify run. All small leaks.
-
- * e-shell-folder-commands.c
- (folder_selection_dialog_folder_selected_callback): Free the
- folder_command_data when destroying the dialog.
-
- * e-local-storage.c (remove_folder): Free physical_uri if we
- allocated it.
-
- * e-shortcuts-view.c (pop_up_right_click_menu_for_group): Unref
- the popup menu, don't destroy it.
- (destroy_group_cb): Free the question string.
- (rename_group_cb): Free the new_name.
-
- * e-shell-importer.c (create_plugin_menu): Free the list of
- importers.
- (get_iid_for_filetype): Likewise.
- (import_druid_finish): #ifdef out some g_strdups that are only
- used by other #ifdef'ed-out code.
-
- * e-shell-view.c: Make sure the keys in the uri_to_view hash get
- freed.
-
- * e-shell-folder-title-bar.c (set_title_bar_label_style): Unref
- the style after setting it on the widget.
-
- * e-shell-offline-handler.c (impl_destroy): free priv.
-
- * e-storage-set-view.c (tree_drag_data_received): Make sure
- target_type always gets freed.
-
- * e-shell-folder-creation-dialog.c (add_folder_types): Don't leak
- the type names.
-
-2001-09-07 Iain Holmes <iain@ximian.com>
-
- * e-shell-startup-wizard.c (prepare_importer_page): New design.
- (make_importer_page): Remove the extra widgets for the new design.
-
-2001-09-07 Christopher James Lahey <clahey@ximian.com>
-
- * e-storage-set-view.c (tree_start_drag): Changed this to use the
- new ETable/ETree drag stuff.
-
-2001-09-07 Dan Winship <danw@ximian.com>
-
- * evolution-shell-component-client.c
- (evolution_shell_component_client_new): Remove the "see previous
- error messages?" comment from the error message when starting a
- component, since oafd eats the output of the components it
- launches now, so it's just misleading.
-
-2001-09-06 Chris Toshok <toshok@ximian.com>
-
- * evolution-storage.c (impl_Storage_async_remove_folder): change
- to match create_folder.
- (e_marshal_NONE__POINTER_POINTER_POINTER): new marshaller for
- remove_folder.
- (class_init): make sure to use the right marshaller for
- create/remove_folder.
-
- * evolution-storage.h: change the signature of both the
- create_folder and remove_folder signals to be more in line with
- what's in evolution-storage.c. They both take a Bonobo_Listener
- which the signal func notifies, instead of synchronously returning
- the result.
-
-2001-09-06 Ettore Perazzoli <ettore@ximian.com>
-
- * evolution-activity-client.c (evolution_activity_client_update):
- Allow a value of -1.0 for @progress [which means "unknown
- progress"].
-
-2001-09-05 Ettore Perazzoli <ettore@ximian.com>
-
- [Fix #958, ShellComponents should not be created by factories, for
- the test component.]
-
- * GNOME_Evolution_TestComponent.oaf: Remove the factory.
-
- * evolution-test-component.c (COMPONENT_FACTORY_ID): Removed.
- (component_factory_init): Removed.
- (register_component): Rename from `component_fn'. No args, no
- return value. Register the thing on OAF by yourself instead of
- using a factory.
-
-2001-09-05 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shortcuts-view.c (get_shortcut_info): New.
- (get_efolder_from_shortcut): Removed.
- (impl_shortcut_dropped): Use `get_shortcut_info()' instead.
-
-2001-09-05 Ettore Perazzoli <ettore@ximian.com>
-
- * main.c (development_warning): s/Evolution/Ximian Evolution/.
- (idle_cb): Likewise.
-
- * e-splash.c (e_splash_construct): s/Evolution/Ximian Evolution/.
-
- * e-shell-view.c (e_shell_view_construct): s/Evolution/Ximian
- Evolution/.
- (update_for_current_uri): Likewise.
- (update_offline_toggle_status): Likewise.
-
- * e-shell-view-menu.c (command_about_box): s/Evolution/Ximian
- Evolution/.
-
-2001-09-04 Ettore Perazzoli <ettore@ximian.com>
-
- [Fix #6474 and friends, crash when selecting things from the
- context activity context menu.]
-
- * e-activity-handler.c: New member `menu' in struct
- `ActivityInfo'.
- (activity_info_new): Init to NULL.
- (show_cancellation_popup): Set the `menu' member to point to this
- newly created pop-up, use `gnome_popup_menu_do_popup_modal()'
- instead of `gnome_popup_menu_do_popup()', and set the `menu'
- member to NULL when the menu is gone.
- (activity_info_free): Destroy `menu' member.
- (impl_requestDialog): Return
- `GNOME_Evolution_Activity_DIALOG_ACTION_ERROR' instead of nothing.
-
-2001-09-04 Ettore Perazzoli <ettore@ximian.com>
-
- [Fix #6971, Default folder should be the Summary.]
-
- * main.c (idle_cb): s/DEFAULT_URI/E_SHELL_VIEW_DEFAULT_URI/.
-
- * e-shell.c (e_shell_create_view):
- s/DEFAULT_URI/E_SHELL_VIEW_DEFAULT_URI/.
-
- * e-shell-view.c (socket_destroy_cb):
- s/DEFAULT_URI/E_SHELL_VIEW_DEFAULT_URI/.
- (e_shell_view_save_settings): Likewise.
-
- * e-shell-folder-commands.c (e_shell_command_delete_folder):
- s/DEFAULT_URI/E_SHELL_VIEW_DEFAULT_URI/.
-
- * e-shell-view.h (DEFAULT_URI): Rename to
- `E_SHELL_VIEW_DEFAULT_URI'. Change from "evolution:/local/Inbox"
- to be "evolution:/summary".
-
-2001-09-04 Ettore Perazzoli <ettore@ximian.com>
-
- [Fix ^#7675, Crashes trying to empty trash folder.]
-
- * e-shortcuts.c (e_shortcuts_construct): Use
- `gtk_signal_connect_while_alive()' so we don't invoke the
- callbacks on dead EShortcuts objects.
-
-2001-09-04 Iain Holmes <iain@ximian.com>
-
- * e-shell-importer.c (start_importer): Report errors in a dialog.
-
-2001-09-04 Ettore Perazzoli <ettore@ximian.com>
-
- * e-activity-handler.c (impl_operationProgressing): Just ignore
- the request if the activity handler has the GTK_OBJECT_DESTROYED()
- flag set. This should prevent crashes like #7542 and friends when
- the components are not well-behaved enough to respect the Bonobo
- refcounting.
- (impl_operationStarted): Likewise.
- (impl_operationFinished): Likewise.
- (impl_requestDialog): Likewise.
-
-2001-09-04 Iain Holmes <iain@ximian.com>
-
- * e-shell-importer.c (start_import): Check the file exists before trying
- to do anything.
-
-2001-09-04 Iain Holmes <iain@ximian.com>
-
- * e-shell.c (e_shell_construct): Make the other components shut down
- correctly when the first time dialog is cancelled.
-
-2001-09-04 Ettore Perazzoli <ettore@ximian.com>
-
- * e-storage-set-view.c (tree_drag_motion): Remove debugging
- message.
- (tree_drag_motion): Likewise.
-
-2001-09-04 Ettore Perazzoli <ettore@ximian.com>
-
- [Patch from Richard Boulton <richard@tartarus.org> to fix #8497,
- "Warning when shutting view: RootNode not found".]
-
- * e-storage-set-view.c (e_storage_set_view_construct): Add the
- root node to the hash.
- (e_storage_set_view_set_show_folders): Likewise.
-
-2001-08-30 Peter Williams <peterw@ximian.com>
-
- * e-local-storage.c (async_xfer_folder_complete): Remove the folder from
- the EvolutionStorage as well as the EStorage.
-
-2001-08-29 Peter Williams <peterw@ximian.com>
-
- * e-storage-set-view.c (etree_node_destroy_func): Only call
- remove_node_from_hash if it's not the root node.
- (removed_storage_cb): Don't remove the node from the hash here,
- because it will be removed in the node_destroyed callback.
- (removed_folder_cb): Same.
-
- * e-shell-view.c (e_shell_view_remove_control_for_uri): Disconnect
- from the destroy signal so as not to confuse ourselves. Also, the
- page remove in the notebook destroys the control and the socket, so don't
- do that explicitly.
-
- * e-shell-folder-commands.c
- (folder_selection_dialog_folder_selected_callback): Remove the control
- for the source view if we're moving.
-
-2001-08-31 Zbigniew Chyla <cyba@gnome.pl>
-
- * e-local-storage.c
- (setup_folder_as_stock): Don't convert folder name to UTF-8 manually...
- (setup_stock_folders): ... just use U_() here.
- (impl_get_display_name): Marked string for translation (with U_).
-
- * e-storage-set-view.c
- (storage_sort_callback): s/strcasecmp/g_utf8_collate/
- (folder_sort_callback): ditto
-
- * e-summary-storage.c (impl_get_display_name):
- Marked string for translation (with U_).
-
-2001-08-29 Iain Holmes <iain@ximian.com>
-
- * e-local-storage.c (notify_listener): Function to create CORBAany
- and notify listeners.
- (component_async_create_folder_callback): Notify the listener again.
- (create_folder): Handle the Bonobo_Listener again and make it async.
- (impl_async_create_folder): Pass CORBA_OBJECT_NIL as the listener.
- (bonobo_interface_create_folder_cb): Make async.
-
- * evolution-storage.c (notify_bonobo_listener): Removed this broken
- broken function.
- (impl_Storage_async_create_folder): Make async, duplicate the listener
- instead of notifying it.
- (impl_Storage_async_remove_folder): Notify listener by hand.
- (e_marshal_NONE__POINTER_POINTER_POINTER_POINTER_POINTER): Return of the
- worst signal marshaller in Scotland.
- (class_init): Use the above marshaller for the create_folder signal.
-
-2001-08-30 Jeffrey Stedfast <fejj@ximian.com>
-
- * e-shell-folder-creation-dialog.c (entry_name_is_valid): Check
- for \r in the folder name, this is an invalid char. Also take a
- "reason" argument so we can inform the user why his folder name is
- invalid.
- (dialog_clicked_cb): Tell the user why the folder name is invalid.
-
-2001-08-28 Ettore Perazzoli <ettore@ximian.com>
-
- [Fix #8125, Evolution crashes while starting.]
-
- * e-shortcuts.c (load_shortcuts): Handle the case when there is no
- URI without crashing. Only add shortcuts when they are evolution:
- URIs.
-
-2001-08-27 Ettore Perazzoli <ettore@ximian.com>
-
- * Evolution-ShellComponent.idl: Studlycapsize all the IDs that are
- not.
- * Evolution-common.idl: Likewise.
- * evolution-activity-client.c: Updated accordingly.
- * evolution-shell-component.c: Likewise.
- * evolution-storage.c: Likewise.
- * e-activity-handler.c: Likewise.
- * e-component-registry.c: Likewise.
- * e-corba-storage.c: Likewise.
- * e-shell-user-creatable-items-handlers.c: Likewise.
-
- * e-local-storage.c (remove_folder): Remove unused variable.
-
- * e-shell-view.c (update_for_current_uri): Assign zero to
- `unread_count', not NULL.
-
- * e-shell-importer.c (import_druid_finish): Remove unused
- variable.
-
- * e-shell-user-creatable-items-handler.c: #include
- "e-corba-utils.h".
-
- * e-shell-startup-wizard.c: #include "e-shell-startup-wizard.h".
-
- * e-shell-startup-wizard.h: #include <glib.h>
-
-2001-08-24 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view.c (update_for_current_uri): Also display the unread
- count in the title bar.
-
-2001-08-24 Ettore Perazzoli <ettore@ximian.com>
-
- * e-setup.c (copy_default_stuff): Remove the stupid "do you want
- me to initialize stuff?" dialog.
-
-2001-08-24 Ettore Perazzoli <ettore@ximian.com>
-
- * e-storage-set-view.c: Change the `selected_row_path' to be
- non-const.
- (destroy): Free it.
- (e_storage_set_view_set_current_folder): Set the selected_row_path
- to be this path.
- (tree_drag_begin): Free the selected_row_path and strdup() the
- value we assign.
-
-2001-08-24 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view.c (e_shell_view_remove_control_for_uri): Ooops.
- Save the pointer to the control for use after the view struct is
- freed.
-
-2001-08-24 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view.c: New struct `View'. Replace `uri_to_control' in
- `EShellViewPrivate' with `uri_to_view'.
- (view_new): New.
- (hash_forall_destroy_view): New, replacing
- `hash_forall_destroy_control'.
- (destroy): Updated to match the uri_to_control -> uri_to_view
- changes.
- (socket_destroy_cb): Likewise.
- (get_view_for_uri): Renamed from `get_control_for_uri'. Return a
- View instead of a GtkWidget.
- (show_existing_view): Updated to use `get_view_from_uri', get a
- @view instead of a @control.
- (e_shell_view_display_uri): Updated to use `uri_to_view' instead
- of `uri_to_control'.
- (e_shell_view_remove_control_for_uri): Likewise.
-
-2001-08-24 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view.c (update_folder_title_bar): Changed to get a
- @title and a @type.
- (update_for_current_uri): Updated accordingly.
- (update_window_icon): Get a @type instead of a @folder.
- (update_for_current_uri): Updated accordingly.
-
-2001-08-24 Ettore Perazzoli <ettore@ximian.com>
-
- [Fix #5978, "If a component dies, it's toolbar buttons remain".]
-
- * e-shell-view.c (socket_destroy_cb): If the view belongs to a
- toplevel storage node, get the right type information with
- `e_storage_get_toplevel_node_uri()' instead of trying to get the
- [non-existing] folder for it.
-
-2001-08-24 Iain Holmes <iain@ximian.com>
-
- * e-shell-startup-wizard.c (druid_event_notify_cb): Implement the other
- missing events.
- (make_identity_page):
- (make_receive_page):
- (make_extra_page):
- (make_transport_page):
- (make_management_page): Add the GnomeDruidPages to the page_list.
-
-2001-08-24 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shortcuts-view.c: Added accelerators for the right-click
- shortcut menu.
-
-2001-08-23 Zbigniew Chyla <cyba@gnome.pl>
-
- * e-shortcuts.c (e_shortcuts_add_default_group): Convert names of the
- default group and shortcuts to UTF-8 (still no U_ :().
-
-2001-08-23 Zbigniew Chyla <cyba@gnome.pl>
-
- * e-shortcuts-view.c (destroy_group_cb): Convert the name of the group
- to GTK+ locale before displaying it in a dialog.
-
-2001-08-23 Ettore Perazzoli <ettore@ximian.com>
-
- * e-storage-set-view.c (tree_drag_data_received): If we get no
- data, don't notify the receiving component at all.
-
-2001-08-23 Ettore Perazzoli <ettore@ximian.com>
-
- [Fix #5736, crashing when copying a message with drag and drop.]
-
- * e-storage-set-view.c (tree_drag_data_received): Handle NULL data
- gracefully.
-
-2001-08-22 Ettore Perazzoli <ettore@ximian.com>
-
- * e-storage.c (e_storage_async_xfer_folder): If the remove_source
- is %TRUE and destination is a descendant of the parent, pass an
- `E_STORAGE_CANTMOVETODESCENDANT' error code to the callback.
-
- * e-storage.h: New value `E_STORAGE_CANTMOVETODESCENDANT' in
- `EStorageResult'.
-
-2001-08-22 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-folder-commands.c
- (folder_selection_dialog_folder_selected_callback): Actually
- return if the folder is being moved into one of its descendants.
-
-2001-08-22 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-folder-title-bar.c (label_realize_callback): `#if 0'ed
- out.
- (make_bold): Likewise.
- (e_shell_folder_title_bar_construct): Don't call it.
-
- * e-local-storage.c (component_async_remove_folder_callback): Only
- remove the directory if the component succeeds.
-
-2001-08-22 Peter Williams <peterw@ximian.com>
-
- * e-local-storage.c (async_xfer_folder_callback): Fix the improper
- construction of the new folder's physical URI.
-
-2001-08-22 Ettore Perazzoli <ettore@ximian.com>
-
- * e-local-storage.c (remove_folder): Don't remove the folder
- directory here.
- (component_async_remove_folder_callback): Remove it here instead.
-
-2001-08-22 Ettore Perazzoli <ettore@ximian.com>
-
- [Fix #7775, crash trying to do New Task]
-
- * e-shell-user-creatable-items-handler.c (verb_fn): Make sure we
- don't pass NULL strings to
- `GNOME_Evolution_ShellComponent_userCreateNewItem()'.
-
-2001-08-21 Damon Chaplin <damon@ximian.com>
-
- * e-gray-bar.c (endarken_style): unref the rc_style.
-
-2001-08-21 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell.c: #include "e-shell-startup-wizard.h".
-
- * e-shell-startup-wizard.h: New.
-
-2001-08-21 Iain Holmes <iain@ximian.com>
-
- * e-shell-startup-wizard.c (make_mail_dialog_pages): Show an error
- window if mailer doesn't respond.
-
-2001-08-21 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-folder-title-bar.c (label_realize_callback): Fix a leak:
- unref the EFont after we have used it. Also, don't crash if
- `e_font_to_gdk_font()' returns NULL. [This should fix #7666,
- Folder View crashes Evo.]
-
-2001-08-21 Iain Holmes <iain@ximian.com>
-
- * e-shell-importer.c (start_import): Don't print a NULL.
-
-2001-08-20 Iain Holmes <iain@ximian.com>
-
- * e-shell-importer.c (import_druid_finish): Do the correct thing when
- the new folder button is clicked.
- (folder_selected): Import the file.
- (folder_cancelled): Kill the dialog.
-
-2001-08-18 Iain Holmes <iain@ximian.com>
-
- * e-shell-startup-wizard.c (make_identity_page):
- (make_receive_page):
- (make_extra_page):
- (make_transport_page):
- (make_management_page): Check that the mailer has been inited correctly.
- (e_shell_startup_wizard_create): If some of the pages could not be
- created, just stop trying to show the startup wizard.
-
-2001-08-20 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view.c (e_shell_view_load_settings): Don't set the
- paneds' positions if the respective left-hand elements [i.e. the
- shortcut bar and the folder bar] are hidden.
- (e_shell_view_show_folder_bar): Set the paned position to zero
- when hiding.
- (e_shell_view_show_shortcut_bar): Likewise.
-
-2001-08-20 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-startup-wizard.c (finish_func): Don't free the returned
- displayname.
-
-2001-08-20 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view.c (pop_up_folder_bar): Make sure we display a pin
- when we are popped up.
-
-2001-08-20 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view.c (setup_widgets): Don't set the paned tree
- position.
-
-2001-08-19 Chris Toshok <toshok@ximian.com>
-
- * evolution-shell-component.c (impl__get_supported_types): fill
- the corba sequence for the accepted_dnd_types.
-
-2001-08-20 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view.c (setup_storage_set_subwindow): Don't show the
- vbox here.
- (setup_widgets): Don't show the storage_set_view_box here.
-
-2001-08-20 Ettore Perazzoli <ettore@ximian.com>
-
- * evolution-test-component.c: Added display_name and description
- to the type.
-
- * evolution-shell-component.c (impl__get_supported_types): Pass
- `display_name' and `description' here.
- (evolution_shell_component_construct): Likewise.
-
- * evolution-shell-component.h: New members `display_name',
- `description' in `EvolutionShellComponentFolderType'.
-
- * e-component-registry.c (register_type): New args @description
- and @display_name. Pass to
- `e_folder_type_registry_register_type()'.
- (register_component): Pass the values returned in the sequence
- from __get_supported_types.
-
- * e-folder-type-registry.c: New members `display_name' and
- `description' in `struct _FolderType'.
- (folder_type_new): New args @description and @display_name.
- Initialize the respective fields in the `FolderType' accordingly.
- (folder_type_free): Free `display_name' and `description'.
- (register_folder_type): New args @display_name, @description.
- (e_folder_type_registry_register_type): New args @display_name,
- @description.
- (e_folder_type_registry_get_description_for_type): New.
- (e_folder_type_registry_get_display_name_for_type): New.
-
- * Evolution-ShellComponent.idl: Added `display_name' and
- `description' fields to the `FolderType' struct.
-
-2001-08-19 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell.c (destroy): Put the bonobo_object_release_unref() for
- the db at the top in an attempt to fix #7542.
-
-2001-08-19 Ettore Perazzoli <ettore@ximian.com>
-
- * e-summary-storage.c (e_summary_storage_new): Change type of
- toplevel node from "Summary" to "summary". [All the other folder
- types use lowercase names.]
-
- * e-shortcuts.c (load_shortcuts): Also use the display name for
- the storage.
-
-2001-08-19 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shortcuts.c (load_shortcuts): Use xmlMemStrdup() to override
- the type as it's expected to be allocated by libxml later on.
- Also, get the icon for the storage if the shortcut points to a
- storage.
-
- * e-storage-set-view.c (etree_icon_at): Don't special case the
- Summary storage. Rather, use `e_storage_get_toplevel_node_type()'
- for getting the type of the node.
-
- * e-shortcuts-view-model.c (get_icon_for_item): New helper
- function.
- (shortcuts_update_shortcut_cb): Use it.
- (shortcuts_new_shortcut_cb): Use it.
- (load_group_into_model): Use it.
-
-2001-08-18 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view.c: New constant `MIN_POPUP_TREE_WIDTH'.
- (pop_up_folder_bar): Make sure the pop-up is always this size or
- more.
- (setup_widgets): Pass %FALSE for @shrink to `e_paned_pack1()'.
- (reparent_storage_set_view_box_and_destroy_popup): Likewise.
-
-2001-08-18 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view-menu.c (shortcut_bar_visibility_changed_cb): New,
- replacing `shortcut_bar_mode_changed_cb'.
- (folder_bar_visibility_changed_cb): New, replacing
- `folder_bar_mode_changed_cb'.
- (command_toggle_folder_bar): Use `e_shell_view_show_folder_bar()'
- instead of `e_shell_view_set_folder_bar_mode()'.
- (command_toggle_shortcut_bar): Use
- `e_shell_view_show_shortcut_bar()' instead of
- `e_shell_view_set_shortcut_bar_mode()'.
- (e_shell_view_menu_setup): Updated for the
- "shortcut_bar_visibility_changed" and
- "folder_bar_visibility_changed" signals and the above changes.
-
- * e-shell-view.c: New member `folder_bar_popup' in
- `EShellViewPrivate'. Replaced `folder_bar_mode' and
- `shortcut_bar_mode' with `folder_bar_shown' and
- `shortcut_bar_shown', respectively.
- (init): Updated to initialize these correctly.
- (reparent): New helper function.
- (reparent_storage_set_view_box_and_destroy_popup): New helper
- function.
- (popdown_transient_folder_bar): Updated to use the
- `folder_bar_popup'.
- (folder_bar_popup_map_callback): Renamed from
- `storage_set_view_box_map_cb'.
- (e_shell_view_set_shortcut_bar_mode): Removed.
- (e_shell_view_set_folder_bar_mode): Removed.
- (e_shell_view_show_shortcut_bar): New. All the calls to
- `e_shell_view_set_shortcut_bar_mode()' replaced with calls to this
- one.
- (e_shell_view_show_folder_bar): New. All the calls to
- `e_shell_view_set_folder_bar_mode()' replaced with calls to this
- one.
- (e_shell_view_folder_bar_shown): New. All the calls to
- `e_shell_view_get_folder_bar_mode()' replaced with calls to this
- one.
- (e_shell_view_shortcut_bar_shown): New. All the calls to
- `e_shell_view_get_shortcut_bar_mode()' replaced with calls to this
- one.
- (class_init): Replace signal `folder_bar_mode_changed' with
- `folder_bar_visibility_changed' and `shortcut_bar_mode_changed'
- with `shortcut_visibility_changed'.
- (e_shell_view_save_settings): Use keys "ShortcutBarShown" and
- "FolderBarShown" instead of "ShortcutBarMode" and "FolderBarMode",
- respectively.
- (e_shell_view_load_settings): Likewise.
-
- * e-shell-view.h: Removed enum `EShellViewSubwindowMode'. Renamed
- signal `shortcut_bar_mode_changed' to
- `shortcut_bar_visibility_changed' and `folder_bar_mode_changed' to
- `folder_bar_visibility_changed'.
-
-2001-08-17 Iain Holmes <iain@ximian.com>
-
- * Makefile.am: Add the Evolution-Wizard.idl file
-
-2001-08-17 Iain Holmes <iain@ximian.com>
-
- * e-shell-folder-selection-dialog.c (folder_creation_dialog_result_cb):
- Check the priv isn't NULL before dereferencing it.
-
-2001-08-17 Ettore Perazzoli <ettore@ximian.com>
-
- * evolution-shell-client.c
- (evolution_shell_client_set_line_status): g_return_if_fail(), not
- g_return_val_if_fail().
-
-2001-08-17 Ettore Perazzoli <ettore@ximian.com>
-
- * evolution-shell-client.c
- (evolution_shell_client_get_local_storage): Added some g_warnings
- for when we return CORBA_OBJECT_NIL; this might help to figure out
- what is wrong with bug #6625. Also, added a missing
- CORBA_exception_free().
-
-2001-08-17 Jeffrey Stedfast <fejj@ximian.com>
-
- * e-shell.c (e_shell_construct): Don't destroy the splash twice.
-
- * e-local-storage.c (setup_folder_as_stock): utf_name should not
- be const as e_utf8_from_locale_string() returns an allocated
- buffer.
-
-3001-08-17 Iain Holmes <iain@ximian.com>
-
- * Evolution.idl: Add Evolution-Wizard.idl
-
- * Evolution-Wizard.idl: New file implementing a wizard interface.
-
- * Makefile.am: Add the wizard stuff and the startup dialog stuff
-
- * e-shell.c (e_shell_construct): Hide the splash screen and try to
- start the startup assistant.
-
- * glade/Makefile.am: Add the evolution-startup-wizard.glade
-
-2001-08-16 Jason Leach <jleach@ximian.com>
-
- * e-shell-view-menu.c (authors): Add myself.
-
- * e-shell-view.c (folder_selected_cb): Desensitize the
- move/copy/delete/rename in the menus (including right click) for
- stock folders.
-
- * Evolution-Icon.idl: Actually remove this file from CVS (its
- contents are now in Evolution-common.idl).
-
-2001-08-16 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view-menu.c: Remove the Help menu verbs and add a
- "HelpFAQ" verb.
- (command_help): Removed.
- (command_help_faq): New, implementation for the "HelpFAQ" verb.
-
-2001-08-16 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-folder-title-bar.c (label_realize_callback): New
- callback for the realize signal.
- (make_bold): New. Hooks up the label_realize_callback.
- (e_shell_folder_title_bar_construct): Make the name of the folder
- bold using it.
-
-2001-08-16 Ettore Perazzoli <ettore@ximian.com>
-
- * e-gray-bar.c (endarken_style): Just hardcode the colors.
-
- * e-shell-folder-title-bar.c (set_title_bar_label_style): New.
- (e_shell_folder_title_bar_construct): Call it on the labels here,
- so we get nice white labels.
-
-2001-08-16 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell.c (e_shell_component_maybe_crashed): s/the view for `%s'
- have/the views for `%s' have/.
-
-2001-08-16 Ettore Perazzoli <ettore@ximian.com>
-
- * e-storage-set-view.c (etree_icon_at): Remove debugging message.
-
-2001-08-15 Jason Leach <jleach@ximian.com>
-
- * e-shell-view-menu.c (command_help): Don't hardcode/build a help
- URI here, use gnome_help_display() instead, which will figure out
- what language the user needs, etc.
- (help_verbs): Adapt these menu items to above changes, they don't
- need to pass "evolution/foo.html" to command_help, just
- "foo.html".
-
- * e-folder.c (e_folder_set_child_highlight): Emit a "changed"
- signal at the end of this function. Bug #7232.
-
-2001-08-15 Aaron Weber <aaron@ximian.com>
-
- * e-shell-view-menu.c (command_about_box): Changed help menus to
- point to evolution/ and not evolution-guide/.
-
-2001-08-15 Iain Holmes <iain@ximian.com>
-
- * e-summary-storage.c: s/My Evolution/Summary
-
- * e-storage-set-view.c: s/My Evolution/Summary
-
-2001-08-15 Jason Leach <jleach@ximian.com>
-
- * Evolution-Shell.idl: Add a new IDL function,
- Evolution::Shell::setLineStatus (in boolean). Bug #3030.
-
- * e-shell.c (impl_Shell_setLineStatus): Implementation of the
- above.
-
- * evolution-shell-client.c
- (evolution_shell_client_set_line_status): A wrapper function for
- the above, this is what a component can call to set the shell
- on/offline.
-
-2001-08-14 Dan Winship <danw@ximian.com>
-
- * evolution-storage.c (evolution_storage_new_folder): Use the
- passed-in unread_count.
-
- * e-corba-storage.c (impl_StorageListener_notifyFolderCreated):
- Pass the passed-in unread_count to e_storage_new_folder.
-
-2001-08-13 Ettore Perazzoli <ettore@ximian.com>
-
- * e-gray-bar.c (impl_style_set): Chain to the parent class.
- (endarken_style): Hardcode the colors here.
-
-2001-08-13 Anna Marie Dirks <anna@ximian.com>
-
- * importer/intelligent.c : Changed the "Evolution has found the
- following data sources" text in the import dialog to "Evolution
- can import data from the following files" in an attempt to
- increase user-friendliness.
-
-2001-08-13 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view.c (setup_widgets): Add some little padding to the
- title bar so it looks nicer.
-
-2001-08-13 Ettore Perazzoli <ettore@ximian.com>
-
- [Fix #7109, Evolution crashes when the splash screen dialog is
- killed by clicking the "X" button.]
-
- * e-shell.c (e_shell_construct): Connect
- `gtk_widget_hide_on_delete()' correctly.
-
-2001-08-13 Anna Marie Dirks <anna@ximian.com>
-
- * importer/import.glade : Changed all instances of "druid"
- and "wizard" to "assistant".
-
-2001-08-13 Ettore Perazzoli <ettore@ximian.com>
-
- * main.c (idle_cb): Replaced the chained `if' statements with a
- `switch' statement for clarity. Also, don't ref the created
- shell, and release the object reference properly.
-
-2001-08-13 Ettore Perazzoli <ettore@ximian.com>
-
- * e-corba-shortcuts.c (shortcut_list_to_corba): set_release on the
- sequence, not the buffer.
-
-2001-08-13 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell.c (view_destroy_cb): Restore the shell reffing/unreffing
- here.
-
-2001-08-13 Peter Williams <peterw@ximian.com>
-
- * e-corba-shortcuts.c (shortcut_list_to_corba): Don't cause an abort
- if the shortcut group is empty.
-
-2001-08-13 Ettore Perazzoli <ettore@ximian.com>
-
- * Makefile.am (IDLS): Add `Evolution-common.idl'.
-
-2001-08-13 Dan Winship <danw@ximian.com>
-
- * evolution-shell-component.c (init): Initialize
- priv->user_creatable_item_types. [Score: g_new: 0, g_new0: 2]
-
-2001-08-13 Jason Leach <jleach@ximian.com>
-
- * e-local-storage.c (remove_folder_directory): Remove unused
- variable @folder.
-
- * e-shell-folder-commands.c (e_shell_command_add_to_shortcut_bar):
- Give icons to shortcuts added via Right-click->Add to Shortcut
- Bar.
-
-2001-08-12 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-folder-selection-dialog.c
- (e_shell_folder_selection_dialog_construct): Grab focus on the
- storage set view.
-
-2001-08-12 Ettore Perazzoli <ettore@ximian.com>
-
- * e-local-storage.c (setup_folder_as_stock): Use utf 8 to set the
- name.
-
-2001-08-12 Ettore Perazzoli <ettore@ximian.com>
-
- * e-storage-set-view.c (etree_value_at): Remove debugging message.
-
-2001-08-12 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view.c (setup_widgets): Put the folder title bar into an
- EGrayBar.
-
- * e-gray-bar.c: New.
- * e-gray-bar.h: New.
-
-2001-08-12 Ettore Perazzoli <ettore@ximian.com>
-
- [Finally! Fix #413, "Support for stock folders", and #786, "i18n:
- default folder names are not translated".]
-
- * e-local-storage.c (setup_folder_as_stock): New helper function.
- (setup_stock_folders): Use it to set the default folders as
- "stock" folders. This will give them a translated name and also
- make them unmodifiable.
- (load_all_folders): Call `setup_stock_folders()' here.
-
- * e-shell-folder-commands.c (delete_cb): Display an error dialog
- if the deletion fails.
- (e_shell_command_delete_folder): Pass the shell view to the delete
- callback.
-
- * e-storage.c (e_storage_result_to_string): Add a string for
- `E_STORAGE_CANTCHANGESTOCKFOLDER' as well.
-
- * e-local-storage.c (remove_folder): Don't allow a stock folder to
- be removed.
- (impl_async_xfer_folder): Don't allow a stock folder to be moved.
-
- * e-corba-storage.c (async_remove_folder): Don't allow a stock
- folder to be removed.
-
- * e-storage.h: New enum value `E_STORAGE_CANTCHANGESTOCKFOLDER' in
- `EStorageResult'.
-
- * e-folder.c: Make member `self_highlight' a :1 int. New :1 int
- member `is_stock'.
- (init): Init `is_stock' to %FALSE.
- (e_folder_set_is_stock): New.
- (e_folder_get_is_stock): New.
-
- * e-local-storage.c (bonobo_interface_update_folder_cb): For now,
- don't set the display name.
-
-2001-08-10 Ettore Perazzoli <ettore@ximian.com>
-
- * Evolution-common.idl: Add Folder struct here.
-
- * Evolution-Storage.idl: Removed Folder struct.
-
- * Evolution.idl: #include <Evolution-common.idl>, not
- <Evolution-Icon.idl>.
-
- * Evolution-common.idl: New.
-
- * Evolution-Icon.idl: Removed.
-
-2001-08-10 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-folder-commands.c (rename_clicked): `#if 0'ed out.
- (rename_cb): Likewise.
-
- * evolution-shell-component.c (destroy): Fixed a confusion between
- GList and GSList.
-
-2001-08-10 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-user-creatable-items-handler.c (component_free): Only
- free the `type_list' if not NULL.
- (setup_menu_xml): Deal with the case of `type_list' being NULL
- gracefully.
- (verb_fn): Same here.
- (add_verbs_to_ui_component): Likewise.
-
-2001-08-10 Ettore Perazzoli <ettore@ximian.com>
-
- [Fix #6787, Removing a storage with children and then re-adding it
- causes a crash.]
-
- * e-storage-set-view.c (convert_corba_drag_action_set_to_gdk):
- Removed `#if 0'ed function.
- (etree_node_destroy_func): New destroy function.
- (e_storage_set_view_construct): Set this as the new destroy
- function on the ETreeMemory.
-
-2001-08-09 Ettore Perazzoli <ettore@ximian.com>
-
- * evolution-test-component.c (user_create_new_item_callback):
- Updated to display the parent folder's URI and its type as well.
-
- * evolution-shell-component.c (impl_userCreateNewItem): Updated to
- get the @parent_folder_physical_uri and the @parent_folder_type.
- (class_init): Update the "user_create_new_item" signal to have
- @parent_folder_physical_uri and @parent_folder_type args.
-
- * e-shell-view.c (get_type_for_folder): Don't bork on a NULL
- @physical_uri_return.
- (e_shell_view_get_current_physical_uri): New.
- (e_shell_view_get_current_folder_type): New.
-
- * e-shell-user-creatable-items-handler.c
- (e_shell_user_creatable_items_handler_setup_menus): Replace
- @ui_component arg with a @shell_view arg. Set it on the
- UIComponent using gtk_object_set_data().
- (verb_fn): Pass the type and physical URI of the current folder;
- retrieve that from the shell_view got with gtk_object_get_data().
-
- * Evolution-ShellComponent.idl
- (userCreateNewItem): New args @parent_folder_uri,
- @parent_folder_type.
-
-2001-08-09 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shortcuts-view.c (show_new_group_dialog): Cast the toplevel to
- be passed to `e_request_string()' to GtkWindow, not GtkWidget.
- Also, remove unused variables.
- (get_efolder_from_shortcut): Constify @item_url.
- (get_storage_set_path_from_uri): Removed.
-
- * evolution-shell-component.c (destroy): `p' shall be a GList, not
- a GSList.
-
-2001-08-09 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view.c (e_shell_view_construct): Add the menu items
- using the EShellUserCreatableItemsHandler.
-
- * e-shell-user-creatable-items-handler.c: New.
- * e-shell-user-creatable-items-handler.h: New.
-
- * e-shell.c: New member `user_creatable_items_handler' in
- `EShellPrivate'.
- (init): Initialize to NULL.
- (destroy): Unref.
- (e_shell_construct): Create here.
- (e_shell_get_user_creatable_items_handler): New accessor.
- (setup_components): Add the registered components to the
- user_creatable_items_handler.
-
- * evolution-test-component.c (factory_fn): Add a couple sample
- user-creatable items.
- (user_create_new_item_callback): New callback for the
- "user_create_new_item" signal on the EvolutionShellComponent.
- (factory_fn): Connect.
-
- * e-shell.c (e_shell_get_component_registry): New.
-
- * evolution-shell-component.c: New enum value
- `USER_CREATE_NEW_ITEM'. New member `user_create_item_types' in
- `_EvolutionShellComponentPrivate'.
- (init): Init to NULL.
- (impl_destroy): Free it.
- (user_creatable_item_type_free): New helper function.
- (user_creatable_item_type_new): New helper function.
- (impl_userCreateNewItem): New, implementation for
- ::userCreateNewItem.
- (class_init): Install the "user_create_new_item" signal and the
- userCreateNewItem impl.
- (impl__get_external_uri_schemas): Renamed from
- `impl_ShellComponent__get_external_uri_schemas'.
- (impl___get_supported_types): Renamed from
- `impl_ShellComponent__get_supported_types'.
- (impl__get_user_creatable_item_types): New, implementation for the
- `user_creatable_item_types' attribute.
- (class_init): Install it.
- (evolution_shell_component_add_user_creatable_item): New.
-
- * evolution-shell-component.h: Added signal
- `user_create_new_item'.
-
- * Evolution-ShellComponent.idl: Added typedefs
- `UserCreatableItemType', `UserCreatableItemTypeList'. New
- attribute `user_creatable_item_types'.
- (userCreateNewItem): New.
-
-2001-08-09 Federico Mena Quintero <federico@ximian.com>
-
- * e-component-registry.c (destroy): Chain to the destroy handler
- in the parent class!
-
- * e-shortcuts-view-model.c (impl_destroy): Likewise. Sigh.
-
-2001-08-08 Ettore Perazzoli <ettore@ximian.com>
-
- [Fixes, among other things, #5705, "Ampersands not handled
- correctly in drag + drop". Thanks to Nat for actually discovering
- the problem.]
-
- * e-shortcuts.c (save_shortcuts): Use `xmlNewTextChild()' instead
- of `xmlNewChild()'.
-
- * e-local-folder.c (save_metadata): Use `xmlNewTextChild' instead
- of `xmlNewChild()'.
-
-2001-08-08 Ettore Perazzoli <ettore@ximian.com>
-
- * evolution-shell-component.c
- (fill_corba_sequence_from_null_terminated_string_array): Set the
- release flag on the sequence, and CORBA_string_dup() the strings
- anyway.
-
-2001-08-08 Ettore Perazzoli <ettore@ximian.com>
-
- * evolution-shell-component.c
- (impl_ShellComponent__get_supported_types): Set the release flag
- on the returned folder type list too.
-
- * evolution-activity-client.c (create_icon_from_pixbuf): Set the
- release flag on the sequence, not the struct that contains it.
-
-2001-08-08 Ettore Perazzoli <ettore@ximian.com>
-
- * e-corba-shortcuts.c (shortcut_list_to_corba): Set the release
- flag for the newly allocated sequence.
-
- * e-activity-handler.c (impl_operationStarted): Unref the
- icon_pixbuf.
-
- * e-task-widget.c (impl_destroy): g_free the private struct.
-
-2001-08-08 Jason Leach <jleach@ximian.com>
-
- * e-storage-set-view.c (etree_icon_at): Set the My Evolution icon
- for the folder tree correctly.
-
-2001-08-08 Ettore Perazzoli <ettore@ximian.com>
-
- * evolution-shell-component.c
- (impl_ShellComponent__get_supported_types): Fill the CORBA
- sequence once.
-
- * e-activity-handler.c (activity_info_free): Unref the icon.
-
-2001-08-08 Ettore Perazzoli <ettore@ximian.com>
-
- * e-task-bar.c (e_task_bar_prepend_task): Sigh. If the function
- says "prepend", of course the function to call is
- `g_list_prepend()', not `g_list_append()'. You dumbass.
-
-2001-08-08 Jason Leach <jleach@ximian.com>
-
- * e-shell-folder-creation-dialog.c
- (storage_set_view_storage_selected_cb): Set the sensitivity for
- the OK button when a storage is selected too. Bug #6473.
-
-2001-08-08 Ettore Perazzoli <ettore@ximian.com>
-
- * evolution-activity-client.c (create_icon_from_pixbuf): Set the
- release flag on the returned icon to %TRUE.
-
-2001-08-07 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shortcuts.c (load_shortcuts): If the shortcut points to some
- folder in the storage set, get the type from it.
-
- * e-storage-set.c (signal_new_folder_for_all_folders_under_paths):
- New helper function.
- (signal_new_folder_for_all_folders_in_storage): New helper
- function.
- (e_storage_set_add_storage): Call the latter to emit a
- "new_folder" signal for all the folders contained in the newly
- added storage.
-
-2001-08-07 Ettore Perazzoli <ettore@ximian.com>
-
- [This should fix #5407, application crash on re-opening.]
-
- * e-shell.c (e_shell_construct): Call
- `gtk_widget_hide_on_delete()' on the splash.
-
- * e-splash.c (e_splash_add_icon): Don't check for destruction
- here.
- (e_splash_set_icon_highlight): Not even here.
- (button_press_event): Use a GTK+ cast.
-
-2001-08-07 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shortcuts-view-model.c (load_group_into_model): Get the icon
- from the folder type registry.
- (shortcuts_new_shortcut_cb): Likewise.
- (shortcuts_update_shortcut_cb): Likewise.
-
- * e-shortcuts-view.c (icon_callback): Removed.
- (e_shortcuts_view_construct): Don't set the icon callback anymore.
-
-2001-08-07 Jason Leach <jleach@ximian.com>
-
- * e-storage-set-view.c (etree_value_at): Don't use a leaky hash to
- get folder names with unread count, use gtk_object_set_data_full
- and gtk_object_get_data on the EFolder.
- (etree_icon_at): Give the "My Evolution" storage an icon through a
- non-generic way. Will be replaced by a generic method when other
- storages get icons too.
-
-2001-08-07 Ettore Perazzoli <ettore@ximian.com>
-
- * evolution-activity-client.c
- (evolution_activity_client_construct): Free the CORBA version of
- the animated icon.
-
-2001-08-07 Not Zed <NotZed@Ximian.com>
-
- * evolution-activity-client.c (impl_destroy): Unref the listener
- when done.
-
-2001-08-06 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-folder-title-bar.c: Remove member `hbox' from `struct
- _EShellFolderTitleBarPrivate'.
- (make_icon_pixmap): Removed.
- (rgb_from_gdk_color): Removed.
- (endarken_style): Removed.
- (set_style_cb): Removed.
- (create_arrow_pixmap): Renamed from `create_icon_pixmap'.
- (get_max_clipped_label_width): New helper function.
- (size_allocate_icon): New helper function.
- (size_allocate_button): New helper function.
- (size_allocate_label): New helper function.
- (add_icon_widget): New helper function.
- (realize): Changed to use `add_icon_widget()'.
- (size_allocate): New function, handler for the ::size_allocate
- method.
- (class_init): Install it.
- (e_shell_folder_title_bar_construct): Changed so that the widget
- get added to this widget instead of adding an hbox to it and
- adding the widgets to the hbox.
- (e_shell_folder_title_bar_set_icon): Changed to use
- `add_icon_widget()'.
-
- * e-shell-folder-title-bar.h, e-shell-folder-title-bar.c: Changed
- to derive from GtkHBox, not GtkEventBox.
-
-2001-08-06 Christopher James Lahey <clahey@ximian.com>
-
- * e-storage-set-view.c (tree_drag_motion): Turn on highlighting on
- a row by row basis.
-
-2001-08-04 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-folder-title-bar.c (e_shell_folder_title_bar_construct):
- Add some padding to the label so that the title doesn't move
- around when you switch between pop-up and non-pop-up folder bar.
- Also, change all the GtkLabels to be GtkClippedLabels instead.
- (e_shell_folder_title_bar_set_title): Updated to use
- EClippedLabels instead of GtkLabels.
- (e_shell_folder_title_bar_set_folder_bar_label): Likewise.
-
- * e-shell.c (impl_Shell__get_displayName): New, implementation for
- the `displayName' attribute.
-
- * Evolution-Shell.idl: Added readonly attribute `displayName' to
- get the canonicalized X11 display name for the shell.
-
- * e-shell.c (e_shell_construct): Ooops. Return
- `E_SHELL_CONSTRUCT_RESULT_CANNOTREGISTER' if the OAF registration
- fails, not `E_SHELL_CONSTRUCT_RESULT_GENERICERROR'.
-
- * e-shortcuts-view.c (rename_group_cb): Get the toplevel from the
- shortcuts view, not the widget.
- (rename_shortcut_cb): Likewise.
- (show_new_group_dialog): Changed to use `e_request_string()'.
-
- * evolution-test-component.c: Add the %FALSE value for the
- `user_creatable' field in the `folder_types' entry.
-
- * evolution-shell-client.c: New member `shortcuts_interface' in
- `EvolutionShellClientPrivate'.
- (destroy): Unref it if not CORBA_OBJECT_NIL.
- (init): Init to CORBA_OBJECT_NIL.
- (query_shell_interface): New helper function to query an interface
- on the shell and spit out warnings if it fails.
- (evolution_shell_client_construct): Use it to query the ::Activity
- interface. Also query the ::Shortcuts interface and set the
- `shortcuts_interface' member to point to it.
-
- * e-shell.c: New member `corba_shortcuts' in `EShellPrivate'.
- (init): Init to NULL.
- (setup_shortcuts_interface): Helper function to add the
- ::Shortcuts CORBA interface to the shell.
- (e_shell_construct): Call it.
-
- * e-corba-shortcuts.c, e-corba-shortcuts.h: New objects
- implementing the `Evolution::Shortcuts' CORBA interface.
-
- * Evolution-Shortcuts.idl: New interface for accessing the
- shortcuts in the shell.
-
- * e-shell.c (e_shell_get_config_db): Moved down.
-
-2001-08-03 Christopher James Lahey <clahey@ximian.com>
-
- * e-storage-set-view.c (tree_drag_data_received): Some paths here
- don't set handled properly so lets initialize it to FALSE.
- (update_folder_with_unread_hash, etree_value_at): constified
- folder_name here.
- (init): Initialize priv->drag_path here to NULL.
-
-2001-08-03 Jason Leach <jleach@ximian.com>
-
- [Removing Evolution::LocalStorage interface, abstracting the
- unread counts from a folder's name, also abstract unread counts
- from a shortcut's name. Fixes #4489 and #5497]
-
- * e-shortcuts.c (shortcut_item_new): Take an unread_count argument
- now.
- (shortcut_item_update): Ditto.
-
- * e-shortcuts-view-model.c (get_name_with_unread): Get a string
- containing a shortcut name and it's unread, because these are
- abstracted now.
- (load_group_into_model): Use the above function to make shortcuts
- that have unread counts.
-
- * e-storage-set-view.c (update_folder_with_unread_hash): Keep a
- hash of folder names with unread counts, because the folder name
- and it's unread count are to be separated, only the ETree is
- supposed to present it as one string.
-
- * e-shell-view.c: Renamed EShellView::view_title_bar to
- folder_title_bar, to closer match the
-
- * e-shell-view-menu.c (new_shortcut_dialog_folder_selected_cb):
- Make a shortcut with the unread count.
-
- * e-shell-folder-commands.c (e_shell_command_add_to_shortcut_bar):
- Make a shortcut with the unread count.
-
- * e-local-storage.c: Updated for API changes.
-
- * e-folder.c (e_folder_get_unread_count): New function, does what
- it says.
- (e_folder_set_unread_count): Ditto.
-
- * e-corba-storage.c (impl_StorageListener_new_folder): Renamed to
- match the IDL function name.
- (impl_StorageListener_update_folder): Ditto.
- (impl_StorageListener_removed_folder): Ditto.
-
- * Evolution-Storage.idl (struct Folder): Replace the boolean
- highlighted with a long unread_count.
- (updateFolder): Brought in from the now dead
- Evolution::LocalStorage.
-
- * Evolution-Shell.idl (getLocalStorage): Return a Storage instead
- of a LocalStorage.
-
- * Evolution-LocalStorage.idl: Removed, no longer needed, only used
- function, updateFolder, has been moved into Evolution::Storage
- interface.
-
- * evolution-local-storage.[ch]: Ditto.
-
- * evolution-storage.c (impl_Storage_updateFolder): Implementation
- of the updateFolder taken from ::LocalStorage.
- (class_init): New "update_folder" signal, taken from
- evolution-local-storage.c too.
- (evolution_storage_update_folder): Take an @unread_count int
- instead of a @highlighted boolean.
- (evolution_storage_new_folder): Same for here.
- (evolution_storage_update_folder_by_uri): And here.
-
- * evolution-storage-listener.h: "update_folder" signal no longer
- sends a @highlighted boolean.
-
-2001-08-03 Jason Leach <jleach@ximian.com>
-
- * e-shell-view-menu.c (update_offline_menu_item): Use Jakub's new
- "Work Online" icon and fix a typo.
-
-2001-08-03 Ettore Perazzoli <ettore@ximian.com>
-
- [Fix #6232, the thirty-four-splash-screens-at-startup bug.]
-
- * e-shell.c (setup_local_storage): Add an E_STORAGE() cast to
- prevent a warning.
-
- * main.c (idle_cb): Only try to activate from the shell ID if the
- result is `E_SHELL_CONSTRUCT_RESULT_CANNOTREGISTER'; if there is a
- different error, spit out a dialog box with a description of it
- and exit instead.
-
- * e-shell.c (e_shell_construct): Return an `EShellConstructResult'
- describing what kind of result we had. Show the splash after the
- DB has been reached, not before.
- (e_shell_construct_result_to_string): New function to get a
- descriptive string out of an `EShellConstructResult'.
- (e_shell_new): New arg @construct_result_return to return a
- description of the result of the operation.
-
- * e-shell.h: New enum `EShellConstructResult'.
-
- * e-shell.c (impl_Shell_createNewView): Raise `InternalError'
- instead of crashing if the shell_view returns a CORBA_OBJECT_NIL.
-
- * Evolution-Shell.idl: New exception `InternalError'.
- `createNewView' and `handleURI' can raise it.
-
-2001-08-03 Ettore Perazzoli <ettore@ximian.com>
-
- * e-storage-set-view.c (storage_sort_callback): Put the storage
- named E_SUMMARY_STORAGE_NAME on top.
-
- * e-shell.c: New member `summary_storage' in `EShellPrivate'.
- (init): Init to NULL.
- (destroy): Unref if not NULL.
-
- * e-summary-storage.c: New.
- * e-summary-storage.h: New.
-
- * e-storage-set-view.c: New #define `ROOT_NODE_NAME', defined to
- be "/RootNode".
- (e_storage_set_view_set_show_folders): Use that instead of "My
- Evolution".
- (e_storage_set_view_construct): Hide the root node. Use
- `ROOT_NODE_NAME' instead of "My Evolution".
-
- * e-shortcuts-view.c (icon_callback): No bad special hack for "My
- Evolution" here.
-
- * e-shell-view.c (update_window_icon): Remove kludgey
- @is_my_evolution arg and stop doing special "My Evolution" things.
- (update_folder_title_bar): Likewise.
- (update_for_current_uri): Don't do special "My Evolution" things
- here either.
- (get_control_for_uri): Don't do the "My Evolution" hack here.
-
-2001-08-03 Ettore Perazzoli <ettore@ximian.com>
-
- * e-storage-set-view.c (tree_drag_data_received): Call
- `gtk_drag_finish()' here.
-
-2001-08-03 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-offline-handler.c (progress_listener_servant_free):
- Actually __fini the servant and deactivate the object too.
- (component_info_free): Updated accordingly [i.e. don't do the
- deactivation stuff here].
-
-2001-08-03 Ettore Perazzoli <ettore@ximian.com>
-
- [Fixes #4663, startup crash.]
-
- * e-shell.c (e_shell_construct): Make sure the pointer to the db
- object is CORBA_OBJECT_NIL if `bonobo_get_object()' raises an
- exception.
-
-2001-08-03 Ettore Perazzoli <ettore@ximian.com>
-
- [Fixes #3818, crash when going off-line.]
-
- * e-shell-offline-handler.c (component_info_free): Also call
- `PortableServer_POA_deactivate_object()' on the progress listener
- object so it gets deactivated.
-
-2001-08-02 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell.c (e_shell_construct): Spit out a warning if we cannot
- resolve "Bonobo/ConfigDatabase" on "wombat:". Also, register on
- OAF only after we are sure we are not going to return FALSE.
-
-2001-08-01 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view.c (switch_on_folder_tree_click): Set the
- `set_folder_uri' to NULL when freeing it.
-
- * e-task-bar.c (e_task_bar_remove_task): Just destroy the widget.
- No need to `gtk_container_remove()' it.
-
-2001-08-01 Jeffrey Stedfast <fejj@ximian.com>
-
- * e-shell-view-menu.c (command_new_folder): Do a NULL-check on
- current_uri - socket is being closed? (as per the comments for the
- NULL-check in e-shell-view.c:socket_destroy_cb).
-
-2001-07-31 Ettore Perazzoli <ettore@ximian.com>
-
- * evolution-activity-client.c: Removed debugging messages.
-
-2001-07-31 Not Zed <NotZed@Ximian.com>
-
- * evolution-activity-client.c (evolution_activity_client_update):
- Also update have_pending_update before calling corba, as below.
-
-2001-07-30 Ettore Perazzoli <ettore@ximian.com>
-
- [This should fix #5110, shell crash when switching folders.]
-
- * evolution-activity-client.c (update_timeout_callback): Set the
- `have_pending_update' flag before doing the CORBA call.
- (evolution_activity_client_update): Set the timeout before doing
- the CORBA call.
-
-2001-07-30 Jason Leach <jleach@ximian.com>
-
- * e-shortcuts-view.c (rename_group_cb): Remember the current group
- so after renaming a group it doesn't flip to the next group. Bug
- #3857.
-
- * e-shortcuts.c (e_shortcuts_rename_group): Comparing two
- separately allocated strings, use strcmp() instead of !=.
-
-2001-07-30 Jason Leach <jleach@ximian.com>
-
- * e-shell-folder-creation-dialog.c (async_create_cb): If we can't
- create a folder because it already exists, select that folder that
- exists. Bug #1716.
-
-2001-07-30 Frederic Crozat <fcrozat@mandrakesoft.com>
-
- * main.c (main): call gconf_init if gtkhtml is compiled with gconf
- support.
-
- * Makefile.am (INCLUDES): add $(GTKHTML_CFLAGS) since we might
- need to link with GConf (if gtkhtml is compiled with GConf
- support)
-
-2001-07-26 Ettore Perazzoli <ettore@ximian.com>
-
- * evolution-activity-client.c (impl_destroy): Remove the source
- for the timeout *before* invoking the CORBA method, as we might
- get the timeout callback while invoking the CORBA method, thus
- screwing things up.
-
- * evolution-shell-component-client.c (destroy_listener_interface):
- New helper function.
- (dispatch_callback): Use it.
- (impl_destroy): Call it when destroying the listener interface
- instead of just freeing the servant.
-
-2001-07-26 Jason Leach <jleach@ximian.com>
-
- * e-shell-view-menu.c (update_offline_menu_item): Little UI thing:
- capitalize the words Offline/Online for the File menu.
-
-2001-07-25 Jason Leach <jleach@ximian.com>
-
- * e-shell-folder-selection-dialog.c (folder_selected_cb): New
- function. When a folder is selected set the OK button to be
- sensitive (but before that have it desensitized). Bug #5483.
-
-2001-07-25 Jason Leach <jleach@ximian.com>
-
- * e-shortcuts-view.c (icon_callback): A warning fix from Jacob.
- Bug #5057.
-
- * Makefile.am (INCLUDES): $(BONOBO_CONF_CFLAGS) was here twice,
- took out one of them.
-
- * e-shell-view.c (socket_destroy_cb): Mem leak fix. Thanks to the
- amazing Jacob B. Bug #5054.
-
-2001-07-25 Jason Leach <jleach@ximian.com>
-
- * e-task-widget.c: #include <libgnome/gnome-defs.h> and
- <libgnome/gnome-i18n.h> instead of the full <libgnome/libgnome.h>,
- as noted by a comment here.
-
-2001-07-24 Jason Leach <jleach@ximian.com>
-
- * e-storage-set-view.c (e_storage_set_view_construct): Add the
- "/My Evolution" path to the path_to_etree_node hash so that
- storage_set_view_set_current_folder() can select the My Evolution
- node when it's the current one. Fixes #5114 and #3956.
-
-2001-07-23 Ettore Perazzoli <ettore@ximian.com>
-
- * main.c (development_warning): Only show the warning dialog
- instead of using `gnome_dialog_run()' so it is not modal. Modal
- would be nice, but unfortunately it works bad with Bonobo. Plus
- Sawfish doesn't like to keep the modal dialog on top, so it gets
- very confusing for users.
-
-2001-07-23 Ettore Perazzoli <ettore@ximian.com>
-
- * e-task-widget.c (e_task_widget_construct): Uhm, set the usize to
- `1, -1' instead.
-
-2001-07-23 Ettore Perazzoli <ettore@ximian.com>
-
- * e-task-widget.c (e_task_widget_construct): Set the usize for the
- contained hbox to 0x0.
-
-2001-07-23 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view-menu.c: Get the manuals from the `evolution-guide'
- dir as that's where they get installed.
-
-2001-07-23 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view.c (storage_set_view_box_button_release_event_cb):
- Don't handle button events whose button number is not 1.
-
-2001-07-22 Ettore Perazzoli <ettore@ximian.com>
-
- * e-local-storage.c (remove_folder): Pass the folder type to
- `evolution_shell_component_client_async_remove_folder()'.
- (async_xfer_folder_step): Likewise with
- `evolution_shell_component_client_async_xfer_folder()'.
-
- * evolution-shell-component-client.c
- (evolution_shell_component_client_async_remove_folder): New arg
- @type. Pass it to the `ShellComponent::removeFolder' CORBA
- method.
- (evolution_shell_component_client_async_xfer_folder): Likewise
- with `::xferFolder'.
-
- * evolution-shell-component.c (impl_removeFolderAsync): Add @type
- arg according to the IDL.
- (impl_xferFolderAsync): Likewise.
-
- * evolution-shell-component.h: Add arg @type to
- `EvolutionShellComponentRemoveFolderFn' and
- EvolutionShellComponentXferFolderFn'.
-
- * Evolution-ShellComponent.idl: Add @type arg to
- `::removeFolderAsync' and `::xferFolderAsync'.
-
-2001-07-21 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-folder-creation-dialog.c (add_folder_types): Only put
- the types that are user-creatable in the folder type option menu.
-
- * evolution-shell-component.c
- (impl_ShellComponent__get_supported_types): Set the
- `user_creatable' member too.
- (evolution_shell_component_construct): Copy the `user_creatable'
- member too.
-
- * evolution-shell-component.h: New member `user_creatable' in
- `EvolutionShellComponentFolderType'.
-
- * e-component-registry.c (register_type): Pass the user_creatable
- member of the CORBA FolderType struct.
-
- * e-folder-type-registry.c: New member `user_creatable' in struct
- FolderType.
- (e_folder_type_registry_register_type): New arg @user_creatable.
- (register_folder_type): Likewise.
- (folder_type_new): Likewise.
- (e_folder_type_registry_type_is_user_creatable): New.
-
- * Evolution-ShellComponent.idl: New member `user_creatable' in
- `struct FolderType'.
-
-2001-07-21 Ettore Perazzoli <ettore@ximian.com>
-
- * evolution-activity-client.c (impl_destroy): Use
- `g_source_remove()' instead of `gtk_timeout_remove()' here, as we
- are using `g_timeout_add()' and not `gtk_timeout_add()' to set up
- the timeout callback.
- (update_timeout_callback): Reset `have_pending_update' when
- returning %TRUE. Set the timeout id to zero when returning
- %FALSE.
-
-2001-07-20 Jason Leach <jleach@ximian.com>
-
- [Fix a crash if you start evolution with a bad URI.]
-
- * e-shell.c (e_shell_create_view): If we can't display the URI,
- display the default uri. This is because it's necessary for
- e_shell_view_display_uri() to run all the way through so corba
- interfaces get setup.
-
- * e-shell-view.c (e_shell_view_display_uri): If we fail to create
- a new view for a URI (happens if you pass in an invalid URI), be
- sure to return FALSE.
-
-2001-07-20 Jason Leach <jleach@ximian.com>
-
- [This is a better way to have "Local Folders" be shown as the
- local storage name without breaking current user's shortcuts.]
-
- * e-corba-storage.c (get_display_name): Implement this, but it's
- only returning the real name now. Need to change the IDL soon to
- let corba storages have separated display names.
-
- * e-shortcuts.c (e_shortcuts_add_default_group): Set these default
- shortcut URI's back to evolution:/local/
-
- * e-shell-view.h (DEFAULT_URI): Set this back to
- "evolution:/local/Inbox"
-
- * e-storage-set-view.c (etree_value_at): Get the display name for
- a storage rather than it's true name.
-
- * e-local-storage.c (impl_get_display_name): Implemented for the
- local folder (to return a translated "Local Folders").
-
- * e-storage.c (e_storage_get_display_name): New virtual function
- for retrieving the display name.
-
-2001-07-19 Jason Leach <jleach@ximian.com>
-
- * e-local-storage.h: Make the local storage name "Local Folders"
- instead of "local", looks better with "My Evolution", "VFolders",
- and "Other Contacts".
-
- * e-shell-view.h: Put the #define DEFAULT_URI here instead of in
- e-shell-view.c.
-
- * main.c: Remove the duplicated #define STARTUP_URI, actually make
- use of the nice defines.
-
- * e-shell-folder-commands.c (e_shell_command_delete_folder): Use
- the DEFAULT_URI here instead of a hard coded string.
-
- * e-shortcuts.c (e_shortcuts_add_default_group): Fix the URI's
- here to use "Local Folder".
-
-2001-07-19 Jason Leach <jleach@ximian.com>
-
- * e-shell-folder-title-bar.c (e_shell_folder_title_bar_construct):
- Line up the padding for the folder title bar labels when you have
- the folder bar enabled or disabled (previously when disabled it
- was padding ~8 pixels to the right while the other had 0).
-
- * e-shell-view.c (setup_widgets): Take out a 2 pixel padding
- around the vbox containing the title bar, folder bar, message list
- and mail display. Also remove 2 more extra pixels of padding on
- the bottom.
-
-2001-07-16 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shortcuts.c
- (override_shortcut_name_and_type_from_storage_set): Removed.
- (load_shortcuts): Don't call it.
-
-2001-07-15 Ettore Perazzoli <ettore@ximian.com>
-
- [Fix #4387, Shortcut bar items don't keep the name after rename.]
-
- * e-shortcuts.c (update_shortcuts_by_path): Do not change the name
- of the shortcut if the folder's name changes.
-
-2001-07-15 Ettore Perazzoli <ettore@ximian.com>
-
- * e-storage-set-view.c (etree_icon_at): Return an icon for depths
- greater than 2 as well.
-
-2001-07-15 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view-menu.c (e_shell_view_menu_setup): Connect the
- "line_status_changed" signal with
- `gtk_signal_connect_while_alive()' for the shell views, so we
- don't crash if a view gets destroyed.
- * e-shell-view.c (e_shell_view_construct): Likewise.
-
-2001-07-12 Jason Leach <jleach@ximian.com>
-
- * e-shell-view-menu.c (command_submit_bug): Because
- bugzilla.ximian does have a mail gateway now, we can have
- Help->Submit Bug Report open up bug-buddy.
-
-2001-07-12 Iain Holmes <iain@ximian.com>
-
- * importers/intelligent.c (create_gui): Remove the g_warnings as
- they are an annoying red herring
-
-2001-07-12 Dan Winship <danw@ximian.com>
-
- * e-shell.c (init): Initialize priv->db and priv->iid so that
- destroy() won't crash if e_shell_construct bails out before
- setting them. Reduces bug #4173 to #4169.
-
-2001-07-11 Iain Holmes <iain@ximian.com>
-
- * importers/intelligent.c (intelligent_importer_init): Sync the config
- so that the Don't Ask Again gets saved.
-
-2001-07-11 Kjartan Maraas <kmaraas@gnome.org>
-
- * importers/intelligent.c: Mark a string for translation.
-
-2001-07-11 Jason Leach <jleach@ximian.com>
-
- * e-shell-view.c (e_shell_view_save_settings): Make sure to create
- ~/evolution/config/ if it doesn't exist. (ShellView settings get
- saved before component settings, so when the mailer comes around
- to saving ETree stuff, this dir will be there). Fixes bug #4279.
-
-2001-07-10 Jason Leach <jleach@ximian.com>
-
- * e-setup.c (copy_default_stuff): Add a temporary block of code to
- not use the $GNOME/share/evolution/default_user/shortcuts.xml for
- users who might be upgrading, so they'll get the shell-generated
- default set of shortcuts. See notes on #4394.
-
-2001-07-09 Larry Ewing <lewing@ximian.com>
-
- * e-shell-folder-commands.c (delete_dialog): convert the folder
- name from utf8 before displaying them in the dialog and set the
- dialog parent.
-
-2001-07-09 Federico Mena Quintero <federico@ximian.com>
-
- * e-shortcuts-view.c: Make the "Rename" item be a
- GNOMEUIINFO_ITEM_NONE() since we don't have a stock icon; likewise
- for the "Open in New Window". This gets rid of warnings from
- gnome-libs. Use a better stock icon for the "Remove" command, and
- add a stock icon to the "Open" command.
-
-2001-07-09 Jason Leach <jleach@ximian.com>
-
- * e-shell-view.c (updated_folder_cb): It's very possible that
- get_storage_set_path_from_uri() returns NULL (5 of the 6 return
- cases), so check that it's not NULL before trying to strcmp() it.
- Fixes a startup crash.
-
-2001-07-06 Dan Winship <danw@ximian.com>
-
- * e-shortcuts.c (shortcut_item_update): Return a gboolean saying
- whether or not the shortcut changed. Use strcmp rather than
- pointer comparisons to determine this.
- (update_shortcut_and_emit_signal): propagate the gboolean from
- shortcut_item_update (and only emit the signal if it's TRUE).
- (update_shortcuts_by_path): Only call make_dirty if something
- changed.
- (storage_set_new_folder_callback,
- storage_set_updated_folder_callback): Don't call make_dirty:
- update_shortcuts_by_path will have called it if necessary.
-
- * e-shell-view.c (updated_folder_cb): Don't call
- update_for_current_uri if the folder that was updated isn't the
- one being displayed.
-
-2001-07-06 Jason Leach <jleach@ximian.com>
-
- * e-shortcuts-view.c: Little UI tweak for right click menu,
- pronouns shouldn't be capitalized ("This" in this case).
-
- [Misc fixes and part of #2228, There should be no dialog boxes
- during startup.]
-
- * e-setup.c (e_setup): Check for searches.xml instead of
- shortcuts.xml, since shortcuts.xml doesn't really need to exist
- (and thus wouldn't be a necessary test whether ~/evolution was
- invalid) because shell can generate shortcuts.
- (copy_default_stuff): For first time users, only present a dialog
- if a problem occurred. We've already clicked "Ok" on a dialog
- about copying files.
- (check_evolution_directory): Take out the "successfully installed"
- dialog on updates too.
-
-2001-07-06 Ettore Perazzoli <ettore@ximian.com>
-
- [This should fix #3873, Bizzarre crash after deleting a few
- folders.]
-
- * e-local-storage.c (remove_folder): Don't free the
- `physical_path' on error, as it gets freed when freeing the
- callback data.
-
-2001-07-06 Ettore Perazzoli <ettore@ximian.com>
-
- [Fix #3959, copying a folder over itself crashes Evolution.]
-
- * e-shell-folder-commands.c
- (folder_selection_dialog_folder_selected_callback): Sanity checks:
- don't allow copying a folder over itself, or moving it under one
- of its descendants. In such cases, pop up an error dialog.
-
-2001-07-05 Iain Holmes <iain@ximian.com>
-
- * e-shortcuts-view.c (icon_callback): Special case the evolution:/My
- Evolution uri.
-
-2001-07-05 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view-menu.c: Removed handler for verb
- "ChangeFolderProperties".
- (command_folder_properties): Removed.
-
- * e-shell-folder-commands.c (e_shell_command_folder_properties):
- Removed.
-
-2001-07-03 Ettore Perazzoli <ettore@ximian.com>
-
- * main.c (development_warning): Use both `VERSION' and
- `SUB_VERSION' here.
- (main): Likewise.
-
-2001-07-04 Gediminas Paulauskas <menesis@delfi.lt>
-
- * evolution-shell-component-utils.c (e_pixmaps_update): set
- "pixname" value only if pixbuf was loaded successfully. Otherwise
- component crashes if image is not found. Should be checked for
- sanity in bonobo_ui_component_set_prop IMHO.
-
-2001-07-03 Aaron Weber <aaron@ximian.com>
-
- * main.c (development_warning): Revised to make it less scary.
-
-2001-07-03 Ettore Perazzoli <ettore@ximian.com>
-
- [Fix a problem with not being able to save a newly created
- `shortcuts.xml' file, and another bug that caused the default
- group to be added at every start-up, even there were groups
- already.]
-
- * e-shortcuts.c (e_shortcuts_new): If loading the shortcuts fails,
- set the file_name.
- (load_shortcuts): Update `num_groups'.
-
-2001-07-03 Iain Holmes <iain@ximian.com>
-
- * importer/Makefile.am: Add bonobo-conf stuff
-
-2001-07-03 Ettore Perazzoli <ettore@ximian.com>
-
- [The following makes the shell able to create the `shortcuts.xml'
- file by itself when the file is not present or corrupted. Fixes
- #3668, failure to handle malformed shortcuts.xml file.]
-
- * e-shell.c (e_shell_construct): If the `e_shortcuts_new()'
- returns an object with no shortcuts in it, fill it in with
- `e_shortcuts_add_default_group()'.
-
- * e-shortcuts.c: New member `num_groups' in EShortcutsPrivate.
- (init): Init to zero.
- (e_shortcuts_add_group): Increment.
- (e_shortcuts_remove_group): Decrement.
- (e_shortcuts_get_num_groups): New.
- (e_shortcuts_add_default_group): New function to set up the
- default shortcuts.
- (e_shortcuts_new): Return an empty EShortcuts object if loading
- the file files, instead of returning NULL.
-
-2001-07-03 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-offline-handler.c
- (e_shell_offline_handler_put_components_offline): Ref/unref the
- handler so the signal handlers can unref it safely. Also, if
- `prepare_for_offline()' fails, don't say that there was an
- internal error, as that's confusing. Just say we couldn't put the
- components off-line.
-
- [Fix #3758, clicking on the online/offline button crashed
- Evolution.]
-
- * Evolution-Offline.idl: Don't derive OfflineProgressListener from
- Bonobo::Unknown.
-
-2001-07-03 Ettore Perazzoli <ettore@ximian.com>
-
- [Fixed #3643, Shell crash when component crashed]
-
- * e-shell-view.c (socket_destroy_cb): Fix Jason's broken fix for
- #3205 that was causing #3643. It is not safe to strcmp() the
- return value from `e_shell_view_get_current_uri()' as it might be
- NULL already.
-
-2001-07-02 Christopher James Lahey <clahey@ximian.com>
-
- * Makefile.am (INCLUDES): Added $(BONOBO_CONF_CFLAGS).
- (evolution_LDADD): Added $(BONOBO_CONF_LIBS).
-
-2001-07-02 Ettore Perazzoli <ettore@ximian.com>
-
- * e-storage-set-view.c (popup_folder_menu): Don't assert that
- there is a handler, so we don't crash if user clicks on a folder
- whose type we cannot handle for some reason [such as an
- uninstalled component].
-
- * evolution-test-component.c (activity_client_cancel_callback):
- New callback for the "cancel" signal on the
- EvolutionActivityClient object.
- (activity_client_show_details_callback): New callback for the
- "show_details" signal.
- (timeout_callback_1): Connect these two signal handlers.
-
- * e-activity-handler.c (task_widget_button_press_event_callback):
- Ahem, right-click is button 3, not button 2.
- (show_cancellation_popup): Actually pop up the menu.
- (get_corba_null_value): New helper function to create a CORBA_any
- null value.
- (report_task_event): New helper function to report events to the
- listener.
- (task_widget_cancel_callback): Use it. Report "Cancel" instead of
- "Cancelled".
- (task_widget_show_details_callback): New, callback for the "Show
- Details" right-click menu item.
-
- * evolution-activity-client.c: Updated to dispatch the "Cancel"
- and "ShowDetails" events as "cancel" and "show_details" signals.
- (class_init): Install the signals.
- (listener_callback): Updated to update the signals corresponding
- to the "ShowDetails" and "Cancel" events.
-
- * Evolution-Activity.idl: Changed the docs about the events sent
- to the Bonobo::Listener. We now only have "ShowDetails" and
- "Cancelled".
-
- * evolution-test-component.c (timeout_callback_1): Make the
- activity cancellable so we can test the right-click cancel menu
- too.
-
- * main.c (idle_cb): Actually exit if we cannot reach to the shell.
-
-2001-07-01 Ettore Perazzoli <ettore@ximian.com>
-
- * e-uri-schema-registry.c (init): Unset the FLOATING flag on the
- object.
-
-2001-07-01 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view.c: Fixing a bug that could cause Evolution to crash
- if a new ShellView was created and then destroyed, and then a new
- folder would appear in the folder tree. Sigh, this code with the
- delayed_selection is pretty messed up, but at least this will add
- some consistency to it and make it safe.
- (cleanup_delayed_selection): New function to disconnect the
- "new_folder_cb" callback if the `delayed_selection' is not NULL,
- and also free the `delayed_selection' itself.
- (new_folder_cb): Use it.
- (destroy): Call it here, otherwise we might [a] leak [b] cause a
- crash as soon as a new folder appears in the folder tree, as
- "new_folder" gets emitted and our connected signal handler has no
- EShellView to handle the signal on.
- (e_shell_view_display_uri): Call it here before re-setting the
- `delayed_selection'.
-
- * e-shortcuts-view.c (open_shortcut_in_new_window_cb): Add
- invocation for `open_shortcut_helper()' back in [it was gone, for
- unknown reasons].
-
-2001-07-01 Ettore Perazzoli <ettore@ximian.com>
-
- * e-storage-set-view.c (tree_drag_begin): If the node doesn't have
- a component, just don't start the whole CORBA drag thing instead
- of crashing with an assertion.
-
-2001-07-01 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view-menu.c (command_new_shortcut): New, implementation
- for the "New Shortcut" command create a new shortcut.
- (goto_folder_dialog_cancelled_cb): Renamed from
- `folder_selection_dialog_cancelled_callback'.
- (goto_folder_dialog_folder_selected_cb): Renamed from
- `folder_selection_dialog_cancelled_callback'.
-
- * e-shell-folder-selection-dialog.c: New member `allow_creation'
- in `EShellFolderSelectionDialogPrivate'.
- (e_shell_folder_selection_dialog_get_allow_creation): New; return
- the value of `allow_creation'.
- (e_shell_folder_selection_dialog_set_allow_creation): New; hide or
- show the "New" button according to the @allow_creation arg.
-
-2001-07-01 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shortcuts-view.c: Added "Rename Group" command to the
- right-click group menu item.
- (rename_group_cb): New callback for the "Rename Group" command.
-
- * e-shortcuts-view-model.c (shortcuts_rename_group_cb): New,
- callback for the EShortcuts::rename_group signal. It renames the
- group by removing it and creating a new one which is the same;
- this sucks, but there is no other way with the current shortcut
- bar widget.
- (e_shortcuts_view_model_construct): Connect it.
-
- * e-shortcuts.c
- (class_init): Install signal "rename_group".
- (e_shortcuts_rename_group): New.
-
- * e-shortcuts.h: New signal "rename_group".
-
-2001-07-01 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shortcuts.c: Removed `title_to_group' hash from
- `EShortcutsPrivate'.
- (init): Don't initialize it anymore.
- (unload_shortcuts): Don't remove the groups from the hash, and
- don't destroy/realloc the hash.
- (load_shortcuts): Don't check for duplicate group names. Don't
- add the groups to the hash.
- (destroy): Don't free the hash.
- (e_shortcuts_get_shortcuts_in_group): Changed to get a @group_num
- instead of a @group_title.
-
- * e-shortcuts-view-model.c (load_group_into_model): Updated to
- pass the group number to `e_shortcuts_get_shortcuts_in_group()'.
- Removed arg @group_title.
-
-2001-07-01 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shortcuts-view.c: Added a "Rename" right-click command.
- (rename_shortcut_cb): New function, implementation for the "Rename
- command".
- (rename_shortcut_dialog_cb): Callback for the gnome_request_dialog
- function to ask the new name.
-
- * e-shortcuts.c (e_shortcuts_update_shortcut): Call `make_dirty()'
- so we get saved too.
-
-2001-07-01 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view.c (activate_shortcut_cb): Receive an @in_new_window
- arg as well.
-
- * e-shortcuts-view.c: Added a new "Open in New Window" right-click
- menu item. Renamed "Activate" to "Open".
- (class_init): Update the installation of the "activate_shortcut"
- signal for the additional @in_new_window_arg.
- (open_shortcut_helper): New helper function.
- (open_shortcut_cb): Renamed from `open_shortcut_cb'. Changed to
- use `open_shortcut_helper'
- (open_shortcut_in_new_window_cb): New.
- (item_selected): Pass %FALSE as the @in_new_window arg for
- "activate_shortcut".
-
- * e-shortcuts.c (save_shortcuts): Set the "name" and "type"
- properties for the <item> nodes too.
- (load_shortcuts): Change `shortcut_group_title' to be an `xmlChar
- (shortcut_set): New helper function.
- (shortcut_update): New helper function.
- (update_shortcut_and_emit_signal): New helper function.
- (e_shortcuts_update_shortcut): Use it.
-
-2001-07-01 Ettore Perazzoli <ettore@ximian.com>
-
- This is a first shoot at making shortcuts renameable [#3719];
- unfinished. Also, it causes the shortcut bar to stop displaying
- message unread count, but this is unfixable until we get rid of
- the ::LocalStorage interface, which should hopefully happen soon.
-
- * e-shortcuts-view.c (icon_callback): Get the icon from the type
- member of the shortcut item instead of going to the actual folder.
-
- * e-shell-view.c (updated_folder_cb): Don't update the shortcuts
- here for now.
-
- * e-shortcuts-view.c (item_selected): Use
- `e_shortcuts_get_shortcut()' instead of `e_shortcuts_get_uri()'.
- (impl_shortcut_dropped): Pass a NULL @name and @type.
-
- * e-shortcuts-view-model.c (load_group_into_model): Updated to
- match the new `e_shortcuts_get_shortcuts_in_group()' function that
- doesn't allocate the list anymore and returns a list of
- EShortcutItems instead of a list of strings.
- (load_group_into_model): Likewise.
- (load_all_shortcuts_into_model): Likewise.
- (shortcuts_new_shortcut_cb): Get the URI and the name from the
- EShortcutItem instead of retrieving them from the storage.
- (shortcuts_update_shortcut_cb): Likewise.
- (get_storage_set_path_from_uri): Removed [now unused].
-
- * e-shortcuts.c: Define the shortcuts to be EShortcutItems instead
- of just strings.
- (shortcut_new): New helper function to allocate a Shortcut.
- (shortcut_free): New helper function to free a Shortcut.
- (shortcut_group_new): New helper function to allocate a
- ShortcutGroup.
- (shortcut_group_free): New helper function to free a
- ShortcutGroup.
- (load_shortcuts): Use `shortcut_group_new()' here.
- (e_shortcuts_add_group): Same here.
- (unload_shortcuts): Use `shortcut_group_free()' here.
- (e_shortcuts_remove_group): Here too.
- (load_shortcuts): Update to handle `Shortcut's instead of simple
- `char *'s representing the URIs.
- (save_shortcuts): Likewise.
- (e_shortcuts_get_shortcuts_in_group): Likewise. The returned list
- now doesn't belong to the caller anymore; the return type is now
- const.
- (removed_folder_cb): Removed.
- (e_shortcuts_construct): Don't connect.
- (e_shortcuts_get_group_titles): Dont' re-allocate the string.
- (e_shortcuts_get_uri): Removed.
- (e_shortcuts_get_shortcut): New.
- (e_shortcuts_add_shortcut): new args @name, @type.
- (e_shortcuts_update_shortcut_by_uri): Remove.
- (e_shortcuts_remove_shortcut_by_uri): Remove.
- (get_item): New helper function.
- (e_shortcuts_get_shortcut): Use it.
- (find_positions_by_uri): Removed.
-
- * e-shortcuts.h: New typedef EShortcutItem.
-
-2001-06-30 Federico Mena Quintero <federico@ximian.com>
-
- * e-storage-set-view.c (popup_folder_menu): Pass the event time to
- gtk_menu_popup() so that we can release the button and have the
- menu stay up.
-
-2001-06-29 Christopher James Lahey <clahey@ximian.com>
-
- * e-shortcuts-view-model.c (load_all_shortcuts_into_model):
- Replaced GList with GSList here to fix a type mismatch.
-
-2001-06-29 Christopher James Lahey <clahey@ximian.com>
-
- * Makefile.am (INCLUDES): Changed $(datadir)/evolution/etspec to
- "$(etspecdir)" here.
-
-2001-06-29 Christopher James Lahey <clahey@ximian.com>
-
- * e-shortcuts-view-model.c (load_group_into_model): Replaced GList
- with GSList here to fix a type mismatch.
-
-2001-06-29 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shortcuts-view-model.c (load_group_into_model): Updated to
- match the fact that `e_shortcuts_in_group()' now returns a GSList
- instead of a GList.
- (load_all_shortcuts_into_model): Likewise for
- `e_shortcuts_get_group_titles()'.
-
- * e-shortcuts.c: Change all `groups' and `views' from GLists to
- GSLists in EShortcutsPrivate.
- (e_shortcuts_get_group_titles): Return a GSList instead of a
- GList.
- (e_shortcuts_get_shortcuts_in_group): Likewise.
-
-2001-06-28 Ettore Perazzoli <ettore@ximian.com>
-
- [Fix #3756, `--debug' option not working anymore.]
-
- * main.c (main): Get the URI list from popt with `poptGetArgs'
- instead of just using argv. Sigh, I am rusty.
-
-2001-06-28 Ettore Perazzoli <ettore@ximian.com>
-
- [Fix #3382, shortcut bar crashes when checking mail, and all the
- different incarnations involving updates to an shortcut bar having
- shortcuts to non-existent folders. Also, this fixes #1643,
- shortcuts not visible until you enable an IMAP account, and #2436,
- misbehavior of shortcut groups when IMAP or invalid shortcuts are
- involved.]
-
- * e-shortcuts-view-model.c (load_group_into_model): Add the
- shortcuts that point to folders that don't exist yet, too.
-
-2001-06-28 Dan Winship <danw@ximian.com>
-
- * e-storage.c (e_storage_new_folder): Call folder_changed_cb after
- adding the new folder so that if it was added highlighted, its
- parent will get its child_highlight set.
- (e_storage_new_folder): Move the folder_changed_cb() call to avoid
- a g_warning.
-
-2001-06-28 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell.c (e_shell_create_view): Renamed from
- `e_shell_new_view'.
-
-2001-06-28 Ettore Perazzoli <ettore@ximian.com>
-
- * main.c (idle_cb): Re-implemented to get a GSList of URIs and
- open them on a running shell [if any] or on a newly created shell.
- If no args are provided [i.e. the list is NULL], it either
- restores from settings [if any], or it just opens the Inbox.
- (main): Set up the GSList of arguments and have it passed to the
- idle callback.
-
- * e-shell.c (init): Ooops. Init `uri_schema_registry' to NULL as
- well.
-
- * evolution-shell-component-client.c
- (evolution_shell_component_client_handle_external_uri): New.
- (corba_exception_to_result): Handle the `UnsupportedSchema'
- exception too.
-
- * evolution-shell-component.h: New
- EvolutionShellComponentResult value
- `EVOLUTION_SHELL_COMPONENT_UNSUPPORTEDSCHEMA'.
-
- * Evolution-ShellComponent.idl: New exception `UnsupportedSchema'.
- (handleExternalURI): This can now raise `NotFound',
- `UnsupportedSchema' and `InternalError'.
- (createView): This can now raise `UnsupportedSchema' too.
-
- * e-shell.c (impl_Shell_handleURI): Finish implementation.
- (class_init): Install it.
-
- * e-uri-schema-registry.c
- (e_uri_schema_registry_get_handler_for_schema): Ooops. Rename
- from `e_uri_schema_get_handler_for_schema'. Also, return NULL if
- no handler is found.
-
-2001-06-27 Ettore Perazzoli <ettore@ximian.com>
-
- * e-component-registry.c (register_component): Get the supported
- schemas and register them into the schema registry.
-
- * e-shell.c: New member `uri_schema_registry' in `EShellPrivate'.
- (e_shell_construct): Init.
- (destroy): Unref.
- (impl_Shell_createNewView): Raise exception `UnsupportedSchema' if
- it's not an `evolution:' URI. Raise exception `NotFound' if
- `e_shell_new_view()' returns NULL.
- (impl_Shell_handleURI): New, implementation for the `::handleURI'
- method.
- (e_shell_get_uri_schema_registry): New.
-
- * Evolution-Shell.idl: New exceptions `UnsupportedSchema' and
- `InvalidURI'.
- (createNewView): Make this able to raise `NotFound',
- `UnsupportedSchema' and `InvalidURI'.
- (handleURI): New method.
-
- * e-uri-schema-registry.h: New.
- * e-uri-schema-registry.c: New.
-
-2001-06-27 Ettore Perazzoli <ettore@ximian.com>
-
- * evolution-shell-component-client.c: Remove redundant declaration
- for `free_ShellComponentListener_servant()'.
-
-2001-06-27 Ettore Perazzoli <ettore@ximian.com>
-
- * evolution-shell-component.c (impl_handleExternalURI):
- Implementation for the `::handleExternalURI' CORBA method; just
- emit the `HANDLE_EXTERNAL_URI' signal.
- (class_init): Install.
-
-2001-06-27 Ettore Perazzoli <ettore@ximian.com>
-
- * evolution-shell-component.c (impl_setOwner): Renamed from
- `impl_ShellComponent_set_owner'.
- (impl_unsetOwner): Renamed from `impl_ShellComponent_unset_owner'.
- (impl_debug): Renamed from `impl_ShellComponent_debug'.
- (impl_createView): Renamed from `impl_ShellComponent_create_view'.
- (impl_createFolderAsync): Renamed from
- `impl_ShellComponent_async_create_folder'.
- (impl_removeFolderAsync): Renamed from
- `impl_ShellComponent_async_remove_folder'.
- (impl_xferFolderAsync): Renamed from
- `impl_ShellComponent_async_xfer_folder'.
- (impl_populateFolderContextMenu): Renamed from
- `impl_ShellComponent_populate_folder_context_menu'.
- (class_init): Updated accordingly.
-
-2001-06-27 Ettore Perazzoli <ettore@ximian.com>
-
- * evolution-test-component.c (factory_fn): Pass NULL as the
- @external_uri_schemas arg to `evolution_shell_component_new'.
-
- * evolution-shell-component.c: New enum value
- `HANDLE_EXTERNAL_URI'. New member `external_uri_schemas' in
- `EvolutionShellComponentPrivate'.
- (init): Initialize `external_uri_schemas' to NULL.
- (destroy): Free it.
- (destroy):
- (class_init): Add the "handler_external_uri" signal.
- (evolution_shell_component_new): Added precondition on
- @folder_types. New arg @external_uri_schemas.
- (evolution_shell_component_construct): Added preconditions. New
- arg @external_uri_schemas. Initialize the `external_uri_schemas'
- member in the EvolutionShellComponentPrivate part.
- (impl_ShellComponent__get_external_uri_schemas): New,
- implementation for reading the `external_uri_schemas' attribute.
- (class_init): Install it in the EPV.
-
- * evolution-shell-component.h: New signal `handle_external_uri'.
-
- * Evolution-ShellComponent.idl: New attribute `extra_uri_schemas'.
- (handleExternalURI): New method.
-
-2001-06-26 Ettore Perazzoli <ettore@ximian.com>
-
- * e-storage-set-view.c (etree_value_at): Don't strdup "My
- Evolution"! It was getting leaked every time the e-table wanted
- to read the value this way.
-
-2001-06-26 Ettore Perazzoli <ettore@ximian.com>
-
- * e-local-storage.c: Removed member `BonoboListener' from
- `AsyncCreateFolderCallbackData' and
- `AsyncRemoveFolderCallbackData'.
- (bonobo_interface_remove_folder_cb) : Return the value from
- `create_folder()'.
- (bonobo_interface_remove_folder_cb): Return the value from
- `remove_folder()'.
- (notify_bonobo_listener): Removed.
- (component_async_create_folder_callback): Don't notify the
- listener here.
- (component_async_remove_folder_callback): Ditto.
- (create_folder): Removed @listener arg. Not here either. Return
- a valid E_STORAGE error code instead. Also, don't set the
- `listener' field in `callback_data'.
- (remove_folder): Likewise.
- (bonobo_interface_create_folder_cb): Remove @listener arg.
- (bonobo_interface_remove_folder_cb): Likewise.
-
-2001-06-25 jacob berkman <jacob@ximian.com>
-
- * e-shell-view.c: (set_folder_timeout): display a selected uri in
- a timeout rather than right away, so the UI feels a bit more
- responsive, and the tree is more navigable via keyboard
- (switch_on_folder_tree_click): use the timeout rather than setting
- the URI right away
- (destroy): remove the timeout if it still exists
- (update_for_current_uri): if there is a timeout set, don't update
- (e_shell_view_display_uri): remove the timeout if it exists
-
-2001-06-25 Ettore Perazzoli <ettore@ximian.com>
-
- * main.c (no_views_left_cb): Call `e_shell_unregister_all()'.
-
- * e-shell.c (e_shell_unregister_all): New.
-
-2001-06-25 Ettore Perazzoli <ettore@ximian.com>
-
- * e-storage-set-view.c (convert_gdk_drag_action_to_corba): Remove
- trailing "\n" from g_warning.
- (convert_corba_drag_action_to_gdk): Likewise.
- (tree_drag_data_received): Likewise.
- (new_folder_cb): Likewise.
-
- * e-shortcuts-view-model.c (load_group_into_model): Remove
- trailing "\n" from g_warning.
-
-2001-06-25 Ettore Perazzoli <ettore@ximian.com>
-
- * main.c (no_views_left_cb): Unref the shell here.
-
- * e-storage-set.c (destroy): Use
- `name_to_named_storage_foreach_destroy()' as the function argument
- to `g_hash_table_foreach()', not `named_storage_destroy()', which
- is just plainly wrong.
-
- * e-shell.c (setup_corba_storages): Don't ref the
- corba_storage_registry here.
- (destroy): Don't unref here.
- (setup_activity_interface): Don't ref the activity_handler either.
- (destroy): Don't unref it here.
-
- * e-component-registry.c (e_component_registry_construct): Don't
- ref the shell here.
- (destroy): Don't unref it here.
-
-2001-06-25 Ettore Perazzoli <ettore@ximian.com>
-
- * main.c (no_views_left_cb): Don't call `e_shell_quit()' anymore.
-
- * e-shell-view-menu.c (command_quit): Call
- `e_shell_destroy_all_views()' instead of `e_shell_quit()', which
- does not exist anymore.
-
- * e-shell.c (e_shell_quit): Removed.
- (e_shell_destroy_all_views): New.
-
-2001-06-24 Ettore Perazzoli <ettore@ximian.com>
-
- * Makefile.am: s/\.oafinfo/.oaf/g.
-
- * GNOME_Evolution_TestComponent.oafinfo: Renamed to
- `GNOME_Evolution_TestComponent.oaf'.
-
-2001-06-24 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell.c: New member `iid' in EShellPrivate.
- (init): Init to NULL.
- (e_shell_construct): Set it to the value of the @iid argument.
- (destroy): Unregister that IID.
- (register_shell): Removed.
- (e_shell_construct): Just do all the work here. The function was
- too simple to really be useful as separate.
-
- * e-shell.c, e-shell.h: Changed to derive from BonoboXObject
- instead of deriving from BonoboObject and doing all the nasty
- CORBA work by hand.
-
-2001-06-24 Ettore Perazzoli <ettore@ximian.com>
-
- * evolution-test-component.c (activity_client_clicked_callback):
- New callback for the "clicked" signal on the EActivityClient.
- Just spit out a warning now, for testing purposes.
- (timeout_callback_1): Connect it.
-
- * evolution-activity-client.c (listener_callback): Emit the
- "clicked" signal if we get the "Clicked" event from the Bonobo
- listener.
-
-2001-06-24 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-folder-commands.c: #include <gtk/gtklabel.h>.
- (delete_dialog): Constify @folder_name properly.
- (delete_cb): Change the first arg to be an EStorageSet as expected
- for EStorageSetResultCallbacks.
- (rename_dialog): #if 0.
-
-2001-06-24 Ettore Perazzoli <ettore@ximian.com>
-
- * e-task-widget.h, e-task-widget.c: Changed to derive from
- GtkEventBox.
-
- * e-activity-handler.c (task_widget_button_press_event_callback):
- New callback for the "button_press_event" signal on the
- ETaskWidgets. Dispatch the "Clicked" event through the Bonobo
- listener.
- (task_widget_new_from_activity_info): Connect here.
-
-2001-06-24 Ettore Perazzoli <ettore@ximian.com>
-
- * evolution-test-component.c: Changed to use the
- `EvolutionActivityClient' object. New global static variable
- `activity_client'.
- (create_animated_icon): Removed.
- (create_icon_from_pixbuf): Removed.
- (task_bar_event_listener_callback): Removed.
- (timeout_callback_1): Create an EvolutionActivityClient object and
- put a pointer to it into `activity_client'. Lower the timeout
- delay from 1000 msecs to 100 msecs, so we can stress-test the
- speed control code in EvolutionActivityClient.
- (timeout_callback_2): Use the EvolutionActivityClient. Increment
- progress by 1, instead of 10.
- (timeout_callback_3): Destroy the EvolutionActivityClient.
-
- * Makefile.am (libeshell_la_SOURCES): Add
- `evolution-activity-client.c'.
- (eshellinclude_HEADERS): Add `evolution-activity-client.h'.
-
- * evolution-activity-client.c: New.
- * evolution-activity-client.h: New.
-
- * e-activity-handler.c: Updated all instances of `ActivityID' with
- `ActivityId'.
-
- * Evolution-Activity.idl: Renamed `ActivityID' to `ActivityID'.
- Added value `DIALOG_ACTION_ERROR' to `DialogAction'.
-
-2001-06-24 Ettore Perazzoli <ettore@ximian.com>
-
- * evolution-test-component.c: Remove the `activity_interface'
- global.
- (timeout_callback_3): Get the ::Activity interface using
- `evolution_shell_client_get_activity_interface()' on
- `parent_shell' instead.
- (timeout_callback_2): Likewise.
- (timeout_callback_2): Likewise.
- (timeout_callback_1): Likewise.
- (owner_set_callback): Don't query interface here. Check if the
- shell has an ::Activity interface by using
- `evolution_shell_client_get_activity_interface()' here as well.
-
- * evolution-shell-client.c: New member `activity_interface' in
- `EvolutionShellClientPrivate'.
- (destroy): unref/release it.
- (evolution_shell_client_construct): Initialize it by querying the
- shell CORBA Object for the ::Activity interface.
- (evolution_shell_client_get_activity_interface): New.
-
-2001-06-23 Jason Leach <jleach@ximian.com>
-
- * e-shell-folder-selection-dialog.c
- (e_shell_folder_selection_dialog_construct): Make the folder tree
- have a similar expanded state as the shell's folder tree.
-
- * e-local-storage.c (remove_folder): New function that does the
- meat of actual deletion stuff.
- (remove_folder_directory): A helper function that remove_folder()
- uses.
- (component_async_remove_folder_callback): A new callback to do the
- removing stuff from shell (if there weren't errors from the
- component).
- (impl_async_remove_folder): Implemented this.
-
- * evolution-shell-component-client.c
- (evolution_shell_component_client_async_remove_folder):
- Implemented this.
-
- * e-shell-view.c (e_shell_view_remove_control_for_uri): New
- function.
-
-2001-06-23 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view.c (e_shell_view_set_current_shortcuts_group_num):
- Moved at the bottom, as it's public API. Also add preconditions.
- (e_shell_view_get_current_shortcuts_group_num): Likewise.
-
-2001-06-23 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view.c: Get rid of some `#if 0'ed code.
-
-2001-06-23 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view.c (corba_interface_set_message_cb): Replaced with
- an empty stub, as the "set_message" method is going to be
- deprecated.
- (corba_interface_unset_message_cb): Likewise for the
- "unset_message" method.
-
-2001-06-23 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell.c (e_shell_construct): Set `splash' to NULL when
- @show_splash is false, so the compiler doesn't complain.
-
- * e-shell-view-menu.c: #include <gtk/gtkmain.h>.
-
- * e-setup.c: #include <unistd.h>.
-
- * importer/intelligent.c: #include <gtk/gtkhbox.h> and
- <gtk/gtkdrawingarea.h>.
-
-2001-06-23 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view.c: New member `menu_hint_label' in
- `EShellViewPrivate'.
- (init): Init to NULL.
- (ui_engine_add_hint_callback): Set the label in the menu hint
- label, show the menu hint label, hide the task bar.
- (ui_engine_remove_hint_callback): New callback for the
- "remove_hint" signal on the BonoboUIEngine; hide the hint label,
- show the task bar.
- (setup_statusbar_hints): Connect it.
- (setup_menu_hint_label): New helper function to create the menu
- hint label.
- (create_status_bar): Call it.
-
-2001-06-23 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view-menu.c (command_quit): Add a `gtk_main_quit()' at
- the end here.
-
-2001-06-23 Ettore Perazzoli <ettore@ximian.com>
-
- * Makefile.am: Add rules to build the test component and an
- `install-test-component' target to install it.
-
- * GNOME_Evolution_TestComponent.oafinfo: New OAF file for the test
- component.
-
- * evolution-test-component.c: New component, currently to test the
- activity interfaces. We will be able use it for testing more
- things in the future.
-
- * e-shell.c: New member `activity_handler' in `EShellViewPrivate'.
- (init): Init here.
- (class_init): Unref.
- (setup_activity_interface): New helper function to create an
- `EActivityHandler' object and aggregate it to the `EShell'.
- (e_shell_construct): Call here.
- (e_shell_new_view): Attach the task bar of the newly created view
- to the activity handler by using
- `e_activity_handler_attach_task_bar()'.
-
- * e-shell-view.c: Removed old progress bar code. New members
- `status_bar' and `task_bar' in EShellViewPrivagte; removed member
- `progress_bar'.
- (init): Initialize the new fields; remove initialization for
- `progress_bar'.
- (impl_destroy): Handle the new fields here too.
- (setup_task_bar): New helper function to set up an ETaskBar.
- (create_status_bar): New helper function to create the status bar
- with an ETaskBar in it.
- (ui_engine_add_hint_callback): New callback for the "add_int"
- BonoboUIEngine signal.
- (setup_statusbar_hints): New helper function to set up the menu
- hints for the status bar; connect `ui_engine_add_hint_callback()'
- here.
- (setup_widgets): Call `create_status_bar()' and
- `setup_statusbar_hints()'; pack the status bar in a vbox instead
- of using the Bonobo status bar stuff, which is kinda broken.
- (e_shell_view_get_task_bar): New.
- (get_type_for_folder): No use to get the EFolderTypeRegistry here.
-
- * Evolution.idl: #include <Evolution-Activity.idl> and
- <Evolution-Icon.idl>.
-
- * Evolution-Activity.idl: New.
-
- * Evolution-Icon.idl: New.
-
- * e-activity-handler.c: New.
- * e-activity-handler.h: New.
-
- * e-task-bar.c: New.
- * e-task-bar.h: New.
-
- * e-task-widget.c: New.
- * e-task-widget.h: New.
-
-2001-06-21 Jason Leach <jleach@ximian.com>
-
- * evolution-storage.c (evolution_storage_deregister_on_shell): New
- function, uses the StorageRegistry::removeStoragebyName corba call
- to properly make the storage vanish from the shell.
-
-2001-06-18 Dan Winship <danw@ximian.com>
-
- * Makefile.am (evolution_LDADD): Remove DB3_LDADD
-
- * e-shell-view-menu.c: Fix the help URLs
-
-2001-06-13 Not Zed <NotZed@Ximian.com>
-
- * e-shell-view.c (switch_on_folder_tree_click): Check priv->uri
- isn't null before strcmp'ing it here too.
-
-2001-06-11 Dan Winship <danw@ximian.com>
-
- * e-shell-view.c (destroy): Don't destroy the
- offline_toggle_pixmap: the offline_toggle 0wnz it.
- (update_for_current_uri): Check priv->uri isn't NULL before
- strcmp()ing it.
-
-2001-06-11 Jason Leach <jleach@ximian.com>
-
- * evolution-storage.c (impl_Storage_async_create_folder): Fixed
- folder creation on IMAP storages (by notifying bonobo listener
- with the result).
-
- * evolution-storage-listener.c: Some cleaning.
-
-2001-06-08 Iain Holmes <iain@ximian.com>
-
- * e-setup.c (check_dir_recur): Don't copy the old Executive-Summary dir.
- (e_setup): If there is an Executive-Summary dir in ~/evolution/local
- ask it the user wants to remove it.
- (e_shell_rm_dir): Function to completely delete a directory.
-
-2001-06-07 Iain Holmes <iain@ximian.com>
-
- * evolution-storage.c (impl_Storage_async_create_folder): Removed
- debug spew.
-
- * e-shell-importer.c (start_import): Removed spew.
-
- * e-shell-view.c (update_window_icon): Take a gboolean to say if
- the folder is my evolution. Do special cased things for My Evolution.
- (update_folder_title_bar): Same.
- (update_for_current_uri): Find out if the uri is the my evolution one
- and act accordingly.
- (get_control_for_uri): Handle the toplevel My Evolution.
-
- * e-storage-set-view.c (etree_icon_at): Get an icon for the toplevel
- My Evolution.
- (etree_value_at): Default is to return "My Evolution"
- (e_storage_set_view_construct): Set the toplevel to be called "My
- Evolution" and show it.
- (e_storage_set_view_set_show_folders): Same.
-
-2001-06-08 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-folder-commands.c (e_shell_command_add_to_shortcut_bar):
- Allow a NULL @shell_view arg.
-
-2001-06-08 Jason Leach <jleach@ximian.com>
-
- * e-shell.c (e_shell_construct): Fix splash setup to keep it from
- giving two Gtk-CRITICAL assertions when you do --no-splash.
-
-2001-06-06 Jon Trowbridge <trow@ximian.com>
-
- * evolution-storage.c (impl_Storage_async_create_folder): Changed
- purely informational debug spew from a g_warning to a g_message.
-
- * e-shell-importer.c (show_import_wizard): The import wizard
- defined in import.glade only has three pages... yet we were trying
- to manipulate "page4" as the finish page, with the expected bad
- results. My guess is that the .glade file got changed, but the
- code didn't get updated.
- (start_import): We were trying to bonobo_object_unref
- (BONOBO_OBJECT (icd->client)), which is fine except for the
- fact that icd->client is just a GtkObject, not a BonoboObject.
- Changed to a gtk_object_unref.
- (start_import): Changed a purely informational bit of debug
- spew from a g_warning to a g_message.
-
-2001-06-06 Iain Holmes <iain@ximian.com>
-
- * importers/intelligent.c (create_gui): Make a few boxes, and make
- the whole dialog horizontal. Add better buttons, and a "Don't ask
- again button" (And the world rejoices).
- Fixed the notebook so it displayed the blank page on startup.
- (intelligent_importer_init): Handle the "Don't ask me again" button.
-
-2001-06-06 Jason Leach <jleach@ximian.com>
-
- (Fix bug #3205: Component crash causes folder switch even when not
- needed)
-
- * e-shell-view.c (socket_destroy_cb): Only flip around the
- ShellView to different folders when we're currently viewing the
- URI that's being closed/crashed.
-
-2001-06-06 Jason Leach <jleach@ximian.com>
-
- (Fix bug #418: Save state of folder tree view)
-
- * e-shell-view.c (e_shell_view_save_settings): Changed the char *
- @prefix argument to an int @view_num.
- (e_shell_view_load_settings): Ditto.
- (get_local_prefix_for_view): New function that gets us a prefix
- from a view_num.
-
- * e-shell-view.c (e_shell_view_save_settings): Save the
- expanded/collapsed information for each storage-set-view here.
- (e_shell_view_load_settings): Load it here.
-
- * e-storage-set-view.c (e_storage_set_view_construct): Make it so
- new storage set views have their storages expanded by default, but
- will respsect the expanded state information that we load into it.
- (insert_storages): Minor change here too.
- (new_folder_cb): Ditto.
-
-2001-06-05 Jason Leach <jleach@ximian.com>
-
- * e-shell-view-menu.c: Plug in all the folder tree right click
- menu verbs so bonobo-warnings aren't emitted (even though the
- respective implementation functions are currently unimplemented).
- (command_delete_folder): New function, see above.
- (command_rename_folder): Ditto.
- (command_folder_properties): Ditto.
-
- * e-shell-folder-commands.c (e_shell_command_delete_folder): New
- function, currently unimplemented.
-
-2001-06-04 Jason Leach <jleach@ximian.com>
-
- (Fixing bug #1299: Shell saves shortcuts when display name
- changes)
-
- * e-shortcuts.c (class_init): New signal: "update_shortcut".
-
- * e-shortcuts-view-model.c (e_shortcuts_view_model_construct):
- Connect thew new signal here.
-
- * e-shortcuts-view-model.c (shortcuts_update_shortcut_cb): New
- function, uses the new e_shortcut_model_update_item().
-
- * e-shell-view.c (corba_interface_set_folder_bar_label): Fix a
- warning here.
-
-2001-06-03 Ettore Perazzoli <ettore@ximian.com>
-
- * Makefile.am (evolution_LDADD): Move `$(DB3_LDADD)' before
- libeutil.
-
-2001-06-01 Ettore Perazzoli <ettore@ximian.com>
-
- * Makefile.am (evolution_LDADD): Add `$(DB3_LDADD)'.
-
-2001-05-30 Jason Leach <jleach@ximian.com>
-
- * e-shell-view.c (e_shell_view_set_current_shortcuts_group_num):
- New function (probably should just be static).
- (e_shell_view_load_settings): Load the current shortcut group here
- using the above new function.
- (e_shell_view_save_settings): Save current shortcut group in here.
-
-2001-05-30 Jason Leach <jleach@ximian.com>
-
- * e-shell-folder-title-bar.c: New 'folder_bar_label' member for
- EShellFolderTitleBar, it's for information that's shown to the
- left of the icon like the dates in the calendar (or, potentially
- total and unread numbers for mailer).
- (e_shell_folder_title_bar_set_folder_bar_label): New function,
- lets others set the title bar extra label.
-
- * Evolution-ShellView.idl: New method 'setFolderBarLabel' for our
- exposed ShellView interface.
-
- * evolution-shell-view.h: New signal "set_folder_bar_label" for
- EvolutionShellView.
-
- * evolution-shell-view.c (impl_ShellView_set_message): Emit the
- new signal here.
-
- * e-shell-view.c (setup_corba_interface): Connect the signal here.
-
- * e-shell-view.c (corba_interface_set_folder_bar_label): New
- function, callback for the above signals, does the actual extra
- label setting for the folder title bar.
-
- * e-shell-folder-commands.c (e_shell_command_add_to_shortcut_bar):
- Fix a warning here.
-
-2001-05-30 Jason Leach <jleach@ximian.com>
-
- * e-shell.c (e_shell_construct): Removed an unecessary sleep(2)
- call, so evolution will start up 2 seconds faster now.
-
-2001-05-30 Jason Leach <jleach@ximian.com>
-
- * e-shell-view-menu.c: Connect the AddFolderToShortcutBar verb to
- their implementation functions.
-
- * e-shell-view.c (e_shell_view_get_current_shortcuts_group_num):
- New function, use it to find out which shourtcut group is
- currently open on the shortcut bar.
-
- * e-shell-folder-commands.c (e_shell_command_add_to_shortcut_bar):
- Implement this using new function described above.
-
-2001-05-29 Federico Mena Quintero <federico@ximian.com>
-
- * e-shell-view.c (setup_progress_bar): Added missing castt.
- (setup_offline_toggle): Likewise.
-
-2001-05-29 JP Rosevear <jpr@ximian.com>
-
- * e-shell-view.c (setup_progress_bar): unref the control when
- finished with it
- (setup_offline_toggle): ditto
- (destroy): destroy offline and progress widgets
-
-2001-05-28 Dan Winship <danw@ximian.com>
-
- * e-storage-set-view.c (new_storage_cb): Call
- e_tree_node_set_expanded on the storage_set_view, not the
- storage_set (which is not an ETree).
-
-2001-05-27 Dan Winship <danw@ximian.com>
-
- * evolution-shell-component-utils.c: New file.
- (e_pixmaps_update): Moved here from e-util to break e-util bonobo
- dependency.
-
- * e-shell-view-menu.c: #include
- "evolution-shell-component-utils.h" instead of "e-gui-utils.h"
-
- * Makefile.am (libeshell_la_SOURCES, eshellinclude_HEADERS): Add
- evolution-shell-component-utils.[ch]
-
-2001-05-26 Dan Winship <danw@ximian.com>
-
- * e-storage-set-view.c (destroy): Don't free the hash keys in
- priv->path_to_etree_node, because they're owned by the ETree now.
- (e_storage_set_view_set_show_folders): Likewise.
-
-2001-05-25 Peter Williams <peterw@ximian.com>
-
- * Makefile.am: Change libeshell from a noinst_LIBRARIES to
- a lib_LTLIBRARIES. Install its headers in
- $includedir/evolution/shell.
-
- * evolution-storage.c (safe_corba_string): New, copy of e_safe_corba_string
- in libeutil. This way libeshell doesn't have a missing symbol when programs
- that don't have libeutil link to it.
- (evolution_storage_register): s,e_safe_corba_string,safe_corba_string,g.
-
-2001-05-25 jacob berkman <jacob@ximian.com>
-
- * e-shell-view.c (setup_widgets): place the shortcut bar in a
- frame
-
-2001-05-21 Christopher James Lahey <clahey@ximian.com>
-
- * Makefile.am (INCLUDES): Added ETSPECDIR. Added
- e-storage-set-view.etspec to get installed.
-
- * e-local-storage.c (remove_folder_directory): Commented out this
- function since it is unused.
-
- * e-shell-folder-commands.c
- (folder_selection_dialog_folder_selected_callback), e-shell-view.c
- (update_offline_toggle_status): Fixed warnings here by adding a
- return; after the g_assert_not_reached();.
-
- * e-shell-importer.c (start_import): Got rid of real_folderpath
- here and just reused folderpath (It was causing uninitialized
- variable warnings.)
-
- * e-shell.c (impl_Shell_getLocalStorage): Use
- bonobo_object_dup_ref here. It makes things simpler.
-
- * e-storage-set-view.c: Removed ETREE_SPEC since it's no longer
- needed.
- (convert_corba_drag_action_set_to_gdk,
- folder_context_menu_activate_cb, remove_cb,
- folder_context_menu_remove_cb): Commented out these functions
- since they're unused.
- (new_storage_cb, new_folder_cb, insert_folders, insert_storages):
- Don't bother using insert_id here since it no longer does
- anything.
- (new_storage_cb, removed_storage_cb, removed_folder_cb): Don't
- free the data returned from e_tree_memory_node_remove.
- (e_storage_set_view_construct): Set the destroy func here so that
- memory will automatically get freed when nodes are destroyed.
- g_strdup the root node string here. Use
- e_tree_construct_from_spec_file here to use an external file.
- (e_storage_set_view_set_show_folders): g_strdup the root node
- string here.
-
- * e-storage-set-view.etspec: New etspec file.
-
- * evolution-shell-component-client.c
- (free_ShellComponentListener_servant): Added a prototype here.
-
-2001-05-23 Chris Toshok <toshok@ximian.com>
-
- * evolution-shell-component.h
- (EVOLUTION_SHELL_COMPONENT_POPUP_PLACEHOLDER): track change to the
- path to the ComponentPlaceholder.
-
-2001-05-20 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view.c: New static members `offline_pixmap',
- `offline_mask', `online_pixmap', `online_mask'. Add members
- `tooltips', `offline_toggle' and `offline_toggle_pixmap' to
- `EShellViewPrivate'.
- (init): Init to NULL. Also init the `progress_bar' member to NULL
- as well, as we were not initializing it.
- (destroy): Unref the tooltips.
- (load_images): New static function to load the offline and online
- icons into the pixmaps/masks.
- (class_init): Call it.
- (update_offline_toggle_status): New.
- (shell_line_status_changed_cb): Call it.
- (offline_toggle_clicked_cb): New, callback for the "clicked"
- signal on the offline/online button.
- (setup_offline_button): New function to set up the
- `offline_button'.
- (setup_widgets): Call it.
- (setup_progress_bar): Changed to get an `EShellView' pointer,
- instead of an `EShellViewPriv' pointer.
- (setup_widgets): Updated accordingly.
-
-2001-05-20 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view-menu.c: Define the verb for "CopyFolder" as well.
- (command_copy_folder): Implementation for the "CopyFolder" verb.
-
- * e-shell-folder-commands.c: New struct `FolderCommandData'.
- (folder_command_data_new): New function to allocate and initialize
- it.
- (folder_command_data_free): New function to free it.
- (e_shell_command_move_folder): Pass a pointer to a filled-in
- `FolderCommandData' struct to the callbacks instead of just
- passing a pointer to the shell object.
- (move_folder_selected_callback): Removed.
- (move_folder_cancelled_callback): Removed.
- (folder_selection_dialog_folder_selected_callback): New generic
- callback for the folder selection dialog.
- (folder_selection_dialog_cancelled_callback): New generic callback
- for the folder selection dialog.
- (connect_folder_selection_dialog_signals): New function to connect
- these two handlers to a folder selection dialog.
- (xfer_result_callback): New callback for the async xfer function.
- (get_folder_name): New utility function.
- (e_shell_command_copy_folder): Implement.
-
-2001-05-19 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-folder-commands.c
- (e_shell_command_create_new_folder): Changed to use
- `e_shell_view_get_current_path()' to get the default path, instead
- of computing it itself.
- (move_folder_cancelled_callback) (move_folder_selected_callback):
- New, callbacks for the "cancelled" and "folder_selected" signals
- on the folder selection dialog for the "Move folder" operation.
- (e_shell_command_move_folder): Implemented.
-
- * e-shell-view-menu.c (command_move_folder): New, implementation
- for the "MoveFolder" verb.
-
- * e-shell-view.c (e_shell_view_get_current_path): New.
-
-2001-05-19 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-folder-selection-dialog.h: Rename @default_path to
- @default_uri.
-
- * e-shell.c (impl_Shell_selectUserFolder): Pass a NULL @caption to
- `e_shell_folder_selection_dialog_new()'.
-
- * e-shell-importer.c (import_druid_finish): Add a caption to the
- folder selection dialog. Constify local variable `foldername',
- and avoid g_strdupping/g_freeing it, as it's useless.
-
- * e-shell-view-menu.c (command_goto_folder): Add a caption to
- the folder selection dialog.
-
- * e-shell-folder-selection-dialog.c
- (e_shell_folder_selection_dialog_new): New arg @caption.
- (e_shell_folder_selection_dialog_construct): Likewise. Also
- cleaned up a bit.
-
-2001-05-19 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view-menu.c: Removed "NewView" verb. Added
- `folder_verbs', with "OpenFolderInNewWindow" in it.
- (e_shell_view_menu_setup): Set up the `folder_verbs' too.
- (command_new_view): Renamed to
- `command_open_folder_in_new_window'.
-
- * e-shell-folder-commands.c
- (e_shell_command_open_folder_in_other_window): Implement.
-
-2001-05-19 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view-menu.c (command_create_folder): Call
- `e_shell_command_create_new_folder()' implemented in
- `e-shell-folder-commands.c'.
-
- * e-shell-folder-commands.c: New.
- * e-shell-folder-commands.h: New.
-
-2001-05-17 Ettore Perazzoli <ettore@ximian.com>
-
- * e-storage-set-view.c
- (populate_folder_context_menu_with_common_items): Removed.
- (popup_folder_menu): Instead of creating the component and the
- folder popup definition here, just do `bonobo_window_add_popup()'
- and assume that "/popups/FolderPopup" is defined in the toplevel
- window's UI xml file.
-
-2001-05-16 Ettore Perazzoli <ettore@ximian.com>
-
- * evolution-shell-component-client.c: Moved some functions around
- to avoid the warning about the static
- `free_ShellComponentListener_servant()' function being used prior
- to declaration.
-
-2001-05-15 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view-menu.c (command_run_bugbuddy): `#if 0'ed out.
- (command_submit_bug): New. Just fire up the web browser with
- `http://bugzilla.ximian.com' in it.
- (menu_do_misc): Associate the latter instead of the former to the
- "HelpSubmitBug" verb.
-
-2001-05-15 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view-menu.c: Add an `HelpFAQ' verb.
-
-2001-05-14 jacob berkman <jacob@ximian.com>
-
- * e-folder-tree.c (remove_folder): set the subfolder's parent to
- NULL so the subfolder list doesn't change whilst we are using it
- (folder_remove_subfolder): this function didn't used to work at
- all
-
-2001-05-12 Chris Toshok <toshok@ximian.com>
-
- * e-storage-set-view.c (tree_drag_data_received): implement the
- CORBA side of dragging.
- (convert_gdk_drag_action_set_to_corba): rename
- convert_gdk_drag_action_to_corba to this.
- (convert_corba_drag_action_set_to_gdk): rename
- convert_corba_drag_action_to_gdk to this.
- (convert_gdk_drag_action_to_corba): new function that doesn't
- build a bitmask, useful for the Action types, instead of
- ActionSet.
- (convert_corba_drag_action_to_gdk): same.
-
-2001-05-11 Chris Toshok <toshok@ximian.com>
-
- * e-storage-set-view.c
- (populate_folder_context_menu_with_common_items): add RemoveFolder
- menu item and verb.
- (folder_context_menu_remove_cb): new function, call
- e_storage_set_async_remove_folder.
- (remove_cb): callack for e_storage_set_async_remove_folder.
-
- * evolution-shell-component-client.c
- (evolution_shell_component_client_populate_folder_context_menu):
- fix prototype to reflect Component -> Container.
-
- * evolution-shell-component-client.h: same.
-
-2001-05-11 Chris Toshok <toshok@ximian.com>
-
- * evolution-shell-component.h
- (EVOLUTION_SHELL_COMPONENT_POPUP_PLACEHOLDER): add this define for
- the xml path to use when adding menu items to the folder popup.
-
- * e-storage-set-view.c
- (populate_folder_context_menu_with_common_items): add (#ifdef
- DEBUG_XML) a menu item to dump the bonobo xml.
- (popup_folder_menu): pass the BonoboUIContainer to the
- populate_folder_context_menu CORBA call, instead of the component.
- Also, reorder things a bit so the component doesn't get an error
- when setting xml the first time.
-
-2001-05-11 Iain Holmes <iain@ximian.com>
-
- * e-shell-folder-selection-dialog.c (dbl_click_cb): Use gnome_dialog_close
- instead of gtk_widget_destroy.
- (impl_clicked): Use gnome_dialog_close instead of gtk_widget_destroy.
-
- * e-shell-view-menu.c: #include e-shell-importer.h instead of importer/importer.h
-
- * importer/Makefile.am: Remove importer.c and importer.h.
-
- * importer/importer.[ch]: Moved these to e-shell-importer.[ch]
-
- * e-shell-importer.c (start_import): Take a folderpath to import into.
- (importer_druid_finish): Show the EShellFolderSelectionDialog to get a folder to
- import into.
-
-2001-05-11 JP Rosevear <jpr@ximian.com>
-
- * e-component-registry.c (register_component): component_new refs
- the object itself, so unref ours when we finish with it
-
- * e-shell.c (e_shell_construct): There is no need to explicitly
- ref the folder type registry, storage set and shortcuts because we
- are the creator and hold the initial ref count of 1.
-
-2001-05-11 Dan Winship <danw@ximian.com>
-
- * e-local-storage.c (load_folder): Lots of people seem to have
- "broken" local storage hierarchies. So ignore errors (like the old
- code did) and just print a warning.
-
-2001-05-11 Chris Toshok <toshok@ximian.com>
-
- * evolution-storage-set-view-factory.c
- (evolution_storage_set_view_factory_new_view): the only
- problematic area - pass NULL for now in as the BonoboUIContainer.
- how do we pass this container to the control?
-
- * e-storage-set-view.c (folder_context_menu_activate): un-#if 0
- this function.
- (populate_folder_context_menu_with_common_items): build our popup
- using the new xml bonobo stuffs.
- (popup_folder_menu): convert to using the new xml bonobo stuffs.
- (right_click): only do the popup menu if we have a
- BonoboUIContainer.
- (e_storage_set_view_new): add BonoboUIContainer* arg.
- (e_storage_set_view_construct): same.
-
- * e-storage-set-view.h: add BonoboUIContainer* args to
- e_storage_set_view_new and e_storage_set_view_construct.
-
- * e-shell-folder-creation-dialog.c (add_storage_set_view): pass
- NULL for the BonoboUIContainer, since we shouldn't (?) have a
- popup in this dialog.
-
- * e-shell-folder-selection-dialog.c
- (e_shell_folder_selection_dialog_construct): pass NULL for the
- BonoboUIContainer, since we shouldn't (?) have a popup in this
- dialog.
-
- * e-storage-set.h: add BonoboUIContainer* arg to
- e_storage_set_new_view.
-
- * e-storage-set.c (e_storage_set_new_view): add arg, and track
- change to e_storage_set_view_new.
-
- * e-shell-view.h: add prototype for
- e_shell_view_get_bonobo_ui_container.
-
- * e-shell-view.c (setup_storage_set_subwindow): track change to
- e_storage_set_view_new.
- (e_shell_view_construct): the BonoboUIContainer is now part of our
- private structure.
- (e_shell_view_get_bonobo_ui_container): new function.
-
-2001-05-09 Christopher James Lahey <clahey@ximian.com>
-
- * importer/intelligent.c (create_gui): Made this function static.
- Removed the unused variable placeholder.
- (intelligent_importer_init): Cast from gpointer to int here
- properly using GPOINTER_TO_INT.
-
-2001-05-09 Dan Winship <danw@ximian.com>
-
- * e-local-storage.c: Remove get_physical_path and load_folders,
- and replace the calls to them with calls to the e_path_* functions
- they inspired.
-
-2001-05-08 Dan Winship <danw@ximian.com>
-
- * glade/e-active-connection-dialog.glade: Rename "port" to "type"
- here too.
-
-2001-05-08 Iain Holmes <iain@ximian.com>
-
- * importer/evolution-importer-client.c (evolution_importer_client_load_file):
- Actually use the duplicated value.
-
- * e-local-storage.c (create_folder_directory): Assign
- physical_path_return before trying to create the directory.
- (create_folder): Return the physical_path even if the directory
- creation failed. Free the physical path.
-
- * importer/evolution-importer-client.[ch]: Make EvolutionImporterClient
- from a GtkObject instead of a BonoboObject.
-
- * importer/importer.c: Use gtk_object_unref instead of
- bonobo_object_unref on the clients.
-
- * importer/intelligent.c: New prettier dialog, and multiple importers
- done in the same window.
-
-2001-05-07 Dan Winship <danw@ximian.com>
-
- * e-shell-offline-handler.c (update_dialog_clist_hash_foreach):
- Fix a free of non-malloc'ed memory introduced by my last change.
-
-2001-05-07 Jon Trowbridge <trow@ximian.com>
-
- * e-shell-view-menu.c (update_offline_menu_item): Changed some
- references to /commands/WorkOffline to /commands/ToggleOffline.
-
-2001-05-04 Chris Toshok <toshok@ximian.com>
-
- * evolution-shell-component-dnd.c
- (impl_GNOME_Evolution_ShellComponentDnd_DestinationFolder_handleMotion):
- take a physical_uri and pass it to the callback.
- (impl_GNOME_Evolution_ShellComponentDnd_DestinationFolder_handleDrop):
- same.
-
- * evolution-shell-component-dnd.h: add physical_uri args to the
- destination folder HandleMotion and HandleDrop types.
-
- * Evolution-ShellComponentDnd.idl: add "in string physical_uri" to
- DestinationFolder::handleMotion and DestinationFolder::handleDrop.
-
- * e-storage-set-view.c (tree_drag_motion): pass the physical uri
- of the folder to handleMotion.
-
-2001-05-04 Dan Winship <danw@ximian.com>
-
- * e-shell-offline-handler.c (update_dialog_clist_hash_foreach,
- (duplicate_connection_list): Use type instead of portNumber.
- (e_shell_offline_handler_put_components_offline): Fix the logic of
- when to show the connection dialog here. (Show it when there *are*
- connections, not when there aren't.)
-
- * Evolution-Offline.idl: Have a "string type" instead of "short
- portNumber" in Connection.
-
-2001-05-04 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-offline-handler.c
- (e_shell_offline_handler_put_components_offline): Only display the
- dialog if there are active connections. [It was displaying it all
- the time before just for testing purposes.]
-
-2001-05-04 Ettore Perazzoli <ettore@ximian.com>
-
- * evolution-storage.c (evolution_storage_new_folder): Ooops. The
- `corba_folder' is needed after returning; don't free it.
-
-2001-05-04 Ettore Perazzoli <ettore@ximian.com>
-
- * evolution-storage.c (evolution_storage_new_folder): Free the
- `corba_folder' when not needed anymore.
-
- * e-local-storage.c (create_folder_directory): Free the parent
- path, and don't allocate it when we don't need it.
-
- * evolution-shell-component-client.c (dispatch_callback): Free the
- listener servant too.
- (impl_destroy): Release the listener object and free the servant
- if it exists.
-
-2001-05-04 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-folder-creation-dialog.c (dialog_clicked_cb): Don't
- strdup `path' before copying it into the `dialog_data'.
-
-2001-05-04 Ettore Perazzoli <ettore@ximian.com>
-
- * importer/intelligent.c (get_intelligent_importers): Free the
- `info_list' returned by `oaf_query()', thus plugging a leak.
-
-2001-05-04 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-utils.c (get_icon_path): Don't use
- `gnome_pixmap_file()', which is broken as it looks in the current
- working directory first. Instead, if the path is not absolute,
- just look up the file in the `EVOLUTION_IMAGES' directory.
-
-2001-05-03 Ettore Perazzoli <ettore@ximian.com>
-
- * glade/e-active-connection-dialog.c: Change the GtkCList mode to
- GTK_BROWSE_SINGLE.
-
-2001-05-03 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-offline-handler.c
- (impl_OfflineProgressListener_updateProgress): Update the GtkCList
- before emitting the "offline_procedure_finished" signal. In fact,
- we might be destroyed from within the signal handlers and then
- things would get messy.
-
- * evolution-shell-component-client.c
- (evolution_shell_component_client_get_offline_interface):
- "IDL:GNOME/Evolution/Offline:1.0", not
- "IDL:GNOME/Evolution/ShellComponent/Offline:1.0". Sigh.
-
- * e-shell-view-menu.c: Update to match the rename of the
- `WorkOffline' menu item in the `File' menu into `ToggleOffline'.
- Now the `WorkOffline' verb actually puts the shell offline, while
- `WorkOnline' puts in online, so we don't use one single verb to
- toggle the online/offline status.
- (command_work_offline): Only go offline.
- (command_work_online): New. Make the shell go online.
- (update_offline_menu_item): New.
- (shell_line_status_changed_cb): New, callback for the
- "line_status_changed" signal on the associated EShell.
-
-2001-05-03 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-offline-handler.c: New member `dialog_gui' in
- `EShellOfflineHandlerPrivate'.
- (impl_destroy): Unref here if not NULL.
- (init): Init to NULL.
- (update_dialog_clist_hash_foreach): New.
- (update_dialog_clist): New.
- (dialog_clicked_cb): New, callback for the "clicked" signal on the
- active connection dialog.
- (pop_up_confirmation_dialog): Implemented.
- (init): Init `procedure_in_progress' to `FALSE' instead of `TRUE'.
- (cancel_offline): Emit `offline_procedure_finished'.
- (impl_OfflineProgressListener_updateProgress): Call
- `update_dialog_clist()'.
-
- * glade/e-active-connection-dialog.glade: New.
-
- * e-shell-view-menu.c: Update to use the `WorkOffline' verb
- instead of the `WorkOffLine' one.
- (command_work_offline): New, temporary implementation for the
- "WorkOffline" verb.
-
- * e-shell-view.c (shell_line_status_changed_cb): New, callback for
- the shell's `line_status_changed' signal.
- (e_shell_view_construct): Connect it.
-
- * e-shell.c: New member `line_status' in `EShellPrivate'.
- (init): Init to `E_SHELL_LINE_STATUS_ONLINE'.
- (class_init): Set up the `line_status_changed' signal.
- (e_shell_is_offline): Removed.
- (e_shell_get_line_status): New.
- (e_shell_go_online): Set the `line_status' member to
- `E_SHELL_LINE_STATUS_ONLINE' and emit `line_status_changed'.
- (offline_procedure_started_cb): New, signal for the
- `offline_procedure_started' signal in EShellOfflineHandler.
- (offline_procedure_finished_cb): New, signal for the
- `offline_procedure_finished' signal in EShellOfflineHandler.
- (e_shell_go_offline): Implemented.
-
- * e-shell.h: New enum `EShellLineStatus'. New signal
- `line_status_changed'.
-
-2001-05-03 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-offline-handler.c (e_shell_offline_handler_construct):
- Unset the `GTK_FLOATING' flag.
-
-2001-05-02 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell.c: New members `is_offline' and `offline_handler' in
- `EShellPrivate'.
- (init): Init `is_offline' to %FALSE, `offline_handler' to %NULL.
- (e_shell_is_offline): New.
- (e_shell_go_online): New.
- (e_shell_go_offline): New.
-
- * e-shell-offline-handler.c: New.
- * e-shell-offline-handler.h: New.
-
- * evolution-shell-component-client.c: New member
- `offline_interface' in `EvolutionShellComponentClientPrivate'.
- (init): Init to `CORBA_OBJECT_NIL'.
- (impl_destroy): Unref/release if not NIL.
- (evolution_shell_component_client_get_offline_interface): New.
-
- * Evolution-Offline.idl: New.
-
-2001-05-02 Chris Toshok <toshok@ximian.com>
-
- * evolution-shell-component-dnd.c: new file.
-
- * evolution-shell-component-dnd.h: new file.
-
- * Makefile.am (libeshell_a_SOURCES): add
- evolution-shell-component-dnd.[ch].
-
-2001-04-25 Dan Winship <danw@ximian.com>
-
- * Makefile.am (evolution_LDADD): Remove $(UNICODE_LIBS).
-
- * main.c (main): Remove call to unicode_init.
-
-2001-04-25 JP Rosevear <jpr@ximian.com>
-
- * evolution-shell-client.c (destroy): free the private member
-
-2001-04-25 Kjartan Maraas <kmaraas@gnome.org>
-
- * e-component-register.c, e-corba-storage.c, e-folder-tree.c,
- e-folder-tree.h, e-folder.c, e-local-folder.c, e-shell.c,
- e-shortcuts-view-model.c, e-shortcuts.c, e-splash.c,
- e-storage-set-view.c, e-storage-set.c, evolution-local-storage.c,
- evolution-shell-component-client.c, evolution-shell-component.c,
- evolution-storage.[ch], importer/evolution-importer-client.[ch],
- importer/evolution-importer-listener.[ch],
- importer/evolution-importer.[ch],
- importer/evolution-intelligent-importer.[ch], importer/intelligent.c:
- #include <glib.h> and move corresponding local includes to the top.
-
-2001-04-23 Jeffrey Stedfast <fejj@ximian.com>
-
- * e-splash.c: #include gnome-window-icon.h
-
-2001-04-21 Duncan Mak <duncan@ximian.com>
-
- * e-splash.c (e_splash_construct): Set window_icon to
- "evolution.png" in the splash screen.
-
-2001-04-18 Ettore Perazzoli <ettore@ximian.com>
-
- * e-local-folder.c: #include <unistd.h>.
-
-2001-04-17 Christopher James Lahey <clahey@ximian.com>
-
- * e-shell-view.c (storage_set_view_box_event_cb): Proxy events to
- the tooltip object properly.
-
-2001-04-15 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-folder-selection-dialog.c
- (folder_creation_dialog_result_cb): Set the current folder only if
- @result is `E_SHELL_FOLDER_CREATION_DIALOG_RESULT_SUCCESS'.
-
- * e-shell-folder-creation-dialog.c (folder_name_entry_changed_cb):
- Changed to get a pointer to the DialogData instead of just a
- pointer to the dialog itself. Don't set the OK button sensitive
- if there is no folder selected in the storage set view.
- (setup_folder_name_entry): Don't connect
- `folder_name_entry_changed_cb' anymore.
- (e_shell_show_folder_creation_dialog): Connect here instead.
- (storage_set_view_folder_selected_cb): New callback for the
- "folder_selected" signal in the EStorageSetView. Make the OK
- button sensitive if the entry is non-empty.
- (e_shell_show_folder_creation_dialog): Connect it.
-
-2001-04-14 Michael Meeks <michael@ximian.com>
-
- * Makefile.am (dist-hook): remove built sources from dist.
-
-2001-04-13 Ettore Perazzoli <ettore@ximian.com>
-
- * e-splash.c (impl_destroy): Call the parent class' ::destroy
- method.
-
-2001-04-12 Christopher James Lahey <clahey@ximian.com>
-
- * e-storage-set-view.c (etree_has_get_node_by_id,
- etree_get_node_by_id): Implemented these.
-
-2001-04-11 Dan Winship <danw@ximian.com>
-
- * e-shell-view.c (switch_on_folder_tree_click): Don't get into an
- infinite loop when clicking on an IMAP storage. Might not be the
- best fix?
-
-2001-04-08 Chris Toshok <toshok@ximian.com>
-
- * e-storage-set-view.c (tree_drag_motion): fix type. we want the
- destination interface, not source.
-
-2001-04-04 Kjartan Maraas <kmaraas@gnome.org>
-
- * e-local-folder.c: Fix headers.
- * e-shell-view.c: Same here.
- * e-shortcuts-view.c: Same here.
- * e-shortcuts.c: Same here.
- * e-storage-set-view.c: Same here.
-
-2001-04-04 Gediminas Paulauskas <menesis@delfi.lt>
-
- * importer/importer.c (create_html): copied newer and fixed function
- from mail/mail-config-druid.c.
- (html_new, put_html): removed.
- (show_import_wizard): use create_html instead of html_new/put_html pair.
- * importer/importer.glade: a try to set logo. removed source generation
- options.
-
-2001-04-03 Dan Winship <danw@ximian.com>
-
- * main.c:
- * evolution-shell-component-client.c: Don't declare debug_log as
- extern in evolution-shell-component-client.c, because that's part
- of libeshell and so gets linked into the other components.
- Instead, declare it there and extern it from main.c.
- (Noticed by Peter Williams)
-
-2001-04-03 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view.c (get_control_for_uri): Change `! folder_type'
- with `folder_type == NULL'.
-
- * e-corba-storage-registry.c (impl_StorageRegistry_addStorage): If
- the toplevel node URI or the toplevel node type are an empty
- string, use NULL Instead.
-
-2001-04-03 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view.c: Fix bug #1878 "folder sometimes fails to
- display?". Thanks to Dan for finding out an explanation for the
- problem.
- (e_shell_view_display_uri): Don't set `priv->uri' here.
- (show_existing_view): Set it here instead, and before showing the
- control.
- (create_new_view_for_uri): And here, likewise.
-
-2001-04-03 Christopher James Lahey <clahey@ximian.com>
-
- * e-shell-folder-selection-dialog.c (dbl_click_cb): Made double
- clicking not crash here.
-
-2001-04-02 Ettore Perazzoli <ettore@ximian.com>
-
- * e-setup.c (e_setup): If we have a local folder named "Trash" of
- type "mail", rename it to "Trash.old" so that the new
- vfolder-based trash type gets installed.
-
-2001-04-03 Gediminas Paulauskas <menesis@delfi.lt>
-
- * importer/evolution-importer-client.c (evolution_importer_client_load_file):
- fix Iain's fix which did nothing. closes #1914.
-
-2001-03-31 Christopher James Lahey <clahey@ximian.com>
-
- * evolution-storage-set-view.c: Include <gal/util/e-util.h> here.
-
-2001-04-01 Gediminas Paulauskas <menesis@delfi.lt>
-
- * e-shell-view-menu.c: set up menu icons for new folder, import and work
- offline.
-
-2001-03-30 Iain Holmes <iain@ximian.com>
-
- * importer/importer.c (start_import): If the importer can't be started, then
- don't continue.
-
-2001-03-29 Iain Holmes <iain@ximian.com>
-
- * importer/evolution-importer-client.c (evolution_importer_client_load_file):
- Duplicate the folderpath, or set it to \0
-
-2001-03-30 Christopher James Lahey <clahey@ximian.com>
-
- * e-shell-folder-selection-dialog.c (dbl_click_cb): Since this is
- an ETree now, the signature of the double click callback has
- changed.
-
-2001-03-30 Dan Winship <danw@ximian.com>
-
- * Evolution-ShellComponent.idl: add a "debug" method to tell a
- component to output debugging messages to a given file.
-
- * main.c (main): Add a "--debug filename" argument, to direct
- debugging output for all components to a file. Redirect the
- shell's stdout/stderr to that file if this argument is used.
-
- * evolution-shell-component-client.c
- (evolution_shell_component_client_set_owner): If debug_log is set,
- call the component's debug method as well.
-
- * evolution-shell-component.c (impl_ShellComponent_debug):
- redirect stdout/stderr to the named file and emit a "debug"
- signal.
-
-2001-03-29 Kjartan Maraas <kmaraas@gnome.org>
-
- * e-component-registry.c: Remove/replace unneeded includes and
- move around stuff so that system headers are included first.
- * e-corba-storage.c: Replace #include <bonobo.h>
- * e-folder-tree.c: Shuffle.
- * e-folder.c: Remove #include <gtk/gtkobject.h>
- * e-local-storage.c: Replace #include <gnome.h> and <bonobo.h>
- * e-setup.c: Replace #include <glib.h> and <gnome.h>
- * e-shell-folder-creation-dialog.c: Replace #include <gnome.h>
- * e-shell-folder-title-bar.c: Replace <gnome.h>
- * e-shell-utils.c: Same here.
- * e-shell-view-menu.c: Same here (and <bonobo.h>)
- * e-shell-view.c: Replace <gnome.h> and <bonobo.h>
- * e-shell.c: Replace <gnome.h>
- * e-shell.h: Shuffle.
- * e-shortcuts-view-model.c: Replace <gnome.h>
- * e-shortcuts-view.c: Remove #include <gnome.h>
- * e-shortcuts.c: Move <string.h> up.
- * e-splash.c: Replace <gnome.h>
- * e-storage-set-view.c: Replace <gnome.h>
- * e-storage-set.c: Shuffle
- * e-storage.c: Replace <gnome.h>
- * evolution-local-storage.c: Same here
- * evolution-local-storage.h: And here.
- * evolution-session.c: Same here too.
- * evolution-session.h: Replace <bonobo.h>
- * evolution-shell-client.c: Here too.
- * evolution-shell-component-client.c: Shuffle.
- * evolution-shell-component.c: Replace <bonobo.h>
- * evolution-shell-view.c: Remove #include <bonobo.h>
- * evolution-shell-view.h: Replace <gnome.h>
- * evolution-storage-listener.c: Replace <gnome.h> and <bonobo.h>
- * evolution-storage-listener.h: Replace <gnome.h>
- * evolution-storage-set-view-listener.c: Replace <gnome.h> and <bonobo.h>
- * evolution-storage-set-view.c: Remove <gnome.h>
- * evolution-storage.c: Replace <bonobo.h>
- * main.c: Replace <gnome.h> and <bonobo.h>
- * importer/importer.c: Replace <gnome.h>
- * importer/intelligent.c: Replace <gnome.h>. Add prototype for
- intelligent_importer_init().
- * importer/intelligent.h: Added this file.
-
-2001-03-28 Ettore Perazzoli <ettore@ximian.com>
-
- * e-storage-set-view.c (folder_sort_callback): Use
- `g_strcasecmp()' instead of `strcasecmp()'.
-
-2001-03-28 Christopher James Lahey <clahey@ximian.com>
-
- * e-storage-set-view.c (storage_sort_callback,
- folder_sort_callback): Use strcasecmp instead of strcmp.
-
-2001-03-28 Ettore Perazzoli <ettore@ximian.com>
-
- * e-local-storage.c (async_xfer_folder_callback):
- s/new_folder/destination_folder/ where appropriate, idiot.
-
-2001-03-28 Jon Trowbridge <trow@gnu.org>
-
- * e-shell-view-menu.c: In a fit of egomania, added myself to the
- authors array.
-
-2001-03-26 Ettore Perazzoli <ettore@ximian.com>
-
- * evolution-shell-component-client.c
- (shell_component_result_from_corba_exception): Implement.
-
-2001-03-26 Ettore Perazzoli <ettore@ximian.com>
-
- * evolution-shell-component-client.c
- (evolution_shell_component_client_async_xfer_folder): Handle CORBA
- exception.
- (evolution_shell_component_client_async_create_folder): Likewise.
-
- * e-local-storage.c (create_folder_directory): Create the
- `subfolders' directory if it doesn't exist.
-
- * e-storage-set-view.c (tree_drag_data_received): Build the
- correct target path by appending the basename from the source
- path.
-
- * evolution-shell-component.c
- (impl_ShellComponent_async_xfer_folder): Enabled again.
- (class_init): Install it.
-
- * e-local-folder.c (METADATA_FILE_NAME_LEN): Removed #define.
- (METADATA_FILE_NAME): Removed #define.
- (save_metadata): Use the public
- `E_LOCAL_FOLDER_METADATA_FILE_NAME' value instead.
- (construct_loading_metadata): Likewise.
-
- * e-local-folder.h (E_LOCAL_FOLDER_METADATA_FILE_NAME_LEN): New
- #define.
- (E_LOCAL_FOLDER_METADATA_FILE_NAME): New #define.
-
- * e-local-storage.c (remove_folder_directory): New helper
- function.
- (async_xfer_folder_step): New.
- (async_xfer_complete): New.
- (async_xfer_folder_callback): New.
- (impl_async_xfer_folder): Implement.
-
- * e-storage.h: Added value `E_STORAGE_NOTEMPTY' to
- `EStorageResult'.
-
- * evolution-shell-component-client.c
- (evolution_shell_component_clinet_async_xfer_folder): New.
-
-2001-03-23 Ettore Perazzoli <ettore@ximian.com>
-
- * e-local-storage.c (impl_async_xfer_folder): New, implementation
- for `EStorage::async_xfer_folder'.
- (class_init): Install it.
- (check_valid_name): Removed. Conflicts shouldn't be handled this
- way, and hardcoding the names is *bad*.
- (create_folder_directory): New helper function.
- (real_do_folder_create): Removed.
- (create_folder): New. Do things here using
- `create_folder_directory'.
- (impl_async_create_folder): Use `create_folder'.
- (notify_bonobo_listener): Renamed from `notify_listener'. Moved
- on top for clarity.
-
-2001-03-22 Iain Holmes <iain@ximian.com>
-
- * importer/evolution-importer-listener.c (evolution_importer_listener_new):
- Remove the usage of the corba_object thing.
- (evolution_importer_listener_construct): Ditto.
-
- * e-local-storage.c (real_do_folder_create): Revert the e_mkdir_hier call
- to two seperate calls to mkdir. If the directory exists, just call the
- callback and notify the listener.
-
- * importer/GNOME_Evolution_Importer.idl: Add a folderpath paramater to the
- loadFile method.
-
- * importer/evolution-importer.[ch]: Update for the new folderpath param.
-
- * importer/evolution-importer-client.[ch]: Ditto.
-
- * importer/importer.c: Ditto.
-
-2001-03-22 Ettore Perazzoli <ettore@ximian.com>
-
- * e-storage-set-view.c (motion_notify_event): Unref the target
- list we create on the fly.
-
-2001-03-22 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-folder-creation-dialog.c (async_create_cb): Changed
- signature to match `EStorageSetResultCallback' instead of
- `EStorageResultCallback', to match the changes in the async_create
- API call.
-
-2001-03-22 Ettore Perazzoli <ettore@ximian.com>
-
- * e-storage-set-view.c: Removed some unused static variables.
- (set_evolution_path_selection): Removed unused variable
- `evolution_path'.
-
- * e-storage-set.c (e_storage_set_async_xfer_folder): Get an
- `EStorageSetResultCallback', instead of an
- `EStorageResultCallback'.
- (e_storage_set_async_remove_folder): Likewise.
- (e_storage_set_async_create_folder): Likewise.
- (storage_callback_converter): New callback to convert from the
- EStorageResultCallback to the EStorageSetResultCallback.
-
- * e-storage-set.h: New typedef `EStorageSetResultCallback'.
-
- * Evolution-ShellComponent.idl: Renamed `copyFolderAsync' into
- `xferFolderAsync' for consistency.
-
- * e-storage-set-view.c (tree_drag_data_received): Updated to use
- `e_storage_set_async_xfer_folder()' instead of
- `e_storage_set_async_move_folder()' or
- `e_storage_set_async_copy_folder()'.
- (folder_xfer_callback): New, callback for the xfer function.
-
- * e-storage-set.c (e_storage_set_async_move_folder): Removed.
- (e_storage_set_async_copy_folder): Removed.
- (e_storage_set_async_xfer_folder): New.
-
-2001-03-22 Ettore Perazzoli <ettore@ximian.com>
-
- * e-storage.c (e_storage_async_xfer_folder): New.
- (impl_async_xfer_folder): New, default implementation for the
- `async_xfer_folder' method.
- (class_init): Install it.
-
- * e-storage.h: New virtual method `async_xfer_folder'.
-
- * evolution-storage.c (impl_Storage_async_xfer_folder): New. Just
- a stub for now.
- (evolution_storage_get_epv): Install it as the implementation for
- the `asyncXferFolder' method.
-
- * Evolution-Storage.idl: New method `asyncXferFolder'.
-
-2001-03-22 Ettore Perazzoli <ettore@ximian.com>
-
- * e-storage-set-view.c: Removed `source_drag_types',
- `num_source_drag_types', `destination_drag_types',
- `num_destination_drag_types', `target_list'.
- (E_SHORTCUT_TARGET_TYPE): Renamed from "E_SHORTCUT_TYPE".
- (EVOLUTION_PATH_TARGET_TYPE): Define to "_EVOLUTION_PRIVATE_PATH".
- (find_matching_target_for_drag_context): If any of the targets
- matches it, return it.
- (handle_evolution_path_drag_motion): New.
- (tree_drag_motion): Use it if we are matching an
- `EVOLUTION_PATH_TARGET_TYPE' target.
- (e_storage_set_view_construct): Call `e_tree_drag_dest_set()' on
- the view so that we become a possible DnD target.
- (get_folder_at_node): Don't die if you don't find a folder there.
- (create_target_entries_from_dnd_type_list): Make the first entry
- an `EVOLUTION_PATH_TARGET_TYPE', the second one an
- `E_SHORTCUT_TYPE', and the following ones the ones defined by the
- folder.
- (set_evolution_path_selection): New function to set the private
- Evolution path selection.
- (set_e_shortcut_selection): Assert @selection_data to be not NULL.
- (class_init): Don't set up the `target_list' anymore.
- (storage_sort_callback): Actually compare the two nodes, not the
- first node with itself.
-
- * e-storage-set.c (e_storage_set_async_copy_folder): New.
- (e_storage_set_async_move_folder): New.
-
-2001-03-22 Christopher James Lahey <clahey@ximian.com>
-
- * e-storage-set-view.c (etree_get_save_id): Changed get_save_id to
- just return a strdup of the path.
- (new_storage_cb, new_folder_cb, insert_folders, insert_storages):
- Call e_tree_memory_sort_node.
-
-2001-03-21 Ettore Perazzoli <ettore@ximian.com>
-
- * e-storage-set-view.c (etree_get_save_id): If we have no
- associated StorageSet yet, just return "root". [This can happen
- when this function is called at construction time.]
-
-2001-03-21 Ettore Perazzoli <ettore@ximian.com>
-
- * Evolution-ShellComponentDnd.idl: StudlyCapsify struct members to
- match the new IDL naming standards.
- * e-storage-set-view.c: Updated accordingly.
-
-2001-03-21 Ettore Perazzoli <ettore@ximian.com>
-
- * e-storage-set-view.c (tree_drag_data_get): Get the target type
- from the atom, and pass it through the `SourceFolder::getData'
- invocation. Also, signal an error by passing `-1' as the length
- value to `gtk_selection_data_set()'.
- (find_matching_target_for_drag_context): New helper function.
- (tree_drag_motion): Use it to figure out a suitable type for the
- drop action, and pass it to the `DestinationFolder::handleMotion'
- method.
-
- * e-storage-set-view.c (get_component_at_node): New helper
- function.
- (table_drag_begin): Use it.
- (convert_corba_drag_action_to_gdk): New helper function.
- (table_drag_motion): Use the `DestinationFolder::handleMotion'
- method to handle the "drag_motion" signal.
-
- * Evolution-ShellComponentDnd.idl: Change the signature for the
- `handleMotion' method so that it only has @suggested_action
- parameter.
-
-2001-03-20 JP Rosevear <jpr@ximian.com>
-
- * importer/Makefile.am: make sure intelligent.h gets disted
-
-2001-03-19 Christopher James Lahey <clahey@ximian.com>
-
- * Merged e-tree-rework-branch:
-
- 2001-03-19 Christopher James Lahey <clahey@ximian.com>
-
- * e-storage-set-view.c (etree_get_save_id): Made "root" detection
- deal properly with removed nodes.
-
- 2001-03-18 Christopher James Lahey <clahey@ximian.com>
-
- * e-shell-view.c (e_shell_view_save_settings): Added some unused
- code to implement saving of the expanded state.
-
- * e-storage-set-view.c: Added has_save_id and get_save_id methods.
-
- 2001-03-13 Christopher James Lahey <clahey@ximian.com>
-
- * e-storage-set-view.c (ETREE_SPEC): Set draw-grid here to false.
-
- 2001-03-09 Christopher James Lahey <clahey@ximian.com>
-
- * e-storage-set-view.c, e-storage-set-view.h: Chaned this to use
- ETree instead of ETable.
-
-2001-03-19 Ettore Perazzoli <ettore@ximian.com>
-
- * evolution-shell-component-client.c: New members
- `dnd_source_folder_interface' and
- `dnd_destination_folder_interface' in
- `EvolutionShellCompoentClientPrivate'.
- (init): Initialize.
- (impl_destroy): Clean up.
- (evolution_shell_component_client_get_dnd_source_interface): New.
- (evolution_shell_component_client_get_dnd_destination_interface):
- New.
-
-2001-03-19 Ettore Perazzoli <ettore@ximian.com>
-
- * e-storage-set-view.c (init): Ooops. Initialize the
- `drag_corba_source_context' member. correctly.
- (table_drag_begin): Don't crash if queryInterface returns
- `CORBA_OBJECT_NIL'.
- (table_drag_end): Don't do anything if the
- `drag_corba_source_interface' is `CORBA_OBJECT_NIL'.
-
-2001-03-19 Ettore Perazzoli <ettore@ximian.com>
-
- * e-storage-set-view.c New members `drag_data',
- `drag_corba_source_interface' and `drag_corba_source_context in
- `EStorageSetViewPrivate'.
- (init): Init the new members.
- (destroy): Clean up the new members.
- (table_drag_begin): Query for the
- `EvolutionShellComponentDnd::SourceFolder' interface on the
- handler for the folder we are dragging from, and initialize all
- the CORBA context information for the drag, after invoking
- `::beginDrag()' on it.
- (convert_gdk_drag_action_to_corba): New helper function.
- (table_drag_data_get): Get the data using
- `::SourceFolder::getData'.
- (table_drag_end): New, override for the "ETable::table_drag_end"
- signal. Invoke `::endDrag' on the SourceFolder interface,
- unref/release the interface, and clean up the source context.
- (table_drag_data_delete): New, override for the
- "ETable::table_drag_data_delete" signal.
- (class_init): Install `table_drag_end' and
- `table_drag_data_delete'.
-
- * Evolution-ShellComponentDnd.idl: Derive `::DestinationFolder'
- and `SourceFolder' from `Bonobo::Unknown'.
-
-2001-03-19 Ettore Perazzoli <ettore@ximian.com>
-
- * e-storage-set-view.c (table_drag_data_get): Don't get the
- selection through
- `evolution_shell_component_client_get_dnd_selection()'.
-
- * evolution-shell-component.c
- (impl_ShellComponent_getDndSelection): Removed.
- (class_init): Don't install.
-
- * evolution-shell-component-client.c
- (evolution_shell_component_client_get_dnd_selection): Removed.
-
- * Evolution-ShellComponentDnd.idl: New file with the DnD stuff.
-
- * Evolution-ShellComponent.idl: Removed the dnd stuff.
-
-2001-03-15 Pablo Saratxaga <pablo@mandrakesoft.com>
-
- * main.c: fixed a no-c-format tag
-
-2001-03-14 Ettore Perazzoli <ettore@ximian.com>
-
- * importer/Makefile.am (INCLUDES): Remove `-g Wall' and friends.
- Use `$(EXTRA_GNOME_CFLAGS)' instead of `$(GNOME_INCLUDEDIR)'. Add
- `-I$(top_builddir)/shell'.
-
-2001-03-13 Iain Holmes <iain@ximian.com>
-
- * importer/intelligent.c (start_importer): Add a "Don't ask me again"
- checkbox and don't ask about an importer if the box was ticked.
-
-2001-03-12 Iain Holmes <iain@ximian.com>
-
- * Evolution-Storage.idl: Add a FolderResult structure.
-
- * e-local-storage.c (struct _AsyncCreateFolderCallbackData): Add a
- Bonobo_Listener.
- (notify_listener): Function to...notify the listener.
- (component_async_create_folder_callback): Use the notify_listener
- function.
- (real_do_folder_create): New prototype. Replace all returns with
- a call to notify_listener. Make the directory with a call to
- e_mkdir_hier instead of multiple calls to mkdir. Only emit a fail
- on a bad error, not on EEXIST.
- (bonobo_interface_create_folder_cb): Namespace create_folder_cb to match
- the others.
-
- e-shell.c: Run the intelligent importer.
-
- evolution-storage.c (impl_Storage_async_create_folder): Just emit the signal,
- not the callback.
- (e_marshal_NONE__POINTER_POINTER_POINTER_POINTER_POINTER): Lovely signal
- marshaller.
- (class_init): Change the signal definition for the create_folder signal.
-
- importer/GNOME_Evolution_Importer.idl: Add an IntelligentImporter inteface.
-
- importer/Makefile.am: Add the evolution-intelligent-importer.c, intelligent.c
- and evolution-intelligent-importer.h to the files.
-
- importer/evolution-importer-listener.[ch]: Convert to BonoboXObject.
-
- importer/evolution-importer.[ch]: BonoboXObjectification.
-
- importer/evolution-intelligent-importer.[ch]: BonoboXObject for the
- GNOME:Evolution:IntelligentImporter interface.
-
- importer/intelligent.c: Code for running the intelligent importers.
-
-2001-03-08 Ettore Perazzoli <ettore@ximian.com>
-
- * e-storage-set-view.c (get_folder_at_row): New helper function.
- (create_target_list_for_row): Use it.
- (table_drag_data_get): Get the selection from the shell component
- using `evolution_shell_component_client_get_dnd_selection()'.
- (set_e_shortcut_selection): Turn a `g_return_if_fail()' into a
- `g_assert()'.
-
- * evolution-shell-component.c: New member `get_dnd_selection_fn'
- in `EvolutionShellComponentPrivate'.
- (evolution_shell_component_construct): New arg
- @get_dnd_selection_fn.
- (evolution_shell_component_new): Likewise.
- (impl_ShellComponent_getDndSelection): New, implementation for
- `ShellComponent::getDndSelection'.
- (class_init): Install it.
-
- * evolution-shell-component-client.c
- (evolution_shell_component_client_get_dnd_selection): New, wrapper
- for `ShellComponent::getDndSelection'.
-
- * evolution-shell-component.h: Renamed
- `EvolutionShellComponentPopulateFolderContextMenu' into
- `EvolutionShellComponentPopulateFolderContextMenuFn'. New
- function pointer typedef `EvolutionShellComponentGetDndSelectionFn'.
-
- * Evolution-ShellComponent.idl: New method
- `ShellComponent::getDndSelection'.
-
- * e-storage-set-view.c (create_target_entries_from_dnd_type_list):
- Always add an `E_SHORTCUT_TYPE' type at least.
- (create_target_list_for_row): Don't return NULL if the list of
- exported DND types is NULL. Don't create an unused target list.
- Actually return the created target list.
- (table_drag_data_get): If the @info is zero, set the e-shortcut
- selection.
- (set_uri_list_selection): Temporarily disabled.
-
-2001-03-07 Ettore Perazzoli <ettore@ximian.com>
-
- * e-component-registry.c (register_type): New args
- @num_exported_dnd_types, @exported_dnd_types,
- @num_accepted_dnd_types, @accepted_dnd_types. Pass them to
- `e_folder_type_registry_register_type()'.
- (register_component): Updated accordingly, getting the values from
- the CORBA `GNOME::Evolution::FolderType' struct.
-
- * e-folder-type-registry.c: New members `accepted_dnd_types' and
- `exported_dnd_types' in `struct _FolderType'.
- (e_folder_type_registry_register_type): New args
- @num_accepted_dnd_types, @accepted_dnd_types,
- @num_exported_dnd_types, @exported_dnd_types.
- (register_folder_type): Likewise.
- (folder_type_new): Likewise. Use them to initialize
- `accepted_dnd_types' and `exported_dnd_types' in the newly created
- `FolderType' struct.
- (e_folder_type_registry_get_accepted_dnd_types_for_type): New.
- (e_folder_type_registry_get_exported_dnd_types_for_type): New.
-
- * e-storage-set-view.c: New #defined constant `DRAG_RESISTANCE'.
- New members `drag_x', `drag_y', `drag_column', `drag_row' in
- `EStorageSetViewPrivate'.
- (init): Initialize them.
- (button_press_event): New function, overriding for the
- `::button_press_event' method.
- (motion_notify_event): New function, overriding for the
- `::motion_notify_event' method.
- (class_init): Install them.
-
- * evolution-shell-component.c
- (duplicate_null_terminated_string_array): New helper function.
- (evolution_shell_component_construct): Copy the values for
- `accepted_dnd_types' and `exported_dnd_types' from the original
- folder type list using it.
- (destroy): Free the `exported_dnd_types' and `accepted_dnd_types'
- members too.
- (fill_corba_sequence_from_null_terminated_string_array): New
- helper function.
- (impl_ShellComponent__get_supported_types): Also set the
- `exported_dnd_types' and `accepted_dnd_types' values in the folder
- type elements we return.
-
- * evolution-shell-component.h: Added `accepted_dnd_types' and
- `exported_dnd_types' members to `EvolutionShellComponentFolderType'.
-
- * Evolution-ShellComponent.idl: Renamed `accepted_dnd_mime_types'
- to `accepted_dnd_types' and `exported_dnd_mime_types' to
- `exported_dnd_types'. These are not necessarily MIME types.
-
-2001-03-05 Christopher James Lahey <clahey@ximian.com>
-
- * e-storage-set-view.c: Override cursor_activated signal instead
- of cursor_changed signal.
-
-2001-02-27 Dan Winship <danw@ximian.com>
-
- * main.c (development_warning): Update this again.
-
-2001-02-26 Ettore Perazzoli <ettore@ximian.com>
-
- * Evolution-Shell.idl: Rename `FolderTypeList' to
- `FolderTypeNameList' as it was confusing.
-
- * Evolution-ShellComponent.idl: New members
- `accepted_dnd_mime_types' and `exported_dnd_mime_types' in `struct
- FolderType'.
-
-2001-02-24 Jeffrey Stedfast <fejj@ximian.com>
-
- * e-storage.c (folder_changed_cb): Don't free a const pointer.
-
-2001-02-23 Iain Holmes <iain@ximian.com>
-
- * e-local-storage.c (construct): Connect to the create-folder signal.
- (impl_async_create_folder): Move this into the real_do_folder_create
- function.
- (real_do_folder_create): Function that creates the folder.
- (create_folder_cb): Creates the folder form a callback.
-
-2001-02-21 Michael Meeks <michael@ximian.com>
-
- * importer/importer.c: add include.
- (show_import_wizard): update signature to that of a verb.
-
- * evolution-shell-component.c (corba_class_init): move into
- (class_init): here & upd.
- (evolution_shell_component_construct): upd.
- (create_servant): kill.
- (E_MAKE_TYPE) -> E_MAKE_X_TYPE.
-
-2001-02-20 Dan Winship <danw@ximian.com>
-
- * e-folder.c (_EFolderPrivate): split "highlighted" into
- self_highlight and child_highligh.
- (e_folder_get_highlighted): Return TRUE if either self_highlight
- is true or any child is highlighted.
- (e_folder_set_child_highlight): New function to tell the folder
- about a child highlight change.
-
- * e-storage.c (folder_changed_cb): Update child highlights
- correctly on folders so that folders will be highlighted whenever
- their children are.
-
-2001-02-17 Christopher James Lahey <clahey@ximian.com>
-
- * e-shell-view-menu.c (file_verbs): Cast this fucntion pointer.
-
- * e-storage-set-view.c (ETABLE_SPEC): Turn on horizontal scrolling
- here.
-
- * evolution-shell-component.c
- (impl_ShellComponent_async_copy_folder): Commented out this unused
- function.
-
- * evolution-storage.c (storage_gtk_to_corba_result): Removed an
- unused variable here.
-
- * importer/importer.c: Include gal/widets/e-gui-utils.h.
-
-2001-02-14 Dan Winship <danw@ximian.com>
-
- * Evolution-Storage.idl: add asyncCreateFolder and
- asyncRemoveFolder interfaces. (Use Bonobo::Listener rather than
- creating a new listener interface.)
-
- * Evolution-LocalStorage.idl: Remove the
- Evolution::LocalStorageOpsListener interface, which wasn't being
- used.
-
- * evolution-storage.c (impl_Storage_async_create_folder,
- impl_Storage_async_remove_folder): implement by emitting signals
- on the EvolutionStorage object. Convert from
- EvolutionStorageResult to GNOME_Evolution_Storage_Result (blah!)
- (class_init): Set up the new "create_folder" and "remove_folder"
- signals.
-
- * e-corba-storage.c (async_create_folder, async_remove_folder):
- Implement, using the new Evolution::Storage IDL. Convert from
- GNOME_Evolution_Storage_Result to EStorageResult (blah!)
-
- * e-storage-set.c (e_storage_set_async_create_folder): Don't allow
- a NULL description (since it doesn't allow a NULL anythign else).
-
- * e-shell-folder-creation-dialog.c (dialog_clicked_cb): Pass ""
- rather than NULL for the description.
-
-2001-02-12 Kjartan Maraas <kmaraas@gnome.org>
-
- * Makefile.am: xml-i18n-tools setup.
- * GNOME_Evolution_Shell.oaf.in: Mark strings for translation.
-
-2001-02-10 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view-menu.c: Moved the author list to the top of the
- file.
- (command_about_box): Display the `SUB_VERSION' as well.
-
-2001-02-08 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-folder-creation-dialog.c (dialog_clicked_cb): Destroy
- the dialog instead of using `gnome_dialog_close()'.
- (dialog_clicked_cb): Likewise.
- (dialog_close_cb): Removed.
- (e_shell_show_folder_creation_dialog): Don't connect to the
- "close" signal anymore.
-
- * e-shell-folder-selection-dialog.c
- (folder_creation_dialog_result_cb): New callback. Set the default
- folder to be the newly created one.
- (impl_clicked): Use it.
-
- * e-shell-folder-creation-dialog.c: Add members `folder_path',
- `result_callback' and `result_callback_data' to `struct
- _DialogData'.
- (e_shell_show_folder_creation_dialog): New args @result_callback
- and @result_callback_data.
- (async_create_cb): Notify the result through the specified
- callback.
- (dialog_clicked_cb): Likewise. Set the `folder_path' in the
- DialogData so that we can pass it over when we get the async
- notification of the result of the operation.
-
- * e-shell-folder-creation-dialog.h: New type
- `EShellFolderCreationDialogCallback'.
-
- * e-storage-set-view.c (e_storage_set_view_set_current_folder):
- Show the node too, using `e_tree_model_show_node()'.
-
-2001-02-05 Ettore Perazzoli <ettore@ximian.com>
-
- * e-setup.c (copy_default_stuff): s/first time you run/first time
- you are running/.
-
-2001-02-02 Ettore Perazzoli <ettore@ximian.com>
-
- * e-component-registry.h: Don't #include <config.h>.
- * e-corba-storage-registry.h: Likewise.
- * e-corba-storage.h: Likewise.
- * e-folder-type-registry.h: Likewise.
- * e-folder.h: Likewise.
- * e-local-folder.h: Likewise.
- * e-local-storage.h: Likewise.
- * e-shell-folder-title-bar.h: Likewise.
- * e-shell-view.h: Likewise.
- * e-shell.h: Likewise.
- * e-shortcuts-view.h: Likewise.
- * e-shortcuts.h: Likewise.
- * e-splash.h: Likewise.
- * e-storage-set-view.h: Likewise.
- * e-storage-set.h: Likewise.
- * e-storage.h: Likewise.
- * evolution-local-storage.h: Likewise.
- * evolution-session.h: Likewise.
- * evolution-shell-client.h: Likewise.
- * evolution-shell-component.h: Likewise.
- * evolution-shell-view.h: Likewise.
- * evolution-storage-listener.h: Likewise.
- * evolution-storage.h: Likewise.
-
-2001-02-02 Iain Holmes <iain@ximian.com>
-
- * importer/evolution-importer-client.c:
- (evolution_importer_client_new_from_id): Free the CORBA_Environment.
-
-2001-01-30 Iain Holmes <iain@ximian.com>
-
- * importer/importer.c: (start_import): Added a notice if there is no
- importer that can handle the file.
- (get_iid_for_filetype): Free the list of multiple items before returning.
- (importer_timeout_fn): Removed notice.
- (import_cb): Removed notice.
-
-2001-01-30 Iain Holmes <iain@ximian.com>
-
- * importer/importer.c: Added a nasty hack to change the druids Finish
- button to be Import.
-
- * importer/import.glade: Remove the FIXME warning.
-
-2001-01-30 Kjartan Maraas <kmaraas@gnome.org>
-
- * importer/importer.c: Fixed some typos.
-
-2001-01-28 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-folder-creation-dialog.c (add_storage_set_view): Set the
- shadow type to be `GTK_SHADOW_IN' in the EScrollFrame.
-
-2001-01-27 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view.c (storage_set_view_box_button_release_event_cb):
- Don't pop down the folder bar if the button release happens in the
- e-paned's handle.
- (storage_set_view_box_button_release_event_cb): Changed the return
- value to be int. Stupid me.
-
-2001-01-27 Jason Leach <jasonleach@usa.net>
-
- * e-shortcuts-view.h: Fix #include to point to gal instead of
- widgets/shortcut-bar/
-
- * e-shortcuts.c: Here too.
- * e-shortcuts-view-model.h: And lastly here.
-
- * Makefile.am (evolution_LDADD): Don't link with the old
- widgets/shortcut-bar/libshortcut-bar.la anymore, gal has the new
- shortcut-bar.
-
-2001-01-27 Ettore Perazzoli <ettore@ximian.com>
-
- * e-storage-set-view.c (get_pixbuf_for_folder): Don't scale if the
- size is the same. `gdk_pixbuf_scale()' seems to be blurring the
- image even if the scaling factor is 1.0.
-
-2001-01-26 Ettore Perazzoli <ettore@ximian.com>
-
- * e-corba-storage.c: Remove all instances of `__FUNCTION__'.
- * e-folder-tree.c: Likewise.
- * e-folder-type-registry.c: Likewise.
- * e-shell-view.c: Likewise.
- * e-shell-view-menu.c: Likewise.
-
-2001-01-25 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view.c (e_shell_view_construct): Connect the
- "updated_folder" with `gtk_signal_connect_while_alive()' so that
- it gets disconnected when the shell view dies.
-
-2001-01-24 Jason Leach <jasonleach@usa.net>
-
- (Fix #1252: Need a File->Close way to close a view)
-
- * e-shell-view-menu.c (command_close): New function, destroys the
- current view.
-
- * e-shell.c (view_destroy_cb): Make sure shell settings get saved
- when the last view is destroyed.
-
-2001-01-24 Kjartan Maraas <kmaraas@gnome.org>
-
- * importer/GNOME_Evolution_Importer.idl: Fix missing ';'.
-
-2001-01-23 Ettore Perazzoli <ettore@ximian.com>
-
- * e-corba-storage.c (impl_StorageListener_update_folder): Don't
- call `e_storage_updated_folder()' as it's supposed to happen
- automatically now.
-
- * e-storage.c (e_storage_updated_folder): Removed.
- (folder_changed_cb): New callback for the "changed" signal on the
- EFolders.
- (e_storage_new_folder): Connect it.
-
- * e-folder-tree.c: New member `data_to_path' in `EFolderTree'.
- (e_folder_tree_new): Init here.
- (e_folder_tree_destroy): Destroy it here.
- (e_folder_tree_add): Add to the `data_to_path' hash. Make sure
- we are not adding the same folder twice.
- (remove_folder): Remove from the `data_to_path' hash.
- (e_folder_tree_get_path_for_folder): New.
-
- * e-shell-view.c (e_shell_view_construct): Don't connect to the
- "folder_updated" signal of the local storage anymore.
- (folder_updated_cb): Removed.
- (updated_folder_cb): New.
- (e_shell_view_construct): Connect it to the "updated_folder"
- signal.
-
- * e-local-storage.c: Remove `FOLDER_UPDATED' enum value and the
- `signals' variable, as we don't want to define any custom signals
- here anymore.
- (bonobo_interface_update_folder_cb): No need to emit the
- "folder_updated" signal here. The base class will take care of
- this already.
- (class_init): Don't install the "folder_updated" signal here.
-
- * e-local-storage.h: Removed signal "folder_updated". It is not
- necessary, as we already have an `updated_folder' in `EStorage',
- which is the parent class of `ELocalStorage'.
-
-2001-01-24 Iain Holmes <iain@ximian.com>
-
- * importer/GNOME_Evolution_Importer.idl: Removed the busy exception.
-
-2001-01-19 Iain Holmes <iain@ximian.com>
-
- * importer/GNOME_Evolution_Importer.idl: Make the processItem oneway.
- Make the Listener interface inherit from Bonobo::Unknown.
-
- * importer/evolution-importer-client.[ch]: Remove all the crap to deal
- with creating the Listener object.
-
- * importer/evolution-importer-listener.[ch]: A new bonobo object to
- implement the ImporterListener interface.
-
- * importer/importer.c: Fix it up to use the new Listener object.
-
-2001-01-18 Iain Holmes <iain@ximian.com>
-
- * e-shortcuts-view.c (show_new_group_dialog): Don't make the dialog
- modal.
-
-2001-01-16 Iain Holmes <iain@ximian.com>
-
- * importer/GNOME_Evolution_Importer.idl: Removed the ImporterFactory
- interface and put the methods from it into the Importer interface.
-
- * importer/evolution-importer-factory.[ch]: Removed.
-
- * importer/evolution-importer.[ch]: Added the new methods.
- Added inline documentation for all public functions.
-
- * importer/evolution-importer-client.[ch]: Added new client support for
- the new methods.
- Added inline documentation for all public functions.
-
- * importer/importer.c (create_plugin_menu): Changed the query to look for
- IDL:GNOME/Evolution/Importer:1.0.
- (start_import): Do all CORBA methods through the EvolutionImporterClient.
- (get_iid_for_filetype): Change query to search for
- IDL:GNOME/Evolution/Importer:1.0.
-
-2001-01-19 Dan Winship <danw@ximian.com>
-
- * evolution-storage.c (evolution_storage_folder_exists): New
- function. Obvious.
-
-2001-01-19 Jason Leach <jasonleach@usa.net>
-
- (Bug #883: Shortcut bar does not update when a folders display
- name changes)
-
- * e-local-storage.c (class_init): Define a new "folder_updated"
- signal here.
- (bonobo_interface_update_folder_cb): Emit the new folder_updated
- signal here.
-
- * e-shell-view.c (e_shell_view_construct): Connect the
- EShell::ELocalStorage folder_updated signal here. Also connect
- the updated_folder signal coming from EShell::EStorageSet to the
- new callback.
-
- * e-shell-view.c (folder_updated_cb): Callback that actually
- initiates the shell updating.
-
- * e-shortcuts.c (e_shortcuts_update_shortcut_by_uri): New
- function. Given a URI for a shortcut bar item, we'll update it.
-
- * e-shortcuts.c (e_shortcuts_remove_shortcut_by_uri): New
- function. Given a URI for a shortcut bar item, we'll remove it.
-
- * e-shortcuts.c (removed_folder_cb): Connect this callback that
- will remove a renamed vfolder from the shortcut bar. Temporary
- fix to the problem of renaming vfolders and having the shortcut
- bar think the old vfolder still exists.
-
- (Bug #1168: Shortcut bar and icon size persistence)
-
- * e-shell-view.c (save_shortcut_bar_icon_modes): New static
- function, save the icon modes (for all shortcut bar groups, even
- though we only have one group now).
- (load_shortcut_bar_icon_modes): New static function, load the
- saved shortcut bar group icon modes and apply them to our shortcut
- bar.
-
-2001-01-17 Federico Mena Quintero <federico@ximian.com>
-
- * importer/evolution-importer.h: Use "typedef enum { ... } Blah;"
- instead of "typedef enum _Blah Blah; enum _Blah { ... };" so that
- gtk-doc can parse it. Sigh.
-
-2001-01-17 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-folder-selection-dialog.c
- (e_shell_folder_selection_dialog_construct): Set the shadow type
- for the EScrollFrame. Also, make the EStorageSetView widget grab
- the focus. For some reason it doesnt' seem to work, but I'll
- blame ETree for now.
-
-2001-01-17 Ettore Perazzoli <ettore@ximian.com>
-
- * e-shell-view.c (update_for_current_uri): Display the folder name
- before "Evolution" instead of after it. Also, display the
- sub-version string if it was defined when configuring.
-
-2001-01-17 Ettore Perazzoli <ettore@ximian.com>
-
- * e-storage-set-view.c (table_drag_drop): Don't emit the
- "dnd_action" signal here. Instead, do a `gtk_drag_get_data()' to
- retrieve information about the drop.
- (table_drag_data_received): New, implementation for
- `ETable::table_drag_data_received'.
- (class_init): Install it.
- (table_drag_data_get): Use `unsigned int' instead of `guint' for
- consistency.
- (table_drag_motion): Same here. Also use `int' instead of `gint'.
- (table_drag_drop): Likewise.
- (treepath_compare): Likewise.
- (marshal_NONE__ENUM_STRING_STRING_STRING): Removed.
- (marshal_NONE__GDKDRAGACTION_STRING_STRING_STRING): New.
- (class_init): Use it; update signal "dnd_action" so that it passes
- a `GdkDragAction *' instead of .
-
- * e-storage-set-view.h: Change signal "::dnd_action" so that it
- provides a `GdkDragContext' instead of just a `GdkDragAction'.
-
-2001-01-16 Michael Meeks <michael@helixcode.com>
-
- * e-shell-view.c (e_shell_view_construct): set config
- path on window.
-
-2001-01-16 JP Rosevear <jpr@ximian.com>
-
- * e-shell-folder-title-bar.c (e_shell_folder_title_bar_new): pop the
- visual/cm after the construct
-
-2001-01-15 JP Rosevear <jpr@ximian.com>
-
- * e-shell-folder-title-bar.c (e_shell_folder_title_bar_new): push/pop
- the color map
- (e_shell_folder_title_bar_new): and the visual...
-
-2001-01-15 Iain Holmes <iain@ximian.com>
-
- * importer/importer.c (import_druid_cancel): Just destroy the wizard.
- All other freeing code is moved into import_druid_destroy.
- (show_import_wizard): Connect the destroy signal to import_druid_destroy.
- (start_import): Connect to the destroy signal of the dialog and the
- clicked as well.
- (dialog_destroy_cb): Stop the import after the current item has finished.
- (dialog_clicked_cb): Stop the import.
- (import_cb): Only process the next item if the dialog hasn't been stopped.
- Destroy the dialog if it hasn't been destroyed already.
-
- * e-splash.c (e_splash_construct): Set the window title to Evolution.
-
-2001-01-13 Jason Leach <jasonleach@usa.net>
-
- (Fix bug #934: Add Right-click item to hide the shortcut bar)
-
- * e-shortcuts-view.c (class_init): Create a new hide_requested
- signal.
- (hide_shortcut_bar_cb): New function that gets called from the
- right click menu items, it emits the hide_requested signal.
-
- * e-shell-view.c (setup_widgets): Connect the hide_requested from
- the shortcut bar.
- (hide_requested_cb): New function.
-
-2001-01-13 Ettore Perazzoli <ettore@ximian.com>
-
- * e-storage-set-view.h: New signal `dnd_action'.
-
- * e-storage-set-view.c: Renamed `drag_types' to
- `source_drag_types' and `num_drag_types' to
- `num_source_drag_types'. New variables `destination_drag_types'
- and `num_destination_drag_types'.
- (e_storage_set_view_construct): Set the ETree as a drag
- destination. Allow both GDK_ACTION_MOVE and GDK_ACTION_COPY.
-
- * e-storage-set-view.c (table_drag_begin): Renamed from
- `etable_drag_begin'.
- (table_drag_data_get): Renamed from `etable_drag_data_get'.
- Changed to be a method override instead of a signal handler.
- (table_drag_motion): New; implementation for the
- `ETable::table_drag_motion' method. Changed to be a method
- override instead of a signal handler.
- (table_drag_drop): New, implementation for `::table_drag_drop'.
- (cursor_change): Renamed from `on_cursor_change'.
- (e_storage_set_view_construct): Don't connect the signals here.
- (class_init): Instead, override the methods here. Also, install
- our override for `::table_drag_motion' and for
- `::table_drag_drop'.
- (right_click): Changed to be a method instead of a signal handler.
- (cursor_change): Likewise.
-
-2001-01-13 Miguel de Icaza <miguel@gnu.org>
-
- * e-shell.c (e_shell_construct): Unref our copy, and then destroy.
-
- * e-splash.c (e_splash_set_icon_highlight): Do not execute code if
- we have been destroyed.
- (e_splash_add_icon): ditto.
-
-2001-01-12 Miguel de Icaza <miguel@gnu.org>
-
- * e-splash.c (e_splash_construct): Ok, talked to Ettore. Going
- back to TOPLEVEL non-POPUP.
- (e_splash_construct): Remove nice toplevel window.
-
-2001-01-12 Ettore Perazzoli <ettore@ximian.com>
-
- * evolution-shell-component.c: Add member `copy_folder_fn' to
- `EvolutionShellComponentPrivate'.
- (init): Init to NULL.
- (impl_ShellComponent_async_copy_folder): New function,
- implementation for `::asyncCopyFolder'.
- (evolution_shell_component_construct): New arg @copy_folder_fn.
- Set the corresponding member in `EvolutionShellComponentPrivate'.
- (evolution_shell_component_new): New arg @copy_folder_fn. Pass it
- to `evolution_shell_component_construct'.
-
- * evolution-shell-component.h: New type
- `EvolutionShellComponentCopyFolderFn'.
-
-2001-01-12 Ettore Perazzoli <ettore@helixcode.com>
-
- * Evolution-ShellComponent.idl: Add method `::removeFolderAsync'.
-
-2001-01-12 Ettore Perazzoli <ettore@ximian.com>
-
- * evolution-shell-component.c (corba_class_init):
- s/addFolderAsync/createFolderAsync/.
-
- * evolution-shell-component-client.c
- (evolution_shell_component_client_async_create_folder):
- s/addFolderAsync/createFolderAsync/.
-
- * Evolution-ShellComponent.idl: Rename `addFolder' into
- `createFolder'.
-
-2001-01-12 Dan Winship <danw@ximian.com>
-
- * importer/.cvsignore: Create
-
-2001-01-12 Miguel de Icaza <miguel@ximian.com>
-
- * e-storage-set-view.c: Added translation strings.
-
- * e-shell-view-menu.c (command_about_box): Update our name
- (command_new_mail_message): Remove "window"
- from the moniker path.
-
- * e-splash.c (e_splash_construct): Make the spalsh screen a
- toplevel instead of a popup.
-
-2001-01-11 Dan Winship <danw@ximian.com>
-
- * e-shell-view.c (show_existing_view): Remove the "Already have
- view for..." message. People keep assuming it's an error.
-
-2001-01-11 Iain Holmes <iain@ximian.com>
-
- * importer/*: New directory containing the importer framework.
-
- * e-shell-view-menu.c (file_verbs): Add the FileImporter verb.
-
-2001-01-10 Miguel de Icaza <miguel@helixcode.com>
-
- * e-shell-view-menu.c (command_goto_folder): Fix prototype
- (command_new_view): ditto.
- (command_new_mail_message): Implement command_new_mail_message.
-
- verbs: Use BONOBO_UI_VERB instead of BONOBO_UI_UNSAFE_VERB
-
-2001-01-04 Dan Winship <danw@helixcode.com>
-
- * evolution-storage.c (evolution_storage_update_folder_by_uri):
- New function to update a folder given its URI. Plus associated
- changes to other functions to keep track of the path<->URI
- mappings.
-
-2000-12-28 Ettore Perazzoli <ettore@helixcode.com>
-
- * evolution-shell-client.c (user_select_folder): Make sure the
- `*uri_return' and `*physical_uri_return' are always initialized on
- return, as that's what the caller expects.
-
-2000-12-23 Jason Leach <jasonleach@usa.net>
-
- * e-shell-view-menu.c (command_run_bugbuddy): Fix a crash when the
- user tries to "Submit bug report" but doesn't have bug-buddy
- installed. Bug #633.
-
-2000-12-23 Jason Leach <jasonleach@usa.net>
-
- * e-setup.c (copy_default_stuff): Make the "Evolution
- installation" dialog resizable. Bug #742.
- (check_evolution_directory): Here too.
-
-2000-12-14 Iain Holmes <iain@helixcode.com>
-
- * e-shell-folder-selection-dialog.c (dbl_click_cb): Modify to suit the
- new double click callback signature. Destroy the dialog after the double
- click as well.
-
-2000-12-14 Ettore Perazzoli <ettore@helixcode.com>
-
- * main.c (development_warning): Slightly updated the text for the
- release.
-
-2000-12-14 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-splash.c (ICON_Y): Update for the size of the new splash.
-
-2000-12-12 Jeffrey Stedfast <fejj@helixcode.com>
-
- * e-splash.c (button_press_event): Return TRUE as we have handled
- the event.
-
-2000-12-12 Dan Winship <danw@helixcode.com>
-
- * e-shell-view.c (get_control_for_uri): Pass path+1 rather than
- path to get_type_for_storage, to match the convention used by its
- other callers.
-
-2000-12-11 Jeffrey Stedfast <fejj@helixcode.com>
-
- * e-splash.c (e_splash_construct): Connect a button-press-event
- signal on the splash screen so users can click it to hide it.
- (button_press_event): New callback to hide the splash screen.
-
-2000-12-11 Dan Winship <danw@helixcode.com>
-
- * e-shell-view.c (get_type_for_{folder,storage}): return NULL if
- no {folder,storage} is found.
- (get_control_for_uri): return NULL if no folder_type is found.
-
-2000-12-08 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-shortcuts-view.c (e_shortcuts_view_construct): Ooops. We were
- reffing a bogus pointer that was not assigned yet.
-
- * e-corba-storage-registry.c (impl_StorageRegistry_addStorage):
- Updated according to the new IDL.
-
- * e-local-storage.c (construct): Pass `NULL' to
- `e_storage_construct' as the @toplevel_node_type arg.
-
- * evolution-shell-component-client.c
- (evolution_shell_component_client_new_for_objref): New.
- (evolution_shell_component_client_new): Refactored to use it.
-
- * e-corba-storage.c (e_corba_storage_construct): New arg
- @toplevel_node_type. Pass it to `e_storage_construct'.
- (e_corba_storage_new): New arg @toplevel_node_type. Pass it to
- `e_corba_storage_construct'.
-
- * e-storage.c: New member `toplevel_node_uri_type' in
- `EStoragePrivate'.
- (init): Init to NULL.
- (destroy): Unref.
- (e_storage_construct): New arg @toplevel_node_type. Set the
- private member value accordingly.
- (e_storage_new): New arg @toplevel_node_type. Pass to
- `e_storage_construct'.
- (e_storage_get_toplevel_node_type): New.
-
- * e-shell-view.c (get_physical_uri_for_evolution_uri): New arg
- @shell_view.
- (get_physical_uri_for_storage): Filled in. New arg @shell_view.
- (get_physical_uri_for_folder): Filled in. New arg @shell_view.
-
- * evolution-local-storage.c (evolution_local_storage_construct):
- Pass `NULL' as the @toplevel_node_type arg to
- `evolution_storage_construct'.
-
- * evolution-storage.c: New member `toplevel_node_type' in
- `EvolutionStoragePrivate'.
- (destroy): Free.
- (init): Init to NULL.
- (evolution_storage_construct): New arg @toplevel_node_handler
- to initialize the corresponding field in `->priv'.
- (evolution_storage_new): New arg @toplevel_node_type. Pass
- it to `evolution_storage_construct'.
- (evolution_storage_register): Pass the @toplevel_node_type
- arg to `::addStorage'.
-
- * Evolution-Storage.idl: Add arg @toplevel_node_type to
- `StorageRegistry::addStorage'.
-
- * main.c (new_view_on_running_shell): Deal with an exception in
- `::createNewView' gracefully.
-
- * e-shell-view.c (switch_on_folder_tree_click): New.
- (folder_selected_cb): Refactored to use it.
- (storage_selected_cb): Use it.
-
-2000-12-07 Michael Meeks <michael@helixcode.com>
-
- * Makefile.am (oaf_DATA): update to GNOME_Evolution_Shell.oafinfo
-
- * e-shell.h: upd.
-
-2000-12-04 Ettore Perazzoli <ettore@helixcode.com>
-
- * Evolution-StorageSetView.idl: Arg @uri renamed to @name in
- `StorageSetViewListener::notifyStorageSelected'.
-
- * evolution-storage-set-view.c
- (storage_set_view_widget_storage_selected_cb): Renamed arg @uri to
- @name.
-
- * e-storage-set-view.c (on_cursor_change): Only emit the name of
- the storage for the "storage_selected" signal [i.e. remove the
- leading slash].
-
- * e-shell-view.c (storage_selected_cb): New callback for the
- "storage_selected" signal on the EStorageSetView used for the
- folder tree.
- (setup_storage_set_subwindow): Connect it.
-
- * evolution-local-storage.c (evolution_local_storage_construct):
- Pass NULL as the @toplevel_node_uri arg to
- `evolution_storage_construct()'.
-
- * evolution-storage.c: New member `toplevel_node_uri' in
- `EvolutionStoragePrivate'.
- (init): Init to NULL.
- (destroy): Free.
- (evolution_storage_construct): New arg @toplevel_node_uri. Set
- the @toplevel_node_uri member in the private part to its value.
- (evolution_storage_new): New arg @toplevel_node_uri. Pass it to
- `evolution_storage_construct()'.
- (evolution_storage_register): Pass the @toplevel_node_uri value to
- the `::addStorage' CORBA method.
-
- * e-corba-storage-registry.c (impl_StorageRegistry_addStorage):
- New arg @toplevel_node_uri, to go with the IDL change.
-
- * Evolution-Storage.idl (StorageRegistry::addStorage): New arg
- @toplevel_node_uri.
-
- * e-local-storage.c (construct): Pass NULL as the
- @toplevel_node_uri arg to `e_storage_construct()'.
-
- * e-corba-storage.c (e_corba_storage_construct): New arg
- @toplevel_node_uri. Pass it to `e_storage_construct()'.
- (e_corba_storage_new): New arg @toplevel_node_uri. Pass it to
- `e_corba_storage_construct()'.
-
- * e-storage.c: New member `toplevel_node_uri' in
- `EStoragePrivate'.
- (init): Init to NULL.
- (destroy): Free.
- (e_storage_construct): New arg @toplevel_node_uri. Set the
- `toplevel_node_uri' member in the private part to its value.
- (e_storage_new): New arg @toplevel_node_uri. Pass it to
- `e_storage_construct()'.
- (e_storage_get_toplevel_node_uri): New.
-
- * e-corba-storage-registry.c (impl_StorageRegistry_addStorage):
- Renamed from `impl_StorageRegistry_register_storage'.
- (impl_StorageRegistry_removeStorageByName): Renamed from
- `impl_StorageRegistry_unregister_storage'.
- (corba_class_init): Updated accordingly.
-
-2000-12-04 Ettore Perazzoli <ettore@helixcode.com>
-
- * main.c (new_view_on_running_shell): Don't crash if the object
- returned from `oaf_activate_from_id' is NIL and the exception
- isn't set. Just handle this as a normal error condition.
-
-2000-12-04 Michael Meeks <michael@helixcode.com>
-
- * e-shell-view.c (get_control_for_uri): return NULL if we can't
- create a view.
- (setup_evolution_shell_view_interface): add precondition.
-
-2000-12-04 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-shortcuts-view.c (e_shortcuts_view_construct): Ref the
- shortcuts.
-
- * main.c (new_view_on_running_shell): New.
- (idle_cb): If the shell cannot be created, then call
- `new_view_on_running_shell'.
-
- * e-shell-view.c: New member `shell_view_interface' in
- `EShellViewPrivate'.
- (init): Init to NULL.
- (setup_evolution_shell_view_interface): Set up.
- (destroy): Unref.
-
- * e-shell.c (impl_Shell_getComponentByType): Renamed from
- `impl_Shell_get_component_for_type'.
- (impl_Shell_selectUserFolder): Renamed from
- `impl_Shell_user_select_folder'.
- (impl_Shell_getLocalStorage): Renamed from
- `impl_Shell_get_local_storage'.
- (impl_Shell_createStorageSetView): Renamed from
- `impl_Shell_create_storage_set_view'.
- (corba_class_init): Updated accordingly.
- (impl_Shell_createNewView): New, implementation for the
- `createNewView' CORBA method.
- (corba_class_init): Install it.
-
- * Evolution-Shell.idl: New method `::createNewView'.
-
- * e-shell.c (register_shell): New.
- (e_shell_construct): Return value changed to `gboolean'. New arg
- @iid. Construct the Bonobo object before displaying the splash,
- then try to register it with the specified @iid. If registration
- fails, return %FALSE. Otherwise, just do everything normally and
- return %TRUE.
- (e_shell_new): Pass the OAFIID to `e_shell_construct()'. If it
- fails, unref the object and return NULL.
-
- * evolution.oafinfo: New.
-
-2000-11-27 JP Rosevear <jpr@helixcode.com>
-
- * e-shell-view-menu.c (command_about_box): Add myself, anna, jesse
-
-2000-11-15 Michael Meeks <michael@helixcode.com>
-
- * e-shell.c (e_shell_component_maybe_crashed): de-register
- a component's UI if it dies.
-
-2000-11-25 Peter Williams <peterw@helixcode.com>
-
- * Makefile.am (idldir): Install our IDL's into $(datadir)/idl.
-
-2000-11-25 Federico Mena Quintero <federico@helixcode.com>
-
- * e-setup.c (check_dir_recur): Plug leaks of the fullname and
- fulldefaultname.
- (check_evolution_directory): Plug leaks of defaultdir and newfiles
- and the list's data; made the code have a single return point.
-
- * e-shell.c (e_shell_restore_from_settings): Plug leak of prefix.
- (corba_class_init): Plug leak; we were not assigning the
- vepv->_base_epv.
-
- * evolution-storage.c (corba_class_init): Likewise.
-
- * evolution-local-storage.c (corba_class_init): Likewise.
-
-2000-11-24 Federico Mena Quintero <federico@helixcode.com>
-
- * evolution-shell-component.c
- (impl_ShellComponent__get_supported_types): Plug leak; mark the
- CORBA sequence so that it will be released.
-
-2000-11-14 Michael Meeks <michael@helixcode.com>
-
- * e-shell-view.c (unmerge_on_error): add
- (e_shell_view_construct): hook up to system_exception on
- ui_container.
-
-2000-11-11 Matt Bissiri <bissiri@eecs.umich.edu>
-
- * e-shell.c: (setup_components), (save_settings_for_component):
- * evolution-storage.c: (evolution_storage_register_on_shell):
- Update the remaining "IDL:Evolution*" to "IDL:GNOME/Evolution*"
- to sync up with yesterday's IDL re-scoping.
-
-2000-11-06 Michael Meeks <michael@helixcode.com>
-
- * e-shell-view.c (unrealize): remove.
- (e_shell_view_construct): ditto.
-
-2000-11-09 Christopher James Lahey <clahey@helixcode.com>
-
- * e-shell-view.c: Make the panes of the EPaned not shrinkable
- beyond their minimum size.
-
-2000-11-08 Matt Bissiri <bissiri@eecs.umich.edu>
-
- * e-shell-folder-selection-dialog.c: Fix typo in a comment.
-
-2000-11-06 Dan Winship <danw@helixcode.com>
-
- * e-storage-set-view.c (insert_folders): Pass full_name, not
- folder_name to callback.
-
-2000-11-06 Ettore Perazzoli <ettore@helixcode.com>
-
- * evolution-shell-view.c (impl_ShellView_change_current_view):
- Constified @uri.
- (impl_ShellView_set_title): Constified @title.
-
-2000-11-06 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-shell.c: New member `crash_type_names' in `EShellPrivate'.
- (init): Init to NULL.
- (destroy): Free.
- (e_shell_component_maybe_crashed): New.
-
-2000-11-06 Ettore Perazzoli <ettore@helixcode.com>
-
- * evolution-shell-component.c (impl_ShellComponent_create_view):
- `CORBA_Object_duplicate()' the return value.
-
-2000-11-06 Kjartan Maraas <kmaraas@gnome.org>
-
- * e-setup.c: Added #include <config.h>
-
-2000-11-03 Ettore Perazzoli <ettore@helixcode.com>
-
- * main.c: New local static variables `evolution_directory',
- `no_splash'.
- (main): Removed local variable `evolution_directory'. Add a
- `--no-splash' command-line option for setting the value of
- `no_splash'.
- (idle_cb): Use the static `evolution_directory'. Make the newly
- created shell show the splash or not according to the value of
- `no_splash'.
-
- * e-shell.c (setup_components): Deal with a NULL @splash
- parameter.
- (e_shell_construct): New arg `show_splash'. Don't create a splash
- screen if FALSE; instead, pass NULL to `setup_components()' as the
- @splash arg.
- (e_shell_new): New arg `show_splash'. Pass it to
- `e_shell_construct()'.
-
-2000-11-03 Dan Winship <danw@helixcode.com>
-
- * evolution-storage-listener.c (class_init): Fix the name of the
- signal passed to gtk_signal_new so that this actually works.
-
-2000-11-01 Dan Winship <danw@helixcode.com>
-
- * evolution-storage.c (evolution_storage_new_folder): Make this
- take "highlighted" as well.
-
- * e-local-storage.c (new_folder):
- * e-corba-storage.c (impl_StorageListener_new_folder): set
- highlighted on the new folder.
-
- * e-storage-set-view.c (updated_folder_cb): Remove an unused
- variable.
-
-2000-10-26 Iain Holmes <iain@helixcode.com>
-
- * Evolution-ShellView.idl: Added a change_current_view method and
- a set_title.
-
- * evolution-shell-view.c (class_init): Added signals for the above methods.
- (impl_ShellView_change_current_view), (impl_ShellView_set_title): Implementations
- for above methods.
- (corba_class_init): Connect the implemenations.
-
- * e-shell-view.c (shell_view_interface_change_current_view): Change
- the display to the new uri.
- (shell_view_interface_set_title): Set the window title.
- (setup_evolution_shell_view_interface): Connect the signals to the above
- functions.
-
-2000-11-01 Dan Winship <danw@helixcode.com>
-
- * Evolution-Storage.idl: Add "highligted" field to Folder. Add
- update_folder method to StorageListener to change display_name and
- highlight status.
-
- * e-folder.c: Add "highlighted" to EFolder to match the
- Evolution::Folder type.
- (e_folder_get_highlighted, e_folder_set_highlighted): Added
-
- * evolution-storage-listener.c
- (impl_Evolution_StorageListener_update_folder, etc):
- * e-storage.c (e_storage_updated_folder, etc):
- * e-corba-storage.c (impl_StorageListener_update_folder, etc):
- Implement update_folder.
-
- * e-storage-set.c (storage_updated_folder_cb, etc): Re-emit
- updated_folder signals received from EStorage.
-
- * e-storage-set-view.c (various): Add another model column to the
- ETable and set it up as a bold_column based on
- e_folder_get_highligted.
- (updated_folder_cb, etc): Listen to EStorageSet update_folder
- signal and emit ETree node_changed signals.
-
- * evolution-storage.c (evolution_storage_update_folder): Client
- function to update a folder's display_name and highlighted status.
-
- * Evolution-LocalStorage.idl:
- * evolution-local-storage.c:
- * e-local-storage.c: Change set_display_name to update_folder to
- match Evolution::StorageListener
-
-2000-10-25 <jpr@helixcode.com>
-
- * e-shortcuts-view-model.c (load_group_into_model): Set folder to NULL to
- kill warning
-
-2000-10-23 Dan Winship <danw@helixcode.com>
-
- * Makefile.am (INCLUDES): Update EVOLUTION_LOCALEDIR
-
-2000-10-20 Michael Meeks <michael@helixcode.com>
-
- * evolution-shell-component-client.c
- (evolution_shell_component_client_populate_folder_context_menu),
- (evolution_shell_component_client_create_view): update to new UI handler
-
- * e-shell-view-menu.c (command_create_folder): ditto.
-
- * e-storage-set-view.c (popup_folder_menu): ditto.
-
- * evolution-shell-component-client.h: kill ui-compat include.
-
-2000-10-19 Iain Holmes <iain@helixcode.com>
-
- *e-shell-view.c (e_shell_view_save_settings): If there is no view
- save the default uri instead.
- (socket_destroy_cb): When a view crashes, change the view to the
- default one.
-
-2000-10-18 Michael Meeks <michael@helixcode.com>
-
- * evolution-shell-component.c (impl_ShellComponent_populate_folder_context_menu):
- update for new UI handler.
-
-2000-10-18 Iain Holmes <iain@helixcode.com>
-
- * e-shell-view.c (start_progress_bar): If the widget is not realized
- don't do anything, to prevent BadGC's at shut down.
- (stop_progress_bar): Don't draw anything if the widget is not realized.
- Same reason.
-
- * e-shell-folder-selection-dialog.c (dbl_click_cb): Emit the
- folder-selected signal.
- (e_shell_folder_selection_dialog_construct): Connect to the e-table's
- double-click signal.
-
-2000-10-17 Iain Holmes <iain@helixcode.com>
-
- * e-shell.c (view_deleted_cb): Save the settings before the
- view is destroyed.
- (e_shell_quit): Don't save the settings when there are no views.
-
-2000-10-16 Iain Holmes <iain@helixcode.com>
-
- * e-setup.c (check_evolution_directory): Better dialog.
-
- * e-splash.c (icon_free): Don't unref the canvas item.
- (e_splash_construct): Add a frame round the splash screen.
-
-2000-10-16 Dan Winship <danw@helixcode.com>
-
- * evolution-storage-set-view-factory.c
- (evolution_storage_set_view_factory_new_view): Add a typecast.
-
- * e-storage-set-view.c (popup_folder_menu): Move variable
- declarations into the #if 0 to kill warnings.
- (populate_folder_context_menu_with_common_items,
- folder_context_menu_activate_cb): Move these into #if 0 too.
-
- * e-shell.c: Add prototype.
-
- * e-shell-view.c (storage_set_view_box_map_cb):
- * e-shell-folder-title-bar.c (e_shell_folder_title_bar_construct):
- Remove unused variables.
-
- * e-setup.c: Fix warning caused by e-util -> gal migration.
-
-2000-10-11 Iain Holmes <iain@helixcode.com>
-
- * e-setup.c (check_evolution_directory): Check if there are any
- files in default_user that are not in ~/evolution and if so
- copy them over.
- (check_dir_recur): Recursive function to check the directory.
-
- * e-shell-view-menu.c: Look Maw! I'm an Evolution hacker too.
-
- * e-shell-view.c: Don't quit on when a view is destroyed.
-
- * e-shell.c: Save the settings for the remaining views whenever
- a view is destroyed.
-
-2000-10-15 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-shell-view.c (setup_storage_set_subwindow): Use an
- EScrollFrame instead of a GtkScrolledWindow.
-
-2000-10-14 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-shell.c (e_shell_construct): Display a splash screen.
- (setup_components): New arg @splash, pointer to an ESplash.
- Display the icons of the components in the splash and highlight
- them as the components are activated.
-
- * e-splash.c: New.
- * e-splash.h: New.
-
-2000-10-13 Anna Marie Dirks <anna@helixcode.com>
-
- * e-shell-folder-creation-dialog.glade: Added focus to the
- folder-name text entry.
-
-2000-10-11 Christopher James Lahey <clahey@helixcode.com>
-
- * e-storage-set-view.c: Fixed the spec on this.
-
-2000-10-11 Christopher James Lahey <clahey@helixcode.com>
-
- * e-storage-set-view.c: Changed this to use the built in cells.
-
-2000-10-11 Christopher James Lahey <clahey@helixcode.com>
-
- * e-storage-set-view.c: Adapted this for the new ETable system.
-
-2000-10-09 Michael Meeks <michael@helixcode.com>
-
- * e-shell-view-menu.c: Change paths in such a way as to require
- HEAD bonobo.
- (command_toggle_folder_bar, command_toggle_shortcut_bar): only
- respond to state changes.
-
-2000-10-07 Matt Wilson <msw@redhat.com>
-
- * e-shell-view.c (init): initialize priv->sockets to NULL, fixes
- startup crash on non-ia32 platforms
-
-2000-10-06 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-shell-view.c: New member `sockets.
- (init): Init to NULL.
- (destroy): Free. Also, disconnect the "destroy" signal from them
- before the controls get destroyed.
- (find_socket): New function. [Thanks Dan.]
- (socket_destroy_cb): New callback for the destruction of a socket.
- (get_control_for_uri): Get the socket through `find_socket()' and
- connect the "destroy" signal to `socket_destroy_cb'.
-
-2000-10-06 Chris Toshok <toshok@helixcode.com>
-
- * e-storage-set-view.c (insert_storages): call
- _set_compare_function after inserting the storage.
-
-2000-10-06 Michael Meeks <michael@helixcode.com>
-
- * e-shell-view.c (e_shell_view_display_uri): add a freeze / thaw
- pair to reduce flicker on switching controls.
-
-2000-10-05 Michael Meeks <michael@helixcode.com>
-
- * e-shell-view-menu.c (command_xml_dump): fix.
-
-2000-10-05 Chris Toshok <toshok@helixcode.com>
-
- * e-shell-folder-creation-dialog.c: #include <gal/widgets/e-gui-utils.h>
-
- * e-shell-folder-selection-dialog.c: same.
-
-2000-10-05 Chris Toshok <toshok@helixcode.com>
-
- * e-shell-folder-selection-dialog.c: add #include for
- libgnomeui/gnome-messagebox.h
-
-2000-10-05 Michael Meeks <michael@helixcode.com>
-
- * e-shell-view-menu.c (shortcut_bar_mode_changed_cb): upd.
- (folder_bar_mode_changed_cb): upd.
- (command_xml_dump): clobber.
- (e_shell_view_menu_setup): upd.
-
- * e-shell-view.c (shell_view_interface_set_message_cb): upd.
- (shell_view_interface_unset_message_cb): upd.
- (e_shell_view_construct): upd.
- (get_control_for_uri): upd.
- (e_shell_view_get_bonobo_ui_component): upd.
-
-2000-10-04 Michael Meeks <michael@helixcode.com>
-
- * e-shell-view.c (setup_progress_bar): remove evil usize set.
-
-2000-10-03 Matt Bissiri <bissiri@eecs.umich.edu>
-
- * e-shell-view-menu.c (e_shell_view_menu_setup): Use
- `bonobo_ui_component_add_verb_list' instead of
- `bonobo_ui_component_add_verb_list_with_data' for help_verbs,
- so that `command_help' gets an html filename as user_data,
- instead of a ptr to EShellView.
- (menu_do_misc): Move DumpXML from help_verbs to here, because
- `command_xml_dump' needs to get EShellView as user_data.
-
-2000-10-02 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-shortcuts-view.c (show_new_group_dialog): Destroy the dialog
- if the user has clicked on "OK" or "Cancel".
-
-2000-10-02 Chris Toshok <toshok@helixcode.com>
-
- * e-storage-set-view.c (e_storage_set_view_get_current_folder): if
- we're not displaying folders, the current folder is NULL.
- (class_init): fix typo.
-
- * Makefile.am (libeshell_a_SOURCES):
- evolution-storage-set-view-listener.[ch] should be here, not
- evolution_SOURCES.
-
-2000-10-02 Chris Toshok <toshok@helixcode.com>
-
- * evolution-storage-set-view.c: add storage_selected behavior -
- loop over the listeners calling _storage_selected.
-
- * Evolution-StorageSetView.idl: add storage_selected to the
- Listener interface.
-
- * e-storage-set-view.c add storage_selected signal.
- (on_cursor_change): if the depth is less than 2, emit
- "storage_selected", otherwise emit "folder_selected".
-
- * e-storage-set-view.h: add storage_selected signal.
-
- * evolution-storage-set-view-listener.h: add storage_selected
- signal.
-
- * evolution-storage-set-view-listener.c: add storage_selected
- signal.
-
-2000-10-02 Ettore Perazzoli <ettore@helixcode.com>
-
- * evolution-storage-set-view-listener.c: New.
- * evolution-storage-set-view-listener.h: New.
-
-2000-10-02 Chris Toshok <toshok@helixcode.com>
-
- * evolution-storage-set-view.c (impl_StorageSetView_add_listener): fix typo.
- (impl_StorageSetView_remove_listener): same.
- (impl_StorageSetView__get_show_folders): implementation of getter for show_folders.
- (impl_StorageSetView__set_show_folders): implementation of setter for show_folders.
- (corba_class_init): install _set_show_folders and _get_show_folders.
-
- * Evolution-StorageSetView.idl: add show_folders attribute to
- StorageSetView.
-
- * e-storage-set-view.h: add prototypes for
- e_storage_set_view_{get,set}_show_folders.
-
- * e-storage-set-view.c (insert_storages): split this code out from
- e_storage_set_view_construct so we can call it when "show_folders"
- has been changed.
- (e_storage_set_view_construct): remove the code to insert
- storages.
- (e_storage_set_view_set_show_folders): new function. tears down
- existing tree and node/path hashtable and calls insert_storages.
- (e_storage_set_view_get_show_folders): new function, retrieves
- current show_folders state.
-
-2000-10-02 Chris Toshok <toshok@helixcode.com>
-
- * evolution-storage-set-view-factory.c
- (evolution_storage_set_view_factory_new_view): pass
- storage_set_view_interface as second argument to
- bonobo_object_add_interface, and call gtk_widget_show on the
- storage_set_view widget.
-
-2000-10-03 Michael Meeks <michael@helixcode.com>
-
- * e-shell-view.c (setup_bonobo_ui_handler): kill.
-
- * e-shell-view-menu.c (e_shell_view_menu_setup): strip
- out the XML UI merge; move it to
-
- * e-shell-view.c (e_shell_view_construct): here, +
- freeze / thaw pair.
-
- * e-shell-view.c (setup_progress_bar): impl.
- (setup_widgets): hook in.
- (progress_bar_timeout_cb): fix.
- (start_progress_bar): fix.
- (stop_progress_bar): fix.
- (e_shell_view_construct): setup ui handler first.
-
-2000-09-22 Michael Meeks <michael@helixcode.com>
-
- * e-shell-view-menu.c (e_shell_view_menu_setup): upd.
-
-2000-10-02 Chris Toshok <toshok@helixcode.com>
-
- * e-storage-set-view.c (new_folder_cb): set the new node's compare function.
- (insert_folders): same.
-
- (new_storage_cb): remove uunecessary cast.
-
-2000-10-02 Chris Toshok <toshok@helixcode.com>
-
- * e-storage-set-view.c (new_storage_cb): track e-tree sort api change.
- (treepath_compare): same.
- (new_folder_cb): same.
-
-2000-10-02 Chris Toshok <toshok@helixcode.com>
-
- * e-storage-set-view.c (e_storage_set_view_construct): pass NULL
- for the open/closed pixbuf of the tree renderer. we'll let it
- supply the default.
- (destroy): remove the expanded/unexpanded pixbuf references.
- (new_storage_cb): use e_tree_model_node_insert_id so we can (soon)
- save expanded/collapsed state.
- (new_folder_cb): same.
- (insert_folders): same.
- (e_storage_set_view_construct): same.
-
-2000-10-02 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-shell.c (impl_Shell_create_storage_set_view): New,
- implementation for `::create_storage_set_view'.
- (corba_class_init): Install.
-
- * evolution-storage-set-view-factory.c: New.
- * evolution-storage-set-view-factory.h: New.
-
- * evolution-storage-set-view.c: New.
- * evolution-storage-set-view.h: New.
-
- * Evolution-Shell.idl: New method
- `Shell::create_storage_set_view'.
-
- * Evolution.idl: #include <Evolution-StorageSetView.idl>.
-
- * Evolution-StorageSetView.idl: New.
-
-2000-10-02 Ettore Perazzoli <ettore@helixcode.com>
-
- * evolution-storage.c (find_listener_in_list): New helper
- function.
- (impl_Storage_remove_listener): New, implementation for
- `Storage::remove_listener'.
- (remove_listener): Helper function for
- `impl_Storage_remove_listener'.
- (evolution_storage_get_epv): Install the implementation for
- `::remove_listener'.
- (add_listener): Return a boolean indicating success or failure.
- Reject multiple additions of the same listener.
- (impl_Storage_add_listener): Updated accordingly: raise an
- exception if `add_listener' fails.
-
- * Evolution-Storage.idl: Added `Storage::remove_listener'. Added
- exception `AlreadyListening' for `::add_listener'.
-
-2000-09-29 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-shell-view.c (popup_storage_set_view_button_clicked): Renamed
- from `popup_storage_set_view_close_button_clicked'.
- (storage_set_view_box_map_cb): Updated accordingly. Connect to
- "button_clicked" instead of "close_button_clicked".
- (disconnect_popup_signals): Updated accordingly.
- (e_shell_view_set_folder_bar_mode): Update the button mode of the
- title bar according to the folder bar mode.
-
-2000-09-28 Dan Winship <danw@helixcode.com>
-
- * e-corba-storage.c (impl_StorageListener_new_folder): Don't print
- "Folder registered successfully" if it didn't. (Duh. :)
-
-2000-09-28 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-shell-view.c: New constant `DEFAULT_URI'.
- (e_shell_view_load_settings): If the `DisplayedURI' from
- `gnome_config' cannot be displayed, display the `DEFAULT_URI'.
-
-2000-09-26 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-shortcuts.c (e_shortcuts_get_group_title): Cast the data
- pointer, not the node pointer.
- (e_shortcuts_add_group): If @group_num is -1, emit the effective
- group number with the "new_group" signal instead of -1, which is
- going to confuse the signal handler.
- (e_shortcuts_add_shortcut): Likewise with the shortcut.
-
- * e-shortcuts-view-model.c (shortcuts_new_group_cb): We are @data,
- not @shortcuts.
- (class_init): Install the `::destroy' handler.
-
- * e-shortcuts-view.c (e_shortcuts_view_construct): Set
- `priv->shortcuts'.
- (remove_shortcut_cb): Don't remove the item both on the data and
- the model.
- (toggle_small_icons_cb): Removed some crufty checks.
- (toggle_large_icons_cb): Likewise.
- (show_new_group_dialog): New, implementation for the "Create new
- shortcut group" dialog.
- (destroy_group_cb): Callback for the "Destroy this group" item.
- (create_new_group): Callback for the "Create new group" item.
-
-2000-09-25 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-shortcuts-view.c (item_selected): Renamed from
- `selected_item'.
- (class_init): Updated accordingly.
- (impl_shortcut_dropped): New function, implementation for
- `EShortcutBar::shortcut_dropped'.
- (impl_shortcut_dragged): New function, implementation for
- `EShortcutBar::shortcut_dragged'.
- (e_shortcuts_view_construct): Update to use EShortcutsViewModel.
- (class_init): Install them.
-
- * e-shortcuts.c (e_shortcuts_get_group_title): New.
-
- * e-shortcuts-view-model.c: New.
- * e-shortcuts-view-model.h: New.
-
-2000-09-24 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-shell.c (setup_local_storage): Don't unref the local storage.
-
-2000-09-22 Michael Meeks <michael@helixcode.com>
-
- * e-shell-view-menu.c (e_shell_view_menu_setup): upd.
-
-2000-09-21 Federico Mena Quintero <federico@helixcode.com>
-
- * e-shell-view-menu.c: Fix mis-spelling of "calendar".
-
-2000-09-21 Michael Meeks <michael@helixcode.com>
-
- * e-shell-view.c (show_existing_view): upd.
-
- * Evolution-ShellComponent.idl: upd.
-
- * evolution-shell-component.c (impl_ShellComponent_populate_folder_context_menu):
- upd.
-
-2000-09-18 Michael Meeks <michael@helixcode.com>
-
- * e-shell-view-menu.c (command_xml_dump): add xml dump option.
-
-2000-09-18 Christopher James Lahey <clahey@helixcode.com>
-
- * Makefile.am: Added $(EXTRA_GNOME_CFLAGS) and
- $(EXTRA_GNOME_LIBS). Removed unneeded libraries.
-
- * e-component-registry.c, e-corba-storage-registry.c,
- e-corba-storage.c, e-folder-type-registry.c, e-folder.c,
- e-local-folder.c, e-local-storage.c,
- e-shell-folder-creation-dialog.c,
- e-shell-folder-selection-dialog.c, e-shell-folder-title-bar.c,
- e-shell-view.c, e-shell.c, e-shortcuts-view.c, e-shortcuts.c,
- e-storage-set-view.c, e-storage-set-view.h, e-storage-set.c,
- e-storage.c, evolution-local-storage.c, evolution-session.c,
- evolution-shell-client.c, evolution-shell-component-client.c,
- evolution-shell-component.c, evolution-shell-view.c,
- evolution-storage-listener.c, evolution-storage.c, main.c: Fixed
- the #include lines to deal properly with gal.
-
-2000-09-16 Michael Meeks <michael@helixcode.com>
-
- * e-shell-view-menu.c (e_shell_view_menu_setup): use datadir.
-
-2000-09-16 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-shell-view.h: #include "bonobo-win.h", not "bonobo-app.h".
-
-2000-09-15 Dan Winship <danw@helixcode.com>
-
- * e-storage.c (get_path_for_physical_uri_foreach): foreach_data
- should be set to the caller-supplied data, not the tree item data.
-
-2000-09-14 Iain Holmes <iain@helixcode.com>
-
- * e-shell-folder-title-bar.c (e_shell_folder_title_bar_construct):
- Remove the *kludge* so that the button width is set properly.
- Fixes bug #XXXX
-
-2000-09-14 Michael Meeks <michael@helixcode.com>
-
- * e-shell-view-menu.c: Remove sillies in toggle paths.
-
-2000-09-14 Michael Meeks <michael@helixcode.com>
-
- * e-shell-view.c: move fn to bonobo.
-
-2000-09-14 Christopher James Lahey <clahey@helixcode.com>
-
- * Makefile.am: Added $(GNOME_PRINT_LIBS) to evolution_LDADD.
-
-2000-09-14 Michael Meeks <michael@helixcode.com>
-
- * e-shell-view.c (e_shell_view_construct): prune cruft.
- (shell_view_interface_unset_message_cb),
- (shell_view_interface_set_message_cb): impl.
-
-2000-09-14 Michael Meeks <michael@helixcode.com>
-
- * e-shell-view-menu.c (e_shell_view_menu_setup): re-order to suit and
- add freeze / thaw, update paths to toggles, remove warnings
-
-2000-09-07 Michael Meeks <michael@helixcode.com>
-
- * e-shell-view-menu.c: Re-hash pretty much the whole file
-
- * ui.xml: Add.
-
- * e-shell-view.c (e_shell_view_construct): connect unrealize & delete_event
- to theit signals on the window (class_init): remove widget_class bits.
-
-2000-09-06 Michael Meeks <michael@helixcode.com>
-
- * e-shell.c (view_destroy_cb, destroy, e_shell_new_view, e_shell_quit):
- update to track object type change.
-
- * e-shell.c (e_shell_restore_from_settings): ditto.
-
- * main.c (idle_cb): ditto.
-
- * e-shell-view.c (e_shell_view_new, e_shell_view_construct, setup_widgets):
- updated for BonoboApp.
- (progress_bar_timeout_cb, start_progress_bar, stop_progress_bar),
- (shell_view_interface_set_message_cb, shell_view_interface_unset_message_cb):
- emasculated for now.
-
- * e-storage-set-view.c (popup_folder_menu): disable popup menu for now.
-
-2000-09-13 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-shell-view.c (popdown_transient_folder_bar): New.
- (storage_set_view_box_button_release_event_cb): Rewritten to use
- it.
- (folder_selected_cb): Pop down the transient folder bar if the
- folder bar mode is `TRANSIENT'.
-
-2000-09-12 Ettore Perazzoli <ettore@helixcode.com>
-
- * ($(IDL_GENERATED)): Stupid `orbit-idl' wants a space after the
- `-I'.
-
-2000-09-12 Lauris Kaplinski <lauris@helixcode.com>
-
- * e-shell-view.c (update_folder_title_bar): Translate UTF-8
-
-2000-09-12 Ettore Perazzoli <ettore@helixcode.com>
-
- * Makefile.am: Remove the `ui.xml' stuff.
-
-2000-09-11 Dan Winship <danw@helixcode.com>
-
- * main.c (main): Initialize libunicode
-
-2000-09-11 Christopher James Lahey <clahey@helixcode.com>
-
- * e-local-storage.c: Fixed some warnings.
-
-2000-09-11 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-shell-folder-selection-dialog.c (set_default_folder): Work on
- the assumption that @default_uri is not NULL.
- (e_shell_folder_selection_dialog_construct): Only call if the
- @default_uri is not NULL.
-
-2000-09-11 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-local-storage.c (new_folder): Removed debugging message.
-
-2000-09-11 Ettore Perazzoli <ettore@helixcode.com>
-
- * evolution-storage.c (evolution_storage_new_folder): If
- description is NULL, use the empty string instead.
-
- * e-local-storage.c (new_folder): New utility function to add a
- new folder by keeping both the Bonobo interface and the EStorage
- up-to-date.
- (load_folders): Use it here instead of just
- `e_storage_new_folder()'.
- (component_async_create_folder_callback): Likewise.
-
- * e-shell-view.c (update_for_current_uri): Prevent an
- EStorageSetView warning if the path is NULL.
-
- * evolution-storage.c (impl_Storage_add_listener): New,
- implementation for `Evolution::Storage::add_listener'.
- (evolution_storage_get_epv): Install it.
-
- * evolution-storage-listener.c
- (evolution_storage_listener_corba_objref): New.
- (create_servant): Create the servant with `g_new0()' instead of
- `g_new()'.
-
-2000-09-11 Ettore Perazzoli <ettore@helixcode.com>
-
- * evolution-storage-listener.c
- (evolution_storage_listener_construct): Unset the `GTK_FLOATING'
- flag as `EvolutionStorageListener' is self-owned.
-
-2000-09-11 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-storage.c (impl_list_folders): Removed.
- (impl_get_subfolder_paths): New static function, implementation
- for `::get_subfolder_paths'.
- (class_init): Install it.
- (e_storage_get_subfolder_paths): New.
-
- * e-storage.h: `list_folders' virtual method removed. New virtual
- method `list_subfolder_paths'.
-
- * e-storage-set-view.c (etree_icon_at): If the folder is not
- found, return NULL.
-
- * e-local-storage.c (bonobo_interface_set_display_name_cb): New
- function, callback for the `set_display_name' signal on the
- EvolutionLocalStorage.
- (construct): Connect it.
-
- * e-storage-set-view.c (folder_changed_cb): New callback for the
- "changed" signal emitted by the EFolders. It makes the model emit
- the "changed" signal for the appropriate row.
- (insert_folders): Connect it.
-
-2000-09-09 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-storage-set-view.c (etree_value_at): Return the name of the
- folder or the storage instead of just returning the last segment
- of the path.
-
- * e-storage-set.c (e_storage_set_get_folder): If the storage is
- not found, just return NULL to avoid a g_warning.
-
-2000-09-09 Christopher James Lahey <clahey@helixcode.com>
-
- * e-shell-view.c: Fixed some warnings.
-
-2000-09-09 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-shell-view.c (update_for_current_uri): Make sure `folder_name'
- is always dynamically allocated, as we `g_free()' it.
-
-2000-09-08 Lauris Kaplinski <lauris@helixcode.com>
-
- * e-shell-view.c (update_for_current_uri): Translate UTF-8 string
-
-2000-09-08 Ettore Perazzoli <ettore@helixcode.com>
-
- * evolution-storage.c (list_through_listener_foreach): Don't crash
- on nodes with no data. [The root node has none indeed.]
-
-2000-09-08 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-folder-tree.c (e_folder_tree_get_folder): Return NULL if there
- is no folder with that @path, instead of segfaulting.
-
-2000-09-08 Ettore Perazzoli <ettore@helixcode.com>
-
- * evolution-storage.c: New member `folder_tree' in
- `EvolutionStoragePrivate'.
- (init): Initialize it.
- (destroy): Destroy it.
- (list_through_listener): New.
- (add_listener): Use it to list all the current folders through the
- listener.
- (evolution_storage_new_folder): Add the thingie to the
- `folder_tree'.
- (evolution_storage_removed_folder): Remove the thingie from the
- `folder_tree'.
-
-2000-09-08 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-storage.c: Replaced the `path_to_folder' GHashTable with an
- EFolderTree named `folder_tree'.
- (init): Updated accordingly.
- (destroy): Updated accordingly.
- (free_private): Removed.
- (remove_folder): Removed.
- (folder_new): Removed.
- (folder_remove_subfolder): Removed.
- (folder_add_subfolder): Removed.
- (folder_destroy): Removed.
- (get_parent_path): Removed.
- (impl_list_folders): Reimplemented by using the `EFolderTree'
- methods.
- (e_storage_construct): Don't create the root folder here.
- (get_path_for_physical_uri_foreach): Updated to be an
- `EFolderTreeForeachFunc'.
- (e_storage_get_path_for_physical_uri): Likewise, updated to use
- `e_folder_tree_foreach()'.
- (e_storage_new_folder): Updated to use the EFolderTree.
- (e_storage_removed_folder): Likewise.
- (folder_destroy_notify): New function, for the destroy
- notification of `EFolder'.
-
- * evolution-storage-listener.c: Change the `servant' member in
- `EvolutionStorageListenerPrivate' into an
- `EvolutionStorageListenerServant'.
-
- * e-folder-tree.c: New.
- * e-folder-tree.h: New.
-
-2000-09-08 Ettore Perazzoli <ettore@helixcode.com>
-
- * evolution-storage-listener.c (create_servant): Return an
- `EvolutionStorageListenerServant' instead of a
- `POA_Evolution_StorageListener'.
- (evolution_storage_listener_new): Add a cast accordingly.
-
- * evolution-storage.c (corba_class_init): Remove `NO_WARNINGS'
- madness.
-
-2000-09-08 Christopher James Lahey <clahey@helixcode.com>
-
- * e-storage-set-view.c: Added base ETableModel functions.
-
- * evolution-storage-listener.c, evolution-storage.c: Fixed some
- warnings.
-
-2000-09-08 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-shell.c (set_owner_on_components): New.
- (e_shell_construct): Call it after setting up the local storage.
-
- * e-component-registry.c (register_component): Don't set the owner
- here.
-
- * evolution-shell-client.c
- (evolution_shell_client_get_local_storage): New.
-
-2000-09-08 Ettore Perazzoli <ettore@helixcode.com>
-
- * evolution-shell-view.c (destroy): Chain to the parent's
- destroy method.
-
- * evolution-shell-component.c (destroy): Chain to the parent's
- destroy method.
-
- * evolution-storage.c: `corba_storage_listener' in
- `EvolutionStoragePrivate' replaced with a list of listeners,
- `corba_storage_listeners'.
- (init): Init to NULL.
- (add_listener): New utility function.
- (destroy): Destroy all the listeners.
- (evolution_storage_new_folder): Notify all the listeners.
- (evolution_storage_removed_folder): Likewise.
-
- * e-local-storage.c: New member `bonobo_interface' in
- `ELocalStoragePrivate'.
- (init): Init to NULL.
- (e_local_storage_get_corba_interface): New.
-
- * e-shell.c: New member `local_storage' in `EShellPrivate'.
- (init): Init to NULL.
- (setup_local_storage): Make it point to the newly created local
- storage.
- (destroy): Unref if not NULL.
- (impl_Shell_get_local_storage): New, implementation for
- `Evolution::Shell::get_local_storage'.
- (corba_class_init): Set it up.
-
- * evolution-local-storage-client.c: New.
- * evolution-local-storage-client.h: New.
- * evolution-local-storage.c: New.
- * evolution-local-storage.h: New.
- * evolution-storage-listener.c: New.
- * evolution-storage-listener.h: New.
-
- * Evolution-Storage.idl: New method `Storage::add_listener'.
-
- * Evolution-Shell.idl: New method `Shell::get_local_storage'.
-
- * Evolution-LocalStorage.idl: New.
-
-2000-09-02 Lauris Kaplinski <lauris@helixcode.com>
-
- * e-shell-folder-creation-dialog.c: Use e_utf8 wrappers
-
-2000-09-01 Chris Toshok <toshok@helixcode.com>
-
- * e-storage-set-view.c (removed_folder_cb): free node_data.
- (removed_storage_cb): same.
- (new_storage_cb): don't free the path we put in the node's
- node_data.
- (e_storage_set_view_set_current_folder): remove calls to
- set_cursor_row (-1), and clean up a little bit.
-
-2000-09-01 Christopher James Lahey <clahey@helixcode.com>
-
- * e-local-storage.c: Strdup path when setting the callback data.
-
- * evolution-storage.c: Removed an unused variable.
-
-2000-08-31 Chris Toshok <toshok@helixcode.com>
-
- * e-shell-view.c (init): initialize delayed_selection = NULL;
-
-2000-09-01 Ettore Perazzoli <ettore@helixcode.com>
-
- * evolution-storage.c (evolution_storage_new_folder): Handle @path
- as the full path.
-
- * e-storage.c (e_storage_new_folder): Consider @path to be the
- full path, not the parent path.
- * e-local-storage.c (load_folders): Updated accordingly.
-
- * Evolution-Storage.idl: Member `name' of `struct Folder' renamed
- to `display_name'.
-
-2000-08-31 Chris Toshok <toshok@helixcode.com>
-
- * e-shell-view.c: add delayed_selection to _EShellViewPrivate.
- (new_folder_cb): new function. check if the path is our
- delayed_selection and if so, select it.
- (folder_selected_cb): if the user selects something using a UI
- gesture, clear out a pending delayed selection.
- (e_shell_view_display_uri): if the uri isn't available, save it in
- the delayed_selection field, and set up the new_folder signal.
-
-2000-08-29 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-shell-view.c (shell_view_interface_set_message_cb): If the
- message contains a newline, only display the part until the
- newline, excluding the newline. Otherwise the status bar resizes
- nastily.
-
-2000-08-28 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-shell.c (setup_components): Removed the hardcoding of the
- shell component IDs. Rather, do an OAF query looking for the
- `Evolution::ShellComponent' interface and activate all the
- components in the result.
- (MAIL_COMPONENT_ID): Removed.
- (CALENDAR_COMPONENT_ID): Removed.
- (ADDRESSBOOK_COMPONENT_ID): Removed.
-
- * e-storage-set-view.c: Make `sort_model' static.
-
-2000-08-25 Chris Toshok <toshok@helixcode.com>
-
- * e-storage-set-view.c: convert to use ETree instead of GtkCTree.
-
- * e-storage-set-view.h: change superclass from GtkCTree to ETable.
-
- * main.c (main): call e_cursors_init.
-
- * Makefile.am (evolution_LDADD): add libetable.a
-
-2000-08-25 Peter Williams <peterw@helixcode.com>
-
- Silence some obvious assertions.
-
- * e-shell.c (e_shell_construct): Ref our shortcut bar to
- sink it. Same with the folder_type_registry.
-
- * e-shell-folder-title-bar.c (destroy): Only attempt to unref
- priv->icon if nonnull.
-
- * e-shell-view.c (update_folder_title_bar): Don't attempt to set
- the folder_icon/_name if they're NULL.
-
-2000-08-24 Ettore Perazzoli <ettore@helixcode.com>
-
- * evolution-shell-component-client.c
- (evolution_shell_component_client_new): Don't abort if the
- component cannot be activated. Rather, just return NULL.
-
-2000-08-20 arik devens <arik@helixcode.com>
-
- * Makefile.am (evolution_LDADD): Added UNICODE_LIBS to link in the
- new e-text stuff.
-
-2000-08-19 Christopher James Lahey <clahey@helixcode.com>
-
- * e-shell-folder-title-bar.c: Fixed a warning.
-
-2000-08-19 Christopher James Lahey <clahey@helixcode.com>
-
- * e-shell-view.c: Fixed a warning.
-
-2000-08-18 Larry Ewing <lewing@helixcode.com>
-
- * e-shell-folder-title-bar.c (style_set_cb): update the pixmap
- define E_USE_STYLES to disable the current darkening behavior
- (destroy): free the icon.
- (e_shell_folder_title_bar_construct): style_set_cb does everything
- important now.
- (e_shell_folder_title_bar_set_icon): actually store the pixbuf
- when we set it so that we still have it if the style changes and
- take care of refcounting them properly.
-
-2000-08-17 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-shell-view-menu.c (menu_create_file): Make capitalization of
- menu items consistent.
- (menu_create_view): Likewise.
- (menu_create_help): Likewise.
- (e_shell_view_menu_setup): Create a component menu placeholder so
- that components can add their own component-specific menus there.
- (menu_create_actions): Removed.
- (e_shell_view_menu_setup): Don't call it.
- (menu_create_tools): Removed.
- (e_shell_view_menu_setup): Don't call it.
- (menu_create_settings): New.
- (e_shell_view_menu_setup): Call it.
-
-2000-08-13 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-shell-view.c (delete_event): New. Make the parent shell quit.
-
-2000-08-13 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-shell-view.c (shell_view_interface_set_message_cb): Removed
- debugging message.
- (shell_view_interface_unset_message_cb): Likewise.
-
-2000-08-13 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-shell-view.c: New members `progress_bar_timeout_id',
- `progress_bar_value' in `EShellViewPrivate'.
- (init): Init them.
- (destroy): If the timeout id is not zero, remove the associated
- timeout.
- (progress_bar_timeout_cb): New.
- (start_progress_bar): New.
- (stop_progress_bar): New.
- (shell_view_interface_set_message_cb): If busy, start the progress
- bar. Otherwise, stop it.
- (shell_view_interface_unset_message_cb): Stop the progress bar.
-
- * e-shell-view.c (setup_widgets): Enable the progress bar in the
- appbar.
-
- * e-shell-view.c (shell_view_interface_unset_message_cb): New
- function, callback for the `EvolutionShellView::unset_message'
- signal.
- (shell_view_interface_set_message_cb): New function, callback for
- the `EvolutionShellView::set_message' signal.
- (setup_evolution_shell_view_interface): Connect these signals to a
- newly created EvolutionShellView object, add ::add_interface this
- object to the control's frame.
-
- * evolution-shell-view.c: New.
- * evolution-shell-view.h: New.
-
- * Evolution-ShellView.idl: New interface.
-
-2000-08-10 Dan Winship <danw@helixcode.com>
-
- * Evolution-ShellComponent.idl: add "in string evolution_homedir"
- to ShellComponent::set_owner's arguments.
-
- * e-shell.c (e_shell_get_local_directory): Expose local_directory.
-
- * e-component-registry.c (register_component): Pass the shell's
- "local_directory" to the component as its evolution_homedir.
-
- * evolution-shell-component.c (impl_ShellComponent_set_owner):
- Update to include evolution_homedir.
- (class_init): Update signal prototype.
-
- * evolution-shell-component-client.c
- (evolution_shell_component_client_set_owner): Update to include
- evolution_homedir.
-
- * e-init.c: Remove. This wasn't being used.
-
-2000-08-10 Peter Williams <peterw@helixcode.com>
-
- * e-shell-view-menu.c (command_about_box): Add lil' ol'
- me to the about box.
-
-2000-08-09 Christopher James Lahey <clahey@helixcode.com>
-
- * e-setup.c, e-shell.c: Fixed some warnings.
-
-2000-08-09 Christopher James Lahey <clahey@helixcode.com>
-
- * e-shell-view.c: Fixed a warning.
-
-2000-08-09 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-shell-view-menu.c (menu_create_file_new): Create a placeholder
- for the print items.
-
-2000-08-08 Dan Winship <danw@helixcode.com>
-
- * e-setup.c (e_setup): Check for ~/evolution/shortcuts.xml in
- addition to ~/evolution, to make sure it's really the directory
- we're expecting it to be. Also, convert from old-style config file
- to new-style config directory.
-
-2000-08-04 Michael Meeks <michael@helixcode.com>
-
- * evolution-shell-component.c (impl_ShellComponent_populate_folder_context_menu):
- unref.
-
- * e-shell.c (e_shell_construct): Remove erroneous refs on
- folder_type_registry, storage_set.
-
- * e-shortcuts-view.c (destroy): unref the shortcuts, causing a
- massive ripple chain ref-count reaction.
-
-2000-08-03 JP Rosevear <jpr@helixcode.com>
-
- * e-shell.h: Remove gconf references
-
- * e-shell-view.h: Remove gconf references
-
- * main.c (idle_cb): Remove gconf references
-
- * Makefile.am: Remove gconf cflags and libs
-
- * e-shell-view.c (e_shell_view_load_settings): Change to use
- gnome-config
- (e_shell_view_save_settings): ditto
-
- * e-shell.c (e_shell_restore_from_settings): Change to
- use gnome_config
- (save_settings_for_views): ditto
-
-2000-08-03 Michael Meeks <michael@helixcode.com>
-
- * e-shell-view.c (destroy): unref the UI handler.
-
-2000-08-03 Jeffrey Stedfast <fejj@helixcode.com>
-
- * e-shell-folder-selection-dialog.c (set_default_folder): Make
- sure default_uri isn't NULL!!
-
-2000-08-03 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-shell-view-menu.c (command_goto_folder): Just use the current
- URI as the @default_uri parameter for
- `e_shell_folder_selection_dialog_new()'.
-
- * evolution-session.c (class_init): Call `corba_class_init()'.
-
- * e-shell-folder-selection-dialog.c
- (e_shell_folder_selection_dialog_new): @default_path renamed to
- @default_uri.
- (e_shell_folder_selection_dialog_construct): Likewise. If the
- @default_uri is an `evolution:' one, use it as a path; if it is
- different, assume it is a physical URI and consequently look for
- the folder that has that physical URI and make it the default.
- (set_default_folder): New helper function.
- (e_shell_folder_selection_dialog_construct): Use it.
-
- * e-storage-set.c (e_storage_set_get_path_for_physical_uri): New.
-
- * e-storage.c (e_storage_get_path_for_physical_uri): New.
-
-2000-07-27 Dan Winship <danw@helixcode.com>
-
- * main.c (idle_cb): work with either gconf 0.5 or newer
-
-2000-07-26 Peter Williams <peterw@helixcode.com>
-
- * e-storage.c (e_storage_new_folder): Fix tiny mem leak.
-
-2000-07-26 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-shell-view.c (disconnect_popup_signals): Disconnect the "map"
- signal handler too.
-
-2000-07-25 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-shell-folder-creation-dialog.c (add_folder_types): Work around
- GtkOptionMenu utter brokenness by destroying the associated
- Glade-built GtkMenu and creating a new one from scratch.
-
-2000-07-24 Dan Winship <danw@helixcode.com>
-
- * e-shell.c, main.c: Remove GOAD support.
-
- * evolution-shell-component-client.c: Remove GOAD support.
- (evolution_shell_component_client_new): Give the "maybe
- OAF_INFO_PATH" message if no oafinfo file was found, and give a
- "consult previous error messages" message if the component was
- found but not activated. Abort in either case.
-
-2000-07-23 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-shell-view-menu.c: Converted to use `bonobo_ui_handler_*()'
- stuff directly, instead of converting from GnomeUIInfo.
- (command_quit): Update arg types for BonoboUIHandler.
- (command_run_bugbuddy): Likewise.
- (command_about_box): Likewise.
- (command_new_task): Removed.
- (command_new_journal_entry): Removed.
- (menu_create_file_new): New.
- (menu_create_file): New.
- (menu_create_edit): New.
- (menu_create_view): New.
- (menu_create_tools): New.
- (menu_create_actions): New.
- (e_shell_view_menu_setup): Create menus using them instead of
- converting from GnomeUIInfo.
-
-2000-07-22 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-shell.c (e_shell_construct): Don't unref NULL shortcuts, you
- idiot.
-
-2000-07-22 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-shell-view.c (e_shell_view_set_folder_bar_mode): Make the
- title bar non-clickable when the folder tree is visible.
-
- * e-shell-folder-title-bar.c: New members `button_arrow' and
- `clickable' in `EShellFolderTitleBarPrivate'. Renamed `label'
- into `button_label'. Added `label'.
- (init): Init them.
- (e_shell_folder_title_bar_construct): Pass a pointer to the title
- bar as the user data for the "realize" signal. Create `label'.
- (title_button_box_realize_cb): Use the `button_arrow' member
- instead of using `gtk_object_{set,get}_data()'.
- (setup_style): Set the style for `label' too.
- (e_shell_folder_title_bar_set_clickable): New.
- (e_shell_folder_title_bar_set_title): Set both `label' and
- `button_label'.
-
-2000-07-21 Peter Williams <peterw@helixcode.com>
-
- * evolution-shell-client.c (user_select_folder): Don't use
- g_main_loop to block the caller; this will break when
- threads are enabled and GDK_THREADS_ENTER deadlocks. Use
- gtk_main / gtk_main_exit to enter and exit the main loop,
- which handles the recursive case correctly.
- (impl_FolderSelectionListener_selected): Same.
- (impl_FolderSelectionListener_cancel): Same.
- (struct _FolderSelectionListenerServant): No more main_loop member.
-
-2000-07-21 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-shell-view.c (storage_set_view_box_button_release_event_cb):
- Set the toggle state to FALSE on the title bar.
-
- * e-shell-folder-title-bar.c: Signal "title_clicked" replaced by
- "title_toggled".
- (setup_style): Change the style for the button too.
- (e_shell_folder_title_bar_construct): Use a GtkToggleButton, not a
- GtkButton.
- (e_shell_folder_title_bar_set_toggle_state): New.
-
-2000-07-21 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-shell-folder-title-bar.c (create_icon_pixmap): New. Create a
- small arrow-shaped GtkPixmap.
- (title_button_box_realize_cb): New. Callback for the "realize"
- signal of the button's inner box.
-
- * e-shell-view.c (title_bar_clicked_cb): New function, callback
- for the "title_clicked" signal of the title bar.
- (setup_widgets): Connect it.
-
- * e-shell-view.c: New member `storage_set_title_bar' in
- `EShellViewPrivate'.
- (setup_storage_set_subwindow): Set it.
-
- * e-shell-folder-title-bar.c: Use a GtkLabel instead of an
- EClippedLabel for the title.
- (title_button_clicked_cb): New.
- (e_shell_folder_title_bar_construct): Put the label into a button.
- Connect the button's "clicked" signal to
- `title_button_clicked_cb'.
-
-2000-07-21 Ettore Perazzoli <ettore@helixcode.com>
-
- * evolution-shell-component.c
- (impl_ShellComponent_populate_folder_context_menu): If the pointer
- to the function to populate the folder context menu is NULL, don't
- do anything.
-
-2000-07-21 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-storage-set-view.c (popup_folder_menu): New. Create a
- BonoboUIHandler-managed pop-up menu, let the component fill it in
- with `::populate_folder_context_menu', and display it. Then
- destroy it with the associated BonoboUIHandler.
- (handle_right_button_selection): New.
- (handle_left_button_selection): New. This pops up the right-click
- menu.
- (button_release_event): Use them.
- (init): Set the `GTK_BUTTON_SELECTS' flag for button #3's actions.
-
- * evolution-shell-component-client.c
- (evolution_shell_component_client_populate_folder_context_menu):
- New.
- (evolution_shell_component_client_async_create_folder): Added
- preconditions.
-
- * e-shell-view.c (e_shell_view_save_settings): Add missing cast.
-
- * evolution-shell-component.c: New member
- `populate_folder_context_menu' in
- `EvolutionShellComponentPrivate'.
- (impl_ShellComponent_populate_folder_context_menu): New,
- implementation for
- `Evolution::ShellComponent::populate_folder_context_menu'.
- (corba_class_init): Install it.
- (evolution_shell_component_new): New arg
- @populate_folder_context_menu.
- (evolution_shell_component_construct): Likewise.
-
- * Evolution-ShellComponent.idl: New method
- `::populate_folder_context_menu'.
-
-2000-07-20 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-shell-view.c (e_shell_view_save_settings): Save the paned
- positions.
- (e_shell_view_load_settings): Restore them.
-
-2000-07-20 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-shell.c (save_settings_for_views): New. Code moved out of
- `e_shell_save_settings'.
- (e_shell_save_settings): Use it.
- (save_settings_for_component): New.
- (save_settings_for_components): New.
- (e_shell_save_settings): Use it, so that we make all the
- components save settings too.
-
- * e-component-registry.c
- (e_component_registry_get_id_list): New.
- (e_component_registry_get_component_by_id): New.
-
- * Makefile.am (libeshell_a_SOURCES): Add
- `evolution-shell-component-client' and `evolution-session'.
-
- * evolution-session.c: New.
- * evolution-session.h: New.
-
- * Makefile.am (evolution_SOURCES): Removed files that were already
- in `libeshell.a'.
-
- * Evolution.idl: #include <Evolution-Session.idl>.
-
- * Evolution-Session.idl: New.
-
-2000-07-20 Ettore Perazzoli <ettore@helixcode.com>
-
- * main.c (no_views_left_cb): Call `e_shell_quit()' on the shell
- before getting out of the GTK+ main loop.
- (view_delete_event_cb): Removed.
- (idle_cb): Don't call it.
-
- * e-shell-view-menu.c (command_new_view): New, implementation of
- the "New view" command.
-
-2000-07-16 Damon Chaplin <damon@helixcode.com>
-
- * e-shortcuts-view.c (e_shortcuts_view_construct): created a model
- for the EShortcutBar. This will probably have to be moved to support
- multiple views.
- (class_init): #if'd out overriding the class functions. They don't
- exist any more (they are in the model instead).
-
-2000-07-12 Christopher James Lahey <clahey@helixcode.com>
-
- * main.c: Fixed to match gconf API change.
-
-2000-07-10 Dan Winship <danw@helixcode.com>
-
- * main.c (development_warning): Update the message.
-
-2000-07-10 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-shell-folder-title-bar.c (title_button_clicked_cb):
- Temporarily `#if 0'ed out.
-
-2000-07-10 Dan Winship <danw@helixcode.com>
-
- * e-shell.c (impl_Shell_user_select_folder): Translate a
- default_folder of "" into NULL (which can't be passed over CORBA).
-
-2000-07-10 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-storage.c (e_storage_new_folder): Removed debugging message.
-
- * e-storage-set.c (storage_new_folder_cb): Removed debugging
- message.
-
-2000-07-10 Federico Mena Quintero <federico@helixcode.com>
-
- * e-shell-view.c (unrealize): As a quasi-hack, do a gdk_flush()
- when the shell view is unrealized so that the DeleteEvent gets
- sent to the remote plugs as soon as possible before we start
- making other CORBA calls. The problem is that our CORBA pipe is
- synchronous while our X pipe is asynch. We have to ensure
- ordering for certain operations. This is NOT the correct and
- complete fix, which should go in Bonobo.
-
-2000-07-08 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-shell-view.c (e_shell_view_display_uri): Don't update the
- current URI if there are problems creating a view for it.
- (show_error): Remove. Not used anymore.
-
-2000-07-08 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-shell-view-menu.c: Cleanup some unused menu items and added
- "FIXMEs" for the ones we plan to add in the short term but are not
- implemented yet.
- (command_create_folder): Get rid of an unused variable.
-
-2000-07-07 Ettore Perazzoli <ettore@helixcode.com>
-
- * evolution-shell-client.c (user_select_folder): Fix small warning
- by adding proper cast when filling in the CORBA sequence struct.
-
-2000-07-07 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-shell.c (setup_corba_storages): Ref the CORBA storage
- registry.
-
-2000-07-06 Ettore Perazzoli <ettore@helixcode.com>
-
- * evolution-storage.c: Removed `corba_storage_registry' member
- from `EvolutionStoragePrivate'.
- (destroy): Don't unref/release it. Call
- `StorageListener::destroy' to notify that we are dead.
- (evolution_storage_register): Don't ref and store the registry.
-
-2000-07-05 Dan Winship <danw@helixcode.com>
-
- * e-shell.c (e_shell_save_settings): Use the correct gconf path
- (/apps, not /app), and call gconf_client_suggest_sync at the end.
- (e_shell_restore_from_settings): Use the correct gconf path.
-
-2000-07-05 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-shell-view-menu.c (command_goto_folder): Set the folder
- selection dialog as transient for the shell view.
- (command_create_folder): New, bound to the "Create folder"
- command in the "File" menu.
-
-2000-07-01 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-shell.c (impl_Shell_user_select_folder): New arg
- @allowed_types. Pass it to the EShellFolderSelectionDialog.
- Connect to the "cancelled" and "folder_selected" signals instead
- of "clicked".
- (corba_listener_destroy_notify): New callback.
- (impl_Shell_user_select_folder): Associate it to the DestroyNotify
- for the "corba_listener" GtkObject data, so we don't leak it.
- (folder_selection_dialog_clicked_cb): Don't release the listener
- interface here.
- (folder_selection_dialog_cancelled_cb): New callback for the
- "cancelled" signal.
- (folder_selection_dialog_folder_selected_cb): New callback for the
- "folder_selected" signal.
-
- * e-shell-view-menu.c (command_goto_folder): Don't connect to
- "clicked". Connect to "cancelled" and "folder_selected" instead.
- (folder_selection_dialog_cancelled_cb): New, callback for the
- "cancelled" signal.
- (folder_selection_dialog_folder_selected_cb): New, callback for
- the "folder_selected" signal.
-
- * e-shell-folder-selection-dialog.c New members `allowed_types',
- `storage_set' in `EShellFolderSelectionDialogPrivate'.
- (class_init): Install signals "folder_selected", "cancelled".
- (init): Init to NULL.
- (impl_destroy): Free/unref them.
- (e_shell_folder_selection_dialog_new): New arg @allowed_types.
- (e_shell_folder_selection_dialog_construct): New arg
- @allowed_types. Initialize `priv->allowed_types' from it.
- (check_folder_type): New function. Check if the selected folder
- is of the appropriate type and, if not, return FALSE and pop up an
- error dialog. Otherwise, return TRUE.
- (impl_clicked): Use `check_folder_type()' to check if the folder
- type is OK. If it is not, stop emission of the "clicked" signal.
-
- * e-shell-folder-selection-dialog.h: New signals
- "folder_selected", "cancelled".
-
- * evolution-shell-client.c
- (evolution_shell_client_user_select_folder): New arg
- @allowed_types.
- (user_select_folder): New arg @allowed_types. Pass this to the
- ::user_select_folder method.
-
- * Evolution-Shell.idl: New arg @required_types in
- ::user_select_folder.
-
-2000-07-01 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-shell.c (setup_components): Don't ref the component registry.
-
-2000-06-30 Dan Winship <danw@helixcode.com>
-
- * Evolution-Shell.idl: add "cancel" to FolderSelectionListener.
-
- * evolution-shell-client.c (impl_FolderSelectionListener_cancel):
- Implement cancel (set *uri and *physical_uri to NULL).
- (evolution_shell_client_user_select_folder): document %NULL uri
- and physical_uri return values.
-
- * e-shell.c (folder_selection_dialog_clicked_cb): If the user
- clicked "Cancel" or used the wm to close the dialog, call _cancel
- instead of _selected.
-
-2000-06-30 Ettore Perazzoli <ettore@helixcode.com>
-
- * evolution-shell-component.c (impl_ShellComponent_set_owner):
- Duplicate the object before storing it, you doofus.
-
-2000-06-30 Ettore Perazzoli <ettore@helixcode.com>
-
- * evolution-shell-component.c (impl_ShellComponent_unset_owner):
- NULL the owner_client.
-
-2000-06-30 Ettore Perazzoli <ettore@helixcode.com>
-
- * evolution-shell-client.h
- (evolution_shell_client_user_select_folder): Add prototype.
-
-2000-06-29 Ettore Perazzoli <ettore@helixcode.com>
-
- * evolution-shell-component.c: New member `owner_client'. Removed
- member `corba_owner'. All the code updated to use it.
- (evolution_shell_component_get_owner): Changed so that it returns
- an EvolutionShellClient instead of the raw CORBA object.
-
- * evolution-shell-component.h: Change signal "owner_set" to get an
- EvolutionShellClient wrapper instead of a CORBA interface.
-
- * evolution-shell-client.c: New.
- * evolution-shell-client.h: New.
-
-2000-06-29 Dan Winship <danw@helixcode.com>
-
- * evolution-shell-component-client.c
- (evolution_shell_component_client_new): Update warning message to
- not say "CRASHING", since it won't if you have current bonobo.
-
-2000-06-29 Peter Williams <peter@beta.newton.cx>
-
- * e-shell.c (e_shell_restore_from_settings): Check for the
- insanely invalid NumberOfViews = 0 case.
-
-2000-06-29 Peter Williams <peter@helixcode.com>
-
- * e-shell.c (e_shell_construct): Ref the various E-things that
- we create to go with our unrefs in the destructor.
-
-2000-06-29 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-shell-view.c (e_shell_view_construct): Don't ref the shell.
- (destroy): Don't unref the shell.
-
-2000-06-29 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-shortcuts.c (e_shortcuts_construct): Fix typo: @shortcuts
- should unset `GTK_FLOATING', not @storage_set.
-
- * e-shell-view.c (get_storage_set_path_from_uri): If @uri is NULL,
- return NULL.
-
- * main.c (idle_cb): Restore the shell from the settings. If this
- fails, just create a new view.
-
- * e-shell.c (e_shell_save_settings): New.
- (e_shell_quit): Save settings before exiting.
- (e_shell_restore_from_settings): New.
-
- * e-shell-view.c (e_shell_view_save_settings): New.
- (e_shell_view_load_settings): New.
-
- * main.c (idle_cb): Initialize Gconf, create the GConfClient and
- pass it to `e_shell_new()'.
-
- * e-shell.c: New member `gconf_client' in `EShellPrivate'.
- (destroy): Unref it if not NULL.
- (init): Init to NULL.
- (e_shell_new): New param @gconf_client.
- (e_shell_construct): Likewise.
-
- * Makefile.am (INCLUDES): Add `GCONF_CFLAGS'.
-
-2000-06-27 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-shell-folder-title-bar.c (e_shell_folder_title_bar_construct):
- Enable the title bar button.
-
-2000-06-27 Michael Zucchi <zucchi@zedzone.mmc.com.au>
-
- * e-shell.c (folder_selection_dialog_clicked_cb): Close the dialog
- when done. Dont do anything if 'new' was pressed, and always
- return empty strings if 'cancel' was pressed.
-
-2000-06-27 Michael Zucchi <zucchi@zedzone.mmc.com.au>
-
- * e-shell.c (impl_Shell_user_select_folder): Set the listener as
- the corba_listener data, not the shell.
-
-2000-06-26 Christopher James Lahey <clahey@helixcode.com>
-
- * glade/Makefile.am: Added EXTRA_DIST for make distcheck.
-
-2000-06-19 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-local-storage.c: Don't #define POSIX_SOURCE at all; this is
- not needed anymore as we no longer use `readdir_r'.
-
-2000-06-19 Chris Toshok <toshok@helixcode.com>
-
- * e-local-storage.c: #undef _POSIX_SOURCE after including
- dirent.h. this breaks the build on freebsd if we leave it
- #defined. go figure.
-
-2000-06-19 Dan Winship <danw@helixcode.com>
-
- * evolution-shell-component-client.c
- (evolution_shell_component_client_new): Add a warning before
- crashing due to a known bug when it can't activate a component, so
- people don't have to waste any time trying to figure out what's
- up.
-
-2000-06-13 Ettore Perazzoli <ettore@helixcode.com>
-
- * Makefile.am: Compile the CORBA-built files,
- evolution-shell-component.c and evolution-storage.c into a
- separate `libeshell.a' library. Link the `evolution' executable
- to it. Also cleaned up a bit and got rid of the `CPP_FLAGS'
- assignment.
-
-2000-06-12 Michael Meeks <michael@helixcode.com>
-
- * e-shell-folder-selection-dialog.c: include gnome-dialog.h
- (PARENT_TYPE): GNOME_TYPE_DIALOG replaced with gnome_dialog_get_type.
-
-2000-06-10 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-shell.c (impl_Shell_user_select_folder): New, implementation
- for `Shell:user_select_folder'.
- (corba_class_init): Install it.
- (folder_selection_dialog_clicked_cb): Callback for the folder
- selection dialog.
-
- * Evolution-Shell.idl: New method `Shell::user_select_folder'.
- New interface `FolderSelectionListener'.
-
- * glade/e-shell-folder-creation-dialog.glade: Make it larger.
-
- * e-shell-folder-creation-dialog.h: Fix typo: #include
- <gtk/gtkwindow.h>, not <gtk/gtkwidget.h>.
-
- * e-shell-view-menu.c: Added "Go to folder..." command.
- (commmand_goto_folder): Implementation for it.
-
- * e-shell-folder-selection-dialog.c: New.
- * e-shell-folder-selection-dialog.h: New.
-
-2000-06-10 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-local-folder.c (save_metadata): Don't set the description in
- the XML file if null. Compute the physical path correctly.
-
- * e-folder.c (e_folder_construct): Allow NULL description.
-
- * evolution-shell-component-client.c (init): Initalize
- `listener_interface' to `CORBA_OBJECT_NIL' and `listener_servant'
- to NULL.
- (create_listener_interface): Return void and set the `servant' and
- `listener_servant' fields directly.
- (evolution_shell_component_client_async_create_folder): Updated
- accordingly.
-
- * e-shell-folder-creation-dialog.c: New struct `DialogData' to be
- passed to the dialog's callbacks.
- (dialog_data_destroy): New.
- (e_shell_show_folder_creation_dialog): Set up a `DialogData'
- object and pass it as the data for the signals.
- (shell_destroy_cb): New handler for the "destroy" signal on the
- shell.
- (e_shell_show_folder_creation_dialog): Connect it.
- (dialog_destroy_cb): New handler for the "destroy" signal on the
- dialog; it frees the associated `DialogData'.
- (e_shell_show_folder_creation_dialog): Connect it.
- (async_create_cb): New function, callback for the async folder
- creation function.
- (entry_name_is_valid): New function to check if the entered folder
- name is valid.
- (dialog_clicked_cb): Check if the specified folder name is valid
- and, if so, asynchronously create the new folder.
- (add_folder_types): Set "type_name" data on each menu item.
-
- * e-storage-set-view.c (e_storage_set_view_get_current_folder):
- New function.
-
- * e-storage-set.c (get_storage_for_path): New helper function.
- (e_storage_set_get_folder): Use it.
-
- * e-storage.c (e_storage_async_create_folder): Renamed from
- `e_storage_create_folder'.
- (e_storage_remove_folder): Renamed from `e_storage_remove_folder'.
- (impl_create_create_folder): Renamed from `impl_create_folder'.
- (impl_create_remove_folder): Renamed from `impl_remove_folder'.
- (class_init): Updated accordingly.
- (e_storage_result_to_string): New function.
-
- * e-storage.h: `::create_folder' renamed to
- `::async_create_folder'. `::remove_folder' renamed to
- `::async_remove_folder'.
-
- * evolution-shell-component.h: Return type of
- `EvolutionShellComponentCreateFolderFn' and
- `EvolutionShellComponentRemoveFolderFn' changed to `void'.
-
- * e-local-storage.c: `EComponentRegistry component_registry'
- replaced with `EFolderTypeRegistry folder_type_registry' in
- `ELocalStoragePrivate'
- (component_async_create_folder_callback): New function, to handle
- the callback from EvolutionShellComponent.
- (construct): Likewise.
- (e_local_storage_open): Replaced @component_registry with
- @folder_type_registry.
- (impl_create_folder): Implemented.
-
- * e-local-folder.c (e_local_folder_new): New.
- (e_local_folder_construct): New.
- (e_local_folder_save): Precondition: physical URI is not NULL.
- (save_metadata): Unlink the metadata file if `xmlSaveFile()'
- fails.
-
- * e-storage.c (e_storage_create_folder): Precondition: @path is
- absolute.
- (e_storage_remove_folder): Likewise.
-
-2000-06-09 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-shell-view-menu.c: Removed folder menu and "save as..." command.
-
- * main.c (main): Call `glade_gnome_init()'.
-
- * e-shell-view-menu.c (command_new_folder): Implemented.
-
- * e-shell-folder-creation-dialog.c: New.
- * e-shell-folder-creation-dialog.h: New.
-
- * glade/Makefile.am: New.
- * glade/e-shell-folder-creation-dialog.glade: New.
-
- * e-shell-view.c (e_shell_view_get_current_uri): New.
-
- * e-folder-type-registry.c
- (e_folder_type_registry_get_type_names): New.
-
- * e-shell-view.c (get_control_for_uri): Updated to use
- `EvolutionShellComponentClient'.
-
- * e-folder-type-registry.c: Use `EvolutionShellComponentClient's
- instead of `BonoboObjectClient's.
-
- * e-component-registry.c: Use `EvolutionShellComponentClient'
- instead of `BonoboObjectClient' in `Component'.
- (component_new): Updated accordingly.
- (register_component): Likewise.
-
- * evolution-shell-component-client.h: New.
- * evolution-shell-component-client.c: New.
-
- * evolution-shell-component.c
- (impl_ShellComponent_async_create_folder): New, implementation of
- `::async_create_folder'.
- (impl_ShellComponent_async_remove_folder): New, implementation of
- `::async_remove_folder'.
- (corba_class_init): Install them.
- (evolution_shell_component_new): New args `create_folder_fn' and
- `remove_folder_fn' for setting the handlers for these new methods.
- (evolution_shell_component_construct): Likewise.
-
- * Evolution-ShellComponent.idl
- (ShellComponent::async_create_folder): New.
- (ShellComponent::async_remove_folder): New.
- (ShellComponentListener): New.
-
- * evolution-shell-component.c (impl_ShellComponent_create_view):
- New param @type. Use the new `EvolutionShellComponentCreateViewFn'.
-
- * evolution-shell-component.h: New enum `EvolutionShellComponentResult'.
- Changed `EvolutionShellComponentCreateViewFn' to return an
- `EvolutionShellComponentResult'.
-
- * e-shell-view.c (get_control_for_uri): Pass the folder type to
- `ShellComponent::create_view'.
-
- * Evolution-ShellComponent.idl: New param @type for
- `ShellComponent::create_view'.
-
-2000-06-08 Miguel de Icaza <miguel@helixcode.com>
-
- * main.c (development_warning): Use version here. Add padding to
- the message.
- Only destroy object if its window was not closed.
-
-2000-06-08 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-shell-view.c (setup_bonobo_ui_handler): Oops. Don't create
- the toolbar. This was not supposed to be committed.
-
-2000-06-07 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-storage.c (folder_destroy): Don't destroy the subfolders.
- (remove_folder): New helper function.
- (free_private): Use it.
- (e_storage_removed_folder): Use it here too.
- (folder_destroy): Don't unref the EFolder if NULL.
-
- * e-storage-set-view.c (e_storage_set_view_construct): Use
- `gtk_signal_connect_while_alive()' instead of just
- `gtk_signal_connect()' so that the signal handler is automatically
- removed when we are destroyed.
-
- * e-storage-set.c (e_storage_set_remove_all_storages): New
- function.
-
- * e-shell-view.c (e_shell_view_construct): Use `bonobo_object_ref'
- on the shell instead of `gtk_object_ref'.
- (destroy): Unref the shell.
-
- * e-local-storage.h: #include "e-component-registry.h".
-
- * e-shell.c (setup_local_storage): Renamed from `setup_storages'.
- Only set up the local storage, not the CORBA one, and don't create
- the storage set.
- (e_shell_construct): Create the storage set here instead. Call
- `setup_local_storage' after setting up the components.
-
- * e-local-storage.c: New member `component_registry' in
- `ELocalStoragePrivate'.
- (init): Init to NULL.
- (destroy): If not null, unref it.
- (e_local_storage_open): New arg @component_registry.
- (construct): New arg @component_registry. Init
- `priv->component_registry' from it.
-
- * e-local-storage.c (impl_get_name): Renamed from `get_name'.
- (impl_create_folder): New function, implementing
- `EStorage::create_folder'. Just a stub for now.
- (impl_remove_folder): New function, implementing
- `EStorage::remove_folder'. Just a stub for now.
- (class_init): Install these stub implementations.
-
- * e-storage.c (e_storage_remove_folder): New function.
- (e_storage_create_folder): New function.
- (impl_create_folder): New function, default implementation for
- `::create_folder'.
- (impl_remove_folder): New function, default implementation for
- `::remove_folder'.
- (class_init): Install the implementations.
-
- * e-storage.c (impl_get_name): Renamed from `get_name'.
- (impl_get_folder): Renamed from `get_folder'.
- (impl_list_folders): Renamed from `list_folders'.
-
- * e-storage.h: New virtual methods `remove_folder',
- `create_folder'.
-
- * e-storage.c (e_storage_removed_folder): Renamed from
- `e_storage_remove_folder'.
- * e-corba-storage.c (impl_StorageListener_removed_folder): Updated
- accordingly.
-
-2000-06-02 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-shell-view.c (setup_bonobo_ui_handler): Create the default toolbar.
-
-2000-06-02 Jeffrey Stedfast <fejj@helixcode.com>
-
- * e-shell-view-menu.c: Changed "Using the Shell" to "Getting Started"
-
-2000-06-02 Christopher James Lahey <clahey@helixcode.com>
-
- * e-shell-view.c: Free the uri variable.
-
- * e-shell.c: Free the local_directory variable.
-
-2000-06-02 Ettore Perazzoli <ettore@helixcode.com>
-
- * main.c (view_delete_event_cb): New callback for the
- "delete_event" on the view.
- (idle_cb): Connect it.
-
-2000-06-01 Christopher James Lahey <clahey@helixcode.com>
-
- * e-storage-set-view.c (set_e_shortcut_selection): Added a
- g_return_if_fail check.
-
-2000-06-01 Dan Winship <danw@helixcode.com>
-
- * e-shell-view-menu.c (command_help): New menu callback to launch
- the help browser.
- (menu_help): add pointers to the users' guide.
- (e_shell_view_menu_setup): Add the help menu stuff to the uih.
-
- * main.c (main): Set up gettext. (Problem noted by Héctor García
- Alvarez)
-
-2000-06-01 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-shell-view.c (DEFAULT_WIDTH): Add more 5 pixels.
-
-2000-06-01 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-shell-view.c (DEFAULT_WIDTH): Made the default window a bit
- narrower.
- (DEFAULT_HEIGHT): And shorter.
- (setup_widgets): Set the border width of the vbox that holds the
- title bar to 2 pixels, so that the view looks a bit nicer.
-
-2000-06-01 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-shell-view.c (DEFAULT_TREE_WIDTH): Made the tree 150 pixel
- wide [instead of 100].
- (setup_widgets): Use `DEFAULT_TREE_WIDTH' instead of
- `DEFAULT_SHORTCUT_BAR_WIDTH' where appropriate.
- (e_shell_view_construct): Hide the folder bar by default.
-
- * e-storage-set-view.c (e_storage_set_view_construct): Set
- auto-resize mode for column one.
-
-2000-06-01 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-shell-view-menu.c (e_shell_view_menu_setup): Set the
- statusbar.
-
- * e-shell-view.c: New member `appbar' for `EShellViewPrivate'.
- (init): Initialize to NULL.
- (setup_widgets): Install a status bar and set `appbar' to point to
- it.
- (setup_bonobo_ui_handler): Make the BonoboUIHandler use `appbar'
- as its statusbar.
- (e_shell_view_get_appbar): New function.
- (e_shell_view_construct): Set up the BonoboUIHandler after setting
- up the widgets.
-
- * e-shortcuts.c (class_init): Add new signals "new_shortcut",
- "removed_shortcut", "new_group", "removed_group".
- (e_shortcuts_remove_shortcut): Emit "remove_shortcut".
- (e_shortcuts_add_shortcut): Emit "new_shortcut".
- (e_shortcuts_remove_group): Emit "remove_group".
- (e_shortcuts_add_group): Emit "new_group".
- (unload_shortcuts): Emit "remove_group" for all the groups.
-
- * e-shortcuts.h: New signals "new_shortcut", "removed_shortcut",
- "new_group", "removed_group".
-
- * e-shortcuts-view.c (pop_up_right_click_menu): New function to
- pop up the right-click menu for the shortcut bar.
- (pop_up_right_click_menu_for_shortcut): New function.
- (selected_item): Pop up right click menu when appropriate. Don't
- activate the shortcut when right-clicking.
-
-2000-05-31 Ettore Perazzoli <ettore@helixcode.com>
-
- * evolution-storage.h: #include 'Evolution.h".
-
-2000-05-31 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-shell-view.c (show_error): Use `set_current_notebook_page()'
- instead of `gtk_notebook_set_page()'; this will also deactivate
- the current control properly.
-
- * e-shell-view-menu.c (e_shell_view_menu_setup): Initialize the
- state of the shortcut/folder toggle menu items using
- `e_shell_view_get_shortcut_bar_mode()' and
- `e_shell_view_get_folder_bar_mode()'.
- (command_toggle_shortcut_bar): Removed debugging message.
- (command_toggle_folder_bar): Likewise.
-
- * e-shell-view.c (e_shell_view_get_shortcut_bar_mode): New
- function.
- (e_shell_view_get_folder_bar_mode): New function.
-
-2000-05-31 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-storage-set-view.c: New constant `DRAG_RESISTANCE'. New
- members `button_x', `button_y' in `EStorageSetViewPrivate'.
- (init): Initialize to zero.
- (button_press_event): Set.
- (motion_notify_event): Don't start drag unless the current x/y
- position is farther than `DRAG_RESISTANCE', in any of the two
- directions, from the original position of the button click.
- (button_release_event): Always ungrab the pointer, even if
- `selected_row_path' is NULL.
-
-2000-05-31 Ettore Perazzoli <ettore@helixcode.com>
-
- * evolution-shell-component.c (class_init): Eeek!
- s/owner_set/owner_unset/.
-
- * e-shell-folder-title-bar.c (e_shell_folder_title_bar_construct):
- Increase the size of the border of the hbox slightly to make the
- title bar a bit nicer.
-
-2000-05-31 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-component-registry.c (component_free): Invoke `::unset_owner'
- on the component before releasing it.
-
- * evolution-shell-component.c (class_init): Install the
- "owner_set" signal.
- (impl_ShellComponent_unset_owner): New function, implementation of
- `ShellComponent::unset_owner'.
- (corba_class_init): Install it.
-
- * evolution-shell-component.h: New signal "owner_unset".
-
- * Evolution-ShellComponent.idl: New method `ShellComponent::
- unset_owner'.
-
- * e-shell.c (e_shell_quit): Destroy all the views explicitly.
-
- * e-shell-view-menu.c: Changed `Show shortcut bar' and `Show
- folder tree' items into toggle items.
- (shortcut_bar_mode_changed_cb): New callback to update the status
- of the "show shortcut bar" toggle item when the shortcut bar is
- hidden/shown in the view.
- (folder_bar_mode_changed_cb): Likewise for the folder bar.
- (e_shell_view_menu_setup): Connect these to the corresponding
- signals on the shell.
-
- * e-shell-view.c: New members `shortcut_bar_mode' and
- `folder_bar_mode' in `EShellViewPrivate'.
- (init): Initialize `shortcut_bar_mode' and `folder_bar_mode' to
- `E_SHELL_VIEW_SUBWINDOW_HIDDEN'.
- (class_init): Add the new signals.
- (e_shell_view_set_shortcut_bar_mode): Renamed from
- `e_shell_view_show_shortcuts'. Emit "shortcut_bar_mode_changed"
- and update the `shortcut_bar_mode' member.
- (e_shell_view_set_folder_bar_mode): Renamed from
- `e_shell_view_show_folders'. Emit "folder_bar_mode_changed" and
- update the `folder_bar_mode' member.
-
- * e-shell-view.h: New signals "shortcut_bar_mode_changed",
- "folder_bar_mode_changed".
-
- * e-shell-view.c (setup_menus): Removed.
- (e_shell_view_construct): Use `e_shell_view_menu_setup' instead.
- (e_shell_view_get_bonobo_ui_handler): New function.
-
- * e-shell-view-menu.c (e_shell_view_menu_setup): New.
-
- * e-shell.c (impl_Shell_get_component_for_type): New function,
- implementation of `Evolution::Shell::get_component_for_type'.
- (corba_class_init): Install it into the EPV.
-
- * Evolution-Shell.idl: Added method `get_component_for_type'.
-
-2000-05-30 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-shortcuts.c: New members `dirty', `save_idle_id' in
- `EShortcutsPrivate'.
- (init): Initialize.
- (destroy): If the idle ID is nonzero, remove the idle. If `dirty'
- is true, save.
- (idle_cb): New.
- (schedule_idle): New.
- (make_dirty): New.
- (e_shortcuts_remove_shortcut): Call it.
- (e_shortcuts_add_shortcut): Likewise.
- (e_shortcuts_remove_group): Likewise.
- (e_shortcuts_add_group): Likewise.
-
- * e-shell.c (e_shell_construct): Updated to match the `EShortcuts'
- API changes.
-
- * e-shortcuts.c: New member `file_name' in `EShortcutsPrivate'.
- (init): Init to NULL.
- (destroy): Free it.
- (e_shortcuts_load): Removed.
- (e_shortcuts_save): Removed.
- (e_shortcuts_new): New arg @file_name. Load from the specified
- file name.
-
- * e-shortcuts-view.c (added_item): New method implementation.
- (removed_item): New method implementation.
- (added_group): New method implementation.
- (removed_group): New method implementation.
- (class_init): Install these.
-
- * e-shortcuts.c (e_shortcuts_remove_shortcut): New function.
- (e_shortcuts_add_shortcut): New function.
- (e_shortcuts_remove_group): New function.
- (e_shortcuts_add_group): New function.
-
- * e-shell-view.c: New member `view_title_bar' in
- `EShellViewPrivate'.
- (setup_widgets): Put an EShellFolderTitleBar on top of the tree
- view and the content view.
- (update_window_icon): Renamed from `set_icon'.
- (update_folder_title_bar): New.
- (popup_tree): New function to pop up the tree view when the title
- button in the title bar is clicked.
- (folder_title_clicked_cb): New callback for the "clicked" signal
- of EShellFolderTitleBar.
- (setup_widgets): Don't add a title bar to the shortcut bar.
- (create_storage_set_subwindow): New helper function.
- (setup_widgets): Use it.
- (show_error): Use an EClippedLabel instead of a GtkLabel.
-
- * e-shell-view.c: Replaced all the occurences of `gpointer' with
- `void *' for consistency.
-
- * e-shell-folder-title-bar.c: New file.
- * e-shell-folder-title-bar.h: New file.
-
- * e-storage-set-view.c (e_storage_set_view_construct): Ooops. Fix
- inverted key/value pair in the call to `g_hash_table_insert()'.
-
-2000-05-28 Dan Winship <danw@helixcode.com>
-
- * main.c (main): Remove extra free of evolution_directory.
-
-2000-05-28 Ettore Perazzoli <ettore@helixcode.com>
-
- * evolution-storage.c (evolution_storage_register): Use the
- storage's name when registering.
-
-2000-05-26 Matt Loper <matt@helixcode.com>
-
- * e-shell-view-menu.c (command_about_box): Make authorlist more
- alphabetical.
- (command_show_treeview): New function; shows the treeview, when it
- has been hidden.
- (command_show_shortcut_bar): New function; shows the shortcut bar,
- when it's been hidden.
-
-2000-05-26 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-corba-storage.c (impl_StorageListener_new_folder): Set the
- physical URI on the folder using `e_folder_set_physical_uri()'.
-
- * e-local-folder.c (get_physical_uri): Removed.
- (construct_loading_metadata): Use EFolder's `physical_uri' field
- instead of ours, which is gone.
- (save_metadata): Likewise.
- (destroy): Don't free.
-
- * e-local-folder.h: Removed `physical_uri' from `ELocalFolder'.
-
- * e-folder.c: New member `physical_uri' in `EFolderPrivate'.
- (init): Initialize to NULL.
- (destroy): Free it.
- (get_physical_uri): Removed.
- (e_folder_set_physical_uri): New function.
-
- * e-storage-set.c (e_storage_set_get_folder): Fix off-by-one error
- in extracting the base name.
-
- * e-storage.c: New member `path' in `Folder'.
- (folder_destroy): Free it.
- (folder_new): New arg. Initialize `path' from it.
- (e_storage_construct): Updated accordingly.
- (e_storage_new_folder): Likewise.
- (e_storage_remove_folder): Remove the folder from the hash.
-
- * e-storage-set-view.c (remove_node): New function.
- (removed_storage_cb): Use it.
- (new_folder_cb): New function, callback for the "new_folder"
- signal on the EStorageSet.
- (removed_folder_cb): New function, callback for the
- "removed_folder" signal on the EStorageSet.
- (e_storage_set_view_construct): Connect these signal handlers to
- the respective signals on our model storage.
-
- * e-storage-set.c (storage_new_folder_cb): New function, callback
- for the "new_folder" signal on the storages.
- (storage_removed_folder_cb): New function, callback for the
- "removed_folder" signal on the storages.
- (e_storage_set_add_storage): Connect them to the signals of the
- storage being added.
-
- * e-corba-storage-registry.c
- (impl_StorageRegistry_register_storage): Throw an exception if
- `e_storage_set_add_storage()' returns false.
-
- * e-shell.c (setup_storages): Unref the local storage after adding
- to the storage set.
-
- * e-corba-storage-registry.c
- (impl_StorageRegistry_register_storage): Unref the storage after
- adding to the storage set.
-
- * e-storage-set.c: New hash table `name_to_named_storage' in
- `EStorageSetPrivate'.
- (named_storage_new): New helper function.
- (named_storage_destroy): New helper function.
- (e_storage_set_add_storage): Use the hash table. Return value
- changed to `gboolean'. Return FALSE if there is a storage with
- that name already. Also, ref the storage.
- (e_storage_set_remove_storage): Likewise [but of course don't ref
- the storage].
- (e_storage_set_get_storage): Use the `name_to_named_storage' hash
- table.
- (destroy): Destroy the `name_to_named_storage' hash.
-
- * e-storage-set.h: New signals "new_folder", "removed_folder".
-
- * e-storage.c (e_storage_get_watcher_for_path): Removed.
- (get_watcher_for_path): Removed.
- (class_init): Install signals "new_folder" and "removed_folder".
- (e_storage_remove_folder): Emit "removed_folder".
- (e_storage_new_folder): Emit "new_folder".
-
- * e-storage.h: Removed method `get_watcher_for_path'. New signals
- "new_folder", "removed_folder".
-
- * e-storage-watcher.c: Removed.
- * e-storage-watcher.h: Removed.
-
- * e-corba-storage-registry.c (corba_class_init): Set the
- Bonobo_Unknown evp parts.
-
- * evolution-storage.c: New.
- * evolution-storage.h: New.
-
- * evolution-shell-component.c
- (evolution_shell_component_get_owner): New.
-
- * e-storage-set-view.c (new_storage_cb): New function.
- (e_storage_set_view_construct): Connect to the "new_storage"
- signal on the EStorageSet.
- (removed_storage_cb): New function.
- (e_storage_set_view_construct): Connect to the "removed_storage"
- signal on the EStorageSet.
-
- * e-storage-set-view.c (e_storage_set_view_construct): Make this
- always look pretty, with Helix GNOME or without.
-
-2000-05-25 Christopher James Lahey <clahey@helixcode.com>
-
- * e-storage-set-view.c: Make this always look pretty, with Helix
- GNOME or without.
-
-2000-05-25 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-storage-set-view.c (e_storage_set_view_construct): Set the
- dotted line type again. Dotted is less butt-ugly than continuous.
-
- * e-shell-view.c (show_error): Display page zero in the notebook.
-
- * main.c (idle_cb): Renamed from `new_view_idle_cb'. Create the
- EShell object here, because now the shell depends on the GLib loop
- to be running for correct operation.
- (main): Don't create the EShell here.
-
- * e-storage-set-view.c (get_pixmap_and_mask_for_folder): If the
- icon is not found, set the returned pixmap and mask to NULL.
-
- * e-shell.c (e_shell_construct): Added precondition: @corba_object
- must be non-nil.
- (e_shell_new): Added precondition: @local_direcory must be
- non-null.
-
- * evolution-shell-component.c: New.
- * evolution-shell-component.h: New.
-
- * e-shell.c: New member `component_registry' in `EShellPrivate'.
- (init): Initialize to NULL.
- (destroy): Unref it.
- (setup_components): New function to set up the compnent registry
- and initialize the mail, calendar and addressbook components.
- (e_shell_construct): Call it.
-
- * e-storage-set.c: Updated to use EFolderTypeRegistry.
- * e-storage-set.h: Likewise.
- * e-shortcuts.c: Likewise.
- * e-shortcuts.h: Likewise.
- * e-shell.c: Likewise.
-
- * e-shell.h: Likewise.
- * e-shell-view.c: Likewise.
- * e-shortcuts-view.c: Likewise.
- * e-storage-set-view.c: Likewise.
-
- * e-component-registry.c: New.
- * e-component-registry.h: New.
-
- * e-folder-type-registry.c: New.
- * e-folder-type-registry.h: New.
-
- * e-folder-type-repository.c: Removed.
- * e-folder-type-repository.h: Removed.
-
- * Evolution-ShellComponent.idl: New struct `FolderType'; new type
- `FolderTypeList'. New attribute `supported_types'.
- (ShellComponent::set_owner): Renamed from `set_shell'.
- (ShellComponent::create_view): New.
-
-2000-05-24 Christopher James Lahey <clahey@helixcode.com>
-
- * e-shell-view.c: Was using the wrong include here.
-
- * e-storage-set-view.c: Got rid of the lines in the tree view.
-
-2000-05-24 Christopher James Lahey <clahey@helixcode.com>
-
- * Makefile.am: Added libepaned.a.
-
- * e-shell-view.c: Switched from GtkPaned to EPaned.
-
-2000-05-23 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-shell.c: New member `corba_storage_registry' in
- `EShellPrivate'.
- (init): Initialize it to NULL.
- (destroy): Unref it if not NULL.
- (setup_corba_storages): New function to set up the CORBA storage
- registry and `bonobo_object_add_interface()' it to the shell.
- (setup_storages): Call it from here.
-
- * e-shell.h, e-shell.c: Derive EShell from BonoboObject instead of
- GtkObject.
-
- * e-storage.c (e_storage_remove_folder): Return value changed into
- `gboolean'; return false if an error occurs, true otherwise.
- (e_storage_new_folder): Likewise.
-
- * e-corba-storage-registry.c: New.
- * e-corba-storage-registry.h: New.
-
- * e-corba-storage.c: New.
- * e-corba-storage.h: New.
-
- * Evolution.idl: Include the new IDLs, but no
- `evolution-service-repository.idl' anymore.
-
- * Evolution-Shell.idl: New.
- * Evolution-ShellComponent.idl: New.
- * Evolution-Storage.idl: New.
-
- * evolution-service-repository.idl: Removed.
- * evolution-service-repository.c: Removed.
- * evolution-service-repository.h: Removed.
-
- * e-folder-type-repository.c (folder_type_new): Free `icon_path'.
-
-2000-05-18 Dan Winship <danw@helixcode.com>
-
- * main.c (new_view_idle_cb): add development_warning (moved from
- mail component)
-
-2000-05-16 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-storage-set-view.c: Get rid of the `ICON_WIDTH' and
- `ICON_HEIGHT' #defines.
- (get_pixmap_and_mask_for_folder): Get the mini icon instead of the
- big one. Use `E_SHELL_MINI_ICON_SIZE' instead of `ICON_WIDTH' and
- `ICON_HEIGHT'.
-
- * e-folder-type-repository.c: New member `mini_icon_pixbuf' in
- `FolderType'.
- (folder_type_new): Initialize `mini_icon_pixbuf' by loading the
- mini icon if possible. If the mini icon is not found, resort to
- the big one.
- (folder_type_free): Unref the mini icon.
- (e_folder_type_repository_get_icon_for_type): New arg @mini. If
- true, return the mini icon instead of the standard one.
-
- * e-shell-view.c (set_icon): Get the mini icon instead of the big
- one by using `e_shell_get_icon_path's @try_mini arg.
-
- * e-shell-constants.h: New file.
-
- * e-shell-utils.c
- (e_shell_get_icon_path): New arg @try_mini. If true, look for the
- mini version [whose name ends in `-mini'].
-
- * e-folder-type-repository.c
- (folder_type_new): Free string returned by
- `e_shell_get_icon_path()'.
-
-2000-05-16 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-shell-view.c: New members `storage_set_view_box',
- `shortcut_bar_box', `hpaned1_position', `hpaned2_position' in
- `EShellViewPrivate'.
- (init): Initialize them.
- (setup_widgets): Add title bars to the tree and shortcut views.
- (shortcuts_view_close_button_clicked_cb): New callback function.
- (setup_widgets): Connect to the "close_button_clicked" signal of
- the shortcut view's title bar.
- (storage_set_view_close_button_clicked_cb): New callback function.
- (setup_widgets): Connect to the "close_button_clicked" signal of
- the storage set view's title bar.
- (e_shell_view_show_shortcuts): New function.
- (e_shell_view_show_folders): New function.
-
- * e-shell-view.c: New members `hpaned1', `hpaned2' in
- `EShellViewPrivate'.
- (init): Initialize both to NULL.
- (setup_widgets): Invert the parenting order for the GtkHPaneds and
- store them into the private `hpaned' and `hpaned2' members.
-
- * Makefile.am (evolution_LDADD): Link with `libemiscwidgets.a'.
-
-2000-05-15 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-shortcuts.c
- (load_shortcuts_into_view): Removed.
- (e_shortcuts_new_view): Don't set up the shortcut bar manually
- here anymore, and don't set the icon callback either. The
- `EShortcutsView' object is now able to do this by itself.
-
- * e-shortcuts-view.c
- (icon_callback): Moved here from `e-shortcuts.c'.
- (load_group): New function.
- (load_all_shortcuts): New function.
- (e_shortcuts_view_construct): Call it to load the shortcuts from
- the `EShortcuts' object. Also, set `icon_callback' as the icon
- callback.
-
- * e-storage-set-view.c
- (button_press_event): Add/remove grab with `gtk_grab_add' and
- `gtk_grab_remove'.
- (button_release_event): Call `gtk_grab_remove' when removing the
- grab.
-
- * e-shortcuts.c: New member `title_to_group' in
- `EShortcutsPrivate'.
- (init): Initialize here.
- (destroy): Destroy here.
- (unload_shortcuts): Destroy and recreate here.
- (load_shortcuts): Avoid inserting multiple groups with the same
- title, and insert the groups into the `title_to_group' hash table.
- Also, avoid leaking the return value from `xmlNodeListGetString'.
- (e_shortcuts_get_group_titles): New function.
- (e_shortcuts_get_shortcuts_in_group): New function.
- (e_shortcuts_get_storage_set): New function.
-
- * e-storage-set-view.c
- (e_storage_set_view_set_current_folder): Emit the
- "folder_selected" signal.
-
- * e-local-folder.c
- (get_string_value): Return a `char *' to be deallocated by the
- caller instead of a `const char *' that does not need to be
- deallocated.
- (construct_loading_metadata): Free values returned from
- `get_string_value'.
-
-2000-05-15 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-storage-set-view.c: New members `dragged_row_path',
- `selected_row_path_before_click' in `EStorageSetViewPrivate'.
- (init): Initialize them to NULL.
- (motion_notify_event): Set `dragged_row_path' from
- `selected_row_path'.
- (button_press_event): Initialize `selected_row_path_before_click'
- from `selected_row_path'.
- (button_release_event): Set `selected_row_path_before_click' to
- NULL.
- (drag_end): Restore the current selection from
- `selected_row_path_before_click'; then set both `dragged_row_path'
- to NULL.
-
-2000-05-15 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-storage-set-view.c: New members `in_drag' and `drag_button' in
- `EStorageSetViewPrivate'. New static variables `drag_types',
- `num_drag_types', `target_list'.
- (class_init): Create the `target_list'.
- (init): Initialize the private `in_drag' member to false.
- Initialize the private `drag_button' member to zero.
- (button_release_event): Set it to false.
- (motion_notify_event): New function, implementation of
- `GtkWidget::motion_notify_event'. If `in_drag' is false, set it
- to true and set ourselves up as a drag source.
- (button_press_event): New function, implementation of
- `GtkWidget::button_press_event'. Set `drag_button' to the event's
- button number and then chain to the implementation in the parent
- class.
- (drag_end): New function, implementation of `GtkWidget::drag_end'.
- (drag_data_get): New function, implementation of
- `GtkWidget::drag_data_get'.
- (set_e_shortcut_selection): New function, helper for `drag_data_get'.
- (set_uri_list_selection): New function, helper for `drag_data_get'.
- (class_init): Install these method implementations.
-
- * e-storage-set-view.c: New member `selected_row_path' in
- `EStorageSetViewPrivate'.
- (init): Initialize it to NULL.
- (tree_select_row): Set it to the path of the selected row. Don't
- emit "folder_selected" yet. Also, keep the grab.
- (button_release_event): New function, implementation of
- `GtkWidget::button_release_event'. If `selected_row_path' is not
- NULL, emit the "folder_selected" signal with `selected_row_path'
- as the parameter and then set `selected_row_path' to NULL again.
- (class_init): Install `button_release_event'.
-
- * e-storage-set-view.c: Made `ICON_WIDTH' and `ICON_HEIGHT' global
- #defines.
- (e_storage_set_view_construct): Set the row height to
- `ICON_HEIGHT'. Alos, set the selection mode to
- `GTK_SELECTION_BROWSE'.
-
-2000-05-15 Iain Holmes <ih@csd.abdn.ac.uk>
-
- * e-local-folder.c (get_string_value): Use the correct function to
- get the node's contents.
-
- * e-shortcuts.c (load_shortcuts): Same as above.
-
-2000-05-14 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-folder-type-repository.c
- (e_folder_type_repository_get_control_id_for_type): Protect
- against non-existing types.
- (e_folder_type_repository_get_icon_for_type): Likewise.
-
-2000-05-14 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-storage-set-view.c
- (folder_compare_cb): Callback comparison function for comparing
- folders based on their names.
- (insert_folders): Use it to sort the folder list before using it.
-
-2000-05-14 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-shell.c
- (setup_storages): Pass the pointer to the folder type repository.
- (e_shell_construct): Initialize the folder type repository before
- everything else.
-
- * e-storage-set.c: New member `folder_type_repository' in
- `EStorageSetPrivate'.
- (init): Initialize it to NULL.
- (destroy): Unref it.
- (e_storage_set_construct): New arg @folder_type_repository.
- Initialize the corresponding member in the private struct through
- it.
- (e_storage_set_new): New arg @folder_type_repository.
- (e_storage_set_get_folder_type_repository): New function.
-
- * e-shortcuts.c (icon_callback): Just use [the new version of]
- `e_folder_type_repository_get_icon_for_type()' instead of loading
- the image manually.
-
- * e-folder-type-repository.c: New member `icon_pixbuf' in
- `FolderType'.
- (folder_type_new): Load the pixbuf.
- (folder_type_free): Unref the pixbuf.
- (e_folder_type_repository_get_icon_name_for_type): Renamed from
- `e_folder_type_repository_get_icon_for_type'.
- (e_folder_type_repository_get_icon_for_type): New function, now
- returning a `GdkPixbuf *'.
-
- * e-shortcuts.c
- (icon_callback): Use `e_shell_get_icon_name()'.
-
- * e-shell-view.c: New member `storage_set_view' in
- `EShellViewPrivate'.
- (init): Initialize it to NULL.
- (e_shell_view_construct): Create an EStorageSetView for the
- shell's EStorageSet and put it into a scrolled window. Also, put
- the scrolled window into the EShellView with some
- [temporary] GtkPaned action. Store the pointer to the
- EStorageSetView to `priv->storage_set_view'.
- (set_icon): Get an EShellView and an EFolder instead of an
- EShellView and a URI. Also, don't leak.
- (update_for_current_uir): New helper function. Call `set_icon'.
- (show_error): Call it.
- (folder_selected_cb): New function.
- (setup_widgets): Connect it to the "folder_selected" signal of the
- storage set view.
-
- * e-storage-set-view.c: New file.
- * e-storage-set-view.h: New file.
-
- * e-shell-utils.c: New file.
- * e-shell-utils.h: New file.
-
-2000-05-10 Christopher James Lahey <clahey@helixcode.com>
-
- * e-shell-view-menu.c: Added an about box.
-
-2000-05-10 Christopher James Lahey <clahey@helixcode.com>
-
- * e-shell-view.c: Set the icons when changing between components.
-
- * main.c: Set the default icon. (The change in e-shell-view.c
- doesn't work unless we do this.)
-
-2000-05-09 Matt Loper <matt@helixcode.com>
-
- * e-shell-view-menu.c (command_run_bugbuddy): New function; allows
- users to submit a bug.
- (command_run_bugbuddy): Implemented with jacob's patch.
-
-2000-05-09 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-shell.c (e_shell_new_view): Display the specified @uri in the
- view.
-
- * e-shell-view.c (e_shell_view_construct): Removed arg @uri.
- (e_shell_view_new): Likewise.
-
- * main.c: New string constant `STARTUP_URI', specifying the URI to
- show in the startup view.
- (new_view_idle_cb): New callback function to create a new view for
- `STARTUP_URI' in the idle loop. We need to do this in the idle
- loop because the CORBA stuff cannot work until the loop starts
- running.
- (main): Set `new_view_idle_cb' up as the idle callback instead of
- creating the view right away.
-
-2000-05-09 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-shell.c (setup_storages): Woops. Don't free the path before
- the warning message, as we need to print it.
-
-2000-05-08 Ettore Perazzoli <ettore@helixcode.com>
-
- * main.c (destroy_cb): New function.
- (main): Connect it to the `destroy' signal on the shell.
-
-2000-05-08 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-shortcuts.c (load_shortcuts): Const fix.
-
-2000-05-08 Larry Ewing <lewing@helixcode.com>
-
- * e-shortcuts.c (load_shortcuts_into_view): xmlFree the return
- value of xmlGetProp.
-
-2000-05-07 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-shortcuts-view.c (e_shortcuts_view_construct): Use
- correct cast.
-
-2000-05-07 Ettore Perazzoli <ettore@helixcode.com>
-
- * main.c (main): Connect to "no_views_left", not "destroy".
-
- * e-shell.c (view_destroy_cb): Grmpf.
-
-2000-05-07 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-shell.c (e_shell_construct): Output a warning message if the
- shortcut file is not found.
- (setup_storages): Output a warning message if the local storage
- cannot be initialized.
- (destroy): Destroy all the views.
-
- * e-shell-view.c
- (e_shell_view_construct): Ref the shell.
-
- * e-shortcuts-view.c
- (e_shortcuts_view_construct): Ref the shortcuts.
-
- * e-shell.c: Create the "no_views_left" signal. New member
- `views' in `EShellPrivate'.
- (init): Initialize `views' to NULL.
- (view_destroy_cb): Destroy handler for a view: remove the view
- from `views', and emit the "no_views_left" signal if this was the
- last view.
- (e_shell_new_view): Add the new view to `views' and connect the
- "destroy" signal to `view_destroy_cb'.
- (destroy): Destroy the views.
-
- * e-shell.h: New signal "no_views_left".
-
- * e-shell-view-menu.c (command_quit): New function, implementation
- of the "quit" command.
-
- * e-shell-view.c (e_shell_view_get_shell): New function.
-
- * e-shell.c (e_shell_quit): New function.
-
- * main.c (main): If it is not possible to create the shell for
- some reason, pop up an error message.
- (shell_destroy_cb): New function, signal handler for "destroy" on
- the shell object.
- (main): Connect it.
-
-2000-05-06 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-shortcuts.c (destroy): Be safer about NULL objects.
-
- * e-shell.c (destroy): Be safer about NULL objects.
-
- * e-local-storage.c (load_folders): Use `readdir()', not
- `readdir_r()'.
-
-2000-05-06 Ettore Perazzoli <ettore@helixcode.com>
-
- * main.c (init_corba) [! USING_OAF]: We have no options no
- popt context.
-
-2000-05-06 Ettore Perazzoli <ettore@helixcode.com>
-
- * All files: Reorganized and redone a lot of the shell. New
- features: internal URI namespace, extensible storage/folder
- mechanism, configurable shortcuts.
-
-2000-05-03 Damon Chaplin <damon@helixcode.com>
-
- * e-shell-view.c (e_shell_view_new): turned the notebook border off.
- The calendar looks better without it. If any of the views want a
- border they should create it themselves, shouldn't they?
-
-2000-05-04 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-shortcut.c (shell_icon_cb): Type of @url changed from `gchar
- *' to `const gchar *'; new arg @data.
- (e_shortcut_bar_view_new): Pass NULL as the closure value for
- `e_shortcut_bar_set_icon_callback()'.
-
-2000-05-02 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-folder-mail.c: Removed.
-
- * e-folder-mail.h: Removed.
-
- * eshell-types.h: Removed.
-
- * e-folder.h: Don't #include "eshell-types.h".
-
-2000-05-02 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-folder.h: Removed member `eservice' from `EFolder'.
-
- * e-service.c: Removed.
-
- * e-service.h: Removed.
-
-2000-05-02 Matt Loper <matt@helixcode.com>
-
- * Makefile.am: set G_LOG_DOMAIN.
-
-2000-05-01 Dan Winship <danw@helixcode.com>
-
- * e-shell-view.c (e_shell_view_set_view): Turn off control frame
- autoactivation, so the toolbars work correctly. This may actually
- be a bug in Bonobo, but we'll kludge around it here for now.
-
-2000-04-27 Ettore Perazzoli <ettore@helixcode.com>
-
- * e-shell-view.c: OAFized.
- (get_view): If `bonobo_widget_new_control()' fails for the
- calendar, don't try to get the property bag and stuff and thus
- prevent a segfault.
-
- * main.c
- (corba_init): Removed Bonobo initialization. Implemented OAF
- version for the case in which `USING_OAF' is #defined.
- (init_bonob): New function.
- (main): Call `init_bonobo()'.
-
-2000-04-26 Matt Loper <matt@helixcode.com>
-
- * e-shell-view.c (bonobo_widget_is_dead): Helper function to see
- whether a bonobo widget is a zombie (ie the remote bonobo control
- died).
- (e_shell_view_set_view): Try to respawn dead widgets.
-
-2000-04-25 Dan Winship <danw@helixcode.com>
-
- * Makefile.am: include -I$(datadir)/idl in orbit-idl arguments so
- that you can have bonobo installed in the same prefix as
- evolution, when that isn't the same prefix is gnome-libs, which a
- lot of people seem to be doing.
- (CLEANFILES): add EVOLUTION_CORBA_GENERATED
-
-2000-04-24 Christopher James Lahey <clahey@helixcode.com>
-
- * idl/folder.idl: Made some functions syncronous that didn't need
- to be asyncronous.
-
-2000-04-24 Matt Loper <matt@helixcode.com>
-
- * e-shell-view.h: Added hpaned and treeview widgets to
- EShellView. Added e_shell_view_toggle_shortcut_bar() and
- e_shell_view_toggle_treeview().
-
- * e-shell-view.c (e_shell_view_setup_shortcut_display): Use EPaned
- widget to house our shortcut bar.
- (e_shell_view_toggle_shortcut_bar): New function; toggles whether
- the shortcut bar is showing.
- (e_shell_view_toggle_treeview): Same, for the treeview (NYI).
- (e_shell_view_new): Put the notebook view in our EPaned widget.
-
- * e-shell-view-menu.c (esv_cmd_toggle_shortcut_bar): New function;
- toggles whether the shortcut bar is viewed.
- (esv_cmd_toggle_treeview): Same, but with the treeview. Added
- menuitems in the "view" menu to allow access to the above.
-
-2000-04-19 Seth Alves <alves@hungry.com>
-
- * e-shell-view.c (get_view): set calendar's uri with a property bag
-
-2000-04-19 Christopher James Lahey <clahey@helixcode.com>
-
- * idl/folder.idl: New idl file. Still unused.
-
-2000-04-14 Christopher James Lahey <clahey@helixcode.com>
-
- * e-shell-view.c: Made the left pane of the shell view not
- autoresize.
-
-2000-04-09 Matt Loper <matt@helixcode.com>
-
- * e-shell-view.c (e_shell_view_setup): Set the default height
- bigger, to 600, so that everything in the shortcut-bar shows up.
-
-2000-04-07 Matt Loper <matt@helixcode.com>
-
- * e-shell-view.c (destroy_folder_view): New function;
- Bonobo_Unknown_unref's the controls that have the views in them.
- (esv_destroy): Calls the above for each folder_view in the
- hashtable.
- (get_view): unref the ServiceRepository interface of the control
- when we're done with it.
-
-2000-04-06 Miguel de Icaza <miguel@gnu.org>
-
- * shell/e-shortcut.c (shell_icon_cb): Append a slash here.
- (shell_icons): Only list the filenames.
-
- * shell/main.c (evolution_boot): Be less rude.
-
-2000-04-06 Matt Loper <matt@helixcode.com>
-
- * shell/main.c (evolution_boot): Make sure our data directory is
- available with e_setup_base_dir ().
-
-2000-04-06 Miguel de Icaza <miguel@gnu.org>
-
- * shell/e-shortcut.c (shell_icon_cb): Load the icons from the
- installation path, not form the GNOME-libs installation prefix.
- (shell_icon_cb): Memory leak fix.
-
- * shell/Makefile.am (imagesdir): Pass the EVOLUTION_IMAGES
- installation directory here.
-
-2000-04-05 Seth Alves <alves@hungry.com>
-
- * shell/e-shell-view.c (get_view): hook up control:calendar
-
-2000-03-31 Dan Winship <danw@helixcode.com>
-
- * shell/e-shortcut.c (e_shortcut_bar_view_new, shell_icon_cb):
- Update for shortcut bar changes.
-
- * shell/e-folder.h: add E_FOLDER_SUMMARY
- * shell/e-shell.c (e_shell_setup_default_folders): make the
- "Today" icon be of type E_FOLDER_SUMMARY, not E_FOLDER_MAIL.
-
-2000-03-30 Dan Winship <danw@helixcode.com>
-
- * shell/e-shell-view.c (e_shell_view_set_view): Hold off on
- deactivating the "outgoing" control until after setting up the
- "incoming" control. That way if the new control takes a few
- seconds to load, there won't be an ugly empty spot where the
- toolbar used to be while the new control loads.
-
-2000-03-29 Dan Winship <danw@helixcode.com>
-
- * shell/e-shell-view.c (e_shell_view_set_view): Call
- bonobo_control_frame_activate on the folder_view every time it
- is displayed, and bonobo_control_frame_deactivate every time it is
- hidden.
-
-2000-03-25 Matt Loper <matt@helixcode.com>
-
- * shell/e-shell-view.c (get_view): Move CORBA_Environment to
- different scope.
-
-2000-03-22 Matt Loper <matt@helixcode.com>
-
- * shell/main.c (evolution_boot): gtk_signal_connect'ed "destroy"
- to gtk_main_quit, so that the shell dies when you want it to.
-
- * shell/e-shell-view.c (get_view): Reorganized, and added
- assertions.
- (e_shell_view_set_view): Added assertions.
-
-2000-03-20 Matt Loper <matt@helixcode.com>
-
- * shell/e-shell-view.h: New private field in EShellView added,
- which contains the notebook and a hashtable of folders to views.
-
- * shell/e-shell-view.c (e_shell_view_set_view): Instead of
- creating a new control every time we set the view, we now keep our
- controls in a notebook. This function now switches to the correct
- notebook page, or creates a new page/control as necessary.
- (e_shell_view_new): Creates and inserts the notebook into the
- shell.
-
-2000-03-13 Christopher James Lahey <clahey@helixcode.com>
-
- * shell/e-shell-view.c: Added an E_FOLDER_CONTACTS section to the
- get_view function.
-
-2000-03-13 bertrand <bertrand@helixcode.com>
-
- * shell/e-shell.c (EShell_register_service):
- test implementation. Show the uri and the type
- of service that has just been registered.
-
- * shell/e-shell-view.c (get_view):
- once we have the bonobo control widget,
- disable the autoactivation and activate
- the control frame.
- (get_view): added a parameter to have
- a reference to the EShellView.
- (get_view): In the case of the mail component
- use the Evolution_ServiceRepository to
- give the component a reference to the
- Shell server.
-
-2000-03-12 bertrand <bertrand@helixcode.com>
-
- * shell/e-shell-view.c (get_view): name change
-
-
- * shell/e-folder.c (e_folder_get_folder_type): added the
- get_e_folder_type function.
-
- * shell/evolution-service-repository.c:
- (evolution_service_repository_new): creates an
- Evolution_ServiceRepository object.
- (create_evolution_service_repository):
- create the corresponding servant.
- (evolution_service_repository_construct): set
- the closure as well as the virtual functions.
-
-2000-03-12 bertrand <bertrand@helixcode.com>
-
- * shell/evolution-service-repository.c:
- * shell/evolution-service-repository.h:
- Implementation of the service repository interface
- as a bonobo object.
-
- * shell/evolution-service-repository.idl:
- new file. Contains the definition for the service
- repository interface.
-
- * shell/Shell.idl: move the shell related stuff
- here
-
-2000-03-12 bertrand <bertrand@helixcode.com>
-
- * shell/e-folder.h: add a field refering to a
- service associated to the efolder. In the case of
- distant folders, it is generally a server.
-
- * shell/e-service.c: New class. Models a service.
- A service is an object with an URI and a root folder.
- It genreally reporesents a distant folder.
- A service is generally a ressource shared amongst
- several folders.
- * shell/e-service.h:
-
-2000-03-07 bertrand <bertrand@helixcode.com>
-
- * shell/e-shell-shortcut.c (shortcut_bar_item_selected):
- removed a test that prevented the standard menu
- to be shown.
-
-2000-03-01 Ettore Perazzoli <ettore@helixcode.com>
-
- * shell/Makefile.am (INCLUDES): use `top_srcdir' instead of
- `srcdir'. Also, add `$(top_srcdir)'. And put the srcdir includes
- before everything else.
- (evolution_LDADD): `libeutil.la', not `libeutil.a'.
-
-2000-02-22 bertrand <Bertrand.Guiheneuf@aful.org>
-
- * shell/Makefile.am (evolution_LDADD):
- add libetext.a.
-
-2000-02-08 Iain Holmes <ih@csd.abdn.ac.uk>
-
- * shell/Makefile.am: Changed the order of the compilation, so the CORBA
- stuff was generated before it was needed.
-
-2000-01-15 Miguel de Icaza <miguel@gnu.org>
-
- * shell/e-shell.c: Construct the default folders
-
- * shell/e-shell-view.c (e_shell_view_new): Setup the main GnomeApp
- application, load the shortcut, internal api.
-
- * shell/e-folder.c (e_folder_get_type_name): Return description
- here; Change of policy; We now know about all of the possible
- types that can be displayed on Evolution.
-
-2000-01-15 Miguel de Icaza <miguel@gnu.org>
-
- * shell/e-folder.c: Renamed signal.
-
- * widgets/shortcut-bar/e-shortcut-bar.c (e_shortcut_bar_add_item):
- Use e_bar_set_item_data.
-
- Drop item_url; Require image argument; Require user data
- argument.
-
-2000-01-05 Miguel de Icaza <miguel@gnu.org>
-
- * shell/Makefile.am: New file.
-
diff --git a/shell/Evolution-Activity.idl b/shell/Evolution-Activity.idl
deleted file mode 100644
index de23d2c53b..0000000000
--- a/shell/Evolution-Activity.idl
+++ /dev/null
@@ -1,106 +0,0 @@
-/* -*- Mode: IDL; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Activity management for Evolution.
- *
- * Authors:
- * Ettore Perazzoli <ettore@ximian.com>
- *
- * Copyright (C) 2000, 2001 Ximian, Inc.
- */
-
-module GNOME {
-module Evolution {
-
-interface Activity : Bonobo::Unknown {
- typedef long ActivityId;
-
- enum DialogType {
- DIALOG_TYPE_NONE,
- DIALOG_TYPE_MESSAGE,
- DIALOG_TYPE_WARNING,
- DIALOG_TYPE_INPUT,
- DIALOG_TYPE_ERROR
- };
-
- enum DialogAction {
- DIALOG_ACTION_ERROR,
- DIALOG_ACTION_DISPLAY,
- DIALOG_ACTION_POSTPONE
- };
-
- exception InvalidIcon {};
- exception IdNotFound {};
-
- /* Events propagated through the listener:
-
- - "ShowDetails": The user wants to know details about the
- progressing operation. The component should display additional
- information about the operation in progress, or raise a pending
- alert dialog.
-
- - "Cancel": The user wants the operation to be cancelled.
- */
-
- /**
- * operationStarted:
- * @component_id: Id of the component starting the operation.
- * @information: Informative string about the operation being performed.
- * @cancellable: Whether this operation should be cancellable by
- * the user from the shell view.
- * @event_listener: Listener which the events for the activity
- * widget will be passed to.
- * @activity_id: A unique Id for the activity, to be used to update the
- * status of the operation.
- * @suggest_display: Whether displaying the dialog might be a nice idea.
- */
- void operationStarted (in string component_id,
- in AnimatedIcon icon,
- in string information,
- in boolean cancellable,
- in Bonobo::Listener event_listener,
- out ActivityId activity_id,
- out boolean suggest_display)
- raises (InvalidIcon);
-
- /**
- * operationProgressing:
- * @activity: The unique Id for the activity whose status we want to update.
- * @information: New informative string. If empty, the informative string
- * isn't changed.
- * @progress: A float from 0.0 to 1.0 indicating the status of completion.
- *
- * Update the status of the specified @activity.
- */
- void operationProgressing (in ActivityId activity,
- in string information,
- in float progress)
- raises (IdNotFound);
-
- /**
- * operationFinished:
- * @activity: The unique Id for the activity that has been completed.
- *
- * Report that the specified @activity has been completed. After this
- * method is invoked, @activity is not considered to be a valid Id
- * anymore.
- */
- void operationFinished (in ActivityId activity);
-
- /**
- * requestDialog:
- *
- * Inform the shell that the specified @activity requires user input
- * from a dialog. The returned value specifies whether the shell wants
- * the dialog to be shown now (%DIALOG_ACTION_DISPLAY) or postponed
- * (%DIALOG_ACTION_POSTPONE). If the return value is
- * %DIALOG_ACTION_POSTPONE, the component should wait for the
- * "DisplayDialog" event before proceeding further. In that case, the
- * shell will flash the label related to this activity, and emit
- * "DisplayDialog" through the event source when the user clicks on it.
- */
- DialogAction requestDialog (in ActivityId activity,
- in DialogType dialog_type);
-};
-
-};
-};
diff --git a/shell/Evolution-ConfigControl.idl b/shell/Evolution-ConfigControl.idl
deleted file mode 100644
index 059ed6b286..0000000000
--- a/shell/Evolution-ConfigControl.idl
+++ /dev/null
@@ -1,34 +0,0 @@
-/* -*- Mode: IDL; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Additional interfaces for the Controls used in configuration dialogs.
- *
- * Authors:
- * Ettore Perazzoli <ettore@ximian.com>
- *
- * Copyright (C) 2002 Ximian, Inc.
- */
-
-module GNOME {
-module Evolution {
- interface ConfigControl : Bonobo::Unknown {
- /* Apply the current settings. */
- void apply ();
-
- /* The actual Control. */
- readonly attribute Bonobo::Control control;
-
- /* Get the event source for this control. */
- readonly attribute Bonobo::EventSource eventSource;
-
- /* These are the events that get emitted when the properties of
- the dialog change:
-
- - "changed"
-
- Emitted when the data entered changes, and thus
- doesn't match the applied settings anymore. The user must
- assume this to be true until ::apply gets invoked.
- */
- };
-}; /* module Evolution */
-}; /* module GNOME */
diff --git a/shell/Evolution-Offline.idl b/shell/Evolution-Offline.idl
deleted file mode 100644
index 4c3f3f7392..0000000000
--- a/shell/Evolution-Offline.idl
+++ /dev/null
@@ -1,78 +0,0 @@
-/* -*- Mode: IDL; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Interface to allow components to switch between on-line and off-line mode.
- *
- * Authors:
- * Ettore Perazzoli <ettore@ximian.com>
- *
- * Copyright (C) 2001 Ximian, Inc.
- */
-
-#include <Bonobo.idl>
-
-module GNOME {
-module Evolution {
-
-struct Connection {
- string hostName;
- string type;
-};
-typedef sequence<Connection> ConnectionList;
-
-interface OfflineProgressListener {
- /* Update the shell about the progress of going off-line. The
- operation is considered completed when the ConnectionList is empty. */
- void updateProgress (in ConnectionList current_active_connections);
-};
-
-interface SyncFolderProgressListener {
- /* Report that syncing has progressed. @progress has to be between 0.0
- and 1.0. */
- void updateProgress (in float progress);
-
- /* Report that the operation has finished. */
- void reportSuccess ();
-
- /* Report an error. */
- void reportFailure (in string message);
-};
-
-interface Offline : Bonobo::Unknown {
- exception notPrepared {};
- exception notSyncing {};
-
- /* Whether the component is currently off-line. */
- attribute boolean isOffline;
-
- /* Ask the component to prepare to go into off-line mode. The
- component must return a list of the current active connections.
- After this call, the shell is expected to: (in order)
-
- 1. Invoke ::syncFolder for each of the component's folders that
- need to be synchronized to disk for offline usage.
-
- 2. Either invoke ::goOffline (actually complete the operation
- and go off-line) or ::goOnline (operation cancelled).
- */
- void prepareForOffline (out ConnectionList active_connection_list);
-
- /* Request the component to sync the specified folder. This has to
- happen after ::prepareForOffline. */
- oneway void syncFolder (in Folder folder,
- in SyncFolderProgressListener listener);
-
- /* Request the component to stop syncing the specified folder. This
- has to happen after ::syncFolder. */
- oneway void cancelSyncFolder (in Folder folder);
-
- /* Ask the component to go into off-line mode. This always comes after
- a ::prepareForOffline. */
- void goOffline (in OfflineProgressListener listener)
- raises (notPrepared);
-
- /* Tell the component to go into on-line mode. */
- void goOnline ();
-};
-
-};
-};
diff --git a/shell/Evolution-Session.idl b/shell/Evolution-Session.idl
deleted file mode 100644
index 35eb9ea427..0000000000
--- a/shell/Evolution-Session.idl
+++ /dev/null
@@ -1,41 +0,0 @@
-/* -*- Mode: IDL; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Interface for saving configuration information.
- *
- * Authors:
- * Ettore Perazzoli <ettore@ximian.com>
- *
- * Copyright (C) 2000, 2001 Ximian, Inc.
- */
-
-#include <Bonobo.idl>
-
-module GNOME {
-module Evolution {
-
- interface Session : Bonobo::Unknown {
- exception Failed {};
-
- /**
- * saveConfiguration:
- * @prefix: A configuration path prefix.
- *
- * Save the current configuration at the specified @prefix.
- * The component can use any path starting by @prefix for its
- * keys.
- */
- void saveConfiguration (in string prefix)
- raises (Failed);
-
- /**
- * loadConfiguration:
- * @prefix: A configuration path prefix.
- *
- * Load the saved configuration at the specified @prefix.
- */
- void loadConfiguration (in string prefix)
- raises (Failed);
- };
-
-};
-};
diff --git a/shell/Evolution-Shell.idl b/shell/Evolution-Shell.idl
deleted file mode 100644
index 20960ce029..0000000000
--- a/shell/Evolution-Shell.idl
+++ /dev/null
@@ -1,135 +0,0 @@
-/* -*- Mode: IDL; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Interface for the Evolution shell.
- *
- * Authors:
- * Ettore Perazzoli <ettore@ximian.com>
- *
- * Copyright (C) 2000, 2001 Ximian, Inc.
- */
-
-#include <Bonobo.idl>
-
-module GNOME {
-module Evolution {
- interface ShellComponent;
-
- interface FolderSelectionListener;
-
- interface Shell : Bonobo::Unknown {
- exception NotReady {};
- exception NotFound {};
- exception UnsupportedSchema {};
- exception InvalidURI {};
- exception InternalError {};
- exception Busy {};
-
- typedef sequence<string> FolderTypeNameList;
-
- /**
- * getComponentByType:
- * @type: name of a valid folder type
- *
- * Get the shell component associated with a specific folder type.
- *
- * Return value: the Evolution::ShellComponent interface for the component that
- * handles @type.
- */
- ShellComponent getComponentByType (in string type)
- raises (NotReady, NotFound);
-
- /**
- * getIconByType:
- * @type: name of a valid folder type
- * @mini: whether or not to get a mini (16x16) icon
- *
- * Get an icon associated with a specific folder type.
- *
- * Return value: an Evolution::Icon interface for the
- * component that handles @type.
- */
- Icon getIconByType (in string type,
- in boolean mini)
- raises (NotReady, NotFound);
-
- /**
- * createNewView:
- * @uri: URI for the view to open
- *
- * Return value: the new view.
- */
- ShellView createNewView (in string uri)
- raises (NotReady, NotFound, UnsupportedSchema, InvalidURI, InternalError);
-
- /**
- * handleURI:
- * @uri: URI to handle
- *
- * This handles the specified URI. It is different from
- * `::createNewView' as it doesn't necessarily imply creating a
- * new ShellView. (For example, a `mailto:' URI will invoke
- * the message composer.)
- */
- void handleURI (in string uri)
- raises (NotReady, NotFound, UnsupportedSchema, InvalidURI, InternalError);
-
- /**
- * selectUserFolder:
- * @parent_xid: XID for the parent window (or zero if no parent window).
- * @listener: a listener interface to report the answer of the user.
- * @title: title for the folder selector dialog
- * @default_folder: physical or `evolution:' URI for the folder that must be
- * selected by default, when the dialog is popped up
- * @possible_types: list of the names of the types of folders that are allowed
- *
- * Pop up a folder selection dialog from which the user can select a folder.
- * Initially, the @default_folder is selected. The user can also create a new
- * folder by using the "New..." button. The dialog only lets the user choose
- * a folder whose type is listed in @possible_types.
- */
- void selectUserFolder (in long long parent_xid,
- in FolderSelectionListener listener,
- in string title,
- in string default_folder,
- in FolderTypeNameList possible_types)
- raises (NotReady, Busy);
-
- /**
- * getLocalStorage:
- *
- * Get the interface to the local storage.
- *
- * FIXME: Probably we just want to be able to request this to
- * the StorageRegistry. This is an ugly kludge.
- *
- * Return value: the `Evolution::LocalStorage' interface for
- * the local storage. */
- Storage getLocalStorage ()
- raises (NotReady);
-
- /**
- * createStorageSetView:
- *
- * Create a control for the storage set view. This control
- * will also implement the `Evolution::StorageSetView' interface.
- *
- * Return value: the newly created control.
- */
- Bonobo::Control createStorageSetView ()
- raises (NotReady);
-
- /**
- * setLineStatus:
- *
- * Set the shell into on-line or off-line mode.
- */
- void setLineStatus (in boolean online)
- raises (NotReady);
- };
-
- interface FolderSelectionListener {
- void notifySelected (in Folder folder);
- void notifyCanceled ();
- };
-};
-};
diff --git a/shell/Evolution-ShellComponent.idl b/shell/Evolution-ShellComponent.idl
deleted file mode 100644
index 90cd6fa57d..0000000000
--- a/shell/Evolution-ShellComponent.idl
+++ /dev/null
@@ -1,185 +0,0 @@
-/* -*- Mode: IDL; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Interface for the Evolution components.
- *
- * Authors:
- * Ettore Perazzoli <ettore@ximian.com>
- *
- * Copyright (C) 2000, 2001, 2002 Ximian, Inc.
- */
-
-#include <Bonobo.idl>
-
-module GNOME {
-module Evolution {
- interface Shell;
-
- /* URI schemas, e.g. mailto:. */
- typedef string URISchema;
- typedef sequence<URISchema> URISchemaList;
-
- /* A type of item that the component can create when asked by the user,
- e.g. a mail message or an appointment. */
- struct UserCreatableItemType {
- string id;
- string description;
- string menuDescription;
- string tooltip;
- char menuShortcut;
- Icon icon;
-
- // This specifies the folder type for which this user creatable
- // type is a default type.
- string folderType;
- };
- typedef sequence<UserCreatableItemType> UserCreatableItemTypeList;
-
- /* Definition for a folder type. */
- struct FolderType {
- string name;
- string iconName;
-
- string displayName;
- string description;
-
- boolean userCreatable;
-
- sequence<string> acceptedDndTypes;
- sequence<string> exportedDndTypes;
-
- UserCreatableItemTypeList userCreatableItemTypes;
- };
- typedef sequence<FolderType> FolderTypeList;
-
- interface ShellComponentListener;
-
- interface ShellComponent : Bonobo::Unknown {
- exception AlreadyOwned {};
- exception Busy {};
- exception InternalError {};
- exception NotFound {};
- exception NotOwned {};
- exception OldOwnerHasDied {};
- exception UnsupportedSchema {};
- exception UnsupportedType {};
- exception AlreadyPopulated {};
- exception NotPopulated {};
-
- /* List of folders that the component supports. */
- readonly attribute FolderTypeList supportedTypes;
-
- /* Custom URI schemas that the component supports.
- (e.g. mailto, see ::handleExternalURI). */
- readonly attribute URISchemaList externalUriSchemas ;
-
- /* List of the item that the user can create (see
- ::userCreateNewItem). */
- readonly attribute UserCreatableItemTypeList userCreatableItemTypes;
-
- /* This method is invoked after the components is activated by
- the shell to notify the component that the shell is
- alive. */
- void setOwner (in Shell shell, in string evolution_homedir)
- raises (AlreadyOwned, OldOwnerHasDied);
-
- /* This is invoked when the shell releases the component. */
- void unsetOwner ()
- raises (NotOwned);
-
- /* Notify the component of whether the shell is currently
- * running in interactive mode or not. (I.e. basically,
- * whether there are any Evolution windows on the screen.)
- * @new_view_xid is an X Window ID ("None" if
- * @now_interactive is FALSE) */
- void interactive (in boolean now_interactive,
- in unsigned long new_view_xid);
-
- /* Send debugging output to the file specified. */
- void debug (in string log_path);
-
- /* Create a view for the specified @physical URI. */
- Bonobo::Control createView (in string physical_uri,
- in string type,
- in string view_info)
- raises (NotFound, UnsupportedType, InternalError);
-
- /* Handle a registered external URI scheme (eg. mailto:). */
- void handleExternalURI (in string external_uri)
- raises (NotFound, UnsupportedSchema, InternalError);
-
- /* Folder operations: */
-
- /* 1. Create a folder. */
- void createFolderAsync (in ShellComponentListener listener,
- in string physical_uri,
- in string type)
- raises (Busy);
-
- /* 2. Remove a folder. */
- void removeFolderAsync (in ShellComponentListener listener,
- in string physical_uri,
- in string type)
- raises (Busy);
-
- /* 3. Copy/move a folder. */
- void xferFolderAsync (in ShellComponentListener listener,
- in string source_physical_uri,
- in string destination_physical_uri,
- in string type,
- in boolean remove_source)
- raises (Busy);
-
- /* Ask the component to populate the UIC with the
- folder-specific menu items of the folder at the specified
- @physical_uri. */
- void populateFolderContextMenu (in Bonobo::UIContainer uih,
- in string physical_uri,
- in string type)
- raises (AlreadyPopulated);
-
- /* After you are done, you have to remove the items. This is
- because of BonoboUI sucking and not allowing the shell to
- remove the items itself. */
- void unpopulateFolderContextMenu (in Bonobo::UIContainer uih,
- in string physical_uri,
- in string type)
- raises (NotPopulated);
-
- /* Make the component create a new item of the specify @id in
- the folder specified by @parent_folder_physical_uri. This
- is supposed to pop up a dialog (say, the Addressbook
- editor) when necessary. */
- void userCreateNewItem (in string id,
- in string parent_folder_physical_uri,
- in string parent_folder_type)
- raises (UnsupportedType);
-
- /* Make the component start a Send/Receive operation. If
- @show_dialog is true, display a progress dialog for the
- operation as well. */
- void sendReceive (in boolean show_dialog);
-
- /* Request the component to quit. The component should report
- through the listener (through OK or CANCEL) whether the
- shell can quit safely. (This is meant to be used for
- confirmations before quitting.) */
- oneway void requestQuit (in ShellComponentListener listener);
- };
-
- interface ShellComponentListener {
- enum Result {
- OK,
- CANCEL,
- UNSUPPORTED_OPERATION,
- UNSUPPORTED_TYPE,
- EXISTS,
- INVALID_URI,
- PERMISSION_DENIED,
- HAS_SUBFOLDERS,
- NO_SPACE
- };
-
- void notifyResult (in Result result);
- };
-};
-};
diff --git a/shell/Evolution-ShellComponentDnd.idl b/shell/Evolution-ShellComponentDnd.idl
deleted file mode 100644
index baf715f0f7..0000000000
--- a/shell/Evolution-ShellComponentDnd.idl
+++ /dev/null
@@ -1,98 +0,0 @@
-/* -*- Mode: IDL; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Interface for the Evolution components that want to support Drag and Drop
- * operations on their folders.
- *
- * Authors:
- * Ettore Perazzoli <ettore@ximian.com>
- *
- * Copyright (C) 2001 Ximian, Inc.
- */
-
-#include <Bonobo.idl>
-
-module GNOME {
-module Evolution {
-module ShellComponentDnd {
- typedef short Action;
- const Action ACTION_DEFAULT = 0;
- const Action ACTION_COPY = 1 << 1;
- const Action ACTION_MOVE = 1 << 2;
- const Action ACTION_LINK = 1 << 3;
- const Action ACTION_ASK = 1 << 4;
- const Action ACTION_ANY = ACTION_COPY | ACTION_MOVE | ACTION_LINK | ACTION_ASK;
-
- typedef Action ActionSet; // For readability.
-
- struct Data {
- short format;
- string target;
- sequence <octet> bytes;
- };
-
- exception NoData {};
-
- interface SourceFolder : Bonobo::Unknown {
- struct Context {
- string physicalUri;
- string folderType;
- ActionSet possibleActions;
- Action suggestedAction;
- };
-
- /* The user started a drag from this object. If the component
- receives this while still in the middle of an existing drag
- operation, it should stop the existing drag operation and
- start a new one. */
- void beginDrag (in string physical_uri,
- in string folder_type,
- out ActionSet possible_actions,
- out Action suggested_action);
-
- /* User released the mouse button and dropped the object
- somewhere, so we now want to get the data for the current
- context. */
- void getData (in Context source_context,
- in Action action,
- in string dnd_type,
- out Data data)
- raises (NoData);
-
- /* The target has finished processing the data, so we can
- delete it. */
- void deleteData (in Context source_context);
-
- /* The drag is over. This should also clean up the data if
- there was a `getData()' but no `deleteData()' after it. */
- void endDrag (in Context source_context);
- };
-
- interface DestinationFolder : Bonobo::Unknown {
- struct Context {
- string dndType;
- ActionSet possibleActions;
- Action suggestedAction;
- };
-
- /* The user is moving a dragged object over our folder. This
- will return %FALSE if the specified object cannot be
- dropped; otherwise, it will return %TRUE and then set the
- @default_action and @non_default_action we want to be
- performed when the drop happens. */
- boolean handleMotion (in string physical_uri,
- in string folder_type,
- in Context destination_context,
- out Action suggested_action);
-
- /* Data is dropped. We are given the data for the dropped
- object, and we are supposed to perform the operation
- requested. */
- boolean handleDrop (in string physical_uri,
- in string folder_type,
- in Context destination_context,
- in Action action,
- in Data data);
- };
-};
-};
-};
diff --git a/shell/Evolution-ShellView.idl b/shell/Evolution-ShellView.idl
deleted file mode 100644
index 026888913c..0000000000
--- a/shell/Evolution-ShellView.idl
+++ /dev/null
@@ -1,25 +0,0 @@
-/* -*- Mode: IDL; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Interface for the Evolution shell views.
- *
- * Authors:
- * Ettore Perazzoli <ettore@ximian.com>
- *
- * Copyright (C) 2000, 2001 Ximian, Inc.
- */
-
-#include <Bonobo.idl>
-
-module GNOME {
-module Evolution {
- interface ShellView : Bonobo::Unknown {
- void setMessage (in string message,
- in boolean busy);
- void unsetMessage ();
- void changeCurrentView (in string uri);
- void setTitle (in string title);
- void setFolderBarLabel (in string text);
- void showSettings ();
- };
-};
-};
diff --git a/shell/Evolution-Shortcuts.idl b/shell/Evolution-Shortcuts.idl
deleted file mode 100644
index cf98f47e36..0000000000
--- a/shell/Evolution-Shortcuts.idl
+++ /dev/null
@@ -1,55 +0,0 @@
-/* -*- Mode: IDL; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Interface for the Evolution shortcuts.
- *
- * Authors:
- * Ettore Perazzoli <ettore@ximian.com>
- *
- * Copyright (C) 2001 Ximian, Inc.
- */
-
-#include <Bonobo.idl>
-
-module GNOME {
-module Evolution {
-
- interface Shortcuts : Bonobo::Unknown {
-
- struct Shortcut {
- string uri;
- string name;
- string type;
- string customIconName;
- };
- typedef sequence <Shortcut> ShortcutList;
-
- struct Group {
- string name;
- ShortcutList shortcuts;
- };
- typedef sequence<Group> GroupList;
-
- exception NotFound {};
- exception InvalidPosition {};
- exception CannotRemove {};
-
- readonly attribute GroupList groups; // FIXME: Could be non-readonly
-
- void add (in short group_num, in short position, in Shortcut shortcut)
- raises (NotFound);
- void remove (in short group_num, in short item_num)
- raises (NotFound);
- Shortcut get (in short group_num, in short item_num)
- raises (NotFound);
-
- void addGroup (in short position, in string name)
- raises (InvalidPosition);
- void removeGroup (in short group_num)
- raises (NotFound, CannotRemove);
- Group getGroup (in short group_num)
- raises (NotFound);
-
- };
-
-};
-};
diff --git a/shell/Evolution-Storage.idl b/shell/Evolution-Storage.idl
deleted file mode 100644
index 2d6928938b..0000000000
--- a/shell/Evolution-Storage.idl
+++ /dev/null
@@ -1,178 +0,0 @@
-/* -*- Mode: IDL; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Storage interface for the Evolution shell.
- *
- * Authors:
- * Ettore Perazzoli <ettore@ximian.com>
- *
- * Copyright (C) 2000, 2001 Ximian, Inc.
- */
-
-#include <Bonobo.idl>
-
-module GNOME {
-module Evolution {
- interface Storage;
- interface StorageListener;
-
- interface Storage : Bonobo::Unknown {
- exception AlreadyListening {};
- exception NotFound {};
-
- enum Result {
- OK,
- UNSUPPORTED_OPERATION,
- UNSUPPORTED_TYPE,
- INVALID_URI,
- ALREADY_EXISTS,
- DOES_NOT_EXIST,
- PERMISSION_DENIED,
- NO_SPACE,
- NOT_EMPTY,
- NOT_ONLINE,
- GENERIC_ERROR
- };
-
- struct FolderResult {
- Result result;
- string path;
- };
-
- /* The name of the storage. */
- readonly attribute string name;
-
- /* Whether the storage has folders from other user's. */
- readonly attribute boolean hasSharedFolders;
-
- /* Get information for a folder. NOTE: evolutionUri in the
- returned Folder is going to be an empty string if you use
- this function. */
- Folder getFolderAtPath (in string path)
- raises (NotFound);
-
- /* Flat list of the folders in the storage. */
- readonly attribute FolderList folderList;
-
- /* The folder property items (for right-click menu etc.). */
-
- struct FolderPropertyItem {
- string label;
- string tooltip;
- Icon icon; // Currently unused
- };
- typedef sequence<FolderPropertyItem> FolderPropertyItemList;
-
- readonly attribute FolderPropertyItemList folderPropertyItems;
-
- /* Folder Operations. */
-
- void asyncCreateFolder (in string path,
- in string type,
- in string description,
- in string parent_physical_uri,
- in Bonobo::Listener listener);
-
- void asyncRemoveFolder (in string path,
- in string physical_uri,
- in Bonobo::Listener listener);
-
- void asyncXferFolder (in string source_path,
- in string destination_path,
- in boolean remove_source,
- in Bonobo::Listener listener);
-
- /* Open remote nodes. */
- void asyncOpenFolder (in string path,
- in Bonobo::Listener listener);
-
- /* Set unread count. */
- void updateFolder (in string path,
- in long unread_count);
-
- /* Shared folders. */
- void asyncDiscoverSharedFolder (in string user,
- in string folder_name,
- in Bonobo::Listener listener);
- void cancelDiscoverSharedFolder (in string user,
- in string folder_name);
- void asyncRemoveSharedFolder (in string path,
- in Bonobo::Listener listener);
-
- /* Listener handling. */
- void addListener (in StorageListener listener)
- raises (AlreadyListening);
- void removeListener (in StorageListener listener)
- raises (NotFound);
-
- /* (This should probably be in a separate interface, but
- creating a new interface in Bonobo is so painful that I'll
- just keep it here for now. */
- void showFolderProperties (in string path,
- in short itemNumber,
- in long parentWindowId);
- };
-
- interface StorageListener {
- exception Exists {};
- exception NotFound {};
-
- void notifyDestroyed ();
-
- /* FIXME exceptions don't make much sense here... */
-
- void notifyFolderCreated (in string path,
- in Folder folder)
- raises (Exists);
-
- void notifyFolderUpdated (in string path,
- in long unread_count)
- raises (NotFound);
-
- void notifyFolderRemoved (in string path)
- raises (NotFound);
-
- void notifyHasSubfolders (in string path,
- in string message)
- raises (NotFound);
- };
-
- interface StorageRegistry : Bonobo::Unknown {
- exception Exists {};
- exception NotFound {};
- exception AlreadyListening {};
-
- typedef sequence<Storage> StorageList;
-
- enum MessageType {
- STORAGE_CREATED,
- STORAGE_DESTROYED
- };
-
- struct NotifyResult {
- MessageType type;
- string name;
- };
-
- StorageListener addStorage (in Storage storage,
- in string name)
- raises (Exists);
-
- StorageList getStorageList ();
-
- Storage getStorageByName (in string name)
- raises (NotFound);
-
- void removeStorageByName (in string name)
- raises (NotFound);
-
- void addListener (in Bonobo::Listener listener)
- raises (AlreadyListening);
-
- void removeListener (in Bonobo::Listener listener)
- raises (NotFound);
-
- Folder getFolderByUri (in string uri)
- raises (NotFound);
- };
-};
-};
diff --git a/shell/Evolution-StorageSetView.idl b/shell/Evolution-StorageSetView.idl
deleted file mode 100644
index 9aca41f6ad..0000000000
--- a/shell/Evolution-StorageSetView.idl
+++ /dev/null
@@ -1,37 +0,0 @@
-/* -*- Mode: IDL; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Interface for the Evolution's StorageSetView control.
- *
- * Authors:
- * Ettore Perazzoli <ettore@ximian.com>
- *
- * Copyright (C) 2000, 2001, 2002 Ximian, Inc.
- */
-
-#include <Bonobo.idl>
-
-module GNOME {
-module Evolution {
- interface StorageSetViewListener {
- void notifyFolderSelected (in string uri);
- void notifyFolderToggled ();
- };
-
- /* FIXME: Maybe we should have a generic Bonobo::Listener interface. */
- interface StorageSetView : Bonobo::Unknown {
- exception AlreadyListening {};
- exception NotFound {};
-
- attribute boolean showFolders;
- attribute boolean showCheckboxes;
-
- attribute FolderList checkedFolders;
-
- void addListener (in StorageSetViewListener listener)
- raises (AlreadyListening);
-
- void removeListener (in StorageSetViewListener listener)
- raises (NotFound);
- };
-};
-};
diff --git a/shell/Evolution-Wizard.idl b/shell/Evolution-Wizard.idl
deleted file mode 100644
index 145774f70b..0000000000
--- a/shell/Evolution-Wizard.idl
+++ /dev/null
@@ -1,42 +0,0 @@
-/* -*- Mode: IDL; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Interface for a wizard done through Bonobo.
- *
- * Authors:
- * Iain Holmes <iain@ximian.com>
- *
- * Copyright (C) 2000, 2001 Ximian, Inc.
- */
-
-#include <Bonobo.idl>
-
-module GNOME {
-module Evolution {
-
- interface Wizard : Bonobo::Unknown {
-
- struct Page {
- string title;
- Icon icon;
- Bonobo::Control control;
- };
- typedef sequence<Page> PageList;
-
- readonly attribute PageList pages;
-
- enum Action {
- NEXT,
- PREPARE,
- BACK,
- FINISH,
- CANCEL,
- HELP
- };
-
- exception NoPage {};
-
- void notifyAction (in long pagenumber, in Action action)
- raises (NoPage);
- };
-};
-};
diff --git a/shell/Evolution-common.idl b/shell/Evolution-common.idl
deleted file mode 100644
index 5cc1cf1b5f..0000000000
--- a/shell/Evolution-common.idl
+++ /dev/null
@@ -1,36 +0,0 @@
-/* -*- Mode: IDL; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Common definitions for the CORBA interface for the Evolution shell.
- *
- * Authors:
- * Ettore Perazzoli <ettore@ximian.com>
- *
- * Copyright (C) 2000, 2001, 2002 Ximian, Inc.
- */
-
-module GNOME {
-module Evolution {
- struct Folder {
- string type;
- string description;
- string displayName;
- string physicalUri;
- string evolutionUri;
- string customIconName;
- long unreadCount;
- boolean canSyncOffline;
- short sortingPriority;
- };
- typedef sequence <Folder> FolderList;
-
- struct Icon {
- short width, height;
- boolean hasAlpha;
- sequence <octet> rgbaData; // Row-by-row, left-to-right, top-to-bottom RGBA bytes
- };
-
- typedef sequence <Icon> AnimatedIcon;
-
-};
-};
-
diff --git a/shell/Evolution.idl b/shell/Evolution.idl
deleted file mode 100644
index 6692bd028d..0000000000
--- a/shell/Evolution.idl
+++ /dev/null
@@ -1,26 +0,0 @@
-/* -*- Mode: IDL; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * CORBA interface for the Evolution shell.
- *
- * Authors:
- * Ettore Perazzoli <ettore@ximian.com>
- *
- * Copyright (C) 2000, 2001 Ximian, Inc.
- */
-
-#include <Bonobo.idl>
-
-#include <Evolution-common.idl>
-
-#include <Evolution-Activity.idl>
-#include <Evolution-ConfigControl.idl>
-#include <Evolution-Session.idl>
-#include <Evolution-ShellComponent.idl>
-#include <Evolution-ShellComponentDnd.idl>
-#include <Evolution-Offline.idl>
-#include <Evolution-ShellView.idl>
-#include <Evolution-Shortcuts.idl>
-#include <Evolution-Storage.idl>
-#include <Evolution-StorageSetView.idl>
-#include <Evolution-Shell.idl>
-#include <Evolution-Wizard.idl>
diff --git a/shell/GNOME_Evolution_Shell.server.in.in b/shell/GNOME_Evolution_Shell.server.in.in
deleted file mode 100644
index 960ae4ee07..0000000000
--- a/shell/GNOME_Evolution_Shell.server.in.in
+++ /dev/null
@@ -1,51 +0,0 @@
-<oaf_info>
-
- <oaf_server iid="OAFIID:GNOME_Evolution_Shell"
- type="exe"
- location="@BINDIR@/evolution-@VERSION@">
-
- <oaf_attribute name="repo_ids" type="stringv">
- <item value="IDL:GNOME/Evolution/Shell:1.0"/>
- </oaf_attribute>
-
- <oaf_attribute name="name" type="string"
- _value="Evolution Shell"/>
- </oaf_server>
-
- <oaf_server iid="OAFIID:GNOME_Evolution_Shell_Config_Factory"
- type="exe"
- location="evolution-exchange-storage">
-
- <oaf_attribute name="repo_ids" type="stringv">
- <item value="IDL:GNOME/GenericFactory:1.0"/>
- </oaf_attribute>
- </oaf_server>
-
- <oaf_server iid="OAFIID:GNOME_Evolution_Shell_Config_FolderSettings_Control"
- type="factory"
- location="OAFIID:GNOME_Evolution_Shell_Config_Factory">
-
- <oaf_attribute name="repo_ids" type="stringv">
- <item value="IDL:GNOME/Evolution/ConfigControl:1.0"/>
- </oaf_attribute>
-
- <oaf_attribute name="evolution:config_item:title" type="string"
- _value="Folder Settings"/>
-
- <oaf_attribute name="evolution:config_item:description" type="string"
- _value="Configure special folders and offline folder behavior here"/>
-
- <oaf_attribute name="evolution:config_item:icon_name" type="string"
- value="folder-settings.png"/>
-
- <oaf_attribute name="evolution:config_item:priority" type="string" value="-9"/>
-
- <oaf_attribute name="evolution:config_item:type" type="stringv">
- <item value="shell"/>
- </oaf_attribute>
-
- <oaf_attribute name="name" type="string"
- _value="Evolution folder settings configuration control"/>
- </oaf_server>
-
-</oaf_info>
diff --git a/shell/GNOME_Evolution_TestComponent.server b/shell/GNOME_Evolution_TestComponent.server
deleted file mode 100644
index 490489375c..0000000000
--- a/shell/GNOME_Evolution_TestComponent.server
+++ /dev/null
@@ -1,41 +0,0 @@
-<oaf_info>
-
-<oaf_server iid="OAFIID:GNOME_Evolution_TestComponent_ShellComponent"
- type="factory"
- location="GNOME:GNOME_Evolution_TestComponent_ShellComponentFactory">
-
- <oaf_attribute name="repo_ids" type="stringv">
- <item value="IDL:GNOME/Evolution/ShellComponent:1.0"/>
- </oaf_attribute>
-
- <oaf_attribute name="description" type="string"
- value="Evolution test component."/>
-
-</oaf_server>
-
-<oaf_server iid="OAFIID:GNOME_Evolution_TestComponent_ConfigurationControlFactory"
- type="exe"
- location="evolution-test-component">
-
- <oaf_attribute name="repo_ids" type="stringv">
- <item value="IDL:GNOME/ObjectFactory:1.0"/>
- </oaf_attribute>
-
- <oaf_attribute name="description" type="string"
- value="Factory for the configuration controls for the test component."/>
-
-</oaf_server>
-
-<oaf_server iid="OAFIID:GNOME_Evolution_TestComponent_ConfigurationControl"
- type="factory"
- location="OAFIID:GNOME_Evolution_TestComponent_ConfigurationControlFactory">
-
- <oaf_attribute name="evolution:config_item:title" type="string"
- value="Test Component configuration"/>
-
- <oaf_attribute name="evolution:config_item:description" type="string"
- value="This allows you to configure the Test Component"/>
-
-</oaf_server>
-
-</oaf_info>
diff --git a/shell/Makefile.am b/shell/Makefile.am
deleted file mode 100644
index 9ec1771914..0000000000
--- a/shell/Makefile.am
+++ /dev/null
@@ -1,383 +0,0 @@
-SUBDIRS = glade importer
-
-INCLUDES = \
- -DG_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED \
- -DBONOBO_DISABLE_DEPRECATED -DGNOME_DISABLE_DEPRECATED \
- -I$(top_srcdir)/widgets \
- -I$(top_srcdir)/widgets/misc \
- -I$(top_srcdir)/libical/src/libical \
- -I$(top_builddir)/libical/src/libical \
- -I$(top_srcdir) \
- -DEVOLUTION_IMAGES=\""$(imagesdir)"\" \
- -DEVOLUTION_LOCALEDIR=\""$(localedir)"\" \
- -DEVOLUTION_DATADIR=\""$(datadir)"\" \
- -DEVOLUTION_GLADEDIR=\""$(gladedir)"\" \
- -DEVOLUTION_ETSPECDIR=\""$(etspecdir)"\" \
- -DEVOLUTION_UIDIR=\""$(evolutionuidir)"\" \
- -DEVOLUTION_TOOLSDIR=\""$(privlibexecdir)"\" \
- -DPREFIX=\""$(prefix)"\" \
- -DSYSCONFDIR=\""$(sysconfdir)"\" \
- -DDATADIR=\""$(datadir)"\" \
- -DLIBDIR=\""$(datadir)"\" \
- -DG_LOG_DOMAIN=\"evolution-shell\" \
- $(SHELL_CFLAGS)
-
-noinst_PROGRAMS = evolution evolution-test-component
-
-# Shell CORBA stuff
-
-IDLS = \
- Evolution-Activity.idl \
- Evolution-ConfigControl.idl \
- Evolution-Offline.idl \
- Evolution-Session.idl \
- Evolution-Shell.idl \
- Evolution-ShellComponent.idl \
- Evolution-ShellComponentDnd.idl \
- Evolution-ShellView.idl \
- Evolution-Shortcuts.idl \
- Evolution-Storage.idl \
- Evolution-StorageSetView.idl \
- Evolution-Wizard.idl \
- Evolution-common.idl \
- Evolution.idl
-
-IDL_GENERATED_H = \
- Evolution.h
-
-IDL_GENERATED_C = \
- Evolution-common.c \
- Evolution-skels.c \
- Evolution-stubs.c
-
-IDL_GENERATED = $(IDL_GENERATED_H) $(IDL_GENERATED_C)
-
-$(IDL_GENERATED_H): $(IDLS)
- $(ORBIT_IDL) -I $(srcdir) $(IDL_INCLUDES) $(srcdir)/Evolution.idl
-
-$(IDL_GENERATED_C): $(IDL_GENERATED_H)
-
-
-# SelectNames CORBA stuff
-
-SELECT_NAMES_IDL = \
- $(top_srcdir)/addressbook/gui/component/select-names/Evolution-Addressbook-SelectNames.idl
-
-SELECT_NAMES_IDL_GENERATED_H = \
- Evolution-Addressbook-SelectNames.h
-
-SELECT_NAMES_IDL_GENERATED_C = \
- Evolution-Addressbook-SelectNames-common.c \
- Evolution-Addressbook-SelectNames-skels.c \
- Evolution-Addressbook-SelectNames-stubs.c
-
-SELECT_NAMES_IDL_GENERATED = $(SELECT_NAMES_IDL_GENERATED_C) $(SELECT_NAMES_IDL_GENERATED_H)
-
-$(SELECT_NAMES_IDL_GENERATED_H): $(SELECT_NAMES_IDL)
- $(ORBIT_IDL) -I $(srcdir) $(IDL_INCLUDES) $(SELECT_NAMES_IDL)
-
-$(SELECT_NAMES_IDL_GENERATED_C): $(SELECT_NAMES_IDL_GENERATED_H)
-
-
-# Wombat CORBA stuff
-
-WOMBAT_IDL = \
- $(top_srcdir)/wombat/Evolution-Wombat.idl
-
-WOMBAT_IDL_GENERATED_H = \
- Evolution-Wombat.h
-
-WOMBAT_IDL_GENERATED_C = \
- Evolution-Wombat-common.c \
- Evolution-Wombat-skels.c \
- Evolution-Wombat-stubs.c
-
-WOMBAT_IDL_GENERATED = $(WOMBAT_IDL_GENERATED_C) $(WOMBAT_IDL_GENERATED_H)
-
-$(WOMBAT_IDL_GENERATED_H): $(WOMBAT_IDL)
- $(ORBIT_IDL) -I $(srcdir) $(IDL_INCLUDES) $(WOMBAT_IDL)
-
-$(WOMBAT_IDL_GENERATED_C): $(WOMBAT_IDL_GENERATED_H)
-
-
-# IDL install
-
-idl_DATA = $(IDLS)
-
-# Shell library
-
-privlib_LTLIBRARIES = \
- libeshell.la
-
-eshellincludedir = $(privincludedir)/shell
-
-eshellinclude_HEADERS = \
- Evolution.h \
- e-folder.h \
- e-folder-list.h \
- e-folder-tree.h \
- e-shell-corba-icon-utils.h \
- evolution-activity-client.h \
- evolution-config-control.h \
- evolution-folder-selector-button.h \
- evolution-session.h \
- evolution-shell-client.h \
- evolution-shell-component-client.h \
- evolution-shell-component.h \
- evolution-shell-component-dnd.h \
- evolution-shell-component-utils.h \
- evolution-shell-view.h \
- evolution-storage-listener.h \
- evolution-storage-set-view-listener.h \
- evolution-storage.h \
- evolution-wizard.h
-
-libeshell_la_SOURCES = \
- $(IDL_GENERATED) \
- e-folder.c \
- e-folder-list.c \
- e-folder-tree.c \
- e-shell-corba-icon-utils.c \
- evolution-activity-client.c \
- evolution-config-control.c \
- evolution-folder-selector-button.c \
- evolution-session.c \
- evolution-shell-client.c \
- evolution-shell-component-client.c \
- evolution-shell-component.c \
- evolution-shell-component-dnd.c \
- evolution-shell-component-utils.c \
- evolution-shell-view.c \
- evolution-storage-listener.c \
- evolution-storage-set-view-listener.c \
- evolution-storage.c \
- evolution-wizard.c \
- e-shell-marshal.c \
- $(eshellinclude_HEADERS)
-
-libeshell_la_LIBADD = \
- $(top_builddir)/e-util/libeutil.la
-
-# Evolution executable
-
-evolution_SOURCES = \
- $(SELECT_NAMES_IDL_GENERATED) \
- $(WOMBAT_IDL_GENERATED) \
- e-activity-handler.c \
- e-activity-handler.h \
- e-component-info.c \
- e-component-info.h \
- e-component-registry.c \
- e-component-registry.h \
- e-config-upgrade.c \
- e-config-upgrade.h \
- e-corba-config-page.c \
- e-corba-config-page.h \
- e-corba-shortcuts.c \
- e-corba-shortcuts.h \
- e-corba-storage-registry.c \
- e-corba-storage-registry.h \
- e-corba-storage.c \
- e-corba-storage.h \
- e-folder-dnd-bridge.c \
- e-folder-dnd-bridge.h \
- e-folder-type-registry.c \
- e-folder-type-registry.h \
- e-history.c \
- e-history.h \
- e-icon-factory.c \
- e-icon-factory.h \
- e-local-folder.c \
- e-local-folder.h \
- e-local-storage.c \
- e-local-storage.h \
- e-setup.c \
- e-setup.h \
- e-shell-about-box.c \
- e-shell-about-box.h \
- e-shell-config.c \
- e-shell-config.h \
- e-shell-config-autocompletion.c \
- e-shell-config-autocompletion.h \
- e-shell-config-offline.c \
- e-shell-config-offline.h \
- e-shell-config-default-folders.c \
- e-shell-config-default-folders.h \
- e-shell-config-folder-settings.c \
- e-shell-config-folder-settings.h \
- e-shell-constants.h \
- e-shell-folder-commands.c \
- e-shell-folder-commands.h \
- e-shell-folder-creation-dialog.c \
- e-shell-folder-creation-dialog.h \
- e-shell-folder-selection-dialog.c \
- e-shell-folder-selection-dialog.h \
- e-shell-folder-title-bar.c \
- e-shell-folder-title-bar.h \
- e-shell-importer.c \
- e-shell-importer.h \
- e-shell-offline-handler.c \
- e-shell-offline-handler.h \
- e-shell-offline-sync.c \
- e-shell-offline-sync.h \
- e-shell-settings-dialog.c \
- e-shell-settings-dialog.h \
- e-shell-shared-folder-picker-dialog.c \
- e-shell-shared-folder-picker-dialog.h \
- e-shell-startup-wizard.c \
- e-shell-startup-wizard.h \
- e-shell-user-creatable-items-handler.c \
- e-shell-user-creatable-items-handler.h \
- e-shell-utils.c \
- e-shell-utils.h \
- e-shell-view-menu.c \
- e-shell-view-menu.h \
- e-shell-view.c \
- e-shell-view.h \
- e-shell.c \
- e-shell.h \
- e-shortcuts-view-model.c \
- e-shortcuts-view-model.h \
- e-shortcuts-view.c \
- e-shortcuts-view.h \
- e-shortcuts.c \
- e-shortcuts.h \
- e-splash.c \
- e-splash.h \
- e-storage-set-view.c \
- e-storage-set-view.h \
- e-storage-set.c \
- e-storage-set.h \
- e-storage.c \
- e-storage.h \
- e-task-bar.c \
- e-task-bar.h \
- e-task-widget.c \
- e-task-widget.h \
- e-uri-schema-registry.c \
- e-uri-schema-registry.h \
- evolution-storage-set-view.c \
- evolution-storage-set-view.h \
- evolution-storage-set-view-factory.c \
- evolution-storage-set-view-factory.h \
- main.c
-
-evolution_LDADD = \
- libeshell.la \
- importer/libevolution-importer.la \
- $(top_builddir)/widgets/e-timezone-dialog/libetimezonedialog.la \
- $(top_builddir)/widgets/misc/libemiscwidgets.la \
- $(top_builddir)/e-util/libeutil.la \
- $(top_builddir)/libical/src/libical/libical-evolution.la \
- $(SHELL_LIBS)
-
-# Test component
-
-evolution_test_component_SOURCES = \
- evolution-test-component.c
-
-evolution_test_component_LDADD = \
- libeshell.la \
- $(SHELL_LIBS)
-
-install-test-component: evolution-test-component
- $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) evolution-test-component $(DESTDIR)$(bindir)/evolution-test-component
- $(mkinstalldirs) $(DESTDIR)$(serverdir)
- $(INSTALL_DATA) $(srcdir)/GNOME_Evolution_TestComponent.server $(DESTDIR)$(serverdir)/GNOME_Evolution_TestComponent.server
-
-# Misc stuff
-
-server_in_files = GNOME_Evolution_Shell.server.in.in
-server_DATA = $(server_in_files:.server.in.in=.server)
-$(server_in_files:.server.in.in=.server.in): $(server_in_files)
- sed -e "s|\@BINDIR\@|$(bindir)|" \
- -e "s|\@VERSION\@|$(BASE_VERSION)|" \
- $< > $@
-
-etspec_DATA = e-storage-set-view.etspec
-
-@INTLTOOL_SERVER_RULE@
-
-icons = \
- check-empty.xpm \
- check-filled.xpm \
- check-missing.xpm
-
-# GConf schemas
-
-schemadir = $(GCONF_SCHEMA_FILE_DIR)
-schema_DATA = apps_evolution_shell.schemas
-
-install-data-local:
- if test -z "$(DESTDIR)" ; then \
- for p in $(schema_DATA) ; do \
- GCONF_CONFIG_SOURCE=$(GCONF_SCHEMA_CONFIG_SOURCE) $(GCONFTOOL) --makefile-install-rule $(srcdir)/$$p; \
- done \
- fi
-
-install-evolution:
- $(mkinstalldirs) $(DESTDIR)$(bindir)
- $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) evolution $(DESTDIR)$(bindir)/evolution-$(BASE_VERSION)
-
-if HAVE_DTAPPINTEGRATE
-
-install-exec-local: install-evolution
- $(mkinstalldirs) $(DESTDIR)$(libexecdir)
- mv $(DESTDIR)$(bindir)/evolution-$(BASE_VERSION) $(DESTDIR)$(libexecdir)/evolution-$(BASE_VERSION)
- $(INSTALL_PROGRAM) evolution-nognome $(DESTDIR)$(bindir)/evolution-$(BASE_VERSION)
-
-else
-
-install-exec-local: install-evolution
-
-endif
-
-# GLib marshalling cruft
-
-e-shell-marshal.h: e-shell-marshal.list
- ( @GLIB_GENMARSHAL@ --prefix=e_shell_marshal e-shell-marshal.list --header > e-shell-marshal.h.tmp \
- && mv e-shell-marshal.h.tmp e-shell-marshal.h ) \
- || ( rm -f e-shell-marshal.h.tmp && exit 1 )
-
-e-shell-marshal.c: e-shell-marshal.h
- ( @GLIB_GENMARSHAL@ --prefix=e_shell_marshal e-shell-marshal.list --body > e-shell-marshal.c.tmp \
- && mv e-shell-marshal.c.tmp e-shell-marshal.c ) \
- || ( rm -f e-shell-marshal.c.tmp && exit 1 )
-
-MARSHAL_GENERATED = e-shell-marshal.c e-shell-marshal.h
-
-# Extra dist stuff
-
-EXTRA_DIST = \
- $(IDLS) \
- $(server_in_files) \
- $(server_DATA) \
- $(etspec_DATA) \
- $(schema_DATA) \
- $(icons) \
- GNOME_Evolution_TestComponent.server \
- e-shell-marshal.list \
- evolution-nognome.in
-
-# Purify support
-
-if ENABLE_PURIFY
-
-PLINK = $(LIBTOOL) --mode=link $(PURIFY) $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@
-
-all-local: evolution.pure
-
-evolution.pure: evolution
- @rm -f evolution.pure
- $(PLINK) $(evolution_LDFLAGS) $(evolution_OBJECTS) $(evolution_LDADD) $(LIBS)
-
-endif
-
-BUILT_SOURCES = $(IDL_GENERATED) $(SELECT_NAMES_IDL_GENERATED) $(MARSHAL_GENERATED)
-CLEANFILES = $(BUILT_SOURCES)
-
-dist-hook:
- cd $(distdir); rm -f $(BUILT_SOURCES)
-
-noinst_SCRIPTS = evolution-nognome
-
diff --git a/shell/README b/shell/README
deleted file mode 100644
index fc0871eb5d..0000000000
--- a/shell/README
+++ /dev/null
@@ -1,14 +0,0 @@
-Two things are built in this directory: the shell's executable, named
-`evolution', and the shell utility library, `libeshell'.
-
-The `e-*' files belong to the shell, and their API is not exported at
-all.
-
-The `evolution-*' files, instead, are Bonobo-style wrappers for the
-shell's Evolution:: CORBA interfaces. They are all compiled into
-`libeshell'; the shell itself links against `libeshell'.
-
-The `evolution-*-client' files are utility GTK+-style wrappers for the
-CORBA methods; the modules whose name does not end with `-client',
-instead, are Bonobo-like GTK+ objects wrapping the implementation of
-the CORBA server.
diff --git a/shell/apps_evolution_shell.schemas b/shell/apps_evolution_shell.schemas
deleted file mode 100644
index d8ad7802d7..0000000000
--- a/shell/apps_evolution_shell.schemas
+++ /dev/null
@@ -1,253 +0,0 @@
-<gconfschemafile>
- <schemalist>
-
- <!-- Evolution config version -->
-
- <schema>
- <key>/schemas/apps/evolution/version</key>
- <applyto>/apps/evolution/version</applyto>
- <owner>evolution</owner>
- <type>string</type>
- <locale name="C">
- <short>Evolution configuration version</short>
- </locale>
- </schema>
-
- <!-- Default mail folder -->
-
- <schema>
- <key>/schemas/apps/evolution/shell/default_folders/mail_path</key>
- <applyto>/apps/evolution/shell/default_folders/mail_path</applyto>
- <owner>evolution</owner>
- <type>string</type>
- <default>evolution:/local/Inbox</default>
- <locale name="C">
- <short>Path to the default mail folder</short>
- </locale>
- </schema>
-
- <schema>
- <key>/schemas/apps/evolution/shell/default_folders/mail_uri</key>
- <applyto>/apps/evolution/shell/default_folders/mail_uri</applyto>
- <owner>evolution</owner>
- <type>string</type>
- <default></default>
- <locale name="C">
- <short>Physical URI to the default mail folder</short>
- </locale>
- </schema>
-
- <!-- Default contacts folder -->
-
- <schema>
- <key>/schemas/apps/evolution/shell/default_folders/contacts_path</key>
- <applyto>/apps/evolution/shell/default_folders/contacts_path</applyto>
- <owner>evolution</owner>
- <type>string</type>
- <default>evolution:/local/Contacts</default>
- <locale name="C">
- <short>Path to the default contacts folder</short>
- </locale>
- </schema>
-
- <schema>
- <key>/schemas/apps/evolution/shell/default_folders/contacts_uri</key>
- <applyto>/apps/evolution/shell/default_folders/contacts_uri</applyto>
- <owner>evolution</owner>
- <type>string</type>
- <default></default>
- <locale name="C">
- <short>Physical URI to the default contacts folder</short>
- </locale>
- </schema>
-
- <!-- Default calendar folder -->
-
- <schema>
- <key>/schemas/apps/evolution/shell/default_folders/calendar_path</key>
- <applyto>/apps/evolution/shell/default_folders/calendar_path</applyto>
- <owner>evolution</owner>
- <type>string</type>
- <default>evolution:/local/Calendar</default>
- <locale name="C">
- <short>Path to the default calendar folder</short>
- </locale>
- </schema>
-
- <schema>
- <key>/schemas/apps/evolution/shell/default_folders/calendar_uri</key>
- <applyto>/apps/evolution/shell/default_folders/calendar_uri</applyto>
- <owner>evolution</owner>
- <type>string</type>
- <default></default>
- <locale name="C">
- <short>Physical URI to the default calendar folder</short>
- </locale>
- </schema>
-
- <!-- Default tasks folder -->
-
- <schema>
- <key>/schemas/apps/evolution/shell/default_folders/tasks_path</key>
- <applyto>/apps/evolution/shell/default_folders/tasks_path</applyto>
- <owner>evolution</owner>
- <type>string</type>
- <default>evolution:/local/Tasks</default>
- <locale name="C">
- <short>Path to the default tasks folder</short>
- </locale>
- </schema>
-
- <schema>
- <key>/schemas/apps/evolution/shell/default_folders/tasks_uri</key>
- <applyto>/apps/evolution/shell/default_folders/tasks_uri</applyto>
- <owner>evolution</owner>
- <type>string</type>
- <default></default>
- <locale name="C">
- <short>Physical URI to the default tasks folder</short>
- </locale>
- </schema>
-
- <!-- Development warning dialog -->
-
- <schema>
- <key>/schemas/apps/evolution/shell/skip_warning_dialog</key>
- <applyto>/apps/evolution/shell/skip_warning_dialog</applyto>
- <owner>evolution</owner>
- <type>bool</type>
- <default>false</default>
- <locale name="C">
- <short>Whether to skip the development warning dialog</short>
- <long>
- If set to true, the warning dialog in development versions
- of Evolution is not displayed.
- </long>
- </locale>
- </schema>
-
- <!-- Offline Mode -->
-
- <schema>
- <key>/schemas/apps/evolution/shell/start_offline</key>
- <applyto>/apps/evolution/shell/start_offline</applyto>
- <owner>evolution</owner>
- <type>bool</type>
- <default>false</default>
- <locale name="C">
- <short>Whether Evolution should start up in offline mode</short>
- <long>
- If set to true, Evolution will start up in offline mode
- instead of online mode.
- </long>
- </locale>
- </schema>
-
- <schema>
- <key>/schemas/apps/evolution/shell/offline/folder_paths</key>
- <applyto>/apps/evolution/shell/offline/folder_paths</applyto>
- <owner>evolution</owner>
- <type>list</type>
- <list_type>string</list_type>
- <default>[]</default>
- <locale name="C">
- <short>List of paths for the folders to be synchronized to disk for offline usage</short>
- </locale>
- </schema>
-
- <!-- View defaults -->
-
- <schema>
- <key>/schemas/apps/evolution/shell/view_defaults/width</key>
- <applyto>/apps/evolution/shell/view_defaults/width</applyto>
- <owner>evolution</owner>
- <type>int</type>
- <default>640</default>
- <locale name="C">
- <short>Default window width</short>
- </locale>
- </schema>
-
- <schema>
- <key>/schemas/apps/evolution/shell/view_defaults/height</key>
- <applyto>/apps/evolution/shell/view_defaults/height</applyto>
- <owner>evolution</owner>
- <type>int</type>
- <locale name="C">
- <default>480</default>
- <short>Default window height</short>
- </locale>
- </schema>
-
- <schema>
- <key>/schemas/apps/evolution/shell/view_defaults/selected_shortcut_group</key>
- <applyto>/apps/evolution/shell/view_defaults/selected_shortcut_group</applyto>
- <owner>evolution</owner>
- <type>int</type>
- <default>0</default>
- <locale name="C">
- <short>Default shortcut group</short>
- </locale>
- </schema>
-
- <schema>
- <key>/schemas/apps/evolution/shell/view_defaults/show_folder_bar</key>
- <applyto>/apps/evolution/shell/view_defaults/show_folder_bar</applyto>
- <owner>evolution</owner>
- <type>bool</type>
- <default>false</default>
- <locale name="C">
- <short>Whether to show the folder bar</short>
- </locale>
- </schema>
-
- <schema>
- <key>/schemas/apps/evolution/shell/view_defaults/show_shortcut_bar</key>
- <applyto>/apps/evolution/shell/view_defaults/show_shortcut_bar</applyto>
- <owner>evolution</owner>
- <type>bool</type>
- <default>true</default>
- <locale name="C">
- <short>Whether to show the shortcut bar</short>
- </locale>
- </schema>
-
- <schema>
- <key>/schemas/apps/evolution/shell/view_defaults/folder_path</key>
- <applyto>/apps/evolution/shell/view_defaults/folder_path</applyto>
- <owner>evolution</owner>
- <type>string</type>
- <locale name="C">
- <default>/Summary</default>
- <short>Path to the folder to be displayed by default</short>
- </locale>
- </schema>
-
- <!-- Folder bar -->
-
- <schema>
- <key>/schemas/apps/evolution/shell/view_defaults/folder_bar/width</key>
- <applyto>/apps/evolution/shell/view_defaults/folder_bar/width</applyto>
- <owner>evolution</owner>
- <type>int</type>
- <default>200</default>
- <locale name="C">
- <short>Default width of the folder bar pane</short>
- </locale>
- </schema>
-
- <!-- Shortcut bar -->
-
- <schema>
- <key>/schemas/apps/evolution/shell/view_defaults/shortcut_bar/width</key>
- <applyto>/apps/evolution/shell/view_defaults/shortcut_bar/width</applyto>
- <owner>evolution</owner>
- <type>int</type>
- <default>100</default>
- <locale name="C">
- <short>Default width of the shortcut bar pane</short>
- </locale>
- </schema>
-
- </schemalist>
-</gconfschemafile>
diff --git a/shell/check-empty.xpm b/shell/check-empty.xpm
deleted file mode 100644
index 746b20234e..0000000000
--- a/shell/check-empty.xpm
+++ /dev/null
@@ -1,21 +0,0 @@
-/* XPM */
-static const char * check_empty_xpm[] = {
-"16 16 2 1",
-" c None",
-". c #000000",
-" ",
-" ",
-" ............ ",
-" . . ",
-" . . ",
-" . . ",
-" . . ",
-" . . ",
-" . . ",
-" . . ",
-" . . ",
-" . . ",
-" . . ",
-" ............ ",
-" ",
-" "};
diff --git a/shell/check-filled.xpm b/shell/check-filled.xpm
deleted file mode 100644
index c0468fc25b..0000000000
--- a/shell/check-filled.xpm
+++ /dev/null
@@ -1,21 +0,0 @@
-/* XPM */
-static const char * check_filled_xpm[] = {
-"16 16 2 1",
-" c None",
-". c #000000",
-" ",
-" ",
-" ............ ",
-" . . ",
-" . . . ",
-" . .. . ",
-" . ... . ",
-" . . ... . ",
-" . .. ... . ",
-" . ..... . ",
-" . ... . ",
-" . . . ",
-" . . ",
-" ............ ",
-" ",
-" "};
diff --git a/shell/check-missing.xpm b/shell/check-missing.xpm
deleted file mode 100644
index 72bdb7a782..0000000000
--- a/shell/check-missing.xpm
+++ /dev/null
@@ -1,20 +0,0 @@
-/* XPM */
-static const char * check_missing_xpm[] = {
-"16 16 1 1",
-" c None",
-" ",
-" ",
-" ",
-" ",
-" ",
-" ",
-" ",
-" ",
-" ",
-" ",
-" ",
-" ",
-" ",
-" ",
-" ",
-" "};
diff --git a/shell/e-activity-handler.c b/shell/e-activity-handler.c
deleted file mode 100644
index 023ff59cd5..0000000000
--- a/shell/e-activity-handler.c
+++ /dev/null
@@ -1,588 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-activity-handler.c
- *
- * Copyright (C) 2001 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli <ettore@ximian.com>
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "e-activity-handler.h"
-
-#include "e-shell-corba-icon-utils.h"
-
-#include <gtk/gtksignal.h>
-#include <gdk-pixbuf/gdk-pixbuf.h>
-
-#include <libgnome/gnome-i18n.h>
-#include <libgnomeui/gnome-popup-menu.h>
-
-#include <gal/util/e-util.h>
-#include <gal/widgets/e-popup-menu.h>
-
-#include <bonobo/bonobo-exception.h>
-
-
-#define PARENT_TYPE bonobo_object_get_type ()
-static BonoboObjectClass *parent_class = NULL;
-
-
-#define ICON_SIZE 16
-
-
-struct _ActivityInfo {
- char *component_id;
- GdkPixbuf *icon_pixbuf;
- GNOME_Evolution_Activity_ActivityId id;
- CORBA_char *information;
- CORBA_boolean cancellable;
- Bonobo_Listener event_listener;
- CORBA_float progress;
- GtkWidget *menu;
-};
-typedef struct _ActivityInfo ActivityInfo;
-
-struct _EActivityHandlerPrivate {
- GNOME_Evolution_Activity_ActivityId next_activity_id;
- GList *activity_infos;
- GSList *task_bars;
-};
-
-
-/* Utility functions. */
-
-static unsigned int
-get_new_activity_id (EActivityHandler *activity_handler)
-{
- EActivityHandlerPrivate *priv;
-
- priv = activity_handler->priv;
-
- return priv->next_activity_id ++;
-}
-
-static GList *
-lookup_activity (GList *list,
- GNOME_Evolution_Activity_ActivityId activity_id,
- int *order_number_return)
-{
- GList *p;
- int i;
-
- for (p = list, i = 0; p != NULL; p = p->next, i ++) {
- ActivityInfo *activity_info;
-
- activity_info = (ActivityInfo *) p->data;
- if (activity_info->id == activity_id) {
- *order_number_return = i;
- return p;
- }
- }
-
- *order_number_return = -1;
- return NULL;
-}
-
-#if 0
-static const CORBA_any *
-get_corba_null_value (void)
-{
- static CORBA_any *null_value = NULL;
-
- if (null_value == NULL) {
- null_value = CORBA_any__alloc ();
- null_value->_type = TC_null;
- }
-
- return null_value;
-}
-
-static void
-report_task_event (ActivityInfo *activity_info,
- const char *event_name)
-{
- CORBA_Environment ev;
-
- CORBA_exception_init (&ev);
-
- Bonobo_Listener_event (activity_info->event_listener, event_name, get_corba_null_value (), &ev);
- if (ev._major != CORBA_NO_EXCEPTION)
- g_warning ("EActivityHandler: Cannot event `%s' -- %s", event_name, ev._repo_id);
-
- CORBA_exception_free (&ev);
-}
-#endif
-
-
-/* ETaskWidget actions. */
-
-#if 0
-static void
-task_widget_cancel_callback (GtkWidget *widget,
- void *data)
-{
- ActivityInfo *activity_info;
-
- activity_info = (ActivityInfo *) data;
- report_task_event (activity_info, "Cancel");
-}
-
-static void
-task_widget_show_details_callback (GtkWidget *widget,
- void *data)
-{
- ActivityInfo *activity_info;
-
- activity_info = (ActivityInfo *) data;
- report_task_event (activity_info, "ShowDetails");
-}
-
-static void
-show_cancellation_popup (ActivityInfo *activity_info,
- GtkWidget *task_widget,
- GdkEventButton *button_event)
-{
- GtkMenu *popup;
- EPopupMenu items[] = {
- E_POPUP_MENU (N_("Show Details"), task_widget_show_details_callback, 0),
- E_POPUP_SEPARATOR,
- E_POPUP_MENU (N_("Cancel Operation"), task_widget_cancel_callback, 0),
- E_POPUP_TERMINATOR
- };
-
- /* FIXME: We should gray out things properly here. */
- popup = e_popup_menu_create (items, 0, 0, activity_info);
-
- g_assert (activity_info->menu == NULL);
- activity_info->menu = GTK_WIDGET (popup);
-
- gnome_popup_menu_do_popup_modal (GTK_WIDGET (popup), NULL, NULL, button_event, activity_info);
-
- activity_info->menu = NULL;
-}
-#endif
-
-static int
-task_widget_button_press_event_callback (GtkWidget *widget,
- GdkEventButton *button_event,
- void *data)
-{
- CORBA_Environment ev;
- ActivityInfo *activity_info;
- CORBA_any *null_value;
-
- activity_info = (ActivityInfo *) data;
-
- if (button_event->button == 3) {
- if (! activity_info->cancellable) {
- return FALSE;
- } else {
- /* show_cancellation_popup (activity_info, widget, button_event); */
- /* return TRUE; */
- return TRUE;
- }
- }
-
- if (button_event->button != 1)
- return FALSE;
-
- CORBA_exception_init (&ev);
-
- null_value = CORBA_any__alloc ();
- null_value->_type = TC_null;
-
- Bonobo_Listener_event (activity_info->event_listener, "Clicked", null_value, &ev);
- if (BONOBO_EX (&ev) != CORBA_NO_EXCEPTION)
- g_warning ("EActivityHandler: Cannot report `Clicked' event -- %s",
- BONOBO_EX_REPOID (&ev));
-
- CORBA_free (null_value);
-
- CORBA_exception_free (&ev);
-
- return TRUE;
-}
-
-
-/* Creating and destroying ActivityInfos. */
-
-static ActivityInfo *
-activity_info_new (const char *component_id,
- GNOME_Evolution_Activity_ActivityId id,
- GdkPixbuf *icon,
- const CORBA_char *information,
- CORBA_boolean cancellable,
- const Bonobo_Listener event_listener)
-{
- ActivityInfo *info;
- CORBA_Environment ev;
-
- CORBA_exception_init (&ev);
-
- info = g_new (ActivityInfo, 1);
- info->component_id = g_strdup (component_id);
- info->id = id;
- info->icon_pixbuf = g_object_ref (icon);
- info->information = CORBA_string_dup (information);
- info->cancellable = cancellable;
- info->event_listener = CORBA_Object_duplicate (event_listener, &ev);
- info->progress = -1.0; /* (Unknown) */
- info->menu = NULL;
-
- CORBA_exception_free (&ev);
-
- return info;
-}
-
-static void
-activity_info_free (ActivityInfo *info)
-{
- CORBA_Environment ev;
-
- CORBA_exception_init (&ev);
-
- g_free (info->component_id);
-
- g_object_unref (info->icon_pixbuf);
- CORBA_free (info->information);
- CORBA_Object_release (info->event_listener, &ev);
-
- if (info->menu != NULL)
- gtk_widget_destroy (info->menu);
-
- g_free (info);
-
- CORBA_exception_free (&ev);
-}
-
-static ETaskWidget *
-task_widget_new_from_activity_info (ActivityInfo *activity_info)
-{
- GtkWidget *widget;
-
- widget = e_task_widget_new (activity_info->icon_pixbuf,
- activity_info->component_id,
- activity_info->information);
- gtk_widget_show (widget);
-
- g_signal_connect (widget, "button_press_event",
- G_CALLBACK (task_widget_button_press_event_callback),
- activity_info);
-
- return E_TASK_WIDGET (widget);
-}
-
-
-/* Task Bar handling. */
-
-static void
-setup_task_bar (EActivityHandler *activity_handler,
- ETaskBar *task_bar)
-{
- EActivityHandlerPrivate *priv;
- GList *p;
-
- priv = activity_handler->priv;
-
- for (p = g_list_last (priv->activity_infos); p != NULL; p = p->prev) {
- e_task_bar_prepend_task (task_bar,
- task_widget_new_from_activity_info ((ActivityInfo *) p->data));
- }
-}
-
-static void
-task_bar_destroy_notify (void *data,
- GObject *task_bar_instance)
-{
- EActivityHandler *activity_handler;
- EActivityHandlerPrivate *priv;
-
- activity_handler = E_ACTIVITY_HANDLER (data);
- priv = activity_handler->priv;
-
- priv->task_bars = g_slist_remove (priv->task_bars, task_bar_instance);
-}
-
-
-/* GObject methods. */
-
-static void
-impl_dispose (GObject *object)
-{
- EActivityHandler *handler;
- EActivityHandlerPrivate *priv;
- GList *p;
- GSList *sp;
-
- handler = E_ACTIVITY_HANDLER (object);
- priv = handler->priv;
-
- for (p = priv->activity_infos; p != NULL; p = p->next) {
- ActivityInfo *info;
-
- info = (ActivityInfo *) p->data;
- activity_info_free (info);
- }
-
- g_list_free (priv->activity_infos);
- priv->activity_infos = NULL;
-
- for (sp = priv->task_bars; sp != NULL; sp = sp->next)
- g_object_weak_unref (G_OBJECT (sp->data), task_bar_destroy_notify, sp->data);
- priv->task_bars = NULL;
-
- (* G_OBJECT_CLASS (parent_class)->dispose) (object);
-}
-
-static void
-impl_finalize (GObject *object)
-{
- EActivityHandler *handler;
- EActivityHandlerPrivate *priv;
-
- handler = E_ACTIVITY_HANDLER (object);
- priv = handler->priv;
-
- g_free (priv);
-
- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
-}
-
-
-/* CORBA methods. */
-
-static void
-impl_operationStarted (PortableServer_Servant servant,
- const CORBA_char *component_id,
- const GNOME_Evolution_AnimatedIcon *icon,
- const CORBA_char *information,
- const CORBA_boolean cancellable,
- const Bonobo_Listener event_listener,
- GNOME_Evolution_Activity_ActivityId *activity_id_return,
- CORBA_boolean *suggest_display_return,
- CORBA_Environment *ev)
-{
- EActivityHandler *activity_handler;
- EActivityHandlerPrivate *priv;
- ActivityInfo *activity_info;
- GdkPixbuf *icon_pixbuf;
- unsigned int activity_id;
- GSList *p;
-
- activity_handler = E_ACTIVITY_HANDLER (bonobo_object_from_servant (servant));
-
- priv = activity_handler->priv;
-
- if (icon->_length == 0) {
- CORBA_exception_set (ev, CORBA_USER_EXCEPTION,
- ex_GNOME_Evolution_Activity_InvalidIcon, NULL);
- return;
- }
-
- if (icon->_length > 1)
- g_warning ("Animated icons are not supported for activities (yet).");
-
- icon_pixbuf = e_new_gdk_pixbuf_from_corba_icon (icon->_buffer, ICON_SIZE, ICON_SIZE);
-
- activity_id = get_new_activity_id (activity_handler);
-
- activity_info = activity_info_new (component_id, activity_id, icon_pixbuf, information,
- cancellable, event_listener);
-
- for (p = priv->task_bars; p != NULL; p = p->next)
- e_task_bar_prepend_task (E_TASK_BAR (p->data),
- task_widget_new_from_activity_info (activity_info));
-
- g_object_unref (icon_pixbuf);
-
- priv->activity_infos = g_list_prepend (priv->activity_infos, activity_info);
-
- *activity_id_return = activity_id;
-}
-
-static void
-impl_operationProgressing (PortableServer_Servant servant,
- const GNOME_Evolution_Activity_ActivityId activity_id,
- const CORBA_char *information,
- const CORBA_float progress,
- CORBA_Environment *ev)
-{
- EActivityHandler *activity_handler;
- EActivityHandlerPrivate *priv;
- ActivityInfo *activity_info;
- GList *p;
- GSList *sp;
- int order_number;
-
- /* FIXME? The complexity in this function sucks. */
-
- activity_handler = E_ACTIVITY_HANDLER (bonobo_object_from_servant (servant));
-
- priv = activity_handler->priv;
-
- p = lookup_activity (priv->activity_infos, activity_id, &order_number);
- if (p == NULL) {
- CORBA_exception_set (ev, CORBA_USER_EXCEPTION,
- ex_GNOME_Evolution_Activity_IdNotFound, NULL);
- return;
- }
-
- activity_info = (ActivityInfo *) p->data;
-
- CORBA_free (activity_info->information);
- activity_info->information = CORBA_string_dup (information);
-
- activity_info->progress = progress;
-
- for (sp = priv->task_bars; sp != NULL; sp = sp->next) {
- ETaskBar *task_bar;
- ETaskWidget *task_widget;
-
- task_bar = E_TASK_BAR (sp->data);
- task_widget = e_task_bar_get_task_widget (task_bar, order_number);
-
- e_task_widget_update (task_widget, information, progress);
- }
-}
-
-static void
-impl_operationFinished (PortableServer_Servant servant,
- const GNOME_Evolution_Activity_ActivityId activity_id,
- CORBA_Environment *ev)
-{
- EActivityHandler *activity_handler;
- EActivityHandlerPrivate *priv;
- GList *p;
- GSList *sp;
- int order_number;
-
- activity_handler = E_ACTIVITY_HANDLER (bonobo_object_from_servant (servant));
-
- priv = activity_handler->priv;
-
- p = lookup_activity (priv->activity_infos, activity_id, &order_number);
-
- activity_info_free ((ActivityInfo *) p->data);
- priv->activity_infos = g_list_remove_link (priv->activity_infos, p);
-
- for (sp = priv->task_bars; sp != NULL; sp = sp->next) {
- ETaskBar *task_bar;
-
- task_bar = E_TASK_BAR (sp->data);
- e_task_bar_remove_task (task_bar, order_number);
- }
-}
-
-static GNOME_Evolution_Activity_DialogAction
-impl_requestDialog (PortableServer_Servant servant,
- const GNOME_Evolution_Activity_ActivityId activity_id,
- const GNOME_Evolution_Activity_DialogType dialog_type,
- CORBA_Environment *ev)
-{
- EActivityHandler *activity_handler;
-
- activity_handler = E_ACTIVITY_HANDLER (bonobo_object_from_servant (servant));
-
- /* FIXME implement. */
- g_warning ("Evolution::Activity::requestDialog not implemented");
-
- return GNOME_Evolution_Activity_DIALOG_ACTION_DISPLAY;
-}
-
-
-/* GTK+ type stuff. */
-
-static void
-e_activity_handler_class_init (GObjectClass *object_class)
-{
- EActivityHandlerClass *handler_class;
-
- parent_class = g_type_class_ref(PARENT_TYPE);
-
- object_class->dispose = impl_dispose;
- object_class->finalize = impl_finalize;
-
- handler_class = E_ACTIVITY_HANDLER_CLASS (object_class);
- handler_class->epv.operationStarted = impl_operationStarted;
- handler_class->epv.operationProgressing = impl_operationProgressing;
- handler_class->epv.operationFinished = impl_operationFinished;
- handler_class->epv.requestDialog = impl_requestDialog;
-}
-
-static void
-e_activity_handler_init (EActivityHandler *activity_handler)
-{
- EActivityHandlerPrivate *priv;
-
- priv = g_new (EActivityHandlerPrivate, 1);
- priv->next_activity_id = 0;
- priv->activity_infos = NULL;
- priv->task_bars = NULL;
-
- activity_handler->priv = priv;
-}
-
-
-void
-e_activity_handler_construct (EActivityHandler *activity_handler)
-{
- g_return_if_fail (activity_handler != NULL);
- g_return_if_fail (E_IS_ACTIVITY_HANDLER (activity_handler));
-
- /* Nothing to do here. */
-}
-
-EActivityHandler *
-e_activity_handler_new (void)
-{
- EActivityHandler *activity_handler;
-
- activity_handler = g_object_new (e_activity_handler_get_type (), 0);
- e_activity_handler_construct (activity_handler);
-
- return activity_handler;
-}
-
-
-void
-e_activity_handler_attach_task_bar (EActivityHandler *activity_handler,
- ETaskBar *task_bar)
-{
- EActivityHandlerPrivate *priv;
-
- g_return_if_fail (activity_handler != NULL);
- g_return_if_fail (E_IS_ACTIVITY_HANDLER (activity_handler));
- g_return_if_fail (task_bar != NULL);
- g_return_if_fail (E_IS_TASK_BAR (task_bar));
-
- priv = activity_handler->priv;
-
- g_object_weak_ref (G_OBJECT (task_bar), task_bar_destroy_notify, activity_handler);
-
- priv->task_bars = g_slist_prepend (priv->task_bars, task_bar);
-
- setup_task_bar (activity_handler, task_bar);
-}
-
-
-BONOBO_TYPE_FUNC_FULL (EActivityHandler,
- GNOME_Evolution_Activity,
- PARENT_TYPE,
- e_activity_handler)
diff --git a/shell/e-activity-handler.h b/shell/e-activity-handler.h
deleted file mode 100644
index b69c360765..0000000000
--- a/shell/e-activity-handler.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-activity-handler.h
- *
- * Copyright (C) 2001 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli <ettore@ximian.com>
- */
-
-#ifndef _E_ACTIVITY_HANDLER_H_
-#define _E_ACTIVITY_HANDLER_H_
-
-#include "Evolution.h"
-
-#include "e-task-bar.h"
-
-#include <bonobo/bonobo-object.h>
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-#define E_TYPE_ACTIVITY_HANDLER (e_activity_handler_get_type ())
-#define E_ACTIVITY_HANDLER(obj) (GTK_CHECK_CAST ((obj), E_TYPE_ACTIVITY_HANDLER, EActivityHandler))
-#define E_ACTIVITY_HANDLER_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_ACTIVITY_HANDLER, EActivityHandlerClass))
-#define E_IS_ACTIVITY_HANDLER(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_ACTIVITY_HANDLER))
-#define E_IS_ACTIVITY_HANDLER_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_ACTIVITY_HANDLER))
-
-
-typedef struct _EActivityHandler EActivityHandler;
-typedef struct _EActivityHandlerPrivate EActivityHandlerPrivate;
-typedef struct _EActivityHandlerClass EActivityHandlerClass;
-
-struct _EActivityHandler {
- BonoboObject parent;
-
- EActivityHandlerPrivate *priv;
-};
-
-struct _EActivityHandlerClass {
- BonoboObjectClass parent_class;
-
- POA_GNOME_Evolution_Activity__epv epv;
-};
-
-
-GtkType e_activity_handler_get_type (void);
-void e_activity_handler_construct (EActivityHandler *activity_hanlder);
-EActivityHandler *e_activity_handler_new (void);
-
-void e_activity_handler_attach_task_bar (EActivityHandler *activity_hanlder,
- ETaskBar *task_bar);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* _E_ACTIVITY_HANDLER_H_ */
diff --git a/shell/e-component-info.c b/shell/e-component-info.c
deleted file mode 100644
index a89647c8a1..0000000000
--- a/shell/e-component-info.c
+++ /dev/null
@@ -1,288 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-component-info.c - Load/save information about Evolution components.
- *
- * Copyright (C) 2002 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli <ettore@ximian.com>
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "e-component-info.h"
-
-#include "e-util/e-lang-utils.h"
-
-#include <libxml/parser.h>
-#include <libxml/xmlmemory.h>
-
-#include <string.h>
-#include <stdlib.h>
-
-
-static char *
-get_value_for_node (xmlNode *node)
-{
- xmlChar *xml_value;
- char *glib_value;
-
- xml_value = xmlNodeGetContent (node);
- glib_value = g_strdup (xml_value);
- xmlFree (xml_value);
-
- return glib_value;
-}
-
-static xmlNode *
-lookup_node (xmlNode *parent_node,
- const char *node_name)
-{
- xmlNode *p;
-
- for (p = parent_node->children; p != NULL; p = p->next) {
- if (strcmp ((const char *) p->name, node_name) == 0)
- return p;
- }
-
- return NULL;
-}
-
-static char *
-get_value (xmlNode *parent_node,
- const char *node_name)
-{
- xmlNode *node;
-
- node = lookup_node (parent_node, node_name);
- if (node == NULL)
- return NULL;
-
- return get_value_for_node (node);
-}
-
-static xmlNode *
-lookup_node_for_language (xmlNode *parent_node,
- const char *node_name,
- const char *language_id)
-{
- xmlNode *p;
-
- for (p = parent_node->children; p != NULL; p = p->next) {
- xmlChar *node_language_id;
-
- if (strcmp ((const char *) p->name, node_name) != 0)
- continue;
-
- node_language_id = xmlNodeGetLang (p);
- if (node_language_id == NULL)
- continue;
-
- if (strcmp (node_language_id, language_id) == 0) {
- xmlFree (node_language_id);
- return p;
- }
- }
-
- return NULL;
-}
-
-static char *
-get_i18n_value (xmlNode *parent_node,
- const char *node_name,
- GSList *language_list)
-{
- GSList *p;
-
- for (p = language_list; p != NULL; p = p->next) {
- xmlNode *node;
- const char *language_id;
-
- language_id = (const char *) p->data;
- node = lookup_node_for_language (parent_node, node_name, language_id);
-
- if (node != NULL) {
- xmlChar *xml_value;
- char *glib_value;
-
- xml_value = xmlNodeGetContent (node);
- glib_value = g_strdup (xml_value);
- xmlFree (xml_value);
-
- return glib_value;
- }
- }
-
- return get_value (parent_node, node_name);
-}
-
-
-static void
-add_folder_type (EComponentInfo *info,
- xmlNode *parent_node,
- GSList *language_list)
-{
- EComponentInfoFolderType *folder_type;
- char *user_creatable_string;
-
- folder_type = g_new (EComponentInfoFolderType, 1);
-
- folder_type->name = get_value (parent_node, "name");
- folder_type->icon_file_name = get_value (parent_node, "icon_file_name");
- folder_type->display_name = get_i18n_value (parent_node, "display_name", language_list);
- folder_type->description = get_i18n_value (parent_node, "description", language_list);
-
- /* FIXME dnd types. */
-
- folder_type->accepted_dnd_types = NULL;
- folder_type->exported_dnd_types = NULL;
-
- user_creatable_string = get_value (parent_node, "user_creatable");
- if (user_creatable_string == NULL || atoi (user_creatable_string) == 0)
- folder_type->is_user_creatable = FALSE;
- else
- folder_type->is_user_creatable = TRUE;
-
- info->folder_types = g_slist_prepend (info->folder_types, folder_type);
-}
-
-static void
-add_user_creatable_item_type (EComponentInfo *info,
- xmlNode *parent_node,
- GSList *language_list)
-{
- EComponentInfoUserCreatableItemType *type;
-
- type = g_new (EComponentInfoUserCreatableItemType, 1);
-
- type->id = get_value (parent_node, "id");
- type->description = get_i18n_value (parent_node, "description", language_list);
- type->icon_file_name = get_value (parent_node, "icon_file_name");
- type->menu_description = get_i18n_value (parent_node, "menu_description", language_list);
- type->menu_shortcut = get_value (parent_node, "menu_shortcut");
-
- info->user_creatable_item_types = g_slist_prepend (info->user_creatable_item_types, type);
-}
-
-static void
-add_uri_schema (EComponentInfo *info,
- xmlNode *parent_node)
-{
- info->uri_schemas = g_slist_prepend (info->uri_schemas, get_value_for_node (parent_node));
-}
-
-
-EComponentInfo *
-e_component_info_load (const char *file_name)
-{
- EComponentInfo *new;
- xmlDoc *doc;
- xmlNode *root;
- xmlNode *p;
- GSList *language_list;
-
- g_return_val_if_fail (file_name != NULL, NULL);
-
- doc = xmlParseFile (file_name);
- if (doc == NULL)
- return NULL;
-
- root = xmlDocGetRootElement (doc);
- if (root == NULL || strcmp (root->name, "evolution_component") != 0) {
- xmlFreeDoc (doc);
- return NULL;
- }
-
- language_list = e_get_language_list ();
-
- new = g_new (EComponentInfo, 1);
-
- new->id = get_value (root, "id");
- new->description = get_i18n_value (root, "description", language_list);
- new->icon_file_name = get_value (root, "icon_file_name");
-
- new->folder_types = NULL;
- new->uri_schemas = NULL;
- new->user_creatable_item_types = NULL;
-
- for (p = root->children; p != NULL; p = p->next) {
- if (strcmp ((char *) p->name, "folder_type") == 0)
- add_folder_type (new, p, language_list);
- else if (strcmp ((char *) p->name, "user_creatable_item_type") == 0)
- add_user_creatable_item_type (new, p, language_list);
- else if (strcmp ((char *) p->name, "uri_schema") == 0)
- add_uri_schema (new, p);
- }
-
- xmlFreeDoc (doc);
- e_free_language_list (language_list);
-
- return new;
-}
-
-void
-e_component_info_free (EComponentInfo *component_info)
-{
- GSList *p;
-
- g_return_if_fail (component_info != NULL);
-
- g_free (component_info->id);
- g_free (component_info->description);
- g_free (component_info->icon_file_name);
-
- for (p = component_info->folder_types; p != NULL; p = p->next) {
- EComponentInfoFolderType *folder_type;
- GSList *q;
-
- folder_type = (EComponentInfoFolderType *) p->data;
- g_free (folder_type->name);
- g_free (folder_type->icon_file_name);
- g_free (folder_type->display_name);
- g_free (folder_type->description);
-
- for (q = folder_type->accepted_dnd_types; q != NULL; q = q->next)
- g_free ((char *) q->data);
- g_slist_free (folder_type->accepted_dnd_types);
-
- for (q = folder_type->exported_dnd_types; q != NULL; q = q->next)
- g_free ((char *) q->data);
- g_slist_free (folder_type->exported_dnd_types);
-
- g_free (folder_type);
- }
- g_free (component_info->folder_types);
-
- for (p = component_info->uri_schemas; p != NULL; p = p->next)
- g_free ((char *) p->data);
- g_slist_free (component_info->uri_schemas);
-
- for (p = component_info->user_creatable_item_types; p != NULL; p = p->next) {
- EComponentInfoUserCreatableItemType *type;
-
- type = (EComponentInfoUserCreatableItemType *) p->data;
-
- g_free (type->id);
- g_free (type->description);
- g_free (type->icon_file_name);
- g_free (type->menu_description);
- g_free (type->menu_shortcut);
- }
- g_slist_free (component_info->user_creatable_item_types);
-
- g_free (component_info);
-}
diff --git a/shell/e-component-info.h b/shell/e-component-info.h
deleted file mode 100644
index e991631284..0000000000
--- a/shell/e-component-info.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-component-info.h - Load/save information about Evolution components.
- *
- * Copyright (C) 2002 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli <ettore@ximian.com>
- */
-
-#ifndef E_COMPONENT_INFO_H
-#define E_COMPONENT_INFO_H
-
-#include <glib.h>
-
-struct _EComponentInfoFolderType {
- char *name;
- char *icon_file_name;
- char *display_name;
- char *description;
-
- GSList *accepted_dnd_types; /* <char *> */
- GSList *exported_dnd_types; /* <char *> */
-
- unsigned int is_user_creatable : 1;
-};
-typedef struct _EComponentInfoFolderType EComponentInfoFolderType;
-
-struct _EComponentInfoUserCreatableItemType {
- char *id;
- char *description;
- char *icon_file_name;
-
- char *menu_description;
- char *menu_shortcut;
-};
-typedef struct _EComponentInfoUserCreatableItemType EComponentInfoUserCreatableItemType;
-
-struct _EComponentInfo {
- char *id;
- char *description;
- char *icon_file_name;
-
- GSList *folder_types; /* <EComponentInfoFolderType> */
- GSList *uri_schemas; /* <char *> */
- GSList *user_creatable_item_types; /* <EComponentInfoUserCreatableItemType> */
-};
-typedef struct _EComponentInfo EComponentInfo;
-
-
-EComponentInfo *e_component_info_load (const char *file_name);
-void e_component_info_free (EComponentInfo *info);
-
-#endif /* E_COMPONENT_INFO_H */
diff --git a/shell/e-component-registry.c b/shell/e-component-registry.c
deleted file mode 100644
index d0a8cc146a..0000000000
--- a/shell/e-component-registry.c
+++ /dev/null
@@ -1,525 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-component-registry.c
- *
- * Copyright (C) 2000, 2001, 2002 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "e-component-registry.h"
-
-#include <glib.h>
-#include <gtk/gtktypeutils.h>
-
-#include <gal/util/e-util.h>
-
-#include <bonobo-activation/bonobo-activation.h>
-
-#include "Evolution.h"
-
-#include "e-shell-utils.h"
-#include "evolution-shell-component-client.h"
-
-
-#define PARENT_TYPE G_TYPE_OBJECT
-static GObjectClass *parent_class = NULL;
-
-typedef struct _Component Component;
-
-struct _Component {
- char *id;
-
- EvolutionShellComponentClient *client;
-
- /* Names of the folder types we support (normal ASCII strings). */
- GList *folder_type_names;
-};
-
-struct _EComponentRegistryPrivate {
- EShell *shell;
-
- GHashTable *component_id_to_component;
-};
-
-
-/* Utility functions. */
-
-static int
-sleep_with_g_main_loop_timeout_callback (void *data)
-{
- GMainLoop *loop;
-
- loop = (GMainLoop *) data;
- g_main_loop_quit (loop);
-
- return FALSE;
-}
-
-/* This function is like `sleep()', but it uses the GMainLoop so CORBA
- invocations can get through. */
-static void
-sleep_with_g_main_loop (int num_seconds)
-{
- GMainLoop *loop;
-
- loop = g_main_loop_new (NULL, TRUE);
- g_timeout_add (1000 * num_seconds, sleep_with_g_main_loop_timeout_callback, loop);
- g_main_loop_run (loop);
- g_main_loop_unref (loop);
-}
-
-static void
-wait_for_corba_object_to_die (Bonobo_Unknown corba_objref,
- const char *id)
-{
- gboolean alive;
- int count;
-
- count = 1;
- while (1) {
- alive = bonobo_unknown_ping (corba_objref, NULL);
- if (! alive)
- break;
-
- g_print ("Waiting for component to die -- %s (%d)\n", id, count);
- sleep_with_g_main_loop (1);
- count ++;
- }
-}
-
-
-/* Component information handling. */
-
-static Component *
-component_new (const char *id,
- EvolutionShellComponentClient *client)
-{
- Component *new;
-
- g_object_ref (client);
-
- new = g_new (Component, 1);
- new->id = g_strdup (id);
- new->folder_type_names = NULL;
- new->client = client;
-
- return new;
-}
-
-static gboolean
-component_free (Component *component)
-{
- GNOME_Evolution_ShellComponent corba_shell_component;
- CORBA_Environment ev;
- gboolean retval;
-
- CORBA_exception_init (&ev);
-
- corba_shell_component = evolution_shell_component_client_corba_objref (component->client);
- corba_shell_component = CORBA_Object_duplicate (corba_shell_component, &ev);
-
- GNOME_Evolution_ShellComponent_unsetOwner (corba_shell_component, &ev);
- if (ev._major == CORBA_NO_EXCEPTION)
- retval = TRUE;
- else
- retval = FALSE;
- CORBA_exception_free (&ev);
-
- g_object_unref (component->client);
-
- /* If the component is out-of-proc, wait for the process to die first. */
- if (bonobo_object (ORBit_small_get_servant (corba_shell_component)) == NULL)
- wait_for_corba_object_to_die ((Bonobo_Unknown) corba_shell_component, component->id);
-
- CORBA_Object_release (corba_shell_component, &ev);
-
- e_free_string_list (component->folder_type_names);
- g_free (component->id);
-
- g_free (component);
-
- return retval;
-}
-
-static gboolean
-register_type (EComponentRegistry *component_registry,
- const char *name,
- const char *icon_name,
- const char *display_name,
- const char *description,
- gboolean user_creatable,
- int num_exported_dnd_types,
- const char **exported_dnd_types,
- int num_accepted_dnd_types,
- const char **accepted_dnd_types,
- Component *handler,
- gboolean override_duplicate)
-{
- EComponentRegistryPrivate *priv;
- EFolderTypeRegistry *folder_type_registry;
-
- priv = component_registry->priv;
-
- folder_type_registry = e_shell_get_folder_type_registry (priv->shell);
- g_assert (folder_type_registry != NULL);
-
- if (override_duplicate
- && e_folder_type_registry_type_registered (folder_type_registry, name))
- e_folder_type_registry_unregister_type (folder_type_registry, name);
-
- if (! e_folder_type_registry_register_type (folder_type_registry,
- name, icon_name,
- display_name, description,
- user_creatable,
- num_exported_dnd_types,
- exported_dnd_types,
- num_accepted_dnd_types,
- accepted_dnd_types)) {
- g_warning ("Trying to register duplicate folder type -- %s", name);
- return FALSE;
- }
-
- e_folder_type_registry_set_handler_for_type (folder_type_registry, name, handler->client);
-
- return TRUE;
-}
-
-static gboolean
-register_component (EComponentRegistry *component_registry,
- const char *id,
- gboolean override_duplicate,
- CORBA_Environment *ev)
-{
- EComponentRegistryPrivate *priv;
- GNOME_Evolution_ShellComponent component_corba_interface;
- GNOME_Evolution_Shell shell_corba_interface;
- GNOME_Evolution_FolderTypeList *supported_types;
- GNOME_Evolution_URISchemaList *supported_schemas;
- Component *component;
- EvolutionShellComponentClient *client;
- CORBA_Environment my_ev;
- CORBA_unsigned_long i;
-
- priv = component_registry->priv;
-
- if (! override_duplicate && g_hash_table_lookup (priv->component_id_to_component, id) != NULL) {
- g_warning ("Trying to register component twice -- %s", id);
- return FALSE;
- }
-
- client = evolution_shell_component_client_new (id, ev);
- if (client == NULL)
- return FALSE;
-
- /* FIXME we could use the EvolutionShellComponentClient API here instead, but for
- now we don't care. */
-
- component_corba_interface = evolution_shell_component_client_corba_objref (client);
- shell_corba_interface = BONOBO_OBJREF (priv->shell);
-
- CORBA_exception_init (&my_ev);
-
- /* Register the supported folder types. */
-
- supported_types = GNOME_Evolution_ShellComponent__get_supportedTypes (component_corba_interface, &my_ev);
- if (my_ev._major != CORBA_NO_EXCEPTION || supported_types->_length == 0) {
- g_object_unref (client);
- CORBA_exception_free (&my_ev);
- return FALSE;
- }
-
- CORBA_exception_free (&my_ev);
-
- component = component_new (id, client);
- g_hash_table_insert (priv->component_id_to_component, component->id, component);
- g_object_unref (client);
-
- for (i = 0; i < supported_types->_length; i++) {
- const GNOME_Evolution_FolderType *type;
-
- type = supported_types->_buffer + i;
-
- if (! register_type (component_registry,
- type->name, type->iconName,
- type->displayName, type->description,
- type->userCreatable,
- type->exportedDndTypes._length,
- (const char **) type->exportedDndTypes._buffer,
- type->acceptedDndTypes._length,
- (const char **) type->acceptedDndTypes._buffer,
- component,
- override_duplicate)) {
- g_warning ("Cannot register type `%s' for component %s",
- type->name, component->id);
- }
- }
-
- CORBA_free (supported_types);
-
- /* Register the supported external URI schemas. */
-
- supported_schemas = GNOME_Evolution_ShellComponent__get_externalUriSchemas (component_corba_interface, &my_ev);
- if (my_ev._major == CORBA_NO_EXCEPTION) {
- EUriSchemaRegistry *uri_schema_registry;
-
- uri_schema_registry = e_shell_get_uri_schema_registry (priv->shell);
-
- for (i = 0; i < supported_schemas->_length; i++) {
- const CORBA_char *schema;
-
- schema = supported_schemas->_buffer[i];
- e_uri_schema_registry_set_handler_for_schema (uri_schema_registry, schema, component->client);
- }
-
- CORBA_free (supported_schemas);
- }
-
- return TRUE;
-}
-
-
-/* GObject methods. */
-
-static void
-component_id_foreach_free (void *key,
- void *value,
- void *user_data)
-{
- Component *component;
-
- component = (Component *) value;
- component_free (component);
-}
-
-static void
-impl_dispose (GObject *object)
-{
- EComponentRegistry *component_registry;
- EComponentRegistryPrivate *priv;
-
- component_registry = E_COMPONENT_REGISTRY (object);
- priv = component_registry->priv;
-
- if (priv->component_id_to_component != NULL) {
- g_hash_table_foreach (priv->component_id_to_component, component_id_foreach_free, NULL);
- g_hash_table_destroy (priv->component_id_to_component);
- priv->component_id_to_component = NULL;
- }
-
- (* G_OBJECT_CLASS (parent_class)->dispose) (object);
-}
-
-static void
-impl_finalize (GObject *object)
-{
- EComponentRegistry *component_registry;
- EComponentRegistryPrivate *priv;
-
- component_registry = E_COMPONENT_REGISTRY (object);
- priv = component_registry->priv;
-
- g_free (priv);
-
- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
-}
-
-
-static void
-class_init (EComponentRegistryClass *klass)
-{
- GObjectClass *object_class;
-
- object_class = G_OBJECT_CLASS (klass);
- object_class->dispose = impl_dispose;
- object_class->finalize = impl_finalize;
-
- parent_class = g_type_class_ref(PARENT_TYPE);
-}
-
-
-static void
-init (EComponentRegistry *component_registry)
-{
- EComponentRegistryPrivate *priv;
-
- priv = g_new (EComponentRegistryPrivate, 1);
- priv->shell = NULL;
- priv->component_id_to_component = g_hash_table_new (g_str_hash, g_str_equal);
-
- component_registry->priv = priv;
-}
-
-
-void
-e_component_registry_construct (EComponentRegistry *component_registry,
- EShell *shell)
-{
- EComponentRegistryPrivate *priv;
-
- g_return_if_fail (component_registry != NULL);
- g_return_if_fail (E_IS_COMPONENT_REGISTRY (component_registry));
- g_return_if_fail (shell != NULL);
- g_return_if_fail (E_IS_SHELL (shell));
-
- priv = component_registry->priv;
- priv->shell = shell;
-}
-
-EComponentRegistry *
-e_component_registry_new (EShell *shell)
-{
- EComponentRegistry *component_registry;
-
- g_return_val_if_fail (shell != NULL, NULL);
- g_return_val_if_fail (E_IS_SHELL (shell), NULL);
-
- component_registry = g_object_new (e_component_registry_get_type (), NULL);
- e_component_registry_construct (component_registry, shell);
-
- return component_registry;
-}
-
-
-gboolean
-e_component_registry_register_component (EComponentRegistry *component_registry,
- const char *id,
- CORBA_Environment *ev)
-{
- g_return_val_if_fail (component_registry != NULL, FALSE);
- g_return_val_if_fail (E_IS_COMPONENT_REGISTRY (component_registry), FALSE);
- g_return_val_if_fail (id != NULL, FALSE);
-
- return register_component (component_registry, id, FALSE, ev);
-}
-
-
-static void
-compose_id_list_foreach (void *key,
- void *value,
- void *data)
-{
- GList **listp;
- const char *id;
-
- listp = (GList **) data;
- id = (const char *) key;
-
- *listp = g_list_prepend (*listp, g_strdup (id));
-}
-
-/**
- * e_component_registry_get_id_list:
- * @component_registry:
- *
- * Get the list of components registered.
- *
- * Return value: A GList of strings containining the IDs for all the registered
- * components. The list must be freed by the caller when not used anymore.
- **/
-GList *
-e_component_registry_get_id_list (EComponentRegistry *component_registry)
-{
- EComponentRegistryPrivate *priv;
- GList *list;
-
- g_return_val_if_fail (component_registry != NULL, NULL);
- g_return_val_if_fail (E_IS_COMPONENT_REGISTRY (component_registry), NULL);
-
- priv = component_registry->priv;
- list = NULL;
-
- g_hash_table_foreach (priv->component_id_to_component, compose_id_list_foreach, &list);
-
- return list;
-}
-
-/**
- * e_component_registry_get_component_by_id:
- * @component_registry:
- * @id: The component's OAF ID
- *
- * Get the registered component client for the specified ID. If that component
- * is not registered, return NULL.
- *
- * Return value: A pointer to the ShellComponentClient for that component.
- **/
-EvolutionShellComponentClient *
-e_component_registry_get_component_by_id (EComponentRegistry *component_registry,
- const char *id)
-{
- EComponentRegistryPrivate *priv;
- const Component *component;
-
- g_return_val_if_fail (component_registry != NULL, NULL);
- g_return_val_if_fail (E_IS_COMPONENT_REGISTRY (component_registry), NULL);
- g_return_val_if_fail (id != NULL, NULL);
-
- priv = component_registry->priv;
-
- component = g_hash_table_lookup (priv->component_id_to_component, id);
- if (component == NULL)
- return NULL;
-
- return component->client;
-}
-
-
-EvolutionShellComponentClient *
-e_component_registry_restart_component (EComponentRegistry *component_registry,
- const char *id,
- CORBA_Environment *ev)
-{
- EComponentRegistryPrivate *priv;
- Component *component;
- CORBA_Environment my_ev;
- CORBA_Object corba_objref;
-
- g_return_val_if_fail (component_registry != NULL, NULL);
- g_return_val_if_fail (E_IS_COMPONENT_REGISTRY (component_registry), NULL);
- g_return_val_if_fail (id != NULL, NULL);
-
- priv = component_registry->priv;
-
- component = g_hash_table_lookup (priv->component_id_to_component, id);
- if (component == NULL)
- return NULL;
-
- CORBA_exception_init (&my_ev);
-
- g_hash_table_remove (priv->component_id_to_component, id);
-
- corba_objref = CORBA_Object_duplicate (evolution_shell_component_client_corba_objref (component->client), &my_ev);
-
- component_free (component);
-
- wait_for_corba_object_to_die (corba_objref, id);
-
- CORBA_exception_free (&my_ev);
-
- if (! register_component (component_registry, id, TRUE, ev))
- return NULL;
-
- return e_component_registry_get_component_by_id (component_registry, id);
-}
-
-
-E_MAKE_TYPE (e_component_registry, "EComponentRegistry", EComponentRegistry,
- class_init, init, PARENT_TYPE)
diff --git a/shell/e-component-registry.h b/shell/e-component-registry.h
deleted file mode 100644
index 856a24f093..0000000000
--- a/shell/e-component-registry.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-component-registry.h
- *
- * Copyright (C) 2000 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifndef __E_COMPONENT_REGISTRY_H__
-#define __E_COMPONENT_REGISTRY_H__
-
-#include <gtk/gtkobject.h>
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-#define E_TYPE_COMPONENT_REGISTRY (e_component_registry_get_type ())
-#define E_COMPONENT_REGISTRY(obj) (GTK_CHECK_CAST ((obj), E_TYPE_COMPONENT_REGISTRY, EComponentRegistry))
-#define E_COMPONENT_REGISTRY_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_COMPONENT_REGISTRY, EComponentRegistryClass))
-#define E_IS_COMPONENT_REGISTRY(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_COMPONENT_REGISTRY))
-#define E_IS_COMPONENT_REGISTRY_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_COMPONENT_REGISTRY))
-
-
-typedef struct _EComponentRegistry EComponentRegistry;
-typedef struct _EComponentRegistryPrivate EComponentRegistryPrivate;
-typedef struct _EComponentRegistryClass EComponentRegistryClass;
-
-#include "e-shell.h"
-#include "evolution-shell-component-client.h"
-
-struct _EComponentRegistry {
- GObject parent;
-
- EComponentRegistryPrivate *priv;
-};
-
-struct _EComponentRegistryClass {
- GObjectClass parent_class;
-};
-
-
-GtkType e_component_registry_get_type (void);
-void e_component_registry_construct (EComponentRegistry *component_registry,
- EShell *shell);
-EComponentRegistry *e_component_registry_new (EShell *shell);
-
-gboolean e_component_registry_register_component (EComponentRegistry *component_registry,
- const char *id,
- CORBA_Environment *ev);
-
-GList *e_component_registry_get_id_list (EComponentRegistry *component_registry);
-
-EvolutionShellComponentClient *e_component_registry_get_component_by_id (EComponentRegistry *component_registry,
- const char *id);
-
-EvolutionShellComponentClient *e_component_registry_restart_component (EComponentRegistry *component_registry,
- const char *id,
- CORBA_Environment *ev);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* __E_COMPONENT_REGISTRY_H__ */
diff --git a/shell/e-config-upgrade.c b/shell/e-config-upgrade.c
deleted file mode 100644
index 48f141bde8..0000000000
--- a/shell/e-config-upgrade.c
+++ /dev/null
@@ -1,1879 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-upgrade.c - upgrade previous config versions
- *
- * Copyright (C) 2003 Ximian, Inc.
- *
- * Authors: Michael Zucchi <notzed@ximian.com>
- * Jeffery Stedfast <fejj@ximian.com>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- */
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <unistd.h>
-
-#include <stdio.h>
-#include <errno.h>
-#include <regex.h>
-#include <string.h>
-#include <ctype.h>
-
-#include <glib.h>
-#include <gconf/gconf.h>
-#include <gconf/gconf-client.h>
-
-#include <libxml/xmlmemory.h>
-#include <libxml/parser.h>
-#include <libxml/tree.h>
-
-#include "e-config-upgrade.h"
-
-#define d(x)
-
-/* output revision of configuration */
-#define CONF_MAJOR (1)
-#define CONF_MINOR (3)
-#define CONF_REVISION (1)
-
-/* major/minor/revision of existing config */
-static unsigned int major = -1;
-static unsigned int minor = -1;
-static unsigned int revision = -1;
-
-/* 1.0 details, if required */
-static GHashTable *accounts_1_0 = NULL;
-static GHashTable *accounts_name_1_0 = NULL;
-
-/* where files are stored */
-static const char *evolution_dir;
-
-static char hexnib[256] = {
- -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
- -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
- -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,-1,-1,-1,-1,-1,-1,
- -1,10,11,12,13,14,15,16,-1,-1,-1,-1,-1,-1,-1,-1,
- -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
- -1,10,11,12,13,14,15,16,-1,-1,-1,-1,-1,-1,-1,-1,
- -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
- -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
-};
-
-static char *hex_decode(const char *val)
-{
- char *o, *res;
- const unsigned char *p = (const unsigned char *)val;
-
- o = res = g_malloc(strlen(val)/2 + 1);
- for (p=val;(p[0] && p[1]);p+=2)
- *o++ = (hexnib[p[0]] << 4) | hexnib[p[1]];
- *o = 0;
-
- return res;
-}
-
-static char *url_decode(const char *val)
-{
- char *o, *res, c;
- const unsigned char *p = (const unsigned char *)val;
-
- o = res = g_malloc(strlen(val) + 1);
- while (*p) {
- c = *p++;
- if (c == '%'
- && hexnib[p[0]] != -1 && hexnib[p[1]] != -1) {
- *o++ = (hexnib[p[0]] << 4) | hexnib[p[1]];
- p+=2;
- } else
- *o++ = c;
- }
- *o = 0;
-
- return res;
-}
-
-/* so we dont need camel, just copy here */
-static int
-camel_file_util_decode_uint32 (FILE *in, guint32 *dest)
-{
- guint32 value = 0;
- int v;
-
- /* until we get the last byte, keep decoding 7 bits at a time */
- while ( ((v = fgetc (in)) & 0x80) == 0 && v!=EOF) {
- value |= v;
- value <<= 7;
- }
- if (v == EOF) {
- *dest = value >> 7;
- return -1;
- }
- *dest = value | (v & 0x7f);
-
- return 0;
-}
-
-static int
-camel_file_util_decode_string (FILE *in, char **str)
-{
- guint32 len;
- register char *ret;
-
- if (camel_file_util_decode_uint32 (in, &len) == -1) {
- *str = NULL;
- return -1;
- }
-
- len--;
- if (len > 65536) {
- *str = NULL;
- return -1;
- }
-
- ret = g_malloc (len+1);
- if (len > 0 && fread (ret, len, 1, in) != 1) {
- g_free (ret);
- *str = NULL;
- return -1;
- }
-
- ret[len] = 0;
- *str = ret;
- return 0;
-}
-
-/* For 1.0.8 conversion */
-
-/* as much info as we have on a given account */
-struct _account_info {
- char *name;
- char *uri;
- char *base_uri;
- union {
- struct {
- /* for imap */
- char *namespace;
- char *namespace_full;
- guint32 capabilities;
- GHashTable *folders;
- char dir_sep;
- } imap;
- } u;
-};
-
-struct _imap_folder_info {
- char *folder;
- /* encoded? decoded? canonicalised? */
- char dir_sep;
-};
-
-static char *parse_lsub(const char *lsub, char *dir_sep)
-{
- static int comp;
- static regex_t pat;
- regmatch_t match[3];
- char *m = "^\\* LSUB \\([^)]*\\) \"?([^\" ]+)\"? \"?(.*)\"?$";
-
- if (!comp) {
- if (regcomp(&pat, m, REG_EXTENDED|REG_ICASE) == -1) {
- g_warning("reg comp '%s' failed: %s", m, g_strerror(errno));
- return NULL;
- }
- comp = 1;
- }
-
- if (regexec(&pat, lsub, 3, match, 0) == 0) {
- if (match[1].rm_so != -1 && match[2].rm_so != -1) {
- if (dir_sep)
- *dir_sep = (match[1].rm_eo - match[1].rm_so == 1) ? lsub[match[1].rm_so] : 0;
- return g_strndup(lsub + match[2].rm_so, match[2].rm_eo - match[2].rm_so);
- }
- }
-
- return NULL;
-}
-
-static int read_imap_storeinfo(struct _account_info *si)
-{
- FILE *storeinfo;
- guint32 tmp;
- char *buf, *folder, dir_sep, *path, *name, *p;
- struct _imap_folder_info *fi;
-
- si->u.imap.folders = g_hash_table_new(g_str_hash, g_str_equal);
-
- /* get details from uri first */
- name = strstr(si->uri, ";override_namespace");
- if (name) {
- name = strstr(si->uri, ";namespace=");
- if (name) {
- char *end;
-
- name += strlen(";namespace=");
- if (*name == '\"') {
- name++;
- end = strchr(name, '\"');
- } else {
- end = strchr(name, ';');
- }
-
- if (end) {
- /* try get the dir_sep from the namespace */
- si->u.imap.namespace = g_strndup(name, end-name);
-
- p = si->u.imap.namespace;
- while ((dir_sep = *p++)) {
- if (dir_sep < '0'
- || (dir_sep > '9' && dir_sep < 'A')
- || (dir_sep > 'Z' && dir_sep < 'a')
- || (dir_sep > 'z')) {
- si->u.imap.dir_sep = dir_sep;
- break;
- }
- p++;
- }
- }
- }
- }
-
- /* now load storeinfo if it exists */
- path = g_build_filename(evolution_dir, "mail/imap", si->base_uri+7, "storeinfo", NULL);
- storeinfo = fopen(path, "r");
- g_free(path);
- if (storeinfo == NULL) {
- g_warning("could not find imap store info '%s'", path);
- return -1;
- }
-
- /* ignore version */
- camel_file_util_decode_uint32(storeinfo, &tmp);
- camel_file_util_decode_uint32(storeinfo, &si->u.imap.capabilities);
- g_free(si->u.imap.namespace);
- camel_file_util_decode_string (storeinfo, &si->u.imap.namespace);
- camel_file_util_decode_uint32 (storeinfo, &tmp);
- si->u.imap.dir_sep = tmp;
- /* strip trailing dir_sep or / */
- if (si->u.imap.namespace
- && (si->u.imap.namespace[strlen(si->u.imap.namespace)-1] == si->u.imap.dir_sep
- || si->u.imap.namespace[strlen(si->u.imap.namespace)-1] == '/')) {
- si->u.imap.namespace[strlen(si->u.imap.namespace)-1] = 0;
- }
-
- d(printf("namespace '%s' dir_sep '%c'\n", si->u.imap.namespace, si->u.imap.dir_sep?si->u.imap.dir_sep:'?'));
-
- while (camel_file_util_decode_string (storeinfo, &buf) == 0) {
- folder = parse_lsub(buf, &dir_sep);
- if (folder) {
- fi = g_malloc0(sizeof(*fi));
- fi->folder = folder;
- fi->dir_sep = dir_sep;
-#if d(!)0
- printf(" add folder '%s' ", folder);
- if (dir_sep)
- printf("'%c'\n", dir_sep);
- else
- printf("NIL\n");
-#endif
- g_hash_table_insert(si->u.imap.folders, fi->folder, fi);
- } else {
- g_warning("Could not parse LIST result '%s'\n", buf);
- }
- }
- fclose(storeinfo);
-
- return 0;
-}
-
-static char *get_base_uri(const char *val)
-{
- const char *tmp;
-
- tmp = strchr(val, ':');
- if (tmp) {
- tmp++;
- if (strncmp(tmp, "//", 2) == 0)
- tmp += 2;
- tmp = strchr(tmp, '/');
- }
-
- if (tmp)
- return g_strndup(val, tmp-val);
- else
- return g_strdup(val);
-}
-
-static char *upgrade_uri(const char *uri)
-{
- char *out = NULL;
-
- /* upgrades camel uri's */
-
- if (major <=1 && minor < 2) {
- if (strncmp(uri, "imap:", 5) == 0) {
- char *base_uri, dir_sep, *folder, *p;
- struct _account_info *ai;
-
- /* add namespace, canonicalise dir_sep to / */
- base_uri = get_base_uri(uri);
- ai = g_hash_table_lookup(accounts_1_0, base_uri);
-
- if (ai == NULL) {
- g_free(base_uri);
- return NULL;
- }
-
- dir_sep = ai->u.imap.dir_sep;
- if (dir_sep == 0) {
- /* no dir_sep listed, try get it from the namespace, if set */
- if (ai->u.imap.namespace != NULL) {
- p = ai->u.imap.namespace;
- while ((dir_sep = *p++)) {
- if (dir_sep < '0'
- || (dir_sep > '9' && dir_sep < 'A')
- || (dir_sep > 'Z' && dir_sep < 'a')
- || (dir_sep > 'z')) {
- break;
- }
- p++;
- }
- }
-
- /* give up ... */
- if (dir_sep == 0) {
- g_free(base_uri);
- return NULL;
- }
- }
-
- folder = g_strdup(uri + strlen(base_uri)+1);
-
- /* Add the namespace before the mailbox name, unless the mailbox is INBOX */
- if (ai->u.imap.namespace && strcmp(folder, "INBOX") != 0)
- out = g_strdup_printf("%s/%s/%s", base_uri, ai->u.imap.namespace, folder);
- else
- out = g_strdup_printf("%s/%s", base_uri, folder);
-
- p = out;
- while (*p) {
- if (*p == dir_sep)
- *p = '/';
- p++;
- }
-
- g_free(folder);
- g_free(base_uri);
- } else if (strncmp(uri, "exchange:", 9) == 0) {
- char *base_uri, *folder, *p;
-
- /* exchange://user@host/exchange/ * -> exchange://user@host/personal/ * */
- /* Any url encoding (%xx) in the folder name is also removed */
- base_uri = get_base_uri(uri);
- uri += strlen(base_uri) + 1;
- if (strncmp(uri, "exchange/", 9) == 0) {
- folder = url_decode(uri+9);
- p = strchr(folder, '/');
- out = g_strdup_printf("%s/personal%s", base_uri, p?p:"/");
- g_free(folder);
- }
- } else if (strncmp(uri, "exchanget:", 10) == 0) {
- /* these should be converted in the accounts table when it is loaded */
- g_warning("exchanget: uri not converted: '%s'", uri);
- }
- }
-
- return out;
-}
-
-static char *upgrade_evolution_uri(const char *uri)
-{
- char *out = NULL;
-
- if (!strcmp (uri, "evolution:/local/Inbox")) {
- return g_strdup("default:mail");
- } else if (!strcmp (uri, "evolution:/local/Calendar")) {
- return g_strdup("default:calendar");
- } else if (!strcmp (uri, "evolution:/local/Contacts")) {
- return g_strdup("default:contacts");
- } else if (!strcmp (uri, "evolution:/local/Tasks")) {
- return g_strdup("default:tasks");
- } if (!strncmp(uri, "evolution:/", 11)) {
- char *account, *tmp, *folder, *p;
- struct _account_info *ai;
-
- d(printf("convert url '%s'\n", uri));
- tmp = strchr(uri+11, '/');
- if (tmp == NULL)
- return NULL;
-
- folder = *tmp?tmp+1:tmp;
- account = g_strndup(uri+11, tmp-uri-11);
- d(printf(" looking for account '%s'\n", account));
- ai = g_hash_table_lookup(accounts_name_1_0, account);
- if (ai && !strncmp(ai->base_uri, "imap:", 5)) {
- /* Add namespace to evolution url's of imap accounts, if the account uses a namespace */
- d(printf("found account ... '%s', folder = '%s'\n", ai->name, folder));
-
- if (ai->u.imap.namespace && strcmp(folder, "INBOX") != 0)
- out = g_strdup_printf("evolution:/%s/%s/%s", account, ai->u.imap.namespace, folder);
- else
- out = g_strdup_printf("evolution:/%s/%s", account, folder);
-
- if (ai->u.imap.dir_sep) {
- p = out + strlen("evolution://") + strlen(account);
- while (*p) {
- if (*p == ai->u.imap.dir_sep)
- *p = '/';
- p++;
- }
- }
- } else if (ai && !strncmp(ai->base_uri, "exchange:", 9)) {
- /* add personal to exchange url's */
- folder = url_decode(folder);
- out = g_strdup_printf("evolution:/%s/personal/%s", account, folder);
- g_free(folder);
- }
- g_free(account);
- }
-
- return out;
-}
-
-static char *upgrade_type(const char *type)
-{
- char *res = NULL;
-
- /*
- <item type="ldap-contacts ...>
- to
- <item type="contacts/ldap ...>
- */
-
- if (strcmp(type, "ldap-contacts") == 0)
- res = g_strdup("contacts/ldap");
-
- return res;
-}
-
-enum {
- CONVERT_CONTENT,
- CONVERT_ARG,
-};
-
-struct _convert {
- int type;
- char *tag;
- char *arg;
- char *(*convert)(const char *val);
-} convert_table [] = {
- /* fix evolution uri's in shortcuts file */
- { CONVERT_CONTENT, "item", NULL, upgrade_evolution_uri },
- /* ldap item/type's converted from ldap-contacts to contacts/ldap */
- { CONVERT_ARG, "item", "type", upgrade_type },
- /* fix folder uri's in filters/vfolders */
- { CONVERT_ARG, "folder", "uri", upgrade_uri },
-};
-
-#define CONVERT_SIZEOF (sizeof(convert_table)/sizeof(convert_table[0]))
-
-static int upgrade_xml_1_0_rec(xmlNodePtr node)
-{
- int i;
- struct _convert *ct;
- int scan = TRUE;
- int work = FALSE;
- char *txt, *newtxt;
-
- for (i=0;i<CONVERT_SIZEOF;i++) {
- ct = &convert_table[i];
- if (!strcmp(node->name, ct->tag)) {
- switch(ct->type) {
- case CONVERT_CONTENT:
- txt = xmlNodeGetContent(node);
- newtxt = ct->convert(txt);
- d(printf("Upgrade content '%s': '%s' -> '%s'\n", ct->tag, txt, newtxt?newtxt:"unchanged"));
- xmlFree(txt);
- if (newtxt) {
- xmlNodeSetContent(node, newtxt);
- g_free(newtxt);
- work = TRUE;
- }
- scan = FALSE;
- break;
- case CONVERT_ARG:
- txt = xmlGetProp(node, ct->arg);
- if (txt) {
- newtxt = ct->convert(txt);
- d(printf("Upgrade prop '%s' '%s': '%s' -> '%s'\n", ct->tag, ct->arg, txt, newtxt?newtxt:"unchanged"));
- xmlFree(txt);
- if (newtxt) {
- xmlSetProp(node, ct->arg, newtxt);
- g_free(newtxt);
- work = TRUE;
- }
- }
- break;
- }
- }
- }
-
- if (scan) {
- node = node->children;
- while (node) {
- work |= upgrade_xml_1_0_rec(node);
- node = node->next;
- }
- }
-
- return work;
-}
-
-/* ********************************************************************** */
-/* XML 1 content encoding */
-
-static int
-is_xml1encoded(const char *txt)
-{
- const unsigned char *p;
- int isxml1 = FALSE;
- int is8bit = FALSE;
-
- p = (const unsigned char *)txt;
- while (*p) {
- if (p[0] == '\\' && p[1] == 'U' && p[2] == '+'
- && isxdigit(p[3]) && isxdigit(p[4]) && isxdigit(p[5]) && isxdigit(p[6])
- && p[7] == '\\') {
- isxml1 = TRUE;
- p+=7;
- } else if (p[0] >= 0x80)
- is8bit = TRUE;
- p++;
- }
-
- /* check for invalid utf8 that needs cleaning */
- if (is8bit && (!isxml1))
- isxml1 = !g_utf8_validate(txt, -1, NULL);
-
- return isxml1;
-}
-
-static char *
-decode_xml1(const char *txt)
-{
- GString *out = g_string_new("");
- const unsigned char *p;
- char *res;
-
- /* convert:
- \U+XXXX\ -> utf8
- 8 bit characters -> utf8 (iso-8859-1) */
-
- p = (const unsigned char *)txt;
- while (*p) {
- if (p[0] > 0x80
- || (p[0] == '\\' && p[1] == 'U' && p[2] == '+'
- && isxdigit(p[3]) && isxdigit(p[4]) && isxdigit(p[5]) && isxdigit(p[6])
- && p[7] == '\\')) {
- char utf8[8];
- gunichar u;
-
- if (p[0] == '\\') {
- memcpy(utf8, p+3, 4);
- utf8[4] = 0;
- u = strtoul(utf8, NULL, 16);
- p+=7;
- } else
- u = p[0];
- utf8[g_unichar_to_utf8(u, utf8)] = 0;
- g_string_append(out, utf8);
- } else {
- g_string_append_c(out, *p);
- }
- p++;
- }
-
- res = out->str;
- g_string_free(out, FALSE);
-
- return res;
-}
-
-static int
-upgrade_xml_1_2_rec(xmlNodePtr node)
-{
- const char *value_tags[] = { "string", "address", "regex", "file", "command", NULL };
- const char *rule_tags[] = { "title", NULL };
- const struct {
- char *name;
- const char **tags;
- } tags[] = {
- { "value", value_tags },
- { "rule", rule_tags },
- { 0 },
- };
- int changed = 0;
- xmlNodePtr work;
- int i,j;
- char *txt, *tmp;
-
- /* upgrades the content of a node, if the node has a specific parent/node name */
-
- for (i=0;tags[i].name;i++) {
- if (!strcmp(node->name, tags[i].name)) {
- work = node->children;
- while (work) {
- for (j=0;tags[i].tags[j];j++) {
- if (!strcmp(work->name, tags[i].tags[j])) {
- txt = xmlNodeGetContent(work);
- if (is_xml1encoded(txt)) {
- tmp = decode_xml1(txt);
- d(printf("upgrading xml node %s/%s '%s' -> '%s'\n", tags[i].name, tags[i].tags[j], txt, tmp));
- xmlNodeSetContent(work, tmp);
- changed = 1;
- g_free(tmp);
- }
- xmlFree(txt);
- }
- }
- work = work->next;
- }
- break;
- }
- }
-
- node = node->children;
- while (node) {
- changed |= upgrade_xml_1_2_rec(node);
- node = node->next;
- }
-
- return changed;
-}
-
-/* ********************************************************************** */
-
-static int upgrade_xml_file(const char *filename, int (*upgrade_rec)(xmlNodePtr root))
-{
- xmlDocPtr doc;
- char *savename;
- struct stat st;
- int res;
-
- /* FIXME: do something nicer with the errors */
-
- savename = alloca(strlen(filename)+64);
- sprintf(savename, "%s.save-%u.%u.%u", filename, major, minor, revision);
- if (stat(savename, &st) == 0) {
- fprintf(stderr, "xml file `%s' already upgraded\n", filename);
- return 0;
- }
-
- /* no file, no error */
- if (stat(filename, &st) == -1)
- return 0;
-
- doc = xmlParseFile (filename);
- if (!doc || !doc->xmlRootNode) {
- fprintf (stderr, "Failed to load %s\n", filename);
- return -1;
- }
-
- if (!upgrade_rec(doc->xmlRootNode)) {
- xmlFreeDoc(doc);
- printf("file %s contains nothing to upgrade\n", filename);
- return 0;
- }
-
- d(printf("backing up %s to %s\n", filename, savename));
-
- if (rename(filename, savename) == -1) {
- xmlFreeDoc(doc);
- fprintf(stderr, "could not rename '%s' to '%s': %s\n", filename, savename, strerror(errno));
- return -1;
- }
-
- res = xmlSaveFormatFile(filename, doc, 1);
-
- xmlFreeDoc(doc);
-
- return res;
-}
-
-/* ********************************************************************** */
-/* Tables for converting flat bonobo conf -> gconf xml blob */
-/* ********************************************************************** */
-
-/* for remapping bonobo-conf account data into the new xml blob format */
-/* These are used in build_xml, and order must match the lookup_table */
-enum _map_t {
- MAP_END = 0, /* end of line*/
- MAP_BOOL, /* bool -> prop of name 'to' value true or false */
- MAP_LONG, /* long -> prop of name 'to' value a long */
- MAP_STRING, /* string -> prop of name 'to' */
- MAP_ENUM, /* long/bool -> prop of name 'to', with the value indexed into the child map table's from field */
- MAP_CHILD, /* a new child of name 'to' */
- MAP_MASK = 0x3f,
- MAP_URI_UPGRADE = 0x40, /* if from 1.0.x, upgrade any uri's present */
- MAP_CONTENT = 0x80, /* if set, create a new node of name 'to' instead of a property */
-};
-
-struct _map_table {
- char *from;
- char *to;
- int type;
- struct _map_table *child;
-};
-
-/* Mail/Accounts/ * */
-struct _map_table cc_map[] = {
- { "account_always_cc_%i", "always", MAP_BOOL },
- { "account_always_cc_addrs_%i", "recipients", MAP_STRING|MAP_CONTENT },
- { NULL },
-};
-
-struct _map_table bcc_map[] = {
- { "account_always_cc_%i", "always", MAP_BOOL },
- { "account_always_bcc_addrs_%i", "recipients", MAP_STRING|MAP_CONTENT },
- { NULL },
-};
-
-struct _map_table pgp_map[] = {
- { "account_pgp_encrypt_to_self_%i", "encrypt-to-self", MAP_BOOL },
- { "account_pgp_always_trust_%i", "always-trust", MAP_BOOL },
- { "account_pgp_always_sign_%i", "always-sign", MAP_BOOL },
- { "account_pgp_no_imip_sign_%i", "no-imip-sign", MAP_BOOL },
- { "account_pgp_key_%i", "key-id", MAP_STRING|MAP_CONTENT },
- { NULL },
-};
-
-struct _map_table smime_map[] = {
- { "account_smime_encrypt_to_self_%i", "encrypt-to-self", MAP_BOOL },
- { "account_smime_always_sign_%i", "always-sign", MAP_BOOL },
- { "account_smime_key_%i", "key-id", MAP_STRING|MAP_CONTENT },
- { NULL },
-};
-
-struct _map_table identity_sig_map[] = {
- { "identity_autogenerated_signature_%i", "auto", MAP_BOOL },
- { "identity_def_signature_%i", "default", MAP_LONG },
- { NULL },
-};
-
-struct _map_table identity_map[] = {
- { "identity_name_%i", "name", MAP_STRING|MAP_CONTENT },
- { "identity_address_%i", "addr-spec", MAP_STRING|MAP_CONTENT },
- { "identity_reply_to_%i", "reply-to", MAP_STRING|MAP_CONTENT },
- { "identity_organization_%i", "organization", MAP_STRING|MAP_CONTENT },
- { NULL, "signature", MAP_CHILD, identity_sig_map },
- { NULL },
-};
-
-struct _map_table source_map[] = {
- { "source_save_passwd_%i", "save-passwd", MAP_BOOL },
- { "source_keep_on_server_%i", "keep-on-server", MAP_BOOL },
- { "source_auto_check_%i", "auto-check", MAP_BOOL },
- { "source_auto_check_time_%i", "auto-check-timeout", MAP_LONG },
- { "source_url_%i", "url", MAP_STRING|MAP_CONTENT },
- { NULL },
-};
-
-struct _map_table transport_map[] = {
- { "transport_save_passwd_%i", "save-passwd", MAP_BOOL },
- { "transport_url_%i", "url", MAP_STRING|MAP_CONTENT|MAP_URI_UPGRADE },
- { NULL },
-};
-
-struct _map_table account_map[] = {
- { "account_name_%i", "name", MAP_STRING },
- { "source_enabled_%i", "enabled", MAP_BOOL },
- { NULL, "identity", MAP_CHILD, identity_map },
- { NULL, "source", MAP_CHILD, source_map },
- { NULL, "transport", MAP_CHILD, transport_map },
- { "account_drafts_folder_uri_%i", "drafts-folder", MAP_STRING|MAP_CONTENT|MAP_URI_UPGRADE },
- { "account_sent_folder_uri_%i", "sent-folder", MAP_STRING|MAP_CONTENT|MAP_URI_UPGRADE },
- { NULL, "auto-cc", MAP_CHILD, cc_map },
- { NULL, "auto-bcc", MAP_CHILD, bcc_map },
- { NULL, "pgp", MAP_CHILD, pgp_map },
- { NULL, "smime", MAP_CHILD, smime_map },
- { NULL },
-};
-
-/* /Mail/Signatures/ * */
-struct _map_table signature_format_map[] = {
- { "text/plain", },
- { "text/html", },
- { NULL }
-};
-
-struct _map_table signature_map[] = {
- { "name_%i", "name", MAP_STRING },
- { "html_%i", "format", MAP_ENUM, signature_format_map },
- { "filename_%i", "filename", MAP_STRING|MAP_CONTENT },
- { "script_%i", "script", MAP_STRING|MAP_CONTENT },
- { NULL },
-};
-
-
-static char *get_name(const char *in, int index)
-{
- char c, *res;
- GString *out = g_string_new("");
-
- while ( (c = *in++) ) {
- if (c == '%') {
- c = *in++;
- switch(c) {
- case '%':
- g_string_append_c(out, '%');
- break;
- case 'i':
- g_string_append_printf(out, "%d", index);
- break;
- }
- } else {
- g_string_append_c(out, c);
- }
- }
-
- res = out->str;
- g_string_free(out, FALSE);
-
- return res;
-}
-
-static xmlNodePtr lookup_bconf_entry(xmlNodePtr source, const char *name)
-{
- xmlNodePtr node = source->children;
- int found;
- char *val;
-
- while (node) {
- if (!strcmp(node->name, "entry")) {
- val = xmlGetProp(node, "name");
- found = val && strcmp(val, name) == 0;
- xmlFree(val);
- if (found)
- break;
- }
- node = node->next;
- }
-
- return node;
-}
-
-static char *lookup_bconf_value(xmlNodePtr source, const char *name)
-{
- xmlNodePtr node = lookup_bconf_entry(source, name);
-
- if (node)
- return xmlGetProp(node, "value");
- else
- return NULL;
-}
-
-static xmlNodePtr lookup_bconf_path(xmlDocPtr doc, const char *path)
-{
- xmlNodePtr root;
- char *val;
- int found;
-
- root = doc->children;
- if (strcmp(root->name, "bonobo-config") != 0) {
- g_warning("not bonobo-config xml file\n");
- return NULL;
- }
-
- root = root->children;
- while (root) {
- if (!strcmp(root->name, "section")) {
- val = xmlGetProp(root, "path");
- found = val && strcmp(val, path) == 0;
- xmlFree(val);
- if (found)
- break;
- }
- root = root->next;
- }
-
- return root;
-}
-
-
-static char *lookup_bool(xmlNodePtr source, const char *name, struct _map_table *map)
-{
- char *val, *res;
-
- val = lookup_bconf_value(source, name);
- if (val) {
- res = g_strdup(val[0] == '1'?"true":"false");
- xmlFree(val);
- } else
- res = NULL;
-
- return res;
-}
-
-static char *lookup_long(xmlNodePtr source, const char *name, struct _map_table *map)
-{
- char *val, *res;
-
- val = lookup_bconf_value(source, name);
- if (val) {
- res = g_strdup(val);
- xmlFree(val);
- } else
- res = NULL;
-
- return res;
-}
-
-static char *lookup_string(xmlNodePtr source, const char *name, struct _map_table *map)
-{
- char *val, *res;
-
- val = lookup_bconf_value(source, name);
- if (val) {
- res = hex_decode(val);
- xmlFree(val);
- } else
- res = NULL;
-
- return res;
-}
-
-static char *lookup_enum(xmlNodePtr source, const char *name, struct _map_table *map)
-{
- char *val;
- int index = 0, i;
-
- val = lookup_bconf_value(source, name);
- if (val) {
- index = atoi(val);
- xmlFree(val);
- }
-
- for (i=0;map->child[i].from;i++)
- if (i == index)
- return g_strdup(map->child[i].from);
-
- return NULL;
-}
-
-typedef char * (*lookup_func) (xmlNodePtr, const char *, struct _map_table *);
-
-static void
-build_xml(xmlNodePtr root, struct _map_table *map, int index, xmlNodePtr source)
-{
- char *name, *value;
- xmlNodePtr node;
- lookup_func lookup_table[] = { lookup_bool, lookup_long, lookup_string, lookup_enum };
-
- while (map->type != MAP_END) {
- if ((map->type & MAP_MASK) == MAP_CHILD) {
- node = xmlNewChild(root, NULL, map->to, NULL);
- build_xml(node, map->child, index, source);
- } else {
- name = get_name(map->from, index);
- value = lookup_table[(map->type&MAP_MASK)-1](source, name, map);
-
- d(printf("key '%s=%s' -> ", name, value));
-
- if (map->type & MAP_URI_UPGRADE) {
- char *tmp = value;
-
- value = upgrade_uri(tmp);
- if (value)
- g_free(tmp);
- else
- value = tmp;
- }
-
- d(printf("'%s=%s'\n", map->to, value));
-
- if (map->type & MAP_CONTENT) {
- if (value && value[0])
- xmlNewTextChild(root, NULL, map->to, value);
- } else {
- xmlSetProp(root, map->to, value);
- }
- g_free(value);
- g_free(name);
- }
- map++;
- }
-}
-
-static int convert_xml_blob(GConfClient *gconf, xmlDocPtr doc, struct _map_table *map, const char *path, const char *outpath, const char *name, const char *idparam)
-{
- xmlNodePtr source;
- int count = 0, i;
- GSList *list, *l;
- char *val;
-
- source = lookup_bconf_path(doc, path);
- if (source) {
- list = NULL;
- val = lookup_bconf_value(source, "num");
- if (val) {
- count = atoi(val);
- xmlFree(val);
- }
-
- d(printf("Found %d blobs at %s\n", count, path));
-
- for (i = 0; i<count;i++) {
- xmlDocPtr docout;
- xmlChar *xmlbuf;
- int n;
- xmlNodePtr root;
-
- docout = xmlNewDoc ("1.0");
- root = xmlNewDocNode (docout, NULL, name, NULL);
- xmlDocSetRootElement (docout, root);
-
- /* This could be set with a MAP_UID type ... */
- if (idparam) {
- char buf[16];
-
- sprintf(buf, "%d", i);
- xmlSetProp(root, idparam, buf);
- }
-
- build_xml(root, map, i, source);
-
- xmlDocDumpMemory (docout, &xmlbuf, &n);
- xmlFreeDoc (docout);
-
- list = g_slist_append(list, xmlbuf);
- }
-
- gconf_client_set_list(gconf, outpath, GCONF_VALUE_STRING, list, NULL);
- while (list) {
- l = list->next;
- xmlFree(list->data);
- g_slist_free_1(list);
- list = l;
- }
- } else {
- g_warning("could not find '%s' in old config database, skipping", path);
- }
-
- return 0;
-}
-
-/* ********************************************************************** */
-/* Tables for bonobo conf -> gconf conversion */
-/* ********************************************************************** */
-
-/* order important here, used to index a few tables below */
-enum {
- BMAP_BOOL,
- BMAP_BOOLNOT,
- BMAP_INT,
- BMAP_STRING,
- BMAP_SIMPLESTRING, /* a non-encoded string */
- BMAP_COLOUR,
- BMAP_FLOAT, /* bloody floats, who uses floats ... idiots */
- BMAP_STRLIST, /* strings separated to !<-->! -> gconf list */
- BMAP_ANYLIST, /* corba sequence corba string -> gconf list */
- BMAP_MASK = 0x7f,
- BMAP_LIST = 0x80 /* from includes a %i field for the index of the key, to be converted to a list of type BMAP_* */
-};
-
-struct _gconf_map {
- char *from;
- char *to;
- int type;
-};
-
-/* ********************************************************************** */
-
-static struct _gconf_map mail_accounts_map[] = {
- /* /Mail/Accounts - most entries are processed via the xml blob routine */
- /* This also works because the initial uid mapping is 1:1 with the list order */
- { "default_account", "mail/default_account", BMAP_SIMPLESTRING },
- { 0 },
-};
-
-static struct _gconf_map mail_display_map[] = {
- /* /Mail/Display */
- { "thread_list", "mail/display/thread_list", BMAP_BOOL },
- { "thread_subject", "mail/display/thread_subject", BMAP_BOOL },
- { "hide_deleted", "mail/display/show_deleted", BMAP_BOOLNOT },
- { "preview_pane", "mail/display/show_preview", BMAP_BOOL },
- { "paned_size", "mail/display/paned_size", BMAP_INT },
- { "seen_timeout", "mail/display/mark_seen_timeout", BMAP_INT },
- { "do_seen_timeout", "mail/display/mark_seen", BMAP_BOOL },
- { "http_images", "mail/display/load_http_images", BMAP_INT },
- { "citation_highlight", "mail/display/mark_citations", BMAP_BOOL },
- { "citation_color", "mail/display/citation_colour", BMAP_COLOUR },
- { "x_mailer_display_style", "mail/display/xmailer_mask", BMAP_INT },
- { 0 },
-};
-
-static struct _gconf_map mail_format_map[] = {
- /* /Mail/Format */
- { "message_display_style", "mail/display/message_style", BMAP_INT },
- { "send_html", "mail/composer/send_html", BMAP_BOOL },
- { "default_reply_style", "mail/format/reply_style", BMAP_INT },
- { "default_forward_style", "mail/format/forward_style", BMAP_INT },
- { "default_charset", "mail/composer/charset", BMAP_STRING },
- { "confirm_unwanted_html", "mail/prompts/unwanted_html", BMAP_BOOL },
- { 0 },
-};
-
-static struct _gconf_map mail_trash_map[] = {
- /* /Mail/Trash */
- { "empty_on_exit", "mail/trash/empty_on_exit", BMAP_BOOL },
- { 0 },
-};
-
-static struct _gconf_map mail_prompts_map[] = {
- /* /Mail/Prompts */
- { "confirm_expunge", "mail/prompts/expunge", BMAP_BOOL },
- { "empty_subject", "mail/prompts/empty_subject", BMAP_BOOL },
- { "only_bcc", "mail/prompts/only_bcc", BMAP_BOOL },
- { 0 }
-};
-
-static struct _gconf_map mail_filters_map[] = {
- /* /Mail/Filters */
- { "log", "mail/filters/log", BMAP_BOOL },
- { "log_path", "mail/filters/logfile", BMAP_STRING },
- { 0 }
-};
-
-static struct _gconf_map mail_notify_map[] = {
- /* /Mail/Notify */
- { "new_mail_notification", "mail/notify/type", BMAP_INT },
- { "new_mail_notification_sound_file", "mail/notify/sound", BMAP_STRING },
- { 0 }
-};
-
-static struct _gconf_map mail_filesel_map[] = {
- /* /Mail/Filesel */
- { "last_filesel_dir", "mail/save_dir", BMAP_STRING },
- { 0 }
-};
-
-static struct _gconf_map mail_composer_map[] = {
- /* /Mail/Composer */
- { "ViewFrom", "mail/composer/view/From", BMAP_BOOL },
- { "ViewReplyTo", "mail/composer/view/ReplyTo", BMAP_BOOL },
- { "ViewCC", "mail/composer/view/Cc", BMAP_BOOL },
- { "ViewBCC", "mail/composer/view/Bcc", BMAP_BOOL },
- { "ViewSubject", "mail/composer/view/Subject", BMAP_BOOL },
- { 0 },
-};
-
-/* ********************************************************************** */
-
-static struct _gconf_map importer_elm_map[] = {
- /* /Importer/Elm */
- { "mail", "importer/elm/mail", BMAP_BOOL },
- { "mail-imported", "importer/elm/mail-imported", BMAP_BOOL },
- { 0 },
-};
-
-static struct _gconf_map importer_pine_map[] = {
- /* /Importer/Pine */
- { "mail", "importer/elm/mail", BMAP_BOOL },
- { "address", "importer/elm/address", BMAP_BOOL },
- { 0 },
-};
-
-static struct _gconf_map importer_netscape_map[] = {
- /* /Importer/Netscape */
- { "mail", "importer/netscape/mail", BMAP_BOOL },
- { "settings", "importer/netscape/settings", BMAP_BOOL },
- { "filters", "importer/netscape/filters", BMAP_BOOL },
- { 0 },
-};
-
-/* ********************************************************************** */
-
-static struct _gconf_map myev_mail_map[] = {
- /* /My-Evolution/Mail */
- { "show_full_path", "summary/mail/show_full_paths", BMAP_BOOL },
- { 0 },
-};
-
-static struct _gconf_map myev_rdf_map[] = {
- /* /My-Evolution/RDF */
- { "rdf_urls", "summary/rdf/uris", BMAP_STRLIST },
- { "rdf_refresh_time", "summary/rdf/refresh_time", BMAP_INT },
- { "limit", "summary/rdf/max_items", BMAP_INT },
- { 0 },
-};
-
-static struct _gconf_map myev_weather_map[] = {
- /* /My-Evolution/Weather */
- { "stations", "summary/weather/stations", BMAP_STRLIST },
- { "units", "summary/weather/use_metric", BMAP_BOOL }, /* this is use_metric bool in 1.3? */
- { "weather_refresh_time", "summary/weather/refresh_time", BMAP_INT },
- { 0 },
-};
-
-static struct _gconf_map myev_schedule_map[] = {
- /* /My-Evolution/Shedule */
- { "show_tasks", "summary/tasks/show_all", BMAP_BOOL }, /* this is show_all bool in 1.3? */
- { 0 },
-};
-
-/* ********************************************************************** */
-
-/* This grabs the defaults from the first view ... (?) */
-static struct _gconf_map shell_views_map[] = {
- /* /Shell/Views/0 */
- { "Width", "shell/view_defaults/width", BMAP_INT },
- { "Height", "shell/view_defaults/height", BMAP_INT },
- { "CurrentShortcutsGroupNum", "shell/view_defaults/selected_shortcut_group", BMAP_INT },
- { "FolderBarShown", "shell/view_defaults/show_folder_bar", BMAP_BOOL },
- { "ShortcutBarShown", "shell/view_defaults/show_shortcut_bar", BMAP_BOOL },
- { "HPanedPosition", "shell/view_defaults/shortcut_bar/width", BMAP_INT },
- { "ViewPanedPosition", "shell/view_defaults/folder_bar/width", BMAP_INT },
- { "DisplayedURI", "shell/view_defaults/folder_path", BMAP_STRING },
- { 0 },
-};
-
-static struct _gconf_map offlinefolders_map[] = {
- /* /OfflineFolders */
- { "paths", "shell/offline/folder_paths", BMAP_ANYLIST },
- { 0 },
-};
-
-static struct _gconf_map defaultfolders_map[] = {
- /* /DefaultFolders */
- { "mail_path", "shell/default_folders/mail_path", BMAP_STRING },
- { "mail_uri", "shell/default_folders/mail_uri", BMAP_STRING },
- { "contacts_path", "shell/default_folders/contacts_path", BMAP_STRING },
- { "contacts_uri", "shell/default_folders/contacts_uri", BMAP_STRING },
- { "calendar_path", "shell/default_folders/calendar_path", BMAP_STRING },
- { "calendar_uri", "shell/default_folders/calendar_uri", BMAP_STRING },
- { "tasks_path", "shell/default_folders/tasks_path", BMAP_STRING },
- { "tasks_uri", "shell/default_folders/tasks_uri", BMAP_STRING },
- { 0 },
-};
-
-static struct _gconf_map shell_map[] = {
- /* /Shell */
- { "StartOffline", "shell/start_offline", BMAP_BOOL },
- { 0 },
-};
-
-/* ********************************************************************** */
-
-static struct _gconf_map addressbook_map[] = {
- /* /Addressbook */
- { "select_names_uri", "addressbook/select_names/last_used_uri", BMAP_STRING },
- { 0 },
-};
-
-static struct _gconf_map addressbook_completion_map[] = {
- /* /Addressbook/Completion */
- { "uris", "addressbook/completion/uris", BMAP_STRING },
- { 0 },
-};
-
-/* ********************************************************************** */
-
-static struct _gconf_map calendar_display_map[] = {
- /* /Calendar/Display */
- { "Timezone", "calendar/display/timezone", BMAP_STRING },
- { "Use24HourFormat", "calendar/display/use_24hour_format", BMAP_BOOL },
- { "WeekStartDay", "calendar/display/week_start_day", BMAP_INT },
- { "DayStartHour", "calendar/display/day_start_hour", BMAP_INT },
- { "DayStartMinute", "calendar/display/day_start_minute", BMAP_INT },
- { "DayEndHour", "calendar/display/day_end_hour", BMAP_INT },
- { "DayEndMinute", "calendar/display/day_end_minute", BMAP_INT },
- { "TimeDivisions", "calendar/display/time_divisions", BMAP_INT },
- { "View", "calendar/display/default_view", BMAP_INT },
- { "HPanePosition", "calendar/display/hpane_position", BMAP_FLOAT },
- { "VPanePosition", "calendar/display/vpane_position", BMAP_FLOAT },
- { "MonthHPanePosition", "calendar/display/month_hpane_position", BMAP_FLOAT },
- { "MonthVPanePosition", "calendar/display/month_vpane_position", BMAP_FLOAT },
- { "CompressWeekend", "calendar/display/compress_weekend", BMAP_BOOL },
- { "ShowEventEndTime", "calendar/display/show_event_end", BMAP_BOOL },
- { "WorkingDays", "calendar/display/working_days", BMAP_INT },
- { 0 },
-};
-
-static struct _gconf_map calendar_tasks_map[] = {
- /* /Calendar/Tasks */
- { "HideCompletedTasks", "calendar/tasks/hide_completed", BMAP_BOOL },
- { "HideCompletedTasksUnits", "calendar/tasks/hide_completed_units", BMAP_STRING },
- { "HideCompletedTasksValue", "calendar/tasks/hide_completed_value", BMAP_INT },
- { 0 },
-};
-
-static struct _gconf_map calendar_tasks_colours_map[] = {
- /* /Calendar/Tasks/Colors */
- { "TasksDueToday", "calendar/tasks/colors/due_today", BMAP_STRING },
- { "TasksOverDue", "calendar/tasks/colors/overdue", BMAP_STRING },
- { "TasksDueToday", "calendar/tasks/colors/due_today", BMAP_STRING },
- { 0 },
-};
-
-static struct _gconf_map calendar_other_map[] = {
- /* /Calendar/Other */
- { "ConfirmDelete", "calendar/prompts/confirm_delete", BMAP_BOOL },
- { "ConfirmExpunge", "calendar/prompts/confirm_expunge", BMAP_BOOL },
- { "UseDefaultReminder", "calendar/other/use_default_reminder", BMAP_BOOL },
- { "DefaultReminderInterval", "calendar/other/default_reminder_interval", BMAP_INT },
- { "DefaultReminderUnits", "calendar/other/default_reminder_units", BMAP_STRING },
- { 0 },
-};
-
-static struct _gconf_map calendar_datenavigator_map[] = {
- /* /Calendar/DateNavigator */
- { "ShowWeekNumbers", "calendar/date_navigator/show_week_numbers", BMAP_BOOL },
- { 0 },
-};
-
-static struct _gconf_map calendar_alarmnotify_map[] = {
- /* /Calendar/AlarmNotify */
- { "LastNotificationTime", "calendar/notify/last_notification_time", BMAP_INT },
- { "CalendarToLoad%i", "calendar/notify/calendars", BMAP_STRING|BMAP_LIST },
- { "BlessedProgram%i", "calendar/notify/programs", BMAP_STRING|BMAP_LIST },
- { 0 },
-};
-
-/* ********************************************************************** */
-
-static struct {
- char *root;
- struct _gconf_map *map;
-} gconf_remap_list[] = {
- { "/Mail/Accounts", mail_accounts_map },
- { "/Mail/Display", mail_display_map },
- { "/Mail/Format", mail_format_map },
- { "/Mail/Trash", mail_trash_map },
- { "/Mail/Prompts", mail_prompts_map },
- { "/Mail/Filters", mail_filters_map },
- { "/Mail/Notify", mail_notify_map },
- { "/Mail/Filesel", mail_filesel_map },
- { "/Mail/Composer", mail_composer_map },
-
- { "/Importer/Elm", importer_elm_map },
- { "/Importer/Pine", importer_pine_map },
- { "/Importer/Netscape", importer_netscape_map },
-
- { "My-Evolution/Mail", myev_mail_map },
- { "My-Evolution/RDF", myev_rdf_map },
- { "My-Evolution/Weather", myev_weather_map },
- { "My-Evolution/Schedule", myev_schedule_map },
-
- { "/Shell", shell_map },
- { "/Shell/Views/0", shell_views_map },
- { "/OfflineFolders", offlinefolders_map },
- { "/DefaultFolders", defaultfolders_map },
-
- { "/Addressbook", addressbook_map },
- { "/Addressbook/Completion", addressbook_completion_map },
-
- { "/Calendar/Display", calendar_display_map },
- { "/Calendar/Tasks", calendar_tasks_map },
- { "/Calendar/Tasks/Colors", calendar_tasks_colours_map },
- { "/Calendar/Other/Map", calendar_other_map },
- { "/Calendar/DateNavigator", calendar_datenavigator_map },
- { "/Calendar/AlarmNotify", calendar_alarmnotify_map },
-
- { 0 },
-};
-
-#define N_(x) x
-
-struct {
- char *label;
- char *colour;
-} label_default[5] = {
- { N_("Important"), "#ff0000" }, /* red */
- { N_("Work"), "#ff8c00" }, /* orange */
- { N_("Personal"), "#008b00" }, /* forest green */
- { N_("To Do"), "#0000ff" }, /* blue */
- { N_("Later"), "#8b008b" } /* magenta */
-};
-
-/* remaps mail config from bconf to gconf */
-static int import_bonobo_config(xmlDocPtr config_doc, GConfClient *gconf)
-{
- xmlNodePtr source;
- int i, j, k;
- struct _gconf_map *map;
- char *path, *val, *tmp;
- GSList *list, *l;
- char buf[32];
-
- /* process all flat config */
- for (i=0;gconf_remap_list[i].root;i++) {
- d(printf("Path: %s\n", gconf_remap_list[i].root));
- source = lookup_bconf_path(config_doc, gconf_remap_list[i].root);
- if (source == NULL)
- continue;
- map = gconf_remap_list[i].map;
- for (j=0;map[j].from;j++) {
- if (map[j].type & BMAP_LIST) {
- /* collapse a multi-entry indexed field into a list */
- list = NULL;
- k = 0;
- do {
- path = get_name(map[j].from, k);
- val = lookup_bconf_value(source, path);
- d(printf("finding path '%s' = '%s'\n", path, val));
- g_free(path);
- if (val) {
- switch(map[j].type & BMAP_MASK) {
- case BMAP_BOOL:
- case BMAP_INT:
- list = g_slist_append(list, GINT_TO_POINTER(atoi(val)));
- break;
- case BMAP_STRING:
- d(printf(" -> '%s'\n", hex_decode(val)));
- list = g_slist_append(list, hex_decode(val));
- break;
- }
- xmlFree(val);
- k++;
- }
- } while (val);
-
- if (list) {
- const int gconf_type[] = { GCONF_VALUE_BOOL, GCONF_VALUE_BOOL, GCONF_VALUE_INT, GCONF_VALUE_STRING, GCONF_VALUE_STRING };
-
- path = g_strdup_printf("/apps/evolution/%s", map[j].to);
- gconf_client_set_list(gconf, path, gconf_type[map[j].type & BMAP_MASK], list, NULL);
- g_free(path);
- if ((map[j].type & BMAP_MASK) == BMAP_STRING)
- g_slist_foreach(list, (GFunc)g_free, NULL);
- g_slist_free(list);
- }
-
- continue;
- } else if (map[j].type == BMAP_ANYLIST)
- val = NULL;
- else {
- val = lookup_bconf_value(source, map[j].from);
- if (val == NULL)
- continue;
- }
- d(printf(" %s = '%s' -> %s [%d]\n",
- map[j].from,
- val == NULL ? "(null)" : val,
- map[j].to,
- map[j].type));
- path = g_strdup_printf("/apps/evolution/%s", map[j].to);
- switch(map[j].type) {
- case BMAP_BOOL:
- gconf_client_set_bool(gconf, path, atoi(val), NULL);
- break;
- case BMAP_BOOLNOT:
- gconf_client_set_bool(gconf, path, !atoi(val), NULL);
- break;
- case BMAP_INT:
- gconf_client_set_int(gconf, path, atoi(val), NULL);
- break;
- case BMAP_STRING:
- tmp = hex_decode(val);
- gconf_client_set_string(gconf, path, tmp, NULL);
- g_free(tmp);
- break;
- case BMAP_SIMPLESTRING:
- gconf_client_set_string(gconf, path, val, NULL);
- break;
- case BMAP_FLOAT:
- gconf_client_set_float(gconf, path, strtod(val, NULL), NULL);
- break;
- case BMAP_STRLIST:{
- char *v = hex_decode(val);
- char **t = g_strsplit (v, " !<-->! ", 8196);
-
- list = NULL;
- for (k=0;t[k];k++) {
- list = g_slist_append(list, t[k]);
- d(printf(" [%d] = '%s'\n", k, t[k]));
- }
- gconf_client_set_list(gconf, path, GCONF_VALUE_STRING, list, NULL);
- g_slist_free(list);
- g_strfreev(t);
- g_free(v);
- break;}
- case BMAP_ANYLIST:{
- xmlNodePtr node = source->children;
- list = NULL;
-
- /* find the entry node */
- while (node) {
- if (!strcmp(node->name, "entry")) {
- int found;
-
- tmp = xmlGetProp(node, "name");
- if (tmp) {
- found = strcmp(tmp, map[j].from) == 0;
- xmlFree(tmp);
- if (found)
- break;
- }
- }
- node = node->next;
- }
-
- /* find the the any block */
- if (node) {
- node = node->children;
- while (node) {
- if (strcmp(node->name, "any") == 0)
- break;
- node = node->next;
- }
- }
-
- /* skip to the value inside it */
- if (node) {
- node = node->children;
- while (node) {
- if (strcmp(node->name, "value") == 0)
- break;
- node = node->next;
- }
- }
-
- if (node) {
- node = node->children;
- while (node) {
- if (strcmp(node->name, "value") == 0)
- list = g_slist_append(list, xmlNodeGetContent(node));
- node = node->next;
- }
- }
-
- /* & store */
- if (list) {
- gconf_client_set_list(gconf, path, GCONF_VALUE_STRING, list, NULL);
- while (list) {
- l = list->next;
- xmlFree(list->data);
- g_slist_free_1(list);
- list = l;
- }
- }
-
- break;}
- case BMAP_COLOUR:
- sprintf(buf, "#%06x", atoi(val) & 0xffffff);
- gconf_client_set_string(gconf, path, buf, NULL);
- break;
- }
- /* FIXME: handle errors */
- g_free(path);
- xmlFree(val);
- }
- }
-
- /* Labels:
- label string + label colour as integer
- -> label string:# colour as hex */
- source = lookup_bconf_path(config_doc, "/Mail/Labels");
- if (source) {
- list = NULL;
- for (i=0;i<5;i++) {
- char labx[16], colx[16];
- char *lab, *col;
-
- sprintf(labx, "label_%d", i);
- sprintf(colx, "color_%d", i);
- lab = lookup_string(source, labx, NULL);
- col = lookup_bconf_value(source, colx);
- if (col) {
- sprintf(colx, "#%06x", atoi(col) & 0xffffff);
- xmlFree(col);
- } else
- strcpy(colx, label_default[i].colour);
- val = g_strdup_printf("%s:%s", lab?lab:label_default[i].label, colx);
- list = g_slist_append(list, val);
- g_free(lab);
- }
-
- gconf_client_set_list(gconf, "/apps/evolution/mail/labels", GCONF_VALUE_STRING, list, NULL);
- while (list) {
- l = list->next;
- g_free(list->data);
- g_slist_free_1(list);
- list = l;
- }
- } else {
- g_warning("could not find /Mail/Labels in old config database, skipping");
- }
-
- /* Accounts: The flat bonobo-config structure is remapped to a list of xml blobs. Upgrades as necessary */
- convert_xml_blob(gconf, config_doc, account_map, "/Mail/Accounts", "/apps/evolution/mail/accounts", "account", "uid");
- /* Same for signatures */
- convert_xml_blob(gconf, config_doc, signature_map, "/Mail/Signatures", "/apps/evolution/mail/signatures", "signature", NULL);
-
- /* My-Evolution folder lists */
- source = lookup_bconf_path(config_doc, "My-Evolution/Mail");
- if (source) {
- char **t;
-
- list = NULL;
- l = NULL;
-
- val = lookup_string(source, "display_folders-1.2", NULL);
- /* FIXME: what needs upgrading here? Anything? */
- if (val == NULL)
- val = lookup_string(source, "display_folders", NULL);
-
- if (val) {
- t = g_strsplit (val, " !<-->! ", 8196);
- for (i=0;t[i] && t[i+1];i+=2) {
- list = g_slist_append(list, t[i]);
- l = g_slist_append(l, t[i+1]);
- d(printf(" [%d] = euri: '%s', puri: '%s'\n", i, t[i], t[i+1]));
- }
- if (list) {
- gconf_client_set_list(gconf, "/apps/evolution/summary/mail/folder_evolution_uris", GCONF_VALUE_STRING, list, NULL);
- g_slist_free(list);
- }
- if (l) {
- gconf_client_set_list(gconf, "/apps/evolution/summary/mail/folder_physical_uris", GCONF_VALUE_STRING, l, NULL);
- g_slist_free(l);
- }
- g_strfreev(t);
- }
- }
-
- return 0;
-}
-
-
-static int load_accounts_1_0(xmlDocPtr doc)
-{
- xmlNodePtr source;
- char *val, *tmp;
- int count = 0, i;
- char key[32];
-
- source = lookup_bconf_path(doc, "/Mail/Accounts");
- if (source == NULL)
- return 0;
-
- val = lookup_bconf_value(source, "num");
- if (val) {
- count = atoi(val);
- xmlFree(val);
- }
-
- /* load account upgrade info for each account */
- for (i=0;i<count;i++) {
- struct _account_info *ai;
- char *rawuri;
-
- sprintf(key, "source_url_%d", i);
- rawuri = lookup_bconf_value(source, key);
- if (rawuri == NULL)
- continue;
- ai = g_malloc0(sizeof(*ai));
- ai->uri = hex_decode(rawuri);
- ai->base_uri = get_base_uri(ai->uri);
- sprintf(key, "account_name_%d", i);
- ai->name = lookup_string(source, key, NULL);
-
- d(printf("load account '%s'\n", ai->uri));
-
- if (!strncmp(ai->uri, "imap:", 5)) {
- read_imap_storeinfo(ai);
- } else if (!strncmp(ai->uri, "exchange:", 9)) {
- xmlNodePtr node;
-
- d(printf(" upgrade exchange account\n"));
- /* small hack, poke the source_url into the transport_url for exchanget: transports
- - this will be picked up later in the conversion */
- sprintf(key, "transport_url_%d", i);
- node = lookup_bconf_entry(source, key);
- if (node
- && (val = xmlGetProp(node, "value"))) {
- tmp = hex_decode(val);
- xmlFree(val);
- if (strncmp(tmp, "exchanget:", 10) == 0)
- xmlSetProp(node, "value", rawuri);
- g_free(tmp);
- } else {
- d(printf(" couldn't find transport uri?\n"));
- }
- }
- xmlFree(rawuri);
-
- g_hash_table_insert(accounts_1_0, ai->base_uri, ai);
- if (ai->name)
- g_hash_table_insert(accounts_name_1_0, ai->name, ai);
- }
-
- return 0;
-}
-
-/**
- * e_config_upgrade:
- * @edir:
- *
- * Upgrade evolution configuration from prior versions of evolution to
- * the current one.
- *
- * No work is performed if the configuration version is up to date.
- *
- * The tracked version is upgraded to the latest even if no
- * configuration upgrades are required for that version.
- *
- * Further information about how this is intended to work:
- *
- * There are 3 basic steps, numbered in the comments below.
- * 1. Determine the current config verison
- * 2. Upgrade to the current source version
- * 3. Save the version number, as defined by CONF_MAJOR, CONF_MINOR,
- * CONF_REVISION. These are all treated as integers, so 10 is
- * greater than 9.
- *
- * 1 and 3 should not need changing. After an upgrade to 1.3.x and
- * until the config system changes again (!), step one becomes
- * trivial. Any changes to part 2 should be added to the end of the
- * section, or as required. This allows for very fine-grained version
- * upgrades, including pre-release and patch-level changes to fix
- * config problems which may have lasted for a single version or
- * patch, in which case CONF_REVISION can be bumped.
- *
- * At any time, the CONF_VERSION/MAJOR/REVISION can be increased to
- * match the source release, even if no new configuration changes will
- * be required from the previous version. This should be done at each
- * release in case bugs in that configuration version are required to
- * be fixed at any time in the future.
- *
- * Return value: -1 on an error.
- **/
-int
-e_config_upgrade(const char *edir)
-{
- xmlNodePtr source;
- xmlDocPtr config_doc = NULL;
- int i;
- char *val, *tmp;
- GConfClient *gconf;
- int res = -1;
- struct stat st;
-
- evolution_dir = edir;
-
- /* 1. determine existing version */
- gconf = gconf_client_get_default();
- val = gconf_client_get_string(gconf, "/apps/evolution/version", NULL);
- if (val) {
- sscanf(val, "%u.%u.%u", &major, &minor, &revision);
- g_free(val);
- } else {
- char *filename = g_build_filename(evolution_dir, "config.xmldb", NULL);
-
- if (lstat(filename, &st) == 0
- && S_ISREG(st.st_mode))
- config_doc = xmlParseFile (filename);
- g_free(filename);
-
- tmp = NULL;
- if ( config_doc
- && (source = lookup_bconf_path(config_doc, "/Shell"))
- && (tmp = lookup_bconf_value(source, "upgrade_from_1_0_to_1_2_performed"))
- && tmp[0] == '1' ) {
- major = 1;
- minor = 2;
- revision = 0;
- } else {
- major = 1;
- minor = 0;
- revision = 0;
- }
- if (tmp)
- xmlFree(tmp);
- }
-
- /* 2. Now perform any upgrade duties */
-
- d(printf("current config version is '%u.%u.%u'\n", major, minor, revision));
-
- /* For 1.0.x we need to load the accounts first, as data it initialises is used elsewhere */
- if (major <=1 && minor < 2) {
- char *xml_files[] = { "vfolders.xml", "filters.xml", "shortcuts.xml" };
-
- /* load in 1.0 info */
- if (config_doc) {
- accounts_1_0 = g_hash_table_new(g_str_hash, g_str_equal);
- accounts_name_1_0 = g_hash_table_new(g_str_hash, g_str_equal);
- load_accounts_1_0(config_doc);
- }
-
- /* upgrade xml uri fields */
- for (i=0;i<sizeof(xml_files)/sizeof(xml_files[0]);i++) {
- char *path;
-
- path = g_build_filename(evolution_dir, xml_files[i], NULL);
- if (upgrade_xml_file(path, upgrade_xml_1_0_rec) == -1)
- g_warning("Could not upgrade xml file %s", xml_files[i]);
-
- g_free(path);
- }
- }
-
- if (config_doc && major <=1 && minor < 3) {
- /* move bonobo config to gconf */
- if (import_bonobo_config(config_doc, gconf) == -1) {
- g_warning("Could not move config from bonobo-conf to gconf");
- goto error;
- }
- }
-
- if (major <=1 && minor <=3 && revision < 1) {
- /* check for xml 1 encoding from version 1.2 upgrade or from a previous previous 1.3.0 upgrade */
- char *xml_files[] = { "vfolders.xml", "filters.xml" };
-
- d(printf("Checking for xml1 format xml files\n"));
-
- for (i=0;i<sizeof(xml_files)/sizeof(xml_files[0]);i++) {
- char *path;
-
- path = g_build_filename(evolution_dir, xml_files[i], NULL);
- if (upgrade_xml_file(path, upgrade_xml_1_2_rec) == -1)
- g_warning("Could not upgrade xml file %s", xml_files[i]);
-
- g_free(path);
- }
- }
-
- /* 3. we're done, update our version info if its changed */
- if (major < CONF_MAJOR
- || minor < CONF_MINOR
- || revision < CONF_REVISION) {
- val = g_strdup_printf("%u.%u.%u", CONF_MAJOR, CONF_MINOR, CONF_REVISION);
- gconf_client_set_string(gconf, "/apps/evolution/version", val, NULL);
- /* TODO: should this be translatable? */
- g_message("Evolution configuration upgraded to version: %s", val);
- g_free(val);
- gconf_client_suggest_sync(gconf, NULL);
- }
-
- res = 0;
-
-error:
- if (config_doc)
- xmlFreeDoc(config_doc);
-
- return res;
-}
diff --git a/shell/e-config-upgrade.h b/shell/e-config-upgrade.h
deleted file mode 100644
index c012e30526..0000000000
--- a/shell/e-config-upgrade.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-config-upgrade.h
- *
- * Copyright (C) 2003 Ximian, Inc.
- *
- * Author: Michael Zucchi <notzed@ximian.com>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#ifndef _E_CONFIG_UPGRADE_H
-#define _E_CONFIG_UPGRADE_H
-
-int e_config_upgrade(const char *edir);
-
-#endif /* _E_CONFIG_UPGRADE_H */
diff --git a/shell/e-corba-config-page.c b/shell/e-corba-config-page.c
deleted file mode 100644
index e594a5a89d..0000000000
--- a/shell/e-corba-config-page.c
+++ /dev/null
@@ -1,265 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-corba-config-page.c
- *
- * Copyright (C) 2002 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli <ettore@ximian.com>
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "e-corba-config-page.h"
-
-#include "Evolution.h"
-
-#include <string.h>
-#include <gal/util/e-util.h>
-
-#include <bonobo/bonobo-widget.h>
-#include <bonobo/bonobo-exception.h>
-#include <bonobo/bonobo-object.h>
-#include <bonobo/bonobo-listener.h>
-
-
-#define PARENT_TYPE e_config_page_get_type ()
-static EConfigPageClass *parent_class = NULL;
-
-struct _ECorbaConfigPagePrivate {
- GNOME_Evolution_ConfigControl config_control_interface;
-
- BonoboListener *listener;
-
- Bonobo_EventSource event_source;
-};
-
-
-/* ::ConfigControl interface handling. */
-
-static void
-listener_event_callback (BonoboListener *listener,
- const char *event_name,
- const CORBA_any *any,
- CORBA_Environment *ev,
- void *data)
-{
- ECorbaConfigPage *corba_config_page;
-
- corba_config_page = E_CORBA_CONFIG_PAGE (data);
-
- if (strcmp (event_name, "changed") == 0)
- e_config_page_changed (E_CONFIG_PAGE (corba_config_page));
-}
-
-static void
-setup_listener (ECorbaConfigPage *corba_config_page,
- GNOME_Evolution_ConfigControl config_control_interface)
-{
- ECorbaConfigPagePrivate *priv;
- Bonobo_EventSource event_source;
- CORBA_Environment ev;
-
- priv = corba_config_page->priv;
-
- CORBA_exception_init (&ev);
-
- event_source = GNOME_Evolution_ConfigControl__get_eventSource (config_control_interface, &ev);
- if (BONOBO_EX (&ev)) {
- g_warning ("Cannot get eventSource interface for ConfigPage -- %s", BONOBO_EX_REPOID (&ev));
- } else {
- priv->listener = bonobo_listener_new (listener_event_callback, corba_config_page);
- Bonobo_EventSource_addListener (event_source,
- bonobo_object_corba_objref (BONOBO_OBJECT (priv->listener)),
- &ev);
-
- if (! BONOBO_EX (&ev)) {
- priv->config_control_interface = config_control_interface;
- priv->event_source = event_source;
- } else {
- g_warning ("Cannot add listener for ConfigPage -- %s", BONOBO_EX_REPOID (&ev));
-
- bonobo_object_unref (BONOBO_OBJECT (priv->listener));
- priv->listener = NULL;
- }
- }
-
- CORBA_exception_free (&ev);
-}
-
-
-/* GObject methods. */
-
-static void
-impl_dispose (GObject *object)
-{
- ECorbaConfigPage *corba_config_page;
- ECorbaConfigPagePrivate *priv;
- CORBA_Environment ev;
-
- corba_config_page = E_CORBA_CONFIG_PAGE (object);
- priv = corba_config_page->priv;
-
- CORBA_exception_init (&ev);
-
- if (priv->config_control_interface != CORBA_OBJECT_NIL) {
- bonobo_object_release_unref (priv->config_control_interface, &ev);
- priv->config_control_interface = CORBA_OBJECT_NIL;
- }
-
- if (priv->listener != NULL) {
- Bonobo_EventSource_removeListener (priv->event_source,
- bonobo_object_corba_objref (BONOBO_OBJECT (priv->listener)),
- &ev);
-
- bonobo_object_unref (BONOBO_OBJECT (priv->listener));
- bonobo_object_release_unref (priv->event_source, &ev);
-
- priv->event_source = CORBA_OBJECT_NIL;
- priv->listener = NULL;
- }
-
- CORBA_exception_free (&ev);
-
- (* G_OBJECT_CLASS (parent_class)->dispose) (object);
-}
-
-static void
-impl_finalize (GObject *object)
-{
- ECorbaConfigPage *corba_config_page;
- ECorbaConfigPagePrivate *priv;
-
- corba_config_page = E_CORBA_CONFIG_PAGE (object);
- priv = corba_config_page->priv;
-
- g_free (priv);
-
- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
-}
-
-
-/* EConfigPage methods. */
-
-static void
-impl_apply (EConfigPage *config_page)
-{
- ECorbaConfigPage *corba_config_page;
- ECorbaConfigPagePrivate *priv;
- CORBA_Environment ev;
-
- corba_config_page = E_CORBA_CONFIG_PAGE (config_page);
- priv = corba_config_page->priv;
-
- CORBA_exception_init (&ev);
-
- GNOME_Evolution_ConfigControl_apply (priv->config_control_interface, &ev);
-
- if (BONOBO_EX (&ev))
- g_warning ("Cannot apply settings -- %s", BONOBO_EX_REPOID (&ev));
-
- CORBA_exception_free (&ev);
-}
-
-
-/* GTK+ ctors. */
-
-static void
-class_init (ECorbaConfigPageClass *class)
-{
- GObjectClass *object_class;
- EConfigPageClass *config_page_class;
-
- object_class = G_OBJECT_CLASS (class);
- object_class->dispose = impl_dispose;
- object_class->finalize = impl_finalize;
-
- config_page_class = E_CONFIG_PAGE_CLASS (class);
- config_page_class->apply = impl_apply;
-
- parent_class = g_type_class_ref(PARENT_TYPE);
-}
-
-static void
-init (ECorbaConfigPage *corba_config_page)
-{
- ECorbaConfigPagePrivate *priv;
-
- priv = g_new (ECorbaConfigPagePrivate, 1);
- priv->config_control_interface = CORBA_OBJECT_NIL;
- priv->listener = NULL;
- priv->event_source = CORBA_OBJECT_NIL;
-
- corba_config_page->priv = priv;
-}
-
-
-gboolean
-e_corba_config_page_construct (ECorbaConfigPage *corba_config_page,
- GNOME_Evolution_ConfigControl corba_object)
-{
- Bonobo_Control control;
- GtkWidget *control_widget;
- CORBA_Environment ev;
-
- g_return_val_if_fail (E_IS_CORBA_CONFIG_PAGE (corba_config_page), FALSE);
- g_return_val_if_fail (corba_object != CORBA_OBJECT_NIL, FALSE);
-
- CORBA_exception_init (&ev);
-
- control = GNOME_Evolution_ConfigControl__get_control (corba_object, &ev);
- if (BONOBO_EX (&ev)) {
- g_warning ("Can't get control from ::ConfigControl -- %s", BONOBO_EX_REPOID (&ev));
- CORBA_exception_init (&ev);
- return FALSE;
- }
-
- control_widget = bonobo_widget_new_control_from_objref (control, CORBA_OBJECT_NIL);
- gtk_widget_show (control_widget);
- gtk_container_add (GTK_CONTAINER (corba_config_page), control_widget);
- gtk_container_set_border_width (GTK_CONTAINER (corba_config_page), 6);
-
- setup_listener (corba_config_page, corba_object);
-
- /* Notice we *don't* unref the corba_object here as
- bonobo_widget_new_control_from_objref() effectively takes ownership
- for the object that we get from ::__get_control. */
-
- CORBA_exception_free (&ev);
-
- return TRUE;
-}
-
-GtkWidget *
-e_corba_config_page_new_from_objref (GNOME_Evolution_ConfigControl corba_object)
-{
- ECorbaConfigPage *corba_config_page;
-
- g_return_val_if_fail (corba_object != CORBA_OBJECT_NIL, NULL);
- g_return_val_if_fail (corba_object != CORBA_OBJECT_NIL, NULL);
-
- corba_config_page = g_object_new (e_corba_config_page_get_type (), NULL);
- if (! e_corba_config_page_construct (corba_config_page, corba_object)) {
- gtk_widget_destroy (GTK_WIDGET (corba_config_page));
- return NULL;
- }
-
- return GTK_WIDGET (corba_config_page);
-}
-
-
-E_MAKE_TYPE (e_corba_config_page, "ECorbaConfigPgae", ECorbaConfigPage, class_init, init, PARENT_TYPE)
diff --git a/shell/e-corba-config-page.h b/shell/e-corba-config-page.h
deleted file mode 100644
index 5e3d4276a8..0000000000
--- a/shell/e-corba-config-page.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-corba-config-page.h
- *
- * Copyright (C) 2002 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli <ettore@ximian.com>
- */
-
-#ifndef _E_CORBA_CONFIG_PAGE_H_
-#define _E_CORBA_CONFIG_PAGE_H_
-
-#include "e-config-page.h"
-
-#include "Evolution.h"
-
-#include <bonobo/bonobo-object.h>
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-#define E_TYPE_CORBA_CONFIG_PAGE (e_corba_config_page_get_type ())
-#define E_CORBA_CONFIG_PAGE(obj) (GTK_CHECK_CAST ((obj), E_TYPE_CORBA_CONFIG_PAGE, ECorbaConfigPage))
-#define E_CORBA_CONFIG_PAGE_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_CORBA_CONFIG_PAGE, ECorbaConfigPageClass))
-#define E_IS_CORBA_CONFIG_PAGE(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_CORBA_CONFIG_PAGE))
-#define E_IS_CORBA_CONFIG_PAGE_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_CORBA_CONFIG_PAGE))
-
-
-typedef struct _ECorbaConfigPage ECorbaConfigPage;
-typedef struct _ECorbaConfigPagePrivate ECorbaConfigPagePrivate;
-typedef struct _ECorbaConfigPageClass ECorbaConfigPageClass;
-
-struct _ECorbaConfigPage {
- EConfigPage parent;
-
- ECorbaConfigPagePrivate *priv;
-};
-
-struct _ECorbaConfigPageClass {
- EConfigPageClass parent_class;
-};
-
-
-GtkType e_corba_config_page_get_type (void);
-GtkWidget *e_corba_config_page_new_from_objref (GNOME_Evolution_ConfigControl objref);
-gboolean e_corba_config_page_construct (ECorbaConfigPage *corba_config_page,
- GNOME_Evolution_ConfigControl objref);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* _E_CORBA_CONFIG_PAGE_H_ */
diff --git a/shell/e-corba-shortcuts.c b/shell/e-corba-shortcuts.c
deleted file mode 100644
index 46bebb2249..0000000000
--- a/shell/e-corba-shortcuts.c
+++ /dev/null
@@ -1,349 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-corba-shortcuts.c
- *
- * Copyright (C) 2001 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli <ettore@ximian.com>
- */
-
-/* FIXME: Doesn't throw exceptions properly. */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "e-corba-shortcuts.h"
-
-#include "e-util/e-corba-utils.h"
-
-#include <gal/util/e-util.h>
-
-
-#define PARENT_TYPE bonobo_object_get_type ()
-static BonoboObjectClass *parent_class = NULL;
-
-struct _ECorbaShortcutsPrivate {
- EShortcuts *shortcuts;
-};
-
-
-/* Utility functions. */
-
-static const char *
-string_from_corba (CORBA_char *corba_string)
-{
- if (corba_string[0] == '\0')
- return NULL;
-
- return corba_string;
-}
-
-static void
-shortcut_list_to_corba (const GSList *shortcut_list,
- GNOME_Evolution_Shortcuts_ShortcutList *shortcut_list_return)
-{
- GNOME_Evolution_Shortcuts_Shortcut *buffer;
- const GSList *p;
- int num_shortcuts;
- int i;
-
- num_shortcuts = g_slist_length ((GSList *) shortcut_list); /* safe cast, GLib sucks */
-
- shortcut_list_return->_maximum = num_shortcuts;
- shortcut_list_return->_length = num_shortcuts;
-
- buffer = CORBA_sequence_GNOME_Evolution_Shortcuts_Shortcut_allocbuf (num_shortcuts);
- shortcut_list_return->_buffer = buffer;
-
- for (p = shortcut_list, i = 0; p != NULL; p = p->next, i++) {
- const EShortcutItem *item;
-
- item = (const EShortcutItem *) p->data;
-
- buffer[i].uri = CORBA_string_dup (e_safe_corba_string (item->uri));
- buffer[i].name = CORBA_string_dup (e_safe_corba_string (item->name));
- buffer[i].type = CORBA_string_dup (e_safe_corba_string (item->type));
- buffer[i].customIconName = CORBA_string_dup (e_safe_corba_string (item->custom_icon_name));
- }
-
- CORBA_sequence_set_release (shortcut_list_return, TRUE);
-}
-
-
-/* GObject methods. */
-
-static void
-impl_dispose (GObject *object)
-{
- ECorbaShortcuts *corba_shortcuts;
- ECorbaShortcutsPrivate *priv;
-
- corba_shortcuts = E_CORBA_SHORTCUTS (object);
- priv = corba_shortcuts->priv;
-
- if (priv->shortcuts != NULL) {
- g_object_unref (priv->shortcuts);
- priv->shortcuts = NULL;
- }
-
- (* G_OBJECT_CLASS (parent_class)->dispose) (object);
-}
-
-static void
-impl_finalize (GObject *object)
-{
- ECorbaShortcuts *corba_shortcuts;
-
- corba_shortcuts = E_CORBA_SHORTCUTS (object);
-
- g_free (corba_shortcuts->priv);
-
- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
-}
-
-
-/* Evolution::Shortcuts CORBA methods. */
-
-static void
-impl_add (PortableServer_Servant servant,
- const CORBA_short group_num,
- const CORBA_short position,
- const GNOME_Evolution_Shortcuts_Shortcut *shortcut,
- CORBA_Environment *ev)
-{
- ECorbaShortcuts *corba_shortcuts;
- ECorbaShortcutsPrivate *priv;
-
- corba_shortcuts = E_CORBA_SHORTCUTS (bonobo_object_from_servant (servant));
- priv = corba_shortcuts->priv;
-
- e_shortcuts_add_shortcut (priv->shortcuts, group_num, position,
- string_from_corba (shortcut->uri),
- string_from_corba (shortcut->name),
- 0,
- string_from_corba (shortcut->type),
- string_from_corba (shortcut->customIconName));
-}
-
-static void
-impl_remove (PortableServer_Servant servant,
- const CORBA_short group_num,
- const CORBA_short item_num,
- CORBA_Environment *ev)
-{
- ECorbaShortcuts *corba_shortcuts;
- ECorbaShortcutsPrivate *priv;
-
- corba_shortcuts = E_CORBA_SHORTCUTS (bonobo_object_from_servant (servant));
- priv = corba_shortcuts->priv;
-
- e_shortcuts_remove_shortcut (priv->shortcuts, group_num, item_num);
-}
-
-static GNOME_Evolution_Shortcuts_Shortcut *
-impl_get (PortableServer_Servant servant,
- const CORBA_short group_num,
- const CORBA_short item_num,
- CORBA_Environment *ev)
-{
- ECorbaShortcuts *corba_shortcuts;
- ECorbaShortcutsPrivate *priv;
- GNOME_Evolution_Shortcuts_Shortcut *retval;
- const EShortcutItem *item;
-
- corba_shortcuts = E_CORBA_SHORTCUTS (bonobo_object_from_servant (servant));
- priv = corba_shortcuts->priv;
-
- item = e_shortcuts_get_shortcut (priv->shortcuts, group_num, item_num);
- if (item == NULL) {
- CORBA_exception_set (ev, CORBA_USER_EXCEPTION,
- ex_GNOME_Evolution_Shortcuts_NotFound, NULL);
- return NULL;
- }
-
- retval = GNOME_Evolution_Shortcuts_Shortcut__alloc ();
- retval->uri = CORBA_string_dup (e_safe_corba_string (item->uri));
- retval->name = CORBA_string_dup (e_safe_corba_string (item->name));
- retval->type = CORBA_string_dup (e_safe_corba_string (item->type));
- retval->customIconName = CORBA_string_dup (e_safe_corba_string (item->custom_icon_name));
-
- return retval;
-}
-
-static void
-impl_addGroup (PortableServer_Servant servant,
- const CORBA_short position,
- const CORBA_char *name,
- CORBA_Environment *ev)
-{
- ECorbaShortcuts *corba_shortcuts;
- ECorbaShortcutsPrivate *priv;
-
- corba_shortcuts = E_CORBA_SHORTCUTS (bonobo_object_from_servant (servant));
- priv = corba_shortcuts->priv;
-
- if (position == 0) {
- CORBA_exception_set (ev, CORBA_USER_EXCEPTION,
- ex_GNOME_Evolution_Shortcuts_InvalidPosition, NULL);
- return;
- }
-
- e_shortcuts_add_group (priv->shortcuts, position, name);
-}
-
-static void
-impl_removeGroup (PortableServer_Servant servant,
- const CORBA_short group_num,
- CORBA_Environment *ev)
-{
- ECorbaShortcuts *corba_shortcuts;
- ECorbaShortcutsPrivate *priv;
-
- corba_shortcuts = E_CORBA_SHORTCUTS (bonobo_object_from_servant (servant));
- priv = corba_shortcuts->priv;
-
- if (group_num == 0) {
- CORBA_exception_set (ev, CORBA_USER_EXCEPTION,
- ex_GNOME_Evolution_Shortcuts_CannotRemove, NULL);
- return;
- }
-
- e_shortcuts_remove_group (priv->shortcuts, group_num);
-}
-
-static GNOME_Evolution_Shortcuts_Group *
-impl_getGroup (PortableServer_Servant servant,
- const CORBA_short group_num,
- CORBA_Environment *ev)
-{
- ECorbaShortcuts *corba_shortcuts;
- ECorbaShortcutsPrivate *priv;
- GNOME_Evolution_Shortcuts_Group *group;
- const GSList *list;
-
- corba_shortcuts = E_CORBA_SHORTCUTS (bonobo_object_from_servant (servant));
- priv = corba_shortcuts->priv;
-
- list = e_shortcuts_get_shortcuts_in_group (priv->shortcuts, group_num);
-
- group = GNOME_Evolution_Shortcuts_Group__alloc ();
-
- group->name = CORBA_string_dup (e_shortcuts_get_group_title (priv->shortcuts, group_num));
-
- shortcut_list_to_corba (list, & group->shortcuts);
-
- return group;
-}
-
-static CORBA_sequence_GNOME_Evolution_Shortcuts_Group *
-impl__get_groups (PortableServer_Servant servant,
- CORBA_Environment *ev)
-{
- GNOME_Evolution_Shortcuts_GroupList *list;
- ECorbaShortcuts *corba_shortcuts;
- ECorbaShortcutsPrivate *priv;
- GSList *group_titles;
- const GSList *p;
- int i;
-
- corba_shortcuts = E_CORBA_SHORTCUTS (bonobo_object_from_servant (servant));
- priv = corba_shortcuts->priv;
-
- list = GNOME_Evolution_Shortcuts_GroupList__alloc ();
- list->_length = e_shortcuts_get_num_groups (priv->shortcuts);
- list->_maximum = list->_length;
- list->_buffer = CORBA_sequence_GNOME_Evolution_Shortcuts_Group_allocbuf (list->_maximum);
-
- CORBA_sequence_set_release (list, TRUE);
-
- group_titles = e_shortcuts_get_group_titles (priv->shortcuts);
- for (p = group_titles, i = 0; p != NULL; p = p->next, i ++) {
- char *group_title;
- const GSList *shortcuts;
-
- group_title = (char *) p->data;
-
- shortcuts = e_shortcuts_get_shortcuts_in_group (priv->shortcuts, i);
-
- list->_buffer[i].name = CORBA_string_dup (group_title);
- shortcut_list_to_corba (shortcuts, &list->_buffer[i].shortcuts);
-
- g_free (group_title);
- }
-
- g_slist_free (group_titles);
-
- return list;
-}
-
-
-static void
-e_corba_shortcuts_class_init (GObjectClass *object_class)
-{
- ECorbaShortcutsClass *corba_shortcuts_class;
- POA_GNOME_Evolution_Shortcuts__epv *epv;
-
- parent_class = g_type_class_ref(PARENT_TYPE);
-
- object_class->dispose = impl_dispose;
- object_class->finalize = impl_finalize;
-
- corba_shortcuts_class = E_CORBA_SHORTCUTS_CLASS (object_class);
-
- epv = & corba_shortcuts_class->epv;
- epv->add = impl_add;
- epv->remove = impl_remove;
- epv->get = impl_get;
- epv->addGroup = impl_addGroup;
- epv->removeGroup = impl_removeGroup;
- epv->getGroup = impl_getGroup;
- epv->_get_groups = impl__get_groups;
-}
-
-static void
-e_corba_shortcuts_init (ECorbaShortcuts *corba_shortcuts)
-{
- ECorbaShortcutsPrivate *priv;
-
- priv = g_new (ECorbaShortcutsPrivate, 1);
- priv->shortcuts = NULL;
-
- corba_shortcuts->priv = priv;
-}
-
-
-ECorbaShortcuts *
-e_corba_shortcuts_new (EShortcuts *shortcuts)
-{
- ECorbaShortcuts *corba_shortcuts;
-
- g_return_val_if_fail (shortcuts != NULL, NULL);
- g_return_val_if_fail (E_IS_SHORTCUTS (shortcuts), NULL);
-
- corba_shortcuts = g_object_new (e_corba_shortcuts_get_type (), NULL);
-
- g_object_ref (shortcuts);
- corba_shortcuts->priv->shortcuts = shortcuts;
-
- return corba_shortcuts;
-}
-
-
-BONOBO_TYPE_FUNC_FULL (ECorbaShortcuts,
- GNOME_Evolution_Shortcuts,
- PARENT_TYPE,
- e_corba_shortcuts)
diff --git a/shell/e-corba-shortcuts.h b/shell/e-corba-shortcuts.h
deleted file mode 100644
index 8d6ff97adc..0000000000
--- a/shell/e-corba-shortcuts.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-corba-shortcuts.h
- *
- * Copyright (C) 2001 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli <ettore@ximian.com>
- */
-
-#ifndef _E_CORBA_SHORTCUTS_H_
-#define _E_CORBA_SHORTCUTS_H_
-
-#include "e-shortcuts.h"
-
-#include <bonobo/bonobo-object.h>
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-#define E_TYPE_CORBA_SHORTCUTS (e_corba_shortcuts_get_type ())
-#define E_CORBA_SHORTCUTS(obj) (GTK_CHECK_CAST ((obj), E_TYPE_CORBA_SHORTCUTS, ECorbaShortcuts))
-#define E_CORBA_SHORTCUTS_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_CORBA_SHORTCUTS, ECorbaShortcutsClass))
-#define E_IS_CORBA_SHORTCUTS(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_CORBA_SHORTCUTS))
-#define E_IS_CORBA_SHORTCUTS_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_CORBA_SHORTCUTS))
-
-
-typedef struct _ECorbaShortcuts ECorbaShortcuts;
-typedef struct _ECorbaShortcutsPrivate ECorbaShortcutsPrivate;
-typedef struct _ECorbaShortcutsClass ECorbaShortcutsClass;
-
-struct _ECorbaShortcuts {
- BonoboObject parent;
-
- ECorbaShortcutsPrivate *priv;
-};
-
-struct _ECorbaShortcutsClass {
- BonoboObjectClass parent_class;
-
- POA_GNOME_Evolution_Shortcuts__epv epv;
-};
-
-
-GtkType e_corba_shortcuts_get_type (void);
-ECorbaShortcuts *e_corba_shortcuts_new (EShortcuts *shortcuts);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* _E_CORBA_SHORTCUTS_H_ */
diff --git a/shell/e-corba-storage-registry.c b/shell/e-corba-storage-registry.c
deleted file mode 100644
index bfffdb6981..0000000000
--- a/shell/e-corba-storage-registry.c
+++ /dev/null
@@ -1,494 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-corba-storage-registry.c
- *
- * Copyright (C) 2000 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "e-local-storage.h"
-#include "e-corba-storage.h"
-#include "e-corba-storage-registry.h"
-#include "e-shell-constants.h"
-
-#include "e-util/e-corba-utils.h"
-
-#include <bonobo/bonobo-exception.h>
-#include <gal/util/e-util.h>
-
-#include <string.h>
-
-
-#define PARENT_TYPE BONOBO_OBJECT_TYPE
-static BonoboObjectClass *parent_class = NULL;
-
-struct _ECorbaStorageRegistryPrivate {
- EStorageSet *storage_set;
-
- GSList *listeners;
-};
-
-
-/* CORBA interface implementation. */
-
-static void
-listener_notify (Bonobo_Listener listener,
- GNOME_Evolution_StorageRegistry_MessageType type,
- const char *name)
-{
- CORBA_any any;
- GNOME_Evolution_StorageRegistry_NotifyResult nr;
- CORBA_Environment ev;
-
- nr.type = type;
- nr.name = CORBA_string_dup (name ? name : "");
-
- any._type = (CORBA_TypeCode) TC_GNOME_Evolution_StorageRegistry_NotifyResult;
- any._value = &nr;
-
- CORBA_exception_init (&ev);
- Bonobo_Listener_event (listener,
- "Evolution::StorageRegistry::NotifyResult",
- &any, &ev);
- if (BONOBO_EX (&ev)) {
- g_warning ("Could not send notify event for %s\n%s", name,
- CORBA_exception_id (&ev));
- }
-
- CORBA_exception_free (&ev);
-}
-
-static GNOME_Evolution_StorageListener
-impl_StorageRegistry_addStorage (PortableServer_Servant servant,
- const GNOME_Evolution_Storage storage_interface,
- const CORBA_char *name,
- CORBA_Environment *ev)
-{
- BonoboObject *bonobo_object;
- ECorbaStorageRegistry *storage_registry;
- ECorbaStorageRegistryPrivate *priv;
- EStorage *storage;
- GNOME_Evolution_StorageListener listener_interface;
- GSList *iter;
-
- bonobo_object = bonobo_object_from_servant (servant);
- storage_registry = E_CORBA_STORAGE_REGISTRY (bonobo_object);
- priv = storage_registry->priv;
-
- storage = e_corba_storage_new (storage_interface, name);
-
- if (! e_storage_set_add_storage (priv->storage_set, storage)) {
- CORBA_exception_set (ev,
- CORBA_USER_EXCEPTION,
- ex_GNOME_Evolution_StorageRegistry_Exists,
- NULL);
- return CORBA_OBJECT_NIL;
- }
-
- g_object_unref (storage);
-
-
- /* FIXME: if we remove a listener while looping through the list we can
- * crash. Yay CORBA reentrancy. */
- for (iter = priv->listeners; iter; iter = iter->next) {
- listener_notify (iter->data,
- GNOME_Evolution_StorageRegistry_STORAGE_CREATED,
- name);
- }
-
- listener_interface = CORBA_Object_duplicate (e_corba_storage_get_StorageListener
- (E_CORBA_STORAGE (storage)), ev);
-
- return listener_interface;
-}
-
-static GNOME_Evolution_StorageRegistry_StorageList *
-impl_StorageRegistry_getStorageList (PortableServer_Servant servant,
- CORBA_Environment *ev)
-{
- BonoboObject *bonobo_object;
- ECorbaStorageRegistry *storage_registry;
- ECorbaStorageRegistryPrivate *priv;
- GNOME_Evolution_StorageRegistry_StorageList *storage_list;
- GList *sl, *l;
-
- bonobo_object = bonobo_object_from_servant (servant);
- storage_registry = E_CORBA_STORAGE_REGISTRY (bonobo_object);
- priv = storage_registry->priv;
-
- sl = e_storage_set_get_storage_list (priv->storage_set);
-
- storage_list = GNOME_Evolution_StorageRegistry_StorageList__alloc ();
- storage_list->_maximum = g_list_length (sl);
- storage_list->_length = 0;
- storage_list->_buffer = CORBA_sequence_GNOME_Evolution_Storage_allocbuf (storage_list->_maximum);
- for (l = sl; l != NULL; l = l->next) {
- EStorage *storage;
- GNOME_Evolution_Storage corba_storage;
- CORBA_Environment ev2;
-
- CORBA_exception_init (&ev2);
-
- storage = l->data;
- if (E_IS_LOCAL_STORAGE (storage)) {
- corba_storage = e_local_storage_get_corba_interface (E_LOCAL_STORAGE (storage));
- } else if (E_IS_CORBA_STORAGE (storage)) {
- corba_storage = e_corba_storage_get_corba_objref (E_CORBA_STORAGE (storage));
- } else {
- continue;
- }
-
- corba_storage = CORBA_Object_duplicate (corba_storage, &ev2);
- if (BONOBO_EX (&ev2)) {
- CORBA_exception_free (&ev2);
- continue;
- }
- storage_list->_buffer[storage_list->_length] = corba_storage;
- storage_list->_length++;
- }
-
- CORBA_sequence_set_release (storage_list, TRUE);
-
- return storage_list;
-}
-
-static GNOME_Evolution_Storage
-impl_StorageRegistry_getStorageByName (PortableServer_Servant servant,
- const CORBA_char *name,
- CORBA_Environment *ev)
-{
- BonoboObject *bonobo_object;
- ECorbaStorageRegistry *storage_registry;
- ECorbaStorageRegistryPrivate *priv;
- GNOME_Evolution_Storage corba_storage;
- EStorage *storage;
-
- bonobo_object = bonobo_object_from_servant (servant);
- storage_registry = E_CORBA_STORAGE_REGISTRY (bonobo_object);
- priv = storage_registry->priv;
-
- storage = e_storage_set_get_storage (priv->storage_set, name);
- if (storage == NULL) {
- CORBA_exception_set (ev, CORBA_USER_EXCEPTION,
- ex_GNOME_Evolution_StorageRegistry_NotFound,
- NULL);
- return CORBA_OBJECT_NIL;
- }
-
- corba_storage = CORBA_Object_duplicate (e_corba_storage_get_corba_objref
- (E_CORBA_STORAGE (storage)), ev);
-
- return corba_storage;
-}
-
-static void
-impl_StorageRegistry_removeStorageByName (PortableServer_Servant servant,
- const CORBA_char *name,
- CORBA_Environment *ev)
-{
- BonoboObject *bonobo_object;
- ECorbaStorageRegistry *storage_registry;
- ECorbaStorageRegistryPrivate *priv;
- EStorage *storage;
-
- bonobo_object = bonobo_object_from_servant (servant);
- storage_registry = E_CORBA_STORAGE_REGISTRY (bonobo_object);
- priv = storage_registry->priv;
-
- storage = e_storage_set_get_storage (priv->storage_set, name);
- if (storage == NULL) {
- CORBA_exception_set (ev, CORBA_USER_EXCEPTION,
- ex_GNOME_Evolution_StorageRegistry_NotFound,
- NULL);
- return;
- }
-
- /* FIXME: Yucky to get the storage by name and then remove it. */
- /* FIXME: Check failure. */
- e_storage_set_remove_storage (priv->storage_set, storage);
-}
-
-static void
-storage_set_foreach (EStorageSet *set,
- Bonobo_Listener listener)
-{
- GList *storage_list, *p;
-
- storage_list = e_storage_set_get_storage_list (set);
- for (p = storage_list; p; p = p->next) {
- const char *name;
-
- name = e_storage_get_name (E_STORAGE (p->data));
-
- listener_notify (listener, GNOME_Evolution_StorageRegistry_STORAGE_CREATED, name);
- g_object_unref (p->data);
- }
-
- g_list_free (storage_list);
-}
-
-static GSList *
-find_listener (GSList *p,
- Bonobo_Listener listener)
-{
- CORBA_Environment ev;
-
- CORBA_exception_init (&ev);
- for (; p; p = p->next) {
- if (CORBA_Object_is_equivalent (p->data, listener, &ev) == TRUE) {
- CORBA_exception_free (&ev);
- return p;
- }
- }
-
- CORBA_exception_free (&ev);
- return NULL;
-}
-
-static void
-impl_StorageRegistry_addListener (PortableServer_Servant servant,
- Bonobo_Listener listener,
- CORBA_Environment *ev)
-{
- BonoboObject *bonobo_object;
- ECorbaStorageRegistry *storage_registry;
- ECorbaStorageRegistryPrivate *priv;
- Bonobo_Listener listener_copy;
- CORBA_Environment ev2;
-
- bonobo_object = bonobo_object_from_servant (servant);
- storage_registry = E_CORBA_STORAGE_REGISTRY (bonobo_object);
- priv = storage_registry->priv;
-
- if (find_listener (priv->listeners, listener) != NULL) {
- CORBA_exception_set (ev, CORBA_USER_EXCEPTION,
- ex_GNOME_Evolution_StorageRegistry_AlreadyListening,
- NULL);
- return;
- }
-
- CORBA_exception_init (&ev2);
- listener_copy = CORBA_Object_duplicate ((CORBA_Object) listener, &ev2);
- if (BONOBO_EX (&ev2)) {
- g_warning ("EvolutionStorageRegistry -- Cannot duplicate listener.");
- CORBA_exception_free (&ev2);
- return;
- }
-
- CORBA_exception_free (&ev2);
- priv->listeners = g_slist_prepend (priv->listeners, listener_copy);
- storage_set_foreach (priv->storage_set, listener_copy);
-}
-
-static void
-impl_StorageRegistry_removeListener (PortableServer_Servant servant,
- Bonobo_Listener listener,
- CORBA_Environment *ev)
-{
- BonoboObject *bonobo_object;
- ECorbaStorageRegistry *storage_registry;
- ECorbaStorageRegistryPrivate *priv;
- CORBA_Environment ev2;
- GSList *p;
-
- bonobo_object = bonobo_object_from_servant (servant);
- storage_registry = E_CORBA_STORAGE_REGISTRY (bonobo_object);
- priv = storage_registry->priv;
-
- p = find_listener (priv->listeners, listener);
- if (p == NULL) {
- CORBA_exception_set (ev, CORBA_USER_EXCEPTION,
- ex_GNOME_Evolution_StorageRegistry_NotFound,
- NULL);
- return;
- }
-
- CORBA_exception_init (&ev2);
- CORBA_Object_release ((CORBA_Object) p->data, &ev2);
- CORBA_exception_free (&ev2);
-
- priv->listeners = g_slist_remove_link (priv->listeners, p);
- g_slist_free (p);
-}
-
-static GNOME_Evolution_Folder *
-impl_StorageRegistry_getFolderByUri (PortableServer_Servant servant,
- const CORBA_char *uri,
- CORBA_Environment *ev)
-{
- BonoboObject *bonobo_object;
- ECorbaStorageRegistry *storage_registry;
- GNOME_Evolution_Folder *corba_folder;
- EStorageSet *storage_set;
- EFolder *folder;
- char *path;
- CORBA_char *corba_evolution_uri;
-
- bonobo_object = bonobo_object_from_servant (servant);
- storage_registry = E_CORBA_STORAGE_REGISTRY (bonobo_object);
- storage_set = storage_registry->priv->storage_set;
-
- if (!strncmp (uri, E_SHELL_URI_PREFIX, E_SHELL_URI_PREFIX_LEN)) {
- corba_evolution_uri = CORBA_string_dup (uri);
- path = (char *)uri + E_SHELL_URI_PREFIX_LEN;
- folder = e_storage_set_get_folder (storage_set, path);
- } else {
- path = e_storage_set_get_path_for_physical_uri (storage_set, uri);
- if (path) {
- corba_evolution_uri = CORBA_string_alloc (strlen (path) + E_SHELL_URI_PREFIX_LEN + 1);
- strcpy (corba_evolution_uri, E_SHELL_URI_PREFIX);
- strcat (corba_evolution_uri, path);
- folder = e_storage_set_get_folder (storage_set, path);
- g_free (path);
- } else {
- corba_evolution_uri = NULL;
- folder = NULL;
- }
- }
-
- if (!folder) {
- CORBA_exception_set (ev, CORBA_USER_EXCEPTION,
- ex_GNOME_Evolution_StorageRegistry_NotFound,
- NULL);
- return CORBA_OBJECT_NIL;
- }
-
- corba_folder = GNOME_Evolution_Folder__alloc ();
-
- corba_folder->displayName = CORBA_string_dup (e_folder_get_name (folder));
-
- corba_folder->description = CORBA_string_dup (e_safe_corba_string (e_folder_get_description (folder)));
- corba_folder->type = CORBA_string_dup (e_folder_get_type_string (folder));
- corba_folder->physicalUri = CORBA_string_dup (e_safe_corba_string (e_folder_get_physical_uri (folder)));
- corba_folder->customIconName = CORBA_string_dup (e_safe_corba_string (e_folder_get_custom_icon_name (folder)));
- corba_folder->evolutionUri = corba_evolution_uri;
- corba_folder->unreadCount = e_folder_get_unread_count (folder);
- corba_folder->sortingPriority = e_folder_get_sorting_priority (folder);
-
- return corba_folder;
-}
-
-
-/* GObject methods. */
-
-static void
-impl_dispose (GObject *object)
-{
- ECorbaStorageRegistry *corba_storage_registry;
- ECorbaStorageRegistryPrivate *priv;
-
- corba_storage_registry = E_CORBA_STORAGE_REGISTRY (object);
- priv = corba_storage_registry->priv;
-
- if (priv->storage_set != NULL) {
- g_object_unref (priv->storage_set);
- priv->storage_set = NULL;
- }
-
- (* G_OBJECT_CLASS (parent_class)->dispose) (object);
-}
-
-static void
-impl_finalize (GObject *object)
-{
- ECorbaStorageRegistry *corba_storage_registry;
- ECorbaStorageRegistryPrivate *priv;
-
- corba_storage_registry = E_CORBA_STORAGE_REGISTRY (object);
- priv = corba_storage_registry->priv;
-
- g_free (priv);
-
- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
-}
-
-
-/* Initialization. */
-
-static void
-e_corba_storage_registry_class_init (ECorbaStorageRegistryClass *klass)
-{
- GObjectClass *object_class;
- POA_GNOME_Evolution_StorageRegistry__epv *epv;
-
- object_class = G_OBJECT_CLASS (klass);
- object_class->dispose = impl_dispose;
- object_class->finalize = impl_finalize;
-
- epv = & klass->epv;
- epv->addStorage = impl_StorageRegistry_addStorage;
- epv->getStorageList = impl_StorageRegistry_getStorageList;
- epv->getStorageByName = impl_StorageRegistry_getStorageByName;
- epv->removeStorageByName = impl_StorageRegistry_removeStorageByName;
- epv->addListener = impl_StorageRegistry_addListener;
- epv->removeListener = impl_StorageRegistry_removeListener;
- epv->getFolderByUri = impl_StorageRegistry_getFolderByUri;
-
- parent_class = g_type_class_ref(PARENT_TYPE);
-}
-
-static void
-e_corba_storage_registry_init (ECorbaStorageRegistry *corba_storage_registry)
-{
- ECorbaStorageRegistryPrivate *priv;
-
- priv = g_new (ECorbaStorageRegistryPrivate, 1);
- priv->storage_set = NULL;
- priv->listeners = NULL;
-
- corba_storage_registry->priv = priv;
-}
-
-
-void
-e_corba_storage_registry_construct (ECorbaStorageRegistry *corba_storage_registry,
- EStorageSet *storage_set)
-{
- ECorbaStorageRegistryPrivate *priv;
-
- g_return_if_fail (E_IS_CORBA_STORAGE_REGISTRY (corba_storage_registry));
-
- priv = corba_storage_registry->priv;
-
- g_object_ref (storage_set);
- priv->storage_set = storage_set;
-}
-
-ECorbaStorageRegistry *
-e_corba_storage_registry_new (EStorageSet *storage_set)
-{
- ECorbaStorageRegistry *corba_storage_registry;
-
- g_return_val_if_fail (storage_set != NULL, NULL);
- g_return_val_if_fail (E_IS_STORAGE_SET (storage_set), NULL);
-
- corba_storage_registry = g_object_new (e_corba_storage_registry_get_type (), NULL);
-
- e_corba_storage_registry_construct (corba_storage_registry, storage_set);
-
- return corba_storage_registry;
-}
-
-
-BONOBO_TYPE_FUNC_FULL (ECorbaStorageRegistry,
- GNOME_Evolution_StorageRegistry,
- PARENT_TYPE,
- e_corba_storage_registry)
diff --git a/shell/e-corba-storage-registry.h b/shell/e-corba-storage-registry.h
deleted file mode 100644
index f75db6dd90..0000000000
--- a/shell/e-corba-storage-registry.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-corba-storage-registry.h
- *
- * Copyright (C) 2000 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifndef __E_CORBA_STORAGE_REGISTRY_H__
-#define __E_CORBA_STORAGE_REGISTRY_H__
-
-#include <bonobo/bonobo-object.h>
-
-#include "Evolution.h"
-#include "e-storage-set.h"
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-#define E_TYPE_CORBA_STORAGE_REGISTRY (e_corba_storage_registry_get_type ())
-#define E_CORBA_STORAGE_REGISTRY(obj) (GTK_CHECK_CAST ((obj), E_TYPE_CORBA_STORAGE_REGISTRY, ECorbaStorageRegistry))
-#define E_CORBA_STORAGE_REGISTRY_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_CORBA_STORAGE_REGISTRY, ECorbaStorageRegistryClass))
-#define E_IS_CORBA_STORAGE_REGISTRY(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_CORBA_STORAGE_REGISTRY))
-#define E_IS_CORBA_STORAGE_REGISTRY_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_CORBA_STORAGE_REGISTRY))
-
-
-typedef struct _ECorbaStorageRegistry ECorbaStorageRegistry;
-typedef struct _ECorbaStorageRegistryPrivate ECorbaStorageRegistryPrivate;
-typedef struct _ECorbaStorageRegistryClass ECorbaStorageRegistryClass;
-
-struct _ECorbaStorageRegistry {
- BonoboObject parent;
-
- ECorbaStorageRegistryPrivate *priv;
-};
-
-struct _ECorbaStorageRegistryClass {
- BonoboObjectClass parent_class;
-
- POA_GNOME_Evolution_StorageRegistry__epv epv;
-};
-
-
-GtkType e_corba_storage_registry_get_type (void);
-void e_corba_storage_registry_construct (ECorbaStorageRegistry *corba_storage_registry,
- EStorageSet *storage_set);
-ECorbaStorageRegistry *e_corba_storage_registry_new (EStorageSet *storage_set);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* __E_CORBA_STORAGE_REGISTRY_H__ */
diff --git a/shell/e-corba-storage.c b/shell/e-corba-storage.c
deleted file mode 100644
index b7ab36c3f8..0000000000
--- a/shell/e-corba-storage.c
+++ /dev/null
@@ -1,1074 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-corba-storage.c
- *
- * Copyright (C) 2000, 2001 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "e-corba-storage.h"
-
-#include "e-shell-constants.h"
-
-#include "Evolution.h"
-
-#include <glib.h>
-#include <gal/util/e-util.h>
-
-#include <bonobo/bonobo-main.h>
-#include <bonobo/bonobo-exception.h>
-#include <bonobo/bonobo-listener.h>
-
-#include <gdk/gdkx.h>
-#include <gtk/gtkmain.h>
-
-#include <string.h>
-
-
-#define PARENT_TYPE E_TYPE_STORAGE
-static EStorageClass *parent_class = NULL;
-
-typedef struct _StorageListenerServant StorageListenerServant;
-
-struct _ECorbaStoragePrivate {
- GNOME_Evolution_Storage storage_interface;
-
- /* The Evolution::StorageListener interface we expose. */
- GNOME_Evolution_StorageListener storage_listener_interface;
- StorageListenerServant *storage_listener_servant;
-
- GList *pending_opens;
-};
-
-
-/* Implementation of the CORBA Evolution::StorageListener interface. */
-
-static POA_GNOME_Evolution_StorageListener__vepv storage_listener_vepv;
-
-struct _StorageListenerServant {
- POA_GNOME_Evolution_StorageListener servant;
- EStorage *storage;
-};
-
-static StorageListenerServant *
-storage_listener_servant_new (ECorbaStorage *corba_storage)
-{
- StorageListenerServant *servant;
-
- servant = g_new0 (StorageListenerServant, 1);
-
- servant->servant.vepv = &storage_listener_vepv;
-
- g_object_ref (corba_storage);
- servant->storage = E_STORAGE (corba_storage);
-
- return servant;
-}
-
-static void
-storage_listener_servant_free (StorageListenerServant *servant)
-{
- g_object_unref (servant->storage);
-
- g_free (servant);
-}
-
-#if 0
-static void
-impl_StorageListener_destroy (PortableServer_Servant servant,
- CORBA_Environment *ev)
-{
- /* FIXME */
-}
-#endif
-
-static void
-impl_StorageListener_notifyFolderCreated (PortableServer_Servant servant,
- const CORBA_char *path,
- const GNOME_Evolution_Folder *folder,
- CORBA_Environment *ev)
-{
- StorageListenerServant *storage_listener_servant;
- EStorage *storage;
- EFolder *e_folder;
-
- storage_listener_servant = (StorageListenerServant *) servant;
- storage = storage_listener_servant->storage;
-
- e_folder = e_folder_new (folder->displayName, folder->type, folder->description);
-
- e_folder_set_physical_uri (e_folder, folder->physicalUri);
- e_folder_set_unread_count (e_folder, folder->unreadCount);
- e_folder_set_can_sync_offline (e_folder, folder->canSyncOffline);
- e_folder_set_sorting_priority (e_folder, folder->sortingPriority);
-
- if (folder->customIconName[0] != '\0')
- e_folder_set_custom_icon (e_folder, folder->customIconName);
-
- if (! e_storage_new_folder (storage, path, e_folder)) {
- g_warning ("Cannot register folder -- %s %s\n", path, folder->displayName);
- CORBA_exception_set (ev,
- CORBA_USER_EXCEPTION,
- ex_GNOME_Evolution_StorageListener_Exists,
- NULL);
- g_object_unref (e_folder);
- return;
- }
-}
-
-static void
-impl_StorageListener_notifyFolderUpdated (PortableServer_Servant servant,
- const CORBA_char *path,
- CORBA_long unread_count,
- CORBA_Environment *ev)
-{
- StorageListenerServant *storage_listener_servant;
- EStorage *storage;
- EFolder *e_folder;
-
- storage_listener_servant = (StorageListenerServant *) servant;
- storage = storage_listener_servant->storage;
-
- e_folder = e_storage_get_folder (storage, path);
- if (e_folder == NULL) {
- CORBA_exception_set (ev,
- CORBA_USER_EXCEPTION,
- ex_GNOME_Evolution_StorageListener_NotFound,
- NULL);
- return;
- }
-
- e_folder_set_unread_count (e_folder, unread_count);
-}
-
-static void
-impl_StorageListener_notifyFolderRemoved (PortableServer_Servant servant,
- const CORBA_char *path,
- CORBA_Environment *ev)
-{
- StorageListenerServant *storage_listener_servant;
- EStorage *storage;
-
- storage_listener_servant = (StorageListenerServant *) servant;
- storage = storage_listener_servant->storage;
-
- if (! e_storage_removed_folder (storage, path))
- CORBA_exception_set (ev,
- CORBA_USER_EXCEPTION,
- ex_GNOME_Evolution_StorageListener_NotFound,
- NULL);
-}
-
-static void
-impl_StorageListener_notifyHasSubfolders (PortableServer_Servant servant,
- const CORBA_char *path,
- const CORBA_char *message,
- CORBA_Environment *ev)
-{
- StorageListenerServant *storage_listener_servant;
- EStorage *storage;
-
- storage_listener_servant = (StorageListenerServant *) servant;
- storage = storage_listener_servant->storage;
-
- if (! e_storage_declare_has_subfolders (storage, path, message)) {
- g_warning ("Cannot register subfolder tree -- %s\n", path);
- CORBA_exception_set (ev,
- CORBA_USER_EXCEPTION,
- ex_GNOME_Evolution_StorageListener_Exists,
- NULL);
- }
-}
-
-
-static gboolean
-setup_storage_listener (ECorbaStorage *corba_storage)
-{
- StorageListenerServant *servant;
- ECorbaStoragePrivate *priv;
- GNOME_Evolution_StorageListener storage_listener_interface;
- CORBA_Environment ev;
-
- priv = corba_storage->priv;
-
- servant = storage_listener_servant_new (corba_storage);
-
- CORBA_exception_init (&ev);
-
- POA_GNOME_Evolution_StorageListener__init (servant, &ev);
- if (ev._major != CORBA_NO_EXCEPTION)
- goto error;
-
- CORBA_free (PortableServer_POA_activate_object (bonobo_poa (), servant, &ev));
- if (ev._major != CORBA_NO_EXCEPTION)
- goto error;
-
- storage_listener_interface = PortableServer_POA_servant_to_reference (bonobo_poa (),
- servant, &ev);
- if (ev._major != CORBA_NO_EXCEPTION)
- goto error;
-
- priv->storage_listener_interface = storage_listener_interface;
- priv->storage_listener_servant = servant;
-
- return TRUE;
-
- error:
- storage_listener_servant_free (servant);
- CORBA_exception_free (&ev);
- return FALSE;
-}
-
-
-/* GObject methods. */
-
-static void
-impl_dispose (GObject *object)
-{
- CORBA_Environment ev;
- ECorbaStorage *corba_storage;
- ECorbaStoragePrivate *priv;
-
- corba_storage = E_CORBA_STORAGE (object);
- priv = corba_storage->priv;
-
- CORBA_exception_init (&ev);
-
- if (priv->storage_interface != CORBA_OBJECT_NIL) {
- Bonobo_Unknown_unref (priv->storage_interface, &ev);
- CORBA_Object_release (priv->storage_interface, &ev);
- priv->storage_interface = CORBA_OBJECT_NIL;
- }
-
- if (priv->storage_listener_interface != CORBA_OBJECT_NIL) {
- CORBA_Object_release (priv->storage_listener_interface, &ev);
- priv->storage_listener_interface = CORBA_OBJECT_NIL;
- }
-
- if (priv->storage_listener_servant != NULL) {
- PortableServer_ObjectId *object_id;
-
- object_id = PortableServer_POA_servant_to_id (bonobo_poa (), priv->storage_listener_servant,
- &ev);
- PortableServer_POA_deactivate_object (bonobo_poa (), object_id, &ev);
-
- CORBA_free (object_id);
-
- priv->storage_listener_servant = NULL;
- }
-
- CORBA_exception_free (&ev);
-
- if (priv->pending_opens != NULL) {
- g_warning ("destroying ECorbaStorage with pending async ops");
- priv->pending_opens = NULL;
- }
-
- (* G_OBJECT_CLASS (parent_class)->dispose) (object);
-}
-
-static void
-impl_finalize (GObject *object)
-{
- ECorbaStorage *corba_storage;
-
- corba_storage = E_CORBA_STORAGE (object);
-
- g_free (corba_storage->priv);
-
- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
-}
-
-
-/* EStorage methods. */
-
-static void
-get_folder_cb (EStorage *storage, EStorageResult result,
- const char *path, gpointer data)
-{
- gboolean *done = data;
-
- *done = TRUE;
-}
-
-static EFolder *
-get_folder (EStorage *storage, const char *path)
-{
- EFolder *folder;
- char *path_dup, *p;
-
- folder = (* E_STORAGE_CLASS (parent_class)->get_folder) (storage, path);
- if (folder)
- return folder;
-
- /* If @path points to a part of the storage that hasn't been
- * opened yet, do that.
- */
- path_dup = g_strdup (path);
- p = strchr (path_dup + 1, '/');
- while (p) {
- *p = '\0';
- if (e_storage_get_has_subfolders (storage, path_dup)) {
- gboolean done = FALSE;
-
- e_storage_async_open_folder (storage, path_dup,
- get_folder_cb, &done);
- while (!done)
- gtk_main_iteration ();
- }
- *p = '/';
- p = strchr (p + 1, '/');
- }
-
- return (* E_STORAGE_CLASS (parent_class)->get_folder) (storage, path);
-}
-
-struct async_folder_closure {
- EStorageResultCallback callback;
- EStorage *storage;
- void *data;
-};
-
-static void
-async_folder_cb (BonoboListener *listener,
- const char *event_name,
- const CORBA_any *any,
- CORBA_Environment *ev,
- gpointer user_data)
-{
- struct async_folder_closure *closure = user_data;
- GNOME_Evolution_Storage_Result *corba_result;
- EStorageResult result;
-
- corba_result = any->_value;
- result = e_corba_storage_corba_result_to_storage_result (*corba_result);
-
- (* closure->callback) (closure->storage, result, closure->data);
- bonobo_object_unref (BONOBO_OBJECT (listener));
-
- g_object_unref (closure->storage);
- g_free (closure);
-}
-
-
-struct async_create_open_closure {
- EStorage *storage;
- char *path, *type, *description;
- EStorageResultCallback callback;
- void *data;
-};
-
-static void
-async_create_open_cb (EStorage *storage, EStorageResult result,
- const char *path, void *data)
-{
- struct async_create_open_closure *closure = data;
-
- if (result != E_STORAGE_OK) {
- (* closure->callback) (closure->storage, result,
- closure->data);
- } else {
- e_storage_async_create_folder (closure->storage,
- closure->path, closure->type,
- closure->description,
- closure->callback,
- closure->data);
- }
-
- g_object_unref (closure->storage);
- g_free (closure->path);
- g_free (closure->type);
- g_free (closure->description);
- g_free (closure);
-}
-
-static void
-async_create_folder (EStorage *storage, const char *path,
- const char *type, const char *description,
- EStorageResultCallback callback, void *data)
-{
- ECorbaStorage *corba_storage;
- ECorbaStoragePrivate *priv;
- const char *parent_uri;
- char *p;
- BonoboListener *listener;
- Bonobo_Listener corba_listener;
- CORBA_Environment ev;
- struct async_folder_closure *closure;
-
- corba_storage = E_CORBA_STORAGE (storage);
- priv = corba_storage->priv;
-
- p = strrchr (path, '/');
- if (p && p != path) {
- EFolder *parent;
- char *parent_path;
-
- parent_path = g_strndup (path, p - path);
- parent = e_storage_get_folder (storage, parent_path);
- parent_uri = e_folder_get_physical_uri (parent);
-
- if (e_folder_get_has_subfolders (parent)) {
- struct async_create_open_closure *open_closure;
-
- /* Force the parent folder to resolve its
- * children before creating the new folder.
- */
- open_closure = g_new (struct async_create_open_closure, 1);
- open_closure->storage = storage;
- g_object_ref (storage);
- open_closure->path = g_strdup (path);
- open_closure->type = g_strdup (type);
- open_closure->description = g_strdup (description);
- open_closure->callback = callback;
- open_closure->data = data;
- e_storage_async_open_folder (storage, parent_path,
- async_create_open_cb,
- open_closure);
- return;
- }
- } else
- parent_uri = "";
-
- closure = g_new (struct async_folder_closure, 1);
- closure->callback = callback;
- closure->storage = storage;
- g_object_ref (storage);
- closure->data = data;
- listener = bonobo_listener_new (async_folder_cb, closure);
- corba_listener = bonobo_object_corba_objref (BONOBO_OBJECT (listener));
-
- CORBA_exception_init (&ev);
- GNOME_Evolution_Storage_asyncCreateFolder (priv->storage_interface,
- path, type, description,
- parent_uri,
- corba_listener, &ev);
-
- if (ev._major != CORBA_NO_EXCEPTION) {
- (* callback) (storage, E_STORAGE_GENERICERROR, data);
- bonobo_object_unref (BONOBO_OBJECT (listener));
- g_object_unref (storage);
- g_free (closure);
- }
- CORBA_exception_free (&ev);
-}
-
-static void
-async_remove_folder (EStorage *storage,
- const char *path,
- EStorageResultCallback callback,
- void *data)
-{
- ECorbaStorage *corba_storage;
- ECorbaStoragePrivate *priv;
- EFolder *folder;
- BonoboListener *listener;
- Bonobo_Listener corba_listener;
- CORBA_Environment ev;
- struct async_folder_closure *closure;
-
- corba_storage = E_CORBA_STORAGE (storage);
- priv = corba_storage->priv;
-
- folder = e_storage_get_folder (storage, path);
- if (e_folder_get_is_stock (folder)) {
- (* callback) (storage, E_STORAGE_CANTCHANGESTOCKFOLDER, data);
- return;
- }
- if (e_folder_get_physical_uri (folder) == NULL) {
- (* callback) (storage, E_STORAGE_GENERICERROR, data);
- return;
- }
-
- closure = g_new (struct async_folder_closure, 1);
- closure->callback = callback;
- closure->storage = storage;
- g_object_ref (storage);
- closure->data = data;
- listener = bonobo_listener_new (async_folder_cb, closure);
- corba_listener = bonobo_object_corba_objref (BONOBO_OBJECT (listener));
-
- CORBA_exception_init (&ev);
- GNOME_Evolution_Storage_asyncRemoveFolder (priv->storage_interface,
- path,
- e_folder_get_physical_uri (folder),
- corba_listener, &ev);
-
- if (ev._major != CORBA_NO_EXCEPTION) {
- (* callback) (storage, E_STORAGE_GENERICERROR, data);
- bonobo_object_unref (BONOBO_OBJECT (listener));
- g_object_unref (storage);
- g_free (closure);
- }
- CORBA_exception_free (&ev);
-}
-
-static void
-async_xfer_folder (EStorage *storage,
- const char *source_path,
- const char *destination_path,
- gboolean remove_source,
- EStorageResultCallback callback,
- void *data)
-{
- ECorbaStorage *corba_storage;
- ECorbaStoragePrivate *priv;
- EFolder *folder;
- BonoboListener *listener;
- Bonobo_Listener corba_listener;
- CORBA_Environment ev;
- struct async_folder_closure *closure;
-
- corba_storage = E_CORBA_STORAGE (storage);
- priv = corba_storage->priv;
-
- folder = e_storage_get_folder (storage, source_path);
- if (e_folder_get_is_stock (folder) && remove_source)
- (* callback) (storage, E_STORAGE_CANTCHANGESTOCKFOLDER, data);
-
- closure = g_new (struct async_folder_closure, 1);
- closure->callback = callback;
- closure->storage = storage;
- g_object_ref (storage);
- closure->data = data;
- listener = bonobo_listener_new (async_folder_cb, closure);
- corba_listener = bonobo_object_corba_objref (BONOBO_OBJECT (listener));
-
- CORBA_exception_init (&ev);
- GNOME_Evolution_Storage_asyncXferFolder (priv->storage_interface,
- source_path, destination_path,
- remove_source, corba_listener, &ev);
-
- if (ev._major != CORBA_NO_EXCEPTION) {
- (* callback) (storage, E_STORAGE_GENERICERROR, data);
- bonobo_object_unref (BONOBO_OBJECT (listener));
- g_object_unref (storage);
- g_free (closure);
- }
- CORBA_exception_free (&ev);
-}
-
-struct async_open_closure {
- EStorageDiscoveryCallback callback;
- EStorage *storage;
- void *data;
- char *path;
-};
-
-static void
-async_open_cb (BonoboListener *listener, const char *event_name,
- const CORBA_any *any, CORBA_Environment *ev,
- gpointer user_data)
-{
- struct async_open_closure *orig_closure = user_data, *closure;
- GNOME_Evolution_Storage_Result *corba_result;
- ECorbaStoragePrivate *priv;
- EStorageResult result;
- GList *p;
-
- corba_result = any->_value;
- result = e_corba_storage_corba_result_to_storage_result (*corba_result);
- bonobo_object_unref (BONOBO_OBJECT (listener));
-
- priv = E_CORBA_STORAGE (orig_closure->storage)->priv;
- p = priv->pending_opens;
- while (p) {
- closure = p->data;
- if (!strcmp (closure->path, orig_closure->path)) {
- (* closure->callback) (closure->storage, result,
- closure->path, closure->data);
- if (closure != orig_closure) {
- g_object_unref (orig_closure->storage);
- g_free (closure->path);
- g_free (closure);
- }
- priv->pending_opens = g_list_remove (priv->pending_opens, p->data);
- p = priv->pending_opens;
- } else
- p = p->next;
- }
-
- g_object_unref (orig_closure->storage);
- g_free (orig_closure->path);
- g_free (orig_closure);
-}
-
-static gboolean
-async_open_folder_idle (gpointer data)
-{
- struct async_open_closure *closure = data, *old_closure;
- EStorage *storage = closure->storage;
- ECorbaStorage *corba_storage;
- ECorbaStoragePrivate *priv;
- BonoboListener *listener;
- Bonobo_Listener corba_listener;
- CORBA_Environment ev;
- GList *p;
-
- corba_storage = E_CORBA_STORAGE (storage);
- priv = corba_storage->priv;
-
- for (p = priv->pending_opens; p; p = p->next) {
- old_closure = p->data;
- if (!strcmp (closure->path, old_closure->path)) {
- priv->pending_opens = g_list_prepend (priv->pending_opens, closure);
- return FALSE;
- }
- }
-
- listener = bonobo_listener_new (async_open_cb, closure);
- corba_listener = bonobo_object_corba_objref (BONOBO_OBJECT (listener));
-
- priv->pending_opens = g_list_prepend (priv->pending_opens, closure);
-
- CORBA_exception_init (&ev);
- GNOME_Evolution_Storage_asyncOpenFolder (priv->storage_interface,
- closure->path,
- corba_listener, &ev);
- if (ev._major != CORBA_NO_EXCEPTION) {
- (* closure->callback) (storage, E_STORAGE_GENERICERROR,
- closure->path, closure->data);
- bonobo_object_unref (BONOBO_OBJECT (listener));
- g_object_unref (closure->storage);
- g_free (closure->path);
- g_free (closure);
-
- priv->pending_opens = g_list_delete_link (priv->pending_opens,
- priv->pending_opens);
- }
- CORBA_exception_free (&ev);
-
- return FALSE;
-}
-
-static void
-async_open_folder (EStorage *storage,
- const char *path,
- EStorageDiscoveryCallback callback,
- void *data)
-{
- struct async_open_closure *closure;
-
- closure = g_new (struct async_open_closure, 1);
- closure->callback = callback;
- closure->storage = storage;
- g_object_ref (storage);
- closure->data = data;
- closure->path = g_strdup (path);
-
- g_idle_add (async_open_folder_idle, closure);
-}
-
-
-/* Shared folders. */
-
-static gboolean
-supports_shared_folders (EStorage *storage)
-{
- GNOME_Evolution_Storage storage_iface;
- CORBA_boolean has_shared_folders;
- CORBA_Environment ev;
-
- CORBA_exception_init (&ev);
-
- storage_iface = e_corba_storage_get_corba_objref (E_CORBA_STORAGE (storage));
- g_assert (storage_iface != CORBA_OBJECT_NIL);
-
- has_shared_folders = GNOME_Evolution_Storage__get_hasSharedFolders (storage_iface, &ev);
- if (BONOBO_EX (&ev))
- has_shared_folders = FALSE;
-
- CORBA_exception_free (&ev);
-
- return has_shared_folders;
-}
-
-static void
-async_folder_discovery_cb (BonoboListener *listener,
- const char *event_name,
- const CORBA_any *any,
- CORBA_Environment *ev,
- gpointer user_data)
-{
- struct async_folder_closure *closure = user_data;
- GNOME_Evolution_Storage_FolderResult *corba_result;
- EStorageDiscoveryCallback callback;
- EStorageResult result;
- char *path;
-
- corba_result = any->_value;
- result = e_corba_storage_corba_result_to_storage_result (corba_result->result);
- if (result == E_STORAGE_OK)
- path = corba_result->path;
- else
- path = NULL;
-
- callback = (EStorageDiscoveryCallback)closure->callback;
- (* callback) (closure->storage, result, path, closure->data);
-
- bonobo_object_unref (BONOBO_OBJECT (listener));
- g_object_unref (closure->storage);
- g_free (closure);
-}
-
-static void
-async_discover_shared_folder (EStorage *storage,
- const char *owner,
- const char *folder_name,
- EStorageDiscoveryCallback callback,
- void *data)
-{
- ECorbaStorage *corba_storage;
- ECorbaStoragePrivate *priv;
- BonoboListener *listener;
- Bonobo_Listener corba_listener;
- CORBA_Environment ev;
- struct async_folder_closure *closure;
-
- corba_storage = E_CORBA_STORAGE (storage);
- priv = corba_storage->priv;
-
- closure = g_new (struct async_folder_closure, 1);
- closure->callback = (EStorageResultCallback)callback;
- closure->storage = storage;
- g_object_ref (storage);
- closure->data = data;
- listener = bonobo_listener_new (async_folder_discovery_cb, closure);
- corba_listener = bonobo_object_corba_objref (BONOBO_OBJECT (listener));
-
- CORBA_exception_init (&ev);
- GNOME_Evolution_Storage_asyncDiscoverSharedFolder (priv->storage_interface,
- owner, folder_name,
- corba_listener, &ev);
- if (ev._major != CORBA_NO_EXCEPTION) {
- (* callback) (storage, E_STORAGE_GENERICERROR, NULL, data);
- bonobo_object_unref (BONOBO_OBJECT (listener));
- g_object_unref (storage);
- g_free (closure);
- }
- CORBA_exception_free (&ev);
-}
-
-static void
-cancel_discover_shared_folder (EStorage *storage,
- const char *owner,
- const char *folder_name)
-{
- ECorbaStorage *corba_storage;
- ECorbaStoragePrivate *priv;
- CORBA_Environment ev;
-
- corba_storage = E_CORBA_STORAGE (storage);
- priv = corba_storage->priv;
-
- CORBA_exception_init (&ev);
- GNOME_Evolution_Storage_cancelDiscoverSharedFolder (priv->storage_interface,
- owner, folder_name, &ev);
- if (BONOBO_EX (&ev))
- g_warning ("Error invoking cancelDiscoverSharedFolder -- %s", BONOBO_EX_REPOID (&ev));
- CORBA_exception_free (&ev);
-}
-
-static void
-async_remove_shared_folder (EStorage *storage,
- const char *path,
- EStorageResultCallback callback,
- void *data)
-{
- ECorbaStorage *corba_storage;
- ECorbaStoragePrivate *priv;
- BonoboListener *listener;
- Bonobo_Listener corba_listener;
- CORBA_Environment ev;
- struct async_folder_closure *closure;
-
- corba_storage = E_CORBA_STORAGE (storage);
- priv = corba_storage->priv;
-
- closure = g_new (struct async_folder_closure, 1);
- closure->callback = callback;
- closure->storage = storage;
- g_object_ref (storage);
- closure->data = data;
- listener = bonobo_listener_new (async_folder_cb, closure);
- corba_listener = bonobo_object_corba_objref (BONOBO_OBJECT (listener));
-
- CORBA_exception_init (&ev);
- GNOME_Evolution_Storage_asyncRemoveSharedFolder (priv->storage_interface,
- path, corba_listener,
- &ev);
- if (ev._major != CORBA_NO_EXCEPTION) {
- (* callback) (storage, E_STORAGE_GENERICERROR, data);
- bonobo_object_unref (BONOBO_OBJECT (listener));
- g_object_unref (storage);
- g_free (closure);
- }
- CORBA_exception_free (&ev);
-}
-
-
-static void
-corba_class_init (void)
-{
- POA_GNOME_Evolution_StorageListener__vepv *vepv;
- POA_GNOME_Evolution_StorageListener__epv *epv;
- PortableServer_ServantBase__epv *base_epv;
-
- base_epv = g_new0 (PortableServer_ServantBase__epv, 1);
- base_epv->_private = NULL;
- base_epv->finalize = NULL;
- base_epv->default_POA = NULL;
-
- epv = g_new0 (POA_GNOME_Evolution_StorageListener__epv, 1);
- epv->notifyFolderCreated = impl_StorageListener_notifyFolderCreated;
- epv->notifyFolderUpdated = impl_StorageListener_notifyFolderUpdated;
- epv->notifyFolderRemoved = impl_StorageListener_notifyFolderRemoved;
- epv->notifyHasSubfolders = impl_StorageListener_notifyHasSubfolders;
-
- vepv = &storage_listener_vepv;
- vepv->_base_epv = base_epv;
- vepv->GNOME_Evolution_StorageListener_epv = epv;
-}
-
-static void
-class_init (ECorbaStorageClass *klass)
-{
- GObjectClass *object_class;
- EStorageClass *storage_class;
-
- object_class = G_OBJECT_CLASS (klass);
- object_class->dispose = impl_dispose;
- object_class->finalize = impl_finalize;
-
- storage_class = E_STORAGE_CLASS (klass);
- storage_class->get_folder = get_folder;
- storage_class->async_create_folder = async_create_folder;
- storage_class->async_remove_folder = async_remove_folder;
- storage_class->async_xfer_folder = async_xfer_folder;
- storage_class->async_open_folder = async_open_folder;
- storage_class->supports_shared_folders = supports_shared_folders;
- storage_class->async_discover_shared_folder = async_discover_shared_folder;
- storage_class->cancel_discover_shared_folder = cancel_discover_shared_folder;
- storage_class->async_remove_shared_folder = async_remove_shared_folder;
-
- corba_class_init ();
-
- parent_class = g_type_class_ref(PARENT_TYPE);
-}
-
-static void
-init (ECorbaStorage *corba_storage)
-{
- ECorbaStoragePrivate *priv;
-
- priv = g_new (ECorbaStoragePrivate, 1);
- priv->storage_interface = CORBA_OBJECT_NIL;
- priv->pending_opens = NULL;
-
- corba_storage->priv = priv;
-}
-
-
-/* FIXME: OK to have a boolean construct function? */
-void
-e_corba_storage_construct (ECorbaStorage *corba_storage,
- const GNOME_Evolution_Storage storage_interface,
- const char *name)
-{
- ECorbaStoragePrivate *priv;
- CORBA_Environment ev;
- EFolder *root_folder;
-
- g_return_if_fail (corba_storage != NULL);
- g_return_if_fail (E_IS_CORBA_STORAGE (corba_storage));
- g_return_if_fail (storage_interface != CORBA_OBJECT_NIL);
- g_return_if_fail (name != NULL);
-
- /* FIXME: Need separate name and display name. */
- root_folder = e_folder_new (name, "noselect", "");
- e_storage_construct (E_STORAGE (corba_storage), name, root_folder);
-
- priv = corba_storage->priv;
-
- CORBA_exception_init (&ev);
-
- Bonobo_Unknown_ref (storage_interface, &ev);
- if (ev._major != CORBA_NO_EXCEPTION)
- g_warning ("e_corba_storage_construct() -- Cannot reference Bonobo object");
- else
- priv->storage_interface = CORBA_Object_duplicate (storage_interface, &ev);
-
- CORBA_exception_free (&ev);
-
- setup_storage_listener (corba_storage);
-}
-
-EStorage *
-e_corba_storage_new (const GNOME_Evolution_Storage storage_interface,
- const char *name)
-{
- EStorage *new;
-
- g_return_val_if_fail (storage_interface != CORBA_OBJECT_NIL, NULL);
- g_return_val_if_fail (name != NULL, NULL);
-
- new = g_object_new (e_corba_storage_get_type (), NULL);
-
- e_corba_storage_construct (E_CORBA_STORAGE (new),
- storage_interface, name);
-
- return new;
-}
-
-
-const GNOME_Evolution_StorageListener
-e_corba_storage_get_StorageListener (ECorbaStorage *corba_storage)
-{
- g_return_val_if_fail (corba_storage != NULL, NULL);
- g_return_val_if_fail (E_IS_CORBA_STORAGE (corba_storage), NULL);
-
- return corba_storage->priv->storage_listener_interface;
-}
-
-GNOME_Evolution_Storage
-e_corba_storage_get_corba_objref (ECorbaStorage *corba_storage)
-{
- g_return_val_if_fail (corba_storage != NULL, CORBA_OBJECT_NIL);
- g_return_val_if_fail (E_IS_CORBA_STORAGE (corba_storage), CORBA_OBJECT_NIL);
-
- return corba_storage->priv->storage_interface;
-}
-
-
-GSList *
-e_corba_storage_get_folder_property_items (ECorbaStorage *corba_storage)
-{
- GNOME_Evolution_Storage_FolderPropertyItemList *corba_items;
- CORBA_Environment ev;
- GSList *list;
- int i;
-
- g_return_val_if_fail (E_IS_CORBA_STORAGE (corba_storage), NULL);
-
- CORBA_exception_init (&ev);
-
- corba_items = GNOME_Evolution_Storage__get_folderPropertyItems (corba_storage->priv->storage_interface,
- &ev);
-
- if (BONOBO_EX (&ev)) {
- CORBA_exception_free (&ev);
- return NULL;
- }
-
- list = NULL;
- for (i = 0; i < corba_items->_length; i ++) {
- ECorbaStoragePropertyItem *item;
-
- item = g_new (ECorbaStoragePropertyItem, 1);
- item->label = g_strdup (corba_items->_buffer[i].label);
- item->tooltip = g_strdup (corba_items->_buffer[i].tooltip);
- item->icon = NULL; /* We don't care for now -- FIXME */
-
- list = g_slist_prepend (list, item);
- }
- list = g_slist_reverse (list);
-
- CORBA_free (corba_items);
- CORBA_exception_free (&ev);
-
- return list;
-}
-
-void
-e_corba_storage_free_property_items_list (GSList *list)
-{
- GSList *p;
-
- for (p = list; p != NULL; p = p->next) {
- ECorbaStoragePropertyItem *item;
-
- item = (ECorbaStoragePropertyItem *) p->data;
-
- if (item->icon != NULL)
- g_object_unref (item->icon);
- g_free (item->label);
- g_free (item->tooltip);
- g_free (item);
- }
-
- g_slist_free (list);
-}
-
-void
-e_corba_storage_show_folder_properties (ECorbaStorage *corba_storage,
- const char *path,
- int property_item_id,
- GdkWindow *parent_window)
-{
- CORBA_Environment ev;
-
- g_return_if_fail (E_IS_CORBA_STORAGE (corba_storage));
- g_return_if_fail (path != NULL && path[0] == E_PATH_SEPARATOR);
-
- CORBA_exception_init (&ev);
-
- GNOME_Evolution_Storage_showFolderProperties (corba_storage->priv->storage_interface,
- path, property_item_id,
- GDK_WINDOW_XWINDOW (parent_window),
- &ev);
- if (BONOBO_EX (&ev))
- g_warning ("Error in Storage::showFolderProperties -- %s", BONOBO_EX_REPOID (&ev));
-
- CORBA_exception_free (&ev);
-}
-
-EStorageResult
-e_corba_storage_corba_result_to_storage_result (GNOME_Evolution_Storage_Result corba_result)
-{
- switch (corba_result) {
- case GNOME_Evolution_Storage_OK:
- return E_STORAGE_OK;
- case GNOME_Evolution_Storage_UNSUPPORTED_OPERATION:
- return E_STORAGE_UNSUPPORTEDOPERATION;
- case GNOME_Evolution_Storage_UNSUPPORTED_TYPE:
- return E_STORAGE_UNSUPPORTEDTYPE;
- case GNOME_Evolution_Storage_INVALID_URI:
- return E_STORAGE_INVALIDNAME;
- case GNOME_Evolution_Storage_ALREADY_EXISTS:
- return E_STORAGE_EXISTS;
- case GNOME_Evolution_Storage_DOES_NOT_EXIST:
- return E_STORAGE_NOTFOUND;
- case GNOME_Evolution_Storage_PERMISSION_DENIED:
- return E_STORAGE_PERMISSIONDENIED;
- case GNOME_Evolution_Storage_NO_SPACE:
- return E_STORAGE_NOSPACE;
- case GNOME_Evolution_Storage_NOT_EMPTY:
- return E_STORAGE_NOTEMPTY;
- case GNOME_Evolution_Storage_NOT_ONLINE:
- return E_STORAGE_NOTONLINE;
- case GNOME_Evolution_Storage_GENERIC_ERROR:
- default:
- return E_STORAGE_GENERICERROR;
- }
-}
-
-
-E_MAKE_TYPE (e_corba_storage, "ECorbaStorage", ECorbaStorage, class_init, init, PARENT_TYPE)
diff --git a/shell/e-corba-storage.h b/shell/e-corba-storage.h
deleted file mode 100644
index da62ab628b..0000000000
--- a/shell/e-corba-storage.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-corba-storage.h
- *
- * Copyright (C) 2000 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifndef __E_CORBA_STORAGE_H__
-#define __E_CORBA_STORAGE_H__
-
-#include "e-storage.h"
-
-#include "Evolution.h"
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-#define E_TYPE_CORBA_STORAGE (e_corba_storage_get_type ())
-#define E_CORBA_STORAGE(obj) (GTK_CHECK_CAST ((obj), E_TYPE_CORBA_STORAGE, ECorbaStorage))
-#define E_CORBA_STORAGE_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_CORBA_STORAGE, ECorbaStorageClass))
-#define E_IS_CORBA_STORAGE(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_CORBA_STORAGE))
-#define E_IS_CORBA_STORAGE_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_CORBA_STORAGE))
-
-
-typedef struct _ECorbaStorage ECorbaStorage;
-typedef struct _ECorbaStoragePrivate ECorbaStoragePrivate;
-typedef struct _ECorbaStorageClass ECorbaStorageClass;
-
-struct _ECorbaStorage {
- EStorage parent;
-
- ECorbaStoragePrivate *priv;
-};
-
-struct _ECorbaStorageClass {
- EStorageClass parent_class;
-};
-
-
-struct _ECorbaStoragePropertyItem {
- char *label;
- char *tooltip;
- GdkPixbuf *icon;
-};
-typedef struct _ECorbaStoragePropertyItem ECorbaStoragePropertyItem;
-
-
-GtkType e_corba_storage_get_type (void);
-void e_corba_storage_construct (ECorbaStorage *corba_storage,
- const GNOME_Evolution_Storage storage_interface,
- const char *name);
-EStorage *e_corba_storage_new (const GNOME_Evolution_Storage storage_interface,
- const char *name);
-
-GNOME_Evolution_Storage e_corba_storage_get_corba_objref (ECorbaStorage *corba_storage);
-
-const GNOME_Evolution_StorageListener e_corba_storage_get_StorageListener (ECorbaStorage *corba_storage);
-
-GSList *e_corba_storage_get_folder_property_items (ECorbaStorage *corba_storage);
-void e_corba_storage_free_property_items_list (GSList *list);
-
-void e_corba_storage_show_folder_properties (ECorbaStorage *corba_storage,
- const char *path,
- int property_item_id,
- GdkWindow *parent_window);
-EStorageResult e_corba_storage_corba_result_to_storage_result (GNOME_Evolution_Storage_Result corba_result);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* __E_CORBA_STORAGE_H__ */
diff --git a/shell/e-folder-dnd-bridge.c b/shell/e-folder-dnd-bridge.c
deleted file mode 100644
index c72322f476..0000000000
--- a/shell/e-folder-dnd-bridge.c
+++ /dev/null
@@ -1,487 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-folder-dnd-bridge.c - Utility functions for handling dnd to Evolution
- * folders using the ShellComponentDnd interface.
- *
- * Copyright (C) 2002 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli <ettore@ximian.com>
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "e-folder-dnd-bridge.h"
-
-#include "Evolution.h"
-#include "e-storage-set-view.h"
-#include "e-shell-constants.h"
-
-#include "e-util/e-dialog-utils.h"
-
-#include <libgnome/gnome-i18n.h>
-#include <libgnome/gnome-util.h>
-
-#include <string.h>
-
-
-/* Callbacks for folder operations. */
-
-static void
-folder_xfer_callback (EStorageSet *storage_set,
- EStorageResult result,
- void *data)
-{
- GtkWindow *parent;
-
- if (result == E_STORAGE_OK)
- return;
-
- parent = GTK_WINDOW (data);
- e_notice (parent, GTK_MESSAGE_ERROR, _("Cannot transfer folder:\n%s"),
- e_storage_result_to_string (result));
-}
-
-
-/* Utility functions. */
-
-static GNOME_Evolution_ShellComponentDnd_ActionSet
-convert_gdk_drag_action_set_to_corba (GdkDragAction action)
-{
- GNOME_Evolution_ShellComponentDnd_Action retval;
-
- retval = GNOME_Evolution_ShellComponentDnd_ACTION_DEFAULT;
-
- if (action & GDK_ACTION_COPY)
- retval |= GNOME_Evolution_ShellComponentDnd_ACTION_COPY;
- if (action & GDK_ACTION_MOVE)
- retval |= GNOME_Evolution_ShellComponentDnd_ACTION_MOVE;
- if (action & GDK_ACTION_LINK)
- retval |= GNOME_Evolution_ShellComponentDnd_ACTION_LINK;
- if (action & GDK_ACTION_ASK)
- retval |= GNOME_Evolution_ShellComponentDnd_ACTION_ASK;
-
- return retval;
-}
-
-static GNOME_Evolution_ShellComponentDnd_ActionSet
-convert_gdk_drag_action_to_corba (GdkDragAction action)
-{
- if (action == GDK_ACTION_COPY)
- return GNOME_Evolution_ShellComponentDnd_ACTION_COPY;
- else if (action == GDK_ACTION_MOVE)
- return GNOME_Evolution_ShellComponentDnd_ACTION_MOVE;
- else if (action == GDK_ACTION_LINK)
- return GNOME_Evolution_ShellComponentDnd_ACTION_LINK;
- else if (action == GDK_ACTION_ASK)
- return GNOME_Evolution_ShellComponentDnd_ACTION_ASK;
- else {
- g_warning ("Unknown GdkDragAction %d", action);
- return GNOME_Evolution_ShellComponentDnd_ACTION_DEFAULT;
- }
-}
-
-static GdkDragAction
-convert_corba_drag_action_to_gdk (GNOME_Evolution_ShellComponentDnd_ActionSet action)
-{
- if (action == GNOME_Evolution_ShellComponentDnd_ACTION_COPY)
- return GDK_ACTION_COPY;
- else if (action == GNOME_Evolution_ShellComponentDnd_ACTION_MOVE)
- return GDK_ACTION_MOVE;
- else if (action == GNOME_Evolution_ShellComponentDnd_ACTION_LINK)
- return GDK_ACTION_LINK;
- else if (action == GNOME_Evolution_ShellComponentDnd_ACTION_ASK)
- return GDK_ACTION_ASK;
- else {
- g_warning ("unknown GNOME_Evolution_ShellComponentDnd_ActionSet %d", action);
- return GDK_ACTION_DEFAULT;
- }
-}
-
-static EvolutionShellComponentClient *
-get_component_at_path (EStorageSet *storage_set,
- const char *path)
-{
- EvolutionShellComponentClient *component_client;
- EFolderTypeRegistry *folder_type_registry;
- EFolder *folder;
-
- folder = e_storage_set_get_folder (storage_set, path);
- if (folder == NULL)
- return NULL;
-
- folder_type_registry = e_storage_set_get_folder_type_registry (storage_set);
- g_assert (folder_type_registry != NULL);
-
- component_client = e_folder_type_registry_get_handler_for_type (folder_type_registry,
- e_folder_get_type_string (folder));
-
- return component_client;
-}
-
-/* This will look for the targets in @drag_context, choose one that matches
- with the allowed types at @path, and return its name. The EVOLUTION_PATH
- type always matches. */
-static const char *
-find_matching_target_for_drag_context (EStorageSet *storage_set,
- const char *path,
- GdkDragContext *drag_context,
- GdkAtom *atom_return)
-{
- EFolderTypeRegistry *folder_type_registry;
- EFolder *folder;
- GList *accepted_types;
- GList *p, *q;
-
- folder_type_registry = e_storage_set_get_folder_type_registry (storage_set);
-
- folder = e_storage_set_get_folder (storage_set, path);
- if (folder == NULL)
- return E_FOLDER_DND_PATH_TARGET_TYPE;
-
- accepted_types = e_folder_type_registry_get_accepted_dnd_types_for_type (folder_type_registry,
- e_folder_get_type_string (folder));
-
- for (p = drag_context->targets; p != NULL; p = p->next) {
- char *possible_type;
-
- possible_type = gdk_atom_name (p->data);
- if (strcmp (possible_type, E_FOLDER_DND_PATH_TARGET_TYPE) == 0) {
- g_free (possible_type);
-
- if (atom_return != NULL)
- *atom_return = p->data;
-
- return E_FOLDER_DND_PATH_TARGET_TYPE;
- }
-
- for (q = accepted_types; q != NULL; q = q->next) {
- const char *accepted_type;
-
- accepted_type = (const char *) q->data;
- if (strcmp (possible_type, accepted_type) == 0) {
- g_free (possible_type);
-
- if (atom_return != NULL)
- *atom_return = p->data;
-
- return accepted_type;
- }
- }
-
- g_free (possible_type);
- }
-
- if (atom_return != NULL)
- *atom_return = 0;
-
- return NULL;
-}
-
-static gboolean
-handle_evolution_path_drag_motion (EStorageSet *storage_set,
- const char *path,
- GdkDragContext *context,
- unsigned int time)
-{
- GdkModifierType modifiers;
- GdkDragAction action;
-
- gdk_window_get_pointer (NULL, NULL, NULL, &modifiers);
-
- if ((modifiers & GDK_CONTROL_MASK) != 0) {
- action = GDK_ACTION_COPY;
- } else {
- GtkWidget *source_widget;
-
- action = GDK_ACTION_MOVE;
-
- source_widget = gtk_drag_get_source_widget (context);
- if (source_widget != NULL
- && E_IS_STORAGE_SET_VIEW (source_widget)) {
- const char *source_path;
-
- source_path = e_storage_set_view_get_current_folder (E_STORAGE_SET_VIEW (source_widget));
- if (source_path != NULL) {
- EFolder *folder;
- int source_path_len;
- char *destination_path;
- char *base_name;
-
- folder = e_storage_set_get_folder (storage_set, source_path);
- if (folder != NULL && e_folder_get_is_stock (folder))
- return FALSE;
-
- source_path_len = strlen (path);
- if (strcmp (path, source_path) == 0)
- return FALSE;
-
- base_name = g_path_get_basename (source_path);
- destination_path = g_strconcat (path, "/", base_name, NULL);
- g_free (base_name);
-
- if (strncmp (destination_path, source_path, source_path_len) == 0) {
- g_free (destination_path);
- return FALSE;
- }
-
- g_free (destination_path);
- }
- }
- }
-
- gdk_drag_status (context, action, time);
- return TRUE;
-}
-
-
-/* Bridge for the DnD motion event. */
-
-gboolean
-e_folder_dnd_bridge_motion (GtkWidget *widget,
- GdkDragContext *context,
- unsigned int time,
- EStorageSet *storage_set,
- const char *path)
-{
- EvolutionShellComponentClient *component_client;
- GNOME_Evolution_ShellComponentDnd_DestinationFolder destination_folder_interface;
- GNOME_Evolution_ShellComponentDnd_DestinationFolder_Context corba_context;
- GNOME_Evolution_ShellComponentDnd_Action suggested_action;
- CORBA_Environment ev;
- CORBA_boolean can_handle;
- EFolder *folder;
- const char *dnd_type;
-
- g_return_val_if_fail (GTK_IS_WIDGET (widget), FALSE);
- g_return_val_if_fail (context != NULL, FALSE);
- g_return_val_if_fail (E_IS_STORAGE_SET (storage_set), FALSE);
- g_return_val_if_fail (path != NULL, FALSE);
-
- dnd_type = find_matching_target_for_drag_context (storage_set, path, context, NULL);
- if (dnd_type == NULL)
- return FALSE;
-
- if (strcmp (dnd_type, E_FOLDER_DND_PATH_TARGET_TYPE) == 0)
- return handle_evolution_path_drag_motion (storage_set, path, context, time);
-
- component_client = get_component_at_path (storage_set, path);
- if (component_client == NULL)
- return FALSE;
-
- destination_folder_interface = evolution_shell_component_client_get_dnd_destination_interface (component_client);
- if (destination_folder_interface == NULL)
- return FALSE;
-
- CORBA_exception_init (&ev);
-
- corba_context.dndType = (char *) dnd_type; /* (Safe cast, as we don't actually free the corba_context.) */
- corba_context.possibleActions = convert_gdk_drag_action_set_to_corba (context->actions);
- corba_context.suggestedAction = convert_gdk_drag_action_to_corba (context->suggested_action);
-
- folder = e_storage_set_get_folder (storage_set, path);
-
- can_handle = GNOME_Evolution_ShellComponentDnd_DestinationFolder_handleMotion (destination_folder_interface,
- e_folder_get_physical_uri (folder),
- e_folder_get_type_string (folder),
- &corba_context,
- &suggested_action,
- &ev);
- if (ev._major != CORBA_NO_EXCEPTION || ! can_handle) {
- CORBA_exception_free (&ev);
- return FALSE;
- }
-
- CORBA_exception_free (&ev);
-
- gdk_drag_status (context, convert_corba_drag_action_to_gdk (suggested_action), time);
- return TRUE;
-}
-
-
-/* Bridge for the drop event. */
-
-gboolean
-e_folder_dnd_bridge_drop (GtkWidget *widget,
- GdkDragContext *context,
- unsigned int time,
- EStorageSet *storage_set,
- const char *path)
-{
- GdkAtom atom;
-
- g_return_val_if_fail (GTK_IS_WIDGET (widget), FALSE);
- g_return_val_if_fail (context != NULL, FALSE);
- g_return_val_if_fail (E_IS_STORAGE_SET (storage_set), FALSE);
- g_return_val_if_fail (path != NULL, FALSE);
-
- if (context->targets == NULL)
- return FALSE;
-
- if (find_matching_target_for_drag_context (storage_set, path, context, &atom) == NULL)
- return FALSE;
-
- gtk_drag_get_data (widget, context, atom, time);
-
- return FALSE;
-}
-
-
-/* Bridge for the data_received event. */
-
-static gboolean
-handle_data_received_path (GdkDragContext *context,
- GtkSelectionData *selection_data,
- EStorageSet *storage_set,
- const char *path,
- GtkWindow *toplevel_window)
-{
- const char *source_path;
- char *destination_path;
- char *base_name;
- gboolean handled;
-
- source_path = (const char *) selection_data->data;
-
- /* (Basic sanity checks.) */
- if (source_path == NULL || source_path[0] != E_PATH_SEPARATOR || source_path[1] == '\0')
- return FALSE;
-
- base_name = g_path_get_basename (source_path);
- destination_path = g_build_filename (path, base_name, NULL);
- g_free (base_name);
-
- switch (context->action) {
- case GDK_ACTION_MOVE:
- e_storage_set_async_xfer_folder (storage_set,
- source_path,
- destination_path,
- TRUE,
- folder_xfer_callback,
- toplevel_window);
- handled = TRUE;
- break;
- case GDK_ACTION_COPY:
- e_storage_set_async_xfer_folder (storage_set,
- source_path,
- destination_path,
- FALSE,
- folder_xfer_callback,
- toplevel_window);
- handled = TRUE;
- break;
- default:
- handled = FALSE;
- g_warning ("EStorageSetView: Unknown action %d", context->action);
- }
-
- g_free (destination_path);
-
- return handled;
-}
-
-static gboolean
-handle_data_received_non_path (GdkDragContext *context,
- GtkSelectionData *selection_data,
- EStorageSet *storage_set,
- const char *path,
- const char *target_type)
-{
- GNOME_Evolution_ShellComponentDnd_DestinationFolder destination_folder_interface;
- GNOME_Evolution_ShellComponentDnd_DestinationFolder_Context corba_context;
- GNOME_Evolution_ShellComponentDnd_Data corba_data;
- EvolutionShellComponentClient *component_client;
- EFolder *folder;
- CORBA_Environment ev;
-
- component_client = get_component_at_path (storage_set, path);
- if (component_client == NULL)
- return FALSE;
-
- destination_folder_interface = evolution_shell_component_client_get_dnd_destination_interface (component_client);
- if (destination_folder_interface == NULL)
- return FALSE;
-
- CORBA_exception_init (&ev);
-
- folder = e_storage_set_get_folder (storage_set, path);
-
- corba_context.dndType = (char *) target_type;
- corba_context.possibleActions = convert_gdk_drag_action_set_to_corba (context->actions);
- corba_context.suggestedAction = convert_gdk_drag_action_to_corba (context->suggested_action);
-
- corba_data.format = selection_data->format;
- corba_data.target = gdk_atom_name (selection_data->target);
-
- corba_data.bytes._release = FALSE;
-
- if (selection_data->data == NULL) {
- /* If data is NULL the length is -1 and this would mess things
- up so we handle it separately. */
- corba_data.bytes._length = 0;
- corba_data.bytes._buffer = NULL;
- } else {
- corba_data.bytes._length = selection_data->length;
- corba_data.bytes._buffer = selection_data->data;
- }
-
- /* pass off the data to the component's DestinationFolderInterface */
- return GNOME_Evolution_ShellComponentDnd_DestinationFolder_handleDrop (destination_folder_interface,
- e_folder_get_physical_uri (folder),
- e_folder_get_type_string (folder),
- &corba_context,
- convert_gdk_drag_action_to_corba (context->action),
- &corba_data,
- &ev);
-}
-
-void
-e_folder_dnd_bridge_data_received (GtkWidget *widget,
- GdkDragContext *context,
- GtkSelectionData *selection_data,
- unsigned int time,
- EStorageSet *storage_set,
- const char *path)
-{
- char *target_type;
- gboolean handled;
-
- g_return_if_fail (GTK_IS_WIDGET (widget));
- g_return_if_fail (context != NULL);
- g_return_if_fail (E_IS_STORAGE_SET (storage_set));
- g_return_if_fail (path != NULL);
-
- if (selection_data->data == NULL && selection_data->length == -1)
- return;
-
- target_type = gdk_atom_name (selection_data->target);
-
- if (strcmp (target_type, E_FOLDER_DND_PATH_TARGET_TYPE) != 0) {
- handled = handle_data_received_non_path (context, selection_data, storage_set,
- path, target_type);
- } else {
- GtkWindow *toplevel_window;
-
- toplevel_window = GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (widget)));
- handled = handle_data_received_path (context, selection_data, storage_set, path,
- toplevel_window);
- }
-
- g_free (target_type);
- gtk_drag_finish (context, handled, FALSE, time);
-}
-
diff --git a/shell/e-folder-dnd-bridge.h b/shell/e-folder-dnd-bridge.h
deleted file mode 100644
index 77cfcd5181..0000000000
--- a/shell/e-folder-dnd-bridge.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-component-dnd-bridge.h - Utility functions for handling dnd to Evolution
- * folders using the ShellComponentDnd interface.
- *
- * Copyright (C) 2002 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli <ettore@ximian.com>
- */
-
-/* The purpose of this file is to share the logic for dropping objects into
- folders between different widgets that handle the display of EStorageSets
- (namely, the shortcut bar and the folder bar). */
-
-#ifndef E_FOLDER_BAR_DND_BRIDGE_H
-#define E_FOLDER_BAR_DND_BRIDGE_H
-
-#include "e-storage-set.h"
-
-#include <gtk/gtkwidget.h>
-#include <gtk/gtkdnd.h>
-
-#define E_FOLDER_DND_PATH_TARGET_TYPE "_EVOLUTION_PRIVATE_PATH"
-
-gboolean e_folder_dnd_bridge_motion (GtkWidget *widget,
- GdkDragContext *context,
- unsigned int time,
- EStorageSet *storage_set,
- const char *path);
-gboolean e_folder_dnd_bridge_drop (GtkWidget *widget,
- GdkDragContext *context,
- unsigned int time,
- EStorageSet *storage_set,
- const char *path);
-void e_folder_dnd_bridge_data_received (GtkWidget *widget,
- GdkDragContext *context,
- GtkSelectionData *selection_data,
- unsigned int time,
- EStorageSet *storage_set,
- const char *path);
-
-#endif /* E_FOLDER_BAR_DND_BRIDGE_H */
diff --git a/shell/e-folder-list.c b/shell/e-folder-list.c
deleted file mode 100644
index fb199be2a9..0000000000
--- a/shell/e-folder-list.c
+++ /dev/null
@@ -1,692 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-folder-list.c
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <config.h>
-
-#include <string.h>
-
-#include <gtk/gtkframe.h>
-
-#include <libgnome/gnome-i18n.h>
-
-#include <libxml/parser.h>
-#include <libxml/xmlmemory.h>
-
-#include <glade/glade.h>
-
-#include <gal/e-table/e-table-memory-store.h>
-#include <gal/util/e-xml-utils.h>
-#include <gal/widgets/e-gui-utils.h>
-#include <gal/widgets/e-option-menu.h>
-
-#include "e-folder-list.h"
-#include "e-shell-marshal.h"
-
-#include "Evolution.h"
-
-static GtkVBoxClass *parent_class = NULL;
-#define PARENT_TYPE (gtk_vbox_get_type ())
-
-enum {
- CHANGED,
- OPTION_MENU_CHANGED,
- LAST_SIGNAL
-};
-
-static guint signals [LAST_SIGNAL] = { 0, };
-
-/* The arguments we take */
-enum {
- PROP_0,
- PROP_TITLE,
- PROP_POSSIBLE_TYPES,
-};
-
-struct _EFolderListPrivate {
- GladeXML *gui;
-
- ETableScrolled *scrolled_table;
- char *title;
- GtkFrame *frame;
- ETableMemoryStore *model;
- EvolutionShellClient *client;
- GNOME_Evolution_StorageRegistry corba_storage_registry;
- EOptionMenu *option_menu;
-
- char **possible_types;
-};
-
-
-static GNOME_Evolution_Folder *
-get_folder_for_uri (EFolderList *efl,
- const char *uri)
-{
- EFolderListPrivate *priv = efl->priv;
- CORBA_Environment ev;
- GNOME_Evolution_Folder *folder;
-
- CORBA_exception_init (&ev);
- folder = GNOME_Evolution_StorageRegistry_getFolderByUri (
- priv->corba_storage_registry, uri, &ev);
- if (ev._major != CORBA_NO_EXCEPTION)
- folder = CORBA_OBJECT_NIL;
- CORBA_exception_free (&ev);
-
- return folder;
-}
-
-static char *
-create_display_string (EFolderList *efl, char *folder_uri, char *folder_name)
-{
- char *storage_lname, *p;
- char *label_text;
-
- storage_lname = NULL;
- p = strchr (folder_uri, '/');
- if (p) {
- p = strchr (p + 1, '/');
- if (p) {
- GNOME_Evolution_Folder *storage_folder;
- char *storage_uri;
-
- storage_uri = g_strndup (folder_uri,
- p - folder_uri);
- storage_folder = get_folder_for_uri (efl, storage_uri);
- storage_lname = g_strdup (storage_folder->displayName);
- CORBA_free (storage_folder);
- g_free (storage_uri);
- }
- }
-
- if (storage_lname) {
- label_text = g_strdup_printf (_("\"%s\" in \"%s\""), folder_name,
- storage_lname);
- g_free (storage_lname);
- } else
- label_text = g_strdup_printf ("\"%s\"", folder_name);
-
- return label_text;
-}
-
-
-
-static void
-e_folder_list_changed (EFolderList *efl)
-{
- g_signal_emit (efl, signals[CHANGED], 0);
-}
-
-static void
-e_folder_list_dispose (GObject *object)
-{
- EFolderList *efl = E_FOLDER_LIST (object);
-
- if (efl->priv != NULL) {
- g_object_unref (efl->priv->gui);
- g_object_unref (efl->priv->client);
- g_free (efl->priv);
- efl->priv = NULL;
- }
-
- if (G_OBJECT_CLASS (parent_class)->dispose)
- (* G_OBJECT_CLASS (parent_class)->dispose) (object);
-}
-
-static void
-set_frame_label (EFolderList *efl)
-{
- GtkFrame *frame = efl->priv->frame;
- char *title = efl->priv->title;
- if (frame) {
- if (title) {
- gtk_frame_set_label (frame, title);
- gtk_frame_set_shadow_type (frame, GTK_SHADOW_ETCHED_IN);
- } else {
- gtk_frame_set_label (frame, "");
- gtk_frame_set_shadow_type (frame, GTK_SHADOW_NONE);
- }
- }
-}
-
-static void
-e_folder_list_set_property (GObject *object,
- guint property_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- EFolderList *efl = E_FOLDER_LIST(object);
-
- switch (property_id) {
- case PROP_TITLE:
- g_free (efl->priv->title);
- efl->priv->title = g_strdup (g_value_get_string (value));
- set_frame_label (efl);
- break;
- case PROP_POSSIBLE_TYPES:
- g_strfreev (efl->priv->possible_types);
- efl->priv->possible_types = e_strdupv (g_value_get_pointer (value));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- break;
- }
-}
-
-static void
-e_folder_list_get_property (GObject *object,
- guint property_id,
- GValue *value,
- GParamSpec *pspec)
-{
- EFolderList *efl = E_FOLDER_LIST(object);
-
- switch (property_id) {
- case PROP_TITLE:
- g_value_set_string (value, efl->priv->title);
- break;
- case PROP_POSSIBLE_TYPES:
- g_value_set_pointer (value, e_strdupv ((const gchar **) efl->priv->possible_types));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- break;
- }
-}
-
-static void
-e_folder_list_class_init (EFolderListClass *klass)
-{
- GObjectClass *object_class;
- GtkVBoxClass *vbox_class;
-
- object_class = (GObjectClass*) klass;
- vbox_class = (GtkVBoxClass *) klass;
- parent_class = g_type_class_ref (PARENT_TYPE);
-
- glade_init();
-
- object_class->set_property = e_folder_list_set_property;
- object_class->get_property = e_folder_list_get_property;
- object_class->dispose = e_folder_list_dispose;
-
- klass->changed = NULL;
- klass->option_menu_changed = NULL;
-
- signals [OPTION_MENU_CHANGED] =
- g_signal_new ("option_menu_changed",
- E_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (EFolderListClass, option_menu_changed),
- NULL, NULL,
- e_shell_marshal_NONE__INT,
- G_TYPE_NONE, 1,
- G_TYPE_INT);
-
- signals [CHANGED] =
- g_signal_new ("changed",
- E_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (EFolderListClass, changed),
- NULL, NULL,
- e_shell_marshal_NONE__NONE,
- G_TYPE_NONE, 0);
-
- E_OBJECT_CLASS_ADD_SIGNALS (object_class, signals, LAST_SIGNAL);
-
- g_object_class_install_property (object_class, PROP_TITLE,
- g_param_spec_string ("title",
- NULL,
- NULL,
- NULL,
- G_PARAM_READWRITE));
- g_object_class_install_property (object_class, PROP_POSSIBLE_TYPES,
- g_param_spec_pointer ("possible_types",
- NULL,
- NULL,
- G_PARAM_READWRITE));
-}
-
-#define SPEC "<ETableSpecification cursor-mode=\"line\"" \
- " selection-mode=\"browse\"" \
- " no-headers=\"true\"" \
- ">" \
- " <ETableColumn model_col=\"0\"" \
- " expansion=\"0.0\"" \
- " cell=\"pixbuf\"" \
- " minimum_width=\"18\"" \
- " resizable=\"false\"" \
- " _title=\"icon\"" \
- " compare=\"string\"" \
- " search=\"string\"/>" \
- " <ETableColumn model_col=\"1\"" \
- " expansion=\"1.0\"" \
- " cell=\"string\"" \
- " minimum_width=\"32\"" \
- " resizable=\"true\"" \
- " _title=\"blah\"" \
- " compare=\"string\"" \
- " search=\"string\"/>" \
- " <ETableState>" \
- " <column source=\"0\"/>" \
- " <column source=\"1\"/>" \
- " <grouping>" \
- " </grouping>" \
- " </ETableState>" \
- "</ETableSpecification>"
-
-
-static ETableMemoryStoreColumnInfo columns[] = {
- E_TABLE_MEMORY_STORE_PIXBUF,
- E_TABLE_MEMORY_STORE_STRING,
- E_TABLE_MEMORY_STORE_STRING,
- E_TABLE_MEMORY_STORE_STRING,
- E_TABLE_MEMORY_STORE_STRING,
- E_TABLE_MEMORY_STORE_TERMINATOR
-};
-
-GtkWidget *
-create_custom_optionmenu (char *name, char *string1, char *string2, int int1, int int2);
-
-GtkWidget *
-create_custom_optionmenu (char *name, char *string1, char *string2, int int1, int int2)
-{
- return e_option_menu_new (NULL);
-}
-
-GtkWidget *
-create_custom_folder_list (char *name, char *string1, char *string2, int int1, int int2);
-
-GtkWidget *
-create_custom_folder_list (char *name, char *string1, char *string2, int int1, int int2)
-{
- ETableModel *model;
- GtkWidget *scrolled;
-
- model = e_table_memory_store_new (columns);
- scrolled = e_table_scrolled_new (model, NULL, SPEC, NULL);
- g_object_set_data (G_OBJECT (scrolled), "table-model", model);
- return scrolled;
-}
-
-static void
-add_clicked (GtkButton *button, EFolderList *efl)
-{
- GNOME_Evolution_Folder *folder;
-
- evolution_shell_client_user_select_folder (efl->priv->client,
- GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (efl))),
- _("Add a Folder"),
- "",
- (const gchar **) efl->priv->possible_types,
- &folder);
-
- if (folder != NULL) {
- GdkPixbuf *pixbuf;
- char *display_string = create_display_string (efl, folder->evolutionUri, folder->displayName);
-
- pixbuf = evolution_shell_client_get_pixbuf_for_type (efl->priv->client, folder->type, TRUE);
- e_table_memory_store_insert (efl->priv->model, -1, NULL, pixbuf, display_string,
- folder->displayName, folder->evolutionUri, folder->physicalUri);
- e_folder_list_changed (efl);
- g_object_unref (pixbuf);
- g_free (display_string);
- }
-}
-
-static void
-make_list (int model_row, gpointer closure)
-{
- GList **list = closure;
- *list = g_list_prepend (*list, GINT_TO_POINTER (model_row));
-}
-
-static void
-remove_row (gpointer data, gpointer user_data)
-{
- ETableMemoryStore *etms = user_data;
- int row = GPOINTER_TO_INT (data);
-
- e_table_memory_store_remove (etms, row);
-}
-
-static void
-remove_clicked (GtkButton *button, EFolderList *efl)
-{
- GList *list = NULL;
- ETable *table;
-
- table = e_table_scrolled_get_table (efl->priv->scrolled_table);
-
- e_table_selected_row_foreach (table, make_list, &list);
-
- g_list_foreach (list, remove_row, efl->priv->model);
-
- g_list_free (list);
-
- e_folder_list_changed (efl);
-}
-
-static void
-optionmenu_changed (EOptionMenu *option_menu, int value, EFolderList *efl)
-{
- g_signal_emit (efl, signals[OPTION_MENU_CHANGED], 0, value);
-}
-
-static void
-update_buttons (EFolderList *efl)
-{
- int cursor_row;
- int selection_count;
- ETable *table;
-
- table = e_table_scrolled_get_table (efl->priv->scrolled_table);
- cursor_row = e_table_get_cursor_row (table);
- selection_count = e_table_selected_count (table);
-
- e_glade_xml_set_sensitive (efl->priv->gui, "button-remove", selection_count >= 1);
-}
-
-static void
-cursor_changed (ESelectionModel *selection_model, int row, int col, EFolderList *efl)
-{
- update_buttons (efl);
-}
-
-static void
-selection_changed (ESelectionModel *selection_model, EFolderList *efl)
-{
- update_buttons (efl);
-}
-
-static void
-e_folder_list_init (EFolderList *efl)
-{
- GladeXML *gui;
- ESelectionModel *selection_model;
-
- efl->priv = g_new (EFolderListPrivate, 1);
-
- gui = glade_xml_new (EVOLUTION_GLADEDIR "/e-folder-list.glade", NULL, NULL);
- efl->priv->gui = gui;
-
- efl->priv->title = NULL;
- efl->priv->frame = GTK_FRAME (glade_xml_get_widget(gui, "frame-toplevel"));
- if (efl->priv->frame == NULL)
- return;
-
- gtk_widget_reparent(GTK_WIDGET (efl->priv->frame),
- GTK_WIDGET (efl));
-
- efl->priv->option_menu = E_OPTION_MENU(glade_xml_get_widget (gui, "custom-optionmenu"));
- e_folder_list_set_option_menu_strings (efl, NULL);
- efl->priv->scrolled_table = E_TABLE_SCROLLED(glade_xml_get_widget(gui, "custom-folder-list"));
- efl->priv->model = E_TABLE_MEMORY_STORE (g_object_get_data (G_OBJECT (efl->priv->scrolled_table), "table-model"));
-
- e_glade_xml_connect_widget (gui, "button-add", "clicked",
- G_CALLBACK (add_clicked), efl);
- e_glade_xml_connect_widget (gui, "button-remove", "clicked",
- G_CALLBACK (remove_clicked), efl);
- e_glade_xml_connect_widget (gui, "custom-optionmenu", "changed",
- G_CALLBACK (optionmenu_changed), efl);
-
- selection_model = e_table_get_selection_model (e_table_scrolled_get_table (efl->priv->scrolled_table));
-
- g_signal_connect (selection_model, "selection_changed",
- G_CALLBACK (selection_changed), efl);
- g_signal_connect (selection_model, "cursor_changed",
- G_CALLBACK (cursor_changed), efl);
-
- /* XXX libglade2 seems to not show custom widgets even when
- they're flagged Visible.*/
- gtk_widget_show_all (GTK_WIDGET (efl->priv->scrolled_table));
-
- efl->priv->possible_types = NULL;
- set_frame_label (efl);
-}
-
-EFolderListItem *
-e_folder_list_parse_xml (const char *xml)
-{
- xmlDoc *doc = NULL;
- xmlNode *root;
- xmlNode *node;
- int i;
- EFolderListItem *items;
-
- if (xml && *xml) {
- doc = xmlParseMemory (xml, strlen (xml));
- if (!doc)
- g_warning ("malformed EFolderList xml");
- }
-
- if (!doc) {
- items = g_new (EFolderListItem, 1);
- items[0].uri = NULL;
- items[0].physical_uri = NULL;
- items[0].display_name = NULL;
- return items;
- }
-
- root = xmlDocGetRootElement (doc);
-
- for (node = root->xmlChildrenNode, i = 0; node; node = node->next, i++)
- /* Intentionally empty */;
-
- items = g_new (EFolderListItem, i + 1);
-
- for (node = root->xmlChildrenNode, i = 0; node; node = node->next) {
- if (node->name && !strcmp (node->name, "folder")) {
- items[i].uri = e_xml_get_string_prop_by_name_with_default (node, "uri", "");
- items[i].physical_uri = e_xml_get_string_prop_by_name_with_default (node, "physical-uri", "");
- items[i].display_name = e_xml_get_string_prop_by_name_with_default (node, "display-name", "");
- i++;
- }
- }
- items[i].uri = NULL;
- items[i].physical_uri = NULL;
- items[i].display_name = NULL;
-
- xmlFreeDoc (doc);
-
- return items;
-}
-
-char *
-e_folder_list_create_xml (EFolderListItem *items)
-{
- xmlDoc *doc;
- xmlNode *root;
- char *xml;
- xmlChar *temp;
- int length;
- int i;
-
- doc = xmlNewDoc ("1.0");
-
- root = xmlNewDocNode (doc, NULL, "EvolutionFolderList", NULL);
-
- xmlDocSetRootElement (doc, root);
-
- for (i = 0; items[i].uri; i++) {
- xmlNode *node = xmlNewChild (root, NULL, "folder", NULL);
- e_xml_set_string_prop_by_name (node, "uri", items[i].uri);
- e_xml_set_string_prop_by_name (node, "physical-uri", items[i].physical_uri);
- e_xml_set_string_prop_by_name (node, "display-name", items[i].display_name);
- }
-
- xmlDocDumpMemory (doc, &temp, &length);
-
- xml = g_strdup (temp);
-
- xmlFree (temp);
- xmlFreeDoc (doc);
-
- return xml;
-}
-
-void
-e_folder_list_free_items (EFolderListItem *items)
-{
- int i;
- for (i = 0; items[i].uri; i++) {
- g_free (items[i].uri);
- g_free (items[i].physical_uri);
- g_free (items[i].display_name);
- }
- g_free (items);
-}
-
-GtkWidget*
-e_folder_list_new (EvolutionShellClient *client, const char *xml)
-{
- GtkWidget *widget = GTK_WIDGET (g_object_new (e_folder_list_get_type (), NULL));
-
- e_folder_list_construct (E_FOLDER_LIST (widget), client, xml);
- return widget;
-}
-
-GtkWidget*
-e_folder_list_construct (EFolderList *efl, EvolutionShellClient *client, const char *xml)
-{
- g_object_ref (client);
- efl->priv->client = client;
-
- efl->priv->corba_storage_registry = evolution_shell_client_get_storage_registry_interface (client);
- e_folder_list_set_xml (efl, xml);
- return GTK_WIDGET (efl);
-}
-
-void
-e_folder_list_set_items (EFolderList *efl, EFolderListItem *items)
-{
- int i;
- e_table_memory_store_clear (efl->priv->model);
- for (i = 0; items[i].uri; i++) {
- GNOME_Evolution_Folder *folder;
- GdkPixbuf *pixbuf;
- char *display_string;
-
- folder = get_folder_for_uri (efl, items[i].uri);
- if (!folder)
- continue;
- display_string = create_display_string (efl, items[i].uri, items[i].display_name);
-
- pixbuf = evolution_shell_client_get_pixbuf_for_type (efl->priv->client, folder->type, TRUE);
-
- e_table_memory_store_insert (efl->priv->model, -1, NULL,
- pixbuf, display_string,
- items[i].display_name, items[i].uri, items[i].physical_uri);
- CORBA_free (folder);
- g_object_unref (pixbuf);
- g_free (display_string);
- }
-}
-
-EFolderListItem *
-e_folder_list_get_items (EFolderList *efl)
-{
- EFolderListItem *items;
- int count;
- int i;
-
- count = e_table_model_row_count (E_TABLE_MODEL (efl->priv->model));
-
- items = g_new (EFolderListItem, count + 1);
-
- for (i = 0; i < count; i++) {
- items[i].display_name = g_strdup (e_table_model_value_at (E_TABLE_MODEL (efl->priv->model), 2, i));
- items[i].uri = g_strdup (e_table_model_value_at (E_TABLE_MODEL (efl->priv->model), 3, i));
- items[i].physical_uri = g_strdup (e_table_model_value_at (E_TABLE_MODEL (efl->priv->model), 4, i));
- }
- items[i].uri = NULL;
- items[i].physical_uri = NULL;
-
- return items;
-}
-
-void
-e_folder_list_set_xml (EFolderList *efl, const char *xml)
-{
- EFolderListItem *items;
-
- items = e_folder_list_parse_xml (xml);
- e_folder_list_set_items (efl, items);
- e_folder_list_free_items (items);
-}
-
-char *
-e_folder_list_get_xml (EFolderList *efl)
-{
- EFolderListItem *items;
- char *xml;
-
- items = e_folder_list_get_items (efl);
- xml = e_folder_list_create_xml (items);
- e_folder_list_free_items (items);
-
- return xml;
-}
-
-void
-e_folder_list_set_option_menu_strings_from_array (EFolderList *efl, const char **strings)
-{
- e_option_menu_set_strings_from_array (efl->priv->option_menu, strings);
- if (strings && *strings)
- gtk_widget_show (GTK_WIDGET (efl->priv->option_menu));
- else
- gtk_widget_hide (GTK_WIDGET (efl->priv->option_menu));
-}
-
-void
-e_folder_list_set_option_menu_strings (EFolderList *efl, const char *first_label, ...)
-{
- GPtrArray *labels;
- va_list args;
- char *s;
-
- labels = g_ptr_array_new ();
-
- va_start (args, first_label);
- for (s = (char *)first_label; s; s = va_arg (args, char *))
- g_ptr_array_add (labels, s);
- va_end (args);
-
- e_folder_list_set_option_menu_strings_from_array (efl, (const char **)labels->pdata);
-
- g_ptr_array_free (labels, TRUE);
-}
-
-int
-e_folder_list_get_option_menu_value (EFolderList *efl)
-{
- return e_option_menu_get_value (efl->priv->option_menu);
-}
-
-void
-e_folder_list_set_option_menu_value (EFolderList *efl, int value)
-{
- gtk_option_menu_set_history (GTK_OPTION_MENU (efl->priv->option_menu), value);
-}
-
-
-E_MAKE_TYPE (e_folder_list, "EFolderList", EFolderList, e_folder_list_class_init, e_folder_list_init, PARENT_TYPE)
diff --git a/shell/e-folder-list.h b/shell/e-folder-list.h
deleted file mode 100644
index 5e7ce3493d..0000000000
--- a/shell/e-folder-list.h
+++ /dev/null
@@ -1,115 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-folder-list.h
- * Copyright 2000, 2001, Ximian, Inc.
- *
- * Authors:
- * Chris Lahey <clahey@ximian.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License, version 2, as published by the Free Software Foundation.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef __E_FOLDER_LIST_H__
-#define __E_FOLDER_LIST_H__
-
-#include <gal/e-table/e-table-scrolled.h>
-
-#include <gtk/gtkvbox.h>
-
-#include "evolution-shell-client.h"
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-/* EFolderList - A dialog displaying information about a contact.
- *
- * The following arguments are available:
- *
- * name type read/write description
- * --------------------------------------------------------------------------------
- */
-
-#define E_FOLDER_LIST_TYPE (e_folder_list_get_type ())
-#define E_FOLDER_LIST(obj) (GTK_CHECK_CAST ((obj), E_FOLDER_LIST_TYPE, EFolderList))
-#define E_FOLDER_LIST_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_FOLDER_LIST_TYPE, EFolderListClass))
-#define E_IS_FOLDER_LIST(obj) (GTK_CHECK_TYPE ((obj), E_FOLDER_LIST_TYPE))
-#define E_IS_FOLDER_LIST_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_FOLDER_LIST_TYPE))
-
-
-typedef struct _EFolderListPrivate EFolderListPrivate;
-typedef struct _EFolderList EFolderList;
-typedef struct _EFolderListClass EFolderListClass;
-
-struct _EFolderList
-{
- GtkVBox parent;
-
- /* item specific fields */
- EFolderListPrivate *priv;
-};
-
-struct _EFolderListClass
-{
- GtkVBoxClass parent_class;
-
- void (*changed) (EFolderList *efl);
- void (*option_menu_changed) (EFolderList *efl, int value);
-};
-
-typedef struct {
- char *uri;
- char *physical_uri;
- char *display_name;
-} EFolderListItem;
-
-
-EFolderListItem *e_folder_list_parse_xml (const char *xml);
-char *e_folder_list_create_xml (EFolderListItem *items);
-void e_folder_list_free_items (EFolderListItem *items);
-
-/* Standard functions */
-GtkType e_folder_list_get_type (void);
-GtkWidget *e_folder_list_new (EvolutionShellClient *client,
- const char *xml);
-GtkWidget *e_folder_list_construct (EFolderList *efl,
- EvolutionShellClient *client,
- const char *xml);
-
-/* data access functions */
-void e_folder_list_set_items (EFolderList *efl,
- EFolderListItem *items);
-EFolderListItem *e_folder_list_get_items (EFolderList *efl);
-void e_folder_list_set_xml (EFolderList *efl,
- const char *xml);
-char *e_folder_list_get_xml (EFolderList *efl);
-
-/* Option Menu functions */
-void e_folder_list_set_option_menu_strings_from_array (EFolderList *efl,
- const char **strings);
-void e_folder_list_set_option_menu_strings (EFolderList *efl,
- const char *first_label,
- ...);
-int e_folder_list_get_option_menu_value (EFolderList *efl);
-void e_folder_list_set_option_menu_value (EFolderList *efl,
- int value);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-
-#endif /* __E_FOLDER_LIST_H__ */
diff --git a/shell/e-folder-tree.c b/shell/e-folder-tree.c
deleted file mode 100644
index f6decb4fc0..0000000000
--- a/shell/e-folder-tree.c
+++ /dev/null
@@ -1,460 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-folder-set.c
- *
- * Copyright (C) 2000, 2001 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "e-folder-tree.h"
-
-#include "e-shell-constants.h"
-
-#include <string.h>
-#include <glib.h>
-
-
-struct _Folder {
- struct _Folder *parent;
- char *path;
- void *data;
- GList *subfolders;
-};
-typedef struct _Folder Folder;
-
-struct _EFolderTree {
- GHashTable *path_to_folder;
- GHashTable *data_to_path;
-
- EFolderDestroyNotify folder_destroy_notify;
- void *folder_destroy_notify_closure;
-};
-
-
-/* Utility functions. */
-
-static char *
-get_parent_path (const char *path)
-{
- const char *last_separator;
-
- g_assert (g_path_is_absolute (path));
-
- last_separator = strrchr (path, E_PATH_SEPARATOR);
-
- if (last_separator == path)
- return g_strdup (E_PATH_SEPARATOR_S);
-
- return g_strndup (path, last_separator - path);
-}
-
-static void
-traverse_subtree (EFolderTree *tree,
- Folder *root_folder,
- EFolderTreeForeachFunc foreach_func,
- void *data)
-{
- GList *p;
-
- g_assert (foreach_func != NULL);
-
- (* foreach_func) (tree, root_folder->path, root_folder->data, data);
-
- for (p = root_folder->subfolders; p != NULL; p = p->next) {
- Folder *folder;
-
- folder = (Folder *) p->data;
- traverse_subtree (tree, folder, foreach_func, data);
- }
-}
-
-
-/* Folder handling. */
-
-static Folder *
-folder_new (const char *path,
- void *data)
-{
- Folder *folder;
-
- folder = g_new (Folder, 1);
- folder->parent = NULL;
- folder->path = g_strdup (path);
- folder->data = data;
- folder->subfolders = NULL;
-
- return folder;
-}
-
-static void
-folder_remove_subfolder (Folder *folder,
- Folder *subfolder)
-{
- folder->subfolders = g_list_remove (folder->subfolders, subfolder);
- subfolder->parent = NULL;
-}
-
-static void
-folder_add_subfolder (Folder *folder,
- Folder *subfolder)
-{
- folder->subfolders = g_list_prepend (folder->subfolders, subfolder);
- subfolder->parent = folder;
-}
-
-static void
-folder_destroy (Folder *folder)
-{
- g_assert (folder->subfolders == NULL);
-
- if (folder->parent != NULL)
- folder_remove_subfolder (folder->parent, folder);
-
- g_free (folder->path);
-
- g_free (folder);
-}
-
-static void
-remove_folder (EFolderTree *folder_tree,
- Folder *folder)
-{
- if (folder->subfolders != NULL) {
- GList *p;
-
- for (p = folder->subfolders; p != NULL; p = p->next) {
- Folder *subfolder;
-
- subfolder = (Folder *) p->data;
- subfolder->parent = NULL;
- remove_folder (folder_tree, subfolder);
- }
-
- g_list_free (folder->subfolders);
- folder->subfolders = NULL;
- }
-
- g_hash_table_remove (folder_tree->path_to_folder, folder->path);
- g_hash_table_remove (folder_tree->data_to_path, folder->data);
-
- if (folder_tree->folder_destroy_notify != NULL)
- (* folder_tree->folder_destroy_notify) (folder_tree,
- folder->path,
- folder->data,
- folder_tree->folder_destroy_notify_closure);
-
- folder_destroy (folder);
-}
-
-
-/**
- * e_folder_tree_new:
- * @folder_destroy_notify: Function to be called when a folder gets removed from the tree
- * @closure: Additional data to pass to @folder_destroy_notify
- *
- * Create a new EFolderTree.
- *
- * Return value: A pointer to the newly created EFolderTree.
- **/
-EFolderTree *
-e_folder_tree_new (EFolderDestroyNotify folder_destroy_notify,
- void *closure)
-{
- EFolderTree *new;
-
- new = g_new (EFolderTree, 1);
-
- new->folder_destroy_notify = folder_destroy_notify;
- new->folder_destroy_notify_closure = closure;
-
- new->path_to_folder = g_hash_table_new (g_str_hash, g_str_equal);
- new->data_to_path = g_hash_table_new (g_direct_hash, g_direct_equal);
-
- e_folder_tree_add (new, E_PATH_SEPARATOR_S, NULL);
-
- return new;
-}
-
-/**
- * e_folder_tree_destroy:
- * @folder_tree: A pointer to an EFolderTree
- *
- * Destroy @folder_tree.
- **/
-void
-e_folder_tree_destroy (EFolderTree *folder_tree)
-{
- Folder *root_folder;
-
- g_return_if_fail (folder_tree != NULL);
-
- root_folder = g_hash_table_lookup (folder_tree->path_to_folder, E_PATH_SEPARATOR_S);
- remove_folder (folder_tree, root_folder);
-
- g_hash_table_destroy (folder_tree->path_to_folder);
- g_hash_table_destroy (folder_tree->data_to_path);
-
- g_free (folder_tree);
-}
-
-/**
- * e_folder_tree_add:
- * @folder_tree: A pointer to an EFolderTree
- * @path: Path at which the new folder must be added
- * @data: Data associated with the new folder
- *
- * Insert a new folder at @path, with the specified @data.
- *
- * Return value: %TRUE if successful, %FALSE if failed.
- **/
-gboolean
-e_folder_tree_add (EFolderTree *folder_tree,
- const char *path,
- void *data)
-{
- Folder *parent_folder;
- Folder *folder;
- const char *existing_path;
- char *parent_path;
-
- g_return_val_if_fail (folder_tree != NULL, FALSE);
- g_return_val_if_fail (path != NULL, FALSE);
- g_return_val_if_fail (g_path_is_absolute (path), FALSE);
-
- /* Can only "add" a new root folder if the tree is empty */
- if (! strcmp (path, E_PATH_SEPARATOR_S)) {
- folder = g_hash_table_lookup (folder_tree->path_to_folder, path);
- if (folder) {
- if (folder->subfolders) {
- g_warning ("e_folder_tree_add() -- Trying to change root folder after adding children");
- return FALSE;
- }
- remove_folder (folder_tree, folder);
- }
-
- folder = folder_new (path, data);
- g_hash_table_insert (folder_tree->path_to_folder, folder->path, folder);
- g_hash_table_insert (folder_tree->data_to_path, data, folder->path);
- return TRUE;
- }
-
- parent_path = get_parent_path (path);
-
- parent_folder = g_hash_table_lookup (folder_tree->path_to_folder, parent_path);
- if (parent_folder == NULL) {
- g_warning ("e_folder_tree_add() -- Trying to add a subfolder to a path that does not exist yet -- %s",
- parent_path);
- return FALSE;
- }
-
- folder = g_hash_table_lookup (folder_tree->path_to_folder, path);
- if (folder != NULL) {
- g_warning ("e_folder_tree_add() -- Trying to add a subfolder for a path that already exists -- %s",
- path);
- return FALSE;
- }
-
- existing_path = g_hash_table_lookup (folder_tree->data_to_path, data);
- if (existing_path != NULL) {
- g_warning ("e_folder_tree_add() -- Trying to add a folder with duplicate data -- %s",
- path);
- return FALSE;
- }
-
- folder = folder_new (path, data);
- folder_add_subfolder (parent_folder, folder);
-
- g_hash_table_insert (folder_tree->path_to_folder, folder->path, folder);
- g_hash_table_insert (folder_tree->data_to_path, data, folder->path);
-
- g_free (parent_path);
-
- return TRUE;
-}
-
-/**
- * e_folder_tree_remove:
- * @folder_tree: A pointer to an EFolderTree
- * @path: Path of the folder to remove
- *
- * Remove the folder at @path from @folder_tree.
- *
- * Return value: %TRUE if successful, %FALSE if failed.
- **/
-gboolean
-e_folder_tree_remove (EFolderTree *folder_tree,
- const char *path)
-{
- Folder *folder;
-
- g_return_val_if_fail (folder_tree != NULL, FALSE);
- g_return_val_if_fail (path != NULL, FALSE);
- g_return_val_if_fail (g_path_is_absolute (path), FALSE);
-
- folder = g_hash_table_lookup (folder_tree->path_to_folder, path);
- if (folder == NULL)
- return FALSE;
-
- remove_folder (folder_tree, folder);
- return TRUE;
-}
-
-static void
-count_nodes (EFolderTree *tree,
- const char *path,
- void *data,
- void *closure)
-{
- int *count = closure;
-
- (*count)++;
-}
-
-/**
- * e_folder_tree_get_count:
- * @folder_tree: A pointer to an EFolderTree
- *
- * Gets the number of folders in the tree
- *
- * Return value: The number of folders in the tree
- **/
-int
-e_folder_tree_get_count (EFolderTree *folder_tree)
-{
- int count = 0;
-
- e_folder_tree_foreach (folder_tree, count_nodes, &count);
-
- return count;
-}
-
-/**
- * e_folder_tree_get_folder:
- * @folder_tree: A pointer to an EFolderTree
- * @path: Path of the folder for which we want to get the data
- *
- * Get the data for the folder at @path.
- *
- * Return value: The pointer to the data for the folder at @path.
- **/
-void *
-e_folder_tree_get_folder (EFolderTree *folder_tree,
- const char *path)
-{
- Folder *folder;
-
- g_return_val_if_fail (folder_tree != NULL, NULL);
- g_return_val_if_fail (path != NULL, NULL);
- g_return_val_if_fail (g_path_is_absolute (path), NULL);
-
- folder = g_hash_table_lookup (folder_tree->path_to_folder, path);
- if (folder == NULL)
- return NULL;
-
- return folder->data;
-}
-
-/**
- * e_folder_tree_get_subfolders:
- * @folder_tree: A pointer to an EFolderTree
- * @path: A path in @folder_tree
- *
- * Get a list of the paths of the subfolders of @path.
- *
- * Return value: A list of pointers to the paths of the subfolders. The list
- * and the strings must be freed by the caller.
- **/
-GList *
-e_folder_tree_get_subfolders (EFolderTree *folder_tree,
- const char *path)
-{
- Folder *folder;
- GList *list;
- GList *p;
-
- g_return_val_if_fail (folder_tree != NULL, NULL);
- g_return_val_if_fail (path != NULL, NULL);
- g_return_val_if_fail (g_path_is_absolute (path), NULL);
-
- folder = g_hash_table_lookup (folder_tree->path_to_folder, path);
- if (folder == NULL)
- return NULL;
-
- list = NULL;
- for (p = folder->subfolders; p != NULL; p = p->next) {
- const Folder *folder;
-
- folder = (const Folder *) p->data;
- list = g_list_prepend (list, g_strdup (folder->path));
- }
-
- return list;
-}
-
-
-/**
- * e_folder_tree_foreach:
- * @folder_tree:
- * @foreach_func:
- * @data:
- *
- * Call @foreach_func with the specified @data for all the folders
- * in @folder_tree, starting at the root node.
- **/
-void
-e_folder_tree_foreach (EFolderTree *folder_tree,
- EFolderTreeForeachFunc foreach_func,
- void *data)
-{
- Folder *root_node;
-
- g_return_if_fail (folder_tree != NULL);
- g_return_if_fail (foreach_func != NULL);
-
- root_node = g_hash_table_lookup (folder_tree->path_to_folder,
- E_PATH_SEPARATOR_S);
- if (root_node == NULL) {
- g_warning ("e_folder_tree_foreach -- What?! No root node!?");
- return;
- }
-
- traverse_subtree (folder_tree, root_node, foreach_func, data);
-}
-
-
-/**
- * e_folder_tree_get_path_for_data:
- * @folder_tree: A pointer to an EFolderTree
- * @data: The data for the folder for which the path is needed
- *
- * Look up the path for the specified @data.
- *
- * Return value: The path for the folder that holds that @data.
- **/
-const char *
-e_folder_tree_get_path_for_data (EFolderTree *folder_tree,
- const void *data)
-{
- g_return_val_if_fail (folder_tree != NULL, NULL);
- g_return_val_if_fail (data != NULL, NULL);
-
- return (const char *) g_hash_table_lookup (folder_tree->data_to_path, data);
-}
diff --git a/shell/e-folder-tree.h b/shell/e-folder-tree.h
deleted file mode 100644
index bb2f29702a..0000000000
--- a/shell/e-folder-tree.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-folder-tree.h
- *
- * Copyright (C) 2000 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifndef _E_FOLDER_TREE_H_
-#define _E_FOLDER_TREE_H_
-
-#include <glib.h>
-
-
-typedef struct _EFolderTree EFolderTree;
-
-typedef void (* EFolderDestroyNotify) (EFolderTree *tree, const char *path, void *data, void *closure);
-typedef void (* EFolderTreeForeachFunc) (EFolderTree *tree, const char *path, void *data, void *closure);
-
-
-EFolderTree *e_folder_tree_new (EFolderDestroyNotify folder_destroy_notify,
- void *closure);
-
-void e_folder_tree_destroy (EFolderTree *folder_tree);
-
-gboolean e_folder_tree_add (EFolderTree *folder_tree,
- const char *path,
- void *data);
-gboolean e_folder_tree_remove (EFolderTree *folder_tree,
- const char *path);
-
-int e_folder_tree_get_count (EFolderTree *folder_tree);
-
-void *e_folder_tree_get_folder (EFolderTree *folder_tree,
- const char *path);
-GList *e_folder_tree_get_subfolders (EFolderTree *folder_tree,
- const char *path);
-
-void e_folder_tree_foreach (EFolderTree *folder_tree,
- EFolderTreeForeachFunc foreach_func,
- void *data);
-
-const char *e_folder_tree_get_path_for_data (EFolderTree *folder_tree,
- const void *data);
-
-#endif /* _E_FOLDER_TREE_H_ */
diff --git a/shell/e-folder-type-registry.c b/shell/e-folder-type-registry.c
deleted file mode 100644
index 81cb18796e..0000000000
--- a/shell/e-folder-type-registry.c
+++ /dev/null
@@ -1,536 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-folder-type-registry.c
- *
- * Copyright (C) 2000, 2001 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <glib.h>
-#include <gtk/gtktypeutils.h>
-
-#include <gal/util/e-util.h>
-
-#include "e-shell-utils.h"
-
-#include "e-folder-type-registry.h"
-
-
-#define PARENT_TYPE GTK_TYPE_OBJECT
-static GtkObjectClass *parent_class = NULL;
-
-struct _FolderType {
- char *name;
- char *icon_name;
-
- char *display_name;
- char *description;
-
- gboolean user_creatable;
-
- GList *exported_dnd_types; /* char * */
- GList *accepted_dnd_types; /* char * */
-
- EvolutionShellComponentClient *handler;
-
- /* The icon, standard (48x48) and mini (16x16) versions. */
- GdkPixbuf *icon_pixbuf;
- GdkPixbuf *mini_icon_pixbuf;
-};
-typedef struct _FolderType FolderType;
-
-struct _EFolderTypeRegistryPrivate {
- GHashTable *name_to_type;
-};
-
-
-/* FolderType handling. */
-
-static FolderType *
-folder_type_new (const char *name,
- const char *icon_name,
- const char *display_name,
- const char *description,
- gboolean user_creatable,
- int num_exported_dnd_types,
- const char **exported_dnd_types,
- int num_accepted_dnd_types,
- const char **accepted_dnd_types)
-{
- FolderType *new;
- char *icon_path;
- int i;
-
- new = g_new (FolderType, 1);
-
- new->name = g_strdup (name);
- new->icon_name = g_strdup (icon_name);
- new->display_name = g_strdup (display_name);
- new->description = g_strdup (description);
-
- new->user_creatable = user_creatable;
-
- new->exported_dnd_types = NULL;
- for (i = 0; i < num_exported_dnd_types; i++)
- new->exported_dnd_types = g_list_prepend (new->exported_dnd_types,
- g_strdup (exported_dnd_types[i]));
- new->exported_dnd_types = g_list_reverse (new->exported_dnd_types);
-
- new->accepted_dnd_types = NULL;
- for (i = 0; i < num_accepted_dnd_types; i++)
- new->accepted_dnd_types = g_list_prepend (new->accepted_dnd_types,
- g_strdup (accepted_dnd_types[i]));
- new->accepted_dnd_types = g_list_reverse (new->accepted_dnd_types);
-
- new->handler = NULL;
-
- icon_path = e_shell_get_icon_path (icon_name, FALSE);
- if (icon_path == NULL)
- new->icon_pixbuf = NULL;
- else
- new->icon_pixbuf = gdk_pixbuf_new_from_file (icon_path, NULL);
-
- g_free (icon_path);
-
- icon_path = e_shell_get_icon_path (icon_name, TRUE);
- if (icon_path != NULL) {
- new->mini_icon_pixbuf = gdk_pixbuf_new_from_file (icon_path, NULL);
- } else {
- if (new->icon_pixbuf != NULL)
- new->mini_icon_pixbuf = g_object_ref (new->icon_pixbuf);
- else
- new->mini_icon_pixbuf = NULL;
- }
-
- g_free (icon_path);
-
- return new;
-}
-
-static void
-folder_type_free (FolderType *folder_type)
-{
- g_free (folder_type->name);
- g_free (folder_type->icon_name);
- g_free (folder_type->display_name);
- g_free (folder_type->description);
-
- if (folder_type->icon_pixbuf != NULL)
- g_object_unref (folder_type->icon_pixbuf);
- if (folder_type->mini_icon_pixbuf != NULL)
- g_object_unref (folder_type->mini_icon_pixbuf);
-
- if (folder_type->handler != NULL)
- g_object_unref (folder_type->handler);
-
- g_free (folder_type);
-}
-
-static FolderType *
-get_folder_type (EFolderTypeRegistry *folder_type_registry,
- const char *type_name)
-{
- EFolderTypeRegistryPrivate *priv;
-
- priv = folder_type_registry->priv;
-
- return g_hash_table_lookup (priv->name_to_type, type_name);
-}
-
-static gboolean
-register_folder_type (EFolderTypeRegistry *folder_type_registry,
- const char *name,
- const char *icon_name,
- const char *display_name,
- const char *description,
- gboolean user_creatable,
- int num_exported_dnd_types,
- const char **exported_dnd_types,
- int num_accepted_dnd_types,
- const char **accepted_dnd_types)
-{
- EFolderTypeRegistryPrivate *priv;
- FolderType *folder_type;
-
- priv = folder_type_registry->priv;
-
- /* Make sure we don't add the same type twice. */
- if (get_folder_type (folder_type_registry, name) != NULL)
- return FALSE;
-
- folder_type = folder_type_new (name, icon_name,
- display_name, description,
- user_creatable,
- num_exported_dnd_types, exported_dnd_types,
- num_accepted_dnd_types, accepted_dnd_types);
- g_hash_table_insert (priv->name_to_type, folder_type->name, folder_type);
-
- return TRUE;
-}
-
-static gboolean
-set_handler (EFolderTypeRegistry *folder_type_registry,
- const char *name,
- EvolutionShellComponentClient *handler)
-{
- EFolderTypeRegistryPrivate *priv;
- FolderType *folder_type;
-
- priv = folder_type_registry->priv;
-
- folder_type = get_folder_type (folder_type_registry, name);
- if (folder_type == NULL)
- return FALSE;
- if (folder_type->handler != NULL)
- return FALSE;
-
- g_object_ref (handler);
- folder_type->handler = handler;
-
- return TRUE;
-}
-
-
-/* GtkObject methods. */
-
-static void
-hash_forall_free_folder_type (gpointer key,
- gpointer value,
- gpointer data)
-{
- FolderType *folder_type;
-
- folder_type = (FolderType *) value;
- folder_type_free (folder_type);
-}
-
-static void
-impl_finalize (GObject *object)
-{
- EFolderTypeRegistry *folder_type_registry;
- EFolderTypeRegistryPrivate *priv;
-
- folder_type_registry = E_FOLDER_TYPE_REGISTRY (object);
- priv = folder_type_registry->priv;
-
- g_hash_table_foreach (priv->name_to_type, hash_forall_free_folder_type, NULL);
- g_hash_table_destroy (priv->name_to_type);
-
- g_free (priv);
-
- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
-}
-
-
-static void
-class_init (EFolderTypeRegistryClass *class)
-{
- GObjectClass *object_class;
-
- object_class = G_OBJECT_CLASS (class);
- object_class->finalize = impl_finalize;
-
- parent_class = g_type_class_ref(gtk_object_get_type ());
-}
-
-static void
-init (EFolderTypeRegistry *folder_type_registry)
-{
- EFolderTypeRegistryPrivate *priv;
-
- priv = g_new (EFolderTypeRegistryPrivate, 1);
- priv->name_to_type = g_hash_table_new (g_str_hash, g_str_equal);
-
- folder_type_registry->priv = priv;
-}
-
-
-void
-e_folder_type_registry_construct (EFolderTypeRegistry *folder_type_registry)
-{
- g_return_if_fail (folder_type_registry != NULL);
- g_return_if_fail (E_IS_FOLDER_TYPE_REGISTRY (folder_type_registry));
-
- GTK_OBJECT_UNSET_FLAGS (GTK_OBJECT (folder_type_registry), GTK_FLOATING);
-}
-
-EFolderTypeRegistry *
-e_folder_type_registry_new (void)
-{
- EFolderTypeRegistry *new;
-
- new = g_object_new (e_folder_type_registry_get_type (), NULL);
-
- e_folder_type_registry_construct (new);
-
- return new;
-}
-
-
-gboolean
-e_folder_type_registry_register_type (EFolderTypeRegistry *folder_type_registry,
- const char *type_name,
- const char *icon_name,
- const char *display_name,
- const char *description,
- gboolean user_creatable,
- int num_exported_dnd_types,
- const char **exported_dnd_types,
- int num_accepted_dnd_types,
- const char **accepted_dnd_types)
-{
- g_return_val_if_fail (folder_type_registry != NULL, FALSE);
- g_return_val_if_fail (E_IS_FOLDER_TYPE_REGISTRY (folder_type_registry), FALSE);
- g_return_val_if_fail (type_name != NULL, FALSE);
- g_return_val_if_fail (icon_name != NULL, FALSE);
-
- return register_folder_type (folder_type_registry, type_name, icon_name,
- display_name, description, user_creatable,
- num_exported_dnd_types, exported_dnd_types,
- num_accepted_dnd_types, accepted_dnd_types);
-}
-
-gboolean
-e_folder_type_registry_set_handler_for_type (EFolderTypeRegistry *folder_type_registry,
- const char *type_name,
- EvolutionShellComponentClient *handler)
-{
- g_return_val_if_fail (E_IS_FOLDER_TYPE_REGISTRY (folder_type_registry), FALSE);
- g_return_val_if_fail (EVOLUTION_IS_SHELL_COMPONENT_CLIENT (handler), FALSE);
-
- return set_handler (folder_type_registry, type_name, handler);
-}
-
-
-gboolean
-e_folder_type_registry_type_registered (EFolderTypeRegistry *folder_type_registry,
- const char *type_name)
-{
- EFolderTypeRegistryPrivate *priv;
-
- g_return_val_if_fail (folder_type_registry != NULL, FALSE);
- g_return_val_if_fail (E_IS_FOLDER_TYPE_REGISTRY (folder_type_registry), FALSE);
- g_return_val_if_fail (type_name != NULL, FALSE);
-
- priv = folder_type_registry->priv;
-
- if (get_folder_type (folder_type_registry, type_name) == NULL)
- return FALSE;
-
- return TRUE;
-}
-
-void
-e_folder_type_registry_unregister_type (EFolderTypeRegistry *folder_type_registry,
- const char *type_name)
-{
- EFolderTypeRegistryPrivate *priv;
- FolderType *folder_type;
-
- g_return_if_fail (folder_type_registry != NULL);
- g_return_if_fail (E_IS_FOLDER_TYPE_REGISTRY (folder_type_registry));
- g_return_if_fail (type_name != NULL);
-
- priv = folder_type_registry->priv;
-
- folder_type = get_folder_type (folder_type_registry, type_name);
- if (folder_type == NULL)
- return;
-
- g_hash_table_remove (priv->name_to_type, folder_type->name);
- folder_type_free (folder_type);
-}
-
-
-static void
-get_type_names_hash_forall (void *key,
- void *value,
- void *data)
-{
- GList **type_name_list;
-
- type_name_list = (GList **) data;
-
- *type_name_list = g_list_prepend (*type_name_list, g_strdup ((const char *) key));
-}
-
-GList *
-e_folder_type_registry_get_type_names (EFolderTypeRegistry *folder_type_registry)
-{
- GList *type_name_list;
- EFolderTypeRegistryPrivate *priv;
-
- g_return_val_if_fail (folder_type_registry != NULL, NULL);
- g_return_val_if_fail (E_IS_FOLDER_TYPE_REGISTRY (folder_type_registry), NULL);
-
- priv = folder_type_registry->priv;
-
- type_name_list = NULL;
- g_hash_table_foreach (priv->name_to_type, get_type_names_hash_forall, &type_name_list);
-
- return type_name_list;
-}
-
-
-const char *
-e_folder_type_registry_get_icon_name_for_type (EFolderTypeRegistry *folder_type_registry,
- const char *type_name)
-{
- const FolderType *folder_type;
-
- g_return_val_if_fail (folder_type_registry != NULL, NULL);
- g_return_val_if_fail (E_IS_FOLDER_TYPE_REGISTRY (folder_type_registry), NULL);
- g_return_val_if_fail (type_name != NULL, NULL);
-
- folder_type = get_folder_type (folder_type_registry, type_name);
- if (folder_type == NULL)
- return NULL;
-
- return folder_type->icon_name;
-}
-
-GdkPixbuf *
-e_folder_type_registry_get_icon_for_type (EFolderTypeRegistry *folder_type_registry,
- const char *type_name,
- gboolean mini)
-{
- const FolderType *folder_type;
-
- g_return_val_if_fail (folder_type_registry != NULL, NULL);
- g_return_val_if_fail (E_IS_FOLDER_TYPE_REGISTRY (folder_type_registry), NULL);
- g_return_val_if_fail (type_name != NULL, NULL);
-
- folder_type = get_folder_type (folder_type_registry, type_name);
- if (folder_type == NULL)
- return NULL;
-
- if (mini)
- return folder_type->mini_icon_pixbuf;
- else
- return folder_type->icon_pixbuf;
-}
-
-EvolutionShellComponentClient *
-e_folder_type_registry_get_handler_for_type (EFolderTypeRegistry *folder_type_registry,
- const char *type_name)
-{
- const FolderType *folder_type;
-
- g_return_val_if_fail (folder_type_registry != NULL, NULL);
- g_return_val_if_fail (E_IS_FOLDER_TYPE_REGISTRY (folder_type_registry), NULL);
- g_return_val_if_fail (type_name != NULL, NULL);
-
- folder_type = get_folder_type (folder_type_registry, type_name);
- if (folder_type == NULL)
- return NULL;
-
- return folder_type->handler;
-}
-
-gboolean
-e_folder_type_registry_type_is_user_creatable (EFolderTypeRegistry *folder_type_registry,
- const char *type_name)
-{
- const FolderType *folder_type;
-
- g_return_val_if_fail (folder_type_registry != NULL, FALSE);
- g_return_val_if_fail (E_IS_FOLDER_TYPE_REGISTRY (folder_type_registry), FALSE);
- g_return_val_if_fail (type_name != NULL, FALSE);
-
- folder_type = get_folder_type (folder_type_registry, type_name);
- if (folder_type == NULL)
- return FALSE;
-
- return folder_type->user_creatable;
-}
-
-const char *
-e_folder_type_registry_get_display_name_for_type (EFolderTypeRegistry *folder_type_registry,
- const char *type_name)
-{
- const FolderType *folder_type;
-
- g_return_val_if_fail (folder_type_registry != NULL, NULL);
- g_return_val_if_fail (E_IS_FOLDER_TYPE_REGISTRY (folder_type_registry), NULL);
- g_return_val_if_fail (type_name != NULL, NULL);
-
- folder_type = get_folder_type (folder_type_registry, type_name);
- if (folder_type == NULL)
- return FALSE;
-
- return folder_type->display_name;
-}
-
-const char *
-e_folder_type_registry_get_description_for_type (EFolderTypeRegistry *folder_type_registry,
- const char *type_name)
-{
- const FolderType *folder_type;
-
- g_return_val_if_fail (folder_type_registry != NULL, NULL);
- g_return_val_if_fail (E_IS_FOLDER_TYPE_REGISTRY (folder_type_registry), NULL);
- g_return_val_if_fail (type_name != NULL, NULL);
-
- folder_type = get_folder_type (folder_type_registry, type_name);
- if (folder_type == NULL)
- return FALSE;
-
- return folder_type->description;
-}
-
-
-GList *
-e_folder_type_registry_get_exported_dnd_types_for_type (EFolderTypeRegistry *folder_type_registry,
- const char *type_name)
-{
- const FolderType *folder_type;
-
- g_return_val_if_fail (folder_type_registry != NULL, NULL);
- g_return_val_if_fail (E_IS_FOLDER_TYPE_REGISTRY (folder_type_registry), NULL);
- g_return_val_if_fail (type_name != NULL, NULL);
-
- folder_type = get_folder_type (folder_type_registry, type_name);
- if (folder_type == NULL)
- return NULL;
-
- return folder_type->exported_dnd_types;
-}
-
-GList *
-e_folder_type_registry_get_accepted_dnd_types_for_type (EFolderTypeRegistry *folder_type_registry,
- const char *type_name)
-{
- const FolderType *folder_type;
-
- g_return_val_if_fail (folder_type_registry != NULL, NULL);
- g_return_val_if_fail (E_IS_FOLDER_TYPE_REGISTRY (folder_type_registry), NULL);
- g_return_val_if_fail (type_name != NULL, NULL);
-
- folder_type = get_folder_type (folder_type_registry, type_name);
- if (folder_type == NULL)
- return NULL;
-
- return folder_type->accepted_dnd_types;
-}
-
-
-E_MAKE_TYPE (e_folder_type_registry, "EFolderTypeRegistry", EFolderTypeRegistry,
- class_init, init, PARENT_TYPE)
diff --git a/shell/e-folder-type-registry.h b/shell/e-folder-type-registry.h
deleted file mode 100644
index 628a5d7d39..0000000000
--- a/shell/e-folder-type-registry.h
+++ /dev/null
@@ -1,107 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-folder-type-registry.h
- *
- * Copyright (C) 2000 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifndef _E_FOLDER_TYPE_REGISTRY_H_
-#define _E_FOLDER_TYPE_REGISTRY_H_
-
-#include <gtk/gtkobject.h>
-#include <gdk-pixbuf/gdk-pixbuf.h>
-
-#include "evolution-shell-component-client.h"
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-#define E_TYPE_FOLDER_TYPE_REGISTRY (e_folder_type_registry_get_type ())
-#define E_FOLDER_TYPE_REGISTRY(obj) (GTK_CHECK_CAST ((obj), E_TYPE_FOLDER_TYPE_REGISTRY, EFolderTypeRegistry))
-#define E_FOLDER_TYPE_REGISTRY_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_FOLDER_TYPE_REGISTRY, EFolderTypeRegistryClass))
-#define E_IS_FOLDER_TYPE_REGISTRY(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_FOLDER_TYPE_REGISTRY))
-#define E_IS_FOLDER_TYPE_REGISTRY_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_FOLDER_TYPE_REGISTRY))
-
-
-typedef struct _EFolderTypeRegistry EFolderTypeRegistry;
-typedef struct _EFolderTypeRegistryPrivate EFolderTypeRegistryPrivate;
-typedef struct _EFolderTypeRegistryClass EFolderTypeRegistryClass;
-
-struct _EFolderTypeRegistry {
- GtkObject parent;
-
- EFolderTypeRegistryPrivate *priv;
-};
-
-struct _EFolderTypeRegistryClass {
- GtkObjectClass parent_class;
-};
-
-
-GtkType e_folder_type_registry_get_type (void);
-void e_folder_type_registry_construct (EFolderTypeRegistry *folder_type_registry);
-EFolderTypeRegistry *e_folder_type_registry_new (void);
-
-gboolean e_folder_type_registry_register_type (EFolderTypeRegistry *folder_type_registry,
- const char *type_name,
- const char *icon_name,
- const char *display_name,
- const char *description,
- gboolean user_creatable,
- int num_exported_dnd_types,
- const char **exported_dnd_types,
- int num_accepted_dnd_types,
- const char **accepted_dnd_types);
-gboolean e_folder_type_registry_set_handler_for_type (EFolderTypeRegistry *folder_type_registry,
- const char *type_name,
- EvolutionShellComponentClient *handler);
-
-GList *e_folder_type_registry_get_type_names (EFolderTypeRegistry *folder_type_registry);
-
-gboolean e_folder_type_registry_type_registered (EFolderTypeRegistry *folder_type_registry,
- const char *type_name);
-void e_folder_type_registry_unregister_type (EFolderTypeRegistry *folder_type_registry,
- const char *type_name);
-
-GdkPixbuf *e_folder_type_registry_get_icon_for_type (EFolderTypeRegistry *folder_type_registry,
- const char *type_name,
- gboolean mini);
-const char *e_folder_type_registry_get_icon_name_for_type (EFolderTypeRegistry *folder_type_registry,
- const char *type_name);
-EvolutionShellComponentClient *e_folder_type_registry_get_handler_for_type (EFolderTypeRegistry *folder_type_registry,
- const char *type_name);
-gboolean e_folder_type_registry_type_is_user_creatable (EFolderTypeRegistry *folder_type_registry,
- const char *type_name);
-const char *e_folder_type_registry_get_display_name_for_type (EFolderTypeRegistry *folder_type_registry,
- const char *type_name);
-const char *e_folder_type_registry_get_description_for_type (EFolderTypeRegistry *folder_type_registry,
- const char *type_name);
-
-GList *e_folder_type_registry_get_exported_dnd_types_for_type (EFolderTypeRegistry *folder_type_registry,
- const char *type_name);
-GList *e_folder_type_registry_get_accepted_dnd_types_for_type (EFolderTypeRegistry *folder_type_registry,
- const char *type_name);
-
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* _E_FOLDER_TYPE_REGISTRY_H_ */
diff --git a/shell/e-folder.c b/shell/e-folder.c
deleted file mode 100644
index 8226170e92..0000000000
--- a/shell/e-folder.c
+++ /dev/null
@@ -1,552 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-folder.c
- *
- * Copyright (C) 2000, 2001, 2002 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "e-folder.h"
-#include "e-shell-marshal.h"
-
-#include "e-util/e-corba-utils.h"
-
-#include <string.h>
-#include <glib.h>
-#include <gtk/gtksignal.h>
-#include <gal/util/e-util.h>
-
-
-#define PARENT_TYPE GTK_TYPE_OBJECT
-static GtkObjectClass *parent_class = NULL;
-
-struct _EFolderPrivate {
- char *name;
- char *type;
- char *description;
- char *physical_uri;
-
- int child_highlight;
- int unread_count;
-
- /* Folders have a default sorting priority of zero; when deciding the
- sort order in the Evolution folder tree, folders with the same
- priority value are compared by name, while folders with a higher
- priority number always come after the folders with a lower priority
- number. */
- int sorting_priority;
-
- unsigned int self_highlight : 1;
- unsigned int is_stock : 1;
- unsigned int can_sync_offline : 1;
- unsigned int has_subfolders : 1;
-
- /* Custom icon for this folder; if NULL the folder will just use the
- icon for its type. */
- char *custom_icon_name;
-};
-
-#define EF_CLASS(obj) \
- E_FOLDER_CLASS (GTK_OBJECT (obj)->klass)
-
-
-enum {
- CHANGED,
- NAME_CHANGED,
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = { 0 };
-
-
-/* EFolder methods. */
-
-static gboolean
-impl_save_info (EFolder *folder)
-{
- g_warning ("`%s' does not implement `EFolder::save_info()'",
- G_OBJECT_TYPE_NAME (folder));
- return FALSE;
-}
-
-static gboolean
-impl_load_info (EFolder *folder)
-{
- g_warning ("`%s' does not implement `EFolder::load_info()'",
- G_OBJECT_TYPE_NAME (folder));
- return FALSE;
-}
-
-static gboolean
-impl_remove (EFolder *folder)
-{
- g_warning ("`%s' does not implement `EFolder::remove()'",
- G_OBJECT_TYPE_NAME (folder));
- return FALSE;
-}
-
-static const char *
-impl_get_physical_uri (EFolder *folder)
-{
- return folder->priv->physical_uri;
-}
-
-
-/* GObject methods. */
-
-static void
-impl_finalize (GObject *object)
-{
- EFolder *folder;
- EFolderPrivate *priv;
-
- folder = E_FOLDER (object);
- priv = folder->priv;
-
- g_free (priv->name);
- g_free (priv->type);
- g_free (priv->description);
- g_free (priv->physical_uri);
-
- g_free (priv->custom_icon_name);
-
- g_free (priv);
-
- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
-}
-
-
-static void
-class_init (EFolderClass *klass)
-{
- GObjectClass *object_class;
-
- parent_class = g_type_class_ref(gtk_object_get_type ());
-
- object_class = G_OBJECT_CLASS (klass);
- object_class->finalize = impl_finalize;
-
- signals[CHANGED] = g_signal_new ("changed",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EFolderClass, changed),
- NULL, NULL,
- e_shell_marshal_NONE__NONE,
- G_TYPE_NONE, 0);
-
- signals[NAME_CHANGED] = g_signal_new ("name_changed",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EFolderClass, name_changed),
- NULL, NULL,
- e_shell_marshal_NONE__NONE,
- G_TYPE_NONE, 0);
-
- klass->save_info = impl_save_info;
- klass->load_info = impl_load_info;
- klass->remove = impl_remove;
- klass->get_physical_uri = impl_get_physical_uri;
-}
-
-static void
-init (EFolder *folder)
-{
- EFolderPrivate *priv;
-
- priv = g_new (EFolderPrivate, 1);
- priv->type = NULL;
- priv->name = NULL;
- priv->description = NULL;
- priv->physical_uri = NULL;
- priv->child_highlight = 0;
- priv->unread_count = 0;
- priv->sorting_priority = 0;
- priv->self_highlight = FALSE;
- priv->is_stock = FALSE;
- priv->can_sync_offline = FALSE;
- priv->has_subfolders = FALSE;
- priv->custom_icon_name = NULL;
-
- folder->priv = priv;
-
- GTK_OBJECT_UNSET_FLAGS (GTK_OBJECT (folder), GTK_FLOATING);
-}
-
-
-void
-e_folder_construct (EFolder *folder,
- const char *name,
- const char *type,
- const char *description)
-{
- EFolderPrivate *priv;
-
- g_return_if_fail (folder != NULL);
- g_return_if_fail (E_IS_FOLDER (folder));
- g_return_if_fail (name != NULL);
- g_return_if_fail (type != NULL);
-
- priv = folder->priv;
-
- priv->name = g_strdup (name);
- priv->type = g_strdup (type);
- priv->description = g_strdup (description);
-}
-
-EFolder *
-e_folder_new (const char *name,
- const char *type,
- const char *description)
-{
- EFolder *folder;
-
- g_return_val_if_fail (name != NULL, NULL);
- g_return_val_if_fail (type != NULL, NULL);
- g_return_val_if_fail (description != NULL, NULL);
-
- folder = g_object_new (E_TYPE_FOLDER, NULL);
-
- e_folder_construct (folder, name, type, description);
-
- return folder;
-}
-
-
-const char *
-e_folder_get_name (EFolder *folder)
-{
- g_return_val_if_fail (folder != NULL, NULL);
- g_return_val_if_fail (E_IS_FOLDER (folder), NULL);
-
- return folder->priv->name;
-}
-
-const char *
-e_folder_get_type_string (EFolder *folder)
-{
- g_return_val_if_fail (folder != NULL, NULL);
- g_return_val_if_fail (E_IS_FOLDER (folder), NULL);
-
- return folder->priv->type;
-}
-
-const char *
-e_folder_get_description (EFolder *folder)
-{
- g_return_val_if_fail (folder != NULL, NULL);
- g_return_val_if_fail (E_IS_FOLDER (folder), NULL);
-
- return folder->priv->description;
-}
-
-const char *
-e_folder_get_physical_uri (EFolder *folder)
-{
- g_return_val_if_fail (folder != NULL, NULL);
- g_return_val_if_fail (E_IS_FOLDER (folder), NULL);
-
- return folder->priv->physical_uri;
-}
-
-int
-e_folder_get_unread_count (EFolder *folder)
-{
- g_return_val_if_fail (folder != NULL, FALSE);
- g_return_val_if_fail (E_IS_FOLDER (folder), FALSE);
-
- return folder->priv->unread_count;
-}
-
-gboolean
-e_folder_get_highlighted (EFolder *folder)
-{
- g_return_val_if_fail (folder != NULL, FALSE);
- g_return_val_if_fail (E_IS_FOLDER (folder), FALSE);
-
- return folder->priv->child_highlight || folder->priv->unread_count;
-}
-
-gboolean
-e_folder_get_is_stock (EFolder *folder)
-{
- g_return_val_if_fail (folder != NULL, FALSE);
- g_return_val_if_fail (E_IS_FOLDER (folder), FALSE);
-
- return folder->priv->is_stock;
-}
-
-gboolean
-e_folder_get_can_sync_offline (EFolder *folder)
-{
- g_return_val_if_fail (E_IS_FOLDER (folder), FALSE);
-
- return folder->priv->can_sync_offline;
-}
-
-gboolean
-e_folder_get_has_subfolders (EFolder *folder)
-{
- g_return_val_if_fail (E_IS_FOLDER (folder), FALSE);
-
- return folder->priv->has_subfolders;
-}
-
-/**
- * e_folder_get_custom_icon:
- * @folder: An EFolder
- *
- * Get the name of the custom icon for @folder, or NULL if no custom icon is
- * associated with it.
- **/
-const char *
-e_folder_get_custom_icon_name (EFolder *folder)
-{
- g_return_val_if_fail (E_IS_FOLDER (folder), NULL);
-
- return folder->priv->custom_icon_name;
-}
-
-/**
- * e_folder_get_sorting_priority:
- * @folder: An EFolder
- *
- * Get the sorting priority for @folder.
- *
- * Return value: Sorting priority value for @folder.
- **/
-int
-e_folder_get_sorting_priority (EFolder *folder)
-{
- g_return_val_if_fail (E_IS_FOLDER (folder), 0);
-
- return folder->priv->sorting_priority;
-}
-
-
-void
-e_folder_set_name (EFolder *folder,
- const char *name)
-{
- g_return_if_fail (folder != NULL);
- g_return_if_fail (E_IS_FOLDER (folder));
- g_return_if_fail (name != NULL);
-
- if (folder->priv->name == name)
- return;
-
- g_free (folder->priv->name);
- folder->priv->name = g_strdup (name);
-
- g_signal_emit (folder, signals[NAME_CHANGED], 0);
- g_signal_emit (folder, signals[CHANGED], 0);
-}
-
-void
-e_folder_set_type_string (EFolder *folder,
- const char *type)
-{
- g_return_if_fail (folder != NULL);
- g_return_if_fail (E_IS_FOLDER (folder));
- g_return_if_fail (type != NULL);
-
- g_free (folder->priv->type);
- folder->priv->type = g_strdup (type);
-
- g_signal_emit (folder, signals[CHANGED], 0);
-}
-
-void
-e_folder_set_description (EFolder *folder,
- const char *description)
-{
- g_return_if_fail (folder != NULL);
- g_return_if_fail (E_IS_FOLDER (folder));
- g_return_if_fail (description != NULL);
-
- g_free (folder->priv->description);
- folder->priv->description = g_strdup (description);
-
- g_signal_emit (folder, signals[CHANGED], 0);
-}
-
-void
-e_folder_set_physical_uri (EFolder *folder,
- const char *physical_uri)
-{
- g_return_if_fail (folder != NULL);
- g_return_if_fail (E_IS_FOLDER (folder));
- g_return_if_fail (physical_uri != NULL);
-
- if (folder->priv->physical_uri == physical_uri)
- return;
-
- g_free (folder->priv->physical_uri);
- folder->priv->physical_uri = g_strdup (physical_uri);
-
- g_signal_emit (folder, signals[CHANGED], 0);
-}
-
-void
-e_folder_set_unread_count (EFolder *folder,
- gint unread_count)
-{
- g_return_if_fail (folder != NULL);
- g_return_if_fail (E_IS_FOLDER (folder));
-
- folder->priv->unread_count = unread_count;
-
- g_signal_emit (folder, signals[CHANGED], 0);
-}
-
-void
-e_folder_set_child_highlight (EFolder *folder,
- gboolean highlighted)
-{
- g_return_if_fail (folder != NULL);
- g_return_if_fail (E_IS_FOLDER (folder));
-
- if (highlighted)
- folder->priv->child_highlight++;
- else
- folder->priv->child_highlight--;
-
- g_signal_emit (folder, signals[CHANGED], 0);
-}
-
-void
-e_folder_set_is_stock (EFolder *folder,
- gboolean is_stock)
-{
- g_return_if_fail (folder != NULL);
- g_return_if_fail (E_IS_FOLDER (folder));
-
- folder->priv->is_stock = !! is_stock;
-
- g_signal_emit (folder, signals[CHANGED], 0);
-}
-
-void
-e_folder_set_can_sync_offline (EFolder *folder,
- gboolean can_sync_offline)
-{
- g_return_if_fail (E_IS_FOLDER (folder));
-
- folder->priv->can_sync_offline = !! can_sync_offline;
-
- g_signal_emit (folder, signals[CHANGED], 0);
-}
-
-void
-e_folder_set_has_subfolders (EFolder *folder,
- gboolean has_subfolders)
-{
- g_return_if_fail (E_IS_FOLDER (folder));
-
- folder->priv->has_subfolders = !! has_subfolders;
-
- g_signal_emit (folder, signals[CHANGED], 0);
-}
-
-/**
- * e_folder_set_custom_icon_name:
- * @folder: An EFolder
- * @icon_name: Name of the icon to be set (to be found in the standard
- * Evolution icon dir)
- *
- * Set a custom icon for @folder (thus overriding the default icon, which is
- * the one associated to the type of the folder).
- **/
-void
-e_folder_set_custom_icon (EFolder *folder,
- const char *icon_name)
-{
- g_return_if_fail (E_IS_FOLDER (folder));
-
- if (icon_name == folder->priv->custom_icon_name)
- return;
-
- if (folder->priv->custom_icon_name == NULL
- || (icon_name != NULL && strcmp (icon_name, folder->priv->custom_icon_name) != 0)) {
- g_free (folder->priv->custom_icon_name);
- folder->priv->custom_icon_name = g_strdup (icon_name);
-
- g_signal_emit (folder, signals[CHANGED], 0);
- }
-}
-
-/**
- * e_folder_set_sorting_priority:
- * @folder: An EFolder
- * @sorting_priority: A sorting priority number
- *
- * Set the sorting priority for @folder. Folders have a default sorting
- * priority of zero; when deciding the sort order in the Evolution folder tree,
- * folders with the same priority value are compared by name, while folders
- * with a higher priority number always come after the folders with a lower
- * priority number.
- **/
-void
-e_folder_set_sorting_priority (EFolder *folder,
- int sorting_priority)
-{
- g_return_if_fail (E_IS_FOLDER (folder));
-
- if (folder->priv->sorting_priority == sorting_priority)
- return;
-
- folder->priv->sorting_priority = sorting_priority;
-
- g_signal_emit (folder, signals[CHANGED], 0);
-}
-
-
-/* Gotta love CORBA. */
-
-static CORBA_char *
-safe_corba_string_dup (const char *s)
-{
- if (s == NULL)
- return CORBA_string_dup ("");
-
- return CORBA_string_dup (s);
-}
-
-void
-e_folder_to_corba (EFolder *folder,
- const char *evolution_uri,
- GNOME_Evolution_Folder *folder_return)
-{
- g_return_if_fail (E_IS_FOLDER (folder));
- g_return_if_fail (folder_return != NULL);
-
- folder_return->type = safe_corba_string_dup (e_folder_get_type_string (folder));
- folder_return->description = safe_corba_string_dup (e_folder_get_description (folder));
- folder_return->displayName = safe_corba_string_dup (e_folder_get_name (folder));
- folder_return->physicalUri = safe_corba_string_dup (e_folder_get_physical_uri (folder));
- folder_return->evolutionUri = safe_corba_string_dup (evolution_uri);
- folder_return->customIconName = safe_corba_string_dup (e_folder_get_custom_icon_name (folder));
- folder_return->unreadCount = e_folder_get_unread_count (folder);
- folder_return->canSyncOffline = e_folder_get_can_sync_offline (folder);
- folder_return->sortingPriority = e_folder_get_sorting_priority (folder);
-}
-
-
-E_MAKE_TYPE (e_folder, "EFolder", EFolder, class_init, init, PARENT_TYPE)
diff --git a/shell/e-folder.h b/shell/e-folder.h
deleted file mode 100644
index 53308fb62f..0000000000
--- a/shell/e-folder.h
+++ /dev/null
@@ -1,108 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-folder.h
- *
- * Copyright (C) 2000, 2001, 2002 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifndef _E_FOLDER_H_
-#define _E_FOLDER_H_
-
-#include "Evolution.h"
-
-#include <gtk/gtkobject.h>
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-#define E_TYPE_FOLDER (e_folder_get_type ())
-#define E_FOLDER(obj) (GTK_CHECK_CAST ((obj), E_TYPE_FOLDER, EFolder))
-#define E_FOLDER_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_FOLDER, EFolderClass))
-#define E_IS_FOLDER(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_FOLDER))
-#define E_IS_FOLDER_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_FOLDER))
-
-
-typedef struct _EFolder EFolder;
-typedef struct _EFolderPrivate EFolderPrivate;
-typedef struct _EFolderClass EFolderClass;
-
-struct _EFolder {
- GtkObject parent;
-
- EFolderPrivate *priv;
-};
-
-struct _EFolderClass {
- GtkObjectClass parent_class;
-
- /* Virtual methods. */
- gboolean (* save_info) (EFolder *folder);
- gboolean (* load_info) (EFolder *folder);
- gboolean (* remove) (EFolder *folder);
- const char * (* get_physical_uri) (EFolder *folder);
-
- /* Signals. */
- void (* changed) (EFolder *folder);
- void (* name_changed) (EFolder *folder);
-};
-
-
-GtkType e_folder_get_type (void);
-void e_folder_construct (EFolder *folder,
- const char *name,
- const char *type,
- const char *description);
-EFolder *e_folder_new (const char *name,
- const char *type,
- const char *description);
-
-const char *e_folder_get_name (EFolder *folder);
-const char *e_folder_get_type_string (EFolder *folder);
-const char *e_folder_get_description (EFolder *folder);
-const char *e_folder_get_physical_uri (EFolder *folder);
-int e_folder_get_unread_count (EFolder *folder);
-gboolean e_folder_get_highlighted (EFolder *folder);
-gboolean e_folder_get_is_stock (EFolder *folder);
-gboolean e_folder_get_can_sync_offline (EFolder *folder);
-gboolean e_folder_get_has_subfolders (EFolder *folder);
-const char *e_folder_get_custom_icon_name (EFolder *folder);
-int e_folder_get_sorting_priority (EFolder *folder);
-
-void e_folder_set_name (EFolder *folder, const char *name);
-void e_folder_set_type_string (EFolder *folder, const char *type);
-void e_folder_set_description (EFolder *folder, const char *description);
-void e_folder_set_physical_uri (EFolder *folder, const char *physical_uri);
-void e_folder_set_unread_count (EFolder *folder, int unread_count);
-void e_folder_set_child_highlight (EFolder *folder, gboolean highlighted);
-void e_folder_set_is_stock (EFolder *folder, gboolean is_stock);
-void e_folder_set_can_sync_offline (EFolder *folder, gboolean can_sync_offline);
-void e_folder_set_has_subfolders (EFolder *folder, gboolean has_subfolders);
-void e_folder_set_custom_icon (EFolder *folder, const char *icon_name);
-void e_folder_set_sorting_priority (EFolder *folder, int sorting_priority);
-
-void e_folder_to_corba (EFolder *folder,
- const char *evolution_uri,
- GNOME_Evolution_Folder *folder_return);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* _E_FOLDER_H_ */
diff --git a/shell/e-history.c b/shell/e-history.c
deleted file mode 100644
index d12a933241..0000000000
--- a/shell/e-history.c
+++ /dev/null
@@ -1,261 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-history.c
- *
- * Copyright (C) 2002 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli <ettore@ximian.com>
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "e-history.h"
-
-#include <gal/util/e-util.h>
-
-
-#define PARENT_TYPE gtk_object_get_type ()
-static GtkObjectClass *parent_class = NULL;
-
-struct _EHistoryPrivate {
- EHistoryItemFreeFunc item_free_function;
-
- GList *items;
- GList *current_item;
-};
-
-
-/* GObject methods. */
-
-static void
-impl_finalize (GObject *object)
-{
- EHistory *history;
- EHistoryPrivate *priv;
- GList *p;
-
- history = E_HISTORY (object);
- priv = history->priv;
-
- for (p = priv->items; p != NULL; p = p->next)
- (* priv->item_free_function) (p->data);
-
- g_list_free (priv->items);
-
- g_free (priv);
-
- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
-}
-
-
-static void
-class_init (GObjectClass *object_class)
-{
- parent_class = g_type_class_ref(PARENT_TYPE);
-
- object_class->finalize = impl_finalize;
-}
-
-static void
-init (EHistory *history)
-{
- EHistoryPrivate *priv;
-
- priv = g_new (EHistoryPrivate, 1);
- priv->items = NULL;
- priv->current_item = NULL;
-
- history->priv = priv;
-
- GTK_OBJECT_UNSET_FLAGS (history, GTK_FLOATING);
-}
-
-
-void
-e_history_construct (EHistory *history,
- EHistoryItemFreeFunc item_free_function)
-{
- EHistoryPrivate *priv;
-
- g_return_if_fail (history != NULL);
- g_return_if_fail (E_IS_HISTORY (history));
-
- priv = history->priv;
-
- priv->item_free_function = item_free_function;
-}
-
-EHistory *
-e_history_new (EHistoryItemFreeFunc item_free_function)
-{
- EHistory *history;
-
- history = g_object_new (e_history_get_type (), NULL);
- e_history_construct (history, item_free_function);
-
- return history;
-}
-
-void *
-e_history_prev (EHistory *history)
-{
- EHistoryPrivate *priv;
-
- g_return_val_if_fail (history != NULL, NULL);
- g_return_val_if_fail (E_IS_HISTORY (history), NULL);
-
- priv = history->priv;
-
- if (! e_history_has_prev (history))
- return NULL;
-
- priv->current_item = priv->current_item->prev;
- return e_history_get_current (history);
-}
-
-gboolean
-e_history_has_prev (EHistory *history)
-{
- EHistoryPrivate *priv;
-
- g_return_val_if_fail (history != NULL, FALSE);
- g_return_val_if_fail (E_IS_HISTORY (history), FALSE);
-
- priv = history->priv;
-
- if (priv->current_item == NULL)
- return FALSE;
-
- if (priv->current_item->prev == NULL)
- return FALSE;
- else
- return TRUE;
-}
-
-void *
-e_history_next (EHistory *history)
-{
- EHistoryPrivate *priv;
-
- g_return_val_if_fail (history != NULL, NULL);
- g_return_val_if_fail (E_IS_HISTORY (history), NULL);
-
- priv = history->priv;
-
- if (! e_history_has_next (history))
- return NULL;
-
- priv->current_item = priv->current_item->next;
- return e_history_get_current (history);
-}
-
-gboolean
-e_history_has_next (EHistory *history)
-{
- EHistoryPrivate *priv;
-
- g_return_val_if_fail (history != NULL, FALSE);
- g_return_val_if_fail (E_IS_HISTORY (history), FALSE);
-
- priv = history->priv;
-
- if (priv->current_item == NULL)
- return FALSE;
-
- if (priv->current_item->next == NULL)
- return FALSE;
- else
- return TRUE;
-}
-
-void *
-e_history_get_current (EHistory *history)
-{
- EHistoryPrivate *priv;
-
- g_return_val_if_fail (history != NULL, NULL);
- g_return_val_if_fail (E_IS_HISTORY (history), NULL);
-
- priv = history->priv;
-
- if (priv->current_item == NULL)
- return NULL;
-
- return priv->current_item->data;
-}
-
-void
-e_history_add (EHistory *history,
- void *data)
-{
- EHistoryPrivate *priv;
-
- g_return_if_fail (history != NULL);
- g_return_if_fail (E_IS_HISTORY (history));
-
- priv = history->priv;
-
- if (priv->current_item == NULL) {
- priv->items = g_list_prepend (priv->items, data);
- priv->current_item = priv->items;
-
- return;
- }
-
- if (priv->current_item->next != NULL) {
- GList *p;
-
- for (p = priv->current_item->next; p != NULL; p = p->next)
- (* priv->item_free_function) (p->data);
-
- priv->current_item->next->prev = NULL;
- g_list_free (priv->current_item->next);
-
- priv->current_item->next = NULL;
- }
-
- g_list_append (priv->current_item, data);
- priv->current_item = priv->current_item->next;
-}
-
-void
-e_history_remove_matching (EHistory *history,
- const void *data,
- GCompareFunc compare_func)
-{
- EHistoryPrivate *priv;
- GList *p;
-
- g_return_if_fail (history != NULL);
- g_return_if_fail (E_IS_HISTORY (history));
- g_return_if_fail (compare_func != NULL);
-
- priv = history->priv;
-
- for (p = priv->items; p != NULL; p = p->next) {
- if ((* compare_func) (data, p->data) == 0) {
- if (priv->items == priv->current_item)
- priv->items = priv->current_item = g_list_remove_link (priv->items, p);
- else
- priv->items = g_list_remove_link (priv->items, p);
- }
- }
-}
-
-
-E_MAKE_TYPE (e_history, "EHistory", EHistory, class_init, init, GTK_TYPE_OBJECT)
diff --git a/shell/e-history.h b/shell/e-history.h
deleted file mode 100644
index 8d68c149fd..0000000000
--- a/shell/e-history.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-history.h
- *
- * Copyright (C) 2002 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli <ettore@ximian.com>
- */
-
-#ifndef _E_HISTORY_H_
-#define _E_HISTORY_H_
-
-#include <gnome.h>
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-#define E_TYPE_HISTORY (e_history_get_type ())
-#define E_HISTORY(obj) (GTK_CHECK_CAST ((obj), E_TYPE_HISTORY, EHistory))
-#define E_HISTORY_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_HISTORY, EHistoryClass))
-#define E_IS_HISTORY(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_HISTORY))
-#define E_IS_HISTORY_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_HISTORY))
-
-
-typedef struct _EHistory EHistory;
-typedef struct _EHistoryPrivate EHistoryPrivate;
-typedef struct _EHistoryClass EHistoryClass;
-
-struct _EHistory {
- GtkObject parent;
-
- EHistoryPrivate *priv;
-};
-
-struct _EHistoryClass {
- GtkObjectClass parent_class;
-};
-
-
-typedef void (* EHistoryItemFreeFunc) (void *data);
-
-
-GtkType e_history_get_type (void);
-
-void e_history_construct (EHistory *history,
- EHistoryItemFreeFunc item_free_function);
-EHistory *e_history_new (EHistoryItemFreeFunc item_free_function);
-
-void *e_history_prev (EHistory *history);
-gboolean e_history_has_prev (EHistory *history);
-
-void *e_history_next (EHistory *history);
-gboolean e_history_has_next (EHistory *history);
-
-void *e_history_get_current (EHistory *history);
-
-void e_history_add (EHistory *history,
- void *data);
-
-void e_history_remove_matching (EHistory *history,
- const void *data,
- GCompareFunc compare_func);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* _E_HISTORY_H_ */
diff --git a/shell/e-icon-factory.c b/shell/e-icon-factory.c
deleted file mode 100644
index c0fceafc42..0000000000
--- a/shell/e-icon-factory.c
+++ /dev/null
@@ -1,162 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-icon-factory.c - Icon factory for the Evolution shell.
- *
- * Copyright (C) 2002 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli <ettore@ximian.com>
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "e-icon-factory.h"
-
-#include "e-shell-constants.h"
-
-
-/* One icon. Keep both a small (16x16) and a large (48x48) version around. */
-struct _Icon {
- char *name;
- GdkPixbuf *small_pixbuf;
- GdkPixbuf *large_pixbuf;
-};
-typedef struct _Icon Icon;
-
-/* Hash of all the icons. */
-static GHashTable *name_to_icon = NULL;
-
-
-/* Creating and destroying icons. */
-
-static Icon *
-icon_new (const char *name,
- GdkPixbuf *small_pixbuf,
- GdkPixbuf *large_pixbuf)
-{
- Icon *icon;
-
- icon = g_new (Icon, 1);
- icon->name = g_strdup (name);
- icon->small_pixbuf = small_pixbuf;
- icon->large_pixbuf = large_pixbuf;
-
- if (small_pixbuf != NULL)
- g_object_ref (small_pixbuf);
- if (large_pixbuf != NULL)
- g_object_ref (large_pixbuf);
-
- return icon;
-}
-
-#if 0
-
-/* (This is not currently used since we never prune icons out of the
- cache.) */
-static void
-icon_free (Icon *icon)
-{
- g_free (icon->name);
-
- if (icon->large_pixbuf != NULL)
- g_object_unref (icon->large_pixbuf);
- if (icon->small_pixbuf != NULL)
- g_object_unref (icon->small_pixbuf);
-
- g_free (icon);
-}
-
-#endif
-
-
-/* Loading icons. */
-
-static Icon *
-load_icon (const char *icon_name)
-{
- GdkPixbuf *small_pixbuf;
- GdkPixbuf *large_pixbuf;
- Icon *icon;
- char *path;
-
- path = g_strconcat (EVOLUTION_IMAGES, "/", icon_name, "-mini.png", NULL);
- small_pixbuf = gdk_pixbuf_new_from_file (path, NULL);
- g_free (path);
-
- path = g_strconcat (EVOLUTION_IMAGES, "/", icon_name, ".png", NULL);
- large_pixbuf = gdk_pixbuf_new_from_file (path, NULL);
- g_free (path);
-
- if (large_pixbuf == NULL || small_pixbuf == NULL)
- return NULL;
-
- icon = icon_new (icon_name, small_pixbuf, large_pixbuf);
-
- g_object_unref (small_pixbuf);
- g_object_unref (large_pixbuf);
-
- return icon;
-}
-
-
-/* Public API. */
-
-void
-e_icon_factory_init (void)
-{
- if (name_to_icon != NULL) {
- /* Already initialized. */
- return;
- }
-
- name_to_icon = g_hash_table_new (g_str_hash, g_str_equal);
-}
-
-GdkPixbuf *
-e_icon_factory_get_icon (const char *icon_name,
- gboolean mini)
-{
- Icon *icon;
-
- g_return_val_if_fail (icon_name != NULL, NULL);
-
- icon = g_hash_table_lookup (name_to_icon, icon_name);
- if (icon == NULL) {
- icon = load_icon (icon_name);
- if (icon == NULL) {
- g_warning ("Icon not found -- %s", icon_name);
-
- /* Create an empty icon so that we don't keep spitting
- out the same warning over and over, every time this
- icon is requested. */
-
- icon = icon_new (icon_name, NULL, NULL);
- g_hash_table_insert (name_to_icon, icon->name, icon);
- return NULL;
- }
-
- g_hash_table_insert (name_to_icon, icon->name, icon);
- }
-
- if (mini) {
- g_object_ref (icon->small_pixbuf);
- return icon->small_pixbuf;
- } else {
- g_object_ref (icon->large_pixbuf);
- return icon->large_pixbuf;
- }
-}
diff --git a/shell/e-icon-factory.h b/shell/e-icon-factory.h
deleted file mode 100644
index 072cd4e222..0000000000
--- a/shell/e-icon-factory.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-icon-factory.h - Icon factory for the Evolution shell.
- *
- * Copyright (C) 2002 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli <ettore@ximian.com>
- */
-
-#ifndef _E_ICON_FACTORY_H_
-#define _E_ICON_FACTORY_H_
-
-#include <gdk-pixbuf/gdk-pixbuf.h>
-
-void e_icon_factory_init (void);
-
-GdkPixbuf *e_icon_factory_get_icon (const char *icon_name,
- gboolean mini);
-
-#endif /* _E_ICON_FACTORY_H_ */
diff --git a/shell/e-local-folder.c b/shell/e-local-folder.c
deleted file mode 100644
index 1df96734f9..0000000000
--- a/shell/e-local-folder.c
+++ /dev/null
@@ -1,560 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-local-folder.c
- *
- * Copyright (C) 2000 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-/* The metafile goes like this:
-
- <?xml version="1.0"?>
- <efolder>
- <type>mail</type>
-
- <name>Inbox</name>
- <name locale="it">Posta in Arrivo</name>
-
- <description>This is the default folder for incoming messages</description>
- <description locale="it">Cartella che contiene i messaggi in arrivo</description>
-
- <homepage>http://www.somewhere.net</homepage>
- </efolder>
-
- FIXME: Do we want to use a namespace for this?
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <string.h>
-#include <unistd.h>
-
-#include <libxml/parser.h>
-#include <libxml/xmlmemory.h>
-
-#include <libgnome/gnome-util.h>
-
-#include <gal/util/e-util.h>
-#include <gal/util/e-xml-utils.h>
-
-#include <libgnome/gnome-util.h>
-
-#include "e-local-folder.h"
-
-
-#define PARENT_TYPE E_TYPE_FOLDER
-static EFolderClass *parent_class = NULL;
-
-#define URI_PREFIX "file://"
-#define URI_PREFIX_LEN 7
-
-/* This provides the name and the description for a specific locale. */
-struct _I18nInfo {
- char *language_id;
- char *name;
- char *description;
-};
-typedef struct _I18nInfo I18nInfo;
-
-struct _ELocalFolderPrivate {
- GHashTable *language_id_to_i18n_info;
-};
-
-
-/* Locale information. */
-
-static char *global_language_id = NULL;
-
-
-/* I18nInfo handling. */
-
-static I18nInfo *
-i18n_info_new (const char *language_id,
- const char *name,
- const char *description)
-{
- I18nInfo *info;
-
- info = g_new (I18nInfo, 1);
- info->language_id = g_strdup (language_id);
- info->name = g_strdup (name);
- info->description = g_strdup (description);
-
- return info;
-}
-
-static void
-i18n_info_free (I18nInfo *info)
-{
- g_free (info->language_id);
- g_free (info->name);
- g_free (info->description);
-
- g_free (info);
-}
-
-
-/* Language ID -> I18nInfo hash table handling. */
-
-static void
-add_i18n_info_to_hash (GHashTable *language_id_to_i18n_info_hash,
- I18nInfo *i18n_info)
-{
- I18nInfo *existing_i18n_info;
-
- existing_i18n_info = (I18nInfo *) g_hash_table_lookup (language_id_to_i18n_info_hash,
- i18n_info->language_id);
- if (existing_i18n_info != NULL) {
- g_hash_table_remove (language_id_to_i18n_info_hash,
- i18n_info->language_id);
- i18n_info_free (existing_i18n_info);
- }
-
- g_hash_table_insert (language_id_to_i18n_info_hash, i18n_info->language_id, i18n_info);
-}
-
-static void
-language_id_to_i18n_info_hash_foreach_free (void *key,
- void *value,
- void *data)
-{
- i18n_info_free ((I18nInfo *) value);
-}
-
-static I18nInfo *
-get_i18n_info_for_language (ELocalFolder *local_folder,
- const char *language_id)
-{
- ELocalFolderPrivate *priv;
- I18nInfo *i18n_info;
-
- priv = local_folder->priv;
-
- if (language_id == NULL)
- language_id = global_language_id;
-
- i18n_info = g_hash_table_lookup (priv->language_id_to_i18n_info, language_id);
-
- /* For locale info like `en_UK@yadda', we try to use `en' as a backup. */
- /* Note: this is exactly the same thing that gnome-config does with the
- I18N value handling. I hope it works. */
- if (i18n_info == NULL) {
- size_t n;
-
- n = strcspn (language_id, "@_");
- if (language_id[n] != '\0') {
- char *simplified_language_id;
-
- simplified_language_id = g_strndup (language_id, n);
- i18n_info = g_hash_table_lookup (priv->language_id_to_i18n_info,
- simplified_language_id);
- }
- }
-
- return i18n_info;
-}
-
-
-/* Locale handling. */
-
-static void
-setup_global_language_id (void)
-{
- /* FIXME: Implement. */
- global_language_id = "C";
-}
-
-/* Update the EFolder attributes according to the current locale. */
-static void
-update_for_global_locale (ELocalFolder *local_folder)
-{
- I18nInfo *i18n_info;
-
- i18n_info = get_i18n_info_for_language (local_folder, NULL);
-
- if (i18n_info == NULL)
- i18n_info = get_i18n_info_for_language (local_folder, "C");
-
- g_assert (i18n_info != NULL);
-
- e_folder_set_name (E_FOLDER (local_folder), i18n_info->name);
- e_folder_set_description (E_FOLDER (local_folder), i18n_info->description);
-}
-
-
-/* XML tree handling. */
-
-static char *
-get_string_value (xmlNode *node,
- const char *name)
-{
- xmlNode *p;
- xmlChar *xml_string;
- char *retval;
-
- p = e_xml_get_child_by_name (node, (xmlChar *) name);
- if (p == NULL)
- return NULL;
-
- p = e_xml_get_child_by_name (p, (xmlChar *) "text");
- if (p == NULL)
- return NULL;
-
- xml_string = xmlNodeListGetString (node->doc, p, TRUE);
- retval = g_strdup ((char *) xml_string);
- xmlFree (xml_string);
-
- return retval;
-}
-
-static void
-retrieve_info_item (ELocalFolder *local_folder,
- xmlNode *node)
-{
- xmlChar *lang;
- char *name;
- char *description;
-
- lang = xmlGetProp (node, "lang");
- name = get_string_value (node, "name");
- description = get_string_value (node, "description");
-
- if (lang == NULL) {
- e_local_folder_add_i18n_info (local_folder, "C", name, description);
- } else {
- e_local_folder_add_i18n_info (local_folder, lang, name, description);
- xmlFree (lang);
- }
-
- g_free (name);
- g_free (description);
-}
-
-static void
-retrieve_info (ELocalFolder *local_folder,
- xmlNode *root_xml_node)
-{
- ELocalFolderPrivate *priv;
- xmlNode *p;
-
- priv = local_folder->priv;
-
- for (p = root_xml_node->children; p != NULL; p = p->next) {
- if (xmlStrcmp (p->name, "info") == 0)
- retrieve_info_item (local_folder, p);
- }
-}
-
-static gboolean
-construct_loading_metadata (ELocalFolder *local_folder,
- const char *path)
-{
- EFolder *folder;
- xmlDoc *doc;
- xmlNode *root;
- char *base_name;
- char *type;
- char *metadata_path;
- char *physical_uri;
-
- folder = E_FOLDER (local_folder);
-
- metadata_path = g_build_filename (path, E_LOCAL_FOLDER_METADATA_FILE_NAME, NULL);
-
- doc = xmlParseFile (metadata_path);
- if (doc == NULL) {
- g_free (metadata_path);
- return FALSE;
- }
-
- root = xmlDocGetRootElement (doc);
- if (root == NULL || root->name == NULL || strcmp (root->name, "efolder") != 0) {
- g_free (metadata_path);
- xmlFreeDoc (doc);
- return FALSE;
- }
-
- type = get_string_value (root, "type");
- if (type == NULL) {
- g_free (metadata_path);
- xmlFreeDoc (doc);
- return FALSE;
- }
-
- base_name = g_path_get_basename (path);
- e_local_folder_construct (local_folder, base_name, type, NULL);
- g_free (base_name);
- g_free (type);
-
- retrieve_info (local_folder, root);
-
- xmlFreeDoc (doc);
-
- physical_uri = g_strconcat (URI_PREFIX, path, NULL);
- e_folder_set_physical_uri (folder, physical_uri);
- g_free (physical_uri);
-
- g_free (metadata_path);
-
- return TRUE;
-}
-
-static gboolean
-save_metadata (ELocalFolder *local_folder)
-{
- EFolder *folder;
- xmlDoc *doc;
- xmlNode *root;
- const char *physical_directory;
- char *physical_path;
-
- folder = E_FOLDER (local_folder);
-
- doc = xmlNewDoc ((xmlChar *) "1.0");
- root = xmlNewDocNode (doc, NULL, (xmlChar *) "efolder", NULL);
- xmlDocSetRootElement (doc, root);
-
- xmlNewChild (root, NULL, (xmlChar *) "type",
- (xmlChar *) e_folder_get_type_string (folder));
-
- if (e_folder_get_description (folder) != NULL)
- xmlNewTextChild (root, NULL, (xmlChar *) "description",
- (xmlChar *) e_folder_get_description (folder));
-
- physical_directory = e_folder_get_physical_uri (folder) + URI_PREFIX_LEN - 1;
- physical_path = g_build_filename (physical_directory, E_LOCAL_FOLDER_METADATA_FILE_NAME, NULL);
-
- if (xmlSaveFile (physical_path, doc) < 0) {
- unlink (physical_path);
- g_free (physical_path);
- xmlFreeDoc (doc);
- return FALSE;
- }
-
- g_free (physical_path);
-
- xmlFreeDoc (doc);
- return TRUE;
-}
-
-
-/* GtkObject methods. */
-
-static void
-impl_finalize (GObject *object)
-{
- ELocalFolder *local_folder;
- ELocalFolderPrivate *priv;
-
- local_folder = E_LOCAL_FOLDER (object);
- priv = local_folder->priv;
-
- g_hash_table_foreach (priv->language_id_to_i18n_info,
- language_id_to_i18n_info_hash_foreach_free,
- NULL);
- g_hash_table_destroy (priv->language_id_to_i18n_info);
-
- g_free (priv);
-
- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
-}
-
-
-static void
-class_init (ELocalFolderClass *klass)
-{
- GObjectClass *object_class;
-
- parent_class = g_type_class_ref(e_folder_get_type ());
-
- object_class = G_OBJECT_CLASS (klass);
- object_class->finalize = impl_finalize;
-
- setup_global_language_id ();
-}
-
-static void
-init (ELocalFolder *local_folder)
-{
- ELocalFolderPrivate *priv;
-
- priv = g_new (ELocalFolderPrivate, 1);
- priv->language_id_to_i18n_info = g_hash_table_new (g_str_hash, g_str_equal);
-
- local_folder->priv = priv;
-}
-
-
-void
-e_local_folder_construct (ELocalFolder *local_folder,
- const char *name,
- const char *type,
- const char *description)
-{
- ELocalFolderPrivate *priv;
- I18nInfo *i18n_info;
-
- g_return_if_fail (local_folder != NULL);
- g_return_if_fail (E_IS_LOCAL_FOLDER (local_folder));
- g_return_if_fail (name != NULL);
- g_return_if_fail (type != NULL);
-
- priv = local_folder->priv;
-
- e_folder_construct (E_FOLDER (local_folder), name, type, description);
-
- i18n_info = i18n_info_new ("C", name, description);
- add_i18n_info_to_hash (priv->language_id_to_i18n_info, i18n_info);
-}
-
-EFolder *
-e_local_folder_new (const char *name,
- const char *type,
- const char *description)
-{
- ELocalFolder *local_folder;
-
- g_return_val_if_fail (name != NULL, NULL);
- g_return_val_if_fail (type != NULL, NULL);
-
- local_folder = g_object_new (e_local_folder_get_type (), NULL);
-
- e_local_folder_construct (local_folder, name, type, description);
-
- return E_FOLDER (local_folder);
-}
-
-EFolder *
-e_local_folder_new_from_path (const char *path)
-{
- EFolder *folder;
-
- g_return_val_if_fail (g_path_is_absolute (path), NULL);
-
- folder = g_object_new (e_local_folder_get_type (), NULL);
-
- if (! construct_loading_metadata (E_LOCAL_FOLDER (folder), path)) {
- g_object_unref (folder);
- return NULL;
- }
-
- return folder;
-}
-
-gboolean
-e_local_folder_save (ELocalFolder *local_folder)
-{
- g_return_val_if_fail (local_folder != NULL, FALSE);
- g_return_val_if_fail (E_IS_LOCAL_FOLDER (local_folder), FALSE);
- g_return_val_if_fail (e_folder_get_physical_uri (E_FOLDER (local_folder)) != NULL, FALSE);
-
- return save_metadata (local_folder);
-}
-
-
-/**
- * e_local_folder_add_i18n_info:
- * @local_folder: A pointer to an ELocalFolder object
- * @language_id: An I1I8N locale ID
- * @name: Name for @local_folder in the specified @language_id
- * @description: Description for @local_folder in the specified @language_id
- *
- * Set the @name and @description for the specified @language_id locale.
- **/
-void
-e_local_folder_add_i18n_info (ELocalFolder *local_folder,
- const char *language_id,
- const char *name,
- const char *description)
-{
- ELocalFolderPrivate *priv;
- I18nInfo *info;
-
- g_return_if_fail (local_folder != NULL);
- g_return_if_fail (E_IS_LOCAL_FOLDER (local_folder));
- g_return_if_fail (language_id != NULL);
- g_return_if_fail (name != NULL || description != NULL);
-
- priv = local_folder->priv;
-
- info = i18n_info_new (language_id, name, description);
- add_i18n_info_to_hash (priv->language_id_to_i18n_info, info);
-
- update_for_global_locale (local_folder);
-}
-
-/**
- * e_local_folder_get_i18n_info:
- * @local_folder: A pointer to an ELocalFolder object
- * @language_id: The ID of the language whose locale we want to retrieve name
- * and description for
- * @language_id_return: The actual locale ID that the name and description are
- * saved under (e.g. if you ask for an "en_UK@yadda", we might give you the
- * info for just "en")
- * @name_return: A pointer to a pointer that will point to the i18nized name on
- * return. Can be NULL.
- * @description_return: A pointer to a pointer that will point to the i18n
- * description on return. Can be NULL.
- *
- * Retrieve the name and description for @local_folder in the specified locale.
- *
- * Return value: %TRUE if some info is found for that @language_id, %FALSE
- * otherwise.
- **/
-gboolean
-e_local_folder_get_i18n_info (ELocalFolder *local_folder,
- const char *language_id,
- const char **language_id_return,
- const char **name_return,
- const char **description_return)
-{
- ELocalFolderPrivate *priv;
- I18nInfo *i18n_info;
-
- g_return_val_if_fail (local_folder != NULL, FALSE);
- g_return_val_if_fail (E_IS_LOCAL_FOLDER (local_folder), FALSE);
- g_return_val_if_fail (language_id != NULL, FALSE);
-
- priv = local_folder->priv;
-
- i18n_info = get_i18n_info_for_language (local_folder, language_id);
-
- if (i18n_info == NULL) {
- if (language_id_return != NULL)
- *language_id_return = NULL;
- if (name_return != NULL)
- *name_return = NULL;
- if (description_return != NULL)
- *description_return = NULL;
-
- return FALSE;
- }
-
- if (language_id_return != NULL)
- *language_id_return = i18n_info->language_id;
- if (name_return != NULL)
- *name_return = i18n_info->name;
- if (description_return != NULL)
- *description_return = i18n_info->description;
-
- return TRUE;
-}
-
-
-E_MAKE_TYPE (e_local_folder, "ELocalFolder", ELocalFolder, class_init, init, PARENT_TYPE)
diff --git a/shell/e-local-folder.h b/shell/e-local-folder.h
deleted file mode 100644
index ca3cf6c364..0000000000
--- a/shell/e-local-folder.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-local-folder.h
- *
- * Copyright (C) 2000, 2001 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifndef _E_LOCAL_FOLDER_H_
-#define _E_LOCAL_FOLDER_H_
-
-#include <gtk/gtkobject.h>
-
-#include "e-folder.h"
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-#define E_TYPE_LOCAL_FOLDER (e_local_folder_get_type ())
-#define E_LOCAL_FOLDER(obj) (GTK_CHECK_CAST ((obj), E_TYPE_LOCAL_FOLDER, ELocalFolder))
-#define E_LOCAL_FOLDER_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_LOCAL_FOLDER, ELocalFolderClass))
-#define E_IS_LOCAL_FOLDER(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_LOCAL_FOLDER))
-#define E_IS_LOCAL_FOLDER_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_LOCAL_FOLDER))
-
-#define E_LOCAL_FOLDER_METADATA_FILE_NAME "folder-metadata.xml"
-#define E_LOCAL_FOLDER_METADATA_FILE_NAME_LEN 19
-
-typedef struct _ELocalFolder ELocalFolder;
-typedef struct _ELocalFolderClass ELocalFolderClass;
-typedef struct _ELocalFolderPrivate ELocalFolderPrivate;
-
-struct _ELocalFolder {
- EFolder parent;
-
- ELocalFolderPrivate *priv;
-};
-
-struct _ELocalFolderClass {
- EFolderClass parent_class;
-};
-
-
-GtkType e_local_folder_get_type (void);
-void e_local_folder_construct (ELocalFolder *local_folder,
- const char *name,
- const char *type,
- const char *description);
-EFolder *e_local_folder_new (const char *name,
- const char *type,
- const char *description);
-EFolder *e_local_folder_new_from_path (const char *physical_path);
-gboolean e_local_folder_save (ELocalFolder *local_folder);
-
-void e_local_folder_add_i18n_info (ELocalFolder *local_folder,
- const char *language_id,
- const char *name,
- const char *description);
-gboolean e_local_folder_get_i18n_info (ELocalFolder *local_folder,
- const char *language_id,
- const char **language_id_return,
- const char **name_return,
- const char **description_return);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* __E_LOCAL_FOLDER_H__ */
diff --git a/shell/e-local-storage.c b/shell/e-local-storage.c
deleted file mode 100644
index 8ce9f87189..0000000000
--- a/shell/e-local-storage.c
+++ /dev/null
@@ -1,1236 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-local-storage.c
- *
- * Copyright (C) 2000, 2001 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-/* FIXMEs:
- *
- * - If we have `.' or `..' as path elements, we lose.
- *
- * - If the LocalStorage is destroyed and an async operation on a shell component is
- * pending, we get a callback on a bogus object. We need support for cancelling
- * operations on the shell component.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <errno.h>
-#include <string.h>
-#include <sys/param.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>
-#include <dirent.h>
-
-#include <gtk/gtksignal.h>
-
-#include <libgnome/gnome-i18n.h>
-#include <libgnome/gnome-util.h>
-
-#include <gal/util/e-util.h>
-
-#include "e-util/e-path.h"
-#include "e-local-folder.h"
-#include "e-shell-constants.h"
-
-#include "evolution-storage.h"
-
-#include "e-local-storage.h"
-
-#include <bonobo/bonobo-exception.h>
-
-#define PARENT_TYPE E_TYPE_STORAGE
-static EStorageClass *parent_class = NULL;
-
-struct _ELocalStoragePrivate {
- EFolderTypeRegistry *folder_type_registry;
- char *base_path;
- EvolutionStorage *bonobo_interface;
-};
-
-
-/* EStorageResult <-> errno mapping. */
-
-static EStorageResult
-errno_to_storage_result (void)
-{
- EStorageResult storage_result;
-
- switch (errno) {
- case EACCES:
- case EROFS:
- storage_result = E_STORAGE_PERMISSIONDENIED;
- break;
- case EEXIST:
- storage_result = E_STORAGE_EXISTS;
- break;
- case ENOSPC:
- storage_result = E_STORAGE_NOSPACE;
- break;
- default:
- storage_result = E_STORAGE_GENERICERROR;
- }
-
- return storage_result;
-}
-
-static EStorageResult
-shell_component_result_to_storage_result (EvolutionShellComponentResult result)
-{
- /* FIXME: Maybe we need better mapping here. */
- switch (result) {
- case EVOLUTION_SHELL_COMPONENT_OK:
- return E_STORAGE_OK;
- case EVOLUTION_SHELL_COMPONENT_NOTFOUND:
- return E_STORAGE_NOTFOUND;
- case EVOLUTION_SHELL_COMPONENT_UNSUPPORTEDTYPE:
- return E_STORAGE_UNSUPPORTEDTYPE;
- case EVOLUTION_SHELL_COMPONENT_UNSUPPORTEDOPERATION:
- return E_STORAGE_UNSUPPORTEDOPERATION;
- case EVOLUTION_SHELL_COMPONENT_EXISTS:
- return E_STORAGE_EXISTS;
- case EVOLUTION_SHELL_COMPONENT_PERMISSIONDENIED:
- return E_STORAGE_PERMISSIONDENIED;
- case EVOLUTION_SHELL_COMPONENT_ALREADYOWNED:
- case EVOLUTION_SHELL_COMPONENT_BUSY:
- case EVOLUTION_SHELL_COMPONENT_CORBAERROR:
- case EVOLUTION_SHELL_COMPONENT_HASSUBFOLDERS:
- case EVOLUTION_SHELL_COMPONENT_INTERNALERROR:
- case EVOLUTION_SHELL_COMPONENT_INTERRUPTED:
- case EVOLUTION_SHELL_COMPONENT_INVALIDARG:
- case EVOLUTION_SHELL_COMPONENT_INVALIDURI:
- case EVOLUTION_SHELL_COMPONENT_NOSPACE:
- case EVOLUTION_SHELL_COMPONENT_NOTOWNED:
- case EVOLUTION_SHELL_COMPONENT_UNKNOWNERROR:
- default:
- return E_STORAGE_GENERICERROR;
- }
-}
-
-
-/* Utility functions. */
-
-static void
-new_folder (ELocalStorage *local_storage,
- const char *path,
- EFolder *folder)
-{
- ELocalStoragePrivate *priv;
-
- priv = local_storage->priv;
-
- e_storage_new_folder (E_STORAGE (local_storage), path, folder);
-
- evolution_storage_new_folder (EVOLUTION_STORAGE (priv->bonobo_interface),
- path,
- e_folder_get_name (folder),
- e_folder_get_type_string (folder),
- e_folder_get_physical_uri (folder),
- e_folder_get_description (folder),
- e_folder_get_custom_icon_name (folder),
- e_folder_get_unread_count (folder),
- FALSE,
- 0);
-}
-
-static gboolean
-setup_folder_as_stock (ELocalStorage *local_storage,
- const char *path,
- const char *name,
- const char *custom_icon_name)
-{
- EFolder *folder;
-
- folder = e_storage_get_folder (E_STORAGE (local_storage), path);
- if (folder == NULL)
- return FALSE;
-
- e_folder_set_name (folder, name);
- e_folder_set_is_stock (folder, TRUE);
- e_folder_set_custom_icon (folder, custom_icon_name);
-
- return TRUE;
-}
-
-static void
-setup_stock_folders (ELocalStorage *local_storage)
-{
- setup_folder_as_stock (local_storage, "/Calendar", _("Calendar"), NULL);
- setup_folder_as_stock (local_storage, "/Contacts", _("Contacts"), NULL);
- setup_folder_as_stock (local_storage, "/Drafts", _("Drafts"), NULL);
- setup_folder_as_stock (local_storage, "/Inbox", _("Inbox"), "inbox");
- setup_folder_as_stock (local_storage, "/Outbox", _("Outbox"), "outbox");
- setup_folder_as_stock (local_storage, "/Sent", _("Sent"), NULL);
- setup_folder_as_stock (local_storage, "/Tasks", _("Tasks"), NULL);
- setup_folder_as_stock (local_storage, "/Trash", _("Trash"), NULL);
-}
-
-static gboolean
-load_folder (const char *physical_path,
- const char *path,
- void *data)
-{
- ELocalStorage *local_storage;
- EFolder *folder;
-
- local_storage = E_LOCAL_STORAGE (data);
-
- folder = e_local_folder_new_from_path (physical_path);
- if (folder == NULL) {
- /* g_warning ("No folder metadata in %s... ignoring", physical_path); FIXME */
- return TRUE;
- }
-
- e_storage_new_folder ((EStorage *)local_storage, path, folder);
- return TRUE;
-}
-
-static void
-setup_corba_storage (ELocalStorage *local_storage,
- const char *path)
-{
- GList *subfolder_paths;
- EFolder *folder;
- GList *p;
-
- folder = e_storage_get_folder (E_STORAGE (local_storage), path);
-
- if (folder != NULL)
- evolution_storage_new_folder (EVOLUTION_STORAGE (local_storage->priv->bonobo_interface),
- path,
- e_folder_get_name (folder),
- e_folder_get_type_string (folder),
- e_folder_get_physical_uri (folder),
- e_folder_get_description (folder),
- e_folder_get_custom_icon_name (folder),
- e_folder_get_unread_count (folder),
- FALSE,
- 0);
-
- subfolder_paths = e_storage_get_subfolder_paths (E_STORAGE (local_storage), path);
-
- for (p = subfolder_paths; p != NULL; p = p->next)
- setup_corba_storage (local_storage, (const char *) p->data);
-
- e_free_string_list (subfolder_paths);
-}
-
-static gboolean
-load_all_folders (ELocalStorage *local_storage)
-{
- const char *base_path;
-
- base_path = e_local_storage_get_base_path (local_storage);
-
- /* Ignore errors, so we set up the local storage even if there is stale
- data that we don't understand in ~/evolution. */
- e_path_find_folders (base_path, load_folder, local_storage);
-
- setup_stock_folders (local_storage);
-
- setup_corba_storage (local_storage, "/");
-
- return TRUE;
-}
-
-static EStorageResult
-storage_result_from_component_result (EvolutionShellComponentResult result)
-{
- switch (result) {
- case EVOLUTION_SHELL_COMPONENT_PERMISSIONDENIED:
- return E_STORAGE_PERMISSIONDENIED;
- case EVOLUTION_SHELL_COMPONENT_NOSPACE:
- return E_STORAGE_NOSPACE;
- default:
- return E_STORAGE_GENERICERROR;
- }
-}
-
-
-/* Callbacks for the async methods invoked on the `Evolution::ShellComponent's. */
-
-static void
-notify_listener (const Bonobo_Listener listener,
- EStorageResult result,
- const char *physical_path)
-{
- CORBA_any any;
- GNOME_Evolution_Storage_FolderResult folder_result;
- CORBA_Environment ev;
-
- folder_result.result = result;
- folder_result.path = CORBA_string_dup (physical_path ? physical_path : "");
- any._type = TC_GNOME_Evolution_Storage_FolderResult;
- any._value = &folder_result;
-
- CORBA_exception_init (&ev);
- Bonobo_Listener_event (listener, "evolution-shell:folder_created",
- &any, &ev);
- if (BONOBO_EX (&ev)) {
- g_warning ("Exception notifing listener: %s\n",
- CORBA_exception_id (&ev));
- }
- CORBA_exception_free (&ev);
-}
-
-struct _AsyncCreateFolderCallbackData {
- EStorage *storage;
- Bonobo_Listener listener;
-
- char *path;
- char *display_name;
- char *type;
- char *description;
- char *physical_uri;
- char *physical_path;
-
- EStorageResultCallback callback;
- void *callback_data;
-};
-typedef struct _AsyncCreateFolderCallbackData AsyncCreateFolderCallbackData;
-
-static void
-component_async_create_folder_callback (EvolutionShellComponentClient *shell_component_client,
- EvolutionShellComponentResult result,
- void *data)
-{
- AsyncCreateFolderCallbackData *callback_data;
- EStorageResult storage_result;
-
- callback_data = (AsyncCreateFolderCallbackData *) data;
-
- storage_result = shell_component_result_to_storage_result (result);
-
- if (result != EVOLUTION_SHELL_COMPONENT_OK) {
- /* XXX: This assumes the component won't leave any files in the directory. */
- rmdir (callback_data->physical_path);
- } else {
- EFolder *folder;
-
- folder = e_local_folder_new (callback_data->display_name,
- callback_data->type,
- callback_data->description);
-
- e_folder_set_physical_uri (folder, callback_data->physical_uri);
-
- if (e_local_folder_save (E_LOCAL_FOLDER (folder))) {
- new_folder (E_LOCAL_STORAGE (callback_data->storage),
- callback_data->path, folder);
- } else {
- rmdir (callback_data->physical_path);
- g_object_unref (folder);
- storage_result = E_STORAGE_IOERROR;
- }
- }
-
- g_object_unref (shell_component_client);
-
- if (callback_data->listener != CORBA_OBJECT_NIL)
- notify_listener (callback_data->listener, storage_result,
- callback_data->physical_path);
-
- if (callback_data->callback != NULL)
- (* callback_data->callback) (callback_data->storage,
- storage_result,
- callback_data->callback_data);
-
- g_free (callback_data->path);
- g_free (callback_data->display_name);
- g_free (callback_data->type);
- g_free (callback_data->description);
- g_free (callback_data->physical_uri);
- g_free (callback_data->physical_path);
- g_free (callback_data);
-}
-
-
-/* Implementation for the folder operations. */
-
-static EStorageResult
-create_folder_directory (ELocalStorage *local_storage,
- const char *path,
- const char *type,
- const char *description,
- char **physical_path_return)
-{
- EStorage *storage;
- ELocalStoragePrivate *priv;
- char *parent_path;
- char *physical_path;
-
- storage = E_STORAGE (local_storage);
- priv = local_storage->priv;
-
- *physical_path_return = NULL;
- g_assert (g_path_is_absolute (path));
-
- parent_path = g_path_get_dirname(path);
-
- if (strlen(parent_path) > 1) {
- char *subfolders_directory_physical_path;
- char *parent;
-
- /* Create the `subfolders' subdirectory under the parent. */
- parent = g_strdup_printf ("%s/", parent_path);
- subfolders_directory_physical_path = e_path_to_physical (priv->base_path, parent);
-
- if (mkdir (subfolders_directory_physical_path, 0700) == -1 && errno != EEXIST) {
- g_free (subfolders_directory_physical_path);
- g_free (parent);
- return errno_to_storage_result ();
- }
-
- g_free (subfolders_directory_physical_path);
- g_free (parent);
- }
-
- g_free (parent_path);
-
- physical_path = e_path_to_physical (priv->base_path, path);
-
- /* Create the directory that holds the folder. */
-
- *physical_path_return = physical_path;
- if (mkdir (physical_path, 0700) == -1) {
- return errno_to_storage_result ();
- }
-
- return E_STORAGE_OK;
-}
-
-static void
-create_folder (ELocalStorage *local_storage,
- const Bonobo_Listener listener,
- const char *path,
- const char *type,
- const char *description,
- EStorageResultCallback callback,
- void *data)
-{
- EStorage *storage;
- ELocalStoragePrivate *priv;
- EvolutionShellComponentClient *component_client;
- AsyncCreateFolderCallbackData *callback_data;
- EStorageResult result;
- char *folder_name;
- char *physical_path;
- char *physical_uri;
-
- storage = E_STORAGE (local_storage);
- priv = local_storage->priv;
- component_client = e_folder_type_registry_get_handler_for_type (priv->folder_type_registry,
- type);
- if (component_client == NULL) {
- if (listener != CORBA_OBJECT_NIL)
- notify_listener (listener, E_STORAGE_INVALIDTYPE, NULL);
- if (callback != NULL)
- (* callback) (storage, E_STORAGE_INVALIDTYPE, data);
- return;
- }
-
- g_assert (g_path_is_absolute (path));
-
- result = create_folder_directory (local_storage, path, type, description, &physical_path);
- if (result != E_STORAGE_OK) {
- if (callback != NULL)
- (* callback) (storage, result, data);
- if (listener != CORBA_OBJECT_NIL)
- notify_listener (listener, result, NULL);
-
- g_free (physical_path);
- return;
- }
-
- folder_name = g_path_get_basename (path);
-
- /* Finally tell the component to do the job of creating the physical files in it. */
-
- /* FIXME: We should put the operations on a queue so that we can cancel them when
- the ELocalStorage is destroyed. */
-
- physical_uri = g_strconcat ("file://", physical_path, NULL);
-
- callback_data = g_new (AsyncCreateFolderCallbackData, 1);
- callback_data->storage = E_STORAGE (local_storage);
- callback_data->path = g_strdup (path);
- callback_data->display_name = g_strdup (folder_name);
- callback_data->type = g_strdup (type);
- callback_data->description = g_strdup (description);
- callback_data->physical_uri = physical_uri;
- callback_data->physical_path = physical_path;
- callback_data->listener = listener;
- callback_data->callback = callback;
- callback_data->callback_data = data;
-
- g_object_ref (component_client);
-
- evolution_shell_component_client_async_create_folder (component_client,
- physical_uri,
- type,
- component_async_create_folder_callback,
- callback_data);
-
- g_free (folder_name);
-}
-
-struct _AsyncRemoveFolderCallbackData {
- EStorage *storage;
- GList *next_paths_to_delete;
-};
-typedef struct _AsyncRemoveFolderCallbackData AsyncRemoveFolderCallbackData;
-
-static EStorageResult
-remove_folder_directory (ELocalStorage *local_storage,
- const char *path)
-{
- EStorage *storage;
- ELocalStoragePrivate *priv;
- char *folder_name;
- char *file_name;
- char *physical_path;
-
- priv = local_storage->priv;
-
- storage = E_STORAGE (local_storage);
- folder_name = g_path_get_basename (path);
-
- /* Delete the metadata file associated with this folder. */
- physical_path = e_path_to_physical (priv->base_path, path);
- file_name = g_build_filename (physical_path, E_LOCAL_FOLDER_METADATA_FILE_NAME, NULL);
- unlink (file_name);
- g_free (file_name);
-
- /* Delete the physical directory. */
- if (rmdir (physical_path) == -1) {
- g_free (physical_path);
- g_free (folder_name);
- return E_STORAGE_GENERICERROR;
- }
-
- g_free (physical_path);
-
- /* Delete the 'subfolders' directory that this folder lies in */
- if (folder_name != path + 1) {
- char *subfolders_directory_physical_path;
- char *parent_path;
-
- parent_path = g_strndup (path, strlen (path) - strlen (folder_name));
- subfolders_directory_physical_path = e_path_to_physical (priv->base_path, parent_path);
- g_free (parent_path);
-
- rmdir (subfolders_directory_physical_path);
- g_free (subfolders_directory_physical_path);
- }
-
- g_free (folder_name);
- return E_STORAGE_OK;
-}
-
-static gboolean remove_folder_step (AsyncRemoveFolderCallbackData *callback_data);
-
-static void
-component_async_remove_folder_callback (EvolutionShellComponentClient *shell_component_client,
- EvolutionShellComponentResult result,
- void *data)
-{
- ELocalStoragePrivate *priv;
- AsyncRemoveFolderCallbackData *callback_data;
- EStorageResult storage_result;
- gboolean success;
- const char *path;
-
- callback_data = (AsyncRemoveFolderCallbackData *) data;
- priv = E_LOCAL_STORAGE (callback_data->storage)->priv;
- path = (const char *) callback_data->next_paths_to_delete->data;
-
- storage_result = shell_component_result_to_storage_result (result);
-
- if (result == EVOLUTION_SHELL_COMPONENT_OK) {
- result = remove_folder_directory (E_LOCAL_STORAGE (callback_data->storage), path);
- e_storage_removed_folder (E_STORAGE (callback_data->storage), path);
- evolution_storage_removed_folder (EVOLUTION_STORAGE (priv->bonobo_interface), path);
- } else {
- /* FIXME: Handle errors. */
- g_print ("...Error removing %s!\n", path);
- }
-
- g_object_unref (shell_component_client);
-
- /* Now go on and delete the next subfolder in the list that still
- exists, deallocating the elements in the list in the process. */
- do {
- char *path;
-
- path = callback_data->next_paths_to_delete->data;
- g_free (path);
-
- callback_data->next_paths_to_delete
- = g_list_remove_link (callback_data->next_paths_to_delete,
- callback_data->next_paths_to_delete);
-
- /* Check if we are done. */
- if (callback_data->next_paths_to_delete == NULL) {
- g_free (callback_data);
- return;
- }
-
- /* Remove the folder; if the folder has disappeared from the
- tree for some reason (this is an async callback!), just go
- on with the next one. */
- success = remove_folder_step (callback_data);
- } while (! success);
-}
-
-static gboolean
-remove_folder_step (AsyncRemoveFolderCallbackData *callback_data)
-{
- EvolutionShellComponentClient *client;
- ELocalStoragePrivate *priv;
- EFolder *folder;
- const char *path;
- const char *type;
- char *physical_path;
- char *physical_uri;
-
- g_assert (callback_data->next_paths_to_delete != NULL);
- path = (const char *) callback_data->next_paths_to_delete->data;
-
- folder = e_storage_get_folder (callback_data->storage, path);
- if (folder == NULL)
- return FALSE;
-
- priv = E_LOCAL_STORAGE (callback_data->storage)->priv;
-
- physical_path = e_path_to_physical (priv->base_path, path);
- physical_uri = g_strconcat ("file://", physical_path, NULL);
-
- type = e_folder_get_type_string (folder);
- client = e_folder_type_registry_get_handler_for_type (priv->folder_type_registry, type);
-
- g_object_ref (client);
-
- evolution_shell_component_client_async_remove_folder (client, physical_uri, type,
- component_async_remove_folder_callback,
- callback_data);
-
- g_free (physical_path);
- g_free (physical_uri);
-
- return TRUE;
-}
-
-static GList *
-create_subfolder_list (ELocalStorage *local_storage,
- const char *path)
-{
- GList *subfolders;
- GList *list;
- GList *p;
-
- subfolders = e_storage_get_subfolder_paths (E_STORAGE (local_storage), path);
-
- list = NULL;
- for (p = subfolders; p != NULL; p = p->next) {
- char *path;
-
- path = (char *) p->data;
-
- list = g_list_concat (list, create_subfolder_list (local_storage, path));
- list = g_list_append (list, path);
- }
-
- g_list_free (subfolders);
-
- return list;
-}
-
-static EStorageResult
-remove_folder (ELocalStorage *local_storage,
- const char *path)
-{
- ELocalStoragePrivate *priv;
- EStorage *storage;
- AsyncRemoveFolderCallbackData *callback_data;
- EvolutionShellComponentClient *component_client;
- EFolder *folder;
- GList *next_paths_to_delete;
-
- priv = local_storage->priv;
-
- storage = E_STORAGE (local_storage);
- folder = e_storage_get_folder (storage, path);
-
- if (e_folder_get_is_stock (folder))
- return E_STORAGE_CANTCHANGESTOCKFOLDER;
-
- component_client = e_folder_type_registry_get_handler_for_type (priv->folder_type_registry,
- e_folder_get_type_string (folder));
- if (component_client == NULL)
- return E_STORAGE_INVALIDTYPE;
-
- next_paths_to_delete = create_subfolder_list (E_LOCAL_STORAGE (storage), path);
- next_paths_to_delete = g_list_append (next_paths_to_delete, g_strdup (path));
-
- callback_data = g_new (AsyncRemoveFolderCallbackData, 1);
- callback_data->storage = E_STORAGE (local_storage);
- callback_data->next_paths_to_delete = next_paths_to_delete;
-
- if (! remove_folder_step (callback_data)) {
- /* Eek, something wacky happened. */
- return EVOLUTION_SHELL_COMPONENT_UNKNOWNERROR;
- }
-
- return EVOLUTION_SHELL_COMPONENT_OK;
-}
-
-
-/* GtkObject methods. */
-
-static void
-impl_dispose (GObject *object)
-{
- ELocalStorage *local_storage;
- ELocalStoragePrivate *priv;
- CORBA_Environment ev;
-
- local_storage = E_LOCAL_STORAGE (object);
- priv = local_storage->priv;
-
- CORBA_exception_init (&ev);
-
- if (priv->folder_type_registry != NULL) {
- g_object_unref (priv->folder_type_registry);
- priv->folder_type_registry = NULL;
- }
-
- if (priv->bonobo_interface != NULL) {
- bonobo_object_unref (BONOBO_OBJECT (priv->bonobo_interface));
- priv->bonobo_interface = NULL;
- }
-
- CORBA_exception_free (&ev);
-
- (* G_OBJECT_CLASS (parent_class)->dispose) (object);
-}
-
-static void
-impl_finalize (GObject *object)
-{
- ELocalStorage *local_storage;
- ELocalStoragePrivate *priv;
-
- local_storage = E_LOCAL_STORAGE (object);
- priv = local_storage->priv;
-
- g_free (priv->base_path);
- g_free (priv);
-
- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
-}
-
-
-/* Creating folders. */
-
-static void
-impl_async_create_folder (EStorage *storage,
- const char *path,
- const char *type,
- const char *description,
- EStorageResultCallback callback,
- void *data)
-{
- ELocalStorage *local_storage;
-
- local_storage = E_LOCAL_STORAGE (storage);
-
- create_folder (local_storage, CORBA_OBJECT_NIL, path, type, description, callback, data);
-}
-
-
-/* Removing folders. */
-
-static void
-impl_async_remove_folder (EStorage *storage,
- const char *path,
- EStorageResultCallback callback,
- void *data)
-{
- ELocalStorage *local_storage;
- EStorageResult result;
-
- local_storage = E_LOCAL_STORAGE (storage);
-
- result = remove_folder (local_storage, path);
-
- if (callback != NULL)
- (* callback) (E_STORAGE (local_storage), result, data);
-}
-
-
-
-/* Transferring folders. */
-
-struct _XferItem {
- char *source_path;
- char *destination_path;
-};
-typedef struct _XferItem XferItem;
-
-static XferItem *
-xfer_item_new (char *source_path,
- char *destination_path)
-{
- XferItem *new;
-
- new = g_new (XferItem, 1);
- new->source_path = source_path;
- new->destination_path = destination_path;
-
- return new;
-}
-
-static void
-xfer_item_free (XferItem *item)
-{
- g_free (item->source_path);
- g_free (item->destination_path);
- g_free (item);
-}
-
-static void
-append_xfer_item_list (EStorage *storage,
- char *source_path,
- char *destination_path,
- GList **list)
-{
- GList *subfolders;
- GList *p;
-
- *list = g_list_prepend (*list, xfer_item_new (source_path, destination_path));
-
- subfolders = e_storage_get_subfolder_paths (storage, source_path);
- for (p = subfolders; p != NULL; p = p->next) {
- char *base_name;
- char *source_subpath;
- char *destination_subpath;
-
- source_subpath = g_strdup ((const char *) p->data);
- base_name = g_path_get_basename (source_subpath);
- destination_subpath = g_build_filename (destination_path, base_name, NULL);
- append_xfer_item_list (storage, source_subpath, destination_subpath, list);
- g_free (base_name);
- }
-
- e_free_string_list (subfolders);
-}
-
-struct _XferData {
- /* The storage on which we are performing the xfer operation. */
- ELocalStorage *local_storage;
-
- /* List of source/destination path couples to copy, in the right
- order. */
- GList *folder_items;
-
- /* Pointer into `folder_items'. The folder item pointed by this is the
- one handled by the previous CORBA invocation. */
- GList *current_folder_item;
-
- /* Whether we want to remove the source too. */
- gboolean remove_source;
-
- /* The callback, with its data. */
- EStorageResultCallback callback;
- void *callback_data;
-};
-typedef struct _XferData XferData;
-
-static void
-async_xfer_folder_step (ELocalStorage *local_storage,
- const char *source_path,
- const char *destination_path,
- gboolean remove_source,
- EvolutionShellComponentClientCallback component_client_callback,
- void *component_client_callback_data)
-{
- ELocalStoragePrivate *priv;
- EFolder *source_folder;
- EvolutionShellComponentClient *component_client;
- char *physical_path;
- char *physical_uri;
-
- priv = local_storage->priv;
-
- source_folder = e_storage_get_folder (E_STORAGE (local_storage), source_path);
- g_assert (source_folder != NULL);
-
- create_folder_directory (local_storage, destination_path,
- e_folder_get_type_string (source_folder),
- e_folder_get_description (source_folder),
- &physical_path);
-
- physical_uri = g_strconcat ("file://", physical_path, NULL);
- g_free (physical_path);
-
- component_client = e_folder_type_registry_get_handler_for_type (priv->folder_type_registry,
- e_folder_get_type_string (source_folder));
- g_assert (component_client != NULL);
-
- evolution_shell_component_client_async_xfer_folder (component_client,
- e_folder_get_physical_uri (source_folder),
- physical_uri,
- e_folder_get_type_string (source_folder),
- remove_source,
- component_client_callback,
- component_client_callback_data);
- g_free (physical_uri);
-}
-
-static void
-async_xfer_folder_complete (XferData *xfer_data,
- gboolean success)
-{
- ELocalStorage *local_storage;
- GList *p;
-
- local_storage = xfer_data->local_storage;
-
- if (success && xfer_data->remove_source) {
- EStorageResult result;
-
- /* Remove all the source physical directories, and also the
- corresponding folders from the folder tree. */
-
- for (p = g_list_last (xfer_data->folder_items); p != NULL; p = p->prev) {
- XferItem *item;
-
- item = (XferItem *) p->data;
-
- result = remove_folder_directory (local_storage, item->source_path);
-
- /* FIXME handle failure differently? This should be n
- unlikely situation. */
- if (result == E_STORAGE_OK) {
- e_storage_removed_folder (E_STORAGE (local_storage), item->source_path);
-
- evolution_storage_removed_folder (EVOLUTION_STORAGE (local_storage->priv->bonobo_interface),
- item->source_path);
- }
- }
- }
-
- /* Free the data. */
-
- for (p = xfer_data->folder_items; p != NULL; p = p->next) {
- XferItem *item;
-
- item = (XferItem *) p->data;
- xfer_item_free (item);
- }
- g_list_free (xfer_data->folder_items);
-
- g_free (xfer_data);
-}
-
-static void
-async_xfer_folder_callback (EvolutionShellComponentClient *shell_component_client,
- EvolutionShellComponentResult result,
- void *callback_data)
-{
- XferData *xfer_data;
- XferItem *item;
- EFolder *source_folder;
- EFolder *destination_folder;
- char *dest_physical_path;
- char *new_physical_uri;
-
- xfer_data = (XferData *) callback_data;
-
- item = (XferItem *) xfer_data->current_folder_item->data;
-
- if (result != EVOLUTION_SHELL_COMPONENT_OK) {
- (* xfer_data->callback) (E_STORAGE (xfer_data->local_storage),
- storage_result_from_component_result (result),
- xfer_data->callback_data);
- async_xfer_folder_complete (xfer_data, FALSE);
- return;
- }
-
- source_folder = e_storage_get_folder (E_STORAGE (xfer_data->local_storage), item->source_path);
- destination_folder = e_local_folder_new (e_folder_get_name (source_folder),
- e_folder_get_type_string (source_folder),
- e_folder_get_description (source_folder));
-
- dest_physical_path = e_path_to_physical (xfer_data->local_storage->priv->base_path, item->destination_path);
- new_physical_uri = g_strconcat ("file://", dest_physical_path, NULL);
- g_free (dest_physical_path);
- e_folder_set_physical_uri (destination_folder, new_physical_uri);
- g_free (new_physical_uri);
-
- e_local_folder_save (E_LOCAL_FOLDER (destination_folder)); /* FIXME check for errors */
- new_folder (xfer_data->local_storage, item->destination_path, destination_folder);
-
- xfer_data->current_folder_item = xfer_data->current_folder_item->next;
- if (xfer_data->current_folder_item == NULL) {
- (* xfer_data->callback) (E_STORAGE (xfer_data->local_storage), E_STORAGE_OK, xfer_data->callback_data);
- async_xfer_folder_complete (xfer_data, TRUE);
- return;
- }
-
- item = (XferItem *) xfer_data->current_folder_item->data;
-
- async_xfer_folder_step (xfer_data->local_storage,
- item->source_path,
- item->destination_path,
- xfer_data->remove_source,
- async_xfer_folder_callback,
- xfer_data);
-}
-
-static void
-impl_async_xfer_folder (EStorage *storage,
- const char *source_path,
- const char *destination_path,
- gboolean remove_source,
- EStorageResultCallback callback,
- void *callback_data)
-{
- ELocalStorage *local_storage;
- ELocalStoragePrivate *priv;
- XferData *xfer_data;
- GList *folder_items; /* <XferItem> */
- XferItem *first_item;
-
- local_storage = E_LOCAL_STORAGE (storage);
- priv = local_storage->priv;
-
- if (remove_source && e_folder_get_is_stock (e_storage_get_folder (storage, source_path))) {
- (* callback) (storage, E_STORAGE_CANTCHANGESTOCKFOLDER, callback_data);
- return;
- }
-
- folder_items = NULL;
- append_xfer_item_list (storage, g_strdup (source_path), g_strdup (destination_path), &folder_items);
- folder_items = g_list_reverse (folder_items); /* lame */
-
- xfer_data = g_new (XferData, 1);
- xfer_data->local_storage = local_storage;
- xfer_data->folder_items = folder_items;
- xfer_data->current_folder_item = folder_items;
- xfer_data->remove_source = remove_source;
- xfer_data->callback = callback;
- xfer_data->callback_data = callback_data;
-
- first_item = (XferItem *) xfer_data->folder_items->data;
-
- async_xfer_folder_step (E_LOCAL_STORAGE (storage),
- first_item->source_path,
- first_item->destination_path,
- remove_source,
- async_xfer_folder_callback,
- xfer_data);
-}
-
-
-/* Callbacks for the `Evolution::Storage' interface we are exposing to the outside world. */
-static void
-bonobo_interface_create_folder_cb (EvolutionStorage *storage,
- const Bonobo_Listener listener,
- const char *path,
- const char *type,
- const char *description,
- const char *parent_physical_uri,
- void *data)
-{
- ELocalStorage *local_storage;
-
- local_storage = E_LOCAL_STORAGE (data);
-
- create_folder (local_storage, listener, path, type, description, NULL, NULL);
-}
-
-static int
-bonobo_interface_remove_folder_cb (EvolutionStorage *storage,
- const Bonobo_Listener listener,
- const char *path,
- const char *physical_uri,
- void *data)
-{
- ELocalStorage *local_storage;
-
- local_storage = E_LOCAL_STORAGE (data);
-
- return remove_folder (local_storage, path);
-}
-
-static void
-bonobo_interface_update_folder_cb (EvolutionStorage *storage,
- const char *path,
- int unread_count,
- void *data)
-{
- ELocalStorage *local_storage;
- EFolder *folder;
-
- local_storage = E_LOCAL_STORAGE (data);
-
- folder = e_storage_get_folder (E_STORAGE (local_storage), path);
- if (folder == NULL)
- return;
-
- e_folder_set_unread_count (folder, unread_count);
- return;
-}
-
-
-/* Initialization. */
-
-static void
-class_init (ELocalStorageClass *class)
-{
- EStorageClass *storage_class;
- GObjectClass *object_class;
-
- parent_class = g_type_class_ref(e_storage_get_type ());
-
- object_class = G_OBJECT_CLASS (class);
- storage_class = E_STORAGE_CLASS (class);
-
- object_class->finalize = impl_finalize;
- object_class->dispose = impl_dispose;
-
- storage_class->async_create_folder = impl_async_create_folder;
- storage_class->async_remove_folder = impl_async_remove_folder;
- storage_class->async_xfer_folder = impl_async_xfer_folder;
-}
-
-static void
-init (ELocalStorage *local_storage)
-{
- ELocalStoragePrivate *priv;
-
- priv = g_new (ELocalStoragePrivate, 1);
-
- priv->base_path = NULL;
- priv->folder_type_registry = NULL;
- priv->bonobo_interface = NULL;
-
- local_storage->priv = priv;
-}
-
-
-static gboolean
-construct (ELocalStorage *local_storage,
- EFolderTypeRegistry *folder_type_registry,
- const char *base_path)
-{
- ELocalStoragePrivate *priv;
- EFolder *root_folder;
- int base_path_len;
- char *uri;
-
- root_folder = e_folder_new (_("Local Folders"), "noselect", "");
- uri = g_strdup_printf("file://%s;noselect", base_path);
- e_folder_set_physical_uri(root_folder, uri);
- g_free(uri);
- e_storage_construct (E_STORAGE (local_storage),
- E_LOCAL_STORAGE_NAME,
- root_folder);
-
- priv = local_storage->priv;
-
- base_path_len = strlen (base_path);
- while (base_path_len > 0 && base_path[base_path_len - 1] == E_PATH_SEPARATOR)
- base_path_len--;
-
- g_return_val_if_fail (base_path_len != 0, FALSE);
-
- g_assert (priv->folder_type_registry == NULL);
- g_object_ref (folder_type_registry);
- priv->folder_type_registry = folder_type_registry;
-
- g_assert (priv->base_path == NULL);
- priv->base_path = g_strndup (base_path, base_path_len);
-
- g_assert (priv->bonobo_interface == NULL);
- priv->bonobo_interface = evolution_storage_new (E_LOCAL_STORAGE_NAME, FALSE);
-
- g_signal_connect (priv->bonobo_interface, "create_folder",
- G_CALLBACK (bonobo_interface_create_folder_cb),
- local_storage);
- g_signal_connect (priv->bonobo_interface, "remove_folder",
- G_CALLBACK (bonobo_interface_remove_folder_cb),
- local_storage);
- g_signal_connect (priv->bonobo_interface, "update_folder",
- G_CALLBACK (bonobo_interface_update_folder_cb),
- local_storage);
-
- return load_all_folders (local_storage);
-}
-
-EStorage *
-e_local_storage_open (EFolderTypeRegistry *folder_type_registry,
- const char *base_path)
-{
- EStorage *new;
-
- g_return_val_if_fail (folder_type_registry != NULL, NULL);
- g_return_val_if_fail (E_IS_FOLDER_TYPE_REGISTRY (folder_type_registry), NULL);
- g_return_val_if_fail (base_path != NULL, NULL);
-
- new = g_object_new (e_local_storage_get_type (), NULL);
-
- if (! construct (E_LOCAL_STORAGE (new), folder_type_registry, base_path)) {
- g_object_unref (new);
- return NULL;
- }
-
- return new;
-}
-
-const char *
-e_local_storage_get_base_path (ELocalStorage *local_storage)
-{
- g_return_val_if_fail (local_storage != NULL, NULL);
- g_return_val_if_fail (E_IS_LOCAL_STORAGE (local_storage), NULL);
-
- return local_storage->priv->base_path;
-}
-
-
-const GNOME_Evolution_Storage
-e_local_storage_get_corba_interface (ELocalStorage *local_storage)
-{
- ELocalStoragePrivate *priv;
- GNOME_Evolution_Storage corba_interface;
-
- g_return_val_if_fail (local_storage != NULL, NULL);
- g_return_val_if_fail (E_IS_LOCAL_STORAGE (local_storage), NULL);
-
- priv = local_storage->priv;
- corba_interface = bonobo_object_corba_objref (BONOBO_OBJECT (priv->bonobo_interface));
-
- return corba_interface;
-}
-
-
-E_MAKE_TYPE (e_local_storage, "ELocalStorage", ELocalStorage, class_init, init, PARENT_TYPE)
diff --git a/shell/e-local-storage.h b/shell/e-local-storage.h
deleted file mode 100644
index c640c29b70..0000000000
--- a/shell/e-local-storage.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-local-storage.h
- *
- * Copyright (C) 2000, 2001 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifndef _E_LOCAL_STORAGE_H_
-#define _E_LOCAL_STORAGE_H_
-
-#include "e-folder-type-registry.h"
-#include "e-storage.h"
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-#define E_TYPE_LOCAL_STORAGE (e_local_storage_get_type ())
-#define E_LOCAL_STORAGE(obj) (GTK_CHECK_CAST ((obj), E_TYPE_LOCAL_STORAGE, ELocalStorage))
-#define E_LOCAL_STORAGE_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_LOCAL_STORAGE, ELocalStorageClass))
-#define E_IS_LOCAL_STORAGE(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_LOCAL_STORAGE))
-#define E_IS_LOCAL_STORAGE_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_LOCAL_STORAGE))
-
-typedef struct _ELocalStorage ELocalStorage;
-typedef struct _ELocalStoragePrivate ELocalStoragePrivate;
-typedef struct _ELocalStorageClass ELocalStorageClass;
-
-struct _ELocalStorage {
- EStorage parent;
-
- ELocalStoragePrivate *priv;
-};
-
-struct _ELocalStorageClass {
- EStorageClass parent_class;
-};
-
-
-GtkType e_local_storage_get_type (void);
-
-EStorage *e_local_storage_open (EFolderTypeRegistry *folder_type_registry,
- const char *base_path);
-const char *e_local_storage_get_base_path (ELocalStorage *storage);
-
-const GNOME_Evolution_Storage e_local_storage_get_corba_interface (ELocalStorage *storage);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* __E_LOCAL_STORAGE_H__ */
diff --git a/shell/e-setup.c b/shell/e-setup.c
deleted file mode 100644
index ce9389b781..0000000000
--- a/shell/e-setup.c
+++ /dev/null
@@ -1,333 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-setup.c
- *
- * Copyright (C) 2000, 2001 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- */
-
-/* This needs to be a lot better. */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "e-setup.h"
-
-#include "e-local-folder.h"
-#include "e-shell-config.h"
-#include "e-shell-constants.h"
-
-#include "e-util/e-dialog-utils.h"
-#include "e-util/e-path.h"
-
-#include <gconf/gconf-client.h>
-
-#include <gtk/gtklabel.h>
-
-#include <libgnome/gnome-i18n.h>
-#include <libgnome/gnome-util.h>
-
-#include <errno.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <dirent.h>
-#include <stdio.h>
-#include <string.h>
-#include <unistd.h>
-
-#define DEFAULT_USER_PATH EVOLUTION_DATADIR "/evolution/" BASE_VERSION "/default_user"
-
-
-static GList *
-check_dir_recur (const char *evolution_directory,
- const char *current_directory)
-{
- DIR *def;
- GList *newfiles = NULL;
- struct dirent *current;
-
- def = opendir (current_directory);
- if (def == NULL)
- return NULL;
-
- current = readdir (def);
- while (current != NULL) {
- struct stat buf;
- char *fullname, *fulldefaultname;
-
- if (current->d_name[0] == '.' &&
- (current->d_name[1] == '\0' ||
- (current->d_name[1] == '.' && current->d_name[2] == '\0'))) {
- current = readdir (def);
- continue;
- }
-
- /* Hack to not copy the old Executive-Summary dir */
- if (strcmp (current->d_name, "Executive-Summary") == 0) {
- current = readdir (def);
- continue;
- }
-
- fullname = g_build_filename (evolution_directory, current->d_name, NULL);
- fulldefaultname = g_build_filename (current_directory, current->d_name, NULL);
-
- if (stat (fullname, &buf) == -1) {
- char *name;
-
- name = g_strdup (fulldefaultname);
- newfiles = g_list_append (newfiles, name);
- } else {
- if (S_ISDIR (buf.st_mode)) {
- newfiles = g_list_concat (newfiles,
- check_dir_recur (fullname,
- fulldefaultname));
- }
- }
-
- g_free (fulldefaultname);
- g_free (fullname);
- current = readdir (def);
- }
-
- closedir (def);
- return newfiles;
-}
-
-static gboolean
-check_evolution_directory (const char *evolution_directory)
-{
- gboolean retval;
- GList *newfiles, *l;
-
- newfiles = g_list_concat (NULL, check_dir_recur (evolution_directory, DEFAULT_USER_PATH));
-
- if (newfiles == NULL) {
- retval = TRUE;
- goto out;
- }
-
- retval = TRUE;
- for (l = newfiles; l; l = l->next) {
- char *command;
- char *shortpath;
-
- shortpath = l->data + strlen (DEFAULT_USER_PATH);
- command = g_strconcat ("cp -r ",
- l->data, " ",
- evolution_directory, "/",
- shortpath,
- NULL);
-
- if (system (command) != 0) {
- retval = FALSE;
- } else {
- retval = (retval && TRUE);
- }
-
- g_free (command);
- }
-
- if (retval == FALSE)
- e_notice (NULL, GTK_MESSAGE_ERROR,
- _("Could not update files correctly"));
-
- out:
-
- for (l = newfiles; l; l = l->next)
- g_free (l->data);
-
- g_list_free (newfiles);
-
- return retval;
-}
-
-
-static gboolean
-copy_default_stuff (const char *evolution_directory)
-{
- gboolean retval;
- char *command;
-
- if (mkdir (evolution_directory, 0700)) {
- e_notice (NULL, GTK_MESSAGE_ERROR,
- _("Cannot create the directory\n%s\nError: %s"),
- evolution_directory,
- g_strerror (errno));
- return FALSE;
- }
-
- command = g_strconcat ("cp -r " DEFAULT_USER_PATH "/* ", evolution_directory, NULL);
-
- if (system (command) != 0) {
- /* FIXME: Give more help. */
- e_notice (NULL, GTK_MESSAGE_ERROR,
- _("An error occurred in copying files into\n`%s'."), evolution_directory);
- retval = FALSE;
- } else {
- retval = TRUE;
- }
-
- g_free (command);
-
- return retval;
-}
-
-static void
-e_shell_rm_dir (const char *path)
-{
- DIR *base;
- struct stat statbuf;
- struct dirent *contents;
-
- stat (path, &statbuf);
- if (!S_ISDIR (statbuf.st_mode)) {
- /* Not a directory */
- g_message ("Removing: %s", path);
- unlink (path);
- return;
- } else {
- g_message ("Opening: %s", path);
- base = opendir (path);
-
- if (base == NULL)
- return;
-
- contents = readdir (base);
- while (contents != NULL) {
- char *fullpath;
-
- if (strcmp (contents->d_name, ".") == 0||
- strcmp (contents->d_name, "..") ==0) {
- contents = readdir (base);
- continue;
- }
-
- fullpath = g_build_filename (path, contents->d_name, NULL);
- e_shell_rm_dir (fullpath);
- g_free (fullpath);
-
- contents = readdir (base);
- }
-
- closedir (base);
- rmdir (path);
- }
-}
-
-
-gboolean
-e_setup (const char *evolution_directory)
-{
- struct stat statinfo;
- char *file;
-
- if (stat (evolution_directory, &statinfo) != 0) {
- return copy_default_stuff (evolution_directory);
- }
-
- if (! S_ISDIR (statinfo.st_mode)) {
- e_notice (NULL, GTK_MESSAGE_ERROR,
- _("The file `%s' is not a directory.\n"
- "Please move it in order to allow installation\n"
- "of the Evolution user files."));
- return FALSE;
- }
-
- file = g_strdup_printf ("%s/searches.xml", evolution_directory);
- if (stat (file, &statinfo) != 0) {
- e_notice (NULL, GTK_MESSAGE_ERROR,
- _("The directory `%s' exists but is not the\n"
- "Evolution directory. Please move it in order\n"
- "to allow installation of the Evolution user "
- "files."), evolution_directory);
- g_free (file);
- return FALSE;
- }
- g_free (file);
-
- /* User has evolution directory...
- Check if it is up to date. */
- return check_evolution_directory (evolution_directory);
-}
-
-
-static void
-set_default_folder_physical_uri_from_path (GConfClient *client,
- const char *evolution_directory,
- const char *path_key_name)
-{
- char *gconf_path;
- char *path_value;
-
- gconf_path = g_strconcat ("/apps/evolution/shell/default_folders/", path_key_name, NULL);
- path_value = gconf_client_get_string (client, gconf_path, NULL);
- g_free (gconf_path);
-
- if (path_value != NULL
- && strncmp (path_value, E_SHELL_URI_PREFIX, E_SHELL_URI_PREFIX_LEN) == 0
- && strncmp (path_value + E_SHELL_URI_PREFIX_LEN, "/local/", 7) == 0) {
- char *key_prefix;
- char *local_physical_uri;
- char *file_uri_prefix;
-
- key_prefix = g_strndup (path_key_name, strchr (path_key_name, '_') - path_key_name);
- gconf_path = g_strconcat ("/apps/evolution/shell/default_folders/", key_prefix, "_uri", NULL);
- file_uri_prefix = g_strconcat ("file://", evolution_directory, "/local", NULL);
- local_physical_uri = e_path_to_physical (file_uri_prefix, path_value + E_SHELL_URI_PREFIX_LEN + 6);
-
- gconf_client_set_string (client, gconf_path, local_physical_uri, NULL);
-
- g_free (gconf_path);
- g_free (key_prefix);
- g_free (local_physical_uri);
- g_free (file_uri_prefix);
- }
-}
-
-void
-e_setup_check_config (const char *evolution_directory)
-{
- GConfClient *client;
- char *tmp;
- gboolean present = FALSE;
-
- client = gconf_client_get_default ();
-
- tmp = gconf_client_get_string (client, "/apps/evolution/shell/default_folders/mail_uri", NULL);
- if (tmp != NULL) {
- if (*tmp != 0)
- present = TRUE;
- g_free (tmp);
- }
-
- if (present) {
- g_object_unref (client);
- return;
- }
-
- /* The following ugliness is to initially set up the physical URIs
- based on the default path values (which come from GConf). Of
- course, this way of configuring the default folders is a bit of a
- mess and needs to be cleaned up... */
-
- set_default_folder_physical_uri_from_path (client, evolution_directory, "mail_path");
- set_default_folder_physical_uri_from_path (client, evolution_directory, "contacts_path");
- set_default_folder_physical_uri_from_path (client, evolution_directory, "calendar_path");
- set_default_folder_physical_uri_from_path (client, evolution_directory, "tasks_path");
-
- g_object_unref (client);
-}
diff --git a/shell/e-setup.h b/shell/e-setup.h
deleted file mode 100644
index 214dbcdd9e..0000000000
--- a/shell/e-setup.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-setup.h
- *
- * Copyright (C) 2000 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifndef _E_SETUP_H
-#define _E_SETUP_H
-
-#include <glib.h>
-
-gboolean e_setup (const char *evolution_directory);
-
-void e_setup_check_config (const char *evolution_directory);
-
-#endif /* _E_SETUP_H */
diff --git a/shell/e-shell-about-box.c b/shell/e-shell-about-box.c
deleted file mode 100644
index 3ebf247609..0000000000
--- a/shell/e-shell-about-box.c
+++ /dev/null
@@ -1,426 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-shell-about-box.c
- *
- * Copyright (C) 2001, 2002, 2003 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli <ettore@ximian.com>
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "e-shell-about-box.h"
-
-#include <gal/util/e-util.h>
-
-#include <gtk/gtkeventbox.h>
-#include <gdk-pixbuf/gdk-pixbuf.h>
-
-
-#define PARENT_TYPE gtk_event_box_get_type ()
-static GtkEventBoxClass *parent_class = NULL;
-
-static const char *text[] = {
- "",
- "Evolution " VERSION,
- "Copyright 1999 - 2003 Ximian, Inc.",
- "",
- N_("Brought to you by"),
- "",
- "Seth Alves",
- "Jacob Berkman",
- "Kevin Breit",
- "Anders Carlsson",
- "Damon Chaplin",
- "Zbigniew Chyla",
- "Clifford R. Conover",
- "Anna Dirks",
- "Bob Doan",
- "Miguel de Icaza",
- "Radek Doul\xC3\xADk",
- "Arturo Espinoza",
- "Larry Ewing",
- "Nat Friedman",
- "Alex Graveley",
- "Bertrand Guiheneuf",
- "Heath Harrelson",
- "Iain Holmes",
- "Mike Kestner",
- "Tuomas Kuosmanen",
- "Christopher J. Lahey",
- "Miles Lane",
- "Jason Leach",
- "Timothy Lee",
- "Matthew Loper",
- "Michael MacDonald",
- "Kjartan Maraas",
- "Gerardo Marin",
- "Michael Meeks",
- "Federico Mena",
- "Michael M. Morrison",
- "Rodrigo Moya",
- "Eskil Heyn Olsen",
- "Gediminas Paulauskas",
- "Jesse Pavel",
- "Ettore Perazzoli",
- "JP Rosevear",
- "Jeffrey Stedfast",
- "Jakub Steiner",
- "Russell Steinthal",
- "Peter Teichman",
- "Chris Toshok",
- "Jon Trowbridge",
- "Luis Villa",
- "Aaron Weber",
- "Peter Williams",
- "Dan Winship",
- "Michael Zucchi"
-};
-#define NUM_TEXT_LINES (sizeof (text) / sizeof (*text))
-
-struct _EShellAboutBoxPrivate {
- GdkPixmap *pixmap;
- GdkPixmap *text_background_pixmap;
- GdkGC *clipped_gc;
- int text_y_offset;
- int timeout_id;
- const gchar **permuted_text;
-};
-
-
-#define ANIMATION_DELAY 40
-
-#define WIDTH 400
-#define HEIGHT 200
-
-#define TEXT_Y_OFFSET 57
-#define TEXT_X_OFFSET 60
-#define TEXT_WIDTH (WIDTH - 2 * TEXT_X_OFFSET)
-#define TEXT_HEIGHT 90
-
-#define IMAGE_PATH EVOLUTION_IMAGES "/about-box.png"
-
-
-
-static void
-permute_names (EShellAboutBox *about_box)
-{
- EShellAboutBoxPrivate *priv = about_box->priv;
- gint i, j;
-
- srandom (time (NULL));
-
- for (i = 6; i < NUM_TEXT_LINES-1; ++i) {
- const gchar *tmp;
- j = i + random () % (NUM_TEXT_LINES - i);
- if (i != j) {
- tmp = priv->permuted_text[i];
- priv->permuted_text[i] = priv->permuted_text[j];
- priv->permuted_text[j] = tmp;
- }
- }
-}
-
-/* The callback. */
-
-static int
-timeout_callback (void *data)
-{
- EShellAboutBox *about_box;
- EShellAboutBoxPrivate *priv;
- GdkRectangle redraw_rect;
- GtkWidget *widget;
- PangoContext *context;
- PangoFontMetrics *metrics;
- PangoLayout *layout;
- int line_height;
- int first_line;
- int y;
- int i;
-
- about_box = E_SHELL_ABOUT_BOX (data);
- priv = about_box->priv;
-
- widget = GTK_WIDGET (about_box);
-
- context = gtk_widget_get_pango_context (widget);
- metrics = pango_context_get_metrics (context, gtk_widget_get_style (GTK_WIDGET (about_box))->font_desc,
- pango_context_get_language (context));
- line_height = PANGO_PIXELS (pango_font_metrics_get_ascent (metrics)
- + pango_font_metrics_get_descent (metrics));
- pango_font_metrics_unref (metrics);
-
- if (priv->text_y_offset < TEXT_HEIGHT) {
- y = TEXT_Y_OFFSET + (TEXT_HEIGHT - priv->text_y_offset);
- first_line = 0;
- } else {
- y = TEXT_Y_OFFSET - ((priv->text_y_offset - TEXT_HEIGHT) % line_height);
- first_line = (priv->text_y_offset - TEXT_HEIGHT) / line_height;
- }
-
- gdk_draw_pixmap (priv->pixmap, priv->clipped_gc, priv->text_background_pixmap,
- 0, 0,
- TEXT_X_OFFSET, TEXT_Y_OFFSET, TEXT_WIDTH, TEXT_HEIGHT);
-
- layout = pango_layout_new (context);
-
- for (i = 0; i < TEXT_HEIGHT / line_height + 3; i ++) {
- const char *line;
- int width;
- int x;
-
- if (first_line + i >= NUM_TEXT_LINES)
- break;
-
- if (*priv->permuted_text[first_line + i] == '\0')
- line = "";
- else
- line = _(priv->permuted_text[first_line + i]);
-
- pango_layout_set_text (layout, line, -1);
- pango_layout_get_pixel_size (layout, &width, NULL);
- x = TEXT_X_OFFSET + (TEXT_WIDTH - width) / 2;
- gdk_draw_layout (priv->pixmap, priv->clipped_gc, x, y, layout);
-
- y += line_height;
- }
-
- redraw_rect.x = TEXT_X_OFFSET;
- redraw_rect.y = TEXT_Y_OFFSET;
- redraw_rect.width = TEXT_WIDTH;
- redraw_rect.height = TEXT_HEIGHT;
- gdk_window_invalidate_rect (widget->window, &redraw_rect, FALSE);
- gdk_window_process_updates (widget->window, FALSE);
-
- priv->text_y_offset ++;
- if (priv->text_y_offset > line_height * NUM_TEXT_LINES + TEXT_HEIGHT) {
- priv->text_y_offset = 0;
- permute_names (about_box);
- }
-
- g_object_unref (layout);
-
- return TRUE;
-}
-
-
-/* GObject methods. */
-
-static void
-impl_dispose (GObject *object)
-{
- EShellAboutBox *about_box;
- EShellAboutBoxPrivate *priv;
-
- about_box = E_SHELL_ABOUT_BOX (object);
- priv = about_box->priv;
-
- if (priv->pixmap != NULL) {
- gdk_pixmap_unref (priv->pixmap);
- priv->pixmap = NULL;
- }
-
- if (priv->text_background_pixmap != NULL) {
- gdk_pixmap_unref (priv->text_background_pixmap);
- priv->text_background_pixmap = NULL;
- }
-
- if (priv->clipped_gc != NULL) {
- gdk_gc_unref (priv->clipped_gc);
- priv->clipped_gc = NULL;
- }
-
- (* G_OBJECT_CLASS (parent_class)->dispose) (object);
-}
-
-static void
-impl_finalize (GObject *object)
-{
- EShellAboutBox *about_box;
- EShellAboutBoxPrivate *priv;
-
- about_box = E_SHELL_ABOUT_BOX (object);
- priv = about_box->priv;
-
- if (priv->timeout_id != -1)
- g_source_remove (priv->timeout_id);
-
- g_free (priv->permuted_text);
-
- g_free (priv);
-
- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
-}
-
-
-/* GtkWidget methods. */
-
-static void
-impl_size_request (GtkWidget *widget,
- GtkRequisition *requisition)
-{
- requisition->width = WIDTH;
- requisition->height = HEIGHT;
-}
-
-static void
-impl_realize (GtkWidget *widget)
-{
- EShellAboutBox *about_box;
- EShellAboutBoxPrivate *priv;
- GdkPixbuf *background_pixbuf;
- GdkRectangle clip_rectangle;
-
- (* GTK_WIDGET_CLASS (parent_class)->realize) (widget);
-
- about_box = E_SHELL_ABOUT_BOX (widget);
- priv = about_box->priv;
-
- background_pixbuf = gdk_pixbuf_new_from_file (IMAGE_PATH, NULL);
- g_assert (background_pixbuf != NULL);
- g_assert (gdk_pixbuf_get_width (background_pixbuf) == WIDTH);
- g_assert (gdk_pixbuf_get_height (background_pixbuf) == HEIGHT);
-
- g_assert (priv->pixmap == NULL);
- priv->pixmap = gdk_pixmap_new (widget->window, WIDTH, HEIGHT, -1);
-
- gdk_pixbuf_render_to_drawable (background_pixbuf, priv->pixmap, widget->style->black_gc,
- 0, 0, 0, 0, WIDTH, HEIGHT,
- GDK_RGB_DITHER_MAX, 0, 0);
-
- g_assert (priv->clipped_gc == NULL);
- priv->clipped_gc = gdk_gc_new (widget->window);
- gdk_gc_copy (priv->clipped_gc, widget->style->black_gc);
-
- clip_rectangle.x = TEXT_X_OFFSET;
- clip_rectangle.y = TEXT_Y_OFFSET;
- clip_rectangle.width = TEXT_WIDTH;
- clip_rectangle.height = TEXT_HEIGHT;
- gdk_gc_set_clip_rectangle (priv->clipped_gc, & clip_rectangle);
-
- priv->text_background_pixmap = gdk_pixmap_new (widget->window, clip_rectangle.width, clip_rectangle.height, -1);
- gdk_pixbuf_render_to_drawable (background_pixbuf, priv->text_background_pixmap, widget->style->black_gc,
- TEXT_X_OFFSET, TEXT_Y_OFFSET,
- 0, 0, TEXT_WIDTH, TEXT_HEIGHT,
- GDK_RGB_DITHER_MAX, 0, 0);
-
- g_assert (priv->timeout_id == -1);
- priv->timeout_id = g_timeout_add (ANIMATION_DELAY, timeout_callback, about_box);
-
- g_object_unref (background_pixbuf);
-}
-
-static void
-impl_unrealize (GtkWidget *widget)
-{
- EShellAboutBox *about_box;
- EShellAboutBoxPrivate *priv;
-
- about_box = E_SHELL_ABOUT_BOX (widget);
- priv = about_box->priv;
-
- (* GTK_WIDGET_CLASS (parent_class)->unrealize) (widget);
-
- g_assert (priv->clipped_gc != NULL);
- gdk_gc_unref (priv->clipped_gc);
- priv->clipped_gc = NULL;
-
- g_assert (priv->pixmap != NULL);
- gdk_pixmap_unref (priv->pixmap);
- priv->pixmap = NULL;
-
- if (priv->timeout_id != -1) {
- g_source_remove (priv->timeout_id);
- priv->timeout_id = -1;
- }
-}
-
-static int
-impl_expose_event (GtkWidget *widget,
- GdkEventExpose *event)
-{
- EShellAboutBoxPrivate *priv;
-
- if (! GTK_WIDGET_DRAWABLE (widget))
- return FALSE;
-
- priv = E_SHELL_ABOUT_BOX (widget)->priv;
-
- gdk_draw_pixmap (widget->window, widget->style->black_gc,
- priv->pixmap,
- event->area.x, event->area.y,
- event->area.x, event->area.y,
- event->area.width, event->area.height);
-
- return TRUE;
-}
-
-
-static void
-class_init (GObjectClass *object_class)
-{
- GtkWidgetClass *widget_class;
-
- parent_class = g_type_class_ref(PARENT_TYPE);
-
- object_class->dispose = impl_dispose;
- object_class->finalize = impl_finalize;
-
- widget_class = GTK_WIDGET_CLASS (object_class);
- widget_class->size_request = impl_size_request;
- widget_class->realize = impl_realize;
- widget_class->unrealize = impl_unrealize;
- widget_class->expose_event = impl_expose_event;
-}
-
-static void
-init (EShellAboutBox *shell_about_box)
-{
- EShellAboutBoxPrivate *priv;
- gint i;
-
- priv = g_new (EShellAboutBoxPrivate, 1);
- priv->pixmap = NULL;
- priv->text_background_pixmap = NULL;
- priv->clipped_gc = NULL;
- priv->timeout_id = -1;
- priv->text_y_offset = 0;
-
- priv->permuted_text = g_new (const gchar *, NUM_TEXT_LINES);
- for (i = 0; i < NUM_TEXT_LINES; ++i) {
- priv->permuted_text[i] = text[i];
- }
-
- shell_about_box->priv = priv;
-
- permute_names (shell_about_box);
-}
-
-
-GtkWidget *
-e_shell_about_box_new (void)
-{
- EShellAboutBox *about_box;
-
- about_box = g_object_new (e_shell_about_box_get_type (), NULL);
-
- return GTK_WIDGET (about_box);
-}
-
-
-E_MAKE_TYPE (e_shell_about_box, "EShellAboutBox", EShellAboutBox, class_init, init, GTK_TYPE_EVENT_BOX)
diff --git a/shell/e-shell-about-box.h b/shell/e-shell-about-box.h
deleted file mode 100644
index 301120c190..0000000000
--- a/shell/e-shell-about-box.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-shell-about-box.h
- *
- * Copyright (C) 2001 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli <ettore@ximian.com>
- */
-
-#ifndef _E_SHELL_ABOUT_BOX_H_
-#define _E_SHELL_ABOUT_BOX_H_
-
-#include <gnome.h>
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-#define E_TYPE_SHELL_ABOUT_BOX (e_shell_about_box_get_type ())
-#define E_SHELL_ABOUT_BOX(obj) (GTK_CHECK_CAST ((obj), E_TYPE_SHELL_ABOUT_BOX, EShellAboutBox))
-#define E_SHELL_ABOUT_BOX_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_SHELL_ABOUT_BOX, EShellAboutBoxClass))
-#define E_IS_SHELL_ABOUT_BOX(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_SHELL_ABOUT_BOX))
-#define E_IS_SHELL_ABOUT_BOX_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_SHELL_ABOUT_BOX))
-
-
-typedef struct _EShellAboutBox EShellAboutBox;
-typedef struct _EShellAboutBoxPrivate EShellAboutBoxPrivate;
-typedef struct _EShellAboutBoxClass EShellAboutBoxClass;
-
-struct _EShellAboutBox {
- GtkEventBox parent;
-
- EShellAboutBoxPrivate *priv;
-};
-
-struct _EShellAboutBoxClass {
- GtkEventBoxClass parent_class;
-};
-
-
-GtkType e_shell_about_box_get_type (void);
-GtkWidget *e_shell_about_box_new (void);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* _E_SHELL_ABOUT_BOX_H_ */
diff --git a/shell/e-shell-config-autocompletion.c b/shell/e-shell-config-autocompletion.c
deleted file mode 100644
index df232e8067..0000000000
--- a/shell/e-shell-config-autocompletion.c
+++ /dev/null
@@ -1,129 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-shell-config-autocompletion.c - Configuration page for addressbook autocompletion.
- *
- * Copyright (C) 2002 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Authors: Chris Lahey <clahey@ximian.com>
- * Chris Toshok <toshok@ximian.com>
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-
-#include "e-shell-config-autocompletion.h"
-
-#include "e-folder-list.h"
-
-#include "Evolution.h"
-
-#include <bonobo/bonobo-exception.h>
-
-#include <libgnome/gnome-i18n.h>
-#include <gtk/gtkwidget.h>
-#include <gtk/gtksignal.h>
-
-#include <gconf/gconf-client.h>
-
-
-typedef struct {
- EvolutionConfigControl *config_control;
-
- GtkWidget *control_widget;
-
- EvolutionShellClient *shell_client;
-} EvolutionAutocompletionConfig;
-
-static void
-folder_list_changed_callback (EFolderList *efl,
- EvolutionAutocompletionConfig *ac)
-{
- evolution_config_control_changed (ac->config_control);
-}
-
-static void
-config_control_destroy_notify (void *data,
- GObject *where_the_config_control_was)
-{
- EvolutionAutocompletionConfig *ac = (EvolutionAutocompletionConfig *) data;
-
- g_object_unref (ac->shell_client);
-
- g_free (ac);
-}
-
-
-static void
-config_control_apply_callback (EvolutionConfigControl *config_control,
- EvolutionAutocompletionConfig *ac)
-{
- GConfClient *client;
- char *xml;
-
- client = gconf_client_get_default ();
-
- xml = e_folder_list_get_xml (E_FOLDER_LIST (ac->control_widget));
- gconf_client_set_string (client, "/apps/evolution/addressbook/completion/uris", xml, NULL);
- g_free (xml);
-
- g_object_unref (client);
-}
-
-GtkWidget *
-e_shell_config_autocompletion_create_widget (EShell *shell, EvolutionConfigControl *config_control)
-{
- EvolutionAutocompletionConfig *ac;
- CORBA_Environment ev;
- GConfClient *client;
- static const char *possible_types[] = { "contacts/*", NULL };
- char *xml;
-
- ac = g_new0 (EvolutionAutocompletionConfig, 1);
-
- CORBA_exception_init (&ev);
-
- ac->shell_client = evolution_shell_client_new (BONOBO_OBJREF (shell));
-
- client = gconf_client_get_default ();
- xml = gconf_client_get_string (client, "/apps/evolution/addressbook/completion/uris", NULL);
- g_object_unref (client);
-
- ac->control_widget = e_folder_list_new (ac->shell_client, xml);
- g_free (xml);
-
- g_object_set((ac->control_widget),
- "title", _("Extra Completion folders"),
- "possible_types", possible_types,
- NULL);
-
- gtk_widget_show (ac->control_widget);
-
- ac->config_control = config_control;
-
- g_signal_connect (ac->control_widget, "changed",
- G_CALLBACK (folder_list_changed_callback), ac);
- g_signal_connect (ac->config_control, "apply",
- G_CALLBACK (config_control_apply_callback), ac);
-
- g_object_weak_ref (G_OBJECT (ac->config_control), config_control_destroy_notify, ac);
-
- CORBA_exception_free (&ev);
-
- return ac->control_widget;
-}
-
diff --git a/shell/e-shell-config-autocompletion.h b/shell/e-shell-config-autocompletion.h
deleted file mode 100644
index 46a65627a3..0000000000
--- a/shell/e-shell-config-autocompletion.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-shell-config-autocompletion.c - Configuration page for addressbook autocompletion.
- *
- * Copyright (C) 2002 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Authors: Chris Lahey <clahey@ximian.com>
- * Chris Toshok <toshok@ximian.com>
- */
-
-#ifndef E_SHELL_CONFIG_AUTOCOMPLETION_H
-#define E_SHELL_CONFIG_AUTOCOMPLETION_H
-
-#include "e-shell.h"
-
-#include <gtk/gtkwidget.h>
-#include "evolution-config-control.h"
-
-GtkWidget *e_shell_config_autocompletion_create_widget (EShell *shell, EvolutionConfigControl *config_control);
-
-#endif /* E_SHELL_CONFIG_AUTOCOMPLETION_H */
diff --git a/shell/e-shell-config-default-folders.c b/shell/e-shell-config-default-folders.c
deleted file mode 100644
index 8c60682068..0000000000
--- a/shell/e-shell-config-default-folders.c
+++ /dev/null
@@ -1,203 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-shell-config-default-folders.c - Configuration page for specifying default
- * folders.
- *
- * Copyright (C) 2002 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Dan Winship <danw@ximian.com>
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "e-shell-config-default-folders.h"
-
-#include "evolution-folder-selector-button.h"
-
-#include <glade/glade-xml.h>
-#include <gtk/gtktogglebutton.h>
-#include <gtk/gtksignal.h>
-
-#include <libgnome/gnome-i18n.h>
-
-#include <gconf/gconf-client.h>
-
-
-typedef struct {
- GladeXML *glade;
- EvolutionConfigControl *config_control;
-
- char *mail_uri, *mail_path;
- char *contacts_uri, *contacts_path;
- char *calendar_uri, *calendar_path;
- char *tasks_uri, *tasks_path;
-
- EvolutionShellClient *shell_client;
-} EvolutionDefaultFolderConfig;
-
-static void
-folder_selected (EvolutionFolderSelectorButton *button,
- GNOME_Evolution_Folder *folder,
- EvolutionDefaultFolderConfig *dfc)
-{
- char **uri_ptr, **path_ptr;
-
- uri_ptr = g_object_get_data (G_OBJECT (button), "uri_ptr");
- path_ptr = g_object_get_data (G_OBJECT (button), "path_ptr");
-
- g_free (*uri_ptr);
- g_free (*path_ptr);
- *uri_ptr = g_strdup (folder->physicalUri);
- *path_ptr = g_strdup (folder->evolutionUri);
-
- evolution_config_control_changed (dfc->config_control);
-}
-
-GtkWidget *e_shell_config_default_folder_selector_button_new (char *widget_name, char *string1, char *string2, int int1, int int2);
-
-GtkWidget *
-e_shell_config_default_folder_selector_button_new (char *widget_name,
- char *string1,
- char *string2,
- int int1, int int2)
-{
- return (GtkWidget *) g_object_new (EVOLUTION_TYPE_FOLDER_SELECTOR_BUTTON, NULL);
-}
-
-static void
-config_control_apply_cb (EvolutionConfigControl *control,
- EvolutionDefaultFolderConfig *dfc)
-{
- GConfClient *client;
-
- client = gconf_client_get_default ();
-
- gconf_client_set_string (client, "/apps/evolution/shell/default_folders/mail_path", dfc->mail_path, NULL);
- gconf_client_set_string (client, "/apps/evolution/shell/default_folders/mail_uri", dfc->mail_uri, NULL);
- gconf_client_set_string (client, "/apps/evolution/shell/default_folders/contacts_path", dfc->contacts_path, NULL);
- gconf_client_set_string (client, "/apps/evolution/shell/default_folders/contacts_uri", dfc->contacts_uri, NULL);
- gconf_client_set_string (client, "/apps/evolution/shell/default_folders/calendar_path", dfc->calendar_path, NULL);
- gconf_client_set_string (client, "/apps/evolution/shell/default_folders/calendar_uri", dfc->calendar_uri, NULL);
- gconf_client_set_string (client, "/apps/evolution/shell/default_folders/tasks_path", dfc->tasks_path, NULL);
- gconf_client_set_string (client, "/apps/evolution/shell/default_folders/tasks_uri", dfc->tasks_uri, NULL);
-
-
- g_object_unref (client);
-}
-
-static void
-config_control_destroy_notify (void *data,
- GObject *where_the_config_control_was)
-{
- EvolutionDefaultFolderConfig *dfc = (EvolutionDefaultFolderConfig *) data;
-
- g_free (dfc->mail_uri);
- g_free (dfc->mail_path);
- g_free (dfc->contacts_uri);
- g_free (dfc->contacts_path);
- g_free (dfc->calendar_uri);
- g_free (dfc->calendar_path);
- g_free (dfc->tasks_uri);
- g_free (dfc->tasks_path);
-
- g_object_unref (dfc->glade);
- g_object_unref (dfc->shell_client);
-
- g_free (dfc);
-}
-
-static const char *mail_types[] = { "mail", NULL };
-static const char *contacts_types[] = { "contacts", "contacts/ldap", NULL };
-static const char *calendar_types[] = { "calendar", NULL };
-static const char *tasks_types[] = { "tasks", NULL };
-
-static void
-setup_folder_selector (EvolutionDefaultFolderConfig *dfc,
- const char *widget_name,
- char **path_ptr, char *path_dbpath,
- char **uri_ptr, char *uri_dbpath,
- const char **types)
-{
- GConfClient *client;
- GtkWidget *button;
-
- client = gconf_client_get_default ();
-
- *path_ptr = gconf_client_get_string (client, path_dbpath, NULL);
- *uri_ptr = gconf_client_get_string (client, uri_dbpath, NULL);
-
- g_object_unref (client);
-
- button = glade_xml_get_widget (dfc->glade, widget_name);
- evolution_folder_selector_button_construct (
- EVOLUTION_FOLDER_SELECTOR_BUTTON (button),
- dfc->shell_client, _("Select Default Folder"),
- *uri_ptr, types);
- g_object_set_data (G_OBJECT (button), "uri_ptr", uri_ptr);
- g_object_set_data (G_OBJECT (button), "path_ptr", path_ptr);
- g_signal_connect (button, "selected",
- G_CALLBACK (folder_selected),
- dfc);
-
- /* XXX libglade2 seems to not show custom widgets even when
- they're flagged Visible.*/
- gtk_widget_show (button);
-}
-
-GtkWidget*
-e_shell_config_default_folders_create_widget (EShell *shell, EvolutionConfigControl *config_control)
-{
- EvolutionDefaultFolderConfig *dfc;
- GtkWidget *widget;
-
- dfc = g_new0 (EvolutionDefaultFolderConfig, 1);
-
- dfc->shell_client = evolution_shell_client_new (BONOBO_OBJREF (shell));
-
- dfc->glade = glade_xml_new (EVOLUTION_GLADEDIR "/e-shell-config-default-folders.glade", NULL, NULL);
-
- setup_folder_selector (dfc, "default_mail_button",
- &dfc->mail_path, "/apps/evolution/shell/default_folders/mail_path",
- &dfc->mail_uri, "/apps/evolution/shell/default_folders/mail_uri",
- mail_types);
- setup_folder_selector (dfc, "default_contacts_button",
- &dfc->contacts_path, "/apps/evolution/shell/default_folders/contacts_path",
- &dfc->contacts_uri, "/apps/evolution/shell/default_folders/contacts_uri",
- contacts_types);
- setup_folder_selector (dfc, "default_calendar_button",
- &dfc->calendar_path, "/apps/evolution/shell/default_folders/calendar_path",
- &dfc->calendar_uri, "/apps/evolution/shell/default_folders/calendar_uri",
- calendar_types);
- setup_folder_selector (dfc, "default_tasks_button",
- &dfc->tasks_path, "/apps/evolution/shell/default_folders/tasks_path",
- &dfc->tasks_uri, "/apps/evolution/shell/default_folders/tasks_uri",
- tasks_types);
-
- widget = glade_xml_get_widget (dfc->glade, "default_folders_table");
- gtk_widget_ref (widget);
- gtk_container_remove (GTK_CONTAINER (widget->parent), widget);
- gtk_widget_show (widget);
- dfc->config_control = config_control;
-
- g_signal_connect (dfc->config_control, "apply",
- G_CALLBACK (config_control_apply_cb), dfc);
-
- g_object_weak_ref (G_OBJECT (dfc->config_control), config_control_destroy_notify, dfc);
-
- return widget;
-}
diff --git a/shell/e-shell-config-default-folders.h b/shell/e-shell-config-default-folders.h
deleted file mode 100644
index c5f4412a7a..0000000000
--- a/shell/e-shell-config-default-folders.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-shell-config-default-folders.h - Configuration page for specifying default
- * folders.
- *
- * Copyright (C) 2002 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Dan Winship <danw@ximian.com>
- */
-
-#ifndef E_SHELL_CONFIG_DEFAULT_FOLDERS_H
-#define E_SHELL_CONFIG_DEFAULT_FOLDERS_H
-
-#include "e-shell.h"
-
-#include <gtk/gtkwidget.h>
-#include "evolution-config-control.h"
-
-GtkWidget *e_shell_config_default_folders_create_widget (EShell *shell, EvolutionConfigControl *config_control);
-
-#endif /* E_SHELL_CONFIG_DEFAULT_FOLDERS_H */
diff --git a/shell/e-shell-config-folder-settings.c b/shell/e-shell-config-folder-settings.c
deleted file mode 100644
index 0805c00448..0000000000
--- a/shell/e-shell-config-folder-settings.c
+++ /dev/null
@@ -1,82 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-shell-config-folder-settings.c - Configuration page for folder settings.
- *
- * Copyright (C) 2002 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli <ettore@ximian.com>
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-
-#include "e-shell-config-folder-settings.h"
-#include "e-shell-config-offline.h"
-#include "e-shell-config-autocompletion.h"
-#include "e-shell-config-default-folders.h"
-
-#include "evolution-config-control.h"
-#include "e-storage-set-view.h"
-
-#include "Evolution.h"
-
-#include <bonobo/bonobo-exception.h>
-
-#include <libgnome/gnome-i18n.h>
-#include <gtk/gtknotebook.h>
-#include <gtk/gtklabel.h>
-
-
-static void
-append_to_notebook (GtkWidget *notebook, char *label_str,
- GtkWidget *child)
-{
- GtkWidget *label;
-
- label = gtk_label_new (label_str);
-
- gtk_notebook_append_page (GTK_NOTEBOOK(notebook), child, label);
- gtk_widget_show (label);
- gtk_widget_show (child);
-}
-
-BonoboObject *
-e_shell_config_folder_settings_create_control (EShell *shell)
-{
- GtkWidget *notebook;
- EvolutionConfigControl *control;
-
- g_return_val_if_fail (E_IS_SHELL (shell), NULL);
-
- notebook = gtk_notebook_new ();
-
- control = evolution_config_control_new (notebook);
-
- append_to_notebook (notebook, _("Default Folders"),
- e_shell_config_default_folders_create_widget (shell, control));
-
- append_to_notebook (notebook, _("Offline Folders"),
- e_shell_config_offline_create_widget (shell, control));
-
- append_to_notebook (notebook, _("Autocompletion Folders"),
- e_shell_config_autocompletion_create_widget (shell, control));
-
- gtk_widget_show (notebook);
-
- return BONOBO_OBJECT (control);
-}
diff --git a/shell/e-shell-config-folder-settings.h b/shell/e-shell-config-folder-settings.h
deleted file mode 100644
index 9da0bc79be..0000000000
--- a/shell/e-shell-config-folder-settings.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-shell-config-folder-settings.h - Configuration page for folder settings.
- *
- * Copyright (C) 2002 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli <ettore@ximian.com>
- */
-
-#ifndef E_SHELL_CONFIG_FOLDER_SETTINGS_H
-#define E_SHELL_CONFIG_FOLDER_SETTINGS_H
-
-#include "e-shell.h"
-
-#include <bonobo/bonobo-object.h>
-
-BonoboObject *e_shell_config_folder_settings_create_control (EShell *shell);
-
-#endif /* E_SHELL_CONFIG_FOLDER_SETTINGS_H */
diff --git a/shell/e-shell-config-offline.c b/shell/e-shell-config-offline.c
deleted file mode 100644
index 1342abbbb2..0000000000
--- a/shell/e-shell-config-offline.c
+++ /dev/null
@@ -1,168 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-shell-config-offline.c - Configuration page for offline synchronization.
- *
- * Copyright (C) 2002 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli <ettore@ximian.com>
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-
-#include "e-shell-config-offline.h"
-
-#include "evolution-config-control.h"
-#include "e-storage-set-view.h"
-
-#include "Evolution.h"
-
-#include <gconf/gconf-client.h>
-
-#include <gtk/gtkscrolledwindow.h>
-#include <gtk/gtkwidget.h>
-#include <gtk/gtksignal.h>
-
-
-struct _PageData {
- EShell *shell;
- GtkWidget *storage_set_view;
- EvolutionConfigControl *config_control;
-};
-typedef struct _PageData PageData;
-
-
-/* Callbacks. */
-
-static void
-config_control_destroy_notify (void *data,
- GObject *where_the_config_control_was)
-{
- PageData *page_data;
-
- page_data = (PageData *) data;
- gtk_widget_destroy (page_data->storage_set_view);
- g_free (page_data);
-}
-
-static void
-config_control_apply_callback (EvolutionConfigControl *config_control,
- void *data)
-{
- GConfClient *gconf_client;
- PageData *page_data;
- GSList *checked_paths;
-
- page_data = (PageData *) data;
-
- checked_paths = e_storage_set_view_get_checkboxes_list (E_STORAGE_SET_VIEW (page_data->storage_set_view));
-
- gconf_client = gconf_client_get_default ();
-
- gconf_client_set_list (gconf_client, "/apps/evolution/shell/offline/folder_paths",
- GCONF_VALUE_STRING, checked_paths, NULL);
-
- g_slist_foreach (checked_paths, (GFunc) g_free, NULL);
- g_slist_free (checked_paths);
-
- g_object_unref (gconf_client);
-}
-
-static void
-storage_set_view_checkboxes_changed_callback (EStorageSetView *storage_set_view,
- void *data)
-{
- PageData *page_data;
-
- page_data = (PageData *) data;
- evolution_config_control_changed (page_data->config_control);
-}
-
-
-/* Construction. */
-
-static void
-init_storage_set_view_status_from_config (EStorageSetView *storage_set_view,
- EShell *shell)
-{
- GConfClient *gconf_client;
- GSList *list;
-
- gconf_client = gconf_client_get_default ();
-
- list = gconf_client_get_list (gconf_client, "/apps/evolution/shell/offline/folder_paths",
- GCONF_VALUE_STRING, NULL);
-
- e_storage_set_view_set_checkboxes_list (storage_set_view, list);
-
- g_slist_foreach (list, (GFunc) g_free, NULL);
- g_slist_free (list);
-
- g_object_unref (gconf_client);
-}
-
-static gboolean
-storage_set_view_has_checkbox_func (EStorageSet *storage_set,
- const char *path,
- void *data)
-{
- EFolder *folder;
-
- folder = e_storage_set_get_folder (storage_set, path);
- if (folder == NULL)
- return FALSE;
-
- return e_folder_get_can_sync_offline (folder);
-}
-
-GtkWidget *
-e_shell_config_offline_create_widget (EShell *shell, EvolutionConfigControl *control)
-{
- PageData *page_data;
- GtkWidget *scrolled_window;
-
- g_return_val_if_fail (E_IS_SHELL (shell), NULL);
-
- page_data = g_new (PageData, 1);
- page_data->shell = shell;
-
- page_data->storage_set_view = e_storage_set_create_new_view (e_shell_get_storage_set (shell), NULL);
- e_storage_set_view_set_show_checkboxes (E_STORAGE_SET_VIEW (page_data->storage_set_view), TRUE,
- storage_set_view_has_checkbox_func, NULL);
- gtk_widget_show (page_data->storage_set_view);
-
- init_storage_set_view_status_from_config (E_STORAGE_SET_VIEW (page_data->storage_set_view), shell);
- g_signal_connect (page_data->storage_set_view, "checkboxes_changed",
- G_CALLBACK (storage_set_view_checkboxes_changed_callback), page_data);
-
- scrolled_window = gtk_scrolled_window_new (NULL, NULL);
- gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window), GTK_SHADOW_IN);
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
- GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
- gtk_container_add (GTK_CONTAINER (scrolled_window), page_data->storage_set_view);
- gtk_widget_show (scrolled_window);
-
- page_data->config_control = control;
-
- g_signal_connect (page_data->config_control, "apply",
- G_CALLBACK (config_control_apply_callback), page_data);
-
- g_object_weak_ref (G_OBJECT (page_data->config_control), config_control_destroy_notify, page_data);
-
- return scrolled_window;
-}
diff --git a/shell/e-shell-config-offline.h b/shell/e-shell-config-offline.h
deleted file mode 100644
index fb1d9fb0fb..0000000000
--- a/shell/e-shell-config-offline.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-shell-config-offline.h - Configuration page for offline synchronization.
- *
- * Copyright (C) 2002 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli <ettore@ximian.com>
- */
-
-#ifndef E_SHELL_CONFIG_OFFLINE_H
-#define E_SHELL_CONFIG_OFFLINE_H
-
-#include "e-shell.h"
-
-#include <gtk/gtkwidget.h>
-#include "evolution-config-control.h"
-
-GtkWidget *e_shell_config_offline_create_widget (EShell *shell, EvolutionConfigControl *config_control);
-
-#endif /* E_SHELL_CONFIG_OFFLINE_H */
diff --git a/shell/e-shell-config.c b/shell/e-shell-config.c
deleted file mode 100644
index 5eba72280d..0000000000
--- a/shell/e-shell-config.c
+++ /dev/null
@@ -1,69 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-shell-config.c
- *
- * Copyright (C) 2002 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "e-shell-config.h"
-
-#include "e-shell-config-folder-settings.h"
-#include "evolution-config-control.h"
-#include "evolution-folder-selector-button.h"
-
-#include <string.h>
-#include <bonobo/bonobo-generic-factory.h>
-
-
-#define E_SHELL_CONFIG_FACTORY_OAFIID "OAFIID:GNOME_Evolution_Shell_Config_Factory"
-
-#define E_SHELL_CONFIG_FOLDER_SETTINGS_OAFIID "OAFIID:GNOME_Evolution_Shell_Config_FolderSettings_Control"
-
-
-static BonoboObject *
-config_control_factory_cb (BonoboGenericFactory *factory,
- const char *component_id,
- gpointer shell)
-{
- if (!strcmp (component_id, E_SHELL_CONFIG_FOLDER_SETTINGS_OAFIID))
- return e_shell_config_folder_settings_create_control (shell);
- else {
- g_assert_not_reached();
- return NULL;
- }
-}
-
-gboolean
-e_shell_config_factory_register (EShell *shell)
-{
- BonoboGenericFactory *factory;
-
- g_return_val_if_fail (E_IS_SHELL (shell), FALSE);
-
- factory = bonobo_generic_factory_new (E_SHELL_CONFIG_FACTORY_OAFIID,
- config_control_factory_cb,
- shell);
-
- if (factory == NULL) {
- g_warning ("Cannot register factory %s", E_SHELL_CONFIG_FACTORY_OAFIID);
- return FALSE;
- }
- return TRUE;
-}
diff --git a/shell/e-shell-config.h b/shell/e-shell-config.h
deleted file mode 100644
index 9ba17b78d7..0000000000
--- a/shell/e-shell-config.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-shell-config.h
- *
- * Copyright (C) 2002 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#ifndef E_SHELL_CONFIG_H
-#define E_SHELL_CONFIG_H
-
-#include "e-shell.h"
-
-#include <glib.h>
-
-gboolean e_shell_config_factory_register (EShell *shell);
-
-#endif
diff --git a/shell/e-shell-constants.h b/shell/e-shell-constants.h
deleted file mode 100644
index 9e0d7a5379..0000000000
--- a/shell/e-shell-constants.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-shell-utils.h
- *
- * Copyright (C) 2000 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifndef E_SHELL_CONSTANTS_H
-#define E_SHELL_CONSTANTS_H
-
-#define E_SHELL_URI_PREFIX "evolution:"
-#define E_SHELL_URI_PREFIX_LEN 10
-
-#define E_SHELL_DEFAULTURI_PREFIX "default:"
-#define E_SHELL_DEFAULTURI_PREFIX_LEN 8
-
-#define E_SHELL_MINI_ICON_SUFFIX "-mini"
-#define E_SHELL_MINI_ICON_SUFFIX_LEN 5
-
-#define E_SHELL_ICON_SIZE 48
-#define E_SHELL_MINI_ICON_SIZE 16
-
-#define E_PATH_SEPARATOR '/'
-#define E_PATH_SEPARATOR_S "/"
-
-#define E_LOCAL_STORAGE_NAME "local"
-#define E_SUMMARY_STORAGE_NAME "summary"
-
-#define E_SUMMARY_URI "evolution:/summary"
-#define E_LOCAL_INBOX_URI "evolution:/local/Inbox"
-#define E_LOCAL_CONTACTS_URI "evolution:/local/Contacts"
-#define E_LOCAL_CALENDAR_URI "evolution:/local/Calendar"
-#define E_LOCAL_TASKS_URI "evolution:/local/Tasks"
-
-#endif
diff --git a/shell/e-shell-corba-icon-utils.c b/shell/e-shell-corba-icon-utils.c
deleted file mode 100644
index b88483fd35..0000000000
--- a/shell/e-shell-corba-icon-utils.c
+++ /dev/null
@@ -1,208 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-shell-corba-icon-utils.c
- *
- * Copyright (C) 2002 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#include "e-shell-corba-icon-utils.h"
-
-
-
-/**
- * e_store_corba_icon_from_pixbuf:
- * @pixbuf:
- * @icon_return:
- *
- * Store a CORBA Evolution::Icon in *@icon_return. @icon_return is not
- * supposed to point to allocated memory, so all of its pointers are just
- * overwritten.
- **/
-void
-e_store_corba_icon_from_pixbuf (GdkPixbuf *pixbuf,
- GNOME_Evolution_Icon *icon_return)
-{
- const char *sp;
- CORBA_octet *dp;
- int width, height, total_width, rowstride;
- int i, j;
- gboolean has_alpha;
-
- if (pixbuf == NULL) {
- icon_return->width = 0;
- icon_return->height = 0;
- icon_return->hasAlpha = FALSE;
- icon_return->rgbaData._length = 0;
- icon_return->rgbaData._maximum = 0;
- icon_return->rgbaData._buffer = NULL;
- return;
- }
-
- width = gdk_pixbuf_get_width (pixbuf);
- height = gdk_pixbuf_get_height (pixbuf);
- rowstride = gdk_pixbuf_get_rowstride (pixbuf);
- has_alpha = gdk_pixbuf_get_has_alpha (pixbuf);
-
- if (has_alpha)
- total_width = 4 * width;
- else
- total_width = 3 * width;
-
- icon_return->width = width;
- icon_return->height = height;
- icon_return->hasAlpha = has_alpha;
-
- icon_return->rgbaData._length = icon_return->height * total_width;
- icon_return->rgbaData._maximum = icon_return->rgbaData._length;
- icon_return->rgbaData._buffer = CORBA_sequence_CORBA_octet_allocbuf (icon_return->rgbaData._maximum);
-
- sp = gdk_pixbuf_get_pixels (pixbuf);
- dp = icon_return->rgbaData._buffer;
- for (i = 0; i < height; i ++) {
- for (j = 0; j < total_width; j++)
- *(dp ++) = sp[j];
- sp += rowstride;
- }
-
- CORBA_sequence_set_release (& icon_return->rgbaData, TRUE);
-}
-
-/**
- * e_new_corba_icon_from_pixbuf:
- * @pixbuf:
- *
- * Create a CORBA Evolution::Icon from the specified @pixbuf.
- *
- * Return value: The new Evolution::Icon.
- **/
-GNOME_Evolution_Icon *
-e_new_corba_icon_from_pixbuf (GdkPixbuf *pixbuf)
-{
- GNOME_Evolution_Icon *icon;
-
- icon = GNOME_Evolution_Icon__alloc ();
- e_store_corba_icon_from_pixbuf (pixbuf, icon);
-
- return icon;
-}
-
-/**
- * e_new_corba_animated_icon_from_pixbuf_array:
- * @pixbuf_array:
- *
- * Generate a CORBA Evolution::AnimatedIcon from a NULL-terminated
- * @pixbuf_array.
- *
- * Return value: The new Evolution::AnimatedIcon.
- **/
-GNOME_Evolution_AnimatedIcon *
-e_new_corba_animated_icon_from_pixbuf_array (GdkPixbuf **pixbuf_array)
-{
- GNOME_Evolution_AnimatedIcon *animated_icon;
- GdkPixbuf **p;
- int num_frames;
- int i;
-
- g_return_val_if_fail (pixbuf_array != NULL, NULL);
-
- num_frames = 0;
- for (p = pixbuf_array; *p != NULL; p++)
- num_frames++;
-
- if (num_frames == 0)
- return NULL;
-
- animated_icon = GNOME_Evolution_AnimatedIcon__alloc ();
-
- animated_icon->_length = num_frames;
- animated_icon->_maximum = num_frames;
- animated_icon->_buffer = CORBA_sequence_GNOME_Evolution_Icon_allocbuf (animated_icon->_maximum);
-
- for (i = 0; i < num_frames; i++)
- e_store_corba_icon_from_pixbuf (pixbuf_array[i], & animated_icon->_buffer[i]);
-
- CORBA_sequence_set_release (animated_icon, TRUE);
-
- return animated_icon;
-}
-
-
-/**
- * e_new_gdk_pixbuf_from_corba_icon:
- * @icon: A CORBA Evolution::Icon.
- * @scaled_width: Width of the GdkPixbuf to obtain.
- * @scaled_height: Width of the GdkPixbuf to obtain.
- *
- * If @scaled_width or @scaled_height is -1, do not scale.
- *
- * Create a GdkPixbuf for the specified CORBA @icon.
- *
- * Return value: The newly created GdkPixbuf.
- **/
-GdkPixbuf *
-e_new_gdk_pixbuf_from_corba_icon (const GNOME_Evolution_Icon *icon,
- int scaled_width,
- int scaled_height)
-{
- GdkPixbuf *pixbuf;
- GdkPixbuf *scaled_pixbuf;
- unsigned char *p;
- int src_offset;
- int i, j;
- int rowstride;
- int total_width;
-
- g_return_val_if_fail (icon != NULL, NULL);
-
- if (scaled_width == -1)
- scaled_width = icon->width;
-
- if (scaled_height == -1)
- scaled_height = icon->height;
-
- pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, icon->hasAlpha, 8, icon->width, icon->height);
-
- if (icon->hasAlpha)
- total_width = 4 * icon->width;
- else
- total_width = 3 * icon->width;
-
- rowstride = gdk_pixbuf_get_rowstride (pixbuf);
- src_offset = 0;
- p = gdk_pixbuf_get_pixels (pixbuf);
-
- for (i = 0; i < icon->height; i++) {
- for (j = 0; j < total_width; j++)
- p[j] = icon->rgbaData._buffer[src_offset ++];
- p += rowstride;
- }
-
- if (icon->width == scaled_width && icon->height == scaled_height)
- return pixbuf;
-
- scaled_pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, icon->hasAlpha, 8, scaled_width, scaled_height);
- gdk_pixbuf_scale (pixbuf, scaled_pixbuf,
- 0, 0, scaled_width, scaled_height,
- 0, 0, (double) scaled_width / icon->width, (double) scaled_height / icon->height,
- GDK_INTERP_HYPER);
-
- g_object_unref (pixbuf);
-
- return scaled_pixbuf;
-}
-
diff --git a/shell/e-shell-corba-icon-utils.h b/shell/e-shell-corba-icon-utils.h
deleted file mode 100644
index cc9da3c24b..0000000000
--- a/shell/e-shell-corba-icon-utils.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-shell-corba-icon-utils.h
- *
- * Copyright (C) 2002 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifndef E_SHELL_ICON_UTILS_H
-#define E_SHELL_ICON_UTILS_H
-
-#include "Evolution.h"
-
-#include <gdk-pixbuf/gdk-pixbuf.h>
-
-
-void e_store_corba_icon_from_pixbuf (GdkPixbuf *pixbuf,
- GNOME_Evolution_Icon *icon_return);
-GNOME_Evolution_Icon *e_new_corba_icon_from_pixbuf (GdkPixbuf *pixbuf);
-GNOME_Evolution_AnimatedIcon *e_new_corba_animated_icon_from_pixbuf_array (GdkPixbuf **pixbuf_array);
-
-GdkPixbuf *e_new_gdk_pixbuf_from_corba_icon (const GNOME_Evolution_Icon *icon,
- int scaled_width,
- int scaled_height);
-
-#endif
diff --git a/shell/e-shell-folder-commands.c b/shell/e-shell-folder-commands.c
deleted file mode 100644
index a0e8dd3c31..0000000000
--- a/shell/e-shell-folder-commands.c
+++ /dev/null
@@ -1,653 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-shell-folder-commands.h
- *
- * Copyright (C) 2001 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "e-shell-folder-commands.h"
-
-#include "e-util/e-dialog-utils.h"
-#include "e-util/e-request.h"
-
-#include "e-shell-constants.h"
-#include "e-shell-folder-creation-dialog.h"
-#include "e-shell-folder-selection-dialog.h"
-#include "e-shell-utils.h"
-
-#include <libgnome/gnome-i18n.h>
-#include <libgnome/gnome-util.h>
-
-#include <gtk/gtkentry.h>
-#include <gtk/gtklabel.h>
-#include <gtk/gtkmessagedialog.h>
-#include <gtk/gtksignal.h>
-#include <gtk/gtkstock.h>
-
-#include <string.h>
-
-
-/* Utility functions. */
-
-static const char *
-get_folder_name (EShell *shell,
- const char *path)
-{
- EStorageSet *storage_set;
- EFolder *folder;
-
- storage_set = e_shell_get_storage_set (shell);
- folder = e_storage_set_get_folder (storage_set, path);
-
- return e_folder_get_name (folder);
-}
-
-static int
-get_folder_unread (EShell *shell,
- const char *path)
-{
- EStorageSet *storage_set;
- EFolder *folder;
-
- storage_set = e_shell_get_storage_set (shell);
- folder = e_storage_set_get_folder (storage_set, path);
-
- return e_folder_get_unread_count (folder);
-}
-
-
-/* The data passed to the signals handled during the execution of the folder
- commands. */
-
-enum _FolderCommand {
- FOLDER_COMMAND_COPY,
- FOLDER_COMMAND_MOVE
-};
-typedef enum _FolderCommand FolderCommand;
-
-struct _FolderCommandData {
- EShell *shell;
- EShellView *shell_view;
- FolderCommand command;
- char *source_path;
- char *destination_path;
-};
-typedef struct _FolderCommandData FolderCommandData;
-
-static FolderCommandData *
-folder_command_data_new (EShell *shell,
- EShellView *shell_view,
- FolderCommand command,
- const char *source_path,
- const char *destination_path)
-{
- FolderCommandData *new;
-
- new = g_new (FolderCommandData, 1);
- new->shell = shell;
- new->shell_view = shell_view;
- new->command = command;
- new->source_path = g_strdup (source_path);
- new->destination_path = g_strdup (destination_path);
-
- return new;
-}
-
-static void
-folder_command_data_free (FolderCommandData *folder_command_data)
-{
- g_free (folder_command_data->source_path);
- g_free (folder_command_data->destination_path);
-
- g_free (folder_command_data);
-}
-
-
-/* Callback for the storage result. */
-
-static void
-xfer_result_callback (EStorageSet *storage_set,
- EStorageResult result,
- void *data)
-{
- FolderCommandData *folder_command_data;
-
- folder_command_data = (FolderCommandData *) data;
-
- if (result != E_STORAGE_OK) {
- const char *fmt;
-
- if (folder_command_data->command == FOLDER_COMMAND_COPY)
- fmt = _("Cannot copy folder: %s");
- else
- fmt = _("Cannot move folder: %s");
-
- e_notice (folder_command_data->shell_view, GTK_MESSAGE_ERROR,
- fmt, e_storage_result_to_string (result));
- }
-
- folder_command_data_free (folder_command_data);
-}
-
-
-/* The signals for the folder selection dialog. This used for the copy and
- move commands. */
-
-static void
-folder_selection_dialog_folder_selected_callback (EShellFolderSelectionDialog *folder_selection_dialog,
- const char *path,
- void *data)
-{
- FolderCommandData *folder_command_data;
- EStorageSet *storage_set;
- char *base_name;
- gboolean remove_source;
-
- folder_command_data = (FolderCommandData *) data;
-
- base_name = g_path_get_basename (folder_command_data->source_path);
- folder_command_data->destination_path = g_build_filename (path, base_name, NULL);
- g_free (base_name);
-
- switch (folder_command_data->command) {
- case FOLDER_COMMAND_COPY:
- remove_source = FALSE;
- break;
- case FOLDER_COMMAND_MOVE:
- remove_source = TRUE;
- break;
- default:
- g_assert_not_reached ();
- return;
- }
-
- if (strcmp (folder_command_data->destination_path,
- folder_command_data->source_path) == 0) {
- const char *msg;
-
- if (remove_source)
- msg = _("Cannot move a folder over itself.");
- else
- msg = _("Cannot copy a folder over itself.");
-
- e_notice (folder_selection_dialog, GTK_MESSAGE_ERROR, msg);
- return;
- }
-
- if (remove_source) {
- int source_len;
-
- source_len = strlen (folder_command_data->source_path);
- if (strncmp (folder_command_data->destination_path,
- folder_command_data->source_path,
- source_len) == 0) {
- e_notice (folder_selection_dialog, GTK_MESSAGE_ERROR,
- _("Cannot move a folder into one of its descendants."));
- return;
- }
- }
-
- storage_set = e_shell_get_storage_set (folder_command_data->shell);
-
- e_storage_set_async_xfer_folder (storage_set,
- folder_command_data->source_path,
- folder_command_data->destination_path,
- remove_source,
- xfer_result_callback,
- folder_command_data);
-
- gtk_widget_destroy (GTK_WIDGET (folder_selection_dialog));
-}
-
-static void
-folder_selection_dialog_cancelled_callback (EShellFolderSelectionDialog *folder_selection_dialog,
- void *data)
-{
- folder_command_data_free ((FolderCommandData *) data);
-}
-
-static void
-connect_folder_selection_dialog_signals (EShellFolderSelectionDialog *folder_selection_dialog,
- FolderCommandData *folder_command_data)
-{
- g_assert (folder_command_data != NULL);
-
- g_signal_connect (folder_selection_dialog, "folder_selected",
- G_CALLBACK (folder_selection_dialog_folder_selected_callback),
- folder_command_data);
-
- g_signal_connect (folder_selection_dialog, "cancelled",
- G_CALLBACK (folder_selection_dialog_cancelled_callback),
- folder_command_data);
-}
-
-
-/* Create new folder. */
-
-void
-e_shell_command_create_new_folder (EShell *shell,
- EShellView *shell_view,
- const char *parent_folder_path)
-{
- g_return_if_fail (shell != NULL);
- g_return_if_fail (E_IS_SHELL (shell));
- g_return_if_fail (shell_view != NULL || parent_folder_path != NULL);
- g_return_if_fail (shell_view != NULL && E_IS_SHELL_VIEW (shell_view));
- g_return_if_fail (parent_folder_path != NULL || g_path_is_absolute (parent_folder_path));
-
- if (parent_folder_path == NULL)
- parent_folder_path = e_shell_view_get_current_path (shell_view);
-
- /* FIXME: Should handle the result stuff. */
- e_shell_show_folder_creation_dialog (shell, GTK_WINDOW (shell_view),
- e_shell_view_get_current_path (shell_view),
- NULL /* Default type. Take it from parent */,
- NULL /* result_callback */,
- NULL /* result_callback_data */);
-}
-
-
-/* Open folder in other window. */
-
-void
-e_shell_command_open_folder_in_other_window (EShell *shell,
- EShellView *shell_view,
- const char *folder_path)
-{
- EShellView *view;
- char *uri;
-
- g_return_if_fail (shell != NULL);
- g_return_if_fail (E_IS_SHELL (shell));
- g_return_if_fail (shell_view != NULL && E_IS_SHELL_VIEW (shell_view));
-
- if (folder_path == NULL)
- folder_path = e_shell_view_get_current_path (shell_view);
-
- uri = g_strconcat (E_SHELL_URI_PREFIX, folder_path, NULL);
- view = e_shell_create_view (shell, uri, shell_view);
- g_free (uri);
-
- gtk_widget_show (GTK_WIDGET (view));
-}
-
-
-/* Copy folder. */
-
-void
-e_shell_command_copy_folder (EShell *shell,
- EShellView *shell_view,
- const char *folder_path)
-{
- GtkWidget *folder_selection_dialog;
- FolderCommandData *data;
- char *uri;
- char *caption;
-
- g_return_if_fail (shell != NULL);
- g_return_if_fail (E_IS_SHELL (shell));
- g_return_if_fail (shell_view != NULL && E_IS_SHELL_VIEW (shell_view));
- g_return_if_fail (folder_path == NULL || g_path_is_absolute (folder_path));
-
- if (folder_path == NULL)
- folder_path = e_shell_view_get_current_path (shell_view);
-
- if (folder_path == NULL) {
- g_warning ("Called `e_shell_command_copy_folder()' without a valid displayed folder");
- return;
- }
-
- caption = g_strdup_printf (_("Specify a folder to copy folder \"%s\" into:"),
- get_folder_name (shell, folder_path));
-
- uri = g_strconcat (E_SHELL_URI_PREFIX, folder_path, NULL);
- folder_selection_dialog = e_shell_folder_selection_dialog_new (shell, _("Copy Folder"),
- caption, uri, NULL, TRUE);
-
- g_free (caption);
- g_free (uri);
-
- data = folder_command_data_new (shell, shell_view, FOLDER_COMMAND_COPY, folder_path, NULL);
- connect_folder_selection_dialog_signals (E_SHELL_FOLDER_SELECTION_DIALOG (folder_selection_dialog),
- data);
-
- gtk_widget_show (folder_selection_dialog);
-}
-
-
-/* Move folder. */
-
-void
-e_shell_command_move_folder (EShell *shell,
- EShellView *shell_view,
- const char *folder_path)
-{
- GtkWidget *folder_selection_dialog;
- FolderCommandData *data;
- char *uri;
- char *caption;
-
- g_return_if_fail (shell != NULL);
- g_return_if_fail (E_IS_SHELL (shell));
- g_return_if_fail (shell_view != NULL);
- g_return_if_fail (E_IS_SHELL_VIEW (shell_view));
- g_return_if_fail (folder_path == NULL || g_path_is_absolute (folder_path));
-
- if (folder_path == NULL)
- folder_path = e_shell_view_get_current_path (shell_view);
-
- if (folder_path == NULL) {
- g_warning ("Called `e_shell_command_move_folder()' without a valid displayed folder");
- return;
- }
-
- caption = g_strdup_printf (_("Specify a folder to move folder \"%s\" into:"),
- get_folder_name (shell, folder_path));
-
- uri = g_strconcat (E_SHELL_URI_PREFIX, folder_path, NULL);
- folder_selection_dialog = e_shell_folder_selection_dialog_new (shell, _("Move Folder"),
- caption, uri, NULL, TRUE);
-
- g_free (caption);
- g_free (uri);
-
- data = folder_command_data_new (shell, shell_view, FOLDER_COMMAND_MOVE, folder_path, NULL);
- connect_folder_selection_dialog_signals (E_SHELL_FOLDER_SELECTION_DIALOG (folder_selection_dialog),
- data);
-
- gtk_widget_show (folder_selection_dialog);
-}
-
-static void
-delete_cb (EStorageSet *storage_set,
- EStorageResult result,
- void *data)
-{
- EShellView *shell_view;
-
- shell_view = E_SHELL_VIEW (data);
-
- if (result != E_STORAGE_OK)
- e_notice (shell_view, GTK_MESSAGE_ERROR,
- _("Cannot delete folder:\n%s"), e_storage_result_to_string (result));
-}
-
-static GtkResponseType
-delete_dialog (EShellView *shell_view, const char *folder_name)
-{
- GtkWidget *dialog;
- GtkResponseType response;
- char *title;
-
- dialog = gtk_message_dialog_new (GTK_WINDOW (shell_view),
- GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_MODAL | GTK_DIALOG_NO_SEPARATOR,
- GTK_MESSAGE_QUESTION,
- GTK_BUTTONS_NONE,
- _("Really delete folder \"%s\"?"), folder_name);
-
- gtk_dialog_add_button (GTK_DIALOG (dialog), GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL);
- gtk_dialog_add_button (GTK_DIALOG (dialog), GTK_STOCK_DELETE, GTK_RESPONSE_OK);
-
- gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK);
-
- gtk_container_set_border_width (GTK_CONTAINER (dialog), 6);
-
- gtk_box_set_spacing (GTK_BOX (GTK_DIALOG (dialog)->vbox), 6);
-
- title = g_strdup_printf (_("Delete \"%s\""), folder_name);
- gtk_window_set_title (GTK_WINDOW (dialog), title);
- g_free (title);
-
- response = gtk_dialog_run (GTK_DIALOG (dialog));
- gtk_widget_destroy (dialog);
-
- return response;
-}
-
-void
-e_shell_command_delete_folder (EShell *shell,
- EShellView *shell_view,
- const char *folder_path)
-{
- EStorageSet *storage_set;
-
- g_return_if_fail (shell != NULL);
- g_return_if_fail (E_IS_SHELL (shell));
- g_return_if_fail (shell_view != NULL || folder_path != NULL);
- g_return_if_fail (E_IS_SHELL_VIEW (shell_view));
- g_return_if_fail (folder_path != NULL || g_path_is_absolute (folder_path));
-
- storage_set = e_shell_get_storage_set (shell);
-
- if (folder_path == NULL)
- folder_path = e_shell_view_get_current_path (shell_view);
-
- if (delete_dialog (shell_view, get_folder_name (shell, folder_path)) == GTK_RESPONSE_OK)
- e_storage_set_async_remove_folder (storage_set, folder_path, delete_cb, shell_view);
-}
-
-
-struct _RenameCallbackData {
- EShellView *shell_view;
- char *new_path;
-};
-typedef struct _RenameCallbackData RenameCallbackData;
-
-static RenameCallbackData *
-rename_callback_data_new (EShellView *shell_view,
- const char *new_path)
-{
- RenameCallbackData *callback_data;
-
- callback_data = g_new (RenameCallbackData, 1);
-
- g_object_ref (shell_view);
- callback_data->shell_view = shell_view;
-
- callback_data->new_path = g_strdup (new_path);
-
- return callback_data;
-}
-
-static void
-rename_callback_data_free (RenameCallbackData *callback_data)
-{
- g_object_unref (callback_data->shell_view);
- g_free (callback_data->new_path);
-
- g_free (callback_data);
-}
-
-static void
-rename_cb (EStorageSet *storage_set, EStorageResult result, void *data)
-{
- RenameCallbackData *callback_data;
-
- callback_data = (RenameCallbackData *) data;
-
- if (result != E_STORAGE_OK) {
- e_notice (callback_data->shell_view, GTK_MESSAGE_ERROR,
- _("Cannot rename folder:\n%s"), e_storage_result_to_string (result));
- } else {
- EFolder *folder;
- EShell *shell;
- EStorageSet *storage_set;
-
- shell = e_shell_view_get_shell (callback_data->shell_view);
- storage_set = e_shell_get_storage_set (shell);
- folder = e_storage_set_get_folder (storage_set, callback_data->new_path);
-
- if (folder != NULL) {
- char *base_name = g_path_get_basename (callback_data->new_path);
-
- e_folder_set_name (folder, base_name);
- g_free (base_name);
- }
- }
-
- rename_callback_data_free (callback_data);
-}
-
-void
-e_shell_command_rename_folder (EShell *shell,
- EShellView *shell_view,
- const char *folder_path)
-{
- EStorageSet *storage_set;
- EFolder *folder;
- RenameCallbackData *callback_data;
- const char *old_name;
- char *prompt;
- char *new_name;
- char *old_base_path;
- char *new_path;
-
- g_return_if_fail (shell != NULL);
- g_return_if_fail (E_IS_SHELL (shell));
- g_return_if_fail (shell_view != NULL);
- g_return_if_fail (E_IS_SHELL_VIEW (shell_view));
-
- storage_set = e_shell_get_storage_set (shell);
-
- if (folder_path == NULL)
- folder_path = e_shell_view_get_current_path (shell_view);
-
- folder = e_storage_set_get_folder (storage_set, folder_path);
- g_return_if_fail (folder != NULL);
-
- old_name = e_folder_get_name (folder);
- prompt = g_strdup_printf (_("Rename the \"%s\" folder to:"), old_name);
-
- while (1) {
- const char *reason;
-
- new_name = e_request_string (shell_view != NULL ? GTK_WINDOW (shell_view) : NULL,
- _("Rename Folder"), prompt, old_name);
-
- if (new_name == NULL)
- return;
-
- if (e_shell_folder_name_is_valid (new_name, &reason))
- break;
-
- e_notice (shell_view, GTK_MESSAGE_ERROR,
- _("The specified folder name is not valid: %s"), reason);
- }
-
- g_free (prompt);
-
- if (strcmp (old_name, new_name) == 0) {
- g_free (new_name);
- return;
- }
-
- old_base_path = g_path_get_dirname (folder_path);
- new_path = g_build_filename (old_base_path, new_name, NULL);
-
- callback_data = rename_callback_data_new (shell_view, new_path);
- e_storage_set_async_xfer_folder (storage_set, folder_path, new_path, TRUE, rename_cb, callback_data);
-
- g_free (old_base_path);
- g_free (new_path);
- g_free (new_name);
-}
-
-
-static void
-remove_shared_cb (EStorageSet *storage_set,
- EStorageResult result,
- void *data)
-{
- EShellView *shell_view;
-
- shell_view = E_SHELL_VIEW (data);
-
- if (result == E_STORAGE_NOTIMPLEMENTED ||
- result == E_STORAGE_UNSUPPORTEDOPERATION)
- e_notice (shell_view, GTK_MESSAGE_ERROR,
- _("Selected folder does not belong to another user"));
- else if (result != E_STORAGE_OK)
- e_notice (shell_view, GTK_MESSAGE_ERROR,
- _("Cannot remove folder:\n%s"), e_storage_result_to_string (result));
-}
-
-void
-e_shell_command_remove_shared_folder (EShell *shell,
- EShellView *shell_view,
- const char *folder_path)
-{
- EStorageSet *storage_set;
-
- g_return_if_fail (shell != NULL);
- g_return_if_fail (E_IS_SHELL (shell));
- g_return_if_fail (shell_view != NULL || folder_path != NULL);
- g_return_if_fail (E_IS_SHELL_VIEW (shell_view));
- g_return_if_fail (folder_path != NULL || g_path_is_absolute (folder_path));
-
- storage_set = e_shell_get_storage_set (shell);
-
- if (folder_path == NULL)
- folder_path = e_shell_view_get_current_path (shell_view);
-
- e_storage_set_async_remove_shared_folder (storage_set, folder_path,
- remove_shared_cb, shell_view);
-}
-
-
-void
-e_shell_command_add_to_shortcut_bar (EShell *shell,
- EShellView *shell_view,
- const char *folder_path)
-{
- EShortcuts *shortcuts;
- EStorageSet *storage_set;
- EFolder *folder;
- int group_num;
- char *uri;
- int unread_count;
-
- g_return_if_fail (shell != NULL);
- g_return_if_fail (E_IS_SHELL (shell));
- g_return_if_fail (shell_view != NULL);
- g_return_if_fail (E_IS_SHELL_VIEW (shell_view));
- g_return_if_fail (folder_path == NULL || g_path_is_absolute (folder_path));
-
- shortcuts = e_shell_get_shortcuts (shell);
- group_num = e_shell_view_get_current_shortcuts_group_num (shell_view);
-
- if (folder_path == NULL)
- uri = g_strdup (e_shell_view_get_current_uri (shell_view));
- else
- uri = g_strconcat (E_SHELL_URI_PREFIX, folder_path, NULL);
-
- unread_count = get_folder_unread (shell, e_shell_view_get_current_path (shell_view));
-
- storage_set = e_shell_get_storage_set (shell);
- folder = e_storage_set_get_folder (storage_set, e_shell_view_get_current_path (shell_view));
-
- e_shortcuts_add_shortcut (shortcuts, group_num, -1, uri, NULL,
- unread_count,
- e_folder_get_type_string (folder),
- e_folder_get_custom_icon_name (folder));
-
- g_free (uri);
-}
diff --git a/shell/e-shell-folder-commands.h b/shell/e-shell-folder-commands.h
deleted file mode 100644
index 72b7ba0b0e..0000000000
--- a/shell/e-shell-folder-commands.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-shell-folder-commands.h
- *
- * Copyright (C) 2001 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifndef E_SHELL_FOLDER_COMMANDS_H
-#define E_SHELL_FOLDER_COMMANDS_H
-
-#include "e-shell.h"
-#include "e-shell-view.h"
-
-void e_shell_command_open_folder_in_other_window (EShell *shell, EShellView *shell_view, const char *folder_path);
-
-void e_shell_command_create_new_folder (EShell *shell, EShellView *shell_view, const char *parent_folder_path);
-
-void e_shell_command_copy_folder (EShell *shell, EShellView *shell_view, const char *folder_path);
-void e_shell_command_move_folder (EShell *shell, EShellView *shell_view, const char *folder_path);
-void e_shell_command_delete_folder (EShell *shell, EShellView *shell_view, const char *folder_path);
-void e_shell_command_rename_folder (EShell *shell, EShellView *shell_view, const char *folder_path);
-
-void e_shell_command_remove_shared_folder (EShell *shell, EShellView *shell_view, const char *folder_path);
-
-void e_shell_command_add_to_shortcut_bar (EShell *shell, EShellView *shell_view, const char *folder_path);
-
-#endif
diff --git a/shell/e-shell-folder-creation-dialog.c b/shell/e-shell-folder-creation-dialog.c
deleted file mode 100644
index 8390423850..0000000000
--- a/shell/e-shell-folder-creation-dialog.c
+++ /dev/null
@@ -1,568 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-shell.c
- *
- * Copyright (C) 2000, 2001 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <string.h>
-#include <glib.h>
-#include <libgnome/gnome-i18n.h>
-#include <libgnome/gnome-util.h>
-
-#include <gtk/gtkentry.h>
-#include <gtk/gtkdialog.h>
-#include <gtk/gtkoptionmenu.h>
-#include <gtk/gtkmenuitem.h>
-#include <gtk/gtkscrolledwindow.h>
-
-#include <glade/glade-xml.h>
-
-#include <gal/util/e-util.h>
-
-#include "e-storage-set.h"
-#include "e-storage-set-view.h"
-#include "e-shell-utils.h"
-
-#include "e-util/e-dialog-utils.h"
-
-#include "e-shell-folder-creation-dialog.h"
-
-
-#define GLADE_FILE_NAME EVOLUTION_GLADEDIR "/e-shell-folder-creation-dialog.glade"
-
-
-/* Data for the callbacks. */
-struct _DialogData {
- GtkWidget *dialog;
- EShell *shell;
-
- GtkWidget *folder_name_entry;
- GtkWidget *storage_set_view;
- GtkWidget *folder_type_option_menu;
-
- GList *folder_types;
-
- char *folder_path;
-
- EShellFolderCreationDialogCallback result_callback;
- void *result_callback_data;
-
- gboolean creation_in_progress;
-};
-typedef struct _DialogData DialogData;
-
-static void
-dialog_data_destroy (DialogData *dialog_data)
-{
- e_free_string_list (dialog_data->folder_types);
- g_free (dialog_data->folder_path);
-
- g_free (dialog_data);
-}
-
-
-/* Callback for the asynchronous folder creation function. */
-
-static void
-async_create_cb (EStorageSet *storage_set,
- EStorageResult result,
- void *data)
-{
- DialogData *dialog_data;
-
- dialog_data = (DialogData *) data;
-
- dialog_data->creation_in_progress = FALSE;
-
- gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog_data->dialog), GTK_RESPONSE_OK, TRUE);
- gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog_data->dialog), GTK_RESPONSE_CANCEL, TRUE);
-
- if (result == E_STORAGE_OK) {
- /* Success! Tell the callback of this, then return */
- if (dialog_data->result_callback != NULL)
- (* dialog_data->result_callback) (dialog_data->shell,
- E_SHELL_FOLDER_CREATION_DIALOG_RESULT_SUCCESS,
- dialog_data->folder_path,
- dialog_data->result_callback_data);
- if (dialog_data->dialog != NULL) {
- gtk_widget_destroy (dialog_data->dialog);
- } else {
- /* If dialog_data->dialog is NULL, it means that the
- dialog has been destroyed before we were done, so we
- have to free the dialog_data ourselves. */
- dialog_data_destroy (dialog_data);
- }
- return;
- }
-
- /* Tell the callback something failed, then popup a dialog
- explaining how it failed */
- if (dialog_data->result_callback != NULL)
- (* dialog_data->result_callback) (dialog_data->shell,
- E_SHELL_FOLDER_CREATION_DIALOG_RESULT_FAIL,
- dialog_data->folder_path,
- dialog_data->result_callback_data);
-
- e_notice (dialog_data->dialog, GTK_MESSAGE_ERROR,
- _("Cannot create the specified folder:\n%s"),
- e_storage_result_to_string (result));
-
- /* If dialog_data->dialog is NULL, it means that the dialog has been
- destroyed before we were done, so we have to free the dialog_data
- ourselves. */
- if (dialog_data->dialog == NULL)
- dialog_data_destroy (dialog_data);
-}
-
-
-/* Dialog signal callbacks. */
-
-static void
-dialog_response_cb (GtkDialog *dialog,
- int response_id,
- void *data)
-{
- DialogData *dialog_data;
- EStorageSet *storage_set;
- GtkWidget *folder_type_menu_item;
- const char *folder_type;
- const char *parent_path;
- const char *reason;
- const char *folder_name;
- char *path;
-
- dialog_data = (DialogData *) data;
-
- if (response_id != GTK_RESPONSE_OK) {
- if (dialog_data->result_callback != NULL)
- (* dialog_data->result_callback) (dialog_data->shell,
- E_SHELL_FOLDER_CREATION_DIALOG_RESULT_CANCEL,
- NULL,
- dialog_data->result_callback_data);
- gtk_widget_destroy (GTK_WIDGET (dialog));
- return;
- }
-
- folder_name = gtk_entry_get_text(GTK_ENTRY (dialog_data->folder_name_entry));
-
- if (! e_shell_folder_name_is_valid (folder_name, &reason)) {
- e_notice (dialog, GTK_MESSAGE_ERROR,
- _("The specified folder name is not valid: %s"), reason);
- return;
- }
-
- parent_path = e_storage_set_view_get_current_folder
- (E_STORAGE_SET_VIEW (dialog_data->storage_set_view));
- if (parent_path == NULL) {
- if (dialog_data->result_callback != NULL)
- (* dialog_data->result_callback) (dialog_data->shell,
- E_SHELL_FOLDER_CREATION_DIALOG_RESULT_CANCEL,
- NULL,
- dialog_data->result_callback_data);
- gtk_widget_destroy (GTK_WIDGET (dialog));
- return;
- }
-
- path = g_build_filename (parent_path, folder_name, NULL);
-
- storage_set = e_shell_get_storage_set (dialog_data->shell);
-
- folder_type_menu_item = GTK_OPTION_MENU (dialog_data->folder_type_option_menu)->menu_item;
- folder_type = g_object_get_data (G_OBJECT (folder_type_menu_item), "folder_type");
-
- if (folder_type == NULL) {
- g_warning ("Cannot get folder type for selected GtkOptionMenu item.");
- return;
- }
-
- g_free (dialog_data->folder_path);
- dialog_data->folder_path = path;
-
- gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog), GTK_RESPONSE_OK, FALSE);
- gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog), GTK_RESPONSE_CANCEL, FALSE);
-
- dialog_data->creation_in_progress = TRUE;
-
- e_storage_set_async_create_folder (storage_set,
- path,
- folder_type,
- "", /* description */
- async_create_cb, dialog_data);
-}
-
-static void
-dialog_destroy_notify (void *data,
- GObject *where_the_dialog_was)
-{
- DialogData *dialog_data;
-
- dialog_data = (DialogData *) data;
-
- if (dialog_data->creation_in_progress) {
- /* If the dialog has been closed before we are done creating
- the folder, the dialog_data will be freed after the creation
- is completed. */
- dialog_data->dialog = NULL;
- dialog_data->folder_name_entry = NULL;
- dialog_data->storage_set_view = NULL;
- dialog_data->folder_type_option_menu = NULL;
- return;
- }
-
- dialog_data_destroy (dialog_data);
-}
-
-static void
-folder_name_entry_activate_cb (GtkEntry *entry,
- void *data)
-{
- DialogData *dialog_data;
- const char *parent_path;
-
- dialog_data = (DialogData *) data;
-
- parent_path = e_storage_set_view_get_current_folder (E_STORAGE_SET_VIEW (dialog_data->storage_set_view));
-
- if (parent_path != NULL
- && GTK_ENTRY (dialog_data->folder_name_entry)->text_length > 0)
- gtk_dialog_response (GTK_DIALOG (dialog_data->dialog), GTK_RESPONSE_OK);
-}
-
-static void
-folder_name_entry_changed_cb (GtkEditable *editable,
- void *data)
-{
- DialogData *dialog_data;
- const char *parent_path;
-
- dialog_data = (DialogData *) data;
-
- parent_path = e_storage_set_view_get_current_folder (E_STORAGE_SET_VIEW (dialog_data->storage_set_view));
-
- if (parent_path != NULL
- && GTK_ENTRY (dialog_data->folder_name_entry)->text_length > 0)
- gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog_data->dialog), GTK_RESPONSE_OK, TRUE);
- else
- gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog_data->dialog), GTK_RESPONSE_OK, FALSE);
-}
-
-static void
-storage_set_view_folder_selected_cb (EStorageSetView *storage_set_view,
- const char *path,
- void *data)
-{
- DialogData *dialog_data;
-
- dialog_data = (DialogData *) data;
-
- if (GTK_ENTRY (dialog_data->folder_name_entry)->text_length > 0)
- gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog_data->dialog), GTK_RESPONSE_OK, TRUE);
-}
-
-
-/* Shell signal callbacks. */
-
-static void
-shell_destroy_notify (void *data,
- GObject *where_the_shell_was)
-{
- DialogData *dialog_data = (DialogData *) data;
-
- dialog_data->shell = NULL;
- gtk_widget_destroy (GTK_WIDGET (dialog_data->dialog));
-}
-
-
-/* Dialog setup. */
-
-static void
-setup_dialog (GtkWidget *dialog,
- GladeXML *gui,
- EShell *shell,
- GtkWindow *parent_window)
-{
- if (parent_window != NULL)
- gtk_window_set_transient_for (GTK_WINDOW (dialog), parent_window);
-
- gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
- gtk_window_set_title (GTK_WINDOW (dialog), _("Create New Folder"));
-
- gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog), GTK_RESPONSE_OK, FALSE);
-
- gtk_widget_show (dialog);
-}
-
-static void
-setup_folder_name_entry (GtkWidget *dialog,
- GladeXML *gui,
- EShell *shell)
-{
- GtkWidget *folder_name_entry;
-
- folder_name_entry = glade_xml_get_widget (gui, "folder_name_entry");
-}
-
-static GtkWidget *
-add_storage_set_view (GtkWidget *dialog,
- GladeXML *gui,
- EShell *shell,
- const char *default_parent_folder)
-{
- EStorageSet *storage_set;
- GtkWidget *storage_set_view;
- GtkWidget *scrolled_window;
- GtkWidget *vbox;
-
- storage_set = e_shell_get_storage_set (shell);
- storage_set_view = e_storage_set_create_new_view (storage_set, NULL);
-
- e_storage_set_view_set_allow_dnd (E_STORAGE_SET_VIEW (storage_set_view), FALSE);
-
- GTK_WIDGET_SET_FLAGS (storage_set_view, GTK_CAN_FOCUS);
-
- if (default_parent_folder != NULL)
- e_storage_set_view_set_current_folder (E_STORAGE_SET_VIEW (storage_set_view),
- default_parent_folder);
-
- vbox = glade_xml_get_widget (gui, "main_vbox");
-
- scrolled_window = gtk_scrolled_window_new (NULL, NULL);
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
- gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window), GTK_SHADOW_IN);
- gtk_box_pack_start (GTK_BOX (vbox), scrolled_window, TRUE, TRUE, 6);
-
- gtk_container_add (GTK_CONTAINER (scrolled_window), storage_set_view);
-
- gtk_widget_show (scrolled_window);
- gtk_widget_show (storage_set_view);
-
- return storage_set_view;
-}
-
-struct _TypeWithDisplayName {
- const char *type;
- const char *display_name;
-};
-typedef struct _TypeWithDisplayName TypeWithDisplayName;
-
-static int
-type_with_display_name_compare_func (const void *a, const void *b)
-{
- const TypeWithDisplayName *val_a, *val_b;
- char *a_display_name_casefolded;
- char *b_display_name_casefolded;
- int retval;
-
- val_a = (const TypeWithDisplayName *) a;
- val_b = (const TypeWithDisplayName *) b;
-
- a_display_name_casefolded = g_utf8_casefold (val_a->display_name, -1);
- b_display_name_casefolded = g_utf8_casefold (val_b->display_name, -1);
-
- retval = g_utf8_collate (a_display_name_casefolded, b_display_name_casefolded);
-
- g_free (a_display_name_casefolded);
- g_free (b_display_name_casefolded);
-
- return retval;
-}
-
-static GList *
-add_folder_types (GtkWidget *dialog,
- GladeXML *gui,
- EShell *shell,
- const char *default_type)
-{
- EFolderTypeRegistry *folder_type_registry;
- GtkWidget *folder_type_option_menu;
- GtkWidget *menu;
- GList *folder_types;
- GList *types_with_display_names;
- GList *p;
- int default_item;
- int i, len;
-
- folder_type_option_menu = glade_xml_get_widget (gui, "folder_type_option_menu");
-
- menu = gtk_option_menu_get_menu (GTK_OPTION_MENU (folder_type_option_menu));
-
- folder_type_registry = e_shell_get_folder_type_registry (shell);
- g_assert (folder_type_registry != NULL);
-
- folder_types = e_folder_type_registry_get_type_names (folder_type_registry);
- if (folder_types == NULL)
- return NULL; /* Uh? */
-
- types_with_display_names = NULL;
- for (p = folder_types; p != NULL; p = p->next) {
- TypeWithDisplayName *new;
-
- new = g_new (TypeWithDisplayName, 1);
- new->type = p->data;
- new->display_name = e_folder_type_registry_get_display_name_for_type (folder_type_registry, new->type);
-
- types_with_display_names = g_list_prepend (types_with_display_names, new);
- }
-
- types_with_display_names = g_list_sort (types_with_display_names, type_with_display_name_compare_func);
-
- /* FIXME: Add icon (I don't feel like writing an alpha-capable thingie again). */
-
- default_item = -1;
- i = 0;
- for (p = types_with_display_names; p != NULL; p = p->next) {
- const TypeWithDisplayName *type;
- GtkWidget *menu_item;
-
- type = (const TypeWithDisplayName *) p->data;
-
- if (! e_folder_type_registry_type_is_user_creatable (folder_type_registry, type->type))
- continue;
-
- menu_item = gtk_menu_item_new_with_label (type->display_name);
- gtk_widget_show (menu_item);
- gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item);
-
- g_object_set_data_full (G_OBJECT (menu_item), "folder_type", g_strdup (type->type), g_free);
-
- if (strcmp (type->type, default_type) == 0)
- default_item = i;
- else if (default_item == -1) {
- len = strlen (type->type);
- if (strncmp (type->type, default_type, len) == 0 &&
- default_type[len] == '/')
- default_item = i;
- }
-
- i ++;
- }
- if (default_item == -1)
- default_item = 0;
-
- for (p = types_with_display_names; p != NULL; p = p->next)
- g_free (p->data);
- g_list_free (types_with_display_names);
-
- gtk_option_menu_set_menu (GTK_OPTION_MENU (folder_type_option_menu), menu);
- gtk_widget_show (menu);
-
- gtk_option_menu_set_history (GTK_OPTION_MENU (folder_type_option_menu), default_item);
- gtk_widget_queue_resize (folder_type_option_menu);
-
- return folder_types;
-}
-
-static const char *
-get_type_from_parent_path (EShell *shell,
- const char *path)
-{
- EFolder *folder;
- const char *folder_type;
- EStorageSet *set;
-
- set = e_shell_get_storage_set (shell);
- folder = e_storage_set_get_folder (set, path);
- if (folder == NULL) {
- return "mail";
- }
-
- folder_type = e_folder_get_type_string (folder);
- if (folder_type == NULL || strcmp (folder_type, "noselect") == 0) {
- return "mail";
- } else {
- return folder_type;
- }
-}
-
-
-/* FIXME: Currently this is modal. I think it's OK, but if people think it is
- not, we should change it to non-modal and make sure only one of these is
- open at once. Currently it relies on modality for this. */
-void
-e_shell_show_folder_creation_dialog (EShell *shell,
- GtkWindow *parent_window,
- const char *default_parent_folder,
- const char *default_type,
- EShellFolderCreationDialogCallback result_callback,
- void *result_callback_data)
-{
- GladeXML *gui;
- GtkWidget *dialog;
- GtkWidget *storage_set_view;
- GList *folder_types;
- DialogData *dialog_data;
-
- g_return_if_fail (shell != NULL);
- g_return_if_fail (E_IS_SHELL (shell));
-
- gui = glade_xml_new (GLADE_FILE_NAME, NULL, NULL);
- if (gui == NULL) {
- g_warning ("Cannot load Glade description file for the folder creation dialog -- %s",
- GLADE_FILE_NAME);
- return;
- }
-
- dialog = glade_xml_get_widget (gui, "create_folder_dialog");
-
- setup_dialog (dialog, gui, shell, parent_window);
- setup_folder_name_entry (dialog, gui, shell);
-
- storage_set_view = add_storage_set_view (dialog, gui, shell, default_parent_folder);
- if (default_type == NULL) {
- const char *dt;
-
- dt = get_type_from_parent_path (shell, default_parent_folder);
- folder_types = add_folder_types (dialog, gui, shell, dt);
- } else {
- folder_types = add_folder_types (dialog, gui, shell, default_type);
- }
-
- dialog_data = g_new (DialogData, 1);
- dialog_data->dialog = dialog;
- dialog_data->shell = shell;
- dialog_data->folder_name_entry = glade_xml_get_widget (gui, "folder_name_entry");
- dialog_data->storage_set_view = storage_set_view;
- dialog_data->folder_type_option_menu = glade_xml_get_widget (gui, "folder_type_option_menu");
- dialog_data->folder_types = folder_types;
- dialog_data->folder_path = NULL;
- dialog_data->result_callback = result_callback;
- dialog_data->result_callback_data = result_callback_data;
- dialog_data->creation_in_progress = FALSE;
-
- g_signal_connect (dialog, "response",
- G_CALLBACK (dialog_response_cb), dialog_data);
- g_object_weak_ref (G_OBJECT (dialog), dialog_destroy_notify, dialog_data);
-
- g_signal_connect (dialog_data->folder_name_entry, "changed",
- G_CALLBACK (folder_name_entry_changed_cb), dialog_data);
-
- g_signal_connect (dialog_data->folder_name_entry, "activate",
- G_CALLBACK (folder_name_entry_activate_cb), dialog_data);
-
- g_signal_connect (dialog_data->storage_set_view, "folder_selected",
- G_CALLBACK (storage_set_view_folder_selected_cb), dialog_data);
-
- g_object_weak_ref (G_OBJECT (shell), shell_destroy_notify, dialog_data);
-
- g_object_unref (gui);
-}
diff --git a/shell/e-shell-folder-creation-dialog.h b/shell/e-shell-folder-creation-dialog.h
deleted file mode 100644
index 8e3e990835..0000000000
--- a/shell/e-shell-folder-creation-dialog.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-shell.c
- *
- * Copyright (C) 2000 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifndef E_SHELL_FOLDER_CREATION_DIALOG_H
-#define E_SHELL_FOLDER_CREATION_DIALOG_H
-
-#include <gtk/gtkwindow.h>
-
-#include "e-shell.h"
-
-enum _EShellFolderCreationDialogResult {
- E_SHELL_FOLDER_CREATION_DIALOG_RESULT_SUCCESS,
- E_SHELL_FOLDER_CREATION_DIALOG_RESULT_FAIL,
- E_SHELL_FOLDER_CREATION_DIALOG_RESULT_CANCEL
-};
-typedef enum _EShellFolderCreationDialogResult EShellFolderCreationDialogResult;
-
-typedef void (* EShellFolderCreationDialogCallback) (EShell *shell,
- EShellFolderCreationDialogResult result,
- const char *path,
- void *data);
-
-void e_shell_show_folder_creation_dialog (EShell *shell,
- GtkWindow *parent,
- const char *default_parent_folder,
- const char *default_type,
- EShellFolderCreationDialogCallback result_callback,
- void *result_callback_data);
-
-#endif /* E_SHELL_FOLDER_CREATION_DIALOG_H */
diff --git a/shell/e-shell-folder-selection-dialog.c b/shell/e-shell-folder-selection-dialog.c
deleted file mode 100644
index 0715a1d9ae..0000000000
--- a/shell/e-shell-folder-selection-dialog.c
+++ /dev/null
@@ -1,548 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-shell-folder-selection-dialog.c
- *
- * Copyright (C) 2000, 2001 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "e-shell-folder-selection-dialog.h"
-
-#include "e-shell-constants.h"
-#include "e-shell-marshal.h"
-#include "e-storage-set-view.h"
-#include "e-storage-set.h"
-
-#include "e-shell-folder-creation-dialog.h"
-
-#include <libgnome/gnome-i18n.h>
-
-#include <gal/util/e-util.h>
-#include <gal/widgets/e-gui-utils.h>
-
-#include <gtk/gtksignal.h>
-#include <gtk/gtklabel.h>
-#include <gtk/gtkstock.h>
-#include <gtk/gtkscrolledwindow.h>
-
-#include <string.h>
-
-
-#define PARENT_TYPE (gtk_dialog_get_type ())
-static GtkDialogClass *parent_class = NULL;
-
-struct _EShellFolderSelectionDialogPrivate {
- EShell *shell;
- GList *allowed_types;
- EStorageSet *storage_set;
- GtkWidget *storage_set_view;
-
- gboolean allow_creation;
-};
-
-enum {
- FOLDER_SELECTED,
- CANCELLED,
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = { 0 };
-
-enum {
- RESPONSE_NEW
-};
-
-
-/* Utility functions. */
-
-static gboolean
-check_folder_type_valid (EShellFolderSelectionDialog *folder_selection_dialog)
-{
- EShellFolderSelectionDialogPrivate *priv;
- const char *selected_path;
- EFolder *folder;
- const char *folder_type;
- GList *p;
-
- priv = folder_selection_dialog->priv;
- if (priv->allowed_types == NULL)
- return TRUE;
-
- selected_path = e_shell_folder_selection_dialog_get_selected_path (folder_selection_dialog);
- if (selected_path == NULL)
- return FALSE;
-
- folder = e_storage_set_get_folder (priv->storage_set, selected_path);
- if (folder == NULL)
- return FALSE;
-
- folder_type = e_folder_get_type_string (folder);
-
- for (p = priv->allowed_types; p != NULL; p = p->next) {
- const char *type, *slash;
-
- type = (const char *) p->data;
- if (strcmp (folder_type, type) == 0)
- return TRUE;
- slash = strchr (type, '/');
- if (slash && slash[1] == '*' && strncmp (folder_type, type, slash - type) == 0)
- return TRUE;
- }
-
- return FALSE;
-}
-
-static void
-set_default_folder (EShellFolderSelectionDialog *shell_folder_selection_dialog,
- const char *default_uri)
-{
- EShellFolderSelectionDialogPrivate *priv;
- char *default_path;
-
- g_assert (default_uri != NULL);
-
- priv = shell_folder_selection_dialog->priv;
-
- if (strncmp (default_uri, E_SHELL_URI_PREFIX, E_SHELL_URI_PREFIX_LEN) == 0) {
- /* `evolution:' URI. */
- default_path = g_strdup (default_uri + E_SHELL_URI_PREFIX_LEN);
- } else {
- /* Physical URI. */
- default_path = e_storage_set_get_path_for_physical_uri (priv->storage_set,
- default_uri);
- }
-
- e_storage_set_view_set_current_folder (E_STORAGE_SET_VIEW (priv->storage_set_view),
- default_path);
-
- g_free (default_path);
-}
-
-
-/* Folder creation dialog callback. */
-
-static void
-folder_creation_dialog_result_cb (EShell *shell,
- EShellFolderCreationDialogResult result,
- const char *path,
- void *data)
-{
- EShellFolderSelectionDialog *dialog;
- EShellFolderSelectionDialogPrivate *priv;
-
- dialog = E_SHELL_FOLDER_SELECTION_DIALOG (data);
- priv = dialog->priv;
-
- if (priv == NULL) {
- g_warning ("dialog->priv is NULL, and should not be");
- return;
- }
-
- if (result == E_SHELL_FOLDER_CREATION_DIALOG_RESULT_SUCCESS)
- e_storage_set_view_set_current_folder (E_STORAGE_SET_VIEW (priv->storage_set_view),
- path);
-}
-
-
-/* GtkObject methods. */
-
-/* Saves the expanded state of the tree to a common filename */
-static void
-save_expanded_state (EShellFolderSelectionDialog *folder_selection_dialog)
-{
- EShellFolderSelectionDialogPrivate *priv;
- char *filename;
-
- priv = folder_selection_dialog->priv;
-
- filename = g_strdup_printf ("%s/config/storage-set-view-expanded:folder-selection-dialog",
- e_shell_get_local_directory (priv->shell));
- e_tree_save_expanded_state (E_TREE (priv->storage_set_view), filename);
- g_free (filename);
-}
-
-static void
-impl_dispose (GObject *object)
-{
- EShellFolderSelectionDialog *folder_selection_dialog;
- EShellFolderSelectionDialogPrivate *priv;
-
- folder_selection_dialog = E_SHELL_FOLDER_SELECTION_DIALOG (object);
- priv = folder_selection_dialog->priv;
-
- if (priv->storage_set != NULL) {
- save_expanded_state (folder_selection_dialog);
- g_object_unref (priv->storage_set);
- priv->storage_set = NULL;
- }
-
- if (priv->shell != NULL) {
- g_object_weak_unref (G_OBJECT (priv->shell), (GWeakNotify) gtk_widget_destroy, folder_selection_dialog);
- priv->shell = NULL;
- }
-
- (* G_OBJECT_CLASS (parent_class)->dispose) (object);
-}
-
-static void
-impl_finalize (GObject *object)
-{
- EShellFolderSelectionDialog *folder_selection_dialog;
- EShellFolderSelectionDialogPrivate *priv;
-
- folder_selection_dialog = E_SHELL_FOLDER_SELECTION_DIALOG (object);
- priv = folder_selection_dialog->priv;
-
- e_free_string_list (priv->allowed_types);
-
- g_free (priv);
-
- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
-}
-
-
-/* GtkDialog methods. */
-
-static void
-impl_response (GtkDialog *dialog,
- int response)
-{
- EShellFolderSelectionDialog *folder_selection_dialog;
- EShellFolderSelectionDialogPrivate *priv;
- EStorageSetView *storage_set_view;
- const char *default_parent_folder;
- const char *default_subtype;
- char *default_type;
-
- folder_selection_dialog = E_SHELL_FOLDER_SELECTION_DIALOG (dialog);
- priv = folder_selection_dialog->priv;
-
- switch (response) {
- case GTK_RESPONSE_OK:
- if (check_folder_type_valid (folder_selection_dialog)) {
- g_signal_emit (folder_selection_dialog, signals[FOLDER_SELECTED], 0,
- e_shell_folder_selection_dialog_get_selected_path (folder_selection_dialog));
- gtk_widget_destroy (GTK_WIDGET (dialog));
- }
- break;
-
- case GTK_RESPONSE_CANCEL:
- case GTK_RESPONSE_DELETE_EVENT:
- g_signal_emit (folder_selection_dialog, signals[CANCELLED], 0);
- gtk_widget_destroy (GTK_WIDGET (dialog));
- break;
-
- case RESPONSE_NEW:
- storage_set_view = E_STORAGE_SET_VIEW (priv->storage_set_view);
- default_parent_folder = e_storage_set_view_get_current_folder (storage_set_view);
-
- /* The default type in the folder creation dialog will be the
- first of the allowed types. If all types are allowed,
- hardcode to "mail". */
- if (priv->allowed_types == NULL)
- default_type = g_strdup ("mail");
- else {
- default_subtype = (const char *) priv->allowed_types->data;
- default_type = g_strndup (default_subtype,
- strcspn (default_subtype, "/"));
- }
-
- e_shell_show_folder_creation_dialog (priv->shell, GTK_WINDOW (dialog),
- default_parent_folder,
- default_type,
- folder_creation_dialog_result_cb,
- dialog);
- g_free (default_type);
-
- break;
- }
-}
-
-
-/* GTK+ type initialization. */
-
-static void
-class_init (EShellFolderSelectionDialogClass *klass)
-{
- GObjectClass *object_class;
- GtkDialogClass *dialog_class;
-
- parent_class = g_type_class_ref(PARENT_TYPE);
- object_class = G_OBJECT_CLASS (klass);
- dialog_class = GTK_DIALOG_CLASS (klass);
-
- object_class->dispose = impl_dispose;
- object_class->finalize = impl_finalize;
-
- dialog_class->response = impl_response;
-
- signals[FOLDER_SELECTED]
- = g_signal_new ("folder_selected",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (EShellFolderSelectionDialogClass, folder_selected),
- NULL, NULL,
- e_shell_marshal_NONE__STRING,
- G_TYPE_NONE, 1,
- G_TYPE_STRING);
-
- signals[CANCELLED]
- = g_signal_new ("cancelled",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (EShellFolderSelectionDialogClass, cancelled),
- NULL, NULL,
- e_shell_marshal_NONE__NONE,
- G_TYPE_NONE, 0);
-}
-
-static void
-init (EShellFolderSelectionDialog *shell_folder_selection_dialog)
-{
- EShellFolderSelectionDialogPrivate *priv;
-
- priv = g_new (EShellFolderSelectionDialogPrivate, 1);
- priv->shell = NULL;
- priv->storage_set = NULL;
- priv->storage_set_view = NULL;
- priv->allowed_types = NULL;
- priv->allow_creation = TRUE;
-
- shell_folder_selection_dialog->priv = priv;
-}
-
-
-/* ETable callbacks. */
-
-static void
-folder_selected_cb (EStorageSetView *storage_set_view,
- const char *path,
- void *data)
-{
- EShellFolderSelectionDialog *dialog;
-
- dialog = E_SHELL_FOLDER_SELECTION_DIALOG (data);
-
- if (check_folder_type_valid (dialog))
- gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog), GTK_RESPONSE_OK, TRUE);
- else
- gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog), GTK_RESPONSE_OK, FALSE);
-}
-
-static void
-double_click_cb (EStorageSetView *essv,
- int row,
- ETreePath path,
- int col,
- GdkEvent *event,
- EShellFolderSelectionDialog *folder_selection_dialog)
-{
- g_return_if_fail (folder_selection_dialog != NULL);
-
- if (check_folder_type_valid (folder_selection_dialog)) {
- g_signal_emit (folder_selection_dialog, signals[FOLDER_SELECTED], 0,
- e_shell_folder_selection_dialog_get_selected_path (folder_selection_dialog));
- gtk_widget_destroy (GTK_WIDGET (folder_selection_dialog));
- }
-}
-
-
-/**
- * e_shell_folder_selection_dialog_construct:
- * @folder_selection_dialog: A folder selection dialog widget
- * @shell: The this folder selection dialog is for
- * @title: Title of the window
- * @caption: A brief text to be put on top of the storage view
- * @default_uri: The URI of the folder to be selected by default
- * @allowed_types: List of the names of the allowed types
- *
- * Construct @folder_selection_dialog.
- **/
-void
-e_shell_folder_selection_dialog_construct (EShellFolderSelectionDialog *folder_selection_dialog,
- EShell *shell,
- const char *title,
- const char *caption,
- const char *default_uri,
- const char *allowed_types[],
- gboolean allow_creation)
-{
- EShellFolderSelectionDialogPrivate *priv;
- GtkWidget *scrolled_window;
- GtkWidget *caption_label;
- int i;
- char *filename;
-
- g_return_if_fail (folder_selection_dialog != NULL);
- g_return_if_fail (E_IS_SHELL_FOLDER_SELECTION_DIALOG (folder_selection_dialog));
- g_return_if_fail (shell != NULL);
- g_return_if_fail (E_IS_SHELL (shell));
-
- priv = folder_selection_dialog->priv;
-
- /* Basic dialog setup. */
-
- gtk_window_set_default_size (GTK_WINDOW (folder_selection_dialog), 350, 300);
- gtk_window_set_modal (GTK_WINDOW (folder_selection_dialog), TRUE);
- gtk_window_set_title (GTK_WINDOW (folder_selection_dialog), title);
- gtk_container_set_border_width (GTK_CONTAINER (folder_selection_dialog), 6);
-
- if (allow_creation)
- gtk_dialog_add_buttons (GTK_DIALOG (folder_selection_dialog),
- GTK_STOCK_NEW, RESPONSE_NEW,
- NULL);
-
- gtk_dialog_add_buttons (GTK_DIALOG (folder_selection_dialog),
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- GTK_STOCK_OK, GTK_RESPONSE_OK,
- NULL);
-
- gtk_dialog_set_response_sensitive (GTK_DIALOG (folder_selection_dialog), GTK_RESPONSE_OK, FALSE);
- gtk_dialog_set_default_response (GTK_DIALOG (folder_selection_dialog), GTK_RESPONSE_OK);
-
- /* Make sure we get destroyed if the shell gets destroyed. */
-
- priv->shell = shell;
- g_object_weak_ref (G_OBJECT (shell), (GWeakNotify) gtk_widget_destroy, folder_selection_dialog);
-
- /* Set up the label. */
-
- if (caption != NULL) {
- caption_label = gtk_label_new (caption);
- gtk_label_set_justify (GTK_LABEL (caption_label), GTK_JUSTIFY_LEFT);
- gtk_widget_show (caption_label);
-
- gtk_box_pack_start (GTK_BOX (GTK_DIALOG (folder_selection_dialog)->vbox),
- caption_label, FALSE, TRUE, 6);
- gtk_box_set_spacing (GTK_BOX (GTK_DIALOG (folder_selection_dialog)->vbox),
- 6);
-
-
- }
-
- /* Set up the storage set and its view. */
-
- priv->storage_set = e_shell_get_storage_set (shell);
- g_object_ref (priv->storage_set);
-
- priv->storage_set_view = e_storage_set_create_new_view (priv->storage_set, NULL);
- e_storage_set_view_set_allow_dnd (E_STORAGE_SET_VIEW (priv->storage_set_view), FALSE);
- e_storage_set_view_enable_search (E_STORAGE_SET_VIEW (priv->storage_set_view), TRUE);
-
- /* Load the expanded state for this StorageSetView */
- filename = g_strdup_printf ("%s/config/storage-set-view-expanded:folder-selection-dialog",
- e_shell_get_local_directory (priv->shell));
-
- e_tree_load_expanded_state (E_TREE (priv->storage_set_view),
- filename);
-
- g_free (filename);
-
- g_signal_connect (priv->storage_set_view, "double_click", G_CALLBACK (double_click_cb), folder_selection_dialog);
- g_signal_connect (priv->storage_set_view, "folder_selected", G_CALLBACK (folder_selected_cb), folder_selection_dialog);
-
- g_assert (priv->allowed_types == NULL);
- if (allowed_types != NULL) {
- for (i = 0; allowed_types[i] != NULL; i++)
- priv->allowed_types = g_list_prepend (priv->allowed_types,
- g_strdup (allowed_types[i]));
-
- /* Preserve the order so we can use the first type listed as
- the default for the folder creation dialog invoked by the
- "New..." button. */
- priv->allowed_types = g_list_reverse (priv->allowed_types);
- }
-
- if (default_uri != NULL)
- set_default_folder (folder_selection_dialog, default_uri);
-
- scrolled_window = gtk_scrolled_window_new (NULL, NULL);
- gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window), GTK_SHADOW_IN);
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
- GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
-
- gtk_container_add (GTK_CONTAINER (scrolled_window), priv->storage_set_view);
-
- gtk_box_pack_start (GTK_BOX (GTK_DIALOG (folder_selection_dialog)->vbox),
- scrolled_window, TRUE, TRUE, 6);
- gtk_box_set_spacing (GTK_BOX (GTK_DIALOG (folder_selection_dialog)->vbox), 6);
-
- gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (folder_selection_dialog)->vbox), 6);
-
- gtk_widget_show (priv->storage_set_view);
- gtk_widget_show (scrolled_window);
-
- GTK_WIDGET_SET_FLAGS (priv->storage_set_view, GTK_CAN_FOCUS);
- gtk_widget_grab_focus (priv->storage_set_view);
-}
-
-/**
- * e_shell_folder_selection_dialog_new:
- * @shell: The this folder selection dialog is for
- * @title: Title of the window
- * @caption: A brief text to be put on top of the storage view
- * @default_uri: The URI of the folder to be selected by default
- * @allowed_types: List of the names of the allowed types
- *
- * Create a new folder selection dialog widget. @default_uri can be either an
- * `evolution:' URI or a physical URI (all the non-`evolution:' URIs are
- * considered to be physical URIs).
- *
- * Return value:
- **/
-GtkWidget *
-e_shell_folder_selection_dialog_new (EShell *shell,
- const char *title,
- const char *caption,
- const char *default_uri,
- const char *allowed_types[],
- gboolean allow_creation)
-{
- EShellFolderSelectionDialog *folder_selection_dialog;
-
- g_return_val_if_fail (shell != NULL, NULL);
- g_return_val_if_fail (E_IS_SHELL (shell), NULL);
-
- folder_selection_dialog = g_object_new (e_shell_folder_selection_dialog_get_type (), NULL);
- e_shell_folder_selection_dialog_construct (folder_selection_dialog, shell,
- title, caption, default_uri, allowed_types,
- allow_creation);
-
- return GTK_WIDGET (folder_selection_dialog);
-}
-
-
-const char *
-e_shell_folder_selection_dialog_get_selected_path (EShellFolderSelectionDialog *folder_selection_dialog)
-{
- EShellFolderSelectionDialogPrivate *priv;
-
- g_return_val_if_fail (folder_selection_dialog != NULL, NULL);
- g_return_val_if_fail (E_IS_SHELL_FOLDER_SELECTION_DIALOG (folder_selection_dialog), NULL);
-
- priv = folder_selection_dialog->priv;
-
- return e_storage_set_view_get_current_folder (E_STORAGE_SET_VIEW (priv->storage_set_view));
-}
-
-
-E_MAKE_TYPE (e_shell_folder_selection_dialog, "EShellFolderSelectionDialog", EShellFolderSelectionDialog,
- class_init, init, PARENT_TYPE)
diff --git a/shell/e-shell-folder-selection-dialog.h b/shell/e-shell-folder-selection-dialog.h
deleted file mode 100644
index 05b1e46281..0000000000
--- a/shell/e-shell-folder-selection-dialog.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-shell-folder-selection-dialog.h
- *
- * Copyright (C) 2000 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifndef E_SHELL_FOLDER_SELECTION_DIALOG_H
-#define E_SHELL_FOLDER_SELECTION_DIALOG_H
-
-#include <gtk/gtkdialog.h>
-
-#include "e-shell.h"
-
-#ifdef cplusplus
-extern "C" {
-#pragma }
-#endif /* cplusplus */
-
-#define E_TYPE_SHELL_FOLDER_SELECTION_DIALOG (e_shell_folder_selection_dialog_get_type ())
-#define E_SHELL_FOLDER_SELECTION_DIALOG(obj) (GTK_CHECK_CAST ((obj), E_TYPE_SHELL_FOLDER_SELECTION_DIALOG, EShellFolderSelectionDialog))
-#define E_SHELL_FOLDER_SELECTION_DIALOG_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_SHELL_FOLDER_SELECTION_DIALOG, EShellFolderSelectionDialogClass))
-#define E_IS_SHELL_FOLDER_SELECTION_DIALOG(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_SHELL_FOLDER_SELECTION_DIALOG))
-#define E_IS_SHELL_FOLDER_SELECTION_DIALOG_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_SHELL_FOLDER_SELECTION_DIALOG))
-
-
-typedef struct _EShellFolderSelectionDialog EShellFolderSelectionDialog;
-typedef struct _EShellFolderSelectionDialogPrivate EShellFolderSelectionDialogPrivate;
-typedef struct _EShellFolderSelectionDialogClass EShellFolderSelectionDialogClass;
-
-struct _EShellFolderSelectionDialog {
- GtkDialog parent;
-
- EShellFolderSelectionDialogPrivate *priv;
-};
-
-struct _EShellFolderSelectionDialogClass {
- GtkDialogClass parent_class;
-
- void (* folder_selected) (EShellFolderSelectionDialog *folder_selection_dialog,
- const char *path);
- void (* cancelled) (EShellFolderSelectionDialog *folder_selection_dialog);
-};
-
-
-GtkType e_shell_folder_selection_dialog_get_type (void);
-void e_shell_folder_selection_dialog_construct (EShellFolderSelectionDialog *folder_selection_dialog,
- EShell *shell,
- const char *title,
- const char *caption,
- const char *default_uri,
- const char *allowed_types[],
- gboolean allow_creation);
-GtkWidget *e_shell_folder_selection_dialog_new (EShell *shell,
- const char *title,
- const char *caption,
- const char *default_uri,
- const char *allowed_types[],
- gboolean allow_creation);
-
-const char *e_shell_folder_selection_dialog_get_selected_path (EShellFolderSelectionDialog *folder_selection_dialog);
-
-#ifdef cplusplus
-}
-#endif /* cplusplus */
-
-#endif /* E_SHELL_FOLDER_SELECTION_DIALOG_H */
diff --git a/shell/e-shell-folder-title-bar.c b/shell/e-shell-folder-title-bar.c
deleted file mode 100644
index 9871a9c1d1..0000000000
--- a/shell/e-shell-folder-title-bar.c
+++ /dev/null
@@ -1,749 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-shell-folder-title-bar.c
- *
- * Copyright (C) 2000, 2001 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <string.h>
-#include <gtk/gtkarrow.h>
-#include <gtk/gtklabel.h>
-#include <gtk/gtkimage.h>
-#include <gtk/gtkrc.h>
-#include <gtk/gtksignal.h>
-#include <gtk/gtktogglebutton.h>
-#include <libgnome/gnome-i18n.h>
-#include <gdk-pixbuf/gdk-pixbuf.h>
-
-#include <gal/util/e-util.h>
-
-#include "widgets/misc/e-clipped-label.h"
-#include "e-shell-constants.h"
-#include "e-shell-marshal.h"
-#include "e-shell-folder-title-bar.h"
-
-
-#define PARENT_TYPE GTK_TYPE_HBOX
-static GtkHBox *parent_class = NULL;
-
-struct _EShellFolderTitleBarPrivate {
- GdkPixbuf *icon;
-
- /* We have an icon, a label and a button that contains an icon and a
- label. When the button is enabled, the stand-alone label icon get
- hidden; when the button is disabled, the button gets hidden and the
- label and the icon get shown. This is pretty ugly but it easier to
- manage the GTK layout this way. */
-
- /* The stand-alone icon/label combo. */
- GtkWidget *title_icon;
- GtkWidget *title_label;
-
- /* The button. */
- GtkWidget *title_button;
- GtkWidget *title_button_icon;
- GtkWidget *title_button_label;
- GtkWidget *title_button_arrow;
-
- /* Holds extra information that is to be shown on the bar. */
- GtkWidget *folder_bar_label;
-
- /* Navigation buttons. */
- GtkWidget *back_button;
- GtkWidget *forward_button;
-
- gboolean title_clickable;
-};
-
-enum {
- TITLE_TOGGLED,
- BACK_CLICKED,
- FORWARD_CLICKED,
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = { 0 };
-
-
-/* Utility functions for managing icons and icon widgets. */
-
-static GdkPixbuf *
-new_empty_pixbuf (void)
-{
- GdkPixbuf *empty_pixbuf;
- unsigned char *pixels;
-
- empty_pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, TRUE, 8, 1, 1);
- pixels = gdk_pixbuf_get_pixels (empty_pixbuf);
-
- memset (pixels, 0, 4);
-
- return empty_pixbuf;
-}
-
-static GtkWidget *
-new_empty_image_widget (void)
-{
- GtkWidget *image_widget;
- GdkPixmap *pixmap;
- GdkBitmap *mask;
- GdkPixbuf *empty_pixbuf;
-
- empty_pixbuf = new_empty_pixbuf ();
-
- gdk_pixbuf_render_pixmap_and_mask (empty_pixbuf, &pixmap, &mask, 127);
- image_widget = gtk_image_new_from_pixmap (pixmap, mask);
-
- g_object_unref (empty_pixbuf);
-
- return image_widget;
-}
-
-
-/* Utility functions. */
-
-static int
-get_max_clipped_label_width (EClippedLabel *clipped_label)
-{
- int width;
-
- pango_layout_get_pixel_size (clipped_label->layout, &width, NULL);
- width += 2 * GTK_MISC (clipped_label)->xpad;
-
- return width;
-}
-
-static void
-size_allocate_title_button (EShellFolderTitleBar *title_bar,
- GtkAllocation *allocation,
- int offset,
- int *available_width_inout)
-{
- EShellFolderTitleBarPrivate *priv;
- GtkAllocation child_allocation;
- GtkRequisition child_requisition;
- int border_width;
-
- priv = title_bar->priv;
-
- /* Keep a little distance from the navigation arrows. */
- allocation->x += 2;
-
- border_width = GTK_CONTAINER (title_bar)->border_width;
-
- gtk_widget_get_child_requisition (priv->title_button, &child_requisition);
- child_allocation.x = allocation->x + border_width + offset;
- child_allocation.y = allocation->y + border_width;
- child_allocation.height = allocation->height - 2 * border_width;
-
- child_allocation.width = child_requisition.width;
- child_allocation.width += get_max_clipped_label_width (E_CLIPPED_LABEL (priv->title_button_label));
-
- child_allocation.width = MIN (child_allocation.width, *available_width_inout);
-
- gtk_widget_size_allocate (priv->title_button, & child_allocation);
-
- *available_width_inout -= child_allocation.width;
-}
-
-static int
-size_allocate_navigation_buttons_and_title_icon (EShellFolderTitleBar *title_bar,
- GtkAllocation *allocation)
-{
- EShellFolderTitleBarPrivate *priv;
- GtkRequisition child_requisition;
- GtkAllocation child_allocation;
- int border_width;
-
- priv = title_bar->priv;
-
- border_width = GTK_CONTAINER (title_bar)->border_width;
-
- child_allocation.x = allocation->x + border_width;
- child_allocation.y = allocation->y + border_width;
- child_allocation.height = allocation->height - 2 * border_width;
-
- gtk_widget_size_request (priv->back_button, &child_requisition);
- child_allocation.width = child_requisition.width;
- gtk_widget_size_allocate (priv->back_button, &child_allocation);
-
- child_allocation.x += child_allocation.width;
-
- gtk_widget_size_request (priv->forward_button, &child_requisition);
- child_allocation.width = child_requisition.width;
- gtk_widget_size_allocate (priv->forward_button, &child_allocation);
-
- if (! priv->title_clickable) {
- /* Keep a little distance from the navigation arrows. */
- child_allocation.x += child_allocation.width + 5;
-
- gtk_widget_size_request (priv->title_icon, &child_requisition);
- child_allocation.width = child_requisition.width;
- gtk_widget_size_allocate (priv->title_icon, &child_allocation);
- }
-
- return child_allocation.x + child_allocation.width;
-}
-
-static void
-size_allocate_label (EShellFolderTitleBar *title_bar,
- GtkAllocation *allocation,
- int offset,
- int *available_width_inout)
-{
- EShellFolderTitleBarPrivate *priv;
- GtkAllocation child_allocation;
- int border_width;
-
- priv = title_bar->priv;
-
- border_width = GTK_CONTAINER (title_bar)->border_width;
-
- child_allocation.x = allocation->x + border_width + offset;
- child_allocation.y = allocation->y + border_width;
- child_allocation.height = allocation->height - 2 * border_width;
-
- child_allocation.width = MIN (get_max_clipped_label_width (E_CLIPPED_LABEL (priv->title_label)),
- *available_width_inout);
-
- gtk_widget_size_allocate (priv->title_label, & child_allocation);
-
- *available_width_inout -= child_allocation.width;
-}
-
-
-/* The back/forward navigation buttons. */
-
-static void
-back_button_clicked_callback (GtkButton *button,
- void *data)
-{
- EShellFolderTitleBar *folder_title_bar;
-
- folder_title_bar = E_SHELL_FOLDER_TITLE_BAR (data);
-
- g_signal_emit (folder_title_bar, signals[BACK_CLICKED], 0);
-}
-
-static void
-forward_button_clicked_callback (GtkButton *button,
- void *data)
-{
- EShellFolderTitleBar *folder_title_bar;
-
- folder_title_bar = E_SHELL_FOLDER_TITLE_BAR (data);
-
- g_signal_emit (folder_title_bar, signals[FORWARD_CLICKED], 0);
-}
-
-static void
-add_navigation_buttons (EShellFolderTitleBar *folder_title_bar)
-{
- EShellFolderTitleBarPrivate *priv;
- GtkWidget *back_image;
- GtkWidget *forward_image;
-
- priv = folder_title_bar->priv;
-
- priv->back_button = gtk_button_new ();
- gtk_button_set_relief (GTK_BUTTON (priv->back_button), GTK_RELIEF_NONE);
- GTK_WIDGET_UNSET_FLAGS (priv->back_button, GTK_CAN_FOCUS);
-
- back_image = gtk_arrow_new (GTK_ARROW_LEFT, GTK_SHADOW_NONE);
- gtk_container_add (GTK_CONTAINER (priv->back_button), back_image);
-
- g_signal_connect (priv->back_button, "clicked",
- G_CALLBACK (back_button_clicked_callback), folder_title_bar);
-
- priv->forward_button = gtk_button_new ();
- gtk_button_set_relief (GTK_BUTTON (priv->forward_button), GTK_RELIEF_NONE);
- GTK_WIDGET_UNSET_FLAGS (priv->forward_button, GTK_CAN_FOCUS);
-
- forward_image = gtk_arrow_new (GTK_ARROW_RIGHT, GTK_SHADOW_NONE);
- gtk_container_add (GTK_CONTAINER (priv->forward_button), forward_image);
-
- g_signal_connect (priv->forward_button, "clicked",
- G_CALLBACK (forward_button_clicked_callback), folder_title_bar);
-
- gtk_box_pack_start (GTK_BOX (folder_title_bar), priv->back_button, FALSE, FALSE, 0);
- gtk_box_pack_start (GTK_BOX (folder_title_bar), priv->forward_button, FALSE, FALSE, 0);
-
- gtk_widget_show_all (priv->back_button);
- gtk_widget_show_all (priv->forward_button);
-}
-
-
-/* Popup button callback. */
-
-static void
-title_button_toggled_cb (GtkToggleButton *title_button,
- void *data)
-{
- EShellFolderTitleBar *folder_title_bar;
-
- folder_title_bar = E_SHELL_FOLDER_TITLE_BAR (data);
-
- g_signal_emit (folder_title_bar, signals[TITLE_TOGGLED], 0,
- gtk_toggle_button_get_active (title_button));
-}
-
-
-/* GObject methods. */
-
-static void
-impl_dispose (GObject *object)
-{
- EShellFolderTitleBar *folder_title_bar;
- EShellFolderTitleBarPrivate *priv;
-
- folder_title_bar = E_SHELL_FOLDER_TITLE_BAR (object);
- priv = folder_title_bar->priv;
-
- if (priv->icon != NULL) {
- g_object_unref (priv->icon);
- priv->icon = NULL;
- }
-
- (* G_OBJECT_CLASS (parent_class)->dispose) (object);
-}
-
-static void
-impl_finalize (GObject *object)
-{
- EShellFolderTitleBar *folder_title_bar;
- EShellFolderTitleBarPrivate *priv;
-
- folder_title_bar = E_SHELL_FOLDER_TITLE_BAR (object);
- priv = folder_title_bar->priv;
-
- g_free (priv);
-
- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
-}
-
-
-/* GTkWidget methods. */
-
-static void
-impl_size_allocate (GtkWidget *widget,
- GtkAllocation *allocation)
-{
- EShellFolderTitleBar *title_bar;
- EShellFolderTitleBarPrivate *priv;
- GtkAllocation label_allocation;
- int border_width;
- int available_width;
- int width_before_icon;
- int offset;
-
- title_bar = E_SHELL_FOLDER_TITLE_BAR (widget);
- priv = title_bar->priv;
-
- border_width = GTK_CONTAINER (widget)->border_width;
- available_width = allocation->width - 2 * border_width;
-
- offset = size_allocate_navigation_buttons_and_title_icon (title_bar, allocation);
- available_width -= offset;
-
- width_before_icon = available_width;
-
- if (priv->title_clickable)
- size_allocate_title_button (title_bar, allocation, offset, & available_width);
- else
- size_allocate_label (title_bar, allocation, offset, & available_width);
-
- label_allocation.x = allocation->x + width_before_icon - available_width - border_width + offset;
- label_allocation.y = allocation->y + border_width;
- label_allocation.width = available_width - 2 * border_width;
- label_allocation.height = allocation->height - 2 * border_width;
-
- gtk_widget_size_allocate (priv->folder_bar_label, & label_allocation);
-
- widget->allocation = *allocation;
-}
-
-
-static int
-impl_expose_event (GtkWidget *widget,
- GdkEventExpose *event)
-{
- gtk_paint_flat_box (widget->style, widget->window,
- GTK_STATE_ACTIVE, GTK_SHADOW_OUT,
- &event->area, widget, "EShellFolderTitleBar",
- widget->allocation.x,
- widget->allocation.y,
- widget->allocation.width,
- widget->allocation.height);
-
- (* GTK_WIDGET_CLASS (parent_class)->expose_event) (widget, event);
-
- return FALSE;
-}
-
-
-static void
-class_init (EShellFolderTitleBarClass *klass)
-{
- GObjectClass *object_class;
- GtkWidgetClass *widget_class;
-
- object_class = G_OBJECT_CLASS (klass);
- object_class->dispose = impl_dispose;
- object_class->finalize = impl_finalize;
-
- widget_class = GTK_WIDGET_CLASS (klass);
- widget_class->size_allocate = impl_size_allocate;
- widget_class->expose_event = impl_expose_event;
-
- parent_class = g_type_class_ref(PARENT_TYPE);
-
- signals[TITLE_TOGGLED]
- = g_signal_new ("title_toggled",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EShellFolderTitleBarClass, title_toggled),
- NULL, NULL,
- e_shell_marshal_NONE__BOOL,
- G_TYPE_NONE, 1,
- G_TYPE_BOOLEAN);
-
- signals[BACK_CLICKED]
- = g_signal_new ("back_clicked",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EShellFolderTitleBarClass, back_clicked),
- NULL, NULL,
- e_shell_marshal_NONE__NONE,
- G_TYPE_NONE, 0);
-
- signals[FORWARD_CLICKED]
- = g_signal_new ("forward_clicked",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EShellFolderTitleBarClass, forward_clicked),
- NULL, NULL,
- e_shell_marshal_NONE__NONE,
- G_TYPE_NONE, 0);
-}
-
-static void
-init (EShellFolderTitleBar *shell_folder_title_bar)
-{
- EShellFolderTitleBarPrivate *priv;
-
- priv = g_new (EShellFolderTitleBarPrivate, 1);
-
- priv->icon = NULL;
-
- priv->title_icon = NULL;
- priv->title_label = NULL;
-
- priv->title_button = NULL;
- priv->title_button_icon = NULL;
- priv->title_button_label = NULL;
- priv->title_button_arrow = NULL;
-
- priv->folder_bar_label = NULL;
-
- priv->back_button = NULL;
- priv->forward_button = NULL;
-
- priv->title_clickable = TRUE;
-
- shell_folder_title_bar->priv = priv;
-}
-
-
-/**
- * e_shell_folder_title_bar_construct:
- * @folder_title_bar:
- *
- * Construct the folder title bar widget.
- **/
-void
-e_shell_folder_title_bar_construct (EShellFolderTitleBar *folder_title_bar)
-{
- EShellFolderTitleBarPrivate *priv;
- GtkWidget *title_button_hbox;
- GtkWidget *widget;
-
- g_return_if_fail (folder_title_bar != NULL);
- g_return_if_fail (E_IS_SHELL_FOLDER_TITLE_BAR (folder_title_bar));
-
- priv = folder_title_bar->priv;
- widget = GTK_WIDGET (folder_title_bar);
-
- priv->title_icon = new_empty_image_widget ();
- gtk_misc_set_alignment (GTK_MISC (priv->title_icon), 1.0, .5);
- gtk_misc_set_padding (GTK_MISC (priv->title_icon), 2, 0);
- gtk_widget_show (priv->title_icon);
-
- priv->title_label = e_clipped_label_new ("", PANGO_WEIGHT_BOLD, 1.2);
- gtk_misc_set_padding (GTK_MISC (priv->title_label), 0, 0);
- gtk_misc_set_alignment (GTK_MISC (priv->title_label), 0.0, 0.5);
-
- priv->title_button_label = e_clipped_label_new ("", PANGO_WEIGHT_BOLD, 1.2);
- gtk_misc_set_padding (GTK_MISC (priv->title_button_label), 2, 0);
- gtk_misc_set_alignment (GTK_MISC (priv->title_button_label), 0.0, 0.5);
- gtk_widget_show (priv->title_button_label);
-
- priv->folder_bar_label = e_clipped_label_new ("", PANGO_WEIGHT_NORMAL, 1.0);
- gtk_misc_set_alignment (GTK_MISC (priv->folder_bar_label), 1.0, 0.5);
- gtk_widget_show (priv->folder_bar_label);
-
- priv->title_button_icon = new_empty_image_widget ();
- gtk_widget_show (priv->title_button_icon);
-
- title_button_hbox = gtk_hbox_new (FALSE, 0);
- gtk_box_pack_start (GTK_BOX (title_button_hbox), priv->title_button_icon,
- FALSE, TRUE, 2);
- gtk_box_pack_start (GTK_BOX (title_button_hbox), priv->title_button_label,
- TRUE, TRUE, 0);
- gtk_box_pack_start (GTK_BOX (title_button_hbox), gtk_arrow_new (GTK_ARROW_DOWN, GTK_SHADOW_NONE),
- FALSE, TRUE, 2);
- gtk_widget_show (title_button_hbox);
-
- priv->title_button = gtk_toggle_button_new ();
- gtk_button_set_relief (GTK_BUTTON (priv->title_button), GTK_RELIEF_NONE);
- gtk_container_add (GTK_CONTAINER (priv->title_button), title_button_hbox);
- GTK_WIDGET_UNSET_FLAGS (priv->title_button, GTK_CAN_FOCUS);
- gtk_widget_show (priv->title_button);
-
- gtk_container_set_border_width (GTK_CONTAINER (folder_title_bar), 2);
- gtk_box_pack_start (GTK_BOX (folder_title_bar), priv->title_icon, FALSE, TRUE, 0);
- gtk_box_pack_start (GTK_BOX (folder_title_bar), priv->title_label, FALSE, FALSE, 0);
- gtk_box_pack_start (GTK_BOX (folder_title_bar), priv->title_button, FALSE, FALSE, 0);
- gtk_box_pack_start (GTK_BOX (folder_title_bar), priv->folder_bar_label, TRUE, TRUE, 0);
-
- /* Make the label have a border as large as the button's.
- FIXME: This is really hackish. The hardcoded numbers should be OK
- as the padding is hardcoded in GtkButton too (see CHILD_SPACING in
- gtkbutton.c). */
- gtk_misc_set_padding (GTK_MISC (priv->title_label),
- GTK_WIDGET (priv->title_button)->style->xthickness,
- GTK_WIDGET (priv->title_button)->style->ythickness + 2);
-
- g_signal_connect (priv->title_button, "toggled",
- G_CALLBACK (title_button_toggled_cb), folder_title_bar);
-
- add_navigation_buttons (folder_title_bar);
-
- e_shell_folder_title_bar_set_title (folder_title_bar, NULL);
-}
-
-/**
- * e_shell_folder_title_bar_new:
- * @void:
- *
- * Create a new title bar widget.
- *
- * Return value:
- **/
-GtkWidget *
-e_shell_folder_title_bar_new (void)
-{
- EShellFolderTitleBar *new;
-
- new = g_object_new (e_shell_folder_title_bar_get_type (), NULL);
-
- e_shell_folder_title_bar_construct (new);
-
- return GTK_WIDGET (new);
-}
-
-/**
- * e_shell_folder_title_bar_set_title:
- * @folder_title_bar:
- * @title:
- *
- * Set the title for the title bar.
- **/
-void
-e_shell_folder_title_bar_set_title (EShellFolderTitleBar *folder_title_bar,
- const char *title)
-{
- EShellFolderTitleBarPrivate *priv;
-
- g_return_if_fail (folder_title_bar != NULL);
- g_return_if_fail (E_IS_SHELL_FOLDER_TITLE_BAR (folder_title_bar));
-
- priv = folder_title_bar->priv;
-
- if (title == NULL) {
- e_clipped_label_set_text (E_CLIPPED_LABEL (priv->title_button_label), _("(Untitled)"));
- e_clipped_label_set_text (E_CLIPPED_LABEL (priv->title_label), _("(Untitled)"));
- } else {
- e_clipped_label_set_text (E_CLIPPED_LABEL (priv->title_button_label), title);
- e_clipped_label_set_text (E_CLIPPED_LABEL (priv->title_label), title);
- }
-
- /* FIXME: There seems to be a bug in EClippedLabel, this is just a workaround. */
- gtk_widget_queue_resize (GTK_WIDGET (folder_title_bar));
-}
-
-/**
- * e_shell_folder_title_bar_set_folder_bar_label:
- * @folder_title_bar:
- * @text: Some text to show in the label.
- *
- * Sets the right-justified text label (to the left of the icon) for
- * the title bar.
- **/
-void
-e_shell_folder_title_bar_set_folder_bar_label (EShellFolderTitleBar *folder_title_bar,
- const char *text)
-{
- EShellFolderTitleBarPrivate *priv;
-
- g_return_if_fail (folder_title_bar != NULL);
- g_return_if_fail (E_IS_SHELL_FOLDER_TITLE_BAR (folder_title_bar));
-
- priv = folder_title_bar->priv;
-
- if (text == NULL)
- e_clipped_label_set_text (E_CLIPPED_LABEL (priv->folder_bar_label), "");
- else
- e_clipped_label_set_text (E_CLIPPED_LABEL (priv->folder_bar_label), text);
-
- /* FIXME: Might want to set the styles somewhere in here too,
- black text on grey background isn't the best combination */
-
- gtk_widget_queue_resize (GTK_WIDGET (folder_title_bar));
-}
-
-/**
- * e_shell_folder_title_bar_set_icon:
- * @folder_title_bar:
- * @icon:
- *
- * Set the name of the icon for the title bar.
- **/
-void
-e_shell_folder_title_bar_set_icon (EShellFolderTitleBar *folder_title_bar,
- GdkPixbuf *icon)
-{
- EShellFolderTitleBarPrivate *priv;
- GdkPixmap *pixmap;
- GdkBitmap *mask;
-
- g_return_if_fail (folder_title_bar != NULL);
- g_return_if_fail (E_IS_SHELL_FOLDER_TITLE_BAR (folder_title_bar));
-
- priv = folder_title_bar->priv;
-
- if (icon == NULL) {
- if (priv->icon != NULL)
- g_object_unref (priv->icon);
- priv->icon = new_empty_pixbuf ();
- } else {
- g_object_ref (icon);
- if (priv->icon != NULL)
- g_object_unref (priv->icon);
- priv->icon = icon;
- }
-
- gdk_pixbuf_render_pixmap_and_mask (priv->icon, &pixmap, &mask, 127);
- gtk_image_set_from_pixmap (GTK_IMAGE (priv->title_button_icon), pixmap, mask);
-
- gdk_pixbuf_render_pixmap_and_mask (priv->icon, &pixmap, &mask, 127);
- gtk_image_set_from_pixmap (GTK_IMAGE (priv->title_icon), pixmap, mask);
-}
-
-
-/**
- * e_shell_folder_title_bar_set_toggle_state:
- * @folder_title_bar:
- * @state:
- *
- * Set whether the title bar's button is in pressed state (TRUE) or not (FALSE).
- **/
-void
-e_shell_folder_title_bar_set_toggle_state (EShellFolderTitleBar *folder_title_bar,
- gboolean state)
-{
- EShellFolderTitleBarPrivate *priv;
-
- g_return_if_fail (folder_title_bar != NULL);
- g_return_if_fail (E_IS_SHELL_FOLDER_TITLE_BAR (folder_title_bar));
-
- priv = folder_title_bar->priv;
-
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->title_button), state);
-}
-
-/**
- * e_shell_folder_title_bar_set_clickable:
- * @folder_title_bar:
- * @clickable:
- *
- * Specify whether the title in the @folder_title_bar is clickable. If not,
- * the arrow pixmap is not shown.
- **/
-void
-e_shell_folder_title_bar_set_title_clickable (EShellFolderTitleBar *folder_title_bar,
- gboolean title_clickable)
-{
- EShellFolderTitleBarPrivate *priv;
-
- g_return_if_fail (folder_title_bar != NULL);
- g_return_if_fail (E_IS_SHELL_FOLDER_TITLE_BAR (folder_title_bar));
-
- priv = folder_title_bar->priv;
-
- if ((priv->title_clickable && title_clickable)
- || (! priv->title_clickable && ! title_clickable))
- return;
-
- if (title_clickable) {
- gtk_widget_hide (priv->title_label);
- gtk_widget_hide (priv->title_icon);
-
- gtk_widget_show_all (priv->title_button);
- } else {
- gtk_widget_hide (priv->title_button);
-
- gtk_widget_show (priv->title_icon);
- gtk_widget_show (priv->title_label);
- }
-
- priv->title_clickable = !! title_clickable;
-}
-
-
-void
-e_shell_folder_title_bar_update_navigation_buttons (EShellFolderTitleBar *folder_title_bar,
- gboolean can_go_back,
- gboolean can_go_forward)
-{
- EShellFolderTitleBarPrivate *priv;
-
- g_return_if_fail (folder_title_bar != NULL);
- g_return_if_fail (E_IS_SHELL_FOLDER_TITLE_BAR (folder_title_bar));
-
- priv = folder_title_bar->priv;
-
- gtk_widget_set_sensitive (priv->back_button, can_go_back);
- gtk_widget_set_sensitive (priv->forward_button, can_go_forward);
-}
-
-
-E_MAKE_TYPE (e_shell_folder_title_bar, "EShellFolderTitleBar", EShellFolderTitleBar, class_init, init, PARENT_TYPE)
diff --git a/shell/e-shell-folder-title-bar.h b/shell/e-shell-folder-title-bar.h
deleted file mode 100644
index 274e590ef7..0000000000
--- a/shell/e-shell-folder-title-bar.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-shell-folder-title-bar.h
- *
- * Copyright (C) 2000 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifndef __E_SHELL_FOLDER_TITLE_BAR_H__
-#define __E_SHELL_FOLDER_TITLE_BAR_H__
-
-#include <gtk/gtkhbox.h>
-#include <gdk-pixbuf/gdk-pixbuf.h>
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-#define E_TYPE_SHELL_FOLDER_TITLE_BAR (e_shell_folder_title_bar_get_type ())
-#define E_SHELL_FOLDER_TITLE_BAR(obj) (GTK_CHECK_CAST ((obj), E_TYPE_SHELL_FOLDER_TITLE_BAR, EShellFolderTitleBar))
-#define E_SHELL_FOLDER_TITLE_BAR_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_SHELL_FOLDER_TITLE_BAR, EShellFolderTitleBarClass))
-#define E_IS_SHELL_FOLDER_TITLE_BAR(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_SHELL_FOLDER_TITLE_BAR))
-#define E_IS_SHELL_FOLDER_TITLE_BAR_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_SHELL_FOLDER_TITLE_BAR))
-
-
-typedef struct _EShellFolderTitleBar EShellFolderTitleBar;
-typedef struct _EShellFolderTitleBarPrivate EShellFolderTitleBarPrivate;
-typedef struct _EShellFolderTitleBarClass EShellFolderTitleBarClass;
-
-struct _EShellFolderTitleBar {
- GtkHBox parent;
-
- EShellFolderTitleBarPrivate *priv;
-};
-
-struct _EShellFolderTitleBarClass {
- GtkHBoxClass parent_class;
-
- /* Signals. */
- void (* title_toggled) (EShellFolderTitleBar *folder_title_bar, gboolean pressed);
- void (* back_clicked) (EShellFolderTitleBar *folder_title_bar);
- void (* forward_clicked) (EShellFolderTitleBar *folder_title_bar);
-};
-
-
-GtkType e_shell_folder_title_bar_get_type (void);
-void e_shell_folder_title_bar_construct (EShellFolderTitleBar *folder_title_bar);
-GtkWidget *e_shell_folder_title_bar_new (void);
-
-void e_shell_folder_title_bar_set_title (EShellFolderTitleBar *folder_title_bar,
- const char *title);
-void e_shell_folder_title_bar_set_folder_bar_label (EShellFolderTitleBar *folder_title_bar,
- const char *folder_bar_label);
-void e_shell_folder_title_bar_set_icon (EShellFolderTitleBar *folder_title_bar,
- GdkPixbuf *icon);
-void e_shell_folder_title_bar_set_toggle_state (EShellFolderTitleBar *folder_title_bar,
- gboolean state);
-void e_shell_folder_title_bar_set_title_clickable (EShellFolderTitleBar *folder_title_bar,
- gboolean clickable);
-
-void e_shell_folder_title_bar_update_navigation_buttons (EShellFolderTitleBar *folder_title_bar,
- gboolean can_go_back,
- gboolean can_go_forward);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* __E_SHELL_FOLDER_TITLE_BAR_H__ */
diff --git a/shell/e-shell-importer.c b/shell/e-shell-importer.c
deleted file mode 100644
index 309fa313a9..0000000000
--- a/shell/e-shell-importer.c
+++ /dev/null
@@ -1,1235 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* importer.c
- *
- * Copyright (C) 2000 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Iain Holmes <iain@ximian.com>
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#undef GTK_DISABLE_DEPRECATED
-#undef G_DISABLE_DEPRECATED
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>
-
-#include <string.h>
-
-#include <glib.h>
-#include <libgnome/gnome-i18n.h>
-#include <libgnomeui/gnome-druid.h>
-#include <libgnomeui/gnome-druid-page-edge.h>
-#include <libgnomeui/gnome-druid-page-standard.h>
-#include <libgnomeui/gnome-file-entry.h>
-
-#include <bonobo-activation/bonobo-activation.h>
-
-#include <bonobo/bonobo-exception.h>
-#include <bonobo/bonobo-widget.h>
-
-#include "e-shell.h"
-#include "e-shell-view.h"
-#include "e-shell-constants.h"
-#include "e-shell-folder-selection-dialog.h"
-
-#include "importer/evolution-importer-client.h"
-
-#include <glade/glade.h>
-#include <gal/widgets/e-gui-utils.h>
-#include <gal/widgets/e-unicode.h>
-
-#include "e-util/e-gtk-utils.h"
-
-#include "e-shell-importer.h"
-#include "importer/GNOME_Evolution_Importer.h"
-
-typedef struct _ImportDialogFilePage {
- GtkWidget *vbox;
- GtkWidget *filename;
- GtkWidget *filetype;
- GtkWidget *menu;
-
- gboolean need_filename;
-} ImportDialogFilePage;
-
-typedef struct _ImportDialogTypePage {
- GtkWidget *vbox;
- GtkWidget *intelligent;
- GtkWidget *file;
-} ImportDialogTypePage;
-
-typedef struct _ImportDialogImporterPage {
- GtkWidget *vbox;
-
- GList *importers;
- gboolean prepared;
- int running;
-} ImportDialogImporterPage;
-
-typedef struct _ImportData {
- EShell *shell;
- EShellView *view;
-
- GladeXML *wizard;
- GtkWidget *dialog;
- GtkWidget *druid;
- ImportDialogFilePage *filepage;
- ImportDialogTypePage *typepage;
- ImportDialogImporterPage *importerpage;
-
- GtkWidget *filedialog;
- GtkWidget *typedialog;
- GtkWidget *intelligent;
- GnomeDruidPageEdge *start;
- GnomeDruidPageEdge *finish;
- GtkWidget *vbox;
-
- char *choosen_iid;
-} ImportData;
-
-typedef struct _IntelligentImporterData {
- CORBA_Object object;
- Bonobo_Control control;
- GtkWidget *widget;
-
- char *name;
- char *blurb;
- char *iid;
-} IntelligentImporterData;
-
-typedef struct _SelectedImporterData{
- CORBA_Object importer;
- char *iid;
-} SelectedImporterData;
-
-/*
- #define IMPORTER_DEBUG
-*/
-#ifdef IMPORTER_DEBUG
-#define IN g_print ("=====> %s (%d)\n", G_GNUC_FUNCTION, __LINE__)
-#define OUT g_print ("<==== %s (%d)\n", G_GNUC_FUNCTION, __LINE__)
-#else
-#define IN
-#define OUT
-#endif
-
-static struct {
- char *name;
- char *text;
-} info[] = {
- { "type_html",
- N_("Choose the type of importer to run:")
- },
- { "file_html",
- N_("Choose the file that you want to import into Evolution, "
- "and select what type of file it is from the list.\n\n"
- "You can select \"Automatic\" if you do not know, and "
- "Evolution will attempt to work it out.")
- },
- { "intelligent_html",
- N_("Please select the information that you would like to import:")
- }
-};
-#define num_info (sizeof (info) / sizeof (info[0]))
-
-static GtkWidget *
-create_help (const char *name)
-{
- GtkWidget *label;
- int i;
-
- for (i = 0; i < num_info; i++) {
- if (!strcmp (name, info[i].name))
- break;
- }
- g_assert(i != num_info);
-
- label = gtk_label_new(_(info[i].text));
- gtk_widget_show (label);
- gtk_label_set_line_wrap((GtkLabel *)label, TRUE);
-
- return label;
-}
-
-/* Importing functions */
-
-/* Data to be passed around */
-typedef struct _ImporterComponentData {
- EvolutionImporterClient *client;
- EvolutionImporterListener *listener;
- char *filename;
-
- GtkDialog *dialog;
- GtkWidget *contents;
-
- int item;
-
- gboolean stop;
-} ImporterComponentData;
-
-static gboolean importer_timeout_fn (gpointer data);
-static void
-import_cb (EvolutionImporterListener *listener,
- EvolutionImporterResult result,
- gboolean more_items,
- void *data)
-{
- ImporterComponentData *icd = (ImporterComponentData *) data;
- char *label;
-
- IN;
- if (icd->stop != TRUE) {
- if (result == EVOLUTION_IMPORTER_NOT_READY) {
- gtk_timeout_add (500, importer_timeout_fn, data);
- OUT;
- return;
- }
-
- if (result == EVOLUTION_IMPORTER_BUSY) {
- gtk_timeout_add (500, importer_timeout_fn, data);
- OUT;
- return;
- }
-
- if (more_items) {
- label = g_strdup_printf (_("Importing %s\nImporting item %d."),
- icd->filename, ++(icd->item));
- gtk_label_set_text (GTK_LABEL (icd->contents), label);
- g_free (label);
- while (gtk_events_pending ())
- gtk_main_iteration ();
-
- g_idle_add_full (G_PRIORITY_LOW, importer_timeout_fn,
- data, NULL);
- OUT;
- return;
- }
- }
-
- g_free (icd->filename);
- if (icd->dialog != NULL)
- gtk_widget_destroy ((GtkWidget *)icd->dialog);
- bonobo_object_unref (BONOBO_OBJECT (icd->listener));
- g_object_unref (icd->client);
- g_free (icd);
-
- OUT;
-}
-
-static gboolean
-importer_timeout_fn (gpointer data)
-{
- ImporterComponentData *icd = (ImporterComponentData *) data;
- char *label;
-
- IN;
- label = g_strdup_printf (_("Importing %s\nImporting item %d."),
- icd->filename, icd->item);
- gtk_label_set_text (GTK_LABEL (icd->contents), label);
- g_free (label);
- while (gtk_events_pending ())
- gtk_main_iteration ();
-
- evolution_importer_client_process_item (icd->client, icd->listener);
- OUT;
- return FALSE;
-}
-
-static void
-dialog_response_cb (GtkDialog *dialog,
- int button_number,
- ImporterComponentData *icd)
-{
- if (button_number != GTK_RESPONSE_CANCEL)
- return; /* Interesting... */
-
- icd->stop = TRUE;
-}
-
-static void
-dialog_destroy_notify (void *data,
- GObject *where_the_dialog_was)
-{
- ImporterComponentData *icd = (ImporterComponentData *) data;
-
- icd->dialog = NULL;
- icd->stop = TRUE;
-}
-
-struct _IIDInfo {
- char *iid;
- char *name;
-};
-
-static void
-free_iid_list (GList *list)
-{
- for (; list; list = list->next) {
- struct _IIDInfo *iid = list->data;
-
- g_free (iid->iid);
- g_free (iid->name);
- g_free (iid);
- }
-}
-
-static const char *
-get_name_from_component_info (const Bonobo_ServerInfo *info)
-{
- Bonobo_ActivationProperty *property;
- const char *name;
-
- property = bonobo_server_info_prop_find ((Bonobo_ServerInfo *) info, "evolution:menu_name");
- if (property == NULL || property->v._d != Bonobo_ACTIVATION_P_STRING)
- return NULL;
-
- name = property->v._u.value_string;
-
- return name;
-}
-
-static char *
-choose_importer_from_list (GList *importer_list)
-{
- GtkWidget *dialog, *clist;
- GList *p;
- int ans;
- char *iid;
-
- dialog = gtk_dialog_new_with_buttons(_("Select importer"), NULL, GTK_DIALOG_DESTROY_WITH_PARENT,
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- GTK_STOCK_OK, GTK_RESPONSE_OK,
- NULL);
- gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK);
-
- clist = gtk_clist_new (1);
- for (p = importer_list; p; p = p->next) {
- struct _IIDInfo *iid;
- char *text[1];
- int row;
-
- iid = p->data;
- text[0] = iid->name;
- row = gtk_clist_append (GTK_CLIST (clist), text);
- gtk_clist_set_row_data (GTK_CLIST (clist), row, iid->iid);
- }
-
- gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), clist, TRUE, TRUE, 0);
- gtk_clist_set_selection_mode (GTK_CLIST (clist), GTK_SELECTION_BROWSE);
- gtk_widget_show (clist);
-
- ans = gtk_dialog_run((GtkDialog *)dialog);
- switch (ans) {
- case GTK_RESPONSE_OK:
- ans = GPOINTER_TO_INT (GTK_CLIST (clist)->selection->data);
- iid = gtk_clist_get_row_data (GTK_CLIST (clist), ans);
- break;
-
- case 1:
- default:
- iid = NULL;
- break;
- }
-
- gtk_widget_destroy (dialog);
-
- return g_strdup (iid);
-}
-
-static char *
-get_iid_for_filetype (const char *filename)
-{
- Bonobo_ServerInfoList *info_list;
- CORBA_Environment ev;
- GList *can_handle = NULL;
- char *ret_iid;
- int i, len = 0;
-
- CORBA_exception_init (&ev);
- info_list = bonobo_activation_query ("repo_ids.has ('IDL:GNOME/Evolution/Importer:1.0')", NULL, &ev);
-
- for (i = 0; i < info_list->_length; i++) {
- CORBA_Environment ev2;
- CORBA_Object importer;
- const Bonobo_ServerInfo *info;
-
- info = info_list->_buffer + i;
-
- CORBA_exception_init (&ev2);
- importer = bonobo_activation_activate_from_id ((char *) info->iid, 0, NULL, &ev2);
- if (ev2._major != CORBA_NO_EXCEPTION) {
- g_warning ("Error activating %s", info->iid);
- CORBA_exception_free (&ev2);
- continue;
- }
-
- if (GNOME_Evolution_Importer_supportFormat (importer,
- filename, &ev2)) {
- struct _IIDInfo *iid;
-
- iid = g_new (struct _IIDInfo, 1);
- iid->iid = g_strdup (info->iid);
- iid->name = g_strdup (get_name_from_component_info (info));
-
- can_handle = g_list_prepend (can_handle, iid);
- len++;
- }
-
- bonobo_object_release_unref (importer, &ev2);
- CORBA_exception_free (&ev2);
- }
-
- CORBA_free (info_list);
-
- if (len == 1) {
- struct _IIDInfo *iid;
-
- iid = can_handle->data;
-
- ret_iid = g_strdup (iid->iid);
-
- free_iid_list (can_handle);
- g_list_free (can_handle);
-
- return ret_iid;
- } else if (len > 1) {
- /* Display all the IIDs */
- ret_iid = choose_importer_from_list (can_handle);
-
- free_iid_list (can_handle);
- g_list_free (can_handle);
-
- return ret_iid;
- } else {
- return NULL;
- }
-}
-
-static void error_response_cb(GtkWidget *w, int button, void *data)
-{
- gtk_widget_destroy(w);
-}
-
-static void
-show_error (const char *message,
- const char *title)
-{
- GtkWidget *box;
-
- box = gtk_message_dialog_new(NULL, 0, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, "%s", message);
- gtk_window_set_title (GTK_WINDOW (box), title);
- g_signal_connect(box, "response", G_CALLBACK(error_response_cb), box);
-
- gtk_widget_show (box);
-}
-
-static void
-start_import (const char *physical_uri,
- const char *filename,
- const char *iid,
- const char *folder_type)
-{
- ImporterComponentData *icd;
- char *label;
- char *real_iid;
- struct stat buf;
-
- if (stat (filename, &buf) == -1) {
- char *message;
-
- message = g_strdup_printf (_("File %s does not exist"), filename);
- show_error (message, _("Evolution Error"));
- g_free (message);
-
- return;
- }
-
- if (iid == NULL || strcmp (iid, "Automatic") == 0) {
- /* Work out the component to use */
- real_iid = get_iid_for_filetype (filename);
- } else {
- real_iid = g_strdup (iid);
- }
-
- if (real_iid == NULL) {
- char *message;
-
- message = g_strdup_printf (_("There is no importer that is able to handle\n%s"), filename);
- show_error (message, _("Evolution Error"));
- g_free (message);
-
- return;
- }
-
- icd = g_new (ImporterComponentData, 1);
- icd->stop = FALSE;
- icd->dialog = GTK_DIALOG (gtk_dialog_new_with_buttons(_("Importing"), NULL, 0,
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- NULL));
- g_signal_connect (icd->dialog, "response", G_CALLBACK (dialog_response_cb), icd);
-
- g_object_weak_ref (G_OBJECT(icd->dialog), dialog_destroy_notify, icd);
-
- label = g_strdup_printf (_("Importing %s.\nStarting %s"),
- filename, real_iid);
- icd->contents = gtk_label_new (label);
- g_free (label);
-
- gtk_box_pack_start (GTK_BOX (icd->dialog->vbox), icd->contents, TRUE, TRUE, 0);
- gtk_widget_show_all (GTK_WIDGET (icd->dialog));
- while (gtk_events_pending ())
- gtk_main_iteration ();
-
- icd->client = evolution_importer_client_new_from_id (real_iid);
- if (icd->client == NULL) {
- label = g_strdup_printf (_("Error starting %s"), real_iid);
- g_free (real_iid);
- gtk_label_set_text (GTK_LABEL (icd->contents), label);
- g_free (label);
- while (gtk_events_pending ())
- gtk_main_iteration ();
-
- g_object_unref (icd->dialog);
- g_free (icd);
- return;
- }
- g_free (real_iid);
-
- if (evolution_importer_client_load_file (icd->client, filename, physical_uri, folder_type) == FALSE) {
- label = g_strdup_printf (_("Error loading %s"), filename);
- show_error (label, _("Evolution Error"));
-
- gtk_label_set_text (GTK_LABEL (icd->contents), label);
- g_free (label);
- while (gtk_events_pending ())
- gtk_main_iteration ();
-
- g_object_unref (icd->client);
- g_object_unref (icd->dialog);
- g_free (icd);
- return;
- }
-
- icd->filename = g_strdup (filename);
- icd->item = 1;
-
- label = g_strdup_printf (_("Importing %s\nImporting item 1."),
- filename);
- gtk_label_set_text (GTK_LABEL (icd->contents), label);
- g_free (label);
- while (gtk_events_pending ())
- gtk_main_iteration ();
-
- icd->listener = evolution_importer_listener_new (import_cb, icd);
- evolution_importer_client_process_item (icd->client, icd->listener);
-}
-
-static void
-filename_changed (GtkEntry *entry,
- ImportData *data)
-{
- ImportDialogFilePage *page;
- const char *filename;
-
- page = data->filepage;
-
- filename = gtk_entry_get_text (entry);
- if (filename != NULL && *filename != '\0')
- page->need_filename = FALSE;
- else
- page->need_filename = TRUE;
-
- gnome_druid_set_buttons_sensitive (GNOME_DRUID (data->druid),
- TRUE, !page->need_filename, TRUE, FALSE);
-}
-
-static void
-item_selected (GtkWidget *item,
- ImportData *data)
-{
- char *iid;
-
- g_free (data->choosen_iid);
- iid = g_object_get_data (G_OBJECT (item), "bonoboiid");
- if (iid == NULL)
- data->choosen_iid = g_strdup ("Automatic");
- else
- data->choosen_iid = g_strdup (iid);
-}
-
-static GtkWidget *
-create_plugin_menu (ImportData *data)
-{
- Bonobo_ServerInfoList *info_list;
- CORBA_Environment ev;
- int i;
- GtkWidget *menu;
- GtkWidget *item;
-
- menu = gtk_menu_new ();
- item = gtk_menu_item_new_with_label (_("Automatic"));
- g_object_set_data_full ((GObject *)item, "bonoboiid", g_strdup ("Automatic"), g_free);
- gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
-
- CORBA_exception_init (&ev);
- info_list = bonobo_activation_query ("repo_ids.has ('IDL:GNOME/Evolution/Importer:1.0')", NULL, &ev);
- for (i = 0; i < info_list->_length; i++) {
- const Bonobo_ServerInfo *info;
- char *name = NULL;
-
- info = info_list->_buffer + i;
-
- name = g_strdup (get_name_from_component_info (info));
- if (name == NULL) {
- name = g_strdup (info->iid);
- }
-
- item = gtk_menu_item_new_with_label (name);
- g_free (name);
- gtk_widget_show (item);
- g_signal_connect (item, "activate",
- G_CALLBACK (item_selected), data);
-
- g_object_set_data_full ((GObject *)item, "bonoboiid", g_strdup (info->iid), g_free);
- gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
- }
- CORBA_free (info_list);
-
- return menu;
-}
-
-static ImportDialogFilePage *
-importer_file_page_new (ImportData *data)
-{
- ImportDialogFilePage *page;
- GtkWidget *table, *label;
- int row = 0;
-
- page = g_new0 (ImportDialogFilePage, 1);
-
- page->vbox = gtk_vbox_new (FALSE, 5);
- page->need_filename = TRUE;
-
- table = gtk_table_new (2, 2, FALSE);
- gtk_table_set_row_spacings (GTK_TABLE (table), 2);
- gtk_table_set_col_spacings (GTK_TABLE (table), 10);
- gtk_container_set_border_width (GTK_CONTAINER (table), 8);
- gtk_box_pack_start (GTK_BOX (page->vbox), table, TRUE, TRUE, 0);
-
- label = gtk_label_new (_("Filename:"));
- gtk_table_attach (GTK_TABLE (table), label, 0, 1, row, row + 1,
- GTK_FILL, 0, 0, 0);
- gtk_misc_set_alignment (GTK_MISC (label), 1, 0.5);
-
- page->filename = gnome_file_entry_new ("Evolution_Importer_FileName", _("Select a file"));
- g_signal_connect (gnome_file_entry_gtk_entry (GNOME_FILE_ENTRY (page->filename)), "changed",
- G_CALLBACK (filename_changed), data);
-
- gtk_table_attach (GTK_TABLE (table), page->filename, 1, 2,
- row, row + 1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
-
- row++;
-
- label = gtk_label_new (_("File type:"));
- gtk_table_attach (GTK_TABLE (table), label, 0, 1, row, row + 1,
- GTK_FILL, 0, 0, 0);
- gtk_misc_set_alignment (GTK_MISC (label), 1, 0.5);
-
- page->filetype = gtk_option_menu_new ();
- page->menu = create_plugin_menu (data);
- gtk_option_menu_set_menu (GTK_OPTION_MENU (page->filetype), page->menu);
- gtk_table_attach (GTK_TABLE (table), page->filetype, 1, 2,
- row, row + 1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
-
- gtk_widget_show_all (table);
-
- return page;
-}
-
-static ImportDialogTypePage *
-importer_type_page_new (ImportData *data)
-{
- ImportDialogTypePage *page;
-
- page = g_new0 (ImportDialogTypePage, 1);
-
- page->vbox = gtk_vbox_new (FALSE, 5);
- page->intelligent = gtk_radio_button_new_with_label (NULL,
- _("Import data and settings from older programs"));
- gtk_box_pack_start (GTK_BOX (page->vbox), page->intelligent, FALSE, FALSE, 0);
-
- page->file = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON (page->intelligent),
- _("Import a single file"));
- gtk_box_pack_start (GTK_BOX (page->vbox), page->file, FALSE, FALSE, 0);
- gtk_widget_show_all (page->vbox);
- return page;
-}
-
-static ImportDialogImporterPage *
-importer_importer_page_new (ImportData *data)
-{
- ImportDialogImporterPage *page;
- GtkWidget *sep;
-
- page = g_new0 (ImportDialogImporterPage, 1);
-
- page->vbox = gtk_vbox_new (FALSE, 5);
- gtk_container_set_border_width (GTK_CONTAINER (page->vbox), 4);
-
- sep = gtk_hseparator_new ();
- gtk_box_pack_start (GTK_BOX (page->vbox), sep, FALSE, FALSE, 0);
-
- page->prepared = FALSE;
- gtk_widget_show_all (page->vbox);
-
- return page;
-}
-
-static GList *
-get_intelligent_importers (void)
-{
- Bonobo_ServerInfoList *info_list;
- GList *iids_ret = NULL;
- CORBA_Environment ev;
- int i;
-
- CORBA_exception_init (&ev);
- info_list = bonobo_activation_query ("repo_ids.has ('IDL:GNOME/Evolution/IntelligentImporter:1.0')", NULL, &ev);
- CORBA_exception_free (&ev);
-
- for (i = 0; i < info_list->_length; i++) {
- const Bonobo_ServerInfo *info;
-
- info = info_list->_buffer + i;
- iids_ret = g_list_prepend (iids_ret, g_strdup (info->iid));
- }
-
- return iids_ret;
-}
-
-static gboolean
-prepare_intelligent_page (GnomeDruidPage *page,
- GnomeDruid *druid,
- ImportData *data)
-{
- GtkWidget *dialog;
- ImportDialogImporterPage *import;
- GList *l, *importers;
- GtkWidget *table;
- int running = 0;
-
- if (data->importerpage->prepared == TRUE) {
- return TRUE;
- }
-
- data->importerpage->prepared = TRUE;
-
- dialog = gtk_message_dialog_new(NULL, 0, GTK_MESSAGE_INFO, GTK_BUTTONS_NONE, "%s",
- _("Please wait...\nScanning for existing setups"));
- e_make_widget_backing_stored (dialog);
-
- gtk_window_set_title (GTK_WINDOW (dialog), _("Starting Intelligent Importers"));
- gtk_widget_show_all (dialog);
- gtk_widget_show_now (dialog);
-
- gtk_widget_queue_draw (dialog);
- gdk_flush ();
-
- while (gtk_events_pending ()) {
- gtk_main_iteration ();
- }
-
- import = data->importerpage;
- importers = get_intelligent_importers ();
- if (importers == NULL) {
- /* No importers, go directly to finish, do not pass go
- Do not collect $200 */
- import->running = 0;
- gnome_druid_set_page (druid, GNOME_DRUID_PAGE (data->finish))
- ;
- gtk_widget_destroy (dialog);
- return TRUE;
- }
-
- table = gtk_table_new (g_list_length (importers), 2, FALSE);
- for (l = importers; l; l = l->next) {
- GtkWidget *label;
- IntelligentImporterData *id;
- CORBA_Environment ev;
- gboolean can_run;
- char *str;
-
- id = g_new0 (IntelligentImporterData, 1);
- id->iid = g_strdup (l->data);
-
- CORBA_exception_init (&ev);
- id->object = bonobo_activation_activate_from_id ((char *) id->iid, 0, NULL, &ev);
- if (BONOBO_EX (&ev)) {
- g_warning ("Could not start %s:%s", id->iid,
- CORBA_exception_id (&ev));
-
- CORBA_exception_free (&ev);
- /* Clean up the IID */
- g_free (id->iid);
- g_free (id);
- continue;
- }
-
- if (id->object == CORBA_OBJECT_NIL) {
- g_warning ("Could not activate component %s", id->iid);
- CORBA_exception_free (&ev);
-
- g_free (id->iid);
- g_free (id);
- continue;
- }
-
- can_run = GNOME_Evolution_IntelligentImporter_canImport (id->object, &ev);
- if (BONOBO_EX (&ev)) {
- g_warning ("Could not call canImport(%s): %s", id->iid,
- CORBA_exception_id (&ev));
- bonobo_object_release_unref (id->object, &ev);
- CORBA_exception_free (&ev);
-
- g_free (id->iid);
- g_free (id);
- continue;
- }
-
- if (can_run == FALSE) {
- bonobo_object_release_unref (id->object, &ev);
- CORBA_exception_free (&ev);
- g_free (id->iid);
- g_free (id);
- continue;
- }
-
- running++;
- id->name = GNOME_Evolution_IntelligentImporter__get_importername (id->object, &ev);
- if (BONOBO_EX (&ev)) {
- g_warning ("Could not get name(%s): %s", id->iid,
- CORBA_exception_id (&ev));
- bonobo_object_release_unref (id->object, &ev);
- CORBA_exception_free (&ev);
- g_free (id->iid);
- g_free (id);
- continue;
- }
-
- id->blurb = GNOME_Evolution_IntelligentImporter__get_message (id->object, &ev);
- if (BONOBO_EX (&ev)) {
- g_warning ("Could not get message(%s): %s",
- id->iid, CORBA_exception_id (&ev));
- bonobo_object_release_unref (id->object, &ev);
- CORBA_exception_free (&ev);
- g_free (id->iid);
- CORBA_free (id->name);
- g_free (id);
- continue;
- }
-
- id->control = Bonobo_Unknown_queryInterface (id->object,
- "IDL:Bonobo/Control:1.0", &ev);
- if (BONOBO_EX (&ev)) {
- g_warning ("Could not QI for Bonobo/Control:1.0 %s:%s",
- id->iid, CORBA_exception_id (&ev));
- bonobo_object_release_unref (id->object, &ev);
- CORBA_exception_free (&ev);
- g_free (id->iid);
- CORBA_free (id->name);
- CORBA_free (id->blurb);
- continue;
- }
-
- if (id->control != CORBA_OBJECT_NIL) {
- id->widget = bonobo_widget_new_control_from_objref (id->control, CORBA_OBJECT_NIL);
- gtk_widget_show (id->widget);
- } else {
- id->widget = gtk_label_new ("");
- gtk_widget_show (id->widget);
- }
-
- CORBA_exception_free (&ev);
-
- import->importers = g_list_prepend (import->importers, id);
- str = g_strdup_printf (_("From %s:"), id->name);
- label = gtk_label_new (str);
- g_free (str);
-
- gtk_misc_set_alignment (GTK_MISC (label), 0, .5);
-
- gtk_table_attach (GTK_TABLE (table), label, 0, 1, running - 1,
- running, GTK_FILL, 0, 0, 0);
- gtk_table_attach (GTK_TABLE (table), id->widget, 1, 2,
- running - 1, running, GTK_FILL, 0, 3, 0);
- gtk_box_pack_start (GTK_BOX (data->importerpage->vbox), table,
- FALSE, FALSE, 0);
- }
-
- gtk_widget_show_all (table);
-
- if (running == 0) {
- gnome_druid_set_page (druid, GNOME_DRUID_PAGE (data->finish));
- gtk_widget_destroy (dialog);
- return TRUE;
- }
-
- import->running = running;
- gtk_widget_destroy (dialog);
-
- return FALSE;
-}
-
-static void
-import_druid_cancel (GnomeDruid *druid,
- ImportData *data)
-{
- gtk_widget_destroy (GTK_WIDGET (data->dialog));
-}
-
-static void
-import_druid_weak_notify (void *blah,
- GObject *where_the_object_was)
-{
- ImportData *data = (ImportData *) blah;
-
- g_object_unref (data->wizard);
- g_free (data->choosen_iid);
- g_free (data);
-}
-
-static void
-folder_selected (EShellFolderSelectionDialog *dialog,
- const char *path,
- ImportData *data)
-{
- EFolder *folder;
- char *filename, *iid;
-
- iid = g_strdup (data->choosen_iid);
- filename = gnome_file_entry_get_full_path (GNOME_FILE_ENTRY (data->filepage->filename), FALSE);
-
- folder = e_storage_set_get_folder (e_shell_get_storage_set (data->shell), path);
- g_assert (folder != NULL);
-
- gtk_widget_destroy (data->dialog);
- gtk_widget_hide (GTK_WIDGET (dialog));
-
- start_import (e_folder_get_physical_uri (folder), filename, iid, e_folder_get_type_string (folder));
-
- g_free (iid);
- g_free (filename);
-}
-
-static void
-folder_cancelled (EShellFolderSelectionDialog *dialog,
- ImportData *data)
-{
- gtk_widget_destroy (data->dialog);
-}
-
-static void
-free_importers (ImportData *data)
-{
- GList *l;
-
- for (l = data->importerpage->importers; l; l = l->next) {
- IntelligentImporterData *iid;
-
- iid = l->data;
- if (iid->object != CORBA_OBJECT_NIL) {
- bonobo_object_release_unref (iid->object, NULL);
- }
- }
-
- g_list_free (data->importerpage->importers);
-}
-
-static void
-start_importers (GList *p)
-{
- CORBA_Environment ev;
-
- for (; p; p = p->next) {
- SelectedImporterData *sid = p->data;
-
- CORBA_exception_init (&ev);
- GNOME_Evolution_IntelligentImporter_importData (sid->importer, &ev);
- if (BONOBO_EX (&ev)) {
- g_warning ("Error importing %s\n%s", sid->iid,
- CORBA_exception_id (&ev));
- }
- CORBA_exception_free (&ev);
- }
-}
-
-static void
-do_import (ImportData *data)
-{
- CORBA_Environment ev;
- GList *l, *selected = NULL;
-
- for (l = data->importerpage->importers; l; l = l->next) {
- IntelligentImporterData *importer_data;
- SelectedImporterData *sid;
- char *iid;
-
- importer_data = l->data;
- iid = g_strdup (importer_data->iid);
-
- sid = g_new (SelectedImporterData, 1);
- sid->iid = iid;
-
- CORBA_exception_init (&ev);
- sid->importer = bonobo_object_dup_ref (importer_data->object, &ev);
- if (BONOBO_EX (&ev)) {
- g_warning ("Error duplication %s\n(%s)", iid,
- CORBA_exception_id (&ev));
- g_free (iid);
- CORBA_exception_free (&ev);
- g_free (sid);
- continue;
- }
- CORBA_exception_free (&ev);
-
- selected = g_list_prepend (selected, sid);
- }
-
- free_importers (data);
-
- if (selected != NULL) {
- start_importers (selected);
-
- for (l = selected; l; l = l->next) {
- SelectedImporterData *sid = l->data;
-
- CORBA_exception_init (&ev);
- bonobo_object_release_unref (sid->importer, &ev);
- CORBA_exception_free (&ev);
-
- g_free (sid->iid);
- g_free (sid);
- }
- g_list_free (selected);
- }
-}
-
-static void
-import_druid_finish (GnomeDruidPage *page,
- GnomeDruid *druid,
- ImportData *data)
-{
- GtkWidget *folder;
-
- if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (data->typepage->intelligent))) {
- do_import (data);
- gtk_widget_destroy (data->dialog);
- } else {
- folder = e_shell_folder_selection_dialog_new (data->shell,
- _("Select folder"),
- _("Select a destination folder for importing this data"),
- e_shell_view_get_current_uri (data->view),
- NULL, TRUE);
-
- g_signal_connect (folder, "folder_selected",
- G_CALLBACK (folder_selected), data);
- g_signal_connect (folder, "cancelled",
- G_CALLBACK (folder_cancelled), data);
-
- gtk_widget_hide (data->dialog);
- gtk_widget_show (folder);
- }
-}
-
-static gboolean
-prepare_file_page (GnomeDruidPage *page,
- GnomeDruid *druid,
- ImportData *data)
-{
- gnome_druid_set_buttons_sensitive (druid, TRUE,
- !data->filepage->need_filename,
- TRUE, FALSE);
- return FALSE;
-}
-
-static gboolean
-next_file_page (GnomeDruidPage *page,
- GnomeDruid *druid,
- ImportData *data)
-{
- gnome_druid_set_page (druid, GNOME_DRUID_PAGE (data->finish));
- return TRUE;
-}
-
-static gboolean
-back_file_page (GnomeDruidPage *page,
- GnomeDruid *druid,
- ImportData *data)
-{
- gnome_druid_set_page (druid, GNOME_DRUID_PAGE (data->typedialog));
- return TRUE;
-}
-
-static gboolean
-next_type_page (GnomeDruidPage *page,
- GnomeDruid *druid,
- ImportData *data)
-{
- if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (data->typepage->intelligent))) {
- gnome_druid_set_page (druid, GNOME_DRUID_PAGE (data->intelligent));
- } else {
- gnome_druid_set_page (druid, GNOME_DRUID_PAGE (data->filedialog));
- }
-
- return TRUE;
-}
-
-static gboolean
-back_finish_page (GnomeDruidPage *page,
- GnomeDruid *druid,
- ImportData *data)
-{
- if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (data->typepage->intelligent))) {
- if (data->importerpage->running != 0) {
- gnome_druid_set_page (druid, GNOME_DRUID_PAGE (data->intelligent));
- } else {
- gnome_druid_set_page (druid, GNOME_DRUID_PAGE (data->typedialog));
- }
- } else {
- gnome_druid_set_page (druid, GNOME_DRUID_PAGE (data->filedialog));
- }
-
- return TRUE;
-}
-
-static gboolean
-back_intelligent_page (GnomeDruidPage *page,
- GnomeDruid *druid,
- ImportData *data)
-{
- gnome_druid_set_page (druid, GNOME_DRUID_PAGE (data->typedialog));
- return TRUE;
-}
-
-static gboolean
-next_intelligent_page (GnomeDruidPage *page,
- GnomeDruid *druid,
- ImportData *data)
-{
- gnome_druid_set_page (druid, GNOME_DRUID_PAGE (data->finish));
- return TRUE;
-}
-
-static void
-dialog_weak_notify (void *data,
- GObject *where_the_dialog_was)
-{
- gboolean *dialog_open = (gboolean *) data;
-
- *dialog_open = FALSE;
-}
-
-void
-show_import_wizard (BonoboUIComponent *component,
- gpointer user_data,
- const char *cname)
-{
- ImportData *data = g_new0 (ImportData, 1);
- GtkWidget *html;
- static gboolean dialog_open = FALSE;
-
- if (dialog_open) {
- return;
- }
-
- dialog_open = TRUE;
- data->view = E_SHELL_VIEW (user_data);
- data->shell = e_shell_view_get_shell (data->view);
-
- data->wizard = glade_xml_new (EVOLUTION_GLADEDIR "/import.glade", NULL, NULL);
- data->dialog = glade_xml_get_widget (data->wizard, "importwizard");
- gtk_window_set_wmclass (GTK_WINDOW (data->dialog), "importdruid",
- "Evolution:shell");
- gtk_window_set_transient_for (GTK_WINDOW (data->dialog), GTK_WINDOW (user_data));
- g_object_weak_ref ((GObject *)data->dialog, dialog_weak_notify, &dialog_open);
-
- data->druid = glade_xml_get_widget (data->wizard, "druid1");
- g_signal_connect (data->druid, "cancel",
- G_CALLBACK (import_druid_cancel), data);
-
- gtk_button_set_label((GtkButton *)((GnomeDruid *)data->druid)->finish, _("Import"));
-
- data->start = GNOME_DRUID_PAGE_EDGE (glade_xml_get_widget (data->wizard, "page0"));
-
- data->typedialog = glade_xml_get_widget (data->wizard, "page1");
- g_signal_connect (data->typedialog, "next",
- G_CALLBACK (next_type_page), data);
- data->typepage = importer_type_page_new (data);
- html = create_help ("type_html");
- gtk_box_pack_start (GTK_BOX (data->typepage->vbox), html, FALSE, TRUE, 0);
- gtk_box_reorder_child (GTK_BOX (data->typepage->vbox), html, 0);
-
- gtk_box_pack_start (GTK_BOX (GNOME_DRUID_PAGE_STANDARD (data->typedialog)->vbox), data->typepage->vbox, TRUE, TRUE, 0);
-
- data->intelligent = glade_xml_get_widget (data->wizard, "page2-intelligent");
- g_signal_connect (data->intelligent, "next",
- G_CALLBACK (next_intelligent_page), data);
- g_signal_connect (data->intelligent, "back",
- G_CALLBACK (back_intelligent_page), data);
- g_signal_connect (data->intelligent, "prepare",
- G_CALLBACK (prepare_intelligent_page), data);
-
- data->importerpage = importer_importer_page_new (data);
- html = create_help ("intelligent_html");
- gtk_box_pack_start (GTK_BOX (data->importerpage->vbox), html, FALSE, TRUE, 0);
- gtk_box_reorder_child (GTK_BOX (data->importerpage->vbox), html, 0);
-
- gtk_box_pack_start (GTK_BOX (GNOME_DRUID_PAGE_STANDARD (data->intelligent)->vbox), data->importerpage->vbox, TRUE, TRUE, 0);
-
-
- data->filedialog = glade_xml_get_widget (data->wizard, "page2-file");
- g_signal_connect (data->filedialog, "prepare",
- G_CALLBACK (prepare_file_page), data);
- g_signal_connect (data->filedialog, "next",
- G_CALLBACK (next_file_page), data);
- g_signal_connect (data->filedialog, "back",
- G_CALLBACK (back_file_page), data);
-
- data->finish = GNOME_DRUID_PAGE_EDGE (glade_xml_get_widget (data->wizard, "page3"));
- g_signal_connect (data->finish, "back",
- G_CALLBACK (back_finish_page), data);
-
- data->filepage = importer_file_page_new (data);
-
- html = create_help ("file_html");
- gtk_box_pack_start (GTK_BOX (data->filepage->vbox), html, FALSE, TRUE, 0);
- gtk_box_reorder_child (GTK_BOX (data->filepage->vbox), html, 0);
-
- gtk_box_pack_start (GTK_BOX (GNOME_DRUID_PAGE_STANDARD (data->filedialog)->vbox), data->filepage->vbox, TRUE, TRUE, 0);
-
- /* Finish page */
- g_signal_connect (data->finish, "finish",
- G_CALLBACK (import_druid_finish), data);
-
- g_object_weak_ref ((GObject *)data->dialog, import_druid_weak_notify, data);
-
- gtk_widget_show_all (data->dialog);
-}
diff --git a/shell/e-shell-importer.h b/shell/e-shell-importer.h
deleted file mode 100644
index 4e9b91ff26..0000000000
--- a/shell/e-shell-importer.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* importer.c
- *
- * Copyright (C) 2000 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Iain Holmes <iain@ximian.com>
- */
-
-#include <bonobo/bonobo-ui-component.h>
-
-#ifndef __IMPORTER_H__
-#define __IMPORTER_H__
-
-void show_import_wizard (BonoboUIComponent *component,
- gpointer user_data,
- const char *cname);
-
-#endif
diff --git a/shell/e-shell-marshal.list b/shell/e-shell-marshal.list
deleted file mode 100644
index f1ae29622d..0000000000
--- a/shell/e-shell-marshal.list
+++ /dev/null
@@ -1,28 +0,0 @@
-NONE:BOOL
-NONE:BOOL,INT
-NONE:INT
-NONE:INT,INT
-NONE:INT,POINTER
-NONE:INT,STRING
-NONE:NONE
-NONE:POINTER
-NONE:POINTER,INT
-NONE:POINTER,INT,INT
-NONE:POINTER,POINTER
-NONE:POINTER,POINTER,POINTER
-NONE:POINTER,POINTER,POINTER,BOOL
-NONE:POINTER,POINTER,POINTER,POINTER
-NONE:POINTER,POINTER,POINTER,POINTER,POINTER
-NONE:POINTER,STRING
-NONE:POINTER,STRING,BOOL
-NONE:POINTER,STRING,STRING
-NONE:POINTER,STRING,STRING,BOOL
-NONE:POINTER,STRING,STRING,STRING,STRING
-NONE:STRING
-NONE:STRING,BOOL
-NONE:STRING,INT
-NONE:STRING,INT,INT
-NONE:STRING,POINTER
-NONE:STRING,STRING
-NONE:STRING,STRING,STRING
-NONE:STRING,STRING,STRING,STRING
diff --git a/shell/e-shell-offline-handler.c b/shell/e-shell-offline-handler.c
deleted file mode 100644
index 4b22bdbf1d..0000000000
--- a/shell/e-shell-offline-handler.c
+++ /dev/null
@@ -1,869 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-shell-offline-handler.c
- *
- * Copyright (C) 2001 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli <ettore@ximian.com>
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#undef G_DISABLE_DEPRECATED /* FIXME */
-#undef GTK_DISABLE_DEPRECATED /* FIXME */
-
-#include "e-shell-offline-handler.h"
-
-#include "e-shell-offline-sync.h"
-
-#include "e-shell-marshal.h"
-
-#include <gtk/gtkclist.h>
-#include <gtk/gtkdialog.h>
-#include <gtk/gtklabel.h>
-#include <gtk/gtksignal.h>
-#include <gtk/gtkliststore.h>
-#include <gtk/gtktreeview.h>
-#include <gtk/gtktypeutils.h>
-#include <gtk/gtkwidget.h>
-
-#include <gal/util/e-util.h>
-
-#include <libgnome/gnome-i18n.h>
-
-#include <glade/glade-xml.h>
-
-#include <bonobo/bonobo-main.h>
-#include <bonobo/bonobo-exception.h>
-
-
-#define GLADE_DIALOG_FILE_NAME EVOLUTION_GLADEDIR "/e-active-connection-dialog.glade"
-
-
-#define PARENT_TYPE GTK_TYPE_OBJECT
-static GtkObjectClass *parent_class = NULL;
-
-
-/* Private part. */
-
-struct _OfflineProgressListenerServant {
- POA_GNOME_Evolution_OfflineProgressListener servant;
- EShellOfflineHandler *offline_handler;
- char *component_id;
-};
-typedef struct _OfflineProgressListenerServant OfflineProgressListenerServant;
-
-struct _ComponentInfo {
- /* Component ID. */
- char *id;
-
- /* The `Evolution::Offline' interface for this component (cached just
- to avoid going through the EComponentRegistry all the time). */
- GNOME_Evolution_Offline offline_interface;
-
- /* The interface and servant for the
- `Evolution::OfflineProgressListener' we have to implement to get
- notifications about progress of the off-line process. */
- GNOME_Evolution_OfflineProgressListener progress_listener_interface;
- OfflineProgressListenerServant *progress_listener_servant;
-
- /* The current active connections for this component. This is updated
- by the component itself through the `::ProgressListener' interface;
- when the count reaches zero, the off-line process is considered to
- be complete. */
- GNOME_Evolution_ConnectionList *active_connection_list;
-};
-typedef struct _ComponentInfo ComponentInfo;
-
-struct _EShellOfflineHandlerPrivate {
- EShell *shell;
-
- EShellView *parent_shell_view;
-
- GladeXML *dialog_gui;
-
- int num_total_connections;
- GHashTable *id_to_component_info;
-
- int procedure_in_progress : 1;
- int finished : 1;
-};
-
-
-/* Signals. */
-
-enum {
- OFFLINE_PROCEDURE_STARTED,
- OFFLINE_PROCEDURE_FINISHED,
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = { 0 };
-
-
-/* Forward declarations for the dialog handling. */
-
-static void update_dialog_clist (EShellOfflineHandler *offline_handler);
-
-
-/* Implementation for the OfflineProgressListener interface. */
-
-static PortableServer_ServantBase__epv OfflineProgressListener_base_epv;
-static POA_GNOME_Evolution_OfflineProgressListener__epv OfflineProgressListener_epv;
-static POA_GNOME_Evolution_OfflineProgressListener__vepv OfflineProgressListener_vepv;
-
-static OfflineProgressListenerServant *
-progress_listener_servant_new (EShellOfflineHandler *offline_handler,
- const char *id)
-{
- OfflineProgressListenerServant *servant;
-
- servant = g_new0 (OfflineProgressListenerServant, 1);
-
- servant->servant.vepv = &OfflineProgressListener_vepv;
- servant->offline_handler = offline_handler;
- servant->component_id = g_strdup (id);
-
- return servant;
-}
-
-static void
-progress_listener_servant_free (OfflineProgressListenerServant *servant)
-{
- CORBA_Environment ev;
- PortableServer_ObjectId *oid;
-
- CORBA_exception_init (&ev);
-
- oid = PortableServer_POA_servant_to_id (bonobo_poa (), servant, &ev);
- PortableServer_POA_deactivate_object (bonobo_poa (), oid, &ev);
- CORBA_free (oid);
-
- CORBA_exception_free (&ev);
-
- g_free (servant->component_id);
- g_free (servant);
-}
-
-static GNOME_Evolution_ConnectionList *
-duplicate_connection_list (const GNOME_Evolution_ConnectionList *source)
-{
- GNOME_Evolution_ConnectionList *copy;
- int i;
-
- copy = GNOME_Evolution_ConnectionList__alloc ();
-
- copy->_length = source->_length;
- copy->_maximum = source->_length;
-
- copy->_buffer = CORBA_sequence_GNOME_Evolution_Connection_allocbuf (copy->_maximum);
-
- for (i = 0; i < source->_length; i++) {
- copy->_buffer[i].hostName = CORBA_string_dup (source->_buffer[i].hostName);
- copy->_buffer[i].type = CORBA_string_dup (source->_buffer[i].type);
- }
-
- CORBA_sequence_set_release (copy, TRUE);
-
- return copy;
-}
-
-static void
-impl_OfflineProgressListener_updateProgress (PortableServer_Servant servant,
- const GNOME_Evolution_ConnectionList *current_active_connections,
- CORBA_Environment *ev)
-{
- EShellOfflineHandler *offline_handler;
- EShellOfflineHandlerPrivate *priv;
- ComponentInfo *component_info;
- int connection_delta;
- const char *component_id;
-
- component_id = ((OfflineProgressListenerServant *) servant)->component_id;
-
- offline_handler = ((OfflineProgressListenerServant *) servant)->offline_handler;
- priv = offline_handler->priv;
-
- component_info = g_hash_table_lookup (priv->id_to_component_info, component_id);
- g_assert (component_info != NULL);
-
- connection_delta = component_info->active_connection_list->_length - current_active_connections->_length;
- if (connection_delta < 0) {
- /* FIXME: Should raise an exception or something? */
- g_warning ("Weird, buggy component increased number of connection when going off-line -- %s",
- component_id);
- }
-
- g_assert (priv->num_total_connections >= connection_delta);
- priv->num_total_connections -= connection_delta;
-
- CORBA_free (component_info->active_connection_list);
- component_info->active_connection_list = duplicate_connection_list (current_active_connections);
-
- update_dialog_clist (offline_handler);
-
- if (priv->num_total_connections == 0 && ! priv->finished) {
- g_signal_emit (offline_handler, signals[OFFLINE_PROCEDURE_FINISHED], 0, TRUE);
- priv->finished = TRUE;
- }
-}
-
-static gboolean
-create_progress_listener (EShellOfflineHandler *offline_handler,
- const char *component_id,
- GNOME_Evolution_OfflineProgressListener *objref_return,
- OfflineProgressListenerServant **servant_return)
-{
- OfflineProgressListenerServant *servant;
- CORBA_Environment ev;
-
- *servant_return = NULL;
- *objref_return = CORBA_OBJECT_NIL;
-
- OfflineProgressListener_base_epv._private = NULL;
- OfflineProgressListener_base_epv.finalize = NULL;
- OfflineProgressListener_base_epv.default_POA = NULL;
-
- OfflineProgressListener_epv.updateProgress = impl_OfflineProgressListener_updateProgress;
-
- OfflineProgressListener_vepv._base_epv = &OfflineProgressListener_base_epv;
- OfflineProgressListener_vepv.GNOME_Evolution_OfflineProgressListener_epv = &OfflineProgressListener_epv;
-
- servant = progress_listener_servant_new (offline_handler, component_id);
-
- CORBA_exception_init (&ev);
-
- POA_GNOME_Evolution_OfflineProgressListener__init ((PortableServer_Servant) servant, &ev);
- if (ev._major != CORBA_NO_EXCEPTION) {
- g_warning ("Cannot initialize GNOME::Evolution::Offline::ProgressListener");
- progress_listener_servant_free (servant);
- CORBA_exception_free (&ev);
- return FALSE;
- }
-
- CORBA_free (PortableServer_POA_activate_object (bonobo_poa (), servant, &ev));
-
- if (ev._major != CORBA_NO_EXCEPTION) {
- g_warning ("Cannot activate GNOME::Evolution::Offline::ProgressListener");
- progress_listener_servant_free (servant);
- CORBA_exception_free (&ev);
- return FALSE;
- }
-
- *servant_return = servant;
- *objref_return = PortableServer_POA_servant_to_reference (bonobo_poa (), servant, &ev);
-
- CORBA_exception_free (&ev);
-
- return TRUE;
-}
-
-
-/* ComponentInfo handling. */
-
-static ComponentInfo *
-component_info_new (const char *id,
- const GNOME_Evolution_Offline offline_interface,
- GNOME_Evolution_OfflineProgressListener progress_listener_interface,
- OfflineProgressListenerServant *progress_listener_servant,
- GNOME_Evolution_ConnectionList *active_connection_list)
-{
- ComponentInfo *new;
- CORBA_Environment ev;
-
- CORBA_exception_init (&ev);
-
- new = g_new (ComponentInfo, 1);
- new->id = g_strdup (id);
- new->offline_interface = CORBA_Object_duplicate (offline_interface, &ev);
- new->progress_listener_interface = progress_listener_interface;
- new->progress_listener_servant = progress_listener_servant;
- new->active_connection_list = active_connection_list;
-
- CORBA_exception_free (&ev);
-
- return new;
-}
-
-static void
-component_info_free (ComponentInfo *component_info)
-{
- CORBA_Environment ev;
-
- CORBA_exception_init (&ev);
-
- g_free (component_info->id);
-
- progress_listener_servant_free (component_info->progress_listener_servant);
- CORBA_Object_release (component_info->progress_listener_interface, &ev);
-
- CORBA_Object_release (component_info->offline_interface, &ev);
-
- CORBA_free (component_info->active_connection_list);
-
- g_free (component_info);
-
- CORBA_exception_free (&ev);
-}
-
-
-/* Utility functions. */
-
-static void
-hash_foreach_free_component_info (void *key,
- void *value,
- void *user_data)
-{
- ComponentInfo *component_info;
-
- component_info = (ComponentInfo *) value;
- component_info_free (component_info);
-}
-
-
-/* Cancelling the off-line procedure. */
-
-static void
-cancel_offline (EShellOfflineHandler *offline_handler)
-{
- EShellOfflineHandlerPrivate *priv;
- EComponentRegistry *component_registry;
- GList *component_ids;
- GList *p;
-
- priv = offline_handler->priv;
-
- component_registry = e_shell_get_component_registry (priv->shell);
- component_ids = e_component_registry_get_id_list (component_registry);
-
- for (p = component_ids; p != NULL; p = p->next) {
- EvolutionShellComponentClient *shell_component_client;
- GNOME_Evolution_Offline offline_interface;
- CORBA_Environment ev;
- const char *id;
-
- id = (const char *) p->data;
- shell_component_client = e_component_registry_get_component_by_id (component_registry, id);
-
- offline_interface = evolution_shell_component_client_get_offline_interface (shell_component_client);
- if (offline_interface == CORBA_OBJECT_NIL)
- continue;
-
- CORBA_exception_init (&ev);
-
- GNOME_Evolution_Offline_goOnline (offline_interface, &ev);
- if (ev._major != CORBA_NO_EXCEPTION)
- g_warning ("Error putting component `%s' on-line.", id);
-
- CORBA_exception_free (&ev);
- }
-
- e_free_string_list (component_ids);
-
- priv->num_total_connections = 0;
-
- if (! priv->finished) {
- g_signal_emit (offline_handler, signals[OFFLINE_PROCEDURE_FINISHED], 0, FALSE);
- priv->finished = TRUE;
- }
-}
-
-
-/* Preparing the off-line procedure. */
-
-static gboolean
-prepare_for_offline (EShellOfflineHandler *offline_handler)
-{
- EComponentRegistry *component_registry;
- EShellOfflineHandlerPrivate *priv;
- GList *component_ids;
- GList *p;
- gboolean error;
-
- priv = offline_handler->priv;
- component_registry = e_shell_get_component_registry (priv->shell);
-
- component_ids = e_component_registry_get_id_list (component_registry);
-
- error = FALSE;
- for (p = component_ids; p != NULL; p = p->next) {
- EvolutionShellComponentClient *shell_component_client;
- GNOME_Evolution_Offline offline_interface;
- GNOME_Evolution_OfflineProgressListener progress_listener_interface;
- GNOME_Evolution_ConnectionList *active_connection_list;
- OfflineProgressListenerServant *progress_listener_servant;
- ComponentInfo *component_info;
- CORBA_Environment ev;
- const char *id;
-
- id = (const char *) p->data;
- shell_component_client = e_component_registry_get_component_by_id (component_registry, id);
- offline_interface = evolution_shell_component_client_get_offline_interface (shell_component_client);
- if (offline_interface == CORBA_OBJECT_NIL)
- continue;
-
- if (! create_progress_listener (offline_handler, id,
- &progress_listener_interface,
- &progress_listener_servant)) {
- g_warning ("Cannot create the Evolution::OfflineProgressListener interface for `%s'", id);
- continue;
- }
-
- CORBA_exception_init (&ev);
-
- GNOME_Evolution_Offline_prepareForOffline (offline_interface, &active_connection_list, &ev);
- if (ev._major != CORBA_NO_EXCEPTION) {
- g_warning ("Cannot prepare component component to go offline -- %s [%s]",
- id, BONOBO_EX_REPOID (&ev));
-
- progress_listener_servant_free (progress_listener_servant);
-
- CORBA_Object_release (progress_listener_interface, &ev);
-
- CORBA_exception_free (&ev);
-
- error = TRUE;
- break;
- }
-
- CORBA_exception_free (&ev);
-
- priv->num_total_connections += active_connection_list->_length;
-
- component_info = component_info_new (id,
- offline_interface,
- progress_listener_interface,
- progress_listener_servant,
- active_connection_list);
-
- g_assert (g_hash_table_lookup (priv->id_to_component_info, component_info->id) == NULL);
- g_hash_table_insert (priv->id_to_component_info, component_info->id, component_info);
- }
-
- /* If an error occurred while preparing, just put all the components
- on-line again. */
- if (error)
- cancel_offline (offline_handler);
-
- e_free_string_list (component_ids);
-
- return ! error;
-}
-
-
-/* Finalizing the off-line procedure. */
-
-static void
-finalize_offline_hash_foreach (void *key,
- void *value,
- void *user_data)
-{
- EShellOfflineHandler *offline_handler;
- EShellOfflineHandlerPrivate *priv;
- ComponentInfo *component_info;
- CORBA_Environment ev;
-
- offline_handler = E_SHELL_OFFLINE_HANDLER (user_data);
- priv = offline_handler->priv;
-
- component_info = (ComponentInfo *) value;
-
- CORBA_exception_init (&ev);
-
- GNOME_Evolution_Offline_goOffline (component_info->offline_interface,
- component_info->progress_listener_interface,
- &ev);
-
- if (ev._major != CORBA_NO_EXCEPTION) {
- /* FIXME: Should detect an error and put all the components
- on-line again. */
- g_warning ("Error putting component off-line -- %s", component_info->id);
- }
-
- CORBA_exception_free (&ev);
-}
-
-static void
-finalize_offline (EShellOfflineHandler *offline_handler)
-{
- EShellOfflineHandlerPrivate *priv;
-
- priv = offline_handler->priv;
-
- g_object_ref (offline_handler);
-
- g_hash_table_foreach (priv->id_to_component_info, finalize_offline_hash_foreach, offline_handler);
-
- if (priv->num_total_connections == 0 && ! priv->finished) {
- /* Nothing else to do, we are all set. */
- g_signal_emit (offline_handler, signals[OFFLINE_PROCEDURE_FINISHED], 0, TRUE);
- priv->finished = TRUE;
- }
-
- g_object_unref (offline_handler);
-}
-
-
-/* The confirmation dialog. */
-
-static void
-update_dialog_tree_view_hash_foreach (void *key,
- void *data,
- void *user_data)
-{
- ComponentInfo *component_info;
- const GNOME_Evolution_Connection *p;
- GtkTreeModel *model = GTK_TREE_MODEL (user_data);
- int i;
-
- component_info = (ComponentInfo *) data;
- for (i = 0, p = component_info->active_connection_list->_buffer;
- i < component_info->active_connection_list->_length;
- i++, p++) {
- GtkTreeIter iter;
- char *host = g_strdup_printf ("%s (%s)", p->hostName, p->type);
-
- gtk_list_store_prepend (GTK_LIST_STORE (model), &iter);
- gtk_list_store_set (GTK_LIST_STORE (model), &iter, 0, host, -1);
- }
-}
-
-static void
-update_dialog_clist (EShellOfflineHandler *offline_handler)
-{
- EShellOfflineHandlerPrivate *priv;
- GtkWidget *tree_view;
- GtkTreeModel *model;
- GtkTreeModel *model_sort;
- GtkCellRenderer *renderer;
- GtkTreeViewColumn *column;
-
- priv = offline_handler->priv;
- if (priv->dialog_gui == NULL)
- return;
-
- tree_view = glade_xml_get_widget (priv->dialog_gui, "active_connection_treeview");
- g_assert (GTK_IS_TREE_VIEW (tree_view));
-
- gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (tree_view), FALSE);
-
- renderer = gtk_cell_renderer_text_new ();
- column = gtk_tree_view_column_new_with_attributes ("Host", renderer, "text", 0, NULL);
- gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
-
- model = gtk_list_store_new (1, G_TYPE_STRING);
- g_hash_table_foreach (priv->id_to_component_info, update_dialog_tree_view_hash_foreach, model);
-
- gtk_tree_view_set_model (GTK_TREE_VIEW (tree_view), model);
-}
-
-static void
-dialog_handle_ok (GtkDialog *dialog,
- EShellOfflineHandler *offline_handler)
-{
- EShellOfflineHandlerPrivate *priv;
- GtkWidget *instruction_label;
-
- priv = offline_handler->priv;
-
- gtk_dialog_set_response_sensitive (dialog, GTK_RESPONSE_OK, FALSE);
-
- instruction_label = glade_xml_get_widget (priv->dialog_gui, "instruction_label");
- g_assert (instruction_label != NULL);
- g_assert (GTK_IS_LABEL (instruction_label));
-
- e_shell_offline_sync_all_folders (priv->shell, GTK_WINDOW (dialog));
-
- gtk_label_set_text (GTK_LABEL (instruction_label), _("Closing connections..."));
-
- finalize_offline (offline_handler);
-}
-
-static void
-dialog_handle_cancel (GtkDialog *dialog,
- EShellOfflineHandler *offline_handler)
-{
- EShellOfflineHandlerPrivate *priv;
-
- priv = offline_handler->priv;
-
- gtk_widget_destroy (GTK_WIDGET (dialog));
-
- g_object_unref (priv->dialog_gui);
- priv->dialog_gui = NULL;
-
- cancel_offline (offline_handler);
-}
-
-static void
-dialog_response_cb (GtkDialog *dialog,
- int response_id,
- void *data)
-{
- EShellOfflineHandler *offline_handler;
-
- offline_handler = E_SHELL_OFFLINE_HANDLER (data);
-
- switch (response_id) {
- case GTK_RESPONSE_OK:
- dialog_handle_ok (dialog, offline_handler);
- break;
-
- case GTK_RESPONSE_CANCEL:
- dialog_handle_cancel (dialog, offline_handler);
- break;
-
- default:
- g_assert_not_reached ();
- }
-}
-
-static void
-pop_up_confirmation_dialog (EShellOfflineHandler *offline_handler)
-{
- EShellOfflineHandlerPrivate *priv;
- GtkWidget *dialog;
-
- priv = offline_handler->priv;
-
- if (priv->dialog_gui == NULL) {
- priv->dialog_gui = glade_xml_new (GLADE_DIALOG_FILE_NAME, NULL, NULL);
- if (priv->dialog_gui == NULL) {
- g_warning ("Cannot load the active connection dialog (installation problem?) -- %s",
- GLADE_DIALOG_FILE_NAME);
- finalize_offline (offline_handler);
- return;
- }
- }
-
- dialog = glade_xml_get_widget (priv->dialog_gui, "active_connection_dialog");
-
- /* FIXME: do we really want this? */
- /* gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (priv->parent_shell_view)); */
- /* gtk_window_set_modal (GTK_WINDOW (dialog), TRUE); */
-
- update_dialog_clist (offline_handler);
-
- g_signal_connect (dialog, "response", G_CALLBACK (dialog_response_cb), offline_handler);
-
- gtk_widget_show (dialog);
-}
-
-
-/* GObject methods. */
-
-static void
-impl_dispose (GObject *object)
-{
- EShellOfflineHandler *offline_handler;
- EShellOfflineHandlerPrivate *priv;
-
- offline_handler = E_SHELL_OFFLINE_HANDLER (object);
- priv = offline_handler->priv;
-
- /* (We don't unref the shell, as it's our owner.) */
-
- if (priv->id_to_component_info != NULL) {
- g_hash_table_foreach (priv->id_to_component_info, hash_foreach_free_component_info, NULL);
- g_hash_table_destroy (priv->id_to_component_info);
- priv->id_to_component_info = NULL;
- }
-
- if (priv->dialog_gui != NULL) {
- GtkWidget *dialog;
-
- dialog = glade_xml_get_widget (priv->dialog_gui, "active_connection_dialog");
- gtk_widget_destroy (dialog);
-
- g_object_unref (priv->dialog_gui);
- priv->dialog_gui = NULL;
- }
-
- (* G_OBJECT_CLASS (parent_class)->dispose) (object);
-}
-
-static void
-impl_finalize (GObject *object)
-{
- EShellOfflineHandler *offline_handler;
- EShellOfflineHandlerPrivate *priv;
-
- offline_handler = E_SHELL_OFFLINE_HANDLER (object);
- priv = offline_handler->priv;
-
- g_free (priv);
-
- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
-}
-
-
-/* GTK type handling. */
-
-static void
-class_init (EShellOfflineHandlerClass *klass)
-{
- GObjectClass *object_class;
-
- object_class = G_OBJECT_CLASS (klass);
- object_class->dispose = impl_dispose;
- object_class->finalize = impl_finalize;
-
- parent_class = g_type_class_ref(gtk_object_get_type ());
-
- signals[OFFLINE_PROCEDURE_STARTED]
- = g_signal_new ("offline_procedure_started",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (EShellOfflineHandlerClass, offline_procedure_started),
- NULL, NULL,
- e_shell_marshal_NONE__NONE,
- G_TYPE_NONE, 0);
-
- signals[OFFLINE_PROCEDURE_FINISHED]
- = g_signal_new ("offline_procedure_finished",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (EShellOfflineHandlerClass, offline_procedure_finished),
- NULL, NULL,
- e_shell_marshal_NONE__BOOL,
- G_TYPE_NONE, 1,
- G_TYPE_BOOLEAN);
-}
-
-
-static void
-init (EShellOfflineHandler *shell_offline_handler)
-{
- EShellOfflineHandlerPrivate *priv;
-
- priv = g_new (EShellOfflineHandlerPrivate, 1);
-
- priv->shell = NULL;
- priv->parent_shell_view = NULL;
-
- priv->dialog_gui = NULL;
-
- priv->num_total_connections = 0;
- priv->id_to_component_info = g_hash_table_new (g_str_hash, g_str_equal);
-
- priv->procedure_in_progress = FALSE;
- priv->finished = FALSE;
-
- shell_offline_handler->priv = priv;
-}
-
-
-/**
- * e_shell_offline_handler_construct:
- * @offline_handler: A pointer to an EShellOfflineHandler to construct.
- * @shell: The Evolution shell.
- *
- * Construct the @offline_handler.
- **/
-void
-e_shell_offline_handler_construct (EShellOfflineHandler *offline_handler,
- EShell *shell)
-{
- EShellOfflineHandlerPrivate *priv;
-
- g_return_if_fail (E_IS_SHELL_OFFLINE_HANDLER (offline_handler));
- g_return_if_fail (E_IS_SHELL (shell));
-
- priv = offline_handler->priv;
-
- g_assert (priv->shell == NULL);
-
- GTK_OBJECT_UNSET_FLAGS (GTK_OBJECT (offline_handler), GTK_FLOATING);
-
- priv->shell = shell;
-}
-
-/**
- * e_shell_offline_handler_new:
- * @shell: The Evolution shell.
- *
- * Create a new offline handler.
- *
- * Return value: A pointer to the newly created EShellOfflineHandler object.
- **/
-EShellOfflineHandler *
-e_shell_offline_handler_new (EShell *shell)
-{
- EShellOfflineHandler *offline_handler;
-
- g_return_val_if_fail (E_IS_SHELL (shell), NULL);
-
- offline_handler = (EShellOfflineHandler *) g_object_new (e_shell_offline_handler_get_type (), NULL);
- e_shell_offline_handler_construct (offline_handler, shell);
-
- return offline_handler;
-}
-
-
-/**
- * e_shell_offline_handler_put_components_offline:
- * @offline_handler: A pointer to an EShellOfflineHandler object.
- *
- * Put the components offline.
- **/
-void
-e_shell_offline_handler_put_components_offline (EShellOfflineHandler *offline_handler,
- EShellView *parent_shell_view)
-{
- EShellOfflineHandlerPrivate *priv;
-
- g_return_if_fail (offline_handler != NULL);
- g_return_if_fail (E_IS_SHELL_OFFLINE_HANDLER (offline_handler));
- g_return_if_fail (parent_shell_view == NULL || E_IS_SHELL_VIEW (parent_shell_view));
-
- priv = offline_handler->priv;
-
- priv->procedure_in_progress = TRUE;
- priv->parent_shell_view = parent_shell_view;
-
- /* Add an extra ref here as the signal handlers might want to unref
- us. */
-
- g_object_ref (offline_handler);
-
- g_signal_emit (offline_handler, signals[OFFLINE_PROCEDURE_STARTED], 0);
-
- priv->finished = FALSE;
-
- if (! prepare_for_offline (offline_handler)) {
- /* FIXME: Maybe do something smarter here. */
- g_warning ("Couldn't put components off-line");
- g_signal_emit (offline_handler, signals[OFFLINE_PROCEDURE_FINISHED], 0, FALSE);
- priv->finished = TRUE;
- g_object_unref (offline_handler);
- return;
- }
-
- if (priv->num_total_connections > 0 && priv->parent_shell_view != NULL) {
- pop_up_confirmation_dialog (offline_handler);
- } else {
- e_shell_offline_sync_all_folders (priv->shell,
- parent_shell_view ? GTK_WINDOW (parent_shell_view) : NULL);
- finalize_offline (offline_handler);
- }
-
- g_object_unref (offline_handler);
-}
-
-
-E_MAKE_TYPE (e_shell_offline_handler, "EShellOfflineHandler", EShellOfflineHandler, class_init, init, PARENT_TYPE)
diff --git a/shell/e-shell-offline-handler.h b/shell/e-shell-offline-handler.h
deleted file mode 100644
index ce58dd73a9..0000000000
--- a/shell/e-shell-offline-handler.h
+++ /dev/null
@@ -1,81 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-shell-offline-handler.h
- *
- * Copyright (C) 2001 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli <ettore@ximian.com>
- */
-
-#ifndef _E_SHELL_OFFLINE_HANDLER_H_
-#define _E_SHELL_OFFLINE_HANDLER_H_
-
-#include <gtk/gtkobject.h>
-
-#include "e-component-registry.h"
-#include "e-shell-view.h"
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-#define E_TYPE_SHELL_OFFLINE_HANDLER (e_shell_offline_handler_get_type ())
-#define E_SHELL_OFFLINE_HANDLER(obj) (GTK_CHECK_CAST ((obj), E_TYPE_SHELL_OFFLINE_HANDLER, EShellOfflineHandler))
-#define E_SHELL_OFFLINE_HANDLER_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_SHELL_OFFLINE_HANDLER, EShellOfflineHandlerClass))
-#define E_IS_SHELL_OFFLINE_HANDLER(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_SHELL_OFFLINE_HANDLER))
-#define E_IS_SHELL_OFFLINE_HANDLER_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_SHELL_OFFLINE_HANDLER))
-
-
-typedef struct _EShellOfflineHandler EShellOfflineHandler;
-typedef struct _EShellOfflineHandlerPrivate EShellOfflineHandlerPrivate;
-typedef struct _EShellOfflineHandlerClass EShellOfflineHandlerClass;
-
-struct _EShellOfflineHandler {
- GtkObject parent;
-
- EShellOfflineHandlerPrivate *priv;
-};
-
-struct _EShellOfflineHandlerClass {
- GtkObjectClass parent_class;
-
- /* This signal is emitted when the offline procedure starts, i.e. the
- EShellOfflineHanlder starts contacting the components one-by-one
- telling them to be prepared to go off-line. */
- void (* offline_procedure_started) (EShellOfflineHandler *offline_handler);
-
- /* This is emitted when the procedure is finished, and all the
- components are all either off-line (@now_offline is %TRUE) or
- on-line (@now_offline is %FALSE). */
- void (* offline_procedure_finished) (EShellOfflineHandler *offline_hanlder,
- gboolean now_offline);
-};
-
-
-GtkType e_shell_offline_handler_get_type (void);
-void e_shell_offline_handler_construct (EShellOfflineHandler *offline_handler,
- EShell *shell);
-EShellOfflineHandler *e_shell_offline_handler_new (EShell *shell);
-
-void e_shell_offline_handler_put_components_offline (EShellOfflineHandler *offline_handler,
- EShellView *parent_shell_view);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* _E_SHELL_OFFLINE_HANDLER_H_ */
diff --git a/shell/e-shell-offline-sync.c b/shell/e-shell-offline-sync.c
deleted file mode 100644
index c37839e455..0000000000
--- a/shell/e-shell-offline-sync.c
+++ /dev/null
@@ -1,433 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-shell-offline-sync.c - Sync folders before going into Offline mode.
- *
- * Copyright (C) 2002 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli <ettore@ximian.com>
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "e-shell-offline-sync.h"
-
-#include "e-shell.h"
-#include "e-shell-constants.h"
-
-#include "Evolution.h"
-
-#include "e-util/e-dialog-utils.h"
-
-#include <gconf/gconf-client.h>
-
-#include <gtk/gtklabel.h>
-#include <gtk/gtkmain.h>
-#include <gtk/gtkprogressbar.h>
-#include <gtk/gtksignal.h>
-#include <gtk/gtkstock.h>
-
-#include <libgnome/gnome-i18n.h>
-
-#include <bonobo/bonobo-main.h>
-#include <bonobo/bonobo-exception.h>
-
-
-typedef struct _SyncData SyncData;
-typedef struct _SyncFolderProgressListenerServant SyncFolderProgressListenerServant;
-
-struct _SyncFolderProgressListenerServant {
- POA_GNOME_Evolution_SyncFolderProgressListener servant;
- SyncData *sync_data;
-};
-
-struct _SyncData {
- /* The shell. */
- EShell *shell;
-
- /* Parent view. */
- GtkWindow *parent_window;
-
- /* The progress dialog. */
- GtkWidget *dialog;
-
- /* Label in the progress dialog. */
- GtkWidget *label;
-
- /* Progress bar in the progress dialog. */
- GtkWidget *progress_bar;
-
- /* Path of the folder currently being synced. */
- char *current_folder_path;
-
- /* Whether to cancel the current folder's syncing. */
- gboolean cancel;
-
- /* Whether the current folder is finished syncing; used for async
- notification of completion. */
- gboolean current_folder_finished;
-
- /* CORBA cruft. */
- SyncFolderProgressListenerServant *progress_listener_servant;
- GNOME_Evolution_SyncFolderProgressListener progress_listener_objref;
-};
-
-
-/* The progress listener interface. */
-
-static PortableServer_ServantBase__epv SyncFolderProgressListener_base_epv;
-static POA_GNOME_Evolution_SyncFolderProgressListener__epv SyncFolderProgressListener_epv;
-static POA_GNOME_Evolution_SyncFolderProgressListener__vepv SyncFolderProgressListener_vepv;
-
-static SyncFolderProgressListenerServant *
-progress_listener_servant_new (SyncData *sync_data)
-{
- SyncFolderProgressListenerServant *servant;
-
- servant = g_new0 (SyncFolderProgressListenerServant, 1);
-
- servant->servant.vepv = &SyncFolderProgressListener_vepv;
- servant->sync_data = sync_data;
-
- return servant;
-}
-
-static void
-progress_listener_servant_free (SyncFolderProgressListenerServant *servant)
-{
- CORBA_Environment ev;
- PortableServer_ObjectId *oid;
-
- CORBA_exception_init (&ev);
-
- oid = PortableServer_POA_servant_to_id (bonobo_poa (), servant, &ev);
- PortableServer_POA_deactivate_object (bonobo_poa (), oid, &ev);
- CORBA_free (oid);
-
- CORBA_exception_free (&ev);
-
- g_free (servant);
-}
-
-static void
-impl_SyncFolderProgressListener_updateProgress (PortableServer_Servant servant,
- const CORBA_float percent,
- CORBA_Environment *ev)
-{
- SyncData *sync_data;
-
- sync_data = ((SyncFolderProgressListenerServant *) servant)->sync_data;
- gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (sync_data->progress_bar), percent);
-}
-
-static void
-impl_SyncFolderProgressListener_reportSuccess (PortableServer_Servant servant,
- CORBA_Environment *ev)
-{
- SyncData *sync_data;
-
- sync_data = ((SyncFolderProgressListenerServant *) servant)->sync_data;
- sync_data->current_folder_finished = TRUE;
-}
-
-static void
-impl_SyncFolderProgressListener_reportFailure (PortableServer_Servant servant,
- const CORBA_char *message,
- CORBA_Environment *ev)
-{
- EFolder *folder;
- SyncData *sync_data;
-
- sync_data = ((SyncFolderProgressListenerServant *) servant)->sync_data;
-
- folder = e_storage_set_get_folder (e_shell_get_storage_set (sync_data->shell),
- sync_data->current_folder_path);
-
- /* FIXME -- We probably should give the user more of a chance to do
- something about it. */
- e_notice (sync_data->dialog, GTK_MESSAGE_ERROR,
- _("Error synchronizing \"%s\":\n%s"), e_folder_get_name (folder), message);
-
- sync_data->current_folder_finished = TRUE;
-}
-
-static gboolean
-setup_progress_listener (SyncData *sync_data)
-{
- SyncFolderProgressListenerServant *servant;
- CORBA_Environment ev;
-
- SyncFolderProgressListener_base_epv._private = NULL;
- SyncFolderProgressListener_base_epv.finalize = NULL;
- SyncFolderProgressListener_base_epv.default_POA = NULL;
-
- SyncFolderProgressListener_epv.updateProgress = impl_SyncFolderProgressListener_updateProgress;
- SyncFolderProgressListener_epv.reportSuccess = impl_SyncFolderProgressListener_reportSuccess;
- SyncFolderProgressListener_epv.reportFailure = impl_SyncFolderProgressListener_reportFailure;
-
- SyncFolderProgressListener_vepv._base_epv = &SyncFolderProgressListener_base_epv;
- SyncFolderProgressListener_vepv.GNOME_Evolution_SyncFolderProgressListener_epv = &SyncFolderProgressListener_epv;
-
- servant = progress_listener_servant_new (sync_data);
-
- CORBA_exception_init (&ev);
-
- POA_GNOME_Evolution_SyncFolderProgressListener__init ((PortableServer_Servant) servant, &ev);
- if (ev._major != CORBA_NO_EXCEPTION) {
- g_warning ("Cannot initialize GNOME::Evolution::Offline::ProgressListener");
- progress_listener_servant_free (servant);
- CORBA_exception_free (&ev);
- return FALSE;
- }
-
- CORBA_free (PortableServer_POA_activate_object (bonobo_poa (), servant, &ev));
-
- if (ev._major != CORBA_NO_EXCEPTION) {
- g_warning ("Cannot activate GNOME::Evolution::Offline::ProgressListener");
- progress_listener_servant_free (servant);
- CORBA_exception_free (&ev);
- return FALSE;
- }
-
- sync_data->progress_listener_servant = servant;
- sync_data->progress_listener_objref = PortableServer_POA_servant_to_reference (bonobo_poa (),
- servant, &ev);
-
- CORBA_exception_free (&ev);
-
- return TRUE;
-}
-
-
-/* Setting up the progress dialog. */
-
-static void
-progress_dialog_response_callback (GtkDialog *dialog,
- int response_id,
- void *data)
-{
- SyncData *sync_data;
-
- sync_data = (SyncData *) data;
- sync_data->cancel = TRUE;
-}
-
-static void
-setup_dialog (SyncData *sync_data)
-{
- sync_data->dialog = gtk_dialog_new_with_buttons (_("Syncing Folder"),
- sync_data->parent_window,
- 0,
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- NULL);
- gtk_widget_set_size_request (sync_data->dialog, 300, -1);
- gtk_window_set_resizable (GTK_WINDOW (sync_data->dialog), FALSE);
-
- g_signal_connect (sync_data->dialog, "response",
- G_CALLBACK (progress_dialog_response_callback), sync_data);
-
- sync_data->label = gtk_label_new ("");
- gtk_box_pack_start (GTK_BOX (GTK_DIALOG (sync_data->dialog)->vbox),
- sync_data->label, FALSE, TRUE, 0);
-
- sync_data->progress_bar = gtk_progress_bar_new ();
- gtk_box_pack_start (GTK_BOX (GTK_DIALOG (sync_data->dialog)->vbox),
- sync_data->progress_bar, FALSE, TRUE, 0);
-
- gtk_widget_show_all (sync_data->dialog);
-}
-
-
-/* Sync the folder at the specified @folder_path. */
-static void
-sync_folder (SyncData *sync_data,
- const char *folder_path,
- int num,
- int total)
-{
- EvolutionShellComponentClient *component_client;
- EStorageSet *storage_set;
- GNOME_Evolution_Folder *corba_folder;
- GNOME_Evolution_Offline offline_interface;
- CORBA_Environment ev;
- EFolder *folder;
- char *evolution_uri;
- char *msg;
-
- CORBA_exception_init (&ev);
-
- /* Retrieve the folder that needs to be synced from the storage set, as
- well as the component that should perform the syncing. */
-
- storage_set = e_shell_get_storage_set (sync_data->shell);
-
- folder = e_storage_set_get_folder (storage_set, folder_path);
- if (folder == NULL) {
- /* This might be a remote folder that is not visible right now,
- or is otherwise hidden from the tree somehow. So we just
- ignore it, and keep going without signalling any error. */
- return;
- }
-
- /* Don't attempt to sync folders that don't have the can_sync_offline
- property set. */
- if (! e_folder_get_can_sync_offline (folder))
- return;
-
- component_client = e_folder_type_registry_get_handler_for_type (e_shell_get_folder_type_registry (sync_data->shell),
- e_folder_get_type_string (folder));
-
- offline_interface = evolution_shell_component_client_get_offline_interface (component_client);
- if (offline_interface == CORBA_OBJECT_NIL) {
- /* The component doesn't support going off-line, just ignore
- this as it's probably a programming error in the
- implementation of the component. */
- return;
- }
-
- /* Prepare the CORBA folder to be passed to the component. */
-
- corba_folder = GNOME_Evolution_Folder__alloc ();
- evolution_uri = g_strconcat (E_SHELL_URI_PREFIX, "/", folder_path, NULL);
- e_folder_to_corba (folder, evolution_uri, corba_folder);
- g_free (evolution_uri);
-
- /* Prepare the dialog. */
-
- msg = g_strdup_printf (_("Synchronizing \"%s\" (%d of %d) ..."),
- e_folder_get_name (folder), num, total);
- gtk_label_set_text (GTK_LABEL (sync_data->label), msg);
- g_free (msg);
-
- gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (sync_data->progress_bar), 0.0);
-
- /* Get the data ready. */
-
- g_free (sync_data->current_folder_path);
- sync_data->current_folder_path = g_strdup (folder_path);
- sync_data->current_folder_finished = FALSE;
- sync_data->cancel = FALSE;
-
- /* Tell the component to start syncing. */
-
- GNOME_Evolution_Offline_syncFolder (offline_interface,
- corba_folder,
- sync_data->progress_listener_objref,
- &ev);
- if (BONOBO_EX (&ev)) {
- g_warning ("Error invoking ::syncFolder -- %s", BONOBO_EX_REPOID (&ev));
- CORBA_free (corba_folder);
- CORBA_exception_free (&ev);
- return;
- }
-
- /* Wait for the component to signal completion... */
-
- while (! sync_data->current_folder_finished && ! sync_data->cancel) {
- gtk_main_iteration ();
-
- /* Check if the user clicked the Cancel button. */
- if (sync_data->cancel) {
- gtk_dialog_set_response_sensitive (GTK_DIALOG (sync_data->dialog),
- GTK_RESPONSE_CANCEL, FALSE);
-
- GNOME_Evolution_Offline_cancelSyncFolder (offline_interface, corba_folder, &ev);
-
- while (! sync_data->current_folder_finished)
- gtk_main_iteration ();
-
- break;
- }
- }
-
- /* All done. */
-
- CORBA_free (corba_folder);
- CORBA_exception_free (&ev);
-}
-
-/* Free up the data needed for syncing. */
-static void
-cleanup (SyncData *sync_data)
-{
- CORBA_Environment ev;
-
- CORBA_exception_init (&ev);
-
- if (sync_data->dialog != NULL)
- gtk_widget_destroy (sync_data->dialog);
-
- if (sync_data->progress_listener_servant != NULL)
- progress_listener_servant_free (sync_data->progress_listener_servant);
-
- if (sync_data->progress_listener_objref != CORBA_OBJECT_NIL)
- CORBA_Object_release (sync_data->progress_listener_objref, &ev);
-
- g_free (sync_data);
-
- CORBA_exception_free (&ev);
-}
-
-
-void
-e_shell_offline_sync_all_folders (EShell *shell,
- GtkWindow *parent_window)
-{
- GConfClient *gconf_client;
- SyncData *sync_data;
- GSList *path_list;
- GSList *p;
- int i;
-
- gconf_client = gconf_client_get_default ();
-
- path_list = gconf_client_get_list (gconf_client, "/apps/evolution/shell/offline/folder_paths",
- GCONF_VALUE_STRING, NULL);
-
- sync_data = g_new0 (SyncData, 1);
- sync_data->shell = shell;
- sync_data->parent_window = parent_window;
-
- /* Initialize everything, then go ahead and sync. */
-
- if (! setup_progress_listener (sync_data))
- goto done;
-
- setup_dialog (sync_data);
-
- for (p = path_list, i = 1; p != NULL; p = p->next, i ++) {
- const char *path;
-
- path = (const char *) p->data;
-
- sync_folder (sync_data, path, i, g_slist_length (path_list));
-
- /* If the operation has been cancelled, stop syncing and
- return. */
- if (sync_data->cancel) {
- /* FIXME: Do we want to pop up a dialog asking for
- confirmation? */
- break;
- }
- }
-
- done:
- cleanup (sync_data);
-
- g_slist_foreach (path_list, (GFunc) g_free, NULL);
- g_slist_free (path_list);
-}
diff --git a/shell/e-shell-offline-sync.h b/shell/e-shell-offline-sync.h
deleted file mode 100644
index f214938585..0000000000
--- a/shell/e-shell-offline-sync.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-shell-offline-sync.h - Sync folders before going into Offline mode.
- *
- * Copyright (C) 2002 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli <ettore@ximian.com>
- */
-
-#ifndef E_SHELL_OFFLINE_SYNC_H
-#define E_SHELL_OFFLINE_SYNC_H
-
-#include "e-shell.h"
-
-#include <gtk/gtkwidget.h>
-
-void e_shell_offline_sync_all_folders (EShell *shell,
- GtkWindow *widget);
-
-#endif /* E_SHELL_OFFLINE_SYNC_H */
diff --git a/shell/e-shell-settings-dialog.c b/shell/e-shell-settings-dialog.c
deleted file mode 100644
index ed688828db..0000000000
--- a/shell/e-shell-settings-dialog.c
+++ /dev/null
@@ -1,392 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-shell-settings-dialog.c
- *
- * Copyright (C) 2002 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli <ettore@ximian.com>
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "e-shell-settings-dialog.h"
-
-#include "e-corba-config-page.h"
-
-#include "e-util/e-lang-utils.h"
-
-#include <gal/util/e-util.h>
-
-#include <bonobo/bonobo-widget.h>
-#include <bonobo/bonobo-exception.h>
-
-#include <bonobo-activation/bonobo-activation.h>
-
-#include <string.h>
-
-
-#define PARENT_TYPE e_multi_config_dialog_get_type ()
-static EMultiConfigDialogClass *parent_class = NULL;
-
-
-
-struct _EShellSettingsDialogPrivate {
- GHashTable *types;
-};
-
-
-/* FIXME ugly hack to work around that sizing of invisible widgets is broken
- with Bonobo. */
-
-static void
-set_dialog_size (EShellSettingsDialog *dialog)
-{
- PangoLayout *layout;
- PangoContext *context;
- PangoFontMetrics *metrics;
- int width, height;
-
- layout = gtk_widget_create_pango_layout (GTK_WIDGET (dialog), "M");
- context = pango_layout_get_context (layout);
- metrics = pango_context_get_metrics (context,
- gtk_widget_get_style (GTK_WIDGET (dialog))->font_desc,
- pango_context_get_language (context));
-
- pango_layout_get_pixel_size (layout, &width, NULL);
-
- width *= 60;
- height = PANGO_PIXELS (pango_font_metrics_get_ascent (metrics)
- + pango_font_metrics_get_descent (metrics)) * 30;
-
- gtk_window_set_default_size((GtkWindow *)dialog, width, height);
- g_object_unref (layout);
- pango_font_metrics_unref (metrics);
-}
-
-
-/* Page handling. */
-
-struct _Page {
- char *title;
- char *description;
- GdkPixbuf *icon;
- Bonobo_ActivationProperty *type;
- int priority;
- EConfigPage *page_widget;
-};
-typedef struct _Page Page;
-
-static Page *
-page_new (const char *title,
- const char *description,
- GdkPixbuf *icon,
- Bonobo_ActivationProperty *type,
- int priority,
- EConfigPage *page_widget)
-{
- Page *page;
-
- if (icon != NULL)
- g_object_ref (icon);
-
- page = g_new (Page, 1);
- page->title = g_strdup (title);
- page->description = g_strdup (description);
- page->icon = icon;
- page->type = type;
- page->priority = priority;
- page->page_widget = page_widget;
-
- return page;
-}
-
-static void
-page_free (Page *page)
-{
- g_free (page->title);
- g_free (page->description);
-
- if (page->icon != NULL)
- g_object_unref (page->icon);
-
- g_free (page);
-}
-
-static int
-compare_page_func (const void *a,
- const void *b)
-{
- const Page *page_a;
- const Page *page_b;
-
- page_a = (const Page *) a;
- page_b = (const Page *) b;
-
- if (page_a->priority == page_b->priority)
- return strcmp (page_a->title, page_b->title);
-
- return page_a->priority - page_b->priority;
-}
-
-static GList *
-sort_page_list (GList *list)
-{
- return g_list_sort (list, compare_page_func);
-}
-
-static void
-load_pages (EShellSettingsDialog *dialog)
-{
- EShellSettingsDialogPrivate *priv;
- Bonobo_ServerInfoList *control_list;
- CORBA_Environment ev;
- GSList *language_list;
- GList *page_list;
- GList *p;
- int i, j;
-
- priv = dialog->priv;
-
- CORBA_exception_init (&ev);
-
- control_list = bonobo_activation_query ("defined(evolution:config_item:title)", NULL, &ev);
- if (ev._major != CORBA_NO_EXCEPTION || control_list == NULL) {
- g_warning ("Cannot load configuration pages -- %s", BONOBO_EX_REPOID (&ev));
- CORBA_exception_free (&ev);
- return;
- }
-
- CORBA_exception_free (&ev);
-
- language_list = e_get_language_list ();
-
- page_list = NULL;
- for (i = 0; i < control_list->_length; i ++) {
- CORBA_Object corba_object;
- Bonobo_ServerInfo *info;
- const char *title;
- const char *description;
- const char *icon_path;
- const char *priority_string;
- Bonobo_ActivationProperty *type;
- int priority;
- GdkPixbuf *icon;
-
- CORBA_exception_init (&ev);
-
- info = & control_list->_buffer[i];
-
- title = bonobo_server_info_prop_lookup (info, "evolution:config_item:title", language_list);
- description = bonobo_server_info_prop_lookup (info, "evolution:config_item:description", language_list);
- icon_path = bonobo_server_info_prop_lookup (info, "evolution:config_item:icon_name", NULL);
- type = bonobo_server_info_prop_find (info, "evolution:config_item:type");
- priority_string = bonobo_server_info_prop_lookup (info, "evolution:config_item:priority", NULL);
-
- if (icon_path == NULL) {
- icon = NULL;
- } else {
- if (g_path_is_absolute (icon_path)) {
- icon = gdk_pixbuf_new_from_file (icon_path, NULL);
- } else {
- char *real_icon_path;
-
- real_icon_path = g_build_filename (EVOLUTION_IMAGES, icon_path, NULL);
- icon = gdk_pixbuf_new_from_file (real_icon_path, NULL);
- g_free (real_icon_path);
- }
- }
-
- if (type != NULL && type->v._d != Bonobo_ACTIVATION_P_STRINGV)
- type = NULL;
- if (priority_string == NULL)
- priority = 0xffff;
- else
- priority = atoi (priority_string);
-
- corba_object = bonobo_activation_activate_from_id ((char *) info->iid, 0, NULL, &ev);
-
- if (! BONOBO_EX (&ev)) {
- Page *page;
-
- page = page_new (title, description, icon, type, priority,
- E_CONFIG_PAGE (e_corba_config_page_new_from_objref (corba_object)));
-
- page_list = g_list_prepend (page_list, page);
- } else {
- char *bonobo_ex_text = bonobo_exception_get_text (&ev);
- g_warning ("Cannot activate %s -- %s", info->iid, bonobo_ex_text);
- g_free (bonobo_ex_text);
- }
-
- if (icon != NULL)
- g_object_unref (icon);
-
- CORBA_exception_free (&ev);
- }
-
- page_list = sort_page_list (page_list);
- for (p = page_list, i = 0; p != NULL; p = p->next, i++) {
- Page *page;
-
- page = (Page *) p->data;
-
- e_multi_config_dialog_add_page (E_MULTI_CONFIG_DIALOG (dialog),
- page->title,
- page->description,
- page->icon,
- page->page_widget);
-
- if (page->type != NULL) {
- Bonobo_StringList list = page->type->v._u.value_stringv;
-
- for (j = 0; j < list._length; j++) {
- if (g_hash_table_lookup (priv->types, list._buffer[j]) == NULL)
- g_hash_table_insert (priv->types, g_strdup (list._buffer[j]),
- GINT_TO_POINTER (i));
- }
- }
-
-
- page_free (page);
- }
-
- g_list_free (page_list);
- e_free_language_list (language_list);
- CORBA_free (control_list);
-}
-
-
-/* GtkWidget methods. */
-
-static void
-impl_realize (GtkWidget *widget)
-{
- EShellSettingsDialog *dialog;
-
- dialog = E_SHELL_SETTINGS_DIALOG (widget);
-
- set_dialog_size (dialog);
-
- (* GTK_WIDGET_CLASS (parent_class)->realize) (widget);
-}
-
-
-/* GtkObject methods. */
-
-static gboolean
-destroy_type_entry (gpointer key, gpointer value, gpointer data)
-{
- g_free (key);
-
- return TRUE;
-}
-
-static void
-impl_finalize (GObject *object)
-{
- EShellSettingsDialog *dialog;
- EShellSettingsDialogPrivate *priv;
-
- dialog = E_SHELL_SETTINGS_DIALOG (object);
- priv = dialog->priv;
-
- g_hash_table_foreach_remove (priv->types, destroy_type_entry, NULL);
- g_hash_table_destroy (priv->types);
-
- g_free (priv);
-
- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
-}
-
-
-static void
-class_init (EShellSettingsDialog *class)
-{
- GObjectClass *object_class;
- GtkWidgetClass *widget_class;
-
- object_class = G_OBJECT_CLASS (class);
- object_class->finalize = impl_finalize;
-
- widget_class = GTK_WIDGET_CLASS (class);
- widget_class->realize = impl_realize;
-
- parent_class = g_type_class_ref(PARENT_TYPE);
-}
-
-static void
-init (EShellSettingsDialog *dialog)
-{
- EShellSettingsDialogPrivate *priv;
-
- priv = g_new (EShellSettingsDialogPrivate, 1);
- priv->types = g_hash_table_new (g_str_hash, g_str_equal);
-
- dialog->priv = priv;
-
- load_pages (dialog);
-
- gtk_container_set_border_width (GTK_CONTAINER (dialog), 6);
- gtk_window_set_title (GTK_WINDOW (dialog), _("Evolution Settings"));
-}
-
-
-GtkWidget *
-e_shell_settings_dialog_new ()
-{
- EShellSettingsDialog *new;
-
- new = g_object_new (e_shell_settings_dialog_get_type (), NULL);
-
- return GTK_WIDGET (new);
-}
-
-void
-e_shell_settings_dialog_show_type (EShellSettingsDialog *dialog, const char *type)
-{
- EShellSettingsDialogPrivate *priv;
- gpointer key, value;
- int page;
-
- g_return_if_fail (dialog != NULL);
- g_return_if_fail (E_IS_SHELL_SETTINGS_DIALOG (dialog));
- g_return_if_fail (type != NULL);
-
- priv = dialog->priv;
-
- if (!g_hash_table_lookup_extended (priv->types, type, &key, &value)) {
- char *slash, *supertype;
-
- slash = strchr (type, '/');
- if (slash) {
- supertype = g_strndup (type, slash - type);
- value = g_hash_table_lookup (priv->types, type);
- g_free (supertype);
- } else
- value = NULL;
- }
- page = GPOINTER_TO_INT (value);
-
- e_multi_config_dialog_show_page (E_MULTI_CONFIG_DIALOG (dialog), page);
-}
-
-
-E_MAKE_TYPE (e_shell_settings_dialog, "EShellSettingsDialog", EShellSettingsDialog,
- class_init, init, PARENT_TYPE)
-
diff --git a/shell/e-shell-settings-dialog.h b/shell/e-shell-settings-dialog.h
deleted file mode 100644
index 49f3fb60f3..0000000000
--- a/shell/e-shell-settings-dialog.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-shell-settings-dialog.h
- *
- * Copyright (C) 2002 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli <ettore@ximian.com>
- */
-
-#ifndef _E_SHELL_SETTINGS_DIALOG_H_
-#define _E_SHELL_SETTINGS_DIALOG_H_
-
-#include "e-multi-config-dialog.h"
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-#define E_TYPE_SHELL_SETTINGS_DIALOG (e_shell_settings_dialog_get_type ())
-#define E_SHELL_SETTINGS_DIALOG(obj) (GTK_CHECK_CAST ((obj), E_TYPE_SHELL_SETTINGS_DIALOG, EShellSettingsDialog))
-#define E_SHELL_SETTINGS_DIALOG_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_SHELL_SETTINGS_DIALOG, EShellSettingsDialogClass))
-#define E_IS_SHELL_SETTINGS_DIALOG(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_SHELL_SETTINGS_DIALOG))
-#define E_IS_SHELL_SETTINGS_DIALOG_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_SHELL_SETTINGS_DIALOG))
-
-
-typedef struct _EShellSettingsDialog EShellSettingsDialog;
-typedef struct _EShellSettingsDialogPrivate EShellSettingsDialogPrivate;
-typedef struct _EShellSettingsDialogClass EShellSettingsDialogClass;
-
-struct _EShellSettingsDialog {
- EMultiConfigDialog parent;
-
- EShellSettingsDialogPrivate *priv;
-};
-
-struct _EShellSettingsDialogClass {
- EMultiConfigDialogClass parent_class;
-};
-
-
-GtkType e_shell_settings_dialog_get_type (void);
-GtkWidget *e_shell_settings_dialog_new (void);
-void e_shell_settings_dialog_show_type (EShellSettingsDialog *dialog,
- const char *type);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* _E_SHELL_SETTINGS_DIALOG_H_ */
diff --git a/shell/e-shell-shared-folder-picker-dialog.c b/shell/e-shell-shared-folder-picker-dialog.c
deleted file mode 100644
index 191eccbbe3..0000000000
--- a/shell/e-shell-shared-folder-picker-dialog.c
+++ /dev/null
@@ -1,540 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-shell-shared-folder-picker-dialog.c - Implementation for the shared folder
- * picker dialog.
- *
- * Copyright (C) 2002 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli <ettore@ximian.com>
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "e-shell-shared-folder-picker-dialog.h"
-
-#include "e-corba-storage.h"
-#include "e-shell-constants.h"
-#include "evolution-storage-listener.h"
-
-#include "Evolution-Addressbook-SelectNames.h"
-
-#include "e-util/e-dialog-utils.h"
-
-#include <libgnome/gnome-i18n.h>
-#include <glade/glade.h>
-
-#include <bonobo/bonobo-exception.h>
-#include <bonobo/bonobo-listener.h>
-#include <bonobo/bonobo-widget.h>
-
-#include <bonobo-activation/bonobo-activation.h>
-
-#include <gtk/gtk.h>
-#include <gtk/gtksignal.h>
-
-
-/* Timeout for showing the progress dialog (msecs). */
-
-#define PROGRESS_DIALOG_DELAY 500
-
-
-/* Dialog creation and handling. */
-
-static void
-setup_folder_name_combo (GladeXML *glade_xml)
-{
- GtkWidget *combo;
- GList *string_list;
- char *strings[] = {
- "Calendar",
- "Inbox",
- "Contacts",
- NULL
- /* FIXME: Should these be translated? */
- };
- int i;
-
- combo = glade_xml_get_widget (glade_xml, "folder-name-combo");
- g_assert (GTK_IS_COMBO (combo));
-
- string_list = NULL;
- for (i = 0; strings[i] != NULL; i ++)
- string_list = g_list_append (string_list, strings[i]);
- gtk_combo_set_popdown_strings (GTK_COMBO (combo), string_list);
- g_list_free (string_list);
-
- gtk_entry_set_text (GTK_ENTRY (GTK_COMBO (combo)->entry), "Calendar");
-}
-
-static void
-user_clicked (GtkWidget *button, GNOME_Evolution_Addressbook_SelectNames corba_iface)
-{
- CORBA_Environment ev;
-
- CORBA_exception_init (&ev);
- GNOME_Evolution_Addressbook_SelectNames_activateDialog (corba_iface, "User", &ev);
-
- if (BONOBO_EX (&ev))
- g_warning ("Cannot activate SelectNames dialog -- %s", BONOBO_EX_REPOID (&ev));
-
- CORBA_exception_free (&ev);
-}
-
-static GtkWidget *
-setup_name_selector (GladeXML *glade_xml,
- GNOME_Evolution_Addressbook_SelectNames *iface_ret)
-{
- GNOME_Evolution_Addressbook_SelectNames corba_iface;
- Bonobo_Control control;
- CORBA_Environment ev;
- GtkWidget *placeholder;
- GtkWidget *control_widget;
- GtkWidget *button;
-
- placeholder = glade_xml_get_widget (glade_xml, "user-picker-placeholder");
- g_assert (GTK_IS_CONTAINER (placeholder));
-
- CORBA_exception_init (&ev);
-
- corba_iface = bonobo_activation_activate_from_id ("OAFIID:GNOME_Evolution_Addressbook_SelectNames",
- 0, NULL, &ev);
- if (corba_iface == CORBA_OBJECT_NIL || BONOBO_EX (&ev)) {
- g_warning ("Cannot activate SelectNames -- %s", BONOBO_EX_REPOID (&ev));
- CORBA_exception_free (&ev);
- return CORBA_OBJECT_NIL;
- }
-
- GNOME_Evolution_Addressbook_SelectNames_addSectionWithLimit (corba_iface, "User", "User", 1, &ev);
- if (BONOBO_EX (&ev)) {
- g_warning ("Cannot add SelectNames section -- %s", BONOBO_EX_REPOID (&ev));
- goto err;
- }
-
- control = GNOME_Evolution_Addressbook_SelectNames_getEntryBySection (corba_iface, "User", &ev);
- if (BONOBO_EX (&ev)) {
- g_warning ("Cannot get SelectNames section -- %s", BONOBO_EX_REPOID (&ev));
- goto err;
- }
-
- control_widget = bonobo_widget_new_control_from_objref (control, CORBA_OBJECT_NIL);
- gtk_container_add (GTK_CONTAINER (placeholder), control_widget);
- gtk_widget_show (control_widget);
-
- button = glade_xml_get_widget (glade_xml, "button-user");
- g_signal_connect (button, "clicked", G_CALLBACK (user_clicked), corba_iface);
-
- CORBA_exception_free (&ev);
- *iface_ret = corba_iface;
- return control_widget;
-
- err:
- bonobo_object_release_unref (corba_iface, NULL);
- CORBA_exception_free (&ev);
- return NULL;
-}
-
-static void
-server_option_menu_item_activate_callback (GtkMenuItem *menu_item,
- void *data)
-{
- char **storage_name_return;
-
- storage_name_return = (char **) data;
- if (*storage_name_return != NULL)
- g_free (*storage_name_return);
-
- *storage_name_return = g_strdup ((const char *) g_object_get_data (G_OBJECT (menu_item), "storage_name"));
-}
-
-static void
-folder_name_entry_changed_callback (GtkEditable *editable,
- void *data)
-{
- GtkDialog *dialog = GTK_DIALOG (data);
- const char *folder_name_text = gtk_entry_get_text (GTK_ENTRY (editable));
-
- if (*folder_name_text == '\0')
- gtk_dialog_set_response_sensitive (dialog, GTK_RESPONSE_OK, FALSE);
- else
- gtk_dialog_set_response_sensitive (dialog, GTK_RESPONSE_OK, TRUE);
-}
-
-static void
-setup_server_option_menu (EShell *shell,
- GladeXML *glade_xml,
- char **storage_name_return)
-{
- GList *storages;
- GList *p;
- GtkWidget *widget;
- GtkWidget *menu;
-
- widget = glade_xml_get_widget (glade_xml, "server-option-menu");
- g_assert (GTK_IS_OPTION_MENU (widget));
-
- menu = gtk_menu_new ();
- gtk_widget_show (menu);
-
- *storage_name_return = NULL;
- storages = e_storage_set_get_storage_list (e_shell_get_storage_set (shell));
- for (p = storages; p != NULL; p = p->next) {
- GtkWidget *menu_item;
- const char *storage_name;
-
- if (!e_storage_supports_shared_folders (p->data))
- continue;
-
- storage_name = e_storage_get_name (E_STORAGE (p->data));
-
- menu_item = gtk_menu_item_new_with_label (storage_name);
- g_signal_connect (menu_item, "activate",
- G_CALLBACK (server_option_menu_item_activate_callback),
- storage_name_return);
- g_object_set_data_full (G_OBJECT (menu_item), "storage_name", g_strdup (storage_name), g_free);
-
- gtk_widget_show (menu_item);
- gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item);
-
- if (*storage_name_return == NULL)
- *storage_name_return = g_strdup (storage_name);
- }
-
- gtk_option_menu_set_menu (GTK_OPTION_MENU (widget), menu);
-
- /* FIXME: Default to the current storage in the shell view. */
-}
-
-static gboolean
-show_dialog (EShell *shell,
- EShellView *parent,
- char **user_email_address_return,
- char **storage_name_return,
- char **folder_name_return)
-{
- GNOME_Evolution_Addressbook_SelectNames corba_iface;
- GladeXML *glade_xml;
- GtkWidget *dialog;
- GtkWidget *name_selector_widget;
- GtkWidget *folder_name_entry;
- char *user_email_address;
- int response;
-
- glade_xml = glade_xml_new (EVOLUTION_GLADEDIR "/e-shell-shared-folder-picker-dialog.glade",
- NULL, NULL);
- g_assert (glade_xml != NULL);
-
- name_selector_widget = setup_name_selector (glade_xml, &corba_iface);
- if (name_selector_widget == NULL)
- return FALSE;
-
- setup_server_option_menu (shell, glade_xml, storage_name_return);
- setup_folder_name_combo (glade_xml);
-
- dialog = glade_xml_get_widget (glade_xml, "dialog");
- g_assert (dialog != NULL);
-
- folder_name_entry = glade_xml_get_widget (glade_xml, "folder-name-entry");
-
- /* Connect the callback to set the OK button insensitive when there is
- no text in the folder_name_entry. Notice that we put a value there
- by default so the OK button is sensitive by default. */
- g_signal_connect (folder_name_entry, "changed",
- G_CALLBACK (folder_name_entry_changed_callback), dialog);
-
- while (TRUE) {
- response = gtk_dialog_run (GTK_DIALOG (dialog));
- if (response == GTK_RESPONSE_CANCEL) {
- g_free (*storage_name_return);
- *storage_name_return = NULL;
- gtk_widget_destroy (dialog);
- bonobo_object_release_unref (corba_iface, NULL);
- return FALSE;
- }
-
- bonobo_widget_get_property (BONOBO_WIDGET (name_selector_widget),
- "addresses", TC_CORBA_string, &user_email_address,
- NULL);
-
- if (user_email_address != NULL && *user_email_address != '\0')
- break;
-
- g_free (user_email_address);
-
- /* It would be nice to insensitivize the OK button appropriately
- instead of doing this, but unfortunately we can't do this for the
- Bonobo control. */
- e_notice (dialog, GTK_MESSAGE_ERROR, _("Please select a user."));
- }
-
- *user_email_address_return = user_email_address;
- *folder_name_return = g_strdup (gtk_entry_get_text (GTK_ENTRY (folder_name_entry)));
-
- gtk_widget_destroy (dialog);
- bonobo_object_release_unref (corba_iface, NULL);
- return TRUE;
-}
-
-
-/* Discovery process. */
-
-struct _DiscoveryData {
- EShell *shell;
- EShellView *parent;
- GtkWidget *dialog;
- char *user_email_address;
- char *folder_name;
- EStorage *storage;
-};
-typedef struct _DiscoveryData DiscoveryData;
-
-static void
-cleanup_discovery (DiscoveryData *discovery_data)
-{
- if (discovery_data->dialog != NULL)
- gtk_widget_destroy (discovery_data->dialog);
-
- g_free (discovery_data->user_email_address);
- g_free (discovery_data->folder_name);
- g_object_unref (discovery_data->storage);
- g_free (discovery_data);
-}
-
-static int
-progress_bar_timeout_callback (void *data)
-{
- gtk_progress_bar_pulse (GTK_PROGRESS_BAR (data));
-
- return TRUE;
-}
-
-static void
-progress_bar_weak_notify (void *data,
- GObject *where_the_object_was)
-{
- int timeout_id;
-
- timeout_id = GPOINTER_TO_INT (data);
- g_source_remove (timeout_id);
-}
-
-/* This is invoked if the "Cancel" button is clicked. */
-static void
-progress_dialog_clicked_callback (GtkDialog *dialog,
- int response,
- void *data)
-{
- DiscoveryData *discovery_data;
-
- discovery_data = (DiscoveryData *) data;
-
- e_storage_cancel_discover_shared_folder (discovery_data->storage,
- discovery_data->user_email_address,
- discovery_data->folder_name);
-
- cleanup_discovery (discovery_data);
-}
-
-static int
-progress_dialog_show_timeout_callback (void *data)
-{
- GtkWidget *dialog;
-
- dialog = GTK_WIDGET (data);
- gtk_widget_show_all (dialog);
- return FALSE;
-}
-
-static GtkWidget *
-create_progress_dialog (EShell *shell,
- EStorage *storage,
- const char *user_email_address,
- const char *folder_name)
-{
- GtkWidget *dialog;
- GtkWidget *label;
- GtkWidget *progress_bar;
- int timeout_id;
- char *text;
-
- dialog = gtk_dialog_new_with_buttons (_("Opening Folder"), NULL, 0,
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- NULL);
- gtk_widget_set_size_request (dialog, 300, -1);
- gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE);
-
- text = g_strdup_printf (_("Opening Folder \"%s\""), folder_name);
- label = gtk_label_new (text);
- gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), label, FALSE, TRUE, 0);
- g_free (text);
-
- text = g_strdup_printf (_("in \"%s\" ..."), e_storage_get_name (storage));
- label = gtk_label_new (text);
- gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), label, FALSE, TRUE, 0);
- g_free (text);
-
- progress_bar = gtk_progress_bar_new ();
- gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), progress_bar, FALSE, TRUE, 0);
-
- timeout_id = g_timeout_add (50, progress_bar_timeout_callback, progress_bar);
- g_object_weak_ref (G_OBJECT (progress_bar), progress_bar_weak_notify, GINT_TO_POINTER (timeout_id));
-
- timeout_id = g_timeout_add (PROGRESS_DIALOG_DELAY, progress_dialog_show_timeout_callback, dialog);
- g_object_weak_ref (G_OBJECT (progress_bar), progress_bar_weak_notify, GINT_TO_POINTER (timeout_id));
-
- return dialog;
-}
-
-static void
-shell_weak_notify (void *data,
- GObject *where_the_object_was)
-{
- DiscoveryData *discovery_data;
-
- discovery_data = (DiscoveryData *) data;
- cleanup_discovery (discovery_data);
-}
-
-static void
-shell_view_weak_notify (void *data,
- GObject *where_the_object_was)
-{
- DiscoveryData *discovery_data;
-
- discovery_data = (DiscoveryData *) data;
- discovery_data->parent = NULL;
-}
-
-static void
-storage_weak_notify (void *data,
- GObject *where_the_object_was)
-{
- DiscoveryData *discovery_data;
-
- discovery_data = (DiscoveryData *) data;
- cleanup_discovery (discovery_data);
-
- /* FIXME: Should we signal the user when this happens? I.e. when the
- storage dies for some reason before the folder is discovered. */
-}
-
-static void
-shared_folder_discovery_callback (EStorage *storage,
- EStorageResult result,
- const char *path,
- void *data)
-{
- DiscoveryData *discovery_data;
- EShell *shell;
- EShellView *parent;
-
- discovery_data = (DiscoveryData *) data;
- shell = discovery_data->shell;
- parent = discovery_data->parent;
-
- /* Make sure the progress dialog doesn't show up now. */
- cleanup_discovery (discovery_data);
-
- if (result == E_STORAGE_OK) {
- char *uri;
-
- uri = g_strconcat (E_SHELL_URI_PREFIX, "/",
- e_storage_get_name (storage),
- path, NULL);
-
- if (discovery_data->parent != NULL)
- e_shell_view_display_uri (parent, uri, TRUE);
- else
- e_shell_create_view (shell, uri, NULL);
- } else {
- e_notice (parent, GTK_MESSAGE_ERROR,
- _("Could not open shared folder: %s."),
- e_storage_result_to_string (result));
- }
-}
-
-static void
-discover_folder (EShell *shell,
- EShellView *parent,
- const char *user_email_address,
- const char *storage_name,
- const char *folder_name)
-{
- EStorageSet *storage_set;
- EStorage *storage;
- GtkWidget *dialog;
- DiscoveryData *discovery_data;
-
- storage_set = e_shell_get_storage_set (shell);
- if (storage_set == NULL)
- goto error;
-
- storage = e_storage_set_get_storage (storage_set, storage_name);
- if (storage == NULL || ! e_storage_supports_shared_folders (storage))
- goto error;
-
- dialog = create_progress_dialog (shell, storage, user_email_address, folder_name);
-
- discovery_data = g_new (DiscoveryData, 1);
- discovery_data->dialog = dialog;
- discovery_data->shell = shell;
- discovery_data->parent = parent;
- discovery_data->user_email_address = g_strdup (user_email_address);
- discovery_data->folder_name = g_strdup (folder_name);
- discovery_data->storage = storage;
- g_object_ref (storage);
-
- g_object_weak_ref (G_OBJECT (shell), shell_weak_notify, discovery_data);
- g_object_weak_ref (G_OBJECT (parent), shell_view_weak_notify, discovery_data);
- g_object_weak_ref (G_OBJECT (storage), storage_weak_notify, discovery_data);
-
- g_signal_connect (dialog, "clicked",
- G_CALLBACK (progress_dialog_clicked_callback), discovery_data);
-
- e_storage_async_discover_shared_folder (storage,
- user_email_address,
- folder_name,
- shared_folder_discovery_callback,
- discovery_data);
- return;
-
- error:
- /* FIXME: Be more verbose? */
- e_notice (parent, GTK_MESSAGE_ERROR,
- _("Cannot find the specified shared folder."));
-}
-
-
-void
-e_shell_show_shared_folder_picker_dialog (EShell *shell,
- EShellView *parent)
-{
- char *user_email_address = NULL;
- char *storage_name = NULL;
- char *folder_name = NULL;
-
- g_return_if_fail (E_IS_SHELL (shell));
-
- if (! show_dialog (shell, parent, &user_email_address, &storage_name, &folder_name))
- return;
-
- discover_folder (shell, parent, user_email_address, storage_name, folder_name);
-
- g_free (user_email_address);
- g_free (storage_name);
- g_free (folder_name);
-}
diff --git a/shell/e-shell-shared-folder-picker-dialog.h b/shell/e-shell-shared-folder-picker-dialog.h
deleted file mode 100644
index 721cbaec6a..0000000000
--- a/shell/e-shell-shared-folder-picker-dialog.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-shell-shared-folder-picker-dialog.h - Implementation for the shared folder
- * picker dialog.
- *
- * Copyright (C) 2002 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli <ettore@ximian.com>
- */
-
-#ifndef E_SHELL_SHARED_FOLDER_PICKER_DIALOG_H
-#define E_SHELL_SHARED_FOLDER_PICKER_DIALOG_H
-
-#include "e-shell.h"
-#include "e-shell-view.h"
-
-void e_shell_show_shared_folder_picker_dialog (EShell *shell,
- EShellView *parent);
-
-#endif /* E_SHELL_SHARED_FOLDER_PICKER_DIALOG_H */
diff --git a/shell/e-shell-startup-wizard.c b/shell/e-shell-startup-wizard.c
deleted file mode 100644
index b684044ac0..0000000000
--- a/shell/e-shell-startup-wizard.c
+++ /dev/null
@@ -1,800 +0,0 @@
-/*
- * e-shell-startup-wizard.c
- *
- * Copyright (C) 2001, 2002 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Authors: Iain Holmes <iain@ximian.com>
- */
-
-/* WARNING: I LEAK. */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "e-shell-startup-wizard.h"
-#include "e-shell-corba-icon-utils.h"
-
-#include "e-timezone-dialog/e-timezone-dialog.h"
-#include "e-util/e-gtk-utils.h"
-
-#include <gconf/gconf-client.h>
-
-#include <evolution-wizard.h>
-#include "Evolution.h"
-#include "importer/GNOME_Evolution_Importer.h"
-
-#include <string.h>
-#include <glib.h>
-#include <gtk/gtk.h>
-#include <gnome.h>
-#include <glade/glade.h>
-
-#include <bonobo/bonobo-object.h>
-#include <bonobo/bonobo-widget.h>
-#include <bonobo/bonobo-exception.h>
-#include <bonobo/bonobo-moniker-util.h>
-
-#include <bonobo-activation/bonobo-activation.h>
-
-#include <gal/widgets/e-gui-utils.h>
-
-#include <widgets/e-timezone-dialog/e-timezone-dialog.h>
-
-typedef struct _TimezoneDialogPage {
- GtkWidget *page;
- GtkWidget *vbox;
- GObject *etd;
-
- gboolean prepared;
-} TimezoneDialogPage;
-
-typedef struct _ImportDialogPage {
- GtkWidget *page;
- GtkWidget *vbox;
-
- GList *importers;
-
- int running;
- gboolean prepared;
-} ImportDialogPage;
-
-typedef struct _SWData {
- GladeXML *wizard;
- GtkWidget *dialog;
- GtkWidget *druid;
-
- GtkWidget *start, *finish;
- GPtrArray *corba_pages;
- TimezoneDialogPage *timezone_page;
- ImportDialogPage *import_page;
-
- gboolean cancel;
- GNOME_Evolution_Wizard corba_wizard;
- BonoboListener *listener;
- GNOME_Evolution_Wizard_PageList *pagelist;
-} SWData;
-
-typedef struct _IntelligentImporterData {
- CORBA_Object object;
- Bonobo_Control control;
- GtkWidget *widget;
-
- char *name;
- char *blurb;
- char *iid;
-} IntelligentImporterData;
-
-typedef struct _SelectedImporterData{
- CORBA_Object importer;
- char *iid;
-} SelectedImporterData;
-
-static GHashTable *page_hash;
-static GList *page_list = NULL;
-
-static void
-druid_event_notify_cb (BonoboListener *listener,
- const char *name,
- BonoboArg *arg,
- CORBA_Environment *ev,
- SWData *data)
-{
- int buttons, pagenum;
- GnomeDruidPage *page;
-
- if (strcmp (name, EVOLUTION_WIZARD_SET_BUTTONS_SENSITIVE) == 0) {
- buttons = (int) *((CORBA_short *)arg->_value);
- gnome_druid_set_buttons_sensitive (GNOME_DRUID (data->druid),
- (buttons & 4) >> 2,
- (buttons & 2) >> 1,
- (buttons & 1),
- FALSE);
- } else if (strcmp (name, EVOLUTION_WIZARD_SET_SHOW_FINISH) == 0) {
- gnome_druid_set_show_finish (GNOME_DRUID (data->druid),
- (gboolean) *((CORBA_boolean *) arg->_value));
- } else if (strcmp (name, EVOLUTION_WIZARD_SET_PAGE) == 0) {
- pagenum = (int) *((CORBA_short *) arg->_value);
-
- page = g_list_nth_data (page_list, pagenum);
- gnome_druid_set_page (GNOME_DRUID (data->druid), page);
- }
-}
-
-static GNOME_Evolution_Wizard
-start_wizard (void)
-{
- char *const selection_order[] = { "0-evolution:startup_wizard:priority", NULL };
- Bonobo_ServerInfoList *info;
- CORBA_Environment ev;
- GNOME_Evolution_Wizard wizard;
- int i;
-
- CORBA_exception_init (&ev);
- info = bonobo_activation_query ("repo_ids.has ('IDL:GNOME/Evolution/StartupWizard:1.0')", selection_order, &ev);
- if (BONOBO_EX (&ev) || info == CORBA_OBJECT_NIL) {
- g_warning ("Cannot find startup wizard -- %s", BONOBO_EX_REPOID (&ev));
- CORBA_exception_free (&ev);
- return NULL;
- }
- CORBA_exception_free (&ev);
-
- for (i = 0; i < info->_length; i++) {
- CORBA_exception_init (&ev);
- wizard = bonobo_activation_activate_from_id (info->_buffer[i].iid, 0, NULL, &ev);
- if (!BONOBO_EX (&ev) && wizard != CORBA_OBJECT_NIL) {
- CORBA_free (info);
- return wizard;
- }
- CORBA_exception_free (&ev);
- }
-
- if (info->_length)
- g_warning ("Could not start any startup wizard!");
- else
- g_warning ("No startup wizard available!");
- CORBA_free (info);
- return NULL;
-}
-
-static void
-make_corba_dialog_pages (SWData *data)
-{
- CORBA_Environment ev;
- CORBA_Object object;
- Bonobo_EventSource event_source;
-
- data->corba_wizard = start_wizard ();
- if (!data->corba_wizard)
- return;
-
- CORBA_exception_init (&ev);
- data->pagelist = GNOME_Evolution_Wizard__get_pages (data->corba_wizard, &ev);
- if (BONOBO_EX (&ev)) {
- g_warning ("Could not get CORBA wizard pages (%s)", CORBA_exception_id (&ev));
- CORBA_exception_free (&ev);
- data->pagelist = CORBA_OBJECT_NIL;
- return;
- }
-
- CORBA_exception_init (&ev);
- event_source = Bonobo_Unknown_queryInterface (data->corba_wizard, "IDL:Bonobo/EventSource:1.0", &ev);
- CORBA_exception_free (&ev);
- data->listener = bonobo_listener_new (NULL, NULL);
- g_signal_connect (data->listener, "event-notify",
- G_CALLBACK (druid_event_notify_cb), data);
- object = bonobo_object_corba_objref (BONOBO_OBJECT (data->listener));
-
- CORBA_exception_init (&ev);
- Bonobo_EventSource_addListener (event_source, object, &ev);
- CORBA_exception_free (&ev);
- bonobo_object_release_unref (event_source, &ev);
- CORBA_exception_free (&ev);
-}
-
-static int
-page_to_num (GnomeDruidPage *page)
-{
- return GPOINTER_TO_INT (g_hash_table_lookup (page_hash, page));
-}
-
-static gboolean
-next_func (GnomeDruidPage *page,
- GnomeDruid *druid,
- SWData *data)
-{
- CORBA_Environment ev;
- int pagenum;
-
- CORBA_exception_init (&ev);
- pagenum = page_to_num (page);
- GNOME_Evolution_Wizard_notifyAction (data->corba_wizard, pagenum, GNOME_Evolution_Wizard_NEXT, &ev);
- CORBA_exception_free (&ev);
-
- /* If on last page we own, let druid goto next page */
- if (pagenum == g_list_length(page_list)-1)
- return FALSE;
-
- return TRUE;
-}
-
-static gboolean
-prepare_func (GnomeDruidPage *page,
- GnomeDruid *druid,
- SWData *data)
-{
- CORBA_Environment ev;
- int pagenum;
-
- CORBA_exception_init (&ev);
- pagenum = page_to_num (page);
- GNOME_Evolution_Wizard_notifyAction (data->corba_wizard, pagenum, GNOME_Evolution_Wizard_PREPARE, &ev);
- CORBA_exception_free (&ev);
- return FALSE;
-}
-
-static gboolean
-back_func (GnomeDruidPage *page,
- GnomeDruid *druid,
- SWData *data)
-{
- CORBA_Environment ev;
- int pagenum;
-
- CORBA_exception_init (&ev);
- pagenum = page_to_num (page);
- GNOME_Evolution_Wizard_notifyAction (data->corba_wizard, pagenum, GNOME_Evolution_Wizard_BACK, &ev);
- CORBA_exception_free (&ev);
-
- /* if we're on page 0, let the druid go back to the start page, if we have one */
- if (pagenum == 0)
- return FALSE;
-
- return TRUE;
-}
-
-static void
-free_importers (SWData *data)
-{
- GList *l;
-
- for (l = data->import_page->importers; l; l = l->next) {
- IntelligentImporterData *iid;
-
- iid = l->data;
- if (iid->object != CORBA_OBJECT_NIL) {
- bonobo_object_release_unref (iid->object, NULL);
- }
- }
-
- g_list_free (data->import_page->importers);
-}
-
-static void
-start_importers (GList *p)
-{
- CORBA_Environment ev;
-
- for (; p; p = p->next) {
- SelectedImporterData *sid = p->data;
-
- CORBA_exception_init (&ev);
- GNOME_Evolution_IntelligentImporter_importData (sid->importer, &ev);
- if (BONOBO_EX (&ev)) {
- g_warning ("Error importing %s\n%s", sid->iid,
- CORBA_exception_id (&ev));
- }
- CORBA_exception_free (&ev);
- }
-}
-
-static void
-do_import (SWData *data)
-{
- CORBA_Environment ev;
- GList *l, *selected = NULL;
-
- for (l = data->import_page->importers; l; l = l->next) {
- IntelligentImporterData *importer_data;
- SelectedImporterData *sid;
- char *iid;
-
- importer_data = l->data;
- iid = g_strdup (importer_data->iid);
-
- sid = g_new (SelectedImporterData, 1);
- sid->iid = iid;
-
- CORBA_exception_init (&ev);
- sid->importer = bonobo_object_dup_ref (importer_data->object, &ev);
- if (BONOBO_EX (&ev)) {
- g_warning ("Error duplication %s\n(%s)", iid,
- CORBA_exception_id (&ev));
- g_free (iid);
- CORBA_exception_free (&ev);
- g_free (sid);
- continue;
- }
- CORBA_exception_free (&ev);
-
- selected = g_list_prepend (selected, sid);
- }
-
- free_importers (data);
-
- if (selected != NULL) {
- start_importers (selected);
-
- for (l = selected; l; l = l->next) {
- SelectedImporterData *sid = l->data;
-
- CORBA_exception_init (&ev);
- bonobo_object_release_unref (sid->importer, &ev);
- CORBA_exception_free (&ev);
-
- g_free (sid->iid);
- g_free (sid);
- }
- g_list_free (selected);
- }
-}
-
-static gboolean
-finish_func (GnomeDruidPage *page,
- GnomeDruid *druid,
- SWData *data)
-{
- GConfClient *client;
- CORBA_Environment ev;
- icaltimezone *zone;
-
- /* Notify mailer */
- CORBA_exception_init (&ev);
- GNOME_Evolution_Wizard_notifyAction (data->corba_wizard, 0, GNOME_Evolution_Wizard_FINISH, &ev);
- CORBA_exception_free (&ev);
-
- /* Set Timezone */
- zone = e_timezone_dialog_get_timezone (E_TIMEZONE_DIALOG (data->timezone_page->etd));
- if (zone) {
- client = gconf_client_get_default ();
- gconf_client_set_string (client, "/apps/evolution/calendar/display/timezone",
- icaltimezone_get_display_name (zone), NULL);
- g_object_unref (client);
- }
-
- do_import (data);
-
- /* Free data */
- data->cancel = FALSE;
-
- /* Need to do this otherwise the timezone widget gets destroyed but the
- timezone object isn't, and we can get a crash like #22047. */
- g_object_unref (data->timezone_page->etd);
- data->timezone_page->etd = NULL;
-
- gtk_widget_destroy (data->dialog);
- gtk_main_quit ();
-
- return TRUE;
-}
-
-static void
-connect_page (GtkWidget *page,
- SWData *data)
-{
- g_signal_connect (page, "next",
- G_CALLBACK (next_func), data);
- g_signal_connect (page, "back",
- G_CALLBACK (back_func), data);
- g_signal_connect (page, "finish",
- G_CALLBACK (finish_func), data);
-
- /* At least in 2.0 (and probably 2.2 too),
- * GnomeDruidPageStandard is broken and you need to
- * connect_after to "prepare" or else its default method will
- * run after your signal handler and undo its button
- * sensitivity changes.
- */
- g_signal_connect_after (page, "prepare",
- G_CALLBACK (prepare_func), data);
-}
-
-static GtkWidget *
-make_corba_page (SWData *data, int n, GtkWidget *prev)
-{
- GNOME_Evolution_Wizard_Page *corba_page;
- GdkPixbuf *icon;
- GtkWidget *page, *body;
-
- corba_page = &data->pagelist->_buffer[n];
- icon = e_new_gdk_pixbuf_from_corba_icon (&corba_page->icon, -1, -1);
- page = gnome_druid_page_standard_new_with_vals (corba_page->title,
- icon, NULL);
- g_object_unref (icon);
-
- body = bonobo_widget_new_control_from_objref (corba_page->control,
- CORBA_OBJECT_NIL);
- gtk_box_pack_start (GTK_BOX (GNOME_DRUID_PAGE_STANDARD (page)->vbox),
- body, TRUE, TRUE, 0);
- gtk_widget_show_all (page);
-
- gnome_druid_insert_page (GNOME_DRUID (data->druid),
- GNOME_DRUID_PAGE (prev),
- GNOME_DRUID_PAGE (page));
- connect_page (page, data);
- g_hash_table_insert (page_hash, page, GINT_TO_POINTER (n));
- page_list = g_list_append (page_list, page);
-
- return page;
-}
-
-static gboolean
-prepare_timezone_page (GnomeDruidPage *page,
- GnomeDruid *druid,
- SWData *data)
-{
- GConfClient *client;
- icaltimezone *zone;
- char *zone_name;
-
- if (data->timezone_page->prepared)
- return TRUE;
- data->timezone_page->prepared = TRUE;
-
- client = gconf_client_get_default ();
- zone_name = gconf_client_get_string (client, "/apps/evolution/calendar/display/timezone", NULL);
- g_object_unref (client);
-
- if (!zone_name)
- return TRUE;
-
- zone = icaltimezone_get_builtin_timezone (zone_name);
- g_free (zone_name);
-
- if (zone)
- e_timezone_dialog_set_timezone (E_TIMEZONE_DIALOG (data->timezone_page->etd), zone);
-
- return TRUE;
-}
-
-static TimezoneDialogPage *
-make_timezone_page (SWData *data)
-{
- TimezoneDialogPage *page;
- ETimezoneDialog *etd;
-
- g_return_val_if_fail (data != NULL, NULL);
-
- page = g_new0 (TimezoneDialogPage, 1);
- page->page = glade_xml_get_widget (data->wizard, "timezone-page");
- g_return_val_if_fail (page->page != NULL, NULL);
-
- g_signal_connect_after (page->page, "prepare",
- G_CALLBACK (prepare_timezone_page), data);
- page->vbox = GTK_WIDGET (GNOME_DRUID_PAGE_STANDARD (page->page)->vbox);
-
- etd = e_timezone_dialog_new ();
- page->etd = G_OBJECT (etd);
- e_timezone_dialog_reparent (E_TIMEZONE_DIALOG (page->etd), page->vbox);
-
- return page;
-}
-
-static GList *
-get_intelligent_importers (void)
-{
- Bonobo_ServerInfoList *info_list;
- GList *iids_ret = NULL;
- CORBA_Environment ev;
- int i;
-
- CORBA_exception_init (&ev);
- info_list = bonobo_activation_query ("repo_ids.has ('IDL:GNOME/Evolution/IntelligentImporter:1.0')", NULL, &ev);
- CORBA_exception_free (&ev);
-
- for (i = 0; i < info_list->_length; i++) {
- const Bonobo_ServerInfo *info;
-
- info = info_list->_buffer + i;
- iids_ret = g_list_prepend (iids_ret, g_strdup (info->iid));
- }
-
- return iids_ret;
-}
-
-static gboolean
-prepare_importer_page (GnomeDruidPage *page,
- GnomeDruid *druid,
- SWData *data)
-{
- GtkWidget *dialog;
- ImportDialogPage *import;
- GList *l, *importers;
- GtkWidget *table;
- int running = 0;
-
- if (data->import_page->prepared == TRUE) {
- return TRUE;
- }
-
- data->import_page->prepared = TRUE;
-
- dialog = gtk_message_dialog_new (NULL, 0, GTK_MESSAGE_INFO,
- GTK_BUTTONS_NONE,
- _("Please wait...\nScanning for existing setups"));
- e_make_widget_backing_stored (dialog);
-
- gtk_window_set_title (GTK_WINDOW (dialog), _("Starting import"));
- gtk_widget_show_all (dialog);
- gtk_widget_show_now (dialog);
-
- gtk_widget_queue_draw (dialog);
- gdk_flush ();
-
- while (gtk_events_pending ()) {
- gtk_main_iteration ();
- }
-
- import = data->import_page;
- importers = get_intelligent_importers ();
- if (importers == NULL) {
- /* No importers, go directly to finish, do not pass go
- Do not collect $200 */
- gnome_druid_set_page (druid, GNOME_DRUID_PAGE (data->finish));
- gtk_widget_destroy (dialog);
- return TRUE;
- }
-
- table = gtk_table_new (g_list_length (importers), 2, FALSE);
- for (l = importers; l; l = l->next) {
- GtkWidget *label;
- CORBA_Environment ev;
- gboolean can_run;
- char *str;
- IntelligentImporterData *id;
-
- id = g_new0 (IntelligentImporterData, 1);
- id->iid = g_strdup (l->data);
-
- CORBA_exception_init (&ev);
- id->object = bonobo_activation_activate_from_id ((char *) id->iid, 0, NULL, &ev);
- if (BONOBO_EX (&ev)) {
- g_warning ("Could not start %s:%s", id->iid,
- CORBA_exception_id (&ev));
-
- CORBA_exception_free (&ev);
- /* Clean up the IID */
- g_free (id->iid);
- g_free (id);
- continue;
- }
-
- if (id->object == CORBA_OBJECT_NIL) {
- g_warning ("Could not activate component %s", id->iid);
- CORBA_exception_free (&ev);
-
- g_free (id->iid);
- g_free (id);
- continue;
- }
-
- can_run = GNOME_Evolution_IntelligentImporter_canImport (id->object, &ev);
- if (BONOBO_EX (&ev)) {
- g_warning ("Could not call canImport(%s): %s", id->iid,
- CORBA_exception_id (&ev));
- bonobo_object_release_unref (id->object, &ev);
- CORBA_exception_free (&ev);
-
- g_free (id->iid);
- g_free (id);
- continue;
- }
-
- if (can_run == FALSE) {
- bonobo_object_release_unref (id->object, &ev);
- CORBA_exception_free (&ev);
- g_free (id->iid);
- g_free (id);
- continue;
- }
-
- running++;
- id->name = GNOME_Evolution_IntelligentImporter__get_importername (id->object, &ev);
- if (BONOBO_EX (&ev)) {
- g_warning ("Could not get name(%s): %s", id->iid,
- CORBA_exception_id (&ev));
- bonobo_object_release_unref (id->object, &ev);
- CORBA_exception_free (&ev);
- g_free (id->iid);
- g_free (id);
- continue;
- }
-
- id->blurb = GNOME_Evolution_IntelligentImporter__get_message (id->object, &ev);
- if (BONOBO_EX (&ev)) {
- g_warning ("Could not get message(%s): %s",
- id->iid, CORBA_exception_id (&ev));
- bonobo_object_release_unref (id->object, &ev);
- CORBA_exception_free (&ev);
- g_free (id->iid);
- CORBA_free (id->name);
- g_free (id);
- continue;
- }
-
- id->control = Bonobo_Unknown_queryInterface (id->object,
- "IDL:Bonobo/Control:1.0", &ev);
- if (BONOBO_EX (&ev)) {
- g_warning ("Could not QI for Bonobo/Control:1.0 %s:%s",
- id->iid, CORBA_exception_id (&ev));
- bonobo_object_release_unref (id->object, &ev);
- CORBA_exception_free (&ev);
- g_free (id->iid);
- CORBA_free (id->name);
- CORBA_free (id->blurb);
- continue;
- }
-
- if (id->control != CORBA_OBJECT_NIL) {
- id->widget = bonobo_widget_new_control_from_objref (id->control, CORBA_OBJECT_NIL);
- gtk_widget_show (id->widget);
- } else {
- printf("no control\n");
- id->widget = gtk_label_new ("");
- gtk_widget_show (id->widget);
- }
-
- CORBA_exception_free (&ev);
-
- import->importers = g_list_prepend (import->importers, id);
- str = g_strdup_printf (_("From %s:"), id->name);
- label = gtk_label_new (str);
- g_free (str);
-
- gtk_misc_set_alignment (GTK_MISC (label), 0, .5);
-
- gtk_table_attach (GTK_TABLE (table), label, 0, 1, running - 1,
- running, GTK_FILL, 0, 0, 0);
- gtk_table_attach (GTK_TABLE (table), id->widget, 1, 2,
- running - 1, running, GTK_FILL, 0, 3, 0);
- gtk_widget_show_all (table);
-
- gtk_box_pack_start (GTK_BOX (data->import_page->vbox), table,
- FALSE, FALSE, 0);
- }
-
- if (running == 0) {
- gnome_druid_set_page (druid, GNOME_DRUID_PAGE (data->finish));
- gtk_widget_destroy (dialog);
- return TRUE;
- }
-
- import->running = running;
- gtk_widget_destroy (dialog);
-
- return FALSE;
-}
-
-static ImportDialogPage *
-make_importer_page (SWData *data)
-{
- ImportDialogPage *page;
- GtkWidget *label, *sep;
-
- g_return_val_if_fail (data != NULL, NULL);
-
- page = g_new0 (ImportDialogPage, 1);
- page->page = glade_xml_get_widget (data->wizard, "import-page");
- g_return_val_if_fail (page->page != NULL, NULL);
-
- g_signal_connect_after (page->page, "prepare",
- G_CALLBACK (prepare_importer_page), data);
- page->vbox = GNOME_DRUID_PAGE_STANDARD (page->page)->vbox;
- gtk_container_set_border_width (GTK_CONTAINER (page->vbox), 4);
-
- label = gtk_label_new (_("Please select the information that you would like to import:"));
- gtk_box_pack_start (GTK_BOX (page->vbox), label, FALSE, FALSE, 3);
-
- sep = gtk_hseparator_new ();
- gtk_box_pack_start (GTK_BOX (page->vbox), sep, FALSE, FALSE, 3);
-
- page->prepared = FALSE;
- return page;
-}
-
-static void
-startup_wizard_cancel (GnomeDruid *druid,
- SWData *data)
-{
- /* Free data */
- data->cancel = TRUE;
-
- if (data->timezone_page->etd != NULL) {
- /* Need to do this otherwise the timezone widget gets destroyed but the
- timezone object isn't, and we can get a crash like #22047. */
- g_object_unref (data->timezone_page->etd);
- data->timezone_page->etd = NULL;
- }
-
- gtk_widget_destroy (data->dialog);
- gtk_main_quit ();
-}
-
-gboolean
-e_shell_startup_wizard_create (void)
-{
- GConfClient *client;
- SWData *data;
- GSList *accounts;
- GtkWidget *page;
- int i;
-
- client = gconf_client_get_default ();
- accounts = gconf_client_get_list (client, "/apps/evolution/mail/accounts", GCONF_VALUE_STRING, NULL);
- g_object_unref (client);
-
- if (accounts != NULL) {
- g_slist_foreach (accounts, (GFunc) g_free, NULL);
- g_slist_free (accounts);
- return TRUE;
- }
-
- data = g_new0 (SWData, 1);
-
- data->wizard = glade_xml_new (EVOLUTION_GLADEDIR "/evolution-startup-wizard.glade", NULL, NULL);
- g_return_val_if_fail (data->wizard != NULL, FALSE);
- data->dialog = glade_xml_get_widget (data->wizard, "startup-wizard");
- g_return_val_if_fail (data->dialog != NULL, FALSE);
- gtk_window_set_wmclass (GTK_WINDOW (data->dialog), "startup-wizard",
- "Evolution:shell");
-
- page_hash = g_hash_table_new (NULL, NULL);
- data->druid = glade_xml_get_widget (data->wizard, "startup-druid");
- g_return_val_if_fail (data->druid != NULL, FALSE);
- gnome_druid_set_buttons_sensitive (GNOME_DRUID (data->druid),
- FALSE, TRUE, FALSE, FALSE);
-
- g_signal_connect (data->druid, "cancel",
- G_CALLBACK (startup_wizard_cancel), data);
-
- data->start = glade_xml_get_widget (data->wizard, "start-page");
- data->finish = glade_xml_get_widget (data->wizard, "done-page");
- g_return_val_if_fail (data->start != NULL, FALSE);
- g_return_val_if_fail (data->finish != NULL, FALSE);
- g_signal_connect (data->finish, "finish", G_CALLBACK (finish_func), data);
-
- make_corba_dialog_pages (data);
- g_return_val_if_fail (data->corba_wizard != CORBA_OBJECT_NIL, TRUE);
- g_return_val_if_fail (data->pagelist != CORBA_OBJECT_NIL, TRUE);
-
- page = data->start;
- for (i = 0; i < data->pagelist->_length; i++)
- page = make_corba_page (data, i, page);
-
- data->timezone_page = make_timezone_page (data);
- data->import_page = make_importer_page (data);
-
- g_return_val_if_fail (data->timezone_page != NULL, TRUE);
- g_return_val_if_fail (data->import_page != NULL, TRUE);
-
- gnome_druid_set_buttons_sensitive (GNOME_DRUID (data->druid), FALSE, TRUE, TRUE, FALSE);
- gtk_widget_show_all (data->dialog);
-
- gtk_main ();
-
- return !data->cancel;
-}
diff --git a/shell/e-shell-startup-wizard.h b/shell/e-shell-startup-wizard.h
deleted file mode 100644
index 4e849b8feb..0000000000
--- a/shell/e-shell-startup-wizard.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * e-shell-startup-wizard.h
- *
- * Copyright (C) 2001 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Authors: Iain Holmes <iain@ximian.com>
- */
-
-#ifndef E_SHELL_STARTUP_WIZARD_H
-#define E_SHELL_STARTUP_WIZARD_H
-
-#include <glib.h>
-
-gboolean e_shell_startup_wizard_create (void);
-
-#endif
diff --git a/shell/e-shell-user-creatable-items-handler.c b/shell/e-shell-user-creatable-items-handler.c
deleted file mode 100644
index efc1b24f5f..0000000000
--- a/shell/e-shell-user-creatable-items-handler.c
+++ /dev/null
@@ -1,796 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-shell-user-creatable-items-handler.c
- *
- * Copyright (C) 2001 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli <ettore@ximian.com>
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "e-shell-user-creatable-items-handler.h"
-
-#include "e-shell-corba-icon-utils.h"
-
-#include "widgets/misc/e-combo-button.h"
-
-#include "e-util/e-corba-utils.h"
-
-#include <gal/util/e-util.h>
-
-#include <bonobo/bonobo-ui-util.h>
-#include <bonobo/bonobo-exception.h>
-
-#include <libgnome/gnome-i18n.h>
-
-#include <gtk/gtksignal.h>
-#include <gtk/gtktooltips.h>
-
-#include <stdlib.h>
-#include <ctype.h>
-#include <string.h>
-
-
-#define PARENT_TYPE G_TYPE_OBJECT
-static GObjectClass *parent_class = NULL;
-
-
-#define VERB_PREFIX "ShellUserCreatableItemVerb"
-
-#define EVOLUTION_MAIL_OAFIID "OAFIID:GNOME_Evolution_Mail_ShellComponent"
-
-#define SHELL_VIEW_KEY "EShellUserCreatableItemsHandler:shell_view"
-#define COMBO_BUTTON_WIDGET_KEY "EShellUserCreatableItemsHandler:combo_button"
-#define TOOLTIPS_KEY "EShellUserCreatableItemsHandler:tooltips"
-
-struct _Component {
- EvolutionShellComponentClient *component_client;
-
- GNOME_Evolution_UserCreatableItemTypeList *type_list;
-};
-typedef struct _Component Component;
-
-/* Representation of a single menu item. */
-struct _MenuItem {
- const char *label;
- char shortcut;
- char *verb;
- char *tooltip;
- GdkPixbuf *icon;
- char *component_id;
- char *folder_type;
-};
-typedef struct _MenuItem MenuItem;
-
-struct _EShellUserCreatableItemsHandlerPrivate {
- /* The components that register user creatable items. */
- GSList *components; /* Component */
-
- /* The "New ..." menu items. */
- GSList *menu_items; /* MenuItem */
-
- /* The default item (the mailer's "message" item). To be used when the
- component in the view we are in doesn't provide a default user
- creatable type. This pointer always points to one of the menu items
- in ->menu_items. */
- const MenuItem *default_menu_item;
-};
-
-
-/* Component struct handling. */
-
-static Component *
-component_new (const char *id,
- EvolutionShellComponentClient *client)
-{
- CORBA_Environment ev;
- Component *new;
- GNOME_Evolution_ShellComponent objref;
-
- new = g_new (Component, 1);
-
- new->component_client = client;
- g_object_ref (client);
-
- CORBA_exception_init (&ev);
-
- objref = evolution_shell_component_client_corba_objref (client);
- new->type_list = GNOME_Evolution_ShellComponent__get_userCreatableItemTypes (objref, &ev);
-
- if (ev._major != CORBA_NO_EXCEPTION)
- new->type_list = NULL;
-
- CORBA_exception_free (&ev);
-
- return new;
-}
-
-static void
-component_free (Component *component)
-{
- g_object_unref (component->component_client);
-
- if (component->type_list != NULL)
- CORBA_free (component->type_list);
-
- g_free (component);
-}
-
-
-/* Helper functions. */
-
-static gboolean
-item_is_default (const MenuItem *item,
- const char *folder_type,
- const char *component_id)
-{
- if (component_id == NULL || folder_type == NULL)
- return FALSE;
-
- if (item->folder_type != NULL && *item->folder_type != 0) {
- if (strcmp (item->folder_type, folder_type) == 0)
- return TRUE;
- else
- return FALSE;
- }
-
- if (strcmp (item->component_id, component_id) == 0)
- return TRUE;
- else
- return FALSE;
-}
-
-static char *
-create_verb_from_component_number_and_type_id (int component_num,
- const char *type_id)
-{
- return g_strdup_printf (VERB_PREFIX ":%d:%s", component_num, type_id);
-}
-
-
-/* Setting up menu items for the "File -> New" submenu and the "New" toolbar
- button. */
-
-static void
-ensure_menu_items (EShellUserCreatableItemsHandler *handler)
-{
- EShellUserCreatableItemsHandlerPrivate *priv;
- GSList *menu_items;
- GSList *p;
- int component_num;
- const char *default_verb;
-
- priv = handler->priv;
- if (priv->menu_items != NULL)
- return;
-
- menu_items = NULL;
- component_num = 0;
- default_verb = NULL;
- for (p = priv->components; p != NULL; p = p->next) {
- const Component *component;
- int i;
-
- component = (const Component *) p->data;
- if (component->type_list != NULL) {
- for (i = 0; i < component->type_list->_length; i ++) {
- const GNOME_Evolution_UserCreatableItemType *type;
- MenuItem *item;
-
- type = (const GNOME_Evolution_UserCreatableItemType *) component->type_list->_buffer + i;
-
- item = g_new (MenuItem, 1);
- item->label = type->menuDescription;
- item->shortcut = type->menuShortcut;
- item->verb = create_verb_from_component_number_and_type_id (component_num, type->id);
- item->tooltip = type->tooltip;
- item->component_id = g_strdup (evolution_shell_component_client_get_id (component->component_client));
- item->folder_type = g_strdup (type->folderType);
-
- if (strcmp (item->component_id, EVOLUTION_MAIL_OAFIID) == 0
- && strcmp (type->id, "message") == 0)
- default_verb = item->verb;
-
- if (type->icon.width == 0 || type->icon.height == 0)
- item->icon = NULL;
- else
- item->icon = e_new_gdk_pixbuf_from_corba_icon (& type->icon, 16, 16);
-
- menu_items = g_slist_prepend (menu_items, item);
- }
- }
-
- component_num ++;
- }
-
- priv->menu_items = menu_items;
-
- priv->default_menu_item = NULL;
- if (default_verb != NULL) {
- for (p = priv->menu_items; p != NULL; p = p->next) {
- const MenuItem *item;
-
- item = (const MenuItem *) p->data;
- if (strcmp (item->verb, default_verb) == 0)
- priv->default_menu_item = item;
- }
- }
-}
-
-static void
-free_menu_items (GSList *menu_items)
-{
- GSList *p;
-
- if (menu_items == NULL)
- return;
-
- for (p = menu_items; p != NULL; p = p->next) {
- MenuItem *item;
-
- item = (MenuItem *) p->data;
- g_free (item->verb);
-
- if (item->icon != NULL)
- g_object_unref (item->icon);
-
- g_free (item->component_id);
-
- g_free (item);
- }
-
- g_slist_free (menu_items);
-}
-
-static const MenuItem *
-get_default_action_for_view (EShellUserCreatableItemsHandler *handler,
- EShellView *shell_view)
-{
- EShellUserCreatableItemsHandlerPrivate *priv;
- const char *view_component_id;
- const GSList *p;
-
- priv = handler->priv;
-
- view_component_id = e_shell_view_get_current_component_id (shell_view);
- if (view_component_id == NULL)
- return priv->default_menu_item;
-
- for (p = priv->menu_items; p != NULL; p = p->next) {
- const MenuItem *item;
-
- item = (const MenuItem *) p->data;
- if (item_is_default (item,
- e_shell_view_get_current_folder_type (shell_view),
- e_shell_view_get_current_component_id (shell_view)))
- return item;
- }
-
- return priv->default_menu_item;
-}
-
-
-/* The XML description for "File -> New". */
-
-/* This adds a menu item for @item. If @first is true, the keyboard shortcut
- is going to be "Control-N" instead of whatever the component defines. */
-static void
-append_xml_for_menu_item (GString *xml,
- const MenuItem *item,
- gboolean first)
-{
- char *encoded_label;
- char *encoded_tooltip;
-
- encoded_label = bonobo_ui_util_encode_str (item->label);
- g_string_append_printf (xml, "<menuitem name=\"New:%s\" verb=\"%s\" label=\"%s\"",
- item->verb, item->verb, encoded_label);
-
- if (first)
- g_string_append_printf (xml, " accel=\"*Control*N\"");
- else if (item->shortcut != '\0')
- g_string_append_printf (xml, " accel=\"*Control**Shift*%c\"", item->shortcut);
-
- if (item->icon != NULL) {
- char *icon_xml;
-
- icon_xml = bonobo_ui_util_pixbuf_to_xml (item->icon);
- g_string_append_printf (xml, " pixtype=\"pixbuf\" pixname=\"%s\"", icon_xml);
- g_free (icon_xml);
- }
-
- encoded_tooltip = bonobo_ui_util_encode_str (item->tooltip);
- g_string_append_printf (xml, " tip=\"%s\"", encoded_tooltip);
-
- g_string_append (xml, "/> ");
-
- g_free (encoded_label);
- g_free (encoded_tooltip);
-}
-
-static int
-item_types_sort_func (const void *a,
- const void *b)
-{
- const MenuItem *item_a;
- const MenuItem *item_b;
- const char *p1, *p2;
-
- item_a = (const MenuItem *) a;
- item_b = (const MenuItem *) b;
-
- p1 = item_a->label;
- p2 = item_b->label;
-
- while (*p1 != '\0' && *p2 != '\0') {
- if (*p1 == '_') {
- p1 ++;
- continue;
- }
-
- if (*p2 == '_') {
- p2 ++;
- continue;
- }
-
- if (toupper ((int) *p1) < toupper ((int) *p2))
- return -1;
- else if (toupper ((int) *p1) > toupper ((int) *p2))
- return +1;
-
- p1 ++, p2 ++;
- }
-
- if (*p1 == '\0') {
- if (*p2 == '\0')
- return 0;
- else
- return -1;
- } else {
- return +1;
- }
-}
-
-static char *
-create_menu_xml (EShellUserCreatableItemsHandler *handler,
- const char *folder_type,
- const char *component_id)
-{
- EShellUserCreatableItemsHandlerPrivate *priv;
- GString *xml;
- GSList *p;
- GSList *non_default_items;
- char *retval;
-
- priv = handler->priv;
-
- ensure_menu_items (handler);
-
- xml = g_string_new ("");
-
- g_string_append (xml, "<placeholder name=\"ComponentItems\">");
- g_string_append (xml, "<placeholder name=\"EShellUserCreatableItemsPlaceholder\">");
-
- /* 1. Add all the elements that are default for this component. (Note
- that we don't need to do any sorting since the items are already
- sorted alphabetically.) */
-
- if (component_id != NULL) {
- gboolean first = TRUE;
-
- for (p = priv->menu_items; p != NULL; p = p->next) {
- const MenuItem *item;
-
- item = (const MenuItem *) p->data;
- if (item_is_default (item, folder_type, component_id)) {
- append_xml_for_menu_item (xml, item, first);
- first = FALSE;
- }
- }
- }
-
- /* 2. Add a separator. */
-
- if (component_id != NULL)
- g_string_append_printf (xml,
- "<separator f=\"\" name=\"EShellUserCreatableItemsHandlerSeparator\"/>");
-
- /* 3. Add the elements that are not default for this component. */
-
- non_default_items = NULL;
- for (p = priv->menu_items; p != NULL; p = p->next) {
- const MenuItem *item;
-
- item = (const MenuItem *) p->data;
- if (! item_is_default (item, folder_type, component_id))
- non_default_items = g_slist_prepend (non_default_items, (void *) item);
- }
-
- non_default_items = g_slist_sort (non_default_items, item_types_sort_func);
- for (p = non_default_items; p != NULL; p = p->next)
- append_xml_for_menu_item (xml, (const MenuItem *) p->data, FALSE);
- g_slist_free (non_default_items);
-
- /* Done... */
-
- g_string_append (xml, "</placeholder>"); /* EShellUserCreatableItemsPlaceholder */
- g_string_append (xml, "</placeholder>"); /* ComponentItems */
-
- retval = xml->str;
- g_string_free (xml, FALSE);
-
- return retval;
-}
-
-
-/* Verb handling. */
-
-static void
-execute_verb (EShellUserCreatableItemsHandler *handler,
- EShellView *shell_view,
- const char *verb_name)
-{
- EShellUserCreatableItemsHandlerPrivate *priv;
- const Component *component;
- int component_number;
- const char *p;
- const char *id;
- GSList *component_list_item;
- int i;
-
- priv = handler->priv;
-
- p = strchr (verb_name, ':');
- g_assert (p != NULL);
- component_number = atoi (p + 1);
-
- p = strchr (p + 1, ':');
- g_assert (p != NULL);
- id = p + 1;
-
- component_list_item = g_slist_nth (priv->components, component_number);
- g_assert (component_list_item != NULL);
-
- component = (const Component *) component_list_item->data;
-
- if (component->type_list == NULL)
- return;
-
- for (i = 0; i < component->type_list->_length; i ++) {
- if (strcmp (component->type_list->_buffer[i].id, id) == 0) {
- CORBA_Environment ev;
-
- CORBA_exception_init (&ev);
-
- GNOME_Evolution_ShellComponent_userCreateNewItem
- (evolution_shell_component_client_corba_objref (component->component_client),
- id,
- e_safe_corba_string (e_shell_view_get_current_physical_uri (shell_view)),
- e_safe_corba_string (e_shell_view_get_current_folder_type (shell_view)),
- &ev);
-
- if (ev._major != CORBA_NO_EXCEPTION)
- g_warning ("Error in userCreateNewItem -- %s", BONOBO_EX_REPOID (&ev));
-
- CORBA_exception_free (&ev);
- return;
- }
- }
-}
-
-static void
-verb_fn (BonoboUIComponent *ui_component,
- void *data,
- const char *verb_name)
-{
- EShellUserCreatableItemsHandler *handler;
- EShellView *shell_view;
-
- shell_view = g_object_get_data (G_OBJECT (ui_component), SHELL_VIEW_KEY);
- g_assert (E_IS_SHELL_VIEW (shell_view));
-
- handler = E_SHELL_USER_CREATABLE_ITEMS_HANDLER (data);
-
- execute_verb (handler, shell_view, verb_name);
-}
-
-static void
-add_verbs (EShellUserCreatableItemsHandler *handler,
- EShellView *shell_view)
-{
- EShellUserCreatableItemsHandlerPrivate *priv;
- BonoboUIComponent *ui_component;
- int component_num;
- GSList *p;
-
- priv = handler->priv;
-
- ui_component = e_shell_view_get_bonobo_ui_component (shell_view);
- g_object_set_data (G_OBJECT (ui_component), SHELL_VIEW_KEY, shell_view);
-
- component_num = 0;
- for (p = priv->components; p != NULL; p = p->next) {
- const Component *component;
- int i;
-
- component = (const Component *) p->data;
-
- if (component->type_list != NULL) {
- for (i = 0; i < component->type_list->_length; i ++) {
- char *verb_name;
-
- verb_name = create_verb_from_component_number_and_type_id
- (component_num, component->type_list->_buffer[i].id);
-
- bonobo_ui_component_add_verb (ui_component, verb_name, verb_fn, handler);
-
- g_free (verb_name);
- }
- }
-
- component_num ++;
- }
-}
-
-
-/* The "New" button in the toolbar. */
-
-static void
-combo_button_activate_default_callback (EComboButton *combo_button,
- void *data)
-{
- EShellView *shell_view;
- EShellUserCreatableItemsHandler *handler;
- const MenuItem *menu_item;
-
- shell_view = E_SHELL_VIEW (data);
- handler = e_shell_get_user_creatable_items_handler (e_shell_view_get_shell (shell_view));
-
- menu_item = get_default_action_for_view (handler, shell_view);
- execute_verb (handler, shell_view, menu_item->verb);
-}
-
-static void
-setup_toolbar_button (EShellUserCreatableItemsHandler *handler,
- EShellView *shell_view)
-{
- EShellUserCreatableItemsHandlerPrivate *priv;
- BonoboUIComponent *ui_component;
- GtkWidget *combo_button;
- GtkWidget *menu;
- GtkTooltips *tooltips;
- BonoboControl *control;
-
- priv = handler->priv;
-
- menu = gtk_menu_new ();
-
- combo_button = e_combo_button_new ();
- e_combo_button_set_menu (E_COMBO_BUTTON (combo_button), GTK_MENU (menu));
- e_combo_button_set_label (E_COMBO_BUTTON (combo_button), _("New"));
- gtk_widget_show (combo_button);
-
- g_signal_connect (combo_button, "activate_default",
- G_CALLBACK (combo_button_activate_default_callback),
- shell_view);
-
- ui_component = e_shell_view_get_bonobo_ui_component (shell_view);
- bonobo_window_add_popup (BONOBO_WINDOW (shell_view), GTK_MENU (menu), "/popups/NewPopup");
-
- control = bonobo_control_new (combo_button);
-
- bonobo_ui_component_object_set (ui_component, "/Toolbar/NewComboButton",
- BONOBO_OBJREF (control), NULL);
-
- g_object_set_data (G_OBJECT (shell_view), COMBO_BUTTON_WIDGET_KEY, combo_button);
-
- tooltips = gtk_tooltips_new ();
- g_object_set_data (G_OBJECT (combo_button), TOOLTIPS_KEY, tooltips);
-}
-
-
-/* This handles the menus for a given EShellView. We have to rebuild the menu
- and set the toolbar button every time the view changes, and clean up when
- the view is destroyed. */
-
-static void
-shell_view_view_changed_callback (EShellView *shell_view,
- const char *evolution_path,
- const char *physical_uri,
- const char *folder_type,
- const char *component_id,
- void *data)
-{
- EShellUserCreatableItemsHandler *handler;
- EShellUserCreatableItemsHandlerPrivate *priv;
- GtkWidget *combo_button_widget;
- GtkTooltips *tooltips;
- BonoboUIComponent *ui_component;
- const MenuItem *default_menu_item;
- char *menu_xml;
-
- handler = E_SHELL_USER_CREATABLE_ITEMS_HANDLER (data);
- priv = handler->priv;
-
- combo_button_widget = g_object_get_data (G_OBJECT (shell_view), COMBO_BUTTON_WIDGET_KEY);
- g_assert (E_IS_COMBO_BUTTON (combo_button_widget));
-
- tooltips = g_object_get_data (G_OBJECT (combo_button_widget), TOOLTIPS_KEY);
- g_assert (tooltips != NULL);
-
- default_menu_item = get_default_action_for_view (handler, shell_view);
- if (default_menu_item == NULL) {
- gtk_widget_set_sensitive (combo_button_widget, FALSE);
- e_combo_button_set_label (E_COMBO_BUTTON (combo_button_widget), _("New"));
- e_combo_button_set_icon (E_COMBO_BUTTON (combo_button_widget), NULL);
- gtk_tooltips_set_tip (tooltips, combo_button_widget, NULL, NULL);
- return;
- }
-
- gtk_widget_set_sensitive (combo_button_widget, TRUE);
-
- e_combo_button_set_icon (E_COMBO_BUTTON (combo_button_widget), default_menu_item->icon);
- gtk_tooltips_set_tip (tooltips, combo_button_widget, default_menu_item->tooltip, NULL);
-
- ui_component = e_shell_view_get_bonobo_ui_component (shell_view);
- bonobo_ui_component_rm (ui_component, "/menu/File/New/ComponentItems/EShellUserCreatableItemsPlaceholder", NULL);
- bonobo_ui_component_rm (ui_component, "/popups/NewPopup/ComponentItems/EShellUserCreatableItemsPlaceholder", NULL);
-
- menu_xml = create_menu_xml (handler,
- e_shell_view_get_current_folder_type (shell_view),
- e_shell_view_get_current_component_id (shell_view));
- bonobo_ui_component_set (ui_component, "/menu/File/New", menu_xml, NULL);
- bonobo_ui_component_set (ui_component, "/popups/NewPopup", menu_xml, NULL);
- g_free (menu_xml);
-}
-
-
-/* GObject methods. */
-
-static void
-impl_dispose (GObject *object)
-{
- EShellUserCreatableItemsHandler *handler;
- EShellUserCreatableItemsHandlerPrivate *priv;
- GSList *p;
-
- handler = E_SHELL_USER_CREATABLE_ITEMS_HANDLER (object);
- priv = handler->priv;
-
- for (p = priv->components; p != NULL; p = p->next)
- component_free ((Component *) p->data);
-
- g_slist_free (priv->components);
- priv->components = NULL;
-
- (* G_OBJECT_CLASS (parent_class)->dispose) (object);
-}
-
-static void
-impl_finalize (GObject *object)
-{
- EShellUserCreatableItemsHandler *handler;
- EShellUserCreatableItemsHandlerPrivate *priv;
-
- handler = E_SHELL_USER_CREATABLE_ITEMS_HANDLER (object);
- priv = handler->priv;
-
- free_menu_items (priv->menu_items);
-
- g_free (priv);
-
- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
-}
-
-
-static void
-class_init (GObjectClass *object_class)
-{
- parent_class = g_type_class_ref(PARENT_TYPE);
-
- object_class->dispose = impl_dispose;
- object_class->finalize = impl_finalize;
-}
-
-static void
-init (EShellUserCreatableItemsHandler *shell_user_creatable_items_handler)
-{
- EShellUserCreatableItemsHandlerPrivate *priv;
-
- priv = g_new (EShellUserCreatableItemsHandlerPrivate, 1);
- priv->components = NULL;
- priv->menu_items = NULL;
- priv->default_menu_item = NULL;
-
- shell_user_creatable_items_handler->priv = priv;
-}
-
-
-EShellUserCreatableItemsHandler *
-e_shell_user_creatable_items_handler_new (void)
-{
- EShellUserCreatableItemsHandler *new;
-
- new = g_object_new (e_shell_user_creatable_items_handler_get_type (), NULL);
-
- return new;
-}
-
-void
-e_shell_user_creatable_items_handler_add_component (EShellUserCreatableItemsHandler *handler,
- const char *id,
- EvolutionShellComponentClient *shell_component_client)
-{
- EShellUserCreatableItemsHandlerPrivate *priv;
-
- g_return_if_fail (handler != NULL);
- g_return_if_fail (E_IS_SHELL_USER_CREATABLE_ITEMS_HANDLER (handler));
- g_return_if_fail (shell_component_client != NULL);
- g_return_if_fail (EVOLUTION_IS_SHELL_COMPONENT_CLIENT (shell_component_client));
-
- priv = handler->priv;
-
- priv->components = g_slist_prepend (priv->components, component_new (id, shell_component_client));
-}
-
-
-/**
- * e_shell_user_creatable_items_handler_attach_menus:
- * @handler:
- * @shell_view:
- *
- * Set up the menus and toolbar items for @shell_view. When the shell changes
- * view, the menu and the toolbar item will update automatically (i.e. the
- * actions for the current folder will go on top etc.).
- **/
-void
-e_shell_user_creatable_items_handler_attach_menus (EShellUserCreatableItemsHandler *handler,
- EShellView *shell_view)
-{
- BonoboUIComponent *ui_component;
- EShellUserCreatableItemsHandlerPrivate *priv;
- char *menu_xml;
-
- g_return_if_fail (handler != NULL);
- g_return_if_fail (E_IS_SHELL_USER_CREATABLE_ITEMS_HANDLER (handler));
- g_return_if_fail (shell_view != NULL);
- g_return_if_fail (E_IS_SHELL_VIEW (shell_view));
-
- priv = handler->priv;
-
- setup_toolbar_button (handler, shell_view);
- g_signal_connect (shell_view, "view_changed",
- G_CALLBACK (shell_view_view_changed_callback), handler);
-
- add_verbs (handler, shell_view);
- menu_xml = create_menu_xml (handler,
- e_shell_view_get_current_component_id (shell_view),
- e_shell_view_get_current_folder_type (shell_view));
-
- ui_component = e_shell_view_get_bonobo_ui_component (shell_view);
- bonobo_ui_component_set (ui_component, "/menu/File/New", menu_xml, NULL);
- bonobo_ui_component_set (ui_component, "/popups/NewPopup", menu_xml, NULL);
-
- g_free (menu_xml);
-}
-
-
-E_MAKE_TYPE (e_shell_user_creatable_items_handler,
- "EShellUserCreatableItemsHandler", EShellUserCreatableItemsHandler,
- class_init, init, PARENT_TYPE)
diff --git a/shell/e-shell-user-creatable-items-handler.h b/shell/e-shell-user-creatable-items-handler.h
deleted file mode 100644
index 228603573a..0000000000
--- a/shell/e-shell-user-creatable-items-handler.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-shell-user-creatable-items-handler.h
- *
- * Copyright (C) 2001 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli <ettore@ximian.com>
- */
-
-#ifndef _E_SHELL_USER_CREATABLE_ITEMS_HANDLER_H_
-#define _E_SHELL_USER_CREATABLE_ITEMS_HANDLER_H_
-
-#include "evolution-shell-component-client.h"
-
-#include <glib-object.h>
-#include <bonobo/bonobo-ui-component.h>
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-#define E_TYPE_SHELL_USER_CREATABLE_ITEMS_HANDLER (e_shell_user_creatable_items_handler_get_type ())
-#define E_SHELL_USER_CREATABLE_ITEMS_HANDLER(obj) (GTK_CHECK_CAST ((obj), E_TYPE_SHELL_USER_CREATABLE_ITEMS_HANDLER, EShellUserCreatableItemsHandler))
-#define E_SHELL_USER_CREATABLE_ITEMS_HANDLER_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_SHELL_USER_CREATABLE_ITEMS_HANDLER, EShellUserCreatableItemsHandlerClass))
-#define E_IS_SHELL_USER_CREATABLE_ITEMS_HANDLER(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_SHELL_USER_CREATABLE_ITEMS_HANDLER))
-#define E_IS_SHELL_USER_CREATABLE_ITEMS_HANDLER_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_SHELL_USER_CREATABLE_ITEMS_HANDLER))
-
-
-typedef struct _EShellUserCreatableItemsHandler EShellUserCreatableItemsHandler;
-typedef struct _EShellUserCreatableItemsHandlerPrivate EShellUserCreatableItemsHandlerPrivate;
-typedef struct _EShellUserCreatableItemsHandlerClass EShellUserCreatableItemsHandlerClass;
-
-#include "e-shell-view.h"
-
-struct _EShellUserCreatableItemsHandler {
- GObject parent;
-
- EShellUserCreatableItemsHandlerPrivate *priv;
-};
-
-struct _EShellUserCreatableItemsHandlerClass {
- GObjectClass parent_class;
-};
-
-
-GtkType e_shell_user_creatable_items_handler_get_type (void);
-EShellUserCreatableItemsHandler *e_shell_user_creatable_items_handler_new (void);
-
-void e_shell_user_creatable_items_handler_add_component (EShellUserCreatableItemsHandler *handler,
- const char *id,
- EvolutionShellComponentClient *shell_component_client);
-
-void e_shell_user_creatable_items_handler_attach_menus (EShellUserCreatableItemsHandler *handler,
- EShellView *shell_view);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* _E_SHELL_USER_CREATABLE_ITEMS_HANDLER_H_ */
diff --git a/shell/e-shell-utils.c b/shell/e-shell-utils.c
deleted file mode 100644
index 195b25b986..0000000000
--- a/shell/e-shell-utils.c
+++ /dev/null
@@ -1,149 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-shell-utils.c
- *
- * Copyright (C) 2000 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <string.h>
-
-#include <glib.h>
-
-#include <libgnome/gnome-util.h>
-#include <libgnome/gnome-i18n.h>
-
-#include "e-shell-constants.h"
-#include "e-shell-utils.h"
-
-
-static char *
-get_icon_path (const char *icon_name)
-{
- char *icon_path;
-
- if (g_path_is_absolute (icon_name))
- icon_path = g_strdup (icon_name);
- else
- icon_path = g_build_filename (EVOLUTION_IMAGES, icon_name, NULL);
-
- if (g_file_test (icon_path, G_FILE_TEST_EXISTS)) {
- return icon_path;
- } else {
- g_free (icon_path);
- return NULL;
- }
-}
-
-static char *
-get_mini_name (const char *icon_name)
-{
- const char *dot_ptr;
- char *basename;
- char *name_without_extension;
- char *mini_name;
-
- basename = g_path_get_basename (icon_name);
- if (basename == NULL)
- return NULL;
-
- dot_ptr = strrchr (basename, '.');
-
- if (dot_ptr == NULL) {
- /* No extension. */
- g_free (basename);
- return g_strconcat (icon_name, E_SHELL_MINI_ICON_SUFFIX, NULL);
- }
-
- name_without_extension = g_strndup (icon_name, dot_ptr - basename);
- mini_name = g_strconcat (name_without_extension, E_SHELL_MINI_ICON_SUFFIX,
- dot_ptr, NULL);
- g_free (name_without_extension);
-
- g_free (basename);
- return mini_name;
-}
-
-
-char *
-e_shell_get_icon_path (const char *icon_name,
- gboolean try_mini)
-{
- if (try_mini) {
- char *path;
- char *mini_name;
-
- mini_name = get_mini_name (icon_name);
- if (mini_name == NULL) {
- path = NULL;
- } else {
- path = get_icon_path (mini_name);
- g_free (mini_name);
- }
-
- if (path != NULL)
- return path;
- }
-
- return get_icon_path (icon_name);
-}
-
-
-gboolean
-e_shell_folder_name_is_valid (const char *name,
- const char **reason_return)
-{
- if (name == NULL || *name == '\0') {
- if (reason_return != NULL)
- *reason_return = _("No folder name specified.");
- return FALSE;
- }
-
- /* GtkEntry is broken - if you hit KP_ENTER you get a \r inserted... */
- if (strchr (name, '\r')) {
- if (reason_return != NULL)
- *reason_return = _("Folder name cannot contain the Return character.");
- return FALSE;
- }
-
- if (strchr (name, E_PATH_SEPARATOR) != NULL) {
- if (reason_return != NULL)
- *reason_return = _("Folder name cannot contain the character \"/\".");
- return FALSE;
- }
-
- if (strchr (name, '#') != NULL) {
- if (reason_return != NULL)
- *reason_return = _("Folder name cannot contain the character \"#\".");
- return FALSE;
- }
-
- if (strcmp (name, ".") == 0 || strcmp (name, "..") == 0) {
- if (reason_return != NULL)
- *reason_return = _("'.' and '..' are reserved folder names.");
- return FALSE;
- }
-
- *reason_return = NULL;
-
- return TRUE;
-}
-
diff --git a/shell/e-shell-utils.h b/shell/e-shell-utils.h
deleted file mode 100644
index f6bf62de8a..0000000000
--- a/shell/e-shell-utils.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-shell-utils.h
- *
- * Copyright (C) 2000 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifndef E_SHELL_UTILS_H
-#define E_SHELL_UTILS_H
-
-#include <glib.h>
-
-char *e_shell_get_icon_path (const char *icon_name,
- gboolean try_mini);
-
-gboolean e_shell_folder_name_is_valid (const char *name,
- const char **reason_return);
-
-#endif
diff --git a/shell/e-shell-view-menu.c b/shell/e-shell-view-menu.c
deleted file mode 100644
index 0b9bc8c071..0000000000
--- a/shell/e-shell-view-menu.c
+++ /dev/null
@@ -1,868 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-shell-view-menu.c
- *
- * Copyright (C) 2000, 2001 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Authors:
- * Miguel de Icaza
- * Ettore Perazzoli
- */
-
-/* FIXME: This file is a bit of a mess. */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "e-shell-view-menu.h"
-
-#include "e-shell-shared-folder-picker-dialog.h"
-#include "e-shell-folder-creation-dialog.h"
-#include "e-shell-folder-selection-dialog.h"
-
-#include "e-shell-constants.h"
-
-#include "e-shell-importer.h"
-#include "e-shell-about-box.h"
-
-#include "e-shell-folder-commands.h"
-
-#include "evolution-shell-component-utils.h"
-
-#include "e-util/e-dialog-utils.h"
-
-#include <glib.h>
-
-#include <gtk/gtksignal.h>
-#include <gtk/gtkmain.h>
-#include <gtk/gtkwindow.h>
-
-#include <libgnome/gnome-exec.h>
-#include <libgnome/gnome-help.h>
-#include <libgnome/gnome-i18n.h>
-#include <libgnome/gnome-url.h>
-#include <libgnome/gnome-util.h>
-#include <libgnomeui/gnome-about.h>
-
-
-/* Utility functions. */
-
-static const char *
-get_path_for_folder_op (EShellView *shell_view)
-{
- const char *path;
-
- path = e_shell_view_get_folder_bar_right_click_path (shell_view);
- if (path != NULL)
- return path;
-
- return e_shell_view_get_current_path (shell_view);
-}
-
-static void
-launch_pilot_settings (const char *extra_arg)
-{
- char *args[] = {
- "gpilotd-control-applet",
- (char *) extra_arg,
- NULL
- };
- int pid;
-
- args[0] = g_find_program_in_path ("gpilotd-control-applet");
- if (!args[0]) {
- e_notice (NULL, GTK_MESSAGE_ERROR,
- _("The GNOME Pilot tools do not appear to be installed on this system."));
- return;
- }
-
- pid = gnome_execute_async (NULL, extra_arg ? 2 : 1, args);
- g_free (args[0]);
-
- if (pid == -1)
- e_notice (NULL, GTK_MESSAGE_ERROR, _("Error executing %s."), args[0]);
-}
-
-
-/* EShellView callbacks. */
-
-static void
-shortcut_bar_visibility_changed_cb (EShellView *shell_view,
- gboolean visible,
- void *data)
-{
- BonoboUIComponent *uic;
- const char *path;
- const char *txt;
-
- if (visible)
- txt = "1";
- else
- txt = "0";
-
- path = (const char *) data;
- uic = e_shell_view_get_bonobo_ui_component (shell_view);
-
- bonobo_ui_component_set_prop (uic, path, "state", txt, NULL);
-}
-
-static void
-folder_bar_visibility_changed_cb (EShellView *shell_view,
- gboolean visible,
- void *data)
-{
- BonoboUIComponent *uic;
- const char *path;
- const char *txt;
-
- if (visible)
- txt = "1";
- else
- txt = "0";
-
- path = (const char *) data;
- uic = e_shell_view_get_bonobo_ui_component (shell_view);
-
- bonobo_ui_component_set_prop (uic, path, "state", txt, NULL);
-}
-
-
-/* Command callbacks. */
-
-static void
-command_close (BonoboUIComponent *uih,
- void *data,
- const char *path)
-{
- EShellView *shell_view;
-
- shell_view = E_SHELL_VIEW (data);
-
- if (e_shell_request_close_view (e_shell_view_get_shell (shell_view), shell_view))
- gtk_widget_destroy (GTK_WIDGET (shell_view));
-}
-
-static void
-command_quit (BonoboUIComponent *uih,
- void *data,
- const char *path)
-{
- EShellView *shell_view;
- EShell *shell;
-
- shell_view = E_SHELL_VIEW (data);
-
- e_shell_view_save_defaults (shell_view);
-
- shell = e_shell_view_get_shell (shell_view);
-
- if (e_shell_prepare_for_quit (shell))
- e_shell_destroy_all_views (shell);
-}
-
-static void
-command_submit_bug (BonoboUIComponent *uih,
- void *data,
- const char *path)
-{
- int pid;
- char *args[] = {
- "bug-buddy",
- "--sm-disable",
- "--package=evolution",
- "--package-ver="VERSION,
- NULL
- };
-
- args[0] = g_find_program_in_path ("bug-buddy");
- if (!args[0]) {
- e_notice (NULL, GTK_MESSAGE_ERROR, _("Bug buddy is not installed."));
- return;
- }
-
- pid = gnome_execute_async (NULL, 4, args);
- g_free (args[0]);
-
- if (pid == -1)
- e_notice (NULL, GTK_MESSAGE_ERROR, _("Bug buddy could not be run."));
-}
-
-static int
-about_box_event_callback (GtkWidget *widget,
- GdkEvent *event,
- void *data)
-{
- GtkWidget **widget_pointer;
-
- widget_pointer = (GtkWidget **) data;
-
- gtk_widget_destroy (GTK_WIDGET (*widget_pointer));
- *widget_pointer = NULL;
-
- return TRUE;
-}
-
-static void
-command_about_box (BonoboUIComponent *uih,
- void *data,
- const char *path)
-{
- static GtkWidget *about_box_window = NULL;
- GtkWidget *about_box;
-
- if (about_box_window != NULL) {
- gdk_window_raise (about_box_window->window);
- return;
- }
-
- about_box = e_shell_about_box_new ();
- gtk_widget_show (about_box);
-
- about_box_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
- gtk_window_set_type_hint (GTK_WINDOW (about_box_window), GDK_WINDOW_TYPE_HINT_DIALOG);
-
- gtk_window_set_resizable (GTK_WINDOW (about_box_window), FALSE);
- g_signal_connect (about_box_window, "key_press_event",
- G_CALLBACK (about_box_event_callback), &about_box_window);
- g_signal_connect (about_box_window, "button_press_event",
- G_CALLBACK (about_box_event_callback), &about_box_window);
- g_signal_connect (about_box_window, "delete_event",
- G_CALLBACK (about_box_event_callback), &about_box_window);
-
- gtk_window_set_transient_for (GTK_WINDOW (about_box_window), GTK_WINDOW (data));
- gtk_window_set_title (GTK_WINDOW (about_box_window), _("About Ximian Evolution"));
- gtk_container_add (GTK_CONTAINER (about_box_window), about_box);
- gtk_widget_show (about_box_window);
-}
-
-static void
-command_help_faq (BonoboUIComponent *uih,
- void *data,
- const char *path)
-{
- gnome_url_show ("http://www.ximian.com/apps/evolution-faq.html", NULL); /* FIXME use the error */
-}
-
-static void
-command_toggle_folder_bar (BonoboUIComponent *component,
- const char *path,
- Bonobo_UIComponent_EventType type,
- const char *state,
- gpointer user_data)
-{
- EShellView *shell_view;
- gboolean show;
-
- if (type != Bonobo_UIComponent_STATE_CHANGED)
- return;
-
- shell_view = E_SHELL_VIEW (user_data);
- show = atoi (state);
-
- e_shell_view_show_folder_bar (shell_view, show);
-}
-
-static void
-command_toggle_shortcut_bar (BonoboUIComponent *component,
- const char *path,
- Bonobo_UIComponent_EventType type,
- const char *state,
- gpointer user_data)
-{
- EShellView *shell_view;
- gboolean show;
-
- if (type != Bonobo_UIComponent_STATE_CHANGED)
- return;
-
- shell_view = E_SHELL_VIEW (user_data);
-
- show = atoi (state);
-
- e_shell_view_show_shortcut_bar (shell_view, show);
-}
-
-
-static void
-command_send_receive (BonoboUIComponent *ui_component,
- void *data,
- const char *path)
-{
- EShellView *shell_view;
- EShell *shell;
-
- shell_view = E_SHELL_VIEW (data);
- shell = e_shell_view_get_shell (shell_view);
-
- e_shell_send_receive (shell);
-}
-
-static void
-command_new_folder (BonoboUIComponent *uih,
- void *data,
- const char *path)
-{
- EShellView *shell_view;
- EShell *shell;
-
- shell_view = E_SHELL_VIEW (data);
- shell = e_shell_view_get_shell (shell_view);
-
- e_shell_show_folder_creation_dialog (shell, GTK_WINDOW (shell_view),
- get_path_for_folder_op (shell_view),
- NULL,
- NULL /* result_callback */,
- NULL /* result_callback_data */);
-}
-
-static void
-command_activate_view (BonoboUIComponent *uih,
- void *data,
- const char *path)
-{
- EShellView *shell_view;
- char *uri;
-
- shell_view = E_SHELL_VIEW (data);
-
- uri = g_strconcat (E_SHELL_URI_PREFIX, get_path_for_folder_op (shell_view), NULL);
- e_shell_view_display_uri (shell_view, uri, TRUE);
- g_free (uri);
-}
-
-static void
-command_open_folder_in_new_window (BonoboUIComponent *uih,
- gpointer data,
- const char *path)
-{
- EShellView *shell_view, *new_view;
- EShell *shell;
- char *uri;
-
- shell_view = E_SHELL_VIEW (data);
- shell = e_shell_view_get_shell (shell_view);
-
- uri = g_strconcat (E_SHELL_URI_PREFIX, get_path_for_folder_op (shell_view), NULL);
- new_view = e_shell_create_view (shell, uri, shell_view);
- g_free (uri);
-
- e_shell_view_show_shortcut_bar (new_view, FALSE);
- e_shell_view_show_folder_bar (new_view, FALSE);
-}
-
-
-/* Folder operations. */
-
-static void
-command_move_folder (BonoboUIComponent *uih,
- void *data,
- const char *path)
-{
- EShellView *shell_view;
-
- shell_view = E_SHELL_VIEW (data);
- e_shell_command_move_folder (e_shell_view_get_shell (shell_view), shell_view,
- get_path_for_folder_op (shell_view));
-}
-
-static void
-command_copy_folder (BonoboUIComponent *uih,
- void *data,
- const char *path)
-{
- EShellView *shell_view;
-
- shell_view = E_SHELL_VIEW (data);
- e_shell_command_copy_folder (e_shell_view_get_shell (shell_view), shell_view,
- get_path_for_folder_op (shell_view));
-}
-
-static void
-command_delete_folder (BonoboUIComponent *uih,
- void *data,
- const char *path)
-{
- EShellView *shell_view;
-
- shell_view = E_SHELL_VIEW (data);
- e_shell_command_delete_folder (e_shell_view_get_shell (shell_view), shell_view,
- get_path_for_folder_op (shell_view));
-}
-
-static void
-command_rename_folder (BonoboUIComponent *uih,
- void *data,
- const char *path)
-{
- EShellView *shell_view;
-
- shell_view = E_SHELL_VIEW (data);
- e_shell_command_rename_folder (e_shell_view_get_shell (shell_view), shell_view,
- get_path_for_folder_op (shell_view));
-}
-
-static void
-command_add_folder_to_shortcut_bar (BonoboUIComponent *uih,
- void *data,
- const char *path)
-{
- EShellView *shell_view;
-
- shell_view = E_SHELL_VIEW (data);
- e_shell_command_add_to_shortcut_bar (e_shell_view_get_shell (shell_view), shell_view,
- get_path_for_folder_op (shell_view));
-}
-
-
-/* Opening and removing other users' folders. */
-
-static void
-command_open_other_users_folder (BonoboUIComponent *uih,
- void *data,
- const char *path)
-{
- EShellView *shell_view;
- EShell *shell;
-
- shell_view = E_SHELL_VIEW (data);
- shell = e_shell_view_get_shell (shell_view);
-
- e_shell_show_shared_folder_picker_dialog (shell, shell_view);
-}
-
-static void
-command_remove_other_users_folder (BonoboUIComponent *uih,
- void *data,
- const char *path)
-{
- EShellView *shell_view;
-
- shell_view = E_SHELL_VIEW (data);
- e_shell_command_remove_shared_folder (e_shell_view_get_shell (shell_view), shell_view,
- get_path_for_folder_op (shell_view));
-}
-
-
-/* Going to a folder. */
-
-static void
-goto_folder_dialog_cancelled_cb (EShellFolderSelectionDialog *folder_selection_dialog,
- void *data)
-{
- gtk_widget_destroy (GTK_WIDGET (folder_selection_dialog));
-}
-
-static void
-goto_folder_dialog_folder_selected_cb (EShellFolderSelectionDialog *folder_selection_dialog,
- const char *path,
- void *data)
-{
- if (path != NULL) {
- EShellView *shell_view;
- char *uri;
-
- shell_view = E_SHELL_VIEW (data);
-
- uri = g_strconcat (E_SHELL_URI_PREFIX, path, NULL);
- e_shell_view_display_uri (shell_view, uri, TRUE);
- g_free (uri);
- }
-}
-
-static void
-command_goto_folder (BonoboUIComponent *uih,
- gpointer data,
- const char *path)
-{
- GtkWidget *folder_selection_dialog;
- EShellView *shell_view;
- EShell *shell;
- const char *current_uri;
-
- shell_view = E_SHELL_VIEW (data);
- shell = e_shell_view_get_shell (shell_view);
-
- current_uri = e_shell_view_get_current_uri (shell_view);
-
- folder_selection_dialog = e_shell_folder_selection_dialog_new (shell,
- _("Go to folder..."),
- _("Select the folder that you want to open"),
- current_uri,
- NULL, TRUE);
-
- gtk_window_set_transient_for (GTK_WINDOW (folder_selection_dialog), GTK_WINDOW (shell_view));
-
- g_signal_connect (folder_selection_dialog, "cancelled",
- G_CALLBACK (goto_folder_dialog_cancelled_cb), shell_view);
- g_signal_connect (folder_selection_dialog, "folder_selected",
- G_CALLBACK (goto_folder_dialog_folder_selected_cb), shell_view);
-
- gtk_widget_show (folder_selection_dialog);
-}
-
-static void
-command_create_folder (BonoboUIComponent *uih,
- void *data,
- const char *path)
-{
- EShellView *shell_view;
- EShell *shell;
-
- shell_view = E_SHELL_VIEW (data);
- shell = e_shell_view_get_shell (shell_view);
-
- e_shell_command_create_new_folder (shell, shell_view, get_path_for_folder_op (shell_view));
-}
-
-
-static void
-command_work_offline (BonoboUIComponent *uih,
- void *data,
- const char *path)
-{
- EShellView *shell_view;
- EShell *shell;
-
- shell_view = E_SHELL_VIEW (data);
- shell = e_shell_view_get_shell (shell_view);
-
- e_shell_go_offline (shell, shell_view);
-}
-
-static void
-command_work_online (BonoboUIComponent *uih,
- void *data,
- const char *path)
-{
- EShellView *shell_view;
- EShell *shell;
-
- shell_view = E_SHELL_VIEW (data);
- shell = e_shell_view_get_shell (shell_view);
-
- e_shell_go_online (shell, shell_view);
-}
-
-
-static void
-new_shortcut_dialog_cancelled_cb (EShellFolderSelectionDialog *folder_selection_dialog,
- void *data)
-{
- gtk_widget_destroy (GTK_WIDGET (folder_selection_dialog));
-}
-
-static void
-new_shortcut_dialog_folder_selected_cb (EShellFolderSelectionDialog *folder_selection_dialog,
- const char *path,
- void *data)
-{
- EShellView *shell_view;
- EShell *shell;
- EShortcuts *shortcuts;
- EFolder *folder;
- int group_num;
- char *evolution_uri;
-
- if (path == NULL)
- return;
-
- shell_view = E_SHELL_VIEW (data);
- shell = e_shell_view_get_shell (shell_view);
- shortcuts = e_shell_get_shortcuts (shell);
-
- folder = e_storage_set_get_folder (e_shell_get_storage_set (shell), path);
- if (folder == NULL)
- return;
-
- group_num = e_shell_view_get_current_shortcuts_group_num (shell_view);
-
- evolution_uri = g_strconcat (E_SHELL_URI_PREFIX, path, NULL);
-
- /* FIXME: I shouldn't have to set the type here. Maybe. */
- e_shortcuts_add_shortcut (shortcuts, group_num, -1, evolution_uri, NULL,
- e_folder_get_unread_count (folder),
- e_folder_get_type_string (folder),
- e_folder_get_custom_icon_name (folder));
-
- g_free (evolution_uri);
-
- gtk_widget_destroy (GTK_WIDGET (folder_selection_dialog));
-}
-
-static void
-command_new_shortcut (BonoboUIComponent *uih,
- void *data,
- const char *path)
-{
- EShellView *shell_view;
- GtkWidget *folder_selection_dialog;
-
- shell_view = E_SHELL_VIEW (data);
-
- folder_selection_dialog = e_shell_folder_selection_dialog_new (e_shell_view_get_shell (shell_view),
- _("Create New Shortcut"),
- _("Select the folder you want the shortcut to point to:"),
- e_shell_view_get_current_uri (shell_view),
- NULL, TRUE);
-
- g_signal_connect (folder_selection_dialog, "cancelled",
- G_CALLBACK (new_shortcut_dialog_cancelled_cb), shell_view);
- g_signal_connect (folder_selection_dialog, "folder_selected",
- G_CALLBACK (new_shortcut_dialog_folder_selected_cb), shell_view);
-
- gtk_widget_show (folder_selection_dialog);
-}
-
-
-/* Tools menu. */
-
-static void
-command_settings (BonoboUIComponent *uih,
- void *data,
- const char *path)
-{
- EShellView *shell_view;
-
- shell_view = E_SHELL_VIEW (data);
-
- e_shell_view_show_settings (shell_view);
-}
-
-static void
-command_pilot_settings (BonoboUIComponent *uih,
- void *data,
- const char *path)
-{
- launch_pilot_settings (NULL);
-}
-
-
-static BonoboUIVerb new_verbs [] = {
- BONOBO_UI_VERB ("NewFolder", command_new_folder),
- BONOBO_UI_VERB ("NewShortcut", command_new_shortcut),
-
- BONOBO_UI_VERB_END
-};
-
-static BonoboUIVerb file_verbs [] = {
- BONOBO_UI_VERB ("FileImporter", (BonoboUIVerbFn) show_import_wizard),
- BONOBO_UI_VERB ("FileOpenOtherUsersFolder", command_open_other_users_folder),
- BONOBO_UI_VERB ("FileRemoveOtherUsersFolder", command_remove_other_users_folder),
- BONOBO_UI_VERB ("FileGoToFolder", command_goto_folder),
- BONOBO_UI_VERB ("FileCreateFolder", command_create_folder),
- BONOBO_UI_VERB ("FileClose", command_close),
- BONOBO_UI_VERB ("FileExit", command_quit),
-
- BONOBO_UI_VERB ("WorkOffline", command_work_offline),
- BONOBO_UI_VERB ("WorkOnline", command_work_online),
-
- BONOBO_UI_VERB_END
-};
-
-static BonoboUIVerb folder_verbs [] = {
- BONOBO_UI_VERB ("ActivateView", command_activate_view),
- BONOBO_UI_VERB ("OpenFolderInNewWindow", command_open_folder_in_new_window),
- BONOBO_UI_VERB ("MoveFolder", command_move_folder),
- BONOBO_UI_VERB ("CopyFolder", command_copy_folder),
-
- BONOBO_UI_VERB ("DeleteFolder", command_delete_folder),
- BONOBO_UI_VERB ("RenameFolder", command_rename_folder),
-
- BONOBO_UI_VERB ("AddFolderToShortcutBar", command_add_folder_to_shortcut_bar),
-
- BONOBO_UI_VERB_END
-};
-
-static BonoboUIVerb actions_verbs[] = {
- BONOBO_UI_VERB ("SendReceive", command_send_receive),
-
- BONOBO_UI_VERB_END
-};
-
-static BonoboUIVerb tools_verbs[] = {
- BONOBO_UI_VERB ("Settings", command_settings),
-
- BONOBO_UI_VERB ("PilotSettings", command_pilot_settings),
-
- BONOBO_UI_VERB_END
-};
-
-static BonoboUIVerb help_verbs [] = {
- BONOBO_UI_VERB_DATA ("HelpFAQ", command_help_faq, NULL),
-
- BONOBO_UI_VERB_END
-};
-
-static EPixmap pixmaps [] = {
- E_PIXMAP ("/commands/SendReceive", "send-receive.xpm"),
-
- E_PIXMAP ("/menu/File/New/Folder", "folder.xpm"),
- E_PIXMAP ("/menu/File/Folder/Folder", "folder.xpm"),
- E_PIXMAP ("/menu/File/FileImporter", "import.xpm"),
- E_PIXMAP ("/menu/File/ToggleOffline", "work_offline.xpm"),
-
- E_PIXMAP ("/menu/Tools/Settings", "settings-16.png"),
-
- E_PIXMAP ("/Toolbar/SendReceive", "buttons/send-24-receive.png"),
-
- E_PIXMAP ("/popups/NewPopup/Folder", "folder.xpm"),
-
- E_PIXMAP_END
-};
-
-static EPixmap offline_pixmaps [] = {
- E_PIXMAP ("/menu/File/ToggleOffline", "work_offline.xpm"),
-
- E_PIXMAP_END
-};
-
-static EPixmap online_pixmaps [] = {
- E_PIXMAP ("/menu/File/ToggleOffline", "work_online-16.png"),
-
- E_PIXMAP_END
-};
-
-static void
-menu_do_misc (BonoboUIComponent *component,
- EShellView *shell_view)
-{
- bonobo_ui_component_add_listener (component, "ViewShortcutBar",
- command_toggle_shortcut_bar, shell_view);
- bonobo_ui_component_add_listener (component, "ViewFolderBar",
- command_toggle_folder_bar, shell_view);
-
- bonobo_ui_component_add_verb (component, "HelpSubmitBug",
- (BonoboUIVerbFn) command_submit_bug, shell_view);
- bonobo_ui_component_add_verb (component, "HelpAbout",
- (BonoboUIVerbFn) command_about_box, shell_view);
-}
-
-
-/* The Work Online / Work Offline menu item. */
-
-static void
-update_offline_menu_item (EShellView *shell_view,
- EShellLineStatus line_status)
-{
- BonoboUIComponent *ui_component;
-
- ui_component = e_shell_view_get_bonobo_ui_component (shell_view);
-
- switch (line_status) {
- case E_SHELL_LINE_STATUS_OFFLINE:
- bonobo_ui_component_set_prop (ui_component,
- "/menu/File/ToggleOffline",
- "label", _("_Work Online"), NULL);
- bonobo_ui_component_set_prop (ui_component,
- "/menu/File/ToggleOffline",
- "verb", "WorkOnline", NULL);
- bonobo_ui_component_set_prop (ui_component,
- "/commands/ToggleOffline",
- "sensitive", "1", NULL);
- e_pixmaps_update (ui_component, online_pixmaps);
- break;
-
- case E_SHELL_LINE_STATUS_ONLINE:
- bonobo_ui_component_set_prop (ui_component,
- "/menu/File/ToggleOffline",
- "label", _("_Work Offline"), NULL);
- bonobo_ui_component_set_prop (ui_component,
- "/menu/File/ToggleOffline",
- "verb", "WorkOffline", NULL);
- bonobo_ui_component_set_prop (ui_component,
- "/commands/ToggleOffline",
- "sensitive", "1", NULL);
- e_pixmaps_update (ui_component, offline_pixmaps);
- break;
-
- case E_SHELL_LINE_STATUS_GOING_OFFLINE:
- bonobo_ui_component_set_prop (ui_component,
- "/menu/File/ToggleOffline",
- "label", _("Work Offline"), NULL);
- bonobo_ui_component_set_prop (ui_component,
- "/menu/File/ToggleOffline",
- "verb", "WorkOffline", NULL);
- bonobo_ui_component_set_prop (ui_component,
- "/commands/ToggleOffline",
- "sensitive", "0", NULL);
- e_pixmaps_update (ui_component, offline_pixmaps);
- break;
-
- default:
- g_assert_not_reached ();
- }
-}
-
-static void
-shell_line_status_changed_cb (EShell *shell,
- EShellLineStatus new_status,
- void *data)
-{
- EShellView *shell_view;
-
- shell_view = E_SHELL_VIEW (data);
-
- update_offline_menu_item (shell_view, new_status);
-}
-
-
-#define SHORTCUT_BAR_TOGGLE_PATH "/commands/ViewShortcutBar"
-#define FOLDER_BAR_TOGGLE_PATH "/commands/ViewFolderBar"
-
-void
-e_shell_view_menu_setup (EShellView *shell_view)
-{
- BonoboUIComponent *uic;
- EShell *shell;
-
- g_return_if_fail (shell_view != NULL);
- g_return_if_fail (E_IS_SHELL_VIEW (shell_view));
-
- uic = e_shell_view_get_bonobo_ui_component (shell_view);
- shell = e_shell_view_get_shell (shell_view);
-
- bonobo_ui_component_add_verb_list_with_data (uic, file_verbs, shell_view);
- bonobo_ui_component_add_verb_list_with_data (uic, folder_verbs, shell_view);
- bonobo_ui_component_add_verb_list_with_data (uic, new_verbs, shell_view);
-
- bonobo_ui_component_add_verb_list_with_data (uic, actions_verbs, shell_view);
- bonobo_ui_component_add_verb_list_with_data (uic, tools_verbs, shell_view);
-
- bonobo_ui_component_add_verb_list (uic, help_verbs);
-
- menu_do_misc (uic, shell_view);
-
- e_pixmaps_update (uic, pixmaps);
-
- g_signal_connect (shell_view, "shortcut_bar_visibility_changed",
- G_CALLBACK (shortcut_bar_visibility_changed_cb),
- SHORTCUT_BAR_TOGGLE_PATH);
- g_signal_connect (shell_view, "folder_bar_visibility_changed",
- G_CALLBACK (folder_bar_visibility_changed_cb),
- FOLDER_BAR_TOGGLE_PATH);
-
- /* Initialize the toggles. Yeah, this is, well, yuck. */
- folder_bar_visibility_changed_cb (shell_view, e_shell_view_folder_bar_shown (shell_view),
- FOLDER_BAR_TOGGLE_PATH);
- shortcut_bar_visibility_changed_cb (shell_view, e_shell_view_shortcut_bar_shown (shell_view),
- SHORTCUT_BAR_TOGGLE_PATH);
-
- /* Set up the work online / work offline menu item. */
- g_signal_connect_object (shell, "line_status_changed",
- G_CALLBACK (shell_line_status_changed_cb), shell_view, 0);
- update_offline_menu_item (shell_view, e_shell_get_line_status (shell));
-}
diff --git a/shell/e-shell-view-menu.h b/shell/e-shell-view-menu.h
deleted file mode 100644
index 976d70c281..0000000000
--- a/shell/e-shell-view-menu.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-shell-view.c
- *
- * Copyright (C) 2000 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Authors:
- * Miguel de Icaza
- * Ettore Perazzoli
- */
-
-#ifndef E_SHELL_VIEW_MENU_H
-#define E_SHELL_VIEW_MENU_H
-
-#include "e-shell-view.h"
-
-void e_shell_view_menu_setup (EShellView *shell_view);
-
-#endif
diff --git a/shell/e-shell-view.c b/shell/e-shell-view.c
deleted file mode 100644
index e3a4a1422e..0000000000
--- a/shell/e-shell-view.c
+++ /dev/null
@@ -1,2925 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-shell-view.c
- *
- * Copyright (C) 2000, 2001, 2002 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Authors:
- * Ettore Perazzoli <ettore@ximian.com>
- * Miguel de Icaza <miguel@ximian.com>
- * Matt Loper <matt@ximian.com>
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "e-shell-view.h"
-
-#include "evolution-shell-view.h"
-
-#include "e-shell-marshal.h"
-
-#include "e-history.h"
-#include "e-icon-factory.h"
-#include "e-shell-constants.h"
-#include "e-shell-folder-title-bar.h"
-#include "e-shell-utils.h"
-#include "e-shell-view-menu.h"
-#include "e-shell.h"
-#include "e-shortcuts-view.h"
-#include "e-storage-set-view.h"
-#include "e-title-bar.h"
-
-#include "e-util/e-gtk-utils.h"
-
-#include "widgets/misc/e-clipped-label.h"
-
-#include <gtk/gtkwidget.h>
-
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <fcntl.h>
-#include <ctype.h>
-#include <string.h>
-
-#include <glib.h>
-
-#include <libgnome/libgnome.h>
-#include <libgnomeui/gnome-window.h>
-#include <libgnomeui/gnome-window-icon.h>
-#include <libgnomeui/gnome-app.h>
-
-#include <gtk/gtkscrolledwindow.h>
-#include <gconf/gconf-client.h>
-
-#include <bonobo/bonobo-socket.h>
-#include <bonobo/bonobo-ui-util.h>
-#include <bonobo/bonobo-ui-container.h>
-#include <bonobo/bonobo-ui-engine.h>
-#include <bonobo/bonobo-widget.h>
-#include <bonobo/bonobo-window.h>
-
-#include <gal/util/e-util.h>
-#include <gal/widgets/e-gui-utils.h>
-
-static BonoboWindowClass *parent_class = NULL;
-
-struct _View {
- char *uri;
- GtkWidget *control;
- EFolder *folder;
-};
-typedef struct _View View;
-
-struct _EShellViewPrivate {
- /* The shell. */
- EShell *shell;
-
- /* EvolutionShellView Bonobo object for implementing the
- Evolution::ShellView interface. */
- EvolutionShellView *corba_interface;
-
- /* The UI handler & container. */
- BonoboUIComponent *ui_component;
- BonoboUIContainer *ui_container;
-
- /* History of visited (evolution:) URIs. */
- EHistory *history;
-
- /* Currently displayed URI. */
- char *uri;
-
- /* Delayed selection, used when a path doesn't exist in an EStorage.
- Cleared when we're signaled with "folder_selected". */
- char *delayed_selection;
-
- /* uri to go to at timeout */
- unsigned int set_folder_timeout;
- char *set_folder_uri;
-
- /* Tooltips. */
- GtkTooltips *tooltips;
-
- /* The widgetry. */
- GtkWidget *appbar;
- GtkWidget *hpaned;
- GtkWidget *view_vbox;
- GtkWidget *folder_title_bar;
- GtkWidget *view_hpaned;
- GtkWidget *contents;
- GtkWidget *notebook;
- GtkWidget *shortcut_frame;
- GtkWidget *shortcut_bar;
- GtkWidget *storage_set_title_bar;
- GtkWidget *storage_set_view;
- GtkWidget *storage_set_view_box;
-
- /* The status bar widgetry. */
- GtkWidget *status_bar;
- GtkWidget *offline_toggle;
- GtkWidget *offline_toggle_image;
- GtkWidget *menu_hint_label;
- GtkWidget *task_bar;
-
- /* The pop-up window for the folder-tree (i.e. the one we create when
- the user clicks on the folder title. */
- GtkWidget *folder_bar_popup;
-
- /* The views we have already open. */
- GHashTable *uri_to_view;
-
- /* Position of the handles in the paneds, to be restored when we show elements
- after hiding them. */
- unsigned int hpaned_position;
- unsigned int view_hpaned_position;
-
- /* Whether the shortcut and folder bars are visible or not. */
- unsigned int shortcut_bar_shown : 1;
- unsigned int folder_bar_shown : 1;
-
- /* List of sockets we created. */
- GList *sockets;
-};
-
-enum {
- SHORTCUT_BAR_VISIBILITY_CHANGED,
- FOLDER_BAR_VISIBILITY_CHANGED,
- VIEW_CHANGED,
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = { 0 };
-
-#define DEFAULT_SHORTCUT_BAR_WIDTH 100
-
-#define DEFAULT_TREE_WIDTH 130
-#define MIN_POPUP_TREE_WIDTH 130
-
-#define DEFAULT_WIDTH 705
-#define DEFAULT_HEIGHT 550
-
-#define SET_FOLDER_DELAY 250
-
-/* URI to display when the currently displayed folder is removed from the
- storage. */
-#define FALLBACK_URI E_SUMMARY_URI
-
-
-/* The icons for the offline/online status. */
-
-static GdkPixmap *offline_pixmap = NULL;
-static GdkBitmap *offline_mask = NULL;
-
-static GdkPixmap *online_pixmap = NULL;
-static GdkBitmap *online_mask = NULL;
-
-
-static void update_for_current_uri (EShellView *shell_view);
-static void update_offline_toggle_status (EShellView *shell_view);
-static const char *get_storage_set_path_from_uri (const char *uri);
-
-
-/* Boo. */
-static void new_folder_cb (EStorageSet *storage_set, const char *path, void *data);
-static gboolean display_uri (EShellView *shell_view, const char *uri,
- gboolean add_to_history, gboolean queue);
-
-
-/* View handling. */
-
-static View *
-view_new (const char *uri,
- GtkWidget *control)
-{
- View *new;
-
- new = g_new (View, 1);
- new->uri = g_strdup (uri);
- new->control = control;
-
- return new;
-}
-
-static void
-view_destroy (View *view)
-{
- g_free (view->uri);
- g_free (view);
-}
-
-
-/* Utility functions. */
-
-static void
-update_other_users_folder_items_sensitivity (EShellView *shell_view)
-{
- EShellViewPrivate *priv = shell_view->priv;
- gboolean a_storage_supports_shared_folders;
- GList *storage_list, *p;
-
- storage_list = e_storage_set_get_storage_list (e_shell_get_storage_set (priv->shell));
- a_storage_supports_shared_folders = FALSE;
- for (p = storage_list; p != NULL; p = p->next) {
- if (e_storage_supports_shared_folders (E_STORAGE (p->data)))
- a_storage_supports_shared_folders = TRUE;
- }
-
- if (a_storage_supports_shared_folders) {
- bonobo_ui_component_set_prop (priv->ui_component, "/commands/FileOpenOtherUsersFolder",
- "sensitive", "1", NULL);
- bonobo_ui_component_set_prop (priv->ui_component, "/commands/FileRemoveOtherUsersFolder",
- "sensitive", "1", NULL);
- } else {
- bonobo_ui_component_set_prop (priv->ui_component, "/commands/FileOpenOtherUsersFolder",
- "sensitive", "0", NULL);
- bonobo_ui_component_set_prop (priv->ui_component, "/commands/FileRemoveOtherUsersFolder",
- "sensitive", "0", NULL);
- }
-
- g_list_foreach (storage_list, (GFunc) g_object_unref, NULL);
- g_list_free (storage_list);
-}
-
-static GtkWidget *
-create_label_for_empty_page (void)
-{
- GtkWidget *label;
-
- label = e_clipped_label_new (_("(No folder displayed)"), PANGO_WEIGHT_NORMAL, 1.0);
- gtk_widget_show (label);
-
- return label;
-}
-
-/* Initialize the icons. */
-static void
-load_images (void)
-{
- GdkPixbuf *pixbuf;
-
- pixbuf = gdk_pixbuf_new_from_file (EVOLUTION_IMAGES "/offline.png", NULL);
- if (pixbuf == NULL) {
- g_warning ("Cannot load `%s'", EVOLUTION_IMAGES "/offline.png");
- } else {
- gdk_pixbuf_render_pixmap_and_mask (pixbuf, &offline_pixmap, &offline_mask, 128);
- g_object_unref (pixbuf);
- }
-
- pixbuf = gdk_pixbuf_new_from_file (EVOLUTION_IMAGES "/online.png", NULL);
- if (pixbuf == NULL) {
- g_warning ("Cannot load `%s'", EVOLUTION_IMAGES "/online.png");
- } else {
- gdk_pixbuf_render_pixmap_and_mask (pixbuf, &online_pixmap, &online_mask, 128);
- g_object_unref (pixbuf);
- }
-}
-
-static void
-cleanup_delayed_selection (EShellView *shell_view)
-{
- EShellViewPrivate *priv;
-
- priv = shell_view->priv;
-
- if (priv->delayed_selection != NULL) {
- g_free (priv->delayed_selection);
- priv->delayed_selection = NULL;
- g_signal_handlers_disconnect_by_func (e_shell_get_storage_set (priv->shell),
- G_CALLBACK (new_folder_cb), shell_view);
- }
-}
-
-static GtkWidget *
-find_socket (GtkContainer *container)
-{
- GList *children, *tmp;
-
- children = gtk_container_get_children(container);
- while (children) {
- if (BONOBO_IS_SOCKET (children->data))
- return children->data;
- else if (GTK_IS_CONTAINER (children->data)) {
- GtkWidget *socket = find_socket (children->data);
- if (socket)
- return socket;
- }
- tmp = children->next;
- g_list_free_1 (children);
- children = tmp;
- }
- return NULL;
-}
-
-static void
-setup_verb_sensitivity_for_folder (EShellView *shell_view,
- const char *path)
-{
- EShellViewPrivate *priv;
- BonoboUIComponent *ui_component;
- EFolder *folder;
- const char *prop;
-
- priv = shell_view->priv;
-
- ui_component = e_shell_view_get_bonobo_ui_component (shell_view);
-
- if (path == NULL)
- folder = NULL;
- else
- folder = e_storage_set_get_folder (e_shell_get_storage_set (priv->shell), path);
-
- /* Adjust sensitivity for menu options depending on whether the folder
- selected can actually be manipulated or not. */
-
- if (folder != NULL
- && ! e_folder_get_is_stock (folder)
- && e_folder_get_physical_uri (folder) != NULL)
- prop = "1";
- else
- prop = "0";
- bonobo_ui_component_set_prop (ui_component, "/commands/MoveFolder", "sensitive", prop, NULL);
- bonobo_ui_component_set_prop (ui_component, "/commands/CopyFolder", "sensitive", prop, NULL);
- bonobo_ui_component_set_prop (ui_component, "/commands/DeleteFolder", "sensitive", prop, NULL);
- bonobo_ui_component_set_prop (ui_component, "/commands/RenameFolder", "sensitive", prop, NULL);
-
- /* Adjust sensitivity for menu options depending on whether the user
- right-clicked a folder whose contents can be viewed. */
-
- if (folder != NULL
- && e_folder_type_registry_get_handler_for_type (e_shell_get_folder_type_registry (e_shell_view_get_shell (shell_view)),
- e_folder_get_type_string (folder)) != NULL)
- prop = "1";
- else
- prop = "0";
- bonobo_ui_component_set_prop (ui_component, "/commands/ActivateView", "sensitive", prop, NULL);
- bonobo_ui_component_set_prop (ui_component, "/commands/OpenFolderInNewWindow", "sensitive", prop, NULL);
- bonobo_ui_component_set_prop (ui_component, "/commands/AddFolderToShortcutBar", "sensitive", prop, NULL);
-}
-
-
-static void
-update_navigation_buttons (EShellView *shell_view)
-{
- EShellViewPrivate *priv;
-
- priv = shell_view->priv;
-
- e_shell_folder_title_bar_update_navigation_buttons (E_SHELL_FOLDER_TITLE_BAR (priv->folder_title_bar),
- e_history_has_prev (priv->history),
- e_history_has_next (priv->history));
-}
-
-static int
-history_uri_matching_func (const void *a,
- const void *b)
-{
- const char *s1, *s2;
-
- s1 = (const char *) a;
- s2 = (const char *) b;
-
- return strcmp (s1, s2);
-}
-
-static void
-remove_uri_from_history (EShellView *shell_view,
- const char *uri)
-{
- EShellViewPrivate *priv;
-
- priv = shell_view->priv;
-
- e_history_remove_matching (priv->history, uri, history_uri_matching_func);
-}
-
-
-static void
-setup_defaults (EShellView *shell_view)
-{
- EShellViewPrivate *priv;
- EShortcutBar *shortcut_bar;
- GConfClient *client;
- char *file_name;
- int shortcut_group;
- int width;
-
- g_return_if_fail (shell_view != NULL);
- g_return_if_fail (E_IS_SHELL_VIEW (shell_view));
-
- priv = shell_view->priv;
- shortcut_bar = E_SHORTCUT_BAR (priv->shortcut_bar);
-
- client = gconf_client_get_default ();
-
- gtk_window_set_default_size (GTK_WINDOW (shell_view),
- gconf_client_get_int (client, "/apps/evolution/shell/view_defaults/width", NULL),
- gconf_client_get_int (client, "/apps/evolution/shell/view_defaults/height", NULL));
-
- shortcut_group = gconf_client_get_int (client, "/apps/evolution/shell/view_defaults/selected_shortcut_group", NULL);
- e_shell_view_set_current_shortcuts_group_num (shell_view, shortcut_group);
-
- e_shell_view_show_folder_bar (shell_view,
- gconf_client_get_bool (client, "/apps/evolution/shell/view_defaults/show_folder_bar", NULL));
- e_shell_view_show_shortcut_bar (shell_view,
- gconf_client_get_bool (client, "/apps/evolution/shell/view_defaults/show_shortcut_bar", NULL));
-
- width = gconf_client_get_int (client, "/apps/evolution/shell/view_defaults/shortcut_bar/width", NULL);
- if (priv->shortcut_bar_shown)
- gtk_paned_set_position (GTK_PANED (priv->hpaned), width);
- priv->hpaned_position = width;
-
- width = gconf_client_get_int (client, "/apps/evolution/shell/view_defaults/folder_bar/width", NULL);
- if (priv->folder_bar_shown)
- gtk_paned_set_position (GTK_PANED (priv->view_hpaned), width);
- priv->view_hpaned_position = width;
-
- /* Load the expanded state for the ShellView's StorageSetView */
- file_name = g_strdup_printf ("%s/config/storage-set-view-expanded:default",
- e_shell_get_local_directory (priv->shell));
- e_tree_load_expanded_state (E_TREE (priv->storage_set_view),
- file_name);
- g_free (file_name);
-}
-
-
-/* This implements the behavior for when the folder which is currently displayed
- gets deleted. */
-
-/* Find the path for an Inbox in the specified storage. This is not really
- 100% correct, but should work for most cases. */
-static char *
-find_inbox_in_storage (EShellView *shell_view,
- const char *storage_name)
-{
- EShellViewPrivate *priv;
- EStorageSet *storage_set;
- EStorage *storage;
- GList *subfolder_paths;
- GList *p;
-
- priv = shell_view->priv;
- storage_set = e_shell_get_storage_set (priv->shell);
- storage = e_storage_set_get_storage (storage_set, storage_name);
-
- subfolder_paths = e_storage_get_subfolder_paths (storage, "/");
- for (p = subfolder_paths; p != NULL; p = p->next) {
- const char *path;
- char *casefold_i18n_inbox_name;
- char *casefold_path;
-
- path = (const char *) p->data;
-
- casefold_i18n_inbox_name = g_utf8_casefold (_("Inbox"), -1);
- casefold_path = g_utf8_casefold (path + 1, -1);
-
- if (g_utf8_collate (casefold_path, "/inbox") == 0
- || g_utf8_collate (casefold_path + 1, _("Inbox")) == 0) {
- char *return_path;
-
- return_path = g_strconcat ("/", storage_name, "/", path,
- NULL);
- e_free_string_list (subfolder_paths);
-
- g_free (casefold_i18n_inbox_name);
- g_free (casefold_path);
- return return_path;
- }
-
- g_free (casefold_i18n_inbox_name);
- g_free (casefold_path);
- }
-
- e_free_string_list (subfolder_paths);
-
- return NULL;
-}
-
-static void
-handle_current_folder_removed (EShellView *shell_view)
-{
- EShellViewPrivate *priv;
- const char *current_path;
- const char *p;
- char *new_path;
-
- /* Note: we assume that priv->uri is an evolution: URI. */
-
- priv = shell_view->priv;
-
- current_path = priv->uri + E_SHELL_URI_PREFIX_LEN;
-
- g_assert (*current_path == E_PATH_SEPARATOR);
-
- new_path = NULL;
-
- /* If we have a parent folder (not a parent storage), try to display
- that one. */
-
- p = strrchr (current_path + 1, E_PATH_SEPARATOR);
- if (p != NULL && p[1] != '\0' && strchr (current_path + 1, E_PATH_SEPARATOR) != p) {
- new_path = g_strndup (current_path, p - current_path);
- } else {
- /* We don't have a parent folder, so try to see if there is an
- Inbox folder in the same storage. */
-
- /* Extract the storage name. */
- p = strchr (current_path + 1, E_PATH_SEPARATOR);
- if (p == NULL) {
- /* The URL points itself to a storage, so just redirect
- to the default case. */
- new_path = NULL;
- } else {
- char *storage_name;
-
- storage_name = g_strndup (current_path + 1, p - current_path - 1);
-
- new_path = find_inbox_in_storage (shell_view, storage_name);
- if (new_path == NULL) {
- char *storage_uri;
-
- /* No Inbox in this storage -- fallback to the storage. */
- storage_uri = g_strconcat (E_SHELL_URI_PREFIX, storage_name, NULL);
- e_shell_view_display_uri (shell_view, storage_uri, TRUE);
-
- g_free (storage_uri);
- g_free (storage_name);
- return;
- }
-
- g_free (storage_name);
- }
- }
-
- if (new_path == NULL) {
- e_shell_view_display_uri (shell_view, FALLBACK_URI, TRUE);
- } else {
- EFolder *folder;
-
- /* Check that the folder we have chosen exists; if it doesn't,
- we just use the fallback URI. */
-
- folder = e_storage_set_get_folder (e_shell_get_storage_set (priv->shell), new_path);
- if (folder == NULL) {
- e_shell_view_display_uri (shell_view, FALLBACK_URI, TRUE);
- } else {
- char *new_uri;
-
- new_uri = g_strconcat (E_SHELL_URI_PREFIX, new_path, NULL);
- e_shell_view_display_uri (shell_view, new_uri, TRUE);
- g_free (new_uri);
- }
-
- g_free (new_path);
- }
-}
-
-
-/* Callbacks for the EStorageSet. */
-
-static void
-storage_set_new_storage_callback (EStorageSet *storage_set,
- EStorage *storage,
- void *data)
-{
- if (e_storage_supports_shared_folders (storage))
- update_other_users_folder_items_sensitivity (E_SHELL_VIEW (data));
-}
-
-static void
-storage_set_removed_storage_callback (EStorageSet *storage_set,
- EStorage *storage,
- void *data)
-{
- EShellView *shell_view = E_SHELL_VIEW (data);
-
- if (! e_storage_supports_shared_folders (storage))
- return;
-
- update_other_users_folder_items_sensitivity (shell_view);
-}
-
-static void
-storage_set_removed_folder_callback (EStorageSet *storage_set,
- const char *path,
- void *data)
-{
- EShellView *shell_view;
- EShellViewPrivate *priv;
- GtkWidget *socket;
- View *view;
- int destroy_connection_id;
- int page_num;
- char *uri;
-
- shell_view = E_SHELL_VIEW (data);
- priv = shell_view->priv;
-
- uri = g_strconcat (E_SHELL_URI_PREFIX, path, NULL);
-
- remove_uri_from_history (shell_view, uri);
- update_navigation_buttons (shell_view);
-
- /* (Note that at this point the current URI in the history might have
- been changed and not match the current view. But we catch this case
- when checking if this was the current view, below.) */
-
- view = g_hash_table_lookup (priv->uri_to_view, uri);
-
- g_free (uri);
-
- if (view == NULL)
- return;
-
- socket = find_socket (GTK_CONTAINER (view->control));
- priv->sockets = g_list_remove (priv->sockets, socket);
-
- destroy_connection_id = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (socket), "e_shell_view_destroy_connection_id"));
- g_signal_handler_disconnect((socket), destroy_connection_id);
-
- page_num = gtk_notebook_page_num (GTK_NOTEBOOK (priv->notebook), view->control);
-
- /* Check if it's the URI that we are currently displaying. */
- if (strncmp (priv->uri, E_SHELL_URI_PREFIX, E_SHELL_URI_PREFIX_LEN) == 0
- && strcmp (priv->uri + E_SHELL_URI_PREFIX_LEN, path) == 0) {
- handle_current_folder_removed (shell_view);
- }
-
- bonobo_control_frame_control_deactivate (BONOBO_CONTROL_FRAME (bonobo_widget_get_control_frame (BONOBO_WIDGET (view->control))));
- gtk_widget_destroy (view->control);
-
- g_hash_table_remove (priv->uri_to_view, view->uri);
- view_destroy (view);
-
- gtk_notebook_remove_page (GTK_NOTEBOOK (priv->notebook), page_num);
-}
-
-
-/* Folder bar pop-up handling. */
-
-static void
-reparent (GtkWidget *widget,
- GtkContainer *new_container)
-{
- gtk_widget_ref (widget);
- gtk_container_remove (GTK_CONTAINER (widget->parent), widget);
- gtk_container_add (GTK_CONTAINER (new_container), widget);
- gtk_widget_unref (widget);
-}
-
-static void
-reparent_storage_set_view_box_and_destroy_popup (EShellView *shell_view)
-{
- EShellViewPrivate *priv;
-
- priv = shell_view->priv;
-
- if (priv->folder_bar_popup == NULL)
- return;
-
- gtk_widget_ref (priv->storage_set_view_box);
- gtk_container_remove (GTK_CONTAINER (priv->folder_bar_popup), priv->storage_set_view_box);
- gtk_paned_pack1 (GTK_PANED (priv->view_hpaned), priv->storage_set_view_box, FALSE, FALSE);
- gtk_widget_unref (priv->storage_set_view_box);
-
- gtk_widget_destroy (priv->folder_bar_popup);
- priv->folder_bar_popup = NULL;
-
- /* Re-enable DnD on the StorageSetView (it got disabled when displaying
- the pop-up). */
- e_storage_set_view_set_allow_dnd (E_STORAGE_SET_VIEW (priv->storage_set_view), TRUE);
-}
-
-static void
-popdown_transient_folder_bar (EShellView *shell_view)
-{
- EShellViewPrivate *priv;
-
- priv = shell_view->priv;
-
- gdk_pointer_ungrab (GDK_CURRENT_TIME);
- gdk_keyboard_ungrab (GDK_CURRENT_TIME);
- gtk_grab_remove (priv->storage_set_view_box);
-
- reparent_storage_set_view_box_and_destroy_popup (shell_view);
- gtk_widget_hide (priv->storage_set_view_box);
-
- e_shell_folder_title_bar_set_toggle_state (E_SHELL_FOLDER_TITLE_BAR (priv->folder_title_bar), FALSE);
-
- /* Re-enable DnD on the StorageSetView (it got disabled when displaying
- the pop-up). */
- e_storage_set_view_set_allow_dnd (E_STORAGE_SET_VIEW (priv->storage_set_view), TRUE);
-}
-
-static int
-storage_set_view_box_button_release_event_cb (GtkWidget *widget,
- GdkEventButton *button_event,
- void *data)
-{
- EShellView *shell_view;
- EShellViewPrivate *priv;
-
- shell_view = E_SHELL_VIEW (data);
- priv = shell_view->priv;
-
- if (button_event->window == GTK_PANED (priv->view_hpaned)->handle
- || button_event->button != 1)
- return FALSE;
-
- popdown_transient_folder_bar (shell_view);
- return TRUE;
-}
-
-static void
-storage_set_view_folder_opened_cb (EStorageSetView *storage_set_view,
- const char *path,
- void *data)
-{
- /* Pop down for top level nodes, see #31303. */
- if (strchr (path + 1, E_PATH_SEPARATOR) == NULL)
- popdown_transient_folder_bar (E_SHELL_VIEW (data));
-}
-
-static void
-popup_storage_set_view_button_clicked (ETitleBar *title_bar,
- void *data)
-{
- EShellView *shell_view;
- EShellViewPrivate *priv;
-
- shell_view = E_SHELL_VIEW (data);
- priv = shell_view->priv;
-
- g_assert (priv->folder_bar_popup != NULL);
-
- reparent_storage_set_view_box_and_destroy_popup (shell_view);
-
- e_shell_view_show_folder_bar (shell_view, TRUE);
- e_shell_folder_title_bar_set_toggle_state (E_SHELL_FOLDER_TITLE_BAR (priv->folder_title_bar), FALSE);
-}
-
-static void
-folder_bar_popup_map_callback (GtkWidget *widget,
- void *data)
-{
- EShellView *shell_view;
- EShellViewPrivate *priv;
- guint32 current_time;
-
- shell_view = E_SHELL_VIEW (data);
- priv = shell_view->priv;
-
- current_time = GDK_CURRENT_TIME;
-
- if (gdk_pointer_grab (widget->window, TRUE,
- (GDK_BUTTON_PRESS_MASK
- | GDK_BUTTON_RELEASE_MASK
- | GDK_ENTER_NOTIFY_MASK
- | GDK_LEAVE_NOTIFY_MASK
- | GDK_POINTER_MOTION_MASK),
- NULL, NULL, current_time) != 0) {
- g_warning ("e-shell-view.c:folder_bar_popup_map_callback() -- pointer grab failed.");
- return;
- }
-
- if (gdk_keyboard_grab (widget->window, TRUE, 0) != 0) {
- g_warning ("e-shell-view.c:folder_bar_popup_map_callback() -- keyboard grab failed.");
- gdk_pointer_ungrab (current_time);
- return;
- }
-
- gtk_grab_add (widget);
-
- e_signal_connect_while_alive (widget, "button_release_event",
- G_CALLBACK (storage_set_view_box_button_release_event_cb),
- shell_view, priv->folder_bar_popup);
- e_signal_connect_while_alive (priv->storage_set_view, "folder_opened",
- G_CALLBACK (storage_set_view_folder_opened_cb),
- shell_view, priv->folder_bar_popup);
- e_signal_connect_while_alive (priv->storage_set_view, "button_release_event",
- G_CALLBACK (storage_set_view_box_button_release_event_cb),
- shell_view, priv->folder_bar_popup);
- e_signal_connect_while_alive (priv->storage_set_title_bar, "button_clicked",
- G_CALLBACK (popup_storage_set_view_button_clicked),
- shell_view, priv->folder_bar_popup);
-}
-
-static void
-pop_up_folder_bar (EShellView *shell_view)
-{
- EShellViewPrivate *priv;
- int x, y;
- int orig_x, orig_y;
-
- priv = shell_view->priv;
-
- g_assert (! priv->folder_bar_shown);
-
- e_title_bar_set_button_mode (E_TITLE_BAR (priv->storage_set_title_bar),
- E_TITLE_BAR_BUTTON_MODE_PIN);
-
- priv->folder_bar_popup = gtk_window_new (GTK_WINDOW_POPUP);
-
- /* We need to show the storage set view box and do a pointer grab to catch the
- mouse clicks. But until the box is shown, we cannot grab. So we connect to
- the "map" signal; `storage_set_view_box_map_cb()' will do the grab. */
- g_signal_connect (priv->folder_bar_popup, "map",
- G_CALLBACK (folder_bar_popup_map_callback), shell_view);
-
- x = priv->folder_title_bar->allocation.x;
- y = priv->folder_title_bar->allocation.y + priv->folder_title_bar->allocation.height;
-
- gdk_window_get_origin (priv->folder_title_bar->window, &orig_x, &orig_y);
- x += orig_x;
- y += orig_y + 2;
-
- priv->view_hpaned_position = MAX (priv->view_hpaned_position, MIN_POPUP_TREE_WIDTH);
-
- gtk_window_set_default_size (GTK_WINDOW (priv->folder_bar_popup),
- priv->view_hpaned_position,
- priv->view_hpaned->allocation.height);
-
- reparent (priv->storage_set_view_box, GTK_CONTAINER (priv->folder_bar_popup));
-
- gtk_widget_show (priv->storage_set_view_box);
-
- gtk_window_move (GTK_WINDOW (priv->folder_bar_popup), x, y);
- gtk_widget_show (priv->folder_bar_popup);
-
- /* Disable DnD or "interesting" things will happen. */
- e_storage_set_view_set_allow_dnd (E_STORAGE_SET_VIEW (priv->storage_set_view), FALSE);
-}
-
-
-
-/* Switching views on a tree view click. */
-
-static int
-set_folder_timeout (gpointer data)
-{
- EShellView *shell_view;
- EShellViewPrivate *priv;
-
- shell_view = E_SHELL_VIEW (data);
- priv = shell_view->priv;
-
- /* Set to 0 so we don't remove it in _display_uri(). */
- priv->set_folder_timeout = 0;
- e_shell_view_display_uri (shell_view, priv->set_folder_uri, TRUE);
-
- return FALSE;
-}
-
-static int
-popdown_transient_folder_bar_idle (void *data)
-{
- EShellView *shell_view;
-
- shell_view = E_SHELL_VIEW (data);
-
- popdown_transient_folder_bar (shell_view);
-
- g_object_unref (shell_view);
-
- return FALSE;
-}
-
-static void
-switch_on_folder_tree_click (EShellView *shell_view,
- const char *path)
-{
- EShellViewPrivate *priv;
- char *uri;
-
- priv = shell_view->priv;
-
- gdk_pointer_ungrab (GDK_CURRENT_TIME);
- gdk_keyboard_ungrab (GDK_CURRENT_TIME);
- gtk_grab_remove (priv->storage_set_view_box);
-
- uri = g_strconcat (E_SHELL_URI_PREFIX, path, NULL);
- if (priv->uri != NULL && !strcmp (uri, priv->uri)) {
- g_free (uri);
- return;
- }
-
- if (priv->set_folder_timeout != 0)
- gtk_timeout_remove (priv->set_folder_timeout);
-
- g_free (priv->set_folder_uri);
- priv->set_folder_uri = NULL;
-
- cleanup_delayed_selection (shell_view);
-
- if (priv->folder_bar_popup != NULL) {
- e_shell_view_display_uri (shell_view, uri, TRUE);
- g_free (uri);
-
- g_object_ref (shell_view);
- gtk_idle_add (popdown_transient_folder_bar_idle, shell_view);
- return;
- }
-
- priv->set_folder_uri = uri;
-
- priv->set_folder_timeout = gtk_timeout_add (SET_FOLDER_DELAY, set_folder_timeout, shell_view);
-}
-
-
-/* Callbacks. */
-
-/* Callback when a new folder is added. Removed when we clear the
- delayed_selection. */
-static void
-new_folder_cb (EStorageSet *storage_set,
- const char *path,
- void *data)
-{
- EShellView *shell_view;
- EShellViewPrivate *priv;
- char *delayed_path;
-
- shell_view = E_SHELL_VIEW (data);
- priv = shell_view->priv;
-
- delayed_path = strchr (priv->delayed_selection, ':');
- if (delayed_path) {
- delayed_path ++;
- if (!strcmp(path, delayed_path)) {
- char *uri;
-
- uri = g_strdup (priv->delayed_selection);
- cleanup_delayed_selection (shell_view);
- e_shell_view_display_uri (shell_view, uri, FALSE);
- g_free (uri);
- }
- }
-}
-
-/* Callback called when an icon on the shortcut bar gets clicked. */
-static void
-activate_shortcut_cb (EShortcutsView *shortcut_view,
- EShortcuts *shortcuts,
- const char *uri,
- gboolean in_new_window,
- void *data)
-{
- EShellView *shell_view;
-
- shell_view = E_SHELL_VIEW (data);
-
- if (in_new_window) {
- EShellView *new_view;
-
- new_view = e_shell_create_view (e_shell_view_get_shell (shell_view), uri, shell_view);
- e_shell_view_show_shortcut_bar (new_view, FALSE);
- e_shell_view_show_folder_bar (new_view, FALSE);
- } else {
- e_shell_view_display_uri (shell_view, uri, TRUE);
- }
-}
-
-/* Callback when user chooses "Hide shortcut bar" via a right click */
-static void
-hide_requested_cb (EShortcutsView *shortcut_view,
- void *data)
-{
- EShellView *shell_view;
-
- shell_view = E_SHELL_VIEW (data);
-
- e_shell_view_show_shortcut_bar (shell_view, FALSE);
-}
-
-/* Callback called when a folder on the tree view gets clicked. */
-static void
-folder_selected_cb (EStorageSetView *storage_set_view,
- const char *path,
- void *data)
-{
- EShellView *shell_view;
-
- shell_view = E_SHELL_VIEW (data);
-
- setup_verb_sensitivity_for_folder (shell_view, path);
- switch_on_folder_tree_click (shell_view, path);
-}
-
-/* Callbacks for the folder context menu in the folder bar. */
-
-static void
-folder_context_menu_popping_up_cb (EStorageSetView *storage_set_view,
- const char *path,
- void *data)
-{
- EShellView *shell_view;
-
- shell_view = E_SHELL_VIEW (data);
-
- setup_verb_sensitivity_for_folder (shell_view, path);
-}
-
-static void
-folder_context_menu_popped_down_cb (EStorageSetView *storage_set_view,
- void *data)
-{
- EShellView *shell_view;
-
- shell_view = E_SHELL_VIEW (data);
-
- setup_verb_sensitivity_for_folder (shell_view, e_shell_view_get_current_path (shell_view));
-
- if (shell_view->priv->folder_bar_popup != NULL)
- popdown_transient_folder_bar (shell_view);
-}
-
-/* Callback called when the button on the tree's title bar is clicked. */
-static void
-storage_set_view_button_clicked_cb (ETitleBar *title_bar,
- void *data)
-{
- EShellView *shell_view;
-
- shell_view = E_SHELL_VIEW (data);
-
- if (shell_view->priv->folder_bar_popup == NULL)
- e_shell_view_show_folder_bar (shell_view, FALSE);
-}
-
-/* Callback called when the title bar button is clicked. */
-static void
-title_bar_toggled_cb (EShellFolderTitleBar *title_bar,
- gboolean state,
- void *data)
-{
- EShellView *shell_view;
-
- shell_view = E_SHELL_VIEW (data);
-
- if (! state)
- return;
-
- if (shell_view->priv->folder_bar_popup == NULL)
- pop_up_folder_bar (shell_view);
-}
-
-/* Callback called when the offline toggle button is clicked. */
-static void
-offline_toggle_clicked_cb (GtkButton *button,
- void *data)
-{
- EShellView *shell_view;
- EShellViewPrivate *priv;
-
- shell_view = E_SHELL_VIEW (data);
- priv = shell_view->priv;
-
- switch (e_shell_get_line_status (priv->shell)) {
- case E_SHELL_LINE_STATUS_ONLINE:
- e_shell_go_offline (priv->shell, shell_view);
- break;
- case E_SHELL_LINE_STATUS_OFFLINE:
- e_shell_go_online (priv->shell, shell_view);
- break;
- default:
- g_assert_not_reached ();
- }
-}
-
-
-/* Navigation button callbacks. */
-
-static void
-back_clicked_callback (EShellFolderTitleBar *title_bar,
- void *data)
-{
- EShellView *shell_view;
- EShellViewPrivate *priv;
- const char *new_uri;
-
- shell_view = E_SHELL_VIEW (data);
- priv = shell_view->priv;
-
- if (! e_history_has_prev (priv->history))
- return;
-
- new_uri = (const char *) e_history_prev (priv->history);
-
- display_uri (shell_view, new_uri, FALSE, TRUE);
-}
-
-static void
-forward_clicked_callback (EShellFolderTitleBar *title_bar,
- void *data)
-{
- EShellView *shell_view;
- EShellViewPrivate *priv;
- const char *new_uri;
-
- shell_view = E_SHELL_VIEW (data);
- priv = shell_view->priv;
-
- if (! e_history_has_next (priv->history))
- return;
-
- new_uri = (const char *) e_history_next (priv->history);
-
- display_uri (shell_view, new_uri, FALSE, TRUE);
-}
-
-
-/* Widget setup. */
-
-static void
-setup_storage_set_subwindow (EShellView *shell_view)
-{
- EShellViewPrivate *priv;
- GtkWidget *storage_set_view;
- GtkWidget *vbox;
- GtkWidget *scrolled_window;
-
- priv = shell_view->priv;
-
- storage_set_view = e_storage_set_create_new_view (e_shell_get_storage_set (priv->shell),
- priv->ui_container);
- g_signal_connect (storage_set_view, "folder_selected",
- G_CALLBACK (folder_selected_cb), shell_view);
- g_signal_connect (storage_set_view, "folder_context_menu_popping_up",
- G_CALLBACK (folder_context_menu_popping_up_cb), shell_view);
- g_signal_connect (storage_set_view, "folder_context_menu_popped_down",
- G_CALLBACK (folder_context_menu_popped_down_cb), shell_view);
-
- scrolled_window = gtk_scrolled_window_new (NULL, NULL);
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
- GTK_POLICY_AUTOMATIC,
- GTK_POLICY_AUTOMATIC);
- gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window),
- GTK_SHADOW_IN);
-
- gtk_container_add (GTK_CONTAINER (scrolled_window), storage_set_view);
-
- vbox = gtk_vbox_new (FALSE, 0);
-
- priv->storage_set_title_bar = e_title_bar_new (_("Folders"));
-
- gtk_box_pack_start (GTK_BOX (vbox), priv->storage_set_title_bar, FALSE, FALSE, 0);
- gtk_box_pack_start (GTK_BOX (vbox), scrolled_window, TRUE, TRUE, 0);
-
- g_signal_connect (priv->storage_set_title_bar, "button_clicked",
- G_CALLBACK (storage_set_view_button_clicked_cb), shell_view);
-
- gtk_widget_show (storage_set_view);
- gtk_widget_show (priv->storage_set_title_bar);
- gtk_widget_show (scrolled_window);
-
- priv->storage_set_view_box = vbox;
- priv->storage_set_view = storage_set_view;
-
- /* Notice we don't show the vbox here yet. By default it's hidden. */
-}
-
-static void
-setup_offline_toggle (EShellView *shell_view)
-{
- EShellViewPrivate *priv;
- GtkWidget *toggle;
- GtkWidget *image;
-
- priv = shell_view->priv;
-
- toggle = gtk_button_new ();
- GTK_WIDGET_UNSET_FLAGS (toggle, GTK_CAN_FOCUS);
- gtk_button_set_relief (GTK_BUTTON (toggle), GTK_RELIEF_NONE);
-
- g_signal_connect (toggle, "clicked",
- G_CALLBACK (offline_toggle_clicked_cb), shell_view);
-
- image = gtk_image_new_from_pixmap (offline_pixmap, offline_mask);
-
- gtk_container_add (GTK_CONTAINER (toggle), image);
-
- gtk_widget_show (toggle);
- gtk_widget_show (image);
-
- priv->offline_toggle = toggle;
- priv->offline_toggle_image = image;
-
- update_offline_toggle_status (shell_view);
-
- g_assert (priv->status_bar != NULL);
-
- gtk_box_pack_start (GTK_BOX (priv->status_bar), priv->offline_toggle, FALSE, TRUE, 0);
-}
-
-static void
-setup_menu_hint_label (EShellView *shell_view)
-{
- EShellViewPrivate *priv;
-
- priv = shell_view->priv;
-
- priv->menu_hint_label = gtk_label_new ("");
- gtk_misc_set_alignment (GTK_MISC (priv->menu_hint_label), 0.0, 0.5);
-
- gtk_box_pack_start (GTK_BOX (priv->status_bar), priv->menu_hint_label, TRUE, TRUE, 0);
-}
-
-static void
-setup_task_bar (EShellView *shell_view)
-{
- EShellViewPrivate *priv;
-
- priv = shell_view->priv;
-
- priv->task_bar = e_task_bar_new ();
-
- g_assert (priv->status_bar != NULL);
-
- gtk_box_pack_start (GTK_BOX (priv->status_bar), priv->task_bar, TRUE, TRUE, 0);
- gtk_widget_show (priv->task_bar);
-}
-
-static void
-create_status_bar (EShellView *shell_view)
-{
- EShellViewPrivate *priv;
-
- priv = shell_view->priv;
-
- priv->status_bar = gtk_hbox_new (FALSE, 2);
- gtk_widget_show (priv->status_bar);
-
- setup_offline_toggle (shell_view);
- setup_menu_hint_label (shell_view);
- setup_task_bar (shell_view);
-}
-
-
-/* Menu hints for the status bar. */
-
-static void
-ui_engine_add_hint_callback (BonoboUIEngine *engine,
- const char *hint,
- void *data)
-{
- EShellView *shell_view;
- EShellViewPrivate *priv;
-
- shell_view = E_SHELL_VIEW (data);
- priv = shell_view->priv;
-
- gtk_label_set_text (GTK_LABEL (priv->menu_hint_label), hint);
- gtk_widget_show (priv->menu_hint_label);
- gtk_widget_hide (priv->task_bar);
-}
-
-static void
-ui_engine_remove_hint_callback (BonoboUIEngine *engine,
- void *data)
-{
- EShellView *shell_view;
- EShellViewPrivate *priv;
-
- shell_view = E_SHELL_VIEW (data);
- priv = shell_view->priv;
-
- gtk_widget_hide (priv->menu_hint_label);
- gtk_widget_show (priv->task_bar);
-}
-
-static void
-setup_statusbar_hints (EShellView *shell_view)
-{
- EShellViewPrivate *priv;
- BonoboUIEngine *ui_engine;
-
- priv = shell_view->priv;
-
- g_assert (priv->status_bar != NULL);
-
- ui_engine = bonobo_window_get_ui_engine (BONOBO_WINDOW (shell_view));
-
- g_signal_connect (ui_engine, "add_hint",
- G_CALLBACK (ui_engine_add_hint_callback), shell_view);
- g_signal_connect (ui_engine, "remove_hint",
- G_CALLBACK (ui_engine_remove_hint_callback), shell_view);
-}
-
-
-static void
-setup_widgets (EShellView *shell_view)
-{
- EShellViewPrivate *priv;
- GtkWidget *contents_vbox;
- GtkWidget *gray_bar;
-
- priv = shell_view->priv;
-
- /* The shortcut bar. */
-
- priv->shortcut_bar = e_shortcuts_new_view (e_shell_get_shortcuts (priv->shell));
- g_signal_connect (priv->shortcut_bar, "activate_shortcut",
- G_CALLBACK (activate_shortcut_cb), shell_view);
-
- g_signal_connect (priv->shortcut_bar, "hide_requested",
- G_CALLBACK (hide_requested_cb), shell_view);
-
- priv->shortcut_frame = gtk_frame_new (NULL);
- gtk_frame_set_shadow_type (GTK_FRAME (priv->shortcut_frame), GTK_SHADOW_IN);
-
- /* The storage set view. */
-
- setup_storage_set_subwindow (shell_view);
-
- /* The tabless notebook which we used to contain the views. */
-
- priv->notebook = gtk_notebook_new ();
- gtk_notebook_set_show_border (GTK_NOTEBOOK (priv->notebook), FALSE);
- gtk_notebook_set_show_tabs (GTK_NOTEBOOK (priv->notebook), FALSE);
-
- /* Page for "No URL displayed" message. */
-
- gtk_notebook_append_page (GTK_NOTEBOOK (priv->notebook), create_label_for_empty_page (), NULL);
-
- /* Put things into a paned and the paned into the GnomeApp. */
-
- priv->view_vbox = gtk_vbox_new (FALSE, 0);
-
- priv->folder_title_bar = e_shell_folder_title_bar_new ();
- g_signal_connect (priv->folder_title_bar, "title_toggled",
- G_CALLBACK (title_bar_toggled_cb), shell_view);
- g_signal_connect (priv->folder_title_bar, "back_clicked",
- G_CALLBACK (back_clicked_callback), shell_view);
- g_signal_connect (priv->folder_title_bar, "forward_clicked",
- G_CALLBACK (forward_clicked_callback), shell_view);
-
- priv->view_hpaned = gtk_hpaned_new ();
- gtk_paned_pack1 (GTK_PANED (priv->view_hpaned), priv->storage_set_view_box, TRUE, FALSE);
- gtk_paned_pack2 (GTK_PANED (priv->view_hpaned), priv->notebook, TRUE, FALSE);
-
- gray_bar = gtk_event_box_new ();
- gtk_container_add (GTK_CONTAINER (gray_bar), priv->folder_title_bar);
- gtk_box_pack_start (GTK_BOX (priv->view_vbox), gray_bar, FALSE, FALSE, 2);
-
- gtk_box_pack_start (GTK_BOX (priv->view_vbox), priv->view_hpaned, TRUE, TRUE, 0);
-
- priv->hpaned = gtk_hpaned_new ();
- gtk_container_add (GTK_CONTAINER (priv->shortcut_frame), priv->shortcut_bar);
- gtk_paned_pack1 (GTK_PANED (priv->hpaned), priv->shortcut_frame, TRUE, FALSE);
- gtk_paned_pack2 (GTK_PANED (priv->hpaned), priv->view_vbox, TRUE, FALSE);
- gtk_paned_set_position (GTK_PANED (priv->hpaned), DEFAULT_SHORTCUT_BAR_WIDTH);
-
- /* The status bar. */
-
- create_status_bar (shell_view);
- setup_statusbar_hints (shell_view);
-
- /* The contents. */
-
- contents_vbox = gtk_vbox_new (FALSE, 0);
- gtk_box_pack_start (GTK_BOX (contents_vbox), priv->hpaned, TRUE, TRUE, 0);
- gtk_box_pack_start (GTK_BOX (contents_vbox), priv->status_bar, FALSE, TRUE, 0);
- gtk_widget_show (contents_vbox);
-
- bonobo_window_set_contents (BONOBO_WINDOW (shell_view), contents_vbox);
-
- /* Show stuff. */
-
- gtk_widget_show (priv->shortcut_frame);
- gtk_widget_show (priv->shortcut_bar);
- gtk_widget_show (priv->storage_set_view);
- gtk_widget_show (priv->notebook);
- gtk_widget_show (priv->hpaned);
- gtk_widget_show (priv->view_hpaned);
- gtk_widget_show (priv->view_vbox);
- gtk_widget_show (priv->folder_title_bar);
- gtk_widget_show (priv->status_bar);
-
- gtk_widget_show (gray_bar);
-
- priv->shortcut_bar_shown = TRUE;
- priv->folder_bar_shown = FALSE;
-
- /* FIXME: Session management and stuff? */
- gtk_window_set_default_size (GTK_WINDOW (shell_view), DEFAULT_WIDTH, DEFAULT_HEIGHT);
-}
-
-
-/* GObject methods. */
-
-static void
-hash_foreach_destroy_view (void *name,
- void *value,
- void *data)
-{
- View *view;
-
- view = (View *) value;
-
- gtk_widget_destroy (view->control);
-
- view_destroy (view);
-}
-
-static void
-impl_dispose (GObject *object)
-{
- EShellView *shell_view;
- EShellViewPrivate *priv;
- GList *p;
-
- shell_view = E_SHELL_VIEW (object);
- priv = shell_view->priv;
-
- /* This is necessary to remove the signal handler for folder_new on the
- storage set used for the delayed selection mechanism. */
- cleanup_delayed_selection (shell_view);
-
- if (priv->tooltips != NULL) {
- g_object_unref (priv->tooltips);
- priv->tooltips = NULL;
- }
-
- if (priv->history != NULL) {
- g_object_unref (priv->history);
- priv->history = NULL;
- }
-
- if (priv->shell != NULL) {
- bonobo_object_unref (BONOBO_OBJECT (priv->shell));
- priv->shell = NULL;
- }
-
- if (priv->corba_interface != NULL) {
- bonobo_object_unref (BONOBO_OBJECT (priv->corba_interface));
- priv->corba_interface = NULL;
- }
-
- if (priv->folder_bar_popup != NULL) {
- gtk_widget_destroy (priv->folder_bar_popup);
- priv->folder_bar_popup = NULL;
- }
-
- for (p = priv->sockets; p != NULL; p = p->next) {
- GtkWidget *socket_widget;
- int destroy_connection_id;
-
- socket_widget = GTK_WIDGET (p->data);
- destroy_connection_id = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (socket_widget),
- "e_shell_view_destroy_connection_id"));
- g_signal_handler_disconnect((socket_widget), destroy_connection_id);
- }
- g_list_free (priv->sockets);
- priv->sockets = NULL;
-
- if (priv->uri_to_view != NULL) {
- g_hash_table_foreach (priv->uri_to_view, hash_foreach_destroy_view, NULL);
- g_hash_table_destroy (priv->uri_to_view);
- priv->uri_to_view = NULL;
- }
-
- if (priv->ui_component != NULL) {
- bonobo_object_unref (BONOBO_OBJECT (priv->ui_component));
- priv->ui_component = NULL;
- }
-
- if (priv->set_folder_timeout != 0) {
- gtk_timeout_remove (priv->set_folder_timeout);
- priv->set_folder_timeout = 0;
- }
-
- (* G_OBJECT_CLASS (parent_class)->dispose) (object);
-}
-
-static void
-impl_finalize (GObject *object)
-{
- EShellView *shell_view;
- EShellViewPrivate *priv;
-
- shell_view = E_SHELL_VIEW (object);
- priv = shell_view->priv;
-
- g_free (priv->uri);
- g_free (priv->set_folder_uri);
- g_free (priv->delayed_selection);
-
- g_free (priv);
-
- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
-}
-
-
-/* Initialization. */
-
-static void
-class_init (EShellViewClass *klass)
-{
- GObjectClass *object_class;
-
- object_class = G_OBJECT_CLASS (klass);
-
- object_class->dispose = impl_dispose;
- object_class->finalize = impl_finalize;
-
- parent_class = g_type_class_ref(BONOBO_TYPE_WINDOW);
-
- signals[SHORTCUT_BAR_VISIBILITY_CHANGED]
- = g_signal_new ("shortcut_bar_visibility_changed",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EShellViewClass, shortcut_bar_visibility_changed),
- NULL, NULL,
- e_shell_marshal_NONE__INT,
- G_TYPE_NONE, 1,
- G_TYPE_INT);
-
- signals[FOLDER_BAR_VISIBILITY_CHANGED]
- = g_signal_new ("folder_bar_visibility_changed",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EShellViewClass, folder_bar_visibility_changed),
- NULL, NULL,
- e_shell_marshal_NONE__INT,
- G_TYPE_NONE, 1,
- G_TYPE_INT);
-
- signals[VIEW_CHANGED]
- = g_signal_new ("view_changed",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EShellViewClass, view_changed),
- NULL, NULL,
- e_shell_marshal_NONE__STRING_STRING_STRING_STRING,
- G_TYPE_NONE, 4,
- G_TYPE_STRING,
- G_TYPE_STRING,
- G_TYPE_STRING,
- G_TYPE_STRING);
-
- load_images ();
-}
-
-static void
-init (EShellView *shell_view)
-{
- EShellViewPrivate *priv;
-
- priv = g_new (EShellViewPrivate, 1);
-
- priv->shell = NULL;
- priv->corba_interface = NULL;
- priv->ui_component = NULL;
- priv->history = e_history_new ((EHistoryItemFreeFunc) g_free);
- priv->uri = NULL;
- priv->delayed_selection = NULL;
-
- priv->tooltips = gtk_tooltips_new ();
- g_object_ref (priv->tooltips);
- gtk_object_sink (GTK_OBJECT (priv->tooltips));
-
- priv->appbar = NULL;
- priv->hpaned = NULL;
- priv->view_hpaned = NULL;
- priv->contents = NULL;
- priv->notebook = NULL;
-
- priv->storage_set_title_bar = NULL;
- priv->storage_set_view = NULL;
- priv->storage_set_view_box = NULL;
- priv->shortcut_bar = NULL;
-
- priv->status_bar = NULL;
- priv->offline_toggle = NULL;
- priv->offline_toggle_image = NULL;
- priv->menu_hint_label = NULL;
- priv->task_bar = NULL;
-
- priv->folder_bar_popup = NULL;
-
- priv->shortcut_bar_shown = FALSE;
- priv->folder_bar_shown = FALSE;
-
- priv->hpaned_position = 0;
- priv->view_hpaned_position = 0;
-
- priv->uri_to_view = g_hash_table_new (g_str_hash, g_str_equal);
-
- priv->sockets = NULL;
-
- priv->set_folder_timeout = 0;
- priv->set_folder_uri = NULL;
-
- shell_view->priv = priv;
-}
-
-
-/* EvolutionShellView interface callbacks. */
-
-static void
-corba_interface_set_message_cb (EvolutionShellView *shell_view,
- const char *message,
- gboolean busy,
- void *data)
-{
- /* Don't do anything here anymore. The interface is going to be
- deprecated soon. */
-}
-
-static void
-corba_interface_unset_message_cb (EvolutionShellView *shell_view,
- void *data)
-{
- /* Don't do anything here anymore. The interface is going to be
- deprecated soon. */
-}
-
-static void
-corba_interface_change_current_view_cb (EvolutionShellView *shell_view,
- const char *uri,
- void *data)
-{
- EShellView *view;
-
- view = E_SHELL_VIEW (data);
-
- g_return_if_fail (view != NULL);
-
- e_shell_view_display_uri (view, uri, TRUE);
-}
-
-static void
-corba_interface_set_title (EvolutionShellView *shell_view,
- const char *title,
- void *data)
-{
- EShellView *view;
-
- view = E_SHELL_VIEW (data);
-
- g_return_if_fail (view != NULL);
-
- gtk_window_set_title (GTK_WINDOW (view), title);
-}
-
-static void
-corba_interface_set_folder_bar_label (EvolutionShellView *evolution_shell_view,
- const char *text,
- void *data)
-{
- EShellView *shell_view;
- EShellViewPrivate *priv;
-
- g_return_if_fail (data != NULL);
- g_return_if_fail (E_IS_SHELL_VIEW (data));
-
- shell_view = E_SHELL_VIEW (data);
- priv = shell_view->priv;
-
- e_shell_folder_title_bar_set_folder_bar_label (E_SHELL_FOLDER_TITLE_BAR (priv->folder_title_bar),
- text);
-}
-
-static void
-corba_interface_show_settings (EvolutionShellView *evolution_shell_view,
- void *data)
-{
- EShellView *shell_view;
- EShellViewPrivate *priv;
-
- g_return_if_fail (data != NULL);
- g_return_if_fail (E_IS_SHELL_VIEW (data));
-
- shell_view = E_SHELL_VIEW (data);
- priv = shell_view->priv;
-
- e_shell_view_show_settings (shell_view);
-}
-
-static void
-unmerge_on_error (BonoboObject *object,
- CORBA_Object cobject,
- CORBA_Environment *ev)
-{
-#if 0
- BonoboWindow *window;
- BonoboUIEngine *ui_engine;
-
- /* FIXME changes.txt says we should be able to do this but bonobo_ui_engine_get_view()
- is marked as internal in bonoob-ui-engine.h! */
- ui_engine = bonobo_ui_container_get_engine (BONOBO_UI_CONTAINER (object));
- window = BONOBO_WINDOW (bonobo_ui_engine_get_view (ui_engine));
-
- if (window != NULL)
- bonobo_ui_engine_deregister_component_by_ref (ui_engine, cobject);
-#endif
-}
-
-static void
-updated_folder_cb (EStorageSet *storage_set,
- const char *path,
- void *data)
-{
- EShellView *shell_view;
- EShellViewPrivate *priv;
- const char *view_path;
-
- shell_view = E_SHELL_VIEW (data);
- priv = shell_view->priv;
-
- view_path = get_storage_set_path_from_uri (priv->uri);
- if (view_path && strcmp (path, view_path) != 0)
- return;
-
- /* Update the folder title bar and the window title bar */
- update_for_current_uri (shell_view);
-}
-
-
-/* Shell callbacks. */
-
-static void
-shell_line_status_changed_cb (EShell *shell,
- EShellLineStatus new_status,
- void *data)
-{
- EShellView *shell_view;
-
- shell_view = E_SHELL_VIEW (data);
- update_offline_toggle_status (shell_view);
-
- if (new_status == E_SHELL_LINE_STATUS_OFFLINE)
- bonobo_ui_component_set_prop (shell_view->priv->ui_component,
- "/commands/SendReceive",
- "sensitive", "0", NULL);
- else
- bonobo_ui_component_set_prop (shell_view->priv->ui_component,
- "/commands/SendReceive",
- "sensitive", "1", NULL);
-}
-
-static int
-delete_event_cb (GtkWidget *widget,
- GdkEventAny *ev,
- void *data)
-{
- return FALSE;
-}
-
-
-EShellView *
-e_shell_view_construct (EShellView *shell_view,
- EShell *shell,
- const char *uri)
-{
- EShellViewPrivate *priv;
- EStorageSet *storage_set;
- EShellView *view;
- char *uri_to_load;
-
- g_return_val_if_fail (shell != NULL, NULL);
- g_return_val_if_fail (shell_view != NULL, NULL);
- g_return_val_if_fail (E_IS_SHELL (shell), NULL);
- g_return_val_if_fail (E_IS_SHELL_VIEW (shell_view), NULL);
-
- priv = shell_view->priv;
-
- view = E_SHELL_VIEW (bonobo_window_construct (BONOBO_WINDOW (shell_view),
- bonobo_ui_container_new (),
- "evolution", "Ximian Evolution"));
-
- if (!view) {
- g_object_unref (shell_view);
- return NULL;
- }
-
- priv->shell = shell;
- bonobo_object_ref (BONOBO_OBJECT (priv->shell));
-
- g_signal_connect (view, "delete_event",
- G_CALLBACK (delete_event_cb), NULL);
-
- priv->ui_container = bonobo_window_get_ui_container (BONOBO_WINDOW (view));
- g_signal_connect (priv->ui_container, "system_exception",
- G_CALLBACK (unmerge_on_error), NULL);
-
- priv->ui_component = bonobo_ui_component_new ("evolution");
- bonobo_ui_component_set_container (priv->ui_component,
- bonobo_object_corba_objref (BONOBO_OBJECT (priv->ui_container)),
- NULL);
-
- bonobo_ui_component_freeze (priv->ui_component, NULL);
-
- bonobo_ui_util_set_ui (priv->ui_component, PREFIX,
- EVOLUTION_UIDIR "/evolution.xml",
- "evolution-1.4", NULL);
-
- setup_widgets (shell_view);
-
- bonobo_ui_engine_config_set_path (bonobo_window_get_ui_engine (BONOBO_WINDOW (shell_view)),
- "/evolution/UIConf/kvps");
- e_shell_view_menu_setup (shell_view);
-
- e_shell_view_show_folder_bar (shell_view, FALSE);
-
- bonobo_ui_component_thaw (priv->ui_component, NULL);
-
- g_signal_connect_object (shell, "line_status_changed",
- G_CALLBACK (shell_line_status_changed_cb), shell_view, 0);
-
- storage_set = e_shell_get_storage_set (shell);
- e_signal_connect_while_alive (storage_set, "updated_folder",
- G_CALLBACK (updated_folder_cb), shell_view, shell_view);
- g_signal_connect_object (storage_set, "new_storage",
- G_CALLBACK (storage_set_new_storage_callback), shell_view, 0);
- g_signal_connect_object (storage_set, "removed_storage",
- G_CALLBACK (storage_set_removed_storage_callback), shell_view, 0);
- g_signal_connect_object (storage_set, "removed_folder",
- G_CALLBACK (storage_set_removed_folder_callback), shell_view, 0);
-
- e_shell_user_creatable_items_handler_attach_menus (e_shell_get_user_creatable_items_handler (priv->shell),
- shell_view);
-
- setup_defaults (view);
- update_other_users_folder_items_sensitivity (view);
-
- if (uri != NULL) {
- uri_to_load = g_strdup (uri);
- } else {
- GConfClient *client = gconf_client_get_default ();
- char *path = gconf_client_get_string (client, "/apps/evolution/shell/view_defaults/folder_path", NULL);
-
- uri_to_load = g_strconcat (E_SHELL_URI_PREFIX, path, NULL);
- g_free (path);
- g_object_unref (client);
- }
-
- if (! e_shell_view_display_uri (shell_view, uri_to_load, FALSE)) {
- e_shell_view_display_uri (shell_view, E_SHELL_VIEW_DEFAULT_URI, FALSE);
- e_shell_view_display_uri (shell_view, uri_to_load, TRUE);
- }
-
- g_free (uri_to_load);
-
- return view;
-}
-
-/* WARNING: Don't use `e_shell_view_new()' to create new views for the shell
- unless you know what you are doing; this is just the standard GTK+
- constructor thing and it won't allow the shell to do the required
- bookkeeping for the created views. Instead, the right way to create a new
- view is calling `e_shell_create_view()'. */
-EShellView *
-e_shell_view_new (EShell *shell,
- const char *uri)
-{
- GtkWidget *new;
-
- g_return_val_if_fail (shell != NULL, NULL);
- g_return_val_if_fail (E_IS_SHELL (shell), NULL);
-
- new = g_object_new (e_shell_view_get_type (), NULL);
-
- return e_shell_view_construct (E_SHELL_VIEW (new), shell, uri);
-}
-
-const GNOME_Evolution_ShellView
-e_shell_view_get_corba_interface (EShellView *shell_view)
-{
- EShellViewPrivate *priv;
-
- g_return_val_if_fail (shell_view != NULL, CORBA_OBJECT_NIL);
- g_return_val_if_fail (E_IS_SHELL_VIEW (shell_view), CORBA_OBJECT_NIL);
-
- priv = shell_view->priv;
-
- return bonobo_object_corba_objref (BONOBO_OBJECT (priv->corba_interface));
-}
-
-
-static const char *
-get_storage_set_path_from_uri (const char *uri)
-{
- const char *colon;
-
- if (uri == NULL)
- return NULL;
-
- if (g_path_is_absolute (uri))
- return NULL;
-
- colon = strchr (uri, ':');
- if (colon == NULL || colon == uri || colon[1] == '\0')
- return NULL;
-
- if (! g_path_is_absolute (colon + 1))
- return NULL;
-
- if (g_ascii_strncasecmp (uri, E_SHELL_URI_PREFIX, colon - uri) != 0)
- return NULL;
-
- return colon + 1;
-}
-
-static void
-update_window_icon (EShellView *shell_view,
- const char *type)
-{
- EShellViewPrivate *priv;
- const char *icon_name;
- char *icon_path;
-
- priv = shell_view->priv;
-
- if (type == NULL) {
- icon_path = NULL;
- } else {
- EFolderTypeRegistry *folder_type_registry;
-
- folder_type_registry = e_shell_get_folder_type_registry (priv->shell);
- icon_name = e_folder_type_registry_get_icon_name_for_type (folder_type_registry, type);
- if (icon_name == NULL)
- icon_path = NULL;
- else
- icon_path = e_shell_get_icon_path (icon_name, FALSE);
- }
-
- if (icon_path == NULL) {
- gnome_window_icon_set_from_default (GTK_WINDOW (shell_view));
- } else {
- gnome_window_icon_set_from_file (GTK_WINDOW (shell_view), icon_path);
- g_free (icon_path);
- }
-}
-
-static void
-update_folder_title_bar (EShellView *shell_view,
- const char *title,
- EFolder *folder)
-{
- EShellViewPrivate *priv;
- GdkPixbuf *folder_icon;
-
- priv = shell_view->priv;
-
- if (folder == NULL) {
- folder_icon = NULL;
- } else {
- const char *icon_name;
-
- icon_name = e_folder_get_custom_icon_name (folder);
- if (icon_name != NULL) {
- folder_icon = e_icon_factory_get_icon (icon_name, TRUE);
- } else {
- EFolderTypeRegistry *folder_type_registry;
-
- folder_type_registry = e_shell_get_folder_type_registry (priv->shell);
- folder_icon = e_folder_type_registry_get_icon_for_type (folder_type_registry,
- e_folder_get_type_string (folder),
- TRUE);
- g_object_ref (folder_icon);
- }
- }
-
- e_shell_folder_title_bar_set_icon (E_SHELL_FOLDER_TITLE_BAR (priv->folder_title_bar),
- folder_icon);
-
- if (folder_icon != NULL)
- g_object_unref (folder_icon);
-
- if (title != NULL)
- e_shell_folder_title_bar_set_title (E_SHELL_FOLDER_TITLE_BAR (priv->folder_title_bar), title);
-}
-
-static void
-update_for_current_uri (EShellView *shell_view)
-{
- EShellViewPrivate *priv;
- EFolder *folder;
- const char *path;
- const char *curr_path;
- const char *type;
- const char *folder_name;
- char *title;
- char *window_title;
- int unread_count;
-
- priv = shell_view->priv;
-
- /* If we update when there is a timeout set, the selection will jump
- around against the user's wishes. So we just return. */
- if (priv->set_folder_timeout != 0)
- return;
-
- path = get_storage_set_path_from_uri (priv->uri);
-
- folder = NULL;
- folder_name = NULL;
- type = NULL;
- unread_count = 0;
-
- if (path != NULL) {
- folder = e_storage_set_get_folder (e_shell_get_storage_set (priv->shell), path);
-
- if (folder != NULL) {
- folder_name = e_folder_get_name (folder);
- type = e_folder_get_type_string (folder);
- unread_count = e_folder_get_unread_count (folder);
- }
- }
-
- if (unread_count > 0)
- title = g_strdup_printf (_("%s (%d)"), folder_name, unread_count);
- else if (folder_name == NULL)
- title = g_strdup (_("(None)"));
- else
- title = g_strdup (folder_name);
-
- if (SUB_VERSION[0] == '\0')
- window_title = g_strdup_printf ("%s - Ximian Evolution %s", title, VERSION);
- else
- window_title = g_strdup_printf ("%s - Ximian Evolution %s [%s]", title, VERSION, SUB_VERSION);
-
- gtk_window_set_title (GTK_WINDOW (shell_view), window_title);
-
- update_folder_title_bar (shell_view, title, folder);
- update_window_icon (shell_view, type);
-
- g_free (window_title);
- g_free (title);
-
- g_signal_handlers_block_by_func (priv->storage_set_view,
- G_CALLBACK (folder_selected_cb), shell_view);
-
- curr_path = e_storage_set_view_get_current_folder (E_STORAGE_SET_VIEW (priv->storage_set_view));
- if (path != NULL && (curr_path == NULL || strcmp(path, curr_path)))
- e_storage_set_view_set_current_folder (E_STORAGE_SET_VIEW (priv->storage_set_view), path);
-
- g_signal_handlers_unblock_by_func (priv->storage_set_view,
- G_CALLBACK (folder_selected_cb), shell_view);
-}
-
-static void
-update_offline_toggle_status (EShellView *shell_view)
-{
- EShellViewPrivate *priv;
- GdkPixmap *icon_pixmap;
- GdkBitmap *icon_mask;
- const char *tooltip;
- gboolean sensitive;
-
- priv = shell_view->priv;
-
- switch (e_shell_get_line_status (priv->shell)) {
- case E_SHELL_LINE_STATUS_ONLINE:
- icon_pixmap = online_pixmap;
- icon_mask = online_mask;
- sensitive = TRUE;
- tooltip = _("Ximian Evolution is currently online. "
- "Click on this button to work offline.");
- break;
- case E_SHELL_LINE_STATUS_GOING_OFFLINE:
- icon_pixmap = online_pixmap;
- icon_mask = online_mask;
- sensitive = FALSE;
- tooltip = _("Ximian Evolution is in the process of going offline.");
- break;
- case E_SHELL_LINE_STATUS_OFFLINE:
- icon_pixmap = offline_pixmap;
- icon_mask = offline_mask;
- sensitive = TRUE;
- tooltip = _("Ximian Evolution is currently offline. "
- "Click on this button to work online.");
- break;
- default:
- g_assert_not_reached ();
- return;
- }
-
- gtk_image_set_from_pixmap (GTK_IMAGE (priv->offline_toggle_image), icon_pixmap, icon_mask);
- gtk_widget_set_sensitive (priv->offline_toggle, sensitive);
- gtk_tooltips_set_tip (priv->tooltips, priv->offline_toggle, tooltip, NULL);
-}
-
-/* This displays the specified page, doing the appropriate Bonobo activation/deactivation
- magic to make sure things work nicely. FIXME: Crappy way to solve the issue. */
-static void
-set_current_notebook_page (EShellView *shell_view,
- int page_num)
-{
- EShellViewPrivate *priv;
- GtkNotebook *notebook;
- GtkWidget *current;
- BonoboControlFrame *old_control_frame = NULL;
- BonoboControlFrame *new_control_frame;
- int current_page;
-
- priv = shell_view->priv;
- notebook = GTK_NOTEBOOK (priv->notebook);
-
- current_page = gtk_notebook_get_current_page (notebook);
- if (current_page == page_num)
- return;
-
- if (current_page != -1 && current_page != 0) {
- current = gtk_notebook_get_nth_page (notebook, current_page);
- old_control_frame = bonobo_widget_get_control_frame (BONOBO_WIDGET (current));
- bonobo_control_frame_set_autoactivate (old_control_frame, FALSE);
- }
-
- e_shell_folder_title_bar_set_folder_bar_label (E_SHELL_FOLDER_TITLE_BAR (priv->folder_title_bar), "");
- gtk_notebook_set_current_page (notebook, page_num);
-
- if (page_num == -1 || page_num == 0)
- return;
-
- current = gtk_notebook_get_nth_page (notebook, page_num);
- new_control_frame = bonobo_widget_get_control_frame (BONOBO_WIDGET (current));
- bonobo_control_frame_set_autoactivate (new_control_frame, FALSE);
-
- bonobo_control_frame_control_activate (new_control_frame);
- if (old_control_frame)
- bonobo_control_frame_control_deactivate (old_control_frame);
-}
-
-static void
-setup_corba_interface (EShellView *shell_view,
- GtkWidget *control)
-{
- EShellViewPrivate *priv;
- BonoboControlFrame *control_frame;
- EvolutionShellView *corba_interface;
-
- g_return_if_fail (control != NULL);
-
- priv = shell_view->priv;
-
- control_frame = bonobo_widget_get_control_frame (BONOBO_WIDGET (control));
- corba_interface = evolution_shell_view_new ();
-
- g_signal_connect_object (corba_interface, "set_message",
- G_CALLBACK (corba_interface_set_message_cb), shell_view, 0);
- g_signal_connect_object (corba_interface, "unset_message",
- G_CALLBACK (corba_interface_unset_message_cb), shell_view, 0);
- g_signal_connect_object (corba_interface, "change_current_view",
- G_CALLBACK (corba_interface_change_current_view_cb), shell_view, 0);
- g_signal_connect_object (corba_interface, "set_title",
- G_CALLBACK (corba_interface_set_title), shell_view, 0);
- g_signal_connect_object (corba_interface, "set_folder_bar_label",
- G_CALLBACK (corba_interface_set_folder_bar_label), shell_view, 0);
- g_signal_connect_object (corba_interface, "show_settings",
- G_CALLBACK (corba_interface_show_settings), shell_view, 0);
-
- bonobo_object_add_interface (BONOBO_OBJECT (control_frame),
- BONOBO_OBJECT (corba_interface));
-
- bonobo_object_ref (BONOBO_OBJECT (corba_interface));
- priv->corba_interface = corba_interface;
-}
-
-
-/* Socket destruction handling. */
-
-static void
-socket_destroy_cb (GtkWidget *socket_widget, gpointer data)
-{
- EShellView *shell_view;
- EShellViewPrivate *priv;
- EFolder *folder;
- View *view;
- const char *uri;
- gboolean viewing_closed_uri;
- const char *current_uri;
- const char *path;
- const char *folder_type;
-
- shell_view = E_SHELL_VIEW (data);
- priv = shell_view->priv;
-
- uri = (const char *) g_object_get_data (G_OBJECT (socket_widget), "e_shell_view_folder_uri");
-
- view = g_hash_table_lookup (priv->uri_to_view, uri);
- if (view == NULL) {
- g_warning ("What?! Destroyed socket for non-existing URI? -- %s", uri);
- return;
- }
-
- priv->sockets = g_list_remove (priv->sockets, socket_widget);
-
- gtk_widget_destroy (view->control);
-
- g_hash_table_remove (priv->uri_to_view, view->uri);
- view_destroy (view);
-
- path = get_storage_set_path_from_uri (uri);
- folder = e_storage_set_get_folder (e_shell_get_storage_set (priv->shell), path);
-
- if (folder != NULL)
- folder_type = e_folder_get_type_string (folder);
- else
- folder_type = NULL;
-
- /* See if we were actively viewing the uri for the socket that's being closed */
- current_uri = e_shell_view_get_current_uri (shell_view);
- if (current_uri == NULL) {
- viewing_closed_uri = FALSE;
- } else {
- if (strcmp (uri, current_uri) == 0)
- viewing_closed_uri = TRUE;
- else
- viewing_closed_uri = FALSE;
- }
-
- if (viewing_closed_uri)
- e_shell_view_display_uri (shell_view, NULL, TRUE);
-
- e_shell_component_maybe_crashed (priv->shell, uri, folder_type, shell_view);
-
- /* We were actively viewing the component that just crashed, so flip to the default URI */
- if (viewing_closed_uri)
- e_shell_view_display_uri (shell_view, E_SHELL_VIEW_DEFAULT_URI, TRUE);
-}
-
-
-static const char *
-get_type_for_folder (EShellView *shell_view,
- const char *path,
- const char **physical_uri_return)
-{
- EShellViewPrivate *priv;
- EStorageSet *storage_set;
- EFolder *folder;
-
- priv = shell_view->priv;
-
- storage_set = e_shell_get_storage_set (priv->shell);
- folder = e_storage_set_get_folder (storage_set, path);
- if (!folder)
- return NULL;
-
- if (physical_uri_return != NULL)
- *physical_uri_return = e_folder_get_physical_uri (folder);
-
- return e_folder_get_type_string (folder);
-}
-
-/* Create a new view for @uri with @control. It assumes a view for @uri does not exist yet. */
-static View *
-get_view_for_uri (EShellView *shell_view,
- const char *uri,
- const char *view_info)
-{
- EShellViewPrivate *priv;
- CORBA_Environment ev;
- EvolutionShellComponentClient *handler_client;
- EFolderTypeRegistry *folder_type_registry;
- GNOME_Evolution_ShellComponent handler;
- Bonobo_UIContainer container;
- GtkWidget *control;
- GtkWidget *socket;
- Bonobo_Control corba_control;
- const char *path;
- const char *physical_uri;
- const char *folder_type;
- int destroy_connection_id;
-
- priv = shell_view->priv;
-
- path = strchr (uri, ':');
- if (path == NULL)
- return NULL;
-
- path++;
- if (*path == '\0')
- return NULL;
-
- folder_type = get_type_for_folder (shell_view, path, &physical_uri);
- if (folder_type == NULL || physical_uri == NULL)
- return NULL;
-
- folder_type_registry = e_shell_get_folder_type_registry (e_shell_view_get_shell (shell_view));
-
- handler_client = e_folder_type_registry_get_handler_for_type (folder_type_registry, folder_type);
- if (handler_client == CORBA_OBJECT_NIL)
- return NULL;
-
- handler = evolution_shell_component_client_corba_objref (handler_client);
-
- CORBA_exception_init (&ev);
-
- corba_control = GNOME_Evolution_ShellComponent_createView (handler, physical_uri, folder_type, view_info, &ev);
-
- if (ev._major != CORBA_NO_EXCEPTION) {
- CORBA_exception_free (&ev);
- return NULL;
- }
-
- CORBA_exception_free (&ev);
-
- if (corba_control == CORBA_OBJECT_NIL)
- return NULL;
-
- container = bonobo_ui_component_get_container (priv->ui_component);
- control = bonobo_widget_new_control_from_objref (corba_control, container);
-
- socket = find_socket (GTK_CONTAINER (control));
- destroy_connection_id = g_signal_connect (socket, "destroy",
- G_CALLBACK (socket_destroy_cb),
- shell_view);
- g_object_set_data (G_OBJECT (socket), "e_shell_view_destroy_connection_id", GINT_TO_POINTER (destroy_connection_id));
- g_object_set_data_full (G_OBJECT (socket), "e_shell_view_folder_uri", g_strdup (uri), g_free);
-
- priv->sockets = g_list_prepend (priv->sockets, socket);
-
- setup_corba_interface (shell_view, control);
-
- return view_new (uri, control);
-}
-
-static gboolean
-show_existing_view (EShellView *shell_view,
- const char *uri,
- View *view)
-{
- EShellViewPrivate *priv;
- int notebook_page;
-
- priv = shell_view->priv;
-
- notebook_page = gtk_notebook_page_num (GTK_NOTEBOOK (priv->notebook), view->control);
- g_assert (notebook_page != -1);
-
- g_free (priv->uri);
- priv->uri = g_strdup (uri);
-
- set_current_notebook_page (shell_view, notebook_page);
-
- return TRUE;
-}
-
-static gboolean
-create_new_view_for_uri (EShellView *shell_view,
- const char *uri,
- const char *view_info)
-{
- View *view;
- EShellViewPrivate *priv;
- int page_num;
-
- priv = shell_view->priv;
-
- view = get_view_for_uri (shell_view, uri, view_info);
- if (view == NULL)
- return FALSE;
-
- g_free (priv->uri);
- priv->uri = g_strdup (uri);
-
- gtk_widget_show (view->control);
-
- gtk_notebook_append_page (GTK_NOTEBOOK (priv->notebook), view->control, NULL);
-
- page_num = gtk_notebook_page_num (GTK_NOTEBOOK (priv->notebook), view->control);
- g_assert (page_num != -1);
- set_current_notebook_page (shell_view, page_num);
-
- g_hash_table_insert (priv->uri_to_view, view->uri, view);
-
- return TRUE;
-}
-
-static char *
-evolution_uri_for_default_uri (EShell *shell,
- const char *default_uri)
-{
- char *uri;
- char *path;
- char *extra;
-
- if (! e_shell_parse_uri (shell, default_uri, &path, &extra))
- return NULL;
-
- uri = g_strconcat (E_SHELL_URI_PREFIX, path, "#", extra, NULL);
-
- g_free (path);
- g_free (extra);
-
- return uri;
-}
-
-static gboolean
-display_uri (EShellView *shell_view,
- const char *uri,
- gboolean add_to_history,
- gboolean queue)
-{
- EShellViewPrivate *priv;
- View *view;
- gboolean retval;
- const char *view_info;
- char *real_uri;
- char *allocated_uri = NULL;
-
- priv = shell_view->priv;
-
- if (uri == NULL && priv->uri == NULL)
- return TRUE;
-
- if (priv->uri != NULL && uri != NULL && strcmp (priv->uri, uri) == 0)
- return TRUE;
-
- bonobo_ui_engine_freeze (bonobo_window_get_ui_engine (BONOBO_WINDOW (shell_view)));
-
- if (uri == NULL) {
- gtk_notebook_remove_page (GTK_NOTEBOOK (priv->notebook), 0);
- gtk_notebook_prepend_page (GTK_NOTEBOOK (priv->notebook), create_label_for_empty_page (), NULL);
-
- set_current_notebook_page (shell_view, 0);
-
- g_free (priv->uri);
- priv->uri = real_uri = NULL;
-
- retval = TRUE;
- goto end;
- }
-
- if (strncmp (uri, E_SHELL_DEFAULTURI_PREFIX, E_SHELL_DEFAULTURI_PREFIX_LEN) == 0) {
- allocated_uri = evolution_uri_for_default_uri (e_shell_view_get_shell (shell_view), uri);
- uri = allocated_uri;
- }
-
- view_info = strchr (uri, '#');
- if (view_info) {
- real_uri = g_strndup (uri, view_info - uri);
- view_info++;
- } else {
- view_info = "";
- real_uri = g_strdup (uri);
- }
-
- if (strncmp (uri, E_SHELL_URI_PREFIX, E_SHELL_URI_PREFIX_LEN) != 0) {
- retval = FALSE;
- goto end;
- }
-
- view = g_hash_table_lookup (priv->uri_to_view, real_uri);
- if (view != NULL) {
- show_existing_view (shell_view, real_uri, view);
- } else if (! create_new_view_for_uri (shell_view, real_uri, view_info)) {
- if (! queue) {
- retval = FALSE;
- goto end;
- }
-
- cleanup_delayed_selection (shell_view);
- priv->delayed_selection = g_strdup (real_uri);
- g_signal_connect_after (e_shell_get_storage_set (priv->shell),
- "new_folder", G_CALLBACK (new_folder_cb), shell_view);
- retval = TRUE;
- goto end;
- }
-
- retval = TRUE;
-
- end:
- g_free (real_uri);
-
- if (add_to_history && retval == TRUE && priv->uri != NULL)
- e_history_add (priv->history, g_strdup (priv->uri));
-
- update_navigation_buttons (shell_view);
-
- g_free (priv->set_folder_uri);
- priv->set_folder_uri = NULL;
-
- if (priv->set_folder_timeout != 0) {
- gtk_timeout_remove (priv->set_folder_timeout);
- priv->set_folder_timeout = 0;
- }
-
- update_for_current_uri (shell_view);
-
- bonobo_ui_engine_thaw (bonobo_window_get_ui_engine (BONOBO_WINDOW (shell_view)));
-
- g_signal_emit (shell_view, signals[VIEW_CHANGED], 0,
- e_shell_view_get_current_path (shell_view),
- e_shell_view_get_current_uri (shell_view),
- e_shell_view_get_current_folder_type (shell_view),
- e_shell_view_get_current_component_id (shell_view));
-
- g_free (allocated_uri);
-
- return retval;
-}
-
-gboolean
-e_shell_view_display_uri (EShellView *shell_view,
- const char *uri,
- gboolean queue)
-{
- g_return_val_if_fail (shell_view != NULL, FALSE);
- g_return_val_if_fail (E_IS_SHELL_VIEW (shell_view), FALSE);
-
- return display_uri (shell_view, uri, TRUE, queue);
-}
-
-
-void
-e_shell_view_show_shortcut_bar (EShellView *shell_view,
- gboolean show)
-{
- EShellViewPrivate *priv;
-
- g_return_if_fail (shell_view != NULL);
- g_return_if_fail (E_IS_SHELL_VIEW (shell_view));
-
- priv = shell_view->priv;
-
- if (!! show == priv->shortcut_bar_shown)
- return;
-
- if (show) {
- if (! GTK_WIDGET_VISIBLE (priv->shortcut_frame)) {
- gtk_widget_show (priv->shortcut_frame);
- gtk_paned_set_position (GTK_PANED (priv->hpaned), priv->hpaned_position);
- }
- } else {
- if (GTK_WIDGET_VISIBLE (priv->shortcut_frame)) {
- /* FIXME this is a private field! */
- priv->hpaned_position = GTK_PANED (priv->hpaned)->child1_size;
-
- gtk_widget_hide (priv->shortcut_frame);
- }
- gtk_paned_set_position (GTK_PANED (priv->hpaned), 0);
- }
-
- priv->shortcut_bar_shown = !! show;
-
- g_signal_emit (shell_view, signals[SHORTCUT_BAR_VISIBILITY_CHANGED], 0,
- priv->shortcut_bar_shown);
-}
-
-void
-e_shell_view_show_folder_bar (EShellView *shell_view,
- gboolean show)
-{
- EShellViewPrivate *priv;
-
- g_return_if_fail (shell_view != NULL);
- g_return_if_fail (E_IS_SHELL_VIEW (shell_view));
-
- priv = shell_view->priv;
-
- if (!! show == priv->folder_bar_shown)
- return;
-
- if (show) {
- gtk_widget_show (priv->storage_set_view_box);
- gtk_paned_set_position (GTK_PANED (priv->view_hpaned), priv->view_hpaned_position);
-
- e_title_bar_set_button_mode (E_TITLE_BAR (priv->storage_set_title_bar),
- E_TITLE_BAR_BUTTON_MODE_CLOSE);
-
- e_shell_folder_title_bar_set_title_clickable (E_SHELL_FOLDER_TITLE_BAR (priv->folder_title_bar),
- FALSE);
- } else {
- if (GTK_WIDGET_VISIBLE (priv->storage_set_view_box)) {
- /* FIXME this is a private field! */
- priv->view_hpaned_position = GTK_PANED (priv->view_hpaned)->child1_size;
- gtk_widget_hide (priv->storage_set_view_box);
- }
-
- gtk_paned_set_position (GTK_PANED (priv->view_hpaned), 0);
-
- e_title_bar_set_button_mode (E_TITLE_BAR (priv->storage_set_title_bar),
- E_TITLE_BAR_BUTTON_MODE_PIN);
-
- e_shell_folder_title_bar_set_title_clickable (E_SHELL_FOLDER_TITLE_BAR (priv->folder_title_bar),
- TRUE);
- }
-
- priv->folder_bar_shown = !! show;
-
- g_signal_emit (shell_view, signals[FOLDER_BAR_VISIBILITY_CHANGED], 0,
- priv->folder_bar_shown);
-}
-
-void
-e_shell_view_show_settings (EShellView *shell_view)
-{
- EShellViewPrivate *priv;
- const char *type;
-
- g_return_if_fail (shell_view != NULL);
- g_return_if_fail (E_IS_SHELL_VIEW (shell_view));
-
- priv = shell_view->priv;
-
- type = e_shell_view_get_current_folder_type (shell_view);
- e_shell_show_settings (priv->shell, type, shell_view);
-}
-
-gboolean
-e_shell_view_shortcut_bar_shown (EShellView *shell_view)
-{
- g_return_val_if_fail (shell_view != NULL, FALSE);
- g_return_val_if_fail (E_IS_SHELL_VIEW (shell_view), FALSE);
-
- return shell_view->priv->shortcut_bar_shown;
-}
-
-gboolean
-e_shell_view_folder_bar_shown (EShellView *shell_view)
-{
- g_return_val_if_fail (shell_view != NULL, FALSE);
- g_return_val_if_fail (E_IS_SHELL_VIEW (shell_view), FALSE);
-
- return shell_view->priv->folder_bar_shown;
-}
-
-
-ETaskBar *
-e_shell_view_get_task_bar (EShellView *shell_view)
-{
- g_return_val_if_fail (shell_view != NULL, NULL);
- g_return_val_if_fail (E_IS_SHELL_VIEW (shell_view), NULL);
-
- return E_TASK_BAR (shell_view->priv->task_bar);
-}
-
-EShell *
-e_shell_view_get_shell (EShellView *shell_view)
-{
- g_return_val_if_fail (shell_view != NULL, NULL);
- g_return_val_if_fail (E_IS_SHELL_VIEW (shell_view), NULL);
-
- return shell_view->priv->shell;
-}
-
-BonoboUIComponent *
-e_shell_view_get_bonobo_ui_component (EShellView *shell_view)
-{
- g_return_val_if_fail (shell_view != NULL, NULL);
- g_return_val_if_fail (E_IS_SHELL_VIEW (shell_view), NULL);
-
- return shell_view->priv->ui_component;
-}
-
-BonoboUIContainer *
-e_shell_view_get_bonobo_ui_container (EShellView *shell_view)
-{
- g_return_val_if_fail (shell_view != NULL, NULL);
- g_return_val_if_fail (E_IS_SHELL_VIEW (shell_view), NULL);
-
- return shell_view->priv->ui_container;
-}
-
-GtkWidget *
-e_shell_view_get_appbar (EShellView *shell_view)
-{
- g_return_val_if_fail (shell_view != NULL, NULL);
- g_return_val_if_fail (E_IS_SHELL_VIEW (shell_view), NULL);
-
- return shell_view->priv->appbar;
-}
-
-/**
- * e_shell_view_get_current_uri:
- * @shell_view: A pointer to an EShellView object
- *
- * Get the URI currently displayed by this shell view.
- *
- * Return value:
- **/
-const char *
-e_shell_view_get_current_uri (EShellView *shell_view)
-{
- g_return_val_if_fail (shell_view != NULL, NULL);
- g_return_val_if_fail (E_IS_SHELL_VIEW (shell_view), NULL);
-
- return shell_view->priv->uri;
-}
-
-/**
- * e_shell_view_get_current_path:
- * @shell_view: A pointer to an EShellView object
- *
- * Get the path of the current displayed folder.
- *
- * Return value:
- **/
-const char *
-e_shell_view_get_current_path (EShellView *shell_view)
-{
- const char *current_uri;
- const char *current_path;
-
- current_uri = e_shell_view_get_current_uri (shell_view);
- if (current_uri == NULL)
- return NULL;
-
- if (strncmp (current_uri, E_SHELL_URI_PREFIX, E_SHELL_URI_PREFIX_LEN) == 0)
- current_path = current_uri + E_SHELL_URI_PREFIX_LEN;
- else
- current_path = NULL;
-
- return current_path;
-}
-
-const char *
-e_shell_view_get_current_physical_uri (EShellView *shell_view)
-{
- const char *current_path;
- const char *physical_uri;
-
- g_return_val_if_fail (shell_view != NULL, NULL);
- g_return_val_if_fail (E_IS_SHELL_VIEW (shell_view), NULL);
-
- current_path = e_shell_view_get_current_path (shell_view);
- if (current_path == NULL)
- return NULL;
-
- if (get_type_for_folder (shell_view, current_path, &physical_uri) == NULL)
- return NULL;
- else
- return physical_uri;
-}
-
-const char *
-e_shell_view_get_current_folder_type (EShellView *shell_view)
-{
- const char *current_path;
-
- g_return_val_if_fail (shell_view != NULL, NULL);
- g_return_val_if_fail (E_IS_SHELL_VIEW (shell_view), NULL);
-
- current_path = e_shell_view_get_current_path (shell_view);
- if (current_path == NULL)
- return NULL;
-
- return get_type_for_folder (shell_view, current_path, NULL);
-}
-
-const char *
-e_shell_view_get_current_component_id (EShellView *shell_view)
-{
- EShellViewPrivate *priv;
- EFolderTypeRegistry *type_registry;
- EvolutionShellComponentClient *component_client;
- const char *current_folder_type;
-
- priv = shell_view->priv;
-
- type_registry = e_shell_get_folder_type_registry (priv->shell);
-
- current_folder_type = e_shell_view_get_current_folder_type (shell_view);
- if (current_folder_type == NULL)
- return NULL;
-
- component_client = e_folder_type_registry_get_handler_for_type (type_registry, current_folder_type);
- if (component_client == NULL)
- return NULL;
-
- return evolution_shell_component_client_get_id (component_client);
-}
-
-
-/**
- * e_shell_view_save_defaults:
- * @shell_view:
- **/
-void
-e_shell_view_save_defaults (EShellView *shell_view)
-{
- GConfClient *client;
- EShellViewPrivate *priv;
- EShortcutBar *shortcut_bar;
- const char *uri;
- char *file_name;
- struct stat temp;
-
- g_return_if_fail (shell_view != NULL);
- g_return_if_fail (E_IS_SHELL_VIEW (shell_view));
-
- priv = shell_view->priv;
- shortcut_bar = E_SHORTCUT_BAR (priv->shortcut_bar);
-
- client = gconf_client_get_default ();
-
- gconf_client_set_int (client, "/apps/evolution/shell/view_defaults/width",
- GTK_WIDGET (shell_view)->allocation.width, NULL);
- gconf_client_set_int (client, "/apps/evolution/shell/view_defaults/height",
- GTK_WIDGET (shell_view)->allocation.height, NULL);
-
- gconf_client_set_int (client, "/apps/evolution/shell/view_defaults/selected_shortcut_group",
- e_shell_view_get_current_shortcuts_group_num (shell_view), NULL);
-
- gconf_client_set_bool (client, "/apps/evolution/shell/view_defaults/show_folder_bar",
- e_shell_view_folder_bar_shown (shell_view), NULL);
- gconf_client_set_bool (client, "/apps/evolution/shell/view_defaults/show_shortcut_bar",
- e_shell_view_shortcut_bar_shown (shell_view), NULL);
-
- if (priv->shortcut_bar_shown)
- gconf_client_set_int (client, "/apps/evolution/shell/view_defaults/shortcut_bar/width",
- GTK_PANED (priv->hpaned)->child1_size, NULL);
- else
- gconf_client_set_int (client, "/apps/evolution/shell/view_defaults/shortcut_bar/width",
- priv->hpaned_position, NULL);
-
- if (priv->folder_bar_shown)
- gconf_client_set_int (client, "/apps/evolution/shell/view_defaults/folder_bar/width",
- GTK_PANED (priv->view_hpaned)->child1_size, NULL);
- else
- gconf_client_set_int (client, "/apps/evolution/shell/view_defaults/folder_bar/width",
- priv->view_hpaned_position, NULL);
-
- uri = e_shell_view_get_current_uri (shell_view);
- if (uri != NULL)
- gconf_client_set_string (client, "/apps/evolution/shell/view_defaults/folder_path",
- uri + E_SHELL_URI_PREFIX_LEN, NULL);
- else
- gconf_client_unset (client, "/apps/evolution/shell/view_defaults/folder_path", NULL);
-
- /* If ~/evolution/config/ doesn't exist yet, make it */
- file_name = g_strdup_printf ("%s/config/", e_shell_get_local_directory (priv->shell));
- if (stat (file_name, &temp) != 0)
- mkdir (file_name, S_IRWXU);
- g_free (file_name);
-
- /* Save the expanded state for the StorageSetView. */
-
- file_name = g_strdup_printf ("%s/config/storage-set-view-expanded:default",
- e_shell_get_local_directory (priv->shell));
- e_tree_save_expanded_state (E_TREE (priv->storage_set_view),
- file_name);
- g_free (file_name);
-
- g_object_unref (client);
-}
-
-
-/* FIXME: This function could become static */
-void
-e_shell_view_set_current_shortcuts_group_num (EShellView *shell_view, int group_num)
-{
- EShellViewPrivate *priv;
- EShortcutsView *shortcuts_view;
-
- g_return_if_fail (shell_view != NULL);
- g_return_if_fail (E_IS_SHELL_VIEW (shell_view));
-
- priv = shell_view->priv;
-
- shortcuts_view = E_SHORTCUTS_VIEW (priv->shortcut_bar);
-
- e_group_bar_set_current_group_num (E_GROUP_BAR (E_SHORTCUT_BAR (shortcuts_view)), group_num, FALSE);
-}
-
-int
-e_shell_view_get_current_shortcuts_group_num (EShellView *shell_view)
-{
- EShellViewPrivate *priv;
- EShortcutsView *shortcuts_view;
- int group;
-
- g_return_val_if_fail (shell_view != NULL, -1);
- g_return_val_if_fail (E_IS_SHELL_VIEW (shell_view), -1);
-
- priv = shell_view->priv;
-
- shortcuts_view = E_SHORTCUTS_VIEW (priv->shortcut_bar);
-
- group = e_group_bar_get_current_group_num (E_GROUP_BAR (E_SHORTCUT_BAR (shortcuts_view)));
-
- return group;
-}
-
-
-const char *
-e_shell_view_get_folder_bar_right_click_path (EShellView *shell_view)
-{
- EShellViewPrivate *priv;
-
- g_return_val_if_fail (shell_view != NULL, NULL);
- g_return_val_if_fail (E_IS_SHELL_VIEW (shell_view), NULL);
-
- priv = shell_view->priv;
-
- return e_storage_set_view_get_right_click_path (E_STORAGE_SET_VIEW (priv->storage_set_view));
-}
-
-
-E_MAKE_TYPE (e_shell_view, "EShellView", EShellView, class_init, init, BONOBO_TYPE_WINDOW)
diff --git a/shell/e-shell-view.h b/shell/e-shell-view.h
deleted file mode 100644
index 7e3ec94806..0000000000
--- a/shell/e-shell-view.h
+++ /dev/null
@@ -1,128 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-shell-view.h
- *
- * Copyright (C) 2000 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifndef _E_SHELL_VIEW_H_
-#define _E_SHELL_VIEW_H_
-
-#include "e-task-bar.h"
-
-#include <bonobo/bonobo-window.h>
-#include <bonobo/bonobo-ui-component.h>
-#include <bonobo/bonobo-ui-container.h>
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-
-#define E_TYPE_SHELL_VIEW (e_shell_view_get_type ())
-#define E_SHELL_VIEW(obj) (GTK_CHECK_CAST ((obj), E_TYPE_SHELL_VIEW, EShellView))
-#define E_SHELL_VIEW_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_SHELL_VIEW, EShellViewClass))
-#define E_IS_SHELL_VIEW(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_SHELL_VIEW))
-#define E_IS_SHELL_VIEW_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_SHELL_VIEW))
-
-typedef struct _EShellView EShellView;
-typedef struct _EShellViewPrivate EShellViewPrivate;
-typedef struct _EShellViewClass EShellViewClass;
-
-#include "e-shell.h"
-
-#define E_SHELL_VIEW_DEFAULT_URI "evolution:/summary"
-
-struct _EShellView {
- BonoboWindow parent;
-
- EShellViewPrivate *priv;
-};
-
-struct _EShellViewClass {
- BonoboWindowClass parent_class;
-
- /* Signals. */
-
- void (* shortcut_bar_visibility_changed) (EShellView *shell_view,
- gboolean visible);
- void (* folder_bar_visibility_changed) (EShellView *shell_view,
- gboolean visible);
-
- void (* view_changed) (EShellView *shell_view,
- const char *evolution_path,
- const char *physical_uri,
- const char *folder_type,
- const char *component_id);
-};
-
-
-/* WARNING: Don't use `e_shell_view_new()' to create new views for the shell
- unless you know what you are doing; this is just the standard GTK+
- constructor thing and it won't allow the shell to do the required
- bookkeeping for the created views. Instead, the right way to create a new
- view is calling `e_shell_new_view()'. */
-
-GtkType e_shell_view_get_type (void);
-EShellView *e_shell_view_construct (EShellView *shell_view,
- EShell *shell,
- const char *uri);
-EShellView *e_shell_view_new (EShell *shell,
- const char *uri);
-
-const GNOME_Evolution_ShellView e_shell_view_get_corba_interface (EShellView *view);
-
-gboolean e_shell_view_display_uri (EShellView *shell_view,
- const char *uri,
- gboolean queue);
-
-void e_shell_view_show_shortcut_bar (EShellView *shell_view,
- gboolean show);
-gboolean e_shell_view_shortcut_bar_shown (EShellView *shell_view);
-void e_shell_view_show_folder_bar (EShellView *shell_view,
- gboolean show);
-gboolean e_shell_view_folder_bar_shown (EShellView *shell_view);
-
-void e_shell_view_show_settings (EShellView *shell_view);
-
-ETaskBar *e_shell_view_get_task_bar (EShellView *shell_view);
-EShell *e_shell_view_get_shell (EShellView *shell_view);
-BonoboUIComponent *e_shell_view_get_bonobo_ui_component (EShellView *shell_view);
-BonoboUIContainer *e_shell_view_get_bonobo_ui_container (EShellView *shell_view);
-GtkWidget *e_shell_view_get_appbar (EShellView *shell_view);
-const char *e_shell_view_get_current_uri (EShellView *shell_view);
-const char *e_shell_view_get_current_physical_uri (EShellView *shell_view);
-const char *e_shell_view_get_current_folder_type (EShellView *shell_view);
-const char *e_shell_view_get_current_component_id (EShellView *shell_view);
-const char *e_shell_view_get_current_path (EShellView *shell_view);
-
-void e_shell_view_save_defaults (EShellView *shell_view);
-
-int e_shell_view_get_current_shortcuts_group_num (EShellView *shell_view);
-void e_shell_view_set_current_shortcuts_group_num (EShellView *shell_view,
- int group_num);
-
-/* Private -- */
-const char *e_shell_view_get_folder_bar_right_click_path (EShellView *shell_view);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* _E_SHELL_VIEW_H_ */
diff --git a/shell/e-shell.c b/shell/e-shell.c
deleted file mode 100644
index 8985f42661..0000000000
--- a/shell/e-shell.c
+++ /dev/null
@@ -1,2252 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-shell.c
- *
- * Copyright (C) 2000, 2001, 2002 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "e-shell.h"
-
-#include "e-util/e-dialog-utils.h"
-
-#include "e-activity-handler.h"
-#include "e-component-registry.h"
-#include "e-corba-shortcuts.h"
-#include "e-corba-storage-registry.h"
-#include "e-folder-type-registry.h"
-#include "e-local-storage.h"
-#include "e-setup.h"
-#include "e-shell-constants.h"
-#include "e-shell-corba-icon-utils.h"
-#include "e-shell-folder-selection-dialog.h"
-#include "e-shell-offline-handler.h"
-#include "e-shell-settings-dialog.h"
-#include "e-shell-startup-wizard.h"
-#include "e-shell-view.h"
-#include "e-shortcuts.h"
-#include "e-storage-set.h"
-#include "e-splash.h"
-#include "e-uri-schema-registry.h"
-
-#include "e-shell-marshal.h"
-
-#include "evolution-shell-component-client.h"
-#include "evolution-shell-component-utils.h"
-#include "evolution-storage-set-view-factory.h"
-
-#include "importer/intelligent.h"
-
-#include <glib.h>
-
-#include <gtk/gtkmain.h>
-#include <gtk/gtksignal.h>
-#include <gdk/gdkx.h>
-
-#include <X11/Xatom.h>
-
-#include <libgnome/gnome-i18n.h>
-#include <libgnome/gnome-util.h>
-
-/* (For the displayName stuff.) */
-#include <gdk/gdkprivate.h>
-#include <X11/Xlib.h>
-
-#include <bonobo/bonobo-exception.h>
-#include <bonobo/bonobo-moniker-util.h>
-
-#include <gal/util/e-util.h>
-
-#include <gconf/gconf-client.h>
-
-#include <string.h>
-
-#include "Evolution.h"
-
-
-#define PARENT_TYPE bonobo_object_get_type ()
-static BonoboObjectClass *parent_class = NULL;
-
-struct _EShellPrivate {
- /* IID for registering the object on OAF. */
- char *iid;
-
- char *local_directory;
-
- GList *views;
-
- EStorageSet *storage_set;
- ELocalStorage *local_storage;
- EStorage *summary_storage;
-
- EShortcuts *shortcuts;
- EFolderTypeRegistry *folder_type_registry;
- EUriSchemaRegistry *uri_schema_registry;
-
- EComponentRegistry *component_registry;
-
- EShellUserCreatableItemsHandler *user_creatable_items_handler;
-
- /* ::StorageRegistry interface handler. */
- ECorbaStorageRegistry *corba_storage_registry; /* <aggregate> */
-
- /* ::Activity interface handler. */
- EActivityHandler *activity_handler; /* <aggregate> */
-
- /* ::Shortcuts interface handler. */
- ECorbaShortcuts *corba_shortcuts; /* <aggregate> */
-
- /* This object handles going off-line. If the pointer is not NULL, it
- means we have a going-off-line process in progress. */
- EShellOfflineHandler *offline_handler;
-
- /* Names for the types of the folders that have maybe crashed. */
- GList *crash_type_names; /* char * */
-
- /* Line status. */
- EShellLineStatus line_status;
-
- /* Settings Dialog */
- GtkWidget *settings_dialog;
-
- /* Whether the shell is succesfully initialized. This is needed during
- the start-up sequence, to avoid CORBA calls to do make wrong things
- to happen while the shell is initializing. */
- unsigned int is_initialized : 1;
-
- /* Wether the shell is working in "interactive" mode or not.
- (Currently, it's interactive IIF there is at least one active
- view.) */
- unsigned int is_interactive : 1;
-
- /* Whether quit has been requested, and the shell is now waiting for
- permissions from all the components to quit. */
- unsigned int preparing_to_quit : 1;
-};
-
-
-/* Constants. */
-
-/* FIXME: We need a component repository instead. */
-
-#define SHORTCUTS_FILE_NAME "shortcuts.xml"
-#define LOCAL_STORAGE_DIRECTORY "local"
-
-
-enum {
- NO_VIEWS_LEFT,
- LINE_STATUS_CHANGED,
- NEW_VIEW_CREATED,
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = { 0 };
-
-
-/* Utility functions. */
-
-static void
-pop_up_activation_error_dialog (ESplash *splash,
- const char *id,
- CORBA_Environment *ev)
-{
- char *error_message;
-
- error_message = e_get_activation_failure_msg (ev);
- e_notice (splash, GTK_MESSAGE_ERROR,
- _("Cannot activate component %s :\n"
- "The error from the activation system is:\n"
- "%s"),
- id, error_message);
- g_free (error_message);
-}
-
-static gboolean
-get_config_start_offline (void)
-{
- GConfClient *client;
- gboolean value;
-
- client = gconf_client_get_default ();
-
- value = gconf_client_get_bool (client, "/apps/evolution/shell/start_offline", NULL);
-
- g_object_unref (client);
-
- return value;
-}
-
-
-/* Interactivity handling. */
-
-static void
-set_interactive (EShell *shell,
- gboolean interactive)
-{
- EShellPrivate *priv;
- GList *id_list, *p;
- Window new_view_xid;
-
- priv = shell->priv;
-
- if (!! priv->is_interactive == !! interactive)
- return;
-
- priv->is_interactive = interactive;
-
- if (interactive) {
- GtkWidget *new_view;
-
- g_return_if_fail (priv->views && priv->views->data);
- new_view = priv->views->data;
-
- new_view_xid = GDK_WINDOW_XWINDOW (new_view->window);
- } else
- new_view_xid = None;
-
- id_list = e_component_registry_get_id_list (priv->component_registry);
- for (p = id_list; p != NULL; p = p->next) {
- EvolutionShellComponentClient *shell_component_client;
- GNOME_Evolution_ShellComponent shell_component_objref;
- const char *id;
- CORBA_Environment ev;
-
- id = (const char *) p->data;
- shell_component_client = e_component_registry_get_component_by_id (priv->component_registry, id);
- shell_component_objref = evolution_shell_component_client_corba_objref (shell_component_client);
-
- CORBA_exception_init (&ev);
-
- GNOME_Evolution_ShellComponent_interactive (shell_component_objref, interactive, new_view_xid, &ev);
- if (ev._major != CORBA_NO_EXCEPTION)
- g_warning ("Error changing interactive status of component %s to %s -- %s\n",
- id, interactive ? "TRUE" : "FALSE", BONOBO_EX_REPOID (&ev));
-
- CORBA_exception_free (&ev);
- }
-
- e_free_string_list (id_list);
-}
-
-
-/* Callback for the folder selection dialog. */
-
-static void
-folder_selection_dialog_cancelled_cb (EShellFolderSelectionDialog *folder_selection_dialog,
- void *data)
-{
- GNOME_Evolution_FolderSelectionListener listener;
- CORBA_Environment ev;
-
- listener = g_object_get_data (G_OBJECT (folder_selection_dialog), "corba_listener");
-
- CORBA_exception_init (&ev);
-
- GNOME_Evolution_FolderSelectionListener_notifyCanceled (listener, &ev);
-
- CORBA_exception_free (&ev);
-
- gtk_widget_destroy (GTK_WIDGET (folder_selection_dialog));
-}
-
-static void
-folder_selection_dialog_folder_selected_cb (EShellFolderSelectionDialog *folder_selection_dialog,
- const char *path,
- void *data)
-{
- CORBA_Environment ev;
- EShell *shell;
- GNOME_Evolution_FolderSelectionListener listener;
- EStorageSet *storage_set;
- EFolder *folder;
- GNOME_Evolution_Folder corba_folder;
-
- shell = E_SHELL (data);
- listener = g_object_get_data (G_OBJECT (folder_selection_dialog), "corba_listener");
-
- CORBA_exception_init (&ev);
-
- storage_set = e_shell_get_storage_set (shell);
- folder = e_storage_set_get_folder (storage_set, path);
-
- if (folder == NULL) {
- corba_folder.type = "";
- corba_folder.description = "";
- corba_folder.displayName = "";
- corba_folder.physicalUri = "";
- corba_folder.evolutionUri = "";
- corba_folder.unreadCount = -1;
- corba_folder.customIconName = "";
- } else {
- corba_folder.type = (CORBA_char *)e_folder_get_type_string (folder);
- corba_folder.description = (CORBA_char *)e_folder_get_description (folder);
- if (corba_folder.description == NULL)
- corba_folder.description = "";
- corba_folder.displayName = (CORBA_char *)e_folder_get_name (folder);
- corba_folder.physicalUri = (CORBA_char *)e_folder_get_physical_uri (folder);
- if (corba_folder.physicalUri == NULL)
- corba_folder.physicalUri = "";
- corba_folder.evolutionUri = (CORBA_char *)g_strconcat (E_SHELL_URI_PREFIX, path, NULL);
- corba_folder.unreadCount = e_folder_get_unread_count (folder);
- corba_folder.customIconName = (CORBA_char *)e_folder_get_custom_icon_name (folder);
- if (corba_folder.customIconName == NULL)
- corba_folder.customIconName = "";
- }
-
- GNOME_Evolution_FolderSelectionListener_notifySelected (listener, &corba_folder, &ev);
- g_free (corba_folder.evolutionUri);
-
- CORBA_exception_free (&ev);
-}
-
-
-/* CORBA interface implementation. */
-
-static gboolean
-raise_exception_if_not_ready (PortableServer_Servant servant,
- CORBA_Environment *ev)
-{
- EShell *shell;
-
- shell = E_SHELL (bonobo_object_from_servant (servant));
-
- if (! shell->priv->is_initialized) {
- CORBA_exception_set (ev, CORBA_USER_EXCEPTION,
- ex_GNOME_Evolution_Shell_NotReady, NULL);
- return TRUE;
- }
-
- return FALSE;
-}
-
-static GNOME_Evolution_ShellComponent
-impl_Shell_getComponentByType (PortableServer_Servant servant,
- const CORBA_char *type,
- CORBA_Environment *ev)
-{
- BonoboObject *bonobo_object;
- EvolutionShellComponentClient *handler;
- EFolderTypeRegistry *folder_type_registry;
- GNOME_Evolution_ShellComponent corba_component;
- EShell *shell;
-
- if (raise_exception_if_not_ready (servant, ev))
- return CORBA_OBJECT_NIL;
-
- bonobo_object = bonobo_object_from_servant (servant);
- shell = E_SHELL (bonobo_object);
- folder_type_registry = shell->priv->folder_type_registry;
-
- handler = e_folder_type_registry_get_handler_for_type (folder_type_registry, type);
-
- if (handler == NULL) {
- CORBA_exception_set (ev, CORBA_USER_EXCEPTION, ex_GNOME_Evolution_Shell_NotFound, NULL);
- return CORBA_OBJECT_NIL;
- }
-
- corba_component = evolution_shell_component_client_corba_objref (handler);
- Bonobo_Unknown_ref (corba_component, ev);
-
- return CORBA_Object_duplicate (corba_component, ev);
-}
-
-static GNOME_Evolution_Icon *
-impl_Shell_getIconByType (PortableServer_Servant servant,
- const CORBA_char *type,
- const CORBA_boolean mini,
- CORBA_Environment *ev)
-{
- BonoboObject *bonobo_object;
- EFolderTypeRegistry *folder_type_registry;
- GdkPixbuf *pixbuf;
- GNOME_Evolution_Icon *icon;
- EShell *shell;
-
- if (raise_exception_if_not_ready (servant, ev))
- return CORBA_OBJECT_NIL;
-
- bonobo_object = bonobo_object_from_servant (servant);
- shell = E_SHELL (bonobo_object);
- folder_type_registry = shell->priv->folder_type_registry;
-
- pixbuf = e_folder_type_registry_get_icon_for_type (folder_type_registry, type, mini);
-
- if (pixbuf == NULL) {
- CORBA_exception_set (ev, CORBA_USER_EXCEPTION, ex_GNOME_Evolution_Shell_NotFound, NULL);
- return CORBA_OBJECT_NIL;
- }
-
- icon = e_new_corba_icon_from_pixbuf (pixbuf);
- return icon;
-}
-
-static GNOME_Evolution_ShellView
-impl_Shell_createNewView (PortableServer_Servant servant,
- const CORBA_char *uri,
- CORBA_Environment *ev)
-{
- BonoboObject *bonobo_object;
- EShell *shell;
- EShellView *shell_view;
- GNOME_Evolution_ShellView shell_view_interface;
-
- if (raise_exception_if_not_ready (servant, ev))
- return CORBA_OBJECT_NIL;
-
- bonobo_object = bonobo_object_from_servant (servant);
- shell = E_SHELL (bonobo_object);
-
- if (strncmp (uri, E_SHELL_URI_PREFIX, E_SHELL_URI_PREFIX_LEN) != 0) {
- CORBA_exception_set (ev, CORBA_USER_EXCEPTION,
- ex_GNOME_Evolution_Shell_UnsupportedSchema,
- NULL);
- return CORBA_OBJECT_NIL;
- }
-
- shell_view = e_shell_create_view (shell, uri, NULL);
- if (shell_view == NULL) {
- CORBA_exception_set (ev, CORBA_USER_EXCEPTION,
- ex_GNOME_Evolution_Shell_NotFound, NULL);
- return CORBA_OBJECT_NIL;
- }
-
- shell_view_interface = e_shell_view_get_corba_interface (shell_view);
- if (shell_view_interface == CORBA_OBJECT_NIL) {
- CORBA_exception_set (ev, CORBA_USER_EXCEPTION,
- ex_GNOME_Evolution_Shell_InternalError, NULL);
- return CORBA_OBJECT_NIL;
- }
-
- Bonobo_Unknown_ref (shell_view_interface, ev);
- return CORBA_Object_duplicate ((CORBA_Object) shell_view_interface, ev);
-}
-
-static void
-impl_Shell_handleURI (PortableServer_Servant servant,
- const CORBA_char *uri,
- CORBA_Environment *ev)
-{
- EvolutionShellComponentClient *schema_handler;
- EShell *shell;
- EShellPrivate *priv;
- const char *colon_p;
- char *schema;
-
- if (raise_exception_if_not_ready (servant, ev))
- return;
-
- shell = E_SHELL (bonobo_object_from_servant (servant));
- priv = shell->priv;
-
- if (strncmp (uri, E_SHELL_URI_PREFIX, E_SHELL_URI_PREFIX_LEN) == 0
- || strncmp (uri, E_SHELL_DEFAULTURI_PREFIX, E_SHELL_DEFAULTURI_PREFIX_LEN) == 0) {
- e_shell_create_view (shell, uri, NULL);
- return;
- }
-
- /* Extract the schema. */
-
- colon_p = strchr (uri, ':');
- if (colon_p == NULL || colon_p == uri) {
- CORBA_exception_set (ev, CORBA_USER_EXCEPTION,
- ex_GNOME_Evolution_Shell_InvalidURI, NULL);
- return;
- }
-
- schema = g_strndup (uri, colon_p - uri);
- schema_handler = e_uri_schema_registry_get_handler_for_schema (priv->uri_schema_registry, schema);
- g_free (schema);
-
- if (schema_handler == NULL) {
- CORBA_exception_set (ev, CORBA_USER_EXCEPTION,
- ex_GNOME_Evolution_Shell_UnsupportedSchema, NULL);
- return;
- }
-
- if (evolution_shell_component_client_handle_external_uri (schema_handler, uri)
- != EVOLUTION_SHELL_COMPONENT_OK) {
- /* FIXME: Just a wild guess here. */
- CORBA_exception_set (ev, CORBA_USER_EXCEPTION,
- ex_GNOME_Evolution_Shell_NotFound, NULL);
- return;
- }
-}
-
-static void
-corba_listener_destroy_notify (void *data)
-{
- CORBA_Environment ev;
- GNOME_Evolution_FolderSelectionListener listener_interface;
-
- listener_interface = (GNOME_Evolution_FolderSelectionListener) data;
-
- CORBA_exception_init (&ev);
- CORBA_Object_release (listener_interface, &ev);
- CORBA_exception_free (&ev);
-}
-
-static void
-impl_Shell_selectUserFolder (PortableServer_Servant servant,
- const CORBA_long_long parent_xid,
- const GNOME_Evolution_FolderSelectionListener listener,
- const CORBA_char *title,
- const CORBA_char *default_folder,
- const GNOME_Evolution_Shell_FolderTypeNameList *corba_allowed_type_names,
- CORBA_Environment *ev)
-{
- GtkWidget *folder_selection_dialog;
- BonoboObject *bonobo_object;
- GNOME_Evolution_FolderSelectionListener listener_duplicate;
- EShell *shell;
- const char **allowed_type_names;
- int i;
-
- if (raise_exception_if_not_ready (servant, ev))
- return;
-
- bonobo_object = bonobo_object_from_servant (servant);
- shell = E_SHELL (bonobo_object);
-
- allowed_type_names = alloca (sizeof (allowed_type_names[0]) * (corba_allowed_type_names->_length + 1));
- for (i = 0; i < corba_allowed_type_names->_length; i++)
- allowed_type_names[i] = corba_allowed_type_names->_buffer[i];
- allowed_type_names[corba_allowed_type_names->_length] = NULL;
-
- /* CORBA doesn't allow you to pass a NULL pointer. */
- if (!*default_folder)
- default_folder = NULL;
- folder_selection_dialog = e_shell_folder_selection_dialog_new (shell,
- title,
- NULL,
- default_folder,
- allowed_type_names,
- TRUE);
-
-
- listener_duplicate = CORBA_Object_duplicate (listener, ev);
- g_object_set_data_full (G_OBJECT (folder_selection_dialog), "corba_listener",
- listener_duplicate, corba_listener_destroy_notify);
-
- g_signal_connect (folder_selection_dialog, "folder_selected",
- G_CALLBACK (folder_selection_dialog_folder_selected_cb), shell);
- g_signal_connect (folder_selection_dialog, "cancelled",
- G_CALLBACK (folder_selection_dialog_cancelled_cb), shell);
-
- if (parent_xid)
- e_dialog_set_transient_for_xid (GTK_WINDOW (folder_selection_dialog), parent_xid);
-
-#if NASTY_HACK_FOR_OUT_OF_PROC_COMPONENTS
- if (parent_xid == 0) {
- gtk_widget_show (folder_selection_dialog);
- } else {
- XClassHint class_hints;
- XWMHints *parent_wm_hints;
-
- /* Set the WM class and the WindowGroup hint to be the same as
- the foreign parent window's. This way smartass window
- managers like Sawfish don't get confused. */
-
- if (XGetClassHint (GDK_DISPLAY (), (Window) parent_xid, &class_hints)) {
- gtk_window_set_wmclass (GTK_WINDOW (folder_selection_dialog),
- class_hints.res_name, class_hints.res_class);
- XFree (class_hints.res_name);
- XFree (class_hints.res_class);
- }
-
- gtk_widget_show (folder_selection_dialog);
-
- while (folder_selection_dialog->window == NULL)
- gtk_main_iteration ();
-
- parent_wm_hints = XGetWMHints (GDK_DISPLAY (), (Window) parent_xid);
-
- if (parent_wm_hints != NULL && (parent_wm_hints->flags & WindowGroupHint)) {
- XWMHints *wm_hints;
-
- wm_hints = XAllocWMHints ();
- wm_hints->flags = WindowGroupHint;
- wm_hints->window_group = parent_wm_hints->window_group;
- XSetWMHints (GDK_DISPLAY (), GDK_WINDOW_XWINDOW (folder_selection_dialog->window), wm_hints);
- XFree (wm_hints);
- XFree (parent_wm_hints);
- }
- }
-#else
- gtk_widget_show (folder_selection_dialog);
-#endif
-}
-
-static GNOME_Evolution_Storage
-impl_Shell_getLocalStorage (PortableServer_Servant servant,
- CORBA_Environment *ev)
-{
- BonoboObject *bonobo_object;
- GNOME_Evolution_Storage local_storage_interface;
- EShell *shell;
- EShellPrivate *priv;
-
- bonobo_object = bonobo_object_from_servant (servant);
- shell = E_SHELL (bonobo_object);
- priv = shell->priv;
-
- if (priv->local_storage == NULL) {
- CORBA_exception_set (ev, CORBA_USER_EXCEPTION,
- ex_GNOME_Evolution_Shell_NotReady, NULL);
- return CORBA_OBJECT_NIL;
- }
-
- local_storage_interface = e_local_storage_get_corba_interface (priv->local_storage);
-
- bonobo_object_dup_ref (local_storage_interface, ev);
-
- return local_storage_interface;
-}
-
-static Bonobo_Control
-impl_Shell_createStorageSetView (PortableServer_Servant servant,
- CORBA_Environment *ev)
-{
- BonoboObject *bonobo_object;
- BonoboControl *control;
- CORBA_Object dup_objref;
- EShell *shell;
-
- if (raise_exception_if_not_ready (servant, ev))
- return CORBA_OBJECT_NIL;
-
- bonobo_object = bonobo_object_from_servant (servant);
- shell = E_SHELL (bonobo_object);
-
- control = evolution_storage_set_view_factory_new_view (shell);
- dup_objref = CORBA_Object_duplicate (bonobo_object_corba_objref (BONOBO_OBJECT (control)), ev);
-
- return dup_objref;
-}
-
-static void
-impl_Shell_setLineStatus (PortableServer_Servant servant,
- CORBA_boolean online,
- CORBA_Environment *ev)
-{
- BonoboObject *bonobo_object;
- EShell *shell;
-
- if (raise_exception_if_not_ready (servant, ev))
- return;
-
- bonobo_object = bonobo_object_from_servant (servant);
- shell = E_SHELL (bonobo_object);
-
- if (online)
- e_shell_go_online (shell, NULL);
- else
- e_shell_go_offline (shell, NULL);
-}
-
-
-/* Set up the ::Activity interface. */
-
-static void
-setup_activity_interface (EShell *shell)
-{
- EActivityHandler *activity_handler;
- EShellPrivate *priv;
-
- priv = shell->priv;
-
- activity_handler = e_activity_handler_new ();
-
- bonobo_object_add_interface (BONOBO_OBJECT (shell), BONOBO_OBJECT (activity_handler));
- priv->activity_handler = activity_handler;
-}
-
-
-/* Set up the ::Shortcuts interface. */
-
-static void
-setup_shortcuts_interface (EShell *shell)
-{
- ECorbaShortcuts *corba_shortcuts;
- EShellPrivate *priv;
-
- priv = shell->priv;
-
- g_assert (priv->shortcuts != NULL);
-
- corba_shortcuts = e_corba_shortcuts_new (priv->shortcuts);
-
- bonobo_object_add_interface (BONOBO_OBJECT (shell), BONOBO_OBJECT (corba_shortcuts));
- priv->corba_shortcuts = corba_shortcuts;
-}
-
-
-/* Initialization of the storages. */
-
-static gboolean
-setup_corba_storages (EShell *shell)
-{
- EShellPrivate *priv;
- ECorbaStorageRegistry *corba_storage_registry;
-
- priv = shell->priv;
-
- g_assert (priv->storage_set != NULL);
- corba_storage_registry = e_corba_storage_registry_new (priv->storage_set);
-
- if (corba_storage_registry == NULL)
- return FALSE;
-
- bonobo_object_add_interface (BONOBO_OBJECT (shell),
- BONOBO_OBJECT (corba_storage_registry));
-
- priv->corba_storage_registry = corba_storage_registry;
-
- return TRUE;
-}
-
-static gboolean
-setup_local_storage (EShell *shell)
-{
- EStorage *local_storage;
- EShellPrivate *priv;
- gchar *local_storage_path;
- EFolder *summary_folder;
-
- priv = shell->priv;
-
- g_assert (priv->folder_type_registry != NULL);
- g_assert (priv->local_storage == NULL);
-
- local_storage_path = g_build_filename (priv->local_directory, LOCAL_STORAGE_DIRECTORY, NULL);
- local_storage = e_local_storage_open (priv->folder_type_registry, local_storage_path);
- if (local_storage == NULL) {
- g_warning (_("Cannot set up local storage -- %s"), local_storage_path);
- g_free (local_storage_path);
- return FALSE;
- }
- g_free (local_storage_path);
-
- e_storage_set_add_storage (priv->storage_set, local_storage);
- priv->local_storage = E_LOCAL_STORAGE (local_storage);
-
- summary_folder = e_folder_new (_("Summary"), "summary", "");
- e_folder_set_physical_uri (summary_folder, "/");
- e_folder_set_is_stock (summary_folder, TRUE);
- priv->summary_storage = e_storage_new (E_SUMMARY_STORAGE_NAME,
- summary_folder);
- e_storage_set_add_storage (priv->storage_set, priv->summary_storage);
-
- return TRUE;
-}
-
-
-/* Initialization of the components. */
-
-static char *
-get_icon_path_for_component_info (const Bonobo_ServerInfo *info)
-{
- Bonobo_ActivationProperty *property;
- const char *shell_component_icon_value;
-
- property = bonobo_server_info_prop_find ((Bonobo_ServerInfo *) info,
- "evolution:shell_component_icon");
-
- if (property == NULL || property->v._d != Bonobo_ACTIVATION_P_STRING)
- return gnome_program_locate_file (NULL, GNOME_FILE_DOMAIN_PIXMAP, "gnome-question.png",
- TRUE, NULL);
-
- shell_component_icon_value = property->v._u.value_string;
-
- if (g_path_is_absolute (shell_component_icon_value))
- return g_strdup (shell_component_icon_value);
-
- else
- return g_build_filename (EVOLUTION_IMAGES, shell_component_icon_value, NULL);
-}
-
-static void
-setup_components (EShell *shell,
- ESplash *splash)
-{
- EShellPrivate *priv;
- char *const selection_order[] = { "0-evolution:shell_component_launch_order", NULL };
- Bonobo_ServerInfoList *info_list;
- CORBA_Environment ev;
- int i;
-
- CORBA_exception_init (&ev);
-
- priv = shell->priv;
- priv->component_registry = e_component_registry_new (shell);
-
- info_list = bonobo_activation_query ("repo_ids.has ('IDL:GNOME/Evolution/ShellComponent:1.0')", selection_order, &ev);
-
- if (ev._major != CORBA_NO_EXCEPTION)
- g_error ("Eeek! Cannot perform OAF query for Evolution components.");
-
- if (info_list->_length == 0)
- g_warning ("No Evolution components installed.");
-
- for (i = 0; i < info_list->_length; i++) {
- const Bonobo_ServerInfo *info;
- GdkPixbuf *icon_pixbuf;
- char *icon_path;
-
- info = info_list->_buffer + i;
-
- icon_path = get_icon_path_for_component_info (info);
-
- icon_pixbuf = gdk_pixbuf_new_from_file (icon_path, NULL);
-
- if (splash != NULL)
- e_splash_add_icon (splash, icon_pixbuf);
-
- g_object_unref (icon_pixbuf);
-
- g_free (icon_path);
- }
-
- while (gtk_events_pending ())
- gtk_main_iteration ();
-
- for (i = 0; i < info_list->_length; i++) {
- const Bonobo_ServerInfo *info;
- CORBA_Environment ev;
-
- info = info_list->_buffer + i;
-
- CORBA_exception_init (&ev);
-
- if (! e_component_registry_register_component (priv->component_registry, info->iid, &ev)) {
- pop_up_activation_error_dialog (splash, info->iid, &ev);
- } else {
- e_shell_user_creatable_items_handler_add_component
- (priv->user_creatable_items_handler,
- info->iid,
- e_component_registry_get_component_by_id (priv->component_registry, info->iid));
- }
-
- CORBA_exception_free (&ev);
-
- if (splash != NULL)
- e_splash_set_icon_highlight (splash, i, TRUE);
-
- while (gtk_events_pending ())
- gtk_main_iteration ();
- }
-
- CORBA_free (info_list);
-
- CORBA_exception_free (&ev);
-}
-
-/* FIXME what if anything fails here? */
-static void
-set_owner_on_components (EShell *shell,
- ESplash *splash)
-{
- GNOME_Evolution_Shell corba_shell;
- EShellPrivate *priv;
- const char *local_directory;
- GList *id_list;
- GList *p;
-
- priv = shell->priv;
- local_directory = e_shell_get_local_directory (shell);
-
- corba_shell = BONOBO_OBJREF (shell);
-
- id_list = e_component_registry_get_id_list (priv->component_registry);
- for (p = id_list; p != NULL; p = p->next) {
- EvolutionShellComponentClient *component_client;
- EvolutionShellComponentResult result;
- const char *id;
-
- id = (const char *) p->data;
- component_client = e_component_registry_get_component_by_id (priv->component_registry, id);
-
- result = evolution_shell_component_client_set_owner (component_client, corba_shell, local_directory);
- if (result != EVOLUTION_SHELL_COMPONENT_OK) {
- g_warning ("Error setting owner on component %s -- %s",
- id, evolution_shell_component_result_to_string (result));
-
- if (result == EVOLUTION_SHELL_COMPONENT_OLDOWNERHASDIED) {
- CORBA_Environment ev;
-
- CORBA_exception_init (&ev);
-
- component_client = e_component_registry_restart_component (priv->component_registry,
- id, &ev);
-
- if (component_client == NULL) {
- pop_up_activation_error_dialog (splash, id, &ev);
- } else {
- result = evolution_shell_component_client_set_owner (component_client, corba_shell,
- local_directory);
- if (result != EVOLUTION_SHELL_COMPONENT_OK) {
- g_warning ("Error re-setting owner on component %s -- %s",
- id, evolution_shell_component_result_to_string (result));
- /* (At this point, we give up.) */
- }
- }
-
- CORBA_exception_free (&ev);
- }
- }
- }
-
- e_free_string_list (id_list);
-}
-
-
-/* EStorageSet callbacks. */
-
-static void
-storage_set_moved_folder_callback (EStorageSet *storage_set,
- const char *source_path,
- const char *destination_path,
- void *data)
-{
- EShell *shell;
- char *source_uri;
- char *destination_uri;
-
- shell = E_SHELL (data);
-
- source_uri = g_strconcat (E_SHELL_URI_PREFIX, source_path, NULL);
- destination_uri = g_strconcat (E_SHELL_URI_PREFIX, destination_path, NULL);
-
- e_shortcuts_update_shortcuts_for_changed_uri (e_shell_get_shortcuts (shell),
- source_uri,
- destination_uri);
-
- g_free (source_uri);
- g_free (destination_uri);
-}
-
-
-/* EShellView handling and bookkeeping. */
-
-static int
-view_delete_event_cb (GtkWidget *widget,
- GdkEventAny *ev,
- void *data)
-{
- EShell *shell;
-
- g_assert (E_IS_SHELL_VIEW (widget));
- shell = E_SHELL (data);
-
- return ! e_shell_request_close_view (shell, E_SHELL_VIEW (widget));
-}
-
-static gboolean
-notify_no_views_left_idle_cb (void *data)
-{
- EShell *shell;
-
- shell = E_SHELL (data);
-
- set_interactive (shell, FALSE);
-
- g_signal_emit (shell, signals [NO_VIEWS_LEFT], 0);
-
- bonobo_object_unref (BONOBO_OBJECT (shell));
-
- return FALSE;
-}
-
-static void
-view_weak_notify (void *data,
- GObject *where_the_object_was)
-{
- EShell *shell;
- int num_views;
-
- shell = E_SHELL (data);
-
- num_views = g_list_length (shell->priv->views);
-
- /* If this is our last view, save settings now because in the callback
- for no_views_left shell->priv->views will be NULL and settings won't
- be saved because of that. */
- if (num_views == 1)
- e_shell_save_settings (shell);
-
- shell->priv->views = g_list_remove (shell->priv->views, where_the_object_was);
-
- if (shell->priv->views == NULL) {
- bonobo_object_ref (BONOBO_OBJECT (shell));
- g_idle_add (notify_no_views_left_idle_cb, shell);
- }
-}
-
-static EShellView *
-create_view (EShell *shell,
- const char *uri,
- EShellView *template_view)
-{
- EShellPrivate *priv;
- EShellView *view;
- ETaskBar *task_bar;
-
- priv = shell->priv;
-
- view = e_shell_view_new (shell, uri);
-
- g_signal_connect (view, "delete_event",
- G_CALLBACK (view_delete_event_cb), shell);
-
- g_object_weak_ref (G_OBJECT (view), view_weak_notify, shell);
-
- if (uri != NULL)
- e_shell_view_display_uri (E_SHELL_VIEW (view), uri, TRUE);
-
- shell->priv->views = g_list_prepend (shell->priv->views, view);
-
- task_bar = e_shell_view_get_task_bar (view);
- e_activity_handler_attach_task_bar (priv->activity_handler, task_bar);
-
- if (template_view != NULL) {
- e_shell_view_show_folder_bar (view, e_shell_view_folder_bar_shown (template_view));
- e_shell_view_show_shortcut_bar (view, e_shell_view_shortcut_bar_shown (template_view));
- }
-
- g_signal_emit (shell, signals[NEW_VIEW_CREATED], 0, view);
-
- return view;
-}
-
-
-/* GObject methods. */
-
-static void
-impl_dispose (GObject *object)
-{
- EShell *shell;
- EShellPrivate *priv;
- GList *p;
-
- shell = E_SHELL (object);
- priv = shell->priv;
-
- priv->is_initialized = FALSE;
-
- if (priv->storage_set != NULL) {
- g_object_unref (priv->storage_set);
- priv->storage_set = NULL;
- }
-
- if (priv->local_storage != NULL) {
- g_object_unref (priv->local_storage);
- priv->local_storage = NULL;
- }
-
- if (priv->summary_storage != NULL) {
- g_object_unref (priv->summary_storage);
- priv->summary_storage = NULL;
- }
-
- if (priv->shortcuts != NULL) {
- g_object_unref (priv->shortcuts);
- priv->shortcuts = NULL;
- }
-
- if (priv->folder_type_registry != NULL) {
- g_object_unref (priv->folder_type_registry);
- priv->folder_type_registry = NULL;
- }
-
- if (priv->uri_schema_registry != NULL) {
- g_object_unref (priv->uri_schema_registry);
- priv->uri_schema_registry = NULL;
- }
-
- if (priv->component_registry != NULL) {
- g_object_unref (priv->component_registry);
- priv->component_registry = NULL;
- }
-
- if (priv->user_creatable_items_handler != NULL) {
- g_object_unref (priv->user_creatable_items_handler);
- priv->user_creatable_items_handler = NULL;
- }
-
- for (p = priv->views; p != NULL; p = p->next) {
- EShellView *view;
-
- view = E_SHELL_VIEW (p->data);
-
- g_signal_handlers_disconnect_by_func (view, G_CALLBACK (view_delete_event_cb), shell);
-
- g_object_weak_unref (G_OBJECT (view), view_weak_notify, shell);
-
- gtk_object_destroy (GTK_OBJECT (view));
- }
-
- g_list_free (priv->views);
- priv->views = NULL;
-
- /* No unreffing for these as they are aggregate. */
- /* bonobo_object_unref (BONOBO_OBJECT (priv->corba_storage_registry)); */
- /* bonobo_object_unref (BONOBO_OBJECT (priv->activity_handler)); */
- /* bonobo_object_unref (BONOBO_OBJECT (priv->corba_shortcuts)); */
-
- /* FIXME. Maybe we should do something special here. */
- if (priv->offline_handler != NULL) {
- g_object_unref (priv->offline_handler);
- priv->offline_handler = NULL;
- }
-
- if (priv->settings_dialog != NULL) {
- gtk_widget_destroy (priv->settings_dialog);
- priv->settings_dialog = NULL;
- }
-
- (* G_OBJECT_CLASS (parent_class)->dispose) (object);
-}
-
-static void
-impl_finalize (GObject *object)
-{
- EShell *shell;
- EShellPrivate *priv;
-
- shell = E_SHELL (object);
- priv = shell->priv;
-
- if (priv->iid != NULL)
- bonobo_activation_active_server_unregister (priv->iid,
- bonobo_object_corba_objref (BONOBO_OBJECT (shell)));
-
- g_free (priv->local_directory);
-
- e_free_string_list (priv->crash_type_names);
-
- g_free (priv);
-
- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
-}
-
-
-/* Initialization. */
-
-static void
-e_shell_class_init (EShellClass *klass)
-{
- GObjectClass *object_class;
- POA_GNOME_Evolution_Shell__epv *epv;
-
- parent_class = g_type_class_ref(PARENT_TYPE);
-
- object_class = G_OBJECT_CLASS (klass);
- object_class->dispose = impl_dispose;
- object_class->finalize = impl_finalize;
-
- signals[NO_VIEWS_LEFT] =
- g_signal_new ("no_views_left",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (EShellClass, no_views_left),
- NULL, NULL,
- e_shell_marshal_NONE__NONE,
- G_TYPE_NONE, 0);
-
- signals[LINE_STATUS_CHANGED] =
- g_signal_new ("line_status_changed",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (EShellClass, line_status_changed),
- NULL, NULL,
- e_shell_marshal_NONE__INT,
- G_TYPE_NONE, 1,
- G_TYPE_INT);
-
- signals[NEW_VIEW_CREATED] =
- g_signal_new ("new_view_created",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (EShellClass, new_view_created),
- NULL, NULL,
- e_shell_marshal_NONE__POINTER,
- G_TYPE_NONE, 1,
- G_TYPE_POINTER);
-
- epv = & klass->epv;
- epv->getComponentByType = impl_Shell_getComponentByType;
- epv->getIconByType = impl_Shell_getIconByType;
- epv->createNewView = impl_Shell_createNewView;
- epv->handleURI = impl_Shell_handleURI;
- epv->selectUserFolder = impl_Shell_selectUserFolder;
- epv->getLocalStorage = impl_Shell_getLocalStorage;
- epv->createStorageSetView = impl_Shell_createStorageSetView;
- epv->setLineStatus = impl_Shell_setLineStatus;
-}
-
-static void
-e_shell_init (EShell *shell)
-{
- EShellPrivate *priv;
-
- priv = g_new (EShellPrivate, 1);
-
- priv->views = NULL;
-
- priv->iid = NULL;
- priv->local_directory = NULL;
- priv->storage_set = NULL;
- priv->local_storage = NULL;
- priv->summary_storage = NULL;
- priv->shortcuts = NULL;
- priv->component_registry = NULL;
- priv->user_creatable_items_handler = NULL;
- priv->folder_type_registry = NULL;
- priv->uri_schema_registry = NULL;
- priv->corba_storage_registry = NULL;
- priv->activity_handler = NULL;
- priv->corba_shortcuts = NULL;
- priv->offline_handler = NULL;
- priv->crash_type_names = NULL;
- priv->line_status = E_SHELL_LINE_STATUS_OFFLINE;
- priv->settings_dialog = NULL;
- priv->is_initialized = FALSE;
- priv->is_interactive = FALSE;
- priv->preparing_to_quit = FALSE;
-
- shell->priv = priv;
-}
-
-
-/**
- * e_shell_construct:
- * @shell: An EShell object to construct
- * @iid: OAFIID for registering the shell into the name server
- * @local_directory: Local directory for storing local information and folders
- * @show_splash: Whether to display a splash screen.
- * @startup_line_mode: How to set up the line mode (online or offline) initally.
- *
- * Construct @shell so that it uses the specified @local_directory and
- * @corba_object.
- *
- * Return value: The result of the operation.
- **/
-EShellConstructResult
-e_shell_construct (EShell *shell,
- const char *iid,
- const char *local_directory,
- gboolean show_splash,
- EShellStartupLineMode startup_line_mode)
-{
- GtkWidget *splash = NULL;
- EShellPrivate *priv;
- CORBA_Object corba_object;
- gchar *shortcut_path;
- gboolean start_online;
-
- g_return_val_if_fail (shell != NULL, E_SHELL_CONSTRUCT_RESULT_INVALIDARG);
- g_return_val_if_fail (E_IS_SHELL (shell), E_SHELL_CONSTRUCT_RESULT_INVALIDARG);
- g_return_val_if_fail (local_directory != NULL, E_SHELL_CONSTRUCT_RESULT_INVALIDARG);
- g_return_val_if_fail (g_path_is_absolute (local_directory), E_SHELL_CONSTRUCT_RESULT_INVALIDARG);
- g_return_val_if_fail (startup_line_mode == E_SHELL_STARTUP_LINE_MODE_CONFIG
- || startup_line_mode == E_SHELL_STARTUP_LINE_MODE_ONLINE
- || startup_line_mode == E_SHELL_STARTUP_LINE_MODE_OFFLINE,
- E_SHELL_CONSTRUCT_RESULT_INVALIDARG);
-
- priv = shell->priv;
-
- priv->iid = g_strdup (iid);
- priv->local_directory = g_strdup (local_directory);
- priv->folder_type_registry = e_folder_type_registry_new ();
- priv->uri_schema_registry = e_uri_schema_registry_new ();
- priv->storage_set = e_storage_set_new (priv->folder_type_registry);
-
- g_signal_connect_object (priv->storage_set, "moved_folder",
- G_CALLBACK (storage_set_moved_folder_callback),
- shell, 0);
-
- e_folder_type_registry_register_type (priv->folder_type_registry,
- "noselect", "empty.gif",
- "noselect", "", FALSE,
- 0, NULL, 0, NULL);
- e_folder_type_registry_register_type (priv->folder_type_registry,
- "working", "working-16.png",
- "working", "", FALSE,
- 0, NULL, 0, NULL);
-
- /* CORBA storages must be set up before the components, because otherwise components
- cannot register their own storages. */
- if (! setup_corba_storages (shell))
- return FALSE;
-
- e_setup_check_config (local_directory);
-
- /* Now we can register into OAF. Notice that we shouldn't be
- registering into OAF until we are sure we can complete. */
-
- /* FIXME: Multi-display stuff. */
- corba_object = bonobo_object_corba_objref (BONOBO_OBJECT (shell));
- if (bonobo_activation_active_server_register (iid, corba_object) != Bonobo_ACTIVATION_REG_SUCCESS)
- return E_SHELL_CONSTRUCT_RESULT_CANNOTREGISTER;
-
- if (show_splash
- && (splash = e_splash_new ())) {
- g_signal_connect (splash, "delete_event",
- G_CALLBACK (gtk_widget_hide_on_delete), NULL);
- gtk_widget_show (splash);
- }
-
- while (gtk_events_pending ())
- gtk_main_iteration ();
-
- priv->user_creatable_items_handler = e_shell_user_creatable_items_handler_new ();
-
- setup_components (shell, (ESplash *)splash);
-
- /* Set up the shortcuts. */
-
- shortcut_path = g_build_filename (local_directory, "shortcuts.xml", NULL);
- priv->shortcuts = e_shortcuts_new_from_file (shell, shortcut_path);
- g_assert (priv->shortcuts != NULL);
-
- if (e_shortcuts_get_num_groups (priv->shortcuts) == 0)
- e_shortcuts_add_default_group (priv->shortcuts);
-
- g_free (shortcut_path);
-
- /* The local storage depends on the component registry. */
- setup_local_storage (shell);
-
- /* Set up the ::Activity interface. This must be done before we notify
- the components, as they might want to use it. */
- setup_activity_interface (shell);
-
- /* Set up the shortcuts interface. This has to be done after the
- shortcuts are actually initialized. */
-
- setup_shortcuts_interface (shell);
-
- /* Now that we have a local storage and all the interfaces set up, we
- can tell the components we are here. */
- set_owner_on_components (shell, (ESplash *)splash);
-
- if (splash)
- gtk_widget_destroy (splash);
-
- if (e_shell_startup_wizard_create () == FALSE) {
- e_shell_unregister_all (shell);
- bonobo_object_unref (BONOBO_OBJECT (shell));
-
- exit (0);
- }
-
- priv->is_initialized = TRUE;
-
- switch (startup_line_mode) {
- case E_SHELL_STARTUP_LINE_MODE_CONFIG:
- start_online = ! get_config_start_offline ();
- break;
- case E_SHELL_STARTUP_LINE_MODE_ONLINE:
- start_online = TRUE;
- break;
- case E_SHELL_STARTUP_LINE_MODE_OFFLINE:
- start_online = FALSE;
- break;
- default:
- start_online = FALSE; /* Make compiler happy. */
- g_assert_not_reached ();
- }
-
- if (start_online)
- e_shell_go_online (shell, NULL);
-
- return E_SHELL_CONSTRUCT_RESULT_OK;
-}
-
-/**
- * e_shell_new:
- * @local_directory: Local directory for storing local information and folders.
- * @show_splash: Whether to display a splash screen.
- * @start_online: Whether to start in on-line mode or not.
- * @construct_result_return: A pointer to an EShellConstructResult variable into
- * which the result of the operation will be stored.
- *
- * Create a new EShell.
- *
- * Return value:
- **/
-EShell *
-e_shell_new (const char *local_directory,
- gboolean show_splash,
- EShellStartupLineMode startup_line_mode,
- EShellConstructResult *construct_result_return)
-{
- EShell *new;
- EShellPrivate *priv;
- EShellConstructResult construct_result;
-
- g_return_val_if_fail (local_directory != NULL, NULL);
- g_return_val_if_fail (*local_directory != '\0', NULL);
-
- new = g_object_new (e_shell_get_type (), NULL);
-
- construct_result = e_shell_construct (new,
- E_SHELL_OAFIID,
- local_directory,
- show_splash,
- startup_line_mode);
-
- if (construct_result != E_SHELL_CONSTRUCT_RESULT_OK) {
- *construct_result_return = construct_result;
- bonobo_object_unref (BONOBO_OBJECT (new));
- return NULL;
- }
-
- priv = new->priv;
-
- if (priv->shortcuts == NULL || priv->storage_set == NULL) {
- /* FIXME? */
- *construct_result_return = E_SHELL_CONSTRUCT_RESULT_GENERICERROR;
- bonobo_object_unref (BONOBO_OBJECT (new));
- return NULL;
- }
-
- *construct_result_return = E_SHELL_CONSTRUCT_RESULT_OK;
- return new;
-}
-
-
-/**
- * e_shell_create_view:
- * @shell: The shell for which to create a new view.
- * @uri: URI for the new view.
- * @template_view: Window from which to copy the view settings (can be %NULL).
- *
- * Create a new view for @uri.
- *
- * Return value: The new view.
- **/
-EShellView *
-e_shell_create_view (EShell *shell,
- const char *uri,
- EShellView *template_view)
-{
- EShellView *view;
- EShellPrivate *priv;
-
- g_return_val_if_fail (shell != NULL, NULL);
- g_return_val_if_fail (E_IS_SHELL (shell), NULL);
-
- priv = shell->priv;
-
- view = create_view (shell, uri, template_view);
-
- gtk_widget_show (GTK_WIDGET (view));
-
- set_interactive (shell, TRUE);
-
- return view;
-}
-
-gboolean
-e_shell_request_close_view (EShell *shell,
- EShellView *shell_view)
-{
- g_return_val_if_fail (E_IS_SHELL (shell), FALSE);
- g_return_val_if_fail (E_IS_SHELL_VIEW (shell_view), FALSE);
-
- e_shell_save_settings (shell);
-
- if (g_list_length (shell->priv->views) != 1) {
- /* Not the last view. */
- return TRUE;
- }
-
- if (shell->priv->preparing_to_quit)
- return FALSE;
-
- /* If it's the last view, save settings and ask for confirmation before
- quitting. */
-
- e_shell_view_save_defaults (shell_view);
-
- if (e_shell_prepare_for_quit (shell))
- return TRUE;
- else
- return FALSE;
-}
-
-
-/**
- * e_shell_get_local_directory:
- * @shell: An EShell object.
- *
- * Get the local directory associated with @shell.
- *
- * Return value: A pointer to the path of the local directory.
- **/
-const char *
-e_shell_get_local_directory (EShell *shell)
-{
- g_return_val_if_fail (shell != NULL, NULL);
- g_return_val_if_fail (E_IS_SHELL (shell), NULL);
-
- return shell->priv->local_directory;
-}
-
-/**
- * e_shell_get_shortcuts:
- * @shell: An EShell object.
- *
- * Get the shortcuts associated to @shell.
- *
- * Return value: A pointer to the EShortcuts associated to @shell.
- **/
-EShortcuts *
-e_shell_get_shortcuts (EShell *shell)
-{
- g_return_val_if_fail (shell != NULL, NULL);
- g_return_val_if_fail (E_IS_SHELL (shell), NULL);
-
- return shell->priv->shortcuts;
-}
-
-/**
- * e_shell_get_storage_set:
- * @shell: An EShell object.
- *
- * Get the storage set associated to @shell.
- *
- * Return value: A pointer to the EStorageSet associated to @shell.
- **/
-EStorageSet *
-e_shell_get_storage_set (EShell *shell)
-{
- g_return_val_if_fail (shell != NULL, NULL);
- g_return_val_if_fail (E_IS_SHELL (shell), NULL);
-
- return shell->priv->storage_set;
-}
-
-/**
- * e_shell_get_folder_type_registry:
- * @shell: An EShell object.
- *
- * Get the folder type registry associated to @shell.
- *
- * Return value: A pointer to the EFolderTypeRegistry associated to @shell.
- **/
-EFolderTypeRegistry *
-e_shell_get_folder_type_registry (EShell *shell)
-{
- g_return_val_if_fail (shell != NULL, NULL);
- g_return_val_if_fail (E_IS_SHELL (shell), NULL);
-
- return shell->priv->folder_type_registry;
-}
-
-/**
- * e_shell_get_uri_schema_registry:
- * @shell: An EShell object.
- *
- * Get the schema registry associated to @shell.
- *
- * Return value: A pointer to the EUriSchemaRegistry associated to @shell.
- **/
-EUriSchemaRegistry *
-e_shell_get_uri_schema_registry (EShell *shell)
-{
- g_return_val_if_fail (shell != NULL, NULL);
- g_return_val_if_fail (E_IS_SHELL (shell), NULL);
-
- return shell->priv->uri_schema_registry;
-}
-
-/**
- * e_shell_get_local_storage:
- * @shell: An EShell object.
- *
- * Get the local storage associated to @shell.
- *
- * Return value: A pointer to the ELocalStorage associated to @shell.
- **/
-ELocalStorage *
-e_shell_get_local_storage (EShell *shell)
-{
- g_return_val_if_fail (shell != NULL, NULL);
- g_return_val_if_fail (E_IS_SHELL (shell), NULL);
-
- return shell->priv->local_storage;
-}
-
-
-static gboolean
-save_settings_for_component (EShell *shell,
- const char *id,
- EvolutionShellComponentClient *client)
-{
- Bonobo_Unknown unknown_interface;
- GNOME_Evolution_Session session_interface;
- CORBA_Environment ev;
- char *prefix;
- gboolean retval;
-
- unknown_interface = evolution_shell_component_client_corba_objref (client);
- g_assert (unknown_interface != CORBA_OBJECT_NIL);
-
- CORBA_exception_init (&ev);
-
- session_interface = Bonobo_Unknown_queryInterface (unknown_interface,
- "IDL:GNOME/Evolution/Session:1.0", &ev);
- if (ev._major != CORBA_NO_EXCEPTION || CORBA_Object_is_nil (session_interface, &ev)) {
- CORBA_exception_free (&ev);
- return TRUE;
- }
-
- prefix = g_strconcat ("/apps/evolution/shell/components/", id, NULL);
- GNOME_Evolution_Session_saveConfiguration (session_interface, prefix, &ev);
-
- if (ev._major == CORBA_NO_EXCEPTION)
- retval = TRUE;
- else
- retval = FALSE;
-
- g_free (prefix);
-
- CORBA_exception_free (&ev);
-
- return retval;
-}
-
-static gboolean
-save_settings_for_components (EShell *shell)
-{
- EShellPrivate *priv;
- GList *component_ids;
- GList *p;
- gboolean retval;
-
- priv = shell->priv;
-
- g_assert (priv->component_registry);
- component_ids = e_component_registry_get_id_list (priv->component_registry);
-
- retval = TRUE;
- for (p = component_ids; p != NULL; p = p->next) {
- EvolutionShellComponentClient *client;
- const char *id;
-
- id = p->data;
- client = e_component_registry_get_component_by_id (priv->component_registry, id);
-
- if (! save_settings_for_component (shell, id, client))
- retval = FALSE;
- }
-
- e_free_string_list (component_ids);
-
- return retval;
-}
-
-static gboolean
-save_misc_settings (EShell *shell)
-{
- GConfClient *client;
- EShellPrivate *priv;
- gboolean is_offline;
-
- priv = shell->priv;
-
- is_offline = ( e_shell_get_line_status (shell) == E_SHELL_LINE_STATUS_OFFLINE );
-
- client = gconf_client_get_default ();
- gconf_client_set_bool (client, "/apps/evolution/shell/start_offline", is_offline, NULL);
- g_object_unref (client);
-
- return TRUE;
-}
-
-/**
- * e_shell_save_settings:
- * @shell:
- *
- * Save the settings for this shell.
- *
- * Return value: %TRUE if it worked, %FALSE otherwise. Even if %FALSE is
- * returned, it is possible that at least part of the settings for the views
- * have been saved.
- **/
-gboolean
-e_shell_save_settings (EShell *shell)
-{
- gboolean components_saved;
- gboolean misc_saved;
-
- g_return_val_if_fail (shell != NULL, FALSE);
- g_return_val_if_fail (E_IS_SHELL (shell), FALSE);
-
- components_saved = save_settings_for_components (shell);
- misc_saved = save_misc_settings (shell);
-
- return components_saved && misc_saved;
-}
-
-/**
- * e_shell_destroy_all_views:
- * @shell:
- *
- * Destroy all the views in @shell.
- **/
-void
-e_shell_destroy_all_views (EShell *shell)
-{
- EShellPrivate *priv;
- GList *p, *pnext;
-
- g_return_if_fail (shell != NULL);
- g_return_if_fail (E_IS_SHELL (shell));
-
- if (shell->priv->views)
- e_shell_save_settings (shell);
-
- priv = shell->priv;
-
- for (p = priv->views; p != NULL; p = pnext) {
- EShellView *shell_view;
-
- pnext = p->next;
-
- shell_view = E_SHELL_VIEW (p->data);
- gtk_widget_destroy (GTK_WIDGET (shell_view));
- }
-}
-
-
-/**
- * e_shell_component_maybe_crashed:
- * @shell: A pointer to an EShell object
- * @uri: URI that caused the crash
- * @type_name: The type of the folder that caused the crash
- * @shell_view: Pointer to the EShellView over which we want the modal dialog
- * to appear.
- *
- * Report that a maybe crash happened when trying to display a folder of type
- * @type_name. The shell will pop up a crash dialog whose parent will be the
- * @shell_view.
- **/
-void
-e_shell_component_maybe_crashed (EShell *shell,
- const char *uri,
- const char *type_name,
- EShellView *shell_view)
-{
- EShellPrivate *priv;
- EvolutionShellComponentClient *component;
- GList *p;
-
- g_return_if_fail (shell != NULL);
- g_return_if_fail (E_IS_SHELL (shell));
- g_return_if_fail (type_name != NULL);
- g_return_if_fail (shell_view != NULL);
- g_return_if_fail (E_IS_SHELL_VIEW (shell_view));
-
- priv = shell->priv;
-
- if (strncmp (uri, E_SHELL_URI_PREFIX, E_SHELL_URI_PREFIX_LEN) == 0) {
- const char *path;
-
- path = uri + E_SHELL_URI_PREFIX_LEN;
- if (e_storage_set_get_folder (priv->storage_set, path) == NULL)
- return;
- }
-
- component = e_folder_type_registry_get_handler_for_type (priv->folder_type_registry, type_name);
- if (component != NULL
- && bonobo_unknown_ping (evolution_shell_component_client_corba_objref (component), NULL))
- return;
-
- /* See if that type has caused a crash already. */
-
- for (p = priv->crash_type_names; p != NULL; p = p->next) {
- const char *crash_type_name;
-
- crash_type_name = (const char *) p->data;
- if (strcmp (type_name, crash_type_name) == 0) {
- /* This type caused a crash already. */
- return;
- }
- }
-
- /* New crash. */
-
- priv->crash_type_names = g_list_prepend (priv->crash_type_names, g_strdup (type_name));
-
- e_notice (shell_view, GTK_MESSAGE_ERROR,
- _("The Evolution component that handles folders of type \"%s\"\n"
- "has unexpectedly quit. You will need to quit Evolution and restart\n"
- "in order to access that data again."),
- type_name);
-
- if (shell_view)
- bonobo_ui_engine_deregister_dead_components (bonobo_window_get_ui_engine (BONOBO_WINDOW (shell_view)));
-
- /* FIXME: we should probably re-start the component here */
-}
-
-
-/* Offline/online handling. */
-
-static void
-offline_procedure_started_cb (EShellOfflineHandler *offline_handler,
- void *data)
-{
- EShell *shell;
- EShellPrivate *priv;
-
- shell = E_SHELL (data);
- priv = shell->priv;
-
- priv->line_status = E_SHELL_LINE_STATUS_GOING_OFFLINE;
- g_signal_emit (shell, signals[LINE_STATUS_CHANGED], 0, priv->line_status);
-}
-
-static void
-offline_procedure_finished_cb (EShellOfflineHandler *offline_handler,
- gboolean now_offline,
- void *data)
-{
- EShell *shell;
- EShellPrivate *priv;
-
- shell = E_SHELL (data);
- priv = shell->priv;
-
- if (now_offline)
- priv->line_status = E_SHELL_LINE_STATUS_OFFLINE;
- else
- priv->line_status = E_SHELL_LINE_STATUS_ONLINE;
-
- g_object_unref (priv->offline_handler);
- priv->offline_handler = NULL;
-
- g_signal_emit (shell, signals[LINE_STATUS_CHANGED], 0, priv->line_status);
-}
-
-/**
- * e_shell_get_line_status:
- * @shell: A pointer to an EShell object.
- *
- * Get the line status for @shell.
- *
- * Return value: The current line status for @shell.
- **/
-EShellLineStatus
-e_shell_get_line_status (EShell *shell)
-{
- g_return_val_if_fail (shell != NULL, E_SHELL_LINE_STATUS_OFFLINE);
- g_return_val_if_fail (E_IS_SHELL (shell), E_SHELL_LINE_STATUS_OFFLINE);
-
- return shell->priv->line_status;
-}
-
-/**
- * e_shell_go_offline:
- * @shell:
- * @action_view:
- *
- * Make the shell go into off-line mode.
- **/
-void
-e_shell_go_offline (EShell *shell,
- EShellView *action_view)
-{
- EShellPrivate *priv;
-
- g_return_if_fail (shell != NULL);
- g_return_if_fail (E_IS_SHELL (shell));
- g_return_if_fail (action_view != NULL);
- g_return_if_fail (action_view == NULL || E_IS_SHELL_VIEW (action_view));
-
- priv = shell->priv;
-
- if (priv->line_status != E_SHELL_LINE_STATUS_ONLINE)
- return;
-
- g_assert (priv->offline_handler == NULL);
-
- priv->offline_handler = e_shell_offline_handler_new (shell);
-
- g_signal_connect (priv->offline_handler, "offline_procedure_started",
- G_CALLBACK (offline_procedure_started_cb), shell);
- g_signal_connect (priv->offline_handler, "offline_procedure_finished",
- G_CALLBACK (offline_procedure_finished_cb), shell);
-
- e_shell_offline_handler_put_components_offline (priv->offline_handler, action_view);
-}
-
-/**
- * e_shell_go_online:
- * @shell:
- * @action_view:
- *
- * Make the shell go into on-line mode.
- **/
-void
-e_shell_go_online (EShell *shell,
- EShellView *action_view)
-{
- EShellPrivate *priv;
- GList *component_ids;
- GList *p;
-
- g_return_if_fail (shell != NULL);
- g_return_if_fail (E_IS_SHELL (shell));
- g_return_if_fail (action_view == NULL || E_IS_SHELL_VIEW (action_view));
-
- priv = shell->priv;
-
- component_ids = e_component_registry_get_id_list (priv->component_registry);
-
- for (p = component_ids; p != NULL; p = p->next) {
- CORBA_Environment ev;
- EvolutionShellComponentClient *client;
- GNOME_Evolution_Offline offline_interface;
- const char *id;
-
- id = (const char *) p->data;
- client = e_component_registry_get_component_by_id (priv->component_registry, id);
-
- CORBA_exception_init (&ev);
-
- offline_interface = evolution_shell_component_client_get_offline_interface (client);
-
- if (CORBA_Object_is_nil (offline_interface, &ev) || ev._major != CORBA_NO_EXCEPTION) {
- CORBA_exception_free (&ev);
- continue;
- }
-
- GNOME_Evolution_Offline_goOnline (offline_interface, &ev);
- if (ev._major != CORBA_NO_EXCEPTION)
- g_warning ("Error putting component `%s' online.", id);
-
- CORBA_exception_free (&ev);
- }
-
- e_free_string_list (component_ids);
-
- priv->line_status = E_SHELL_LINE_STATUS_ONLINE;
- g_signal_emit (shell, signals[LINE_STATUS_CHANGED], 0, priv->line_status);
-}
-
-
-void
-e_shell_send_receive (EShell *shell)
-{
- EShellPrivate *priv;
- GList *id_list;
- GList *p;
-
- g_return_if_fail (E_IS_SHELL (shell));
-
- priv = shell->priv;
-
- id_list = e_component_registry_get_id_list (priv->component_registry);
-
- for (p = id_list; p != NULL; p = p->next) {
- EvolutionShellComponentClient *component_client;
- CORBA_Environment ev;
- const char *id;
-
- id = (const char *) p->data;
- component_client = e_component_registry_get_component_by_id (priv->component_registry, id);
-
- CORBA_exception_init (&ev);
-
- GNOME_Evolution_ShellComponent_sendReceive
- (evolution_shell_component_client_corba_objref (component_client), TRUE, &ev);
-
- if (BONOBO_EX (&ev))
- g_warning ("Error invoking Send/Receive on %s -- %s", id, BONOBO_EX_REPOID (&ev));
-
- CORBA_exception_free (&ev);
- }
-
- e_free_string_list (id_list);
-}
-
-void
-e_shell_show_settings (EShell *shell, const char *type, EShellView *shell_view)
-{
- EShellPrivate *priv;
-
- g_return_if_fail (shell != NULL);
- g_return_if_fail (E_IS_SHELL (shell));
-
- priv = shell->priv;
-
- if (priv->settings_dialog != NULL) {
- gdk_window_show (priv->settings_dialog->window);
- gtk_widget_grab_focus (priv->settings_dialog);
- return;
- }
-
- priv->settings_dialog = e_shell_settings_dialog_new ();
-
- if (type != NULL)
- e_shell_settings_dialog_show_type (E_SHELL_SETTINGS_DIALOG (priv->settings_dialog), type);
-
- g_object_add_weak_pointer (G_OBJECT (priv->settings_dialog), (void **) & priv->settings_dialog);
-
- gtk_widget_show (priv->settings_dialog);
-}
-
-
-EComponentRegistry *
-e_shell_get_component_registry (EShell *shell)
-{
- g_return_val_if_fail (shell != NULL, NULL);
- g_return_val_if_fail (E_IS_SHELL (shell), NULL);
-
- return shell->priv->component_registry;
-}
-
-EShellUserCreatableItemsHandler *
-e_shell_get_user_creatable_items_handler (EShell *shell)
-{
- g_return_val_if_fail (shell != NULL, NULL);
- g_return_val_if_fail (E_IS_SHELL (shell), NULL);
-
- return shell->priv->user_creatable_items_handler;
-}
-
-
-/* FIXME: These are ugly hacks, they really should not be needed. */
-
-void
-e_shell_unregister_all (EShell *shell)
-{
- EShellPrivate *priv;
-
- g_return_if_fail (E_IS_SHELL (shell));
-
- /* FIXME: This really really sucks. */
-
- priv = shell->priv;
-
- priv->is_initialized = FALSE;
-
- g_object_unref (priv->component_registry);
- priv->component_registry = NULL;
-}
-
-
-const char *
-e_shell_construct_result_to_string (EShellConstructResult result)
-{
- switch (result) {
- case E_SHELL_CONSTRUCT_RESULT_OK:
- return _("OK");
- case E_SHELL_CONSTRUCT_RESULT_INVALIDARG:
- return _("Invalid arguments");
- case E_SHELL_CONSTRUCT_RESULT_CANNOTREGISTER:
- return _("Cannot register on OAF");
- case E_SHELL_CONSTRUCT_RESULT_NOCONFIGDB:
- return _("Configuration Database not found");
- case E_SHELL_CONSTRUCT_RESULT_GENERICERROR:
- return _("Generic error");
- default:
- return _("Unknown error");
- }
-}
-
-
-static void
-prepare_for_quit_callback (EvolutionShellComponentClient *client,
- EvolutionShellComponentResult result,
- void *data)
-{
- GNOME_Evolution_ShellComponentListener_Result *result_return;
-
- result_return = (GNOME_Evolution_ShellComponentListener_Result *) data;
- *result_return = result;
-}
-
-gboolean
-e_shell_prepare_for_quit (EShell *shell)
-{
- EShellPrivate *priv;
- GList *component_ids;
- GList *p;
- gboolean retval;
-
- g_return_val_if_fail (E_IS_SHELL (shell), FALSE);
-
- priv = shell->priv;
- priv->preparing_to_quit = TRUE;
-
- /* Make all the views insensitive so we have some modal-like
- behavior. */
- for (p = priv->views; p != NULL; p = p->next)
- gtk_widget_set_sensitive (GTK_WIDGET (p->data), FALSE);
-
- component_ids = e_component_registry_get_id_list (priv->component_registry);
-
- for (p = component_ids; p != NULL; p = p->next) {
- EvolutionShellComponentClient *client;
- const char *id;
- GNOME_Evolution_ShellComponentListener_Result result;
-
- id = (const char *) p->data;
- client = e_component_registry_get_component_by_id (priv->component_registry, id);
-
- result = (GNOME_Evolution_ShellComponentListener_Result) -1;
-
- evolution_shell_component_client_request_quit (client, prepare_for_quit_callback, &result);
-
- while (result == (GNOME_Evolution_ShellComponentListener_Result) -1)
- gtk_main_iteration ();
-
- if (result == GNOME_Evolution_ShellComponentListener_CANCEL) {
- retval = FALSE;
- goto end;
- }
- }
-
- retval = TRUE;
-
- end:
- /* Restore all the views to be sensitive. */
- for (p = priv->views; p != NULL; p = p->next)
- gtk_widget_set_sensitive (GTK_WIDGET (p->data), TRUE);
- priv->preparing_to_quit = FALSE;
-
- e_free_string_list (component_ids);
- return retval;
-}
-
-
-/* URI parsing. */
-
-static gboolean
-parse_default_uri (EShell *shell,
- const char *uri,
- char **path_return,
- char **extra_return)
-{
- GConfClient *client;
- const char *component_start;
- char *component;
- const char *p;
- char *config_path;
- char *path;
-
- component_start = uri + E_SHELL_DEFAULTURI_PREFIX_LEN;
- p = strchr (uri, '#');
-
- if (p == NULL)
- component = g_strdup (component_start);
- else
- component = g_strndup (component_start, p - component_start);
-
- client = gconf_client_get_default ();
-
- config_path = g_strdup_printf ("/apps/evolution/shell/default_folders/%s_path", component);
- path = gconf_client_get_string (client, config_path, NULL);
- g_object_unref (client);
- g_free (component);
- g_free (config_path);
-
- /* We expect an evolution: URI here, if we don't get it then something
- is messed up. */
- if (path == NULL || strncmp (path, E_SHELL_URI_PREFIX, E_SHELL_URI_PREFIX_LEN) != 0) {
- g_free (path);
- if (path_return != NULL)
- *path_return = NULL;
- if (extra_return != NULL)
- *extra_return = NULL;
- return FALSE;
- }
-
- if (path_return != NULL)
- *path_return = g_strdup (path + E_SHELL_URI_PREFIX_LEN);
-
- if (extra_return != NULL) {
- if (p == NULL)
- *extra_return = NULL;
- else
- *extra_return = g_strdup (p + 1);
- }
-
- g_free (path);
- return TRUE;
-}
-
-static gboolean
-parse_evolution_uri (EShell *shell,
- const char *uri,
- char **path_return,
- char **extra_return)
-{
- const char *path_start;
- const char *p;
-
- path_start = uri + E_SHELL_URI_PREFIX_LEN;
- p = strchr (path_start, '#');
-
- if (p != NULL && path_return != NULL)
- *path_return = g_strndup (path_start, p - path_start);
- else
- *path_return = g_strdup (path_start);
-
- if (extra_return != NULL) {
- if (p == NULL)
- *extra_return = NULL;
- else
- *extra_return = g_strdup (p + 1);
- }
-
- return TRUE;
-}
-
-gboolean
-e_shell_parse_uri (EShell *shell,
- const char *uri,
- char **path_return,
- char **extra_return)
-{
- g_return_val_if_fail (uri != NULL, FALSE);
-
- if (strncmp (uri, E_SHELL_DEFAULTURI_PREFIX, E_SHELL_DEFAULTURI_PREFIX_LEN) == 0)
- return parse_default_uri (shell, uri, path_return, extra_return);
-
- if (strncmp (uri, E_SHELL_URI_PREFIX, E_SHELL_URI_PREFIX_LEN) == 0)
- return parse_evolution_uri (shell, uri, path_return, extra_return);
-
- *path_return = NULL;
- if (extra_return != NULL)
- *extra_return = NULL;
- return FALSE;
-}
-
-
-BONOBO_TYPE_FUNC_FULL (EShell,
- GNOME_Evolution_Shell,
- PARENT_TYPE,
- e_shell)
diff --git a/shell/e-shell.h b/shell/e-shell.h
deleted file mode 100644
index 4f1b1aaf7b..0000000000
--- a/shell/e-shell.h
+++ /dev/null
@@ -1,170 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-shell.h
- *
- * Copyright (C) 2000 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifndef _E_SHELL_H_
-#define _E_SHELL_H_
-
-#include <bonobo-activation/bonobo-activation.h>
-#include <bonobo/bonobo-object.h>
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-typedef struct _EShell EShell;
-typedef struct _EShellPrivate EShellPrivate;
-typedef struct _EShellClass EShellClass;
-
-#include "Evolution.h"
-
-#include "e-component-registry.h"
-#include "e-shell-view.h"
-#include "e-uri-schema-registry.h"
-#include "e-shell-user-creatable-items-handler.h"
-#include "e-local-storage.h"
-
-
-#define E_TYPE_SHELL (e_shell_get_type ())
-#define E_SHELL(obj) (GTK_CHECK_CAST ((obj), E_TYPE_SHELL, EShell))
-#define E_SHELL_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_SHELL, EShellClass))
-#define E_IS_SHELL(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_SHELL))
-#define E_IS_SHELL_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_SHELL))
-
-
-enum _EShellLineStatus {
- E_SHELL_LINE_STATUS_ONLINE,
- E_SHELL_LINE_STATUS_GOING_OFFLINE,
- E_SHELL_LINE_STATUS_OFFLINE
-};
-typedef enum _EShellLineStatus EShellLineStatus;
-
-enum _EShellStartupLineMode {
- E_SHELL_STARTUP_LINE_MODE_CONFIG,
- E_SHELL_STARTUP_LINE_MODE_ONLINE,
- E_SHELL_STARTUP_LINE_MODE_OFFLINE
-};
-typedef enum _EShellStartupLineMode EShellStartupLineMode;
-
-struct _EShell {
- BonoboObject parent;
-
- EShellPrivate *priv;
-};
-
-struct _EShellClass {
- BonoboObjectClass parent_class;
-
- POA_GNOME_Evolution_Shell__epv epv;
-
- void (* no_views_left) (EShell *shell);
- void (* line_status_changed) (EShell *shell, EShellLineStatus status);
- void (* new_view_created) (EShell *shell, EShellView *view);
-
-};
-
-
-/* ID for registering the shell in the OAF name service. */
-#define E_SHELL_OAFIID "OAFIID:GNOME_Evolution_Shell"
-
-enum _EShellConstructResult {
- E_SHELL_CONSTRUCT_RESULT_OK,
- E_SHELL_CONSTRUCT_RESULT_INVALIDARG,
- E_SHELL_CONSTRUCT_RESULT_CANNOTREGISTER,
- E_SHELL_CONSTRUCT_RESULT_NOCONFIGDB,
- E_SHELL_CONSTRUCT_RESULT_GENERICERROR
-};
-typedef enum _EShellConstructResult EShellConstructResult;
-
-
-#include "e-shortcuts.h"
-
-
-GtkType e_shell_get_type (void);
-EShellConstructResult e_shell_construct (EShell *shell,
- const char *iid,
- const char *local_directory,
- gboolean show_splash,
- EShellStartupLineMode startup_line_mode);
-EShell *e_shell_new (const char *local_directory,
- gboolean show_splash,
- EShellStartupLineMode startup_line_mode,
- EShellConstructResult *construct_result_return);
-
-EShellView *e_shell_create_view (EShell *shell,
- const char *uri,
- EShellView *template_view);
-EShellView *e_shell_create_view_from_uri_and_settings (EShell *shell,
- const char *uri,
- int view_num);
-gboolean e_shell_request_close_view (EShell *shell,
- EShellView *view);
-
-
-const char *e_shell_get_local_directory (EShell *shell);
-EShortcuts *e_shell_get_shortcuts (EShell *shell);
-EStorageSet *e_shell_get_storage_set (EShell *shell);
-ELocalStorage *e_shell_get_local_storage (EShell *shell);
-EFolderTypeRegistry *e_shell_get_folder_type_registry (EShell *shell);
-EUriSchemaRegistry *e_shell_get_uri_schema_registry (EShell *shell);
-
-gboolean e_shell_save_settings (EShell *shell);
-
-void e_shell_destroy_all_views (EShell *shell);
-
-void e_shell_unregister_all (EShell *shell);
-
-void e_shell_component_maybe_crashed (EShell *shell,
- const char *uri,
- const char *type_name,
- EShellView *shell_view);
-
-EShellLineStatus e_shell_get_line_status (EShell *shell);
-void e_shell_go_offline (EShell *shell,
- EShellView *action_view);
-void e_shell_go_online (EShell *shell,
- EShellView *action_view);
-
-void e_shell_send_receive (EShell *shell);
-void e_shell_show_settings (EShell *shell,
- const char *type,
- EShellView *shell_view);
-
-EComponentRegistry *e_shell_get_component_registry (EShell *shell);
-EShellUserCreatableItemsHandler *e_shell_get_user_creatable_items_handler (EShell *shell);
-
-gboolean e_shell_prepare_for_quit (EShell *shell);
-
-
-const char *e_shell_construct_result_to_string (EShellConstructResult result);
-
-
-gboolean e_shell_parse_uri (EShell *shell,
- const char *uri,
- char **path_return,
- char **extra_return);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* _E_SHELL_H_ */
diff --git a/shell/e-shortcuts-view-model.c b/shell/e-shortcuts-view-model.c
deleted file mode 100644
index e7fb8c23fb..0000000000
--- a/shell/e-shortcuts-view-model.c
+++ /dev/null
@@ -1,341 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-shortcuts-view-model.c
- *
- * Copyright (C) 2000 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-/* FIXME. This really sucks. We are using the model/view approach in the
- dumbest possible way. */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "e-shortcuts-view-model.h"
-
-#include "e-icon-factory.h"
-
-#include <glib.h>
-#include <gtk/gtksignal.h>
-#include <libgnome/gnome-i18n.h>
-
-#include <gal/util/e-util.h>
-
-
-#define PARENT_TYPE e_shortcut_model_get_type ()
-static EShortcutModelClass *parent_class = NULL;
-
-struct _EShortcutsViewModelPrivate {
- EShortcuts *shortcuts;
-};
-
-
-/* Utility functions. */
-
-static GdkPixbuf *
-get_icon_for_item (EShortcutsViewModel *shortcuts_view_model,
- const EShortcutItem *item,
- gboolean want_mini)
-{
- EShortcutsViewModelPrivate *priv;
-
- priv = shortcuts_view_model->priv;
-
- if (item->custom_icon_name != NULL)
- return e_icon_factory_get_icon (item->custom_icon_name, want_mini);
-
- if (item->type != NULL) {
- EStorageSet *storage_set;
- EFolderTypeRegistry *folder_type_registry;
-
- storage_set = e_shell_get_storage_set (e_shortcuts_get_shell (priv->shortcuts));
- folder_type_registry = e_storage_set_get_folder_type_registry (storage_set);
-
- return e_folder_type_registry_get_icon_for_type (folder_type_registry,
- item->type,
- want_mini);
- }
-
- return NULL;
-}
-
-
-/* View initialization. */
-
-static char *
-get_name_with_unread (const EShortcutItem *item)
-{
- if (item->unread_count > 0)
- return g_strdup_printf ("%s (%d)", item->name, item->unread_count);
- else
- return g_strdup (item->name);
-}
-
-static void
-load_group_into_model (EShortcutsViewModel *shortcuts_view_model,
- int group_num)
-{
- EShortcutsViewModelPrivate *priv;
- const GSList *shortcut_list;
- const GSList *p;
-
- priv = shortcuts_view_model->priv;
-
- shortcut_list = e_shortcuts_get_shortcuts_in_group (priv->shortcuts, group_num);
- if (shortcut_list == NULL)
- return;
-
- for (p = shortcut_list; p != NULL; p = p->next) {
- const EShortcutItem *item;
- char *name_with_unread;
-
- item = (const EShortcutItem *) p->data;
- name_with_unread = get_name_with_unread (item);
-
- e_shortcut_model_add_item (E_SHORTCUT_MODEL (shortcuts_view_model),
- group_num, -1,
- item->uri,
- name_with_unread,
- get_icon_for_item (shortcuts_view_model, item, FALSE));
-
- g_free (name_with_unread);
- }
-}
-
-static void
-load_all_shortcuts_into_model (EShortcutsViewModel *shortcuts_view_model)
-{
- EShortcutsViewModelPrivate *priv;
- const GSList *group_titles;
- const GSList *p;
- int group_num;
-
- priv = shortcuts_view_model->priv;
-
- group_titles = e_shortcuts_get_group_titles (priv->shortcuts);
-
- for (p = group_titles; p != NULL; p = p->next) {
- const char *group_title;
-
- group_title = (const char *) p->data;
- group_num = e_shortcut_model_add_group (E_SHORTCUT_MODEL (shortcuts_view_model), -1, group_title);
-
- load_group_into_model (shortcuts_view_model, group_num);
- }
-}
-
-
-/* EShortcuts callbacks. */
-
-static void
-shortcuts_new_group_cb (EShortcuts *shortcuts,
- int group_num,
- void *data)
-{
- EShortcutsViewModel *shortcuts_view_model;
- EShortcutsViewModelPrivate *priv;
- const char *title;
-
- shortcuts_view_model = E_SHORTCUTS_VIEW_MODEL (data);
- priv = shortcuts_view_model->priv;
-
- title = e_shortcuts_get_group_title (priv->shortcuts, group_num);
- e_shortcut_model_add_group (E_SHORTCUT_MODEL (shortcuts_view_model), group_num, title);
-}
-
-static void
-shortcuts_remove_group_cb (EShortcuts *shortcuts,
- int group_num,
- void *data)
-{
- EShortcutsViewModel *shortcuts_view_model;
-
- shortcuts_view_model = E_SHORTCUTS_VIEW_MODEL (data);
- e_shortcut_model_remove_group (E_SHORTCUT_MODEL (shortcuts_view_model), group_num);
-}
-
-static void
-shortcuts_rename_group_cb (EShortcuts *shortcuts,
- int group_num,
- const char *new_title,
- void *data)
-{
- EShortcutsViewModel *shortcuts_view_model;
-
- shortcuts_view_model = E_SHORTCUTS_VIEW_MODEL (data);
-
- /* FIXME: Ideally there should be an
- e_shortcut_model_rename_group(), removing then re-add
- actually causes a flip to the next group, which we work
- around in e-shortcuts-view.c */
- e_shortcut_model_remove_group (E_SHORTCUT_MODEL (shortcuts_view_model), group_num);
- e_shortcut_model_add_group (E_SHORTCUT_MODEL (shortcuts_view_model), group_num, new_title);
- load_group_into_model (shortcuts_view_model, group_num);
-}
-
-static void
-shortcuts_new_shortcut_cb (EShortcuts *shortcuts,
- int group_num,
- int item_num,
- void *data)
-{
- EShortcutsViewModel *shortcuts_view_model;
- EShortcutsViewModelPrivate *priv;
- const EShortcutItem *shortcut_item;
- char *name_with_unread;
-
- shortcuts_view_model = E_SHORTCUTS_VIEW_MODEL (data);
- priv = shortcuts_view_model->priv;
-
- shortcut_item = e_shortcuts_get_shortcut (priv->shortcuts, group_num, item_num);
- g_assert (shortcut_item != NULL);
-
- name_with_unread = get_name_with_unread (shortcut_item);
- e_shortcut_model_add_item (E_SHORTCUT_MODEL (shortcuts_view_model),
- group_num, item_num,
- shortcut_item->uri,
- name_with_unread,
- get_icon_for_item (shortcuts_view_model, shortcut_item, FALSE));
-
- g_free (name_with_unread);
-}
-
-static void
-shortcuts_remove_shortcut_cb (EShortcuts *shortcuts,
- int group_num,
- int item_num,
- void *data)
-{
- EShortcutsViewModel *shortcuts_view_model;
-
- shortcuts_view_model = E_SHORTCUTS_VIEW_MODEL (data);
- e_shortcut_model_remove_item (E_SHORTCUT_MODEL (shortcuts_view_model), group_num, item_num);
-}
-
-static void
-shortcuts_update_shortcut_cb (EShortcuts *shortcuts,
- int group_num,
- int item_num,
- void *data)
-{
- EShortcutsViewModel *shortcuts_view_model;
- EShortcutsViewModelPrivate *priv;
- const EShortcutItem *shortcut_item;
- char *name_with_unread;
-
- shortcuts_view_model = E_SHORTCUTS_VIEW_MODEL (data);
- priv = shortcuts_view_model->priv;
-
- shortcut_item = e_shortcuts_get_shortcut (priv->shortcuts, group_num, item_num);
- g_assert (shortcut_item != NULL);
-
- name_with_unread = get_name_with_unread (shortcut_item);
- e_shortcut_model_update_item (E_SHORTCUT_MODEL (shortcuts_view_model),
- group_num, item_num,
- shortcut_item->uri,
- name_with_unread,
- get_icon_for_item (shortcuts_view_model, shortcut_item, FALSE));
-
- g_free (name_with_unread);
-}
-
-
-/* GObject methods. */
-
-static void
-impl_finalize (GObject *object)
-{
- EShortcutsViewModel *view_model;
- EShortcutsViewModelPrivate *priv;
-
- view_model = E_SHORTCUTS_VIEW_MODEL (object);
- priv = view_model->priv;
-
- g_free (priv);
-
- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
-}
-
-
-static void
-class_init (EShortcutsViewModelClass *klass)
-{
- GObjectClass *object_class;
-
- object_class = G_OBJECT_CLASS (klass);
- object_class->finalize = impl_finalize;
-
- parent_class = g_type_class_ref(e_shortcut_model_get_type ());
-}
-
-static void
-init (EShortcutsViewModel *shortcuts_view_model)
-{
- EShortcutsViewModelPrivate *priv;
-
- priv = g_new (EShortcutsViewModelPrivate, 1);
- priv->shortcuts = NULL;
-
- shortcuts_view_model->priv = priv;
-}
-
-
-void
-e_shortcuts_view_model_construct (EShortcutsViewModel *model,
- EShortcuts *shortcuts)
-{
- EShortcutsViewModelPrivate *priv;
-
- g_return_if_fail (model != NULL);
- g_return_if_fail (E_IS_SHORTCUTS_VIEW_MODEL (model));
- g_return_if_fail (shortcuts != NULL);
- g_return_if_fail (E_IS_SHORTCUTS (shortcuts));
-
- priv = model->priv;
- g_return_if_fail (priv->shortcuts == NULL);
-
- priv->shortcuts = shortcuts;
-
- load_all_shortcuts_into_model (model);
-
- g_signal_connect_object (priv->shortcuts, "new_group", G_CALLBACK (shortcuts_new_group_cb), model, 0);
- g_signal_connect_object (priv->shortcuts, "remove_group", G_CALLBACK (shortcuts_remove_group_cb), model, 0);
- g_signal_connect_object (priv->shortcuts, "rename_group", G_CALLBACK (shortcuts_rename_group_cb), model, 0);
- g_signal_connect_object (priv->shortcuts, "new_shortcut", G_CALLBACK (shortcuts_new_shortcut_cb), model, 0);
- g_signal_connect_object (priv->shortcuts, "remove_shortcut", G_CALLBACK (shortcuts_remove_shortcut_cb), model, 0);
- g_signal_connect_object (priv->shortcuts, "update_shortcut", G_CALLBACK (shortcuts_update_shortcut_cb), model, 0);
-}
-
-EShortcutsViewModel *
-e_shortcuts_view_model_new (EShortcuts *shortcuts)
-{
- EShortcutsViewModel *new;
-
- g_return_val_if_fail (shortcuts != NULL, NULL);
- g_return_val_if_fail (E_IS_SHORTCUTS (shortcuts), NULL);
-
- new = g_object_new (e_shortcuts_view_model_get_type (), NULL);
-
- e_shortcuts_view_model_construct (new, shortcuts);
-
- return new;
-}
-
-
-E_MAKE_TYPE (e_shortcuts_view_model, "EShortcutsViewModel", EShortcutsViewModel, class_init, init, PARENT_TYPE)
diff --git a/shell/e-shortcuts-view-model.h b/shell/e-shortcuts-view-model.h
deleted file mode 100644
index 45e680ecb3..0000000000
--- a/shell/e-shortcuts-view-model.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-shortcuts-view-model.h
- *
- * Copyright (C) 2000 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifndef _E_SHORTCUTS_VIEW_MODEL_H_
-#define _E_SHORTCUTS_VIEW_MODEL_H_
-
-#include <gal/shortcut-bar/e-shortcut-model.h>
-
-#include "e-shortcuts.h"
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-#define E_TYPE_SHORTCUTS_VIEW_MODEL (e_shortcuts_view_model_get_type ())
-#define E_SHORTCUTS_VIEW_MODEL(obj) (GTK_CHECK_CAST ((obj), E_TYPE_SHORTCUTS_VIEW_MODEL, EShortcutsViewModel))
-#define E_SHORTCUTS_VIEW_MODEL_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_SHORTCUTS_VIEW_MODEL, EShortcutsViewModelClass))
-#define E_IS_SHORTCUTS_VIEW_MODEL(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_SHORTCUTS_VIEW_MODEL))
-#define E_IS_SHORTCUTS_VIEW_MODEL_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_SHORTCUTS_VIEW_MODEL))
-
-
-typedef struct _EShortcutsViewModel EShortcutsViewModel;
-typedef struct _EShortcutsViewModelPrivate EShortcutsViewModelPrivate;
-typedef struct _EShortcutsViewModelClass EShortcutsViewModelClass;
-
-struct _EShortcutsViewModel {
- EShortcutModel parent;
-
- EShortcutsViewModelPrivate *priv;
-};
-
-struct _EShortcutsViewModelClass {
- EShortcutModelClass parent_class;
-};
-
-
-GtkType e_shortcuts_view_model_get_type (void);
-void e_shortcuts_view_model_construct (EShortcutsViewModel *model,
- EShortcuts *shortcuts);
-EShortcutsViewModel *e_shortcuts_view_model_new (EShortcuts *shortcuts);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* _E_SHORTCUTS_VIEW_MODEL_H_ */
diff --git a/shell/e-shortcuts-view.c b/shell/e-shortcuts-view.c
deleted file mode 100644
index 1837e67eab..0000000000
--- a/shell/e-shortcuts-view.c
+++ /dev/null
@@ -1,800 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-shortcuts-view.c
- *
- * Copyright (C) 2000, 2001 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "e-shortcuts-view.h"
-
-#include "e-folder-dnd-bridge.h"
-#include "e-shell-constants.h"
-#include "e-shell-marshal.h"
-#include "e-shortcuts-view-model.h"
-
-#include "e-util/e-request.h"
-
-#include <glib.h>
-#include <gtk/gtkcheckmenuitem.h>
-#include <gtk/gtkentry.h>
-#include <gtk/gtklabel.h>
-
-#include <libgnome/gnome-i18n.h>
-
-#include <libgnomeui/gnome-app.h>
-#include <libgnomeui/gnome-app-helper.h>
-#include <libgnomeui/gnome-popup-menu.h>
-#include <libgnomeui/gnome-uidefs.h>
-
-#include <gtk/gtkmessagedialog.h>
-#include <gtk/gtkstock.h>
-
-#include <gal/util/e-util.h>
-
-#include <string.h>
-
-
-#define PARENT_TYPE E_TYPE_SHORTCUT_BAR
-static EShortcutBarClass *parent_class = NULL;
-
-struct _EShortcutsViewPrivate {
- EShortcuts *shortcuts;
-};
-
-enum {
- ACTIVATE_SHORTCUT,
- HIDE_REQUESTED,
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = { 0 };
-
-
-/* Utility functions. */
-
-static void
-show_new_group_dialog (EShortcutsView *view)
-{
- char *group_name;
-
- group_name = e_request_string (GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (view))),
- _("Create New Shortcut Group"),
- _("Group name:"),
- NULL);
-
- if (group_name == NULL)
- return;
-
- e_shortcuts_add_group (view->priv->shortcuts, -1, group_name);
-
- g_free (group_name);
-}
-
-
-/* Shortcut bar right-click menu. */
-
-struct _RightClickMenuData {
- EShortcutsView *shortcuts_view;
- int group_num;
-};
-typedef struct _RightClickMenuData RightClickMenuData;
-
-static void
-toggle_large_icons_cb (GtkWidget *widget,
- void *data)
-{
- RightClickMenuData *menu_data;
-
- menu_data = (RightClickMenuData *) data;
-
- if (menu_data == NULL)
- return;
-
- if (! GTK_CHECK_MENU_ITEM (widget)->active)
- return;
-
- e_shortcuts_set_group_uses_small_icons (menu_data->shortcuts_view->priv->shortcuts, menu_data->group_num, FALSE);
-}
-
-static void
-toggle_small_icons_cb (GtkWidget *widget,
- void *data)
-{
- RightClickMenuData *menu_data;
-
- menu_data = (RightClickMenuData *) data;
- if (menu_data == NULL)
- return;
-
- if (! GTK_CHECK_MENU_ITEM (widget)->active)
- return;
-
- e_shortcuts_set_group_uses_small_icons (menu_data->shortcuts_view->priv->shortcuts, menu_data->group_num, TRUE);
-}
-
-static void
-hide_shortcut_bar_cb (GtkWidget *widget,
- void *data)
-{
- RightClickMenuData *menu_data;
- EShortcutsView *shortcut_view;
-
- menu_data = (RightClickMenuData *) data;
-
- shortcut_view = E_SHORTCUTS_VIEW (menu_data->shortcuts_view);
-
- g_signal_emit (shortcut_view, signals[HIDE_REQUESTED], 0);
-}
-
-static void
-create_new_group_cb (GtkWidget *widget,
- void *data)
-{
- RightClickMenuData *menu_data;
-
- menu_data = (RightClickMenuData *) data;
-
- show_new_group_dialog (menu_data->shortcuts_view);
-}
-
-static void
-destroy_group_cb (GtkWidget *widget,
- void *data)
-{
- RightClickMenuData *menu_data;
- EShortcuts *shortcuts;
- EShortcutsView *shortcuts_view;
- EShortcutsViewPrivate *priv;
- GtkWidget *message_dialog;
- GtkResponseType response;
-
- menu_data = (RightClickMenuData *) data;
- shortcuts_view = menu_data->shortcuts_view;
- priv = shortcuts_view->priv;
- shortcuts = priv->shortcuts;
-
- message_dialog = gtk_message_dialog_new (GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (menu_data->shortcuts_view))),
- GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_MODAL,
- GTK_MESSAGE_QUESTION,
- GTK_BUTTONS_NONE,
- _("Do you really want to remove group "
- "\"%s\" from the shortcut bar?"),
- e_shortcuts_get_group_title (shortcuts, menu_data->group_num));
-
- gtk_dialog_add_buttons (GTK_DIALOG (message_dialog),
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- GTK_STOCK_DELETE, GTK_RESPONSE_OK,
- NULL);
-
- gtk_window_set_title (GTK_WINDOW (message_dialog), "Remove Shortcut Group");
-
- gtk_container_set_border_width (GTK_CONTAINER (message_dialog), 6);
-
- gtk_box_set_spacing (GTK_BOX (GTK_DIALOG (message_dialog)->vbox), 6);
-
- gtk_dialog_set_default_response (GTK_DIALOG (message_dialog), GTK_RESPONSE_OK);
-
- response = gtk_dialog_run (GTK_DIALOG (message_dialog));
- gtk_widget_destroy (message_dialog);
-
- if (response == GTK_RESPONSE_OK)
- e_shortcuts_remove_group (shortcuts, menu_data->group_num);
-}
-
-static void
-rename_group_cb (GtkWidget *widget,
- void *data)
-{
- RightClickMenuData *menu_data;
- EShortcuts *shortcuts;
- EShortcutsView *shortcuts_view;
- EIconBarViewType original_view_type;
- const char *old_name;
- char *new_name;
- int group;
-
- menu_data = (RightClickMenuData *) data;
- shortcuts_view = menu_data->shortcuts_view;
- shortcuts = shortcuts_view->priv->shortcuts;
-
- old_name = e_shortcuts_get_group_title (shortcuts, menu_data->group_num);
-
- new_name = e_request_string (GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (shortcuts_view))),
- _("Rename Shortcut Group"),
- _("Rename selected shortcut group to:"),
- old_name);
-
- if (new_name == NULL)
- return;
-
- /* Remember the group and flip back to it. FIXME: This is a workaround
- to an actual ShortcutBar bug. */
-
- group = e_group_bar_get_current_group_num (E_GROUP_BAR (shortcuts_view));
- original_view_type = e_shortcut_bar_get_view_type (E_SHORTCUT_BAR (menu_data->shortcuts_view), group);
- e_shortcuts_rename_group (shortcuts, menu_data->group_num, new_name);
-
- g_free (new_name);
- e_group_bar_set_current_group_num (E_GROUP_BAR (shortcuts_view), group, FALSE);
- e_shortcut_bar_set_view_type (E_SHORTCUT_BAR (menu_data->shortcuts_view), group, original_view_type);
-}
-
-static void
-create_default_shortcuts_cb (GtkWidget *widget,
- void *data)
-{
- RightClickMenuData *menu_data;
- EShortcutsView *shortcuts_view;
-
- menu_data = (RightClickMenuData *) data;
- shortcuts_view = menu_data->shortcuts_view;
- e_shortcuts_add_default_shortcuts (shortcuts_view->priv->shortcuts,
- e_group_bar_get_current_group_num (E_GROUP_BAR (shortcuts_view)));
-}
-
-static GnomeUIInfo icon_size_radio_group_uiinfo[] = {
- { GNOME_APP_UI_ITEM, N_("_Small Icons"),
- N_("Show the shortcuts as small icons"), toggle_small_icons_cb, NULL,
- NULL, 0, 0, 0, 0 },
- { GNOME_APP_UI_ITEM, N_("_Large Icons"),
- N_("Show the shortcuts as large icons"), toggle_large_icons_cb, NULL,
- NULL, 0, 0, 0, 0 },
-
- GNOMEUIINFO_END
-};
-
-static GnomeUIInfo right_click_menu_uiinfo[] = {
- GNOMEUIINFO_RADIOLIST (icon_size_radio_group_uiinfo),
-
- GNOMEUIINFO_SEPARATOR,
-
- { GNOME_APP_UI_ITEM, N_("_Add Group..."),
- N_("Create a new shortcut group"), create_new_group_cb, NULL,
- NULL, 0, 0, 0, 0 },
- { GNOME_APP_UI_ITEM, N_("_Remove this Group..."),
- N_("Remove this shortcut group"), destroy_group_cb, NULL,
- NULL, 0, 0, 0, 0 },
- { GNOME_APP_UI_ITEM, N_("Re_name this Group..."),
- N_("Rename this shortcut group"), rename_group_cb, NULL,
- NULL, 0, 0, 0, 0 },
-
- GNOMEUIINFO_SEPARATOR,
-
- { GNOME_APP_UI_ITEM, N_("_Hide the Shortcut Bar"),
- N_("Hide the shortcut bar"), hide_shortcut_bar_cb, NULL,
- NULL, 0, 0, 0, 0 },
-
- GNOMEUIINFO_SEPARATOR,
-
- { GNOME_APP_UI_ITEM, N_("Create _Default Shortcuts"),
- N_("Create Default Shortcuts"), create_default_shortcuts_cb, NULL,
- NULL, 0, 0, 0, 0 },
-
- GNOMEUIINFO_END
-};
-
-static void
-pop_up_right_click_menu_for_group (EShortcutsView *shortcuts_view,
- GdkEventButton *event,
- int group_num)
-{
- RightClickMenuData *menu_data;
- GtkWidget *popup_menu;
-
- menu_data = g_new (RightClickMenuData, 1);
- menu_data->shortcuts_view = shortcuts_view;
- menu_data->group_num = group_num;
-
- popup_menu = gnome_popup_menu_new (right_click_menu_uiinfo);
-
- if (e_shortcut_bar_get_view_type (E_SHORTCUT_BAR (shortcuts_view), group_num)
- == E_ICON_BAR_SMALL_ICONS)
- gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (icon_size_radio_group_uiinfo[0].widget),
- TRUE);
- else
- gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (icon_size_radio_group_uiinfo[1].widget),
- TRUE);
-
- if (group_num == 0)
- gtk_widget_set_sensitive (right_click_menu_uiinfo[3].widget, FALSE);
-
- gnome_popup_menu_do_popup_modal (popup_menu, NULL, NULL, event, menu_data, GTK_WIDGET (shortcuts_view));
-
- g_free (menu_data);
- gtk_widget_destroy (popup_menu);
-}
-
-
-/* Data to be passed around for the shortcut right-click menu items. */
-
-struct _ShortcutRightClickMenuData {
- EShortcutsView *shortcuts_view;
- int group_num;
- int item_num;
-};
-typedef struct _ShortcutRightClickMenuData ShortcutRightClickMenuData;
-
-
-/* "Open Shortcut" and "Open Shortcut in New Window" commands. */
-
-static void
-open_shortcut_helper (ShortcutRightClickMenuData *menu_data,
- gboolean in_new_window)
-{
- EShortcutsView *shortcuts_view;
- EShortcuts *shortcuts;
- const EShortcutItem *shortcut_item;
-
- shortcuts_view = menu_data->shortcuts_view;
- shortcuts = shortcuts_view->priv->shortcuts;
-
- shortcut_item = e_shortcuts_get_shortcut (shortcuts, menu_data->group_num, menu_data->item_num);
- if (shortcut_item == NULL)
- return;
-
- g_signal_emit (shortcuts_view, signals[ACTIVATE_SHORTCUT], 0,
- shortcuts, shortcut_item->uri, in_new_window);
-}
-
-static void
-open_shortcut_cb (GtkWidget *widget,
- void *data)
-{
- open_shortcut_helper ((ShortcutRightClickMenuData *) data, FALSE);
-}
-
-static void
-open_shortcut_in_new_window_cb (GtkWidget *widget,
- void *data)
-{
- open_shortcut_helper ((ShortcutRightClickMenuData *) data, TRUE);
-}
-
-
-static void
-remove_shortcut_cb (GtkWidget *widget,
- void *data)
-{
- ShortcutRightClickMenuData *menu_data;
- EShortcutsView *shortcuts_view;
- EShortcuts *shortcuts;
-
- menu_data = (ShortcutRightClickMenuData *) data;
- shortcuts_view = menu_data->shortcuts_view;
- shortcuts = shortcuts_view->priv->shortcuts;
-
- e_shortcuts_remove_shortcut (shortcuts, menu_data->group_num, menu_data->item_num);
-}
-
-
-/* "Rename Shortcut" command. */
-
-static void
-rename_shortcut_cb (GtkWidget *widget,
- void *data)
-{
- ShortcutRightClickMenuData *menu_data;
- EShortcutsView *shortcuts_view;
- EShortcuts *shortcuts;
- const EShortcutItem *shortcut_item;
- char *new_name;
-
- menu_data = (ShortcutRightClickMenuData *) data;
- shortcuts_view = menu_data->shortcuts_view;
- shortcuts = shortcuts_view->priv->shortcuts;
-
- shortcut_item = e_shortcuts_get_shortcut (shortcuts, menu_data->group_num, menu_data->item_num);
-
- new_name = e_request_string (GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (shortcuts_view))),
- _("Rename Shortcut"),
- _("Rename selected shortcut to:"),
- shortcut_item->name);
-
- if (new_name == NULL)
- return;
-
- e_shortcuts_update_shortcut (shortcuts, menu_data->group_num, menu_data->item_num,
- shortcut_item->uri, new_name, shortcut_item->unread_count,
- shortcut_item->type, shortcut_item->custom_icon_name);
- g_free (new_name);
-}
-
-static GnomeUIInfo shortcut_right_click_menu_uiinfo[] = {
- GNOMEUIINFO_ITEM_STOCK (N_("_Open"), N_("Open the folder linked to this shortcut"),
- open_shortcut_cb, GTK_STOCK_OPEN),
- GNOMEUIINFO_ITEM_NONE (N_("Open in New _Window"), N_("Open the folder linked to this shortcut in a new window"),
- open_shortcut_in_new_window_cb),
- GNOMEUIINFO_SEPARATOR,
- GNOMEUIINFO_ITEM_NONE (N_("_Rename"), N_("Rename this shortcut"),
- rename_shortcut_cb),
- GNOMEUIINFO_ITEM_STOCK (N_("Re_move"), N_("Remove this shortcut from the shortcut bar"),
- remove_shortcut_cb, GTK_STOCK_REMOVE),
- GNOMEUIINFO_END
-};
-
-static void
-pop_up_right_click_menu_for_shortcut (EShortcutsView *shortcuts_view,
- GdkEventButton *event,
- int group_num,
- int item_num)
-{
- ShortcutRightClickMenuData *menu_data;
- GtkWidget *popup_menu;
-
- menu_data = g_new (ShortcutRightClickMenuData, 1);
- menu_data->shortcuts_view = shortcuts_view;
- menu_data->group_num = group_num;
- menu_data->item_num = item_num;
-
- popup_menu = gnome_popup_menu_new (shortcut_right_click_menu_uiinfo);
-
- gnome_popup_menu_do_popup_modal (popup_menu, NULL, NULL, event, menu_data, GTK_WIDGET (shortcuts_view));
-
- g_free (menu_data);
- gtk_widget_destroy (popup_menu);
-}
-
-
-/* View callbacks. This part exists mostly because of breakage in the
- EShortcutBar design. */
-
-static void
-group_change_icon_size_callback (EShortcuts *shortucts,
- int group_num,
- gboolean use_small_icons,
- void *data)
-{
- EShortcutsView *view;
-
- view = E_SHORTCUTS_VIEW (data);
-
- if (use_small_icons)
- e_shortcut_bar_set_view_type (E_SHORTCUT_BAR (view), group_num, E_ICON_BAR_SMALL_ICONS);
- else
- e_shortcut_bar_set_view_type (E_SHORTCUT_BAR (view), group_num, E_ICON_BAR_LARGE_ICONS);
-}
-
-
-/* GObject methods. */
-
-static void
-impl_dispose (GObject *object)
-{
- EShortcutsViewPrivate *priv;
- EShortcutsView *shortcuts_view;
-
- shortcuts_view = E_SHORTCUTS_VIEW (object);
-
- priv = shortcuts_view->priv;
-
- if (priv->shortcuts != NULL) {
- g_object_unref (priv->shortcuts);
- priv->shortcuts = NULL;
- }
-
- (* G_OBJECT_CLASS (parent_class)->dispose) (object);
-}
-
-static void
-impl_finalize (GObject *object)
-{
- EShortcutsView *shortcuts_view;
-
- shortcuts_view = E_SHORTCUTS_VIEW (object);
-
- g_free (shortcuts_view->priv);
-
- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
-}
-
-
-/* EShortcutBar methods. */
-
-static void
-item_selected (EShortcutBar *shortcut_bar,
- GdkEvent *event,
- int group_num,
- int item_num)
-{
- EShortcuts *shortcuts;
- EShortcutsView *shortcuts_view;
- const EShortcutItem *shortcut_item;
-
- shortcuts_view = E_SHORTCUTS_VIEW (shortcut_bar);
- shortcuts = shortcuts_view->priv->shortcuts;
-
- if (event->button.button == 3) {
- if (item_num < 0)
- pop_up_right_click_menu_for_group (shortcuts_view, &event->button,
- group_num);
- else
- pop_up_right_click_menu_for_shortcut (shortcuts_view, &event->button,
- group_num, item_num);
- return;
- } else if (event->button.button != 1) {
- return;
- }
-
- if (item_num < 0)
- return;
-
- shortcut_item = e_shortcuts_get_shortcut (shortcuts, group_num, item_num);
- if (shortcut_item == NULL)
- return;
-
- g_signal_emit (shortcuts_view, signals[ACTIVATE_SHORTCUT], 0,
- shortcuts, shortcut_item->uri, FALSE);
-}
-
-static void
-get_shortcut_info (EShortcutsView *shortcuts_view,
- const char *item_uri,
- int *unread_count_return,
- const char **type_return,
- const char **custom_icon_name_return)
-{
- EShortcutsViewPrivate *priv;
- EStorageSet *storage_set;
- EFolder *folder;
- EShell *shell;
- char *path;
-
- priv = shortcuts_view->priv;
-
- shell = e_shortcuts_get_shell (priv->shortcuts);
-
- if (! e_shell_parse_uri (shell, item_uri, &path, NULL)) {
- *unread_count_return = 0;
- *type_return = NULL;
- *custom_icon_name_return = NULL;
- return;
- }
-
- storage_set = e_shell_get_storage_set (shell);
-
- folder = e_storage_set_get_folder (storage_set, path);
- if (folder != NULL) {
- *unread_count_return = e_folder_get_unread_count (folder);
- *type_return = e_folder_get_type_string (folder);
- *custom_icon_name_return = e_folder_get_custom_icon_name (folder);
- } else {
- *unread_count_return = 0;
- *type_return = NULL;
- *custom_icon_name_return = NULL;
- }
-
- g_free (path);
-}
-
-static void
-impl_shortcut_dropped (EShortcutBar *shortcut_bar,
- int group_num,
- int position,
- const char *item_url,
- const char *item_name)
-{
- EShortcutsView *shortcuts_view;
- EShortcutsViewPrivate *priv;
- int unread_count;
- const char *type;
- const char *custom_icon_name;
- char *tmp;
- char *tp;
- char *name_without_unread;
-
- shortcuts_view = E_SHORTCUTS_VIEW (shortcut_bar);
- priv = shortcuts_view->priv;
-
- get_shortcut_info (shortcuts_view, item_url, &unread_count, &type, &custom_icon_name);
-
- /* Looks funny, but keeps it from adding the unread count
- repeatedly when dragging folders around */
- tmp = g_strdup_printf (" (%d)", unread_count);
- if ((tp = strstr (item_name, tmp)) != NULL)
- name_without_unread = g_strndup (item_name, strlen (item_name) - strlen (tp));
- else
- name_without_unread = g_strdup (item_name);
-
- e_shortcuts_add_shortcut (priv->shortcuts,
- group_num, position,
- item_url,
- name_without_unread,
- unread_count,
- type,
- custom_icon_name);
-
- g_free (tmp);
- g_free (name_without_unread);
-}
-
-static void
-impl_shortcut_dragged (EShortcutBar *shortcut_bar,
- gint group_num,
- gint item_num)
-{
- EShortcutsView *shortcuts_view;
- EShortcutsViewPrivate *priv;
-
- shortcuts_view = E_SHORTCUTS_VIEW (shortcut_bar);
- priv = shortcuts_view->priv;
-
- e_shortcuts_remove_shortcut (priv->shortcuts, group_num, item_num);
-}
-
-static gboolean
-impl_shortcut_drag_motion (EShortcutBar *shortcut_bar,
- GtkWidget *widget,
- GdkDragContext *context,
- guint time,
- gint group_num,
- gint item_num)
-{
- EShortcutsView *view;
- EShortcutsViewPrivate *priv;
- const EShortcutItem *shortcut;
-
- view = E_SHORTCUTS_VIEW (shortcut_bar);
- priv = view->priv;
-
- shortcut = e_shortcuts_get_shortcut (priv->shortcuts, group_num, item_num);
- if (shortcut == NULL)
- return FALSE;
- if (strncmp (shortcut->uri, E_SHELL_URI_PREFIX, E_SHELL_URI_PREFIX_LEN) != 0)
- return FALSE;
-
- if (! e_folder_dnd_bridge_motion (widget, context, time,
- e_shell_get_storage_set (e_shortcuts_get_shell (priv->shortcuts)),
- shortcut->uri + E_SHELL_URI_PREFIX_LEN))
- gdk_drag_status (context, 0, time);
-
- return TRUE;
-}
-
-static gboolean
-impl_shortcut_drag_data_received (EShortcutBar *shortcut_bar,
- GtkWidget *widget,
- GdkDragContext *context,
- GtkSelectionData *selection_data,
- guint time,
- gint group_num,
- gint item_num)
-{
- EShortcutsView *view;
- EShortcutsViewPrivate *priv;
- const EShortcutItem *shortcut;
-
- view = E_SHORTCUTS_VIEW (shortcut_bar);
- priv = view->priv;
-
- shortcut = e_shortcuts_get_shortcut (priv->shortcuts, group_num, item_num);
- if (shortcut == NULL)
- return FALSE;
- if (strncmp (shortcut->uri, E_SHELL_URI_PREFIX, E_SHELL_URI_PREFIX_LEN) != 0)
- return FALSE;
-
- e_folder_dnd_bridge_data_received (widget, context, selection_data, time,
- e_shell_get_storage_set (e_shortcuts_get_shell (priv->shortcuts)),
- shortcut->uri + E_SHELL_URI_PREFIX_LEN);
- return TRUE;
-}
-
-
-static void
-class_init (EShortcutsViewClass *klass)
-{
- GObjectClass *object_class;
- EShortcutBarClass *shortcut_bar_class;
-
- object_class = G_OBJECT_CLASS (klass);
- object_class->dispose = impl_dispose;
- object_class->finalize = impl_finalize;
-
- shortcut_bar_class = E_SHORTCUT_BAR_CLASS (klass);
- shortcut_bar_class->item_selected = item_selected;
- shortcut_bar_class->shortcut_dropped = impl_shortcut_dropped;
- shortcut_bar_class->shortcut_dragged = impl_shortcut_dragged;
- shortcut_bar_class->shortcut_drag_motion = impl_shortcut_drag_motion;
- shortcut_bar_class->shortcut_drag_data_received = impl_shortcut_drag_data_received;
-
- parent_class = g_type_class_ref(e_shortcut_bar_get_type ());
-
- signals[ACTIVATE_SHORTCUT] =
- g_signal_new ("activate_shortcut",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
- G_STRUCT_OFFSET (EShortcutsViewClass, activate_shortcut),
- NULL, NULL,
- e_shell_marshal_NONE__POINTER_STRING_BOOL,
- G_TYPE_NONE, 3,
- G_TYPE_POINTER,
- G_TYPE_STRING,
- G_TYPE_BOOLEAN);
-
- signals[HIDE_REQUESTED] =
- g_signal_new ("hide_requested",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (EShortcutsViewClass,
- hide_requested),
- NULL, NULL,
- e_shell_marshal_NONE__NONE,
- G_TYPE_NONE, 0);
-}
-
-static void
-init (EShortcutsView *shortcuts_view)
-{
- EShortcutsViewPrivate *priv;
-
- priv = g_new (EShortcutsViewPrivate, 1);
- priv->shortcuts = NULL;
-
- shortcuts_view->priv = priv;
-}
-
-
-void
-e_shortcuts_view_construct (EShortcutsView *shortcuts_view,
- EShortcuts *shortcuts)
-{
- EShortcutsViewPrivate *priv;
- int i, num_groups;
-
- g_return_if_fail (shortcuts != NULL);
- g_return_if_fail (E_IS_SHORTCUTS (shortcuts));
-
- priv = shortcuts_view->priv;
-
- priv->shortcuts = shortcuts;
- g_object_ref (priv->shortcuts);
-
- e_shortcut_bar_set_model (E_SHORTCUT_BAR (shortcuts_view),
- E_SHORTCUT_MODEL (e_shortcuts_view_model_new (shortcuts)));
-
- g_signal_connect_object (shortcuts, "group_change_icon_size",
- G_CALLBACK (group_change_icon_size_callback), shortcuts_view, 0);
-
- num_groups = e_shortcuts_get_num_groups (shortcuts);
- for (i = 0; i < num_groups; i ++) {
- if (e_shortcuts_get_group_uses_small_icons (shortcuts, i))
- e_shortcut_bar_set_view_type (E_SHORTCUT_BAR (shortcuts_view), i, E_ICON_BAR_SMALL_ICONS);
- else
- e_shortcut_bar_set_view_type (E_SHORTCUT_BAR (shortcuts_view), i, E_ICON_BAR_LARGE_ICONS);
- }
-}
-
-GtkWidget *
-e_shortcuts_view_new (EShortcuts *shortcuts)
-{
- GtkWidget *new;
-
- g_return_val_if_fail (shortcuts != NULL, NULL);
- g_return_val_if_fail (E_IS_SHORTCUTS (shortcuts), NULL);
-
- new = g_object_new (e_shortcuts_view_get_type (), NULL);
- e_shortcuts_view_construct (E_SHORTCUTS_VIEW (new), shortcuts);
-
- return new;
-}
-
-
-E_MAKE_TYPE (e_shortcuts_view, "EShortcutsView", EShortcutsView, class_init, init, PARENT_TYPE)
diff --git a/shell/e-shortcuts-view.h b/shell/e-shortcuts-view.h
deleted file mode 100644
index e905fabdc8..0000000000
--- a/shell/e-shortcuts-view.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-shortcuts-view.h
- *
- * Copyright (C) 2000 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifndef _E_SHORTCUTS_VIEW_H_
-#define _E_SHORTCUTS_VIEW_H_
-
-#include <gtk/gtkwidget.h>
-
-#include <gal/shortcut-bar/e-shortcut-bar.h>
-#include "e-shortcuts.h"
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-#define E_TYPE_SHORTCUTS_VIEW (e_shortcuts_view_get_type ())
-#define E_SHORTCUTS_VIEW(obj) (GTK_CHECK_CAST ((obj), E_TYPE_SHORTCUTS_VIEW, EShortcutsView))
-#define E_SHORTCUTS_VIEW_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_SHORTCUTS_VIEW, EShortcutsViewClass))
-#define E_IS_SHORTCUTS_VIEW(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_SHORTCUTS_VIEW))
-#define E_IS_SHORTCUTS_VIEW_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_SHORTCUTS_VIEW))
-
-
-typedef struct _EShortcutsView EShortcutsView;
-typedef struct _EShortcutsViewPrivate EShortcutsViewPrivate;
-typedef struct _EShortcutsViewClass EShortcutsViewClass;
-
-struct _EShortcutsView {
- EShortcutBar parent;
-
- EShortcutsViewPrivate *priv;
-};
-
-struct _EShortcutsViewClass {
- EShortcutBarClass parent_class;
-
- void (* activate_shortcut) (EShortcutsView *view,
- EShortcuts *shortcuts,
- const char *uri,
- gboolean in_new_window);
-
- void (* hide_requested) (EShortcutsView *view);
-};
-
-
-GtkType e_shortcuts_view_get_type (void);
-void e_shortcuts_view_construct (EShortcutsView *shortcuts_view,
- EShortcuts *shortcuts);
-GtkWidget *e_shortcuts_view_new (EShortcuts *shortcuts);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* _E_SHORTCUTS_VIEW_H_ */
diff --git a/shell/e-shortcuts.c b/shell/e-shortcuts.c
deleted file mode 100644
index 5def82dcdb..0000000000
--- a/shell/e-shortcuts.c
+++ /dev/null
@@ -1,1288 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-shortcuts.c
- *
- * Copyright (C) 2000, 2001 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-/* The shortcut list goes like this:
-
- <?xml version="1.0"?>
- <shortcuts>
- <group title="Evolution shortcuts">
- <item name="Inbox" type="mail">evolution:/local/Inbox</item>
- <item name="Trash" type="vtrash">evolution:/local/Trash</item>
- <item name="Calendar" type="calendar">evolution:/local/Calendar</item>
- </group>
-
- <group title="Personal shortcuts">
- <item>evolution:/local/Personal</item>
- </group>
- </shortcuts>
-
- FIXME: Do we want to use a namespace for this?
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "e-shortcuts.h"
-
-#include <string.h>
-
-#include <glib.h>
-#include <gtk/gtkmain.h>
-#include <gtk/gtkobject.h>
-#include <gtk/gtksignal.h>
-#include <gtk/gtktypeutils.h>
-
-#include <libxml/parser.h>
-#include <libxml/xmlmemory.h>
-
-#include <libgnome/gnome-i18n.h>
-
-#include <gal/util/e-xml-utils.h>
-#include <gal/util/e-util.h>
-#include <gal/shortcut-bar/e-shortcut-bar.h>
-
-#include "e-shortcuts-view.h"
-
-#include "e-shell-constants.h"
-#include "e-shell-marshal.h"
-
-
-#define PARENT_TYPE GTK_TYPE_OBJECT
-static GtkObjectClass *parent_class = NULL;
-
-struct _ShortcutGroup {
- /* Title of the group. */
- char *title;
-
- /* A list of shortcuts. */
- GSList *shortcuts;
-
- /* Whether to use small icons for this group. */
- unsigned int use_small_icons : 1;
-};
-typedef struct _ShortcutGroup ShortcutGroup;
-
-struct _EShortcutsPrivate {
- /* Name of the file associated with these shortcuts. Changes in the shortcuts
- will update this file automatically. */
- char *file_name;
-
- /* ID of the idle function that will be called to save the shortcuts when they are
- changed. */
- int save_idle_id;
-
- /* Whether these shortcuts need to be saved to disk. */
- gboolean dirty;
-
- /* The shell that is associated with these shortcuts. */
- EShell *shell;
-
- /* Total number of groups. */
- int num_groups;
-
- /* A list of ShortcutGroups. */
- GSList *groups;
-
- /* A list of ShortcutViews. */
- GSList *views;
-};
-
-enum {
- NEW_GROUP,
- REMOVE_GROUP,
- RENAME_GROUP,
- GROUP_CHANGE_ICON_SIZE,
- NEW_SHORTCUT,
- REMOVE_SHORTCUT,
- UPDATE_SHORTCUT,
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = { 0 };
-
-
-static void make_dirty (EShortcuts *shortcuts);
-
-
-static EShortcutItem *
-shortcut_item_new (const char *uri,
- const char *name,
- int unread_count,
- const char *type,
- const char *custom_icon_name)
-{
- EShortcutItem *new;
-
- new = g_new (EShortcutItem, 1);
-
- if (name == NULL)
- new->name = g_path_get_basename (uri);
- else
- new->name = g_strdup (name);
-
- new->uri = g_strdup (uri);
- new->type = g_strdup (type);
- new->custom_icon_name = g_strdup (custom_icon_name);
- new->unread_count = unread_count;
-
- return new;
-}
-
-static gboolean
-shortcut_item_update (EShortcutItem *shortcut_item,
- const char *uri,
- const char *name,
- int unread_count,
- const char *type,
- const char *custom_icon_name)
-{
- char *base_name = g_path_get_basename (uri);
- gboolean changed = FALSE;
-
- if (name == NULL)
- name = base_name;
-
- if (shortcut_item->unread_count != unread_count) {
- shortcut_item->unread_count = unread_count;
- changed = TRUE;
- }
-
-#define UPDATE_STRING(member) \
- if (shortcut_item->member == NULL || member == NULL || \
- strcmp (shortcut_item->member, member) != 0) { \
- g_free (shortcut_item->member); \
- shortcut_item->member = g_strdup (member); \
- changed = TRUE; \
- }
-
- UPDATE_STRING (uri);
- UPDATE_STRING (name);
- UPDATE_STRING (type);
- UPDATE_STRING (custom_icon_name);
-
-#undef UPDATE_STRING
-
- g_free (base_name);
-
- return changed;
-}
-
-static void
-shortcut_item_free (EShortcutItem *shortcut_item)
-{
- g_free (shortcut_item->uri);
- g_free (shortcut_item->name);
- g_free (shortcut_item->type);
-
- g_free (shortcut_item);
-}
-
-static ShortcutGroup *
-shortcut_group_new (const char *title)
-{
- ShortcutGroup *new;
-
- new = g_new (ShortcutGroup, 1);
- new->title = g_strdup (title);
- new->shortcuts = NULL;
- new->use_small_icons = FALSE;
-
- return new;
-}
-
-static void
-shortcut_group_free (ShortcutGroup *group)
-{
- GSList *p;
-
- g_free (group->title);
-
- for (p = group->shortcuts; p != NULL; p = p->next)
- shortcut_item_free ((EShortcutItem *) p->data);
- g_slist_free (group->shortcuts);
-
- g_free (group);
-}
-
-
-/* Utility functions. */
-
-static gboolean
-update_shortcut_and_emit_signal (EShortcuts *shortcuts,
- EShortcutItem *shortcut_item,
- int group_num,
- int num,
- const char *uri,
- const char *name,
- int unread_count,
- const char *type,
- const char *custom_icon_name)
-{
- gboolean shortcut_changed;
-
- shortcut_changed = shortcut_item_update (shortcut_item, uri, name, unread_count, type, custom_icon_name);
- if (shortcut_changed) {
- g_signal_emit (shortcuts, signals[UPDATE_SHORTCUT], 0, group_num, num);
- return TRUE;
- }
-
- return FALSE;
-}
-
-static void
-unload_shortcuts (EShortcuts *shortcuts)
-{
- EShortcutsPrivate *priv;
- GSList *orig_groups;
- GSList *p;
-
- priv = shortcuts->priv;
- orig_groups = priv->groups;
-
- for (p = priv->groups; p != NULL; p = p->next) {
- ShortcutGroup *group;
-
- g_signal_emit (shortcuts, signals[REMOVE_GROUP], 0, 0);
-
- group = (ShortcutGroup *) p->data;
-
- shortcut_group_free (group);
-
- priv->groups = priv->groups->next;
- }
-
- if (orig_groups != NULL)
- g_slist_free (orig_groups);
-
- priv->groups = NULL;
-}
-
-static gboolean
-load_shortcuts (EShortcuts *shortcuts,
- const char *file_name)
-{
- EShortcutsPrivate *priv;
- xmlDoc *doc;
- xmlNode *root;
- xmlNode *p, *q;
-
- /* FIXME: Update the views by emitting the appropriate signals. */
-
- priv = shortcuts->priv;
-
- doc = xmlParseFile (file_name);
- if (doc == NULL)
- return FALSE;
-
- root = xmlDocGetRootElement (doc);
- if (root == NULL || strcmp (root->name, "shortcuts") != 0) {
- xmlFreeDoc (doc);
- return FALSE;
- }
-
- unload_shortcuts (shortcuts);
-
- for (p = root->children; p != NULL; p = p->next) {
- ShortcutGroup *shortcut_group;
- xmlChar *shortcut_group_title;
- xmlChar *icon_size;
-
- if (strcmp ((char *) p->name, "group") != 0)
- continue;
-
- shortcut_group_title = xmlGetProp (p, "title");
- if (shortcut_group_title == NULL)
- continue;
-
- shortcut_group = shortcut_group_new (shortcut_group_title);
- xmlFree (shortcut_group_title);
-
- icon_size = xmlGetProp (p, "icon_size");
- if (icon_size != NULL && strcmp (icon_size, "small") == 0)
- shortcut_group->use_small_icons = TRUE;
- else
- shortcut_group->use_small_icons = FALSE;
- xmlFree (icon_size);
-
- for (q = p->children; q != NULL; q = q->next) {
- EShortcutItem *shortcut_item;
- xmlChar *uri;
- xmlChar *name;
- xmlChar *type;
- xmlChar *icon;
- char *path;
-
- if (strcmp ((char *) q->name, "item") != 0)
- continue;
-
- uri = xmlNodeListGetString (doc, q->children, 1);
- if (uri == NULL)
- continue;
-
- if (e_shell_parse_uri (priv->shell, uri, &path, NULL)) {
- EFolder *folder;
-
- folder = e_storage_set_get_folder (e_shell_get_storage_set (priv->shell), path);
- if (folder != NULL) {
- name = xmlMemStrdup (e_folder_get_name (folder));
- type = xmlMemStrdup (e_folder_get_type_string (folder));
-
- if (e_folder_get_custom_icon_name (folder) != NULL)
- icon = xmlMemStrdup (e_folder_get_custom_icon_name (folder));
- else
- icon = NULL;
- } else {
- name = xmlGetProp (q, "name");
- type = xmlGetProp (q, "type");
- icon = xmlGetProp (q, "icon");
- }
-
- shortcut_item = shortcut_item_new (uri, name, 0, type, icon);
- shortcut_group->shortcuts = g_slist_prepend (shortcut_group->shortcuts,
- shortcut_item);
-
- if (name != NULL)
- xmlFree (name);
- if (type != NULL)
- xmlFree (type);
- if (icon != NULL)
- xmlFree (icon);
- }
-
- g_free (path);
- xmlFree (uri);
- }
-
- shortcut_group->shortcuts = g_slist_reverse (shortcut_group->shortcuts);
-
- priv->groups = g_slist_prepend (priv->groups, shortcut_group);
- priv->num_groups ++;
- }
-
- priv->groups = g_slist_reverse (priv->groups);
-
- xmlFreeDoc (doc);
-
- /* After loading, we always have to re-save ourselves as we have merged
- the information we have with the information we got from the
- StorageSet. */
- /* FIXME: Obviously, this sucks. */
- make_dirty (shortcuts);
-
- return TRUE;
-}
-
-static gboolean
-save_shortcuts (EShortcuts *shortcuts,
- const char *file_name)
-{
- EShortcutsPrivate *priv;
- xmlDoc *doc;
- xmlNode *root;
- GSList *p, *q;
-
- priv = shortcuts->priv;
-
- doc = xmlNewDoc ((xmlChar *) "1.0");
- root = xmlNewDocNode (doc, NULL, (xmlChar *) "shortcuts", NULL);
- xmlDocSetRootElement (doc, root);
-
- for (p = priv->groups; p != NULL; p = p->next) {
- ShortcutGroup *group;
- xmlNode *group_node;
-
- group = (ShortcutGroup *) p->data;
- group_node = xmlNewChild (root, NULL, (xmlChar *) "group", NULL);
-
- xmlSetProp (group_node, (xmlChar *) "title", group->title);
-
- if (group->use_small_icons)
- xmlSetProp (group_node, (xmlChar *) "icon_size", "small");
- else
- xmlSetProp (group_node, (xmlChar *) "icon_size", "large");
-
- for (q = group->shortcuts; q != NULL; q = q->next) {
- EShortcutItem *shortcut;
- xmlNode *shortcut_node;
-
- shortcut = (EShortcutItem *) q->data;
- shortcut_node = xmlNewTextChild (group_node, NULL, (xmlChar *) "item",
- (xmlChar *) shortcut->uri);
-
- if (shortcut->name != NULL)
- xmlSetProp (shortcut_node, (xmlChar *) "name", shortcut->name);
-
- if (shortcut->type != NULL)
- xmlSetProp (shortcut_node, (xmlChar *) "type", shortcut->type);
-
- if (shortcut->custom_icon_name != NULL)
- xmlSetProp (shortcut_node, (xmlChar *) "icon", shortcut->custom_icon_name);
- }
- }
-
- if (xmlSaveFile (file_name, doc) < 0) {
- xmlFreeDoc (doc);
- return FALSE;
- }
-
- xmlFreeDoc (doc);
- return TRUE;
-}
-
-
-/* Idle function to update the file on disk. */
-
-static int
-idle_cb (void *data)
-{
- EShortcuts *shortcuts;
- EShortcutsPrivate *priv;
-
- shortcuts = E_SHORTCUTS (data);
- priv = shortcuts->priv;
-
- if (priv->dirty) {
- if (! e_shortcuts_save (shortcuts, NULL))
- g_warning ("Saving of shortcuts failed -- %s", priv->file_name);
- else
- priv->dirty = FALSE;
- }
-
- priv->save_idle_id = 0;
-
- return FALSE;
-}
-
-static void
-schedule_idle (EShortcuts *shortcuts)
-{
- EShortcutsPrivate *priv;
-
- priv = shortcuts->priv;
-
- if (priv->save_idle_id != 0)
- return;
-
- priv->save_idle_id = gtk_idle_add (idle_cb, shortcuts);
-}
-
-static void
-make_dirty (EShortcuts *shortcuts)
-{
- EShortcutsPrivate *priv;
-
- priv = shortcuts->priv;
-
- priv->dirty = TRUE;
- schedule_idle (shortcuts);
-}
-
-static void
-update_shortcuts_by_path (EShortcuts *shortcuts,
- const char *path)
-{
- EShortcutsPrivate *priv;
- EFolder *folder;
- const GSList *p, *q;
- char *evolution_uri;
- int group_num, num;
- gboolean changed = FALSE;
-
- priv = shortcuts->priv;
- folder = e_storage_set_get_folder (e_shell_get_storage_set (priv->shell), path);
-
- evolution_uri = g_strconcat (E_SHELL_URI_PREFIX, path, NULL);
-
- group_num = 0;
- for (p = priv->groups; p != NULL; p = p->next, group_num++) {
- ShortcutGroup *group;
-
- group = (ShortcutGroup *) p->data;
- num = 0;
- for (q = group->shortcuts; q != NULL; q = q->next, num++) {
- EShortcutItem *shortcut_item;
- char *shortcut_path;
-
- shortcut_item = (EShortcutItem *) q->data;
-
- if (! e_shell_parse_uri (priv->shell, shortcut_item->uri, &shortcut_path, NULL)) {
- /* Ignore bogus URIs. */
- continue;
- }
-
- if (strcmp (shortcut_path, path) == 0) {
- changed = update_shortcut_and_emit_signal (shortcuts,
- shortcut_item,
- group_num,
- num,
- shortcut_item->uri,
- shortcut_item->name,
- e_folder_get_unread_count (folder),
- e_folder_get_type_string (folder),
- e_folder_get_custom_icon_name (folder));
- }
-
- g_free (shortcut_path);
- }
- }
-
- g_free (evolution_uri);
-
- if (changed)
- make_dirty (shortcuts);
-}
-
-
-static EShortcutItem *
-get_item (EShortcuts *shortcuts,
- int group_num,
- int num)
-{
- EShortcutsPrivate *priv;
- ShortcutGroup *group;
- GSList *group_element;
- GSList *shortcut_element;
-
- g_return_val_if_fail (shortcuts != NULL, NULL);
- g_return_val_if_fail (E_IS_SHORTCUTS (shortcuts), NULL);
-
- priv = shortcuts->priv;
-
- group_element = g_slist_nth (priv->groups, group_num);
- if (group_element == NULL)
- return NULL;
-
- group = (ShortcutGroup *) group_element->data;
-
- shortcut_element = g_slist_nth (group->shortcuts, num);
- if (shortcut_element == NULL)
- return NULL;
-
- return (EShortcutItem *) shortcut_element->data;
-}
-
-
-/* Signal handlers for the views. */
-
-static void
-view_weak_notify (void *data,
- GObject *where_the_object_was)
-{
- EShortcuts *shortcuts;
- EShortcutsPrivate *priv;
-
- shortcuts = E_SHORTCUTS (data);
- priv = shortcuts->priv;
-
- priv->views = g_slist_remove (priv->views, where_the_object_was);
-}
-
-
-/* Signal handlers for the EStorageSet. */
-
-static void
-storage_set_new_folder_callback (EStorageSet *storage_set,
- const char *path,
- void *data)
-{
- EShortcuts *shortcuts;
-
- shortcuts = E_SHORTCUTS (data);
-
- update_shortcuts_by_path (shortcuts, path);
-}
-
-static void
-storage_set_updated_folder_callback (EStorageSet *storage_set,
- const char *path,
- void *data)
-{
- EShortcuts *shortcuts;
-
- shortcuts = E_SHORTCUTS (data);
-
- update_shortcuts_by_path (shortcuts, path);
-}
-
-
-/* GObject methods. */
-
-static void
-impl_dispose (GObject *object)
-{
- EShortcuts *shortcuts;
- EShortcutsPrivate *priv;
- GSList *p;
-
- shortcuts = E_SHORTCUTS (object);
- priv = shortcuts->priv;
-
- unload_shortcuts (shortcuts);
-
- if (priv->save_idle_id != 0) {
- gtk_idle_remove (priv->save_idle_id);
- priv->save_idle_id = 0;
- }
-
- if (priv->dirty) {
- if (! e_shortcuts_save (shortcuts, NULL))
- g_warning (_("Error saving shortcuts.")); /* FIXME */
- priv->dirty = FALSE;
- }
-
- for (p = priv->views; p != NULL; p = p->next)
- g_object_weak_unref (G_OBJECT (p->data), view_weak_notify, shortcuts);
- g_slist_free (priv->views);
- priv->views = NULL;
-
- (* G_OBJECT_CLASS (parent_class)->dispose) (object);
-}
-
-static void
-impl_finalize (GObject *object)
-{
- EShortcuts *shortcuts;
- EShortcutsPrivate *priv;
-
- shortcuts = E_SHORTCUTS (object);
- priv = shortcuts->priv;
-
- g_free (priv->file_name);
- g_free (priv);
-
- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
-}
-
-
-static void
-class_init (EShortcutsClass *klass)
-{
- GObjectClass *object_class;
-
- object_class = G_OBJECT_CLASS (klass);
- object_class->dispose = impl_dispose;
- object_class->finalize = impl_finalize;
-
- parent_class = g_type_class_ref(gtk_object_get_type ());
-
- signals[NEW_GROUP]
- = g_signal_new ("new_group",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EShortcutsClass, new_group),
- NULL, NULL,
- e_shell_marshal_NONE__INT,
- G_TYPE_NONE, 1,
- G_TYPE_INT);
-
- signals[REMOVE_GROUP]
- = g_signal_new ("remove_group",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EShortcutsClass, remove_group),
- NULL, NULL,
- e_shell_marshal_NONE__INT,
- G_TYPE_NONE, 1,
- G_TYPE_INT);
-
- signals[RENAME_GROUP]
- = g_signal_new ("rename_group",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EShortcutsClass, rename_group),
- NULL, NULL,
- e_shell_marshal_NONE__INT_STRING,
- G_TYPE_NONE, 2,
- G_TYPE_INT,
- G_TYPE_STRING);
-
- signals[GROUP_CHANGE_ICON_SIZE]
- = g_signal_new ("group_change_icon_size",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EShortcutsClass, group_change_icon_size),
- NULL, NULL,
- e_shell_marshal_NONE__INT_INT,
- G_TYPE_NONE, 2,
- G_TYPE_INT,
- G_TYPE_INT);
-
- signals[NEW_SHORTCUT]
- = g_signal_new ("new_shortcut",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EShortcutsClass, new_shortcut),
- NULL, NULL,
- e_shell_marshal_NONE__INT_INT,
- G_TYPE_NONE, 2,
- G_TYPE_INT,
- G_TYPE_INT);
-
- signals[REMOVE_SHORTCUT]
- = g_signal_new ("remove_shortcut",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EShortcutsClass, remove_shortcut),
- NULL, NULL,
- e_shell_marshal_NONE__INT_INT,
- G_TYPE_NONE, 2,
- G_TYPE_INT,
- G_TYPE_INT);
-
- signals[UPDATE_SHORTCUT]
- = g_signal_new ("update_shortcut",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EShortcutsClass, update_shortcut),
- NULL, NULL,
- e_shell_marshal_NONE__INT_INT,
- G_TYPE_NONE, 2,
- G_TYPE_INT,
- G_TYPE_INT);
-}
-
-
-static void
-init (EShortcuts *shortcuts)
-{
- EShortcutsPrivate *priv;
-
- priv = g_new (EShortcutsPrivate, 1);
-
- priv->file_name = NULL;
- priv->num_groups = 0;
- priv->groups = NULL;
- priv->views = NULL;
- priv->dirty = 0;
- priv->save_idle_id = 0;
- priv->shell = NULL;
-
- shortcuts->priv = priv;
-}
-
-
-void
-e_shortcuts_construct (EShortcuts *shortcuts,
- EShell *shell)
-{
- EShortcutsPrivate *priv;
- EStorageSet *storage_set;
-
- g_return_if_fail (E_IS_SHORTCUTS (shortcuts));
- g_return_if_fail (E_IS_SHELL (shell));
-
- GTK_OBJECT_UNSET_FLAGS (GTK_OBJECT (shortcuts), GTK_FLOATING);
-
- priv = shortcuts->priv;
-
- /* Don't ref it so we don't create a circular dependency. */
- priv->shell = shell;
-
- storage_set = e_shell_get_storage_set (shell);
-
- g_signal_connect_object (storage_set, "new_folder",
- G_CALLBACK (storage_set_new_folder_callback), shortcuts, 0);
- g_signal_connect_object (storage_set, "updated_folder",
- G_CALLBACK (storage_set_updated_folder_callback), shortcuts, 0);
-}
-
-EShortcuts *
-e_shortcuts_new_from_file (EShell *shell,
- const char *file_name)
-{
- EShortcuts *new;
-
- g_return_val_if_fail (E_IS_SHELL (shell), NULL);
- g_return_val_if_fail (file_name != NULL, NULL);
-
- new = g_object_new (e_shortcuts_get_type (), NULL);
- e_shortcuts_construct (new, shell);
-
- if (! e_shortcuts_load (new, file_name))
- new->priv->file_name = g_strdup (file_name);
-
- return new;
-}
-
-
-int
-e_shortcuts_get_num_groups (EShortcuts *shortcuts)
-{
- g_return_val_if_fail (shortcuts != NULL, 0);
- g_return_val_if_fail (E_IS_SHORTCUTS (shortcuts), 0);
-
- return shortcuts->priv->num_groups;
-}
-
-GSList *
-e_shortcuts_get_group_titles (EShortcuts *shortcuts)
-{
- EShortcutsPrivate *priv;
- ShortcutGroup *group;
- GSList *list;
- GSList *p;
-
- g_return_val_if_fail (shortcuts != NULL, NULL);
- g_return_val_if_fail (E_IS_SHORTCUTS (shortcuts), NULL);
-
- priv = shortcuts->priv;
-
- list = NULL;
-
- for (p = priv->groups; p != NULL; p = p->next) {
- group = (ShortcutGroup *) p->data;
- list = g_slist_prepend (list, g_strdup (group->title));
- }
-
- return g_slist_reverse (list);
-}
-
-const GSList *
-e_shortcuts_get_shortcuts_in_group (EShortcuts *shortcuts,
- int group_num)
-{
- EShortcutsPrivate *priv;
- ShortcutGroup *shortcut_group;
- GSList *shortcut_group_list_item;
-
- priv = shortcuts->priv;
-
- g_return_val_if_fail (shortcuts != NULL, NULL);
- g_return_val_if_fail (E_IS_SHORTCUTS (shortcuts), NULL);
-
- shortcut_group_list_item = g_slist_nth (priv->groups, group_num);
- if (shortcut_group_list_item == NULL)
- return NULL;
-
- shortcut_group = (ShortcutGroup *) shortcut_group_list_item->data;
-
- return shortcut_group->shortcuts;
-}
-
-
-EShell *
-e_shortcuts_get_shell (EShortcuts *shortcuts)
-{
- g_return_val_if_fail (shortcuts != NULL, NULL);
- g_return_val_if_fail (E_IS_SHORTCUTS (shortcuts), NULL);
-
- return shortcuts->priv->shell;
-}
-
-
-GtkWidget *
-e_shortcuts_new_view (EShortcuts *shortcuts)
-{
- EShortcutsPrivate *priv;
- GtkWidget *new;
-
- g_return_val_if_fail (shortcuts != NULL, NULL);
- g_return_val_if_fail (E_IS_SHORTCUTS (shortcuts), NULL);
-
- priv = shortcuts->priv;
-
- new = e_shortcuts_view_new (shortcuts);
- priv->views = g_slist_prepend (priv->views, new);
-
- g_object_weak_ref (G_OBJECT (new), view_weak_notify, shortcuts);
-
- return new;
-}
-
-
-gboolean
-e_shortcuts_load (EShortcuts *shortcuts,
- const char *file_name)
-{
- EShortcutsPrivate *priv;
- char *tmp;
-
- g_return_val_if_fail (shortcuts != NULL, FALSE);
- g_return_val_if_fail (E_IS_SHORTCUTS (shortcuts), FALSE);
- g_return_val_if_fail (file_name == NULL || g_path_is_absolute (file_name), FALSE);
-
- priv = shortcuts->priv;
-
- if (file_name == NULL) {
- if (priv->file_name == NULL)
- return FALSE;
- file_name = priv->file_name;
- }
-
- if (! load_shortcuts (shortcuts, file_name))
- return FALSE;
-
- tmp = g_strdup (file_name);
- g_free (priv->file_name);
- priv->file_name = tmp;
-
- return TRUE;
-}
-
-gboolean
-e_shortcuts_save (EShortcuts *shortcuts,
- const char *file_name)
-{
- EShortcutsPrivate *priv;
- char *tmp;
-
- g_return_val_if_fail (shortcuts != NULL, FALSE);
- g_return_val_if_fail (E_IS_SHORTCUTS (shortcuts), FALSE);
- g_return_val_if_fail (file_name == NULL || g_path_is_absolute (file_name), FALSE);
-
- priv = shortcuts->priv;
-
- if (file_name == NULL) {
- if (priv->file_name == NULL)
- return FALSE;
- file_name = priv->file_name;
- }
-
- if (! save_shortcuts (shortcuts, file_name))
- return FALSE;
-
- tmp = g_strdup (file_name);
- g_free (priv->file_name);
- priv->file_name = tmp;
-
- return TRUE;
-}
-
-
-const EShortcutItem *
-e_shortcuts_get_shortcut (EShortcuts *shortcuts,
- int group_num,
- int num)
-{
- g_return_val_if_fail (shortcuts != NULL, NULL);
- g_return_val_if_fail (E_IS_SHORTCUTS (shortcuts), NULL);
-
- return (const EShortcutItem *) get_item (shortcuts, group_num, num);
-}
-
-
-void
-e_shortcuts_remove_shortcut (EShortcuts *shortcuts,
- int group_num,
- int num)
-{
- EShortcutsPrivate *priv;
- ShortcutGroup *group;
- GSList *p;
- EShortcutItem *item;
-
- g_return_if_fail (shortcuts != NULL);
- g_return_if_fail (E_IS_SHORTCUTS (shortcuts));
-
- priv = shortcuts->priv;
-
- p = g_slist_nth (priv->groups, group_num);
- g_return_if_fail (p != NULL);
-
- group = (ShortcutGroup *) p->data;
-
- p = g_slist_nth (group->shortcuts, num);
- g_return_if_fail (p != NULL);
-
- g_signal_emit (shortcuts, signals[REMOVE_SHORTCUT], 0, group_num, num);
-
- item = (EShortcutItem *) p->data;
- shortcut_item_free (item);
-
- group->shortcuts = g_slist_remove_link (group->shortcuts, p);
-
- make_dirty (shortcuts);
-}
-
-void
-e_shortcuts_add_shortcut (EShortcuts *shortcuts,
- int group_num,
- int num,
- const char *uri,
- const char *name,
- int unread_count,
- const char *type,
- const char *custom_icon_name)
-{
- EShortcutsPrivate *priv;
- ShortcutGroup *group;
- EShortcutItem *item;
- GSList *p;
-
- g_return_if_fail (shortcuts != NULL);
- g_return_if_fail (E_IS_SHORTCUTS (shortcuts));
-
- priv = shortcuts->priv;
-
- p = g_slist_nth (priv->groups, group_num);
- g_return_if_fail (p != NULL);
-
- group = (ShortcutGroup *) p->data;
-
- if (num == -1)
- num = g_slist_length (group->shortcuts);
-
- item = shortcut_item_new (uri, name, unread_count, type, custom_icon_name);
-
- group->shortcuts = g_slist_insert (group->shortcuts, item, num);
-
- g_signal_emit (shortcuts, signals[NEW_SHORTCUT], 0, group_num, num);
-
- make_dirty (shortcuts);
-}
-
-void
-e_shortcuts_update_shortcut (EShortcuts *shortcuts,
- int group_num,
- int num,
- const char *uri,
- const char *name,
- int unread_count,
- const char *type,
- const char *custom_icon_name)
-{
- EShortcutItem *shortcut_item;
-
- g_return_if_fail (shortcuts != NULL);
- g_return_if_fail (E_IS_SHORTCUTS (shortcuts));
-
- shortcut_item = get_item (shortcuts, group_num, num);
-
- update_shortcut_and_emit_signal (shortcuts, shortcut_item, group_num, num,
- uri, name, unread_count, type, custom_icon_name);
-
- make_dirty (shortcuts);
-}
-
-
-void
-e_shortcuts_add_default_shortcuts (EShortcuts *shortcuts,
- int group_num)
-{
- e_shortcuts_add_shortcut (shortcuts, 0, -1, E_SUMMARY_URI, _("Summary"), 0, "summary", NULL);
-
- e_shortcuts_add_shortcut (shortcuts, 0, -1, "default:mail", _("Inbox"), 0, "mail", "inbox");
- e_shortcuts_add_shortcut (shortcuts, 0, -1, "default:calendar", _("Calendar"), 0, "calendar", NULL);
- e_shortcuts_add_shortcut (shortcuts, 0, -1, "default:tasks", _("Tasks"), 0, "tasks", NULL);
- e_shortcuts_add_shortcut (shortcuts, 0, -1, "default:contacts", _("Contacts"), 0, "contacts", NULL);
-}
-
-void
-e_shortcuts_add_default_group (EShortcuts *shortcuts)
-{
- g_return_if_fail (shortcuts != NULL);
- g_return_if_fail (E_IS_SHORTCUTS (shortcuts));
-
- e_shortcuts_add_group (shortcuts, -1, _("Shortcuts"));
-
- e_shortcuts_add_default_shortcuts (shortcuts, -1);
-}
-
-void
-e_shortcuts_remove_group (EShortcuts *shortcuts,
- int group_num)
-{
- EShortcutsPrivate *priv;
- GSList *p;
-
- g_return_if_fail (shortcuts != NULL);
- g_return_if_fail (E_IS_SHORTCUTS (shortcuts));
-
- priv = shortcuts->priv;
-
- p = g_slist_nth (priv->groups, group_num);
- g_return_if_fail (p != NULL);
-
- g_signal_emit (shortcuts, signals[REMOVE_GROUP], 0, group_num);
-
- shortcut_group_free ((ShortcutGroup *) p->data);
-
- priv->groups = g_slist_remove_link (priv->groups, p);
- priv->num_groups --;
-
- make_dirty (shortcuts);
-}
-
-void
-e_shortcuts_rename_group (EShortcuts *shortcuts,
- int group_num,
- const char *new_title)
-{
- EShortcutsPrivate *priv;
- GSList *p;
- ShortcutGroup *group;
-
- g_return_if_fail (shortcuts != NULL);
- g_return_if_fail (E_IS_SHORTCUTS (shortcuts));
-
- priv = shortcuts->priv;
-
- p = g_slist_nth (priv->groups, group_num);
- g_return_if_fail (p != NULL);
-
- group = (ShortcutGroup *) p->data;
- if (strcmp (group->title, new_title)) {
- g_free (group->title);
- group->title = g_strdup (new_title);
- } else
- return;
-
- g_signal_emit (shortcuts, signals[RENAME_GROUP], 0, group_num, new_title);
-
- make_dirty (shortcuts);
-}
-
-void
-e_shortcuts_add_group (EShortcuts *shortcuts,
- int group_num,
- const char *group_name)
-{
- EShortcutsPrivate *priv;
- ShortcutGroup *group;
-
- g_return_if_fail (shortcuts != NULL);
- g_return_if_fail (E_IS_SHORTCUTS (shortcuts));
-
- priv = shortcuts->priv;
-
- group = shortcut_group_new (group_name);
-
- if (group_num == -1)
- group_num = g_slist_length (priv->groups);
-
- priv->groups = g_slist_insert (priv->groups, group, group_num);
- priv->num_groups ++;
-
- g_signal_emit (shortcuts, signals[NEW_GROUP], 0, group_num);
-
- make_dirty (shortcuts);
-}
-
-
-const char *
-e_shortcuts_get_group_title (EShortcuts *shortcuts,
- int group_num)
-{
- EShortcutsPrivate *priv;
- GSList *group_element;
- const ShortcutGroup *group;
-
- g_return_val_if_fail (shortcuts != NULL, NULL);
- g_return_val_if_fail (E_IS_SHORTCUTS (shortcuts), NULL);
-
- priv = shortcuts->priv;
-
- group_element = g_slist_nth (priv->groups, group_num);
- if (group_element == NULL)
- return NULL;
-
- group = (ShortcutGroup *) group_element->data;
-
- return group->title;
-}
-
-void
-e_shortcuts_set_group_uses_small_icons (EShortcuts *shortcuts,
- int group_num,
- gboolean use_small_icons)
-{
- EShortcutsPrivate *priv;
- ShortcutGroup *group;
- GSList *group_element;
-
- g_return_if_fail (E_IS_SHORTCUTS (shortcuts));
-
- priv = shortcuts->priv;
-
- group_element = g_slist_nth (priv->groups, group_num);
- if (group_element == NULL)
- return;
-
- group = (ShortcutGroup *) group_element->data;
-
- use_small_icons = !! use_small_icons;
- if (group->use_small_icons != use_small_icons) {
- group->use_small_icons = use_small_icons;
- g_signal_emit (shortcuts, signals[GROUP_CHANGE_ICON_SIZE], 0, group_num, use_small_icons);
-
- make_dirty (shortcuts);
- }
-}
-
-gboolean
-e_shortcuts_get_group_uses_small_icons (EShortcuts *shortcuts,
- int group_num)
-{
- EShortcutsPrivate *priv;
- ShortcutGroup *group;
- GSList *group_element;
-
- g_return_val_if_fail (E_IS_SHORTCUTS (shortcuts), FALSE);
-
- priv = shortcuts->priv;
-
- group_element = g_slist_nth (priv->groups, group_num);
- if (group_element == NULL)
- return FALSE;
-
- group = (ShortcutGroup *) group_element->data;
- return group->use_small_icons;
-}
-
-
-void
-e_shortcuts_update_shortcuts_for_changed_uri (EShortcuts *shortcuts,
- const char *old_uri,
- const char *new_uri)
-{
- EShortcutsPrivate *priv;
- GSList *p;
-
- g_return_if_fail (E_IS_SHORTCUTS (shortcuts));
- g_return_if_fail (old_uri != NULL);
- g_return_if_fail (new_uri != NULL);
-
- priv = shortcuts->priv;
-
- for (p = priv->groups; p != NULL; p = p->next) {
- ShortcutGroup *group;
- GSList *q;
-
- group = (ShortcutGroup *) p->data;
- for (q = group->shortcuts; q != NULL; q = q->next) {
- EShortcutItem *item;
-
- item = (EShortcutItem *) q->data;
-
- if (strcmp (item->uri, old_uri) == 0) {
- g_free (item->uri);
- item->uri = g_strdup (new_uri);
-
- make_dirty (shortcuts);
- }
- }
- }
-}
-
-
-E_MAKE_TYPE (e_shortcuts, "EShortcuts", EShortcuts, class_init, init, PARENT_TYPE)
diff --git a/shell/e-shortcuts.h b/shell/e-shortcuts.h
deleted file mode 100644
index 30e2ff01e8..0000000000
--- a/shell/e-shortcuts.h
+++ /dev/null
@@ -1,167 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-shortcuts.h
- *
- * Copyright (C) 2000, 2001 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifndef _E_SHORTCUTS_H_
-#define _E_SHORTCUTS_H_
-
-#include <gtk/gtkwidget.h>
-
-#include "e-folder-type-registry.h"
-#include "e-storage-set.h"
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-#define E_TYPE_SHORTCUTS (e_shortcuts_get_type ())
-#define E_SHORTCUTS(obj) (GTK_CHECK_CAST ((obj), E_TYPE_SHORTCUTS, EShortcuts))
-#define E_SHORTCUTS_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_SHORTCUTS, EShortcutsClass))
-#define E_IS_SHORTCUTS(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_SHORTCUTS))
-#define E_IS_SHORTCUTS_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_SHORTCUTS))
-
-
-typedef struct _EShortcuts EShortcuts;
-typedef struct _EShortcutsPrivate EShortcutsPrivate;
-typedef struct _EShortcutsClass EShortcutsClass;
-
-struct _EShortcutItem {
- /* URI of the shortcut. */
- char *uri;
-
- /* Name of the shortcut. */
- char *name;
-
- /* Folder type for the shortcut. If the shortcut doesn't point to a
- folder, this is NULL. */
- char *type;
-
- /* Custom icon for the shortcut. If this is NULL, then the shortcut
- should just use the icon for the type. */
- char *custom_icon_name;
-
- /* Number of unread items in the folder. Zero if not a folder. */
- int unread_count;
-};
-typedef struct _EShortcutItem EShortcutItem;
-
-struct _EShortcuts {
- GtkObject parent;
-
- EShortcutsPrivate *priv;
-};
-
-struct _EShortcutsClass {
- GtkObjectClass parent_class;
-
- /* Signals. */
-
- void (* new_group) (EShortcuts *shortcuts, int group_num);
- void (* remove_group) (EShortcuts *shortcuts, int group_num);
- void (* rename_group) (EShortcuts *shortcuts, int group_num, const char *new_title);
-
- void (* group_change_icon_size) (EShortcuts *shortcuts, int group_num, gboolean use_small_icons);
-
- void (* new_shortcut) (EShortcuts *shortcuts, int group_num, int item_num);
- void (* remove_shortcut) (EShortcuts *shortcuts, int group_num, int item_num);
- void (* update_shortcut) (EShortcuts *shortcuts, int group_num, int item_num);
-};
-
-
-#include "e-shell.h"
-
-
-GtkType e_shortcuts_get_type (void);
-void e_shortcuts_construct (EShortcuts *shortcuts,
- EShell *shell);
-EShortcuts *e_shortcuts_new_from_file (EShell *shell,
- const char *file_name);
-
-int e_shortcuts_get_num_groups (EShortcuts *shortcuts);
-
-GSList *e_shortcuts_get_group_titles (EShortcuts *shortcuts);
-const char *e_shortcuts_get_group_title (EShortcuts *shortcuts,
- int group_num);
-const GSList *e_shortcuts_get_shortcuts_in_group (EShortcuts *shortcuts,
- int group_num);
-
-const EShortcutItem *e_shortcuts_get_shortcut (EShortcuts *shortcuts,
- int group_num,
- int num);
-
-EShell *e_shortcuts_get_shell (EShortcuts *shortcuts);
-
-GtkWidget *e_shortcuts_new_view (EShortcuts *shortcuts);
-
-gboolean e_shortcuts_load (EShortcuts *shortcuts,
- const char *path);
-gboolean e_shortcuts_save (EShortcuts *shortcuts,
- const char *path);
-
-void e_shortcuts_add_default_shortcuts (EShortcuts *shortcuts,
- int group_num);
-void e_shortcuts_add_default_group (EShortcuts *shortcuts);
-
-void e_shortcuts_remove_shortcut (EShortcuts *shortcuts,
- int group_num,
- int num);
-void e_shortcuts_add_shortcut (EShortcuts *shortcuts,
- int group_num,
- int num,
- const char *uri,
- const char *name,
- int unread_count,
- const char *type,
- const char *custom_icon_name);
-void e_shortcuts_update_shortcut (EShortcuts *shortcuts,
- int group_num,
- int num,
- const char *uri,
- const char *name,
- int unread_count,
- const char *type,
- const char *custom_icon_name);
-
-void e_shortcuts_remove_group (EShortcuts *shortcuts,
- int group_num);
-void e_shortcuts_add_group (EShortcuts *shortcuts,
- int group_num,
- const char *group_title);
-void e_shortcuts_rename_group (EShortcuts *shortcuts,
- int group_num,
- const char *new_title);
-
-void e_shortcuts_set_group_uses_small_icons (EShortcuts *shortcuts,
- int group_num,
- gboolean use_small_icons);
-gboolean e_shortcuts_get_group_uses_small_icons (EShortcuts *shortcuts,
- int group_num);
-
-void e_shortcuts_update_shortcuts_for_changed_uri (EShortcuts *shortcuts,
- const char *old_uri_,
- const char *new_uri);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* _E_SHORTCUTS_H_ */
diff --git a/shell/e-splash.c b/shell/e-splash.c
deleted file mode 100644
index a6bb79e98c..0000000000
--- a/shell/e-splash.c
+++ /dev/null
@@ -1,451 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-splash.c
- *
- * Copyright (C) 2000, 2001 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "e-splash.h"
-
-#include "e-util/e-gtk-utils.h"
-
-#include <gtk/gtkframe.h>
-#include <gtk/gtkmain.h>
-#include <gtk/gtksignal.h>
-#include <libgnomecanvas/gnome-canvas-pixbuf.h>
-#include <libgnomeui/gnome-window-icon.h>
-#include <gal/util/e-util.h>
-
-
-
-#define PARENT_TYPE gtk_window_get_type ()
-static GtkWindowClass *parent_class = NULL;
-
-struct _Icon {
- GdkPixbuf *dark_pixbuf;
- GdkPixbuf *light_pixbuf;
- GnomeCanvasItem *canvas_item;
-};
-typedef struct _Icon Icon;
-
-struct _ESplashPrivate {
- GnomeCanvas *canvas;
- GdkPixbuf *splash_image_pixbuf;
-
- GList *icons; /* (Icon *) */
- int num_icons;
-
- int layout_idle_id;
-};
-
-
-/* Layout constants. These need to be changed if the splash changes. */
-
-#define ICON_Y 280
-#define ICON_SIZE 32
-
-
-/* Icon management. */
-
-static GdkPixbuf *
-create_darkened_pixbuf (GdkPixbuf *pixbuf)
-{
- GdkPixbuf *new;
- unsigned char *rowp;
- int width, height;
- int rowstride;
- int i, j;
-
- new = gdk_pixbuf_copy (pixbuf);
- if (! gdk_pixbuf_get_has_alpha (new))
- return new;
-
- width = gdk_pixbuf_get_width (new);
- height = gdk_pixbuf_get_height (new);
- rowstride = gdk_pixbuf_get_rowstride (new);
-
- rowp = gdk_pixbuf_get_pixels (new);
- for (i = 0; i < height; i ++) {
- unsigned char *p;
-
- p = rowp;
- for (j = 0; j < width; j++) {
- p[3] *= .25;
- p += 4;
- }
-
- rowp += rowstride;
- }
-
- return new;
-}
-
-static Icon *
-icon_new (ESplash *splash,
- GdkPixbuf *image_pixbuf)
-{
- ESplashPrivate *priv;
- GnomeCanvasGroup *canvas_root_group;
- Icon *icon;
-
- priv = splash->priv;
-
- icon = g_new (Icon, 1);
-
- icon->light_pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, TRUE, 8, ICON_SIZE, ICON_SIZE);
- gdk_pixbuf_scale (image_pixbuf, icon->light_pixbuf,
- 0, 0,
- ICON_SIZE, ICON_SIZE,
- 0, 0,
- (double) ICON_SIZE / gdk_pixbuf_get_width (image_pixbuf),
- (double) ICON_SIZE / gdk_pixbuf_get_height (image_pixbuf),
- GDK_INTERP_HYPER);
-
- icon->dark_pixbuf = create_darkened_pixbuf (icon->light_pixbuf);
-
- /* Set up the canvas item to point to the dark pixbuf initially. */
-
- canvas_root_group = GNOME_CANVAS_GROUP (GNOME_CANVAS (priv->canvas)->root);
-
- icon->canvas_item = gnome_canvas_item_new (canvas_root_group,
- GNOME_TYPE_CANVAS_PIXBUF,
- "pixbuf", icon->dark_pixbuf,
- NULL);
-
- return icon;
-}
-
-static void
-icon_free (Icon *icon)
-{
- g_object_unref (icon->dark_pixbuf);
- g_object_unref (icon->light_pixbuf);
-
-/* g_object_unref (icon->canvas_item); */
-
- g_free (icon);
-}
-
-
-/* Icon layout management. */
-
-static void
-layout_icons (ESplash *splash)
-{
- ESplashPrivate *priv;
- GList *p;
- double x_step;
- double x, y;
-
- priv = splash->priv;
-
- x_step = ((double) gdk_pixbuf_get_width (priv->splash_image_pixbuf)) / priv->num_icons;
-
- x = (x_step - ICON_SIZE) / 2.0;
- y = ICON_Y;
-
- for (p = priv->icons; p != NULL; p = p->next) {
- Icon *icon;
-
- icon = (Icon *) p->data;
-
- g_object_set((icon->canvas_item),
- "x", (double) x,
- "y", (double) ICON_Y,
- NULL);
-
- x += x_step;
- }
-}
-
-static int
-layout_idle_cb (void *data)
-{
- ESplash *splash;
- ESplashPrivate *priv;
-
- splash = E_SPLASH (data);
- priv = splash->priv;
-
- layout_icons (splash);
-
- priv->layout_idle_id = 0;
-
- return FALSE;
-}
-
-static void
-schedule_relayout (ESplash *splash)
-{
- ESplashPrivate *priv;
-
- priv = splash->priv;
-
- if (priv->layout_idle_id != 0)
- return;
-
- priv->layout_idle_id = gtk_idle_add (layout_idle_cb, splash);
-}
-
-
-/* GObject methods. */
-
-static void
-impl_dispose (GObject *object)
-{
- ESplash *splash;
- ESplashPrivate *priv;
-
- splash = E_SPLASH (object);
- priv = splash->priv;
-
- if (priv->splash_image_pixbuf != NULL) {
- g_object_unref (priv->splash_image_pixbuf);
- priv->splash_image_pixbuf = NULL;
- }
-
- if (priv->layout_idle_id != 0) {
- gtk_idle_remove (priv->layout_idle_id);
- priv->layout_idle_id = 0;
- }
-
- (* G_OBJECT_CLASS (parent_class)->dispose) (object);
-}
-
-static void
-impl_finalize (GObject *object)
-{
- ESplash *splash;
- ESplashPrivate *priv;
- GList *p;
-
- splash = E_SPLASH (object);
- priv = splash->priv;
-
- for (p = priv->icons; p != NULL; p = p->next) {
- Icon *icon;
-
- icon = (Icon *) p->data;
- icon_free (icon);
- }
-
- g_list_free (priv->icons);
-
- g_free (priv);
-
- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
-}
-
-
-static void
-class_init (ESplashClass *klass)
-{
- GObjectClass *object_class;
-
- object_class = G_OBJECT_CLASS (klass);
- object_class->dispose = impl_dispose;
- object_class->finalize = impl_finalize;
-
- parent_class = g_type_class_ref(gtk_window_get_type ());
-}
-
-static void
-init (ESplash *splash)
-{
- ESplashPrivate *priv;
-
- priv = g_new (ESplashPrivate, 1);
- priv->canvas = NULL;
- priv->splash_image_pixbuf = NULL;
- priv->icons = NULL;
- priv->num_icons = 0;
- priv->layout_idle_id = 0;
-
- splash->priv = priv;
-}
-
-static gboolean
-button_press_event (GtkWidget *widget, GdkEventButton *event, gpointer data)
-{
- ESplash *splash;
-
- splash = E_SPLASH (data);
-
- gtk_widget_hide (GTK_WIDGET (splash));
-
- return TRUE;
-}
-
-
-/**
- * e_splash_construct:
- * @splash: A pointer to an ESplash widget
- * @splash_image_pixbuf: The pixbuf for the image to appear in the splash dialog
- *
- * Construct @splash with @splash_image_pixbuf as the splash image.
- **/
-void
-e_splash_construct (ESplash *splash,
- GdkPixbuf *splash_image_pixbuf)
-{
- ESplashPrivate *priv;
- GtkWidget *canvas, *frame;
- int image_width, image_height;
-
- g_return_if_fail (splash != NULL);
- g_return_if_fail (E_IS_SPLASH (splash));
- g_return_if_fail (splash_image_pixbuf != NULL);
-
- priv = splash->priv;
-
- priv->splash_image_pixbuf = g_object_ref (splash_image_pixbuf);
-
- canvas = gnome_canvas_new_aa ();
- priv->canvas = GNOME_CANVAS (canvas);
-
- e_make_widget_backing_stored (canvas);
-
- image_width = gdk_pixbuf_get_width (splash_image_pixbuf);
- image_height = gdk_pixbuf_get_height (splash_image_pixbuf);
-
- gtk_widget_set_size_request (canvas, image_width, image_height);
- gnome_canvas_set_scroll_region (GNOME_CANVAS (canvas), 0, 0, image_width, image_height);
- gtk_widget_show (canvas);
-
- frame = gtk_frame_new (NULL);
- gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_OUT);
- gtk_container_add (GTK_CONTAINER (frame), canvas);
- gtk_widget_show (frame);
-
- gtk_container_add (GTK_CONTAINER (splash), frame);
-
- gnome_canvas_item_new (GNOME_CANVAS_GROUP (priv->canvas->root),
- GNOME_TYPE_CANVAS_PIXBUF,
- "pixbuf", splash_image_pixbuf,
- NULL);
-
- g_signal_connect (splash, "button-press-event",
- G_CALLBACK (button_press_event), splash);
-
- g_object_set((splash), "type", GTK_WINDOW_TOPLEVEL, NULL);
- gtk_window_set_position (GTK_WINDOW (splash), GTK_WIN_POS_CENTER);
- gtk_window_set_resizable (GTK_WINDOW (splash), FALSE);
- gtk_window_set_default_size (GTK_WINDOW (splash), image_width, image_height);
- gtk_window_set_wmclass (GTK_WINDOW (splash), "evolution-splash", "Evolution");
- gnome_window_icon_set_from_file (GTK_WINDOW (splash), EVOLUTION_DATADIR "/pixmaps/evolution.png");
- gtk_window_set_title (GTK_WINDOW (splash), "Ximian Evolution");
-
-}
-
-/**
- * e_splash_new:
- *
- * Create a new ESplash widget.
- *
- * Return value: A pointer to the newly created ESplash widget.
- **/
-GtkWidget *
-e_splash_new (void)
-{
- ESplash *new;
- GdkPixbuf *splash_image_pixbuf;
-
- splash_image_pixbuf = gdk_pixbuf_new_from_file (EVOLUTION_IMAGES "/splash.png", NULL);
-
- if (splash_image_pixbuf == NULL) {
- g_warning("Cannot find splash image: %s", EVOLUTION_IMAGES "/splash.png");
- return NULL;
- }
-
- new = g_object_new (e_splash_get_type (), NULL);
- e_splash_construct (new, splash_image_pixbuf);
-
- /* g_object_unref (splash_image_pixbuf); */
-
- return GTK_WIDGET (new);
-}
-
-
-/**
- * e_splash_add_icon:
- * @splash: A pointer to an ESplash widget
- * @icon_pixbuf: Pixbuf for the icon to be added
- *
- * Add @icon_pixbuf to the @splash.
- *
- * Return value: The total number of icons in the splash after the new icon has
- * been added.
- **/
-int
-e_splash_add_icon (ESplash *splash,
- GdkPixbuf *icon_pixbuf)
-{
- ESplashPrivate *priv;
- Icon *icon;
-
- g_return_val_if_fail (splash != NULL, 0);
- g_return_val_if_fail (E_IS_SPLASH (splash), 0);
- g_return_val_if_fail (icon_pixbuf != NULL, 0);
-
- priv = splash->priv;
-
- icon = icon_new (splash, icon_pixbuf);
- priv->icons = g_list_append (priv->icons, icon);
-
- priv->num_icons ++;
-
- schedule_relayout (splash);
-
- return priv->num_icons;
-}
-
-/**
- * e_splash_set_icon_highlight:
- * @splash: A pointer to an ESplash widget
- * @num: Number of the icon whose highlight state must be changed
- * @highlight: Whether the icon must be highlit or not
- *
- * Change the highlight state of the @num-th icon.
- **/
-void
-e_splash_set_icon_highlight (ESplash *splash,
- int num,
- gboolean highlight)
-{
- ESplashPrivate *priv;
- Icon *icon;
-
- g_return_if_fail (splash != NULL);
- g_return_if_fail (E_IS_SPLASH (splash));
-
- priv = splash->priv;
-
- icon = (Icon *) g_list_nth_data (priv->icons, num);
- g_return_if_fail (icon != NULL);
-
- g_object_set((icon->canvas_item),
- "pixbuf", highlight ? icon->light_pixbuf : icon->dark_pixbuf,
- NULL);
-}
-
-
-E_MAKE_TYPE (e_splash, "ESplash", ESplash, class_init, init, PARENT_TYPE)
diff --git a/shell/e-splash.h b/shell/e-splash.h
deleted file mode 100644
index 209b815bfe..0000000000
--- a/shell/e-splash.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-splash.h
- *
- * Copyright (C) 2000 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifndef _E_SPLASH_H_
-#define _E_SPLASH_H_
-
-#include <gdk-pixbuf/gdk-pixbuf.h>
-#include <gtk/gtkwindow.h>
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-#define E_TYPE_SPLASH (e_splash_get_type ())
-#define E_SPLASH(obj) (GTK_CHECK_CAST ((obj), E_TYPE_SPLASH, ESplash))
-#define E_SPLASH_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_SPLASH, ESplashClass))
-#define E_IS_SPLASH(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_SPLASH))
-#define E_IS_SPLASH_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_SPLASH))
-
-
-typedef struct _ESplash ESplash;
-typedef struct _ESplashPrivate ESplashPrivate;
-typedef struct _ESplashClass ESplashClass;
-
-struct _ESplash {
- GtkWindow parent;
-
- ESplashPrivate *priv;
-};
-
-struct _ESplashClass {
- GtkWindowClass parent_class;
-};
-
-
-GtkType e_splash_get_type (void);
-void e_splash_construct (ESplash *splash,
- GdkPixbuf *splash_image);
-GtkWidget *e_splash_new (void);
-
-int e_splash_add_icon (ESplash *splash,
- GdkPixbuf *icon);
-void e_splash_set_icon_highlight (ESplash *splash,
- int num,
- gboolean highlight);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* _E_SPLASH_H_ */
diff --git a/shell/e-storage-set-store.c b/shell/e-storage-set-store.c
deleted file mode 100644
index e2816d87d2..0000000000
--- a/shell/e-storage-set-store.c
+++ /dev/null
@@ -1,1361 +0,0 @@
-/* e-storage-set-store.c
- * Copyright (C) 2002 Ximian, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#include <string.h>
-
-#include <gtk/gtktreemodel.h>
-#include <gtk/gtktreednd.h>
-
-#include "e-icon-factory.h"
-#include "e-storage-set-store.h"
-#include "e-shell-constants.h"
-
-struct _EStorageSetStorePrivate {
- EStorageSet *storage_set;
- GHashTable *checkboxes;
- GHashTable *path_to_node;
- GHashTable *type_name_to_pixbuf;
- GNode *root;
- gint stamp;
- EStorageSetStoreHasCheckBoxFunc has_checkbox_func;
- gpointer has_checkbox_func_data;
-};
-
-#define G_NODE(node) ((GNode *)(node))
-#define VALID_ITER(iter, store) ((iter) != NULL && (iter)->user_data != NULL && (store)->priv->stamp == (iter)->stamp)
-#define VALID_COL(col) ((col) >= 0 && (col) < E_STORAGE_SET_STORE_COLUMN_COUNT)
-
-static GObjectClass *parent_class = NULL;
-
-static gboolean
-has_checkbox (EStorageSetStore *store, const gchar *folder_path)
-{
- EStorageSetStorePrivate *priv = store->priv;
-
- g_return_val_if_fail (folder_path != NULL, FALSE);
-
- if (strchr (folder_path + 1, '/') == NULL) {
- /* If it's a toplevel, never allow checking it. */
- return FALSE;
- }
-
-#if 0
- if (priv->has_checkbox_func)
- return (* priv->has_checkbox_func) (priv->storage_set,
- folder_path,
- priv->has_checkbox_func_data);
-#endif
-
- return TRUE;
-}
-
-
-/* GtkTreeModel interface implementation */
-
-static guint
-esss_get_flags(GtkTreeModel *tree_model)
-{
- g_return_val_if_fail(E_IS_STORAGE_SET_STORE(tree_model), 0);
-
- return GTK_TREE_MODEL_ITERS_PERSIST;
-}
-
-static gint
-esss_get_n_columns(GtkTreeModel *tree_model)
-{
- g_return_val_if_fail(E_IS_STORAGE_SET_STORE(tree_model), 0);
-
- return E_STORAGE_SET_STORE_COLUMN_COUNT;
-}
-
-static GType
-esss_get_column_type(GtkTreeModel *tree_model, gint index)
-{
- EStorageSetStore *store = (EStorageSetStore *) tree_model;
- GType retval;
-
- g_return_val_if_fail(E_IS_STORAGE_SET_STORE(tree_model), G_TYPE_INVALID);
- g_return_val_if_fail(VALID_COL(index), G_TYPE_INVALID);
-
- switch (index) {
- case E_STORAGE_SET_STORE_COLUMN_NAME:
- retval = G_TYPE_STRING;
- break;
- case E_STORAGE_SET_STORE_COLUMN_HIGHLIGHT:
- retval = G_TYPE_INT;
- break;
- case E_STORAGE_SET_STORE_COLUMN_CHECKED:
- case E_STORAGE_SET_STORE_COLUMN_CHECKABLE:
- retval = G_TYPE_BOOLEAN;
- break;
- case E_STORAGE_SET_STORE_COLUMN_ICON:
- retval = GDK_TYPE_PIXBUF;
- break;
- default:
- g_assert_not_reached ();
- }
-
- return retval;
-}
-
-static gboolean
-esss_get_iter(GtkTreeModel *tree_model, GtkTreeIter *iter, GtkTreePath *path)
-{
- EStorageSetStore *store = (EStorageSetStore *) tree_model;
- GtkTreeIter parent;
- gint *indices;
- gint depth, i;
-
- g_return_val_if_fail(E_IS_STORAGE_SET_STORE(tree_model), FALSE);
- g_return_val_if_fail(iter != NULL, FALSE);
-
- indices = gtk_tree_path_get_indices(path);
- depth = gtk_tree_path_get_depth(path);
-
- g_return_val_if_fail(depth > 0, FALSE);
-
- parent.stamp = store->priv->stamp;
- parent.user_data = store->priv->root;
-
- for (i = 0; i < depth; i++) {
- if (!gtk_tree_model_iter_nth_child (tree_model, iter, &parent, indices[i]))
- return FALSE;
- parent = *iter;
- }
-
- return TRUE;
-}
-
-static GtkTreePath *
-tree_path_from_node (EStorageSetStore *store, GNode *node)
-{
- GtkTreePath *retval;
- GNode *tmp_node, *curr_node;
- gint i = 0;
-
- if (node == store->priv->root)
- return NULL;
-
- retval = gtk_tree_path_new();
-
- for (curr_node = node; curr_node != store->priv->root; curr_node = curr_node->parent) {
-
- if (curr_node->parent == NULL) {
- gtk_tree_path_free(retval);
- return NULL;
- }
-
- for (i = 0, tmp_node = curr_node->parent->children;
- tmp_node && tmp_node != curr_node;
- i++, tmp_node = tmp_node->next);
-
- if (tmp_node == NULL) {
- gtk_tree_path_free(retval);
- return NULL;
- }
-
- gtk_tree_path_prepend_index(retval, i);
- }
-
- return retval;
-}
-
-static GtkTreePath *
-esss_get_path(GtkTreeModel *tree_model, GtkTreeIter *iter)
-{
- EStorageSetStore *store = (EStorageSetStore *) tree_model;
-
- g_return_val_if_fail(E_IS_STORAGE_SET_STORE(tree_model), NULL);
- g_return_val_if_fail(VALID_ITER(iter, store), NULL);
-
- if (iter->user_data == store->priv->root)
- return NULL;
-
- return tree_path_from_node (store, G_NODE (iter->user_data));
-}
-
-static GdkPixbuf *
-get_pixbuf_for_folder (EStorageSetStore *store, EFolder *folder)
-{
- const char *type_name;
- EStorageSetStorePrivate *priv;
- EFolderTypeRegistry *folder_type_registry;
- EStorageSet *storage_set;
- GdkPixbuf *icon_pixbuf;
- GdkPixbuf *scaled_pixbuf;
- const char *custom_icon_name;
- int icon_pixbuf_width, icon_pixbuf_height;
-
- priv = store->priv;
-
- custom_icon_name = e_folder_get_custom_icon_name (folder);
- if (custom_icon_name != NULL)
- return e_icon_factory_get_icon (custom_icon_name, TRUE);
-
- type_name = e_folder_get_type_string (folder);
-
- scaled_pixbuf = g_hash_table_lookup (priv->type_name_to_pixbuf, type_name);
- if (scaled_pixbuf != NULL)
- return scaled_pixbuf;
-
- storage_set = priv->storage_set;
- folder_type_registry = e_storage_set_get_folder_type_registry (storage_set);
-
- icon_pixbuf = e_folder_type_registry_get_icon_for_type (folder_type_registry,
- type_name, TRUE);
-
- if (icon_pixbuf == NULL)
- return NULL;
-
- icon_pixbuf_width = gdk_pixbuf_get_width (icon_pixbuf);
- icon_pixbuf_height = gdk_pixbuf_get_height (icon_pixbuf);
-
- if (icon_pixbuf_width == E_SHELL_MINI_ICON_SIZE && icon_pixbuf_height == E_SHELL_MINI_ICON_SIZE) {
- scaled_pixbuf = g_object_ref (icon_pixbuf);
- } else {
- scaled_pixbuf = gdk_pixbuf_new (gdk_pixbuf_get_colorspace (icon_pixbuf),
- gdk_pixbuf_get_has_alpha (icon_pixbuf),
- gdk_pixbuf_get_bits_per_sample (icon_pixbuf),
- E_SHELL_MINI_ICON_SIZE, E_SHELL_MINI_ICON_SIZE);
-
- gdk_pixbuf_scale (icon_pixbuf, scaled_pixbuf,
- 0, 0, E_SHELL_MINI_ICON_SIZE, E_SHELL_MINI_ICON_SIZE,
- 0.0, 0.0,
- (double) E_SHELL_MINI_ICON_SIZE / gdk_pixbuf_get_width (icon_pixbuf),
- (double) E_SHELL_MINI_ICON_SIZE / gdk_pixbuf_get_height (icon_pixbuf),
- GDK_INTERP_HYPER);
- }
-
- g_hash_table_insert (priv->type_name_to_pixbuf, g_strdup (type_name), scaled_pixbuf);
-
- return scaled_pixbuf;
-}
-
-static void
-esss_get_value(GtkTreeModel *tree_model, GtkTreeIter *iter, gint column, GValue *value)
-{
- gchar *folder_path;
- const gchar *folder_name;
- int unread_count;
- EStorageSetStore *store = (EStorageSetStore *) tree_model;
- EFolder *folder;
- GNode *node;
- gboolean is_storage;
-
- g_return_if_fail(E_IS_STORAGE_SET_STORE(tree_model));
- g_return_if_fail(VALID_ITER(iter, store));
- g_return_if_fail(VALID_COL(column));
-
- node = G_NODE (iter->user_data);
- g_value_init(value, esss_get_column_type(tree_model, column));
-
- is_storage = (node->parent == store->priv->root);
-
- if (is_storage)
- folder_path = g_strconcat ("/", node->data, NULL);
- else
- folder_path = g_strdup (node->data);
-
- folder = e_storage_set_get_folder(store->priv->storage_set, folder_path);
- g_free (folder_path);
-
- switch (column) {
- case E_STORAGE_SET_STORE_COLUMN_NAME:
- if (!folder) {
- g_value_set_string(value, "?");
- return;
- }
- folder_name = e_folder_get_name(folder);
- unread_count = e_folder_get_unread_count(folder);
- if (unread_count > 0) {
- gchar *with_unread = g_strdup_printf("%s (%d)", folder_name, unread_count);
- g_object_set_data_full(G_OBJECT(folder), "name_with_unread",
- with_unread, g_free);
- g_value_set_string(value, with_unread);
- } else
- g_value_set_string(value, folder_name);
- break;
-
- case E_STORAGE_SET_STORE_COLUMN_HIGHLIGHT:
- if (!folder) {
- g_value_set_boolean(value, FALSE);
- return;
- }
- g_value_set_int(value, is_storage || e_folder_get_highlighted(folder) ? PANGO_WEIGHT_BOLD : 0);
- break;
-
- case E_STORAGE_SET_STORE_COLUMN_CHECKED:
- if (is_storage || !store->priv->checkboxes) {
- g_value_set_boolean(value, FALSE);
- return;
- }
- g_value_set_boolean(value,
- g_hash_table_lookup(store->priv->checkboxes, folder_path) ? TRUE : FALSE);
- break;
-
- case E_STORAGE_SET_STORE_COLUMN_CHECKABLE:
- g_value_set_boolean(value, !is_storage && has_checkbox(store, (gchar *)node->data));
- break;
-
- case E_STORAGE_SET_STORE_COLUMN_ICON:
- if (!is_storage)
- g_value_set_object (value, get_pixbuf_for_folder (store, folder));
- break;
-
- default:
- g_assert_not_reached ();
- break;
- }
-}
-
-static gboolean
-esss_iter_next(GtkTreeModel *tree_model, GtkTreeIter *iter)
-{
- g_return_val_if_fail(E_IS_STORAGE_SET_STORE(tree_model), FALSE);
- g_return_val_if_fail(VALID_ITER(iter, E_STORAGE_SET_STORE(tree_model)), FALSE);
-
- if (G_NODE(iter->user_data)->next) {
- iter->user_data = G_NODE(iter->user_data)->next;
- return TRUE;
- } else
- return FALSE;
-}
-
-static gboolean
-esss_iter_children(GtkTreeModel *tree_model, GtkTreeIter *iter, GtkTreeIter *parent)
-{
- GNode *children;
- EStorageSetStore *store = (EStorageSetStore *) tree_model;
-
- g_return_val_if_fail(E_IS_STORAGE_SET_STORE(tree_model), FALSE);
- g_return_val_if_fail(iter != NULL, FALSE);
- g_return_val_if_fail(parent == NULL || parent->user_data != NULL, FALSE);
- g_return_val_if_fail(parent == NULL || parent->stamp == store->priv->stamp, FALSE);
-
- if (parent)
- children = G_NODE(parent->user_data)->children;
- else
- children =
- G_NODE(store->priv->root)->children;
-
- if (children) {
- iter->stamp = store->priv->stamp;
- iter->user_data = children;
- return TRUE;
- } else
- return FALSE;
-}
-
-static gboolean
-esss_iter_has_child(GtkTreeModel *tree_model, GtkTreeIter *iter)
-{
- EStorageSetStore *store = (EStorageSetStore *) tree_model;
-
- g_return_val_if_fail(E_IS_STORAGE_SET_STORE(tree_model), FALSE);
- g_return_val_if_fail(VALID_ITER(iter, store), FALSE);
-
- return G_NODE(iter->user_data)->children != NULL;
-}
-
-static gint
-esss_iter_n_children(GtkTreeModel *tree_model, GtkTreeIter *iter)
-{
- GNode *node;
- gint i = 0;
- EStorageSetStore *store = (EStorageSetStore *) tree_model;
-
- g_return_val_if_fail(E_IS_STORAGE_SET_STORE(tree_model), 0);
- g_return_val_if_fail(iter == NULL || iter->user_data != NULL, FALSE);
-
- if (iter == NULL)
- node = G_NODE(store->priv->root)->children;
- else
- node = G_NODE(iter->user_data)->children;
-
- while (node) {
- i++;
- node = node->next;
- }
-
- return i;
-}
-
-static gboolean
-esss_iter_nth_child(GtkTreeModel *tree_model, GtkTreeIter *iter, GtkTreeIter *parent, gint n)
-{
- GNode *parent_node;
- GNode *child;
- EStorageSetStore *store = (EStorageSetStore *) tree_model;
-
- g_return_val_if_fail(E_IS_STORAGE_SET_STORE(tree_model), FALSE);
- g_return_val_if_fail(iter != NULL, FALSE);
- g_return_val_if_fail(parent == NULL || parent->user_data != NULL, FALSE);
-
- if (parent == NULL)
- parent_node = store->priv->root;
- else
- parent_node = parent->user_data;
-
- child = g_node_nth_child(parent_node, n);
-
- if (child) {
- iter->user_data = child;
- iter->stamp = store->priv->stamp;
- return TRUE;
- } else
- return FALSE;
-}
-
-static gboolean
-esss_iter_parent(GtkTreeModel *tree_model, GtkTreeIter *iter, GtkTreeIter *child)
-{
- GNode *parent;
- EStorageSetStore *store = (EStorageSetStore *) tree_model;
-
- g_return_val_if_fail(E_IS_STORAGE_SET_STORE(tree_model), FALSE);
- g_return_val_if_fail(iter != NULL, FALSE);
- g_return_val_if_fail(VALID_ITER(child, store), FALSE);
-
- parent = G_NODE(child->user_data)->parent;
-
- g_assert(parent != NULL);
-
- if (parent != store->priv->root) {
- iter->user_data = parent;
- iter->stamp = store->priv->stamp;
- return TRUE;
- } else
- return FALSE;
-}
-
-static void
-esss_tree_model_init(GtkTreeModelIface *iface)
-{
- iface->get_flags = esss_get_flags;
- iface->get_n_columns = esss_get_n_columns;
- iface->get_column_type = esss_get_column_type;
- iface->get_iter = esss_get_iter;
- iface->get_path = esss_get_path;
- iface->get_value = esss_get_value;
- iface->iter_next = esss_iter_next;
- iface->iter_children = esss_iter_children;
- iface->iter_has_child = esss_iter_has_child;
- iface->iter_n_children = esss_iter_n_children;
- iface->iter_nth_child = esss_iter_nth_child;
- iface->iter_parent = esss_iter_parent;
-}
-
-/* GtkTreeDragSource interface implementation */
-
-static gboolean
-esss_drag_data_delete(GtkTreeDragSource *source, GtkTreePath *path)
-{
- GtkTreeIter iter;
-
- g_return_val_if_fail(E_IS_STORAGE_SET_STORE(source), FALSE);
-
- if (gtk_tree_model_get_iter(GTK_TREE_MODEL(source), &iter, path)) {
-#if 0
- e_storage_set_store_remove(E_STORAGE_SET_STORE(source), &iter);
-#endif
- return TRUE;
- } else {
- return FALSE;
- }
-}
-
-static gboolean
-esss_drag_data_get(GtkTreeDragSource *source, GtkTreePath *path, GtkSelectionData *selection_data)
-{
- g_return_val_if_fail(E_IS_STORAGE_SET_STORE(source), FALSE);
-
- /* Note that we don't need to handle the GTK_TREE_MODEL_ROW
- * target, because the default handler does it for us, but
- * we do anyway for the convenience of someone maybe overriding the
- * default handler.
- */
-
- if (gtk_tree_set_row_drag_data(selection_data, GTK_TREE_MODEL(source), path)) {
- return TRUE;
- } else {
- /* FIXME handle text targets at least. */
- }
-
- return FALSE;
-}
-
-static void
-esss_drag_source_init(GtkTreeDragSourceIface * iface)
-{
- iface->drag_data_delete = esss_drag_data_delete;
- iface->drag_data_get = esss_drag_data_get;
-}
-
-/* GtkTreeDragDest interface implementation */
-
-static void
-copy_node_data(EStorageSetStore *store, GtkTreeIter *src_iter, GtkTreeIter *dest_iter)
-{
-}
-
-static void
-recursive_node_copy(EStorageSetStore * store,
- GtkTreeIter * src_iter, GtkTreeIter * dest_iter)
-{
-}
-
-static gboolean
-esss_drag_data_received(GtkTreeDragDest * drag_dest,
- GtkTreePath * dest,
- GtkSelectionData * selection_data)
-{
-#if 0
- GtkTreeModel *tree_model;
- EStorageSetStore *store;
- GtkTreeModel *src_model = NULL;
- GtkTreePath *src_path = NULL;
- gboolean retval = FALSE;
-
- g_return_val_if_fail(E_IS_STORAGE_SET_STORE(drag_dest), FALSE);
-
- tree_model = GTK_TREE_MODEL(drag_dest);
- store = E_STORAGE_SET_STORE(drag_dest);
-
- validate_tree(store);
-
- if (gtk_tree_get_row_drag_data(selection_data,
- &src_model,
- &src_path) &&
- src_model == tree_model) {
- /* Copy the given row to a new position */
- GtkTreeIter src_iter;
- GtkTreeIter dest_iter;
- GtkTreePath *prev;
-
- if (!gtk_tree_model_get_iter(src_model,
- &src_iter, src_path)) {
- goto out;
- }
-
- /* Get the path to insert _after_ (dest is the path to insert _before_) */
- prev = gtk_tree_path_copy(dest);
-
- if (!gtk_tree_path_prev(prev)) {
- GtkTreeIter dest_parent;
- GtkTreePath *parent;
- GtkTreeIter *dest_parent_p;
-
- /* dest was the first spot at the current depth; which means
- * we are supposed to prepend.
- */
-
- /* Get the parent, NULL if parent is the root */
- dest_parent_p = NULL;
- parent = gtk_tree_path_copy(dest);
- if (gtk_tree_path_up(parent) &&
- gtk_tree_path_get_depth(parent) > 0) {
- gtk_tree_model_get_iter(tree_model,
- &dest_parent,
- parent);
- dest_parent_p = &dest_parent;
- }
- gtk_tree_path_free(parent);
- parent = NULL;
-
- e_storage_set_store_prepend(E_STORAGE_SET_STORE(tree_model),
- &dest_iter, dest_parent_p);
-
- retval = TRUE;
- } else {
- if (gtk_tree_model_get_iter
- (GTK_TREE_MODEL(tree_model), &dest_iter,
- prev)) {
- GtkTreeIter tmp_iter = dest_iter;
-
- if (GPOINTER_TO_INT
- (g_object_get_data
- (G_OBJECT(tree_model),
- "gtk-tree-model-drop-append"))) {
- GtkTreeIter parent;
-
- if (gtk_tree_model_iter_parent
- (GTK_TREE_MODEL(tree_model),
- &parent, &tmp_iter))
- e_storage_set_store_append
- (E_STORAGE_SET_STORE
- (tree_model),
- &dest_iter, &parent);
- else
- e_storage_set_store_append
- (E_STORAGE_SET_STORE
- (tree_model),
- &dest_iter, NULL);
- } else
- e_storage_set_store_insert_after
- (E_STORAGE_SET_STORE(tree_model),
- &dest_iter, NULL, &tmp_iter);
- retval = TRUE;
-
- }
- }
-
- g_object_set_data(G_OBJECT(tree_model),
- "gtk-tree-model-drop-append", NULL);
-
- gtk_tree_path_free(prev);
-
- /* If we succeeded in creating dest_iter, walk src_iter tree branch,
- * duplicating it below dest_iter.
- */
-
- if (retval) {
- recursive_node_copy(store,
- &src_iter, &dest_iter);
- }
- } else {
- /* FIXME maybe add some data targets eventually, or handle text
- * targets in the simple case.
- */
-
- }
-
- out:
-
- if (src_path)
- gtk_tree_path_free(src_path);
-
- return retval;
-#else
- return FALSE;
-#endif
-}
-
-static gboolean
-esss_row_drop_possible(GtkTreeDragDest * drag_dest,
- GtkTreePath * dest_path,
- GtkSelectionData * selection_data)
-{
-#if 0
- GtkTreeModel *src_model = NULL;
- GtkTreePath *src_path = NULL;
- GtkTreePath *tmp = NULL;
- gboolean retval = FALSE;
-
- if (!gtk_tree_get_row_drag_data(selection_data,
- &src_model, &src_path))
- goto out;
-
- /* can only drag to ourselves */
- if (src_model != GTK_TREE_MODEL(drag_dest))
- goto out;
-
- /* Can't drop into ourself. */
- if (gtk_tree_path_is_ancestor(src_path, dest_path))
- goto out;
-
- /* Can't drop if dest_path's parent doesn't exist */
- {
- GtkTreeIter iter;
-
- if (gtk_tree_path_get_depth(dest_path) > 1) {
- tmp = gtk_tree_path_copy(dest_path);
- gtk_tree_path_up(tmp);
-
- if (!gtk_tree_model_get_iter
- (GTK_TREE_MODEL(drag_dest), &iter, tmp))
- goto out;
- }
- }
-
- /* Can otherwise drop anywhere. */
- retval = TRUE;
-
- out:
-
- if (src_path)
- gtk_tree_path_free(src_path);
- if (tmp)
- gtk_tree_path_free(tmp);
-
- return retval;
-#else
- return FALSE;
-#endif
-}
-
-static void
-esss_drag_dest_init(GtkTreeDragDestIface * iface)
-{
- iface->drag_data_received = esss_drag_data_received;
- iface->row_drop_possible = esss_row_drop_possible;
-}
-
-typedef struct {
- gint offset;
- GNode *node;
-} SortTuple;
-
-static gint
-folder_sort_callback (gconstpointer a, gconstpointer b, gpointer user_data)
-{
- EStorageSetStore *store = (EStorageSetStore *) user_data;
- EStorageSetStorePrivate *priv = store->priv;
- EFolder *folder_1, *folder_2;
- char *folder_path_1, *folder_path_2;
- int priority_1, priority_2;
-
-
- folder_path_1 = (gchar *)((SortTuple *)a)->node->data;
- folder_path_2 = (gchar *)((SortTuple *)b)->node->data;
-
- folder_1 = e_storage_set_get_folder (priv->storage_set, folder_path_1);
- folder_2 = e_storage_set_get_folder (priv->storage_set, folder_path_2);
-
- priority_1 = e_folder_get_sorting_priority (folder_1);
- priority_2 = e_folder_get_sorting_priority (folder_2);
-
- if (priority_1 == priority_2)
- return g_utf8_collate (e_folder_get_name (folder_1), e_folder_get_name (folder_2));
- else if (priority_1 < priority_2)
- return -1;
- else /* priority_1 > priority_2 */
- return +1;
-}
-
-static gint
-storage_sort_callback (gconstpointer a, gconstpointer b, gpointer user_data)
-{
- char *folder_path_1;
- char *folder_path_2;
- gboolean path_1_local;
- gboolean path_2_local;
-
- folder_path_1 = (gchar *)((SortTuple *)a)->node->data;
- folder_path_2 = (gchar *)((SortTuple *)b)->node->data;
-
- /* FIXME bad hack to put the "my evolution" and "local" storages on
- * top. */
-
- if (strcmp (folder_path_1, E_SUMMARY_STORAGE_NAME) == 0)
- return -1;
- if (strcmp (folder_path_2, E_SUMMARY_STORAGE_NAME) == 0)
- return +1;
-
- path_1_local = ! strcmp (folder_path_1, E_LOCAL_STORAGE_NAME);
- path_2_local = ! strcmp (folder_path_2, E_LOCAL_STORAGE_NAME);
-
- if (path_1_local && path_2_local)
- return 0;
- if (path_1_local)
- return -1;
- if (path_2_local)
- return 1;
-
- return g_utf8_collate (folder_path_1, folder_path_2);
-}
-
-static void
-esss_sort (EStorageSetStore *store, GNode *parent, GCompareDataFunc callback)
-{
- GtkTreeIter iter;
- GArray *sort_array;
- GNode *node;
- GNode *tmp_node;
- gint list_length;
- gint i;
- gint *new_order;
- GtkTreePath *path;
-
- node = parent->children;
- if (node == NULL || node->next == NULL)
- return;
-
- list_length = 0;
- for (tmp_node = node; tmp_node; tmp_node = tmp_node->next)
- list_length++;
-
- sort_array = g_array_sized_new(FALSE, FALSE, sizeof(SortTuple), list_length);
-
- i = 0;
- for (tmp_node = node; tmp_node; tmp_node = tmp_node->next) {
- SortTuple tuple;
-
- tuple.offset = i;
- tuple.node = tmp_node;
- g_array_append_val(sort_array, tuple);
- i++;
- }
-
- /* Sort the array */
- g_array_sort_with_data(sort_array, callback, store);
-
- for (i = 0; i < list_length - 1; i++) {
- g_array_index(sort_array, SortTuple, i).node->next =
- g_array_index(sort_array, SortTuple, i + 1).node;
- g_array_index(sort_array, SortTuple, i + 1).node->prev =
- g_array_index(sort_array, SortTuple, i).node;
- }
- g_array_index(sort_array, SortTuple, list_length - 1).node->next = NULL;
- g_array_index(sort_array, SortTuple, 0).node->prev = NULL;
- parent->children = g_array_index(sort_array, SortTuple, 0).node;
-
- /* Let the world know about our new order */
- new_order = g_new(gint, list_length);
- for (i = 0; i < list_length; i++)
- new_order[i] = g_array_index(sort_array, SortTuple, i).offset;
-
- iter.stamp = store->priv->stamp;
- iter.user_data = parent;
- path = esss_get_path(GTK_TREE_MODEL(store), &iter);
- gtk_tree_model_rows_reordered(GTK_TREE_MODEL(store), path, &iter, new_order);
- if (path)
- gtk_tree_path_free(path);
- g_free(new_order);
- g_array_free(sort_array, TRUE);
-}
-
-static void
-esss_init(EStorageSetStore *store)
-{
- store->priv = g_new0(EStorageSetStorePrivate, 1);
-
- store->priv->storage_set = NULL;
- store->priv->checkboxes = NULL;
- store->priv->root = g_node_new(NULL);
- do {
- store->priv->stamp = g_random_int();
- } while (store->priv->stamp == 0);
-
- store->priv->path_to_node = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
- store->priv->type_name_to_pixbuf = g_hash_table_new (g_str_hash, g_str_equal);
-}
-
-static void
-esss_dispose(GObject *object)
-{
- EStorageSetStore *store = E_STORAGE_SET_STORE(object);
-
- if (store->priv->storage_set)
- g_object_unref(store->priv->storage_set);
- store->priv->storage_set = NULL;
-
- (*parent_class->dispose) (object);
-}
-
-static void
-node_free (GNode *node, gpointer data)
-{
- g_free (node->data);
-}
-
-static void
-pixbuf_free_func (gpointer key, gpointer value, gpointer user_data)
-{
- g_free (key);
- g_object_unref (value);
-}
-
-static void
-esss_finalize(GObject *object)
-{
- EStorageSetStore *store = E_STORAGE_SET_STORE(object);
-
- g_node_children_foreach(store->priv->root, G_TRAVERSE_ALL, node_free, NULL);
-
- g_hash_table_foreach (store->priv->type_name_to_pixbuf, pixbuf_free_func, NULL);
- g_hash_table_destroy (store->priv->type_name_to_pixbuf);
- g_hash_table_destroy (store->priv->path_to_node);
- if (store->priv->checkboxes)
- g_hash_table_destroy (store->priv->checkboxes);
-
- g_free (store->priv);
-
- (*parent_class->finalize) (object);
-}
-
-static void
-esss_class_init(EStorageSetStoreClass *class)
-{
- GObjectClass *object_class;
-
- parent_class = g_type_class_peek_parent(class);
- object_class = (GObjectClass *) class;
-
- object_class->dispose = esss_dispose;
- object_class->finalize = esss_finalize;
-}
-
-GType
-e_storage_set_store_get_type(void)
-{
- static GType store_type = 0;
-
- if (!store_type) {
- static const GTypeInfo store_info = {
- sizeof(EStorageSetStoreClass),
- NULL, /* base_init */
- NULL, /* base_finalize */
- (GClassInitFunc) esss_class_init,
- NULL, /* class_finalize */
- NULL, /* class_data */
- sizeof(EStorageSetStore),
- 0, /* n_preallocs */
- (GInstanceInitFunc) esss_init
- };
-
- static const GInterfaceInfo tree_model_info = {
- (GInterfaceInitFunc)
- esss_tree_model_init,
- NULL,
- NULL
- };
-
- static const GInterfaceInfo drag_source_info = {
- (GInterfaceInitFunc)
- esss_drag_source_init,
- NULL,
- NULL
- };
-
- static const GInterfaceInfo drag_dest_info = {
- (GInterfaceInitFunc) esss_drag_dest_init,
- NULL,
- NULL
- };
-
- store_type = g_type_register_static(G_TYPE_OBJECT, "EStorageSetStore", &store_info, 0);
-
- g_type_add_interface_static(store_type, GTK_TYPE_TREE_MODEL, &tree_model_info);
- g_type_add_interface_static(store_type, GTK_TYPE_TREE_DRAG_SOURCE, &drag_source_info);
- g_type_add_interface_static(store_type, GTK_TYPE_TREE_DRAG_DEST, &drag_dest_info);
- }
-
- return store_type;
-}
-
-/* Handling of the "changed" signal in EFolders displayed in the EStorageSetStore. */
-
-typedef struct {
- EStorageSetStore *store;
- GNode * node;
-} FolderChangedCallbackData;
-
-static void
-folder_changed_cb (EFolder *folder, void *data)
-{
- FolderChangedCallbackData *callback_data;
- GtkTreePath *path;
- GtkTreeIter iter;
-
- callback_data = (FolderChangedCallbackData *) data;
- iter.user_data = callback_data->node;
- iter.stamp = callback_data->store->priv->stamp;
- path = esss_get_path (GTK_TREE_MODEL (callback_data->store), &iter);
-
- gtk_tree_model_row_changed (GTK_TREE_MODEL (callback_data->store), path, &iter);
- if (path)
- gtk_tree_path_free (path);
-}
-
-static void
-folder_name_changed_cb (EFolder *folder, void *data)
-{
- FolderChangedCallbackData *callback_data;
-
- callback_data = (FolderChangedCallbackData *) data;
-
- esss_sort (callback_data->store, callback_data->node->parent, folder_sort_callback);
-}
-
-static void
-setup_folder_changed_callbacks (EStorageSetStore *store, EFolder *folder, GNode *node)
-{
- FolderChangedCallbackData *callback_data = g_new0 (FolderChangedCallbackData, 1);
- callback_data->store = store;
- callback_data->node = node;
-
- g_signal_connect (G_OBJECT (folder), "changed",
- G_CALLBACK (folder_changed_cb), callback_data);
-
- g_signal_connect_data (G_OBJECT (folder), "name_changed",
- G_CALLBACK (folder_name_changed_cb),
- callback_data, (GClosureNotify)g_free, 0);
-}
-
-static void
-insert_folders (EStorageSetStore *store, GNode *parent, EStorage *storage, const gchar *path)
-{
- EStorageSetStorePrivate *priv;
- GList *folder_path_list, *p;
- const gchar *storage_name = e_storage_get_name (storage);
-
- priv = store->priv;
-
- folder_path_list = e_storage_get_subfolder_paths (storage, path);
- if (folder_path_list == NULL)
- return;
-
- for (p = folder_path_list; p != NULL; p = p->next) {
- EFolder *folder;
- const char *subpath = (const char *) p->data;
- char *folder_path = g_strconcat ("/", storage_name, subpath, NULL);
- gchar *key = g_strdup (folder_path+1);
- GNode *node = g_node_new (folder_path);
-
- g_node_append (parent, node);
- g_hash_table_replace (priv->path_to_node, key, node);
-
- folder = e_storage_get_folder (storage, subpath);
- setup_folder_changed_callbacks (store, folder, node);
-
- insert_folders (store, node, storage, subpath);
- }
-
- esss_sort (store, parent, folder_sort_callback);
-
- e_free_string_list (folder_path_list);
-}
-
-/* StorageSet signal handling. */
-
-static void
-new_storage_cb (EStorageSet *storage_set, EStorage *storage, void *data)
-{
- EStorageSetStore *store = E_STORAGE_SET_STORE (data);
- EStorageSetStorePrivate *priv = store->priv;
- gchar *storage_name = g_strdup (e_storage_get_name (storage));
- GNode *node = g_node_new (g_strdup (e_storage_get_name (storage)));
- GtkTreePath *path;
- GtkTreeIter iter;
-
- g_hash_table_replace (priv->path_to_node, storage_name, node);
- g_node_append (priv->root, node);
- esss_sort (store, priv->root, storage_sort_callback);
-
- iter.user_data = node;
- iter.stamp = store->priv->stamp;
- path = esss_get_path (GTK_TREE_MODEL (store), &iter);
- gtk_tree_model_row_inserted (GTK_TREE_MODEL (store), path, &iter);
- if (path)
- gtk_tree_path_free (path);
-}
-
-static void
-removed_storage_cb (EStorageSet *storage_set, EStorage *storage, void *data)
-{
- EStorageSetStore *store = E_STORAGE_SET_STORE (data);
- EStorageSetStorePrivate *priv = store->priv;
- const gchar *name = e_storage_get_name (storage);
- GNode *node = g_hash_table_lookup (priv->path_to_node, name);
- GtkTreePath *path;
-
- if (node == NULL) {
- g_warning ("EStorageSetStore: unknown storage removed -- %s", name);
- return;
- }
-
- g_hash_table_remove (priv->path_to_node, name);
- /* FIXME: subfolder hashtable entries might be leaked */
-
- path = tree_path_from_node (store, node);
- gtk_tree_model_row_deleted (GTK_TREE_MODEL (store), path);
- if (path)
- gtk_tree_path_free (path);
- g_node_destroy (node);
-}
-
-static void
-new_folder_cb (EStorageSet *storage_set, const char *path, void *data)
-{
- EStorageSetStore *store = E_STORAGE_SET_STORE (data);
- EStorageSetStorePrivate *priv = store->priv;
- GNode *parent_node, *new_node;
- const char *last_separator;
- char *parent_path;
- char *copy_of_path;
- GtkTreeIter iter;
- GtkTreePath *treepath;
-
- last_separator = strrchr (path, E_PATH_SEPARATOR);
-
- parent_path = g_strndup (path + 1, last_separator - path - 1);
- parent_node = g_hash_table_lookup (priv->path_to_node, parent_path);
- g_free (parent_path);
- if (parent_node == NULL) {
- g_warning ("EStorageSetStore: EStorageSet reported new subfolder for non-existing folder -- %s", parent_path);
- return;
- }
-
- copy_of_path = g_strdup (path);
- new_node = g_node_new (copy_of_path);
- g_node_append (parent_node, new_node);
- iter.user_data = new_node;
- iter.stamp = priv->stamp;
- treepath = esss_get_path (GTK_TREE_MODEL (store), &iter);
- gtk_tree_model_row_inserted (GTK_TREE_MODEL (store), treepath, &iter);
- if (treepath)
- gtk_tree_path_free (treepath);
-
- g_hash_table_replace (priv->path_to_node, g_strdup (path + 1), new_node);
-
- setup_folder_changed_callbacks (store, e_storage_set_get_folder (storage_set, path), new_node);
- esss_sort (store, parent_node, folder_sort_callback);
-}
-
-static void
-updated_folder_cb (EStorageSet *storage_set, const char *path, void *data)
-{
- EStorageSetStore *store = E_STORAGE_SET_STORE (data);
- EStorageSetStorePrivate *priv = store->priv;
- GNode *node;
- GtkTreeIter iter;
- GtkTreePath *treepath;
-
- node = g_hash_table_lookup (priv->path_to_node, path+1);
- if (node == NULL) {
- g_warning ("EStorageSetStore: unknown folder updated -- %s", path);
- return;
- }
-
- iter.user_data = node;
- iter.stamp = priv->stamp;
- treepath = esss_get_path (GTK_TREE_MODEL (store), &iter);
- gtk_tree_model_row_changed (GTK_TREE_MODEL (store), treepath, &iter);
- if (treepath)
- gtk_tree_path_free (treepath);
-}
-
-static void
-removed_folder_cb (EStorageSet *storage_set, const char *path, void *data)
-{
- EStorageSetStore *store = E_STORAGE_SET_STORE (data);
- EStorageSetStorePrivate *priv = store->priv;
- GNode *node;
- GtkTreePath *treepath;
-
- node = g_hash_table_lookup (priv->path_to_node, path+1);
- if (node == NULL) {
- g_warning ("EStorageSetStore: unknown folder removed -- %s", path);
- return;
- }
-
- g_hash_table_remove (priv->path_to_node, path+1);
- /* FIXME: subfolder hashtable entries might be leaked */
-
- treepath = tree_path_from_node (store, node);
- gtk_tree_model_row_deleted (GTK_TREE_MODEL (store), treepath);
- if (treepath)
- gtk_tree_path_free (treepath);
- g_node_destroy (node);
-}
-
-static void
-close_folder_cb (EStorageSet *storage_set,
- const char *path,
- void *data)
-{
- g_warning ("FIXME: EStorageSetStore: needs to handle close_folder properly");
-#if 0
- EStorageSetStore *store;
- EStorageSetStorePrivate *priv;
- ETreeModel *etree;
- ETreePath node;
-
- store = E_STORAGE_SET_STORE (data);
- priv = store->priv;
- etree = priv->etree_model;
-
- node = lookup_node_in_hash (store, path);
- e_tree_model_node_request_collapse (priv->etree_model, node);
-#endif
-}
-
-static void
-connect_storage_set (EStorageSetStore *store, EStorageSet *storage_set, gboolean show_folders)
-{
- EStorageSetStorePrivate *priv;
- GList *storage_list;
- GList *p;
-
- priv = store->priv;
- priv->storage_set = storage_set;
- g_object_ref (storage_set);
-
- storage_list = e_storage_set_get_storage_list (storage_set);
-
- for (p = storage_list; p != NULL; p = p->next) {
- EStorage *storage = E_STORAGE (p->data);
- const char *name = e_storage_get_name (storage);
- GNode *node = g_node_new (g_strdup (name));
- g_node_append (priv->root, node);
- g_hash_table_replace (priv->path_to_node, g_strdup (name), node);
-
- if (show_folders)
- insert_folders (store, node, storage, "/");
- }
-
- esss_sort (store, priv->root, storage_sort_callback);
-
- e_free_object_list (storage_list);
-
- g_signal_connect_object (storage_set, "new_storage", G_CALLBACK (new_storage_cb), store, 0);
- g_signal_connect_object (storage_set, "removed_storage", G_CALLBACK (removed_storage_cb), store, 0);
- if (!show_folders)
- return;
-
- g_signal_connect_object (storage_set, "new_folder", G_CALLBACK (new_folder_cb), store, 0);
- g_signal_connect_object (storage_set, "updated_folder", G_CALLBACK (updated_folder_cb), store, 0);
- g_signal_connect_object (storage_set, "removed_folder", G_CALLBACK (removed_folder_cb), store, 0);
- g_signal_connect_object (storage_set, "close_folder", G_CALLBACK (close_folder_cb), store, 0);
-}
-
-/**
- * e_storage_set_store_new:
- * @storage_set: the #EStorageSet that the store exposes
- * @show_folders: flag indicating if subfolders should be shown
- *
- * Creates a new tree store from the provided #EStorageSet.
- *
- * Return value: a new #EStorageSetStore
- **/
-EStorageSetStore *
-e_storage_set_store_new(EStorageSet *storage_set, gboolean show_folders)
-{
- EStorageSetStore *store;
- g_return_val_if_fail (E_IS_STORAGE_SET(storage_set), NULL);
-
- store = E_STORAGE_SET_STORE (g_object_new (E_STORAGE_SET_STORE_TYPE, NULL));
- connect_storage_set (store, storage_set, show_folders);
-
- return store;
-}
-
-static gboolean
-esss_real_set_value(EStorageSetStore *store, GtkTreeIter *iter, gint column, GValue *value)
-{
- gchar *path;
-
- if (column != E_STORAGE_SET_STORE_COLUMN_CHECKED)
- return FALSE;
-
- path = G_NODE (iter->user_data)->data;
-
- if (g_value_get_boolean (value)) {
- g_hash_table_insert (store->priv->checkboxes, path, path);
- } else {
- g_hash_table_remove (store->priv->checkboxes, path);
- }
-
- return TRUE;
-}
-
-/**
- * e_storage_set_store_set_value:
- * @store: a #EStorageSetStore
- * @iter: A valid #GtkTreeIter for the row being modified
- * @column: column number to modify
- * @value: new value for the cell
- *
- * Sets the data in the cell specified by @iter and @column.
- * The type of @value must be convertible to the type of the
- * column.
- *
- **/
-void
-e_storage_set_store_set_value(EStorageSetStore *store, GtkTreeIter *iter,
- gint column, GValue *value)
-{
- g_return_if_fail(E_IS_STORAGE_SET_STORE(store));
- g_return_if_fail(VALID_ITER(iter, store));
- g_return_if_fail(VALID_COL(column));
- g_return_if_fail(G_IS_VALUE(value));
-
- if (esss_real_set_value (store, iter, column, value)) {
- GtkTreePath *path;
-
- path = gtk_tree_model_get_path(GTK_TREE_MODEL(store), iter);
- gtk_tree_model_row_changed(GTK_TREE_MODEL(store), path, iter);
- if (path)
- gtk_tree_path_free(path);
- }
-}
-
-/**
- * e_storage_set_store_get_tree_path:
- * @store: a #EStorageSetStore
- * @folder_path: a string representing the #EStorageSet folder path
- *
- * Gets a #GtkTreePath corresponding to the folder path specified.
- *
- * Return value: the tree path of the folder
- **/
-GtkTreePath *
-e_storage_set_store_get_tree_path (EStorageSetStore *store, const gchar *folder_path)
-{
- GNode *node;
-
- g_return_if_fail(E_IS_STORAGE_SET_STORE(store));
-
- node = g_hash_table_lookup (store->priv->path_to_node, folder_path+1);
-
- return tree_path_from_node (store, node);
-}
-
-/**
- * e_storage_set_store_get_folder_path:
- * @store: a #EStorageSetStore
- * @folder_path: a string representing the #EStorageSet folder path
- *
- * Gets a #GtkTreePath corresponding to the folder path specified.
- *
- * Return value: the tree path of the folder
- **/
-const gchar *
-e_storage_set_store_get_folder_path (EStorageSetStore *store, GtkTreePath *tree_path)
-{
- GtkTreeIter iter;
- GNode *node;
-
- g_return_if_fail(E_IS_STORAGE_SET_STORE(store));
-
- if (!esss_get_iter (GTK_TREE_MODEL (store), &iter, tree_path))
- return NULL;
-
- node = G_NODE (iter.user_data);
-
- return (const gchar *)node->data;
-}
-
-/**
- * e_storage_set_store_set_has_checkbox_func:
- * @store: a #EStorageSetStore
- * @func: a callback to determine if a row is checked
- * @data: callback data
- *
- * Sets a callback function for checkbox visibility determination
- **/
-void
-e_storage_set_store_set_has_checkbox_func (EStorageSetStore *store, EStorageSetStoreHasCheckBoxFunc func, gpointer data)
-{
- g_return_if_fail(E_IS_STORAGE_SET_STORE(store));
-
- store->priv->has_checkbox_func = func;
- store->priv->has_checkbox_func_data = data;
-}
-
diff --git a/shell/e-storage-set-store.h b/shell/e-storage-set-store.h
deleted file mode 100644
index 251b61e519..0000000000
--- a/shell/e-storage-set-store.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-storage-set-store.h
- *
- * Copyright (C) 2002 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Mike Kestner
- */
-
-#ifndef __E_STORAGE_SET_STORE_H__
-#define __E_STORAGE_SET_STORE_H__
-
-#include <gtk/gtktreemodel.h>
-#include "e-storage-set.h"
-#include "e-storage-set-store.h"
-
-G_BEGIN_DECLS
-
-#define E_STORAGE_SET_STORE_TYPE (e_storage_set_store_get_type ())
-#define E_STORAGE_SET_STORE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), E_STORAGE_SET_STORE_TYPE, EStorageSetStore))
-#define E_STORAGE_SET_STORE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), E_STORAGE_SET_STORE_TYPE, EStorageSetStoreClass))
-#define E_IS_STORAGE_SET_STORE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), E_STORAGE_SET_STORE_TYPE))
-#define E_IS_STORAGE_SET_STORE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), E_STORAGE_SET_STORE_TYPE))
-#define E_STORAGE_SET_STORE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), E_STORAGE_SET_STORE_TYPE, EStorageSetStoreClass))
-
-typedef gboolean (* EStorageSetStoreHasCheckBoxFunc) (EStorageSet *storage_set,
- const char *path,
- void *data);
-
-typedef enum {
- E_STORAGE_SET_STORE_COLUMN_NAME,
- E_STORAGE_SET_STORE_COLUMN_HIGHLIGHT,
- E_STORAGE_SET_STORE_COLUMN_CHECKED,
- E_STORAGE_SET_STORE_COLUMN_CHECKABLE,
- E_STORAGE_SET_STORE_COLUMN_ICON,
- E_STORAGE_SET_STORE_COLUMN_COUNT
-} E_STORAGE_SET_STORE_COLUMN_TYPE;
-
-typedef struct _EStorageSetStore EStorageSetStore;
-typedef struct _EStorageSetStorePrivate EStorageSetStorePrivate;
-typedef struct _EStorageSetStoreClass EStorageSetStoreClass;
-
-struct _EStorageSetStore {
- GObject parent;
-
- EStorageSetStorePrivate *priv;
-};
-
-struct _EStorageSetStoreClass {
- GObjectClass parent_class;
-};
-
-
-GType e_storage_set_store_get_type (void);
-
-EStorageSetStore *e_storage_set_store_new (EStorageSet *storage_set, gboolean show_folders);
-
-EStorageSet *e_storage_set_store_get_storage_set (EStorageSetStore *storage_set_store);
-
-void e_storage_set_store_set_checkboxes_list (EStorageSetStore *storage_set_store,
- GSList *checkboxes);
-GSList *e_storage_set_store_get_checkboxes_list (EStorageSetStore *storage_set_store);
-
-void e_storage_set_store_set_allow_dnd (EStorageSetStore *storage_set_store,
- gboolean allow_dnd);
-gboolean e_storage_set_store_get_allow_dnd (EStorageSetStore *storage_set_store);
-
-GtkTreePath *e_storage_set_store_get_tree_path (EStorageSetStore *store, const gchar *folder_path);
-
-const gchar *e_storage_set_store_get_folder_path (EStorageSetStore *store, GtkTreePath *tree_path);
-
-void e_storage_set_store_set_has_checkbox_func (EStorageSetStore *storage_set_store,
- EStorageSetStoreHasCheckBoxFunc func,
- gpointer data);
-
-G_END_DECLS
-
-#endif /* __E_STORAGE_SET_STORE_H__ */
diff --git a/shell/e-storage-set-view-checkboxes.etstate b/shell/e-storage-set-view-checkboxes.etstate
deleted file mode 100644
index 302fb15321..0000000000
--- a/shell/e-storage-set-view-checkboxes.etstate
+++ /dev/null
@@ -1,5 +0,0 @@
-<ETableState>
- <column source="1"/>
- <column source="0"/>
- <grouping></grouping>
-</ETableState>
diff --git a/shell/e-storage-set-view-no-checkboxes.etstate b/shell/e-storage-set-view-no-checkboxes.etstate
deleted file mode 100644
index f3df4f8991..0000000000
--- a/shell/e-storage-set-view-no-checkboxes.etstate
+++ /dev/null
@@ -1,4 +0,0 @@
-<ETableState>
- <column source="0"/>
- <grouping></grouping>
-</ETableState>
diff --git a/shell/e-storage-set-view.c b/shell/e-storage-set-view.c
deleted file mode 100644
index 735da0ab21..0000000000
--- a/shell/e-storage-set-view.c
+++ /dev/null
@@ -1,2444 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-storage-set-view.c
- *
- * Copyright (C) 2000, 2001, 2002 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- * Etree-ification: Chris Toshok
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "e-storage-set-view.h"
-
-#include "e-util/e-gtk-utils.h"
-
-#include "e-corba-storage.h"
-#include "e-icon-factory.h"
-#include "e-folder-dnd-bridge.h"
-#include "e-shell-constants.h"
-#include "e-shell-marshal.h"
-
-#include <gal/util/e-util.h>
-#include <gal/widgets/e-gui-utils.h>
-#include <gal/e-table/e-tree-memory-callbacks.h>
-#include <gal/e-table/e-cell-text.h>
-#include <gal/e-table/e-cell-toggle.h>
-#include <gal/e-table/e-cell-tree.h>
-
-#include <libgnome/gnome-util.h>
-#include <libgnomeui/gnome-popup-menu.h>
-
-#include <bonobo/bonobo-window.h>
-#include <bonobo/bonobo-ui-util.h>
-
-#include <gtk/gtksignal.h>
-
-#include <string.h>
-
-#include "check-empty.xpm"
-#include "check-filled.xpm"
-#include "check-missing.xpm"
-
-
-static GdkPixbuf *checks [3];
-
-
-/*#define DEBUG_XML*/
-
-#define ROOT_NODE_NAME "/RootNode"
-
-
-/* This is used on the source side to define the two basic types that we always
- export. */
-enum _DndTargetTypeIdx {
- E_FOLDER_DND_PATH_TARGET_TYPE_IDX = 0,
- E_SHORTCUT_TARGET_TYPE_IDX = 1
-};
-typedef enum _DndTargetTypeIdx DndTargetTypeIdx;
-
-#define E_SHORTCUT_TARGET_TYPE "E-SHORTCUT"
-
-
-#define PARENT_TYPE E_TREE_TYPE
-static ETreeClass *parent_class = NULL;
-
-struct _EStorageSetViewPrivate {
- EStorageSet *storage_set;
-
- BonoboUIComponent *ui_component;
- BonoboUIContainer *ui_container;
-
- ETreeModel *etree_model;
- ETreePath root_node;
-
- GHashTable *path_to_etree_node;
-
- GHashTable *type_name_to_pixbuf;
-
- /* Path of the row selected by the latest "cursor_activated" signal. */
- char *selected_row_path;
-
- /* Path of the row selected by a right click. */
- char *right_click_row_path;
-
- unsigned int show_folders : 1;
- unsigned int show_checkboxes : 1;
- unsigned int allow_dnd : 1;
- unsigned int search_enabled : 1;
-
- /* The `Evolution::ShellComponentDnd::SourceFolder' interface for the
- folder we are dragging from, or CORBA_OBJECT_NIL if no dragging is
- happening. */
- GNOME_Evolution_ShellComponentDnd_SourceFolder drag_corba_source_interface;
-
- /* Source context information. NULL if no dragging is in progress. */
- GNOME_Evolution_ShellComponentDnd_SourceFolder_Context *drag_corba_source_context;
-
- /* The data. */
- GNOME_Evolution_ShellComponentDnd_Data *drag_corba_data;
-
- GHashTable *checkboxes;
-
- /* Callback to determine whether the row should have a checkbox or
- not, when show_checkboxes is TRUE. */
- EStorageSetViewHasCheckBoxFunc has_checkbox_func;
- void *has_checkbox_func_data;
-};
-
-
-enum {
- FOLDER_SELECTED,
- FOLDER_OPENED,
- DND_ACTION,
- FOLDER_CONTEXT_MENU_POPPING_UP,
- FOLDER_CONTEXT_MENU_POPPED_DOWN,
- CHECKBOXES_CHANGED,
- LAST_SIGNAL
-};
-
-static unsigned int signals[LAST_SIGNAL] = { 0 };
-
-
-/* Forward declarations. */
-
-static void setup_folder_changed_callbacks (EStorageSetView *storage_set_view,
- EFolder *folder,
- const char *path);
-
-
-/* DND stuff. */
-
-enum _DndTargetType {
- DND_TARGET_TYPE_URI_LIST,
- DND_TARGET_TYPE_E_SHORTCUT
-};
-typedef enum _DndTargetType DndTargetType;
-
-#define URI_LIST_TYPE "text/uri-list"
-#define E_SHORTCUT_TYPE "E-SHORTCUT"
-
-
-/* Sorting callbacks. */
-
-static int
-storage_sort_callback (ETreeMemory *etmm,
- ETreePath node1,
- ETreePath node2,
- void *closure)
-{
- char *folder_path_1;
- char *folder_path_2;
- gboolean path_1_local;
- gboolean path_2_local;
-
- folder_path_1 = e_tree_memory_node_get_data(etmm, node1);
- folder_path_2 = e_tree_memory_node_get_data(etmm, node2);
-
- /* FIXME bad hack to put the "my evolution" and "local" storages on
- top. */
-
- if (strcmp (folder_path_1, E_PATH_SEPARATOR_S E_SUMMARY_STORAGE_NAME) == 0)
- return -1;
- if (strcmp (folder_path_2, E_PATH_SEPARATOR_S E_SUMMARY_STORAGE_NAME) == 0)
- return +1;
-
- path_1_local = ! strcmp (folder_path_1, E_PATH_SEPARATOR_S E_LOCAL_STORAGE_NAME);
- path_2_local = ! strcmp (folder_path_2, E_PATH_SEPARATOR_S E_LOCAL_STORAGE_NAME);
-
- if (path_1_local && path_2_local)
- return 0;
- if (path_1_local)
- return -1;
- if (path_2_local)
- return 1;
-
- return g_utf8_collate (e_tree_model_value_at (E_TREE_MODEL (etmm), node1, 0),
- e_tree_model_value_at (E_TREE_MODEL (etmm), node2, 0));
-}
-
-static int
-folder_sort_callback (ETreeMemory *etmm,
- ETreePath node1,
- ETreePath node2,
- void *closure)
-{
- EStorageSetViewPrivate *priv;
- EFolder *folder_1, *folder_2;
- const char *folder_path_1, *folder_path_2;
- int priority_1, priority_2;
-
- priv = E_STORAGE_SET_VIEW (closure)->priv;
-
- folder_path_1 = e_tree_memory_node_get_data(etmm, node1);
- folder_path_2 = e_tree_memory_node_get_data(etmm, node2);
-
- folder_1 = e_storage_set_get_folder (priv->storage_set, folder_path_1);
- folder_2 = e_storage_set_get_folder (priv->storage_set, folder_path_2);
-
- priority_1 = e_folder_get_sorting_priority (folder_1);
- priority_2 = e_folder_get_sorting_priority (folder_2);
-
- if (priority_1 == priority_2)
- return g_utf8_collate (e_tree_model_value_at (E_TREE_MODEL (etmm), node1, 0),
- e_tree_model_value_at (E_TREE_MODEL (etmm), node2, 0));
- else if (priority_1 < priority_2)
- return -1;
- else /* priority_1 > priority_2 */
- return +1;
-}
-
-
-/* Helper functions. */
-
-static gboolean
-add_node_to_hash (EStorageSetView *storage_set_view,
- const char *path,
- ETreePath node)
-{
- EStorageSetViewPrivate *priv;
- char *hash_path;
-
- g_return_val_if_fail (g_path_is_absolute (path), FALSE);
-
- priv = storage_set_view->priv;
-
- if (g_hash_table_lookup (priv->path_to_etree_node, path) != NULL) {
- g_warning ("EStorageSetView: Node already existing while adding -- %s", path);
- return FALSE;
- }
-
- hash_path = g_strdup (path);
-
- g_hash_table_insert (priv->path_to_etree_node, hash_path, node);
-
- return TRUE;
-}
-
-static ETreePath
-lookup_node_in_hash (EStorageSetView *storage_set_view,
- const char *path)
-{
- EStorageSetViewPrivate *priv;
- ETreePath node;
-
- priv = storage_set_view->priv;
-
- node = g_hash_table_lookup (priv->path_to_etree_node, path);
- if (node == NULL)
- g_warning ("EStorageSetView: Node not found while updating -- %s", path);
-
- return node;
-}
-
-static ETreePath
-remove_node_from_hash (EStorageSetView *storage_set_view,
- const char *path)
-{
- EStorageSetViewPrivate *priv;
- ETreePath node;
-
- priv = storage_set_view->priv;
-
- node = g_hash_table_lookup (priv->path_to_etree_node, path);
- if (node == NULL) {
- g_warning ("EStorageSetView: Node not found while removing -- %s", path);
- return NULL;
- }
-
- g_hash_table_remove (priv->path_to_etree_node, path);
-
- return node;
-}
-
-static GdkPixbuf *
-get_pixbuf_for_folder (EStorageSetView *storage_set_view,
- EFolder *folder)
-{
- const char *type_name;
- EStorageSetViewPrivate *priv;
- EFolderTypeRegistry *folder_type_registry;
- EStorageSet *storage_set;
- GdkPixbuf *icon_pixbuf;
- GdkPixbuf *scaled_pixbuf;
- const char *custom_icon_name;
- int icon_pixbuf_width, icon_pixbuf_height;
-
- priv = storage_set_view->priv;
-
- custom_icon_name = e_folder_get_custom_icon_name (folder);
- if (custom_icon_name != NULL)
- return e_icon_factory_get_icon (custom_icon_name, TRUE);
-
- type_name = e_folder_get_type_string (folder);
-
- scaled_pixbuf = g_hash_table_lookup (priv->type_name_to_pixbuf, type_name);
- if (scaled_pixbuf != NULL)
- return scaled_pixbuf;
-
- storage_set = priv->storage_set;
- folder_type_registry = e_storage_set_get_folder_type_registry (storage_set);
-
- icon_pixbuf = e_folder_type_registry_get_icon_for_type (folder_type_registry,
- type_name, TRUE);
-
- if (icon_pixbuf == NULL)
- return NULL;
-
- icon_pixbuf_width = gdk_pixbuf_get_width (icon_pixbuf);
- icon_pixbuf_height = gdk_pixbuf_get_height (icon_pixbuf);
-
- if (icon_pixbuf_width == E_SHELL_MINI_ICON_SIZE && icon_pixbuf_height == E_SHELL_MINI_ICON_SIZE) {
- scaled_pixbuf = g_object_ref (icon_pixbuf);
- } else {
- scaled_pixbuf = gdk_pixbuf_new (gdk_pixbuf_get_colorspace (icon_pixbuf),
- gdk_pixbuf_get_has_alpha (icon_pixbuf),
- gdk_pixbuf_get_bits_per_sample (icon_pixbuf),
- E_SHELL_MINI_ICON_SIZE, E_SHELL_MINI_ICON_SIZE);
-
- gdk_pixbuf_scale (icon_pixbuf, scaled_pixbuf,
- 0, 0, E_SHELL_MINI_ICON_SIZE, E_SHELL_MINI_ICON_SIZE,
- 0.0, 0.0,
- (double) E_SHELL_MINI_ICON_SIZE / gdk_pixbuf_get_width (icon_pixbuf),
- (double) E_SHELL_MINI_ICON_SIZE / gdk_pixbuf_get_height (icon_pixbuf),
- GDK_INTERP_HYPER);
- }
-
- g_hash_table_insert (priv->type_name_to_pixbuf, g_strdup (type_name), scaled_pixbuf);
-
- return scaled_pixbuf;
-}
-
-static EFolder *
-get_folder_at_node (EStorageSetView *storage_set_view,
- ETreePath path)
-{
- EStorageSetViewPrivate *priv;
- const char *folder_path;
-
- priv = storage_set_view->priv;
-
- if (path == NULL)
- return NULL;
-
- folder_path = e_tree_memory_node_get_data (E_TREE_MEMORY(priv->etree_model), path);
- g_assert (folder_path != NULL);
-
- return e_storage_set_get_folder (priv->storage_set, folder_path);
-}
-
-static EvolutionShellComponentClient *
-get_component_at_node (EStorageSetView *storage_set_view,
- ETreePath path)
-{
- EStorageSetViewPrivate *priv;
- EvolutionShellComponentClient *component_client;
- EFolderTypeRegistry *folder_type_registry;
- EFolder *folder;
-
- priv = storage_set_view->priv;
-
- folder = get_folder_at_node (storage_set_view, path);
- if (folder == NULL)
- return NULL;
-
- folder_type_registry = e_storage_set_get_folder_type_registry (priv->storage_set);
- g_assert (folder_type_registry != NULL);
-
- component_client = e_folder_type_registry_get_handler_for_type (folder_type_registry,
- e_folder_get_type_string (folder));
-
- return component_client;
-}
-
-static GNOME_Evolution_ShellComponentDnd_ActionSet
-convert_gdk_drag_action_set_to_corba (GdkDragAction action)
-{
- GNOME_Evolution_ShellComponentDnd_Action retval;
-
- retval = GNOME_Evolution_ShellComponentDnd_ACTION_DEFAULT;
-
- if (action & GDK_ACTION_COPY)
- retval |= GNOME_Evolution_ShellComponentDnd_ACTION_COPY;
- if (action & GDK_ACTION_MOVE)
- retval |= GNOME_Evolution_ShellComponentDnd_ACTION_MOVE;
- if (action & GDK_ACTION_LINK)
- retval |= GNOME_Evolution_ShellComponentDnd_ACTION_LINK;
- if (action & GDK_ACTION_ASK)
- retval |= GNOME_Evolution_ShellComponentDnd_ACTION_ASK;
-
- return retval;
-}
-
-
-/* The weakref callback for priv->ui_component. */
-
-static void
-ui_container_destroy_notify (void *data,
- GObject *where_the_object_was)
-{
- EStorageSetViewPrivate *priv = (EStorageSetViewPrivate *) data;
-
- priv->ui_container = NULL;
-}
-
-
-/* DnD selection setup stuff. */
-
-/* This will create an array of GtkTargetEntries from the specified list of DND
- types. The type name will *not* be allocated in the list, as this is
- supposed to be used only temporarily to set up the cell as a drag source. */
-static GtkTargetEntry *
-create_target_entries_from_dnd_type_list (GList *dnd_types,
- int *num_entries_return)
-{
- GtkTargetEntry *entries;
- GList *p;
- int num_entries;
- int i;
-
- if (dnd_types == NULL)
- num_entries = 0;
- else
- num_entries = g_list_length (dnd_types);
-
- /* We always add two entries, one for an Evolution URI type, and one
- for e-shortcuts. This will let us do drag & drop within Evolution
- at least. */
- num_entries += 2;
-
- entries = g_new (GtkTargetEntry, num_entries);
-
- i = 0;
-
- /* The Evolution URI will always come first. */
- entries[i].target = E_FOLDER_DND_PATH_TARGET_TYPE;
- entries[i].flags = 0;
- entries[i].info = i;
- g_assert (i == E_FOLDER_DND_PATH_TARGET_TYPE_IDX);
- i ++;
-
- /* ...Then the shortcut type. */
- entries[i].target = E_SHORTCUT_TARGET_TYPE;
- entries[i].flags = 0;
- entries[i].info = i;
- g_assert (i == E_SHORTCUT_TARGET_TYPE_IDX);
- i ++;
-
- for (p = dnd_types; p != NULL; p = p->next, i++) {
- const char *dnd_type;
-
- g_assert (i < num_entries);
-
- dnd_type = (const char *) p->data;
-
- entries[i].target = (char *) dnd_type;
- entries[i].flags = 0;
- entries[i].info = i;
- }
-
- *num_entries_return = num_entries;
- return entries;
-}
-
-static void
-free_target_entries (GtkTargetEntry *entries)
-{
- g_assert (entries != NULL);
-
- /* The target names are not strdup()ed so a simple free will do. */
- g_free (entries);
-}
-
-static GtkTargetList *
-create_target_list_for_node (EStorageSetView *storage_set_view,
- ETreePath node)
-{
- EStorageSetViewPrivate *priv;
- GtkTargetList *target_list;
- EFolderTypeRegistry *folder_type_registry;
- GList *exported_dnd_types;
- GtkTargetEntry *target_entries;
- EFolder *folder;
- const char *folder_type;
- int num_target_entries;
-
- priv = storage_set_view->priv;
-
- folder_type_registry = e_storage_set_get_folder_type_registry (priv->storage_set);
-
- folder = get_folder_at_node (storage_set_view, node);
- folder_type = e_folder_get_type_string (folder);
-
- exported_dnd_types = e_folder_type_registry_get_exported_dnd_types_for_type (folder_type_registry,
- folder_type);
-
- target_entries = create_target_entries_from_dnd_type_list (exported_dnd_types,
- &num_target_entries);
- g_assert (target_entries != NULL);
-
- target_list = gtk_target_list_new (target_entries, num_target_entries);
-
- free_target_entries (target_entries);
-
- return target_list;
-}
-
-static void
-set_e_shortcut_selection (EStorageSetView *storage_set_view,
- GtkSelectionData *selection_data)
-{
- EStorageSetViewPrivate *priv;
- ETreePath node;
- EFolder *folder;
- int shortcut_len;
- char *shortcut;
- const char *name;
- const char *folder_path;
-
- g_assert (storage_set_view != NULL);
- g_assert (selection_data != NULL);
-
- priv = storage_set_view->priv;
-
- node = lookup_node_in_hash (storage_set_view, priv->selected_row_path);
-
- folder_path = e_tree_memory_node_get_data (E_TREE_MEMORY(priv->etree_model), node);
- g_assert (folder_path != NULL);
-
- folder = e_storage_set_get_folder (priv->storage_set, folder_path);
- if (folder != NULL)
- name = e_folder_get_name (folder);
- else
- name = NULL;
-
- /* FIXME: Get `evolution:' from somewhere instead of hardcoding it here. */
-
- if (name != NULL)
- shortcut_len = strlen (name);
- else
- shortcut_len = 0;
-
- shortcut_len ++; /* Separating zero. */
-
- shortcut_len += strlen ("evolution:");
- shortcut_len += strlen (priv->selected_row_path);
- shortcut_len ++; /* Trailing zero. */
-
- shortcut = g_malloc (shortcut_len);
-
- if (name == NULL)
- sprintf (shortcut, "%cevolution:%s", '\0', priv->selected_row_path);
- else
- sprintf (shortcut, "%s%cevolution:%s", name, '\0', priv->selected_row_path);
-
- gtk_selection_data_set (selection_data, selection_data->target,
- 8, (guchar *) shortcut, shortcut_len);
-
- g_free (shortcut);
-}
-
-static void
-set_evolution_path_selection (EStorageSetView *storage_set_view,
- GtkSelectionData *selection_data)
-{
- EStorageSetViewPrivate *priv;
-
- g_assert (storage_set_view != NULL);
- g_assert (selection_data != NULL);
-
- priv = storage_set_view->priv;
-
- gtk_selection_data_set (selection_data, selection_data->target,
- 8, (guchar *) priv->selected_row_path, strlen (priv->selected_row_path) + 1);
-}
-
-
-/* Folder context menu. */
-
-struct _FolderPropertyItemsData {
- EStorageSetView *storage_set_view;
- ECorbaStorage *corba_storage;
- int num_items;
-};
-typedef struct _FolderPropertyItemsData FolderPropertyItemsData;
-
-static void
-folder_property_item_verb_callback (BonoboUIComponent *component,
- void *user_data,
- const char *cname)
-{
- FolderPropertyItemsData *data;
- GtkWidget *toplevel_widget;
- const char *p, *path;
- int item_number;
-
- data = (FolderPropertyItemsData *) user_data;
-
- p = strrchr (cname, ':');
- g_assert (p != NULL);
-
- item_number = atoi (p + 1) - 1;
- g_assert (item_number >= 0);
-
- toplevel_widget = gtk_widget_get_toplevel (GTK_WIDGET (data->storage_set_view));
-
- path = strchr (data->storage_set_view->priv->right_click_row_path + 1, E_PATH_SEPARATOR);
- if (path == NULL)
- path = "/";
- e_corba_storage_show_folder_properties (data->corba_storage, path,
- item_number, toplevel_widget->window);
-}
-
-static FolderPropertyItemsData *
-setup_folder_properties_items_if_corba_storage_clicked (EStorageSetView *storage_set_view)
-{
- EStorageSetViewPrivate *priv;
- EStorage *storage;
- GSList *items, *p;
- GString *xml;
- FolderPropertyItemsData *data;
- const char *slash;
- char *storage_name;
- int num_property_items;
- int i;
-
- priv = storage_set_view->priv;
-
- slash = strchr (priv->right_click_row_path + 1, E_PATH_SEPARATOR);
- if (slash == NULL)
- storage_name = g_strdup (priv->right_click_row_path + 1);
-
- else
- storage_name = g_strndup (priv->right_click_row_path + 1,
- slash - (priv->right_click_row_path + 1));
-
- storage = e_storage_set_get_storage (priv->storage_set, storage_name);
- g_free (storage_name);
-
- if (storage == NULL || ! E_IS_CORBA_STORAGE (storage))
- return 0;
-
- items = e_corba_storage_get_folder_property_items (E_CORBA_STORAGE (storage));
- if (items == NULL)
- return 0;
-
- xml = g_string_new ("<placeholder name=\"StorageFolderPropertiesPlaceholder\">");
- g_string_append (xml, "<separator f=\"\" name=\"EStorageSetViewFolderPropertiesSeparator\"/>");
-
- num_property_items = 0;
- for (p = items; p != NULL; p = p->next) {
- const ECorbaStoragePropertyItem *item;
- char *encoded_label;
- char *encoded_tooltip;
-
- item = (const ECorbaStoragePropertyItem *) p->data;
- num_property_items ++;
-
- g_string_append_printf (xml, "<menuitem name=\"EStorageSetView:FolderPropertyItem:%d\"",
- num_property_items);
- g_string_append_printf (xml, " verb=\"EStorageSetView:FolderPropertyItem:%d\"",
- num_property_items);
-
- encoded_tooltip = bonobo_ui_util_encode_str (item->tooltip);
- g_string_append_printf (xml, " tip=\"%s\"", encoded_tooltip);
-
- encoded_label = bonobo_ui_util_encode_str (item->label);
- g_string_append_printf (xml, " label=\"%s\"/>", encoded_label);
-
- g_free (encoded_tooltip);
- g_free (encoded_label);
- }
-
- g_string_append (xml, "</placeholder>");
-
- data = g_new (FolderPropertyItemsData, 1);
- data->storage_set_view = storage_set_view;
- data->corba_storage = E_CORBA_STORAGE (storage);
- data->num_items = num_property_items;
-
- g_object_ref (data->storage_set_view);
- g_object_ref (data->corba_storage);
-
- for (i = 1; i <= num_property_items; i ++) {
- char *verb;
-
- verb = g_strdup_printf ("EStorageSetView:FolderPropertyItem:%d", i);
- bonobo_ui_component_add_verb (priv->ui_component, verb,
- folder_property_item_verb_callback,
- data);
- }
-
- bonobo_ui_component_set (priv->ui_component, "/popups/FolderPopup", xml->str, NULL);
-
- g_string_free (xml, TRUE);
- e_corba_storage_free_property_items_list (items);
-
- return data;
-}
-
-static void
-remove_property_items (EStorageSetView *storage_set_view,
- FolderPropertyItemsData *data)
-{
- EStorageSetViewPrivate *priv;
-
- priv = storage_set_view->priv;
-
- if (data->num_items > 0) {
- int i;
-
- bonobo_ui_component_rm (priv->ui_component,
- "/popups/FolderPopup/StorageFolderPropertiesPlaceholder/EStorageSetViewFolderPropertiesSeparator",
- NULL);
-
- for (i = 1; i <= data->num_items; i ++) {
- char *path;
- char *verb;
-
- path = g_strdup_printf ("/popups/FolderPopup/StorageFolderPropertiesPlaceholder/EStorageSetView:FolderPropertyItem:%d", i);
- bonobo_ui_component_rm (priv->ui_component, path, NULL);
- g_free (path);
-
- verb = g_strdup_printf ("EStorageSetView:FolderPropertyItem:%d", i);
- bonobo_ui_component_remove_verb (priv->ui_component, verb);
- g_free (verb);
- }
- }
-
- g_object_unref (data->storage_set_view);
- g_object_unref (data->corba_storage);
-
- g_free (data);
-}
-
-static void
-popup_folder_menu (EStorageSetView *storage_set_view,
- GdkEventButton *event)
-{
- EvolutionShellComponentClient *handler;
- EStorageSetViewPrivate *priv;
- EFolderTypeRegistry *folder_type_registry;
- EFolder *folder;
- GtkWidget *menu, *window;
- FolderPropertyItemsData *folder_property_items_data;
-
- priv = storage_set_view->priv;
-
- folder = e_storage_set_get_folder (priv->storage_set, priv->right_click_row_path);
- g_object_ref (folder);
-
- folder_type_registry = e_storage_set_get_folder_type_registry (priv->storage_set);
- g_assert (folder_type_registry != NULL);
-
- handler = e_folder_type_registry_get_handler_for_type (folder_type_registry,
- e_folder_get_type_string (folder));
- menu = gtk_menu_new ();
-
- window = gtk_widget_get_ancestor (GTK_WIDGET (storage_set_view),
- BONOBO_TYPE_WINDOW);
- bonobo_window_add_popup (BONOBO_WINDOW (window),
- GTK_MENU (menu), "/popups/FolderPopup");
-
- bonobo_ui_component_set (priv->ui_component,
- "/popups/FolderPopup/ComponentPlaceholder",
- "<placeholder name=\"Items\"/>", NULL);
-
- if (handler != NULL)
- evolution_shell_component_client_populate_folder_context_menu (handler,
- priv->ui_container,
- e_folder_get_physical_uri (folder),
- e_folder_get_type_string (folder));
-
- folder_property_items_data = setup_folder_properties_items_if_corba_storage_clicked (storage_set_view);
-
- gtk_widget_show (GTK_WIDGET (menu));
-
- gnome_popup_menu_do_popup_modal (GTK_WIDGET (menu), NULL, NULL, event, NULL,
- GTK_WIDGET (storage_set_view));
-
- if (folder_property_items_data != NULL)
- remove_property_items (storage_set_view, folder_property_items_data);
-
- if (handler != NULL)
- evolution_shell_component_client_unpopulate_folder_context_menu (handler,
- priv->ui_container,
- e_folder_get_physical_uri (folder),
- e_folder_get_type_string (folder));
-
- g_object_unref (folder);
- gtk_widget_destroy (GTK_WIDGET (menu));
-
- e_tree_right_click_up (E_TREE (storage_set_view));
-}
-
-
-/* GtkObject methods. */
-
-static void
-pixbuf_free_func (gpointer key, gpointer value, gpointer user_data)
-{
- g_free (key);
- g_object_unref ((GdkPixbuf*)value);
-}
-
-static void
-impl_dispose (GObject *object)
-{
- EStorageSetView *storage_set_view;
- EStorageSetViewPrivate *priv;
-
- storage_set_view = E_STORAGE_SET_VIEW (object);
- priv = storage_set_view->priv;
-
- if (priv->etree_model != NULL) {
- /* Destroy the tree. */
- e_tree_memory_node_remove (E_TREE_MEMORY(priv->etree_model), priv->root_node);
- g_object_unref (priv->etree_model);
- priv->etree_model = NULL;
-
- /* (The data in the hash table was all freed by freeing the tree.) */
- g_hash_table_destroy (priv->path_to_etree_node);
- priv->path_to_etree_node = NULL;
- }
-
- if (priv->storage_set != NULL) {
- g_object_unref (priv->storage_set);
- priv->storage_set = NULL;
- }
-
- if (priv->drag_corba_source_interface != CORBA_OBJECT_NIL) {
- CORBA_Environment ev;
-
- CORBA_exception_init (&ev);
-
- g_assert (priv->drag_corba_source_context != NULL);
-
- GNOME_Evolution_ShellComponentDnd_SourceFolder_endDrag (priv->drag_corba_source_interface,
- priv->drag_corba_source_context,
- &ev);
-
- Bonobo_Unknown_unref (priv->drag_corba_source_interface, &ev);
- CORBA_Object_release (priv->drag_corba_source_interface, &ev);
-
- CORBA_exception_free (&ev);
-
- priv->drag_corba_source_interface = CORBA_OBJECT_NIL;
- }
-
- if (priv->ui_component != NULL) {
- bonobo_object_unref (BONOBO_OBJECT (priv->ui_component));
- priv->ui_component = NULL;
- }
-
- /* (No unreffing for priv->ui_container since we use a weakref.) */
-
- (* G_OBJECT_CLASS (parent_class)->dispose) (object);
-}
-
-static void
-impl_finalize (GObject *object)
-{
- EStorageSetView *storage_set_view;
- EStorageSetViewPrivate *priv;
-
- storage_set_view = E_STORAGE_SET_VIEW (object);
- priv = storage_set_view->priv;
-
- g_hash_table_foreach (priv->type_name_to_pixbuf, pixbuf_free_func, NULL);
- g_hash_table_destroy (priv->type_name_to_pixbuf);
-
- if (priv->checkboxes != NULL) {
- g_hash_table_foreach (priv->checkboxes, (GHFunc) g_free, NULL);
- g_hash_table_destroy (priv->checkboxes);
- }
-
- if (priv->drag_corba_source_context != NULL)
- CORBA_free (priv->drag_corba_source_context);
-
- if (priv->drag_corba_data != NULL)
- CORBA_free (priv->drag_corba_data);
-
- g_free (priv->selected_row_path);
- g_free (priv->right_click_row_path);
-
- g_free (priv);
-
- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
-}
-
-
-/* ETree methods. */
-
-/* -- Source-side DnD. */
-
-static gint
-impl_tree_start_drag (ETree *tree,
- int row,
- ETreePath path,
- int col,
- GdkEvent *event)
-{
- GdkDragContext *context;
- GtkTargetList *target_list;
- GdkDragAction actions;
- EStorageSetView *storage_set_view;
-
- storage_set_view = E_STORAGE_SET_VIEW (tree);
-
- if (! storage_set_view->priv->allow_dnd)
- return FALSE;
-
- target_list = create_target_list_for_node (storage_set_view, path);
- if (target_list == NULL)
- return FALSE;
-
- actions = GDK_ACTION_MOVE | GDK_ACTION_COPY;
-
- context = e_tree_drag_begin (tree, row, col,
- target_list,
- actions,
- 1, event);
-
- gtk_drag_set_icon_default (context);
-
- gtk_target_list_unref (target_list);
-
- return TRUE;
-}
-
-static void
-impl_tree_drag_begin (ETree *etree,
- int row,
- ETreePath path,
- int col,
- GdkDragContext *context)
-{
- EStorageSetView *storage_set_view;
- EStorageSetViewPrivate *priv;
- EFolder *folder;
- EvolutionShellComponentClient *component_client;
- GNOME_Evolution_ShellComponent corba_component;
- GNOME_Evolution_ShellComponentDnd_ActionSet possible_actions;
- GNOME_Evolution_ShellComponentDnd_Action suggested_action;
- CORBA_Environment ev;
-
- storage_set_view = E_STORAGE_SET_VIEW (etree);
- priv = storage_set_view->priv;
-
- g_free (priv->selected_row_path);
- priv->selected_row_path = g_strdup (e_tree_memory_node_get_data (E_TREE_MEMORY(priv->etree_model), path));
-
- g_assert (priv->drag_corba_source_interface == CORBA_OBJECT_NIL);
-
- folder = get_folder_at_node (storage_set_view, path);
- component_client = get_component_at_node (storage_set_view, path);
-
- if (component_client == NULL)
- return;
-
- /* Query the `ShellComponentDnd::SourceFolder' interface on the
- component. */
- /* FIXME we could use the new
- `evolution_shell_component_client_get_dnd_source_interface()'
- call. */
-
- CORBA_exception_init (&ev);
-
- corba_component = evolution_shell_component_client_corba_objref (component_client);
- priv->drag_corba_source_interface = Bonobo_Unknown_queryInterface (corba_component,
- "IDL:GNOME/Evolution/ShellComponentDnd/SourceFolder:1.0",
- &ev);
- if (ev._major != CORBA_NO_EXCEPTION
- || priv->drag_corba_source_interface == CORBA_OBJECT_NIL) {
- priv->drag_corba_source_interface = CORBA_OBJECT_NIL;
-
- CORBA_exception_free (&ev);
- return;
- }
-
- GNOME_Evolution_ShellComponentDnd_SourceFolder_beginDrag (priv->drag_corba_source_interface,
- e_folder_get_physical_uri (folder),
- e_folder_get_type_string (folder),
- &possible_actions,
- &suggested_action,
- &ev);
-
- if (ev._major != CORBA_NO_EXCEPTION) {
- Bonobo_Unknown_unref (priv->drag_corba_source_interface, &ev);
- CORBA_Object_release (priv->drag_corba_source_interface, &ev);
-
- priv->drag_corba_source_interface = CORBA_OBJECT_NIL;
-
- CORBA_exception_free (&ev);
- return;
- }
-
- CORBA_exception_free (&ev);
-
- if (priv->drag_corba_source_context != NULL)
- CORBA_free (priv->drag_corba_source_context);
-
- priv->drag_corba_source_context = GNOME_Evolution_ShellComponentDnd_SourceFolder_Context__alloc ();
- priv->drag_corba_source_context->physicalUri = CORBA_string_dup (e_folder_get_physical_uri (folder));
- priv->drag_corba_source_context->folderType = CORBA_string_dup (e_folder_get_type_string (folder));
- priv->drag_corba_source_context->possibleActions = possible_actions;
- priv->drag_corba_source_context->suggestedAction = suggested_action;
-}
-
-static void
-impl_tree_drag_end (ETree *tree,
- int row,
- ETreePath path,
- int col,
- GdkDragContext *context)
-{
- EStorageSetView *storage_set_view;
- EStorageSetViewPrivate *priv;
- CORBA_Environment ev;
-
- storage_set_view = E_STORAGE_SET_VIEW (tree);
- priv = storage_set_view->priv;
-
- if (priv->drag_corba_source_interface == CORBA_OBJECT_NIL)
- return;
-
- CORBA_exception_init (&ev);
-
- GNOME_Evolution_ShellComponentDnd_SourceFolder_endDrag (priv->drag_corba_source_interface,
- priv->drag_corba_source_context,
- &ev);
-
- CORBA_free (priv->drag_corba_source_context);
- priv->drag_corba_source_context = NULL;
-
- Bonobo_Unknown_unref (priv->drag_corba_source_interface, &ev);
- CORBA_Object_release (priv->drag_corba_source_interface, &ev);
-
- CORBA_exception_free (&ev);
-}
-
-static void
-impl_tree_drag_data_get (ETree *etree,
- int drag_row,
- ETreePath drag_path,
- int drag_col,
- GdkDragContext *context,
- GtkSelectionData *selection_data,
- unsigned int info,
- guint32 time)
-{
- EStorageSetView *storage_set_view;
- EStorageSetViewPrivate *priv;
- CORBA_Environment ev;
- char *target_type;
-
- storage_set_view = E_STORAGE_SET_VIEW (etree);
- priv = storage_set_view->priv;
-
- switch (info) {
- case E_SHORTCUT_TARGET_TYPE_IDX:
- set_e_shortcut_selection (storage_set_view, selection_data);
- return;
- case E_FOLDER_DND_PATH_TARGET_TYPE_IDX:
- set_evolution_path_selection (storage_set_view, selection_data);
- return;
- }
-
- g_assert (info > 0);
-
- if (priv->drag_corba_source_interface == CORBA_OBJECT_NIL)
- return;
-
- target_type = gdk_atom_name ((GdkAtom) context->targets->data);
-
- CORBA_exception_init (&ev);
-
- GNOME_Evolution_ShellComponentDnd_SourceFolder_getData (priv->drag_corba_source_interface,
- priv->drag_corba_source_context,
- convert_gdk_drag_action_set_to_corba (context->action),
- target_type,
- & priv->drag_corba_data,
- &ev);
-
- if (ev._major != CORBA_NO_EXCEPTION)
- gtk_selection_data_set (selection_data,
- selection_data->target, 8, "", -1);
- else
- gtk_selection_data_set (selection_data,
- gdk_atom_intern (priv->drag_corba_data->target, FALSE),
- priv->drag_corba_data->format,
- priv->drag_corba_data->bytes._buffer,
- priv->drag_corba_data->bytes._length);
-
- g_free (target_type);
-
- CORBA_exception_free (&ev);
-}
-
-static void
-impl_tree_drag_data_delete (ETree *tree,
- int row,
- ETreePath path,
- int col,
- GdkDragContext *context)
-{
- EStorageSetView *storage_set_view;
- EStorageSetViewPrivate *priv;
- CORBA_Environment ev;
-
- storage_set_view = E_STORAGE_SET_VIEW (tree);
- priv = storage_set_view->priv;
-
- if (priv->drag_corba_source_interface == CORBA_OBJECT_NIL)
- return;
-
- CORBA_exception_init (&ev);
-
- GNOME_Evolution_ShellComponentDnd_SourceFolder_deleteData (priv->drag_corba_source_interface,
- priv->drag_corba_source_context,
- &ev);
-
- CORBA_exception_free (&ev);
-}
-
-/* -- Destination-side DnD. */
-
-static gboolean
-impl_tree_drag_motion (ETree *tree,
- int row,
- ETreePath path,
- int col,
- GdkDragContext *context,
- int x,
- int y,
- unsigned int time)
-{
- EStorageSetView *storage_set_view;
- EStorageSetViewPrivate *priv;
- const char *folder_path;
-
- storage_set_view = E_STORAGE_SET_VIEW (tree);
- priv = storage_set_view->priv;
-
- if (! priv->allow_dnd)
- return FALSE;
-
- folder_path = e_tree_memory_node_get_data (E_TREE_MEMORY (priv->etree_model),
- e_tree_node_at_row (E_TREE (storage_set_view), row));
- if (folder_path == NULL)
- return FALSE;
-
- e_tree_drag_highlight (E_TREE (storage_set_view), row, -1);
-
- return e_folder_dnd_bridge_motion (GTK_WIDGET (storage_set_view), context, time,
- priv->storage_set, folder_path);
-}
-
-static void
-impl_tree_drag_leave (ETree *etree,
- int row,
- ETreePath path,
- int col,
- GdkDragContext *context,
- unsigned int time)
-{
- e_tree_drag_unhighlight (etree);
-}
-
-static gboolean
-impl_tree_drag_drop (ETree *etree,
- int row,
- ETreePath path,
- int col,
- GdkDragContext *context,
- int x,
- int y,
- unsigned int time)
-{
- EStorageSetView *storage_set_view;
- EStorageSetViewPrivate *priv;
- const char *folder_path;
-
- storage_set_view = E_STORAGE_SET_VIEW (etree);
- priv = storage_set_view->priv;
-
- e_tree_drag_unhighlight (etree);
-
- folder_path = e_tree_memory_node_get_data (E_TREE_MEMORY (priv->etree_model),
- e_tree_node_at_row (E_TREE (storage_set_view), row));
- if (folder_path == NULL)
- return FALSE;
-
- return e_folder_dnd_bridge_drop (GTK_WIDGET (etree), context, time,
- priv->storage_set, folder_path);
-}
-
-static void
-impl_tree_drag_data_received (ETree *etree,
- int row,
- ETreePath path,
- int col,
- GdkDragContext *context,
- int x,
- int y,
- GtkSelectionData *selection_data,
- unsigned int info,
- unsigned int time)
-{
- EStorageSetView *storage_set_view;
- EStorageSetViewPrivate *priv;
- const char *folder_path;
-
- storage_set_view = E_STORAGE_SET_VIEW (etree);
- priv = storage_set_view->priv;
-
- folder_path = e_tree_memory_node_get_data (E_TREE_MEMORY (priv->etree_model),
- e_tree_node_at_row (E_TREE (storage_set_view), row));
- if (path == NULL) {
- gtk_drag_finish (context, FALSE, FALSE, time);
- return;
- }
-
- e_folder_dnd_bridge_data_received (GTK_WIDGET (etree),
- context,
- selection_data,
- time,
- priv->storage_set,
- folder_path);
-}
-
-static gboolean
-impl_right_click (ETree *etree,
- int row,
- ETreePath path,
- int col,
- GdkEvent *event)
-{
- EStorageSetView *storage_set_view;
- EStorageSetViewPrivate *priv;
-
- storage_set_view = E_STORAGE_SET_VIEW (etree);
- priv = storage_set_view->priv;
-
- /* This should never happen, but you never know with ETree. */
- if (priv->right_click_row_path != NULL)
- g_free (priv->right_click_row_path);
- priv->right_click_row_path = g_strdup (e_tree_memory_node_get_data (E_TREE_MEMORY(priv->etree_model), path));
-
- if (priv->ui_container) {
- g_signal_emit (storage_set_view, signals[FOLDER_CONTEXT_MENU_POPPING_UP], 0, priv->right_click_row_path);
-
- popup_folder_menu (storage_set_view, (GdkEventButton *) event);
-
- g_signal_emit (storage_set_view, signals[FOLDER_CONTEXT_MENU_POPPED_DOWN], 0);
- }
-
- g_free (priv->right_click_row_path);
- priv->right_click_row_path = NULL;
-
- return TRUE;
-}
-
-static void
-impl_cursor_activated (ETree *tree,
- int row,
- ETreePath path)
-{
- EStorageSetView *storage_set_view;
- EStorageSetViewPrivate *priv;
-
- storage_set_view = E_STORAGE_SET_VIEW (tree);
-
- priv = storage_set_view->priv;
-
- g_free (priv->selected_row_path);
- if (path) {
- priv->selected_row_path = g_strdup (e_tree_memory_node_get_data (E_TREE_MEMORY (priv->etree_model), path));
-
- g_signal_emit (storage_set_view, signals[FOLDER_SELECTED], 0,
- priv->selected_row_path);
- }
- else
- priv->selected_row_path = NULL;
-}
-
-
-/* ETreeModel Methods */
-
-static gboolean
-path_is_storage (ETreeModel *etree,
- ETreePath tree_path)
-{
- return e_tree_model_node_depth (etree, tree_path) == 1;
-}
-
-static GdkPixbuf*
-etree_icon_at (ETreeModel *etree,
- ETreePath tree_path,
- void *model_data)
-{
- EStorageSetView *storage_set_view;
- EStorageSet *storage_set;
- EFolder *folder;
- char *path;
-
- storage_set_view = E_STORAGE_SET_VIEW (model_data);
- storage_set = storage_set_view->priv->storage_set;
-
- path = (char*) e_tree_memory_node_get_data (E_TREE_MEMORY(etree), tree_path);
-
- folder = e_storage_set_get_folder (storage_set, path);
- if (folder == NULL)
- return NULL;
-
- /* No icon for a storage with children (or with no real root folder) */
- if (path_is_storage (etree, tree_path)) {
- EStorage *storage;
- GList *subfolder_paths;
-
- if (! strcmp (e_folder_get_type_string (folder), "noselect"))
- return NULL;
-
- storage = e_storage_set_get_storage (storage_set, path + 1);
- subfolder_paths = e_storage_get_subfolder_paths (storage, "/");
- if (subfolder_paths != NULL) {
- e_free_string_list (subfolder_paths);
- return NULL;
- }
- }
-
- return get_pixbuf_for_folder (storage_set_view, folder);
-}
-
-/* This function returns the number of columns in our ETreeModel. */
-static int
-etree_column_count (ETreeModel *etc,
- void *data)
-{
- return 3;
-}
-
-static gboolean
-etree_has_save_id (ETreeModel *etm,
- void *data)
-{
- return TRUE;
-}
-
-static gchar *
-etree_get_save_id (ETreeModel *etm,
- ETreePath node,
- void *model_data)
-{
- return g_strdup(e_tree_memory_node_get_data (E_TREE_MEMORY(etm), node));
-}
-
-static gboolean
-etree_has_get_node_by_id (ETreeModel *etm,
- void *data)
-{
- return TRUE;
-}
-
-static ETreePath
-etree_get_node_by_id (ETreeModel *etm,
- const char *save_id,
- void *model_data)
-{
- EStorageSetView *storage_set_view;
- storage_set_view = E_STORAGE_SET_VIEW (model_data);
-
- return g_hash_table_lookup (storage_set_view->priv->path_to_etree_node, save_id);
-}
-
-static gboolean
-has_checkbox (EStorageSetView *storage_set_view, ETreePath tree_path)
-{
- EStorageSetViewPrivate *priv;
- const char *folder_path;
-
- priv = storage_set_view->priv;
-
- folder_path = e_tree_memory_node_get_data (E_TREE_MEMORY(storage_set_view->priv->etree_model),
- tree_path);
- g_assert (folder_path != NULL);
-
- if (strchr (folder_path + 1, '/') == NULL) {
- /* If it's a toplevel, never allow checking it. */
- return FALSE;
- }
-
- if (priv->has_checkbox_func)
- return (* priv->has_checkbox_func) (priv->storage_set,
- folder_path,
- priv->has_checkbox_func_data);
-
- return TRUE;
-}
-
-static void *
-etree_value_at (ETreeModel *etree,
- ETreePath tree_path,
- int col,
- void *model_data)
-{
- EStorageSetView *storage_set_view;
- EStorageSetViewPrivate *priv;
- EStorageSet *storage_set;
- EFolder *folder;
- char *path;
- const char *folder_name;
- int unread_count;
-
- storage_set_view = E_STORAGE_SET_VIEW (model_data);
- priv = storage_set_view->priv;
- storage_set = priv->storage_set;
-
- /* Storages are always highlighted. */
- if (col == 1 && path_is_storage (etree, tree_path))
- return (void *) TRUE;
-
- path = (char *) e_tree_memory_node_get_data (E_TREE_MEMORY(etree), tree_path);
-
- folder = e_storage_set_get_folder (storage_set, path);
-
- switch (col) {
- case 0: /* Title */
- if (folder == NULL)
- return (void *) "?";
- folder_name = e_folder_get_name (folder);
- unread_count = e_folder_get_unread_count (folder);
-
- if (unread_count > 0) {
- char *name_with_unread;
-
- name_with_unread = g_strdup_printf ("%s (%d)", folder_name,
- unread_count);
- g_object_set_data_full (G_OBJECT (folder), "name_with_unread", name_with_unread, g_free);
-
- return (void *) name_with_unread;
- } else
- return (void *) folder_name;
- case 1: /* bold */
- if (folder == NULL)
- return GINT_TO_POINTER (FALSE);
- return GINT_TO_POINTER (e_folder_get_highlighted (folder));
- case 2: /* checkbox */
- if (!has_checkbox (storage_set_view, tree_path))
- return GINT_TO_POINTER (2);
- if (priv->checkboxes == NULL)
- return GINT_TO_POINTER (0);
- return GINT_TO_POINTER(g_hash_table_lookup (priv->checkboxes,
- path) ? 1 : 0);
- default:
- return NULL;
- }
-
-}
-
-static void
-etree_fill_in_children (ETreeModel *etree,
- ETreePath tree_path,
- void *model_data)
-{
- EStorageSetView *storage_set_view;
- EStorageSet *storage_set;
- ETreePath *parent;
- char *path;
-
- storage_set_view = E_STORAGE_SET_VIEW (model_data);
- storage_set = storage_set_view->priv->storage_set;
-
- parent = e_tree_model_node_get_parent (etree, tree_path);
- path = (char *) e_tree_memory_node_get_data (E_TREE_MEMORY(etree), parent);
- if (tree_path == e_tree_model_node_get_first_child (etree, parent)) {
- g_signal_emit (storage_set_view, signals[FOLDER_OPENED], 0, path);
- }
-}
-
-static void
-etree_set_value_at (ETreeModel *etree,
- ETreePath tree_path,
- int col,
- const void *val,
- void *model_data)
-{
- gboolean value;
- char *path;
- EStorageSetView *storage_set_view;
- EStorageSetViewPrivate *priv;
- char *old_path;
-
- storage_set_view = E_STORAGE_SET_VIEW (model_data);
- priv = storage_set_view->priv;
-
- switch (col) {
- case 2: /* checkbox */
- if (!has_checkbox (storage_set_view, tree_path))
- return;
-
- e_tree_model_pre_change (etree);
-
- value = GPOINTER_TO_INT (val);
- path = (char *) e_tree_memory_node_get_data (E_TREE_MEMORY(etree), tree_path);
- if (!priv->checkboxes) {
- priv->checkboxes = g_hash_table_new (g_str_hash, g_str_equal);
- }
-
- old_path = g_hash_table_lookup (priv->checkboxes, path);
-
- if (old_path) {
- g_hash_table_remove (priv->checkboxes, path);
- g_free (old_path);
- } else {
- path = g_strdup (path);
- g_hash_table_insert (priv->checkboxes, path, path);
- }
-
- e_tree_model_node_col_changed (etree, tree_path, col);
- g_signal_emit (storage_set_view, signals[CHECKBOXES_CHANGED], 0);
- break;
- }
-}
-
-static gboolean
-etree_is_editable (ETreeModel *etree,
- ETreePath path,
- int col,
- void *model_data)
-{
- if (col == 2)
- return TRUE;
- else
- return FALSE;
-}
-
-
-/* This function duplicates the value passed to it. */
-static void *
-etree_duplicate_value (ETreeModel *etc,
- int col,
- const void *value,
- void *data)
-{
- if (col == 0)
- return (void *)g_strdup (value);
- else
- return (void *)value;
-}
-
-/* This function frees the value passed to it. */
-static void
-etree_free_value (ETreeModel *etc,
- int col,
- void *value,
- void *data)
-{
- if (col == 0)
- g_free (value);
-}
-
-/* This function creates an empty value. */
-static void *
-etree_initialize_value (ETreeModel *etc,
- int col,
- void *data)
-{
- if (col == 0)
- return g_strdup ("");
- else
- return NULL;
-}
-
-/* This function reports if a value is empty. */
-static gboolean
-etree_value_is_empty (ETreeModel *etc,
- int col,
- const void *value,
- void *data)
-{
- if (col == 0)
- return !(value && *(char *)value);
- else
- return !value;
-}
-
-/* This function reports if a value is empty. */
-static char *
-etree_value_to_string (ETreeModel *etc,
- int col,
- const void *value,
- void *data)
-{
- if (col == 0)
- return g_strdup(value);
- else
- return g_strdup(value ? "Yes" : "No");
-}
-
-static void
-etree_node_destroy_func (void *data,
- void *user_data)
-{
- EStorageSetView *storage_set_view;
- char *path;
-
- path = (char *) data;
- storage_set_view = E_STORAGE_SET_VIEW (user_data);
-
- if (strcmp (path, ROOT_NODE_NAME))
- remove_node_from_hash (storage_set_view, path);
- g_free (path);
-}
-
-
-/* StorageSet signal handling. */
-
-static void
-new_storage_cb (EStorageSet *storage_set,
- EStorage *storage,
- void *data)
-{
- EStorageSetView *storage_set_view;
- EStorageSetViewPrivate *priv;
- ETreePath node;
- char *path;
-
- storage_set_view = E_STORAGE_SET_VIEW (data);
- priv = storage_set_view->priv;
-
- path = g_strconcat (E_PATH_SEPARATOR_S, e_storage_get_name (storage), NULL);
-
- node = e_tree_memory_node_insert (E_TREE_MEMORY(priv->etree_model), priv->root_node, -1, path);
- e_tree_memory_sort_node (E_TREE_MEMORY(priv->etree_model), priv->root_node,
- storage_sort_callback, storage_set_view);
-
- if (! add_node_to_hash (storage_set_view, path, node)) {
- e_tree_memory_node_remove (E_TREE_MEMORY(priv->etree_model), node);
- return;
- }
-}
-
-static void
-removed_storage_cb (EStorageSet *storage_set,
- EStorage *storage,
- void *data)
-{
- EStorageSetView *storage_set_view;
- EStorageSetViewPrivate *priv;
- ETreeModel *etree;
- ETreePath node;
- char *path;
-
- storage_set_view = E_STORAGE_SET_VIEW (data);
- priv = storage_set_view->priv;
- etree = priv->etree_model;
-
- path = g_strconcat (E_PATH_SEPARATOR_S, e_storage_get_name (storage), NULL);
- node = lookup_node_in_hash (storage_set_view, path);
- g_free (path);
-
- e_tree_memory_node_remove (E_TREE_MEMORY(etree), node);
-}
-
-static void
-new_folder_cb (EStorageSet *storage_set,
- const char *path,
- void *data)
-{
- EStorageSetView *storage_set_view;
- EStorageSetViewPrivate *priv;
- ETreeModel *etree;
- ETreePath parent_node;
- ETreePath new_node;
- const char *last_separator;
- char *parent_path;
- char *copy_of_path;
-
- g_return_if_fail (g_path_is_absolute (path));
-
- storage_set_view = E_STORAGE_SET_VIEW (data);
- priv = storage_set_view->priv;
- etree = priv->etree_model;
-
- last_separator = strrchr (path, E_PATH_SEPARATOR);
-
- parent_path = g_strndup (path, last_separator - path);
- parent_node = g_hash_table_lookup (priv->path_to_etree_node, parent_path);
- if (parent_node == NULL) {
- g_warning ("EStorageSetView: EStorageSet reported new subfolder for non-existing folder -- %s",
- parent_path);
- g_free (parent_path);
- return;
- }
-
- g_free (parent_path);
-
- copy_of_path = g_strdup (path);
- new_node = e_tree_memory_node_insert (E_TREE_MEMORY(etree), parent_node, -1, copy_of_path);
- e_tree_memory_sort_node (E_TREE_MEMORY(etree), parent_node, folder_sort_callback, storage_set_view);
-
- if (! add_node_to_hash (storage_set_view, path, new_node)) {
- e_tree_memory_node_remove (E_TREE_MEMORY(etree), new_node);
- return;
- }
-
- setup_folder_changed_callbacks (storage_set_view,
- e_storage_set_get_folder (storage_set, path),
- path);
-}
-
-static void
-updated_folder_cb (EStorageSet *storage_set,
- const char *path,
- void *data)
-{
- EStorageSetView *storage_set_view;
- EStorageSetViewPrivate *priv;
- ETreeModel *etree;
- ETreePath node;
-
- storage_set_view = E_STORAGE_SET_VIEW (data);
- priv = storage_set_view->priv;
- etree = priv->etree_model;
-
- node = lookup_node_in_hash (storage_set_view, path);
- e_tree_model_pre_change (etree);
- e_tree_model_node_data_changed (etree, node);
-}
-
-static void
-removed_folder_cb (EStorageSet *storage_set,
- const char *path,
- void *data)
-{
- EStorageSetView *storage_set_view;
- EStorageSetViewPrivate *priv;
- ETreeModel *etree;
- ETreePath node;
-
- storage_set_view = E_STORAGE_SET_VIEW (data);
- priv = storage_set_view->priv;
- etree = priv->etree_model;
-
- node = lookup_node_in_hash (storage_set_view, path);
- e_tree_memory_node_remove (E_TREE_MEMORY(etree), node);
-}
-
-static void
-close_folder_cb (EStorageSet *storage_set,
- const char *path,
- void *data)
-{
- EStorageSetView *storage_set_view;
- EStorageSetViewPrivate *priv;
- ETreeModel *etree;
- ETreePath node;
-
- storage_set_view = E_STORAGE_SET_VIEW (data);
- priv = storage_set_view->priv;
- etree = priv->etree_model;
-
- node = lookup_node_in_hash (storage_set_view, path);
- e_tree_model_node_request_collapse (priv->etree_model, node);
-}
-
-
-static void
-class_init (EStorageSetViewClass *klass)
-{
- GObjectClass *object_class;
- ETreeClass *etree_class;
-
- parent_class = g_type_class_ref(PARENT_TYPE);
-
- object_class = G_OBJECT_CLASS (klass);
- object_class->dispose = impl_dispose;
- object_class->finalize = impl_finalize;
-
- etree_class = E_TREE_CLASS (klass);
- etree_class->right_click = impl_right_click;
- etree_class->cursor_activated = impl_cursor_activated;
- etree_class->start_drag = impl_tree_start_drag;
- etree_class->tree_drag_begin = impl_tree_drag_begin;
- etree_class->tree_drag_end = impl_tree_drag_end;
- etree_class->tree_drag_data_get = impl_tree_drag_data_get;
- etree_class->tree_drag_data_delete = impl_tree_drag_data_delete;
- etree_class->tree_drag_motion = impl_tree_drag_motion;
- etree_class->tree_drag_drop = impl_tree_drag_drop;
- etree_class->tree_drag_leave = impl_tree_drag_leave;
- etree_class->tree_drag_data_received = impl_tree_drag_data_received;
-
- signals[FOLDER_SELECTED]
- = g_signal_new ("folder_selected",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EStorageSetViewClass, folder_selected),
- NULL, NULL,
- e_shell_marshal_NONE__STRING,
- G_TYPE_NONE, 1,
- G_TYPE_STRING);
-
- signals[FOLDER_OPENED]
- = g_signal_new ("folder_opened",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EStorageSetViewClass, folder_opened),
- NULL, NULL,
- e_shell_marshal_NONE__STRING,
- G_TYPE_NONE, 1,
- G_TYPE_STRING);
-
- signals[DND_ACTION]
- = g_signal_new ("dnd_action",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EStorageSetViewClass, dnd_action),
- NULL, NULL,
- e_shell_marshal_NONE__POINTER_POINTER_POINTER_POINTER,
- G_TYPE_NONE, 4,
- G_TYPE_POINTER,
- G_TYPE_POINTER,
- G_TYPE_POINTER,
- G_TYPE_POINTER);
-
- signals[FOLDER_CONTEXT_MENU_POPPING_UP]
- = g_signal_new ("folder_context_menu_popping_up",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EStorageSetViewClass, folder_context_menu_popping_up),
- NULL, NULL,
- e_shell_marshal_NONE__STRING,
- G_TYPE_NONE, 1,
- G_TYPE_STRING);
-
- signals[FOLDER_CONTEXT_MENU_POPPED_DOWN]
- = g_signal_new ("folder_context_menu_popped_down",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EStorageSetViewClass, folder_context_menu_popped_down),
- NULL, NULL,
- e_shell_marshal_NONE__NONE,
- G_TYPE_NONE, 0);
-
- signals[CHECKBOXES_CHANGED]
- = g_signal_new ("checkboxes_changed",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EStorageSetViewClass, checkboxes_changed),
- NULL, NULL,
- e_shell_marshal_NONE__NONE,
- G_TYPE_NONE, 0);
-
- checks [0] = gdk_pixbuf_new_from_xpm_data (check_empty_xpm);
- checks [1] = gdk_pixbuf_new_from_xpm_data (check_filled_xpm);
- checks [2] = gdk_pixbuf_new_from_xpm_data (check_missing_xpm);
-}
-
-static void
-init (EStorageSetView *storage_set_view)
-{
- EStorageSetViewPrivate *priv;
-
- priv = g_new (EStorageSetViewPrivate, 1);
-
- priv->storage_set = NULL;
- priv->path_to_etree_node = g_hash_table_new (g_str_hash, g_str_equal);
- priv->type_name_to_pixbuf = g_hash_table_new (g_str_hash, g_str_equal);
-
- priv->ui_component = NULL;
- priv->ui_container = NULL;
-
- priv->selected_row_path = NULL;
- priv->right_click_row_path = NULL;
-
- priv->show_folders = TRUE;
- priv->show_checkboxes = FALSE;
- priv->allow_dnd = TRUE;
- priv->search_enabled = FALSE;
-
- priv->drag_corba_source_interface = CORBA_OBJECT_NIL;
-
- priv->drag_corba_source_context = NULL;
- priv->drag_corba_data = NULL;
-
- priv->checkboxes = NULL;
-
- priv->has_checkbox_func = NULL;
- priv->has_checkbox_func_data = NULL;
-
- storage_set_view->priv = priv;
-}
-
-
-/* Handling of the "changed" signal in EFolders displayed in the EStorageSetView. */
-
-struct _FolderChangedCallbackData {
- EStorageSetView *storage_set_view;
- char *path;
-};
-typedef struct _FolderChangedCallbackData FolderChangedCallbackData;
-
-static void
-folder_changed_callback_data_destroy_notify (void *data)
-{
- FolderChangedCallbackData *callback_data;
-
- callback_data = (FolderChangedCallbackData *) data;
-
- g_free (callback_data->path);
- g_free (callback_data);
-}
-
-static void
-folder_changed_cb (EFolder *folder,
- void *data)
-{
- EStorageSetView *storage_set_view;
- EStorageSetViewPrivate *priv;
- FolderChangedCallbackData *callback_data;
- ETreePath node;
-
- callback_data = (FolderChangedCallbackData *) data;
-
- storage_set_view = callback_data->storage_set_view;
- priv = callback_data->storage_set_view->priv;
-
- node = g_hash_table_lookup (priv->path_to_etree_node, callback_data->path);
- if (node == NULL) {
- g_warning ("EStorageSetView -- EFolder::changed emitted for a folder whose path I don't know.");
- return;
- }
-
- e_tree_model_pre_change (priv->etree_model);
- e_tree_model_node_data_changed (priv->etree_model, node);
-}
-
-static void
-folder_name_changed_cb (EFolder *folder,
- void *data)
-{
- EStorageSetView *storage_set_view;
- EStorageSetViewPrivate *priv;
- FolderChangedCallbackData *callback_data;
- ETreePath parent_node;
- const char *last_separator;
- char *parent_path;
-
- callback_data = (FolderChangedCallbackData *) data;
-
- storage_set_view = callback_data->storage_set_view;
- priv = storage_set_view->priv;
-
- last_separator = strrchr (callback_data->path, E_PATH_SEPARATOR);
-
- parent_path = g_strndup (callback_data->path, last_separator - callback_data->path);
- parent_node = g_hash_table_lookup (priv->path_to_etree_node, parent_path);
- g_free (parent_path);
-
- if (parent_node == NULL) {
- g_warning ("EStorageSetView -- EFolder::name_changed emitted for a folder whose path I don't know.");
- return;
- }
-
- e_tree_memory_sort_node (E_TREE_MEMORY (priv->etree_model), parent_node,
- folder_sort_callback, storage_set_view);
-}
-
-static void
-setup_folder_changed_callbacks (EStorageSetView *storage_set_view,
- EFolder *folder,
- const char *path)
-{
- FolderChangedCallbackData *folder_changed_callback_data;
-
- folder_changed_callback_data = g_new (FolderChangedCallbackData, 1);
- folder_changed_callback_data->storage_set_view = storage_set_view;
- folder_changed_callback_data->path = g_strdup (path);
-
- e_signal_connect_while_alive (folder, "name_changed",
- G_CALLBACK (folder_name_changed_cb),
- folder_changed_callback_data,
- storage_set_view);
-
- e_signal_connect_full_while_alive (folder, "changed",
- G_CALLBACK (folder_changed_cb),
- NULL,
- folder_changed_callback_data,
- folder_changed_callback_data_destroy_notify,
- FALSE, FALSE,
- storage_set_view);
-}
-
-
-static void
-insert_folders (EStorageSetView *storage_set_view,
- ETreePath parent,
- EStorage *storage,
- const char *path)
-{
- EStorageSetViewPrivate *priv;
- ETreeModel *etree;
- ETreePath node;
- GList *folder_path_list;
- GList *p;
- const char *storage_name;
-
- priv = storage_set_view->priv;
- etree = priv->etree_model;
-
- storage_name = e_storage_get_name (storage);
-
- folder_path_list = e_storage_get_subfolder_paths (storage, path);
- if (folder_path_list == NULL)
- return;
-
- for (p = folder_path_list; p != NULL; p = p->next) {
- EFolder *folder;
- const char *folder_name;
- const char *folder_path;
- char *full_path;
-
- folder_path = (const char *) p->data;
- folder = e_storage_get_folder (storage, folder_path);
- folder_name = e_folder_get_name (folder);
-
- full_path = g_strconcat ("/", storage_name, folder_path, NULL);
-
- setup_folder_changed_callbacks (storage_set_view, folder, full_path);
-
- node = e_tree_memory_node_insert (E_TREE_MEMORY(etree), parent, -1, (void *) full_path);
- e_tree_memory_sort_node(E_TREE_MEMORY(etree), parent, folder_sort_callback, storage_set_view);
- add_node_to_hash (storage_set_view, full_path, node);
-
- insert_folders (storage_set_view, node, storage, folder_path);
- }
-
- e_free_string_list (folder_path_list);
-}
-
-static void
-insert_storages (EStorageSetView *storage_set_view)
-{
- EStorageSetViewPrivate *priv;
- EStorageSet *storage_set;
- GList *storage_list;
- GList *p;
-
- priv = storage_set_view->priv;
-
- storage_set = priv->storage_set;
-
- storage_list = e_storage_set_get_storage_list (storage_set);
-
- for (p = storage_list; p != NULL; p = p->next) {
- EStorage *storage = E_STORAGE (p->data);
- const char *name;
- char *path;
- ETreePath parent;
-
- name = e_storage_get_name (storage);
- path = g_strconcat ("/", name, NULL);
-
- parent = e_tree_memory_node_insert (E_TREE_MEMORY(priv->etree_model), priv->root_node, -1, path);
- e_tree_memory_sort_node (E_TREE_MEMORY(priv->etree_model),
- priv->root_node,
- storage_sort_callback, storage_set_view);
-
- g_hash_table_insert (priv->path_to_etree_node, path, parent);
-
- if (priv->show_folders)
- insert_folders (storage_set_view, parent, storage, "/");
- }
-
- e_free_object_list (storage_list);
-}
-
-void
-e_storage_set_view_construct (EStorageSetView *storage_set_view,
- EStorageSet *storage_set,
- BonoboUIContainer *ui_container)
-{
- EStorageSetViewPrivate *priv;
- ETableExtras *extras;
- ECell *cell;
-
- g_return_if_fail (E_IS_STORAGE_SET_VIEW (storage_set_view));
- g_return_if_fail (E_IS_STORAGE_SET (storage_set));
-
- priv = storage_set_view->priv;
-
- priv->ui_container = ui_container;
- if (ui_container != NULL) {
- g_object_weak_ref (G_OBJECT (ui_container), ui_container_destroy_notify, priv);
-
- priv->ui_component = bonobo_ui_component_new_default ();
- bonobo_ui_component_set_container (priv->ui_component,
- bonobo_object_corba_objref (BONOBO_OBJECT (ui_container)),
- NULL);
- }
-
- priv->etree_model = e_tree_memory_callbacks_new (etree_icon_at,
-
- etree_column_count,
-
- etree_has_save_id,
- etree_get_save_id,
- etree_has_get_node_by_id,
- etree_get_node_by_id,
-
- etree_value_at,
- etree_set_value_at,
- etree_is_editable,
-
- etree_duplicate_value,
- etree_free_value,
- etree_initialize_value,
- etree_value_is_empty,
- etree_value_to_string,
-
- storage_set_view);
-
- e_tree_memory_set_node_destroy_func (E_TREE_MEMORY (priv->etree_model),
- etree_node_destroy_func, storage_set_view);
- e_tree_memory_set_expanded_default (E_TREE_MEMORY (priv->etree_model), FALSE);
-
- priv->root_node = e_tree_memory_node_insert (E_TREE_MEMORY(priv->etree_model), NULL, -1,
- g_strdup (ROOT_NODE_NAME));
- add_node_to_hash (storage_set_view, ROOT_NODE_NAME, priv->root_node);
-
- extras = e_table_extras_new ();
- cell = e_cell_text_new (NULL, GTK_JUSTIFY_LEFT);
- g_object_set((cell), "bold_column", 1, NULL);
- e_table_extras_add_cell (extras, "render_tree",
- e_cell_tree_new (NULL, NULL, TRUE, cell));
-
- e_table_extras_add_cell (extras, "optional_checkbox",
- e_cell_toggle_new (2, 3, checks));
-
- e_tree_construct_from_spec_file (E_TREE (storage_set_view), priv->etree_model, extras,
- EVOLUTION_ETSPECDIR "/e-storage-set-view.etspec", NULL);
-
- e_tree_root_node_set_visible (E_TREE(storage_set_view), FALSE);
-
- g_object_unref (extras);
-
- g_object_ref (storage_set);
- priv->storage_set = storage_set;
-
- e_tree_drag_dest_set (E_TREE (storage_set_view), 0, NULL, 0, GDK_ACTION_MOVE | GDK_ACTION_COPY);
-
- g_signal_connect_object (storage_set, "new_storage", G_CALLBACK (new_storage_cb), storage_set_view, 0);
- g_signal_connect_object (storage_set, "removed_storage", G_CALLBACK (removed_storage_cb), storage_set_view, 0);
- g_signal_connect_object (storage_set, "new_folder", G_CALLBACK (new_folder_cb), storage_set_view, 0);
- g_signal_connect_object (storage_set, "updated_folder", G_CALLBACK (updated_folder_cb), storage_set_view, 0);
- g_signal_connect_object (storage_set, "removed_folder", G_CALLBACK (removed_folder_cb), storage_set_view, 0);
- g_signal_connect_object (storage_set, "close_folder", G_CALLBACK (close_folder_cb), storage_set_view, 0);
-
- g_signal_connect_object (priv->etree_model, "fill_in_children", G_CALLBACK (etree_fill_in_children), storage_set_view, 0);
-
- insert_storages (storage_set_view);
-}
-
-/* DON'T USE THIS. Use e_storage_set_new_view() instead. */
-GtkWidget *
-e_storage_set_view_new (EStorageSet *storage_set,
- BonoboUIContainer *ui_container)
-{
- GtkWidget *new;
-
- g_return_val_if_fail (E_IS_STORAGE_SET (storage_set), NULL);
-
- new = g_object_new (e_storage_set_view_get_type (), NULL);
-
- e_storage_set_view_construct (E_STORAGE_SET_VIEW (new), storage_set, ui_container);
-
- return new;
-}
-
-
-EStorageSet *
-e_storage_set_view_get_storage_set (EStorageSetView *storage_set_view)
-{
- EStorageSetViewPrivate *priv;
-
- g_return_val_if_fail (E_IS_STORAGE_SET_VIEW (storage_set_view), NULL);
-
- priv = storage_set_view->priv;
- return priv->storage_set;
-}
-
-void
-e_storage_set_view_set_current_folder (EStorageSetView *storage_set_view,
- const char *path)
-{
- EStorageSetViewPrivate *priv;
- ETreePath node;
-
- g_return_if_fail (storage_set_view != NULL);
- g_return_if_fail (E_IS_STORAGE_SET_VIEW (storage_set_view));
- g_return_if_fail (path != NULL && g_path_is_absolute (path));
-
- priv = storage_set_view->priv;
-
- node = g_hash_table_lookup (priv->path_to_etree_node, path);
- if (node == NULL)
- return;
-
- e_tree_show_node (E_TREE (storage_set_view), node);
- e_tree_set_cursor (E_TREE (storage_set_view), node);
-
- g_free (priv->selected_row_path);
- priv->selected_row_path = g_strdup (path);
-
- g_signal_emit (storage_set_view, signals[FOLDER_SELECTED], 0, path);
-}
-
-const char *
-e_storage_set_view_get_current_folder (EStorageSetView *storage_set_view)
-{
- EStorageSetViewPrivate *priv;
- ETreePath etree_node;
- const char *path;
-
- g_return_val_if_fail (storage_set_view != NULL, NULL);
- g_return_val_if_fail (E_IS_STORAGE_SET_VIEW (storage_set_view), NULL);
-
- priv = storage_set_view->priv;
-
- if (!priv->show_folders)
- return NULL; /* Mmh! */
-
- etree_node = e_tree_get_cursor (E_TREE (storage_set_view));
-
- if (etree_node == NULL)
- return NULL; /* Mmh? */
-
- path = (char*)e_tree_memory_node_get_data(E_TREE_MEMORY(priv->etree_model), etree_node);
-
- return path;
-}
-
-void
-e_storage_set_view_set_show_folders (EStorageSetView *storage_set_view,
- gboolean show)
-{
- EStorageSetViewPrivate *priv;
-
- g_return_if_fail (storage_set_view != NULL);
- g_return_if_fail (E_IS_STORAGE_SET_VIEW (storage_set_view));
-
- priv = storage_set_view->priv;
-
- if (show == priv->show_folders)
- return;
-
- /* tear down existing tree and hash table mappings */
- e_tree_memory_node_remove (E_TREE_MEMORY(priv->etree_model), priv->root_node);
-
- /* now re-add the root node */
- priv->root_node = e_tree_memory_node_insert (E_TREE_MEMORY(priv->etree_model), NULL, -1,
- g_strdup (ROOT_NODE_NAME));
- add_node_to_hash (storage_set_view, ROOT_NODE_NAME, priv->root_node);
-
- /* then reinsert the storages after setting the "show_folders"
- flag. insert_storages will call insert_folders if
- show_folders is TRUE */
-
- priv->show_folders = show;
- insert_storages (storage_set_view);
-}
-
-gboolean
-e_storage_set_view_get_show_folders (EStorageSetView *storage_set_view)
-{
- return storage_set_view->priv->show_folders;
-}
-
-
-
-void
-e_storage_set_view_set_show_checkboxes (EStorageSetView *storage_set_view,
- gboolean show,
- EStorageSetViewHasCheckBoxFunc has_checkbox_func,
- void *func_data)
-{
- EStorageSetViewPrivate *priv;
- ETableState *state;
-
- g_return_if_fail (storage_set_view != NULL);
- g_return_if_fail (E_IS_STORAGE_SET_VIEW (storage_set_view));
-
- priv = storage_set_view->priv;
-
- show = !! show;
-
- if (show == priv->show_checkboxes)
- return;
-
- priv->show_checkboxes = show;
-
- state = e_tree_get_state_object (E_TREE (storage_set_view));
- g_free (state->columns);
- state->col_count = show ? 2 : 1;
- state->columns = g_new(int, state->col_count);
- state->columns [state->col_count - 1] = 0;
- if (show)
- state->columns [0] = 1;
- e_tree_set_state_object (E_TREE (storage_set_view), state);
-
- priv->has_checkbox_func = has_checkbox_func;
- priv->has_checkbox_func_data = func_data;
-}
-
-gboolean
-e_storage_set_view_get_show_checkboxes (EStorageSetView *storage_set_view)
-{
- g_return_val_if_fail (storage_set_view != NULL, FALSE);
- g_return_val_if_fail (E_IS_STORAGE_SET_VIEW (storage_set_view), FALSE);
-
- return storage_set_view->priv->show_checkboxes;
-}
-
-void
-e_storage_set_view_enable_search (EStorageSetView *storage_set_view,
- gboolean enable)
-{
- g_return_if_fail (storage_set_view != NULL);
- g_return_if_fail (E_IS_STORAGE_SET_VIEW (storage_set_view));
-
- enable = !! enable;
-
- if (enable == storage_set_view->priv->search_enabled)
- return;
-
- storage_set_view->priv->search_enabled = enable;
- e_tree_set_search_column (E_TREE (storage_set_view), enable ? 0 : -1);
-}
-
-void
-e_storage_set_view_set_checkboxes_list (EStorageSetView *storage_set_view,
- GSList *checkboxes)
-{
- gboolean changed = FALSE;
- EStorageSetViewPrivate *priv = storage_set_view->priv;
-
- e_tree_model_pre_change (priv->etree_model);
- if (priv->checkboxes) {
- g_hash_table_foreach (priv->checkboxes, (GHFunc) g_free, NULL);
- g_hash_table_destroy (priv->checkboxes);
- changed = TRUE;
- }
-
- if (checkboxes) {
- priv->checkboxes = g_hash_table_new (g_str_hash, g_str_equal);
- for (; checkboxes; checkboxes = g_slist_next (checkboxes)) {
- char *path = checkboxes->data;
-
- if (g_hash_table_lookup (priv->checkboxes, path))
- continue;
- path = g_strdup (path);
- g_hash_table_insert (priv->checkboxes, path, path);
- }
- changed = TRUE;
- }
-
- if (changed)
- e_tree_model_node_changed (priv->etree_model,
- e_tree_model_get_root (priv->etree_model));
- else
- e_tree_model_no_change (priv->etree_model);
-}
-
-static void
-essv_add_to_list (gpointer key,
- gpointer value,
- gpointer user_data)
-{
- GSList **list = user_data;
-
- *list = g_slist_prepend (*list, g_strdup (key));
-}
-
-GSList *
-e_storage_set_view_get_checkboxes_list (EStorageSetView *storage_set_view)
-{
- GSList *list = NULL;
-
- if (storage_set_view->priv->checkboxes) {
- g_hash_table_foreach (storage_set_view->priv->checkboxes, essv_add_to_list, &list);
-
- list = g_slist_reverse (list);
- }
-
- return list;
-}
-
-
-void
-e_storage_set_view_set_allow_dnd (EStorageSetView *storage_set_view,
- gboolean allow_dnd)
-{
- g_return_if_fail (storage_set_view != NULL);
- g_return_if_fail (E_IS_STORAGE_SET_VIEW (storage_set_view));
-
- storage_set_view->priv->allow_dnd = !! allow_dnd;
-}
-
-gboolean
-e_storage_set_view_get_allow_dnd (EStorageSetView *storage_set_view)
-{
- g_return_val_if_fail (storage_set_view != NULL, FALSE);
- g_return_val_if_fail (E_IS_STORAGE_SET_VIEW (storage_set_view), FALSE);
-
- return storage_set_view->priv->allow_dnd;
-}
-
-const char *
-e_storage_set_view_get_right_click_path (EStorageSetView *storage_set_view)
-{
- g_return_val_if_fail (storage_set_view != NULL, NULL);
- g_return_val_if_fail (E_IS_STORAGE_SET_VIEW (storage_set_view), NULL);
-
- return storage_set_view->priv->right_click_row_path;
-}
-
-
-E_MAKE_TYPE (e_storage_set_view, "EStorageSetView", EStorageSetView, class_init, init, PARENT_TYPE)
diff --git a/shell/e-storage-set-view.etspec b/shell/e-storage-set-view.etspec
deleted file mode 100644
index f0a8bbfc11..0000000000
--- a/shell/e-storage-set-view.etspec
+++ /dev/null
@@ -1,8 +0,0 @@
-<ETableSpecification no-headers="true" selection-mode="single" cursor-mode="line" draw-grid="false" horizontal-scrolling="true">
- <ETableColumn model_col="0" _title="Folder" expansion="1.0" minimum_width="20" resizable="true" cell="render_tree" compare="string" search="string"/>
- <ETableColumn model_col="2" _title="Checkbox" expansion="0.0" minimum_width="18" resizable="false" cell="optional_checkbox" compare="integer"/>
- <ETableState>
- <column source="0"/>
- <grouping></grouping>
- </ETableState>
-</ETableSpecification> \ No newline at end of file
diff --git a/shell/e-storage-set-view.h b/shell/e-storage-set-view.h
deleted file mode 100644
index 65a2e7ae14..0000000000
--- a/shell/e-storage-set-view.h
+++ /dev/null
@@ -1,122 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-storage-set-view.h
- *
- * Copyright (C) 2000 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifndef __E_STORAGE_SET_VIEW_H__
-#define __E_STORAGE_SET_VIEW_H__
-
-#include <gal/e-table/e-tree.h>
-#include <bonobo/bonobo-ui-container.h>
-#include "e-storage-set.h"
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-#define E_TYPE_STORAGE_SET_VIEW (e_storage_set_view_get_type ())
-#define E_STORAGE_SET_VIEW(obj) (GTK_CHECK_CAST ((obj), E_TYPE_STORAGE_SET_VIEW, EStorageSetView))
-#define E_STORAGE_SET_VIEW_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_STORAGE_SET_VIEW, EStorageSetViewClass))
-#define E_IS_STORAGE_SET_VIEW(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_STORAGE_SET_VIEW))
-#define E_IS_STORAGE_SET_VIEW_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_STORAGE_SET_VIEW))
-
-
-typedef gboolean (* EStorageSetViewHasCheckBoxFunc) (EStorageSet *storage_set,
- const char *path,
- void *data);
-
-typedef struct _EStorageSetView EStorageSetView;
-typedef struct _EStorageSetViewPrivate EStorageSetViewPrivate;
-typedef struct _EStorageSetViewClass EStorageSetViewClass;
-
-struct _EStorageSetView {
- ETree parent;
-
- EStorageSetViewPrivate *priv;
-};
-
-struct _EStorageSetViewClass {
- ETreeClass parent_class;
-
- /* Signals. */
-
- void (* folder_selected) (EStorageSetView *storage_set_view,
- const char *path);
- void (* folder_opened) (EStorageSetView *storage_set_view,
- const char *path);
-
- void (* dnd_action) (EStorageSetView *storage_set_view,
- GdkDragContext *context,
- const char *source_data,
- const char *source_data_type,
- const char *target_path);
-
- void (* folder_context_menu_popping_up) (EStorageSetView *storage_set_view,
- const char *path);
- void (* folder_context_menu_popped_down) (EStorageSetView *storage_set_view);
- void (* checkboxes_changed) (EStorageSetView *storage_set_view);
-};
-
-
-GtkType e_storage_set_view_get_type (void);
-
-/* DON'T USE THIS. Use e_storage_set_new_view() instead. */
-GtkWidget *e_storage_set_view_new (EStorageSet *storage_set,
- BonoboUIContainer *ui_container);
-void e_storage_set_view_construct (EStorageSetView *storage_set_view,
- EStorageSet *storage_set,
- BonoboUIContainer *ui_container);
-
-EStorageSet *e_storage_set_view_get_storage_set (EStorageSetView *storage_set_view);
-
-void e_storage_set_view_set_current_folder (EStorageSetView *storage_set_view,
- const char *path);
-const char *e_storage_set_view_get_current_folder (EStorageSetView *storage_set_view);
-
-void e_storage_set_view_set_show_folders (EStorageSetView *storage_set_view,
- gboolean show);
-gboolean e_storage_set_view_get_show_folders (EStorageSetView *storage_set_view);
-
-void e_storage_set_view_set_show_checkboxes (EStorageSetView *storage_set_view,
- gboolean show,
- EStorageSetViewHasCheckBoxFunc has_checkbox_func,
- void *func_data);
-gboolean e_storage_set_view_get_show_checkboxes (EStorageSetView *storage_set_view);
-
-void e_storage_set_view_enable_search (EStorageSetView *storage_set_view,
- gboolean enable);
-
-void e_storage_set_view_set_checkboxes_list (EStorageSetView *storage_set_view,
- GSList *checkboxes);
-GSList *e_storage_set_view_get_checkboxes_list (EStorageSetView *storage_set_view);
-
-void e_storage_set_view_set_allow_dnd (EStorageSetView *storage_set_view,
- gboolean allow_dnd);
-gboolean e_storage_set_view_get_allow_dnd (EStorageSetView *storage_set_view);
-
-const char *e_storage_set_view_get_right_click_path (EStorageSetView *storage_set_view);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-
-#endif /* __E_STORAGE_SET_VIEW_H__ */
diff --git a/shell/e-storage-set.c b/shell/e-storage-set.c
deleted file mode 100644
index 2978ea7572..0000000000
--- a/shell/e-storage-set.c
+++ /dev/null
@@ -1,885 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-storage-set.c
- *
- * Copyright (C) 2000 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "e-storage-set.h"
-
-#include "e-storage-set-view.h"
-#include "e-shell-constants.h"
-#include "e-shell-marshal.h"
-
-#include <glib.h>
-#include <gtk/gtkobject.h>
-#include <gtk/gtksignal.h>
-#include <gtk/gtktypeutils.h>
-
-#include <gal/util/e-util.h>
-
-#include <string.h>
-
-
-#define PARENT_TYPE GTK_TYPE_OBJECT
-
-static GtkObjectClass *parent_class = NULL;
-
-/* This is just to make GHashTable happy. */
-struct _NamedStorage {
- char *name;
- EStorage *storage;
-};
-typedef struct _NamedStorage NamedStorage;
-
-struct _EStorageSetPrivate {
- GList *storages; /* EStorage */
- GHashTable *name_to_named_storage;
-
- EFolderTypeRegistry *folder_type_registry;
-};
-
-enum {
- NEW_STORAGE,
- REMOVED_STORAGE,
- NEW_FOLDER,
- UPDATED_FOLDER,
- REMOVED_FOLDER,
- MOVED_FOLDER,
- CLOSE_FOLDER,
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = { 0 };
-
-
-static NamedStorage *
-named_storage_new (EStorage *storage)
-{
- NamedStorage *new;
-
- new = g_new (NamedStorage, 1);
- new->name = g_strdup (e_storage_get_name (storage));
- new->storage = storage;
-
- return new;
-}
-
-static void
-named_storage_destroy (NamedStorage *named_storage)
-{
- g_free (named_storage->name);
- g_free (named_storage);
-}
-
-static gboolean
-name_to_named_storage_foreach_destroy (void *key,
- void *value,
- void *user_data)
-{
- NamedStorage *named_storage;
-
- named_storage = (NamedStorage *) value;
- named_storage_destroy (named_storage);
-
- return TRUE;
-}
-
-
-/* "Callback converter", from `EStorageResultCallback' to
- `EStorageSetResultCallback'. */
-
-enum _StorageOperation {
- OPERATION_COPY,
- OPERATION_MOVE,
- OPERATION_REMOVE,
- OPERATION_CREATE
-};
-typedef enum _StorageOperation StorageOperation;
-
-struct _StorageCallbackData {
- EStorageSet *storage_set;
- EStorageSetResultCallback storage_set_result_callback;
- char *source_path;
- char *destination_path;
- StorageOperation operation;
- void *data;
-};
-typedef struct _StorageCallbackData StorageCallbackData;
-
-static StorageCallbackData *
-storage_callback_data_new (EStorageSet *storage_set,
- EStorageSetResultCallback callback,
- const char *source_path,
- const char *destination_path,
- StorageOperation operation,
- void *data)
-{
- StorageCallbackData *new;
-
- new = g_new (StorageCallbackData, 1);
- new->storage_set = storage_set;
- new->storage_set_result_callback = callback;
- new->source_path = g_strdup (source_path);
- new->destination_path = g_strdup (destination_path);
- new->operation = operation;
- new->data = data;
-
- return new;
-}
-
-static void
-storage_callback_data_free (StorageCallbackData *data)
-{
- g_free (data->source_path);
- g_free (data->destination_path);
-
- g_free (data);
-}
-
-static void
-storage_callback (EStorage *storage,
- EStorageResult result,
- void *data)
-{
- StorageCallbackData *storage_callback_data;
-
- storage_callback_data = (StorageCallbackData *) data;
-
- (* storage_callback_data->storage_set_result_callback) (storage_callback_data->storage_set,
- result,
- storage_callback_data->data);
-
- if (storage_callback_data->operation == OPERATION_MOVE)
- g_signal_emit (storage_callback_data->storage_set, signals[MOVED_FOLDER], 0,
- storage_callback_data->source_path, storage_callback_data->destination_path);
-
- storage_callback_data_free (storage_callback_data);
-}
-
-
-/* Handling for signals coming from the EStorages. */
-
-static char *
-make_full_path (EStorage *storage,
- const char *path)
-{
- const char *storage_name;
- char *full_path;
-
- storage_name = e_storage_get_name (storage);
-
- if (strcmp (path, E_PATH_SEPARATOR_S) == 0)
- full_path = g_strconcat (E_PATH_SEPARATOR_S, storage_name,
- NULL);
- else if (! g_path_is_absolute (path))
- full_path = g_strconcat (E_PATH_SEPARATOR_S, storage_name,
- E_PATH_SEPARATOR_S, path, NULL);
- else
- full_path = g_strconcat (E_PATH_SEPARATOR_S, storage_name,
- path, NULL);
-
- return full_path;
-}
-
-static void
-storage_new_folder_cb (EStorage *storage,
- const char *path,
- void *data)
-{
- EStorageSet *storage_set;
- char *full_path;
-
- storage_set = E_STORAGE_SET (data);
-
- full_path = make_full_path (storage, path);
- g_signal_emit (storage_set, signals[NEW_FOLDER], 0, full_path);
- g_free (full_path);
-}
-
-static void
-storage_updated_folder_cb (EStorage *storage,
- const char *path,
- void *data)
-{
- EStorageSet *storage_set;
- char *full_path;
-
- storage_set = E_STORAGE_SET (data);
-
- full_path = make_full_path (storage, path);
- g_signal_emit (storage_set, signals[UPDATED_FOLDER], 0, full_path);
- g_free (full_path);
-}
-
-static void
-storage_removed_folder_cb (EStorage *storage,
- const char *path,
- void *data)
-{
- EStorageSet *storage_set;
- char *full_path;
-
- storage_set = E_STORAGE_SET (data);
-
- full_path = make_full_path (storage, path);
- g_signal_emit (storage_set, signals[REMOVED_FOLDER], 0, full_path);
- g_free (full_path);
-}
-
-
-static EStorage *
-get_storage_for_path (EStorageSet *storage_set,
- const char *path,
- const char **subpath_return)
-{
- EStorage *storage;
- char *storage_name;
- const char *first_separator;
-
- g_return_val_if_fail (g_path_is_absolute (path), NULL);
- g_return_val_if_fail (path[1] != E_PATH_SEPARATOR, NULL);
-
- /* Skip initial separator. */
- path++;
-
- first_separator = strchr (path, E_PATH_SEPARATOR);
-
- if (first_separator == NULL || first_separator[1] == 0) {
- storage = e_storage_set_get_storage (storage_set, path);
- *subpath_return = E_PATH_SEPARATOR_S;
- } else {
- storage_name = g_strndup (path, first_separator - path);
- storage = e_storage_set_get_storage (storage_set, storage_name);
- g_free (storage_name);
-
- *subpath_return = first_separator;
- }
-
- return storage;
-}
-
-static void
-signal_new_folder_for_all_folders_under_paths (EStorageSet *storage_set,
- EStorage *storage,
- GList *path_list)
-{
- GList *p;
-
- for (p = path_list; p != NULL; p = p->next) {
- GList *sub_path_list;
- const char *path;
- char *path_with_storage;
-
- path = (const char *) p->data;
-
- path_with_storage = g_strconcat (E_PATH_SEPARATOR_S, e_storage_get_name (storage), path, NULL);
- g_signal_emit (storage_set, signals[NEW_FOLDER], 0, path_with_storage);
- g_free (path_with_storage);
-
- sub_path_list = e_storage_get_subfolder_paths (storage, path);
-
- signal_new_folder_for_all_folders_under_paths (storage_set, storage, sub_path_list);
-
- e_free_string_list (sub_path_list);
- }
-}
-
-static void
-signal_new_folder_for_all_folders_in_storage (EStorageSet *storage_set,
- EStorage *storage)
-{
- GList *path_list;
-
- path_list = e_storage_get_subfolder_paths (storage, E_PATH_SEPARATOR_S);
-
- signal_new_folder_for_all_folders_under_paths (storage_set, storage, path_list);
-
- e_free_string_list (path_list);
-}
-
-
-/* GtkObject methods. */
-
-static void
-impl_dispose (GObject *object)
-{
- EStorageSet *storage_set;
- EStorageSetPrivate *priv;
-
- storage_set = E_STORAGE_SET (object);
- priv = storage_set->priv;
-
- if (priv->storages != NULL) {
- e_free_object_list (priv->storages);
- priv->storages = NULL;
- }
-
- if (priv->folder_type_registry != NULL) {
- g_object_unref (priv->folder_type_registry);
- priv->folder_type_registry = NULL;
- }
-
- (* G_OBJECT_CLASS (parent_class)->dispose) (object);
-}
-
-static void
-impl_finalize (GObject *object)
-{
- EStorageSet *storage_set;
- EStorageSetPrivate *priv;
-
- storage_set = E_STORAGE_SET (object);
- priv = storage_set->priv;
-
- g_hash_table_foreach (priv->name_to_named_storage, (GHFunc) name_to_named_storage_foreach_destroy, NULL);
- g_hash_table_destroy (priv->name_to_named_storage);
-
- g_free (priv);
-
- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
-}
-
-
-static void
-class_init (EStorageSetClass *klass)
-{
- GObjectClass *object_class;
-
- parent_class = g_type_class_ref(gtk_object_get_type ());
- object_class = G_OBJECT_CLASS (klass);
-
- object_class->dispose = impl_dispose;
- object_class->finalize = impl_finalize;
-
- signals[NEW_STORAGE] =
- g_signal_new ("new_storage",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EStorageSetClass, new_storage),
- NULL, NULL,
- e_shell_marshal_NONE__POINTER,
- G_TYPE_NONE, 1,
- G_TYPE_POINTER);
- signals[REMOVED_STORAGE] =
- g_signal_new ("removed_storage",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EStorageSetClass, removed_storage),
- NULL, NULL,
- e_shell_marshal_NONE__POINTER,
- G_TYPE_NONE, 1,
- G_TYPE_POINTER);
- signals[NEW_FOLDER] =
- g_signal_new ("new_folder",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EStorageSetClass, new_folder),
- NULL, NULL,
- e_shell_marshal_NONE__STRING,
- G_TYPE_NONE, 1,
- G_TYPE_STRING);
- signals[UPDATED_FOLDER] =
- g_signal_new ("updated_folder",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EStorageSetClass, updated_folder),
- NULL, NULL,
- e_shell_marshal_NONE__STRING,
- G_TYPE_NONE, 1,
- G_TYPE_STRING);
- signals[REMOVED_FOLDER] =
- g_signal_new ("removed_folder",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EStorageSetClass, removed_folder),
- NULL, NULL,
- e_shell_marshal_NONE__STRING,
- G_TYPE_NONE, 1,
- G_TYPE_STRING);
- signals[MOVED_FOLDER] =
- g_signal_new ("moved_folder",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EStorageSetClass, moved_folder),
- NULL, NULL,
- e_shell_marshal_NONE__STRING_STRING,
- G_TYPE_NONE, 2,
- G_TYPE_STRING,
- G_TYPE_STRING);
- signals[CLOSE_FOLDER] =
- g_signal_new ("close_folder",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EStorageSetClass, close_folder),
- NULL, NULL,
- e_shell_marshal_NONE__STRING,
- G_TYPE_NONE, 1,
- G_TYPE_STRING);
-}
-
-static void
-init (EStorageSet *storage_set)
-{
- EStorageSetPrivate *priv;
-
- g_return_if_fail (E_IS_STORAGE_SET (storage_set));
-
- priv = g_new (EStorageSetPrivate, 1);
- priv->storages = NULL;
- priv->name_to_named_storage = g_hash_table_new (g_str_hash, g_str_equal);
- priv->folder_type_registry = NULL;
-
- storage_set->priv = priv;
-}
-
-
-void
-e_storage_set_construct (EStorageSet *storage_set,
- EFolderTypeRegistry *folder_type_registry)
-{
- g_return_if_fail (storage_set != NULL);
- g_return_if_fail (E_IS_STORAGE_SET (storage_set));
-
- GTK_OBJECT_UNSET_FLAGS (storage_set, GTK_FLOATING);
-
- g_object_ref (folder_type_registry);
- storage_set->priv->folder_type_registry = folder_type_registry;
-}
-
-EStorageSet *
-e_storage_set_new (EFolderTypeRegistry *folder_type_registry)
-{
- EStorageSet *new;
-
- new = g_object_new (e_storage_set_get_type (), NULL);
-
- e_storage_set_construct (new, folder_type_registry);
-
- return new;
-}
-
-
-GList *
-e_storage_set_get_storage_list (EStorageSet *storage_set)
-{
- EStorageSetPrivate *priv;
- GList *list;
- GList *p;
-
- g_return_val_if_fail (storage_set != NULL, NULL);
- g_return_val_if_fail (E_IS_STORAGE_SET (storage_set), NULL);
-
- priv = storage_set->priv;
-
- list = NULL;
- for (p = priv->storages; p != NULL; p = p->next) {
- g_object_ref (p->data);
- list = g_list_prepend (list, p->data);
- }
-
- return g_list_reverse (list); /* Lame. */
-}
-
-/**
- * e_storage_set_add_storage:
- * @storage_set:
- * @storage:
- *
- * Add @storage to @storage_set. Notice that will ref the storage.
- **/
-gboolean
-e_storage_set_add_storage (EStorageSet *storage_set,
- EStorage *storage)
-{
- EStorageSetPrivate *priv;
- const char *storage_name;
- NamedStorage *named_storage;
-
- g_return_val_if_fail (storage_set != NULL, FALSE);
- g_return_val_if_fail (E_IS_STORAGE_SET (storage_set), FALSE);
- g_return_val_if_fail (storage != NULL, FALSE);
- g_return_val_if_fail (E_IS_STORAGE (storage), FALSE);
-
- priv = storage_set->priv;
-
- storage_name = e_storage_get_name (storage);
- if (g_hash_table_lookup (priv->name_to_named_storage, storage_name) != NULL)
- return FALSE;
-
- g_object_ref (storage);
-
- g_signal_connect (storage, "new_folder",
- G_CALLBACK (storage_new_folder_cb), storage_set);
- g_signal_connect (storage, "updated_folder",
- G_CALLBACK (storage_updated_folder_cb), storage_set);
- g_signal_connect (storage, "removed_folder",
- G_CALLBACK (storage_removed_folder_cb), storage_set);
-
- priv->storages = g_list_append (priv->storages, storage);
-
- named_storage = named_storage_new (storage);
- g_hash_table_insert (priv->name_to_named_storage, named_storage->name, named_storage);
-
- g_signal_emit (storage_set, signals[NEW_STORAGE], 0, storage);
-
- signal_new_folder_for_all_folders_in_storage (storage_set, storage);
-
- return TRUE;
-}
-
-gboolean
-e_storage_set_remove_storage (EStorageSet *storage_set,
- EStorage *storage)
-{
- EStorageSetPrivate *priv;
- NamedStorage *named_storage;
-
- g_return_val_if_fail (storage_set != NULL, FALSE);
- g_return_val_if_fail (E_IS_STORAGE_SET (storage_set), FALSE);
- g_return_val_if_fail (storage != NULL, FALSE);
- g_return_val_if_fail (E_IS_STORAGE (storage), FALSE);
-
- priv = storage_set->priv;
-
- named_storage = g_hash_table_lookup (priv->name_to_named_storage,
- e_storage_get_name (storage));
- if (named_storage == NULL)
- return FALSE;
-
- g_hash_table_remove (priv->name_to_named_storage, named_storage->name);
- named_storage_destroy (named_storage);
-
- priv->storages = g_list_remove (priv->storages, storage);
-
- g_signal_emit (storage_set, signals[REMOVED_STORAGE], 0, storage);
- g_object_unref (storage);
-
- return TRUE;
-}
-
-void
-e_storage_set_remove_all_storages (EStorageSet *storage_set)
-{
- EStorageSetPrivate *priv;
- GList *p;
-
- g_return_if_fail (storage_set != NULL);
- g_return_if_fail (E_IS_STORAGE_SET (storage_set));
-
- priv = storage_set->priv;
-
- for (p = priv->storages; p != NULL; p = p->next) {
- EStorage *storage;
-
- storage = E_STORAGE (p->data);
-
- g_signal_emit (storage_set, signals[REMOVED_STORAGE], 0, storage);
- g_object_unref (storage);
- }
-
- g_hash_table_foreach_remove (priv->name_to_named_storage,
- name_to_named_storage_foreach_destroy,
- NULL);
-
- g_list_free (priv->storages);
- priv->storages = NULL;
-}
-
-
-EStorage *
-e_storage_set_get_storage (EStorageSet *storage_set,
- const char *name)
-{
- EStorageSetPrivate *priv;
- NamedStorage *named_storage;
-
- g_return_val_if_fail (storage_set != NULL, NULL);
- g_return_val_if_fail (E_IS_STORAGE_SET (storage_set), NULL);
- g_return_val_if_fail (name != NULL, NULL);
-
- priv = storage_set->priv;
-
- named_storage = g_hash_table_lookup (priv->name_to_named_storage, name);
- if (named_storage == NULL)
- return NULL;
- else
- return named_storage->storage;
-}
-
-EFolder *
-e_storage_set_get_folder (EStorageSet *storage_set,
- const char *path)
-{
- EStorage *storage;
- const char *subpath;
-
- g_return_val_if_fail (storage_set != NULL, NULL);
- g_return_val_if_fail (E_IS_STORAGE_SET (storage_set), NULL);
- g_return_val_if_fail (path != NULL, NULL);
- g_return_val_if_fail (g_path_is_absolute (path), NULL);
-
- storage = get_storage_for_path (storage_set, path, &subpath);
- if (storage == NULL)
- return NULL;
-
- return e_storage_get_folder (storage, subpath);
-}
-
-
-static void
-async_open_cb (EStorage *storage, EStorageResult result,
- const char *path, gpointer storage_set)
-{
- if (result != E_STORAGE_OK) {
- char *full_path;
-
- full_path = make_full_path (storage, path);
- g_signal_emit (storage_set, signals[CLOSE_FOLDER], 0, full_path);
- g_free (full_path);
- }
-}
-
-static void
-storage_set_view_folder_opened (EStorageSetView *storage_set_view,
- const char *path,
- EStorageSet *storage_set)
-{
- EStorage *storage;
- const char *subpath;
-
- storage = get_storage_for_path (storage_set, path, &subpath);
- if (storage == NULL)
- return;
-
- e_storage_async_open_folder (storage, subpath,
- async_open_cb, storage_set);
-}
-
-GtkWidget *
-e_storage_set_create_new_view (EStorageSet *storage_set,
- BonoboUIContainer *ui_container)
-{
- GtkWidget *storage_set_view;
-
- g_return_val_if_fail (storage_set != NULL, NULL);
- g_return_val_if_fail (E_IS_STORAGE_SET (storage_set), NULL);
-
- storage_set_view = e_storage_set_view_new (storage_set, ui_container);
- g_signal_connect (storage_set_view, "folder_opened",
- G_CALLBACK (storage_set_view_folder_opened),
- storage_set);
-
- return storage_set_view;
-}
-
-
-void
-e_storage_set_async_create_folder (EStorageSet *storage_set,
- const char *path,
- const char *type,
- const char *description,
- EStorageSetResultCallback callback,
- void *data)
-{
- EStorage *storage;
- const char *subpath;
- StorageCallbackData *storage_callback_data;
-
- g_return_if_fail (storage_set != NULL);
- g_return_if_fail (E_IS_STORAGE_SET (storage_set));
- g_return_if_fail (path != NULL);
- g_return_if_fail (g_path_is_absolute (path));
- g_return_if_fail (type != NULL);
- g_return_if_fail (description != NULL);
- g_return_if_fail (callback != NULL);
-
- storage = get_storage_for_path (storage_set, path, &subpath);
-
- storage_callback_data = storage_callback_data_new (storage_set, callback,
- path, NULL, OPERATION_CREATE,
- data);
-
- e_storage_async_create_folder (storage, subpath, type, description,
- storage_callback, storage_callback_data);
-}
-
-void
-e_storage_set_async_remove_folder (EStorageSet *storage_set,
- const char *path,
- EStorageSetResultCallback callback,
- void *data)
-{
- EStorage *storage;
- const char *subpath;
- StorageCallbackData *storage_callback_data;
-
- g_return_if_fail (storage_set != NULL);
- g_return_if_fail (E_IS_STORAGE_SET (storage_set));
- g_return_if_fail (path != NULL);
- g_return_if_fail (g_path_is_absolute (path));
- g_return_if_fail (callback != NULL);
-
- storage = get_storage_for_path (storage_set, path, &subpath);
-
- storage_callback_data = storage_callback_data_new (storage_set, callback,
- path, NULL, OPERATION_REMOVE,
- data);
-
- e_storage_async_remove_folder (storage, subpath,
- storage_callback, storage_callback_data);
-}
-
-void
-e_storage_set_async_xfer_folder (EStorageSet *storage_set,
- const char *source_path,
- const char *destination_path,
- gboolean remove_source,
- EStorageSetResultCallback callback,
- void *data)
-{
- EStorage *source_storage;
- EStorage *destination_storage;
- const char *source_subpath;
- const char *destination_subpath;
- StorageCallbackData *storage_callback_data;
-
- g_return_if_fail (storage_set != NULL);
- g_return_if_fail (E_IS_STORAGE_SET (storage_set));
- g_return_if_fail (source_path != NULL);
- g_return_if_fail (g_path_is_absolute (source_path));
- g_return_if_fail (destination_path != NULL);
- g_return_if_fail (g_path_is_absolute (destination_path));
- g_return_if_fail (callback != NULL);
-
- source_storage = get_storage_for_path (storage_set, source_path, &source_subpath);
- destination_storage = get_storage_for_path (storage_set, destination_path, &destination_subpath);
-
- if (source_storage != destination_storage) {
- g_warning ("e_storage_set_async_xfer_folder(): "
- "Attempt to xfer folders between different storages -- not supported yet.");
- (* callback) (storage_set, E_STORAGE_UNSUPPORTEDOPERATION, data);
- return;
- }
-
- storage_callback_data = storage_callback_data_new (storage_set,
- callback,
- source_path,
- destination_path,
- remove_source ? OPERATION_MOVE : OPERATION_COPY,
- data);
-
- e_storage_async_xfer_folder (source_storage,
- source_subpath, destination_subpath, remove_source,
- storage_callback, storage_callback_data);
-}
-
-void
-e_storage_set_async_remove_shared_folder (EStorageSet *storage_set,
- const char *path,
- EStorageSetResultCallback callback,
- void *data)
-{
- EStorage *storage;
- const char *subpath;
- StorageCallbackData *storage_callback_data;
-
- g_return_if_fail (storage_set != NULL);
- g_return_if_fail (E_IS_STORAGE_SET (storage_set));
- g_return_if_fail (path != NULL);
- g_return_if_fail (g_path_is_absolute (path));
- g_return_if_fail (callback != NULL);
-
- storage = get_storage_for_path (storage_set, path, &subpath);
-
- if (!e_storage_supports_shared_folders (storage)) {
- (* callback) (storage_set, E_STORAGE_NOTIMPLEMENTED, data);
- return;
- }
-
- storage_callback_data = storage_callback_data_new (storage_set, callback,
- path, NULL, OPERATION_REMOVE,
- data);
-
- e_storage_async_remove_shared_folder (storage, subpath,
- storage_callback,
- storage_callback_data);
-}
-
-
-EFolderTypeRegistry *
-e_storage_set_get_folder_type_registry (EStorageSet *storage_set)
-{
- g_return_val_if_fail (storage_set != NULL, NULL);
- g_return_val_if_fail (E_IS_STORAGE_SET (storage_set), NULL);
-
- return storage_set->priv->folder_type_registry;
-}
-
-
-/**
- * e_storage_set_get_path_for_physical_uri:
- * @storage_set: A storage set
- * @physical_uri: A physical URI
- *
- * Retrieve the path of the folder whose physical URI matches @physical_uri.
- *
- * Return value:
- **/
-char *
-e_storage_set_get_path_for_physical_uri (EStorageSet *storage_set,
- const char *physical_uri)
-{
- EStorageSetPrivate *priv;
- GList *p;
-
- g_return_val_if_fail (storage_set != NULL, NULL);
- g_return_val_if_fail (E_IS_STORAGE_SET (storage_set), NULL);
- g_return_val_if_fail (physical_uri != NULL, NULL);
-
- priv = storage_set->priv;
-
- for (p = priv->storages; p != NULL; p = p->next) {
- EStorage *storage;
- char *storage_path;
-
- storage = E_STORAGE (p->data);
-
- storage_path = e_storage_get_path_for_physical_uri (storage, physical_uri);
- if (storage_path != NULL) {
- char *storage_set_path;
-
- storage_set_path = g_strconcat (E_PATH_SEPARATOR_S,
- e_storage_get_name (storage),
- storage_path,
- NULL);
- g_free (storage_path);
-
- return storage_set_path;
- }
- }
-
- return NULL;
-}
-
-
-E_MAKE_TYPE (e_storage_set, "EStorageSet", EStorageSet, class_init, init, PARENT_TYPE)
diff --git a/shell/e-storage-set.h b/shell/e-storage-set.h
deleted file mode 100644
index 35c83a3eb5..0000000000
--- a/shell/e-storage-set.h
+++ /dev/null
@@ -1,123 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-storage-set.h
- *
- * Copyright (C) 2000 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifndef _E_STORAGE_SET_H_
-#define _E_STORAGE_SET_H_
-
-#include <gtk/gtkwidget.h>
-
-#include <bonobo/bonobo-ui-container.h>
-
-#include "e-folder-type-registry.h"
-#include "e-storage.h"
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-#define E_TYPE_STORAGE_SET (e_storage_set_get_type ())
-#define E_STORAGE_SET(obj) (GTK_CHECK_CAST ((obj), E_TYPE_STORAGE_SET, EStorageSet))
-#define E_STORAGE_SET_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_STORAGE_SET, EStorageSetClass))
-#define E_IS_STORAGE_SET(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_STORAGE_SET))
-#define E_IS_STORAGE_SET_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_STORAGE_SET))
-
-
-typedef struct _EStorageSet EStorageSet;
-typedef struct _EStorageSetPrivate EStorageSetPrivate;
-typedef struct _EStorageSetClass EStorageSetClass;
-
-typedef void (* EStorageSetResultCallback) (EStorageSet *storage_set, EStorageResult result, void *data);
-
-struct _EStorageSet {
- GtkObject parent;
-
- EStorageSetPrivate *priv;
-};
-
-struct _EStorageSetClass {
- GtkObjectClass parent_class;
-
- /* Signals. */
-
- void (* new_storage) (EStorageSet *storage_set, EStorage *storage);
- void (* removed_storage) (EStorageSet *storage_set, EStorage *storage);
- /* FIXME? Inconsistency between storage and folders. */
- void (* new_folder) (EStorageSet *storage_set, const char *path);
- void (* updated_folder) (EStorageSet *storage_set, const char *path);
- void (* removed_folder) (EStorageSet *storage_set, const char *path);
- void (* moved_folder) (EStorageSet *storage_set, const char *source_path, const char *destination_path);
- void (* close_folder) (EStorageSet *storage_set, const char *path);
-};
-
-
-GtkType e_storage_set_get_type (void);
-void e_storage_set_construct (EStorageSet *storage_set,
- EFolderTypeRegistry *folder_type_registry);
-EStorageSet *e_storage_set_new (EFolderTypeRegistry *folder_type_registry);
-gboolean e_storage_set_add_storage (EStorageSet *storage_set,
- EStorage *storage);
-gboolean e_storage_set_remove_storage (EStorageSet *storage_set,
- EStorage *storage);
-void e_storage_set_remove_all_storages (EStorageSet *storage_set);
-GList *e_storage_set_get_storage_list (EStorageSet *storage_set);
-EStorage *e_storage_set_get_storage (EStorageSet *storage_set,
- const char *storage_name);
-EFolder *e_storage_set_get_folder (EStorageSet *storage_set,
- const char *path);
-GtkWidget *e_storage_set_create_new_view (EStorageSet *storage_set,
- BonoboUIContainer *container);
-
-void e_storage_set_async_create_folder (EStorageSet *storage_set,
- const char *path,
- const char *type,
- const char *description,
- EStorageSetResultCallback callback,
- void *data);
-void e_storage_set_async_remove_folder (EStorageSet *storage_set,
- const char *path,
- EStorageSetResultCallback callback,
- void *data);
-void e_storage_set_async_xfer_folder (EStorageSet *storage_set,
- const char *source_path,
- const char *destination_path,
- gboolean remove_source,
- EStorageSetResultCallback callback,
- void *data);
-
-void e_storage_set_async_remove_shared_folder (EStorageSet *storage_set,
- const char *path,
- EStorageSetResultCallback callback,
- void *data);
-
-EFolderTypeRegistry *e_storage_set_get_folder_type_registry (EStorageSet *storage_set);
-
-/* Utility functions. */
-
-char *e_storage_set_get_path_for_physical_uri (EStorageSet *storage_set,
- const char *physical_uri);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* _E_STORAGE_SET_H_ */
diff --git a/shell/e-storage.c b/shell/e-storage.c
deleted file mode 100644
index f4a8e5ff26..0000000000
--- a/shell/e-storage.c
+++ /dev/null
@@ -1,848 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-storage.c
- *
- * Copyright (C) 2000, 2001 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-/* FIXME: The EFolderTree is kept both in the EStorage and the
- * EvolutionStorage. Bad design.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "e-storage.h"
-
-#include "e-folder-tree.h"
-#include "e-shell-constants.h"
-#include "e-shell-marshal.h"
-
-#include <gtk/gtkobject.h>
-#include <gtk/gtksignal.h>
-
-#include <libgnome/gnome-i18n.h>
-#include <gal/util/e-util.h>
-
-#include <string.h>
-
-
-#define PARENT_TYPE GTK_TYPE_OBJECT
-static GtkObjectClass *parent_class = NULL;
-
-#define ES_CLASS(obj) \
- E_STORAGE_CLASS (GTK_OBJECT_GET_CLASS (obj))
-
-struct _EStoragePrivate {
- /* The set of folders we have in this storage. */
- EFolderTree *folder_tree;
-
- /* Internal name of the storage */
- char *name;
-};
-
-enum {
- NEW_FOLDER,
- UPDATED_FOLDER,
- REMOVED_FOLDER,
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = { 0 };
-
-
-/* Destroy notification function for the folders in the tree. */
-
-static void
-folder_destroy_notify (EFolderTree *tree,
- const char *path,
- void *data,
- void *closure)
-{
- EFolder *e_folder;
-
- if (data == NULL) {
- /* The root folder has no EFolder associated to it. */
- return;
- }
-
- e_folder = E_FOLDER (data);
- g_object_unref (e_folder);
-}
-
-
-/* Signal callbacks for the EFolders. */
-
-static void
-folder_changed_cb (EFolder *folder,
- void *data)
-{
- EStorage *storage;
- EStoragePrivate *priv;
- const char *path, *p;
- gboolean highlight;
-
- g_assert (E_IS_STORAGE (data));
-
- storage = E_STORAGE (data);
- priv = storage->priv;
-
- path = e_folder_tree_get_path_for_data (priv->folder_tree, folder);
- g_assert (path != NULL);
-
- g_signal_emit (storage, signals[UPDATED_FOLDER], 0, path);
-
- highlight = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (folder), "last_highlight"));
- if (highlight != e_folder_get_highlighted (folder)) {
- highlight = !highlight;
- g_object_set_data (G_OBJECT (folder), "last_highlight", GINT_TO_POINTER (highlight));
- p = strrchr (path, '/');
- if (p && p != path) {
- char *name;
-
- name = g_strndup (path, p - path);
- folder = e_folder_tree_get_folder (priv->folder_tree, name);
- g_free (name);
- if (folder)
- e_folder_set_child_highlight (folder, highlight);
- }
- }
-}
-
-
-/* GObject methods. */
-
-static void
-impl_finalize (GObject *object)
-{
- EStorage *storage;
- EStoragePrivate *priv;
-
- storage = E_STORAGE (object);
- priv = storage->priv;
-
- if (priv->folder_tree != NULL)
- e_folder_tree_destroy (priv->folder_tree);
-
- g_free (priv->name);
-
- g_free (priv);
-
- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
-}
-
-
-/* EStorage methods. */
-
-static GList *
-impl_get_subfolder_paths (EStorage *storage,
- const char *path)
-{
- EStoragePrivate *priv;
-
- priv = storage->priv;
-
- return e_folder_tree_get_subfolders (priv->folder_tree, path);
-}
-
-static EFolder *
-impl_get_folder (EStorage *storage,
- const char *path)
-{
- EStoragePrivate *priv;
- EFolder *e_folder;
-
- priv = storage->priv;
-
- e_folder = (EFolder *) e_folder_tree_get_folder (priv->folder_tree, path);
-
- return e_folder;
-}
-
-static const char *
-impl_get_name (EStorage *storage)
-{
- return storage->priv->name;
-}
-
-static void
-impl_async_create_folder (EStorage *storage,
- const char *path,
- const char *type,
- const char *description,
- EStorageResultCallback callback,
- void *data)
-{
- (* callback) (storage, E_STORAGE_NOTIMPLEMENTED, data);
-}
-
-static void
-impl_async_remove_folder (EStorage *storage,
- const char *path,
- EStorageResultCallback callback,
- void *data)
-{
- (* callback) (storage, E_STORAGE_NOTIMPLEMENTED, data);
-}
-
-static void
-impl_async_xfer_folder (EStorage *storage,
- const char *source_path,
- const char *destination_path,
- gboolean remove_source,
- EStorageResultCallback callback,
- void *data)
-{
- (* callback) (storage, E_STORAGE_NOTIMPLEMENTED, data);
-}
-
-static void
-impl_async_open_folder (EStorage *storage,
- const char *path,
- EStorageDiscoveryCallback callback,
- void *data)
-{
- (*callback) (storage, E_STORAGE_NOTIMPLEMENTED, path, data);
-}
-
-static gboolean
-impl_supports_shared_folders (EStorage *storage)
-{
- return FALSE;
-}
-
-static void
-impl_async_discover_shared_folder (EStorage *storage,
- const char *owner,
- const char *folder_name,
- EStorageDiscoveryCallback callback,
- void *data)
-{
- (* callback) (storage, E_STORAGE_NOTIMPLEMENTED, NULL, data);
-}
-
-static void
-impl_async_remove_shared_folder (EStorage *storage,
- const char *path,
- EStorageResultCallback callback,
- void *data)
-{
- (* callback) (storage, E_STORAGE_NOTIMPLEMENTED, data);
-}
-
-
-/* Initialization. */
-
-static void
-class_init (EStorageClass *class)
-{
- GObjectClass *object_class;
-
- object_class = G_OBJECT_CLASS (class);
- parent_class = g_type_class_ref(gtk_object_get_type ());
-
- object_class->finalize = impl_finalize;
-
- class->get_subfolder_paths = impl_get_subfolder_paths;
- class->get_folder = impl_get_folder;
- class->get_name = impl_get_name;
- class->async_create_folder = impl_async_create_folder;
- class->async_remove_folder = impl_async_remove_folder;
- class->async_xfer_folder = impl_async_xfer_folder;
- class->async_open_folder = impl_async_open_folder;
-
- class->supports_shared_folders = impl_supports_shared_folders;
- class->async_discover_shared_folder = impl_async_discover_shared_folder;
- class->async_remove_shared_folder = impl_async_remove_shared_folder;
-
- signals[NEW_FOLDER] =
- g_signal_new ("new_folder",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EStorageClass, new_folder),
- NULL, NULL,
- e_shell_marshal_NONE__STRING,
- G_TYPE_NONE, 1,
- G_TYPE_STRING);
- signals[UPDATED_FOLDER] =
- g_signal_new ("updated_folder",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EStorageClass, updated_folder),
- NULL, NULL,
- e_shell_marshal_NONE__STRING,
- G_TYPE_NONE, 1,
- G_TYPE_STRING);
- signals[REMOVED_FOLDER] =
- g_signal_new ("removed_folder",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EStorageClass, removed_folder),
- NULL, NULL,
- e_shell_marshal_NONE__STRING,
- G_TYPE_NONE, 1,
- G_TYPE_STRING);
-}
-
-static void
-init (EStorage *storage)
-{
- EStoragePrivate *priv;
-
- priv = g_new (EStoragePrivate, 1);
-
- priv->folder_tree = e_folder_tree_new (folder_destroy_notify, NULL);
- priv->name = NULL;
-
- storage->priv = priv;
-}
-
-
-/* Creation. */
-
-void
-e_storage_construct (EStorage *storage,
- const char *name,
- EFolder *root_folder)
-{
- EStoragePrivate *priv;
-
- g_return_if_fail (storage != NULL);
- g_return_if_fail (E_IS_STORAGE (storage));
-
- priv = storage->priv;
-
- priv->name = g_strdup (name);
-
- e_storage_new_folder (storage, "/", root_folder);
-
- GTK_OBJECT_UNSET_FLAGS (GTK_OBJECT (storage), GTK_FLOATING);
-}
-
-EStorage *
-e_storage_new (const char *name,
- EFolder *root_folder)
-{
- EStorage *new;
-
- new = g_object_new (e_storage_get_type (), NULL);
-
- e_storage_construct (new, name, root_folder);
-
- return new;
-}
-
-
-gboolean
-e_storage_path_is_absolute (const char *path)
-{
- g_return_val_if_fail (path != NULL, FALSE);
-
- return *path == E_PATH_SEPARATOR;
-}
-
-gboolean
-e_storage_path_is_relative (const char *path)
-{
- g_return_val_if_fail (path != NULL, FALSE);
-
- return *path != E_PATH_SEPARATOR;
-}
-
-
-GList *
-e_storage_get_subfolder_paths (EStorage *storage,
- const char *path)
-{
- g_return_val_if_fail (storage != NULL, NULL);
- g_return_val_if_fail (E_IS_STORAGE (storage), NULL);
- g_return_val_if_fail (path != NULL, NULL);
- g_return_val_if_fail (g_path_is_absolute (path), NULL);
-
- return (* ES_CLASS (storage)->get_subfolder_paths) (storage, path);
-}
-
-EFolder *
-e_storage_get_folder (EStorage *storage,
- const char *path)
-{
- g_return_val_if_fail (storage != NULL, NULL);
- g_return_val_if_fail (E_IS_STORAGE (storage), NULL);
- g_return_val_if_fail (path != NULL, NULL);
- g_return_val_if_fail (e_storage_path_is_absolute (path), NULL);
-
- return (* ES_CLASS (storage)->get_folder) (storage, path);
-}
-
-const char *
-e_storage_get_name (EStorage *storage)
-{
- g_return_val_if_fail (storage != NULL, NULL);
- g_return_val_if_fail (E_IS_STORAGE (storage), NULL);
-
- return (* ES_CLASS (storage)->get_name) (storage);
-}
-
-
-/* Folder operations. */
-
-void
-e_storage_async_create_folder (EStorage *storage,
- const char *path,
- const char *type,
- const char *description,
- EStorageResultCallback callback,
- void *data)
-{
- g_return_if_fail (storage != NULL);
- g_return_if_fail (E_IS_STORAGE (storage));
- g_return_if_fail (path != NULL);
- g_return_if_fail (g_path_is_absolute (path));
- g_return_if_fail (type != NULL);
- g_return_if_fail (callback != NULL);
-
- (* ES_CLASS (storage)->async_create_folder) (storage, path, type, description, callback, data);
-}
-
-void
-e_storage_async_remove_folder (EStorage *storage,
- const char *path,
- EStorageResultCallback callback,
- void *data)
-{
- g_return_if_fail (storage != NULL);
- g_return_if_fail (E_IS_STORAGE (storage));
- g_return_if_fail (path != NULL);
- g_return_if_fail (g_path_is_absolute (path));
- g_return_if_fail (callback != NULL);
-
- (* ES_CLASS (storage)->async_remove_folder) (storage, path, callback, data);
-}
-
-void
-e_storage_async_xfer_folder (EStorage *storage,
- const char *source_path,
- const char *destination_path,
- const gboolean remove_source,
- EStorageResultCallback callback,
- void *data)
-{
- g_return_if_fail (storage != NULL);
- g_return_if_fail (E_IS_STORAGE (storage));
- g_return_if_fail (source_path != NULL);
- g_return_if_fail (g_path_is_absolute (source_path));
- g_return_if_fail (destination_path != NULL);
- g_return_if_fail (g_path_is_absolute (destination_path));
-
- if (strcmp (source_path, destination_path) == 0) {
- (* callback) (storage, E_STORAGE_OK, data);
- return;
- }
-
- if (remove_source) {
- int destination_len;
- int source_len;
-
- source_len = strlen (source_path);
- destination_len = strlen (destination_path);
-
- if (source_len < destination_len
- && destination_path[source_len] == E_PATH_SEPARATOR
- && strncmp (destination_path, source_path, source_len) == 0) {
- (* callback) (storage, E_STORAGE_CANTMOVETODESCENDANT, data);
- return;
- }
- }
-
- (* ES_CLASS (storage)->async_xfer_folder) (storage, source_path, destination_path, remove_source, callback, data);
-}
-
-void
-e_storage_async_open_folder (EStorage *storage,
- const char *path,
- EStorageDiscoveryCallback callback,
- void *data)
-{
- EStoragePrivate *priv;
- EFolder *folder;
-
- g_return_if_fail (storage != NULL);
- g_return_if_fail (E_IS_STORAGE (storage));
- g_return_if_fail (path != NULL);
- g_return_if_fail (g_path_is_absolute (path));
-
- priv = storage->priv;
-
- folder = e_folder_tree_get_folder (priv->folder_tree, path);
- if (folder == NULL) {
- (* callback) (storage, E_STORAGE_NOTFOUND, path, data);
- return;
- }
-
- if (! e_folder_get_has_subfolders (folder)) {
- (* callback) (storage, E_STORAGE_OK, path, data);
- return;
- }
-
- (* ES_CLASS (storage)->async_open_folder) (storage, path, callback, data);
-}
-
-
-/* Shared folders. */
-
-gboolean
-e_storage_supports_shared_folders (EStorage *storage)
-{
- g_return_val_if_fail (storage != NULL, FALSE);
- g_return_val_if_fail (E_IS_STORAGE (storage), FALSE);
-
- return (* ES_CLASS (storage)->supports_shared_folders) (storage);
-}
-
-void
-e_storage_async_discover_shared_folder (EStorage *storage,
- const char *owner,
- const char *folder_name,
- EStorageDiscoveryCallback callback,
- void *data)
-{
- g_return_if_fail (storage != NULL);
- g_return_if_fail (E_IS_STORAGE (storage));
- g_return_if_fail (owner != NULL);
- g_return_if_fail (folder_name != NULL);
-
- (* ES_CLASS (storage)->async_discover_shared_folder) (storage, owner, folder_name, callback, data);
-}
-
-void
-e_storage_cancel_discover_shared_folder (EStorage *storage,
- const char *owner,
- const char *folder_name)
-{
- g_return_if_fail (E_IS_STORAGE (storage));
- g_return_if_fail (owner != NULL);
- g_return_if_fail (folder_name != NULL);
- g_return_if_fail (ES_CLASS (storage)->cancel_discover_shared_folder != NULL);
-
- (* ES_CLASS (storage)->cancel_discover_shared_folder) (storage, owner, folder_name);
-}
-
-void
-e_storage_async_remove_shared_folder (EStorage *storage,
- const char *path,
- EStorageResultCallback callback,
- void *data)
-{
- g_return_if_fail (storage != NULL);
- g_return_if_fail (E_IS_STORAGE (storage));
- g_return_if_fail (path != NULL);
- g_return_if_fail (g_path_is_absolute (path));
-
- (* ES_CLASS (storage)->async_remove_shared_folder) (storage, path, callback, data);
-}
-
-
-const char *
-e_storage_result_to_string (EStorageResult result)
-{
- switch (result) {
- case E_STORAGE_OK:
- return _("No error");
- case E_STORAGE_GENERICERROR:
- return _("Generic error");
- case E_STORAGE_EXISTS:
- return _("A folder with the same name already exists");
- case E_STORAGE_INVALIDTYPE:
- return _("The specified folder type is not valid");
- case E_STORAGE_IOERROR:
- return _("I/O error");
- case E_STORAGE_NOSPACE:
- return _("Not enough space to create the folder");
- case E_STORAGE_NOTEMPTY:
- return _("The folder is not empty");
- case E_STORAGE_NOTFOUND:
- return _("The specified folder was not found");
- case E_STORAGE_NOTIMPLEMENTED:
- return _("Function not implemented in this storage");
- case E_STORAGE_PERMISSIONDENIED:
- return _("Permission denied");
- case E_STORAGE_UNSUPPORTEDOPERATION:
- return _("Operation not supported");
- case E_STORAGE_UNSUPPORTEDTYPE:
- return _("The specified type is not supported in this storage");
- case E_STORAGE_CANTCHANGESTOCKFOLDER:
- return _("The specified folder cannot be modified or removed");
- case E_STORAGE_CANTMOVETODESCENDANT:
- return _("Cannot make a folder a child of one of its descendants");
- case E_STORAGE_INVALIDNAME:
- return _("Cannot create a folder with that name");
- case E_STORAGE_NOTONLINE:
- return _("This operation cannot be performed in off-line mode");
- default:
- return _("Unknown error");
- }
-}
-
-
-/* Public utility functions. */
-
-struct _GetPathForPhysicalUriForeachData {
- const char *physical_uri;
- char *retval;
-};
-typedef struct _GetPathForPhysicalUriForeachData GetPathForPhysicalUriForeachData;
-
-static void
-get_path_for_physical_uri_foreach (EFolderTree *folder_tree,
- const char *path,
- void *path_data,
- void *user_data)
-{
- GetPathForPhysicalUriForeachData *foreach_data;
- const char *physical_uri;
- EFolder *e_folder;
-
- foreach_data = (GetPathForPhysicalUriForeachData *) user_data;
- if (foreach_data->retval != NULL)
- return;
-
- e_folder = (EFolder *) path_data;
- if (e_folder == NULL)
- return;
-
- physical_uri = e_folder_get_physical_uri (e_folder);
- if (physical_uri == NULL)
- return;
-
- if (strcmp (foreach_data->physical_uri, physical_uri) == 0)
- foreach_data->retval = g_strdup (path);
-}
-
-/**
- * e_storage_get_path_for_physical_uri:
- * @storage: A storage
- * @physical_uri: A physical URI
- *
- * Look for the folder having the specified @physical_uri.
- *
- * Return value: The path of the folder having the specified @physical_uri in
- * @storage. If such a folder does not exist, just return NULL. The return
- * value must be freed by the caller.
- **/
-char *
-e_storage_get_path_for_physical_uri (EStorage *storage,
- const char *physical_uri)
-{
- GetPathForPhysicalUriForeachData foreach_data;
- EStoragePrivate *priv;
-
- g_return_val_if_fail (storage != NULL, NULL);
- g_return_val_if_fail (E_IS_STORAGE (storage), NULL);
- g_return_val_if_fail (physical_uri != NULL, NULL);
-
- priv = storage->priv;
-
- foreach_data.physical_uri = physical_uri;
- foreach_data.retval = NULL;
-
- e_folder_tree_foreach (priv->folder_tree, get_path_for_physical_uri_foreach, &foreach_data);
-
- return foreach_data.retval;
-}
-
-
-/* Protected functions. */
-
-/* These functions are used by subclasses to add and remove folders from the
- state stored in the storage object. */
-
-static void
-remove_subfolders_except (EStorage *storage, const char *path, const char *except)
-{
- EStoragePrivate *priv;
- GList *subfolders, *f;
- const char *folder_path;
-
- priv = storage->priv;
-
- subfolders = e_folder_tree_get_subfolders (priv->folder_tree, path);
- for (f = subfolders; f; f = f->next) {
- folder_path = f->data;
- if (!except || strcmp (folder_path, except) != 0)
- e_storage_removed_folder (storage, folder_path);
- }
- e_free_string_list (subfolders);
-}
-
-gboolean
-e_storage_new_folder (EStorage *storage,
- const char *path,
- EFolder *e_folder)
-{
- EStoragePrivate *priv;
- char *parent_path, *p;
- EFolder *parent;
-
- g_return_val_if_fail (storage != NULL, FALSE);
- g_return_val_if_fail (E_IS_STORAGE (storage), FALSE);
- g_return_val_if_fail (path != NULL, FALSE);
- g_return_val_if_fail (g_path_is_absolute (path), FALSE);
- g_return_val_if_fail (e_folder != NULL, FALSE);
- g_return_val_if_fail (E_IS_FOLDER (e_folder), FALSE);
-
- priv = storage->priv;
-
- if (! e_folder_tree_add (priv->folder_tree, path, e_folder))
- return FALSE;
-
- /* If this is the child of a folder that has a pseudo child,
- * remove the pseudo child now.
- */
- p = strrchr (path, '/');
- if (p && p != path)
- parent_path = g_strndup (path, p - path);
- else
- parent_path = g_strdup ("/");
- parent = e_folder_tree_get_folder (priv->folder_tree, parent_path);
- if (parent && e_folder_get_has_subfolders (parent)) {
- remove_subfolders_except (storage, parent_path, path);
- e_folder_set_has_subfolders (parent, FALSE);
- }
- g_free (parent_path);
-
- g_signal_connect_object (e_folder, "changed", G_CALLBACK (folder_changed_cb), storage, 0);
-
- g_signal_emit (storage, signals[NEW_FOLDER], 0, path);
-
- folder_changed_cb (e_folder, storage);
-
- return TRUE;
-}
-
-/* This really should be called e_storage_set_has_subfolders, but then
- * it would look like it was an EStorageSet function. (Fact o' the
- * day: The word "set" has more distinct meanings than any other word
- * in the English language.) Anyway, we now return you to your
- * regularly scheduled source code, already in progress.
- */
-gboolean
-e_storage_declare_has_subfolders (EStorage *storage,
- const char *path,
- const char *message)
-{
- EStoragePrivate *priv;
- EFolder *parent, *pseudofolder;
- char *pseudofolder_path;
- gboolean ok;
-
- g_return_val_if_fail (storage != NULL, FALSE);
- g_return_val_if_fail (E_IS_STORAGE (storage), FALSE);
- g_return_val_if_fail (path != NULL, FALSE);
- g_return_val_if_fail (g_path_is_absolute (path), FALSE);
- g_return_val_if_fail (message != NULL, FALSE);
-
- priv = storage->priv;
-
- parent = e_folder_tree_get_folder (priv->folder_tree, path);
- if (parent == NULL)
- return FALSE;
- if (e_folder_get_has_subfolders (parent))
- return TRUE;
-
- remove_subfolders_except (storage, path, NULL);
-
- pseudofolder = e_folder_new (message, "working", "");
- if (strcmp (path, "/") == 0)
- pseudofolder_path = g_strdup_printf ("/%s", message);
- else
- pseudofolder_path = g_strdup_printf ("%s/%s", path, message);
- e_folder_set_physical_uri (pseudofolder, pseudofolder_path);
-
- ok = e_storage_new_folder (storage, pseudofolder_path, pseudofolder);
- g_free (pseudofolder_path);
- if (!ok) {
- g_object_unref (pseudofolder);
- return FALSE;
- }
-
- e_folder_set_has_subfolders (parent, TRUE);
- return TRUE;
-}
-
-gboolean
-e_storage_get_has_subfolders (EStorage *storage,
- const char *path)
-{
- EStoragePrivate *priv;
- EFolder *folder;
-
- g_return_val_if_fail (storage != NULL, FALSE);
- g_return_val_if_fail (E_IS_STORAGE (storage), FALSE);
- g_return_val_if_fail (path != NULL, FALSE);
- g_return_val_if_fail (g_path_is_absolute (path), FALSE);
-
- priv = storage->priv;
-
- folder = e_folder_tree_get_folder (priv->folder_tree, path);
-
- return folder && e_folder_get_has_subfolders (folder);
-}
-
-gboolean
-e_storage_removed_folder (EStorage *storage,
- const char *path)
-{
- EStoragePrivate *priv;
- EFolder *folder;
- const char *p;
-
- g_return_val_if_fail (storage != NULL, FALSE);
- g_return_val_if_fail (E_IS_STORAGE (storage), FALSE);
- g_return_val_if_fail (path != NULL, FALSE);
- g_return_val_if_fail (g_path_is_absolute (path), FALSE);
-
- priv = storage->priv;
-
- folder = e_folder_tree_get_folder (priv->folder_tree, path);
- if (folder == NULL)
- return FALSE;
-
- p = strrchr (path, '/');
- if (p != NULL && p != path) {
- EFolder *parent_folder;
- char *parent_path;
-
- parent_path = g_strndup (path, p - path);
- parent_folder = e_folder_tree_get_folder (priv->folder_tree, parent_path);
-
- if (e_folder_get_highlighted (folder))
- e_folder_set_child_highlight (parent_folder, FALSE);
-
- g_free (parent_path);
- }
-
- g_signal_emit (storage, signals[REMOVED_FOLDER], 0, path);
-
- e_folder_tree_remove (priv->folder_tree, path);
-
- return TRUE;
-}
-
-
-E_MAKE_TYPE (e_storage, "EStorage", EStorage, class_init, init, PARENT_TYPE)
diff --git a/shell/e-storage.h b/shell/e-storage.h
deleted file mode 100644
index bd0cc5da22..0000000000
--- a/shell/e-storage.h
+++ /dev/null
@@ -1,214 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-storage.h
- *
- * Copyright (C) 2000 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifndef _E_STORAGE_H_
-#define _E_STORAGE_H_
-
-#include <gtk/gtkobject.h>
-
-#include "evolution-shell-component-client.h"
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-#define E_TYPE_STORAGE (e_storage_get_type ())
-#define E_STORAGE(obj) (GTK_CHECK_CAST ((obj), E_TYPE_STORAGE, EStorage))
-#define E_STORAGE_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_STORAGE, EStorageClass))
-#define E_IS_STORAGE(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_STORAGE))
-#define E_IS_STORAGE_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_STORAGE))
-
-
-typedef struct _EStorage EStorage;
-typedef struct _EStoragePrivate EStoragePrivate;
-typedef struct _EStorageClass EStorageClass;
-
-enum _EStorageResult {
- E_STORAGE_OK,
- E_STORAGE_GENERICERROR,
- E_STORAGE_EXISTS,
- E_STORAGE_INVALIDTYPE,
- E_STORAGE_IOERROR,
- E_STORAGE_NOSPACE,
- E_STORAGE_NOTEMPTY,
- E_STORAGE_NOTFOUND,
- E_STORAGE_NOTIMPLEMENTED,
- E_STORAGE_PERMISSIONDENIED,
- E_STORAGE_UNSUPPORTEDOPERATION,
- E_STORAGE_UNSUPPORTEDTYPE,
- E_STORAGE_CANTCHANGESTOCKFOLDER,
- E_STORAGE_CANTMOVETODESCENDANT,
- E_STORAGE_NOTONLINE,
- E_STORAGE_INVALIDNAME
-};
-typedef enum _EStorageResult EStorageResult;
-
-typedef void (* EStorageResultCallback) (EStorage *storage, EStorageResult result, void *data);
-typedef void (* EStorageDiscoveryCallback) (EStorage *storage, EStorageResult result, const char *path, void *data);
-
-#include "e-folder.h"
-
-struct _EStorage {
- GtkObject parent;
-
- EStoragePrivate *priv;
-};
-
-struct _EStorageClass {
- GtkObjectClass parent_class;
-
- /* Signals. */
-
- void (* new_folder) (EStorage *storage, const char *path);
- void (* updated_folder) (EStorage *storage, const char *path);
- void (* removed_folder) (EStorage *storage, const char *path);
- void (* close_folder) (EStorage *storage, const char *path);
-
- /* Virtual methods. */
-
- GList * (* get_subfolder_paths) (EStorage *storage,
- const char *path);
- EFolder * (* get_folder) (EStorage *storage,
- const char *path);
- const char * (* get_name) (EStorage *storage);
-
- void (* async_create_folder) (EStorage *storage,
- const char *path,
- const char *type,
- const char *description,
- EStorageResultCallback callback,
- void *data);
-
- void (* async_remove_folder) (EStorage *storage,
- const char *path,
- EStorageResultCallback callback,
- void *data);
-
- void (* async_xfer_folder) (EStorage *storage,
- const char *source_path,
- const char *destination_path,
- const gboolean remove_source,
- EStorageResultCallback callback,
- void *data);
-
- void (* async_open_folder) (EStorage *storage,
- const char *path,
- EStorageDiscoveryCallback callback,
- void *data);
-
- gboolean (* supports_shared_folders) (EStorage *storage);
- void (* async_discover_shared_folder) (EStorage *storage,
- const char *owner,
- const char *folder_name,
- EStorageDiscoveryCallback callback,
- void *data);
- void (* cancel_discover_shared_folder) (EStorage *storage,
- const char *owner,
- const char *folder_name);
- void (* async_remove_shared_folder) (EStorage *storage,
- const char *path,
- EStorageResultCallback callback,
- void *data);
-};
-
-
-GtkType e_storage_get_type (void);
-void e_storage_construct (EStorage *storage,
- const char *name,
- EFolder *root_folder);
-EStorage *e_storage_new (const char *name,
- EFolder *root_folder);
-
-gboolean e_storage_path_is_relative (const char *path);
-gboolean e_storage_path_is_absolute (const char *path);
-
-GList *e_storage_get_subfolder_paths (EStorage *storage,
- const char *path);
-EFolder *e_storage_get_folder (EStorage *storage,
- const char *path);
-
-const char *e_storage_get_name (EStorage *storage);
-
-/* Folder operations. */
-
-void e_storage_async_create_folder (EStorage *storage,
- const char *path,
- const char *type,
- const char *description,
- EStorageResultCallback callback,
- void *data);
-void e_storage_async_remove_folder (EStorage *storage,
- const char *path,
- EStorageResultCallback callback,
- void *data);
-void e_storage_async_xfer_folder (EStorage *storage,
- const char *source_path,
- const char *destination_path,
- const gboolean remove_source,
- EStorageResultCallback callback,
- void *data);
-void e_storage_async_open_folder (EStorage *storage,
- const char *path,
- EStorageDiscoveryCallback callback,
- void *data);
-
-const char *e_storage_result_to_string (EStorageResult result);
-
-/* Shared folders. */
-gboolean e_storage_supports_shared_folders (EStorage *storage);
-void e_storage_async_discover_shared_folder (EStorage *storage,
- const char *owner,
- const char *folder_name,
- EStorageDiscoveryCallback callback,
- void *data);
-void e_storage_cancel_discover_shared_folder (EStorage *storage,
- const char *owner,
- const char *folder_name);
-void e_storage_async_remove_shared_folder (EStorage *storage,
- const char *path,
- EStorageResultCallback callback,
- void *data);
-
-/* Utility functions. */
-
-char *e_storage_get_path_for_physical_uri (EStorage *storage,
- const char *physical_uri);
-
-/* Protected. C++ anyone? */
-gboolean e_storage_new_folder (EStorage *storage,
- const char *path,
- EFolder *folder);
-gboolean e_storage_removed_folder (EStorage *storage,
- const char *path);
-
-gboolean e_storage_declare_has_subfolders (EStorage *storage,
- const char *path,
- const char *message);
-gboolean e_storage_get_has_subfolders (EStorage *storage,
- const char *path);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* _E_STORAGE_H_ */
diff --git a/shell/e-task-bar.c b/shell/e-task-bar.c
deleted file mode 100644
index 522d473373..0000000000
--- a/shell/e-task-bar.c
+++ /dev/null
@@ -1,187 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-task-bar.c
- *
- * Copyright (C) 2001 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli <ettore@ximian.com>
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "e-task-bar.h"
-
-#include <gal/util/e-util.h>
-
-
-#define PARENT_TYPE gtk_hbox_get_type ()
-static GtkHBoxClass *parent_class = NULL;
-
-
-/* WARNING: Ugly hack starts here. */
-
-#define MAX_ACTIVITIES_PER_COMPONENT 2
-
-static void
-reduce_displayed_activities_per_component (ETaskBar *task_bar)
-{
- GHashTable *component_ids_hash;
- GtkBox *box;
- GList *p;
-
- component_ids_hash = g_hash_table_new (g_str_hash, g_str_equal);
-
- box = GTK_BOX (task_bar);
-
- for (p = box->children; p != NULL; p = p->next) {
- GtkBoxChild *child;
- const char *component_id;
- void *hash_item;
-
- child = (GtkBoxChild *) p->data;
- component_id = e_task_widget_get_component_id (E_TASK_WIDGET (child->widget));
-
- hash_item = g_hash_table_lookup (component_ids_hash, component_id);
-
- if (hash_item == NULL) {
- gtk_widget_show (child->widget);
- g_hash_table_insert (component_ids_hash, (void *) component_id, GINT_TO_POINTER (1));
- } else {
- int num_items;
-
- num_items = GPOINTER_TO_INT (hash_item);
- g_assert (num_items <= MAX_ACTIVITIES_PER_COMPONENT);
-
- if (num_items == MAX_ACTIVITIES_PER_COMPONENT) {
- gtk_widget_hide (child->widget);
- } else {
- num_items ++;
- gtk_widget_show (child->widget);
- g_hash_table_insert (component_ids_hash, (void *) component_id, GINT_TO_POINTER (num_items));
- }
- }
- }
-
- g_hash_table_destroy (component_ids_hash);
-}
-
-
-static void
-class_init (GtkObjectClass *object_class)
-{
- parent_class = g_type_class_ref(PARENT_TYPE);
-}
-
-static void
-init (ETaskBar *task_bar)
-{
- /* Nothing to do here. */
-}
-
-
-void
-e_task_bar_construct (ETaskBar *task_bar)
-{
- g_return_if_fail (task_bar != NULL);
- g_return_if_fail (E_IS_TASK_BAR (task_bar));
-
- /* Nothing to do here. */
-}
-
-GtkWidget *
-e_task_bar_new (void)
-{
- ETaskBar *task_bar;
-
- task_bar = g_object_new (e_task_bar_get_type (), NULL);
- e_task_bar_construct (task_bar);
-
- return GTK_WIDGET (task_bar);
-}
-
-void
-e_task_bar_prepend_task (ETaskBar *task_bar,
- ETaskWidget *task_widget)
-{
- GtkBoxChild *child_info;
- GtkBox *box;
-
- g_return_if_fail (task_bar != NULL);
- g_return_if_fail (E_IS_TASK_BAR (task_bar));
- g_return_if_fail (task_widget != NULL);
- g_return_if_fail (E_IS_TASK_WIDGET (task_widget));
-
- /* Hah hah. GTK+ sucks. This is adapted from `gtkhbox.c'. */
-
- child_info = g_new (GtkBoxChild, 1);
- child_info->widget = GTK_WIDGET (task_widget);
- child_info->padding = 0;
- child_info->expand = TRUE;
- child_info->fill = TRUE;
- child_info->pack = GTK_PACK_START;
-
- box = GTK_BOX (task_bar);
-
- box->children = g_list_prepend (box->children, child_info);
-
- gtk_widget_set_parent (GTK_WIDGET (task_widget), GTK_WIDGET (task_bar));
-
- if (GTK_WIDGET_REALIZED (task_bar))
- gtk_widget_realize (GTK_WIDGET (task_widget));
-
- if (GTK_WIDGET_VISIBLE (task_bar) && GTK_WIDGET_VISIBLE (task_widget)) {
- if (GTK_WIDGET_MAPPED (task_bar))
- gtk_widget_map (GTK_WIDGET (task_widget));
- gtk_widget_queue_resize (GTK_WIDGET (task_widget));
- }
-
- reduce_displayed_activities_per_component (task_bar);
-}
-
-void
-e_task_bar_remove_task (ETaskBar *task_bar,
- int n)
-{
- ETaskWidget *task_widget;
-
- g_return_if_fail (task_bar != NULL);
- g_return_if_fail (E_IS_TASK_BAR (task_bar));
- g_return_if_fail (n >= 0);
-
- task_widget = e_task_bar_get_task_widget (task_bar, n);
- gtk_widget_destroy (GTK_WIDGET (task_widget));
-
- reduce_displayed_activities_per_component (task_bar);
-}
-
-ETaskWidget *
-e_task_bar_get_task_widget (ETaskBar *task_bar,
- int n)
-{
- GtkBoxChild *child_info;
-
- g_return_val_if_fail (task_bar != NULL, NULL);
- g_return_val_if_fail (E_IS_TASK_BAR (task_bar), NULL);
-
- child_info = (GtkBoxChild *) g_list_nth (GTK_BOX (task_bar)->children, n)->data;
-
- return E_TASK_WIDGET (child_info->widget);
-}
-
-
-E_MAKE_TYPE (e_task_bar, "ETaskBar", ETaskBar, class_init, init, PARENT_TYPE)
diff --git a/shell/e-task-bar.h b/shell/e-task-bar.h
deleted file mode 100644
index c20ca1871c..0000000000
--- a/shell/e-task-bar.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-task-bar.h
- *
- * Copyright (C) 2001 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli <ettore@ximian.com>
- */
-
-#ifndef _E_TASK_BAR_H_
-#define _E_TASK_BAR_H_
-
-#include "e-task-widget.h"
-
-#include <gtk/gtkhbox.h>
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-#define E_TYPE_TASK_BAR (e_task_bar_get_type ())
-#define E_TASK_BAR(obj) (GTK_CHECK_CAST ((obj), E_TYPE_TASK_BAR, ETaskBar))
-#define E_TASK_BAR_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_TASK_BAR, ETaskBarClass))
-#define E_IS_TASK_BAR(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_TASK_BAR))
-#define E_IS_TASK_BAR_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_TASK_BAR))
-
-
-typedef struct _ETaskBar ETaskBar;
-typedef struct _ETaskBarPrivate ETaskBarPrivate;
-typedef struct _ETaskBarClass ETaskBarClass;
-
-struct _ETaskBar {
- GtkHBox parent;
-};
-
-struct _ETaskBarClass {
- GtkHBoxClass parent_class;
-};
-
-
-GtkType e_task_bar_get_type (void);
-void e_task_bar_construct (ETaskBar *task_bar);
-GtkWidget *e_task_bar_new (void);
-
-void e_task_bar_prepend_task (ETaskBar *task_bar,
- ETaskWidget *task_widget);
-void e_task_bar_remove_task (ETaskBar *task_bar,
- int n);
-
-ETaskWidget *e_task_bar_get_task_widget (ETaskBar *task_bar,
- int n);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* _E_TASK_BAR_H_ */
diff --git a/shell/e-task-widget.c b/shell/e-task-widget.c
deleted file mode 100644
index c6cd524c2f..0000000000
--- a/shell/e-task-widget.c
+++ /dev/null
@@ -1,251 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-task-widget.c
- *
- * Copyright (C) 2001 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli <ettore@ximian.com>
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "e-task-widget.h"
-
-#include <gtk/gtkframe.h>
-#include <gtk/gtkhbox.h>
-#include <gtk/gtklabel.h>
-#include <gtk/gtkimage.h>
-#include <gtk/gtktooltips.h>
-
-#include <libgnome/gnome-i18n.h>
-
-#include <gal/util/e-util.h>
-
-
-#define SPACING 2
-
-#define PARENT_TYPE (gtk_event_box_get_type ())
-static GtkEventBoxClass *parent_class = NULL;
-
-struct _ETaskWidgetPrivate {
- char *component_id;
-
- GtkTooltips *tooltips;
-
- GdkPixbuf *icon_pixbuf;
- GtkWidget *label;
- GtkWidget *image;
-};
-
-
-/* GObject methods. */
-
-static void
-impl_dispose (GObject *object)
-{
- ETaskWidget *task_widget;
- ETaskWidgetPrivate *priv;
-
- task_widget = E_TASK_WIDGET (object);
-
- priv = task_widget->priv;
-
- if (priv->tooltips != NULL) {
- g_object_unref (priv->tooltips);
- priv->tooltips = NULL;
- }
-
- if (priv->icon_pixbuf != NULL) {
- g_object_unref (priv->icon_pixbuf);
- priv->icon_pixbuf = NULL;
- }
-
- (* G_OBJECT_CLASS (parent_class)->dispose) (object);
-}
-
-static void
-impl_finalize (GObject *object)
-{
- ETaskWidget *task_widget;
- ETaskWidgetPrivate *priv;
-
- task_widget = E_TASK_WIDGET (object);
- priv = task_widget->priv;
-
- g_free (priv->component_id);
- g_free (priv);
-
- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
-}
-
-
-static void
-class_init (GObjectClass *object_class)
-{
- parent_class = g_type_class_ref(PARENT_TYPE);
-
- object_class->dispose = impl_dispose;
- object_class->finalize = impl_finalize;
-}
-
-static void
-init (ETaskWidget *task_widget)
-{
- ETaskWidgetPrivate *priv;
-
- priv = g_new (ETaskWidgetPrivate, 1);
-
- priv->component_id = NULL;
- priv->tooltips = NULL;
- priv->icon_pixbuf = NULL;
- priv->label = NULL;
- priv->image = NULL;
-
- task_widget->priv = priv;
-}
-
-
-void
-e_task_widget_construct (ETaskWidget *task_widget,
- GdkPixbuf *icon_pixbuf,
- const char *component_id,
- const char *information)
-{
- ETaskWidgetPrivate *priv;
- GdkPixmap *pixmap;
- GdkBitmap *mask;
- GtkWidget *box;
- GtkWidget *frame;
-
- g_return_if_fail (task_widget != NULL);
- g_return_if_fail (E_IS_TASK_WIDGET (task_widget));
- g_return_if_fail (icon_pixbuf != NULL);
- g_return_if_fail (component_id != NULL);
- g_return_if_fail (information != NULL);
-
- priv = task_widget->priv;
-
- priv->component_id = g_strdup (component_id);
-
- frame = gtk_frame_new (NULL);
- gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
- gtk_container_add (GTK_CONTAINER (task_widget), frame);
- gtk_widget_show (frame);
-
- box = gtk_hbox_new (FALSE, 0);
- gtk_container_add (GTK_CONTAINER (frame), box);
- gtk_widget_show (box);
-
- gtk_widget_set_size_request (box, 1, -1);
-
- priv->icon_pixbuf = g_object_ref (icon_pixbuf);
-
- gdk_pixbuf_render_pixmap_and_mask (icon_pixbuf, &pixmap, &mask, 128);
-
- priv->image = gtk_image_new_from_pixmap (pixmap, mask);
- gtk_widget_show (priv->image);
- gtk_box_pack_start (GTK_BOX (box), priv->image, FALSE, TRUE, 0);
-
- priv->label = gtk_label_new ("");
- gtk_misc_set_alignment (GTK_MISC (priv->label), 0.0, 0.5);
- gtk_widget_show (priv->label);
- gtk_box_pack_start (GTK_BOX (box), priv->label, TRUE, TRUE, 0);
-
- gdk_pixmap_unref (pixmap);
- g_object_unref (mask);
-
- priv->tooltips = gtk_tooltips_new ();
- g_object_ref (priv->tooltips);
- gtk_object_sink (GTK_OBJECT (priv->tooltips));
-
- e_task_widget_update (task_widget, information, -1.0);
-}
-
-GtkWidget *
-e_task_widget_new (GdkPixbuf *icon_pixbuf,
- const char *component_id,
- const char *information)
-{
- ETaskWidget *task_widget;
-
- g_return_val_if_fail (icon_pixbuf != NULL, NULL);
- g_return_val_if_fail (information != NULL, NULL);
-
- task_widget = g_object_new (e_task_widget_get_type (), NULL);
- e_task_widget_construct (task_widget, icon_pixbuf, component_id, information);
-
- return GTK_WIDGET (task_widget);
-}
-
-
-void
-e_task_widget_update (ETaskWidget *task_widget,
- const char *information,
- double completion)
-{
- ETaskWidgetPrivate *priv;
- char *text;
-
- g_return_if_fail (task_widget != NULL);
- g_return_if_fail (E_IS_TASK_WIDGET (task_widget));
- g_return_if_fail (information != NULL);
-
- priv = task_widget->priv;
-
- if (completion < 0.0) {
- text = g_strdup_printf (_("%s (...)"), information);
- } else {
- int percent_complete;
-
- percent_complete = (int) (completion * 100.0 + .5);
- text = g_strdup_printf (_("%s (%d%% complete)"), information, percent_complete);
- }
-
- gtk_label_set_text (GTK_LABEL (priv->label), text);
-
- gtk_tooltips_set_tip (priv->tooltips, GTK_WIDGET (task_widget), text, NULL);
-
- g_free (text);
-}
-
-void
-e_task_wiget_alert (ETaskWidget *task_widget)
-{
- g_return_if_fail (task_widget != NULL);
- g_return_if_fail (E_IS_TASK_WIDGET (task_widget));
-}
-
-void
-e_task_wiget_unalert (ETaskWidget *task_widget)
-{
- g_return_if_fail (task_widget != NULL);
- g_return_if_fail (E_IS_TASK_WIDGET (task_widget));
-}
-
-
-const char *
-e_task_widget_get_component_id (ETaskWidget *task_widget)
-{
- g_return_val_if_fail (task_widget != NULL, NULL);
- g_return_val_if_fail (E_IS_TASK_WIDGET (task_widget), NULL);
-
- return task_widget->priv->component_id;
-}
-
-
-E_MAKE_TYPE (e_task_widget, "ETaskWidget", ETaskWidget, class_init, init, PARENT_TYPE)
diff --git a/shell/e-task-widget.h b/shell/e-task-widget.h
deleted file mode 100644
index 6173623a80..0000000000
--- a/shell/e-task-widget.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-task-widget.h
- *
- * Copyright (C) 2001 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli <ettore@ximian.com>
- */
-
-#ifndef _E_TASK_WIDGET_H_
-#define _E_TASK_WIDGET_H_
-
-#include <gtk/gtkeventbox.h>
-#include <gdk-pixbuf/gdk-pixbuf.h>
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-#define E_TYPE_TASK_WIDGET (e_task_widget_get_type ())
-#define E_TASK_WIDGET(obj) (GTK_CHECK_CAST ((obj), E_TYPE_TASK_WIDGET, ETaskWidget))
-#define E_TASK_WIDGET_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_TASK_WIDGET, ETaskWidgetClass))
-#define E_IS_TASK_WIDGET(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_TASK_WIDGET))
-#define E_IS_TASK_WIDGET_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_TASK_WIDGET))
-
-
-typedef struct _ETaskWidget ETaskWidget;
-typedef struct _ETaskWidgetPrivate ETaskWidgetPrivate;
-typedef struct _ETaskWidgetClass ETaskWidgetClass;
-
-struct _ETaskWidget {
- GtkEventBox parent;
-
- ETaskWidgetPrivate *priv;
-};
-
-struct _ETaskWidgetClass {
- GtkEventBoxClass parent_class;
-};
-
-
-GtkType e_task_widget_get_type (void);
-void e_task_widget_construct (ETaskWidget *task_widget,
- GdkPixbuf *icon_pixbuf,
- const char *component_id,
- const char *information);
-GtkWidget *e_task_widget_new (GdkPixbuf *icon_pixbuf,
- const char *component_id,
- const char *information);
-
-void e_task_widget_update (ETaskWidget *task_widget,
- const char *information,
- double completion);
-
-void e_task_wiget_alert (ETaskWidget *task_widget);
-void e_task_wiget_unalert (ETaskWidget *task_widget);
-
-const char *e_task_widget_get_component_id (ETaskWidget *task_widget);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* _E_TASK_WIDGET_H_ */
diff --git a/shell/e-uri-schema-registry.c b/shell/e-uri-schema-registry.c
deleted file mode 100644
index 468d640fd3..0000000000
--- a/shell/e-uri-schema-registry.c
+++ /dev/null
@@ -1,181 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-uri-schema-registry.c
- *
- * Copyright (C) 2001 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli <ettore@ximian.com>
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "e-uri-schema-registry.h"
-
-#include <gal/util/e-util.h>
-
-
-#define PARENT_TYPE gtk_object_get_type ()
-static GtkObjectClass *parent_class = NULL;
-
-struct _SchemaHandler {
- char *schema;
- EvolutionShellComponentClient *component;
-};
-typedef struct _SchemaHandler SchemaHandler;
-
-struct _EUriSchemaRegistryPrivate {
- GHashTable *schema_to_handler;
-};
-
-
-/* SchemaHandler. */
-
-static SchemaHandler *
-schema_handler_new (const char *schema,
- EvolutionShellComponentClient *component)
-{
- SchemaHandler *handler;
-
- handler = g_new (SchemaHandler, 1);
- handler->schema = g_strdup (schema);
- handler->component = component;
-
- g_object_ref (component);
-
- return handler;
-}
-
-static void
-schema_handler_free (SchemaHandler *handler)
-{
- g_free (handler->schema);
- g_object_unref (handler->component);
-
- g_free (handler);
-}
-
-
-static void
-schema_to_handler_destroy_foreach_callback (void *key,
- void *value,
- void *data)
-{
- schema_handler_free ((SchemaHandler *) value);
-}
-
-
-/* GtkObject methods. */
-
-static void
-impl_finalize (GObject *object)
-{
- EUriSchemaRegistry *registry;
- EUriSchemaRegistryPrivate *priv;
-
- registry = E_URI_SCHEMA_REGISTRY (object);
- priv = registry->priv;
-
- g_hash_table_foreach (priv->schema_to_handler, schema_to_handler_destroy_foreach_callback, NULL);
- g_hash_table_destroy (priv->schema_to_handler);
- g_free (priv);
-
- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
-}
-
-
-static void
-class_init (GObjectClass *object_class)
-{
- parent_class = g_type_class_ref(PARENT_TYPE);
-
- object_class->finalize = impl_finalize;
-}
-
-static void
-init (EUriSchemaRegistry *uri_schema_registry)
-{
- EUriSchemaRegistryPrivate *priv;
-
- priv = g_new (EUriSchemaRegistryPrivate, 1);
- priv->schema_to_handler = g_hash_table_new (g_str_hash, g_str_equal);
-
- uri_schema_registry->priv = priv;
-
- GTK_OBJECT_UNSET_FLAGS (uri_schema_registry, GTK_FLOATING);
-}
-
-
-EUriSchemaRegistry *
-e_uri_schema_registry_new (void)
-{
- EUriSchemaRegistry *registry;
-
- registry = g_object_new (e_uri_schema_registry_get_type (), NULL);
-
- return registry;
-}
-
-
-void
-e_uri_schema_registry_set_handler_for_schema (EUriSchemaRegistry *registry,
- const char *schema,
- EvolutionShellComponentClient *shell_component)
-{
- EUriSchemaRegistryPrivate *priv;
- SchemaHandler *existing_handler;
- SchemaHandler *new_handler;
-
- g_return_if_fail (registry != NULL);
- g_return_if_fail (E_IS_URI_SCHEMA_REGISTRY (registry));
- g_return_if_fail (schema != NULL);
- g_return_if_fail (shell_component == NULL || EVOLUTION_IS_SHELL_COMPONENT_CLIENT (shell_component));
-
- priv = registry->priv;
-
- existing_handler = g_hash_table_lookup (priv->schema_to_handler, schema);
- if (existing_handler != NULL) {
- g_hash_table_remove (priv->schema_to_handler, existing_handler->schema);
- schema_handler_free (existing_handler);
- }
-
- new_handler = schema_handler_new (schema, shell_component);
- g_hash_table_insert (priv->schema_to_handler, new_handler->schema, new_handler);
-}
-
-EvolutionShellComponentClient *
-e_uri_schema_registry_get_handler_for_schema (EUriSchemaRegistry *registry,
- const char *schema)
-{
- EUriSchemaRegistryPrivate *priv;
- const SchemaHandler *handler;
-
- g_return_val_if_fail (registry != NULL, NULL);
- g_return_val_if_fail (E_IS_URI_SCHEMA_REGISTRY (registry), NULL);
- g_return_val_if_fail (schema != NULL, NULL);
-
- priv = registry->priv;
-
- handler = g_hash_table_lookup (priv->schema_to_handler, schema);
- if (handler == NULL)
- return NULL;
-
- return handler->component;
-}
-
-
-E_MAKE_TYPE (e_uri_schema_registry, "EUriSchemaRegistry", EUriSchemaRegistry, class_init, init, PARENT_TYPE)
diff --git a/shell/e-uri-schema-registry.h b/shell/e-uri-schema-registry.h
deleted file mode 100644
index 1826f8a65a..0000000000
--- a/shell/e-uri-schema-registry.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-uri-schema-registry.h
- *
- * Copyright (C) 2001 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli <ettore@ximian.com>
- */
-
-#ifndef _E_URI_SCHEMA_REGISTRY_H_
-#define _E_URI_SCHEMA_REGISTRY_H_
-
-#include "evolution-shell-component-client.h"
-
-#include <gtk/gtkobject.h>
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-#define E_TYPE_URI_SCHEMA_REGISTRY (e_uri_schema_registry_get_type ())
-#define E_URI_SCHEMA_REGISTRY(obj) (GTK_CHECK_CAST ((obj), E_TYPE_URI_SCHEMA_REGISTRY, EUriSchemaRegistry))
-#define E_URI_SCHEMA_REGISTRY_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_URI_SCHEMA_REGISTRY, EUriSchemaRegistryClass))
-#define E_IS_URI_SCHEMA_REGISTRY(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_URI_SCHEMA_REGISTRY))
-#define E_IS_URI_SCHEMA_REGISTRY_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_URI_SCHEMA_REGISTRY))
-
-
-typedef struct _EUriSchemaRegistry EUriSchemaRegistry;
-typedef struct _EUriSchemaRegistryPrivate EUriSchemaRegistryPrivate;
-typedef struct _EUriSchemaRegistryClass EUriSchemaRegistryClass;
-
-struct _EUriSchemaRegistry {
- GtkObject parent;
-
- EUriSchemaRegistryPrivate *priv;
-};
-
-struct _EUriSchemaRegistryClass {
- GtkObjectClass parent_class;
-};
-
-
-GtkType e_uri_schema_registry_get_type (void);
-EUriSchemaRegistry *e_uri_schema_registry_new (void);
-
-void e_uri_schema_registry_set_handler_for_schema (EUriSchemaRegistry *registry,
- const char *schema,
- EvolutionShellComponentClient *shell_component);
-EvolutionShellComponentClient *e_uri_schema_registry_get_handler_for_schema (EUriSchemaRegistry *registry,
- const char *schema);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* _E_URI_SCHEMA_REGISTRY_H_ */
diff --git a/shell/evolution-activity-client.c b/shell/evolution-activity-client.c
deleted file mode 100644
index 1ab93402d0..0000000000
--- a/shell/evolution-activity-client.c
+++ /dev/null
@@ -1,449 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* evolution-activity-client.c
- *
- * Copyright (C) 2001 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli <ettore@ximian.com>
- */
-
-/* Another evil GTK+ object wrapper for a CORBA API. In this case, the wrapper
- is needed to avoid sending too frequent CORBA requests across the wire, thus
- slowing the client down. The wrapper makes sure that there is a minimum
- amount of time between each CORBA method invocation. */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "evolution-activity-client.h"
-
-#include "e-shell-corba-icon-utils.h"
-
-#include "e-shell-marshal.h"
-
-#include <string.h>
-
-#include <gtk/gtksignal.h>
-#include <gtk/gtkmain.h>
-
-#include <bonobo/bonobo-listener.h>
-#include <bonobo/bonobo-exception.h>
-
-#include <gal/util/e-util.h>
-
-
-#define PARENT_TYPE gtk_object_get_type ()
-static GtkObjectClass *parent_class = NULL;
-
-/* The minimum time between updates, in msecs. */
-#define UPDATE_DELAY 1000
-
-enum {
- SHOW_DETAILS,
- CANCEL,
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = { 0 };
-
-struct _EvolutionActivityClientPrivate {
- /* The ::Activity interface that we QI from the shell. */
- GNOME_Evolution_Activity activity_interface;
-
- /* BonoboListener used to get notification about actions that the user
- requested on the activity. */
- BonoboListener *listener;
-
- /* Id of this activity. */
- GNOME_Evolution_Activity_ActivityId activity_id;
-
- /* Id for the GTK+ timeout used to do updates. */
- int next_update_timeout_id;
-
- /* Wether we have to actually push an update at this timeout. */
- int have_pending_update;
-
- /* Data for the next update. */
- char *new_information;
- double new_progress;
-};
-
-
-/* Utility functions. */
-
-static gboolean
-corba_update_progress (EvolutionActivityClient *activity_client,
- const char *information,
- double progress)
-{
- EvolutionActivityClientPrivate *priv;
- CORBA_Environment ev;
- gboolean retval;
-
- priv = activity_client->priv;
-
- CORBA_exception_init (&ev);
-
- GNOME_Evolution_Activity_operationProgressing (priv->activity_interface,
- priv->activity_id,
- information,
- progress,
- &ev);
-
- if (! BONOBO_EX (&ev)) {
- retval = TRUE;
- } else {
- g_warning ("EvolutionActivityClient: Error updating progress -- %s",
- BONOBO_EX_REPOID (&ev));
- retval = FALSE;
- }
-
- CORBA_exception_free (&ev);
-
- return retval;
-}
-
-static gboolean
-update_timeout_callback (void *data)
-{
- EvolutionActivityClient *activity_client;
- EvolutionActivityClientPrivate *priv;
-
- activity_client = EVOLUTION_ACTIVITY_CLIENT (data);
- priv = activity_client->priv;
-
- if (priv->have_pending_update) {
- priv->have_pending_update = FALSE;
- corba_update_progress (activity_client, priv->new_information, priv->new_progress);
- return TRUE;
- } else {
- priv->next_update_timeout_id = 0;
- return FALSE;
- }
-}
-
-
-/* BonoboListener callback. */
-
-static void
-listener_callback (BonoboListener *listener,
- const char *event_name,
- const CORBA_any *any,
- CORBA_Environment *ev,
- void *data)
-{
- EvolutionActivityClient *activity_client;
-
- activity_client = EVOLUTION_ACTIVITY_CLIENT (data);
-
- if (strcmp (event_name, "ShowDetails") == 0)
- g_signal_emit (activity_client, signals[SHOW_DETAILS], 0);
- else if (strcmp (event_name, "Cancel") == 0)
- g_signal_emit (activity_client, signals[CANCEL], 0);
- else
- g_warning ("EvolutionActivityClient: Unknown event from listener -- %s", event_name);
-}
-
-
-/* GObject methods. */
-
-static void
-impl_dispose (GObject *object)
-{
- EvolutionActivityClient *activity_client;
- EvolutionActivityClientPrivate *priv;
- CORBA_Environment ev;
-
- activity_client = EVOLUTION_ACTIVITY_CLIENT (object);
- priv = activity_client->priv;
-
- if (priv->next_update_timeout_id != 0) {
- g_source_remove (priv->next_update_timeout_id);
- priv->next_update_timeout_id = 0;
- }
-
- CORBA_exception_init (&ev);
-
- if (! CORBA_Object_is_nil (priv->activity_interface, &ev)) {
- GNOME_Evolution_Activity_operationFinished (priv->activity_interface,
- priv->activity_id,
- &ev);
- if (BONOBO_EX (&ev))
- g_warning ("EvolutionActivityClient: Error reporting completion of operation -- %s",
- BONOBO_EX_REPOID (&ev));
-
- CORBA_Object_release (priv->activity_interface, &ev);
-
- priv->activity_interface = CORBA_OBJECT_NIL;
- }
-
- CORBA_exception_free (&ev);
-
- if (priv->listener != NULL) {
- bonobo_object_unref (BONOBO_OBJECT (priv->listener));
- priv->listener = NULL;
- }
-
- (* G_OBJECT_CLASS (parent_class)->dispose) (object);
-}
-
-static void
-impl_finalize (GObject *object)
-{
- EvolutionActivityClient *activity_client;
- EvolutionActivityClientPrivate *priv;
-
- activity_client = EVOLUTION_ACTIVITY_CLIENT (object);
- priv = activity_client->priv;
-
- g_free (priv->new_information);
- g_free (priv);
-
- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
-}
-
-
-static void
-class_init (EvolutionActivityClientClass *klass)
-{
- GObjectClass *object_class;
-
- parent_class = g_type_class_ref(PARENT_TYPE);
-
- object_class = G_OBJECT_CLASS (klass);
- object_class->dispose = impl_dispose;
- object_class->finalize = impl_finalize;
-
- signals[SHOW_DETAILS]
- = g_signal_new ("show_details",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EvolutionActivityClientClass, show_details),
- NULL, NULL,
- e_shell_marshal_NONE__NONE,
- G_TYPE_NONE, 0);
-
- signals[CANCEL]
- = g_signal_new ("cancel",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EvolutionActivityClientClass, cancel),
- NULL, NULL,
- e_shell_marshal_NONE__NONE,
- G_TYPE_NONE, 0);
-}
-
-
-static void
-init (EvolutionActivityClient *activity_client)
-{
- EvolutionActivityClientPrivate *priv;
-
- priv = g_new (EvolutionActivityClientPrivate, 1);
- priv->activity_interface = CORBA_OBJECT_NIL;
- priv->listener = bonobo_listener_new (listener_callback, activity_client);
- priv->activity_id = (GNOME_Evolution_Activity_ActivityId) 0;
- priv->next_update_timeout_id = 0;
- priv->have_pending_update = FALSE;
- priv->new_information = NULL;
- priv->new_progress = 0.0;
-
- activity_client->priv = priv;
-}
-
-
-gboolean
-evolution_activity_client_construct (EvolutionActivityClient *activity_client,
- EvolutionShellClient *shell_client,
- const char *component_id,
- GdkPixbuf **animated_icon,
- const char *information,
- gboolean cancellable,
- gboolean *suggest_display_return)
-{
- EvolutionActivityClientPrivate *priv;
- GNOME_Evolution_Activity activity_interface;
- CORBA_Environment ev;
- CORBA_boolean suggest_display;
- GNOME_Evolution_AnimatedIcon *corba_animated_icon;
-
- g_return_val_if_fail (activity_client != NULL, FALSE);
- g_return_val_if_fail (EVOLUTION_IS_ACTIVITY_CLIENT (activity_client), FALSE);
- g_return_val_if_fail (shell_client != NULL, FALSE);
- g_return_val_if_fail (EVOLUTION_IS_SHELL_CLIENT (shell_client), FALSE);
- g_return_val_if_fail (animated_icon != NULL, FALSE);
- g_return_val_if_fail (*animated_icon != NULL, FALSE);
- g_return_val_if_fail (information != NULL, FALSE);
- g_return_val_if_fail (suggest_display_return != NULL, FALSE);
-
- priv = activity_client->priv;
- g_return_val_if_fail (priv->activity_interface == CORBA_OBJECT_NIL, FALSE);
-
- GTK_OBJECT_UNSET_FLAGS (activity_client, GTK_FLOATING);
-
- CORBA_exception_init (&ev);
-
- activity_interface = evolution_shell_client_get_activity_interface (shell_client);
- priv->activity_interface = CORBA_Object_duplicate (activity_interface, &ev);
- if (ev._major != CORBA_NO_EXCEPTION) {
- priv->activity_interface = CORBA_OBJECT_NIL;
- CORBA_exception_free (&ev);
- return FALSE;
- }
-
- corba_animated_icon = e_new_corba_animated_icon_from_pixbuf_array (animated_icon);
-
- GNOME_Evolution_Activity_operationStarted (activity_interface,
- component_id,
- corba_animated_icon,
- information,
- cancellable,
- bonobo_object_corba_objref (BONOBO_OBJECT (priv->listener)),
- &priv->activity_id,
- &suggest_display,
- &ev);
-
- CORBA_free (corba_animated_icon);
-
- if (ev._major != CORBA_NO_EXCEPTION) {
- CORBA_exception_free (&ev);
- return FALSE;
- }
-
- *suggest_display_return = (gboolean) suggest_display;
-
- CORBA_exception_free (&ev);
- return TRUE;
-}
-
-EvolutionActivityClient *
-evolution_activity_client_new (EvolutionShellClient *shell_client,
- const char *component_id,
- GdkPixbuf **animated_icon,
- const char *information,
- gboolean cancellable,
- gboolean *suggest_display_return)
-{
- EvolutionActivityClient *activity_client;
-
- g_return_val_if_fail (shell_client != NULL, NULL);
- g_return_val_if_fail (EVOLUTION_IS_SHELL_CLIENT (shell_client), NULL);
- g_return_val_if_fail (animated_icon != NULL, NULL);
- g_return_val_if_fail (*animated_icon != NULL, NULL);
- g_return_val_if_fail (information != NULL, NULL);
- g_return_val_if_fail (suggest_display_return != NULL, NULL);
-
- activity_client = g_object_new (evolution_activity_client_get_type (), NULL);
-
- if (! evolution_activity_client_construct (activity_client,
- shell_client,
- component_id,
- animated_icon,
- information,
- cancellable,
- suggest_display_return)) {
- g_object_unref (activity_client);
- return NULL;
- }
-
- return activity_client;
-}
-
-
-gboolean
-evolution_activity_client_update (EvolutionActivityClient *activity_client,
- const char *information,
- double progress)
-{
- EvolutionActivityClientPrivate *priv;
- gboolean retval;
-
- g_return_val_if_fail (activity_client != NULL, FALSE);
- g_return_val_if_fail (EVOLUTION_IS_ACTIVITY_CLIENT (activity_client), FALSE);
- g_return_val_if_fail (information != NULL, FALSE);
- g_return_val_if_fail (progress == -1.0 || (progress >= 0.0 && progress <= 1.0), FALSE);
-
- priv = activity_client->priv;
-
- if (priv->next_update_timeout_id == 0) {
- /* There is no pending timeout, so the last CORBA update
- happened more than UPDATE_DELAY msecs ago. So we set up a
- timeout so we can check against it at the next update
- request.
-
- Notice that GLib timeouts or other operations on this object
- can be invoked within a remote CORBA invocation, so we need
- to set `next_update_timeout_id' and `have_pending_update'
- before doing the CORBA call, or nasty race conditions might
- happen. */
-
- priv->have_pending_update = FALSE;
-
- priv->next_update_timeout_id = g_timeout_add (UPDATE_DELAY,
- update_timeout_callback,
- activity_client);
-
- retval = corba_update_progress (activity_client, information, progress);
- } else {
- /* There is a pending timeout, so the last CORBA update
- happened less than UPDATE_DELAY msecs ago. So just queue an
- update instead. */
-
- g_free (priv->new_information);
- priv->new_information = g_strdup (information);
- priv->new_progress = progress;
-
- priv->have_pending_update = TRUE;
-
- retval = TRUE;
- }
-
- return retval;
-}
-
-GNOME_Evolution_Activity_DialogAction
-evolution_activity_client_request_dialog (EvolutionActivityClient *activity_client,
- GNOME_Evolution_Activity_DialogType dialog_type)
-{
- EvolutionActivityClientPrivate *priv;
- GNOME_Evolution_Activity_DialogAction retval;
- CORBA_Environment ev;
-
- g_return_val_if_fail (activity_client != NULL, GNOME_Evolution_Activity_DIALOG_ACTION_ERROR);
- g_return_val_if_fail (EVOLUTION_IS_ACTIVITY_CLIENT (activity_client), GNOME_Evolution_Activity_DIALOG_ACTION_ERROR);
-
- priv = activity_client->priv;
-
- CORBA_exception_init (&ev);
-
- retval = GNOME_Evolution_Activity_requestDialog (priv->activity_interface,
- priv->activity_id,
- dialog_type,
- &ev);
- if (BONOBO_EX (&ev) != CORBA_NO_EXCEPTION) {
- g_warning ("EvolutionActivityClient: Error requesting a dialog -- %s", BONOBO_EX_REPOID (&ev));
- retval = GNOME_Evolution_Activity_DIALOG_ACTION_ERROR;
- }
-
- CORBA_exception_free (&ev);
-
- return retval;
-}
-
-
-E_MAKE_TYPE (evolution_activity_client, "EvolutionActivityClient", EvolutionActivityClient,
- class_init, init, PARENT_TYPE)
diff --git a/shell/evolution-activity-client.h b/shell/evolution-activity-client.h
deleted file mode 100644
index d212dad219..0000000000
--- a/shell/evolution-activity-client.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* evolution-activity-client.h
- *
- * Copyright (C) 2001 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli <ettore@ximian.com>
- */
-
-#ifndef _EVOLUTION_ACTIVITY_CLIENT_H_
-#define _EVOLUTION_ACTIVITY_CLIENT_H_
-
-#include "evolution-shell-client.h"
-
-#include "Evolution.h"
-
-#include <gtk/gtkobject.h>
-#include <gdk-pixbuf/gdk-pixbuf.h>
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-#define EVOLUTION_TYPE_ACTIVITY_CLIENT (evolution_activity_client_get_type ())
-#define EVOLUTION_ACTIVITY_CLIENT(obj) (GTK_CHECK_CAST ((obj), EVOLUTION_TYPE_ACTIVITY_CLIENT, EvolutionActivityClient))
-#define EVOLUTION_ACTIVITY_CLIENT_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), EVOLUTION_TYPE_ACTIVITY_CLIENT, EvolutionActivityClientClass))
-#define EVOLUTION_IS_ACTIVITY_CLIENT(obj) (GTK_CHECK_TYPE ((obj), EVOLUTION_TYPE_ACTIVITY_CLIENT))
-#define EVOLUTION_IS_ACTIVITY_CLIENT_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), EVOLUTION_TYPE_ACTIVITY_CLIENT))
-
-
-typedef struct _EvolutionActivityClient EvolutionActivityClient;
-typedef struct _EvolutionActivityClientPrivate EvolutionActivityClientPrivate;
-typedef struct _EvolutionActivityClientClass EvolutionActivityClientClass;
-
-struct _EvolutionActivityClient {
- GtkObject parent;
-
- EvolutionActivityClientPrivate *priv;
-};
-
-struct _EvolutionActivityClientClass {
- GtkObjectClass parent_class;
-
- /* Signals. */
- void (* show_details) (EvolutionActivityClient *activity_client);
- void (* cancel) (EvolutionActivityClient *activity_client);
-};
-
-
-GtkType evolution_activity_client_get_type (void);
-gboolean evolution_activity_client_construct (EvolutionActivityClient *activity_client,
- EvolutionShellClient *shell_client,
- const char *component_id,
- GdkPixbuf **animated_icon,
- const char *information,
- gboolean cancellable,
- gboolean *suggest_display_return);
-EvolutionActivityClient *evolution_activity_client_new (EvolutionShellClient *shell_client,
- const char *component_id,
- GdkPixbuf **animated_icon,
- const char *information,
- gboolean cancellable,
- gboolean *suggest_display_return);
-
-gboolean evolution_activity_client_update (EvolutionActivityClient *activity_client,
- const char *information,
- double progress);
-
-GNOME_Evolution_Activity_DialogAction
-evolution_activity_client_request_dialog (EvolutionActivityClient *activity_client,
- GNOME_Evolution_Activity_DialogType dialog_type);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* _EVOLUTION_ACTIVITY_CLIENT_H_ */
diff --git a/shell/evolution-config-control.c b/shell/evolution-config-control.c
deleted file mode 100644
index 4b8c884867..0000000000
--- a/shell/evolution-config-control.c
+++ /dev/null
@@ -1,241 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* evolution-config-control.c
- *
- * Copyright (C) 2002 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "evolution-config-control.h"
-
-#include "e-shell-marshal.h"
-
-#include <gal/util/e-util.h>
-
-#include <gtk/gtksignal.h>
-
-#include <bonobo/bonobo-control.h>
-#include <bonobo/bonobo-event-source.h>
-
-
-#define PARENT_TYPE BONOBO_OBJECT_TYPE
-static BonoboObjectClass *parent_class = NULL;
-
-struct _EvolutionConfigControlPrivate {
- gboolean changed;
- BonoboControl *control;
- BonoboEventSource *event_source;
-};
-
-enum {
- APPLY,
- LAST_SIGNAL
-};
-static int signals[LAST_SIGNAL] = { 0 };
-
-
-/* GObject methods. */
-
-static void
-impl_dispose (GObject *object)
-{
- EvolutionConfigControl *config_control;
- EvolutionConfigControlPrivate *priv;
-
- config_control = EVOLUTION_CONFIG_CONTROL (object);
- priv = config_control->priv;
-
- if (priv->control != NULL) {
- bonobo_object_unref (BONOBO_OBJECT (priv->control));
- priv->control = NULL;
- }
-
- if (priv->event_source != NULL) {
- bonobo_object_unref (BONOBO_OBJECT (priv->event_source));
- priv->event_source = NULL;
- }
-
- (* G_OBJECT_CLASS (parent_class)->dispose) (object);
-}
-
-static void
-impl_finalize (GObject *object)
-{
- EvolutionConfigControl *config_control;
- EvolutionConfigControlPrivate *priv;
-
- config_control = EVOLUTION_CONFIG_CONTROL (object);
- priv = config_control->priv;
-
- g_free (priv);
-
- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
-}
-
-
-/* Evolution::ConfigControl CORBA methods. */
-
-static void
-impl_apply (PortableServer_Servant servant,
- CORBA_Environment *ev)
-{
- EvolutionConfigControl *config_control;
- EvolutionConfigControlPrivate *priv;
-
- config_control = EVOLUTION_CONFIG_CONTROL (bonobo_object_from_servant (servant));
- priv = config_control->priv;
-
- g_signal_emit (config_control, signals[APPLY], 0);
-
- priv->changed = FALSE;
-}
-
-static Bonobo_Control
-impl__get_control (PortableServer_Servant servant,
- CORBA_Environment *ev)
-{
- EvolutionConfigControl *config_control;
- EvolutionConfigControlPrivate *priv;
-
- config_control = EVOLUTION_CONFIG_CONTROL (bonobo_object_from_servant (servant));
- priv = config_control->priv;
-
- bonobo_object_ref (BONOBO_OBJECT (priv->control));
-
- return CORBA_Object_duplicate (bonobo_object_corba_objref (BONOBO_OBJECT (priv->control)), ev);
-}
-
-static Bonobo_EventSource
-impl__get_eventSource (PortableServer_Servant servant,
- CORBA_Environment *ev)
-{
- EvolutionConfigControl *config_control;
- EvolutionConfigControlPrivate *priv;
-
- config_control = EVOLUTION_CONFIG_CONTROL (bonobo_object_from_servant (servant));
- priv = config_control->priv;
-
- bonobo_object_ref (BONOBO_OBJECT (priv->event_source));
-
- return CORBA_Object_duplicate (bonobo_object_corba_objref (BONOBO_OBJECT (priv->event_source)), ev);
-}
-
-
-static void
-evolution_config_control_class_init (EvolutionConfigControlClass *class)
-{
- POA_GNOME_Evolution_ConfigControl__epv *epv;
- GObjectClass *object_class;
-
- object_class = G_OBJECT_CLASS (class);
- object_class->dispose = impl_dispose;
- object_class->finalize = impl_finalize;
-
- epv = &class->epv;
- epv->apply = impl_apply;
- epv->_get_control = impl__get_control;
- epv->_get_eventSource = impl__get_eventSource;
-
- signals[APPLY] = g_signal_new ("apply",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EvolutionConfigControlClass, apply),
- NULL, NULL,
- e_shell_marshal_NONE__NONE,
- G_TYPE_NONE, 0);
-
- parent_class = g_type_class_ref (PARENT_TYPE);
-}
-
-static void
-evolution_config_control_init (EvolutionConfigControl *config_control)
-{
- EvolutionConfigControlPrivate *priv;
-
- priv = g_new (EvolutionConfigControlPrivate, 1);
- priv->changed = FALSE;
- priv->control = NULL;
- priv->event_source = bonobo_event_source_new ();
-
- config_control->priv = priv;
-}
-
-
-void
-evolution_config_control_construct (EvolutionConfigControl *control,
- GtkWidget *widget)
-{
- EvolutionConfigControlPrivate *priv;
-
- g_return_if_fail (EVOLUTION_IS_CONFIG_CONTROL (control));
- g_return_if_fail (GTK_IS_WIDGET (widget));
-
- priv = control->priv;
-
- priv->control = bonobo_control_new (widget);
-}
-
-EvolutionConfigControl *
-evolution_config_control_new (GtkWidget *widget)
-{
- EvolutionConfigControl *new;
-
- g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL);
-
- new = g_object_new (evolution_config_control_get_type (), NULL);
- evolution_config_control_construct (new, widget);
-
- return new;
-}
-
-void
-evolution_config_control_changed (EvolutionConfigControl *config_control)
-{
- EvolutionConfigControlPrivate *priv;
- CORBA_Environment ev;
- CORBA_any *null_value;
-
- g_return_if_fail (EVOLUTION_IS_CONFIG_CONTROL (config_control));
-
- priv = config_control->priv;
-
- if (priv->changed)
- return;
-
- priv->changed = TRUE;
-
- CORBA_exception_init (&ev);
-
- null_value = CORBA_any__alloc ();
- null_value->_type = TC_null;
-
- bonobo_event_source_notify_listeners (priv->event_source, "changed", null_value, &ev);
-
- CORBA_free (null_value);
-
- CORBA_exception_free (&ev);
-}
-
-
-BONOBO_TYPE_FUNC_FULL (EvolutionConfigControl,
- GNOME_Evolution_ConfigControl,
- PARENT_TYPE,
- evolution_config_control)
diff --git a/shell/evolution-config-control.h b/shell/evolution-config-control.h
deleted file mode 100644
index 41e5da856c..0000000000
--- a/shell/evolution-config-control.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* evolution-config-control.h
- *
- * Copyright (C) 2002 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifndef EVOLUTION_CONFIG_CONTROL_H
-#define EVOLUTION_CONFIG_CONTROL_H
-
-#include "Evolution.h"
-
-#include <bonobo/bonobo-object.h>
-#include <gtk/gtkwidget.h>
-
-#ifdef cplusplus
-extern "C" {
-#pragma }
-#endif /* cplusplus */
-
-#define EVOLUTION_TYPE_CONFIG_CONTROL (evolution_config_control_get_type ())
-#define EVOLUTION_CONFIG_CONTROL(obj) (GTK_CHECK_CAST ((obj), EVOLUTION_TYPE_CONFIG_CONTROL, EvolutionConfigControl))
-#define EVOLUTION_CONFIG_CONTROL_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), EVOLUTION_TYPE_CONFIG_CONTROL, EvolutionConfigControlClass))
-#define EVOLUTION_IS_CONFIG_CONTROL(obj) (GTK_CHECK_TYPE ((obj), EVOLUTION_TYPE_CONFIG_CONTROL))
-#define EVOLUTION_IS_CONFIG_CONTROL_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), EVOLUTION_TYPE_CONFIG_CONTROL))
-
-typedef struct _EvolutionConfigControl EvolutionConfigControl;
-typedef struct _EvolutionConfigControlPrivate EvolutionConfigControlPrivate;
-typedef struct _EvolutionConfigControlClass EvolutionConfigControlClass;
-
-struct _EvolutionConfigControl {
- BonoboObject parent;
-
- EvolutionConfigControlPrivate *priv;
-};
-
-struct _EvolutionConfigControlClass {
- BonoboObjectClass parent_class;
-
- POA_GNOME_Evolution_ConfigControl__epv epv;
-
- /* Signals. */
-
- void (* apply) (EvolutionConfigControl *control);
-};
-
-
-GtkType evolution_config_control_get_type (void);
-EvolutionConfigControl *evolution_config_control_new (GtkWidget *widget);
-void evolution_config_control_construct (EvolutionConfigControl *control,
- GtkWidget *widget);
-
-void evolution_config_control_changed (EvolutionConfigControl *config_control);
-
-#endif /* EVOLUTION_CONFIG_CONTROL_H */
diff --git a/shell/evolution-folder-selector-button.c b/shell/evolution-folder-selector-button.c
deleted file mode 100644
index f3b9ab6179..0000000000
--- a/shell/evolution-folder-selector-button.c
+++ /dev/null
@@ -1,455 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* evolution-folder-selector-button.c
- *
- * Copyright (C) 2002 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "evolution-folder-selector-button.h"
-
-#include "e-shell-marshal.h"
-
-#include <gal/util/e-util.h>
-
-#include <gtk/gtkhbox.h>
-#include <gtk/gtkimage.h>
-#include <gtk/gtklabel.h>
-
-#include <libgnome/gnome-i18n.h>
-
-#include <string.h>
-
-
-struct _EvolutionFolderSelectorButtonPrivate {
- EvolutionShellClient *shell_client;
- GNOME_Evolution_StorageRegistry corba_storage_registry;
- GNOME_Evolution_Folder *selected_folder;
- GtkWidget *icon, *label;
- char *title, **possible_types;
-};
-
-enum {
- POPPED_UP,
- SELECTED,
- CANCELED,
- LAST_SIGNAL
-};
-static guint signals[LAST_SIGNAL] = { 0 };
-
-#define PARENT_TYPE gtk_button_get_type ()
-static GtkButtonClass *parent_class = NULL;
-
-
-static GNOME_Evolution_Folder *
-get_folder_for_uri (EvolutionFolderSelectorButton *folder_selector_button,
- const char *uri)
-{
- EvolutionFolderSelectorButtonPrivate *priv = folder_selector_button->priv;
- CORBA_Environment ev;
- GNOME_Evolution_Folder *folder;
-
- if (!uri)
- return NULL;
-
- CORBA_exception_init (&ev);
- folder = GNOME_Evolution_StorageRegistry_getFolderByUri (
- priv->corba_storage_registry, uri, &ev);
- if (ev._major != CORBA_NO_EXCEPTION)
- folder = CORBA_OBJECT_NIL;
- CORBA_exception_free (&ev);
-
- return folder;
-}
-
-static void
-set_folder (EvolutionFolderSelectorButton *folder_selector_button,
- GNOME_Evolution_Folder *folder)
-{
- EvolutionFolderSelectorButtonPrivate *priv;
- GdkPixbuf *pixbuf;
- char *storage_lname;
- char *label_text;
- const char *p;
-
- priv = folder_selector_button->priv;
-
- if (priv->selected_folder)
- CORBA_free (priv->selected_folder);
- priv->selected_folder = folder;
-
- if (!folder) {
- gtk_image_set_from_pixbuf (GTK_IMAGE (priv->icon), NULL);
- gtk_label_set_text (GTK_LABEL (priv->label),
- _("<click here to select a folder>"));
- return;
- }
-
- pixbuf = evolution_shell_client_get_pixbuf_for_type (priv->shell_client, folder->type, TRUE);
- if (pixbuf != NULL) {
- gtk_image_set_from_pixbuf (GTK_IMAGE (priv->icon), pixbuf);
- g_object_unref (pixbuf);
- }
-
- storage_lname = NULL;
- p = strchr (folder->evolutionUri, '/');
- if (p) {
- p = strchr (p + 1, '/');
- if (p) {
- GNOME_Evolution_Folder *storage_folder;
- char *storage_uri;
-
- storage_uri = g_strndup (folder->evolutionUri,
- p - folder->evolutionUri);
- storage_folder = get_folder_for_uri (folder_selector_button, storage_uri);
- storage_lname = g_strdup (storage_folder->displayName);
- CORBA_free (storage_folder);
- g_free (storage_uri);
- }
- }
-
- if (storage_lname) {
- label_text = g_strdup_printf (_("\"%s\" in \"%s\""), folder->displayName,
- storage_lname);
- g_free (storage_lname);
- } else {
- label_text = g_strdup_printf ("\"%s\"", folder->displayName);
- }
-
- gtk_label_set_text (GTK_LABEL (priv->label), label_text);
- g_free (label_text);
-}
-
-static void
-clicked (GtkButton *button)
-{
- EvolutionFolderSelectorButton *folder_selector_button;
- EvolutionFolderSelectorButtonPrivate *priv;
- GNOME_Evolution_Folder *return_folder;
- GtkWidget *toplevel_container;
- GtkWindow *parent_window;
- char *initial_uri;
-
- /* We want to disable the window the button is in, since the
- * folder selection dialog may be in another process and the WM
- * won't enforce modality cross-process. In Evo 1.2, this code
- * called gtk_widget_set_sensitive on the button's parent
- * window, but in GNOME 2 that seems to cause bad things to
- * happen (the window doesn't resensitize properly at the end).
- * So we desensitize the top-level container inside the window
- * instead.
- */
- toplevel_container = GTK_WIDGET (button);
- while (toplevel_container->parent &&
- !GTK_IS_WINDOW (toplevel_container->parent))
- toplevel_container = toplevel_container->parent;
- parent_window = (GtkWindow *)toplevel_container->parent;
-
- gtk_widget_set_sensitive (GTK_WIDGET (toplevel_container), FALSE);
-
- folder_selector_button = EVOLUTION_FOLDER_SELECTOR_BUTTON (button);
- priv = folder_selector_button->priv;
-
- if (priv->selected_folder)
- initial_uri = priv->selected_folder->evolutionUri;
- else
- initial_uri = "";
-
- g_signal_emit (folder_selector_button, signals[POPPED_UP], 0);
-
- g_object_add_weak_pointer (G_OBJECT (button), (void **) &button);
-
- evolution_shell_client_user_select_folder (priv->shell_client,
- parent_window,
- priv->title,
- initial_uri,
- (const char **)priv->possible_types,
- &return_folder);
-
- /* Bail out if the parent window was destroyed */
- if (button == NULL)
- return;
- g_object_remove_weak_pointer (G_OBJECT (button), (void **) &button);
-
- gtk_widget_set_sensitive (GTK_WIDGET (toplevel_container), TRUE);
-
- if (!return_folder) {
- g_signal_emit (folder_selector_button, signals[CANCELED], 0);
- return;
- }
-
- set_folder (folder_selector_button, return_folder);
-
- g_signal_emit (folder_selector_button, signals[SELECTED], 0, return_folder);
-}
-
-
-/* GObject methods. */
-
-static void
-impl_dispose (GObject *object)
-{
- EvolutionFolderSelectorButton *folder_selector_button;
- EvolutionFolderSelectorButtonPrivate *priv;
-
- folder_selector_button = EVOLUTION_FOLDER_SELECTOR_BUTTON (object);
- priv = folder_selector_button->priv;
-
- if (priv->shell_client != NULL) {
- g_object_unref (priv->shell_client);
- priv->shell_client = NULL;
- }
-
- (* G_OBJECT_CLASS (parent_class)->dispose) (object);
-}
-
-static void
-impl_finalize (GObject *object)
-{
- EvolutionFolderSelectorButton *folder_selector_button;
- EvolutionFolderSelectorButtonPrivate *priv;
- int i;
-
- folder_selector_button = EVOLUTION_FOLDER_SELECTOR_BUTTON (object);
- priv = folder_selector_button->priv;
-
- g_free (priv->title);
-
- if (priv->possible_types != NULL) {
- for (i = 0; priv->possible_types[i]; i++)
- g_free (priv->possible_types[i]);
- g_free (priv->possible_types);
- }
-
- if (priv->selected_folder)
- CORBA_free (priv->selected_folder);
-
- g_free (priv);
-
- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
-}
-
-
-static void
-class_init (EvolutionFolderSelectorButtonClass *klass)
-{
- GObjectClass *object_class;
- GtkButtonClass *button_class;
-
- parent_class = g_type_class_ref(PARENT_TYPE);
-
- object_class = G_OBJECT_CLASS (klass);
- button_class = GTK_BUTTON_CLASS (klass);
-
- button_class->clicked = clicked;
-
- object_class->dispose = impl_dispose;
- object_class->finalize = impl_finalize;
-
- signals[POPPED_UP] = g_signal_new ("popped_up",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EvolutionFolderSelectorButtonClass, popped_up),
- NULL, NULL,
- e_shell_marshal_NONE__NONE,
- G_TYPE_NONE, 0);
- signals[SELECTED] = g_signal_new ("selected",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EvolutionFolderSelectorButtonClass, selected),
- NULL, NULL,
- e_shell_marshal_NONE__POINTER,
- G_TYPE_NONE, 1,
- G_TYPE_POINTER);
- signals[CANCELED] = g_signal_new ("canceled",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EvolutionFolderSelectorButtonClass, canceled),
- NULL, NULL,
- e_shell_marshal_NONE__NONE,
- G_TYPE_NONE, 0);
-}
-
-static void
-init (EvolutionFolderSelectorButton *folder_selector_button)
-{
- EvolutionFolderSelectorButtonPrivate *priv;
- GtkWidget *box;
-
- priv = g_new0 (EvolutionFolderSelectorButtonPrivate, 1);
-
- priv->icon = gtk_image_new ();
- priv->label = gtk_label_new ("");
- gtk_label_set_justify (GTK_LABEL (priv->label), GTK_JUSTIFY_LEFT);
- gtk_misc_set_alignment (GTK_MISC (priv->label), 0.0, 0.0);
- box = gtk_hbox_new (FALSE, 4);
- gtk_box_pack_start (GTK_BOX (box), priv->icon, FALSE, TRUE, 0);
- gtk_box_pack_start (GTK_BOX (box), priv->label, TRUE, TRUE, 0);
- gtk_widget_show_all (GTK_WIDGET (box));
- gtk_container_add (GTK_CONTAINER (folder_selector_button), box);
-
- folder_selector_button->priv = priv;
-}
-
-
-
-/**
- * evolution_folder_selector_button_construct:
- * @folder_selector_button:
- * @shell_client: the shell client that will be used for folder selection
- * @title: the title to use for the selection dialog
- * @initial_uri: the URI (evolution: or physical) of the
- * initially-selected folder
- * @possible_types: a %NULL-terminated array of selectable types.
- *
- * Construct @folder_selector_button.
- **/
-void
-evolution_folder_selector_button_construct (EvolutionFolderSelectorButton *folder_selector_button,
- EvolutionShellClient *shell_client,
- const char *title,
- const char *initial_uri,
- const char *possible_types[])
-{
- EvolutionFolderSelectorButtonPrivate *priv;
- GNOME_Evolution_Folder *folder;
- int count;
-
- g_return_if_fail (EVOLUTION_IS_FOLDER_SELECTOR_BUTTON (folder_selector_button));
- g_return_if_fail (EVOLUTION_IS_SHELL_CLIENT (shell_client));
- g_return_if_fail (possible_types != NULL);
-
- priv = folder_selector_button->priv;
-
- priv->shell_client = shell_client;
- g_object_ref (shell_client);
- priv->corba_storage_registry = evolution_shell_client_get_storage_registry_interface (shell_client);
-
- priv->title = g_strdup (title);
-
- folder = get_folder_for_uri (folder_selector_button, initial_uri);
- set_folder (folder_selector_button, folder);
-
- for (count = 0; possible_types[count]; count++)
- ;
- priv->possible_types = g_new (char *, count + 1);
- for (count = 0; possible_types[count]; count++)
- priv->possible_types[count] = g_strdup (possible_types[count]);
- priv->possible_types[count] = NULL;
-}
-
-/**
- * evolution_folder_selector_button_new:
- * @shell_client: the shell client that will be used for folder selection
- * @title: the title to use for the selection dialog
- * @initial_uri: the URI (evolution: or physical) of the
- * initially-selected folder
- * @possible_types: a %NULL-terminated array of selectable types.
- *
- * Return value: a new folder selector button.
- **/
-GtkWidget *
-evolution_folder_selector_button_new (EvolutionShellClient *shell_client,
- const char *title,
- const char *initial_uri,
- const char *possible_types[])
-{
- EvolutionFolderSelectorButton *folder_selector_button;
-
- folder_selector_button = g_object_new (evolution_folder_selector_button_get_type (), NULL);
-
- evolution_folder_selector_button_construct (folder_selector_button,
- shell_client,
- title,
- initial_uri,
- possible_types);
- return (GtkWidget *)folder_selector_button;
-}
-
-/**
- * evolution_folder_selector_button_set_uri:
- * @folder_selector_button:
- * @uri: the URI (evolution: or physical) to select, or %NULL
- *
- * Attempts to make @folder_selector_button select @uri. If @uri
- * doesn't point to a folder, or points to a folder of an incorrect
- * type for this button, then the selected URI will be unchanged.
- *
- * If @uri is %NULL, the button will be returned to an unselected
- * state.
- *
- * Return value: whether or not the URI was successfully set.
- **/
-gboolean
-evolution_folder_selector_button_set_uri (EvolutionFolderSelectorButton *folder_selector_button,
- const char *uri)
-{
- EvolutionFolderSelectorButtonPrivate *priv;
- GNOME_Evolution_Folder *folder;
- char *slash;
- int i;
-
- g_return_val_if_fail (EVOLUTION_IS_FOLDER_SELECTOR_BUTTON (folder_selector_button), FALSE);
- g_return_val_if_fail (uri != NULL, FALSE);
-
- priv = folder_selector_button->priv;
-
- if (!uri) {
- set_folder (folder_selector_button, NULL);
- return TRUE;
- }
-
- folder = get_folder_for_uri (folder_selector_button, uri);
- if (!folder)
- return FALSE;
-
- for (i = 0; priv->possible_types[i]; i++) {
- if (!strcmp (folder->type, priv->possible_types[i])) {
- set_folder (folder_selector_button, folder);
- return TRUE;
- }
- slash = strchr (priv->possible_types[i], '/');
- if (slash && slash[1] == '*' &&
- !strncmp (folder->type, priv->possible_types[i],
- slash - priv->possible_types[i])) {
- set_folder (folder_selector_button, folder);
- return TRUE;
- }
- }
-
- CORBA_free (folder);
- return FALSE;
-}
-
-/**
- * evolution_folder_selector_button_get_folder:
- * @folder_selector_button:
- *
- * Return value: the currently-selected folder, or %NULL
- **/
-GNOME_Evolution_Folder *
-evolution_folder_selector_button_get_folder (EvolutionFolderSelectorButton *folder_selector_button)
-{
- g_return_val_if_fail (EVOLUTION_IS_FOLDER_SELECTOR_BUTTON (folder_selector_button), NULL);
-
- return folder_selector_button->priv->selected_folder;
-}
-
-
-E_MAKE_TYPE (evolution_folder_selector_button, "EvolutionFolderSelectorButton", EvolutionFolderSelectorButton, class_init, init, PARENT_TYPE)
diff --git a/shell/evolution-folder-selector-button.h b/shell/evolution-folder-selector-button.h
deleted file mode 100644
index b438a54862..0000000000
--- a/shell/evolution-folder-selector-button.h
+++ /dev/null
@@ -1,81 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* evolution-folder-selector-button.h
- *
- * Copyright (C) 2002 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#ifndef __EVOLUTION_FOLDER_SELECTOR_BUTTON_H__
-#define __EVOLUTION_FOLDER_SELECTOR_BUTTON_H__
-
-#include <gtk/gtkbutton.h>
-#include "evolution-shell-client.h"
-
-#include "Evolution.h"
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-#define EVOLUTION_TYPE_FOLDER_SELECTOR_BUTTON (evolution_folder_selector_button_get_type ())
-#define EVOLUTION_FOLDER_SELECTOR_BUTTON(obj) (GTK_CHECK_CAST ((obj), EVOLUTION_TYPE_FOLDER_SELECTOR_BUTTON, EvolutionFolderSelectorButton))
-#define EVOLUTION_FOLDER_SELECTOR_BUTTON_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), EVOLUTION_TYPE_FOLDER_SELECTOR_BUTTON, EvolutionFolderSelectorButtonClass))
-#define EVOLUTION_IS_FOLDER_SELECTOR_BUTTON(obj) (GTK_CHECK_TYPE ((obj), EVOLUTION_TYPE_FOLDER_SELECTOR_BUTTON))
-#define EVOLUTION_IS_FOLDER_SELECTOR_BUTTON_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), EVOLUTION_TYPE_FOLDER_SELECTOR_BUTTON))
-
-
-typedef struct _EvolutionFolderSelectorButton EvolutionFolderSelectorButton;
-typedef struct _EvolutionFolderSelectorButtonPrivate EvolutionFolderSelectorButtonPrivate;
-typedef struct _EvolutionFolderSelectorButtonClass EvolutionFolderSelectorButtonClass;
-
-struct _EvolutionFolderSelectorButton {
- GtkButton parent;
-
- EvolutionFolderSelectorButtonPrivate *priv;
-};
-
-struct _EvolutionFolderSelectorButtonClass {
- GtkButtonClass parent_class;
-
- /* signals */
- void (*popped_up) (EvolutionFolderSelectorButton *button);
- void (*selected) (EvolutionFolderSelectorButton *button, GNOME_Evolution_Folder *folder);
- void (*canceled) (EvolutionFolderSelectorButton *button);
-};
-
-
-GtkType evolution_folder_selector_button_get_type (void);
-
-void evolution_folder_selector_button_construct (EvolutionFolderSelectorButton *folder_selector_button,
- EvolutionShellClient *shell_client,
- const char *title,
- const char *initial_uri,
- const char *possible_types[]);
-GtkWidget *evolution_folder_selector_button_new (EvolutionShellClient *shell_client,
- const char *title,
- const char *initial_uri,
- const char *possible_types[]);
-
-gboolean evolution_folder_selector_button_set_uri (EvolutionFolderSelectorButton *folder_selector_button,
- const char *uri);
-GNOME_Evolution_Folder *evolution_folder_selector_button_get_folder (EvolutionFolderSelectorButton *folder_selector_button);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* __EVOLUTION_FOLDER_SELECTOR_BUTTON_H__ */
diff --git a/shell/evolution-nognome.in b/shell/evolution-nognome.in
deleted file mode 100644
index bd6f15789b..0000000000
--- a/shell/evolution-nognome.in
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/bin/sh
-
-prefix=@prefix@
-exec_prefix=@exec_prefix@
-
-PATH=@prefix@/bin:/usr/gnome/bin:${PATH}
-GNOME2_PATH=@prefix@:/usr/gnome
-LD_LIBRARY_PATH=@prefix@/lib:/usr/gnome/lib:${LD_LIBRARY_PATH}
-
-export LD_LIBRARY_PATH GNOME2_PATH PATH
-
-exec @libexecdir@/evolution-1.3 "$@"
-
diff --git a/shell/evolution-session.c b/shell/evolution-session.c
deleted file mode 100644
index c447dec36c..0000000000
--- a/shell/evolution-session.c
+++ /dev/null
@@ -1,169 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* evolution-session.c
- *
- * Copyright (C) 2000, 2001, 2002 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <gtk/gtksignal.h>
-#include <gal/util/e-util.h>
-
-#include "Evolution.h"
-
-#include "evolution-session.h"
-
-#include "e-shell-marshal.h"
-
-
-#define PARENT_TYPE bonobo_object_get_type ()
-static BonoboObjectClass *parent_class = NULL;
-
-struct _EvolutionSessionPrivate {
- int dummy;
-};
-
-enum {
- LOAD_CONFIGURATION,
- SAVE_CONFIGURATION,
- LAST_SIGNAL
-};
-
-static int signals[LAST_SIGNAL];
-
-
-/* GObject methods. */
-
-static void
-impl_dispose (GObject *object)
-{
- /* Nothing to do here. */
-
- (* G_OBJECT_CLASS (parent_class)->dispose) (object);
-}
-
-static void
-impl_finalize (GObject *object)
-{
- EvolutionSession *session;
- EvolutionSessionPrivate *priv;
-
- session = EVOLUTION_SESSION (object);
- priv = session->priv;
-
- g_free (priv);
-
- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
-}
-
-
-/* CORBA interface implementation. */
-
-static void
-impl_GNOME_Evolution_Session_saveConfiguration (PortableServer_Servant servant,
- const CORBA_char *prefix,
- CORBA_Environment *ev)
-{
- BonoboObject *self;
-
- self = bonobo_object_from_servant (servant);
- g_signal_emit (self, signals[SAVE_CONFIGURATION], 0, prefix);
-}
-
-static void
-impl_GNOME_Evolution_Session_loadConfiguration (PortableServer_Servant servant,
- const CORBA_char *prefix,
- CORBA_Environment *ev)
-{
- BonoboObject *self;
-
- self = bonobo_object_from_servant (servant);
- g_signal_emit (self, signals[LOAD_CONFIGURATION], 0, prefix);
-}
-
-
-/* Initialization. */
-
-static void
-corba_class_init (EvolutionSessionClass *klass)
-{
- POA_GNOME_Evolution_Session__epv *epv = & (EVOLUTION_SESSION_CLASS (klass)->epv);
-
- epv = g_new0 (POA_GNOME_Evolution_Session__epv, 1);
- epv->saveConfiguration = impl_GNOME_Evolution_Session_saveConfiguration;
- epv->loadConfiguration = impl_GNOME_Evolution_Session_loadConfiguration;
-}
-
-static void
-evolution_session_class_init (EvolutionSessionClass *klass)
-{
- GObjectClass *object_class;
-
- object_class = G_OBJECT_CLASS (klass);
- parent_class = g_type_class_ref(PARENT_TYPE);
-
- object_class->dispose = impl_dispose;
- object_class->finalize = impl_finalize;
-
- signals[LOAD_CONFIGURATION]
- = g_signal_new ("load_configuration",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EvolutionSessionClass, load_configuration),
- NULL, NULL,
- e_shell_marshal_NONE__STRING,
- G_TYPE_NONE, 1,
- G_TYPE_STRING);
- signals[SAVE_CONFIGURATION]
- = g_signal_new ("save_configuration",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EvolutionSessionClass, save_configuration),
- NULL, NULL,
- e_shell_marshal_NONE__STRING,
- G_TYPE_NONE, 1,
- G_TYPE_STRING);
-
- corba_class_init (klass);
-}
-
-static void
-evolution_session_init (EvolutionSession *session)
-{
- EvolutionSessionPrivate *priv;
-
- priv = g_new (EvolutionSessionPrivate, 1);
-
- session->priv = priv;
-}
-
-
-EvolutionSession *
-evolution_session_new (void)
-{
- return g_object_new (evolution_session_get_type (), NULL);
-}
-
-
-BONOBO_TYPE_FUNC_FULL (EvolutionSession,
- GNOME_Evolution_Session,
- PARENT_TYPE,
- evolution_session)
diff --git a/shell/evolution-session.h b/shell/evolution-session.h
deleted file mode 100644
index 48d4f18d4d..0000000000
--- a/shell/evolution-session.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* evolution-session.h
- *
- * Copyright (C) 2000, 2001, 2002 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifndef __EVOLUTION_SESSION_H__
-#define __EVOLUTION_SESSION_H__
-
-#include <bonobo/bonobo-object.h>
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-#define EVOLUTION_TYPE_SESSION (evolution_session_get_type ())
-#define EVOLUTION_SESSION(obj) (GTK_CHECK_CAST ((obj), EVOLUTION_TYPE_SESSION, EvolutionSession))
-#define EVOLUTION_SESSION_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), EVOLUTION_TYPE_SESSION, EvolutionSessionClass))
-#define EVOLUTION_IS_SESSION(obj) (GTK_CHECK_TYPE ((obj), EVOLUTION_TYPE_SESSION))
-#define EVOLUTION_IS_SESSION_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), EVOLUTION_TYPE_SESSION))
-
-
-typedef struct _EvolutionSession EvolutionSession;
-typedef struct _EvolutionSessionPrivate EvolutionSessionPrivate;
-typedef struct _EvolutionSessionClass EvolutionSessionClass;
-
-struct _EvolutionSession {
- BonoboObject parent;
-
- EvolutionSessionPrivate *priv;
-};
-
-struct _EvolutionSessionClass {
- BonoboObjectClass parent_class;
-
- POA_GNOME_Evolution_Session__epv epv;
-
- void (* save_configuration) (EvolutionSession *session, const char *prefix);
- void (* load_configuration) (EvolutionSession *session, const char *prefix);
-};
-
-
-GtkType evolution_session_get_type (void);
-EvolutionSession *evolution_session_new (void);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* __EVOLUTION_SESSION_H__ */
diff --git a/shell/evolution-shell-client.c b/shell/evolution-shell-client.c
deleted file mode 100644
index f21e9860b6..0000000000
--- a/shell/evolution-shell-client.c
+++ /dev/null
@@ -1,698 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* evolution-shell-client.c
- *
- * Copyright (C) 2000 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <gdk/gdkx.h>
-#include <gtk/gtkmain.h>
-
-#include <bonobo/bonobo-exception.h>
-#include <bonobo/bonobo-main.h>
-#include <bonobo/bonobo-object.h>
-#include <bonobo/bonobo-widget.h>
-
-#include <gal/util/e-util.h>
-
-#include "evolution-shell-client.h"
-#include "e-shell-corba-icon-utils.h"
-
-
-struct _EvolutionShellClientPrivate {
- GNOME_Evolution_Shell corba_objref;
-
- GNOME_Evolution_Activity activity_interface;
- GNOME_Evolution_Shortcuts shortcuts_interface;
- GNOME_Evolution_StorageRegistry storage_registry_interface;
- GHashTable *icons;
-};
-
-#define PARENT_TYPE G_TYPE_OBJECT
-static GObjectClass *parent_class = NULL;
-
-
-/* Easy-to-use wrapper for Evolution::user_select_folder. */
-
-static PortableServer_ServantBase__epv FolderSelectionListener_base_epv;
-static POA_GNOME_Evolution_FolderSelectionListener__epv FolderSelectionListener_epv;
-static POA_GNOME_Evolution_FolderSelectionListener__vepv FolderSelectionListener_vepv;
-static gboolean FolderSelectionListener_vtables_initialized = FALSE;
-
-struct _FolderSelectionListenerServant {
- POA_GNOME_Evolution_FolderSelectionListener servant;
- GNOME_Evolution_Folder **folder_return;
-};
-typedef struct _FolderSelectionListenerServant FolderSelectionListenerServant;
-
-
-/* Helper functions. */
-
-static CORBA_Object
-query_shell_interface (EvolutionShellClient *shell_client,
- const char *interface_name)
-{
- CORBA_Environment ev;
- CORBA_Object interface_object;
- EvolutionShellClientPrivate *priv;
-
- priv = shell_client->priv;
-
- CORBA_exception_init (&ev);
-
- interface_object = Bonobo_Unknown_queryInterface (evolution_shell_client_corba_objref (shell_client),
- interface_name, &ev);
-
- if (BONOBO_EX (&ev)) {
- g_warning ("EvolutionShellClient: Error querying interface %s on %p -- %s",
- interface_name, shell_client, BONOBO_EX_REPOID (&ev));
- interface_object = CORBA_OBJECT_NIL;
- } else if (CORBA_Object_is_nil (interface_object, &ev)) {
- g_warning ("No interface %s for ShellClient %p", interface_name, shell_client);
- }
-
- CORBA_exception_free (&ev);
-
- return interface_object;
-}
-
-
-static void
-impl_FolderSelectionListener_selected (PortableServer_Servant servant,
- const GNOME_Evolution_Folder *folder,
- CORBA_Environment *ev)
-{
- FolderSelectionListenerServant *listener_servant;
-
- listener_servant = (FolderSelectionListenerServant *) servant;
-
- if (listener_servant->folder_return != NULL) {
- GNOME_Evolution_Folder *ret_folder = GNOME_Evolution_Folder__alloc ();
-
- ret_folder->type = CORBA_string_dup (folder->type);
- ret_folder->description = CORBA_string_dup (folder->description);
- ret_folder->displayName = CORBA_string_dup (folder->displayName);
- ret_folder->physicalUri = CORBA_string_dup (folder->physicalUri);
- ret_folder->customIconName = CORBA_string_dup (folder->customIconName);
- ret_folder->evolutionUri = CORBA_string_dup (folder->evolutionUri);
- ret_folder->unreadCount = folder->unreadCount;
- ret_folder->sortingPriority = folder->sortingPriority;
-
- * (listener_servant->folder_return) = ret_folder;
- }
-
- gtk_main_quit ();
-}
-
-static void
-impl_FolderSelectionListener_cancel (PortableServer_Servant servant,
- CORBA_Environment *ev)
-{
- FolderSelectionListenerServant *listener_servant;
-
- listener_servant = (FolderSelectionListenerServant *) servant;
-
- if (listener_servant->folder_return != NULL)
- * (listener_servant->folder_return) = NULL;
-
- gtk_main_quit ();
-}
-
-static void
-init_FolderSelectionListener_vtables (void)
-{
- FolderSelectionListener_base_epv._private = NULL;
- FolderSelectionListener_base_epv.finalize = NULL;
- FolderSelectionListener_base_epv.default_POA = NULL;
-
- FolderSelectionListener_epv.notifySelected = impl_FolderSelectionListener_selected;
- FolderSelectionListener_epv.notifyCanceled = impl_FolderSelectionListener_cancel;
-
- FolderSelectionListener_vepv._base_epv = &FolderSelectionListener_base_epv;
- FolderSelectionListener_vepv.GNOME_Evolution_FolderSelectionListener_epv = &FolderSelectionListener_epv;
-
- FolderSelectionListener_vtables_initialized = TRUE;
-}
-
-static GNOME_Evolution_FolderSelectionListener
-create_folder_selection_listener_interface (char **result,
- GNOME_Evolution_Folder **folder_return)
-{
- GNOME_Evolution_FolderSelectionListener corba_interface;
- CORBA_Environment ev;
- FolderSelectionListenerServant *servant;
- PortableServer_Servant listener_servant;
-
- if (! FolderSelectionListener_vtables_initialized)
- init_FolderSelectionListener_vtables ();
-
- servant = g_new0 (FolderSelectionListenerServant, 1);
- servant->servant.vepv = &FolderSelectionListener_vepv;
- servant->folder_return = folder_return;
-
- listener_servant = (PortableServer_Servant) servant;
-
- CORBA_exception_init (&ev);
-
- POA_GNOME_Evolution_FolderSelectionListener__init (listener_servant, &ev);
- if (ev._major != CORBA_NO_EXCEPTION) {
- g_free(servant);
- return CORBA_OBJECT_NIL;
- }
-
- CORBA_free (PortableServer_POA_activate_object (bonobo_poa (), listener_servant, &ev));
-
- corba_interface = PortableServer_POA_servant_to_reference (bonobo_poa (), listener_servant, &ev);
- if (ev._major != CORBA_NO_EXCEPTION)
- corba_interface = CORBA_OBJECT_NIL;
-
- CORBA_exception_free (&ev);
-
- return corba_interface;
-}
-
-static int
-count_string_items (const char **list)
-{
- int i;
-
- if (list == NULL)
- return 0;
-
- for (i = 0; list[i] != NULL; i++)
- ;
-
- return i;
-}
-
-static void
-user_select_folder (EvolutionShellClient *shell_client,
- GtkWindow *parent,
- const char *title,
- const char *default_folder,
- const char **possible_types,
- GNOME_Evolution_Folder **folder_return)
-{
- GNOME_Evolution_FolderSelectionListener listener_interface;
- GNOME_Evolution_Shell corba_shell;
- CORBA_Environment ev;
- GNOME_Evolution_Shell_FolderTypeNameList corba_type_name_list;
- CORBA_long_long parent_xid;
- int num_possible_types;
- char *result;
-
- result = NULL;
-
- listener_interface = create_folder_selection_listener_interface (&result,
- folder_return);
- if (listener_interface == CORBA_OBJECT_NIL)
- return;
-
- CORBA_exception_init (&ev);
-
- corba_shell = evolution_shell_client_corba_objref (shell_client);
-
- num_possible_types = count_string_items (possible_types);
-
- corba_type_name_list._length = num_possible_types;
- corba_type_name_list._maximum = num_possible_types;
- corba_type_name_list._buffer = (CORBA_char **) possible_types;
-
- parent_xid = (CORBA_long_long) GDK_WINDOW_XWINDOW (GTK_WIDGET (parent)->window);
-
- GNOME_Evolution_Shell_selectUserFolder (corba_shell, parent_xid,
- listener_interface,
- title,
- default_folder,
- &corba_type_name_list,
- &ev);
-
- if (ev._major != CORBA_NO_EXCEPTION) {
- CORBA_exception_free (&ev);
- return;
- }
-
- gtk_main();
-
- CORBA_Object_release (listener_interface, &ev);
-
- CORBA_exception_free (&ev);
-}
-
-
-/* GObject methods. */
-
-static void
-unref_pixbuf (gpointer name, gpointer pixbuf, gpointer data)
-{
- g_free (name);
- g_object_unref (pixbuf);
-}
-
-static void
-impl_dispose (GObject *object)
-{
- EvolutionShellClient *shell_client;
- EvolutionShellClientPrivate *priv;
- CORBA_Environment ev;
-
- shell_client = EVOLUTION_SHELL_CLIENT (object);
- priv = shell_client->priv;
-
- CORBA_exception_init (&ev);
-
- if (priv->corba_objref != CORBA_OBJECT_NIL) {
- Bonobo_Unknown_unref (priv->corba_objref, &ev);
- if (ev._major != CORBA_NO_EXCEPTION)
- g_warning ("EvolutionShellClient::destroy: "
- "Error unreffing the ::Shell interface -- %s\n",
- BONOBO_EX_REPOID (&ev));
- CORBA_Object_release (priv->corba_objref, &ev);
- priv->corba_objref = CORBA_OBJECT_NIL;
- }
-
- if (priv->activity_interface != CORBA_OBJECT_NIL) {
- Bonobo_Unknown_unref (priv->activity_interface, &ev);
- if (ev._major != CORBA_NO_EXCEPTION)
- g_warning ("EvolutionShellClient::destroy: "
- "Error unreffing the ::Activity interface -- %s\n",
- BONOBO_EX_REPOID (&ev));
- CORBA_Object_release (priv->activity_interface, &ev);
- priv->activity_interface = CORBA_OBJECT_NIL;
- }
-
- if (priv->shortcuts_interface != CORBA_OBJECT_NIL) {
- Bonobo_Unknown_unref (priv->shortcuts_interface, &ev);
- if (ev._major != CORBA_NO_EXCEPTION)
- g_warning ("EvolutionShellClient::destroy: "
- "Error unreffing the ::Shortcuts interface -- %s\n",
- BONOBO_EX_REPOID (&ev));
- CORBA_Object_release (priv->shortcuts_interface, &ev);
- priv->shortcuts_interface = CORBA_OBJECT_NIL;
- }
-
- if (priv->storage_registry_interface != CORBA_OBJECT_NIL) {
- Bonobo_Unknown_unref (priv->storage_registry_interface, &ev);
- if (ev._major != CORBA_NO_EXCEPTION)
- g_warning ("EvolutionShellClient::destroy: "
- "Error unreffing the ::StorageRegistry interface -- %s\n",
- BONOBO_EX_REPOID (&ev));
- CORBA_Object_release (priv->storage_registry_interface, &ev);
- priv->storage_registry_interface = CORBA_OBJECT_NIL;
- }
-
- CORBA_exception_free (&ev);
-
- g_hash_table_foreach (priv->icons, unref_pixbuf, NULL);
- g_hash_table_destroy (priv->icons);
-
- (* G_OBJECT_CLASS (parent_class)->dispose) (object);
-}
-
-static void
-impl_finalize (GObject *object)
-{
- EvolutionShellClient *shell_client;
- EvolutionShellClientPrivate *priv;
-
- shell_client = EVOLUTION_SHELL_CLIENT (object);
- priv = shell_client->priv;
-
- g_free (priv);
-
- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
-}
-
-
-static void
-class_init (EvolutionShellClientClass *klass)
-{
- GObjectClass *object_class;
-
- parent_class = g_type_class_ref(PARENT_TYPE);
-
- object_class = G_OBJECT_CLASS (klass);
-
- object_class->dispose = impl_dispose;
- object_class->finalize = impl_finalize;
-}
-
-static void
-init (EvolutionShellClient *shell_client)
-{
- EvolutionShellClientPrivate *priv;
-
- priv = g_new (EvolutionShellClientPrivate, 1);
- priv->corba_objref = CORBA_OBJECT_NIL;
- priv->activity_interface = CORBA_OBJECT_NIL;
- priv->shortcuts_interface = CORBA_OBJECT_NIL;
- priv->storage_registry_interface = CORBA_OBJECT_NIL;
- priv->icons = g_hash_table_new (g_str_hash, g_str_equal);
-
- shell_client->priv = priv;
-}
-
-
-/**
- * evolution_shell_client_construct:
- * @shell_client:
- * @corba_shell:
- *
- * Construct @shell_client associating it to @corba_shell.
- **/
-void
-evolution_shell_client_construct (EvolutionShellClient *shell_client,
- GNOME_Evolution_Shell corba_shell)
-{
- EvolutionShellClientPrivate *priv;
- CORBA_Environment ev;
-
- g_return_if_fail (shell_client != NULL);
- g_return_if_fail (EVOLUTION_IS_SHELL_CLIENT (shell_client));
- g_return_if_fail (corba_shell != CORBA_OBJECT_NIL);
-
- priv = shell_client->priv;
- g_return_if_fail (priv->activity_interface == CORBA_OBJECT_NIL);
-
- CORBA_exception_init (&ev);
-
- priv->corba_objref = CORBA_Object_duplicate (corba_shell, &ev);
- Bonobo_Unknown_ref (priv->corba_objref, &ev);
-
- CORBA_exception_free (&ev);
-
- priv->activity_interface = query_shell_interface (shell_client, "IDL:GNOME/Evolution/Activity:1.0");
- priv->shortcuts_interface = query_shell_interface (shell_client, "IDL:GNOME/Evolution/Shortcuts:1.0");
- priv->storage_registry_interface = query_shell_interface (shell_client, "IDL:GNOME/Evolution/StorageRegistry:1.0");
-}
-
-/**
- * evolution_shell_client_new:
- * @corba_shell: A pointer to the CORBA Evolution::Shell interface.
- *
- * Create a new client object for @corba_shell.
- *
- * Return value: A pointer to the Evolution::Shell client BonoboObject.
- **/
-EvolutionShellClient *
-evolution_shell_client_new (GNOME_Evolution_Shell corba_shell)
-{
- EvolutionShellClient *shell_client;
-
- shell_client = g_object_new (evolution_shell_client_get_type (), NULL);
-
- evolution_shell_client_construct (shell_client, corba_shell);
-
- if (evolution_shell_client_corba_objref (shell_client) == CORBA_OBJECT_NIL) {
- g_object_unref (shell_client);
- return NULL;
- }
-
- return shell_client;
-}
-
-/**
- * evolution_shell_client_corba_objref:
- * @shell_client:
- *
- * Return value: Return the CORBA objref associated with this shell client.
- **/
-GNOME_Evolution_Shell
-evolution_shell_client_corba_objref (EvolutionShellClient *shell_client)
-{
- g_return_val_if_fail (EVOLUTION_IS_SHELL_CLIENT (shell_client), CORBA_OBJECT_NIL);
-
- return shell_client->priv->corba_objref;
-}
-
-
-/**
- * evolution_shell_client_user_select_folder:
- * @shell_client: A EvolutionShellClient object
- * @parent: Parent window for the dialog (must be realized when invoking)
- * @title: The title for the folder selection dialog
- * @default_folder: URI (physical or evolution:) of the folder initially selected on the dialog
- * @folder_return:
- *
- * Pop up the shell's folder selection dialog with the specified
- * @title and @default_folder as the initially selected folder. On
- * return, set *@folder_return to the folder structure for the
- * selected folder (or %NULL if the user cancelled the dialog). (The
- * dialog is modal.)
- **/
-void
-evolution_shell_client_user_select_folder (EvolutionShellClient *shell_client,
- GtkWindow *parent,
- const char *title,
- const char *default_folder,
- const char **possible_types,
- GNOME_Evolution_Folder **folder_return)
-{
- /* Do this first so it can be checked as a return value, even
- * if we g_return_if_fail.
- */
- if (folder_return)
- *folder_return = CORBA_OBJECT_NIL;
-
- g_return_if_fail (shell_client != NULL);
- g_return_if_fail (EVOLUTION_IS_SHELL_CLIENT (shell_client));
- g_return_if_fail (title != NULL);
- g_return_if_fail (default_folder != NULL);
- g_return_if_fail (parent == NULL || GTK_WIDGET_REALIZED (parent));
-
- user_select_folder (shell_client, parent, title, default_folder,
- possible_types, folder_return);
-}
-
-
-/**
- * evolution_shell_client_get_activity_interface:
- * @shell_client: An EvolutionShellClient object
- *
- * Get the GNOME::Evolution::Activity for the shell associated with
- * @shell_client.
- *
- * Return value: A CORBA Object represeting the GNOME::Evolution::Activity
- * interface.
- **/
-GNOME_Evolution_Activity
-evolution_shell_client_get_activity_interface (EvolutionShellClient *shell_client)
-{
- g_return_val_if_fail (shell_client != NULL, CORBA_OBJECT_NIL);
- g_return_val_if_fail (EVOLUTION_IS_SHELL_CLIENT (shell_client), CORBA_OBJECT_NIL);
-
- return shell_client->priv->activity_interface;
-}
-
-/**
- * evolution_shell_client_get_shortcuts_interface:
- * @shell_client: An EvolutionShellClient object
- *
- * Get the GNOME::Evolution::Shortcuts for the shell associated with
- * @shell_client.
- *
- * Return value: A CORBA Object represeting the GNOME::Evolution::Shortcuts
- * interface.
- **/
-GNOME_Evolution_Shortcuts
-evolution_shell_client_get_shortcuts_interface (EvolutionShellClient *shell_client)
-{
- g_return_val_if_fail (shell_client != NULL, CORBA_OBJECT_NIL);
- g_return_val_if_fail (EVOLUTION_IS_SHELL_CLIENT (shell_client), CORBA_OBJECT_NIL);
-
- return shell_client->priv->shortcuts_interface;
-}
-
-/**
- * evolution_shell_client_get_storage_registry_interface:
- * @shell_client: An EvolutionShellClient object
- *
- * Get the GNOME::Evolution::StorageRegistry for the shell associated
- * with @shell_client.
- *
- * Return value: A CORBA Object represeting the
- * GNOME::Evolution::StorageRegistry interface.
- **/
-GNOME_Evolution_StorageRegistry
-evolution_shell_client_get_storage_registry_interface (EvolutionShellClient *shell_client)
-{
- g_return_val_if_fail (shell_client != NULL, CORBA_OBJECT_NIL);
- g_return_val_if_fail (EVOLUTION_IS_SHELL_CLIENT (shell_client), CORBA_OBJECT_NIL);
-
- return shell_client->priv->storage_registry_interface;
-}
-
-
-/**
- * evolution_shell_client_get_local_storage:
- * @shell_client: An EvolutionShellClient object
- *
- * Retrieve the local storage interface for this shell.
- *
- * Return value: a pointer to the CORBA object implementing the local storage
- * in the shell associated with @shell_client.
- **/
-GNOME_Evolution_Storage
-evolution_shell_client_get_local_storage (EvolutionShellClient *shell_client)
-{
- GNOME_Evolution_Shell corba_shell;
- GNOME_Evolution_Storage corba_local_storage;
- CORBA_Environment ev;
-
- g_return_val_if_fail (shell_client != NULL, CORBA_OBJECT_NIL);
- g_return_val_if_fail (EVOLUTION_IS_SHELL_CLIENT (shell_client), CORBA_OBJECT_NIL);
-
- CORBA_exception_init (&ev);
-
- corba_shell = evolution_shell_client_corba_objref (shell_client);
- if (corba_shell == CORBA_OBJECT_NIL) {
- g_warning ("evolution_shell_client_get_local_storage() invoked on an "
- "EvolutionShellClient that doesn't have a CORBA objref???");
- CORBA_exception_free (&ev);
- return CORBA_OBJECT_NIL;
- }
-
- corba_local_storage = GNOME_Evolution_Shell_getLocalStorage (corba_shell, &ev);
- if (ev._major != CORBA_NO_EXCEPTION) {
- g_warning ("evolution_shell_client_get_local_storage() failing -- %s ???",
- BONOBO_EX_REPOID (&ev));
- CORBA_exception_free (&ev);
- return CORBA_OBJECT_NIL;
- }
-
- CORBA_exception_free (&ev);
-
- return corba_local_storage;
-}
-
-void
-evolution_shell_client_set_line_status (EvolutionShellClient *shell_client,
- gboolean line_status)
-{
- GNOME_Evolution_Shell corba_shell;
- CORBA_Environment ev;
-
- g_return_if_fail (shell_client != NULL);
- g_return_if_fail (EVOLUTION_IS_SHELL_CLIENT (shell_client));
-
- CORBA_exception_init (&ev);
-
- corba_shell = evolution_shell_client_corba_objref (shell_client);
- if (corba_shell == CORBA_OBJECT_NIL)
- return;
-
- GNOME_Evolution_Shell_setLineStatus (corba_shell, line_status, &ev);
-
- CORBA_exception_free (&ev);
-}
-
-
-GdkPixbuf *
-evolution_shell_client_get_pixbuf_for_type (EvolutionShellClient *shell_client,
- const char *folder_type,
- gboolean mini)
-{
- GNOME_Evolution_Shell corba_shell;
- CORBA_Environment ev;
- GNOME_Evolution_Icon *icon;
- GdkPixbuf *pixbuf;
- char *hash_name;
-
- g_return_val_if_fail (EVOLUTION_IS_SHELL_CLIENT (shell_client), NULL);
-
- hash_name = g_strdup_printf ("%s/%s", folder_type,
- mini ? "mini" : "large");
- pixbuf = g_hash_table_lookup (shell_client->priv->icons, hash_name);
- if (!pixbuf) {
- corba_shell = evolution_shell_client_corba_objref (shell_client);
- g_return_val_if_fail (corba_shell != CORBA_OBJECT_NIL, NULL);
-
- CORBA_exception_init (&ev);
- icon = GNOME_Evolution_Shell_getIconByType (corba_shell,
- folder_type, mini,
- &ev);
- if (ev._major != CORBA_NO_EXCEPTION) {
- g_free (hash_name);
- return NULL;
- }
- CORBA_exception_free (&ev);
-
- pixbuf = e_new_gdk_pixbuf_from_corba_icon (icon, icon->width,
- icon->height);
- CORBA_free (icon);
-
- g_hash_table_insert (shell_client->priv->icons,
- hash_name, pixbuf);
- } else
- g_free (hash_name);
-
- g_object_ref (pixbuf);
- return pixbuf;
-}
-
-
-GtkWidget *
-evolution_shell_client_create_storage_set_view (EvolutionShellClient *shell_client,
- Bonobo_UIComponent uic,
- Bonobo_Control *bonobo_control_iface_return,
- GNOME_Evolution_StorageSetView *storage_set_view_iface_return,
- CORBA_Environment *ev)
-{
- GNOME_Evolution_Shell corba_shell;
- CORBA_Environment my_ev;
- Bonobo_Control control;
- GtkWidget *control_widget;
-
- g_return_val_if_fail (EVOLUTION_IS_SHELL_CLIENT (shell_client), NULL);
-
- CORBA_exception_init (&my_ev);
- if (ev == NULL)
- ev = &my_ev;
-
- corba_shell = evolution_shell_client_corba_objref (shell_client);
-
- control = GNOME_Evolution_Shell_createStorageSetView (corba_shell, ev);
- if (BONOBO_EX (ev)) {
- g_warning ("Cannot create StorageSetView -- %s", BONOBO_EX_REPOID (ev));
- CORBA_exception_free (&my_ev);
- return NULL;
- }
-
- if (bonobo_control_iface_return != NULL)
- *bonobo_control_iface_return = control;
-
- control_widget = bonobo_widget_new_control_from_objref (control, uic);
-
- if (storage_set_view_iface_return != NULL) {
- *storage_set_view_iface_return = Bonobo_Unknown_queryInterface (control,
- "IDL:GNOME/Evolution/StorageSetView:1.0",
- ev);
- if (BONOBO_EX (ev))
- *storage_set_view_iface_return = NULL;
- }
-
- CORBA_exception_free (&my_ev);
- return control_widget;
-}
-
-
-E_MAKE_TYPE (evolution_shell_client, "EvolutionShellClient", EvolutionShellClient, class_init, init, PARENT_TYPE)
diff --git a/shell/evolution-shell-client.h b/shell/evolution-shell-client.h
deleted file mode 100644
index 18fe144929..0000000000
--- a/shell/evolution-shell-client.h
+++ /dev/null
@@ -1,97 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* evolution-shell-client.h
- *
- * Copyright (C) 2000 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifndef __EVOLUTION_SHELL_CLIENT_H__
-#define __EVOLUTION_SHELL_CLIENT_H__
-
-#include <gtk/gtkwindow.h>
-#include <gdk-pixbuf/gdk-pixbuf.h>
-
-#include <glib-object.h>
-
-#include "Evolution.h"
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-#define EVOLUTION_TYPE_SHELL_CLIENT (evolution_shell_client_get_type ())
-#define EVOLUTION_SHELL_CLIENT(obj) (GTK_CHECK_CAST ((obj), EVOLUTION_TYPE_SHELL_CLIENT, EvolutionShellClient))
-#define EVOLUTION_SHELL_CLIENT_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), EVOLUTION_TYPE_SHELL_CLIENT, EvolutionShellClientClass))
-#define EVOLUTION_IS_SHELL_CLIENT(obj) (GTK_CHECK_TYPE ((obj), EVOLUTION_TYPE_SHELL_CLIENT))
-#define EVOLUTION_IS_SHELL_CLIENT_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), EVOLUTION_TYPE_SHELL_CLIENT))
-
-
-typedef struct _EvolutionShellClient EvolutionShellClient;
-typedef struct _EvolutionShellClientPrivate EvolutionShellClientPrivate;
-typedef struct _EvolutionShellClientClass EvolutionShellClientClass;
-
-struct _EvolutionShellClient {
- GObject base;
-
- EvolutionShellClientPrivate *priv;
-};
-
-struct _EvolutionShellClientClass {
- GObjectClass parent_class;
-};
-
-
-GtkType evolution_shell_client_get_type (void);
-void evolution_shell_client_construct (EvolutionShellClient *shell_client,
- GNOME_Evolution_Shell corba_shell);
-EvolutionShellClient *evolution_shell_client_new (GNOME_Evolution_Shell shell);
-
-GNOME_Evolution_Shell evolution_shell_client_corba_objref (EvolutionShellClient *shell_client);
-
-void evolution_shell_client_user_select_folder (EvolutionShellClient *shell_client,
- GtkWindow *parent,
- const char *title,
- const char *default_folder,
- const char **possible_types,
- GNOME_Evolution_Folder **folder_return);
-
-GNOME_Evolution_Activity evolution_shell_client_get_activity_interface (EvolutionShellClient *shell_client);
-GNOME_Evolution_Shortcuts evolution_shell_client_get_shortcuts_interface (EvolutionShellClient *shell_client);
-GNOME_Evolution_StorageRegistry evolution_shell_client_get_storage_registry_interface (EvolutionShellClient *shell_client);
-
-GNOME_Evolution_Storage evolution_shell_client_get_local_storage (EvolutionShellClient *shell_client);
-
-void evolution_shell_client_set_line_status (EvolutionShellClient *shell_client,
- gboolean online);
-
-GdkPixbuf *evolution_shell_client_get_pixbuf_for_type (EvolutionShellClient *shell_client,
- const char *folder_type,
- gboolean mini);
-
-GtkWidget *evolution_shell_client_create_storage_set_view (EvolutionShellClient *shell_client,
- Bonobo_UIComponent uic,
- Bonobo_Control *bonobo_control_iface_return,
- GNOME_Evolution_StorageSetView *storage_set_view_iface_return,
- CORBA_Environment *ev);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* __EVOLUTION_SHELL_CLIENT_H__ */
diff --git a/shell/evolution-shell-component-client.c b/shell/evolution-shell-component-client.c
deleted file mode 100644
index 621741a66f..0000000000
--- a/shell/evolution-shell-component-client.c
+++ /dev/null
@@ -1,924 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* evolution-shell-component-client.c
- *
- * Copyright (C) 2000, 2001 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <string.h>
-#include <glib.h>
-#include <gtk/gtksignal.h>
-#include <gtk/gtktypeutils.h>
-
-#include <bonobo-activation/bonobo-activation.h>
-
-#include <bonobo/bonobo-exception.h>
-#include <bonobo/bonobo-main.h>
-#include <bonobo/bonobo-widget.h>
-
-#include <gal/util/e-util.h>
-
-#include "evolution-shell-component-client.h"
-
-
-char *evolution_debug_log;
-
-#define PARENT_TYPE G_TYPE_OBJECT
-static GObjectClass *parent_class = NULL;
-
-struct _EvolutionShellComponentClientPrivate {
- GNOME_Evolution_ShellComponent corba_objref;
-
- char *id;
-
- EvolutionShellComponentClientCallback callback;
- void *callback_data;
-
- GNOME_Evolution_ShellComponentListener listener_interface;
- PortableServer_Servant listener_servant;
-
- GNOME_Evolution_ShellComponentDnd_SourceFolder dnd_source_folder_interface;
- GNOME_Evolution_ShellComponentDnd_DestinationFolder dnd_destination_folder_interface;
- GNOME_Evolution_Offline offline_interface;
-};
-
-
-#define RETURN_ERROR_IF_FAIL(cond) \
- g_return_val_if_fail ((cond), EVOLUTION_SHELL_COMPONENT_INVALIDARG)
-
-
-/* Utility functions. */
-
-static EvolutionShellComponentResult
-corba_exception_to_result (const CORBA_Environment *ev)
-{
- if (ev->_major == CORBA_NO_EXCEPTION)
- return EVOLUTION_SHELL_COMPONENT_OK;
-
- if (ev->_major == CORBA_USER_EXCEPTION) {
- if (strcmp (BONOBO_EX_REPOID (ev), ex_GNOME_Evolution_ShellComponent_AlreadyOwned) == 0)
- return EVOLUTION_SHELL_COMPONENT_ALREADYOWNED;
- if (strcmp (BONOBO_EX_REPOID (ev), ex_GNOME_Evolution_ShellComponent_OldOwnerHasDied) == 0)
- return EVOLUTION_SHELL_COMPONENT_OLDOWNERHASDIED;
- if (strcmp (BONOBO_EX_REPOID (ev), ex_GNOME_Evolution_ShellComponent_NotOwned) == 0)
- return EVOLUTION_SHELL_COMPONENT_NOTOWNED;
- if (strcmp (BONOBO_EX_REPOID (ev), ex_GNOME_Evolution_ShellComponent_NotFound) == 0)
- return EVOLUTION_SHELL_COMPONENT_NOTFOUND;
- if (strcmp (BONOBO_EX_REPOID (ev), ex_GNOME_Evolution_ShellComponent_UnsupportedType) == 0)
- return EVOLUTION_SHELL_COMPONENT_UNSUPPORTEDTYPE;
- if (strcmp (BONOBO_EX_REPOID (ev), ex_GNOME_Evolution_ShellComponent_InternalError) == 0)
- return EVOLUTION_SHELL_COMPONENT_INTERNALERROR;
- if (strcmp (BONOBO_EX_REPOID (ev), ex_GNOME_Evolution_ShellComponent_Busy) == 0)
- return EVOLUTION_SHELL_COMPONENT_BUSY;
- if (strcmp (BONOBO_EX_REPOID (ev), ex_GNOME_Evolution_ShellComponent_UnsupportedSchema) == 0)
- return EVOLUTION_SHELL_COMPONENT_UNSUPPORTEDSCHEMA;
-
- return EVOLUTION_SHELL_COMPONENT_UNKNOWNERROR;
- } else {
- /* FIXME maybe we need something more specific here. */
- return EVOLUTION_SHELL_COMPONENT_CORBAERROR;
- }
-}
-
-static EvolutionShellComponentResult
-shell_component_result_from_corba_exception (const CORBA_Environment *ev)
-{
- if (ev->_major == CORBA_NO_EXCEPTION)
- return EVOLUTION_SHELL_COMPONENT_OK;
- if (ev->_major == CORBA_SYSTEM_EXCEPTION)
- return EVOLUTION_SHELL_COMPONENT_CORBAERROR;
- return EVOLUTION_SHELL_COMPONENT_CORBAERROR; /* FIXME? */
-}
-
-
-/* CORBA listener interface implementation. */
-
-static PortableServer_ServantBase__epv ShellComponentListener_base_epv;
-static POA_GNOME_Evolution_ShellComponentListener__epv ShellComponentListener_epv;
-static POA_GNOME_Evolution_ShellComponentListener__vepv ShellComponentListener_vepv;
-static gboolean ShellComponentListener_vepv_initialized = FALSE;
-
-static void ShellComponentListener_vepv_initialize (void);
-static void dispatch_callback (EvolutionShellComponentClient *shell_component_client,
- EvolutionShellComponentResult result);
-
-struct _ShellComponentListenerServant {
- POA_GNOME_Evolution_ShellComponentListener servant;
- EvolutionShellComponentClient *component_client;
-};
-typedef struct _ShellComponentListenerServant ShellComponentListenerServant;
-
-static PortableServer_Servant *
-create_ShellComponentListener_servant (EvolutionShellComponentClient *component_client)
-{
- ShellComponentListenerServant *servant;
-
- if (! ShellComponentListener_vepv_initialized)
- ShellComponentListener_vepv_initialize ();
-
- servant = g_new0 (ShellComponentListenerServant, 1);
- servant->servant.vepv = &ShellComponentListener_vepv;
- servant->component_client = component_client;
-
- return (PortableServer_Servant) servant;
-}
-
-static void
-free_ShellComponentListener_servant (PortableServer_Servant servant)
-{
- g_free (servant);
-}
-
-static EvolutionShellComponentClient *
-component_client_from_ShellComponentListener_servant (PortableServer_Servant servant)
-{
- ShellComponentListenerServant *listener_servant;
-
- listener_servant = (ShellComponentListenerServant *) servant;
- return listener_servant->component_client;
-}
-
-static EvolutionShellComponentResult
-result_from_async_corba_result (GNOME_Evolution_ShellComponentListener_Result async_corba_result)
-{
- switch (async_corba_result) {
- case GNOME_Evolution_ShellComponentListener_OK:
- return EVOLUTION_SHELL_COMPONENT_OK;
- case GNOME_Evolution_ShellComponentListener_CANCEL:
- return EVOLUTION_SHELL_COMPONENT_CANCEL;
- case GNOME_Evolution_ShellComponentListener_UNSUPPORTED_OPERATION:
- return EVOLUTION_SHELL_COMPONENT_UNSUPPORTEDOPERATION;
- case GNOME_Evolution_ShellComponentListener_EXISTS:
- return EVOLUTION_SHELL_COMPONENT_EXISTS;
- case GNOME_Evolution_ShellComponentListener_INVALID_URI:
- return EVOLUTION_SHELL_COMPONENT_INVALIDURI;
- case GNOME_Evolution_ShellComponentListener_PERMISSION_DENIED:
- return EVOLUTION_SHELL_COMPONENT_PERMISSIONDENIED;
- case GNOME_Evolution_ShellComponentListener_HAS_SUBFOLDERS:
- return EVOLUTION_SHELL_COMPONENT_HASSUBFOLDERS;
- case GNOME_Evolution_ShellComponentListener_NO_SPACE:
- return EVOLUTION_SHELL_COMPONENT_NOSPACE;
- default:
- return EVOLUTION_SHELL_COMPONENT_UNKNOWNERROR;
- }
-}
-
-static void
-impl_ShellComponentListener_report_result (PortableServer_Servant servant,
- const GNOME_Evolution_ShellComponentListener_Result result,
- CORBA_Environment *ev)
-{
- EvolutionShellComponentClient *component_client;
-
- component_client = component_client_from_ShellComponentListener_servant (servant);
- dispatch_callback (component_client, result_from_async_corba_result (result));
-}
-
-static void
-ShellComponentListener_vepv_initialize (void)
-{
- ShellComponentListener_base_epv._private = NULL;
- ShellComponentListener_base_epv.finalize = NULL;
- ShellComponentListener_base_epv.default_POA = NULL;
-
- ShellComponentListener_epv.notifyResult = impl_ShellComponentListener_report_result;
-
- ShellComponentListener_vepv._base_epv = & ShellComponentListener_base_epv;
- ShellComponentListener_vepv.GNOME_Evolution_ShellComponentListener_epv = & ShellComponentListener_epv;
-
- ShellComponentListener_vepv_initialized = TRUE;
-}
-
-static void
-create_listener_interface (EvolutionShellComponentClient *shell_component_client)
-{
- EvolutionShellComponentClientPrivate *priv;
- PortableServer_Servant listener_servant;
- GNOME_Evolution_ShellComponentListener corba_interface;
- CORBA_Environment ev;
-
- priv = shell_component_client->priv;
-
- listener_servant = create_ShellComponentListener_servant (shell_component_client);
-
- CORBA_exception_init (&ev);
-
- POA_GNOME_Evolution_ShellComponentListener__init (listener_servant, &ev);
- if (ev._major != CORBA_NO_EXCEPTION) {
- free_ShellComponentListener_servant (listener_servant);
- return;
- }
-
- CORBA_free (PortableServer_POA_activate_object (bonobo_poa (), listener_servant, &ev));
-
- corba_interface = PortableServer_POA_servant_to_reference (bonobo_poa (), listener_servant, &ev);
- if (ev._major != CORBA_NO_EXCEPTION) {
- corba_interface = CORBA_OBJECT_NIL;
- free_ShellComponentListener_servant (listener_servant);
- }
-
- CORBA_exception_free (&ev);
-
- priv->listener_servant = listener_servant;
- priv->listener_interface = corba_interface;
-}
-
-static void
-destroy_listener_interface (EvolutionShellComponentClient *client)
-{
- EvolutionShellComponentClientPrivate *priv;
- CORBA_Environment ev;
- PortableServer_ObjectId *oid;
-
- priv = client->priv;
- CORBA_exception_init (&ev);
-
- oid = PortableServer_POA_servant_to_id (bonobo_poa (), priv->listener_servant, &ev);
- PortableServer_POA_deactivate_object (bonobo_poa (), oid, &ev);
- CORBA_free (oid);
-
- CORBA_Object_release (priv->listener_interface, &ev);
- /* free_ShellComponentListener_servant (priv->listener_servant); */
-
- CORBA_exception_free (&ev);
-}
-
-static void
-dispatch_callback (EvolutionShellComponentClient *shell_component_client,
- EvolutionShellComponentResult result)
-{
- EvolutionShellComponentClientPrivate *priv;
- EvolutionShellComponentClientCallback callback;
- void *callback_data;
-
- priv = shell_component_client->priv;
-
- g_return_if_fail (priv->callback != NULL);
- g_return_if_fail (priv->listener_servant != NULL);
-
- /* Notice that we destroy the interface and reset the callback information before
- dispatching the callback so that the callback can generate another request. */
-
- destroy_listener_interface (shell_component_client);
-
- priv->listener_servant = NULL;
- priv->listener_interface = CORBA_OBJECT_NIL;
-
- callback = priv->callback;
- callback_data = priv->callback_data;
-
- priv->callback = NULL;
- priv->callback_data = NULL;
-
- (* callback) (shell_component_client, result, callback_data);
-}
-
-
-/* GObject methods. */
-
-static void
-impl_dispose (GObject *object)
-{
- EvolutionShellComponentClient *shell_component_client;
- EvolutionShellComponentClientPrivate *priv;
- CORBA_Environment ev;
-
- shell_component_client = EVOLUTION_SHELL_COMPONENT_CLIENT (object);
- priv = shell_component_client->priv;
-
- if (priv == NULL)
- return;
-
- g_free (priv->id);
- priv->id = NULL;
-
- if (priv->callback != NULL) {
- dispatch_callback (shell_component_client, EVOLUTION_SHELL_COMPONENT_INTERRUPTED);
- priv->callback = NULL;
- }
-
- CORBA_exception_init (&ev);
-
- if (priv->corba_objref != CORBA_OBJECT_NIL) {
- Bonobo_Unknown_unref (priv->corba_objref, &ev);
- CORBA_Object_release (priv->corba_objref, &ev);
- priv->corba_objref = CORBA_OBJECT_NIL;
- }
-
- if (priv->dnd_source_folder_interface != CORBA_OBJECT_NIL) {
- Bonobo_Unknown_unref (priv->dnd_source_folder_interface, &ev);
- CORBA_Object_release (priv->dnd_source_folder_interface, &ev);
- priv->dnd_source_folder_interface = CORBA_OBJECT_NIL;
- }
-
- if (priv->dnd_destination_folder_interface != CORBA_OBJECT_NIL) {
- Bonobo_Unknown_unref (priv->dnd_destination_folder_interface, &ev);
- CORBA_Object_release (priv->dnd_destination_folder_interface, &ev);
- priv->dnd_destination_folder_interface = CORBA_OBJECT_NIL;
- }
-
- if (priv->offline_interface != CORBA_OBJECT_NIL) {
- Bonobo_Unknown_unref (priv->offline_interface, &ev);
- CORBA_Object_release (priv->offline_interface, &ev);
- priv->offline_interface = CORBA_OBJECT_NIL;
- }
-
- if (priv->listener_interface != CORBA_OBJECT_NIL) {
- destroy_listener_interface (shell_component_client);
- priv->listener_interface = CORBA_OBJECT_NIL;
- }
-
- CORBA_exception_free (&ev);
-
- (* G_OBJECT_CLASS (parent_class)->dispose) (object);
-}
-
-static void
-impl_finalize (GObject *object)
-{
- EvolutionShellComponentClient *client;
-
- client = EVOLUTION_SHELL_COMPONENT_CLIENT (object);
-
- g_free (client->priv);
-
- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
-}
-
-
-static void
-class_init (EvolutionShellComponentClientClass *klass)
-{
- GObjectClass *object_class;
-
- object_class = G_OBJECT_CLASS (klass);
- parent_class = g_type_class_ref(PARENT_TYPE);
-
- object_class->dispose = impl_dispose;
- object_class->finalize = impl_finalize;
-}
-
-static void
-init (EvolutionShellComponentClient *shell_component_client)
-{
- EvolutionShellComponentClientPrivate *priv;
-
- priv = g_new (EvolutionShellComponentClientPrivate, 1);
-
- priv->corba_objref = CORBA_OBJECT_NIL;
-
- priv->id = NULL;
-
- priv->listener_interface = CORBA_OBJECT_NIL;
- priv->listener_servant = NULL;
-
- priv->callback = NULL;
- priv->callback_data = NULL;
-
- priv->dnd_source_folder_interface = CORBA_OBJECT_NIL;
- priv->dnd_destination_folder_interface = CORBA_OBJECT_NIL;
- priv->offline_interface = CORBA_OBJECT_NIL;
-
- shell_component_client->priv = priv;
-}
-
-
-/* Construction. */
-
-void
-evolution_shell_component_client_construct (EvolutionShellComponentClient *shell_component_client,
- const char *id,
- CORBA_Object corba_object)
-{
- EvolutionShellComponentClientPrivate *priv;
-
- g_return_if_fail (shell_component_client != NULL);
- g_return_if_fail (EVOLUTION_IS_SHELL_COMPONENT_CLIENT (shell_component_client));
- g_return_if_fail (corba_object != CORBA_OBJECT_NIL);
-
- priv = shell_component_client->priv;
- priv->corba_objref = corba_object;
- priv->id = g_strdup (id);
-}
-
-EvolutionShellComponentClient *
-evolution_shell_component_client_new (const char *id,
- CORBA_Environment *ev)
-{
- EvolutionShellComponentClient *new;
- CORBA_Object corba_object;
- CORBA_Environment *local_ev;
- CORBA_Environment static_ev;
-
- g_return_val_if_fail (id != NULL, NULL);
-
- CORBA_exception_init (&static_ev);
-
- if (ev == NULL)
- local_ev = &static_ev;
- else
- local_ev = ev;
-
- corba_object = bonobo_activation_activate_from_id ((char *) id, 0, NULL, ev);
- if (ev->_major != CORBA_NO_EXCEPTION || corba_object == NULL) {
- CORBA_exception_free (&static_ev);
- return NULL;
- }
-
- CORBA_exception_free (&static_ev);
-
- new = g_object_new (evolution_shell_component_client_get_type (), NULL);
- evolution_shell_component_client_construct (new, id, corba_object);
-
- return new;
-}
-
-GNOME_Evolution_ShellComponent
-evolution_shell_component_client_corba_objref (EvolutionShellComponentClient *component_client)
-{
- g_return_val_if_fail (EVOLUTION_IS_SHELL_COMPONENT_CLIENT (component_client), NULL);
-
- return component_client->priv->corba_objref;
-}
-
-
-/* Properties. */
-
-const char *
-evolution_shell_component_client_get_id (EvolutionShellComponentClient *shell_component_client)
-{
- EvolutionShellComponentClientPrivate *priv;
-
- g_return_val_if_fail (shell_component_client != NULL, NULL);
- g_return_val_if_fail (EVOLUTION_IS_SHELL_COMPONENT_CLIENT (shell_component_client), NULL);
-
- priv = shell_component_client->priv;
-
- return priv->id;
-}
-
-
-/* Querying DnD interfaces. */
-
-GNOME_Evolution_ShellComponentDnd_SourceFolder
-evolution_shell_component_client_get_dnd_source_interface (EvolutionShellComponentClient *shell_component_client)
-{
- EvolutionShellComponentClientPrivate *priv;
- GNOME_Evolution_ShellComponentDnd_SourceFolder interface;
- CORBA_Environment ev;
-
- g_return_val_if_fail (shell_component_client != NULL, CORBA_OBJECT_NIL);
- g_return_val_if_fail (EVOLUTION_IS_SHELL_COMPONENT_CLIENT (shell_component_client), CORBA_OBJECT_NIL);
-
- priv = shell_component_client->priv;
-
- if (priv->dnd_source_folder_interface != CORBA_OBJECT_NIL)
- return priv->dnd_source_folder_interface;
-
- CORBA_exception_init (&ev);
-
- interface = Bonobo_Unknown_queryInterface (priv->corba_objref,
- "IDL:GNOME/Evolution/ShellComponentDnd/SourceFolder:1.0",
- &ev);
-
- if (ev._major != CORBA_NO_EXCEPTION)
- interface = CORBA_OBJECT_NIL;
-
- CORBA_exception_free (&ev);
-
- priv->dnd_source_folder_interface = interface;
- return interface;
-}
-
-GNOME_Evolution_ShellComponentDnd_DestinationFolder
-evolution_shell_component_client_get_dnd_destination_interface (EvolutionShellComponentClient *shell_component_client)
-{
- EvolutionShellComponentClientPrivate *priv;
- GNOME_Evolution_ShellComponentDnd_DestinationFolder interface;
- CORBA_Environment ev;
-
- g_return_val_if_fail (shell_component_client != NULL, CORBA_OBJECT_NIL);
- g_return_val_if_fail (EVOLUTION_IS_SHELL_COMPONENT_CLIENT (shell_component_client), CORBA_OBJECT_NIL);
-
- priv = shell_component_client->priv;
-
- if (priv->dnd_destination_folder_interface != CORBA_OBJECT_NIL)
- return priv->dnd_destination_folder_interface;
-
- CORBA_exception_init (&ev);
-
- interface = Bonobo_Unknown_queryInterface (priv->corba_objref,
- "IDL:GNOME/Evolution/ShellComponentDnd/DestinationFolder:1.0",
- &ev);
-
- if (ev._major != CORBA_NO_EXCEPTION)
- interface = CORBA_OBJECT_NIL;
-
- CORBA_exception_free (&ev);
-
- priv->dnd_destination_folder_interface = interface;
- return interface;
-}
-
-
-/* Querying the offline interface. */
-
-GNOME_Evolution_Offline
-evolution_shell_component_client_get_offline_interface (EvolutionShellComponentClient *shell_component_client)
-{
- EvolutionShellComponentClientPrivate *priv;
- GNOME_Evolution_Offline interface;
- CORBA_Environment ev;
-
- priv = shell_component_client->priv;
-
- if (priv->offline_interface != CORBA_OBJECT_NIL)
- return priv->offline_interface;
-
- CORBA_exception_init (&ev);
-
- interface = Bonobo_Unknown_queryInterface (priv->corba_objref, "IDL:GNOME/Evolution/Offline:1.0", &ev);
-
- if (ev._major != CORBA_NO_EXCEPTION)
- interface = CORBA_OBJECT_NIL;
-
- CORBA_exception_free (&ev);
-
- priv->offline_interface = interface;
- return interface;
-}
-
-
-/* Synchronous operations. */
-
-EvolutionShellComponentResult
-evolution_shell_component_client_set_owner (EvolutionShellComponentClient *shell_component_client,
- GNOME_Evolution_Shell shell,
- const char *evolution_homedir)
-{
- EvolutionShellComponentResult result;
- EvolutionShellComponentClientPrivate *priv;
- CORBA_Environment ev;
-
- RETURN_ERROR_IF_FAIL (shell_component_client != NULL);
- RETURN_ERROR_IF_FAIL (EVOLUTION_IS_SHELL_COMPONENT_CLIENT (shell_component_client));
- RETURN_ERROR_IF_FAIL (shell != CORBA_OBJECT_NIL);
-
- priv = shell_component_client->priv;
-
- CORBA_exception_init (&ev);
-
- GNOME_Evolution_ShellComponent_setOwner (priv->corba_objref, shell, evolution_homedir, &ev);
-
- result = corba_exception_to_result (&ev);
-
- if (result == EVOLUTION_SHELL_COMPONENT_OK && evolution_debug_log)
- GNOME_Evolution_ShellComponent_debug (priv->corba_objref, evolution_debug_log, &ev);
-
- CORBA_exception_free (&ev);
-
- return result;
-}
-
-EvolutionShellComponentResult
-evolution_shell_component_client_unset_owner (EvolutionShellComponentClient *shell_component_client,
- GNOME_Evolution_Shell shell)
-{
- EvolutionShellComponentResult result;
- CORBA_Environment ev;
-
- RETURN_ERROR_IF_FAIL (shell_component_client != NULL);
- RETURN_ERROR_IF_FAIL (EVOLUTION_IS_SHELL_COMPONENT_CLIENT (shell_component_client));
- RETURN_ERROR_IF_FAIL (shell != CORBA_OBJECT_NIL);
-
- CORBA_exception_init (&ev);
-
- GNOME_Evolution_ShellComponent_unsetOwner (shell_component_client->priv->corba_objref, &ev);
-
- result = corba_exception_to_result (&ev);
-
- CORBA_exception_free (&ev);
-
- return result;
-}
-
-EvolutionShellComponentResult
-evolution_shell_component_client_create_view (EvolutionShellComponentClient *shell_component_client,
- BonoboUIComponent *uih,
- const char *physical_uri,
- const char *type_string,
- const char *view_info,
- BonoboControl **control_return)
-{
- EvolutionShellComponentResult result;
- CORBA_Environment ev;
- EvolutionShellComponentClientPrivate *priv;
- Bonobo_Control corba_control;
-
- RETURN_ERROR_IF_FAIL (shell_component_client != NULL);
- RETURN_ERROR_IF_FAIL (EVOLUTION_IS_SHELL_COMPONENT_CLIENT (shell_component_client));
- RETURN_ERROR_IF_FAIL (uih != NULL);
- RETURN_ERROR_IF_FAIL (BONOBO_IS_UI_COMPONENT (uih));
- RETURN_ERROR_IF_FAIL (physical_uri != NULL);
- RETURN_ERROR_IF_FAIL (type_string != NULL);
- RETURN_ERROR_IF_FAIL (view_info != NULL);
- RETURN_ERROR_IF_FAIL (control_return != NULL);
-
- priv = shell_component_client->priv;
-
- CORBA_exception_init (&ev);
-
- corba_control = GNOME_Evolution_ShellComponent_createView (priv->corba_objref, physical_uri, type_string, view_info, &ev);
-
- result = corba_exception_to_result (&ev);
-
- if (result != EVOLUTION_SHELL_COMPONENT_OK) {
- *control_return = NULL;
- } else {
- Bonobo_UIContainer corba_uih;
-
- corba_uih = bonobo_object_corba_objref (BONOBO_OBJECT (uih));
- *control_return = BONOBO_CONTROL (bonobo_widget_new_control_from_objref (corba_control, corba_uih));
- }
-
- CORBA_exception_free (&ev);
-
- return result;
-}
-
-EvolutionShellComponentResult
-evolution_shell_component_client_handle_external_uri (EvolutionShellComponentClient *shell_component_client,
- const char *uri)
-{
- EvolutionShellComponentResult result;
- EvolutionShellComponentClientPrivate *priv;
- CORBA_Environment ev;
-
- RETURN_ERROR_IF_FAIL (shell_component_client != NULL);
- RETURN_ERROR_IF_FAIL (EVOLUTION_IS_SHELL_COMPONENT_CLIENT (shell_component_client));
- RETURN_ERROR_IF_FAIL (uri != NULL);
-
- CORBA_exception_init (&ev);
-
- priv = shell_component_client->priv;
-
- GNOME_Evolution_ShellComponent_handleExternalURI (priv->corba_objref, uri, &ev);
-
- result = corba_exception_to_result (&ev);
-
- CORBA_exception_free (&ev);
-
- return result;
-}
-
-
-/* Asyncronous operations. */
-
-void
-evolution_shell_component_client_async_create_folder (EvolutionShellComponentClient *shell_component_client,
- const char *physical_uri,
- const char *type,
- EvolutionShellComponentClientCallback callback,
- void *data)
-{
- EvolutionShellComponentClientPrivate *priv;
- CORBA_Environment ev;
-
- g_return_if_fail (shell_component_client != NULL);
- g_return_if_fail (EVOLUTION_IS_SHELL_COMPONENT_CLIENT (shell_component_client));
- g_return_if_fail (physical_uri != NULL);
- g_return_if_fail (type != NULL);
- g_return_if_fail (callback != NULL);
-
- priv = shell_component_client->priv;
-
- if (priv->callback != NULL) {
- (* callback) (shell_component_client, EVOLUTION_SHELL_COMPONENT_BUSY, data);
- return;
- }
-
- create_listener_interface (shell_component_client);
-
- CORBA_exception_init (&ev);
-
- priv->callback = callback;
- priv->callback_data = data;
-
- GNOME_Evolution_ShellComponent_createFolderAsync (priv->corba_objref, priv->listener_interface, physical_uri, type, &ev);
-
- if (ev._major != CORBA_NO_EXCEPTION && priv->callback != NULL) {
- (* callback) (shell_component_client,
- shell_component_result_from_corba_exception (&ev),
- data);
- priv->callback = NULL;
- priv->callback_data = NULL;
- }
-
- CORBA_exception_free (&ev);
-}
-
-void
-evolution_shell_component_client_async_remove_folder (EvolutionShellComponentClient *shell_component_client,
- const char *physical_uri,
- const char *type,
- EvolutionShellComponentClientCallback callback,
- void *data)
-{
- EvolutionShellComponentClientPrivate *priv;
- CORBA_Environment ev;
-
- g_return_if_fail (shell_component_client != NULL);
- g_return_if_fail (EVOLUTION_IS_SHELL_COMPONENT_CLIENT (shell_component_client));
- g_return_if_fail (physical_uri != NULL);
- g_return_if_fail (callback != NULL);
-
- priv = shell_component_client->priv;
-
- if (priv->callback != NULL) {
- (* callback) (shell_component_client, EVOLUTION_SHELL_COMPONENT_BUSY, data);
- return;
- }
-
- create_listener_interface (shell_component_client);
-
- CORBA_exception_init (&ev);
-
- priv->callback = callback;
- priv->callback_data = data;
-
- GNOME_Evolution_ShellComponent_removeFolderAsync (priv->corba_objref, priv->listener_interface, physical_uri, type, &ev);
-
- if (ev._major != CORBA_NO_EXCEPTION && priv->callback != NULL) {
- (* callback) (shell_component_client,
- shell_component_result_from_corba_exception (&ev),
- data);
- priv->callback = NULL;
- priv->callback_data = NULL;
- }
-
- CORBA_exception_free (&ev);
-}
-
-void
-evolution_shell_component_client_async_xfer_folder (EvolutionShellComponentClient *shell_component_client,
- const char *source_physical_uri,
- const char *destination_physical_uri,
- const char *type,
- gboolean remove_source,
- EvolutionShellComponentClientCallback callback,
- void *data)
-{
- EvolutionShellComponentClientPrivate *priv;
- CORBA_Environment ev;
-
- g_return_if_fail (shell_component_client != NULL);
- g_return_if_fail (EVOLUTION_IS_SHELL_COMPONENT_CLIENT (shell_component_client));
- g_return_if_fail (source_physical_uri != NULL);
- g_return_if_fail (destination_physical_uri != NULL);
- g_return_if_fail (data != NULL);
-
- priv = shell_component_client->priv;
-
- if (priv->callback != NULL) {
- (* callback) (shell_component_client, EVOLUTION_SHELL_COMPONENT_BUSY, data);
- return;
- }
-
- create_listener_interface (shell_component_client);
-
- CORBA_exception_init (&ev);
-
- priv->callback = callback;
- priv->callback_data = data;
-
- GNOME_Evolution_ShellComponent_xferFolderAsync (priv->corba_objref, priv->listener_interface,
- source_physical_uri, destination_physical_uri, type, remove_source,
- &ev);
-
- if (ev._major != CORBA_NO_EXCEPTION && priv->callback != NULL) {
- (* callback) (shell_component_client,
- shell_component_result_from_corba_exception (&ev),
- data);
- priv->callback = NULL;
- priv->callback_data = NULL;
- }
-
- CORBA_exception_free (&ev);
-}
-
-void
-evolution_shell_component_client_populate_folder_context_menu (EvolutionShellComponentClient *shell_component_client,
- BonoboUIContainer *container,
- const char *physical_uri,
- const char *type)
-{
- Bonobo_UIContainer corba_container;
- EvolutionShellComponentClientPrivate *priv;
- CORBA_Environment ev;
-
- g_return_if_fail (shell_component_client != NULL);
- g_return_if_fail (EVOLUTION_IS_SHELL_COMPONENT_CLIENT (shell_component_client));
- g_return_if_fail (physical_uri != NULL);
- g_return_if_fail (type != NULL);
-
- priv = shell_component_client->priv;
-
- CORBA_exception_init (&ev);
-
- corba_container = bonobo_object_corba_objref (BONOBO_OBJECT (container));
-
- GNOME_Evolution_ShellComponent_populateFolderContextMenu (priv->corba_objref, corba_container, physical_uri, type, &ev);
-
- CORBA_exception_free (&ev);
-}
-
-void
-evolution_shell_component_client_unpopulate_folder_context_menu (EvolutionShellComponentClient *shell_component_client,
- BonoboUIContainer *container,
- const char *physical_uri,
- const char *type)
-{
- Bonobo_UIContainer corba_container;
- EvolutionShellComponentClientPrivate *priv;
- CORBA_Environment ev;
-
- g_return_if_fail (shell_component_client != NULL);
- g_return_if_fail (EVOLUTION_IS_SHELL_COMPONENT_CLIENT (shell_component_client));
- g_return_if_fail (physical_uri != NULL);
- g_return_if_fail (type != NULL);
-
- priv = shell_component_client->priv;
-
- CORBA_exception_init (&ev);
-
- corba_container = bonobo_object_corba_objref (BONOBO_OBJECT (container));
-
- GNOME_Evolution_ShellComponent_unpopulateFolderContextMenu (priv->corba_objref, corba_container, physical_uri, type, &ev);
-
- CORBA_exception_free (&ev);
-}
-
-
-void
-evolution_shell_component_client_request_quit (EvolutionShellComponentClient *shell_component_client,
- EvolutionShellComponentClientCallback callback,
- void *data)
-{
- EvolutionShellComponentClientPrivate *priv;
- GNOME_Evolution_ShellComponent corba_shell_component;
- CORBA_Environment ev;
-
- g_return_if_fail (EVOLUTION_IS_SHELL_COMPONENT_CLIENT (shell_component_client));
- g_return_if_fail (callback != NULL);
-
- priv = shell_component_client->priv;
-
- if (priv->callback != NULL) {
- (* callback) (shell_component_client, EVOLUTION_SHELL_COMPONENT_BUSY, data);
- return;
- }
-
- create_listener_interface (shell_component_client);
-
- CORBA_exception_init (&ev);
-
- corba_shell_component = evolution_shell_component_client_corba_objref (shell_component_client);
-
- priv->callback = callback;
- priv->callback_data = data;
-
- GNOME_Evolution_ShellComponent_requestQuit (corba_shell_component, priv->listener_interface, &ev);
-
- if (ev._major != CORBA_NO_EXCEPTION && priv->callback != NULL) {
- (* callback) (shell_component_client,
- shell_component_result_from_corba_exception (&ev),
- data);
- priv->callback = NULL;
- priv->callback_data = NULL;
- }
-
- CORBA_exception_free (&ev);
-}
-
-
-E_MAKE_TYPE (evolution_shell_component_client, "EvolutionShellComponentClient",
- EvolutionShellComponentClient, class_init, init, PARENT_TYPE)
diff --git a/shell/evolution-shell-component-client.h b/shell/evolution-shell-component-client.h
deleted file mode 100644
index e396b17082..0000000000
--- a/shell/evolution-shell-component-client.h
+++ /dev/null
@@ -1,142 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* evolution-shell-component-client.h
- *
- * Copyright (C) 2000 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifndef EVOLUTION_SHELL_COMPONENT_CLIENT_H
-#define EVOLUTION_SHELL_COMPONENT_CLIENT_H
-
-#include <glib-object.h>
-
-#include <bonobo/bonobo-ui-container.h>
-#include <bonobo/bonobo-ui-component.h>
-
-#include "evolution-shell-component.h"
-
-#ifdef cplusplus
-extern "C" {
-#pragma }
-#endif /* cplusplus */
-
-#define EVOLUTION_TYPE_SHELL_COMPONENT_CLIENT (evolution_shell_component_client_get_type ())
-#define EVOLUTION_SHELL_COMPONENT_CLIENT(obj) (GTK_CHECK_CAST ((obj), EVOLUTION_TYPE_SHELL_COMPONENT_CLIENT, EvolutionShellComponentClient))
-#define EVOLUTION_SHELL_COMPONENT_CLIENT_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), EVOLUTION_TYPE_SHELL_COMPONENT_CLIENT, EvolutionShellComponentClientClass))
-#define EVOLUTION_IS_SHELL_COMPONENT_CLIENT(obj) (GTK_CHECK_TYPE ((obj), EVOLUTION_TYPE_SHELL_COMPONENT_CLIENT))
-#define EVOLUTION_IS_SHELL_COMPONENT_CLIENT_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), EVOLUTION_TYPE_SHELL_COMPONENT_CLIENT))
-
-
-typedef struct _EvolutionShellComponentClient EvolutionShellComponentClient;
-typedef struct _EvolutionShellComponentClientPrivate EvolutionShellComponentClientPrivate;
-typedef struct _EvolutionShellComponentClientClass EvolutionShellComponentClientClass;
-
-struct _EvolutionShellComponentClient {
- GObject parent;
-
- EvolutionShellComponentClientPrivate *priv;
-};
-
-struct _EvolutionShellComponentClientClass {
- GObjectClass parent_class;
-};
-
-typedef void (* EvolutionShellComponentClientCallback) (EvolutionShellComponentClient *shell_component_client,
- EvolutionShellComponentResult result,
- void *data);
-
-
-/* Construction. */
-GtkType evolution_shell_component_client_get_type (void);
-void evolution_shell_component_client_construct (EvolutionShellComponentClient *shell_component_client,
- const char *id,
- CORBA_Object corba_object);
-EvolutionShellComponentClient *evolution_shell_component_client_new (const char *id,
- CORBA_Environment *optional_ev);
-
-GNOME_Evolution_ShellComponent evolution_shell_component_client_corba_objref (EvolutionShellComponentClient *client);
-
-/* Properties. */
-
-const char *evolution_shell_component_client_get_id (EvolutionShellComponentClient *shell_component_client);
-
-/* Querying DnD interfaces. */
-
-GNOME_Evolution_ShellComponentDnd_SourceFolder
-evolution_shell_component_client_get_dnd_source_interface (EvolutionShellComponentClient *shell_component_client);
-GNOME_Evolution_ShellComponentDnd_DestinationFolder
-evolution_shell_component_client_get_dnd_destination_interface (EvolutionShellComponentClient *shell_component_client);
-
-/* Querying the offline interface. */
-GNOME_Evolution_Offline
-evolution_shell_component_client_get_offline_interface (EvolutionShellComponentClient *shell_component_client);
-
-/* Synchronous operations. */
-
-EvolutionShellComponentResult evolution_shell_component_client_set_owner (EvolutionShellComponentClient *shell_component_client,
- GNOME_Evolution_Shell shell,
- const char *evolution_homedir);
-EvolutionShellComponentResult evolution_shell_component_client_unset_owner (EvolutionShellComponentClient *shell_component_client,
- GNOME_Evolution_Shell shell);
-EvolutionShellComponentResult evolution_shell_component_client_create_view (EvolutionShellComponentClient *shell_component_client,
- BonoboUIComponent *uih,
- const char *physical_uri,
- const char *type_string,
- const char *view_info,
- BonoboControl **control_return);
-
-EvolutionShellComponentResult evolution_shell_component_client_handle_external_uri (EvolutionShellComponentClient *shell_component_client,
- const char *uri);
-
-/* Asyncronous operations. */
-void evolution_shell_component_client_async_create_folder (EvolutionShellComponentClient *shell_component_client,
- const char *physical_uri,
- const char *type,
- EvolutionShellComponentClientCallback callback,
- void *data);
-void evolution_shell_component_client_async_remove_folder (EvolutionShellComponentClient *shell_component_client,
- const char *physical_uri,
- const char *type,
- EvolutionShellComponentClientCallback callback,
- void *data);
-void evolution_shell_component_client_async_xfer_folder (EvolutionShellComponentClient *shell_component_client,
- const char *source_physical_uri,
- const char *destination_physical_uri,
- const char *type,
- gboolean remove_source,
- EvolutionShellComponentClientCallback callback,
- void *data);
-
-void evolution_shell_component_client_populate_folder_context_menu (EvolutionShellComponentClient *shell_component_client,
- BonoboUIContainer *container,
- const char *physical_uri,
- const char *type);
-void evolution_shell_component_client_unpopulate_folder_context_menu (EvolutionShellComponentClient *shell_component_client,
- BonoboUIContainer *container,
- const char *physical_uri,
- const char *type);
-
-void evolution_shell_component_client_request_quit (EvolutionShellComponentClient *shell_component_client,
- EvolutionShellComponentClientCallback callback,
- void *data);
-
-#ifdef cplusplus
-}
-#endif /* cplusplus */
-
-#endif /* EVOLUTION_SHELL_COMPONENT_CLIENT_H */
diff --git a/shell/evolution-shell-component-dnd.c b/shell/evolution-shell-component-dnd.c
deleted file mode 100644
index 61bb3565e1..0000000000
--- a/shell/evolution-shell-component-dnd.c
+++ /dev/null
@@ -1,294 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* evolution-shell-component-dnd.c
- *
- * Copyright (C) 2000, 2001 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Chris Toshok
- */
-
-#include "Evolution.h"
-#include "evolution-shell-component-dnd.h"
-
-#include <gal/util/e-util.h>
-
-#include <gtk/gtkobject.h>
-
-#define PARENT_TYPE (bonobo_object_get_type ())
-
-static BonoboObjectClass *parent_class;
-
-/* Source Folder stuff */
-
-struct _DndSourceFolderPrivate {
- DndSourceFolderBeginDragFn begin_drag;
- DndSourceFolderGetDataFn get_data;
- DndSourceFolderDeleteDataFn delete_data;
- DndSourceFolderEndDragFn end_drag;
- gpointer user_data;
-};
-
-/* GObject methods */
-static void
-dnd_source_finalize (GObject *object)
-{
- EvolutionShellComponentDndSourceFolder *folder;
- DndSourceFolderPrivate *priv;
-
- folder = EVOLUTION_SHELL_COMPONENT_DND_SOURCE_FOLDER (object);
- priv = folder->priv;
-
- g_return_if_fail (priv != NULL);
-
- g_free (priv);
-
- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
-}
-
-static void
-impl_GNOME_Evolution_ShellComponentDnd_SourceFolder_beginDrag (PortableServer_Servant servant, const CORBA_char * physical_uri,
- const CORBA_char * folder_type, GNOME_Evolution_ShellComponentDnd_ActionSet * possible_actions,
- GNOME_Evolution_ShellComponentDnd_Action * suggested_action, CORBA_Environment * ev)
-{
- BonoboObject *bonobo_object;
- EvolutionShellComponentDndSourceFolder *folder;
- DndSourceFolderPrivate *priv;
-
- bonobo_object = bonobo_object_from_servant (servant);
- folder = EVOLUTION_SHELL_COMPONENT_DND_SOURCE_FOLDER (bonobo_object);
- priv = folder->priv;
-
- priv->begin_drag (folder, physical_uri, folder_type, possible_actions, suggested_action, priv->user_data);
-}
-
-static void
-impl_GNOME_Evolution_ShellComponentDnd_SourceFolder_getData (PortableServer_Servant servant,
- const GNOME_Evolution_ShellComponentDnd_SourceFolder_Context * source_context,
- const GNOME_Evolution_ShellComponentDnd_Action action, const CORBA_char * dnd_type,
- GNOME_Evolution_ShellComponentDnd_Data ** data, CORBA_Environment * ev)
-{
- BonoboObject *bonobo_object;
- EvolutionShellComponentDndSourceFolder *folder;
- DndSourceFolderPrivate *priv;
-
- bonobo_object = bonobo_object_from_servant (servant);
- folder = EVOLUTION_SHELL_COMPONENT_DND_SOURCE_FOLDER (bonobo_object);
- priv = folder->priv;
-
- priv->get_data (folder, source_context, action, dnd_type, data, ev, priv->user_data);
-}
-
-static void
-impl_GNOME_Evolution_ShellComponentDnd_SourceFolder_deleteData (PortableServer_Servant servant,
- const GNOME_Evolution_ShellComponentDnd_SourceFolder_Context * source_context,
- CORBA_Environment * ev)
-{
- BonoboObject *bonobo_object;
- EvolutionShellComponentDndSourceFolder *folder;
- DndSourceFolderPrivate *priv;
-
- bonobo_object = bonobo_object_from_servant (servant);
- folder = EVOLUTION_SHELL_COMPONENT_DND_SOURCE_FOLDER (bonobo_object);
- priv = folder->priv;
-
- priv->delete_data (folder, source_context, priv->user_data);
-}
-
-static void
-impl_GNOME_Evolution_ShellComponentDnd_SourceFolder_endDrag (PortableServer_Servant servant,
- const GNOME_Evolution_ShellComponentDnd_SourceFolder_Context * source_context,
- CORBA_Environment * ev)
-{
- BonoboObject *bonobo_object;
- EvolutionShellComponentDndSourceFolder *folder;
- DndSourceFolderPrivate *priv;
-
- bonobo_object = bonobo_object_from_servant (servant);
- folder = EVOLUTION_SHELL_COMPONENT_DND_SOURCE_FOLDER (bonobo_object);
- priv = folder->priv;
-
- priv->end_drag (folder, source_context, priv->user_data);
-}
-
-static void
-evolution_shell_component_dnd_source_folder_class_init (EvolutionShellComponentDndSourceFolderClass *klass)
-{
- GObjectClass *object_class;
-
- object_class = G_OBJECT_CLASS (klass);
- object_class->finalize = dnd_source_finalize;
-
- klass->epv.beginDrag = impl_GNOME_Evolution_ShellComponentDnd_SourceFolder_beginDrag;
- klass->epv.getData = impl_GNOME_Evolution_ShellComponentDnd_SourceFolder_getData;
- klass->epv.deleteData = impl_GNOME_Evolution_ShellComponentDnd_SourceFolder_deleteData;
- klass->epv.endDrag = impl_GNOME_Evolution_ShellComponentDnd_SourceFolder_endDrag;
-
- parent_class = g_type_class_ref(PARENT_TYPE);
-}
-
-static void
-evolution_shell_component_dnd_source_folder_init (EvolutionShellComponentDndSourceFolder *folder)
-{
- DndSourceFolderPrivate *priv;
-
- priv = g_new (DndSourceFolderPrivate, 1);
-
- folder->priv = priv;
-}
-
-BONOBO_TYPE_FUNC_FULL (EvolutionShellComponentDndSourceFolder,
- GNOME_Evolution_ShellComponentDnd_SourceFolder,
- PARENT_TYPE,
- evolution_shell_component_dnd_source_folder)
-
-EvolutionShellComponentDndSourceFolder*
-evolution_shell_component_dnd_source_folder_new (DndSourceFolderBeginDragFn begin_drag,
- DndSourceFolderGetDataFn get_data,
- DndSourceFolderDeleteDataFn delete_data,
- DndSourceFolderEndDragFn end_drag,
- gpointer user_data)
-{
- EvolutionShellComponentDndSourceFolder *dnd_source;
-
- g_return_val_if_fail (begin_drag != NULL, NULL);
- g_return_val_if_fail (get_data != NULL, NULL);
- g_return_val_if_fail (delete_data != NULL, NULL);
- g_return_val_if_fail (end_drag != NULL, NULL);
-
- dnd_source = g_object_new (evolution_shell_component_dnd_source_folder_get_type (), NULL);
-
- dnd_source->priv->begin_drag = begin_drag;
- dnd_source->priv->get_data = get_data;
- dnd_source->priv->delete_data = delete_data;
- dnd_source->priv->end_drag = end_drag;
- dnd_source->priv->user_data = user_data;
-
- return dnd_source;
-}
-
-
-
-/* Destination Folder stuff */
-
-struct _DndDestinationFolderPrivate {
- DndDestinationFolderHandleMotionFn handle_motion;
- DndDestinationFolderHandleDropFn handle_drop;
- gpointer user_data;
-};
-
-/* GtkObject methods */
-static void
-dnd_destination_finalize (GObject *object)
-{
- EvolutionShellComponentDndDestinationFolder *folder;
- DndDestinationFolderPrivate *priv;
-
- folder = EVOLUTION_SHELL_COMPONENT_DND_DESTINATION_FOLDER (object);
- priv = folder->priv;
-
- g_return_if_fail (priv != NULL);
-
- g_free (priv);
-
- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
-}
-
-/* CORBA interface */
-static CORBA_boolean
-impl_GNOME_Evolution_ShellComponentDnd_DestinationFolder_handleMotion (PortableServer_Servant servant,
- const CORBA_char* physical_uri,
- const CORBA_char *folder_type,
- const GNOME_Evolution_ShellComponentDnd_DestinationFolder_Context * destination_context,
- GNOME_Evolution_ShellComponentDnd_Action * suggested_action, CORBA_Environment * ev)
-{
- BonoboObject *bonobo_object;
- EvolutionShellComponentDndDestinationFolder *folder;
- DndDestinationFolderPrivate *priv;
-
- bonobo_object = bonobo_object_from_servant (servant);
- folder = EVOLUTION_SHELL_COMPONENT_DND_DESTINATION_FOLDER (bonobo_object);
- priv = folder->priv;
-
- return priv->handle_motion (folder, physical_uri, folder_type, destination_context, suggested_action, priv->user_data);
-}
-
-static CORBA_boolean
-impl_GNOME_Evolution_ShellComponentDnd_DestinationFolder_handleDrop (PortableServer_Servant servant,
- const CORBA_char *physical_uri,
- const CORBA_char *folder_type,
- const GNOME_Evolution_ShellComponentDnd_DestinationFolder_Context * destination_context,
- const GNOME_Evolution_ShellComponentDnd_Action action,
- const GNOME_Evolution_ShellComponentDnd_Data * data, CORBA_Environment * ev)
-{
- BonoboObject *bonobo_object;
- EvolutionShellComponentDndDestinationFolder *folder;
- DndDestinationFolderPrivate *priv;
-
- bonobo_object = bonobo_object_from_servant (servant);
- folder = EVOLUTION_SHELL_COMPONENT_DND_DESTINATION_FOLDER (bonobo_object);
- priv = folder->priv;
-
- return priv->handle_drop (folder, physical_uri, folder_type, destination_context, action, data, priv->user_data);
-}
-
-static void
-evolution_shell_component_dnd_destination_folder_class_init (EvolutionShellComponentDndDestinationFolderClass *klass)
-{
- GObjectClass *object_class;
-
- object_class = G_OBJECT_CLASS (klass);
- object_class->finalize = dnd_destination_finalize;
-
- klass->epv.handleMotion = impl_GNOME_Evolution_ShellComponentDnd_DestinationFolder_handleMotion;
- klass->epv.handleDrop = impl_GNOME_Evolution_ShellComponentDnd_DestinationFolder_handleDrop;
-
- parent_class = g_type_class_ref(PARENT_TYPE);
-}
-
-static void
-evolution_shell_component_dnd_destination_folder_init (EvolutionShellComponentDndDestinationFolder *folder)
-{
- DndDestinationFolderPrivate *priv;
-
- priv = g_new (DndDestinationFolderPrivate, 1);
-
- folder->priv = priv;
-}
-
-BONOBO_TYPE_FUNC_FULL (EvolutionShellComponentDndDestinationFolder,
- GNOME_Evolution_ShellComponentDnd_DestinationFolder,
- PARENT_TYPE,
- evolution_shell_component_dnd_destination_folder)
-
-EvolutionShellComponentDndDestinationFolder *
-evolution_shell_component_dnd_destination_folder_new (DndDestinationFolderHandleMotionFn handle_motion,
- DndDestinationFolderHandleDropFn handle_drop,
- gpointer user_data)
-{
- EvolutionShellComponentDndDestinationFolder *dnd_destination;
-
- g_return_val_if_fail (handle_motion != NULL, NULL);
- g_return_val_if_fail (handle_drop != NULL, NULL);
-
- dnd_destination = g_object_new (evolution_shell_component_dnd_destination_folder_get_type (), NULL);
-
- dnd_destination->priv->handle_motion = handle_motion;
- dnd_destination->priv->handle_drop = handle_drop;
- dnd_destination->priv->user_data = user_data;
-
- return dnd_destination;
-}
-
diff --git a/shell/evolution-shell-component-dnd.h b/shell/evolution-shell-component-dnd.h
deleted file mode 100644
index 25922bca97..0000000000
--- a/shell/evolution-shell-component-dnd.h
+++ /dev/null
@@ -1,136 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* evolution-shell-component-dnd.h
- *
- * Copyright (C) 2000, 2001 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Chris Toshok
- */
-
-#ifndef EVOLUTION_SHELL_COMPONENT_DND_H
-#define EVOLUTION_SHELL_COMPONENT_DND_H
-
-#include <bonobo/bonobo-object.h>
-#include <gtk/gtktypeutils.h>
-
-#include "Evolution.h"
-
-#ifdef cplusplus
-extern "C" {
-#pragma }
-#endif /* cplusplus */
-
-/* Source Folder stuff */
-#define EVOLUTION_SHELL_COMPONENT_DND_SOURCE_FOLDER_TYPE (evolution_shell_component_dnd_source_folder_get_type ())
-#define EVOLUTION_SHELL_COMPONENT_DND_SOURCE_FOLDER(obj) (GTK_CHECK_CAST ((obj), EVOLUTION_SHELL_COMPONENT_DND_SOURCE_FOLDER_TYPE, EvolutionShellComponentDndSourceFolder))
-#define EVOLUTION_SHELL_COMPONENT_DND_SOURCE_FOLDER_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), EVOLUTION_SHELL_COMPONENT_DND_SOURCE_FOLDER_TYPE, EvolutionShellComponentDndSourceFolderClass))
-#define IS_EVOLUTION_SHELL_COMPONENT_DND_SOURCE_FOLDER(obj) (GTK_CHECK_TYPE ((obj), EVOLUTION_SHELL_COMPONENT_DND_SOURCE_FOLDER_TYPE))
-#define IS_EVOLUTION_SHELL_COMPONENT_DND_SOURCE_FOLDER_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), EVOLUTION_SHELL_COMPONENT_DND_SOURCE_FOLDER_TYPE))
-
-typedef struct _DndSourceFolderPrivate DndSourceFolderPrivate;
-typedef struct _EvolutionShellComponentDndSourceFolder EvolutionShellComponentDndSourceFolder;
-typedef struct _EvolutionShellComponentDndSourceFolderClass EvolutionShellComponentDndSourceFolderClass;
-
-typedef void (*DndSourceFolderBeginDragFn)(EvolutionShellComponentDndSourceFolder *folder,
- const char *physical_uri,
- const char *folder_type,
- GNOME_Evolution_ShellComponentDnd_ActionSet *possible_actions_return,
- GNOME_Evolution_ShellComponentDnd_Action *suggested_action_return,
- gpointer closure);
-typedef void (*DndSourceFolderGetDataFn)(EvolutionShellComponentDndSourceFolder *folder,
- const GNOME_Evolution_ShellComponentDnd_SourceFolder_Context * source_context,
- const GNOME_Evolution_ShellComponentDnd_Action action,
- const char * dnd_type,
- GNOME_Evolution_ShellComponentDnd_Data ** data_return,
- CORBA_Environment *ev,
- gpointer closure);
-typedef void (*DndSourceFolderDeleteDataFn)(EvolutionShellComponentDndSourceFolder *folder,
- const GNOME_Evolution_ShellComponentDnd_SourceFolder_Context *source_context,
- gpointer closure);
-typedef void (*DndSourceFolderEndDragFn)(EvolutionShellComponentDndSourceFolder *folder,
- const GNOME_Evolution_ShellComponentDnd_SourceFolder_Context *source_context,
- gpointer closure);
-
-struct _EvolutionShellComponentDndSourceFolder {
- BonoboObject object;
- DndSourceFolderPrivate *priv;
-};
-
-struct _EvolutionShellComponentDndSourceFolderClass {
- BonoboObjectClass parent_class;
-
- POA_GNOME_Evolution_ShellComponentDnd_SourceFolder__epv epv;
-};
-
-GtkType evolution_shell_component_dnd_source_folder_get_type (void);
-
-EvolutionShellComponentDndSourceFolder*
-evolution_shell_component_dnd_source_folder_new (DndSourceFolderBeginDragFn begin_drag,
- DndSourceFolderGetDataFn get_data,
- DndSourceFolderDeleteDataFn delete_data,
- DndSourceFolderEndDragFn end_drag,
- gpointer user_data);
-
-
-
-/* Destination Folder stuff */
-#define EVOLUTION_SHELL_COMPONENT_DND_DESTINATION_FOLDER_TYPE (evolution_shell_component_dnd_destination_folder_get_type ())
-#define EVOLUTION_SHELL_COMPONENT_DND_DESTINATION_FOLDER(obj) (GTK_CHECK_CAST ((obj), EVOLUTION_SHELL_COMPONENT_DND_DESTINATION_FOLDER_TYPE, EvolutionShellComponentDndDestinationFolder))
-#define EVOLUTION_SHELL_COMPONENT_DND_DESTINATION_FOLDER_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), EVOLUTION_SHELL_COMPONENT_DND_DESTINATION_FOLDER_TYPE, EvolutionShellComponentDndDestinationFolderClass))
-#define IS_EVOLUTION_SHELL_COMPONENT_DND_DESTINATION_FOLDER(obj) (GTK_CHECK_TYPE ((obj), EVOLUTION_SHELL_COMPONENT_DND_DESTINATION_FOLDER_TYPE))
-#define IS_EVOLUTION_SHELL_COMPONENT_DND_DESTINATION_FOLDER_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), EVOLUTION_SHELL_COMPONENT_DND_DESTINATION_FOLDER_TYPE))
-
-typedef struct _DndDestinationFolderPrivate DndDestinationFolderPrivate;
-typedef struct _EvolutionShellComponentDndDestinationFolder EvolutionShellComponentDndDestinationFolder;
-typedef struct _EvolutionShellComponentDndDestinationFolderClass EvolutionShellComponentDndDestinationFolderClass;
-
-typedef CORBA_boolean (*DndDestinationFolderHandleMotionFn)(EvolutionShellComponentDndDestinationFolder *folder,
- const char *physical_uri,
- const char *folder_type,
- const GNOME_Evolution_ShellComponentDnd_DestinationFolder_Context * destination_context,
- GNOME_Evolution_ShellComponentDnd_Action * suggested_action_return,
- gpointer closure);
-typedef CORBA_boolean (*DndDestinationFolderHandleDropFn)(EvolutionShellComponentDndDestinationFolder *folder,
- const char *physical_uri,
- const char *folder_type,
- const GNOME_Evolution_ShellComponentDnd_DestinationFolder_Context * destination_context,
- const GNOME_Evolution_ShellComponentDnd_Action action,
- const GNOME_Evolution_ShellComponentDnd_Data * data,
- gpointer closure);
-
-struct _EvolutionShellComponentDndDestinationFolder {
- BonoboObject object;
- DndDestinationFolderPrivate *priv;
-};
-
-struct _EvolutionShellComponentDndDestinationFolderClass {
- BonoboObjectClass parent_class;
-
- POA_GNOME_Evolution_ShellComponentDnd_DestinationFolder__epv epv;
-};
-
-GtkType evolution_shell_component_dnd_destination_folder_get_type (void);
-
-EvolutionShellComponentDndDestinationFolder*
-evolution_shell_component_dnd_destination_folder_new (DndDestinationFolderHandleMotionFn handle_motion,
- DndDestinationFolderHandleDropFn handle_drop,
- gpointer user_data);
-
-#ifdef cplusplus
-}
-#endif /* cplusplus */
-
-#endif /* EVOLUTION_SHELL_COMPONENT_DND_H */
diff --git a/shell/evolution-shell-component-utils.c b/shell/evolution-shell-component-utils.c
deleted file mode 100644
index 935b0f9973..0000000000
--- a/shell/evolution-shell-component-utils.c
+++ /dev/null
@@ -1,169 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* evolution-shell-component-utils.c
- *
- * Copyright (C) 2000, 2001 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "evolution-shell-component-utils.h"
-
-#include "e-util/e-dialog-utils.h"
-
-#include <string.h>
-#include <libgnome/gnome-i18n.h>
-#include <libgnome/gnome-util.h>
-#include <bonobo/bonobo-ui-util.h>
-#include <bonobo/bonobo-moniker-util.h>
-#include <bonobo/bonobo-exception.h>
-#include <bonobo-activation/bonobo-activation.h>
-
-static void free_pixmaps (void);
-static GSList *inited_arrays = NULL;
-
-void e_pixmaps_update (BonoboUIComponent *uic, EPixmap *pixcache)
-{
- static int done_init = 0;
- int i;
-
- if (!done_init) {
- g_atexit (free_pixmaps);
- done_init = 1;
- }
-
- if (g_slist_find (inited_arrays, pixcache) == NULL)
- inited_arrays = g_slist_prepend (inited_arrays, pixcache);
-
- for (i = 0; pixcache [i].path; i++) {
- if (!pixcache [i].pixbuf) {
- char *path;
- GdkPixbuf *pixbuf;
-
- path = g_build_filename (EVOLUTION_IMAGES, pixcache [i].fname, NULL);
-
- pixbuf = gdk_pixbuf_new_from_file (path, NULL);
- if (pixbuf == NULL) {
- g_warning ("Cannot load image -- %s", path);
- } else {
- pixcache [i].pixbuf = bonobo_ui_util_pixbuf_to_xml (pixbuf);
- g_object_unref (pixbuf);
- bonobo_ui_component_set_prop (uic,
- pixcache [i].path, "pixname",
- pixcache [i].pixbuf, NULL);
- }
-
- g_free (path);
- } else {
- bonobo_ui_component_set_prop (uic, pixcache [i].path,
- "pixname",
- pixcache [i].pixbuf,
- NULL);
- }
- }
-}
-
-static void
-free_pixmaps (void)
-{
- int i;
- GSList *li;
-
- for (li = inited_arrays; li != NULL; li = li->next) {
- EPixmap *pixcache = li->data;
- for (i = 0; pixcache [i].path; i++)
- g_free (pixcache [i].pixbuf);
- }
-
- g_slist_free (inited_arrays);
-}
-
-
-/**
- * e_activation_failure_dialog:
- * @parent: parent window of the dialog, or %NULL
- * @msg: the context-specific part of the error message
- * @oafiid: the OAFIID of the component that failed to start
- * @repo_id: the repo_id of the component that failed to start
- *
- * This puts up an error dialog about a failed component activation
- * containing as much information as we can manage to gather about
- * why it failed.
- **/
-void
-e_activation_failure_dialog (GtkWindow *parent, const char *msg,
- const char *oafiid, const char *repo_id)
-{
- Bonobo_Unknown object;
- CORBA_Environment ev;
- char *errmsg;
-
- CORBA_exception_init (&ev);
- object = bonobo_get_object (oafiid, repo_id, &ev);
- if (ev._major == CORBA_NO_EXCEPTION) {
- if (object) {
- Bonobo_Unknown_unref (object, &ev);
- CORBA_Object_release (object, &ev);
- }
- errmsg = g_strdup_printf (_("%s\n\nUnknown error."), msg);
- } else if (strcmp (CORBA_exception_id (&ev), ex_Bonobo_GeneralError) != 0) {
- char *bonobo_err = bonobo_exception_get_text (&ev);
- errmsg = g_strdup_printf (_("%s\n\nThe error from the "
- "component system is:\n%s"),
- msg, bonobo_err);
- g_free (bonobo_err);
- } else {
- Bonobo_GeneralError *errval = CORBA_exception_value (&ev);
-
- errmsg = g_strdup_printf (_("%s\n\nThe error from the "
- "activation system is:\n%s"),
- msg, errval->description);
- }
- CORBA_exception_free (&ev);
-
- e_notice (parent, GTK_MESSAGE_ERROR, errmsg);
- g_free (errmsg);
-}
-
-
-/**
- * e_get_activation_failure_msg:
- * @ev: An exception returned by an oaf_activate call.
- *
- * Get a descriptive error message from @ev.
- *
- * Return value: A newly allocated string with the printable error message.
- **/
-char *
-e_get_activation_failure_msg (CORBA_Environment *ev)
-{
- g_return_val_if_fail (ev != NULL, NULL);
-
- if (CORBA_exception_id (ev) == NULL)
- return NULL;
-
- if (strcmp (CORBA_exception_id (ev), ex_Bonobo_GeneralError) != 0) {
- return bonobo_exception_get_text (ev);
- } else {
- const Bonobo_GeneralError *oaf_general_error;
-
- oaf_general_error = CORBA_exception_value (ev);
- return g_strdup (oaf_general_error->description);
- }
-}
diff --git a/shell/evolution-shell-component-utils.h b/shell/evolution-shell-component-utils.h
deleted file mode 100644
index 5aceab64c7..0000000000
--- a/shell/evolution-shell-component-utils.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* evolution-shell-component-utils.h
- *
- * Copyright (C) 2000, 2001 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#ifndef __EVOLUTION_SHELL_COMPONENT_UTILS_H__
-#define __EVOLUTION_SHELL_COMPONENT_UTILS_H__
-
-#include <bonobo/bonobo-ui-component.h>
-#include <gtk/gtkwindow.h>
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-typedef struct _EPixmap {
- const char *path;
- const char *fname;
- char *pixbuf;
-} EPixmap;
-
-#define E_PIXMAP(path,fname) { (path), (fname), NULL }
-#define E_PIXMAP_END { NULL, NULL, NULL }
-
-/* Takes an array of pixmaps, terminated by E_PIXMAP_END, and loads into uic */
-void e_pixmaps_update (BonoboUIComponent *uic, EPixmap *pixcache);
-
-void e_activation_failure_dialog (GtkWindow *parent,
- const char *msg,
- const char *oafiid,
- const char *repo_id);
-char *e_get_activation_failure_msg (CORBA_Environment *ev);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* __EVOLUTION_SHELL_COMPONENT_UTILS_H__ */
diff --git a/shell/evolution-shell-component.c b/shell/evolution-shell-component.c
deleted file mode 100644
index b263b0f28d..0000000000
--- a/shell/evolution-shell-component.c
+++ /dev/null
@@ -1,1227 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* evolution-shell-component.c
- *
- * Copyright (C) 2000, 2001, 2002 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "evolution-shell-component.h"
-
-#include "e-shell-corba-icon-utils.h"
-#include "e-shell-marshal.h"
-
-#include <fcntl.h>
-#include <unistd.h>
-
-#include <glib.h>
-#include <gtk/gtksignal.h>
-#include <bonobo/bonobo-object.h>
-#include <libgnome/gnome-i18n.h>
-
-#include <gal/util/e-util.h>
-
-
-#define PING_DELAY 10000
-
-
-#define PARENT_TYPE BONOBO_OBJECT_TYPE
-
-static BonoboObjectClass *parent_class = NULL;
-
-struct _UserCreatableItemType {
- char *id;
- char *description;
- char *menu_description;
- char *tooltip;
- char menu_shortcut;
- GdkPixbuf *icon;
- char *folder_type;
-};
-typedef struct _UserCreatableItemType UserCreatableItemType;
-
-struct _EvolutionShellComponentPrivate {
- GList *folder_types; /* EvolutionShellComponentFolderType */
- GList *external_uri_schemas; /* char * */
-
- EvolutionShellComponentCreateViewFn create_view_fn;
- EvolutionShellComponentCreateFolderFn create_folder_fn;
- EvolutionShellComponentRemoveFolderFn remove_folder_fn;
- EvolutionShellComponentXferFolderFn xfer_folder_fn;
- EvolutionShellComponentPopulateFolderContextMenuFn populate_folder_context_menu_fn;
- EvolutionShellComponentUnpopulateFolderContextMenuFn unpopulate_folder_context_menu_fn;
- EvolutionShellComponentGetDndSelectionFn get_dnd_selection_fn;
- EvolutionShellComponentRequestQuitFn request_quit_fn;
-
- EvolutionShellClient *owner_client;
-
- GSList *user_creatable_item_types; /* UserCreatableItemType */
-
- /* This is used for
- populateFolderContextMenu/unpopulateFolderContextMenu. */
- BonoboUIComponent *uic;
-
- gulong parent_view_xid;
-
- int ping_timeout_id;
-
- void *closure;
-};
-
-enum {
- OWNER_SET,
- OWNER_UNSET,
- OWNER_DIED,
- DEBUG,
- INTERACTIVE,
- HANDLE_EXTERNAL_URI,
- USER_CREATE_NEW_ITEM,
- SEND_RECEIVE,
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = { 0 };
-
-
-/* UserCreatableItemType handling. */
-
-static UserCreatableItemType *
-user_creatable_item_type_new (const char *id,
- const char *description,
- const char *menu_description,
- const char *tooltip,
- const char *folder_type,
- char menu_shortcut,
- GdkPixbuf *icon)
-{
- UserCreatableItemType *type;
-
- type = g_new (UserCreatableItemType, 1);
- type->id = g_strdup (id);
- type->description = g_strdup (description);
- type->menu_description = g_strdup (menu_description);
- type->tooltip = g_strdup (tooltip);
- type->menu_shortcut = menu_shortcut;
- type->folder_type = g_strdup (folder_type);
-
- if (icon == NULL)
- type->icon = NULL;
- else
- type->icon = g_object_ref (icon);
-
- return type;
-}
-
-static void
-user_creatable_item_type_free (UserCreatableItemType *type)
-{
- g_free (type->id);
- g_free (type->description);
- g_free (type->menu_description);
- g_free (type->folder_type);
-
- if (type->icon != NULL)
- g_object_unref (type->icon);
-
- g_free (type);
-}
-
-
-/* Helper functions. */
-
-/* Notice that, if passed a NULL pointer, this string will construct a
- zero-element NULL-terminated string array instead of returning NULL itself
- (i.e. it will return a pointer to a single g_malloc()ed NULL pointer). */
-static char **
-duplicate_null_terminated_string_array (char *array[])
-{
- char **new;
- int count;
- int i;
-
- if (array == NULL) {
- count = 0;
- } else {
- for (count = 0; array[count] != NULL; count++)
- ;
- }
-
- new = g_new (char *, count + 1);
-
- for (i = 0; i < count; i++)
- new[i] = g_strdup (array[i]);
- new[count] = NULL;
-
- return new;
-}
-
-/* The following will create a CORBA sequence of strings from the specified
- * NULL-terminated array, without duplicating the strings. */
-static void
-fill_corba_sequence_from_null_terminated_string_array (CORBA_sequence_CORBA_string *corba_sequence,
- char **array)
-{
- int count;
- int i;
-
- g_assert (corba_sequence != NULL);
- g_assert (array != NULL);
-
- CORBA_sequence_set_release (corba_sequence, TRUE);
-
- count = 0;
- while (array[count] != NULL)
- count++;
-
- corba_sequence->_maximum = count;
- corba_sequence->_length = count;
- corba_sequence->_buffer = CORBA_sequence_CORBA_string_allocbuf (count);
-
- for (i = 0; i < count; i++)
- corba_sequence->_buffer[i] = CORBA_string_dup (array[i]);
-
- CORBA_sequence_set_release (corba_sequence, TRUE);
-}
-
-
-#if 0
-/* Owner pinging. */
-
-static gboolean
-owner_ping_callback (void *data)
-{
- EvolutionShellComponent *shell_component;
- EvolutionShellComponentPrivate *priv;
- Bonobo_Unknown owner_objref;
- CORBA_Environment ev;
- gboolean alive;
-
- shell_component = EVOLUTION_SHELL_COMPONENT (data);
- priv = shell_component->priv;
-
- owner_objref = evolution_shell_client_corba_objref (priv->owner_client);
-
- if (owner_objref == CORBA_OBJECT_NIL)
- return FALSE;
-
- /* We are duplicating the object here, as we might get an ::unsetOwner
- while we invoke the pinging, and this would make the objref invalid
- and thus crash the stubs (cfr. #13802). */
-
- CORBA_exception_init (&ev);
- owner_objref = CORBA_Object_duplicate (owner_objref, &ev);
-
- alive = bonobo_unknown_ping (owner_objref, NULL);
-
- CORBA_Object_release (owner_objref, &ev);
- CORBA_exception_free (&ev);
-
- if (alive)
- return TRUE;
-
- /* This is tricky. During the pinging, we might have gotten an
- ::unsetOwner invocation which has invalidated our owner_client. In
- this case, no "owner_died" should be emitted. */
-
- if (priv->owner_client != NULL) {
- g_print ("\t*** The shell has disappeared\n");
- g_signal_emit (shell_component, signals[OWNER_DIED], 0);
- }
-
- priv->ping_timeout_id = -1;
-
- return FALSE;
-}
-
-static void
-setup_owner_pinging (EvolutionShellComponent *shell_component)
-{
- EvolutionShellComponentPrivate *priv;
- GNOME_Evolution_Shell shell_corba_objref;
-
- priv = shell_component->priv;
-
- shell_corba_objref = evolution_shell_client_corba_objref (priv->owner_client);
-
- if (priv->ping_timeout_id != -1)
- g_source_remove (priv->ping_timeout_id);
-
- priv->ping_timeout_id = g_timeout_add (PING_DELAY, owner_ping_callback, shell_component);
-}
-#endif
-
-
-/* CORBA interface implementation. */
-
-static GNOME_Evolution_FolderTypeList *
-impl__get_supportedTypes (PortableServer_Servant servant,
- CORBA_Environment *ev)
-{
- BonoboObject *bonobo_object;
- EvolutionShellComponent *shell_component;
- EvolutionShellComponentPrivate *priv;
- GNOME_Evolution_FolderTypeList *folder_type_list;
- unsigned int i;
- GList *p;
-
- bonobo_object = bonobo_object_from_servant (servant);
- shell_component = EVOLUTION_SHELL_COMPONENT (bonobo_object);
- priv = shell_component->priv;
-
- folder_type_list = GNOME_Evolution_FolderTypeList__alloc ();
- CORBA_sequence_set_release (folder_type_list, TRUE);
- folder_type_list->_length = g_list_length (priv->folder_types);
- folder_type_list->_maximum = folder_type_list->_length;
- folder_type_list->_buffer = CORBA_sequence_GNOME_Evolution_FolderType_allocbuf (folder_type_list->_maximum);
-
- for (p = priv->folder_types, i = 0; p != NULL; p = p->next, i++) {
- GNOME_Evolution_FolderType *corba_folder_type;
- EvolutionShellComponentFolderType *folder_type;
-
- folder_type = (EvolutionShellComponentFolderType *) p->data;
-
- corba_folder_type = folder_type_list->_buffer + i;
- corba_folder_type->name = CORBA_string_dup (folder_type->name);
- corba_folder_type->iconName = CORBA_string_dup (folder_type->icon_name);
- corba_folder_type->displayName = CORBA_string_dup (folder_type->display_name);
- corba_folder_type->description = CORBA_string_dup (folder_type->description);
- corba_folder_type->userCreatable = folder_type->user_creatable;
-
- fill_corba_sequence_from_null_terminated_string_array (& corba_folder_type->acceptedDndTypes,
- folder_type->accepted_dnd_types);
- fill_corba_sequence_from_null_terminated_string_array (& corba_folder_type->exportedDndTypes,
- folder_type->exported_dnd_types);
- }
-
- CORBA_sequence_set_release (folder_type_list, TRUE);
-
- return folder_type_list;
-}
-
-static GNOME_Evolution_URISchemaList *
-impl__get_externalUriSchemas (PortableServer_Servant servant,
- CORBA_Environment *ev)
-{
- EvolutionShellComponent *shell_component;
- EvolutionShellComponentPrivate *priv;
- GNOME_Evolution_URISchemaList *uri_schema_list;
- GList *p;
- int i;
-
- shell_component = EVOLUTION_SHELL_COMPONENT (bonobo_object_from_servant (servant));
- priv = shell_component->priv;
-
- uri_schema_list = GNOME_Evolution_URISchemaList__alloc ();
-
- /* FIXME: We could probably keep this to FALSE and avoid
- CORBA_string_duplicating. */
- CORBA_sequence_set_release (uri_schema_list, TRUE);
-
- if (priv->external_uri_schemas == NULL) {
- uri_schema_list->_length = 0;
- uri_schema_list->_maximum = 0;
- uri_schema_list->_buffer = NULL;
- return uri_schema_list;
- }
-
- uri_schema_list->_length = g_list_length (priv->external_uri_schemas);
- uri_schema_list->_maximum = uri_schema_list->_length;
- uri_schema_list->_buffer = CORBA_sequence_GNOME_Evolution_URISchema_allocbuf (uri_schema_list->_maximum);
-
- for (p = priv->external_uri_schemas, i = 0; p != NULL; p = p->next, i++) {
- const char *schema;
-
- schema = (const char *) p->data;
- uri_schema_list->_buffer[i] = CORBA_string_dup (schema);
- }
-
- CORBA_sequence_set_release (uri_schema_list, TRUE);
-
- return uri_schema_list;
-}
-
-static GNOME_Evolution_UserCreatableItemTypeList *
-impl__get_userCreatableItemTypes (PortableServer_Servant servant,
- CORBA_Environment *ev)
-{
- EvolutionShellComponent *shell_component;
- EvolutionShellComponentPrivate *priv;
- GNOME_Evolution_UserCreatableItemTypeList *list;
- GSList *p;
- int i;
-
- shell_component = EVOLUTION_SHELL_COMPONENT (bonobo_object_from_servant (servant));
- priv = shell_component->priv;
-
- list = GNOME_Evolution_UserCreatableItemTypeList__alloc ();
- list->_maximum = g_slist_length (priv->user_creatable_item_types);
- list->_length = list->_maximum;
- list->_buffer = CORBA_sequence_GNOME_Evolution_UserCreatableItemType_allocbuf (list->_maximum);
-
- for (p = priv->user_creatable_item_types, i = 0; p != NULL; p = p->next, i ++) {
- GNOME_Evolution_UserCreatableItemType *corba_type;
- const UserCreatableItemType *type;
-
- corba_type = list->_buffer + i;
- type = (const UserCreatableItemType *) p->data;
-
- corba_type->id = CORBA_string_dup (type->id);
- corba_type->description = CORBA_string_dup (type->description);
- corba_type->menuDescription = CORBA_string_dup (type->menu_description);
- corba_type->tooltip = CORBA_string_dup (type->tooltip != NULL ? type->tooltip : "");
- corba_type->folderType = CORBA_string_dup (type->folder_type != NULL ? type->folder_type : "");
- corba_type->menuShortcut = type->menu_shortcut;
-
- e_store_corba_icon_from_pixbuf (type->icon, & corba_type->icon);
- }
-
- CORBA_sequence_set_release (list, TRUE);
-
- return list;
-}
-
-static void
-impl_setOwner (PortableServer_Servant servant,
- const GNOME_Evolution_Shell shell,
- const CORBA_char *evolution_homedir,
- CORBA_Environment *ev)
-{
- EvolutionShellComponent *shell_component;
- EvolutionShellComponentPrivate *priv;
-
- shell_component = EVOLUTION_SHELL_COMPONENT (bonobo_object_from_servant (servant));
- priv = shell_component->priv;
-
- if (priv->owner_client != NULL) {
- int owner_is_dead;
-
- owner_is_dead = CORBA_Object_non_existent
- (evolution_shell_client_corba_objref (priv->owner_client), ev);
- if (ev->_major != CORBA_NO_EXCEPTION)
- owner_is_dead = TRUE;
-
- if (! owner_is_dead) {
- CORBA_exception_set (ev, CORBA_USER_EXCEPTION,
- ex_GNOME_Evolution_ShellComponent_AlreadyOwned, NULL);
- } else {
- CORBA_exception_set (ev, CORBA_USER_EXCEPTION,
- ex_GNOME_Evolution_ShellComponent_OldOwnerHasDied, NULL);
-
- g_signal_emit (shell_component, signals[OWNER_DIED], 0);
- }
-
- return;
- }
-
- if (ev->_major == CORBA_NO_EXCEPTION) {
-#if 0
- BonoboObject *local_object;
-#endif
-
- priv->owner_client = evolution_shell_client_new (shell);
- g_signal_emit (shell_component, signals[OWNER_SET], 0, priv->owner_client, evolution_homedir);
-
-#if 0
- /* Set up pinging of the shell (to realize if it's gone unexpectedly) when in the
- non-local case. */
- local_object = bonobo_object (ORBit_small_get_servant (shell));
- if (local_object == NULL)
- setup_owner_pinging (shell_component);
-#endif
- }
-}
-
-static void
-impl_unsetOwner (PortableServer_Servant servant,
- CORBA_Environment *ev)
-{
- BonoboObject *bonobo_object;
- EvolutionShellComponent *shell_component;
- EvolutionShellComponentPrivate *priv;
-
- bonobo_object = bonobo_object_from_servant (servant);
- shell_component = EVOLUTION_SHELL_COMPONENT (bonobo_object);
- priv = shell_component->priv;
-
- if (priv->owner_client == NULL) {
- CORBA_exception_set (ev, CORBA_USER_EXCEPTION,
- ex_GNOME_Evolution_ShellComponent_NotOwned, NULL);
- return;
- }
-
- g_signal_emit (shell_component, signals[OWNER_UNSET], 0);
-}
-
-static void
-impl_debug (PortableServer_Servant servant,
- const CORBA_char *log_path,
- CORBA_Environment *ev)
-{
- BonoboObject *bonobo_object;
- EvolutionShellComponent *shell_component;
- int fd;
-
- bonobo_object = bonobo_object_from_servant (servant);
- shell_component = EVOLUTION_SHELL_COMPONENT (bonobo_object);
-
- fd = open (log_path, O_WRONLY | O_APPEND);
- if (!fd)
- return;
-
- dup2 (fd, STDOUT_FILENO);
- dup2 (fd, STDERR_FILENO);
- close (fd);
-
- g_signal_emit (shell_component, signals[DEBUG], 0);
-}
-
-static void
-impl_interactive (PortableServer_Servant servant,
- CORBA_boolean interactive,
- CORBA_unsigned_long new_view_xid,
- CORBA_Environment *ev)
-{
- BonoboObject *bonobo_object;
- EvolutionShellComponent *shell_component;
-
- bonobo_object = bonobo_object_from_servant (servant);
- shell_component = EVOLUTION_SHELL_COMPONENT (bonobo_object);
-
- if (interactive)
- shell_component->priv->parent_view_xid = new_view_xid;
- else
- shell_component->priv->parent_view_xid = 0L;
-
- g_signal_emit (shell_component, signals[INTERACTIVE], 0,
- interactive, new_view_xid);
-}
-
-static Bonobo_Control
-impl_createView (PortableServer_Servant servant,
- const CORBA_char *physical_uri,
- const CORBA_char *type,
- const CORBA_char *view_info,
- CORBA_Environment *ev)
-{
- BonoboObject *bonobo_object;
- EvolutionShellComponent *shell_component;
- EvolutionShellComponentPrivate *priv;
- EvolutionShellComponentResult result;
- BonoboControl *control;
-
- bonobo_object = bonobo_object_from_servant (servant);
- shell_component = EVOLUTION_SHELL_COMPONENT (bonobo_object);
- priv = shell_component->priv;
-
- result = (* priv->create_view_fn) (shell_component, physical_uri, type,
- view_info, &control, priv->closure);
-
- if (result != EVOLUTION_SHELL_COMPONENT_OK) {
- switch (result) {
- case EVOLUTION_SHELL_COMPONENT_UNSUPPORTEDTYPE:
- CORBA_exception_set (ev, CORBA_USER_EXCEPTION,
- ex_GNOME_Evolution_ShellComponent_UnsupportedType,
- NULL);
- break;
- case EVOLUTION_SHELL_COMPONENT_INTERNALERROR:
- CORBA_exception_set (ev, CORBA_USER_EXCEPTION,
- ex_GNOME_Evolution_ShellComponent_InternalError,
- NULL);
- break;
- default:
- CORBA_exception_set (ev, CORBA_USER_EXCEPTION,
- ex_GNOME_Evolution_ShellComponent_NotFound,
- NULL);
- }
-
- return CORBA_OBJECT_NIL;
- }
-
- return CORBA_Object_duplicate (bonobo_object_corba_objref (BONOBO_OBJECT (control)), ev);
-}
-
-static void
-impl_handleExternalURI (PortableServer_Servant servant,
- const CORBA_char *uri,
- CORBA_Environment *ev)
-{
- EvolutionShellComponent *shell_component;
-
- shell_component = EVOLUTION_SHELL_COMPONENT (bonobo_object_from_servant (servant));
-
- g_signal_emit (shell_component, signals[HANDLE_EXTERNAL_URI], 0, uri);
-}
-
-static void
-impl_createFolderAsync (PortableServer_Servant servant,
- const GNOME_Evolution_ShellComponentListener listener,
- const CORBA_char *physical_uri,
- const CORBA_char *type,
- CORBA_Environment *ev)
-{
- BonoboObject *bonobo_object;
- EvolutionShellComponent *shell_component;
- EvolutionShellComponentPrivate *priv;
-
- bonobo_object = bonobo_object_from_servant (servant);
- shell_component = EVOLUTION_SHELL_COMPONENT (bonobo_object);
- priv = shell_component->priv;
-
- if (priv->create_folder_fn == NULL) {
- GNOME_Evolution_ShellComponentListener_notifyResult (listener,
- GNOME_Evolution_ShellComponentListener_UNSUPPORTED_OPERATION,
- ev);
- return;
- }
-
- (* priv->create_folder_fn) (shell_component, physical_uri, type, listener, priv->closure);
-}
-
-static void
-impl_removeFolderAsync (PortableServer_Servant servant,
- const GNOME_Evolution_ShellComponentListener listener,
- const CORBA_char *physical_uri,
- const CORBA_char *type,
- CORBA_Environment *ev)
-{
- BonoboObject *bonobo_object;
- EvolutionShellComponent *shell_component;
- EvolutionShellComponentPrivate *priv;
-
- bonobo_object = bonobo_object_from_servant (servant);
- shell_component = EVOLUTION_SHELL_COMPONENT (bonobo_object);
- priv = shell_component->priv;
-
- if (priv->remove_folder_fn == NULL) {
- GNOME_Evolution_ShellComponentListener_notifyResult (listener,
- GNOME_Evolution_ShellComponentListener_UNSUPPORTED_OPERATION,
- ev);
- return;
- }
-
- (* priv->remove_folder_fn) (shell_component, physical_uri, type, listener, priv->closure);
-}
-
-static void
-impl_xferFolderAsync (PortableServer_Servant servant,
- const GNOME_Evolution_ShellComponentListener listener,
- const CORBA_char *source_physical_uri,
- const CORBA_char *destination_physical_uri,
- const CORBA_char *type,
- const CORBA_boolean remove_source,
- CORBA_Environment *ev)
-{
- BonoboObject *bonobo_object;
- EvolutionShellComponent *shell_component;
- EvolutionShellComponentPrivate *priv;
-
- bonobo_object = bonobo_object_from_servant (servant);
- shell_component = EVOLUTION_SHELL_COMPONENT (bonobo_object);
- priv = shell_component->priv;
-
- if (priv->xfer_folder_fn == NULL) {
- GNOME_Evolution_ShellComponentListener_notifyResult (listener,
- GNOME_Evolution_ShellComponentListener_UNSUPPORTED_OPERATION,
- ev);
- return;
- }
-
- (* priv->xfer_folder_fn) (shell_component,
- source_physical_uri,
- destination_physical_uri,
- type,
- remove_source,
- listener,
- priv->closure);
-}
-
-static void
-impl_populateFolderContextMenu (PortableServer_Servant servant,
- const Bonobo_UIContainer corba_uih,
- const CORBA_char *physical_uri,
- const CORBA_char *type,
- CORBA_Environment *ev)
-{
- BonoboObject *bonobo_object;
- EvolutionShellComponent *shell_component;
- EvolutionShellComponentPrivate *priv;
-
- bonobo_object = bonobo_object_from_servant (servant);
- shell_component = EVOLUTION_SHELL_COMPONENT (bonobo_object);
- priv = shell_component->priv;
-
- if (priv->populate_folder_context_menu_fn == NULL)
- return;
-
- if (priv->uic != NULL) {
- CORBA_exception_set (ev, CORBA_USER_EXCEPTION,
- ex_GNOME_Evolution_ShellComponent_AlreadyPopulated,
- NULL);
- return;
- }
-
- priv->uic = bonobo_ui_component_new_default ();
- bonobo_ui_component_set_container (priv->uic, corba_uih, NULL);
-
- (* priv->populate_folder_context_menu_fn) (shell_component, priv->uic, physical_uri, type, priv->closure);
-}
-
-static void
-impl_unpopulateFolderContextMenu (PortableServer_Servant servant,
- const Bonobo_UIContainer corba_uih,
- const CORBA_char *physical_uri,
- const CORBA_char *type,
- CORBA_Environment *ev)
-{
- BonoboObject *bonobo_object;
- EvolutionShellComponent *shell_component;
- EvolutionShellComponentPrivate *priv;
-
- bonobo_object = bonobo_object_from_servant (servant);
- shell_component = EVOLUTION_SHELL_COMPONENT (bonobo_object);
- priv = shell_component->priv;
-
- if (priv->unpopulate_folder_context_menu_fn == NULL)
- return;
-
- if (priv->uic == NULL) {
- CORBA_exception_set (ev, CORBA_USER_EXCEPTION,
- ex_GNOME_Evolution_ShellComponent_NotPopulated,
- NULL);
- return;
- }
-
- (* priv->unpopulate_folder_context_menu_fn) (shell_component, priv->uic, physical_uri, type, priv->closure);
-
- bonobo_object_unref (BONOBO_OBJECT (priv->uic));
- priv->uic = NULL;
-}
-
-static void
-impl_userCreateNewItem (PortableServer_Servant servant,
- const CORBA_char *id,
- const CORBA_char *parent_physical_uri,
- const CORBA_char *parent_type,
- CORBA_Environment *ev)
-{
- EvolutionShellComponent *shell_component;
- EvolutionShellComponentPrivate *priv;
-
- shell_component = EVOLUTION_SHELL_COMPONENT (bonobo_object_from_servant (servant));
- priv = shell_component->priv;
-
- /* FIXME: Check that the type is good. */
-
- g_signal_emit (shell_component, signals[USER_CREATE_NEW_ITEM], 0, id, parent_physical_uri, parent_type);
-}
-
-static void
-impl_sendReceive (PortableServer_Servant servant,
- const CORBA_boolean show_dialog,
- CORBA_Environment *ev)
-{
- EvolutionShellComponent *shell_component;
-
- shell_component = EVOLUTION_SHELL_COMPONENT (bonobo_object_from_servant (servant));
- g_signal_emit (shell_component, signals[SEND_RECEIVE], 0, show_dialog);
-}
-
-static void
-impl_requestQuit (PortableServer_Servant servant,
- const GNOME_Evolution_ShellComponentListener listener,
- CORBA_Environment *ev)
-{
- EvolutionShellComponent *shell_component;
- gboolean allow_quit;
-
- shell_component = EVOLUTION_SHELL_COMPONENT (bonobo_object_from_servant (servant));
-
- if (shell_component->priv->request_quit_fn == NULL)
- allow_quit = TRUE;
- else
- allow_quit = (* shell_component->priv->request_quit_fn) (shell_component,
- shell_component->priv->closure);
-
- if (allow_quit)
- GNOME_Evolution_ShellComponentListener_notifyResult (listener,
- GNOME_Evolution_ShellComponentListener_OK,
- ev);
- else
- GNOME_Evolution_ShellComponentListener_notifyResult (listener,
- GNOME_Evolution_ShellComponentListener_CANCEL,
- ev);
-}
-
-
-/* GObject methods. */
-
-static void
-impl_dispose (GObject *object)
-{
- EvolutionShellComponent *shell_component;
- EvolutionShellComponentPrivate *priv;
-
- shell_component = EVOLUTION_SHELL_COMPONENT (object);
-
- priv = shell_component->priv;
-
- if (priv->ping_timeout_id != -1) {
- g_source_remove (priv->ping_timeout_id);
- priv->ping_timeout_id = -1;
- }
-
- if (priv->owner_client != NULL) {
- g_object_unref (priv->owner_client);
- priv->owner_client = NULL;
- }
-
- if (priv->uic != NULL) {
- bonobo_object_unref (BONOBO_OBJECT (priv->uic));
- priv->uic = NULL;
- }
-
- (* G_OBJECT_CLASS (parent_class)->dispose) (object);
-}
-
-static void
-impl_finalize (GObject *object)
-{
- EvolutionShellComponent *shell_component;
- EvolutionShellComponentPrivate *priv;
- GSList *sp;
- GList *p;
-
- shell_component = EVOLUTION_SHELL_COMPONENT (object);
-
- priv = shell_component->priv;
-
- for (p = priv->folder_types; p != NULL; p = p->next) {
- EvolutionShellComponentFolderType *folder_type;
-
- folder_type = (EvolutionShellComponentFolderType *) p->data;
-
- g_free (folder_type->name);
- g_free (folder_type->icon_name);
- g_strfreev (folder_type->exported_dnd_types);
- g_strfreev (folder_type->accepted_dnd_types);
-
- g_free (folder_type);
- }
- g_list_free (priv->folder_types);
-
- e_free_string_list (priv->external_uri_schemas);
-
- for (sp = priv->user_creatable_item_types; sp != NULL; sp = sp->next)
- user_creatable_item_type_free ((UserCreatableItemType *) sp->data);
- g_slist_free (priv->user_creatable_item_types);
-
- g_free (priv);
-
- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
-}
-
-
-/* EvolutionShellComponent methods. */
-
-static void
-impl_owner_unset (EvolutionShellComponent *shell_component)
-{
- EvolutionShellComponentPrivate *priv;
-
- priv = shell_component->priv;
-
- if (priv->ping_timeout_id != -1) {
- g_source_remove (priv->ping_timeout_id);
- priv->ping_timeout_id = -1;
- }
-
- g_object_unref (priv->owner_client);
- priv->owner_client = NULL;
-}
-
-static void
-impl_owner_died (EvolutionShellComponent *shell_component)
-{
- EvolutionShellComponentPrivate *priv;
-
- priv = shell_component->priv;
-
- g_object_unref (priv->owner_client);
- priv->owner_client = NULL;
-
- /* The default implementation for ::owner_died emits ::owner_unset, so
- that we make the behavior for old components kind of correct without
- even if they don't handle the new ::owner_died signal correctly
- yet. */
-
- g_signal_emit (shell_component, signals[OWNER_UNSET], 0);
-}
-
-
-/* Initialization. */
-
-static void
-evolution_shell_component_class_init (EvolutionShellComponentClass *klass)
-{
- EvolutionShellComponentClass *shell_component_class;
- GObjectClass *object_class;
- POA_GNOME_Evolution_ShellComponent__epv *epv = &klass->epv;
-
- object_class = G_OBJECT_CLASS (klass);
- object_class->dispose = impl_dispose;
- object_class->finalize = impl_finalize;
-
- signals[OWNER_SET]
- = g_signal_new ("owner_set",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EvolutionShellComponentClass, owner_set),
- NULL, NULL,
- e_shell_marshal_NONE__POINTER_POINTER,
- G_TYPE_NONE, 2,
- G_TYPE_POINTER, G_TYPE_POINTER);
-
- signals[OWNER_DIED]
- = g_signal_new ("owner_died",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EvolutionShellComponentClass, owner_died),
- NULL, NULL,
- e_shell_marshal_NONE__NONE,
- G_TYPE_NONE, 0);
-
- signals[OWNER_UNSET]
- = g_signal_new ("owner_unset",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EvolutionShellComponentClass, owner_unset),
- NULL, NULL,
- e_shell_marshal_NONE__NONE,
- G_TYPE_NONE, 0);
-
- signals[DEBUG]
- = g_signal_new ("debug",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EvolutionShellComponentClass, debug),
- NULL, NULL,
- e_shell_marshal_NONE__NONE,
- G_TYPE_NONE, 0);
-
- signals[INTERACTIVE]
- = g_signal_new ("interactive",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EvolutionShellComponentClass, interactive),
- NULL, NULL,
- e_shell_marshal_NONE__BOOL_INT,
- G_TYPE_NONE, 2,
- G_TYPE_BOOLEAN,
- G_TYPE_INT);
-
- signals[HANDLE_EXTERNAL_URI]
- = g_signal_new ("handle_external_uri",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EvolutionShellComponentClass, handle_external_uri),
- NULL, NULL,
- e_shell_marshal_NONE__STRING,
- G_TYPE_NONE, 1,
- G_TYPE_STRING);
-
- signals[USER_CREATE_NEW_ITEM]
- = g_signal_new ("user_create_new_item",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EvolutionShellComponentClass, user_create_new_item),
- NULL, NULL,
- e_shell_marshal_VOID__STRING_STRING_STRING,
- G_TYPE_NONE, 3,
- G_TYPE_STRING,
- G_TYPE_STRING,
- G_TYPE_STRING);
-
- signals[SEND_RECEIVE]
- = g_signal_new ("send_receive",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EvolutionShellComponentClass, send_receive),
- NULL, NULL,
- e_shell_marshal_NONE__BOOL,
- G_TYPE_NONE, 1,
- G_TYPE_BOOLEAN);
-
- parent_class = g_type_class_ref(PARENT_TYPE);
-
- epv->_get_supportedTypes = impl__get_supportedTypes;
- epv->_get_externalUriSchemas = impl__get_externalUriSchemas;
- epv->_get_userCreatableItemTypes = impl__get_userCreatableItemTypes;
- epv->setOwner = impl_setOwner;
- epv->unsetOwner = impl_unsetOwner;
- epv->debug = impl_debug;
- epv->interactive = impl_interactive;
- epv->createView = impl_createView;
- epv->handleExternalURI = impl_handleExternalURI;
- epv->createFolderAsync = impl_createFolderAsync;
- epv->removeFolderAsync = impl_removeFolderAsync;
- epv->xferFolderAsync = impl_xferFolderAsync;
- epv->populateFolderContextMenu = impl_populateFolderContextMenu;
- epv->unpopulateFolderContextMenu = impl_unpopulateFolderContextMenu;
- epv->userCreateNewItem = impl_userCreateNewItem;
- epv->sendReceive = impl_sendReceive;
- epv->requestQuit = impl_requestQuit;
-
- shell_component_class = EVOLUTION_SHELL_COMPONENT_CLASS (object_class);
- shell_component_class->owner_died = impl_owner_died;
- shell_component_class->owner_unset = impl_owner_unset;
-}
-
-static void
-evolution_shell_component_init (EvolutionShellComponent *shell_component)
-{
- EvolutionShellComponentPrivate *priv;
-
- priv = g_new (EvolutionShellComponentPrivate, 1);
-
- priv->folder_types = NULL;
- priv->external_uri_schemas = NULL;
-
- priv->create_view_fn = NULL;
- priv->create_folder_fn = NULL;
- priv->remove_folder_fn = NULL;
- priv->xfer_folder_fn = NULL;
- priv->populate_folder_context_menu_fn = NULL;
- priv->unpopulate_folder_context_menu_fn = NULL;
-
- priv->owner_client = NULL;
- priv->user_creatable_item_types = NULL;
- priv->closure = NULL;
-
- priv->ping_timeout_id = -1;
-
- priv->uic = NULL;
-
- shell_component->priv = priv;
-}
-
-
-void
-evolution_shell_component_construct (EvolutionShellComponent *shell_component,
- const EvolutionShellComponentFolderType folder_types[],
- const char *external_uri_schemas[],
- EvolutionShellComponentCreateViewFn create_view_fn,
- EvolutionShellComponentCreateFolderFn create_folder_fn,
- EvolutionShellComponentRemoveFolderFn remove_folder_fn,
- EvolutionShellComponentXferFolderFn xfer_folder_fn,
- EvolutionShellComponentPopulateFolderContextMenuFn populate_folder_context_menu_fn,
- EvolutionShellComponentUnpopulateFolderContextMenuFn unpopulate_folder_context_menu_fn,
- EvolutionShellComponentGetDndSelectionFn get_dnd_selection_fn,
- EvolutionShellComponentRequestQuitFn request_quit_fn,
- void *closure)
-{
- EvolutionShellComponentPrivate *priv;
- int i;
-
- g_return_if_fail (shell_component != NULL);
- g_return_if_fail (EVOLUTION_IS_SHELL_COMPONENT (shell_component));
- g_return_if_fail (folder_types != NULL);
-
- priv = shell_component->priv;
-
- priv->create_view_fn = create_view_fn;
- priv->create_folder_fn = create_folder_fn;
- priv->remove_folder_fn = remove_folder_fn;
- priv->xfer_folder_fn = xfer_folder_fn;
- priv->populate_folder_context_menu_fn = populate_folder_context_menu_fn;
- priv->unpopulate_folder_context_menu_fn = unpopulate_folder_context_menu_fn;
- priv->get_dnd_selection_fn = get_dnd_selection_fn;
- priv->request_quit_fn = request_quit_fn;
-
- priv->closure = closure;
-
- for (i = 0; folder_types[i].name != NULL; i++) {
- EvolutionShellComponentFolderType *new;
-
- if (folder_types[i].icon_name == NULL
- || folder_types[i].name[0] == '\0'
- || folder_types[i].icon_name[0] == '\0')
- continue;
-
- new = g_new (EvolutionShellComponentFolderType, 1);
- new->name = g_strdup (folder_types[i].name);
- new->icon_name = g_strdup (folder_types[i].icon_name);
-
- /* Notice that these get translated here. */
- new->display_name = g_strdup (_(folder_types[i].display_name));
- new->description = g_strdup (_(folder_types[i].description));
-
- new->user_creatable = folder_types[i].user_creatable;
- new->accepted_dnd_types = duplicate_null_terminated_string_array (folder_types[i].accepted_dnd_types);
- new->exported_dnd_types = duplicate_null_terminated_string_array (folder_types[i].exported_dnd_types);
-
- priv->folder_types = g_list_prepend (priv->folder_types, new);
- }
-
- if (priv->folder_types == NULL)
- g_warning ("No valid folder types constructing EShellComponent %p", shell_component);
-
- if (external_uri_schemas != NULL) {
- for (i = 0; external_uri_schemas[i] != NULL; i++)
- priv->external_uri_schemas = g_list_prepend (priv->external_uri_schemas,
- g_strdup (external_uri_schemas[i]));
- }
-}
-
-EvolutionShellComponent *
-evolution_shell_component_new (const EvolutionShellComponentFolderType folder_types[],
- const char *external_uri_schemas[],
- EvolutionShellComponentCreateViewFn create_view_fn,
- EvolutionShellComponentCreateFolderFn create_folder_fn,
- EvolutionShellComponentRemoveFolderFn remove_folder_fn,
- EvolutionShellComponentXferFolderFn xfer_folder_fn,
- EvolutionShellComponentPopulateFolderContextMenuFn populate_folder_context_menu_fn,
- EvolutionShellComponentUnpopulateFolderContextMenuFn unpopulate_folder_context_menu_fn,
- EvolutionShellComponentGetDndSelectionFn get_dnd_selection_fn,
- EvolutionShellComponentRequestQuitFn request_quit_fn,
- void *closure)
-{
- EvolutionShellComponent *new;
-
- g_return_val_if_fail (folder_types != NULL, NULL);
-
- new = g_object_new (evolution_shell_component_get_type (), NULL);
-
- evolution_shell_component_construct (new,
- folder_types,
- external_uri_schemas,
- create_view_fn,
- create_folder_fn,
- remove_folder_fn,
- xfer_folder_fn,
- populate_folder_context_menu_fn,
- unpopulate_folder_context_menu_fn,
- get_dnd_selection_fn,
- request_quit_fn,
- closure);
-
- return new;
-}
-
-EvolutionShellClient *
-evolution_shell_component_get_owner (EvolutionShellComponent *shell_component)
-{
- g_return_val_if_fail (shell_component != NULL, NULL);
- g_return_val_if_fail (EVOLUTION_IS_SHELL_COMPONENT (shell_component), NULL);
-
- return shell_component->priv->owner_client;
-}
-
-gulong evolution_shell_component_get_parent_view_xid(EvolutionShellComponent *shell_component)
-{
- g_return_val_if_fail (shell_component != NULL, 0);
- g_return_val_if_fail (EVOLUTION_IS_SHELL_COMPONENT (shell_component), 0);
-
- return shell_component->priv->parent_view_xid;
-}
-
-
-void
-evolution_shell_component_add_user_creatable_item (EvolutionShellComponent *shell_component,
- const char *id,
- const char *description,
- const char *menu_description,
- const char *tooltip,
- const char *folder_type,
- char menu_shortcut,
- GdkPixbuf *icon)
-{
- EvolutionShellComponentPrivate *priv;
- UserCreatableItemType *type;
-
- g_return_if_fail (shell_component != NULL);
- g_return_if_fail (EVOLUTION_IS_SHELL_COMPONENT (shell_component));
- g_return_if_fail (id != NULL);
- g_return_if_fail (description != NULL);
- g_return_if_fail (menu_description != NULL);
-
- priv = shell_component->priv;
-
- type = user_creatable_item_type_new (id, description, menu_description, tooltip, folder_type, menu_shortcut, icon);
-
- priv->user_creatable_item_types = g_slist_prepend (priv->user_creatable_item_types, type);
-}
-
-
-/* Public utility functions. */
-
-const char *
-evolution_shell_component_result_to_string (EvolutionShellComponentResult result)
-{
- switch (result) {
- case EVOLUTION_SHELL_COMPONENT_OK:
- return _("Success");
- case EVOLUTION_SHELL_COMPONENT_CANCEL:
- return _("Cancel");
- case EVOLUTION_SHELL_COMPONENT_CORBAERROR:
- return _("CORBA error");
- case EVOLUTION_SHELL_COMPONENT_INTERRUPTED:
- return _("Interrupted");
- case EVOLUTION_SHELL_COMPONENT_INVALIDARG:
- return _("Invalid argument");
- case EVOLUTION_SHELL_COMPONENT_ALREADYOWNED:
- return _("Already has an owner");
- case EVOLUTION_SHELL_COMPONENT_NOTOWNED:
- return _("No owner");
- case EVOLUTION_SHELL_COMPONENT_NOTFOUND:
- return _("Not found");
- case EVOLUTION_SHELL_COMPONENT_UNSUPPORTEDTYPE:
- return _("Unsupported type");
- case EVOLUTION_SHELL_COMPONENT_UNSUPPORTEDSCHEMA:
- return _("Unsupported schema");
- case EVOLUTION_SHELL_COMPONENT_UNSUPPORTEDOPERATION:
- return _("Unsupported operation");
- case EVOLUTION_SHELL_COMPONENT_INTERNALERROR:
- return _("Internal error");
- case EVOLUTION_SHELL_COMPONENT_BUSY:
- return _("Busy");
- case EVOLUTION_SHELL_COMPONENT_EXISTS:
- return _("Exists");
- case EVOLUTION_SHELL_COMPONENT_INVALIDURI:
- return _("Invalid URI");
- case EVOLUTION_SHELL_COMPONENT_PERMISSIONDENIED:
- return _("Permission denied");
- case EVOLUTION_SHELL_COMPONENT_HASSUBFOLDERS:
- return _("Has subfolders");
- case EVOLUTION_SHELL_COMPONENT_NOSPACE:
- return _("No space left");
- case EVOLUTION_SHELL_COMPONENT_OLDOWNERHASDIED:
- return _("Old owner has died");
- case EVOLUTION_SHELL_COMPONENT_UNKNOWNERROR:
- default:
- return _("Unknown error");
- }
-}
-
-
-BONOBO_TYPE_FUNC_FULL (EvolutionShellComponent,
- GNOME_Evolution_ShellComponent,
- PARENT_TYPE,
- evolution_shell_component)
diff --git a/shell/evolution-shell-component.h b/shell/evolution-shell-component.h
deleted file mode 100644
index 53d9a4aae9..0000000000
--- a/shell/evolution-shell-component.h
+++ /dev/null
@@ -1,217 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* evolution-shell-component.h
- *
- * Copyright (C) 2000, 2001 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifndef EVOLUTION_SHELL_COMPONENT_H
-#define EVOLUTION_SHELL_COMPONENT_H
-
-#include "Evolution.h"
-
-#include "evolution-shell-client.h"
-
-#include <gdk-pixbuf/gdk-pixbuf.h>
-
-#include <bonobo/bonobo-object.h>
-#include <bonobo/bonobo-control.h>
-
-#ifdef cplusplus
-extern "C" {
-#pragma }
-#endif /* cplusplus */
-
-#define EVOLUTION_TYPE_SHELL_COMPONENT (evolution_shell_component_get_type ())
-#define EVOLUTION_SHELL_COMPONENT(obj) (GTK_CHECK_CAST ((obj), EVOLUTION_TYPE_SHELL_COMPONENT, EvolutionShellComponent))
-#define EVOLUTION_SHELL_COMPONENT_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), EVOLUTION_TYPE_SHELL_COMPONENT, EvolutionShellComponentClass))
-#define EVOLUTION_IS_SHELL_COMPONENT(obj) (GTK_CHECK_TYPE ((obj), EVOLUTION_TYPE_SHELL_COMPONENT))
-#define EVOLUTION_IS_SHELL_COMPONENT_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), EVOLUTION_TYPE_SHELL_COMPONENT))
-
-#define EVOLUTION_SHELL_COMPONENT_POPUP_PLACEHOLDER "/popups/FolderPopup/ComponentPlaceholder/Items"
-
-
-typedef struct _EvolutionShellComponent EvolutionShellComponent;
-typedef struct _EvolutionShellComponentPrivate EvolutionShellComponentPrivate;
-typedef struct _EvolutionShellComponentClass EvolutionShellComponentClass;
-
-enum _EvolutionShellComponentResult {
- EVOLUTION_SHELL_COMPONENT_OK,
- EVOLUTION_SHELL_COMPONENT_CANCEL,
- EVOLUTION_SHELL_COMPONENT_CORBAERROR,
- EVOLUTION_SHELL_COMPONENT_INTERRUPTED,
- EVOLUTION_SHELL_COMPONENT_INVALIDARG,
- EVOLUTION_SHELL_COMPONENT_ALREADYOWNED,
- EVOLUTION_SHELL_COMPONENT_NOTOWNED,
- EVOLUTION_SHELL_COMPONENT_NOTFOUND,
- EVOLUTION_SHELL_COMPONENT_UNSUPPORTEDTYPE,
- EVOLUTION_SHELL_COMPONENT_UNSUPPORTEDSCHEMA,
- EVOLUTION_SHELL_COMPONENT_UNSUPPORTEDOPERATION,
- EVOLUTION_SHELL_COMPONENT_INTERNALERROR,
- EVOLUTION_SHELL_COMPONENT_BUSY,
- EVOLUTION_SHELL_COMPONENT_EXISTS,
- EVOLUTION_SHELL_COMPONENT_INVALIDURI,
- EVOLUTION_SHELL_COMPONENT_PERMISSIONDENIED,
- EVOLUTION_SHELL_COMPONENT_HASSUBFOLDERS,
- EVOLUTION_SHELL_COMPONENT_NOSPACE,
- EVOLUTION_SHELL_COMPONENT_OLDOWNERHASDIED,
- EVOLUTION_SHELL_COMPONENT_UNKNOWNERROR
-};
-typedef enum _EvolutionShellComponentResult EvolutionShellComponentResult;
-
-typedef EvolutionShellComponentResult (* EvolutionShellComponentCreateViewFn)
- (EvolutionShellComponent *shell_component,
- const char *physical_uri,
- const char *type,
- const char *view_info,
- BonoboControl **control_return,
- void *closure);
-typedef void (* EvolutionShellComponentCreateFolderFn) (EvolutionShellComponent *shell_component,
- const char *physical_uri,
- const char *type,
- const GNOME_Evolution_ShellComponentListener listener,
- void *closure);
-typedef void (* EvolutionShellComponentRemoveFolderFn) (EvolutionShellComponent *shell_component,
- const char *physical_uri,
- const char *type,
- const GNOME_Evolution_ShellComponentListener listener,
- void *closure);
-typedef void (* EvolutionShellComponentXferFolderFn) (EvolutionShellComponent *shell_component,
- const char *source_physical_uri,
- const char *destination_physical_uri,
- const char *type,
- gboolean remove_source,
- const GNOME_Evolution_ShellComponentListener listener,
- void *closure);
-typedef void (* EvolutionShellComponentPopulateFolderContextMenuFn) (EvolutionShellComponent *shell_component,
- BonoboUIComponent *uic,
- const char *physical_uri,
- const char *type,
- void *closure);
-typedef void (* EvolutionShellComponentUnpopulateFolderContextMenuFn) (EvolutionShellComponent *shell_component,
- BonoboUIComponent *uic,
- const char *physical_uri,
- const char *type,
- void *closure);
-typedef char * (* EvolutionShellComponentGetDndSelectionFn) (EvolutionShellComponent *shell_component,
- const char *physical_uri,
- int type,
- int *format_return,
- const char **selection_return,
- int *selection_length_return,
- void *closure);
-
-typedef gboolean (* EvolutionShellComponentRequestQuitFn) (EvolutionShellComponent *shell_component,
- void *closure);
-
-struct _EvolutionShellComponentFolderType {
- char *name;
- char *icon_name;
- char *display_name;
- char *description;
-
- gboolean user_creatable;
-
- /* The following are NULL-terminated arrays. */
- char **accepted_dnd_types;
- char **exported_dnd_types;
-};
-typedef struct _EvolutionShellComponentFolderType EvolutionShellComponentFolderType;
-
-struct _EvolutionShellComponent {
- BonoboObject parent;
-
- EvolutionShellComponentPrivate *priv;
-};
-
-struct _EvolutionShellComponentClass {
- BonoboObjectClass parent_class;
-
- POA_GNOME_Evolution_ShellComponent__epv epv;
-
- /* Signals. */
-
- void (* owner_set) (EvolutionShellComponent *shell_component,
- EvolutionShellClient *shell_client,
- const char *evolution_homedir);
- void (* owner_unset) (EvolutionShellComponent *shell_component);
- void (* owner_died) (EvolutionShellComponent *shell_component);
-
- void (* debug) (EvolutionShellComponent *shell_component);
-
- void (* interactive) (EvolutionShellComponent *shell_component,
- gboolean is_interactive,
- unsigned long new_view_xid);
-
- void (* handle_external_uri) (EvolutionShellComponent *shell_component,
- const char *uri);
-
- void (* user_create_new_item) (EvolutionShellComponent *shell_component,
- const char *id,
- const char *parent_folder_physical_uri,
- const char *parent_folder_type);
-
- void (* send_receive) (EvolutionShellComponent *shell_component,
- gboolean show_dialog);
-};
-
-
-GtkType evolution_shell_component_get_type (void);
-void evolution_shell_component_construct (EvolutionShellComponent *shell_component,
- const EvolutionShellComponentFolderType folder_types[],
- const char *external_uri_schemas[],
- EvolutionShellComponentCreateViewFn create_view_fn,
- EvolutionShellComponentCreateFolderFn create_folder_fn,
- EvolutionShellComponentRemoveFolderFn remove_folder_fn,
- EvolutionShellComponentXferFolderFn xfer_folder_fn,
- EvolutionShellComponentPopulateFolderContextMenuFn populate_folder_context_menu_fn,
- EvolutionShellComponentUnpopulateFolderContextMenuFn unpopulate_folder_context_menu_fn,
- EvolutionShellComponentGetDndSelectionFn get_dnd_selection_fn,
- EvolutionShellComponentRequestQuitFn request_quit_fn,
- void *closure);
-EvolutionShellComponent *evolution_shell_component_new (const EvolutionShellComponentFolderType folder_types[],
- const char *external_uri_schemas[],
- EvolutionShellComponentCreateViewFn create_view_fn,
- EvolutionShellComponentCreateFolderFn create_folder_fn,
- EvolutionShellComponentRemoveFolderFn remove_folder_fn,
- EvolutionShellComponentXferFolderFn xfer_folder_fn,
- EvolutionShellComponentPopulateFolderContextMenuFn populate_folder_context_menu_fn,
- EvolutionShellComponentUnpopulateFolderContextMenuFn unpopulate_folder_context_menu_fn,
- EvolutionShellComponentGetDndSelectionFn get_dnd_selection_fn,
- EvolutionShellComponentRequestQuitFn request_quit_fn,
- void *closure);
-EvolutionShellClient *evolution_shell_component_get_owner (EvolutionShellComponent *shell_component);
-
-gulong evolution_shell_component_get_parent_view_xid(EvolutionShellComponent *shell_component);
-
-void evolution_shell_component_add_user_creatable_item (EvolutionShellComponent *shell_component,
- const char *id,
- const char *description,
- const char *menu_description,
- const char *tooltip,
- const char *folder_type,
- char menu_shortcut,
- GdkPixbuf *icon);
-
-const char *evolution_shell_component_result_to_string (EvolutionShellComponentResult result);
-
-#ifdef cplusplus
-}
-#endif /* cplusplus */
-
-#endif /* EVOLUTION_SHELL_COMPONENT_H */
diff --git a/shell/evolution-shell-view.c b/shell/evolution-shell-view.c
deleted file mode 100644
index 4858d18e24..0000000000
--- a/shell/evolution-shell-view.c
+++ /dev/null
@@ -1,258 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* evolution-shell-view.c
- *
- * Copyright (C) 2000, 2001, 2002 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <gtk/gtksignal.h>
-
-#include <gal/util/e-util.h>
-
-#include "evolution-shell-view.h"
-
-#include "e-shell-marshal.h"
-
-
-#define PARENT_TYPE bonobo_object_get_type ()
-static BonoboObjectClass *parent_class = NULL;
-
-struct _EvolutionShellViewPrivate {
- int dummy;
-};
-
-enum {
- SET_MESSAGE,
- UNSET_MESSAGE,
- CHANGE_VIEW,
- SET_TITLE,
- SET_FOLDER_BAR_LABEL,
- SHOW_SETTINGS,
- LAST_SIGNAL
-};
-static int signals[LAST_SIGNAL] = { 0 };
-
-
-/* CORBA interface implementation. */
-
-static void
-impl_ShellView_set_message (PortableServer_Servant servant,
- const CORBA_char *message,
- const CORBA_boolean busy,
- CORBA_Environment *ev)
-{
- BonoboObject *bonobo_object;
-
- bonobo_object = bonobo_object_from_servant (servant);
- g_signal_emit (bonobo_object, signals[SET_MESSAGE], 0, message, busy);
-}
-
-static void
-impl_ShellView_unset_message (PortableServer_Servant servant,
- CORBA_Environment *ev)
-{
- BonoboObject *bonobo_object;
-
- bonobo_object = bonobo_object_from_servant (servant);
- g_signal_emit (bonobo_object, signals[UNSET_MESSAGE], 0);
-}
-
-static void
-impl_ShellView_change_current_view (PortableServer_Servant servant,
- const CORBA_char *uri,
- CORBA_Environment *ev)
-{
- BonoboObject *bonobo_object;
-
- bonobo_object = bonobo_object_from_servant (servant);
- g_signal_emit (bonobo_object, signals[CHANGE_VIEW], 0, uri);
-}
-
-static void
-impl_ShellView_set_title (PortableServer_Servant servant,
- const CORBA_char *title,
- CORBA_Environment *ev)
-{
- BonoboObject *bonobo_object;
-
- bonobo_object = bonobo_object_from_servant (servant);
- g_signal_emit (bonobo_object, signals[SET_TITLE], 0, title);
-}
-
-static void
-impl_ShellView_set_folder_bar_label (PortableServer_Servant servant,
- const CORBA_char *text,
- CORBA_Environment *ev)
-{
- BonoboObject *bonobo_object;
-
- bonobo_object = bonobo_object_from_servant (servant);
- g_signal_emit (bonobo_object, signals[SET_FOLDER_BAR_LABEL], 0, text);
-}
-
-static void
-impl_ShellView_show_settings (PortableServer_Servant servant,
- CORBA_Environment *ev)
-{
- BonoboObject *bonobo_object;
-
- bonobo_object = bonobo_object_from_servant (servant);
- g_signal_emit (bonobo_object, signals[SHOW_SETTINGS], 0);
-}
-
-
-/* GObject methods. */
-
-static void
-impl_dispose (GObject *object)
-{
- /* Nothing to do here. */
-
- (* G_OBJECT_CLASS (parent_class)->dispose) (object);
-}
-
-static void
-impl_finalize (GObject *object)
-{
- EvolutionShellView *shell_view;
- EvolutionShellViewPrivate *priv;
-
- shell_view = EVOLUTION_SHELL_VIEW (object);
- priv = shell_view->priv;
-
- g_free (priv);
-
- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
-}
-
-
-static void
-evolution_shell_view_class_init (EvolutionShellViewClass *klass)
-{
- POA_GNOME_Evolution_ShellView__epv *epv;
- GObjectClass *object_class;
-
- object_class = G_OBJECT_CLASS (klass);
- object_class->dispose = impl_dispose;
- object_class->finalize = impl_finalize;
-
- epv = &klass->epv;
- epv->setMessage = impl_ShellView_set_message;
- epv->unsetMessage = impl_ShellView_unset_message;
- epv->changeCurrentView = impl_ShellView_change_current_view;
- epv->setTitle = impl_ShellView_set_title;
- epv->setFolderBarLabel = impl_ShellView_set_folder_bar_label;
- epv->showSettings = impl_ShellView_show_settings;
-
- signals[SET_MESSAGE]
- = g_signal_new ("set_message",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EvolutionShellViewClass, set_message),
- NULL, NULL,
- e_shell_marshal_NONE__STRING_BOOL,
- G_TYPE_NONE, 2,
- G_TYPE_STRING,
- G_TYPE_BOOLEAN);
-
- signals[UNSET_MESSAGE]
- = g_signal_new ("unset_message",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EvolutionShellViewClass, unset_message),
- NULL, NULL,
- e_shell_marshal_NONE__NONE,
- G_TYPE_NONE, 0);
-
- signals[CHANGE_VIEW]
- = g_signal_new ("change_current_view",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EvolutionShellViewClass, change_current_view),
- NULL, NULL,
- e_shell_marshal_NONE__STRING,
- G_TYPE_NONE, 1,
- G_TYPE_STRING);
-
- signals[SET_TITLE]
- = g_signal_new ("set_title",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EvolutionShellViewClass, set_title),
- NULL, NULL,
- e_shell_marshal_NONE__STRING,
- G_TYPE_NONE, 1,
- G_TYPE_STRING);
-
- signals[SET_FOLDER_BAR_LABEL]
- = g_signal_new ("set_folder_bar_label",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EvolutionShellViewClass, set_folder_bar_label),
- NULL, NULL,
- e_shell_marshal_NONE__STRING,
- G_TYPE_NONE, 1,
- G_TYPE_STRING);
-
- signals[SHOW_SETTINGS]
- = g_signal_new ("show_settings",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EvolutionShellViewClass, show_settings),
- NULL, NULL,
- e_shell_marshal_NONE__NONE,
- G_TYPE_NONE, 0);
-
- parent_class = g_type_class_ref(bonobo_object_get_type ());
-}
-
-static void
-evolution_shell_view_init (EvolutionShellView *shell_view)
-{
- EvolutionShellViewPrivate *priv;
-
- priv = g_new (EvolutionShellViewPrivate, 1);
- priv->dummy = 0;
-
- shell_view->priv = priv;
-}
-
-
-
-/**
- * evolution_shell_view_new:
- *
- * Create a new EvolutionShellView object.
- *
- * Return value: The new EvolutionShellView object.
- **/
-EvolutionShellView *
-evolution_shell_view_new (void)
-{
- return g_object_new (evolution_shell_view_get_type (), NULL);
-}
-
-
-BONOBO_TYPE_FUNC_FULL (EvolutionShellView,
- GNOME_Evolution_ShellView,
- PARENT_TYPE,
- evolution_shell_view)
diff --git a/shell/evolution-shell-view.h b/shell/evolution-shell-view.h
deleted file mode 100644
index 0646b42162..0000000000
--- a/shell/evolution-shell-view.h
+++ /dev/null
@@ -1,76 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* evolution-shell-view.h
- *
- * Copyright (C) 2000 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifndef __EVOLUTION_SHELL_VIEW_H__
-#define __EVOLUTION_SHELL_VIEW_H__
-
-#include <glib.h>
-#include <bonobo/bonobo-object.h>
-
-#include "Evolution.h"
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-#define EVOLUTION_TYPE_SHELL_VIEW (evolution_shell_view_get_type ())
-#define EVOLUTION_SHELL_VIEW(obj) (GTK_CHECK_CAST ((obj), EVOLUTION_TYPE_SHELL_VIEW, EvolutionShellView))
-#define EVOLUTION_SHELL_VIEW_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), EVOLUTION_TYPE_SHELL_VIEW, EvolutionShellViewClass))
-#define EVOLUTION_IS_SHELL_VIEW(obj) (GTK_CHECK_TYPE ((obj), EVOLUTION_TYPE_SHELL_VIEW))
-#define EVOLUTION_IS_SHELL_VIEW_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), EVOLUTION_TYPE_SHELL_VIEW))
-
-
-typedef struct _EvolutionShellView EvolutionShellView;
-typedef struct _EvolutionShellViewPrivate EvolutionShellViewPrivate;
-typedef struct _EvolutionShellViewClass EvolutionShellViewClass;
-
-struct _EvolutionShellView {
- BonoboObject parent;
-
- EvolutionShellViewPrivate *priv;
-};
-
-struct _EvolutionShellViewClass {
- BonoboObjectClass parent_class;
-
- /* Signals. */
-
- void (* set_message) (EvolutionShellView *shell_view, const char *message, gboolean busy);
- void (* unset_message) (EvolutionShellView *shell_view);
- void (* change_current_view) (EvolutionShellView *shell_view, const char *uri);
- void (* set_title) (EvolutionShellView *shell_view, const char *message);
- void (* set_folder_bar_label) (EvolutionShellView *shell_view, const char *text);
- void (* show_settings) (EvolutionShellView *shell_view);
-
- POA_GNOME_Evolution_ShellView__epv epv;
-};
-
-
-GtkType evolution_shell_view_get_type (void);
-EvolutionShellView *evolution_shell_view_new (void);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* __EVOLUTION_SHELL_VIEW_H__ */
diff --git a/shell/evolution-storage-listener.c b/shell/evolution-storage-listener.c
deleted file mode 100644
index 3961014846..0000000000
--- a/shell/evolution-storage-listener.c
+++ /dev/null
@@ -1,386 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* evolution-storage-listener.c
- *
- * Copyright (C) 2000 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <gtk/gtksignal.h>
-#include <bonobo/bonobo-main.h>
-#include <gal/util/e-util.h>
-
-#include "evolution-storage-listener.h"
-
-#include "e-shell-marshal.h"
-
-
-#define PARENT_TYPE gtk_object_get_type ()
-static GtkObjectClass *parent_class = NULL;
-
-struct _EvolutionStorageListenerPrivate {
- GNOME_Evolution_StorageListener corba_objref;
- EvolutionStorageListenerServant *servant;
-};
-
-
-enum {
- DESTROYED,
- NEW_FOLDER,
- UPDATE_FOLDER,
- REMOVED_FOLDER,
- HAS_SUBFOLDERS,
- LAST_SIGNAL
-};
-static guint signals[LAST_SIGNAL] = { 0 };
-
-
-/* Evolution::StorageListener implementation. */
-
-static POA_GNOME_Evolution_StorageListener__vepv my_GNOME_Evolution_StorageListener_vepv;
-
-static EvolutionStorageListener *
-gtk_object_from_servant (PortableServer_Servant servant)
-{
- EvolutionStorageListenerServant *my_servant;
-
- my_servant = (EvolutionStorageListenerServant *) servant;
- return my_servant->gtk_object;
-}
-
-static void
-impl_GNOME_Evolution_StorageListener_notifyDestroyed (PortableServer_Servant servant,
- CORBA_Environment *ev)
-{
- EvolutionStorageListener *listener;
- EvolutionStorageListenerPrivate *priv;
-
- listener = gtk_object_from_servant (servant);
- priv = listener->priv;
-
- g_signal_emit (listener, signals[DESTROYED], 0);
-}
-
-static void
-impl_GNOME_Evolution_StorageListener_notifyFolderCreated (PortableServer_Servant servant,
- const CORBA_char *path,
- const GNOME_Evolution_Folder *folder,
- CORBA_Environment *ev)
-{
- EvolutionStorageListener *listener;
- EvolutionStorageListenerPrivate *priv;
-
- listener = gtk_object_from_servant (servant);
- priv = listener->priv;
-
- g_signal_emit (listener, signals[NEW_FOLDER], 0, path, folder);
-}
-
-static void
-impl_GNOME_Evolution_StorageListener_notifyFolderUpdated (PortableServer_Servant servant,
- const CORBA_char *path,
- CORBA_long unread_count,
- CORBA_Environment *ev)
-{
- EvolutionStorageListener *listener;
- EvolutionStorageListenerPrivate *priv;
-
- listener = gtk_object_from_servant (servant);
- priv = listener->priv;
-
- g_signal_emit (listener, signals[UPDATE_FOLDER], 0, path, unread_count);
-}
-
-static void
-impl_GNOME_Evolution_StorageListener_notifyFolderRemoved (PortableServer_Servant servant,
- const CORBA_char *path,
- CORBA_Environment *ev)
-{
- EvolutionStorageListener *listener;
- EvolutionStorageListenerPrivate *priv;
-
- listener = gtk_object_from_servant (servant);
- priv = listener->priv;
-
- g_signal_emit (listener, signals[REMOVED_FOLDER], 0, path);
-}
-
-static void
-impl_GNOME_Evolution_StorageListener_notifyHasSubfolders (PortableServer_Servant servant,
- const CORBA_char *path,
- const CORBA_char *message,
- CORBA_Environment *ev)
-{
- EvolutionStorageListener *listener;
- EvolutionStorageListenerPrivate *priv;
-
- listener = gtk_object_from_servant (servant);
- priv = listener->priv;
-
- g_signal_emit (listener, signals[HAS_SUBFOLDERS], 0, path, message);
-}
-
-static EvolutionStorageListenerServant *
-create_servant (EvolutionStorageListener *listener)
-{
- EvolutionStorageListenerServant *servant;
- POA_GNOME_Evolution_StorageListener *corba_servant;
- CORBA_Environment ev;
-
- CORBA_exception_init (&ev);
-
- servant = g_new0 (EvolutionStorageListenerServant, 1);
- corba_servant = (POA_GNOME_Evolution_StorageListener *) servant;
-
- corba_servant->vepv = &my_GNOME_Evolution_StorageListener_vepv;
- POA_GNOME_Evolution_StorageListener__init ((PortableServer_Servant) corba_servant, &ev);
- if (ev._major != CORBA_NO_EXCEPTION) {
- g_free (servant);
- CORBA_exception_free (&ev);
- return NULL;
- }
-
- servant->gtk_object = listener;
-
- CORBA_exception_free (&ev);
-
- return servant;
-}
-
-static GNOME_Evolution_StorageListener
-activate_servant (EvolutionStorageListener *listener,
- POA_GNOME_Evolution_StorageListener *servant)
-{
- GNOME_Evolution_StorageListener corba_object;
- CORBA_Environment ev;
-
- CORBA_exception_init (&ev);
-
- CORBA_free (PortableServer_POA_activate_object (bonobo_poa (), servant, &ev));
-
- corba_object = PortableServer_POA_servant_to_reference (bonobo_poa(), servant, &ev);
-
- if (ev._major == CORBA_NO_EXCEPTION && ! CORBA_Object_is_nil (corba_object, &ev)) {
- CORBA_exception_free (&ev);
- return corba_object;
- }
-
- CORBA_exception_free (&ev);
-
- return CORBA_OBJECT_NIL;
-}
-
-
-/* GObject methods. */
-
-static void
-impl_finalize (GObject *object)
-{
- EvolutionStorageListener *storage_listener;
- EvolutionStorageListenerPrivate *priv;
- CORBA_Environment ev;
-
- storage_listener = EVOLUTION_STORAGE_LISTENER (object);
- priv = storage_listener->priv;
-
- CORBA_exception_init (&ev);
-
- if (priv->corba_objref != CORBA_OBJECT_NIL)
- CORBA_Object_release (priv->corba_objref, &ev);
-
- if (priv->servant != NULL) {
- PortableServer_ObjectId *object_id;
-
- object_id = PortableServer_POA_servant_to_id (bonobo_poa(), priv->servant, &ev);
- PortableServer_POA_deactivate_object (bonobo_poa (), object_id, &ev);
- CORBA_free (object_id);
- }
-
- CORBA_exception_free (&ev);
-
- g_free (priv);
-
- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
-}
-
-
-static void
-corba_class_init (void)
-{
- POA_GNOME_Evolution_StorageListener__vepv *vepv;
- POA_GNOME_Evolution_StorageListener__epv *epv;
- PortableServer_ServantBase__epv *base_epv;
-
- base_epv = g_new0 (PortableServer_ServantBase__epv, 1);
- base_epv->_private = NULL;
- base_epv->finalize = NULL;
- base_epv->default_POA = NULL;
-
- epv = g_new0 (POA_GNOME_Evolution_StorageListener__epv, 1);
- epv->notifyDestroyed = impl_GNOME_Evolution_StorageListener_notifyDestroyed;
- epv->notifyFolderCreated = impl_GNOME_Evolution_StorageListener_notifyFolderCreated;
- epv->notifyFolderUpdated = impl_GNOME_Evolution_StorageListener_notifyFolderUpdated;
- epv->notifyFolderRemoved = impl_GNOME_Evolution_StorageListener_notifyFolderRemoved;
- epv->notifyHasSubfolders = impl_GNOME_Evolution_StorageListener_notifyHasSubfolders;
-
- vepv = & my_GNOME_Evolution_StorageListener_vepv;
- vepv->_base_epv = base_epv;
- vepv->GNOME_Evolution_StorageListener_epv = epv;
-}
-
-static void
-class_init (EvolutionStorageListenerClass *klass)
-{
- GObjectClass *object_class;
-
- parent_class = g_type_class_ref(PARENT_TYPE);
-
- object_class = G_OBJECT_CLASS (klass);
- object_class->finalize = impl_finalize;
-
- signals[DESTROYED]
- = g_signal_new ("destroyed",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EvolutionStorageListenerClass, destroyed),
- NULL, NULL,
- e_shell_marshal_NONE__NONE,
- G_TYPE_NONE, 0);
-
- signals[NEW_FOLDER]
- = g_signal_new ("new_folder",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EvolutionStorageListenerClass, new_folder),
- NULL, NULL,
- e_shell_marshal_NONE__STRING_POINTER,
- G_TYPE_NONE, 2,
- G_TYPE_STRING,
- G_TYPE_POINTER);
-
- signals[UPDATE_FOLDER]
- = g_signal_new ("update_folder",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EvolutionStorageListenerClass, update_folder),
- NULL, NULL,
- e_shell_marshal_NONE__STRING_INT,
- G_TYPE_NONE, 2,
- G_TYPE_STRING,
- G_TYPE_INT);
-
- signals[REMOVED_FOLDER]
- = g_signal_new ("removed_folder",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EvolutionStorageListenerClass, removed_folder),
- NULL, NULL,
- e_shell_marshal_NONE__STRING,
- G_TYPE_NONE, 1,
- G_TYPE_STRING);
-
- signals[HAS_SUBFOLDERS]
- = g_signal_new ("has_subfolders",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EvolutionStorageListenerClass, has_subfolders),
- NULL, NULL,
- e_shell_marshal_NONE__STRING_STRING,
- G_TYPE_NONE, 2,
- G_TYPE_STRING,
- G_TYPE_STRING);
-
- corba_class_init ();
-}
-
-static void
-init (EvolutionStorageListener *storage_listener)
-{
- EvolutionStorageListenerPrivate *priv;
-
- priv = g_new (EvolutionStorageListenerPrivate, 1);
- priv->corba_objref = CORBA_OBJECT_NIL;
-
- storage_listener->priv = priv;
-}
-
-
-void
-evolution_storage_listener_construct (EvolutionStorageListener *listener,
- GNOME_Evolution_StorageListener corba_objref)
-{
- EvolutionStorageListenerPrivate *priv;
-
- g_return_if_fail (listener != NULL);
- g_return_if_fail (corba_objref != CORBA_OBJECT_NIL);
-
- priv = listener->priv;
-
- g_return_if_fail (priv->corba_objref == CORBA_OBJECT_NIL);
-
- priv->corba_objref = corba_objref;
-
- GTK_OBJECT_UNSET_FLAGS (GTK_OBJECT (listener), GTK_FLOATING);
-}
-
-EvolutionStorageListener *
-evolution_storage_listener_new (void)
-{
- EvolutionStorageListener *new;
- EvolutionStorageListenerPrivate *priv;
- GNOME_Evolution_StorageListener corba_objref;
-
- new = g_object_new (evolution_storage_listener_get_type (), NULL);
- priv = new->priv;
-
- priv->servant = create_servant (new);
- corba_objref = activate_servant (new, (POA_GNOME_Evolution_StorageListener *) priv->servant);
-
- evolution_storage_listener_construct (new, corba_objref);
-
- return new;
-}
-
-
-/**
- * evolution_storage_listener_corba_objref:
- * @listener: A pointer to an EvolutionStorageListener
- *
- * Get the CORBA object reference for the interface embedded in this GTK+
- * object wrapper.
- *
- * Return value: A pointer to the CORBA object reference.
- **/
-GNOME_Evolution_StorageListener
-evolution_storage_listener_corba_objref (EvolutionStorageListener *listener)
-{
- EvolutionStorageListenerPrivate *priv;
-
- g_return_val_if_fail (listener != NULL, CORBA_OBJECT_NIL);
- g_return_val_if_fail (EVOLUTION_IS_STORAGE_LISTENER (listener), CORBA_OBJECT_NIL);
-
- priv = listener->priv;
- return priv->corba_objref;
-}
-
-
-E_MAKE_TYPE (evolution_storage_listener, "EvolutionStorageListener", EvolutionStorageListener,
- class_init, init, PARENT_TYPE)
diff --git a/shell/evolution-storage-listener.h b/shell/evolution-storage-listener.h
deleted file mode 100644
index e48a3243f8..0000000000
--- a/shell/evolution-storage-listener.h
+++ /dev/null
@@ -1,94 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* evolution-storage-listener.h
- *
- * Copyright (C) 2000 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifndef __EVOLUTION_STORAGE_LISTENER_H__
-#define __EVOLUTION_STORAGE_LISTENER_H__
-
-#include <gtk/gtkobject.h>
-#include "Evolution.h"
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-#define EVOLUTION_TYPE_STORAGE_LISTENER (evolution_storage_listener_get_type ())
-#define EVOLUTION_STORAGE_LISTENER(obj) (GTK_CHECK_CAST ((obj), EVOLUTION_TYPE_STORAGE_LISTENER, EvolutionStorageListener))
-#define EVOLUTION_STORAGE_LISTENER_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), EVOLUTION_TYPE_STORAGE_LISTENER, EvolutionStorageListenerClass))
-#define EVOLUTION_IS_STORAGE_LISTENER(obj) (GTK_CHECK_TYPE ((obj), EVOLUTION_TYPE_STORAGE_LISTENER))
-#define EVOLUTION_IS_STORAGE_LISTENER_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), EVOLUTION_TYPE_STORAGE_LISTENER))
-
-
-typedef struct _EvolutionStorageListener EvolutionStorageListener;
-typedef struct _EvolutionStorageListenerPrivate EvolutionStorageListenerPrivate;
-typedef struct _EvolutionStorageListenerClass EvolutionStorageListenerClass;
-
-struct _EvolutionStorageListener {
- GtkObject parent;
-
- EvolutionStorageListenerPrivate *priv;
-};
-
-struct _EvolutionStorageListenerClass {
- GtkObjectClass parent_class;
-
- /* Signals. */
- void (* destroyed) (EvolutionStorageListener *storage_listener);
- void (* new_folder) (EvolutionStorageListener *storage_listener,
- const char *path,
- const GNOME_Evolution_Folder *folder);
- void (* update_folder) (EvolutionStorageListener *storage_listener,
- const char *path,
- int unread_count);
- void (* removed_folder) (EvolutionStorageListener *storage_listener,
- const char *path);
- void (* has_subfolders) (EvolutionStorageListener *storage_listener,
- const char *path,
- const char *message);
-
- void (* shared_folder_discovery_result) (EvolutionStorageListener *storage_listener,
- const char *user,
- const char *folder_name,
- const char *storage_path,
- const char *physical_uri);
-};
-
-
-struct _EvolutionStorageListenerServant {
- POA_GNOME_Evolution_StorageListener servant_placeholder;
- EvolutionStorageListener *gtk_object;
-};
-typedef struct _EvolutionStorageListenerServant EvolutionStorageListenerServant;
-
-
-GtkType evolution_storage_listener_get_type (void);
-void evolution_storage_listener_construct (EvolutionStorageListener *listener,
- GNOME_Evolution_StorageListener corba_objref);
-EvolutionStorageListener *evolution_storage_listener_new (void);
-
-GNOME_Evolution_StorageListener evolution_storage_listener_corba_objref (EvolutionStorageListener *listener);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* __EVOLUTION_STORAGE_LISTENER_H__ */
diff --git a/shell/evolution-storage-set-view-factory.c b/shell/evolution-storage-set-view-factory.c
deleted file mode 100644
index 7782d4cb5e..0000000000
--- a/shell/evolution-storage-set-view-factory.c
+++ /dev/null
@@ -1,74 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* evolution-storage-set-view-factory.c
- *
- * Copyright (C) 2000 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "e-storage-set-view.h"
-#include "e-shell.h"
-#include "evolution-storage-set-view.h"
-
-#include "evolution-storage-set-view-factory.h"
-
-#include <gtk/gtkscrolledwindow.h>
-
-
-BonoboControl *
-evolution_storage_set_view_factory_new_view (EShell *shell)
-{
- EStorageSet *storage_set;
- GtkWidget *storage_set_view;
- BonoboControl *control;
- EvolutionStorageSetView *storage_set_view_interface;
- GtkWidget *scrolled_window;
-
- g_return_val_if_fail (shell != NULL, NULL);
- g_return_val_if_fail (E_IS_SHELL (shell), NULL);
-
- storage_set = e_shell_get_storage_set (shell);
- storage_set_view = e_storage_set_create_new_view (storage_set, NULL /*XXX*/);
- e_storage_set_view_set_allow_dnd (E_STORAGE_SET_VIEW (storage_set_view), FALSE);
-
- storage_set_view_interface = evolution_storage_set_view_new (E_STORAGE_SET_VIEW (storage_set_view));
- if (storage_set_view_interface == NULL) {
- gtk_widget_destroy (storage_set_view);
- return NULL;
- }
-
- scrolled_window = gtk_scrolled_window_new (NULL, NULL);
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
- GTK_POLICY_AUTOMATIC,
- GTK_POLICY_AUTOMATIC);
- gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window),
- GTK_SHADOW_IN);
-
- gtk_container_add (GTK_CONTAINER (scrolled_window), storage_set_view);
-
- gtk_widget_show (scrolled_window);
- gtk_widget_show (storage_set_view);
-
- control = bonobo_control_new (scrolled_window);
- bonobo_object_add_interface (BONOBO_OBJECT (control), BONOBO_OBJECT (storage_set_view_interface));
-
- return control;
-}
diff --git a/shell/evolution-storage-set-view-factory.h b/shell/evolution-storage-set-view-factory.h
deleted file mode 100644
index 75d45cf1b8..0000000000
--- a/shell/evolution-storage-set-view-factory.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* evolution-storage-set-view-factory.h
- *
- * Copyright (C) 2000 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifndef _EVOLUTION_STORAGE_SET_VIEW_FACTORY_H
-#define _EVOLUTION_STORAGE_SET_VIEW_FACTORY_H
-
-#include "e-shell.h"
-
-BonoboControl *evolution_storage_set_view_factory_new_view (EShell *shell);
-
-#endif /* _EVOLUTION_STORAGE_SET_VIEW_FACTORY_H */
diff --git a/shell/evolution-storage-set-view-listener.c b/shell/evolution-storage-set-view-listener.c
deleted file mode 100644
index 3e78b97caa..0000000000
--- a/shell/evolution-storage-set-view-listener.c
+++ /dev/null
@@ -1,287 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* evolution-storage-set-view-listener.c
- *
- * Copyright (C) 2000 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <gtk/gtksignal.h>
-#include <bonobo/bonobo-main.h>
-#include <gal/util/e-util.h>
-
-#include "evolution-storage-set-view-listener.h"
-
-#include "e-shell-marshal.h"
-
-
-#define PARENT_TYPE gtk_object_get_type ()
-static GtkObjectClass *parent_class = NULL;
-
-struct _EvolutionStorageSetViewListenerPrivate {
- GNOME_Evolution_StorageSetViewListener corba_listener;
- EvolutionStorageSetViewListenerServant *servant;
-};
-
-enum {
- FOLDER_SELECTED,
- FOLDER_TOGGLED,
- LAST_SIGNAL
-};
-static guint signals[LAST_SIGNAL] = { 0 };
-
-
-/* Evolution::StorageSetViewListener implementation. */
-
-static POA_GNOME_Evolution_StorageSetViewListener__vepv my_GNOME_Evolution_StorageSetViewListener_vepv;
-
-static EvolutionStorageSetViewListener *
-gtk_object_from_servant (PortableServer_Servant servant)
-{
- EvolutionStorageSetViewListenerServant *my_servant;
-
- my_servant = (EvolutionStorageSetViewListenerServant *) servant;
- return my_servant->gtk_object;
-}
-
-static void
-impl_GNOME_Evolution_StorageSetViewListener_notifyFolderSelected (PortableServer_Servant servant,
- const CORBA_char *uri,
- CORBA_Environment *ev)
-{
- EvolutionStorageSetViewListener *listener;
-
- listener = gtk_object_from_servant (servant);
-
- g_signal_emit (listener, signals[FOLDER_SELECTED], 0, uri);
-}
-
-static void
-impl_GNOME_Evolution_StorageSetViewListener_notifyFolderToggled (PortableServer_Servant servant,
- CORBA_Environment *ev)
-{
- EvolutionStorageSetViewListener *listener;
-
- listener = gtk_object_from_servant (servant);
-
- g_signal_emit (listener, signals[FOLDER_TOGGLED], 0);
-}
-
-static EvolutionStorageSetViewListenerServant *
-create_servant (EvolutionStorageSetViewListener *listener)
-{
- EvolutionStorageSetViewListenerServant *servant;
- POA_GNOME_Evolution_StorageSetViewListener *corba_servant;
- CORBA_Environment ev;
-
- CORBA_exception_init (&ev);
-
- servant = g_new0 (EvolutionStorageSetViewListenerServant, 1);
- corba_servant = (POA_GNOME_Evolution_StorageSetViewListener *) servant;
-
- corba_servant->vepv = &my_GNOME_Evolution_StorageSetViewListener_vepv;
- POA_GNOME_Evolution_StorageSetViewListener__init ((PortableServer_Servant) corba_servant, &ev);
- if (ev._major != CORBA_NO_EXCEPTION) {
- g_free (servant);
- CORBA_exception_free (&ev);
- return NULL;
- }
-
- servant->gtk_object = listener;
-
- CORBA_exception_free (&ev);
-
- return servant;
-}
-
-static GNOME_Evolution_StorageSetViewListener
-activate_servant (EvolutionStorageSetViewListener *listener,
- POA_GNOME_Evolution_StorageSetViewListener *servant)
-{
- GNOME_Evolution_StorageSetViewListener corba_object;
- CORBA_Environment ev;
-
- CORBA_exception_init (&ev);
-
- CORBA_free (PortableServer_POA_activate_object (bonobo_poa (), servant, &ev));
-
- corba_object = PortableServer_POA_servant_to_reference (bonobo_poa(), servant, &ev);
-
- if (ev._major == CORBA_NO_EXCEPTION && ! CORBA_Object_is_nil (corba_object, &ev)) {
- CORBA_exception_free (&ev);
- return corba_object;
- }
-
- CORBA_exception_free (&ev);
-
- return CORBA_OBJECT_NIL;
-}
-
-
-/* GObject methods. */
-
-static void
-impl_finalize (GObject *object)
-{
- EvolutionStorageSetViewListener *listener;
- EvolutionStorageSetViewListenerPrivate *priv;
- CORBA_Environment ev;
-
- listener = EVOLUTION_STORAGE_SET_VIEW_LISTENER (object);
- priv = listener->priv;
-
- CORBA_exception_init (&ev);
-
- if (priv->corba_listener != CORBA_OBJECT_NIL)
- CORBA_Object_release (priv->corba_listener, &ev);
-
- if (priv->servant != NULL) {
- PortableServer_ObjectId *object_id;
-
- object_id = PortableServer_POA_servant_to_id (bonobo_poa(), priv->servant, &ev);
- PortableServer_POA_deactivate_object (bonobo_poa (), object_id, &ev);
- CORBA_free (object_id);
- }
-
- CORBA_exception_free (&ev);
-
- g_free (priv);
-
- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
-}
-
-
-static void
-corba_class_init (void)
-{
- POA_GNOME_Evolution_StorageSetViewListener__vepv *vepv;
- POA_GNOME_Evolution_StorageSetViewListener__epv *epv;
- PortableServer_ServantBase__epv *base_epv;
-
- base_epv = g_new0 (PortableServer_ServantBase__epv, 1);
- base_epv->_private = NULL;
- base_epv->finalize = NULL;
- base_epv->default_POA = NULL;
-
- epv = g_new0 (POA_GNOME_Evolution_StorageSetViewListener__epv, 1);
- epv->notifyFolderSelected = impl_GNOME_Evolution_StorageSetViewListener_notifyFolderSelected;
- epv->notifyFolderToggled = impl_GNOME_Evolution_StorageSetViewListener_notifyFolderToggled;
-
- vepv = & my_GNOME_Evolution_StorageSetViewListener_vepv;
- vepv->_base_epv = base_epv;
- vepv->GNOME_Evolution_StorageSetViewListener_epv = epv;
-}
-
-static void
-class_init (EvolutionStorageSetViewListenerClass *klass)
-{
- GObjectClass *object_class;
-
- object_class = G_OBJECT_CLASS (klass);
- object_class->finalize = impl_finalize;
-
- parent_class = g_type_class_ref(gtk_object_get_type ());
-
- signals[FOLDER_SELECTED]
- = g_signal_new ("folder_selected",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EvolutionStorageSetViewListenerClass, folder_selected),
- NULL, NULL,
- e_shell_marshal_NONE__STRING,
- G_TYPE_NONE, 1,
- G_TYPE_STRING);
- signals[FOLDER_TOGGLED]
- = g_signal_new ("folder_toggled",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EvolutionStorageSetViewListenerClass, folder_toggled),
- NULL, NULL,
- e_shell_marshal_NONE__NONE,
- G_TYPE_NONE, 0);
-
- corba_class_init ();
-}
-
-static void
-init (EvolutionStorageSetViewListener *storage_set_view_listener)
-{
- EvolutionStorageSetViewListenerPrivate *priv;
-
- priv = g_new (EvolutionStorageSetViewListenerPrivate, 1);
- priv->corba_listener = CORBA_OBJECT_NIL;
-
- storage_set_view_listener->priv = priv;
-}
-
-
-void
-evolution_storage_set_view_listener_construct (EvolutionStorageSetViewListener *listener,
- GNOME_Evolution_StorageSetViewListener corba_listener)
-{
- EvolutionStorageSetViewListenerPrivate *priv;
-
- g_return_if_fail (listener != NULL);
- g_return_if_fail (EVOLUTION_IS_STORAGE_SET_VIEW_LISTENER (listener));
- g_return_if_fail (corba_listener != CORBA_OBJECT_NIL);
-
- priv = listener->priv;
-
- g_return_if_fail (priv->corba_listener == CORBA_OBJECT_NIL);
-
- priv->corba_listener = corba_listener;
-
- GTK_OBJECT_UNSET_FLAGS (GTK_OBJECT (listener), GTK_FLOATING);
-}
-
-EvolutionStorageSetViewListener *
-evolution_storage_set_view_listener_new (void)
-{
- EvolutionStorageSetViewListener *new;
- EvolutionStorageSetViewListenerPrivate *priv;
- GNOME_Evolution_StorageSetViewListener corba_listener;
-
- new = g_object_new (evolution_storage_set_view_listener_get_type (), NULL);
- priv = new->priv;
-
- priv->servant = create_servant (new);
- corba_listener = activate_servant (new, (POA_GNOME_Evolution_StorageSetViewListener *) priv->servant);
-
- evolution_storage_set_view_listener_construct (new, corba_listener);
-
- return new;
-}
-
-GNOME_Evolution_StorageSetViewListener
-evolution_storage_set_view_listener_corba_objref (EvolutionStorageSetViewListener *listener)
-{
- EvolutionStorageSetViewListenerPrivate *priv;
-
- g_return_val_if_fail (listener != NULL, CORBA_OBJECT_NIL);
- g_return_val_if_fail (EVOLUTION_IS_STORAGE_SET_VIEW_LISTENER (listener), CORBA_OBJECT_NIL);
-
- priv = listener->priv;
- return priv->corba_listener;
-}
-
-
-E_MAKE_TYPE (evolution_storage_set_view_listener, "EvolutionStorageSetViewListener", EvolutionStorageSetViewListener,
- class_init, init, PARENT_TYPE)
diff --git a/shell/evolution-storage-set-view-listener.h b/shell/evolution-storage-set-view-listener.h
deleted file mode 100644
index b81ab1ed30..0000000000
--- a/shell/evolution-storage-set-view-listener.h
+++ /dev/null
@@ -1,81 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* evolution-storage-set-view-listener.h
- *
- * Copyright (C) 2000 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifndef _EVOLUTION_STORAGE_SET_VIEW_LISTENER_H_
-#define _EVOLUTION_STORAGE_SET_VIEW_LISTENER_H_
-
-#include <gtk/gtkobject.h>
-
-#include "Evolution.h"
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-#define EVOLUTION_TYPE_STORAGE_SET_VIEW_LISTENER (evolution_storage_set_view_listener_get_type ())
-#define EVOLUTION_STORAGE_SET_VIEW_LISTENER(obj) (GTK_CHECK_CAST ((obj), EVOLUTION_TYPE_STORAGE_SET_VIEW_LISTENER, EvolutionStorageSetViewListener))
-#define EVOLUTION_STORAGE_SET_VIEW_LISTENER_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), EVOLUTION_TYPE_STORAGE_SET_VIEW_LISTENER, EvolutionStorageSetViewListenerClass))
-#define EVOLUTION_IS_STORAGE_SET_VIEW_LISTENER(obj) (GTK_CHECK_TYPE ((obj), EVOLUTION_TYPE_STORAGE_SET_VIEW_LISTENER))
-#define EVOLUTION_IS_STORAGE_SET_VIEW_LISTENER_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), EVOLUTION_TYPE_STORAGE_SET_VIEW_LISTENER))
-
-
-typedef struct _EvolutionStorageSetViewListener EvolutionStorageSetViewListener;
-typedef struct _EvolutionStorageSetViewListenerPrivate EvolutionStorageSetViewListenerPrivate;
-typedef struct _EvolutionStorageSetViewListenerClass EvolutionStorageSetViewListenerClass;
-
-struct _EvolutionStorageSetViewListener {
- GtkObject parent;
-
- EvolutionStorageSetViewListenerPrivate *priv;
-};
-
-struct _EvolutionStorageSetViewListenerClass {
- GtkObjectClass parent_class;
-
- void (* folder_selected) (EvolutionStorageSetViewListener *listener,
- const char *uri);
- void (* folder_toggled) (EvolutionStorageSetViewListener *listener,
- const char *uri,
- gboolean active);
-};
-
-
-struct _EvolutionStorageSetViewListenerServant {
- POA_GNOME_Evolution_StorageSetViewListener servant_placeholder;
- EvolutionStorageSetViewListener *gtk_object;
-};
-typedef struct _EvolutionStorageSetViewListenerServant EvolutionStorageSetViewListenerServant;
-
-
-GtkType evolution_storage_set_view_listener_get_type (void);
-void evolution_storage_set_view_listener_construct (EvolutionStorageSetViewListener *listener,
- GNOME_Evolution_StorageSetViewListener corba_objref);
-EvolutionStorageSetViewListener *evolution_storage_set_view_listener_new (void);
-
-GNOME_Evolution_StorageSetViewListener evolution_storage_set_view_listener_corba_objref (EvolutionStorageSetViewListener *listener);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* _EVOLUTION_STORAGE_SET_VIEW_LISTENER_H_ */
diff --git a/shell/evolution-storage-set-view.c b/shell/evolution-storage-set-view.c
deleted file mode 100644
index 4d495e0dc1..0000000000
--- a/shell/evolution-storage-set-view.c
+++ /dev/null
@@ -1,481 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* evolution-storage-set-view.c
- *
- * Copyright (C) 2000, 2001, 2002 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "evolution-storage-set-view.h"
-#include "e-shell-constants.h"
-
-#include <gal/util/e-util.h>
-
-#include <gtk/gtksignal.h>
-
-#include <string.h>
-
-
-#define PARENT_TYPE bonobo_object_get_type ()
-static BonoboObjectClass *parent_class = NULL;
-
-struct _EvolutionStorageSetViewPrivate {
- GtkWidget *storage_set_view_widget;
- GList *listeners;
-};
-
-
-/* EStorageSet widget callbacks. */
-
-static void
-storage_set_view_widget_folder_selected_cb (EStorageSetView *storage_set_view_widget,
- const char *uri,
- void *data)
-{
- EvolutionStorageSetView *storage_set_view;
- EvolutionStorageSetViewPrivate *priv;
- GList *p;
-
- storage_set_view = EVOLUTION_STORAGE_SET_VIEW (data);
- priv = storage_set_view->priv;
-
- for (p = priv->listeners; p != NULL; p = p->next) {
- CORBA_Environment ev;
- GNOME_Evolution_StorageSetViewListener listener;
-
- CORBA_exception_init (&ev);
-
- listener = (GNOME_Evolution_StorageSetViewListener) p->data;
- GNOME_Evolution_StorageSetViewListener_notifyFolderSelected (listener, uri, &ev);
-
- /* FIXME: What if we fail? */
-
- CORBA_exception_free (&ev);
- }
-}
-
-static void
-storage_set_view_widget_folder_toggled_cb (EStorageSetView *storage_set_view_widget,
- void *data)
-{
- EvolutionStorageSetView *storage_set_view;
- EvolutionStorageSetViewPrivate *priv;
- GList *p;
-
- storage_set_view = EVOLUTION_STORAGE_SET_VIEW (data);
- priv = storage_set_view->priv;
-
- for (p = priv->listeners; p != NULL; p = p->next) {
- CORBA_Environment ev;
- GNOME_Evolution_StorageSetViewListener listener;
-
- CORBA_exception_init (&ev);
-
- listener = (GNOME_Evolution_StorageSetViewListener) p->data;
- GNOME_Evolution_StorageSetViewListener_notifyFolderToggled (listener, &ev);
-
- /* FIXME: What if we fail? */
-
- CORBA_exception_free (&ev);
- }
-}
-
-
-/* Listener handling. */
-
-static GList *
-find_listener_in_list (GNOME_Evolution_StorageSetViewListener listener,
- GList *list)
-{
- CORBA_Environment ev;
- GList *p;
-
- CORBA_exception_init (&ev);
-
- for (p = list; p != NULL; p = p->next) {
- GNOME_Evolution_StorageSetViewListener listener_item;
-
- listener_item = (GNOME_Evolution_StorageSetViewListener) p->data;
- if (CORBA_Object_is_equivalent (listener, listener_item, &ev))
- break;
- }
-
- CORBA_exception_free (&ev);
-
- return p;
-}
-
-static gboolean
-add_listener (EvolutionStorageSetView *storage_set_view,
- GNOME_Evolution_StorageSetViewListener listener)
-{
- EvolutionStorageSetViewPrivate *priv;
- CORBA_Environment ev;
- const char *current_uri;
- GNOME_Evolution_StorageSetViewListener copy_of_listener;
-
- priv = storage_set_view->priv;
-
- if (find_listener_in_list (listener, priv->listeners) != NULL)
- return FALSE;
-
- CORBA_exception_init (&ev);
-
- copy_of_listener = CORBA_Object_duplicate (listener, &ev);
- if (ev._major != CORBA_NO_EXCEPTION) {
- CORBA_exception_free (&ev);
- return FALSE;
- }
-
- priv->listeners = g_list_prepend (priv->listeners, copy_of_listener);
-
- current_uri = e_storage_set_view_get_current_folder (E_STORAGE_SET_VIEW (priv->storage_set_view_widget));
- if (current_uri != NULL)
- GNOME_Evolution_StorageSetViewListener_notifyFolderSelected (listener, current_uri, &ev);
-
- CORBA_exception_free (&ev);
-
- return TRUE;
-}
-
-static gboolean
-remove_listener (EvolutionStorageSetView *storage_set_view,
- GNOME_Evolution_StorageSetViewListener listener)
-{
- EvolutionStorageSetViewPrivate *priv;
- GList *listener_node;
- CORBA_Environment ev;
-
- priv = storage_set_view->priv;
-
- listener_node = find_listener_in_list (listener, priv->listeners);
- if (listener_node == NULL)
- return FALSE;
-
- CORBA_exception_init (&ev);
- CORBA_Object_release ((CORBA_Object) listener_node->data, &ev);
- CORBA_exception_free (&ev);
-
- priv->listeners = g_list_remove_link (priv->listeners, listener_node);
-
- return TRUE;
-}
-
-
-/* CORBA interface implementation. */
-
-static void
-impl_StorageSetView_add_listener (PortableServer_Servant servant,
- const GNOME_Evolution_StorageSetViewListener listener,
- CORBA_Environment *ev)
-{
- BonoboObject *bonobo_object;
- EvolutionStorageSetView *storage_set_view;
-
- bonobo_object = bonobo_object_from_servant (servant);
- storage_set_view = EVOLUTION_STORAGE_SET_VIEW (bonobo_object);
-
- if (! add_listener (storage_set_view, listener))
- CORBA_exception_set (ev, CORBA_USER_EXCEPTION,
- ex_GNOME_Evolution_StorageSetView_AlreadyListening, NULL);
-}
-
-static void
-impl_StorageSetView_remove_listener (PortableServer_Servant servant,
- const GNOME_Evolution_StorageSetViewListener listener,
- CORBA_Environment *ev)
-{
- BonoboObject *bonobo_object;
- EvolutionStorageSetView *storage_set_view;
-
- bonobo_object = bonobo_object_from_servant (servant);
- storage_set_view = EVOLUTION_STORAGE_SET_VIEW (bonobo_object);
-
- if (! remove_listener (storage_set_view, listener))
- CORBA_exception_set (ev, CORBA_USER_EXCEPTION,
- ex_GNOME_Evolution_StorageSetView_NotFound, NULL);
-}
-
-static CORBA_boolean
-impl_StorageSetView__get_showFolders (PortableServer_Servant servant,
- CORBA_Environment * ev)
-{
- BonoboObject *bonobo_object;
- EvolutionStorageSetView *storage_set_view;
- EvolutionStorageSetViewPrivate *priv;
-
- bonobo_object = bonobo_object_from_servant (servant);
- storage_set_view = EVOLUTION_STORAGE_SET_VIEW (bonobo_object);
- priv = storage_set_view->priv;
-
- return e_storage_set_view_get_show_folders (E_STORAGE_SET_VIEW (priv->storage_set_view_widget));
-}
-
-static void
-impl_StorageSetView__set_showFolders (PortableServer_Servant servant,
- const CORBA_boolean value,
- CORBA_Environment * ev)
-{
- BonoboObject *bonobo_object;
- EvolutionStorageSetView *storage_set_view;
- EvolutionStorageSetViewPrivate *priv;
-
- bonobo_object = bonobo_object_from_servant (servant);
- storage_set_view = EVOLUTION_STORAGE_SET_VIEW (bonobo_object);
- priv = storage_set_view->priv;
-
- e_storage_set_view_set_show_folders (E_STORAGE_SET_VIEW (priv->storage_set_view_widget), value);
-}
-
-static void
-impl_StorageSetView__set_showCheckboxes (PortableServer_Servant servant,
- const CORBA_boolean value,
- CORBA_Environment *ev)
-{
- BonoboObject *bonobo_object;
- EvolutionStorageSetView *storage_set_view;
- EvolutionStorageSetViewPrivate *priv;
-
- bonobo_object = bonobo_object_from_servant (servant);
- storage_set_view = EVOLUTION_STORAGE_SET_VIEW (bonobo_object);
- priv = storage_set_view->priv;
-
- e_storage_set_view_set_show_checkboxes (E_STORAGE_SET_VIEW (priv->storage_set_view_widget),
- value, NULL, NULL);
-}
-
-static CORBA_boolean
-impl_StorageSetView__get_showCheckboxes (PortableServer_Servant servant,
- CORBA_Environment *ev)
-{
- BonoboObject *bonobo_object;
- EvolutionStorageSetView *storage_set_view;
- EvolutionStorageSetViewPrivate *priv;
-
- bonobo_object = bonobo_object_from_servant (servant);
- storage_set_view = EVOLUTION_STORAGE_SET_VIEW (bonobo_object);
- priv = storage_set_view->priv;
-
- return e_storage_set_view_get_show_checkboxes (E_STORAGE_SET_VIEW (priv->storage_set_view_widget));
-}
-
-static void
-impl_StorageSetView__set_checkedFolders (PortableServer_Servant servant,
- const GNOME_Evolution_FolderList *list,
- CORBA_Environment *ev)
-{
- BonoboObject *bonobo_object;
- EvolutionStorageSetView *storage_set_view;
- EvolutionStorageSetViewPrivate *priv;
- GSList *path_list = NULL;
- int i;
-
- bonobo_object = bonobo_object_from_servant (servant);
- storage_set_view = EVOLUTION_STORAGE_SET_VIEW (bonobo_object);
- priv = storage_set_view->priv;
-
- for (i = 0; i < list->_length; i++) {
- if (strncmp (list->_buffer[i].evolutionUri, "evolution:", 10) != 0)
- continue;
-
- path_list = g_slist_append (path_list, g_strdup (list->_buffer[i].evolutionUri + 10));
- }
-
- e_storage_set_view_set_checkboxes_list (E_STORAGE_SET_VIEW (priv->storage_set_view_widget),
- path_list);
-
- g_slist_foreach (path_list, (GFunc) g_free, NULL);
- g_slist_free (path_list);
-}
-
-static GNOME_Evolution_FolderList *
-impl_StorageSetView__get_checkedFolders (PortableServer_Servant servant,
- CORBA_Environment *ev)
-{
- BonoboObject *bonobo_object;
- EvolutionStorageSetView *storage_set_view;
- EvolutionStorageSetViewPrivate *priv;
- EStorageSet *storage_set;
- GNOME_Evolution_FolderList *return_list;
- GSList *path_list;
- GSList *p;
- int num_folders;
- int i;
-
- bonobo_object = bonobo_object_from_servant (servant);
- storage_set_view = EVOLUTION_STORAGE_SET_VIEW (bonobo_object);
- priv = storage_set_view->priv;
-
- path_list = e_storage_set_view_get_checkboxes_list (E_STORAGE_SET_VIEW (priv->storage_set_view_widget));
- num_folders = g_slist_length (path_list);
-
- return_list = GNOME_Evolution_FolderList__alloc ();
- return_list->_maximum = num_folders;
- return_list->_length = num_folders;
- return_list->_buffer = CORBA_sequence_GNOME_Evolution_Folder_allocbuf (return_list->_maximum);
-
- storage_set = e_storage_set_view_get_storage_set (E_STORAGE_SET_VIEW (priv->storage_set_view_widget));
-
- for (p = path_list, i = 0; p != NULL; p = p->next, i ++) {
- EFolder *folder;
- const char *path;
- char *evolution_uri;
-
- path = (const char *) p->data;
-
- folder = e_storage_set_get_folder (storage_set, path);
- if (folder == NULL) {
- g_warning ("Cannot find folder -- %s", path);
-
- /* Subtract here so that we don't start putting
- ininitialised blanks into the CORBA list */
- return_list->_length--;
- i--;
- continue;
- }
-
- evolution_uri = g_strconcat (E_SHELL_URI_PREFIX, path, NULL);
- e_folder_to_corba (folder, evolution_uri, return_list->_buffer + i);
- g_free (evolution_uri);
- }
-
- g_slist_foreach (path_list, (GFunc) g_free, NULL);
- g_slist_free (path_list);
-
- CORBA_sequence_set_release (return_list, TRUE);
- return return_list;
-}
-
-
-/* GObject methods. */
-
-static void
-impl_dispose (GObject *object)
-{
- /* (Nothing to do here.) */
-
- (* G_OBJECT_CLASS (parent_class)->dispose) (object);
-}
-
-static void
-impl_finalize (GObject *object)
-{
- EvolutionStorageSetView *storage_set_view;
- EvolutionStorageSetViewPrivate *priv;
- CORBA_Environment ev;
- GList *p;
-
- storage_set_view = EVOLUTION_STORAGE_SET_VIEW (object);
- priv = storage_set_view->priv;
-
- CORBA_exception_init (&ev);
-
- for (p = priv->listeners; p != NULL; p = p->next) {
- GNOME_Evolution_StorageSetViewListener listener;
-
- listener = (GNOME_Evolution_StorageSetViewListener) p->data;
- CORBA_Object_release (listener, &ev);
- }
-
- CORBA_exception_free (&ev);
-
- g_free (priv);
-
- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
-}
-
-
-static void
-evolution_storage_set_view_class_init (EvolutionStorageSetViewClass *klass)
-{
- POA_GNOME_Evolution_StorageSetView__epv *epv;
- GObjectClass *object_class;
-
- object_class = G_OBJECT_CLASS (klass);
- object_class->dispose = impl_dispose;
- object_class->finalize = impl_finalize;
-
- epv = & (klass->epv);
- epv->addListener = impl_StorageSetView_add_listener;
- epv->removeListener = impl_StorageSetView_remove_listener;
- epv->_set_showFolders = impl_StorageSetView__set_showFolders;
- epv->_get_showFolders = impl_StorageSetView__get_showFolders;
- epv->_set_showCheckboxes = impl_StorageSetView__set_showCheckboxes;
- epv->_get_showCheckboxes = impl_StorageSetView__get_showCheckboxes;
- epv->_set_checkedFolders = impl_StorageSetView__set_checkedFolders;
- epv->_get_checkedFolders = impl_StorageSetView__get_checkedFolders;
-
- parent_class = g_type_class_ref(PARENT_TYPE);
-}
-
-static void
-evolution_storage_set_view_init (EvolutionStorageSetView *storage_set_view)
-{
- EvolutionStorageSetViewPrivate *priv;
-
- priv = g_new (EvolutionStorageSetViewPrivate, 1);
- priv->storage_set_view_widget = NULL;
- priv->listeners = NULL;
-
- storage_set_view->priv = priv;
-}
-
-
-void
-evolution_storage_set_view_construct (EvolutionStorageSetView *storage_set_view,
- EStorageSetView *storage_set_view_widget)
-{
- EvolutionStorageSetViewPrivate *priv;
-
- g_return_if_fail (EVOLUTION_IS_STORAGE_SET_VIEW (storage_set_view));
- g_return_if_fail (E_IS_STORAGE_SET_VIEW (storage_set_view_widget));
-
- priv = storage_set_view->priv;
-
- g_assert (priv->storage_set_view_widget == NULL);
- priv->storage_set_view_widget = GTK_WIDGET (storage_set_view_widget);
-
- g_signal_connect (priv->storage_set_view_widget, "folder_selected",
- G_CALLBACK (storage_set_view_widget_folder_selected_cb), storage_set_view);
- g_signal_connect (priv->storage_set_view_widget, "checkboxes_changed",
- G_CALLBACK (storage_set_view_widget_folder_toggled_cb), storage_set_view);
-}
-
-EvolutionStorageSetView *
-evolution_storage_set_view_new (EStorageSetView *storage_set_view_widget)
-{
- EvolutionStorageSetView *new;
-
- g_return_val_if_fail (storage_set_view_widget != NULL, NULL);
- g_return_val_if_fail (E_IS_STORAGE_SET_VIEW (storage_set_view_widget), NULL);
-
- new = g_object_new (evolution_storage_set_view_get_type (), NULL);
-
- evolution_storage_set_view_construct (new, storage_set_view_widget);
-
- return new;
-}
-
-
-BONOBO_TYPE_FUNC_FULL (EvolutionStorageSetView,
- GNOME_Evolution_StorageSetView,
- PARENT_TYPE,
- evolution_storage_set_view)
diff --git a/shell/evolution-storage-set-view.h b/shell/evolution-storage-set-view.h
deleted file mode 100644
index fcfbafc9a9..0000000000
--- a/shell/evolution-storage-set-view.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* evolution-storage-set-view.h
- *
- * Copyright (C) 2000 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifndef _EVOLUTION_STORAGE_SET_VIEW_H_
-#define _EVOLUTION_STORAGE_SET_VIEW_H_
-
-#include <bonobo/bonobo-object.h>
-
-#include "e-storage-set-view.h"
-
-#include "Evolution.h"
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-#define EVOLUTION_TYPE_STORAGE_SET_VIEW (evolution_storage_set_view_get_type ())
-#define EVOLUTION_STORAGE_SET_VIEW(obj) (GTK_CHECK_CAST ((obj), EVOLUTION_TYPE_STORAGE_SET_VIEW, EvolutionStorageSetView))
-#define EVOLUTION_STORAGE_SET_VIEW_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), EVOLUTION_TYPE_STORAGE_SET_VIEW, EvolutionStorageSetViewClass))
-#define EVOLUTION_IS_STORAGE_SET_VIEW(obj) (GTK_CHECK_TYPE ((obj), EVOLUTION_TYPE_STORAGE_SET_VIEW))
-#define EVOLUTION_IS_STORAGE_SET_VIEW_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), EVOLUTION_TYPE_STORAGE_SET_VIEW))
-
-
-typedef struct _EvolutionStorageSetView EvolutionStorageSetView;
-typedef struct _EvolutionStorageSetViewPrivate EvolutionStorageSetViewPrivate;
-typedef struct _EvolutionStorageSetViewClass EvolutionStorageSetViewClass;
-
-struct _EvolutionStorageSetView {
- BonoboObject parent;
-
- EvolutionStorageSetViewPrivate *priv;
-};
-
-struct _EvolutionStorageSetViewClass {
- BonoboObjectClass parent_class;
-
- POA_GNOME_Evolution_StorageSetView__epv epv;
-};
-
-
-GtkType evolution_storage_set_view_get_type (void);
-void evolution_storage_set_view_construct (EvolutionStorageSetView *storage_set_view,
- EStorageSetView *storage_set_view_widget);
-EvolutionStorageSetView *evolution_storage_set_view_new (EStorageSetView *storage_set_view_widget);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* _EVOLUTION_STORAGE_SET_VIEW_H_ */
diff --git a/shell/evolution-storage.c b/shell/evolution-storage.c
deleted file mode 100644
index b083e5d794..0000000000
--- a/shell/evolution-storage.c
+++ /dev/null
@@ -1,1349 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* evolution-storage.c
- *
- * Copyright (C) 2000, 2001 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "evolution-storage.h"
-
-#include "Evolution.h"
-
-#include "e-folder.h"
-#include "e-folder-tree.h"
-#include "e-shell-constants.h"
-#include "e-shell-corba-icon-utils.h"
-
-#include "e-shell-marshal.h"
-
-#include <string.h>
-#include <gal/util/e-util.h>
-#include <gtk/gtksignal.h>
-#include <bonobo/bonobo-object.h>
-#include <bonobo/bonobo-exception.h>
-#include <gdk-pixbuf/gdk-pixbuf.h>
-#include <glib.h>
-
-
-#define PARENT_TYPE BONOBO_OBJECT_TYPE
-static BonoboObjectClass *parent_class = NULL;
-
-struct _FolderPropertyItem {
- char *label;
- char *tooltip;
- GdkPixbuf *icon;
-};
-typedef struct _FolderPropertyItem FolderPropertyItem;
-
-struct _EvolutionStoragePrivate {
- /* Name of the storage. */
- char *name;
-
- /* Whether there are shared folders in this storage. */
- gboolean has_shared_folders;
-
- /* What we will display as the name of the storage. */
- char *display_name;
-
- /* The set of folders we have in this storage. */
- EFolderTree *folder_tree;
-
- /* Mappings from URIs to folder tree paths. */
- GHashTable *uri_to_path;
-
- /* The listener registered on this storage. */
- GList *corba_storage_listeners;
-
- /* The property items. */
- GSList *folder_property_items;
-};
-
-
-enum {
- CREATE_FOLDER,
- REMOVE_FOLDER,
- XFER_FOLDER,
- UPDATE_FOLDER,
- OPEN_FOLDER,
- DISCOVER_SHARED_FOLDER,
- CANCEL_DISCOVER_SHARED_FOLDER,
- REMOVE_SHARED_FOLDER,
- SHOW_FOLDER_PROPERTIES,
-
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = { 0 };
-
-
-/* Utility functions. */
-
-static void
-list_through_listener_foreach (EFolderTree *tree,
- const char *path,
- void *data,
- void *closure)
-{
- const GNOME_Evolution_Folder *corba_folder;
- GNOME_Evolution_StorageListener corba_listener;
- CORBA_Environment ev;
-
- corba_folder = (GNOME_Evolution_Folder *) data;
- corba_listener = (GNOME_Evolution_StorageListener) closure;
-
- /* The root folder has no data. */
- if (corba_folder == NULL)
- return;
-
- CORBA_exception_init (&ev);
- GNOME_Evolution_StorageListener_notifyFolderCreated (corba_listener, path, corba_folder, &ev);
- CORBA_exception_free (&ev);
-}
-
-static void
-list_through_listener (EvolutionStorage *storage,
- GNOME_Evolution_StorageListener listener,
- CORBA_Environment *ev)
-{
- EvolutionStoragePrivate *priv;
-
- priv = storage->priv;
-
- e_folder_tree_foreach (priv->folder_tree,
- list_through_listener_foreach,
- listener);
-}
-
-static GList *
-find_listener_in_list (const GNOME_Evolution_StorageListener listener,
- GList *list)
-{
- CORBA_Environment ev;
- GList *p;
-
- CORBA_exception_init (&ev);
-
- for (p = list; p != NULL; p = p->next) {
- GNOME_Evolution_StorageListener listener_item;
-
- listener_item = (GNOME_Evolution_StorageListener) p->data;
-
- if (CORBA_Object_is_equivalent (listener_item, listener, &ev) && ev._major == CORBA_NO_EXCEPTION)
- return p;
- }
-
- CORBA_exception_free (&ev);
-
- return NULL;
-}
-
-static gboolean
-add_listener (EvolutionStorage *storage,
- const GNOME_Evolution_StorageListener listener)
-{
- EvolutionStoragePrivate *priv;
- GNOME_Evolution_StorageListener listener_copy;
- CORBA_Environment ev;
-
- priv = storage->priv;
-
- if (find_listener_in_list (listener, priv->corba_storage_listeners) != NULL)
- return FALSE;
-
- CORBA_exception_init (&ev);
-
- listener_copy = CORBA_Object_duplicate (listener, &ev);
- if (ev._major != CORBA_NO_EXCEPTION) {
- /* Panic. */
- g_warning ("EvolutionStorage -- Cannot duplicate listener.");
- CORBA_exception_free (&ev);
-
- /* FIXME this will cause the ::add_listener implementation to
- incorrectly raise `AlreadyListening' */
- return FALSE;
- }
-
- priv->corba_storage_listeners = g_list_prepend (priv->corba_storage_listeners,
- listener_copy);
-
- list_through_listener (storage, listener_copy, &ev);
-
- CORBA_exception_free (&ev);
-
- return TRUE;
-}
-
-static gboolean
-remove_listener (EvolutionStorage *storage,
- const GNOME_Evolution_StorageListener listener)
-{
- EvolutionStoragePrivate *priv;
- CORBA_Environment ev;
- GList *p;
-
- priv = storage->priv;
-
- p = find_listener_in_list (listener, priv->corba_storage_listeners);
- if (p == NULL)
- return FALSE;
-
- CORBA_exception_init (&ev);
- CORBA_Object_release ((CORBA_Object) p->data, &ev);
- CORBA_exception_free (&ev);
-
- priv->corba_storage_listeners = g_list_remove_link (priv->corba_storage_listeners, p);
-
- return TRUE;
-}
-
-
-/* Functions for the EFolderTree in the storage. */
-
-static void
-folder_destroy_notify (EFolderTree *tree,
- const char *path,
- void *data,
- void *closure)
-{
- GNOME_Evolution_Folder *corba_folder;
-
- corba_folder = (GNOME_Evolution_Folder *) data;
- CORBA_free (data);
-}
-
-
-/* CORBA interface implementation. */
-
-static CORBA_char *
-impl_Storage__get_name (PortableServer_Servant servant,
- CORBA_Environment *ev)
-{
- BonoboObject *bonobo_object;
- EvolutionStorage *storage;
- EvolutionStoragePrivate *priv;
-
- bonobo_object = bonobo_object_from_servant (servant);
- storage = EVOLUTION_STORAGE (bonobo_object);
- priv = storage->priv;
-
- return CORBA_string_dup (priv->name);
-}
-
-static CORBA_boolean
-impl_Storage__get_hasSharedFolders (PortableServer_Servant servant,
- CORBA_Environment *ev)
-{
- BonoboObject *bonobo_object;
- EvolutionStorage *storage;
- EvolutionStoragePrivate *priv;
-
- bonobo_object = bonobo_object_from_servant (servant);
- storage = EVOLUTION_STORAGE (bonobo_object);
- priv = storage->priv;
-
- return priv->has_shared_folders;
-}
-
-static GNOME_Evolution_Folder *
-impl_Storage_getFolderAtPath (PortableServer_Servant servant,
- const CORBA_char *path,
- CORBA_Environment *ev)
-{
- BonoboObject *bonobo_object;
- EvolutionStorage *storage;
- EvolutionStoragePrivate *priv;
- GNOME_Evolution_Folder *corba_folder;
- GNOME_Evolution_Folder *return_value;
-
- bonobo_object = bonobo_object_from_servant (servant);
- storage = EVOLUTION_STORAGE (bonobo_object);
- priv = storage->priv;
-
- corba_folder = e_folder_tree_get_folder (priv->folder_tree, path);
- if (corba_folder == NULL) {
- CORBA_exception_set (ev, CORBA_USER_EXCEPTION, ex_GNOME_Evolution_Storage_NotFound, NULL);
- return NULL;
- }
-
- /* duplicate CORBA structure */
- return_value = GNOME_Evolution_Folder__alloc ();
- return_value->type = CORBA_string_dup (corba_folder->type);
- return_value->description = CORBA_string_dup (corba_folder->description);
- return_value->displayName = CORBA_string_dup (corba_folder->displayName);
- return_value->physicalUri = CORBA_string_dup (corba_folder->physicalUri);
- return_value->evolutionUri = CORBA_string_dup (corba_folder->evolutionUri);
- return_value->customIconName = CORBA_string_dup (corba_folder->customIconName);
- return_value->unreadCount = corba_folder->unreadCount;
- return_value->canSyncOffline = corba_folder->canSyncOffline;
- return_value->sortingPriority = corba_folder->sortingPriority;
-
- return return_value;
-}
-
-static void
-get_folder_list_foreach (EFolderTree *tree,
- const char *path,
- void *data,
- void *closure)
-{
- const GNOME_Evolution_Folder *corba_folder;
- GNOME_Evolution_Folder *new_corba_folder;
- GNOME_Evolution_FolderList *folder_list;
-
- corba_folder = (GNOME_Evolution_Folder *) data;
- folder_list = (GNOME_Evolution_FolderList *) closure;
-
- if (corba_folder == NULL)
- return;
-
- new_corba_folder = folder_list->_buffer + folder_list->_length;
- new_corba_folder->displayName = CORBA_string_dup (corba_folder->displayName);
- new_corba_folder->description = CORBA_string_dup (corba_folder->description);
- new_corba_folder->type = CORBA_string_dup (corba_folder->type);
- new_corba_folder->physicalUri = CORBA_string_dup (corba_folder->physicalUri);
- new_corba_folder->evolutionUri = CORBA_string_dup (corba_folder->evolutionUri);
- new_corba_folder->unreadCount = corba_folder->unreadCount;
- new_corba_folder->sortingPriority = corba_folder->sortingPriority;
- new_corba_folder->customIconName = CORBA_string_dup (corba_folder->customIconName);
-
- folder_list->_length++;
-}
-
-static GNOME_Evolution_FolderList *
-impl_Storage__get_folderList (PortableServer_Servant servant,
- CORBA_Environment *ev)
-{
- BonoboObject *bonobo_object;
- EvolutionStorage *storage;
- EvolutionStoragePrivate *priv;
- GNOME_Evolution_FolderList *folder_list;
-
- bonobo_object = bonobo_object_from_servant (servant);
- storage = EVOLUTION_STORAGE (bonobo_object);
- priv = storage->priv;
-
- folder_list = GNOME_Evolution_FolderList__alloc ();
- folder_list->_maximum = e_folder_tree_get_count (priv->folder_tree);
- folder_list->_length = 0;
- folder_list->_buffer = CORBA_sequence_GNOME_Evolution_Folder_allocbuf (folder_list->_maximum);
-
- e_folder_tree_foreach (priv->folder_tree, get_folder_list_foreach, folder_list);
-
- CORBA_sequence_set_release (folder_list, TRUE);
- return folder_list;
-}
-
-static void
-impl_Storage_asyncCreateFolder (PortableServer_Servant servant,
- const CORBA_char *path,
- const CORBA_char *type,
- const CORBA_char *description,
- const CORBA_char *parent_physical_uri,
- const Bonobo_Listener listener,
- CORBA_Environment *ev)
-{
- BonoboObject *bonobo_object;
- CORBA_Object obj_dup;
- EvolutionStorage *storage;
-
- bonobo_object = bonobo_object_from_servant (servant);
- storage = EVOLUTION_STORAGE (bonobo_object);
-
- obj_dup = CORBA_Object_duplicate (listener, ev);
- g_signal_emit (storage, signals[CREATE_FOLDER], 0,
- obj_dup, path, type, description, parent_physical_uri);
-}
-
-
-static void
-impl_Storage_asyncRemoveFolder (PortableServer_Servant servant,
- const CORBA_char *path,
- const CORBA_char *physical_uri,
- const Bonobo_Listener listener,
- CORBA_Environment *ev)
-{
- BonoboObject *bonobo_object;
- EvolutionStorage *storage;
- CORBA_Object obj_dup;
-
- bonobo_object = bonobo_object_from_servant (servant);
- storage = EVOLUTION_STORAGE (bonobo_object);
-
- obj_dup = CORBA_Object_duplicate (listener, ev);
- g_signal_emit (storage, signals[REMOVE_FOLDER], 0,
- obj_dup, path, physical_uri);
-}
-
-static void
-impl_Storage_asyncXferFolder (PortableServer_Servant servant,
- const CORBA_char *source_path,
- const CORBA_char *destination_path,
- const CORBA_boolean remove_source,
- const Bonobo_Listener listener,
- CORBA_Environment *ev)
-{
- BonoboObject *bonobo_object;
- EvolutionStorage *storage;
- CORBA_Object obj_dup;
-
- bonobo_object = bonobo_object_from_servant (servant);
- storage = EVOLUTION_STORAGE (bonobo_object);
-
- obj_dup = CORBA_Object_duplicate (listener, ev);
- g_signal_emit (storage, signals[XFER_FOLDER], 0,
- obj_dup, source_path, destination_path, remove_source);
-}
-
-static void
-impl_Storage_updateFolder (PortableServer_Servant servant,
- const CORBA_char *path,
- CORBA_long unread_count,
- CORBA_Environment *ev)
-{
- BonoboObject *bonobo_object;
- EvolutionStoragePrivate *priv;
- EvolutionStorage *storage;
- GList *p;
-
- bonobo_object = bonobo_object_from_servant (servant);
- storage = EVOLUTION_STORAGE (bonobo_object);
-
- g_signal_emit (storage, signals[UPDATE_FOLDER], 0,
- path, unread_count);
-
- priv = storage->priv;
-
- if (priv->corba_storage_listeners == NULL)
- return;
-
- for (p = priv->corba_storage_listeners; p != NULL; p = p->next) {
- GNOME_Evolution_StorageListener listener;
- CORBA_Environment my_ev;
-
- CORBA_exception_init (&my_ev);
-
- listener = p->data;
- GNOME_Evolution_StorageListener_notifyFolderUpdated (listener, path,
- unread_count, &my_ev);
-
- CORBA_exception_free (&my_ev);
- }
-}
-
-static void
-impl_Storage_asyncOpenFolder (PortableServer_Servant servant,
- const CORBA_char *path,
- Bonobo_Listener listener,
- CORBA_Environment *ev)
-{
- BonoboObject *bonobo_object;
- EvolutionStorage *storage;
- CORBA_Object obj_dup;
-
- bonobo_object = bonobo_object_from_servant (servant);
- storage = EVOLUTION_STORAGE (bonobo_object);
-
- obj_dup = CORBA_Object_duplicate (listener, ev);
- g_signal_emit (storage, signals[OPEN_FOLDER], 0,
- obj_dup, path);
-}
-
-static void
-impl_Storage_asyncDiscoverSharedFolder (PortableServer_Servant servant,
- const CORBA_char *user,
- const CORBA_char *folder_name,
- Bonobo_Listener listener,
- CORBA_Environment *ev)
-{
- BonoboObject *bonobo_object;
- EvolutionStorage *storage;
- CORBA_Object obj_dup;
-
- bonobo_object = bonobo_object_from_servant (servant);
- storage = EVOLUTION_STORAGE (bonobo_object);
-
- obj_dup = CORBA_Object_duplicate (listener, ev);
- g_signal_emit (storage, signals[DISCOVER_SHARED_FOLDER], 0,
- obj_dup, user, folder_name);
-}
-
-static void
-impl_Storage_cancelDiscoverSharedFolder (PortableServer_Servant servant,
- const CORBA_char *user,
- const CORBA_char *folder_name,
- CORBA_Environment *ev)
-{
- BonoboObject *bonobo_object;
- EvolutionStorage *storage;
-
- bonobo_object = bonobo_object_from_servant (servant);
- storage = EVOLUTION_STORAGE (bonobo_object);
-
- g_signal_emit (storage, signals[CANCEL_DISCOVER_SHARED_FOLDER], 0,
- user, folder_name);
-}
-
-static void
-impl_Storage_asyncRemoveSharedFolder (PortableServer_Servant servant,
- const CORBA_char *path,
- const Bonobo_Listener listener,
- CORBA_Environment *ev)
-{
- BonoboObject *bonobo_object;
- EvolutionStorage *storage;
- CORBA_Object obj_dup;
-
- bonobo_object = bonobo_object_from_servant (servant);
- storage = EVOLUTION_STORAGE (bonobo_object);
-
- obj_dup = CORBA_Object_duplicate (listener, ev);
- g_signal_emit (storage, signals[REMOVE_SHARED_FOLDER], 0,
- obj_dup, path);
-}
-
-static void
-impl_Storage_addListener (PortableServer_Servant servant,
- const GNOME_Evolution_StorageListener listener,
- CORBA_Environment *ev)
-{
- BonoboObject *bonobo_object;
- EvolutionStorage *storage;
-
- bonobo_object = bonobo_object_from_servant (servant);
- storage = EVOLUTION_STORAGE (bonobo_object);
-
- if (! add_listener (storage, listener))
- CORBA_exception_set (ev, CORBA_USER_EXCEPTION, ex_GNOME_Evolution_Storage_AlreadyListening, NULL);
-}
-
-static void
-impl_Storage_removeListener (PortableServer_Servant servant,
- const GNOME_Evolution_StorageListener listener,
- CORBA_Environment *ev)
-{
- BonoboObject *bonobo_object;
- EvolutionStorage *storage;
-
- bonobo_object = bonobo_object_from_servant (servant);
- storage = EVOLUTION_STORAGE (bonobo_object);
-
- if (! remove_listener (storage, listener))
- CORBA_exception_set (ev, CORBA_USER_EXCEPTION, ex_GNOME_Evolution_Storage_NotFound, NULL);
-}
-
-static void
-impl_Storage_showFolderProperties (PortableServer_Servant servant,
- const CORBA_char *path,
- const CORBA_short item_number,
- const CORBA_long parent_window_id,
- CORBA_Environment *ev)
-{
- EvolutionStorage *storage;
-
- storage = EVOLUTION_STORAGE (bonobo_object_from_servant (servant));
- g_signal_emit (storage, signals[SHOW_FOLDER_PROPERTIES], 0,
- path, item_number, parent_window_id);
-}
-
-static GNOME_Evolution_Storage_FolderPropertyItemList *
-impl_Storage__get_folderPropertyItems (PortableServer_Servant servant,
- CORBA_Environment *ev)
-{
- EvolutionStorage *storage;
- EvolutionStoragePrivate *priv;
- GNOME_Evolution_Storage_FolderPropertyItemList *list;
- GSList *p;
- int count;
- int i;
-
- storage = EVOLUTION_STORAGE (bonobo_object_from_servant (servant));
- priv = storage->priv;
-
- count = g_slist_length (priv->folder_property_items);
-
- list = GNOME_Evolution_Storage_FolderPropertyItemList__alloc ();
- list->_length = list->_maximum = count;
- list->_buffer = CORBA_sequence_GNOME_Evolution_Storage_FolderPropertyItem_allocbuf (list->_maximum);
-
- for (i = 0, p = priv->folder_property_items; p != NULL; i ++, p = p->next) {
- const FolderPropertyItem *item;
-
- item = (const FolderPropertyItem *) p->data;
-
- list->_buffer[i].label = CORBA_string_dup (item->label);
- list->_buffer[i].tooltip = CORBA_string_dup (item->tooltip);
- e_store_corba_icon_from_pixbuf (item->icon, & list->_buffer[i].icon);
- }
-
- CORBA_sequence_set_release (list, TRUE);
-
- return list;
-}
-
-
-/* GObject methods. */
-
-static void
-free_mapping (gpointer key, gpointer value, gpointer user_data)
-{
- g_free (key);
- g_free (value);
-}
-
-static void
-impl_dispose (GObject *object)
-{
- EvolutionStorage *storage;
- EvolutionStoragePrivate *priv;
- CORBA_Environment ev;
- GList *p;
-
- storage = EVOLUTION_STORAGE (object);
- priv = storage->priv;
-
- CORBA_exception_init (&ev);
-
- for (p = priv->corba_storage_listeners; p != NULL; p = p->next) {
- GNOME_Evolution_StorageListener listener;
-
- listener = p->data;
-
- GNOME_Evolution_StorageListener_notifyDestroyed (listener, &ev);
-
- /* (This is not a Bonobo object, so no unref.) */
- CORBA_Object_release (listener, &ev);
- }
-
- g_list_free (priv->corba_storage_listeners);
- priv->corba_storage_listeners = NULL;
-
- CORBA_exception_free (&ev);
-
- (* G_OBJECT_CLASS (parent_class)->dispose) (object);
-}
-
-static void
-impl_finalize (GObject *object)
-{
- EvolutionStorage *storage;
- EvolutionStoragePrivate *priv;
- GSList *sp;
-
- storage = EVOLUTION_STORAGE (object);
- priv = storage->priv;
-
- g_free (priv->name);
- if (priv->folder_tree != NULL)
- e_folder_tree_destroy (priv->folder_tree);
- if (priv->uri_to_path != NULL) {
- g_hash_table_foreach (priv->uri_to_path, free_mapping, NULL);
- g_hash_table_destroy (priv->uri_to_path);
- }
-
- for (sp = priv->folder_property_items; sp != NULL; sp = sp->next) {
- FolderPropertyItem *item;
-
- item = (FolderPropertyItem *) sp->data;
-
- g_free (item->label);
- g_free (item->tooltip);
- if (item->icon != NULL)
- g_object_unref (item->icon);
- g_free (item);
- }
- g_slist_free (priv->folder_property_items);
-
- g_free (priv);
-
- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
-}
-
-
-static void
-evolution_storage_class_init (EvolutionStorageClass *klass)
-{
- POA_GNOME_Evolution_Storage__epv *epv;
- GObjectClass *object_class;
-
- object_class = G_OBJECT_CLASS (klass);
- object_class->dispose = impl_dispose;
- object_class->finalize = impl_finalize;
-
- epv = & klass->epv;
- epv->_get_name = impl_Storage__get_name;
- epv->_get_hasSharedFolders = impl_Storage__get_hasSharedFolders;
- epv->getFolderAtPath = impl_Storage_getFolderAtPath;
- epv->_get_folderList = impl_Storage__get_folderList;
- epv->asyncCreateFolder = impl_Storage_asyncCreateFolder;
- epv->asyncRemoveFolder = impl_Storage_asyncRemoveFolder;
- epv->asyncXferFolder = impl_Storage_asyncXferFolder;
- epv->asyncOpenFolder = impl_Storage_asyncOpenFolder;
- epv->updateFolder = impl_Storage_updateFolder;
- epv->asyncDiscoverSharedFolder = impl_Storage_asyncDiscoverSharedFolder;
- epv->cancelDiscoverSharedFolder = impl_Storage_cancelDiscoverSharedFolder;
- epv->asyncRemoveSharedFolder = impl_Storage_asyncRemoveSharedFolder;
- epv->addListener = impl_Storage_addListener;
- epv->removeListener = impl_Storage_removeListener;
- epv->showFolderProperties = impl_Storage_showFolderProperties;
- epv->_get_folderPropertyItems = impl_Storage__get_folderPropertyItems;
-
- parent_class = g_type_class_ref(PARENT_TYPE);
-
- signals[CREATE_FOLDER]
- = g_signal_new ("create_folder",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (EvolutionStorageClass, create_folder),
- NULL, NULL,
- e_shell_marshal_NONE__POINTER_STRING_STRING_STRING_STRING,
- G_TYPE_NONE, 5,
- G_TYPE_POINTER,
- G_TYPE_STRING,
- G_TYPE_STRING,
- G_TYPE_STRING,
- G_TYPE_STRING);
-
- signals[REMOVE_FOLDER]
- = g_signal_new ("remove_folder",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (EvolutionStorageClass, remove_folder),
- NULL, NULL,
- e_shell_marshal_NONE__POINTER_STRING_STRING,
- G_TYPE_NONE, 3,
- G_TYPE_POINTER,
- G_TYPE_STRING,
- G_TYPE_STRING);
-
- signals[XFER_FOLDER]
- = g_signal_new ("xfer_folder",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (EvolutionStorageClass, xfer_folder),
- NULL, NULL,
- e_shell_marshal_NONE__POINTER_STRING_STRING_BOOL,
- G_TYPE_NONE, 4,
- G_TYPE_POINTER,
- G_TYPE_STRING,
- G_TYPE_STRING,
- G_TYPE_BOOLEAN);
-
- signals[UPDATE_FOLDER]
- = g_signal_new ("update_folder",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EvolutionStorageClass, update_folder),
- NULL, NULL,
- e_shell_marshal_NONE__STRING_INT,
- G_TYPE_NONE, 2,
- G_TYPE_STRING,
- G_TYPE_INT);
-
- signals[OPEN_FOLDER]
- = g_signal_new ("open_folder",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (EvolutionStorageClass, open_folder),
- NULL, NULL,
- e_shell_marshal_NONE__POINTER_STRING,
- G_TYPE_NONE, 2,
- G_TYPE_POINTER,
- G_TYPE_STRING);
-
- signals[DISCOVER_SHARED_FOLDER]
- = g_signal_new ("discover_shared_folder",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (EvolutionStorageClass, discover_shared_folder),
- NULL, NULL,
- e_shell_marshal_NONE__POINTER_STRING_STRING,
- G_TYPE_NONE, 3,
- G_TYPE_POINTER,
- G_TYPE_STRING,
- G_TYPE_STRING);
-
- signals[CANCEL_DISCOVER_SHARED_FOLDER]
- = g_signal_new ("cancel_discover_shared_folder",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (EvolutionStorageClass, cancel_discover_shared_folder),
- NULL, NULL,
- e_shell_marshal_NONE__STRING_STRING,
- G_TYPE_NONE, 2,
- G_TYPE_STRING,
- G_TYPE_STRING);
-
- signals[REMOVE_SHARED_FOLDER]
- = g_signal_new ("remove_shared_folder",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (EvolutionStorageClass, remove_shared_folder),
- NULL, NULL,
- e_shell_marshal_NONE__POINTER_STRING,
- G_TYPE_NONE, 2,
- G_TYPE_POINTER,
- G_TYPE_STRING);
-
- signals[SHOW_FOLDER_PROPERTIES]
- = g_signal_new ("show_folder_properties",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (EvolutionStorageClass, show_folder_properties),
- NULL, NULL,
- e_shell_marshal_NONE__STRING_INT_INT,
- G_TYPE_NONE, 3,
- G_TYPE_STRING,
- G_TYPE_INT,
- G_TYPE_INT);
-}
-
-static void
-evolution_storage_init (EvolutionStorage *storage)
-{
- EvolutionStoragePrivate *priv;
-
- priv = g_new (EvolutionStoragePrivate, 1);
- priv->name = NULL;
- priv->has_shared_folders = FALSE;
- priv->folder_tree = e_folder_tree_new (folder_destroy_notify, storage);
- priv->uri_to_path = g_hash_table_new (g_str_hash, g_str_equal);
- priv->corba_storage_listeners = NULL;
- priv->folder_property_items = NULL;
-
- storage->priv = priv;
-}
-
-
-void
-evolution_storage_construct (EvolutionStorage *storage,
- const char *name,
- gboolean has_shared_folders)
-{
- EvolutionStoragePrivate *priv;
-
- g_return_if_fail (EVOLUTION_IS_STORAGE (storage));
- g_return_if_fail (name != NULL);
- g_return_if_fail (name[0] != '\0');
-
- priv = storage->priv;
- priv->name = g_strdup (name);
- priv->has_shared_folders = !! has_shared_folders;
-}
-
-EvolutionStorage *
-evolution_storage_new (const char *name,
- gboolean has_shared_folders)
-{
- EvolutionStorage *new;
-
- g_return_val_if_fail (name != NULL, NULL);
- g_return_val_if_fail (name[0] != '\0', NULL);
-
- new = g_object_new (evolution_storage_get_type (), 0);
-
- evolution_storage_construct (new, name, has_shared_folders);
-
- return new;
-}
-
-void
-evolution_storage_rename (EvolutionStorage *evolution_storage,
- const char *new_name)
-{
- /* FIXME: Implement me */
-}
-
-EvolutionStorageResult
-evolution_storage_register (EvolutionStorage *evolution_storage,
- GNOME_Evolution_StorageRegistry corba_storage_registry)
-{
- EvolutionStorageResult result;
- GNOME_Evolution_StorageListener corba_storage_listener;
- GNOME_Evolution_Storage corba_storage;
- EvolutionStoragePrivate *priv;
- CORBA_Environment ev;
-
- g_return_val_if_fail (evolution_storage != NULL,
- EVOLUTION_STORAGE_ERROR_INVALIDPARAMETER);
- g_return_val_if_fail (EVOLUTION_IS_STORAGE (evolution_storage),
- EVOLUTION_STORAGE_ERROR_INVALIDPARAMETER);
- g_return_val_if_fail (corba_storage_registry != CORBA_OBJECT_NIL,
- EVOLUTION_STORAGE_ERROR_INVALIDPARAMETER);
-
- priv = evolution_storage->priv;
-
- if (priv->corba_storage_listeners != NULL)
- return EVOLUTION_STORAGE_ERROR_ALREADYREGISTERED;
-
- CORBA_exception_init (&ev);
-
- corba_storage = bonobo_object_corba_objref (BONOBO_OBJECT (evolution_storage));
- corba_storage_listener = GNOME_Evolution_StorageRegistry_addStorage (corba_storage_registry,
- corba_storage,
- priv->name,
- &ev);
-
- if (ev._major == CORBA_NO_EXCEPTION) {
- add_listener (evolution_storage, corba_storage_listener);
- result = EVOLUTION_STORAGE_OK;
- } else {
- if (ev._major != CORBA_USER_EXCEPTION)
- result = EVOLUTION_STORAGE_ERROR_CORBA;
- else if (strcmp (CORBA_exception_id (&ev), ex_GNOME_Evolution_StorageRegistry_Exists) == 0)
- result = EVOLUTION_STORAGE_ERROR_EXISTS;
- else
- result = EVOLUTION_STORAGE_ERROR_GENERIC;
- }
-
- CORBA_exception_free (&ev);
-
- return result;
-}
-
-EvolutionStorageResult
-evolution_storage_register_on_shell (EvolutionStorage *evolution_storage,
- GNOME_Evolution_Shell corba_shell)
-{
- GNOME_Evolution_StorageRegistry corba_storage_registry;
- EvolutionStorageResult result;
- CORBA_Environment ev;
-
- g_return_val_if_fail (evolution_storage != NULL,
- EVOLUTION_STORAGE_ERROR_INVALIDPARAMETER);
- g_return_val_if_fail (EVOLUTION_IS_STORAGE (evolution_storage),
- EVOLUTION_STORAGE_ERROR_INVALIDPARAMETER);
- g_return_val_if_fail (corba_shell != CORBA_OBJECT_NIL,
- EVOLUTION_STORAGE_ERROR_INVALIDPARAMETER);
-
- CORBA_exception_init (&ev);
-
- corba_storage_registry = Bonobo_Unknown_queryInterface (corba_shell,
- "IDL:GNOME/Evolution/StorageRegistry:1.0",
- &ev);
- if (corba_storage_registry == CORBA_OBJECT_NIL || ev._major != CORBA_NO_EXCEPTION) {
- CORBA_exception_free (&ev);
- return EVOLUTION_STORAGE_ERROR_NOREGISTRY;
- }
-
- result = evolution_storage_register (evolution_storage, corba_storage_registry);
-
- Bonobo_Unknown_unref (corba_storage_registry, &ev);
- CORBA_Object_release (corba_storage_registry, &ev);
-
- CORBA_exception_free (&ev);
-
- return result;
-}
-
-EvolutionStorageResult
-evolution_storage_deregister_on_shell (EvolutionStorage *evolution_storage,
- GNOME_Evolution_Shell corba_shell)
-{
- GNOME_Evolution_StorageRegistry corba_storage_registry;
- EvolutionStorageResult result;
- EvolutionStoragePrivate *priv;
- CORBA_Environment ev;
-
- g_return_val_if_fail (evolution_storage != NULL,
- EVOLUTION_STORAGE_ERROR_INVALIDPARAMETER);
- g_return_val_if_fail (EVOLUTION_IS_STORAGE (evolution_storage),
- EVOLUTION_STORAGE_ERROR_INVALIDPARAMETER);
- g_return_val_if_fail (corba_shell != CORBA_OBJECT_NIL,
- EVOLUTION_STORAGE_ERROR_INVALIDPARAMETER);
-
- priv = evolution_storage->priv;
-
- CORBA_exception_init (&ev);
-
- corba_storage_registry = Bonobo_Unknown_queryInterface (corba_shell,
- "IDL:GNOME/Evolution/StorageRegistry:1.0",
- &ev);
- if (corba_storage_registry == CORBA_OBJECT_NIL || ev._major != CORBA_NO_EXCEPTION) {
- CORBA_exception_free (&ev);
- return EVOLUTION_STORAGE_ERROR_NOREGISTRY;
- }
-
- GNOME_Evolution_StorageRegistry_removeStorageByName (corba_storage_registry,
- priv->name,
- &ev);
-
- if (ev._major == CORBA_NO_EXCEPTION)
- result = EVOLUTION_STORAGE_OK;
- else {
- if (ev._major != CORBA_USER_EXCEPTION)
- result = EVOLUTION_STORAGE_ERROR_CORBA;
- else if (strcmp (CORBA_exception_id (&ev), ex_GNOME_Evolution_StorageRegistry_NotFound) == 0)
- result = EVOLUTION_STORAGE_ERROR_EXISTS;
- else
- result = EVOLUTION_STORAGE_ERROR_GENERIC;
- }
-
- /* Now unref the EvolutionStorage */
- bonobo_object_unref (BONOBO_OBJECT (evolution_storage));
-
- Bonobo_Unknown_unref (corba_storage_registry, &ev);
- CORBA_Object_release (corba_storage_registry, &ev);
-
- CORBA_exception_free (&ev);
-
- return result;
-}
-
-static char *
-make_full_uri (EvolutionStorage *storage,
- const char *path)
-{
- const char *storage_name;
- char *full_path;
-
- storage_name = storage->priv->name;
-
- if (strcmp (path, E_PATH_SEPARATOR_S) == 0)
- full_path = g_strconcat (E_SHELL_URI_PREFIX,
- E_PATH_SEPARATOR_S, storage_name,
- NULL);
- else if (! g_path_is_absolute (path))
- full_path = g_strconcat (E_SHELL_URI_PREFIX,
- E_PATH_SEPARATOR_S, storage_name,
- E_PATH_SEPARATOR_S, path, NULL);
- else
- full_path = g_strconcat (E_SHELL_URI_PREFIX,
- E_PATH_SEPARATOR_S, storage_name,
- path, NULL);
-
- return full_path;
-}
-
-EvolutionStorageResult
-evolution_storage_new_folder (EvolutionStorage *evolution_storage,
- const char *path,
- const char *display_name,
- const char *type,
- const char *physical_uri,
- const char *description,
- const char *custom_icon_name,
- int unread_count,
- gboolean can_sync_offline,
- int sorting_priority)
-{
- EvolutionStorageResult result;
- EvolutionStoragePrivate *priv;
- GNOME_Evolution_Folder *corba_folder;
- CORBA_Environment ev;
- GList *p;
- char *evolutionUri;
-
- g_return_val_if_fail (evolution_storage != NULL,
- EVOLUTION_STORAGE_ERROR_INVALIDPARAMETER);
- g_return_val_if_fail (EVOLUTION_IS_STORAGE (evolution_storage),
- EVOLUTION_STORAGE_ERROR_INVALIDPARAMETER);
- g_return_val_if_fail (path != NULL, EVOLUTION_STORAGE_ERROR_INVALIDPARAMETER);
- g_return_val_if_fail (g_path_is_absolute (path), EVOLUTION_STORAGE_ERROR_INVALIDPARAMETER);
- g_return_val_if_fail (display_name != NULL, EVOLUTION_STORAGE_ERROR_INVALIDPARAMETER);
- g_return_val_if_fail (type != NULL, EVOLUTION_STORAGE_ERROR_INVALIDPARAMETER);
- g_return_val_if_fail (physical_uri != NULL, EVOLUTION_STORAGE_ERROR_INVALIDPARAMETER);
-
- if (description == NULL)
- description = "";
-
- priv = evolution_storage->priv;
-
- CORBA_exception_init (&ev);
-
- corba_folder = GNOME_Evolution_Folder__alloc ();
- corba_folder->displayName = CORBA_string_dup (display_name);
- corba_folder->description = CORBA_string_dup (description);
- corba_folder->type = CORBA_string_dup (type);
- corba_folder->physicalUri = CORBA_string_dup (physical_uri);
- corba_folder->canSyncOffline = (CORBA_boolean) can_sync_offline;
- corba_folder->sortingPriority = sorting_priority;
-
- if (custom_icon_name != NULL)
- corba_folder->customIconName = CORBA_string_dup (custom_icon_name);
- else
- corba_folder->customIconName = CORBA_string_dup ("");
-
- evolutionUri = make_full_uri (evolution_storage, path);
- corba_folder->evolutionUri = CORBA_string_dup (evolutionUri);
- g_free (evolutionUri);
-
- corba_folder->unreadCount = unread_count;
-
- if (! e_folder_tree_add (priv->folder_tree, path, corba_folder)) {
- CORBA_free (corba_folder);
- return EVOLUTION_STORAGE_ERROR_EXISTS;
- }
- g_hash_table_insert (priv->uri_to_path, g_strdup (physical_uri), g_strdup (path));
-
- result = EVOLUTION_STORAGE_OK;
-
- for (p = priv->corba_storage_listeners; p != NULL; p = p->next) {
- GNOME_Evolution_StorageListener listener;
-
- listener = p->data;
- GNOME_Evolution_StorageListener_notifyFolderCreated (listener, path, corba_folder, &ev);
-
- if (ev._major == CORBA_NO_EXCEPTION)
- continue;
-
- if (ev._major != CORBA_USER_EXCEPTION)
- result = EVOLUTION_STORAGE_ERROR_CORBA;
- else if (strcmp (CORBA_exception_id (&ev), ex_GNOME_Evolution_StorageListener_Exists) == 0)
- result = EVOLUTION_STORAGE_ERROR_EXISTS;
- else
- result = EVOLUTION_STORAGE_ERROR_GENERIC;
-
- break;
- }
-
- CORBA_exception_free (&ev);
-
- return result;
-}
-
-EvolutionStorageResult
-evolution_storage_update_folder (EvolutionStorage *evolution_storage,
- const char *path,
- int unread_count)
-{
- EvolutionStorageResult result;
- EvolutionStoragePrivate *priv;
- GNOME_Evolution_Folder *corba_folder;
- GList *p;
-
- g_return_val_if_fail (evolution_storage != NULL,
- EVOLUTION_STORAGE_ERROR_INVALIDPARAMETER);
- g_return_val_if_fail (EVOLUTION_IS_STORAGE (evolution_storage),
- EVOLUTION_STORAGE_ERROR_INVALIDPARAMETER);
- g_return_val_if_fail (path != NULL, EVOLUTION_STORAGE_ERROR_INVALIDPARAMETER);
- g_return_val_if_fail (g_path_is_absolute (path), EVOLUTION_STORAGE_ERROR_INVALIDPARAMETER);
-
- priv = evolution_storage->priv;
-
- g_signal_emit (evolution_storage, signals[UPDATE_FOLDER], 0,
- path, unread_count);
-
- if (priv->corba_storage_listeners == NULL)
- return EVOLUTION_STORAGE_ERROR_NOTREGISTERED;
-
- result = EVOLUTION_STORAGE_OK;
-
- for (p = priv->corba_storage_listeners; p != NULL; p = p->next) {
- GNOME_Evolution_StorageListener listener;
- CORBA_Environment ev;
-
- CORBA_exception_init (&ev);
-
- listener = p->data;
- GNOME_Evolution_StorageListener_notifyFolderUpdated (listener, path, unread_count, &ev);
-
- CORBA_exception_free (&ev);
- }
-
- if (result == EVOLUTION_STORAGE_OK) {
- corba_folder = e_folder_tree_get_folder (priv->folder_tree, path);
- if (corba_folder != NULL)
- corba_folder->unreadCount = unread_count;
- else
- result = EVOLUTION_STORAGE_ERROR_NOTFOUND;
- }
-
- return result;
-}
-
-EvolutionStorageResult
-evolution_storage_update_folder_by_uri (EvolutionStorage *evolution_storage,
- const char *physical_uri,
- int unread_count)
-{
- EvolutionStoragePrivate *priv;
- char *path;
-
- g_return_val_if_fail (evolution_storage != NULL,
- EVOLUTION_STORAGE_ERROR_INVALIDPARAMETER);
- g_return_val_if_fail (EVOLUTION_IS_STORAGE (evolution_storage),
- EVOLUTION_STORAGE_ERROR_INVALIDPARAMETER);
- g_return_val_if_fail (physical_uri != NULL, EVOLUTION_STORAGE_ERROR_INVALIDPARAMETER);
-
- priv = evolution_storage->priv;
-
- path = g_hash_table_lookup (priv->uri_to_path, physical_uri);
- return evolution_storage_update_folder (evolution_storage, path, unread_count);
-}
-
-EvolutionStorageResult
-evolution_storage_removed_folder (EvolutionStorage *evolution_storage,
- const char *path)
-{
- EvolutionStorageResult result;
- EvolutionStoragePrivate *priv;
- CORBA_Environment ev;
- GNOME_Evolution_Folder *corba_folder;
- gpointer key, value;
- GList *p;
-
- g_return_val_if_fail (evolution_storage != NULL,
- EVOLUTION_STORAGE_ERROR_INVALIDPARAMETER);
- g_return_val_if_fail (EVOLUTION_IS_STORAGE (evolution_storage),
- EVOLUTION_STORAGE_ERROR_INVALIDPARAMETER);
- g_return_val_if_fail (path != NULL, EVOLUTION_STORAGE_ERROR_INVALIDPARAMETER);
- g_return_val_if_fail (g_path_is_absolute (path), EVOLUTION_STORAGE_ERROR_INVALIDPARAMETER);
-
- priv = evolution_storage->priv;
-
- if (priv->corba_storage_listeners == NULL)
- return EVOLUTION_STORAGE_ERROR_NOTREGISTERED;
-
- corba_folder = e_folder_tree_get_folder (priv->folder_tree, path);
- if (corba_folder == NULL)
- return EVOLUTION_STORAGE_ERROR_NOTFOUND;
- if (g_hash_table_lookup_extended (priv->uri_to_path, corba_folder->physicalUri, &key, &value)) {
- g_hash_table_remove (priv->uri_to_path, key);
- g_free (key);
- g_free (value);
- }
- e_folder_tree_remove (priv->folder_tree, path);
-
- CORBA_exception_init (&ev);
-
- result = EVOLUTION_STORAGE_OK;
-
- for (p = priv->corba_storage_listeners; p != NULL; p = p->next) {
- GNOME_Evolution_StorageListener listener;
-
- listener = p->data;
- GNOME_Evolution_StorageListener_notifyFolderRemoved (listener, path, &ev);
-
- if (ev._major == CORBA_NO_EXCEPTION)
- continue;
-
- if (ev._major != CORBA_USER_EXCEPTION)
- result = EVOLUTION_STORAGE_ERROR_CORBA;
- else if (strcmp (CORBA_exception_id (&ev), ex_GNOME_Evolution_StorageListener_NotFound) == 0)
- result = EVOLUTION_STORAGE_ERROR_NOTFOUND;
- else
- result = EVOLUTION_STORAGE_ERROR_GENERIC;
-
- break;
- }
-
- CORBA_exception_free (&ev);
-
- return result;
-}
-
-gboolean
-evolution_storage_folder_exists (EvolutionStorage *evolution_storage,
- const char *path)
-{
- EvolutionStoragePrivate *priv;
-
- g_return_val_if_fail (EVOLUTION_IS_STORAGE (evolution_storage),
- EVOLUTION_STORAGE_ERROR_INVALIDPARAMETER);
- g_return_val_if_fail (path != NULL, EVOLUTION_STORAGE_ERROR_INVALIDPARAMETER);
- g_return_val_if_fail (g_path_is_absolute (path), EVOLUTION_STORAGE_ERROR_INVALIDPARAMETER);
-
- priv = evolution_storage->priv;
-
- return e_folder_tree_get_folder (priv->folder_tree, path) != NULL;
-}
-
-EvolutionStorageResult
-evolution_storage_has_subfolders (EvolutionStorage *evolution_storage,
- const char *path,
- const char *message)
-{
- EvolutionStorageResult result;
- EvolutionStoragePrivate *priv;
- CORBA_Environment ev;
- GList *p;
-
- g_return_val_if_fail (evolution_storage != NULL,
- EVOLUTION_STORAGE_ERROR_INVALIDPARAMETER);
- g_return_val_if_fail (EVOLUTION_IS_STORAGE (evolution_storage),
- EVOLUTION_STORAGE_ERROR_INVALIDPARAMETER);
- g_return_val_if_fail (path != NULL, EVOLUTION_STORAGE_ERROR_INVALIDPARAMETER);
- g_return_val_if_fail (g_path_is_absolute (path), EVOLUTION_STORAGE_ERROR_INVALIDPARAMETER);
- g_return_val_if_fail (message != NULL, EVOLUTION_STORAGE_ERROR_INVALIDPARAMETER);
-
- priv = evolution_storage->priv;
-
- if (priv->corba_storage_listeners == NULL)
- return EVOLUTION_STORAGE_ERROR_NOTREGISTERED;
-
- CORBA_exception_init (&ev);
-
- result = EVOLUTION_STORAGE_OK;
-
- for (p = priv->corba_storage_listeners; p != NULL; p = p->next) {
- GNOME_Evolution_StorageListener listener;
-
- listener = p->data;
- GNOME_Evolution_StorageListener_notifyHasSubfolders (listener, path, message, &ev);
-
- if (ev._major == CORBA_NO_EXCEPTION)
- continue;
- if (ev._major != CORBA_USER_EXCEPTION)
- result = EVOLUTION_STORAGE_ERROR_CORBA;
- else if (strcmp (CORBA_exception_id (&ev), ex_GNOME_Evolution_StorageListener_NotFound) == 0)
- result = EVOLUTION_STORAGE_ERROR_NOTFOUND;
- else
- result = EVOLUTION_STORAGE_ERROR_GENERIC;
-
- break;
- }
-
- CORBA_exception_free (&ev);
-
- return result;
-}
-
-
-/* Setting up property items. */
-
-void
-evolution_storage_add_property_item (EvolutionStorage *evolution_storage,
- const char *label,
- const char *tooltip,
- GdkPixbuf *icon)
-{
- FolderPropertyItem *item;
-
- g_return_if_fail (EVOLUTION_IS_STORAGE (evolution_storage));
- g_return_if_fail (label != NULL);
-
- item = g_new (FolderPropertyItem, 1);
- item->label = g_strdup (label);
- item->tooltip = g_strdup (tooltip);
- item->icon = icon;
- if (icon != NULL)
- g_object_ref (icon);
-
- evolution_storage->priv->folder_property_items = g_slist_append (evolution_storage->priv->folder_property_items,
- item);
-}
-
-
-BONOBO_TYPE_FUNC_FULL (EvolutionStorage,
- GNOME_Evolution_Storage,
- PARENT_TYPE,
- evolution_storage)
diff --git a/shell/evolution-storage.h b/shell/evolution-storage.h
deleted file mode 100644
index 209f43a339..0000000000
--- a/shell/evolution-storage.h
+++ /dev/null
@@ -1,185 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* evolution-storage.h
- *
- * Copyright (C) 2000 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifndef __EVOLUTION_STORAGE_H__
-#define __EVOLUTION_STORAGE_H__
-
-#include "Evolution.h"
-
-#include <glib.h>
-#include <glib-object.h>
-
-#include <gdk-pixbuf/gdk-pixbuf.h>
-
-#include <bonobo/bonobo-object.h>
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-#define EVOLUTION_TYPE_STORAGE (evolution_storage_get_type ())
-#define EVOLUTION_STORAGE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EVOLUTION_TYPE_STORAGE, EvolutionStorage))
-#define EVOLUTION_STORAGE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EVOLUTION_TYPE_STORAGE, EvolutionStorageClass))
-#define EVOLUTION_IS_STORAGE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EVOLUTION_TYPE_STORAGE))
-#define EVOLUTION_IS_STORAGE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), EVOLUTION_TYPE_STORAGE))
-
-
-typedef struct _EvolutionStorage EvolutionStorage;
-typedef struct _EvolutionStoragePrivate EvolutionStoragePrivate;
-typedef struct _EvolutionStorageClass EvolutionStorageClass;
-
-enum _EvolutionStorageResult {
- EVOLUTION_STORAGE_OK,
-
- /* Generic errors */
- EVOLUTION_STORAGE_ERROR_GENERIC,
- EVOLUTION_STORAGE_ERROR_CORBA,
- EVOLUTION_STORAGE_ERROR_INVALIDPARAMETER,
-
- /* Registration errors */
- EVOLUTION_STORAGE_ERROR_ALREADYREGISTERED,
- EVOLUTION_STORAGE_ERROR_NOTREGISTERED,
- EVOLUTION_STORAGE_ERROR_NOREGISTRY,
- EVOLUTION_STORAGE_ERROR_EXISTS,
- EVOLUTION_STORAGE_ERROR_NOTFOUND,
-
- /* Folder creation/deletion errors */
- EVOLUTION_STORAGE_ERROR_UNSUPPORTED_OPERATION,
- EVOLUTION_STORAGE_ERROR_UNSUPPORTED_TYPE,
- EVOLUTION_STORAGE_ERROR_INVALID_URI,
- EVOLUTION_STORAGE_ERROR_ALREADY_EXISTS,
- EVOLUTION_STORAGE_ERROR_DOES_NOT_EXIST,
- EVOLUTION_STORAGE_ERROR_PERMISSION_DENIED,
- EVOLUTION_STORAGE_ERROR_NO_SPACE,
- EVOLUTION_STORAGE_ERROR_NOT_EMPTY
-};
-typedef enum _EvolutionStorageResult EvolutionStorageResult;
-
-struct _EvolutionStorage {
- BonoboObject parent;
-
- EvolutionStoragePrivate *priv;
-};
-
-struct _EvolutionStorageClass {
- BonoboObjectClass parent_class;
-
- /* signals */
- void (*create_folder) (EvolutionStorage *storage,
- const Bonobo_Listener listener,
- const char *path,
- const char *type,
- const char *description,
- const char *parent_physical_uri);
-
- void (*remove_folder) (EvolutionStorage *storage,
- const Bonobo_Listener listener,
- const char *path,
- const char *physical_uri);
-
- void (*xfer_folder) (EvolutionStorage *storage,
- const Bonobo_Listener listener,
- const char *source_path,
- const char *destination_path,
- gboolean remove_source);
-
- void (*open_folder) (EvolutionStorage *storage,
- const Bonobo_Listener listener,
- const char *path);
-
- void (*update_folder) (EvolutionStorage *storage,
- const char *path,
- int unread_count);
-
- void (*discover_shared_folder) (EvolutionStorage *storage,
- Bonobo_Listener listener,
- const char *user,
- const char *folder_name);
-
- void (*cancel_discover_shared_folder) (EvolutionStorage *storage,
- const char *user,
- const char *folder_name);
-
- void (*remove_shared_folder) (EvolutionStorage *storage,
- Bonobo_Listener listener,
- const char *path);
-
- void (*show_folder_properties) (EvolutionStorage *storage,
- const char *path,
- unsigned int itemNumber,
- unsigned long parentWindowId);
-
- POA_GNOME_Evolution_Storage__epv epv;
-};
-
-
-GType evolution_storage_get_type (void);
-void evolution_storage_construct (EvolutionStorage *storage,
- const char *name,
- gboolean has_shared_folders);
-EvolutionStorage *evolution_storage_new (const char *name,
- gboolean has_shared_folders);
-
-void evolution_storage_rename (EvolutionStorage *storage,
- const char *new_name);
-
-EvolutionStorageResult evolution_storage_register (EvolutionStorage *storage,
- GNOME_Evolution_StorageRegistry corba_registry);
-EvolutionStorageResult evolution_storage_register_on_shell (EvolutionStorage *evolution_storage,
- GNOME_Evolution_Shell corba_shell);
-EvolutionStorageResult evolution_storage_deregister_on_shell (EvolutionStorage *storage,
- GNOME_Evolution_Shell corba_shell);
-EvolutionStorageResult evolution_storage_new_folder (EvolutionStorage *evolution_storage,
- const char *path,
- const char *display_name,
- const char *type,
- const char *physical_uri,
- const char *description,
- const char *custom_icon_name,
- int unread_count,
- gboolean can_sync_offline,
- int sorting_priority);
-EvolutionStorageResult evolution_storage_update_folder (EvolutionStorage *evolution_storage,
- const char *path,
- int unread_count);
-EvolutionStorageResult evolution_storage_update_folder_by_uri (EvolutionStorage *evolution_storage,
- const char *physical_uri,
- int unread_count);
-EvolutionStorageResult evolution_storage_removed_folder (EvolutionStorage *evolution_storage,
- const char *path);
-gboolean evolution_storage_folder_exists (EvolutionStorage *evolution_storage,
- const char *path);
-EvolutionStorageResult evolution_storage_has_subfolders (EvolutionStorage *evolution_storage,
- const char *path,
- const char *message);
-
-void evolution_storage_add_property_item (EvolutionStorage *evolution_storage,
- const char *label,
- const char *tooltip,
- GdkPixbuf *icon);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* __EVOLUTION_STORAGE_H__ */
diff --git a/shell/evolution-test-component.c b/shell/evolution-test-component.c
deleted file mode 100644
index faeae39991..0000000000
--- a/shell/evolution-test-component.c
+++ /dev/null
@@ -1,715 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* evolution-test-component.c
- *
- * Copyright (C) 2001, 2002 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-/* Simple test component for the Evolution shell. */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "evolution-shell-component.h"
-
-#include "evolution-activity-client.h"
-#include "evolution-config-control.h"
-#include "evolution-storage.h"
-
-#include <bonobo-activation/bonobo-activation.h>
-
-#include <bonobo/bonobo-exception.h>
-#include <bonobo/bonobo-generic-factory.h>
-#include <bonobo/bonobo-main.h>
-#include <bonobo/bonobo-widget.h>
-
-#include <libgnomeui/gnome-ui-init.h>
-
-#include <gtk/gtkdialog.h>
-#include <gtk/gtkeventbox.h>
-#include <gtk/gtklabel.h>
-#include <gtk/gtkmain.h>
-#include <gtk/gtkstock.h>
-#include <gtk/gtkvbox.h>
-
-#include <gdk-pixbuf/gdk-pixbuf.h>
-
-#include <stdlib.h>
-#include <string.h>
-
-
-#define COMPONENT_ID "OAFIID:GNOME_Evolution_TestComponent_ShellComponent"
-
-#define CONFIGURATION_CONTROL_FACTORY_ID "OAFIID:GNOME_Evolution_TestComponent_ConfigurationControlFactory"
-#define CONFIGURATION_CONTROL_ID "OAFIID:GNOME_Evolution_TestComponent_ConfigurationControl"
-
-static const EvolutionShellComponentFolderType folder_types[] = {
- { "test", "/usr/share/pixmaps/gnome-money.png", N_("Test"), N_("Test type"), FALSE, NULL, NULL },
- { NULL }
-};
-
-
-static BonoboGenericFactory *configuration_control_factory = NULL;
-
-static EvolutionShellClient *parent_shell = NULL;
-
-static int timeout_id = 0;
-
-
-/* TEST #1: Configuration Control. */
-
-static BonoboObject *
-create_configuration_page (void)
-{
- GtkWidget *label;
-
- label = gtk_label_new ("This is the configuration page for the test component.");
- gtk_widget_show (label);
-
- return BONOBO_OBJECT (evolution_config_control_new (label));
-}
-
-static BonoboObject *
-configuration_control_factory_fn (BonoboGenericFactory *factory,
- const char *id,
- void *closure)
-{
- if (strcmp (id, CONFIGURATION_CONTROL_ID) == 0) {
- return create_configuration_page ();
- } else {
- g_warning ("Unknown ID in configuration control factory -- %s", id);
- return NULL;
- }
-}
-
-static void
-register_configuration_control_factory (void)
-{
- configuration_control_factory = bonobo_generic_factory_new (CONFIGURATION_CONTROL_FACTORY_ID,
- configuration_control_factory_fn,
- NULL);
-
- if (configuration_control_factory == NULL)
- g_warning ("Cannot register configuration control factory!");
-}
-
-
-/* TEST #2: The ::Shortcut interface. */
-
-static void
-spit_out_shortcuts (EvolutionShellClient *shell_client)
-{
- GNOME_Evolution_Shortcuts shortcuts_interface;
- GNOME_Evolution_Shortcuts_GroupList *groups;
- CORBA_Environment ev;
- int i, j;
-
- CORBA_exception_init (&ev);
-
- shortcuts_interface = evolution_shell_client_get_shortcuts_interface (shell_client);
- if (CORBA_Object_is_nil (shortcuts_interface, &ev)) {
- g_warning ("No ::Shortcut interface on the shell");
- CORBA_exception_free (&ev);
- return;
- }
-
- groups = GNOME_Evolution_Shortcuts__get_groups (shortcuts_interface, &ev);
- if (ev._major != CORBA_NO_EXCEPTION) {
- g_warning ("Exception getting the groups: %s", BONOBO_EX_REPOID (&ev));
- CORBA_exception_free (&ev);
- return;
- }
-
- for (i = 0; i < groups->_length; i ++) {
- GNOME_Evolution_Shortcuts_Group *group;
- GNOME_Evolution_Shortcuts_ShortcutList *shortcuts;
-
- group = groups->_buffer + i;
- shortcuts = &group->shortcuts;
-
- g_print ("\tGROUP: %s\n", group->name);
-
- for (j = 0; j < shortcuts->_length; j ++) {
- GNOME_Evolution_Shortcuts_Shortcut *shortcut;
-
- shortcut = shortcuts->_buffer + j;
-
- g_print ("\t\tName: %s\n", shortcut->name);
- g_print ("\t\t\tType: %s\n", shortcut->type);
- g_print ("\t\t\tURI: %s\n", shortcut->uri);
- }
- }
-
- g_print ("** Done\n\n");
-
- CORBA_exception_free (&ev);
-}
-
-
-/* TEST #4: The multiple folder selector. */
-
-static void
-dialog_clicked_callback (GtkDialog *dialog,
- int button_num,
- void *data)
-{
- GNOME_Evolution_StorageSetView storage_set_view_iface;
- CORBA_Environment ev;
- GNOME_Evolution_FolderList *folder_list;
-
- if (button_num == 1) {
- /* Close. */
- gtk_widget_destroy (GTK_WIDGET (dialog));
- return;
- }
-
- CORBA_exception_init (&ev);
-
- storage_set_view_iface = (GNOME_Evolution_StorageSetView) data;
-
- folder_list = GNOME_Evolution_StorageSetView__get_checkedFolders (storage_set_view_iface, &ev);
- if (BONOBO_EX (&ev)) {
- g_warning ("Cannot get checkedFolders -- %s", BONOBO_EX_REPOID (&ev));
- } else {
- int i;
-
- for (i = 0; i < folder_list->_length; i ++) {
-#define PRINT(s) g_print ("\t" #s ": %s\n", folder_list->_buffer[i].s);
- g_print ("Folder #%d:\n", i + 1);
- PRINT (type);
- PRINT (description);
- PRINT (displayName);
- PRINT (physicalUri);
- PRINT (evolutionUri);
-#undef PRINT
-
- g_print ("\tunreadCount: %d\n", folder_list->_buffer[i].unreadCount);
- }
- }
-
- CORBA_exception_free (&ev);
-}
-
-static void
-dialog_weak_notify (void *data,
- GObject *where_the_object_was)
-{
- GNOME_Evolution_StorageSetView storage_set_view_iface;
- CORBA_Environment ev;
-
- CORBA_exception_init (&ev);
-
- storage_set_view_iface = (GNOME_Evolution_StorageSetView) data;
- Bonobo_Unknown_unref (storage_set_view_iface, &ev);
-
- CORBA_exception_free (&ev);
-}
-
-static void
-create_new_folder_selector (EvolutionShellComponent *shell_component)
-{
- EvolutionShellClient *shell_client;
- GNOME_Evolution_Shell corba_shell;
- GNOME_Evolution_StorageSetView storage_set_view_iface;
- GtkWidget *dialog;
- GtkWidget *control_widget;
- CORBA_Environment ev;
-
- CORBA_exception_init (&ev);
-
- shell_client = evolution_shell_component_get_owner (shell_component);
- g_assert (shell_client != NULL);
- corba_shell = evolution_shell_client_corba_objref (shell_client);
-
- control_widget = evolution_shell_client_create_storage_set_view (shell_client,
- CORBA_OBJECT_NIL,
- NULL,
- &storage_set_view_iface,
- &ev);
- if (control_widget == NULL) {
- g_warning ("Can't create the StorageSetView control -- %s", BONOBO_EX_REPOID (&ev));
- CORBA_exception_free (&ev);
- return;
- }
-
- dialog = gtk_dialog_new_with_buttons ("Test the Selector here.", NULL,
- GTK_DIALOG_MODAL,
- GTK_STOCK_APPLY, GTK_RESPONSE_ACCEPT,
- GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE,
- NULL);
- gtk_window_set_default_size (GTK_WINDOW (dialog), 200, 400);
-
- gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), control_widget);
-
- GNOME_Evolution_StorageSetView__set_showCheckboxes (storage_set_view_iface, TRUE, &ev);
- if (BONOBO_EX (&ev))
- g_warning ("Cannot show checkboxes -- %s", BONOBO_EX_REPOID (&ev));
-
- g_signal_connect (dialog, "clicked",
- G_CALLBACK (dialog_clicked_callback), storage_set_view_iface);
-
- /* This is necessary to unref the StorageSetView iface once we are done
- with it. */
- g_object_weak_ref (G_OBJECT (dialog), dialog_weak_notify, storage_set_view_iface);
-
- gtk_widget_show (control_widget);
- gtk_widget_show (dialog);
-
- CORBA_exception_free (&ev);
-}
-
-
-/* TEST #5: Test custom storage. */
-
-static int
-shared_folder_discovery_timeout_callback (void *data)
-{
- GNOME_Evolution_Storage_FolderResult result;
- CORBA_Environment ev;
- Bonobo_Listener listener;
- CORBA_any any;
- EvolutionStorage *storage;
-
- storage = EVOLUTION_STORAGE (data);
-
- listener = (Bonobo_Listener) g_object_get_data (G_OBJECT (storage), "listener");
-
- result.result = GNOME_Evolution_Storage_OK;
- result.path = "/Shared Folders/The Public Folder";
-
- any._type = TC_GNOME_Evolution_Storage_FolderResult;
- any._value = &result;
-
- CORBA_exception_init (&ev);
-
- Bonobo_Listener_event (listener, "result", &any, &ev);
- if (BONOBO_EX (&ev))
- g_warning ("Cannot report result for shared folder discovery -- %s",
- BONOBO_EX_REPOID (&ev));
-
- Bonobo_Unknown_unref (listener, &ev);
- CORBA_Object_release (listener, &ev);
-
- CORBA_exception_free (&ev);
-
- g_object_set_data (G_OBJECT (storage), "listener", NULL);
- g_object_set_data (G_OBJECT (storage), "timeout_id", NULL);
-
- return FALSE;
-}
-
-static void
-storage_discover_shared_folder_callback (EvolutionStorage *storage,
- Bonobo_Listener listener,
- const char *user,
- const char *folder_name,
- void *data)
-{
- CORBA_Environment ev;
- Bonobo_Listener listener_copy;
-
- CORBA_exception_init (&ev);
- listener_copy = CORBA_Object_duplicate (listener, &ev);
- Bonobo_Unknown_ref (listener, &ev);
- CORBA_exception_free (&ev);
-
- g_print ("Listener copy %p\n", listener_copy);
-
- timeout_id = g_timeout_add (1000, shared_folder_discovery_timeout_callback, storage);
-
- g_object_set_data (G_OBJECT (storage), "listener", listener_copy);
- g_object_set_data (G_OBJECT (storage), "timeout_id", GINT_TO_POINTER (timeout_id));
-}
-
-static void
-storage_cancel_discover_shared_folder_callback (EvolutionStorage *storage,
- const char *user,
- const char *folder_name,
- void *data)
-{
- Bonobo_Listener listener;
- CORBA_Environment ev;
- int timeout_id;
-
- timeout_id = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (storage), "timeout_id"));
- if (timeout_id == 0)
- return;
-
- g_source_remove (timeout_id);
- g_object_set_data (G_OBJECT (storage), "timeout_id", NULL);
-
- listener = (Bonobo_Listener) g_object_get_data (G_OBJECT (storage), "listener");
-
- CORBA_exception_init (&ev);
- Bonobo_Unknown_unref (listener, &ev);
- CORBA_Object_release (listener, &ev);
- CORBA_exception_free (&ev);
-
- g_object_set_data (G_OBJECT (storage), "listener", NULL);
-}
-
-static void
-storage_show_folder_properties_callback (EvolutionStorage *storage,
- const char *path,
- unsigned int itemNumber,
- unsigned long parentWindowId,
- void *data)
-{
- g_print ("Show properties #%d -- %s\n", itemNumber, path);
-}
-
-static void
-setup_custom_storage (EvolutionShellClient *shell_client)
-{
- EvolutionStorage *the_storage;
- EvolutionStorageResult result;
-
- the_storage = evolution_storage_new ("TestStorage", TRUE);
-
- g_signal_connect (the_storage, "discover_shared_folder",
- G_CALLBACK (storage_discover_shared_folder_callback), shell_client);
- g_signal_connect (the_storage, "cancel_discover_shared_folder",
- G_CALLBACK (storage_cancel_discover_shared_folder_callback), shell_client);
-
- /* Add some custom "Properties" items. */
- evolution_storage_add_property_item (the_storage, "Sharing...",
- "Change sharing properties for this folder", NULL);
- evolution_storage_add_property_item (the_storage, "Permissions...",
- "Change permissions for this folder", NULL);
-
- g_signal_connect (the_storage, "show_folder_properties",
- G_CALLBACK (storage_show_folder_properties_callback), NULL);
-
- result = evolution_storage_register_on_shell (the_storage, evolution_shell_client_corba_objref (shell_client));
- if (result != EVOLUTION_STORAGE_OK) {
- g_warning ("Cannot register storage on the shell.");
- bonobo_object_unref (BONOBO_OBJECT (the_storage));
- return;
- }
-
- /* Test the sorting_priority arg here: if it was just sorting in
- alphabetical order, FirstFolder would come before SecondFolder, but
- we are specifying -1 sorting priority for SecondFolder and zero for
- FirstFolder so the order is reversed. */
-
- evolution_storage_new_folder (the_storage, "/FirstFolder", "FirstFolder",
- "test", "file:///tmp/blah", "", "inbox", 0, TRUE, 0);
- evolution_storage_new_folder (the_storage, "/SecondFolder", "SecondFolder",
- "calendar", "file:///tmp/bleh", "", NULL, 0, FALSE, -1);
-}
-
-
-/* Callbacks. */
-
-static void
-activity_client_cancel_callback (EvolutionActivityClient *client,
- void *data)
-{
- g_print ("User requested that the operation be cancelled.\n");
-}
-
-static void
-activity_client_show_details_callback (EvolutionActivityClient *client,
- void *data)
-{
- g_print ("User wants to see details.\n");
-}
-
-
-/* Timeout #3: We are done. */
-static int
-timeout_callback_3 (void *data)
-{
- EvolutionActivityClient *activity_client;
-
- activity_client = EVOLUTION_ACTIVITY_CLIENT (data);
-
- g_object_unref (activity_client);
-
- g_print ("--> Done.\n");
-
- return FALSE;
-}
-
-/* Timeout #2: Update the progress until it reaches 100%. */
-static int
-timeout_callback_2 (void *data)
-{
- EvolutionActivityClient *activity_client;
- int progress;
-
- activity_client = EVOLUTION_ACTIVITY_CLIENT (data);
- progress = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (activity_client), "my_progress"));
-
- if (progress < 0)
- progress = 0;
-
- g_print ("--> Updating %d\n", progress);
-
- if (! evolution_activity_client_update (activity_client, "Operation Foo in progress",
- (float) progress / 100.0)) {
- g_warning ("Error when updating operation");
- return FALSE;
- }
-
- progress ++;
- g_object_set_data (G_OBJECT (activity_client), "my_progress", GINT_TO_POINTER (progress));
-
- if (progress > 100) {
- g_timeout_add (200, timeout_callback_3, activity_client);
- return FALSE;
- }
-
- return TRUE;
-}
-
-/* Timeout #1: Set busy. */
-static int
-timeout_callback_1 (void *data)
-{
- EvolutionActivityClient *activity_client;
- gboolean suggest_display;
- GdkPixbuf *animated_icon[2];
- static int count = 0;
-
-#define NUM_ACTIVITIES 10
-
- animated_icon[0] = gdk_pixbuf_new_from_file (EVOLUTION_IMAGES "outbox-mini.png", NULL);
- animated_icon[1] = NULL;
-
- g_assert (animated_icon[0] != NULL);
-
- activity_client = evolution_activity_client_new (parent_shell, COMPONENT_ID,
- animated_icon,
- "Operation Foo started!",
- TRUE,
- &suggest_display);
- if (activity_client == CORBA_OBJECT_NIL) {
- g_warning ("Cannot create EvolutionActivityClient object");
- return FALSE;
- }
-
- g_object_set_data (G_OBJECT (activity_client), "my_progress", GINT_TO_POINTER (-1));
-
- g_signal_connect (activity_client, "cancel",
- G_CALLBACK (activity_client_cancel_callback), NULL);
- g_signal_connect (activity_client, "show_details",
- G_CALLBACK (activity_client_show_details_callback), NULL);
-
- g_print ("Component becoming busy -- %s\n", COMPONENT_ID);
- if (suggest_display)
- g_print (" --> Could display dialog box.\n");
-
- g_timeout_add (100, timeout_callback_2, activity_client);
-
- if (count < NUM_ACTIVITIES) {
- count ++;
- g_timeout_add ((rand () % 5 + 1) * 500, timeout_callback_1, NULL);
- }
-
- return FALSE;
-}
-
-
-static EvolutionShellComponentResult
-create_view_fn (EvolutionShellComponent *shell_component,
- const char *physical_uri,
- const char *folder_type,
- const char *view_data,
- BonoboControl **control_return,
- void *closure)
-{
- GtkWidget *vbox;
- GtkWidget *label_1, *label_2, *label_3, *label_4;
- GtkWidget *event_box_1, *event_box_2;
-
- label_1 = gtk_label_new ("This is just a test component, displaying the following URI:");
- label_2 = gtk_label_new (physical_uri);
-
- if (*view_data) {
- label_3 = gtk_label_new ("And the following view_data:");
- label_4 = gtk_label_new (view_data);
- } else
- label_3 = label_4 = NULL;
-
- event_box_1 = gtk_event_box_new ();
- event_box_2 = gtk_event_box_new ();
-
- vbox = gtk_vbox_new (FALSE, 5);
-
- gtk_box_pack_start (GTK_BOX (vbox), event_box_1, TRUE, TRUE, 0);
- gtk_box_pack_start (GTK_BOX (vbox), label_1, FALSE, TRUE, 0);
- gtk_box_pack_start (GTK_BOX (vbox), label_2, FALSE, TRUE, 0);
- if (label_3) {
- gtk_box_pack_start (GTK_BOX (vbox), label_3, FALSE, TRUE, 0);
- gtk_box_pack_start (GTK_BOX (vbox), label_4, FALSE, TRUE, 0);
- }
- gtk_box_pack_start (GTK_BOX (vbox), event_box_2, TRUE, TRUE, 0);
-
- gtk_widget_show_all (vbox);
-
- *control_return = bonobo_control_new (vbox);
-
- g_assert (timeout_id == 0);
- timeout_id = g_timeout_add (2000, timeout_callback_1, NULL);
-
- return EVOLUTION_SHELL_COMPONENT_OK;
-}
-
-static gboolean
-request_quit_fn (EvolutionShellComponent *shell_component,
- void *closure)
-{
- GtkWidget *confirm_dialog;
- GtkWidget *label;
- int response;
-
- confirm_dialog = gtk_dialog_new_with_buttons ("Quit?", NULL, GTK_DIALOG_MODAL,
- GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
- GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,
- NULL);
- label = gtk_label_new ("Please confirm that you want to quit now.");
- gtk_container_add (GTK_CONTAINER (GTK_DIALOG (confirm_dialog)->vbox), label);
- gtk_widget_show_all (confirm_dialog);
-
- response = gtk_dialog_run (GTK_DIALOG (confirm_dialog));
- gtk_widget_destroy (confirm_dialog);
-
- if (response == GTK_RESPONSE_ACCEPT)
- return TRUE; /* OK */
- else
- return FALSE; /* Cancel */
-}
-
-
-/* Callbacks. */
-
-static void
-owner_set_callback (EvolutionShellComponent *shell_component,
- EvolutionShellClient *shell_client,
- const char *evolution_homedir)
-{
- g_assert (parent_shell == NULL);
-
- g_print ("We have an owner -- home directory is `%s'\n", evolution_homedir);
-
- parent_shell = shell_client;
-
- if (evolution_shell_client_get_activity_interface (parent_shell) == CORBA_OBJECT_NIL)
- g_warning ("Shell doesn't have a ::Activity interface -- weird!");
-
- spit_out_shortcuts (shell_client);
-
- setup_custom_storage (shell_client);
-}
-
-static int
-owner_unset_idle_callback (void *data)
-{
- gtk_main_quit ();
- return FALSE;
-}
-
-static void
-owner_unset_callback (EvolutionShellComponent *shell_component,
- void *data)
-{
- g_idle_add_full (G_PRIORITY_LOW, owner_unset_idle_callback, NULL, NULL);
-}
-
-static void
-user_create_new_item_callback (EvolutionShellComponent *shell_component,
- const char *id,
- const char *parent_folder_physical_uri,
- const char *parent_folder_type)
-{
- g_print ("\n*** Should create -- %s\n", id);
- g_print ("\n\tType %s, URI %s\n", parent_folder_type, parent_folder_physical_uri);
-
- if (strcmp (id, "FolderSelector") == 0)
- create_new_folder_selector (shell_component);
-}
-
-
-static void
-register_component (void)
-{
- EvolutionShellComponent *shell_component;
- int result;
-
- shell_component = evolution_shell_component_new (folder_types,
- NULL,
- create_view_fn,
- NULL, NULL, NULL, NULL, NULL, NULL,
- request_quit_fn,
- NULL);
-
- g_signal_connect (shell_component, "owner_set",
- G_CALLBACK (owner_set_callback), NULL);
- g_signal_connect (shell_component, "owner_unset",
- G_CALLBACK (owner_unset_callback), NULL);
-
- evolution_shell_component_add_user_creatable_item (shell_component, "Stuff",
- "New Stuff", "New _Stuff",
- "Create some new stuff",
- NULL,
- '\0', NULL);
- evolution_shell_component_add_user_creatable_item (shell_component, "MoreStuff",
- "New More Stuff", "New _More Stuff",
- "Create more stuff",
- NULL,
- 'n', NULL);
- evolution_shell_component_add_user_creatable_item (shell_component, "FolderSelector",
- "Folder Selector", "New Folder _Selector",
- "Show a folder selector",
- NULL,
- 's', NULL);
-
- g_signal_connect (shell_component, "user_create_new_item",
- G_CALLBACK (user_create_new_item_callback), NULL);
-
- result = bonobo_activation_active_server_register (COMPONENT_ID,
- bonobo_object_corba_objref (BONOBO_OBJECT (shell_component)));
-
- if (result != Bonobo_ACTIVATION_REG_SUCCESS)
- g_error ("Cannot register active server into OAF");
-}
-
-
-int
-main (int argc, char **argv)
-{
- bindtextdomain (GETTEXT_PACKAGE, EVOLUTION_LOCALEDIR);
- textdomain (GETTEXT_PACKAGE);
-
- gnome_program_init (PACKAGE, VERSION, LIBGNOMEUI_MODULE, argc, argv,
- GNOME_PROGRAM_STANDARD_PROPERTIES,
- GNOME_PARAM_HUMAN_READABLE_NAME, _("Evolution Test Component"),
- NULL);
-
- register_configuration_control_factory ();
-
- register_component ();
-
- g_print ("Test Component up and running.\n");
-
- bonobo_main ();
-
- return 0;
-}
diff --git a/shell/evolution-wizard.c b/shell/evolution-wizard.c
deleted file mode 100644
index 83b3a57778..0000000000
--- a/shell/evolution-wizard.c
+++ /dev/null
@@ -1,409 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/*
- * evolution-wizard.c
- *
- * Copyright (C) 2000-2003 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdio.h>
-#include <gtk/gtksignal.h>
-#include <gtk/gtkmarshal.h>
-#include <gtk/gtktypeutils.h>
-#include <bonobo/bonobo-exception.h>
-#include <bonobo/bonobo-main.h>
-#include <bonobo/bonobo-event-source.h>
-
-#include "evolution-wizard.h"
-#include "Evolution.h"
-
-#include "e-shell-marshal.h"
-#include "e-shell-corba-icon-utils.h"
-
-struct _EvolutionWizardPrivate {
- BonoboEventSource *event_source;
-
- GPtrArray *pages;
-};
-
-typedef struct {
- char *title;
- GdkPixbuf *icon;
- BonoboControl *control;
-} EvolutionWizardPage;
-
-enum {
- NEXT,
- PREPARE,
- BACK,
- FINISH,
- CANCEL,
- HELP,
- LAST_SIGNAL
-};
-
-#define PARENT_TYPE BONOBO_OBJECT_TYPE
-
-static GtkObjectClass *parent_class;
-static guint32 signals[LAST_SIGNAL] = { 0 };
-
-static GNOME_Evolution_Wizard_PageList *
-impl_GNOME_Evolution_Wizard__get_pages (PortableServer_Servant servant,
- CORBA_Environment *ev)
-{
- BonoboObject *bonobo_object;
- EvolutionWizard *wizard;
- EvolutionWizardPage *page;
- GNOME_Evolution_Wizard_PageList *pages;
- int i;
-
- bonobo_object = bonobo_object_from_servant (servant);
- wizard = EVOLUTION_WIZARD (bonobo_object);
-
- pages = GNOME_Evolution_Wizard_PageList__alloc ();
- pages->_maximum = pages->_length = wizard->priv->pages->len;
- pages->_buffer = GNOME_Evolution_Wizard_PageList_allocbuf (pages->_maximum);
- for (i = 0; i < wizard->priv->pages->len; i++) {
- page = wizard->priv->pages->pdata[i];
-
- pages->_buffer[i].title = CORBA_string_dup (page->title);
- e_store_corba_icon_from_pixbuf (page->icon, &pages->_buffer[i].icon);
- pages->_buffer[i].control = BONOBO_OBJREF (page->control);
- }
-
- return pages;
-}
-
-static void
-impl_GNOME_Evolution_Wizard_notifyAction (PortableServer_Servant servant,
- CORBA_long pagenumber,
- GNOME_Evolution_Wizard_Action action,
- CORBA_Environment *ev)
-{
- BonoboObject *bonobo_object;
- EvolutionWizard *wizard;
- EvolutionWizardPrivate *priv;
-
- bonobo_object = bonobo_object_from_servant (servant);
- wizard = EVOLUTION_WIZARD (bonobo_object);
- priv = wizard->priv;
-
- if (pagenumber < 0
- || pagenumber > priv->pages->len
- || (action != GNOME_Evolution_Wizard_BACK && pagenumber == priv->pages->len)) {
- CORBA_exception_set (ev, CORBA_USER_EXCEPTION,
- ex_GNOME_Evolution_Wizard_NoPage, NULL);
- return;
- }
-
- switch (action) {
- case GNOME_Evolution_Wizard_NEXT:
- g_signal_emit (bonobo_object, signals[NEXT], 0, pagenumber);
- break;
-
- case GNOME_Evolution_Wizard_PREPARE:
- g_signal_emit (bonobo_object, signals[PREPARE], 0, pagenumber);
- break;
-
- case GNOME_Evolution_Wizard_BACK:
- g_signal_emit (bonobo_object, signals[BACK], 0, pagenumber);
- break;
-
- case GNOME_Evolution_Wizard_FINISH:
- g_signal_emit (bonobo_object, signals[FINISH], 0);
- break;
-
- case GNOME_Evolution_Wizard_CANCEL:
- g_signal_emit (bonobo_object, signals[CANCEL], 0);
- break;
-
- case GNOME_Evolution_Wizard_HELP:
- g_signal_emit (bonobo_object, signals[HELP], 0, pagenumber);
- break;
-
- default:
- break;
- }
-}
-
-
-
-static void
-free_page (EvolutionWizardPage *page)
-{
- g_free (page->title);
- g_object_unref (page->icon);
- bonobo_object_unref (page->control);
-
- g_free (page);
-}
-
-static void
-dispose (GObject *object)
-{
- EvolutionWizard *wizard = EVOLUTION_WIZARD (object);
- int i;
-
- if (wizard->priv->event_source) {
- bonobo_object_unref (wizard->priv->event_source);
- wizard->priv->event_source = NULL;
- }
-
- if (wizard->priv->pages) {
- for (i = 0; i < wizard->priv->pages->len; i++)
- free_page (wizard->priv->pages->pdata[i]);
- g_ptr_array_free (wizard->priv->pages, TRUE);
- wizard->priv->pages = NULL;
- }
-
- (* G_OBJECT_CLASS (parent_class)->dispose) (object);
-}
-
-static void
-finalize (GObject *object)
-{
- EvolutionWizard *wizard = EVOLUTION_WIZARD (object);
-
- g_free (wizard->priv);
-
- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
-}
-
-
-static void
-evolution_wizard_class_init (EvolutionWizardClass *klass)
-{
- GObjectClass *object_class;
- POA_GNOME_Evolution_Wizard__epv *epv = &klass->epv;
-
- object_class = G_OBJECT_CLASS (klass);
- object_class->dispose = dispose;
- object_class->finalize = finalize;
-
- signals[NEXT]
- = g_signal_new ("next",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EvolutionWizardClass, next),
- NULL, NULL,
- e_shell_marshal_NONE__INT,
- G_TYPE_NONE, 1,
- G_TYPE_INT);
- signals[PREPARE]
- = g_signal_new ("prepare",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EvolutionWizardClass, prepare),
- NULL, NULL,
- e_shell_marshal_NONE__INT,
- G_TYPE_NONE, 1,
- G_TYPE_INT);
- signals[BACK]
- = g_signal_new ("back",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EvolutionWizardClass, back),
- NULL, NULL,
- e_shell_marshal_NONE__INT,
- G_TYPE_NONE, 1,
- G_TYPE_INT);
- signals[FINISH]
- = g_signal_new ("finish",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EvolutionWizardClass, finish),
- NULL, NULL,
- e_shell_marshal_NONE__NONE,
- G_TYPE_NONE, 0);
- signals[CANCEL]
- = g_signal_new ("cancel",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EvolutionWizardClass, cancel),
- NULL, NULL,
- e_shell_marshal_NONE__NONE,
- G_TYPE_NONE, 0);
- signals[HELP]
- = g_signal_new ("help",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EvolutionWizardClass, help),
- NULL, NULL,
- e_shell_marshal_NONE__INT,
- G_TYPE_NONE, 1,
- G_TYPE_INT);
-
- parent_class = g_type_class_ref(PARENT_TYPE);
-
- epv->_get_pages = impl_GNOME_Evolution_Wizard__get_pages;
- epv->notifyAction = impl_GNOME_Evolution_Wizard_notifyAction;
-}
-
-static void
-evolution_wizard_init (EvolutionWizard *wizard)
-{
- wizard->priv = g_new0 (EvolutionWizardPrivate, 1);
-
- wizard->priv->event_source = bonobo_event_source_new ();
- bonobo_object_add_interface (BONOBO_OBJECT (wizard),
- BONOBO_OBJECT (wizard->priv->event_source));
-
- wizard->priv->pages = g_ptr_array_new ();
-}
-
-BONOBO_TYPE_FUNC_FULL (EvolutionWizard, GNOME_Evolution_Wizard,
- PARENT_TYPE, evolution_wizard);
-
-EvolutionWizard *
-evolution_wizard_new (void)
-{
- return g_object_new (EVOLUTION_TYPE_WIZARD, NULL);
-}
-
-void
-evolution_wizard_add_page (EvolutionWizard *wizard,
- const char *title,
- GdkPixbuf *icon,
- GtkWidget *page)
-{
- EvolutionWizardPage *new;
-
- new = g_new (EvolutionWizardPage, 1);
- new->title = g_strdup (title);
- new->icon = icon;
- g_object_ref (icon);
- new->control = bonobo_control_new (page);
-
- g_ptr_array_add (wizard->priv->pages, new);
-}
-
-
-void
-evolution_wizard_set_buttons_sensitive (EvolutionWizard *wizard,
- gboolean back_sensitive,
- gboolean next_sensitive,
- gboolean cancel_sensitive,
- CORBA_Environment *opt_ev)
-{
- EvolutionWizardPrivate *priv;
- CORBA_Environment ev;
- CORBA_any any;
- CORBA_short s;
-
- g_return_if_fail (EVOLUTION_IS_WIZARD (wizard));
-
- priv = wizard->priv;
-
- if (opt_ev == NULL) {
- CORBA_exception_init (&ev);
- } else {
- ev = *opt_ev;
- }
-
- s = back_sensitive << 2 | next_sensitive << 1 | cancel_sensitive;
- any._type = (CORBA_TypeCode) TC_CORBA_short;
- any._value = &s;
-
- bonobo_event_source_notify_listeners (priv->event_source,
- EVOLUTION_WIZARD_SET_BUTTONS_SENSITIVE,
- &any, &ev);
- if (opt_ev == NULL && BONOBO_EX (&ev)) {
- g_warning ("ERROR(evolution_wizard_set_buttons_sensitive): %s", CORBA_exception_id (&ev));
- }
-
- if (opt_ev == NULL) {
- CORBA_exception_free (&ev);
- }
-}
-
-void
-evolution_wizard_set_show_finish (EvolutionWizard *wizard,
- gboolean show_finish,
- CORBA_Environment *opt_ev)
-{
- EvolutionWizardPrivate *priv;
- CORBA_Environment ev;
- CORBA_any any;
- CORBA_boolean b;
-
- g_return_if_fail (EVOLUTION_IS_WIZARD (wizard));
-
- priv = wizard->priv;
- if (opt_ev == NULL) {
- CORBA_exception_init (&ev);
- } else {
- ev = *opt_ev;
- }
-
- b = show_finish;
- any._type = (CORBA_TypeCode) TC_CORBA_boolean;
- any._value = &b;
-
- bonobo_event_source_notify_listeners (priv->event_source,
- EVOLUTION_WIZARD_SET_SHOW_FINISH,
- &any, &ev);
- if (opt_ev == NULL && BONOBO_EX (&ev)) {
- g_warning ("ERROR(evolution_wizard_set_show_finish): %s", CORBA_exception_id (&ev));
- }
-
- if (opt_ev == NULL) {
- CORBA_exception_free (&ev);
- }
-}
-
-void
-evolution_wizard_set_page (EvolutionWizard *wizard,
- int page_number,
- CORBA_Environment *opt_ev)
-{
- EvolutionWizardPrivate *priv;
- CORBA_Environment ev;
- CORBA_any any;
- CORBA_short s;
-
- g_return_if_fail (EVOLUTION_IS_WIZARD (wizard));
-
- priv = wizard->priv;
-
- g_return_if_fail (page_number >= 0 && page_number < priv->pages->len);
-
- if (opt_ev == NULL) {
- CORBA_exception_init (&ev);
- } else {
- ev = *opt_ev;
- }
-
- s = page_number;
- any._type = (CORBA_TypeCode) TC_CORBA_short;
- any._value = &s;
-
- bonobo_event_source_notify_listeners (priv->event_source,
- EVOLUTION_WIZARD_SET_PAGE,
- &any, &ev);
-
- if (opt_ev == NULL && BONOBO_EX (&ev)) {
- g_warning ("ERROR(evolution_wizard_set_page): %s", CORBA_exception_id (&ev));
- }
-
- if (opt_ev == NULL) {
- CORBA_exception_free (&ev);
- }
-}
-
diff --git a/shell/evolution-wizard.h b/shell/evolution-wizard.h
deleted file mode 100644
index 46e4f0819a..0000000000
--- a/shell/evolution-wizard.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/*
- * evolution-wizard.h
- *
- * Copyright (C) 2000-2003 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#ifndef __EVOLUTION_WIZARD_H__
-#define __EVOLUTION_WIZARD_H__
-
-#include <bonobo/bonobo-object.h>
-#include <bonobo/bonobo-control.h>
-
-#include "Evolution.h"
-
-typedef struct _EvolutionWizard EvolutionWizard;
-typedef struct _EvolutionWizardPrivate EvolutionWizardPrivate;
-
-#define EVOLUTION_WIZARD_SET_PAGE "GNOME::Evolution::Wizard_setPage"
-#define EVOLUTION_WIZARD_SET_SHOW_FINISH "GNOME::Evolution::Wizard_setShowFinish"
-#define EVOLUTION_WIZARD_SET_BUTTONS_SENSITIVE "GNOME::Evolution::Wizard_setButtonsSensitive"
-
-#define EVOLUTION_TYPE_WIZARD (evolution_wizard_get_type ())
-#define EVOLUTION_WIZARD(o) (GTK_CHECK_CAST ((o), EVOLUTION_TYPE_WIZARD, EvolutionWizard))
-#define EVOLUTION_WIZARD_CLASS(k) (GTK_CHECK_CLASS_CAST((k), EVOLUTION_TYPE_WIZARD, EvolutionWizardClass))
-#define EVOLUTION_IS_WIZARD(o) (GTK_CHECK_TYPE ((o), EVOLUTION_TYPE_WIZARD))
-#define EVOLUTION_IS_WIZARD_CLASS(k) (GTK_CHECK_CLASS_TYPE ((k), EVOLUTION_TYPE_WIZARD))
-
-struct _EvolutionWizard {
- BonoboObject object;
-
- EvolutionWizardPrivate *priv;
-};
-
-typedef struct {
- BonoboObjectClass parent_class;
-
- POA_GNOME_Evolution_Wizard__epv epv;
-
- void (* next) (EvolutionWizard *wizard, int page_number);
- void (* prepare) (EvolutionWizard *wizard, int page_number);
- void (* back) (EvolutionWizard *wizard, int page_number);
- void (* finish) (EvolutionWizard *wizard);
- void (* cancel) (EvolutionWizard *wizard);
- void (* help) (EvolutionWizard *wizard, int page_number);
-} EvolutionWizardClass;
-
-GtkType evolution_wizard_get_type (void);
-
-EvolutionWizard *evolution_wizard_new (void);
-
-void evolution_wizard_add_page (EvolutionWizard *wizard,
- const char *title,
- GdkPixbuf *icon,
- GtkWidget *page);
-
-void evolution_wizard_set_buttons_sensitive (EvolutionWizard *wizard,
- gboolean back_sensitive,
- gboolean next_sensitive,
- gboolean cancel_sensitive,
- CORBA_Environment *opt_ev);
-void evolution_wizard_set_show_finish (EvolutionWizard *wizard,
- gboolean show_finish,
- CORBA_Environment *opt_ev);
-void evolution_wizard_set_page (EvolutionWizard *wizard,
- int page_number,
- CORBA_Environment *opt_ev);
-
-#endif /* __EVOLUTION_WIZARD_H__ */
diff --git a/shell/glade/.cvsignore b/shell/glade/.cvsignore
deleted file mode 100644
index 3045c518dc..0000000000
--- a/shell/glade/.cvsignore
+++ /dev/null
@@ -1,4 +0,0 @@
-.deps
-.libs
-Makefile.in
-Makefile
diff --git a/shell/glade/Makefile.am b/shell/glade/Makefile.am
deleted file mode 100644
index 7e90c140e2..0000000000
--- a/shell/glade/Makefile.am
+++ /dev/null
@@ -1,9 +0,0 @@
-glade_DATA = \
- e-active-connection-dialog.glade \
- e-shell-config-default-folders.glade \
- e-shell-folder-creation-dialog.glade \
- e-shell-shared-folder-picker-dialog.glade \
- evolution-startup-wizard.glade \
- e-folder-list.glade
-
-EXTRA_DIST = $(glade_DATA)
diff --git a/shell/glade/e-active-connection-dialog.glade b/shell/glade/e-active-connection-dialog.glade
deleted file mode 100644
index 8e904da0b3..0000000000
--- a/shell/glade/e-active-connection-dialog.glade
+++ /dev/null
@@ -1,144 +0,0 @@
-<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
-<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
-
-<glade-interface>
-
-<widget class="GtkDialog" id="active_connection_dialog">
- <property name="border_width">6</property>
- <property name="visible">True</property>
- <property name="title" translatable="yes">Active Connections</property>
- <property name="type">GTK_WINDOW_TOPLEVEL</property>
- <property name="window_position">GTK_WIN_POS_NONE</property>
- <property name="modal">False</property>
- <property name="resizable">True</property>
- <property name="destroy_with_parent">False</property>
- <property name="has_separator">True</property>
-
- <child internal-child="vbox">
- <widget class="GtkVBox" id="dialog-vbox2">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child internal-child="action_area">
- <widget class="GtkHButtonBox" id="dialog-action_area2">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_END</property>
-
- <child>
- <widget class="GtkButton" id="cancelbutton1">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-cancel</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="response_id">-6</property>
- </widget>
- </child>
-
- <child>
- <widget class="GtkButton" id="okbutton1">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-ok</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="response_id">-5</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="pack_type">GTK_PACK_END</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="vbox1">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkLabel" id="label1">
- <property name="visible">True</property>
- <property name="label" translatable="yes">The following connections are currently active:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="padding">10</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkScrolledWindow" id="scrolledwindow1">
- <property name="visible">True</property>
- <property name="hscrollbar_policy">GTK_POLICY_NEVER</property>
- <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
- <property name="shadow_type">GTK_SHADOW_IN</property>
- <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
-
- <child>
- <widget class="GtkTreeView" id="active_connection_treeview">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="headers_visible">True</property>
- <property name="rules_hint">False</property>
- <property name="reorderable">False</property>
- <property name="enable_search">True</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="instruction_label">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Click OK to close these connections and go offline</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="padding">10</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- </child>
-</widget>
-
-</glade-interface>
diff --git a/shell/glade/e-folder-list.glade b/shell/glade/e-folder-list.glade
deleted file mode 100644
index d644f34a35..0000000000
--- a/shell/glade/e-folder-list.glade
+++ /dev/null
@@ -1,110 +0,0 @@
-<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
-<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
-
-<glade-interface>
-
-<widget class="GtkWindow" id="window-contents-reparented">
- <property name="title" translatable="yes">window1</property>
- <property name="type">GTK_WINDOW_TOPLEVEL</property>
- <property name="window_position">GTK_WIN_POS_NONE</property>
- <property name="modal">False</property>
- <property name="resizable">True</property>
- <property name="destroy_with_parent">False</property>
-
- <child>
- <widget class="GtkFrame" id="frame-toplevel">
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="label_yalign">0.5</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
-
- <child>
- <widget class="GtkVBox" id="vbox1">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="Custom" id="custom-optionmenu">
- <property name="visible">True</property>
- <property name="creation_function">create_custom_optionmenu</property>
- <property name="int1">0</property>
- <property name="int2">0</property>
- <property name="last_modification_time">Fri, 22 Mar 2002 15:09:48 GMT</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkHBox" id="hbox1">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="Custom" id="custom-folder-list">
- <property name="visible">True</property>
- <property name="creation_function">create_custom_folder_list</property>
- <property name="int1">0</property>
- <property name="int2">0</property>
- <property name="last_modification_time">Tue, 19 Mar 2002 18:07:28 GMT</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVButtonBox" id="vbuttonbox1">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_START</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkButton" id="button-add">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-add</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- </widget>
- </child>
-
- <child>
- <widget class="GtkButton" id="button-remove">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-remove</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- </child>
- </widget>
- </child>
-</widget>
-
-</glade-interface>
diff --git a/shell/glade/e-shell-config-default-folders.glade b/shell/glade/e-shell-config-default-folders.glade
deleted file mode 100644
index 2cf2734304..0000000000
--- a/shell/glade/e-shell-config-default-folders.glade
+++ /dev/null
@@ -1,194 +0,0 @@
-<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
-<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
-
-<glade-interface>
-
-<widget class="GtkWindow" id="default folders">
- <property name="title" translatable="yes">window1</property>
- <property name="type">GTK_WINDOW_TOPLEVEL</property>
- <property name="window_position">GTK_WIN_POS_NONE</property>
- <property name="modal">False</property>
- <property name="resizable">True</property>
- <property name="destroy_with_parent">False</property>
-
- <child>
- <widget class="GtkTable" id="default_folders_table">
- <property name="border_width">12</property>
- <property name="visible">True</property>
- <property name="n_rows">4</property>
- <property name="n_columns">2</property>
- <property name="homogeneous">False</property>
- <property name="row_spacing">6</property>
- <property name="column_spacing">6</property>
-
- <child>
- <widget class="GtkLabel" id="label1">
- <property name="visible">True</property>
- <property name="label" translatable="yes">_Mail:</property>
- <property name="use_underline">True</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label4">
- <property name="visible">True</property>
- <property name="label" translatable="yes">_Tasks:</property>
- <property name="use_underline">True</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">3</property>
- <property name="bottom_attach">4</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label3">
- <property name="visible">True</property>
- <property name="label" translatable="yes">_Contacts:</property>
- <property name="use_underline">True</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label2">
- <property name="visible">True</property>
- <property name="label" translatable="yes">C_alendar:</property>
- <property name="use_underline">True</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="Custom" id="default_mail_button">
- <property name="visible">True</property>
- <property name="creation_function">e_shell_config_default_folder_selector_button_new</property>
- <property name="int1">0</property>
- <property name="int2">0</property>
- <property name="last_modification_time">Wed, 10 Apr 2002 17:54:56 GMT</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- <property name="y_options">fill</property>
- </packing>
- </child>
-
- <child>
- <widget class="Custom" id="default_contacts_button">
- <property name="visible">True</property>
- <property name="creation_function">e_shell_config_default_folder_selector_button_new</property>
- <property name="int1">0</property>
- <property name="int2">0</property>
- <property name="last_modification_time">Wed, 10 Apr 2002 17:55:01 GMT</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options">fill</property>
- <property name="y_options">fill</property>
- </packing>
- </child>
-
- <child>
- <widget class="Custom" id="default_calendar_button">
- <property name="visible">True</property>
- <property name="creation_function">e_shell_config_default_folder_selector_button_new</property>
- <property name="int1">0</property>
- <property name="int2">0</property>
- <property name="last_modification_time">Wed, 10 Apr 2002 17:55:06 GMT</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
- <property name="x_options">fill</property>
- <property name="y_options">fill</property>
- </packing>
- </child>
-
- <child>
- <widget class="Custom" id="default_tasks_button">
- <property name="visible">True</property>
- <property name="creation_function">e_shell_config_default_folder_selector_button_new</property>
- <property name="int1">0</property>
- <property name="int2">0</property>
- <property name="last_modification_time">Wed, 10 Apr 2002 17:55:12 GMT</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">3</property>
- <property name="bottom_attach">4</property>
- <property name="x_options">fill</property>
- <property name="y_options">fill</property>
- </packing>
- </child>
- </widget>
- </child>
-</widget>
-
-</glade-interface>
diff --git a/shell/glade/e-shell-folder-creation-dialog.glade b/shell/glade/e-shell-folder-creation-dialog.glade
deleted file mode 100644
index 9fc32dc5ee..0000000000
--- a/shell/glade/e-shell-folder-creation-dialog.glade
+++ /dev/null
@@ -1,180 +0,0 @@
-<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
-<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
-
-<glade-interface>
-
-<widget class="GtkDialog" id="create_folder_dialog">
- <property name="border_width">6</property>
- <property name="visible">True</property>
- <property name="title" translatable="yes"></property>
- <property name="type">GTK_WINDOW_TOPLEVEL</property>
- <property name="window_position">GTK_WIN_POS_NONE</property>
- <property name="modal">False</property>
- <property name="default_width">350</property>
- <property name="default_height">410</property>
- <property name="resizable">True</property>
- <property name="destroy_with_parent">False</property>
- <property name="has_separator">True</property>
-
- <child internal-child="vbox">
- <widget class="GtkVBox" id="dialog-vbox1">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">12</property>
-
- <child internal-child="action_area">
- <widget class="GtkHButtonBox" id="dialog-action_area1">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_END</property>
-
- <child>
- <widget class="GtkButton" id="cancel_button">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-cancel</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="response_id">-6</property>
- </widget>
- </child>
-
- <child>
- <widget class="GtkButton" id="ok_button">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-ok</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="response_id">-5</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="pack_type">GTK_PACK_END</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="main_vbox">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkLabel" id="folder_name_label">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Folder _name:</property>
- <property name="use_underline">True</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">7.45058e-09</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkEntry" id="folder_name_entry">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="has_focus">True</property>
- <property name="editable">True</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char" translatable="yes">*</property>
- <property name="activates_default">False</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="folder_type_label">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Folder _type:</property>
- <property name="use_underline">True</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">7.45058e-09</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkOptionMenu" id="folder_type_option_menu">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="history">-1</property>
-
- <child internal-child="menu">
- <widget class="GtkMenu" id="convertwidget1">
- <property name="visible">True</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="creation_position_label">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Specify where to create the folder:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">7.45058e-09</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- </child>
-</widget>
-
-</glade-interface>
diff --git a/shell/glade/e-shell-shared-folder-picker-dialog.glade b/shell/glade/e-shell-shared-folder-picker-dialog.glade
deleted file mode 100644
index 181e454fb5..0000000000
--- a/shell/glade/e-shell-shared-folder-picker-dialog.glade
+++ /dev/null
@@ -1,252 +0,0 @@
-<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
-<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd" >
-
-<glade-interface>
- <widget class="GtkDialog" id="dialog">
- <property name="title" translatable="yes">Open Other User's Folder</property>
- <property name="type">GTK_WINDOW_TOPLEVEL</property>
- <property name="modal">no</property>
- <property name="allow_shrink">no</property>
- <property name="allow_grow">no</property>
- <property name="width-request">350</property>
- <property name="visible">yes</property>
- <property name="window-position">GTK_WIN_POS_NONE</property>
-
- <child internal-child="vbox">
- <widget class="GtkVBox" id="dialog-vbox1">
- <property name="homogeneous">no</property>
- <property name="spacing">8</property>
- <property name="visible">yes</property>
-
- <child internal-child="action_area">
- <widget class="GtkHButtonBox" id="dialog-action_area1">
- <property name="layout_style">GTK_BUTTONBOX_END</property>
- <property name="spacing">8</property>
- <property name="visible">yes</property>
-
- <child>
- <widget class="GtkButton" id="button3">
- <property name="can_default">yes</property>
- <property name="can_focus">yes</property>
- <property name="visible">yes</property>
- <property name="label">gtk-cancel</property>
- <property name="use_stock">yes</property>
- <property name="use_underline">yes</property>
- <property name="response_id">-6</property>
- </widget>
- </child>
-
- <child>
- <widget class="GtkButton" id="button1">
- <property name="can_default">yes</property>
- <property name="has_default">yes</property>
- <property name="can_focus">yes</property>
- <property name="visible">yes</property>
- <property name="label">gtk-ok</property>
- <property name="use_stock">yes</property>
- <property name="use_underline">yes</property>
- <property name="response_id">-5</property>
- </widget>
- </child>
-
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">no</property>
- <property name="fill">yes</property>
- <property name="pack_type">GTK_PACK_END</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkTable" id="table1">
- <property name="homogeneous">no</property>
- <property name="row_spacing">3</property>
- <property name="column_spacing">3</property>
- <property name="n-rows">3</property>
- <property name="n-columns">2</property>
- <property name="visible">yes</property>
-
- <child>
- <widget class="GtkLabel" id="label1">
- <property name="label" translatable="yes">_Account:</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">no</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="mnemonic_widget">server-option-menu</property>
- <property name="visible">yes</property>
- <property name="use_underline">yes</property>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- <property name="x_padding">0</property>
- <property name="y_padding">0</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label3">
- <property name="label" translatable="yes">_Folder Name:</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">no</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="mnemonic_widget">folder-name-entry</property>
- <property name="visible">yes</property>
- <property name="use_underline">yes</property>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
- <property name="x_padding">0</property>
- <property name="y_padding">0</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkOptionMenu" id="server-option-menu">
- <property name="can_focus">yes</property>
- <property name="history">0</property>
- <property name="visible">yes</property>
-
- <child internal-child="menu">
- <widget class="GtkMenu" id="convertwidget1">
- <property name="visible">yes</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- <property name="x_padding">0</property>
- <property name="y_padding">0</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkCombo" id="folder-name-combo">
- <property name="value_in_list">no</property>
- <property name="case_sensitive">no</property>
- <property name="enable_arrow_keys">yes</property>
- <property name="enable_arrows_always">no</property>
- <property name="allow_empty">yes</property>
- <property name="visible">yes</property>
-
- <child internal-child="entry">
- <widget class="GtkEntry" id="folder-name-entry">
- <property name="can_focus">yes</property>
- <property name="editable">yes</property>
- <property name="text" translatable="yes"></property>
- <property name="max-length">0</property>
- <property name="visibility">yes</property>
- <property name="visible">yes</property>
- </widget>
- </child>
-
- <child internal-child="list">
- <widget class="GtkList" id="convertwidget2">
- <property name="visible">yes</property>
-
- <child>
- <widget class="GtkListItem" id="convertwidget3">
- <property name="visible">yes</property>
-
- <child>
- <widget class="GtkLabel" id="convertwidget4">
- <property name="label" translatable="yes"></property>
- <property name="xalign">0.0</property>
- <property name="visible">yes</property>
- </widget>
- </child>
- </widget>
- </child>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
- <property name="x_padding">0</property>
- <property name="y_padding">0</property>
- <property name="x_options">expand|fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkHBox" id="user-picker-placeholder">
- <property name="homogeneous">no</property>
- <property name="spacing">0</property>
- <property name="visible">yes</property>
-
- <child>
- <placeholder />
- </child>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_padding">0</property>
- <property name="y_padding">0</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkButton" id="button-user">
- <property name="can_focus">yes</property>
- <property name="label" translatable="yes">_User:</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="visible">yes</property>
- <property name="use_underline">yes</property>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_padding">0</property>
- <property name="y_padding">0</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">2</property>
- <property name="expand">yes</property>
- <property name="fill">yes</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">4</property>
- <property name="expand">yes</property>
- <property name="fill">yes</property>
- </packing>
- </child>
- </widget>
-</glade-interface>
diff --git a/shell/glade/evolution-startup-wizard.glade b/shell/glade/evolution-startup-wizard.glade
deleted file mode 100644
index 7314c5ce33..0000000000
--- a/shell/glade/evolution-startup-wizard.glade
+++ /dev/null
@@ -1,92 +0,0 @@
-<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
-<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
-
-<glade-interface>
-<requires lib="gnome"/>
-
-<widget class="GtkWindow" id="startup-wizard">
- <property name="border_width">6</property>
- <property name="title" translatable="yes">Evolution Setup Assistant</property>
- <property name="type">GTK_WINDOW_TOPLEVEL</property>
- <property name="window_position">GTK_WIN_POS_NONE</property>
- <property name="modal">False</property>
- <property name="resizable">True</property>
- <property name="destroy_with_parent">False</property>
-
- <child>
- <widget class="GnomeDruid" id="startup-druid">
- <property name="border_width">6</property>
- <property name="visible">True</property>
- <property name="show_help">False</property>
-
- <child>
- <widget class="GnomeDruidPageEdge" id="start-page">
- <property name="visible">True</property>
- <property name="position">GNOME_EDGE_START</property>
- <property name="title" translatable="yes">Welcome</property>
- <property name="text" translatable="yes">Welcome to Evolution. The next few screens will allow
-Evolution to connect to your email accounts, and to import
-files from other applications.
-
-Please click the &quot;Forward&quot; button to continue. </property>
- </widget>
- </child>
-
- <child>
- <widget class="GnomeDruidPageStandard" id="timezone-page">
- <property name="visible">True</property>
- <property name="title" translatable="yes">Timezone </property>
- <property name="logo">timezone-48.png</property>
-
- <child internal-child="vbox">
- <widget class="GtkVBox" id="druid-vbox6">
- <property name="border_width">16</property>
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <placeholder/>
- </child>
- </widget>
- </child>
- </widget>
- </child>
-
- <child>
- <widget class="GnomeDruidPageStandard" id="import-page">
- <property name="visible">True</property>
- <property name="title" translatable="yes">Importing Files</property>
- <property name="logo">import.png</property>
-
- <child internal-child="vbox">
- <widget class="GtkVBox" id="druid-vbox7">
- <property name="border_width">16</property>
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <placeholder/>
- </child>
- </widget>
- </child>
- </widget>
- </child>
-
- <child>
- <widget class="GnomeDruidPageEdge" id="done-page">
- <property name="visible">True</property>
- <property name="position">GNOME_EDGE_FINISH</property>
- <property name="title" translatable="yes">Done</property>
- <property name="text" translatable="yes">You have successfully entered all of the information
-needed to set up Evolution.
-
-Click the &quot;Apply&quot; button to save your settings. </property>
- </widget>
- </child>
- </widget>
- </child>
-</widget>
-
-</glade-interface>
diff --git a/shell/importer/.cvsignore b/shell/importer/.cvsignore
deleted file mode 100644
index a1e30a4161..0000000000
--- a/shell/importer/.cvsignore
+++ /dev/null
@@ -1,10 +0,0 @@
-.deps
-.libs
-Makefile.in
-Makefile
-GNOME_Evolution_Importer-stubs.c
-GNOME_Evolution_Importer-skels.c
-GNOME_Evolution_Importer-common.c
-GNOME_Evolution_Importer.h
-*.lo
-*.la
diff --git a/shell/importer/GNOME_Evolution_Importer.idl b/shell/importer/GNOME_Evolution_Importer.idl
deleted file mode 100644
index 775ba47377..0000000000
--- a/shell/importer/GNOME_Evolution_Importer.idl
+++ /dev/null
@@ -1,97 +0,0 @@
-/* -*- Mode: IDL; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Interfaces for the importer framework.
- *
- * Authors:
- * Iain Holmes <iain@ximian.com>
- *
- * Copyright (C) 2000 Ximian, Inc.
- */
-
-#include <Bonobo.idl>
-
-module GNOME {
-module Evolution {
- interface ImporterListener : Bonobo::Unknown {
- enum ImporterResult {
- OK,
- UNSUPPORTED_OPERATION,
- NOT_READY,
- BUSY,
- UNKNOWN_DATA,
- BAD_DATA,
- BAD_FILE
- };
-
- /**
- * notifyResult:
- * @result: The result of the import.
- * @more_items: Are there any more items to be processed?
- *
- * Notifies the listener of the result and whether there are
- * any more items to be imported.
- */
- oneway void notifyResult (in ImporterResult result,
- in boolean more_items);
- };
-
- interface Importer : Bonobo::Unknown {
-
- /**
- * processItem:
- * @listener: The ImporterListener that will be notified of the
- * progress.
- *
- * Processes the next item.
- *
- */
- oneway void processItem (in ImporterListener listener);
-
- /**
- * getError:
- *
- * Retrieve a detailed explaination of the error.
- *
- * Returns: A string.
- */
- string getError ();
-
- /**
- * supportFormat:
- * @filename: The filename of the file.
- *
- * Checks if the importer created by this factory can
- * import the file specified.
- *
- * Returns: A boolean, TRUE if it can import the file,
- * FALSE otherwise.
- */
- boolean supportFormat (in string filename);
-
- /**
- * loadFile:
- * @filename: The filename of the file.
- * @folderpath: The full pathname to the folder.
- * @foldertpe: The type of the folder to import to.
- *
- * Loads the file and prepares an Importer object that can
- * process files of this type.
- *
- * Returns: An Importer object.
- */
- boolean loadFile (in string filename,
- in string folderpath,
- in string foldertype);
- };
-
- interface IntelligentImporter : Bonobo::Unknown {
-
- readonly attribute string importername;
- readonly attribute string message;
-
- boolean canImport ();
-
- void importData ();
- };
-};
-};
diff --git a/shell/importer/Makefile.am b/shell/importer/Makefile.am
deleted file mode 100644
index 094df408d1..0000000000
--- a/shell/importer/Makefile.am
+++ /dev/null
@@ -1,66 +0,0 @@
-INCLUDES = \
- -I$(top_srcdir) \
- -I$(top_srcdir)/shell \
- -I$(top_builddir)/shell \
- -DG_LOG_DOMAIN=\"Evolution-Importer\" \
- -DEVOLUTION_GLADEDIR="\"$(gladedir)\"" \
- $(SHELL_CFLAGS)
-
-privlib_LTLIBRARIES = libevolution-importer.la
-
-
-# IDL stuff
-
-IDLS = GNOME_Evolution_Importer.idl
-
-IDL_GENERATED_H = \
- GNOME_Evolution_Importer.h
-
-IDL_GENERATED_C = \
- GNOME_Evolution_Importer-common.c \
- GNOME_Evolution_Importer-skels.c \
- GNOME_Evolution_Importer-stubs.c
-
-IDL_GENERATED = $(IDL_GENERATED_H) $(IDL_GENERATED_C)
-
-$(IDL_GENERATED_H): $(IDLS)
- $(ORBIT_IDL) -I $(srcdir) $(IDL_INCLUDES) $(srcdir)/GNOME_Evolution_Importer.idl
-
-$(IDL_GENERATED_C): $(IDL_GENERATED_H)
-
-idl_DATA = $(IDLS)
-
-
-# Component
-
-libevolution_importerincludedir = $(privincludedir)/importer
-libevolution_importer_la_SOURCES = \
- $(IDL_GENERATED) \
- evolution-intelligent-importer.c \
- evolution-importer-client.c \
- evolution-importer-listener.c \
- evolution-importer.c \
- intelligent.c \
- intelligent.h
-
-libevolution_importerinclude_HEADERS = \
- GNOME_Evolution_Importer.h \
- evolution-intelligent-importer.h \
- evolution-importer-client.h \
- evolution-importer-listener.h \
- evolution-importer.h
-
-libevolution_importer_la_LIBADD = \
- $(top_builddir)/e-util/libeutil.la \
- $(SHELL_LIBS)
-
-glade_DATA = import.glade
-
-EXTRA_DIST = $(glade_DATA) $(IDLS)
-
-BUILT_SOURCES= $(IDL_GENERATED)
-CLEANFILES = $(BUILT_SOURCES)
-
-dist-hook:
- cd $(distdir); rm -f $(BUILT_SOURCES)
-
diff --git a/shell/importer/evolution-importer-client.c b/shell/importer/evolution-importer-client.c
deleted file mode 100644
index 1f6807b3c8..0000000000
--- a/shell/importer/evolution-importer-client.c
+++ /dev/null
@@ -1,251 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* evolution-importer-client.c
- *
- * Copyright (C) 2000 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Iain Holmes <iain@ximian.com>
- * Based on evolution-shell-component-client.c by Ettore Perazzoli
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "evolution-importer-client.h"
-
-#include <glib.h>
-#include <bonobo/bonobo-object.h>
-#include <bonobo/bonobo-main.h>
-#include <gal/util/e-util.h>
-
-#include "GNOME_Evolution_Importer.h"
-
-#define PARENT_TYPE G_TYPE_OBJECT
-static GObjectClass *parent_class = NULL;
-
-
-static void
-finalise (GObject *object)
-{
- /* FIXME: should this unref the client->objref?? */
-
- parent_class->finalize(object);
-}
-
-static void
-class_init (EvolutionImporterClientClass *klass)
-{
- GObjectClass *object_class;
-
- object_class = G_OBJECT_CLASS (klass);
- parent_class = g_type_class_ref(PARENT_TYPE);
-
- object_class->finalize = finalise;
-}
-
-static void
-init (EvolutionImporterClient *client)
-{
-}
-
-/**
- * evolution_importer_client_new:
- * @objref: The CORBA_Object to make a client for.
- *
- * Makes a client for @objref. @objref should be an Evolution_Importer.
- *
- * Returns: A newly created EvolutionImporterClient.
- */
-EvolutionImporterClient *
-evolution_importer_client_new (const CORBA_Object objref)
-{
- EvolutionImporterClient *client;
-
- g_return_val_if_fail (objref != CORBA_OBJECT_NIL, NULL);
-
- client = g_object_new (evolution_importer_client_get_type (), NULL);
- client->objref = objref;
-
- return client;
-}
-
-/**
- * evolution_importer_client_new_from_id:
- * @id: The oafiid of the component to make a client for.
- *
- * Makes a client for the object returned by activating @id.
- *
- * Returns: A newly created EvolutionImporterClient.
- */
-EvolutionImporterClient *
-evolution_importer_client_new_from_id (const char *id)
-{
- CORBA_Environment ev;
- CORBA_Object objref;
-
- g_return_val_if_fail (id != NULL, NULL);
-
- CORBA_exception_init (&ev);
- objref = bonobo_activation_activate_from_id ((char *) id, 0, NULL, &ev);
- if (ev._major != CORBA_NO_EXCEPTION) {
- CORBA_exception_free (&ev);
- g_warning ("Could not start %s.", id);
- return NULL;
- }
-
- CORBA_exception_free (&ev);
- if (objref == CORBA_OBJECT_NIL) {
- g_warning ("Could not activate component %s", id);
- return NULL;
- }
-
- return evolution_importer_client_new (objref);
-}
-
-/* API */
-/**
- * evolution_importer_client_support_format:
- * @client: The EvolutionImporterClient.
- * @filename: Name of the file to check.
- *
- * Checks whether @client is able to import @filename.
- *
- * Returns: TRUE if @client can import @filename, FALSE otherwise.
- */
-gboolean
-evolution_importer_client_support_format (EvolutionImporterClient *client,
- const char *filename)
-{
- GNOME_Evolution_Importer corba_importer;
- gboolean result;
- CORBA_Environment ev;
-
- g_return_val_if_fail (client != NULL, FALSE);
- g_return_val_if_fail (EVOLUTION_IS_IMPORTER_CLIENT (client), FALSE);
- g_return_val_if_fail (filename != NULL, FALSE);
-
- CORBA_exception_init (&ev);
- corba_importer = client->objref;
- result = GNOME_Evolution_Importer_supportFormat (corba_importer,
- filename, &ev);
- CORBA_exception_free (&ev);
-
- return result;
-}
-
-/**
- * evolution_importer_client_load_file:
- * @client: The EvolutionImporterClient.
- * @filename: The file to load.
- * @physical_uri: The physical URI of the folder to import data into.
- * @folder_type: The type of the folder represented by @physical_uri.
- *
- * Loads and initialises the importer.
- *
- * Returns: TRUE on sucess, FALSE on failure.
- */
-gboolean
-evolution_importer_client_load_file (EvolutionImporterClient *client,
- const char *filename,
- const char *physical_uri,
- const char *folder_type)
-{
- GNOME_Evolution_Importer corba_importer;
- gboolean result;
- CORBA_Environment ev;
-
- g_return_val_if_fail (client != NULL, FALSE);
- g_return_val_if_fail (EVOLUTION_IS_IMPORTER_CLIENT (client), FALSE);
- g_return_val_if_fail (filename != NULL, FALSE);
-
- CORBA_exception_init (&ev);
- corba_importer = client->objref;
- result = GNOME_Evolution_Importer_loadFile (corba_importer,
- filename,
- physical_uri ? physical_uri : "",
- folder_type ? folder_type : "",
- &ev);
- if (ev._major != CORBA_NO_EXCEPTION) {
- g_warning ("Oh there *WAS* an exception.\nIt was %s",
- CORBA_exception_id (&ev));
- CORBA_exception_free (&ev);
- return FALSE;
- }
- CORBA_exception_free (&ev);
-
- return result;
-}
-
-/**
- * evolution_importer_client_process_item:
- * @client: The EvolutionImporterClient.
- * @listener: The EvolutionImporterListener.
- *
- * Starts importing the next item in the file. @listener will be notified
- * when the item has finished.
- */
-void
-evolution_importer_client_process_item (EvolutionImporterClient *client,
- EvolutionImporterListener *listener)
-{
- GNOME_Evolution_Importer corba_importer;
- GNOME_Evolution_ImporterListener corba_listener;
- CORBA_Environment ev;
-
- g_return_if_fail (client != NULL);
- g_return_if_fail (EVOLUTION_IS_IMPORTER_CLIENT (client));
- g_return_if_fail (listener != NULL);
- g_return_if_fail (EVOLUTION_IS_IMPORTER_LISTENER (listener));
-
- CORBA_exception_init (&ev);
-
- corba_importer = client->objref;
- corba_listener = bonobo_object_corba_objref (BONOBO_OBJECT (listener));
- GNOME_Evolution_Importer_processItem (corba_importer,
- corba_listener, &ev);
- CORBA_exception_free (&ev);
-}
-
-/**
- * evolution_importer_client_get_error:
- * @client: The EvolutionImporterClient.
- *
- * Gets the error as a string.
- *
- * Returns: The error as a string. If there is no error NULL is returned.
- * Importers need not support this method and if so, NULL is also returned.
- */
-const char *
-evolution_importer_client_get_error (EvolutionImporterClient *client)
-{
- GNOME_Evolution_Importer corba_importer;
- CORBA_char *str;
- CORBA_Environment ev;
-
- g_return_val_if_fail (client != NULL, NULL);
- g_return_val_if_fail (EVOLUTION_IS_IMPORTER_CLIENT (client), NULL);
-
- corba_importer = client->objref;
-
- CORBA_exception_init (&ev);
- str = GNOME_Evolution_Importer_getError (corba_importer, &ev);
-
- return str;
-}
-
-E_MAKE_TYPE (evolution_importer_client, "EvolutionImporterClient",
- EvolutionImporterClient, class_init, init, PARENT_TYPE)
diff --git a/shell/importer/evolution-importer-client.h b/shell/importer/evolution-importer-client.h
deleted file mode 100644
index 46b38e851a..0000000000
--- a/shell/importer/evolution-importer-client.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* evolution-importer-client.h
- *
- * Copyright (C) 2000 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Iain Holmes <iain@ximian.com>
- */
-
-#ifndef EVOLUTION_IMPORTER_CLIENT_H
-#define EVOLUTION_IMPORTER_CLIENT_H
-
-#include <glib.h>
-#include <importer/evolution-importer.h>
-#include <importer/evolution-importer-listener.h>
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif
-
-#define EVOLUTION_TYPE_IMPORTER_CLIENT (evolution_importer_client_get_type ())
-#define EVOLUTION_IMPORTER_CLIENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EVOLUTION_TYPE_IMPORTER_CLIENT, EvolutionImporterClient))
-#define EVOLUTION_IMPORTER_CLIENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EVOLUTION_TYPE_IMPORTER_CLIENT, EvolutionImporterClientClass))
-#define EVOLUTION_IS_IMPORTER_CLIENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EVOLUTION_TYPE_IMPORTER_CLIENT))
-#define EVOLUTION_IS_IMPORTER_CLIENT_CLASS(klass) (G_TYPE_CHECK_INSTANCE_TYPE ((klass), EVOLUTION_TYPE_IMPORTER_CLIENT))
-
-
-typedef struct _EvolutionImporterClient EvolutionImporterClient;
-typedef struct _EvolutionImporterClientClass EvolutionImporterClientClass;
-
-struct _EvolutionImporterClient {
- GObject parent_type;
-
- GNOME_Evolution_Importer objref;
-};
-
-struct _EvolutionImporterClientClass {
- GObjectClass parent_class;
-};
-
-GType evolution_importer_client_get_type (void);
-
-EvolutionImporterClient *evolution_importer_client_new (const CORBA_Object objref);
-EvolutionImporterClient *evolution_importer_client_new_from_id (const char *id);
-
-gboolean evolution_importer_client_support_format (EvolutionImporterClient *client,
- const char *filename);
-gboolean evolution_importer_client_load_file (EvolutionImporterClient *client,
- const char *filename,
- const char *physical_uri,
- const char *folder_type);
-void evolution_importer_client_process_item (EvolutionImporterClient *client,
- EvolutionImporterListener *listener);
-const char *evolution_importer_client_get_error (EvolutionImporterClient *client);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/shell/importer/evolution-importer-listener.c b/shell/importer/evolution-importer-listener.c
deleted file mode 100644
index 5f99384dce..0000000000
--- a/shell/importer/evolution-importer-listener.c
+++ /dev/null
@@ -1,224 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* evolution-importer-client.c
- *
- * Copyright (C) 2000 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Iain Holmes <iain@ximian.com>
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "evolution-importer-listener.h"
-
-#include <bonobo/bonobo-object.h>
-#include <gal/util/e-util.h>
-
-#include "GNOME_Evolution_Importer.h"
-#define PARENT_TYPE BONOBO_OBJECT_TYPE
-
-static BonoboObjectClass *parent_class = NULL;
-
-struct _EvolutionImporterListenerPrivate {
- EvolutionImporterListenerCallback callback;
-
- void *closure;
-};
-
-#if 0
-static POA_GNOME_Evolution_ImporterListener__vepv Listener_vepv;
-
-static POA_GNOME_Evolution_ImporterListener *
-create_servant (void)
-{
- POA_GNOME_Evolution_ImporterListener *servant;
- CORBA_Environment ev;
-
- servant = (POA_GNOME_Evolution_ImporterListener *) g_new0 (BonoboObjectServant, 1);
- servant->vepv = &Listener_vepv;
-
- CORBA_exception_init (&ev);
- POA_GNOME_Evolution_ImporterListener__init ((PortableServer_Servant) servant, &ev);
- if (ev._major != CORBA_NO_EXCEPTION) {
- g_free (servant);
- CORBA_exception_free (&ev);
- return NULL;
- }
-
- CORBA_exception_free (&ev);
-
- return servant;
-}
-#endif
-
-static EvolutionImporterResult
-corba_result_to_evolution (GNOME_Evolution_ImporterListener_ImporterResult corba_result)
-{
- switch (corba_result) {
- case GNOME_Evolution_ImporterListener_OK:
- return EVOLUTION_IMPORTER_OK;
- case GNOME_Evolution_ImporterListener_UNSUPPORTED_OPERATION:
- return EVOLUTION_IMPORTER_UNSUPPORTED_OPERATION;
- case GNOME_Evolution_ImporterListener_UNKNOWN_DATA:
- return EVOLUTION_IMPORTER_UNKNOWN_DATA;
- case GNOME_Evolution_ImporterListener_BAD_DATA:
- return EVOLUTION_IMPORTER_BAD_DATA;
- case GNOME_Evolution_ImporterListener_BAD_FILE:
- return EVOLUTION_IMPORTER_BAD_FILE;
- case GNOME_Evolution_ImporterListener_NOT_READY:
- return EVOLUTION_IMPORTER_NOT_READY;
- case GNOME_Evolution_ImporterListener_BUSY:
- return EVOLUTION_IMPORTER_BUSY;
- default:
- return EVOLUTION_IMPORTER_UNKNOWN_ERROR;
- }
-}
-
-static inline EvolutionImporterListener *
-evolution_importer_listener_from_servant (PortableServer_Servant servant)
-{
- return EVOLUTION_IMPORTER_LISTENER (bonobo_object_from_servant (servant));
-}
-
-static void
-impl_GNOME_Evolution_ImporterListener_notifyResult (PortableServer_Servant servant,
- GNOME_Evolution_ImporterListener_ImporterResult result,
- CORBA_boolean more_items,
- CORBA_Environment *ev)
-{
- EvolutionImporterListener *listener;
- EvolutionImporterListenerPrivate *priv;
- EvolutionImporterResult out_result;
-
- listener = evolution_importer_listener_from_servant (servant);
- priv = listener->priv;
-
- out_result = corba_result_to_evolution (result);
- if (priv->callback) {
- (priv->callback) (listener, out_result, more_items,
- priv->closure);
- }
-
- return;
-}
-
-
-/* GObject methods */
-static void
-finalise (GObject *object)
-{
- EvolutionImporterListener *listener;
- EvolutionImporterListenerPrivate *priv;
-
- listener = EVOLUTION_IMPORTER_LISTENER (object);
- priv = listener->priv;
-
- if (priv == NULL)
- return;
-
- g_free (priv);
- listener->priv = NULL;
-
- G_OBJECT_CLASS (parent_class)->finalize(object);
-}
-
-#if 0
-static void
-corba_class_init (void)
-{
- POA_GNOME_Evolution_ImporterListener__vepv *vepv;
- POA_GNOME_Evolution_ImporterListener__epv *epv;
- PortableServer_ServantBase__epv *base_epv;
-
- base_epv = g_new0 (PortableServer_ServantBase__epv, 1);
- base_epv->_private = NULL;
- base_epv->finalize = NULL;
- base_epv->default_POA = NULL;
-
- epv = g_new0 (POA_GNOME_Evolution_ImporterListener__epv, 1);
- epv->notifyResult = impl_GNOME_Evolution_ImporterListener_notifyResult;
-
- vepv = &Listener_vepv;
- vepv->_base_epv = base_epv;
- vepv->Bonobo_Unknown_epv = bonobo_object_get_epv ();
- vepv->GNOME_Evolution_ImporterListener_epv = epv;
-}
-#endif
-
-static void
-evolution_importer_listener_class_init (EvolutionImporterListenerClass *klass)
-{
- GObjectClass *object_class;
- POA_GNOME_Evolution_ImporterListener__epv *epv = &klass->epv;
-
- object_class = G_OBJECT_CLASS (klass);
- object_class->finalize = finalise;
-
- parent_class = g_type_class_ref(PARENT_TYPE);
- epv->notifyResult = impl_GNOME_Evolution_ImporterListener_notifyResult;
-}
-
-static void
-evolution_importer_listener_init (EvolutionImporterListener *listener)
-{
- EvolutionImporterListenerPrivate *priv;
-
- priv = g_new0 (EvolutionImporterListenerPrivate, 1);
- listener->priv = priv;
-}
-
-static void
-evolution_importer_listener_construct (EvolutionImporterListener *listener,
- EvolutionImporterListenerCallback callback,
- void *closure)
-{
- EvolutionImporterListenerPrivate *priv;
-
- g_return_if_fail (listener != NULL);
- g_return_if_fail (EVOLUTION_IS_IMPORTER_LISTENER (listener));
- g_return_if_fail (callback != NULL);
-
- priv = listener->priv;
- priv->callback = callback;
- priv->closure = closure;
-}
-
-/**
- * evolution_importer_listener_new
- * @callback: The #EvolutionImporterListenerCallback callback.
- * @closure: The data that will be passed to that callback.
- *
- * Creates a new #EvolutionImporterListener object which calls @callback when
- * something happens.
- * Returns: A newly allocated #EvolutionImporterListener.
- */
-EvolutionImporterListener *
-evolution_importer_listener_new (EvolutionImporterListenerCallback callback,
- void *closure)
-{
- EvolutionImporterListener *listener;
-
- listener = g_object_new (evolution_importer_listener_get_type (), NULL);
-
- evolution_importer_listener_construct (listener, callback, closure);
- return listener;
-}
-
-BONOBO_TYPE_FUNC_FULL (EvolutionImporterListener,
- GNOME_Evolution_ImporterListener,
- PARENT_TYPE, evolution_importer_listener);
diff --git a/shell/importer/evolution-importer-listener.h b/shell/importer/evolution-importer-listener.h
deleted file mode 100644
index 7254346fc2..0000000000
--- a/shell/importer/evolution-importer-listener.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* evolution-importer-listener.h
- *
- * Copyright (C) 2000 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Iain Holmes <iain@ximian.com>
- */
-
-#ifndef EVOLUTION_IMPORTER_LISTENER_H
-#define EVOLUTION_IMPORTER_LISTENER_H
-
-#include <glib.h>
-#include <bonobo/bonobo-object.h>
-#include <importer/GNOME_Evolution_Importer.h>
-#include "evolution-importer.h"
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* cplusplus */
-
-#define EVOLUTION_TYPE_IMPORTER_LISTENER (evolution_importer_listener_get_type ())
-#define EVOLUTION_IMPORTER_LISTENER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EVOLUTION_TYPE_IMPORTER_LISTENER, EvolutionImporterListener))
-#define EVOLUTION_IMPORTER_LISTENER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EVOLUTION_TYPE_IMPORTER_LISTENER, EvolutionImporterListenerClass))
-#define EVOLUTION_IS_IMPORTER_LISTENER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EVOLUTION_TYPE_IMPORTER_LISTENER))
-#define EVOLUTION_IS_IMPORTER_LISTENER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), EVOLUTION_TYPE_IMPORTER_LISTENER))
-
-typedef struct _EvolutionImporterListener EvolutionImporterListener;
-typedef struct _EvolutionImporterListenerPrivate EvolutionImporterListenerPrivate;
-typedef struct _EvolutionImporterListenerClass EvolutionImporterListenerClass;
-
-typedef void (* EvolutionImporterListenerCallback) (EvolutionImporterListener *listener,
- EvolutionImporterResult result,
- gboolean more_items,
- void *closure);
-struct _EvolutionImporterListener {
- BonoboObject parent;
-
- EvolutionImporterListenerPrivate *priv;
-};
-
-struct _EvolutionImporterListenerClass {
- BonoboObjectClass parent_class;
-
- POA_GNOME_Evolution_ImporterListener__epv epv;
-};
-
-GType evolution_importer_listener_get_type (void);
-
-EvolutionImporterListener *evolution_importer_listener_new (EvolutionImporterListenerCallback callback,
- void *closure);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/shell/importer/evolution-importer.c b/shell/importer/evolution-importer.c
deleted file mode 100644
index cd419b4ca9..0000000000
--- a/shell/importer/evolution-importer.c
+++ /dev/null
@@ -1,229 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* evolution-importer.c
- *
- * Copyright (C) 2000 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Iain Holmes <iain@ximian.com>
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "evolution-importer.h"
-
-#include <bonobo/bonobo-object.h>
-#include <gal/util/e-util.h>
-
-#include "GNOME_Evolution_Importer.h"
-
-#define PARENT_TYPE BONOBO_OBJECT_TYPE
-static BonoboObjectClass *parent_class = NULL;
-
-struct _EvolutionImporterPrivate {
- EvolutionImporterLoadFileFn load_file_fn;
- EvolutionImporterSupportFormatFn support_format_fn;
- EvolutionImporterProcessItemFn process_item_fn;
- EvolutionImporterGetErrorFn get_error_fn;
-
- void *closure;
-};
-
-
-static inline EvolutionImporter *
-evolution_importer_from_servant (PortableServer_Servant servant)
-{
- return EVOLUTION_IMPORTER (bonobo_object_from_servant (servant));
-}
-
-static CORBA_boolean
-impl_GNOME_Evolution_Importer_supportFormat (PortableServer_Servant servant,
- const CORBA_char *filename,
- CORBA_Environment *ev)
-{
- EvolutionImporter *importer;
- EvolutionImporterPrivate *priv;
-
- importer = evolution_importer_from_servant (servant);
- priv = importer->priv;
-
- if (priv->support_format_fn != NULL)
- return (priv->support_format_fn) (importer, filename,
- priv->closure);
- else
- return FALSE;
-}
-
-static CORBA_boolean
-impl_GNOME_Evolution_Importer_loadFile (PortableServer_Servant servant,
- const CORBA_char *filename,
- const CORBA_char *physical_uri,
- const CORBA_char *folder_type,
- CORBA_Environment *ev)
-{
- EvolutionImporter *importer;
- EvolutionImporterPrivate *priv;
-
- importer = evolution_importer_from_servant (servant);
- priv = importer->priv;
-
- if (priv->load_file_fn != NULL)
- return (priv->load_file_fn) (importer, filename, physical_uri, folder_type, priv->closure);
- else
- return FALSE;
-}
-
-static void
-impl_GNOME_Evolution_Importer_processItem (PortableServer_Servant servant,
- GNOME_Evolution_ImporterListener listener,
- CORBA_Environment *ev)
-{
- EvolutionImporter *importer;
- EvolutionImporterPrivate *priv;
-
- importer = evolution_importer_from_servant (servant);
- priv = importer->priv;
-
- if (priv->process_item_fn != NULL)
- (priv->process_item_fn) (importer, listener, priv->closure, ev);
- else
- GNOME_Evolution_ImporterListener_notifyResult (listener,
- GNOME_Evolution_ImporterListener_UNSUPPORTED_OPERATION, FALSE, ev);
-}
-
-static CORBA_char *
-impl_GNOME_Evolution_Importer_getError (PortableServer_Servant servant,
- CORBA_Environment *ev)
-{
- EvolutionImporter *importer;
- EvolutionImporterPrivate *priv;
- CORBA_char *out_str;
-
- importer = evolution_importer_from_servant (servant);
- priv = importer->priv;
-
- if (priv->get_error_fn != NULL) {
- out_str = (priv->get_error_fn) (importer, priv->closure);
- return CORBA_string_dup (out_str ? out_str : "");
- } else
- return CORBA_string_dup ("");
-}
-
-
-static void
-finalise (GObject *object)
-{
- EvolutionImporter *importer;
- EvolutionImporterPrivate *priv;
-
- importer = EVOLUTION_IMPORTER (object);
- priv = importer->priv;
-
- if (priv == NULL)
- return;
-
- g_free (priv);
- importer->priv = NULL;
-
- G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-static void
-evolution_importer_class_init (EvolutionImporterClass *klass)
-{
- GObjectClass *object_class;
- POA_GNOME_Evolution_Importer__epv *epv = &klass->epv;
-
- object_class = G_OBJECT_CLASS (klass);
- object_class->finalize = finalise;
-
- parent_class = g_type_class_ref(PARENT_TYPE);
- epv->supportFormat = impl_GNOME_Evolution_Importer_supportFormat;
- epv->loadFile = impl_GNOME_Evolution_Importer_loadFile;
- epv->processItem = impl_GNOME_Evolution_Importer_processItem;
- epv->getError = impl_GNOME_Evolution_Importer_getError;
-}
-
-static void
-evolution_importer_init (EvolutionImporter *importer)
-{
- EvolutionImporterPrivate *priv;
-
- priv = g_new0 (EvolutionImporterPrivate, 1);
-
- importer->priv = priv;
-}
-
-
-
-static void
-evolution_importer_construct (EvolutionImporter *importer,
- EvolutionImporterSupportFormatFn support_format_fn,
- EvolutionImporterLoadFileFn load_file_fn,
- EvolutionImporterProcessItemFn process_item_fn,
- EvolutionImporterGetErrorFn get_error_fn,
- void *closure)
-{
- EvolutionImporterPrivate *priv;
-
- g_return_if_fail (importer != NULL);
- g_return_if_fail (EVOLUTION_IS_IMPORTER (importer));
- g_return_if_fail (support_format_fn != NULL);
- g_return_if_fail (load_file_fn != NULL);
- g_return_if_fail (process_item_fn != NULL);
-
- priv = importer->priv;
- priv->support_format_fn = support_format_fn;
- priv->load_file_fn = load_file_fn;
- priv->process_item_fn = process_item_fn;
- priv->get_error_fn = get_error_fn;
-
- priv->closure = closure;
-}
-
-/**
- * evolution_importer_new:
- * @support_format_fn: The function to be called by the supportFormat method.
- * @load_file_fn: The function to be called by the loadFile method.
- * @process_item_fn: The function to be called by the processItem method.
- * @get_error_fn: The function to be called by the getError method.
- * @closure: The data to be passed to all of the above functions.
- *
- * Creates a new EvolutionImporter object. Of the parameters only
- * @get_error_function and @closure may be #NULL.
- *
- * Returns: A newly created EvolutionImporter object.
- */
-EvolutionImporter *
-evolution_importer_new (EvolutionImporterSupportFormatFn support_format_fn,
- EvolutionImporterLoadFileFn load_file_fn,
- EvolutionImporterProcessItemFn process_item_fn,
- EvolutionImporterGetErrorFn get_error_fn,
- void *closure)
-{
- EvolutionImporter *importer;
-
- importer = g_object_new(evolution_importer_get_type (), NULL);
- evolution_importer_construct (importer, support_format_fn, load_file_fn,
- process_item_fn, get_error_fn, closure);
- return importer;
-}
-
-BONOBO_TYPE_FUNC_FULL (EvolutionImporter,
- GNOME_Evolution_Importer,
- PARENT_TYPE,
- evolution_importer);
diff --git a/shell/importer/evolution-importer.h b/shell/importer/evolution-importer.h
deleted file mode 100644
index d2fd94be0f..0000000000
--- a/shell/importer/evolution-importer.h
+++ /dev/null
@@ -1,96 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* evolution-importer.h
- *
- * Copyright (C) 2000 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Iain Holmes <iain@ximian.com>
- */
-
-#ifndef EVOLUTION_IMPORTER_H
-#define EVOLUTION_IMPORTER_H
-
-#include <glib.h>
-#include <bonobo/bonobo-object.h>
-#include <importer/GNOME_Evolution_Importer.h>
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* cplusplus */
-
-#define EVOLUTION_TYPE_IMPORTER (evolution_importer_get_type ())
-#define EVOLUTION_IMPORTER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EVOLUTION_TYPE_IMPORTER, EvolutionImporter))
-#define EVOLUTION_IMPORTER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EVOLUTION_TYPE_IMPORTER, EvolutionImporterClass))
-#define EVOLUTION_IS_IMPORTER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EVOLUTION_TYPE_IMPORTER))
-#define EVOLUTION_IS_IMPORTER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), EVOLUTION_TYPE_IMPORTER))
-
-typedef struct _EvolutionImporter EvolutionImporter;
-typedef struct _EvolutionImporterPrivate EvolutionImporterPrivate;
-typedef struct _EvolutionImporterClass EvolutionImporterClass;
-
-typedef gboolean (* EvolutionImporterSupportFormatFn) (EvolutionImporter *importer,
- const char *filename,
- void *closure);
-typedef gboolean (* EvolutionImporterLoadFileFn) (EvolutionImporter *importer,
- const char *filename,
- const char *physical_uri,
- const char *folder_type,
- void *closure);
-typedef void (* EvolutionImporterProcessItemFn) (EvolutionImporter *importer,
- CORBA_Object listener,
- void *closure,
- CORBA_Environment *ev);
-typedef char *(* EvolutionImporterGetErrorFn) (EvolutionImporter *importer,
- void *closure);
-
-typedef enum {
- EVOLUTION_IMPORTER_OK,
- EVOLUTION_IMPORTER_UNSUPPORTED_OPERATION,
- EVOLUTION_IMPORTER_INTERRUPTED,
- EVOLUTION_IMPORTER_BUSY,
- EVOLUTION_IMPORTER_NOT_READY,
- EVOLUTION_IMPORTER_UNKNOWN_DATA,
- EVOLUTION_IMPORTER_BAD_DATA,
- EVOLUTION_IMPORTER_BAD_FILE,
- EVOLUTION_IMPORTER_UNKNOWN_ERROR
-} EvolutionImporterResult;
-
-struct _EvolutionImporter {
- BonoboObject parent;
-
- EvolutionImporterPrivate *priv;
-};
-
-struct _EvolutionImporterClass {
- BonoboObjectClass parent_class;
-
- POA_GNOME_Evolution_Importer__epv epv;
-};
-
-GType evolution_importer_get_type (void);
-
-EvolutionImporter *evolution_importer_new (EvolutionImporterSupportFormatFn support_format_fn,
- EvolutionImporterLoadFileFn load_file_fn,
- EvolutionImporterProcessItemFn process_item_fn,
- EvolutionImporterGetErrorFn get_error_fn,
- void *closure);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/shell/importer/evolution-intelligent-importer.c b/shell/importer/evolution-intelligent-importer.c
deleted file mode 100644
index e9d40d0f6d..0000000000
--- a/shell/importer/evolution-intelligent-importer.c
+++ /dev/null
@@ -1,197 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* evolution-intelligent-importer.c
- *
- * Copyright (C) 2000, 2001 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Iain Holmes <iain@ximian.com>
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "evolution-intelligent-importer.h"
-
-#include <bonobo/bonobo-object.h>
-
-#include "GNOME_Evolution_Importer.h"
-
-#define PARENT_TYPE BONOBO_OBJECT_TYPE
-static BonoboObjectClass *parent_class = NULL;
-
-struct _EvolutionIntelligentImporterPrivate {
- EvolutionIntelligentImporterCanImportFn can_import_fn;
- EvolutionIntelligentImporterImportDataFn import_data_fn;
-
- char *importername;
- char *message;
- void *closure;
-};
-
-
-static inline EvolutionIntelligentImporter *
-evolution_intelligent_importer_from_servant (PortableServer_Servant servant)
-{
- return EVOLUTION_INTELLIGENT_IMPORTER (bonobo_object_from_servant (servant));
-}
-
-static CORBA_char *
-impl_GNOME_Evolution_IntelligentImporter__get_importername (PortableServer_Servant servant,
- CORBA_Environment *ev)
-{
- EvolutionIntelligentImporter *ii;
-
- ii = evolution_intelligent_importer_from_servant (servant);
-
- return CORBA_string_dup (ii->priv->importername ?
- ii->priv->importername : "");
-}
-
-static CORBA_char *
-impl_GNOME_Evolution_IntelligentImporter__get_message (PortableServer_Servant servant,
- CORBA_Environment *ev)
-{
- EvolutionIntelligentImporter *ii;
-
- ii = evolution_intelligent_importer_from_servant (servant);
-
- return CORBA_string_dup (ii->priv->message ?
- ii->priv->message : "");
-}
-
-static CORBA_boolean
-impl_GNOME_Evolution_IntelligentImporter_canImport (PortableServer_Servant servant,
- CORBA_Environment *ev)
-{
- EvolutionIntelligentImporter *ii;
- EvolutionIntelligentImporterPrivate *priv;
-
- ii = evolution_intelligent_importer_from_servant (servant);
- priv = ii->priv;
-
- if (priv->can_import_fn != NULL)
- return (priv->can_import_fn) (ii, priv->closure);
- else
- return FALSE;
-}
-
-static void
-impl_GNOME_Evolution_IntelligentImporter_importData (PortableServer_Servant servant,
- CORBA_Environment *ev)
-{
- EvolutionIntelligentImporter *ii;
- EvolutionIntelligentImporterPrivate *priv;
-
- ii = evolution_intelligent_importer_from_servant (servant);
- priv = ii->priv;
-
- if (priv->import_data_fn)
- (priv->import_data_fn) (ii, priv->closure);
-}
-
-
-static void
-finalise (GObject *object)
-{
- EvolutionIntelligentImporter *ii;
-
- ii = EVOLUTION_INTELLIGENT_IMPORTER (object);
-
- if (ii->priv == NULL)
- return;
-
- g_free (ii->priv->importername);
- g_free (ii->priv);
- ii->priv = NULL;
-
- G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-static void
-evolution_intelligent_importer_class_init (EvolutionIntelligentImporterClass *klass)
-{
- GObjectClass *object_class;
- POA_GNOME_Evolution_IntelligentImporter__epv *epv = &klass->epv;
-
- object_class = G_OBJECT_CLASS (klass);
- object_class->finalize = finalise;
-
- parent_class = g_type_class_ref(PARENT_TYPE);
- epv->_get_importername = impl_GNOME_Evolution_IntelligentImporter__get_importername;
- epv->_get_message = impl_GNOME_Evolution_IntelligentImporter__get_message;
- epv->canImport = impl_GNOME_Evolution_IntelligentImporter_canImport;
- epv->importData = impl_GNOME_Evolution_IntelligentImporter_importData;
-}
-
-static void
-evolution_intelligent_importer_init (EvolutionIntelligentImporter *ii)
-{
- ii->priv = g_new0 (EvolutionIntelligentImporterPrivate, 1);
-}
-
-
-static void
-evolution_intelligent_importer_construct (EvolutionIntelligentImporter *ii,
- EvolutionIntelligentImporterCanImportFn can_import_fn,
- EvolutionIntelligentImporterImportDataFn import_data_fn,
- const char *importername,
- const char *message,
- void *closure)
-{
- g_return_if_fail (ii != NULL);
- ii->priv->importername = g_strdup (importername);
- ii->priv->message = g_strdup (message);
-
- ii->priv->can_import_fn = can_import_fn;
- ii->priv->import_data_fn = import_data_fn;
- ii->priv->closure = closure;
-}
-
-/**
- * evolution_intelligent_importer_new:
- * can_import_fn: The function that will be called to see if this importer can do
- * anything.
- * import_data_fn: The function that will be called when the importer should
- * import the data.
- * importername: The name of this importer.
- * message: The message that will be displayed when the importer can import.
- * closure: The data to be passed to @can_import_fn and @import_data_fn.
- *
- * Creates a new IntelligentImporter.
- *
- * Returns: A newly allocated EvolutionIntelligentImporter.
- */
-EvolutionIntelligentImporter *
-evolution_intelligent_importer_new (EvolutionIntelligentImporterCanImportFn can_import_fn,
- EvolutionIntelligentImporterImportDataFn import_data_fn,
- const char *importername,
- const char *message,
- void *closure)
-{
- EvolutionIntelligentImporter *ii;
-
- ii = g_object_new (evolution_intelligent_importer_get_type (), NULL);
- evolution_intelligent_importer_construct (ii, can_import_fn,
- import_data_fn, importername,
- message, closure);
- return ii;
-}
-
-BONOBO_TYPE_FUNC_FULL (EvolutionIntelligentImporter,
- GNOME_Evolution_IntelligentImporter,
- PARENT_TYPE,
- evolution_intelligent_importer);
diff --git a/shell/importer/evolution-intelligent-importer.h b/shell/importer/evolution-intelligent-importer.h
deleted file mode 100644
index d51177f817..0000000000
--- a/shell/importer/evolution-intelligent-importer.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* evolution-intelligent-importer.h
- *
- * Copyright (C) 2000 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Iain Holmes <iain@ximian.com>
- */
-
-#ifndef EVOLUTION_INTELLIGENT_IMPORTER_H
-#define EVOLUTION_INTELLIGENT_IMPORTER_H
-
-#include <glib.h>
-#include <bonobo/bonobo-object.h>
-#include <importer/GNOME_Evolution_Importer.h>
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-#define EVOLUTION_TYPE_INTELLIGENT_IMPORTER (evolution_intelligent_importer_get_type ())
-#define EVOLUTION_INTELLIGENT_IMPORTER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EVOLUTION_TYPE_INTELLIGENT_IMPORTER, EvolutionIntelligentImporter))
-#define EVOLUTION_INTELLIGENT_IMPORTER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EVOLUTION_TYPE_INTELLIGENT_IMPORTER, EvolutionIntelligentImporterClass))
-#define EVOLUTION_IS_INTELLIGENT_IMPORTER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EVOLUTION_TYPE_INTELLIGENT_IMPORTER))
-#define EVOLUTION_IS_INTELLIGENT_IMPORTER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), EVOLUTION_TYPE_INTELLIGENT_IMPORTER))
-
-typedef struct _EvolutionIntelligentImporter EvolutionIntelligentImporter;
-typedef struct _EvolutionIntelligentImporterPrivate EvolutionIntelligentImporterPrivate;
-typedef struct _EvolutionIntelligentImporterClass EvolutionIntelligentImporterClass;
-
-typedef gboolean (* EvolutionIntelligentImporterCanImportFn) (EvolutionIntelligentImporter *ii,
- void *closure);
-typedef void (* EvolutionIntelligentImporterImportDataFn) (EvolutionIntelligentImporter *ii,
- void *closure);
-
-struct _EvolutionIntelligentImporter {
- BonoboObject parent;
-
- EvolutionIntelligentImporterPrivate *priv;
-};
-
-struct _EvolutionIntelligentImporterClass {
- BonoboObjectClass parent_class;
-
- POA_GNOME_Evolution_IntelligentImporter__epv epv;
-};
-
-GType evolution_intelligent_importer_get_type (void);
-
-EvolutionIntelligentImporter *evolution_intelligent_importer_new (EvolutionIntelligentImporterCanImportFn can_import_fn,
- EvolutionIntelligentImporterImportDataFn import_data_fn,
- const char *importername,
- const char *message,
- void *closure);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/shell/importer/import.glade b/shell/importer/import.glade
deleted file mode 100644
index 27bcd2decb..0000000000
--- a/shell/importer/import.glade
+++ /dev/null
@@ -1,119 +0,0 @@
-<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
-<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd" >
-
-<glade-interface>
- <requires lib="gnome" />
-
- <widget class="GtkWindow" id="importwizard">
- <property name="visible">no</property>
- <property name="title" translatable="yes">Evolution Import Assistant</property>
- <property name="type">GTK_WINDOW_TOPLEVEL</property>
- <property name="modal">no</property>
- <property name="allow_shrink">no</property>
- <property name="allow_grow">yes</property>
- <property name="window-position">GTK_WIN_POS_NONE</property>
-
- <child>
- <widget class="GnomeDruid" id="druid1">
- <property name="visible">yes</property>
-
- <child>
- <widget class="GnomeDruidPageEdge" id="page0">
- <property name="title" translatable="yes">Evolution Import Assistant</property>
- <property name="text" translatable="yes">Welcome to the Evolution Import Assistant.
-With this assistant you will be guided through the process of
-importing external files into Evolution.</property>
- <property name="logo_image">import.png</property>
- <property name="position">GNOME_EDGE_START</property>
- <property name="visible">yes</property>
- </widget>
- </child>
-
- <child>
- <widget class="GnomeDruidPageStandard" id="page1">
- <property name="title" translatable="yes">Importer Type (step 1 of 3)</property>
- <property name="logo">import.png</property>
- <property name="visible">yes</property>
-
- <child internal-child="vbox">
- <widget class="GtkVBox" id="druid-vbox2">
- <property name="homogeneous">no</property>
- <property name="spacing">0</property>
- <property name="visible">yes</property>
-
- <child>
- <placeholder />
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">yes</property>
- <property name="fill">yes</property>
- </packing>
- </child>
- </widget>
- </child>
-
- <child>
- <widget class="GnomeDruidPageStandard" id="page2-file">
- <property name="title" translatable="yes">Select a File (step 2 of 3)</property>
- <property name="logo">import.png</property>
- <property name="visible">yes</property>
-
- <child internal-child="vbox">
- <widget class="GtkVBox" id="druid-vbox1">
- <property name="homogeneous">no</property>
- <property name="spacing">0</property>
- <property name="visible">yes</property>
-
- <child>
- <placeholder />
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">yes</property>
- <property name="fill">yes</property>
- </packing>
- </child>
- </widget>
- </child>
-
- <child>
- <widget class="GnomeDruidPageStandard" id="page2-intelligent">
- <property name="title" translatable="yes">Select Importers (step 2 of 3)</property>
- <property name="logo">import.png</property>
- <property name="visible">yes</property>
-
- <child internal-child="vbox">
- <widget class="GtkVBox" id="druid-vbox3">
- <property name="homogeneous">no</property>
- <property name="spacing">0</property>
- <property name="visible">yes</property>
-
- <child>
- <placeholder />
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">yes</property>
- <property name="fill">yes</property>
- </packing>
- </child>
- </widget>
- </child>
-
- <child>
- <widget class="GnomeDruidPageEdge" id="page3">
- <property name="title" translatable="yes">Import File (step 3 of 3)</property>
- <property name="text" translatable="yes">Click &quot;Import&quot; to begin importing the file into Evolution. </property>
- <property name="logo_image">import.png</property>
- <property name="position">GNOME_EDGE_FINISH</property>
- <property name="visible">yes</property>
- </widget>
- </child>
- </widget>
- </child>
- </widget>
-</glade-interface>
diff --git a/shell/importer/intelligent.c b/shell/importer/intelligent.c
deleted file mode 100644
index 1eee3c238e..0000000000
--- a/shell/importer/intelligent.c
+++ /dev/null
@@ -1,484 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* intelligent.c
- *
- * Authors:
- * Iain Holmes <iain@ximian.com>
- *
- * Copyright 2001 Ximian, Inc. (www.ximian.com)
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "intelligent.h"
-
-#include <glib.h>
-
-#include <gtk/gtkdrawingarea.h>
-#include <gtk/gtkbox.h>
-#include <gtk/gtkhbox.h>
-#include <gtk/gtkvbox.h>
-#include <gtk/gtkcheckbutton.h>
-#include <gtk/gtklabel.h>
-#include <gtk/gtkmain.h>
-#include <gtk/gtkobject.h>
-#include <gtk/gtktogglebutton.h>
-#include <gtk/gtkwidget.h>
-#include <gtk/gtkwindow.h>
-#include <gtk/gtkframe.h>
-#include <gtk/gtkclist.h>
-#include <gtk/gtknotebook.h>
-#include <gtk/gtkscrolledwindow.h>
-#include <gtk/gtkdialog.h>
-#include <gtk/gtkstock.h>
-
-#include <libgnome/gnome-config.h>
-/*#include <libgnome/gnome-util.h>*/
-#include <libgnome/gnome-i18n.h>
-
-#include <bonobo/bonobo-object.h>
-#include <bonobo/bonobo-widget.h>
-
-#include "intelligent.h"
-#include "GNOME_Evolution_Importer.h"
-
-/* Prototypes */
-
-void intelligent_importer_init (void);
-
-/* End prototypes */
-
-typedef struct {
- CORBA_Object object;
- Bonobo_Control control;
- GtkWidget *widget;
-
- char *name;
- char *blurb;
- char *iid;
-} IntelligentImporterData;
-
-typedef struct {
- GtkWidget *dialog;
- GtkWidget *placeholder;
- GtkWidget *clist;
- BonoboWidget *current;
-
- GList *importers;
-
- int running;
-} IntelligentImporterDialog;
-
-typedef struct {
- CORBA_Object importer;
- char *iid;
-} SelectedImporterData;
-
-static void
-free_importer_dialog (IntelligentImporterDialog *d)
-{
- GList *l;
-
- for (l = d->importers; l; l = l->next) {
- CORBA_Environment ev;
- IntelligentImporterData *data;
-
- data = l->data;
-
- CORBA_exception_init (&ev);
- if (data->object != CORBA_OBJECT_NIL)
- bonobo_object_release_unref (data->object, &ev);
-
- g_free (data->iid);
- g_free (data->name);
- g_free (data->blurb);
- g_free (data);
- }
-
- g_list_free (d->importers);
- gtk_widget_destroy (d->dialog);
- g_free (d);
-}
-
-static void
-start_importers (GList *selected)
-{
- CORBA_Environment ev;
-
- CORBA_exception_init (&ev);
- for (; selected; selected = selected->next) {
- SelectedImporterData *selection = selected->data;
-
- GNOME_Evolution_IntelligentImporter_importData (selection->importer, &ev);
- if (ev._major != CORBA_NO_EXCEPTION) {
- g_warning ("Error importing %s\n%s", selection->iid,
- CORBA_exception_id (&ev));
- }
- }
- CORBA_exception_free (&ev);
-}
-
-static GList *
-get_intelligent_importers (void)
-{
- Bonobo_ServerInfoList *info_list;
- GList *iids_ret = NULL;
- CORBA_Environment ev;
- int i;
-
- CORBA_exception_init (&ev);
- info_list = bonobo_activation_query ("repo_ids.has ('IDL:GNOME/Evolution/IntelligentImporter:1.0')", NULL, &ev);
- CORBA_exception_free (&ev);
-
- for (i = 0; i < info_list->_length; i++) {
- const Bonobo_ServerInfo *info;
-
- info = info_list->_buffer + i;
- iids_ret = g_list_prepend (iids_ret, g_strdup (info->iid));
- }
-
- return iids_ret;
-}
-
-static void
-select_row_cb (GtkCList *clist,
- int row,
- int column,
- GdkEvent *ev,
- IntelligentImporterDialog *d)
-{
- gtk_notebook_set_page (GTK_NOTEBOOK (d->placeholder), row);
-}
-
-static void
-unselect_row_cb (GtkCList *clist,
- int row,
- int column,
- GdkEvent *ev,
- IntelligentImporterDialog *d)
-{
- gtk_notebook_set_page (GTK_NOTEBOOK (d->placeholder), d->running);
-}
-
-static IntelligentImporterDialog *
-create_gui (GList *importers)
-{
- GtkWidget *dialog, *clist, *sw, *label;
- GtkWidget *hbox, *vbox, *dummy;
- IntelligentImporterDialog *d;
- GList *l;
- int running = 0;
-
- d = g_new (IntelligentImporterDialog, 1);
- d->dialog = dialog = gtk_dialog_new();
- gtk_window_set_title((GtkWindow *)dialog, _("Importers"));
- dummy = gtk_button_new_from_stock(GTK_STOCK_CONVERT);
- gtk_button_set_label((GtkButton *)dummy, _("Import"));
- gtk_dialog_add_action_widget((GtkDialog *)dialog, dummy, GTK_RESPONSE_ACCEPT);
-
- dummy = gtk_button_new_from_stock(GTK_STOCK_NO);
- gtk_button_set_label((GtkButton *)dummy, _("Don't import"));
- gtk_dialog_add_action_widget((GtkDialog *)dialog, dummy, GTK_RESPONSE_REJECT);
-
- dummy = gtk_button_new_from_stock(GTK_STOCK_CANCEL);
- gtk_button_set_label((GtkButton *)dummy, _("Don't ask me again"));
- gtk_dialog_add_action_widget((GtkDialog *)dialog, dummy, GTK_RESPONSE_CANCEL);
- d->importers = NULL;
- d->current = NULL;
-
- d->clist = clist = gtk_clist_new (1);
- gtk_clist_set_selection_mode (GTK_CLIST (d->clist), GTK_SELECTION_MULTIPLE);
-
- label = gtk_label_new (_("Evolution can import data from the following files:"));
- gtk_misc_set_alignment(GTK_MISC(label), 0, .5);
- gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), label,
- TRUE, TRUE, 0);
-
- hbox = gtk_hbox_new (FALSE, 2);
- gtk_container_set_border_width (GTK_CONTAINER (hbox), 2);
-
- gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), hbox,
- TRUE, TRUE, 0);
-
- sw = gtk_scrolled_window_new (NULL, NULL);
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW(sw),
- GTK_POLICY_AUTOMATIC,
- GTK_POLICY_AUTOMATIC);
- gtk_widget_set_size_request (sw, 300, 150);
- gtk_container_add (GTK_CONTAINER (sw), clist);
- gtk_box_pack_start (GTK_BOX (hbox), sw, TRUE, TRUE, 0);
-
- vbox = gtk_vbox_new (FALSE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (vbox), 2);
- gtk_box_pack_start (GTK_BOX (hbox), vbox, TRUE, TRUE, 0);
-
- d->placeholder = gtk_notebook_new ();
- gtk_notebook_set_show_tabs (GTK_NOTEBOOK (d->placeholder), FALSE);
- gtk_box_pack_start (GTK_BOX (vbox), d->placeholder, TRUE, TRUE, 0);
-
- for (l = importers; l; l = l->next) {
- IntelligentImporterData *data;
- CORBA_Environment ev;
- gboolean dontaskagain, can_run;
- char *text[1], *prefix;
-
- /* Check if we want to show this one again */
- prefix = g_strdup_printf ("=%s/evolution/config/Shell=/intelligent-importers/", g_get_home_dir ());
- gnome_config_push_prefix (prefix);
- g_free (prefix);
-
- dontaskagain = gnome_config_get_bool (l->data);
- gnome_config_pop_prefix ();
-
- if (dontaskagain)
- continue;
-
- data = g_new0 (IntelligentImporterData, 1);
- data->iid = g_strdup (l->data);
-
- CORBA_exception_init (&ev);
- data->object = bonobo_activation_activate_from_id ((char *) data->iid, 0,
- NULL, &ev);
- if (ev._major != CORBA_NO_EXCEPTION) {
- g_warning ("Could not start %s: %s", data->iid,
- CORBA_exception_id (&ev));
- CORBA_exception_free (&ev);
-
- /* Clean up the IntelligentImporterData */
- g_free (data->iid);
- g_free (data);
- continue;
- }
-
- CORBA_exception_free (&ev);
- if (data->object == CORBA_OBJECT_NIL) {
- g_warning ("Could not activate_component %s", data->iid);
- g_free (data->iid);
- g_free (data);
- continue;
- }
-
- CORBA_exception_init (&ev);
- can_run = GNOME_Evolution_IntelligentImporter_canImport (data->object,
- &ev);
- if (ev._major != CORBA_NO_EXCEPTION) {
- g_warning ("Could not get canImport(%s): %s",
- data->iid, CORBA_exception_id (&ev));
- bonobo_object_release_unref (data->object, &ev);
- CORBA_exception_free (&ev);
- g_free (data->iid);
- g_free (data);
- continue;
- }
- CORBA_exception_free (&ev);
-
- if (can_run == FALSE) {
- CORBA_exception_init (&ev);
- bonobo_object_release_unref (data->object, &ev);
- CORBA_exception_free (&ev);
- g_free (data->iid);
- g_free (data);
- continue;
- }
-
- running++;
-
- data->name = g_strdup (GNOME_Evolution_IntelligentImporter__get_importername (data->object, &ev));
- if (ev._major != CORBA_NO_EXCEPTION) {
- g_warning ("Could not get name(%s): %s",
- data->iid, CORBA_exception_id (&ev));
- bonobo_object_release_unref (data->object, &ev);
- CORBA_exception_free (&ev);
- g_free (data->iid);
- g_free (data);
- continue;
- }
-
- data->blurb = g_strdup (GNOME_Evolution_IntelligentImporter__get_message (data->object, &ev));
- if (ev._major != CORBA_NO_EXCEPTION) {
- g_warning ("Could not get message(%s): %s",
- data->iid, CORBA_exception_id (&ev));
- bonobo_object_release_unref (data->object, &ev);
- CORBA_exception_free (&ev);
- g_free (data->iid);
- g_free (data->name);
- g_free (data);
- continue;
- }
-
- data->control = Bonobo_Unknown_queryInterface (data->object,
- "IDL:Bonobo/Control:1.0", &ev);
- if (ev._major != CORBA_NO_EXCEPTION) {
- g_warning ("Could not QI for Bonobo/Control:1.0 %s:%s",
- data->iid, CORBA_exception_id (&ev));
- bonobo_object_release_unref (data->object, &ev);
- CORBA_exception_free (&ev);
- g_free (data->iid);
- g_free (data->name);
- g_free (data->blurb);
- continue;
- }
- if (data->control != CORBA_OBJECT_NIL) {
- data->widget = bonobo_widget_new_control_from_objref (data->control, CORBA_OBJECT_NIL);
- /* Ref this widget so even if we remove it from the
- containers it will always have an extra ref. */
- gtk_widget_show (data->widget);
- gtk_widget_ref (data->widget);
- } else {
- data->widget = gtk_label_new ("");
- }
-
- CORBA_exception_free (&ev);
-
- d->importers = g_list_prepend (d->importers, data);
- gtk_notebook_prepend_page (GTK_NOTEBOOK (d->placeholder),
- data->widget, NULL);
- text[0] = data->name;
- gtk_clist_prepend (GTK_CLIST (clist), text);
- }
-
- d->running = running;
- dummy = gtk_drawing_area_new ();
- gtk_widget_show (dummy);
- gtk_notebook_append_page (GTK_NOTEBOOK (d->placeholder),
- dummy, NULL);
- /* Set the start to the blank page */
- gtk_notebook_set_page (GTK_NOTEBOOK (d->placeholder), running);
-
- g_signal_connect((clist), "select-row",
- G_CALLBACK (select_row_cb), d);
- g_signal_connect((clist), "unselect-row",
- G_CALLBACK (unselect_row_cb), d);
-
- gtk_widget_show_all (GTK_DIALOG (dialog)->vbox);
- return d;
-}
-
-void
-intelligent_importer_init (void)
-{
- GList *importers, *l, *selected = NULL;
- IntelligentImporterDialog *d;
- char *prefix;
- gboolean dontaskagain;
- int resp;
-
- prefix = g_strdup_printf ("=%s/evolution/config/Shell=/intelligent-importers/", g_get_home_dir());
- gnome_config_push_prefix (prefix);
- g_free (prefix);
-
- dontaskagain = gnome_config_get_bool ("Dontaskagain=False");
- gnome_config_pop_prefix ();
-
- if (dontaskagain) {
- return;
- }
-
- importers = get_intelligent_importers ();
- if (importers == NULL)
- return; /* No intelligent importers. Easy :) */
-
- d = create_gui (importers);
- if (d->running == 0) {
- free_importer_dialog (d);
- return; /* No runnable intelligent importers. */
- }
-
- resp = gtk_dialog_run((GtkDialog *)d->dialog);
- gtk_widget_destroy(d->dialog);
- switch (resp) {
- case GTK_RESPONSE_ACCEPT:
- /* Make a list of the importers */
-
- /* FIXME: Sort this list and don't do it a slow way */
- for (l = GTK_CLIST (d->clist)->selection; l; l = l->next) {
- IntelligentImporterData *data;
- SelectedImporterData *new_data;
- CORBA_Environment ev;
- char *iid;
-
- data = g_list_nth_data (d->importers, GPOINTER_TO_INT (l->data));
- iid = g_strdup (data->iid);
-
- new_data = g_new (SelectedImporterData, 1);
- new_data->iid = iid;
-
- /* Reference the remote object, and duplicate the
- local one. */
- CORBA_exception_init (&ev);
- new_data->importer = bonobo_object_dup_ref (data->object, &ev);
- if (ev._major != CORBA_NO_EXCEPTION) {
- g_warning ("Error duplicating %s\n%s", iid,
- CORBA_exception_id (&ev));
- g_free (iid);
- CORBA_exception_free (&ev);
- g_free (new_data);
- continue;
- }
- CORBA_exception_free (&ev);
-
- selected = g_list_prepend (selected, new_data);
- }
-
- /* Now destroy all the importers, as we've kept references to
- the ones we need */
- free_importer_dialog (d);
-
- if (selected != NULL) {
- /* Restart the selected ones */
- start_importers (selected);
-
- /* Free the selected list */
- for (l = selected; l; l = l->next) {
- CORBA_Environment ev;
- SelectedImporterData *selection = l->data;
-
- CORBA_exception_init (&ev);
- bonobo_object_release_unref (selection->importer, &ev);
- CORBA_exception_free (&ev);
-
- g_free (selection->iid);
- g_free (selection);
- }
- g_list_free (selected);
- }
-
- break;
-
- case GTK_RESPONSE_CANCEL: /* Dont ask again */
- prefix = g_strdup_printf ("=%s/evolution/config/Shell=/intelligent-importers/", g_get_home_dir());
- gnome_config_push_prefix (prefix);
- g_free (prefix);
-
- gnome_config_set_bool ("Dontaskagain", TRUE);
- gnome_config_pop_prefix ();
-
- gnome_config_sync ();
- gnome_config_drop_all ();
- g_print ("Not asking again");
- free_importer_dialog (d);
- break;
-
- default:
- case GTK_RESPONSE_REJECT: /* No button */
- free_importer_dialog (d);
- break;
- }
-
- g_list_free (importers);
-}
diff --git a/shell/importer/intelligent.h b/shell/importer/intelligent.h
deleted file mode 100644
index 1e6f3e0b1b..0000000000
--- a/shell/importer/intelligent.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* importer.c
- *
- * Copyright (C) 2000 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Kjartan Maraas <kmaraas@gnome.org>
- */
-
-#ifndef __INTELLIGENT_H__
-#define __INTELLIGENT_H__
-
-void intelligent_importer_init (void);
-
-#endif
diff --git a/shell/main.c b/shell/main.c
deleted file mode 100644
index e41058377f..0000000000
--- a/shell/main.c
+++ /dev/null
@@ -1,630 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* main.c
- *
- * Copyright (C) 2000, 2001, 2002, 2003 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#include <config.h>
-
-#include "e-util/e-dialog-utils.h"
-#include "e-util/e-gtk-utils.h"
-
-#include "e-icon-factory.h"
-#include "e-shell-constants.h"
-#include "e-shell-config.h"
-#include "e-setup.h"
-
-#include "e-shell.h"
-
-#include <gconf/gconf-client.h>
-
-#include <gtk/gtkalignment.h>
-#include <gtk/gtkframe.h>
-#include <gtk/gtklabel.h>
-#include <gtk/gtkmain.h>
-#include <gtk/gtksignal.h>
-#include <gtk/gtkwindow.h>
-#include <gtk/gtkdialog.h>
-#include <gtk/gtkstock.h>
-
-#include <gdk/gdkx.h>
-#include <X11/Xlib.h>
-
-#include <libgnome/gnome-i18n.h>
-#include <libgnome/gnome-util.h>
-#include <libgnomeui/gnome-ui-init.h>
-#include <libgnomeui/gnome-window-icon.h>
-
-#include <bonobo/bonobo-main.h>
-#include <bonobo/bonobo-moniker-util.h>
-#include <bonobo/bonobo-exception.h>
-
-#include <bonobo-activation/bonobo-activation.h>
-
-#include <glade/glade.h>
-
-#include "e-config-upgrade.h"
-#include "Evolution-Wombat.h"
-
-#ifdef GTKHTML_HAVE_GCONF
-#include <gconf/gconf.h>
-#endif
-
-#include <gal/widgets/e-cursors.h>
-
-#include <fcntl.h>
-#include <signal.h>
-#include <string.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>
-
-#include <pthread.h>
-
-
-static EShell *shell = NULL;
-static char *evolution_directory = NULL;
-
-/* Command-line options. */
-static gboolean no_splash = FALSE;
-static gboolean start_online = FALSE;
-static gboolean start_offline = FALSE;
-static gboolean force_upgrade = FALSE;
-static gboolean setup_only = FALSE;
-static gboolean killev = FALSE;
-
-extern char *evolution_debug_log;
-
-
-static GtkWidget *
-quit_box_new (void)
-{
- GtkWidget *window;
- GtkWidget *label;
- GtkWidget *frame;
-
- window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
- gtk_window_set_resizable (GTK_WINDOW (window), FALSE);
- gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_CENTER);
-
- /* (Just to prevent smart-ass window managers like Sawfish from setting
- the make the dialog as big as the standard Evolution window). */
- gtk_window_set_wmclass (GTK_WINDOW (window), "evolution-quit", "Evolution:quit");
-
- e_make_widget_backing_stored (window);
-
- gtk_window_set_title (GTK_WINDOW (window), _("Evolution"));
-
- frame = gtk_frame_new (NULL);
- gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_OUT);
- gtk_container_add (GTK_CONTAINER (window), frame);
-
- label = gtk_label_new (_("Evolution is now exiting ..."));
- gtk_misc_set_padding (GTK_MISC (label), 30, 25);
-
- gtk_container_add (GTK_CONTAINER (frame), label);
-
- gtk_widget_show_now (frame);
- gtk_widget_show_now (label);
- gtk_widget_show_now (window);
-
- /* For some reason, the window fails to update without this
- sometimes. */
- gtk_widget_queue_draw (window);
- gtk_widget_queue_draw (label);
- gtk_widget_queue_draw (frame);
-
- gdk_flush ();
-
- while (gtk_events_pending ())
- gtk_main_iteration ();
-
- gdk_flush ();
-
- return window;
-}
-
-static void
-no_views_left_cb (EShell *shell, gpointer data)
-{
- GtkWidget *quit_box;
-
- quit_box = quit_box_new ();
- g_object_add_weak_pointer (G_OBJECT (quit_box), (void **) &quit_box);
-
- /* FIXME: This is wrong. We should exit only when the shell is
- destroyed. But refcounting is broken at present, so this is a
- reasonable workaround for now. */
-
- e_shell_unregister_all (shell);
-
- bonobo_object_unref (BONOBO_OBJECT (shell));
-
- if (quit_box != NULL)
- gtk_widget_destroy (quit_box);
-
- bonobo_main_quit ();
-}
-
-static void
-shell_weak_notify (void *data,
- GObject *where_the_object_was)
-{
- bonobo_main_quit ();
-}
-
-
-static void
-kill_wombat (void)
-{
- g_print ("(Killing old version of Wombat...)\n");
-
- system (KILL_PROCESS_CMD " -9 lt-evolution-wombat 2> /dev/null");
- system (KILL_PROCESS_CMD " -9 evolution-wombat 2> /dev/null");
-}
-
-static void
-kill_old_wombat (void)
-{
- GNOME_Evolution_WombatInterfaceCheck iface;
- CORBA_Environment ev;
- CORBA_char *version;
-
- CORBA_exception_init (&ev);
-
- iface = bonobo_activation_activate_from_id ("OAFIID:GNOME_Evolution_Wombat_InterfaceCheck", 0, NULL, &ev);
- if (BONOBO_EX (&ev) || iface == CORBA_OBJECT_NIL) {
- kill_wombat ();
- CORBA_exception_free (&ev);
- return;
- }
-
- version = GNOME_Evolution_WombatInterfaceCheck__get_interfaceVersion (iface, &ev);
- if (BONOBO_EX (&ev)) {
- kill_wombat ();
- CORBA_Object_release (iface, &ev);
- CORBA_exception_free (&ev);
- return;
- }
-
- if (strcmp (version, VERSION) != 0) {
- CORBA_free (version);
- kill_wombat ();
- CORBA_Object_release (iface, &ev);
- CORBA_exception_free (&ev);
- return;
- }
-
- CORBA_free (version);
- CORBA_Object_release (iface, &ev);
- CORBA_exception_free (&ev);
-}
-
-
-/* Warning dialog to scare people off a little bit. */
-
-static void
-warning_dialog_response_callback (GtkDialog *dialog,
- int button_number,
- void *data)
-{
- GtkCheckButton *dont_bother_me_again_checkbox;
- GConfClient *client;
-
- dont_bother_me_again_checkbox = GTK_CHECK_BUTTON (data);
-
- client = gconf_client_get_default ();
- gconf_client_set_bool (client, "/apps/evolution/shell/skip_warning_dialog",
- gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dont_bother_me_again_checkbox)),
- NULL);
- g_object_unref (client);
-
- gtk_widget_destroy (GTK_WIDGET (dialog));
-}
-
-static void
-show_development_warning (GtkWindow *parent)
-{
- GtkWidget *label;
- GtkWidget *warning_dialog;
- GtkWidget *dont_bother_me_again_checkbox;
- GtkWidget *alignment;
- GConfClient *client;
- char *text;
-
- client = gconf_client_get_default ();
-
- if (gconf_client_get_bool (client, "/apps/evolution/shell/skip_warning_dialog", NULL)) {
- g_object_unref (client);
- return;
- }
-
- g_object_unref (client);
-
- warning_dialog = gtk_dialog_new_with_buttons("Ximian Evolution " VERSION, parent,
- GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,
- GTK_STOCK_OK, GTK_RESPONSE_OK, NULL);
- text = g_strdup_printf(
- /* xgettext:no-c-format */
- /* Preview/Alpha/Beta version warning message */
- _("Hi. Thanks for taking the time to download this preview release\n"
- "of the Ximian Evolution groupware suite.\n"
- "\n"
- "This version of Ximian Evolution is not yet complete. It is getting close,\n"
- "but some features are either unfinished or do not work properly.\n"
- "\n"
- "If you want a stable version of Evolution, we urge you to uninstall\n"
- "this version, and install version %s instead.\n"
- "\n"
- "If you find bugs, please report them to us at bugzilla.ximian.com.\n"
- "This product comes with no warranty and is not intended for\n"
- "individuals prone to violent fits of anger.\n"
- "\n"
- "We hope that you enjoy the results of our hard work, and we\n"
- "eagerly await your contributions!\n"),
- "1.2.x (1.2.2)");
- label = gtk_label_new (text);
- g_free(text);
-
- gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
-
- gtk_box_pack_start (GTK_BOX (GTK_DIALOG (warning_dialog)->vbox),
- label, TRUE, TRUE, 4);
-
- label = gtk_label_new (_("Thanks\n"
- "The Ximian Evolution Team\n"));
- gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_RIGHT);
- gtk_misc_set_alignment(GTK_MISC(label), 1, .5);
-
- gtk_box_pack_start (GTK_BOX (GTK_DIALOG (warning_dialog)->vbox),
- label, TRUE, TRUE, 0);
-
- dont_bother_me_again_checkbox = gtk_check_button_new_with_label (_("Don't tell me again"));
-
- /* GTK sucks. (Just so you know.) */
- alignment = gtk_alignment_new (0.0, 0.0, 0.0, 0.0);
-
- gtk_container_add (GTK_CONTAINER (alignment), dont_bother_me_again_checkbox);
- gtk_box_pack_start (GTK_BOX (GTK_DIALOG (warning_dialog)->vbox),
- alignment, FALSE, FALSE, 0);
-
- gtk_widget_show_all (warning_dialog);
-
- g_signal_connect (warning_dialog, "response",
- G_CALLBACK (warning_dialog_response_callback),
- dont_bother_me_again_checkbox);
-}
-
-/* The following signal handlers are used to display the development warning as
- soon as the first view is created. */
-
-static void
-view_map_callback (GtkWidget *widget,
- void *data)
-{
- g_signal_handlers_disconnect_by_func (widget, G_CALLBACK (view_map_callback), data);
-
- show_development_warning (GTK_WINDOW (widget));
-}
-
-static void
-new_view_created_callback (EShell *shell,
- EShellView *view,
- void *data)
-{
- g_signal_handlers_disconnect_by_func (shell, G_CALLBACK (new_view_created_callback), data);
-
- g_signal_connect (view, "map", G_CALLBACK (view_map_callback), NULL);
-}
-
-
-/* This is for doing stuff that requires the GTK+ loop to be running already. */
-
-static gint
-idle_cb (void *data)
-{
- GSList *uri_list;
- GNOME_Evolution_Shell corba_shell;
- CORBA_Environment ev;
- EShellConstructResult result;
- EShellStartupLineMode startup_line_mode;
- GSList *p;
- gboolean have_evolution_uri;
- gboolean display_default;
- gboolean displayed_any;
-
- kill_old_wombat ();
-
- CORBA_exception_init (&ev);
-
- uri_list = (GSList *) data;
-
- if (! start_online && ! start_offline)
- startup_line_mode = E_SHELL_STARTUP_LINE_MODE_CONFIG;
- else if (start_online)
- startup_line_mode = E_SHELL_STARTUP_LINE_MODE_ONLINE;
- else
- startup_line_mode = E_SHELL_STARTUP_LINE_MODE_OFFLINE;
-
- shell = e_shell_new (evolution_directory, ! no_splash, startup_line_mode, &result);
- g_free (evolution_directory);
-
- switch (result) {
- case E_SHELL_CONSTRUCT_RESULT_OK:
- e_shell_config_factory_register (shell);
-
- g_signal_connect (shell, "no_views_left", G_CALLBACK (no_views_left_cb), NULL);
- g_object_weak_ref (G_OBJECT (shell), shell_weak_notify, NULL);
-
- if (!getenv ("EVOLVE_ME_HARDER"))
- g_signal_connect (shell, "new_view_created",
- G_CALLBACK (new_view_created_callback), NULL);
-
- corba_shell = bonobo_object_corba_objref (BONOBO_OBJECT (shell));
- corba_shell = CORBA_Object_duplicate (corba_shell, &ev);
- break;
-
- case E_SHELL_CONSTRUCT_RESULT_CANNOTREGISTER:
- corba_shell = bonobo_activation_activate_from_id (E_SHELL_OAFIID, 0, NULL, &ev);
- if (ev._major != CORBA_NO_EXCEPTION || corba_shell == CORBA_OBJECT_NIL) {
- e_notice (NULL, GTK_MESSAGE_ERROR,
- _("Cannot access the Ximian Evolution shell."));
- CORBA_exception_free (&ev);
- bonobo_main_quit ();
- return FALSE;
- }
- break;
-
- default:
- e_notice (NULL, GTK_MESSAGE_ERROR,
- _("Cannot initialize the Ximian Evolution shell: %s"),
- e_shell_construct_result_to_string (result));
- CORBA_exception_free (&ev);
- bonobo_main_quit ();
- return FALSE;
-
- }
-
- have_evolution_uri = FALSE;
- displayed_any = FALSE;
-
- for (p = uri_list; p != NULL; p = p->next) {
- const char *uri;
-
- uri = (const char *) p->data;
- if (strncmp (uri, E_SHELL_URI_PREFIX, E_SHELL_URI_PREFIX_LEN) == 0 ||
- strncmp (uri, E_SHELL_DEFAULTURI_PREFIX, E_SHELL_DEFAULTURI_PREFIX_LEN) == 0)
- have_evolution_uri = TRUE;
- }
-
- if (shell == NULL) {
- /* We're talking to a remote shell. If the user didn't ask us to open any particular
- URI, then open another view of the default URI. */
- if (uri_list == NULL)
- display_default = TRUE;
- else
- display_default = FALSE;
- } else {
- /* We're starting a new shell. If the user didn't specify any evolution: URIs to
- view, AND we can't load the user's previous settings, then show the default
- URI. */
- if (! have_evolution_uri) {
- e_shell_create_view (shell, NULL, NULL);
- display_default = TRUE;
- displayed_any = TRUE;
- } else {
- display_default = FALSE;
- }
- }
-
- for (p = uri_list; p != NULL; p = p->next) {
- const char *uri;
-
- uri = (const char *) p->data;
- GNOME_Evolution_Shell_handleURI (corba_shell, uri, &ev);
- if (ev._major == CORBA_NO_EXCEPTION)
- displayed_any = TRUE;
- else {
- g_warning ("CORBA exception %s when requesting URI -- %s",
- BONOBO_EX_REPOID (&ev), uri);
- CORBA_exception_free (&ev);
- }
- }
-
- g_slist_free (uri_list);
-
- if (display_default && ! displayed_any) {
- const char *uri;
-
- uri = E_SHELL_VIEW_DEFAULT_URI;
- GNOME_Evolution_Shell_handleURI (corba_shell, uri, &ev);
- if (ev._major != CORBA_NO_EXCEPTION)
- g_warning ("CORBA exception %s when requesting URI -- %s", BONOBO_EX_REPOID (&ev), uri);
- }
-
- CORBA_Object_release (corba_shell, &ev);
-
- CORBA_exception_free (&ev);
-
- if (shell == NULL)
- bonobo_main_quit ();
-
- return FALSE;
-}
-
-
-/* SIGSEGV handling.
-
- The GNOME SEGV handler will lose if it's not run from the main Gtk
- thread. So if we have to redirect the signal if the crash happens in another
- thread. */
-
-static void (*gnome_segv_handler) (int);
-static GStaticMutex segv_mutex = G_STATIC_MUTEX_INIT;
-static pthread_t main_thread;
-
-static void
-segv_redirect (int sig)
-{
- if (pthread_self () == main_thread)
- gnome_segv_handler (sig);
- else {
- pthread_kill (main_thread, sig);
-
- /* We can't return from the signal handler or the thread may
- SEGV again. But we can't pthread_exit, because then the
- thread may get cleaned up before bug-buddy can get a stack
- trace. So we block by trying to lock a mutex we know is
- already locked. */
- g_static_mutex_lock (&segv_mutex);
- }
-}
-
-static void
-setup_segv_redirect (void)
-{
- struct sigaction sa, osa;
-
- sigaction (SIGSEGV, NULL, &osa);
- if (osa.sa_handler == SIG_DFL)
- return;
-
- main_thread = pthread_self ();
-
- sa.sa_flags = 0;
- sigemptyset (&sa.sa_mask);
- sa.sa_handler = segv_redirect;
- sigaction (SIGSEGV, &sa, NULL);
- sigaction (SIGBUS, &sa, NULL);
- sigaction (SIGFPE, &sa, NULL);
-
- sa.sa_handler = SIG_IGN;
- sigaction (SIGXFSZ, &sa, NULL);
- gnome_segv_handler = osa.sa_handler;
- g_static_mutex_lock (&segv_mutex);
-}
-
-int
-main (int argc, char **argv)
-{
- struct poptOption options[] = {
- { "no-splash", '\0', POPT_ARG_NONE, &no_splash, 0,
- N_("Disable splash screen"), NULL },
- { "offline", '\0', POPT_ARG_NONE, &start_offline, 0,
- N_("Start in offline mode"), NULL },
- { "online", '\0', POPT_ARG_NONE, &start_online, 0,
- N_("Start in online mode"), NULL },
-#ifdef KILL_PROCESS_CMD
- { "force-shutdown", '\0', POPT_ARG_NONE, &killev, 0,
- N_("Forcibly shut down all evolution components"), NULL },
-#endif
- { "debug", '\0', POPT_ARG_STRING, &evolution_debug_log, 0,
- N_("Send the debugging output of all components to a file."), NULL },
-#if 0
- { "force-upgrade", '\0', POPT_ARG_NONE, &force_upgrade, 0,
- N_("Force upgrading of configuration files from Evolution 1.0.x"), NULL },
-#endif
- { "setup-only", '\0', POPT_ARG_NONE | POPT_ARGFLAG_DOC_HIDDEN,
- &setup_only, 0, NULL, NULL },
- POPT_AUTOHELP
- { NULL, '\0', 0, NULL, 0, NULL, NULL }
- };
- GSList *uri_list;
- GValue popt_context_value = { 0, };
- GnomeProgram *program;
- poptContext popt_context;
- const char **args;
-
- /* Make ElectricFence work. */
- free (malloc (10));
-
- bindtextdomain (GETTEXT_PACKAGE, EVOLUTION_LOCALEDIR);
- bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
- textdomain (GETTEXT_PACKAGE);
-
- program = gnome_program_init (PACKAGE, VERSION, LIBGNOMEUI_MODULE, argc, argv,
- GNOME_PROGRAM_STANDARD_PROPERTIES,
- GNOME_PARAM_POPT_TABLE, options,
- GNOME_PARAM_HUMAN_READABLE_NAME, _("Evolution"),
- NULL);
-
- if (start_online && start_offline) {
- fprintf (stderr, _("%s: --online and --offline cannot be used together.\n Use %s --help for more information.\n"),
- argv[0], argv[0]);
- exit (1);
- }
-
- if (killev) {
- execl (EVOLUTION_TOOLSDIR "/killev", "killev", NULL);
- /* Not reached */
- exit (0);
- }
-
- setup_segv_redirect ();
-
- if (evolution_debug_log) {
- int fd;
-
- fd = open (evolution_debug_log, O_WRONLY | O_CREAT | O_TRUNC, 0600);
- if (fd) {
- dup2 (fd, STDOUT_FILENO);
- dup2 (fd, STDERR_FILENO);
- close (fd);
- } else
- g_warning ("Could not set up debugging output file.");
- }
-
- glade_init ();
- e_cursors_init ();
- e_icon_factory_init ();
- e_proxy_init ();
-
- gnome_window_icon_set_default_from_file (EVOLUTION_IMAGES "/evolution-inbox.png");
-
- /* FIXME */
- evolution_directory = g_build_filename (g_get_home_dir (), "evolution", NULL);
-
- if (! e_setup (evolution_directory))
- exit (1);
- if (setup_only)
- exit (0);
-
- uri_list = NULL;
-
- g_value_init (&popt_context_value, G_TYPE_POINTER);
- g_object_get_property (G_OBJECT (program), GNOME_PARAM_POPT_CONTEXT, &popt_context_value);
- popt_context = g_value_get_pointer (&popt_context_value);
- args = poptGetArgs (popt_context);
- if (args != NULL) {
- const char **p;
-
- for (p = args; *p != NULL; p++)
- uri_list = g_slist_prepend (uri_list, (char *) *p);
- }
- uri_list = g_slist_reverse (uri_list);
- g_value_unset (&popt_context_value);
-
- e_config_upgrade(evolution_directory);
-
- gtk_idle_add (idle_cb, uri_list);
-
- bonobo_main ();
-
- return 0;
-}