diff options
author | nobody <nobody@localhost> | 2003-12-09 09:57:09 +0800 |
---|---|---|
committer | nobody <nobody@localhost> | 2003-12-09 09:57:09 +0800 |
commit | a4753c52a1711599bde4fdd7f857a5012e7e8f7f (patch) | |
tree | 75bb0caf9afd4b94842023406d6a7938c5d8b2b7 /shell | |
parent | 0031a7166cd0f3fc0cec0b60c468ca22a8c45b0b (diff) | |
download | gsoc2013-evolution-a4753c52a1711599bde4fdd7f857a5012e7e8f7f.tar.gz gsoc2013-evolution-a4753c52a1711599bde4fdd7f857a5012e7e8f7f.tar.zst gsoc2013-evolution-a4753c52a1711599bde4fdd7f857a5012e7e8f7f.zip |
This commit was manufactured by cvs2svn to create tagGTKHTML_3_1_8
'GTKHTML_3_1_8'.
svn path=/tags/GTKHTML_3_1_8/; revision=23832
Diffstat (limited to 'shell')
136 files changed, 0 insertions, 48623 deletions
diff --git a/shell/.cvsignore b/shell/.cvsignore deleted file mode 100644 index 4550ef0b74..0000000000 --- a/shell/.cvsignore +++ /dev/null @@ -1,27 +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-DataServer-common.c -Evolution-DataServer-skels.c -Evolution-DataServer-stubs.c -Evolution-DataServer.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 diff --git a/shell/ChangeLog b/shell/ChangeLog deleted file mode 100644 index 1264bada73..0000000000 --- a/shell/ChangeLog +++ /dev/null @@ -1,1031 +0,0 @@ -2003-12-06 JP Rosevear <jpr@ximian.com> - - * e-shell-importer.c: remove useless gal include - - * Makefile.am: Remove hard coded disable deprecated flags - -2003-12-04 Ettore Perazzoli <ettore@ximian.com> - - * e-shell.c (e_shell_prepare_for_quit): Implement. - - * Evolution-Component.idl (Component::requestQuit): Make sync - [i.e. just return a boolean instead of using a BonoboListener]. - -2003-12-03 Ettore Perazzoli <ettore@ximian.com> - - [Fix for #51619.] - - * e-shell.c (impl_Shell_createNewWindow): If component_id is the - empty string, pass NULL for it to e_shell_create_window() so we - get the default. - - * main.c (idle_cb): Pass an empty string for component_id to - createNewWindow() if the default_component_id is NULL. - -2003-12-03 Ettore Perazzoli <ettore@ximian.com> - - * Makefile.am: Move e-task-bar and e-task-widget into libeshell. - [Fix pointed out by Bernard Leach <leachbj@bouncycastle.org>.] - -2003-12-03 Ettore Perazzoli <ettore@ximian.com> - - * Evolution-Session.idl: Remove. - * Evolution-Activity.idl: Remove. - * Evolution-ShellComponent.idl: Remove. - * Evolution-ShellComponentDnd.idl: Remove. - * Evolution-ShellView.idl: Remove. - * Evolution-Shortcuts.idl: Remove. - * Evolution-Storage.idl: Remove. - * Evolution-StorageSetView.idl: Remove. - - * evolution-shell-view.c: Remove. - * evolution-shell-view.h: Remove. - - * evolution-session.c: Remove. - * evolution-session.h: Remove. - -2003-12-03 Ettore Perazzoli <ettore@ximian.com> - - * e-activity-handler.c: Do not #include - "e-shell-corba-icon-utils.h". - -2003-12-03 Ettore Perazzoli <ettore@ximian.com> - - * e-folder-list.c: Remove. - * e-folder-list.h: Remove. - - * e-folder-tree.c: Remove. - * e-folder-tree.h: Remove. - - * e-folder.c: Remove. - * e-folder.h: Remove. - - * evolution-shell-component.c: Remove. - * evolution-shell-component.h: Remove. - - * evolution-shell-client.c: Remove. - * evolution-shell-client.h: Remove. - - * evolution-folder-selector-button.c: Remove. - * evolution-folder-selector-button.h: Remove. - - * evolution-activity-client.c: Remove. - * evolution-activity-client.h: Remove. - - * evolution-storage.c: Remove. - * evolution-storage.h: Remove. - -2003-12-02 Ettore Perazzoli <ettore@ximian.com> - - * e-shell-window.c (e_shell_window_save_defaults): Implement. - (e_shell_window_new): Set the width/height from the GConf keys. - -2003-12-02 Rodney Dawes <dobey@ximian.com> - - * Makefile.am: Version the schemas - * apps_evolution_shell.schemas: Removed - * apps_evolution_shell.schemas.in.in: Added - -2003-12-01 Ettore Perazzoli <ettore@ximian.com> - - * e-activity-handler.c (e_activity_handler_operation_finished): - Argh, renamed from e_activity_client_operation_finished(). - (e_activity_handler_operation_started): Don't unref the pixbuf. - - * e-shell-window.c (setup_widgets): Hide the menu hint label. - - * e-activity-handler.c (init): Init to next_activity_id to 1 so - callers can rely on it being nonzero. - -2003-12-01 Ettore Perazzoli <ettore@ximian.com> - - * e-shell.c (struct _EShellPrivate): Remove member - activity_handler. - (setup_activity_interface): Remove. - (e_shell_init): Don't call. - (create_window): Don't attach the task bar to the activity - handler. - - * e-shell-window.c (struct _ComponentView): New member - statusbar_widget. - (struct _EShellWindowPrivate): Remove member task_bar. - (init_view): Get the status bar control from createControls and - put it in the ComponentView struct. - (setup_task_bar): New. - (setup_statusbar_notebook): New. - (switch_view): Switch the statusbar notebook too. - (impl_dispose): Add missing GTK_OBJECT() cast. - (e_shell_window_peek_task_bar): Remove. - - * Evolution-Component.idl (Component::createControls): New out arg - "statusbar_control"; this way components can provide their own - status bar. - - * e-activity-handler.c, e-activity-handler.h: Turn into a plain - GObject; translate all the CORBA methods into plain C methods. - - * Makefile.am: Move e-activity-handler to libeshell instead of it - being in the shell. - -2003-12-01 Rodney Dawes <dobey@ximian.com> - - * GNOME_Evolution_Shell.server.in.in: - * e-component-registry.c: - * e-shell-config.c: - * e-shell-shared-folder-picker-dialog.c: - * e-shell-startup-wizard.c: - * e-shell.h: - * e-user-creatable-items-handler.c: - * evolution-activity-client.c: - * evolution-storage.c: Use BASE_VERSION for repo_ids and OAFIIDs - -2003-11-30 Ettore Perazzoli <ettore@ximian.com> - - * e-shell.c (struct _EShellPrivate): New member offline_handler. - (offline_procedure_started_cb): New. - (offline_procedure_finished_cb): New. - (e_shell_go_offline): Implement (putting back the code that we had - #if 0'ed out). - (e_shell_go_online): Likewise. - - * e-shell-offline-handler.c, e-shell-offline-handler.h: Put back - in, massage for the changes in the Offline interface. - - * e-shell-offline-sync.c, e-shell-offline-sync.h: Remove from CVS. - - * Evolution-Offline.idl (SyncFolderProgressListener): Remove. - (Offline::SyncFolder): Remove. - -2003-11-23 JP Rosevear <jpr@ximian.com> - - * Makefile.am: remove gtk deprecated flag - -2003-11-20 Ettore Perazzoli <ettore@ximian.com> - - * e-shell.c (impl_Shell_handleURI): Reimplemented using - EComponentRegistry. - - * main.c (idle_cb): Create a new window even if we have a URI - list. - - * e-component-registry.c - (e_component_registry_peek_info_for_uri_schema): New. - -2003-11-19 Ettore Perazzoli <ettore@ximian.com> - - * e-component-registry.c (component_info_free): Free - ->uri_schemas. - (set_schemas): New function to get the list of URI schemas given a - component's ServerInfo. - (query_components): Call it. - - * e-component-registry.h (struct _EComponentInfo): Add - "uri_schemas" member. - - * Evolution-Component.idl (Component.handleURI): New method. - -2003-11-19 Ettore Perazzoli <ettore@ximian.com> - - * evolution-activity-client.c - (evolution_activity_client_construct): Get a raw - GNOME_Evolution_Shell as an arg instead of an - EvolutionShellClient. - (get_shell_activity_iface): New helper function. - (evolution_activity_client_construct): Use it. - -2003-11-19 Ettore Perazzoli <ettore@ximian.com> - - * e-shell-window.c (impl_dispose): Destroy the tooltips instead of - unreffing them. - - * e-shell.c (struct _EShellPrivate): New member activity_handler. - (setup_activity_interface): New. - (impl_dispose): Add a comment about why we must not unref - activity_handler here. - (create_window): Attach the task bar to the new window. - - * e-shell-window.c (e_shell_window_peek_task_bar): New. - - * e-activity-handler.c: Add back. - * e-activity-handler.h: Add back. - -2003-11-19 Ettore Perazzoli <ettore@ximian.com> - - * e-shell-window.c (struct _EShellWindowPrivate): New members - status_bar, offline_toggle, offline_toggle_image, menu_hint_label, - task_bar, tooltips. - (init): Initialize ->tooltips. - (impl_dispose): Unref ->tooltips. - (offline_toggle_clicked_callback): New. - (e_shell_window_new): Connect shell_line_status_changed_callback() - to the shell's "line_status_changed" signal. - (shell_line_status_changed_cb): New. - (setup_offline_toggle): New. - (setup_menu_hint_label): New. - (setup_task_bar): New. - (setup_status_bar): New. - (setup_widgets): Call setup_status_bar() and add add the status - bar to the window. - (update_offline_toggle_status): New. - (update_send_receive_sensitivity): New. - (load_icons): New. - (class_init): Call load_icons(). - (ui_engine_remove_hint_callback): New. - -2003-11-17 Ettore Perazzoli <ettore@ximian.com> - - * e-shell-window-commands.c: Add a pixmap for the toolbar - SendReceive button. - -2003-11-17 Ettore Perazzoli <ettore@ximian.com> - - * main.c (attempt_upgrade): New helper function. - (idle_cb): Call it if we have a local shell. Also, remove unused - variables. - - * e-shell.c (e_shell_attempt_upgrade): New. - - * Evolution-Component.idl (Component.upgradeFromeVersion): New. - -2003-11-17 Ettore Perazzoli <ettore@ximian.com> - - * e-shell-window-commands.c (command_open_new_window): New, - implement "OpenNewWindow" verb. - -2003-11-17 Ettore Perazzoli <ettore@ximian.com> - - * e-setup.c: Do not #include "e-local-folder.h". - - * Makefile.am: Don't build evolution-test-component for now since - it's all out of date. - - * main.c (evolution_debug_log): Make static instead of extern. - - * e-user-creatable-items-handler.c: #include - <bonobo/bonobo-control.h>. - - * e-shell.h: Do not include "e-uri-schema-registry.h" or - "evolution-shell-component-client.h". - * e-shell.c: Likewise. - - * e-shell.c (struct _EShellPrivate): Removed member - uri_schema_registry. - (impl_Shell_handleURI): #if 0 it out for now. - (e_shell_peek_uri_schema_registry): Disabled for now. - - * e-uri-schema-registry.c: Don't compile for now. - - * e-corba-storage-registry.c: Remove. - * e-corba-storage-registry.h: Remove. - * e-corba-storage.c: Remove. - * e-corba-storage.h: Remove. - * e-folder-dnd-bridge.c: Remove. - * e-folder-dnd-bridge.h: Remove. - * e-folder-selection-dialog.c: Remove. - * e-folder-selection-dialog.h: Remove. - * e-folder-type-registry.c: Remove. - * e-folder-type-registry.h: Remove. - * e-local-folder.c: Remove. - * e-local-folder.h: Remove. - * e-local-storage.c: Remove. - * e-local-storage.h: Remove. - * e-shell-folder-selection-dialog.c: Remove. - * e-shell-folder-selection-dialog.h: Remove. - * e-shell-view.c: Remove. - * e-shell-view.h: Remove. - * e-storage-browser.c: Remove. - * e-storage-browser.h: Remove. - * e-storage-set-view.c: Remove. - * e-storage-set-view.h: Remove. - * e-storage-set.c: Remove. - * e-storage-set.h: Remove. - * e-storage.c: Remove. - * e-storage.h: Remove. - * evolution-shell-component-client.c: Remove. - * evolution-shell-component-client.h: Remove. - * evolution-shell-component-dnd.c: Remove. - * evolution-shell-component-dnd.h: Remove. - * evolution-storage-listener.c: Remove. - * evolution-storage-listener.h: Remove. - * evolution-storage-set-view-listener.c: Remove. - * evolution-storage-set-view-listener.h: Remove. - -2003-11-13 Ettore Perazzoli <ettore@ximian.com> - - * main.c (DEVELOPMENT_WARNING): Define. - -2003-11-13 Ettore Perazzoli <ettore@ximian.com> - - * e-shell.c (e_shell_send_receive): New. - - * Evolution-Component.idl (Component.sendAndReceive): New. - -2003-11-13 Ettore Perazzoli <ettore@ximian.com> - - * e-user-creatable-items-handler.c (ensure_menu_items): Reverse - the list so we get the items in the same order they were given to - us [since we are using g_slist_prepend() to build the list]. - -2003-11-13 Ettore Perazzoli <ettore@ximian.com> - - * Evolution-Component.idl (GNOME.Evolution.Component.UnknownType): - New exception. - -2003-11-13 Ettore Perazzoli <ettore@ximian.com> - - * e-shell-window.c: New signal "component_changed". - (class_init): Install. - (switch_view): Emit. - (e_shell_window_new): Call - e_user_creatable_items_handler_attach_menus() to attach the - "New..." menus. - (e_shell_window_peek_current_component_id): New. - (e_shell_window_peek_shell): Add precondition. - (e_shell_window_peek_current_component_id): Likewise. - (e_shell_window_peek_bonobo_ui_component): Likewise. - - * e-user-creatable-items-handler.c: New. - * e-user-creatable-items-handler.h: New. - - * e-shell-window.h: #include <bonobo/bonobo-ui-component.h>. - - * e-shell.c (struct _EShellPrivate): Add member - user_creatable_items_handler. - (e_shell_get_user_creatable_items_handler): Remove. - (e_shell_peek_user_creatable_items_handler): New. - - * Evolution.idl: Don't #include Evolution-ShellComponent.idl. - - * Evolution-Component.idl (GNOME.Evolution.RequestCreateItem): New - method. - (GNOME.Evolution.creatableItems): New attribute. - - * e-shell-user-creatable-items-handler.c: Remove. - * e-shell-user-creatable-items-handler.h: Remove. - -2003-11-12 Ettore Perazzoli <ettore@ximian.com> - - * e-shell-window.c (e_shell_window_switch_to_component): Call - e_sidebar_select_button() instead of switch_view(). - - * e-sidebar.c (update_buttons): New helper function. - (e_sidebar_select_button): New. - -2003-11-11 JP Rosevear <jpr@ximian.com> - - * main.c (kill_dataserver): kill the right thing - (kill_old_dataserver): rename and check the version correctly - -2003-11-10 Ettore Perazzoli <ettore@ximian.com> - - * main.c: Added a new "-c" command-line arg. - (idle_cb): If the arg is specified, open the component with that - id/alias. - - * e-shell.c (impl_Shell_createNewView): New, implementation for - the Shell::createNewView() CORBA method. - (e_shell_class_init): Install. - (e_shell_create_window): Get a component_id arg. - - * e-shell-window.c (e_shell_window_new): Get a component_id arg - and create the window with that component activated if not NULL. - - * Evolution-Shell.idl (createNewView): Remove. - (createNewWindow): New. - -2003-11-10 Ettore Perazzoli <ettore@ximian.com> - - * e-shell-window.c (struct _ComponentView): New member - "component_alias". - (component_view_new): Get a new "alias" arg, set the member in the - struct accordingly. - (component_view_free): Free ->component_alias. - (setup_widgets): Pass the alias from the ComponentInfo to - e_component_view(). - (switch_view): New utility function. - (sidebar_button_selected_callback): Use it. - (e_shell_window_switch_to_component): New public function. - (e_shell_window_new): Switch to the component whose id is in the - /apps/evolution/shell/view_defaults/component_id GConf key. - - * apps_evolution_shell.schemas: Removed view_defaults/folder_path. - New key view_defaults/component_id. - - * e-component-registry.c (component_info_free): Free ->alias. - (component_info_new): Get an "alias" arg and set the member - accordingly. - (query_components): Remove debugging messages. Get an - "evolution:component_alias" property from the component and set - the alias from that. - - * e-component-registry.h (struct _EComponentInfo): New member - "alias". - -2003-11-07 JP Rosevear <jpr@ximian.com> - - * Makefile.am: don't include top level libical - -2003-11-07 JP Rosevear <jpr@ximian.com> - - * Makefile.am: make sure the marshal header is in the sources too - -2003-11-07 JP Rosevear <jpr@ximian.com> - - * main.c: use e-d-s idl to check interface version - - * Makefile.am: build e-d-s idl - -2003-11-03 Ettore Perazzoli <ettore@ximian.com> - - * e-shell-shared-folder-picker-dialog.c (setup_name_selector): - Append "_2" to the SelectNames OAFIID. - -2003-11-03 Ettore Perazzoli <ettore@ximian.com> - - * GNOME_Evolution_Shell.server.in.in: Use "evolution2:config_item" - attributes instead of "evolution:config_item" ones. - - * e-shell-settings-dialog.c (load_pages): Expect - "evolution2:config_item" properties instead of - "evolution:config_item" so they do not conflict with 1.4's. - -2003-10-29 Dan Winship <danw@ximian.com> - - * Evolution-Component.idl: declare an exception for createControls - to return, so we don't have to just crash if it fails. - -2003-10-28 Rodney Dawes <dobey@ximian.com> - - * Makefile.am: Add e-shell-view.h to evolution_SOURCES - -2003-10-28 Rodney Dawes <dobey@ximian.com> - - * Makefile.am: Fix automake warning, and add - e-shell-user-creatable-items-handler.h to evolution_SOURCES - -2003-10-23 Chris Toshok <toshok@ximian.com> - - * e-component-registry.c (query_components): handle the case where - label == NULL, and set it to _("Unknown"). - -2003-10-22 Ettore Perazzoli <ettore@ximian.com> - - * e-sidebar.c (e_sidebar_add_button): Add a little border to the - buttons so it looks nicer. - - * e-component-registry.c (query_components): Set an icon from the - "evolution:button_icon" attribute. - -2003-10-22 Ettore Perazzoli <ettore@ximian.com> - - * e-shell.c (struct _EShellPrivate): New member - "component_registry". - (e_shell_construct): Don't call e_shell_unregister_all(). - (e_shell_unregister_all): Removed. - (e_shell_init): Use g_new0(), removed a bunch of NULL/FALSE - assignments. - (e_shell_init): Initialize the component_registry. - (e_shell_peek_uri_schema_registry): Rename from - e_shell_get_uri_schema_registry. - (e_shell_peek_component_registry): New. - (setup_components): Remove. - (e_shell_construct): Don't call. - - * main.c (no_windows_left_cb): Don't call e_shell_unregister_all(). - - * e-shell.c (parse_default_uri): Removed. - (parse_evolution_uri): Removed. - (e_shell_parse_uri): Removed. - - * e-component-info.c: Remove. - * e-component-info.h: Remove. - -2003-10-22 Jeffrey Stedfast <fejj@ximian.com> - - * e-storage-set-view.c (impl_tree_drag_data_received): Emit the - right signal. - (impl_tree_drag_data_get): Same. - -2003-10-22 Ettore Perazzoli <ettore@ximian.com> - - * importer/intelligent.c (create_gui): Make the scrolled window - have a GTK_SHADOW_IN shadow. - -2003-10-22 Ettore Perazzoli <ettore@ximian.com> - - * e-shell-window.c (setup_widgets): Make the notebooks not have - borders. - (setup_widgets): Fix typo: e_get_language_list() returns a GSList, - not a GList. - -2003-10-22 Ettore Perazzoli <ettore@ximian.com> - - * e-storage-browser.c (struct _EStorageBrowserPrivate): New member - "storage_set_view_scrolled". - (e_storage_browser_new): Put the storage_set_view in a scrolled - window. Set priv->storage_set_view_scrolled to this scrolled - window. - (e_storage_browser_peek_tree_widget_scrolled): New. - -2003-10-22 Ettore Perazzoli <ettore@ximian.com> - - * e-sidebar.c (PADDING): Increase to 6 pixels. - (button_toggled_callback): Add a cast. - (e_sidebar_set_selection_widget): Handle the NULL widget case - properly. - (impl_remove): New, implementation for GtkContainer::remove. - (do_layout): Add padding between the selection_widget and the - button box. - -2003-10-22 Ettore Perazzoli <ettore@ximian.com> - - * e-shell-window.c (struct _ComponentView): New member button_id. - (struct _EShellWindowPrivate): New member sidebar. - (component_new_new): Get a button_id arg. - (component_button_clicked_callback): Removed. - (sidebar_button_selected_callback): New. - (create_component_button): Removed. - (setup_widget): Set up the sidebar using ESidebar and hook up its - "button_selected" signal. Also get the component name from a - property on the server info. - (e_shell_window_new): Use BASE_VERSION for the version in the app - name instead of hardcoding "1.5". - - * e-sidebar.c: New. - * e-sidebar.h: New. - -2003-10-22 Ettore Perazzoli <ettore@ximian.com> - - * GNOME_Evolution_Shell.server.in.in: Append a _2 to all the IIDs. - - * e-shell.h (E_SHELL_OAFIID): Change to "GNOME_Evolution_Shell_2" - so it does not conflict with the old IID. - -2003-10-22 Jeffrey Stedfast <fejj@ximian.com> - - * e-shell-window.c (e_shell_window_new): Change to "evolution-1.5" - - although, ideally, this should be a config.h macro or something. - -2003-10-22 Dan Winship <danw@ximian.com> - - * main.c: Remove e_proxy_init call. (e-proxy is gone now) - -2003-10-17 Jeffrey Stedfast <fejj@ximian.com> - - * e-storage-set-view.c: Rewrote the drag & drop code. - -2003-10-21 Not Zed <NotZed@Ximian.com> - - * e-storage-browser.c (e_storage_browser_show_path): ref the view - since removing it from the hashtable will unref it. - -2003-10-09 Jeffrey Stedfast <fejj@ximian.com> - - * Makefile.am: INCLUDE path fixes for changes made to libical - build. - -2003-09-30 Ismael Olea <ismael@olea.org> - - * e-shell-about-box.c: fixed encoding for Spanish translators. - -2003-09-29 Ettore Perazzoli <ettore@ximian.com> - - * e-folder-selection-dialog.c, e-folder-selection-dialog.h: New - files, based on e-shell-folder-selection-dialog.[ch]. These don't - require the shell, they just need an EStorageSet to work. - -2003-09-23 Charles Zhang <charles.zhang@sun.com> - - * e-shell-startup-wizard.c (e_shell_startup_wizard_create): connect - to "key_press_event" signal with key_press_event_callback. - (key_press_event): Handle `ESC` key press event. [#48145] - -2003-09-22 Hans Petter Jansson <hpj@ximian.com> - - * Makefile.am (evolution_LDADD): libical.la -> libical-evolution.la - -2003-09-12 Frederic Crozat <fcrozat@mandrakesoft.com> - - * e-config-upgrade.c: (utf8_reencode), (upgrade_xml_1_2_rec), - (e_config_upgrade): - Fix migration of shortcuts.xml which was incorrectly encoded by - libxml1. (Mdk bug #4927) - -2003-09-11 Ettore Perazzoli <ettore@ximian.com> - - * e-storage-set-view.c (impl_right_click): If the - right_click_row_path is not NULL (i.e. a menu is being popped up - already), don't pop up the menu again. [#48388] - -2003-09-11 Ettore Perazzoli <ettore@ximian.com> - - [#47875, thanks to Calvin Liu for figuring this out.] - - * e-shortcuts.c (e_shortcuts_add_default_shortcuts): Use the - group_num arg, so it gets added to the proper group. - (e_shortcuts_add_default_group): Pass the actual group number to - e_shortcuts_add_default_shortcuts(). - -2003-09-11 Hans Petter Jansson <hpj@ximian.com> - - * Makefile.am (evolution_LDADD): libical-evolution.la -> libical.la - -2003-09-05 Yuedong Du <yuedong.du@sun.com> - - * e-shell-importer.c: (importer_file_page_new), - (importer_type_page_new), (show_import_wizard): Use - gtk_label_new_with_mnemonic() to replace gtk_label_new(). Use - gtk_label_set_mnemonic_widget() to set up label<-> entry - relationship. Change gtk_button_set_label() to - gtk_button_set_use_underline() and gtk_button_set_label(). Change - gtk_radio_button_new_with_label_from_widget() to - gtk_radio_button_new_with_mnemonic_from_widget(). fix bug #47867 - -2003-08-18 Ettore Perazzoli <ettore@ximian.com> - - * e-shell-window.c: New member current_view in struct - EShellWindowPrivate. - (init_view): Set it to the newly added view. Also, switch the - notebooks to the new page. - (component_button_clicked_callback): Set current_view here as - well, for existing views. - (component_view_activate): New. - (component_view_deactivate): New. - (init_view): Deactivate existing view, activate new selected view. - (component_button_clicked_callback): Likewise. - (init_view): Set the component_iface to CORBA_OBJECT_NIL in the - view if you cannot create the controls. - -2003-08-17 Ettore Perazzoli <ettore@ximian.com> - - * e-shell-window.c (setup_widgets): Pass TRUE for @resize to - gtk_paned_pack2() for the view notebook. - -2003-07-29 Ettore Perazzoli <ettore@ximian.com> - - * e-splash.c, e-splash.h: Removed from the build. - -2003-07-25 Ettore Perazzoli <ettore@ximian.com> - - * e-shell.c (e_shell_close_all_windows): Oops. Traverse the - window list with a local "next" variable like we did in the - original code. Otherwise, we crash because the list is being - modified at each gtk_widget_destroy(). - -2003-07-25 Ettore Perazzoli <ettore@ximian.com> - - * e-storage-browser.c (class_init): Set up "page_switched" signal. - (e_storage_browser_show_path): Emit "page_switched". - - * e-storage-browser.h: New signal "page_switched". - -2003-07-25 Ettore Perazzoli <ettore@ximian.com> - - * e-shell-window.c: Removed member ui_container from - EShellWindowPrivate. - (e_shell_window_peek_shell): New. - (e_shell_window_peek_bonobo_ui_component): New. - (e_shell_window_new): Don't set the ui_container anymore, just get - it ourselves. Also call e_shell_window_commands_setup(). - - * e-shell-window-commands.c, e-shell-window-commands.h: New files - implementing the commands for the shell windows. - - * e-shell.c (e_shell_close_all_windows): Renamed from - e_shell_destroy_all_windows(). - - * main.c (idle_cb): Create a new window using - e_shell_create_window(). - - * e-shell-importer.h: Define _E_SHELL_IMPORTER_H_ to prevent - multiple inclusion, instead of __IMPORTER_H__. Also, do not - #include <bonobo/bonobo-ui-component.h>. - - * e-shell-importer.c (e_shell_importer_start_import): Renamed from - show_import_wizard(). Don't get any args. - -2003-07-24 Ettore Perazzoli <ettore@ximian.com> - - * main.c: Remove the global evolution_directory variable. - (main): Just declare, assign and free the evolution_directory - variable here. Also, use g_idle_add() instead of gtk_idle_add(). - (idle_cb): Don't pass the evolution directory path to - e_shell_new() anymore, since that arg is gone. - - * e-shell.c: Remove member local_directory from EShellPrivate. - (impl_finalize): Don't free. - (e_shell_init): Don't NULL. - (e_shell_construct): Removed arg local_directory. - (e_shell_new): Likewise. - (e_shell_construct): Don't call e_setup_check_config() here. - (e_shell_get_local_directory): Removed. - -2003-07-24 Ettore Perazzoli <ettore@ximian.com> - - * main.c: Removed global variable "no_splash". - (idle_cb): Updated to not pass the splash argument to - e_shell_new(). - (main): Removed "--no-splash" option. - - * e-shell.c: Removed members storage_set, local_storage, - summary_storage, folder_type_registry, component_registry, - corba_storage_registry from struct EShellPrivate. - (setup_corba_storages): Removed. - (e_shell_construct): Don't invoke. - (setup_local_storage): Removed. - (e_shell_construct): Don't invoke. Also, removed initialization - for all the removed members. - (e_shell_new): No priv->storage_set anymore. - (e_shell_get_storage_set): Removed. - (e_shell_get_local_storage): Removed. - (e_shell_get_folder_type_registry): Removed. - (set_owner_on_components): Removed. - (set_interactive): Removed contents; do nothing for now. - (pop_up_activation_error_dialog): Removed. - (e_shell_construct): Removed arg show_splash. Do not create a - splash dialog at all. - (e_shell_new): Removed arg show_splash here as well. - (e_shell_construct): No folder type registry handling here - anymore. - (setup_components): Removed splash arg. - (save_settings_for_components): Removed. - (save_settings_for_component): Removed. - (save_misc_settings): Removed. - (e_shell_save_settings): Moved the code in here. - (e_shell_component_maybe_crashed): Removed. - (e_shell_send_receive): Removed. - (e_shell_get_component_registry): Removed. - (prepare_for_quit_callback): Removed. - - * evolution-storage-set-view.c: Removed from build. - * evolution-storage-set-view.h: Removed from build. - * evolution-storage-set-view-factory.c: Removed from build. - * evolution-storage-set-view-factory.h: Removed from build. - - * e-component-registry.c, e-component-registry.h: Removed from - build. - - * e-shell-folder-creation-dialog.c: Removed from build. - * e-shell-folder-creation-dialog.h: Removed from build. - - * e-shell-folder-selection-dialog.c: Removed from build. - * e-shell-folder-selection-dialog.h: Removed from build. - -2003-07-24 Ettore Perazzoli <ettore@ximian.com> - - * e-setup.c: Do not #include "e-shell-config.h". - - * main.c (idle_cb): Do not register the config factory. - - * e-shell.c: Removed members offline_handler, shortcuts and - corba_shortcuts from EShellPrivate. - (setup_shortcuts_interface): Removed. - (storage_set_moved_folder_callback): Removed. - (e_shell_construct): Don't connect. Also, no need to set up the - shortcuts either. - (e_shell_get_shortcuts): Removed. - (offline_procedure_started_cb): Removed. - (offline_procedure_finished_cb): Removed. - (e_shell_go_offline): Just assert for now. - (e_shell_go_online): Same. - - * e-shell-config-autocompletion.c: Removed. - * e-shell-config-autocompletion.h: Removed. - - * e-shell-config-default-folders.c: Removed. - * e-shell-config-default-folders.h: Removed. - - * e-shell-config-folder-settings.c: Removed. - * e-shell-config-folder-settings.h: Removed. - - * e-shell-config.c, e-shell-config.h: Removed. - - * e-corba-shortcuts.c, e-corba-shortcuts.h: Removed. - - * e-shortcuts-view-model.c, e-shortcuts-view-model.h: Removed. - - * e-shortcuts-view.c, e-shortcuts-view.h: Removed. - - * e-shortcuts.c, e-shortcuts.h: Removed. - - * e-shell-offline-handler.c, e-shell-offline-handler.h: Removed. - - * e-shell-offline-sync.c, e-shell-offline-sync.h: Removed. - - * e-shell-config-offline.c, e-shell-config-offline.h: Removed. - -2003-07-24 Ettore Perazzoli <ettore@ximian.com> - - * e-shell.c: Renamed signal "new_view_created" to - "new_window_created". Renamed "no_views_left" to - "no_windows_left". Renamed EShellPrivate member "views" to - "windows". Removed member user_creatable_items_handler. - (notify_no_windows_left_idle_cb): Renamed from - notify_no_views_left_idle_cb. Emit "no_windows_left". - (impl_Shell_createNewView): Raise an InternalError exception. - (window_delete_event_cb): Renamed from view_delete_event_cb. - (window_weak_notify): Renamed from view_weak_notify. - (create_view): Removed. - (create_window): New. Creates a new EShellWindow. - (e_shell_create_view): Removed. - (e_shell_create_window): New. - (e_shell_request_close_view): Removed. - (e_shell_request_close_window): New. - (e_shell_destroy_all_windows): Renamed from - e_shell_destroy_all_views. - (e_shell_component_maybe_crashed): Get an EShellWindow parameter, - instead of an EShellView. - (e_shell_go_offline): Likewise. - (e_shell_go_online): Likewise. - (e_shell_show_settings): Likewise. - (get_icon_path_for_component_info): Removed. - (setup_components): Do not do the user_creatable_items_handler - stuff here. - (e_shell_construct): Don't create the EUserCreatableItemsHandler - here. - (e_shell_get_user_creatable_items_handler): Crash when you get - here. - - * e-shell-user-creatable-items-handler.c: Removed. - * e-shell-user-creatable-items-handler.h: Removed. - * e-shell-shared-folder-picker-dialog.c: Removed. - * e-shell-shared-folder-picker-dialog.h: Removed. - * e-shell-view.c, e-shell-view.h: Removed. - * e-shell-view-menu.c, e-shell-view-menu.h: Removed. - * e-shell-folder-commands.c, e-shell-folder-commands.h: Removed. - * e-shell-importer.c, e-shell-importer.h: Removed. - - * main.c (new_window_created_callback): Renamed from - new_view_created_callback. - (window_map_callback): Renamed from view_map_callback. - (idle_cb): Connect to "new_window_created" instead of - "new_view_created". - (no_windows_left_cb): Renamed from no_views_left_cb. - (idle_cb): Connect to "no_windows_left" instead of - "no_views_left". - - * e-shell-offline-handler.c: Changed the type of the - parent_shell_view member of EShellOfflineHandlerPrivate to - GtkWindow and renamed it to parent_window. - (e_shell_offline_handler_put_components_offline): Just get a - GtkWindow arg instead of an EShellView arg. - -2003-07-24 Ettore Perazzoli <ettore@ximian.com> - - * evolution-shell-client.c - (evolution_shell_client_create_storage_set_view): Just crash when - you get here. - (evolution_shell_client_get_pixbuf_for_type): Likewise. - (evolution_shell_client_set_line_status): Likewise. - (evolution_shell_client_get_local_storage): Likewise. - (evolution_shell_client_get_shortcuts_interface): Likewise. - (evolution_shell_client_get_storage_registry_interface): Likewise. - (evolution_shell_client_get_activity_interface): Likewise. - (evolution_shell_client_user_select_folder): Likewise. - (evolution_shell_client_new): Likewise. - (evolution_shell_client_construct): Likewise. - (query_shell_interface): Removed. - (init): Do nothing. - (class_init): Do nothing. - (unref_pixbuf): Removed. - (impl_dispose): Removed. - (impl_finalize): Removed. - (user_select_folder): Removed. - (count_string_items): Removed. - (create_folder_selection_listener_interface): Removed. - (init_FolderSelectionListener_vtables): Removed. - (impl_FolderSelectionListener_cancel): Removed. - (impl_FolderSelectionListener_selected): Removed. - (query_shell_interface): Removed. - - * e-shell.c (impl_Shell_getLocalStorage): Removed. - (impl_Shell_createStorageSetView): Removed. - (impl_Shell_getIconByType): Removed. - (impl_Shell_getComponentByType): Removed. - (impl_Shell_selectUserFolder): Removed. - (e_shell_class_init): Do not install removed method impls. - (folder_selection_dialog_cancelled_cb): Removed. - (folder_selection_dialog_folder_selected_cb): Removed. - - * Evolution-Shell.idl (getLocalStorage): Removed - (createStorageSetView): Removed. - (selectUserFolder): Removed. - (getIconByType): Removed. - (getComponentByType): Removed. - (FolderSelectionListener): Removed. - - * Evolution-Component.idl (requestQuit, interactive): New methods. - -2003-07-24 Ettore Perazzoli <ettore@ximian.com> - - * e-shell.c: Removed activity_handler member from EShellPrivate. - (setup_activity_interface): Removed. - (e_shell_construct): Don't call. - (create_view): Do not call e_activity_handler_attach_task_bar - here. - - * e-activity-handler.c, e-activity-handler.h: Removed. - -2003-07-24 Yuedong Du <yuedong.du@sun.com> - - * e-shell-offline-handler.c: (dialog_response_cb): fix crash when - user escape the dialog. see bug #46700. - -2003-07-23 Ettore Perazzoli <ettore@ximian.com> - - * e-folder.c (e_folder_new): Accept a NULL description. - - * main.c (idle_cb): Create a new EShellWindow and show it. - - * e-storage.c: New signal "async_open_folder". - (impl_async_open_folder): Removed. - (class_init): Declare new signal. - - * e-shell.c (setup_components): Don't actually activate any - components. - - * e-storage-browser.c, e-storage-browser.h: New. - - * e-shell-window.c, e-shell-window.h: New. - - * e-shell-marshal.list: Add an entry for - NONE:STRING,POINTER,POINTER. - - * Evolution.idl: Include Evolution-Component.idl. - - * Evolution-Component.idl: New interface for Evolution components. - -2003-07-23 Dan Winship <danw@ximian.com> - - * Makefile.am: Use EVO_MARSHAL_RULE - - * e-shell-importer.c (prepare_intelligent_page): Fix a warning - -2003-07-22 Antonio Xu <antonio.xu@sun.com> - - * e-shell-startup-wizard.c (e_shell_startup_wizard_create): connect - to "delete_event" signal with startup_wizard_delete. [#46284] - -2003-07-22 Antonio Xu <antonio.xu@sun.com> - - * e-shell-importer.c: (show_import_wizard): use - g_signal_connect_after to connect "prepare" signal. - (prepare_intelligent_page): Display some error log and disable - forward button rather than jump to finish page. [#46017] - -2003-07-15 Antonio Xu <antonio.xu@sun.com> - - * e-shell-startup-wizard.c (e_shell_startup_wizard_create): connect - "back" signal to back_finish_func in finish page. - (back_finish_func): handle "back" signal. - (prepare_importer_page): Jump to finish page when running equal zero. - [#46026] - -2003-07-17 Dan Winship <danw@ximian.com> - - * e-shell-user-creatable-items-handler.c (free_menu_items): free - the folder_type - - * e-splash.c (e_splash_new): Unref the pixbuf. - - * evolution-shell-component.c (impl_finalize): Add some missing - frees. - (user_creatable_item_type_free): free the tooltip - -2003-07-09 Ettore Perazzoli <ettore@ximian.com> - - * e-shell-folder-commands.c (e_shell_command_rename_folder): Do - not overwrite an existing folder. Also, cleaned up the code a - bit. [#45982] - -2003-06-25 Chris Toshok <toshok@ximian.com> - - * e-config-upgrade.c: add general_map and a reference to it in - gconf_remap_list. Should fix 44477. - -2003-06-19 Dan Winship <danw@ximian.com> - - * e-folder-tree.c (e_folder_tree_add): Don't leak parent_path, - even on error - -2003-06-16 Frederic Crozat <fcrozat@mandrakesoft.com> - - * Makefile.am: - Add missing skel/stubs to BUILD_SOURCES (bug #44717). - -2003-06-05 Not Zed <NotZed@Ximian.com> - - ** For #42691. - - * Makefile.am (%.server.in): use implicit rule. - (BUILT_SOURCES): added server_DATA. - -2003-05-22 Not Zed <NotZed@Ximian.com> - - * e-config-upgrade.c (CONF_MAJOR, CONF_MINOR, CONF_REVISION): Set - to 1.4.0 for release. - -2003-06-10 Larry Ewing <lewing@ximian.com> - - * e-corba-storage-registry.c (listener_notify): don't leak nr.name. - diff --git a/shell/ChangeLog.pre-1-4 b/shell/ChangeLog.pre-1-4 deleted file mode 100644 index c7cfb0f830..0000000000 --- a/shell/ChangeLog.pre-1-4 +++ /dev/null @@ -1,15363 +0,0 @@ -2003-05-22 Ettore Perazzoli <ettore@ximian.com> - - * e-shell-about-box.c: Add Mark Gordon. - -2003-05-20 Ettore Perazzoli <ettore@ximian.com> - - [#43322] - - * e-shell-shared-folder-picker-dialog.c (storage_weak_notify): Set - the storage member to NULL. - (shell_weak_notify): Set the shell member to NULL. - (cleanup_discovery): g_object_weak_unref() shell, parent and - storage. - -2003-05-19 Ettore Perazzoli <ettore@ximian.com> - - * main.c: Removed "forced_upgrade" unused variable. - (show_development_warning): Put in a DEVELOPMENT_WARNING cpp - conditional. - (warning_dialog_response_callback): Likewise. - (view_map_callback): Likewise. - (new_view_created_callback): Likewise. - (idle_cb) [DEVELOPMENT_WARNING]: Do not connect - new_view_created_callback() to the "new_view" shell signal - anymore. - - * Makefile.am (install-evolution) [DEFAULT_BINARY]: Make a - symbolic link from evolution to evolution-$(BASE_VERSION). - - [#43216] - - * e-shell-folder-creation-dialog.c (dialog_data_destroy): - g_object_weak_unref shell and dialog if they are not NULL. - (dialog_destroy_notify): Set ->dialog to NULL in all cases. - -2003-05-19 Anna Marie Dirks <anna@ximian.com> - - * e-corba-config-page.c: Remove some padding which I incorrectly - added to the wrong vbox. This shoulda been fixed in - widgets/misc/e-multi-config-dialog.c . (And it is, now.) - -2003-05-17 Ettore Perazzoli <ettore@ximian.com> - - * e-storage-set-view.c (e_storage_set_view_set_show_checkboxes): - Reallocate the "expansions" member of ETreeState as well, to avoid - a memory error. [#43119] - -2003-05-15 Ettore Perazzoli <ettore@ximian.com> - - * e-shell.c (parse_default_uri): Protect against the component - name having slashes in it. - - * e-shell-view.c (display_uri): Protect against invalid "default:" - URIs. [#43079] - -2003-05-15 Rodrigo Moya <rodrigo@ximian.com> - - * main.c: #ifdef'ed wombat killing code, depending on whether - KILL_PROCESS_CMD is defined or not. - (kill_wombat): kill also the alarm daemon process. - -2003-05-15 Ettore Perazzoli <ettore@ximian.com> - - [Patch from Antonio Xu <antonio.xu@sun.com>, #42491] - - * e-config-upgrade.c (upgrade_xml_1_2_rec): Make it compile on - Forte. - -2003-05-14 JP Rosevear <jpr@ximian.com> - - * e-shell.c (save_settings_for_component): release the interface - if we got it - - * e-shell-view.c: include bonobo-exception.h - (impl_dispose): release and unref the shell view corba interface - (init): init to CORBA_OBJECT_NIL - (e_shell_view_get_corba_interface): return the corba interface - (setup_corba_interface): release the existing shell view, add as - an interface and then query to get it back - (get_view_for_uri): release and unref the control once we create - the widget with it - - * e-corba-storage.c (storage_listener_servant_new): don't ref ourselves - (storage_listener_servant_free): don't unref ourselves - (impl_dispose): free the servant info - - * e-corba-storage-registry.c - (impl_StorageRegistry_getStorageByName): we need to ref as well as - duplicate since we didn't create the storage here - -2003-05-09 Jeremy Katz <katzj@redhat.com> - - * main.c: Add a #include to fix a warning. - - * e-shell-offline-handler.c (update_dialog_clist): Use a list - store instead of a tree model for the store. - -2003-05-08 Ettore Perazzoli <ettore@ximian.com> - - [#42342] - * e-shell-view.c (update_send_receive_sensitivity): New function - to update the Send/Receive menu and toolbar items according to the - current line status. - (e_shell_view_construct): Call it here to set up the initial - state. - (shell_line_status_changed_cb): Use it here as well. - -2003-05-08 Ettore Perazzoli <ettore@ximian.com> - - [#36956] - * e-shell-view.c (update_for_current_uri): Remove the version - number from the window title. - - [#42518] - * e-shell-view.c (handle_current_folder_removed): Casefold the - Inbox name only once, instead of once per iteration. Removed the - spurious slash that was being passed in the path in the Inbox case - and prevented it from working. Added missing slash in the path - for the storage case. Casefold the path including the slash, - since we compare against a string that does include the slash. - (storage_set_removed_folder_callback): Remove the notebook page - before calling handle_current_folder_removed(), instead of after; - otherwise, the notebook page number we have might not be valid - anymore. - - * e-shell-folder-creation-dialog.c (setup_dialog): Set the default - response for the dialog to GTK_RESPONSE_OK. - -2003-05-07 Ettore Perazzoli <ettore@ximian.com> - - * e-shell-folder-commands.c (e_shell_command_add_to_shortcut_bar): - Do use the supplied folder_path to determine the unread count, if - not NULL. [#42465] - -2003-05-07 JP Rosevear <jpr@ximian.com> - - * e-shell-folder-commands.c (delete_dialog): don't pass - NO_SEPARATOR flag as per gtkmessagedialog warning - -2003-05-02 Not Zed <NotZed@Ximian.com> - - * e-shell-about-box.c (text[]): grepped changelogs and added all - names found. #40391. - -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-Component.idl b/shell/Evolution-Component.idl deleted file mode 100644 index e199629066..0000000000 --- a/shell/Evolution-Component.idl +++ /dev/null @@ -1,82 +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) 2003 Ximian, Inc. - */ - -#include <Bonobo.idl> - -module GNOME { -module Evolution { - - /* A type of item that the component can create when asked by the user, - e.g. a mail message or an appointment. */ - struct CreatableItemType { - string id; - string description; - string menuDescription; - string tooltip; - char menuShortcut; - string iconName; - }; - typedef sequence <CreatableItemType> CreatableItemTypeList; - - interface Component : Bonobo::Unknown { - exception Failed {}; - exception UnknownType {}; - - - /*** Upgrade path. ***/ - - boolean upgradeFromVersion (in short major, in short minor, in short revision); - - - /*** Basic functionality. ***/ - - /* Create the controls for embedding in the shell. */ - void createControls (out Bonobo::Control sidebar_control, - out Bonobo::Control view_control, - out Bonobo::Control statusbar_control) - raises (Failed); - - /* Request the component to quit. The component will return TRUE - if it agrees to quit and FALSE if it doesn't want to. */ - boolean requestQuit (); - - /* 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); - - - /*** The following stuff is needed to build the "New" toolbar - item as well as the "File -> New" submenu. ***/ - - /* List of creatable items. */ - readonly attribute CreatableItemTypeList userCreatableItems; - - /* Pop up a new editing dialog for the item with the specified - @item_type_name. */ - void requestCreateItem (in string item_type_name) - raises (UnknownType); - - - /*** URI handling (e.g. for the command-line, "evolution - mailto:foo@bar.org") ***/ - void handleURI (in string uri); - - - /*** Send/receive. ***/ - - void sendAndReceive (); - }; - -}; -}; 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 4648fd9a7f..0000000000 --- a/shell/Evolution-Offline.idl +++ /dev/null @@ -1,61 +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 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 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-Shell.idl b/shell/Evolution-Shell.idl deleted file mode 100644 index 5f2690afe4..0000000000 --- a/shell/Evolution-Shell.idl +++ /dev/null @@ -1,53 +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 Shell : Bonobo::Unknown { - exception Busy {}; - exception ComponentNotFound {}; - exception InternalError {}; - exception InvalidURI {}; - exception NotFound {}; - exception NotReady {}; - exception UnsupportedSchema {}; - - /** - * createNewWindow: - * @component_id: id or alias of the component to display in the new window. - * - */ - void createNewWindow (in string component_id) - raises (NotReady, ComponentNotFound, UnsupportedSchema, 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); - - /** - * setLineStatus: - * - * Set the shell into on-line or off-line mode. - */ - void setLineStatus (in boolean online) - raises (NotReady); - }; -}; -}; 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 f128d065bd..0000000000 --- a/shell/Evolution.idl +++ /dev/null @@ -1,19 +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-Component.idl> -#include <Evolution-ConfigControl.idl> -#include <Evolution-Offline.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 6462c92a96..0000000000 --- a/shell/GNOME_Evolution_Shell.server.in.in +++ /dev/null @@ -1,51 +0,0 @@ -<oaf_info> - - <oaf_server iid="OAFIID:GNOME_Evolution_Shell:@VERSION@" - type="exe" - location="@BINDIR@/evolution-@VERSION@"> - - <oaf_attribute name="repo_ids" type="stringv"> - <item value="IDL:GNOME/Evolution/Shell:@VERSION@"/> - </oaf_attribute> - - <oaf_attribute name="name" type="string" - _value="Evolution Shell"/> - </oaf_server> - - <oaf_server iid="OAFIID:GNOME_Evolution_Shell_Config_Factory:@VERSION@" - type="exe" - location="@BINDIR@/evolution-@VERSION@"> - - <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:@VERSION@" - type="factory" - location="OAFIID:GNOME_Evolution_Shell_Config_Factory:@VERSION@"> - - <oaf_attribute name="repo_ids" type="stringv"> - <item value="IDL:GNOME/Evolution/ConfigControl:@VERSION@"/> - </oaf_attribute> - - <oaf_attribute name="evolution2:config_item:title" type="string" - _value="Folder Settings"/> - - <oaf_attribute name="evolution2:config_item:description" type="string" - _value="Configure special folders and offline folder behavior here"/> - - <oaf_attribute name="evolution2:config_item:icon_name" type="string" - value="folder-settings.png"/> - - <oaf_attribute name="evolution2:config_item:priority" type="string" value="-9"/> - - <oaf_attribute name="evolution2: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 c81ba64c1f..0000000000 --- a/shell/Makefile.am +++ /dev/null @@ -1,279 +0,0 @@ -SUBDIRS = glade importer - -INCLUDES = \ - -I$(top_srcdir)/widgets \ - -I$(top_srcdir)/widgets/misc \ - -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\" \ - $(TZDIALOG_CFLAGS) \ - $(SHELL_CFLAGS) - -noinst_PROGRAMS = evolution - -# Shell CORBA stuff - -IDLS = \ - Evolution-ConfigControl.idl \ - Evolution-Component.idl \ - Evolution-Offline.idl \ - Evolution-Shell.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) - - -# Data Server CORBA stuff -DATASERVER_IDL_GENERATED_H = \ - Evolution-DataServer.h - -DATASERVER_IDL_GENERATED_C = \ - Evolution-DataServer-common.c \ - Evolution-DataServer-skels.c \ - Evolution-DataServer-stubs.c - -DATASERVER_IDL_GENERATED = $(DATASERVER_IDL_GENERATED_C) $(DATASERVER_IDL_GENERATED_H) - -$(DATASERVER_IDL_GENERATED_H): $(DATASERVER_IDL) - $(ORBIT_IDL) -I $(srcdir) $(IDL_INCLUDES) $(DATASERVER_IDL) - -$(DATASERVER_IDL_GENERATED_C): $(DATASERVER_IDL_GENERATED_H) - - -# IDL install - -idl_DATA = $(IDLS) - -# Shell library - -privlib_LTLIBRARIES = \ - libeshell.la - -eshellincludedir = $(privincludedir)/shell - -eshellinclude_HEADERS = \ - Evolution.h \ - e-activity-handler.h \ - e-icon-factory.h \ - e-shell-corba-icon-utils.h \ - e-shell-utils.h \ - e-task-bar.h \ - e-task-widget.h \ - evolution-config-control.h \ - evolution-shell-component-utils.h \ - evolution-wizard.h - -libeshell_la_SOURCES = \ - $(IDL_GENERATED) \ - $(MARSHAL_GENERATED) \ - e-activity-handler.c \ - e-icon-factory.c \ - e-shell-corba-icon-utils.c \ - e-shell-utils.c \ - evolution-config-control.c \ - evolution-shell-component-utils.c \ - evolution-wizard.c \ - e-task-bar.c \ - e-task-widget.c \ - $(eshellinclude_HEADERS) - -libeshell_la_LIBADD = \ - $(top_builddir)/e-util/libeutil.la - -# Evolution executable - -evolution_SOURCES = \ - $(SELECT_NAMES_IDL_GENERATED) \ - $(DATASERVER_IDL_GENERATED) \ - 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-history.c \ - e-history.h \ - e-setup.c \ - e-setup.h \ - e-shell-about-box.c \ - e-shell-about-box.h \ - e-shell-constants.h \ - e-shell-folder-title-bar.c \ - e-shell-folder-title-bar.h \ - e-shell-offline-handler.c \ - e-shell-offline-handler.h \ - e-shell-settings-dialog.c \ - e-shell-settings-dialog.h \ - e-shell-startup-wizard.c \ - e-shell-startup-wizard.h \ - e-shell-window-commands.c \ - e-shell-window-commands.h \ - e-shell-window.c \ - e-shell-window.h \ - e-shell.c \ - e-shell.h \ - e-sidebar.c \ - e-sidebar.h \ - e-user-creatable-items-handler.c \ - e-user-creatable-items-handler.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 \ - $(TZDIALOG_LIBS) \ - $(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=_$(BASE_VERSION).server) -@EVO_SERVER_RULE@ -@INTLTOOL_SERVER_RULE@ - -etspec_DATA = e-storage-set-view.etspec - -icons = \ - check-empty.xpm \ - check-filled.xpm \ - check-missing.xpm - -# GConf schemas - -schemadir = $(GCONF_SCHEMA_FILE_DIR) -schema_in_files = apps_evolution_shell.schemas.in.in -schema_DATA = $(schema_in_files:.schemas.in.in=-$(BASE_VERSION).schemas) -%-$(BASE_VERSION).schemas.in: %.schemas.in.in - cp $< $@ - -@INTLTOOL_SCHEMAS_RULE@ - -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 DEFAULT_BINARY - cd $(DESTDIR)$(bindir) && rm -f evolution && $(LN_S) evolution-$(BASE_VERSION) evolution -endif - -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 - - -MARSHAL_GENERATED = e-shell-marshal.c e-shell-marshal.h -@EVO_MARSHAL_RULE@ - -# Extra dist stuff - -EXTRA_DIST = \ - $(IDLS) \ - $(server_in_files) \ - $(etspec_DATA) \ - $(schema_DATA) \ - $(icons) \ - ChangeLog.pre-1-4 \ - 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) $(server_DATA) $(DATASERVER_IDL_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.in.in b/shell/apps_evolution_shell.schemas.in.in deleted file mode 100644 index e58974edd2..0000000000 --- a/shell/apps_evolution_shell.schemas.in.in +++ /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/component_id</key> - <applyto>/apps/evolution/shell/view_defaults/component_id</applyto> - <owner>evolution</owner> - <type>string</type> - <locale name="C"> - <default>mail</default> - <short>ID or alias of the component to be shown by default at start-up.</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 a6900edd93..0000000000 --- a/shell/e-activity-handler.c +++ /dev/null @@ -1,396 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* e-activity-handler.c - * - * Copyright (C) 2001, 2002, 2003 Novell, 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 <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> - - -#define PARENT_TYPE G_TYPE_OBJECT -static GObjectClass *parent_class = NULL; - - -#define ICON_SIZE 16 - - -struct _ActivityInfo { - char *component_id; - GdkPixbuf *icon_pixbuf; - guint id; - char *information; - gboolean cancellable; - double progress; - GtkWidget *menu; -}; -typedef struct _ActivityInfo ActivityInfo; - -struct _EActivityHandlerPrivate { - uint 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, - guint 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; -} - - -/* ETaskWidget actions. */ - -static int -task_widget_button_press_event_callback (GtkWidget *widget, - GdkEventButton *button_event, - void *data) -{ - ActivityInfo *activity_info; - - activity_info = (ActivityInfo *) data; - - if (button_event->button == 3) - return activity_info->cancellable; - - if (button_event->button != 1) - return FALSE; - - return TRUE; -} - - -/* Creating and destroying ActivityInfos. */ - -static ActivityInfo * -activity_info_new (const char *component_id, - guint id, - GdkPixbuf *icon, - const char *information, - gboolean cancellable) -{ - ActivityInfo *info; - - info = g_new (ActivityInfo, 1); - info->component_id = g_strdup (component_id); - info->id = id; - info->icon_pixbuf = g_object_ref (icon); - info->information = g_strdup (information); - info->cancellable = cancellable; - info->progress = -1.0; /* (Unknown) */ - info->menu = NULL; - - return info; -} - -static void -activity_info_free (ActivityInfo *info) -{ - g_free (info->component_id); - - g_object_unref (info->icon_pixbuf); - g_free (info->information); - - if (info->menu != NULL) - gtk_widget_destroy (info->menu); - - g_free (info); -} - -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); -} - - -/* GTK+ type stuff. */ - -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 (EActivityHandler *activity_handler) -{ - EActivityHandlerPrivate *priv; - - priv = g_new (EActivityHandlerPrivate, 1); - priv->next_activity_id = 1; - priv->activity_infos = NULL; - priv->task_bars = NULL; - - activity_handler->priv = priv; -} - - -EActivityHandler * -e_activity_handler_new (void) -{ - return g_object_new (e_activity_handler_get_type (), 0); -} - - -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); -} - -/* CORBA methods. */ - -guint -e_activity_handler_operation_started (EActivityHandler *activity_handler, - const char *component_id, - GdkPixbuf *icon_pixbuf, - const char *information, - gboolean cancellable) -{ - EActivityHandlerPrivate *priv; - ActivityInfo *activity_info; - unsigned int activity_id; - GSList *p; - - priv = activity_handler->priv; - - activity_id = get_new_activity_id (activity_handler); - - activity_info = activity_info_new (component_id, activity_id, icon_pixbuf, information, cancellable); - - 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)); - } - - priv->activity_infos = g_list_prepend (priv->activity_infos, activity_info); - - return activity_id; -} - -void -e_activity_handler_operation_progressing (EActivityHandler *activity_handler, - guint activity_id, - const char *information, - double progress) -{ - EActivityHandlerPrivate *priv = activity_handler->priv; - ActivityInfo *activity_info; - GList *p; - GSList *sp; - int order_number; - - p = lookup_activity (priv->activity_infos, activity_id, &order_number); - if (p == NULL) { - g_warning ("EActivityHandler: unknown operation %d", activity_id); - return; - } - - activity_info = (ActivityInfo *) p->data; - - g_free (activity_info->information); - activity_info->information = g_strdup (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); - } -} - -void -e_activity_handler_operation_finished (EActivityHandler *activity_handler, - guint activity_id) -{ - EActivityHandlerPrivate *priv = activity_handler->priv; - GList *p; - GSList *sp; - int order_number; - - p = lookup_activity (priv->activity_infos, activity_id, &order_number); - if (p == NULL) { - g_warning ("e_activity_handler_operation_finished: Unknown activity %d\n", activity_id); - return; - } - - 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); - } -} - - -E_MAKE_TYPE (e_activity_handler, "EActivityHandler", EActivityHandler, class_init, init, PARENT_TYPE) diff --git a/shell/e-activity-handler.h b/shell/e-activity-handler.h deleted file mode 100644 index 46826c8eb3..0000000000 --- a/shell/e-activity-handler.h +++ /dev/null @@ -1,85 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* e-activity-handler.h - * - * Copyright (C) 2001, 2002, 2003 Novell, 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 <glib-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 { - GObject parent; - - EActivityHandlerPrivate *priv; -}; - -struct _EActivityHandlerClass { - GObjectClass parent_class; -}; - - -GtkType e_activity_handler_get_type (void); - -EActivityHandler *e_activity_handler_new (void); - -void e_activity_handler_attach_task_bar (EActivityHandler *activity_hanlder, - ETaskBar *task_bar); - -guint e_activity_handler_operation_started (EActivityHandler *activity_handler, - const char *component_id, - GdkPixbuf *icon_pixbuf, - const char *information, - gboolean cancellable); - -void e_activity_handler_operation_progressing (EActivityHandler *activity_handler, - guint activity_id, - const char *information, - double progress); - -void e_activity_handler_operation_finished (EActivityHandler *activity_handler, - guint activity_id); - - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* _E_ACTIVITY_HANDLER_H_ */ diff --git a/shell/e-component-registry.c b/shell/e-component-registry.c deleted file mode 100644 index b1a6560078..0000000000 --- a/shell/e-component-registry.c +++ /dev/null @@ -1,324 +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 "e-shell-utils.h" - -#include "e-util/e-lang-utils.h" - -#include <libgnome/gnome-i18n.h> -#include <gal/util/e-util.h> - -#include <bonobo/bonobo-object.h> -#include <bonobo/bonobo-exception.h> - -#include <string.h> -#include <stdlib.h> - - -#define PARENT_TYPE G_TYPE_OBJECT -static GObjectClass *parent_class = NULL; - - -struct _EComponentRegistryPrivate { - GSList *infos; -}; - - -/* EComponentInfo handling. */ - -static EComponentInfo * -component_info_new (const char *id, - const char *alias, - const char *button_label, - int sort_order, - GdkPixbuf *button_icon) -{ - EComponentInfo *info = g_new0 (EComponentInfo, 1); - - info->id = g_strdup (id); - info->alias = g_strdup (alias); - info->button_label = g_strdup (button_label); - info->sort_order = sort_order; - - info->button_icon = button_icon; - g_object_ref (button_icon); - - return info; -} - -static void -component_info_free (EComponentInfo *info) -{ - g_free (info->id); - g_free (info->alias); - g_free (info->button_label); - - if (info->iface != NULL) - bonobo_object_release_unref (info->iface, NULL); - - g_slist_foreach (info->uri_schemas, (GFunc) g_free, NULL); - g_slist_free (info->uri_schemas); - - g_free (info); -} - -static int -component_info_compare_func (EComponentInfo *a, - EComponentInfo *b) -{ - if (a->sort_order != b->sort_order) - return a->sort_order - b->sort_order; - - return strcmp (a->button_label, b->button_label); -} - - -/* Utility methods. */ - -static void -set_schemas (EComponentInfo *component_info, - Bonobo_ServerInfo *server_info) -{ - Bonobo_ActivationProperty *property = bonobo_server_info_prop_find (server_info, "evolution:uri_schemas"); - Bonobo_StringList *list; - int i; - - if (property == NULL) - return; - - if (property->v._d != Bonobo_ACTIVATION_P_STRINGV) { - CORBA_free (property); - return; - } - - list = & property->v._u.value_stringv; - - for (i = 0; i < list->_length; i ++) - component_info->uri_schemas = g_slist_prepend (component_info->uri_schemas, g_strdup (list->_buffer [i])); - - CORBA_free (property); -} - -static void -query_components (EComponentRegistry *registry) -{ - Bonobo_ServerInfoList *info_list; - CORBA_Environment ev; - GSList *language_list; - char *query; - int i; - - CORBA_exception_init (&ev); - query = g_strdup_printf ("repo_ids.has ('IDL:GNOME/Evolution/Component:%s')", BASE_VERSION); - info_list = bonobo_activation_query (query, NULL, &ev); - g_free (query); - - if (BONOBO_EX (&ev)) { - char *ex_text = bonobo_exception_get_text (&ev); - g_warning ("Cannot query for components: %s\n", ex_text); - g_free (ex_text); - CORBA_exception_free (&ev); - return; - } - - language_list = e_get_language_list (); - - for (i = 0; i < info_list->_length; i++) { - const char *id; - const char *label; - const char *alias; - const char *icon_name; - const char *sort_order_string; - GdkPixbuf *icon; - EComponentInfo *info; - int sort_order; - - id = info_list->_buffer[i].iid; - label = bonobo_server_info_prop_lookup (& info_list->_buffer[i], "evolution:button_label", language_list); - if (label == NULL) - label = g_strdup (_("Unknown")); - - alias = bonobo_server_info_prop_lookup (& info_list->_buffer[i], "evolution:component_alias", NULL); - - icon_name = bonobo_server_info_prop_lookup (& info_list->_buffer[i], "evolution:button_icon", NULL); - if (icon_name == NULL) { - icon = NULL; - } else { - char *full_path = e_shell_get_icon_path (icon_name, TRUE); - icon = gdk_pixbuf_new_from_file (full_path, NULL); - } - - sort_order_string = bonobo_server_info_prop_lookup (& info_list->_buffer[i], - "evolution:button_sort_order", NULL); - if (sort_order_string == NULL) - sort_order = 0; - else - sort_order = atoi (sort_order_string); - - info = component_info_new (id, alias, label, sort_order, icon); - set_schemas (info, & info_list->_buffer [i]); - - registry->priv->infos = g_slist_prepend (registry->priv->infos, info); - - if (icon != NULL) - g_object_unref (icon); - } - - CORBA_free (info_list); - CORBA_exception_free (&ev); - - registry->priv->infos = g_slist_sort (registry->priv->infos, - (GCompareFunc) component_info_compare_func); -} - - -/* GObject methods. */ - -static void -impl_finalize (GObject *object) -{ - EComponentRegistry *component_registry; - EComponentRegistryPrivate *priv; - - component_registry = E_COMPONENT_REGISTRY (object); - priv = component_registry->priv; - - g_slist_foreach (priv->infos, (GFunc) component_info_free, NULL); - 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->finalize = impl_finalize; - - parent_class = g_type_class_ref(PARENT_TYPE); -} - - -static void -init (EComponentRegistry *registry) -{ - registry->priv = g_new0 (EComponentRegistryPrivate, 1); - - query_components (registry); -} - - -EComponentRegistry * -e_component_registry_new (void) -{ - return g_object_new (e_component_registry_get_type (), NULL); -} - - -GSList * -e_component_registry_peek_list (EComponentRegistry *registry) -{ - g_return_val_if_fail (E_IS_COMPONENT_REGISTRY (registry), NULL); - - return registry->priv->infos; -} - - -EComponentInfo * -e_component_registry_peek_info (EComponentRegistry *registry, - const char *id) -{ - GSList *p; - - g_return_val_if_fail (E_IS_COMPONENT_REGISTRY (registry), NULL); - - for (p = registry->priv->infos; p != NULL; p = p->next) { - EComponentInfo *info = p->data; - - if (strcmp (info->id, id) == 0) - return info; - } - - return NULL; -} - - -EComponentInfo * -e_component_registry_peek_info_for_uri_schema (EComponentRegistry *registry, - const char *requested_schema) -{ - GSList *p, *q; - - for (p = registry->priv->infos; p != NULL; p = p->next) { - EComponentInfo *info = p->data; - - for (q = info->uri_schemas; q != NULL; q = q->next) { - const char *schema = q->data; - - if (strcmp (schema, requested_schema) == 0) - return info; - } - } - - return NULL; -} - - -GNOME_Evolution_Component -e_component_registry_activate (EComponentRegistry *registry, - const char *id, - CORBA_Environment *ev) -{ - EComponentInfo *info; - - g_return_val_if_fail (E_IS_COMPONENT_REGISTRY (registry), CORBA_OBJECT_NIL); - - info = e_component_registry_peek_info (registry, id); - if (info == NULL) { - g_warning (G_GNUC_FUNCTION " - Unknown id \"%s\"", id); - return CORBA_OBJECT_NIL; - } - - if (info->iface != CORBA_OBJECT_NIL) - return bonobo_object_dup_ref (info->iface, NULL); - - info->iface = bonobo_activation_activate_from_id (info->id, 0, NULL, ev); - if (BONOBO_EX (ev) || info->iface == CORBA_OBJECT_NIL) { - info->iface = CORBA_OBJECT_NIL; - return CORBA_OBJECT_NIL; - } - - return bonobo_object_dup_ref (info->iface, NULL); -} - - -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 76fbc778de..0000000000 --- a/shell/e-component-registry.h +++ /dev/null @@ -1,99 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* e-component-registry.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. - * - * Author: Ettore Perazzoli - */ - -#ifndef __E_COMPONENT_REGISTRY_H__ -#define __E_COMPONENT_REGISTRY_H__ - - -#include "Evolution.h" - -#include <glib-object.h> -#include <gdk-pixbuf/gdk-pixbuf.h> - - -#ifdef __cplusplus -extern "C" { -#pragma } -#endif /* __cplusplus */ - - -#define E_TYPE_COMPONENT_REGISTRY (e_component_registry_get_type ()) -#define E_COMPONENT_REGISTRY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), E_TYPE_COMPONENT_REGISTRY, EComponentRegistry)) -#define E_COMPONENT_REGISTRY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), E_TYPE_COMPONENT_REGISTRY, EComponentRegistryClass)) -#define E_IS_COMPONENT_REGISTRY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), E_TYPE_COMPONENT_REGISTRY)) -#define E_IS_COMPONENT_REGISTRY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), E_TYPE_COMPONENT_REGISTRY)) - - -typedef struct _EComponentRegistry EComponentRegistry; -typedef struct _EComponentRegistryPrivate EComponentRegistryPrivate; -typedef struct _EComponentRegistryClass EComponentRegistryClass; - -struct _EComponentRegistry { - GObject parent; - - EComponentRegistryPrivate *priv; -}; - -struct _EComponentRegistryClass { - GObjectClass parent_class; -}; - - -struct _EComponentInfo { - char *id; - - char *alias; - - /* NULL if not activated. */ - GNOME_Evolution_Component iface; - - char *button_label; - GdkPixbuf *button_icon; - - int sort_order; - - /* List of URI schemas that this component supports. */ - GSList *uri_schemas; /* <char *> */ -}; -typedef struct _EComponentInfo EComponentInfo; - - -GType e_component_registry_get_type (void); -EComponentRegistry *e_component_registry_new (void); - -GSList *e_component_registry_peek_list (EComponentRegistry *registry); -EComponentInfo *e_component_registry_peek_info (EComponentRegistry *registry, - const char *id); - -EComponentInfo *e_component_registry_peek_info_for_uri_schema (EComponentRegistry *registry, - const char *schema); - -GNOME_Evolution_Component e_component_registry_activate (EComponentRegistry *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 82857d4d47..0000000000 --- a/shell/e-config-upgrade.c +++ /dev/null @@ -1,1929 +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 (4) -#define CONF_REVISION (0) - -/* 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 char * -utf8_reencode (const char * txt) -{ - GString *out = g_string_new(""); - const unsigned char *p; - char *res; - - /* convert: - libxml1 8 bit utf8 converted to xml entities byte-by-byte chars -> utf8 */ - - p = (const unsigned char *) txt; - - while (*p) { - g_string_append_c(out,(char) g_utf8_get_char(p)); - p = g_utf8_next_char (p); - } - res = out->str; - if (g_utf8_validate (res, -1, NULL)) { - g_string_free(out, FALSE); - return res; - } else { - g_string_free (out, TRUE); - return g_strdup (txt); - } -} - - -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 char *item_props[] = { "name", NULL }; - struct { - const char *name; - const char **tags; - const char **props; - } tags[] = { - { "value", value_tags, NULL }, - { "rule", rule_tags, NULL }, - { "item", NULL, item_props }, - { 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)) { - if (tags[i].tags != NULL) { - 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; - } - if (tags[i].props != NULL) { - for (j=0; tags[i].props[j];j++) { - txt = xmlGetProp (node, tags[i].props[j]); - d(printf("upgrading xml property %s on node %s '%s' -> '%s'\n", tags[i].props[j],tags[i].name,txt,tmp)); - tmp = utf8_reencode(txt); - xmlSetProp(node, tags[i].props[j],tmp); - changed = 1; - g_free(tmp); - xmlFree(txt); - } - } - } - } - - 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 _gconf_map general_map[] = { - /* /General */ - { "CategoryMasterList", "general/category_master_list", BMAP_STRING } -}; - -/* ********************************************************************** */ - -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 }, - - { "/General", general_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", "shortcuts.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 50fd1bdfd6..0000000000 --- a/shell/e-corba-config-page.c +++ /dev/null @@ -1,264 +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); - - 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-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-setup.c b/shell/e-setup.c deleted file mode 100644 index 200528e6b7..0000000000 --- a/shell/e-setup.c +++ /dev/null @@ -1,331 +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-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 85cc3ef921..0000000000 --- a/shell/e-shell-about-box.c +++ /dev/null @@ -1,534 +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; - -/* must be in utf8, the weird breaking of escaped strings - is so the hex escape strings dont swallow too many chars */ -static const char *text[] = { - "", - "Evolution " VERSION, - "Copyright 1999 - 2003 Ximian, Inc.", - "", - N_("Brought to you by"), - "", - "Darin Adler", - "Arturo Espinosa Aldama", - "H\xC3\xA9" "ctor Garc\xC3\xAD" "a \xC3\x81" "lvarez", - "Jes\xC3\xBA" "s Bravo \xC3\x81" "lvarez", - "Seth Alves", - "Marius Andreiana", - "Sean Atkinson", - "Szabolcs BAN", - "Timur Bakeyev", - "Martin Baulig", - "Frank Belew", - "Dan Berger", - "Jacob Berkman", - "Matt Bissiri", - "Jonathan Blandford", - "Richard Boulton", - "Robert Brady", - "Kevin Breit", - "Martha Burke", - "Dave Camp", - "Ian Campbell", - "Anders Carlsson", - "Damon Chaplin", - "Abel Cheung", - "Zbigniew Chyla", - "Clifford R. Conover", - "Sam Creasey", - "Frederic Crozat", - "Wayne Davis", - "Rodney Dawes", - "Jos Dehaes", - "Fatih Demir", - "Arik Devens", - "Anna Marie Dirks", - "Bob Doan", - "Radek Doul\xC3\xADk", - "Edd Dumbill", - "Larry Ewing", - "Gilbert Fang", - "Francisco Javier F. Serrador", - "Nuno Ferreira", - "Valek Filippov", - "Nat Friedman", - "Sean Gao", - "Jeff Garzik", - "Nike Gerdts", - "Grzegorz Goawski", - "Jody Goldberg", - "Pablo Gonzalo del Campo", - "Mark Gordon", - "Kenny Graunke", - "Alex Graveley", - "Bertrand Guiheneuf", - "Jean-Noel Guiheneuf", - "Mikael Hallendal", - "Raja R Harinath", - "Heath Harrelson", - "Taylor Hayward", - "Jon K Hellan", - "Martin Hicks", - "Iain Holmes", - "Max Horn", - "Greg Hudson", - "Richard Hult", - "Andreas Hyden", - "Miguel de Icaza", - "Hans Petter Jansson", - "Jack Jia", - "Wang Jian", - "Sanshao Jiang", - "Benjamin Kahn", - "Yanko Kaneti", - "Lauris Kaplinski", - "Jeremy Katz", - "Mike Kestner", - "Christian Kreibich", - "Nicholas J Kreucher", - "Ronald Kuetemeier", - "Tuomas Kuosmanen", - "Mathieu Lacage", - "Christopher J. Lahey", - "Eneko Lacunza", - "Miles Lane", - "Jason Leach", - "Elliot Lee", - "Ji Lee", - "Timothy Lee", - "T\xC3\xB5" "ivo Leedj\xC3\xA4" "rv", - "Richard Li", - "Matthew Loper", - "Duarte Loreto", - "Harry Lu", - "Michael MacDonald", - "Duncan Mak", - "Kjartan Maraas", - "Garardo Marin", - "Matt Martin", - "Carlos Perell\xC3\xB3" " Mar\xC3\xAD" "n", - "Dietmar Maurer", - "Mike McEwan", - "Alastair McKinstry", - "Michael Meeks", - "Federico Mena", - "Christophe Merlet", - "Michael M. Morrison", - "Rodrigo Moya", - "Steve Murphy", - "Yukihiro Nakai", - "Martin Norb\xC3\xA4" "ck", - "Tomas Ogren", - "Ismael Olea", - "Eskil Heyn Olsen", - "Sergey Panov", - "Gediminas Paulauskas", - "Jesse Pavel", - "Havoc Pennington", - "Ettore Perazzoli", - "Petta Pietikainen", - "Herbert V. Riedel", - "Ariel Rios", - "JP Rosevear", - "Cody Russell", - "Changwoo Ryu", - "Pablo Saratxaga", - "Carsten Schaar", - "Joe Shaw", - "Timo Sirainen", - "Craig Small", - "Maciej Stachowiak", - "Jeffrey Stedfast", - "Jakub Steiner", - "Russell Steinthal", - "Vadim Strizhevsky", - "Yuri Syrota", - "Jason Tackaberry", - "Peter Teichman", - "Chris Toshok", - "Tom Tromey", - "Jon Trowbridge", - "Andrew T. Veliath", - "Gustavo Maciel Dias Vieira", - "Luis Villa", - "Stanislav Visnovsky", - "Aaron Weber", - "Dave West", - "Peter Williams", - "Matt Wilson", - "Matthew Wilson", - "Dan Winship", - "Jeremy Wise", - "Leon Zhang", - "Philip Zhao", - "Jukka Zitting", - "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 27a2fbd937..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:" BASE_VERSION - -#define E_SHELL_CONFIG_FOLDER_SETTINGS_OAFIID "OAFIID:GNOME_Evolution_Shell_Config_FolderSettings_Control:" BASE_VERSION - - -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 02be16cd5f..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_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; - gboolean done; - - g_return_if_fail (E_IS_SHELL (shell)); - 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); - - done = FALSE; - while (! done) { - const char *reason; - char *new_name; - - new_name = e_request_string (GTK_WINDOW (shell_view), _("Rename Folder"), prompt, old_name); - - if (new_name == NULL || strcmp (old_name, new_name) == 0) { - done = TRUE; - } else if (! e_shell_folder_name_is_valid (new_name, &reason)) { - e_notice (shell_view, GTK_MESSAGE_ERROR, - _("The specified folder name is not valid: %s"), reason); - } else { - char *old_base_path = g_path_get_dirname (folder_path); - char *new_path = g_build_filename (old_base_path, new_name, NULL); - - if (e_storage_set_get_folder (storage_set, new_path) != NULL) { - e_notice (shell_view, GTK_MESSAGE_ERROR, - _("A folder named \"%s\" already exists. Please use a different name."), - new_name); - } else { - 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); - done = TRUE; - } - - g_free (old_base_path); - g_free (new_path); - } - } - - g_free (prompt); -} - - -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; - char *uri; - const char *path; - int group_num; - 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)); - path = e_shell_view_get_current_path (shell_view); - } else { - uri = g_strconcat (E_SHELL_URI_PREFIX, folder_path, NULL); - path = folder_path; - } - - unread_count = get_folder_unread (shell, path); - storage_set = e_shell_get_storage_set (shell); - folder = e_storage_set_get_folder (storage_set, path); - - 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 1a4afb1403..0000000000 --- a/shell/e-shell-folder-creation-dialog.c +++ /dev/null @@ -1,580 +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" - - -/* Forward declarations for the weak references. */ -static void dialog_destroy_notify (void *data, GObject *where_the_dialog_was); -static void shell_destroy_notify (void *data, GObject *where_the_shell_was); - -/* 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); - - if (dialog_data->dialog != NULL) - g_object_weak_unref (G_OBJECT (dialog_data->dialog), dialog_destroy_notify, dialog_data); - - if (dialog_data->shell != NULL) - g_object_weak_unref (G_OBJECT (dialog_data->shell), shell_destroy_notify, dialog_data); - - 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; - dialog_data->dialog = NULL; - - 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->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_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK); - - 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-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 e34563eb03..0000000000 --- a/shell/e-shell-importer.c +++ /dev/null @@ -1,1247 +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 "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:") - }, - { "nodata_html", - N_("Evolution checked for settings to import from the following\n" - "applications: Pine, Netscape, Elm, iCalendar. No settings\n" - "that could be imported where found. If you would like to\n" - "try again, please click the \"Back\" button.\n") - } -}; -#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_with_mnemonic (_("_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); - gtk_label_set_mnemonic_widget(GTK_LABEL(label), page->filename); - - row++; - - label = gtk_label_new_with_mnemonic (_("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_label_set_mnemonic_widget(GTK_LABEL(label), page->filetype); - - 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_mnemonic (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_mnemonic_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, *no_data; - int running = 0; - - if (data->importerpage->prepared == TRUE) { - if (data->importerpage->running == 0) - gnome_druid_set_buttons_sensitive(druid, TRUE, FALSE, TRUE, FALSE); - 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; - no_data = create_help ("nodata_html"); - gtk_box_pack_start (GTK_BOX (data->importerpage->vbox), no_data, - FALSE, TRUE, 0); - gnome_druid_set_buttons_sensitive(druid, TRUE, FALSE, TRUE, FALSE); - 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) { - no_data = create_help ("nodata_html"); - gtk_box_pack_start (GTK_BOX (data->importerpage->vbox), no_data, - FALSE, TRUE, 0); - gnome_druid_set_buttons_sensitive(druid, TRUE, FALSE, TRUE, FALSE); - 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 -e_shell_importer_start_import (void) -{ - 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_use_underline ((GtkButton *)((GnomeDruid *)data->druid)->finish, TRUE); - 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_after (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_after (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 3e139dc846..0000000000 --- a/shell/e-shell-importer.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: Iain Holmes <iain@ximian.com> - */ - -#ifndef _E_SHELL_IMPORTER_H_ -#define _E_SHELL_IMPORTER_H_ - -void e_shell_importer_start_import (void); - -#endif diff --git a/shell/e-shell-marshal.list b/shell/e-shell-marshal.list deleted file mode 100644 index fd4274f310..0000000000 --- a/shell/e-shell-marshal.list +++ /dev/null @@ -1,30 +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,POINTER,POINTER -NONE:STRING,STRING -NONE:STRING,STRING,STRING -NONE:STRING,STRING,STRING,STRING -NONE:STRING,POINTER,POINTER,UINT,UINT diff --git a/shell/e-shell-offline-handler.c b/shell/e-shell-offline-handler.c deleted file mode 100644 index 008af4dd93..0000000000 --- a/shell/e-shell-offline-handler.c +++ /dev/null @@ -1,871 +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-marshal.h" - -#include <gtk/gtkcellrenderertext.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; - - GtkWindow *parent_window; - - 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); -} - - -static GNOME_Evolution_Offline -get_offline_interface (GNOME_Evolution_Component objref) -{ - GNOME_Evolution_Offline interface; - CORBA_Environment ev; - - CORBA_exception_init (&ev); - - interface = Bonobo_Unknown_queryInterface (objref, "IDL:GNOME/Evolution/Offline:1.0", &ev); - - if (ev._major != CORBA_NO_EXCEPTION) - interface = CORBA_OBJECT_NIL; - - CORBA_exception_free (&ev); - return interface; -} - - -/* Cancelling the off-line procedure. */ - -static void -cancel_offline (EShellOfflineHandler *offline_handler) -{ - EShellOfflineHandlerPrivate *priv; - EComponentRegistry *component_registry; - GSList *component_infos; - GSList *p; - - priv = offline_handler->priv; - - component_registry = e_shell_peek_component_registry (priv->shell); - component_infos = e_component_registry_peek_list (component_registry); - - for (p = component_infos; p != NULL; p = p->next) { - EComponentInfo *info = p->data; - GNOME_Evolution_Offline offline_interface; - CORBA_Environment ev; - const char *id; - - offline_interface = get_offline_interface (info->iface); - 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); - } - - 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; - GSList *component_infos; - GSList *p; - gboolean error; - - priv = offline_handler->priv; - component_registry = e_shell_peek_component_registry (priv->shell); - component_infos = e_component_registry_peek_list (component_registry); - - error = FALSE; - for (p = component_infos; p != NULL; p = p->next) { - EComponentInfo *info = p->data; - 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; - - offline_interface = get_offline_interface (info->iface); - 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); - - 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; - GtkListStore *model; - 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), GTK_TREE_MODEL(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)); - - 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: - case GTK_RESPONSE_DELETE_EVENT: - 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_window = 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, - GtkWindow *parent_window) -{ - 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_window == NULL || GTK_IS_WINDOW (parent_window)); - - priv = offline_handler->priv; - - priv->procedure_in_progress = TRUE; - priv->parent_window = parent_window; - - /* 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_window != NULL) - pop_up_confirmation_dialog (offline_handler); - else - 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 912ba143f4..0000000000 --- a/shell/e-shell-offline-handler.h +++ /dev/null @@ -1,82 +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 <gtk/gtkwindow.h> - -#include "e-shell.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, - GtkWindow *parent_window); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* _E_SHELL_OFFLINE_HANDLER_H_ */ diff --git a/shell/e-shell-settings-dialog.c b/shell/e-shell-settings-dialog.c deleted file mode 100644 index f0476bf0d5..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(evolution2: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, "evolution2:config_item:title", language_list); - description = bonobo_server_info_prop_lookup (info, "evolution2:config_item:description", language_list); - icon_path = bonobo_server_info_prop_lookup (info, "evolution2:config_item:icon_name", NULL); - type = bonobo_server_info_prop_find (info, "evolution2:config_item:type"); - priority_string = bonobo_server_info_prop_lookup (info, "evolution2: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 1bf651f25f..0000000000 --- a/shell/e-shell-shared-folder-picker-dialog.c +++ /dev/null @@ -1,557 +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:" BASE_VERSION, - 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. */ - -static void shell_weak_notify (void *data, GObject *where_the_object_was); -static void shell_view_weak_notify (void *data, GObject *where_the_object_was); -static void storage_weak_notify (void *data, GObject *where_the_object_was); - -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); - - if (discovery_data->shell != NULL) - g_object_weak_unref (G_OBJECT (discovery_data->shell), shell_weak_notify, discovery_data); - - if (discovery_data->parent != NULL) - g_object_weak_unref (G_OBJECT (discovery_data->parent), shell_view_weak_notify, discovery_data); - - if (discovery_data->storage != NULL) - g_object_weak_unref (G_OBJECT (discovery_data->storage), storage_weak_notify, discovery_data); - - 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; - discovery_data->shell = NULL; - - 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; - discovery_data->storage = NULL; - - 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 ac6d6a4770..0000000000 --- a/shell/e-shell-startup-wizard.c +++ /dev/null @@ -1,872 +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; - char *query; - int i; - - CORBA_exception_init (&ev); - query = g_strdup_printf ("repo_ids.has ('IDL:GNOME/Evolution/StartupWizard:%s')", BASE_VERSION); - info = bonobo_activation_query (query, selection_order, &ev); - g_free (query); - - 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 gboolean -back_finish_func (GnomeDruidPage *page, - GnomeDruid *druid, - SWData *data) -{ - if (data->import_page->running == 0) - gnome_druid_set_page (druid, GNOME_DRUID_PAGE (data->timezone_page->page)); - else - return FALSE; - - 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; - char *query; - int i; - - CORBA_exception_init (&ev); - query = g_strdup_printf ("repo_ids.has ('IDL:GNOME/Evolution/IntelligentImporter:%s'", BASE_VERSION); - info_list = bonobo_activation_query (query, NULL, &ev); - g_free (query); - 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) { - if (data->import_page->running == 0) - gnome_druid_set_page (druid, GNOME_DRUID_PAGE (data->finish)); - 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 (); -} - -static gboolean -startup_wizard_delete (GnomeDruid *druid, - GdkEventAny *ev, - SWData *data) -{ - startup_wizard_cancel(druid, data); - return FALSE; -} - -static gboolean -key_press_event_callback (GtkWidget *widget, - GdkEventKey *keyev, - SWData *data) -{ - if (keyev->keyval == GDK_Escape) { - GtkWidget *confirm_dialog; - int returnvalue; - char *confirmations; - - confirmations = _("If you quit the Evolution Setup Assistant now, all of the information that " - "you have entered will be forgotten. You will need to run this assistant again " - "before using Evolution.\n\nDo you want to quit using the Assistant now?"); - - confirm_dialog = gtk_message_dialog_new (data->dialog, - GTK_DIALOG_MODAL, - GTK_MESSAGE_WARNING, - GTK_BUTTONS_NONE, - confirmations); - - gtk_dialog_add_button (confirm_dialog, _("Cancel"), GTK_RESPONSE_CANCEL); - gtk_dialog_add_button (confirm_dialog, _("Quit Assistant"), GTK_RESPONSE_OK); - - returnvalue = gtk_dialog_run (GTK_DIALOG (confirm_dialog)); - gtk_widget_destroy (confirm_dialog); - - if (returnvalue == GTK_RESPONSE_OK) { - startup_wizard_cancel (data->druid, data); - return TRUE; - } - } - return FALSE; -} - -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"); - - g_signal_connect_after (data->dialog, "delete_event", - G_CALLBACK (startup_wizard_delete), data); - - 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); - - g_signal_connect (data->dialog, "key_press_event", - G_CALLBACK (key_press_event_callback), 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); - g_signal_connect (data->finish, "back", G_CALLBACK (back_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-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-window-commands.c b/shell/e-shell-window-commands.c deleted file mode 100644 index f5d9bda47c..0000000000 --- a/shell/e-shell-window-commands.c +++ /dev/null @@ -1,390 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* e-shell-window-commands.c - * - * Copyright (C) 2003 Ettore Perazzoli - * - * 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-window-commands.h" - -#include "e-shell-about-box.h" -#include "e-shell-window.h" - -#include "evolution-shell-component-utils.h" - -#include "e-util/e-dialog-utils.h" - -#include <libgnome/gnome-exec.h> -#include <libgnome/gnome-url.h> -#include <libgnome/gnome-i18n.h> - -#include <bonobo/bonobo-ui-component.h> - - -/* Utility functions. */ - -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]); -} - - -/* Command callbacks. */ - -static void -command_import (BonoboUIComponent *uih, - EShellWindow *window, - const char *path) -{ - g_warning ("Import not implemented!"); - - /* e_shell_importer_start_import (); FIXME TODO */ -} - -static void -command_close (BonoboUIComponent *uih, - EShellWindow *window, - const char *path) -{ - if (e_shell_request_close_window (e_shell_window_peek_shell (window), window)) - gtk_widget_destroy (GTK_WIDGET (window)); -} - -static void -command_quit (BonoboUIComponent *uih, - EShellWindow *window, - const char *path) -{ - EShell *shell = e_shell_window_peek_shell (window); - - e_shell_window_save_defaults (window); - - if (e_shell_prepare_for_quit (shell)) - e_shell_close_all_windows (shell); -} - -static void -command_submit_bug (BonoboUIComponent *uih, - EShellWindow *window, - 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, - GtkWidget **widget_pointer) -{ - gtk_widget_destroy (GTK_WIDGET (*widget_pointer)); - *widget_pointer = NULL; - - return TRUE; -} - -static void -command_about_box (BonoboUIComponent *uih, - EShellWindow *window, - 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 (window)); - 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, - EShellWindow *window, - const char *path) -{ - gnome_url_show ("http://www.ximian.com/apps/evolution-faq.html", NULL); /* FIXME use the error */ -} - - -static void -command_work_offline (BonoboUIComponent *uih, - EShellWindow *window, - const char *path) -{ - e_shell_go_offline (e_shell_window_peek_shell (window), window); -} - -static void -command_work_online (BonoboUIComponent *uih, - EShellWindow *window, - const char *path) -{ - e_shell_go_online (e_shell_window_peek_shell (window), window); -} - -static void -command_open_new_window (BonoboUIComponent *uih, - EShellWindow *window, - const char *path) -{ - e_shell_create_window (e_shell_window_peek_shell (window), - e_shell_window_peek_current_component_id (window), - window); -} - - -/* Actions menu. */ - -static void -command_send_receive (BonoboUIComponent *uih, - EShellWindow *window, - const char *path) -{ - e_shell_send_receive (e_shell_window_peek_shell (window)); -} - - -/* Tools menu. */ - -static void -command_settings (BonoboUIComponent *uih, - EShellWindow *window, - const char *path) -{ - e_shell_window_show_settings (window); -} - -static void -command_pilot_settings (BonoboUIComponent *uih, - EShellWindow *window, - const char *path) -{ - launch_pilot_settings (NULL); -} - - -static BonoboUIVerb file_verbs [] = { - BONOBO_UI_VERB ("FileImporter", (BonoboUIVerbFn) command_import), - BONOBO_UI_VERB ("FileClose", (BonoboUIVerbFn) command_close), - BONOBO_UI_VERB ("FileExit", (BonoboUIVerbFn) command_quit), - - BONOBO_UI_VERB ("WorkOffline", (BonoboUIVerbFn) command_work_offline), - BONOBO_UI_VERB ("WorkOnline", (BonoboUIVerbFn) command_work_online), - - BONOBO_UI_VERB_END -}; - -static BonoboUIVerb new_verbs [] = { - BONOBO_UI_VERB ("OpenNewWindow", (BonoboUIVerbFn) command_open_new_window), - - BONOBO_UI_VERB_END -}; - -static BonoboUIVerb actions_verbs[] = { - BONOBO_UI_VERB ("SendReceive", (BonoboUIVerbFn) command_send_receive), - - BONOBO_UI_VERB_END -}; - -static BonoboUIVerb tools_verbs[] = { - BONOBO_UI_VERB ("Settings", (BonoboUIVerbFn) command_settings), - BONOBO_UI_VERB ("PilotSettings", (BonoboUIVerbFn) command_pilot_settings), - - BONOBO_UI_VERB_END -}; - -static BonoboUIVerb help_verbs [] = { - BONOBO_UI_VERB ("HelpFAQ", (BonoboUIVerbFn) command_help_faq), - BONOBO_UI_VERB ("HelpSubmitBug", (BonoboUIVerbFn) command_submit_bug), - BONOBO_UI_VERB ("HelpAbout", (BonoboUIVerbFn) command_about_box), - - BONOBO_UI_VERB_END -}; - -static EPixmap pixmaps [] = { - E_PIXMAP ("/commands/SendReceive", "send-receive.xpm"), - E_PIXMAP ("/Toolbar/SendReceive", "buttons/send-24-receive.png"), - 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_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 -}; - - -/* The Work Online / Work Offline menu item. */ - -static void -update_offline_menu_item (EShellWindow *shell_window, - EShellLineStatus line_status) -{ - BonoboUIComponent *ui_component; - - ui_component = e_shell_window_peek_bonobo_ui_component (shell_window); - - 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, - EShellWindow *shell_window) -{ - update_offline_menu_item (shell_window, new_status); -} - - -/* Public API. */ - -void -e_shell_window_commands_setup (EShellWindow *shell_window) -{ - BonoboUIComponent *uic; - EShell *shell; - - g_return_if_fail (shell_window != NULL); - g_return_if_fail (E_IS_SHELL_WINDOW (shell_window)); - - uic = e_shell_window_peek_bonobo_ui_component (shell_window); - shell = e_shell_window_peek_shell (shell_window); - - bonobo_ui_component_add_verb_list_with_data (uic, file_verbs, shell_window); - bonobo_ui_component_add_verb_list_with_data (uic, new_verbs, shell_window); - bonobo_ui_component_add_verb_list_with_data (uic, actions_verbs, shell_window); - bonobo_ui_component_add_verb_list_with_data (uic, tools_verbs, shell_window); - bonobo_ui_component_add_verb_list_with_data (uic, help_verbs, shell_window); - - e_pixmaps_update (uic, pixmaps); - - /* 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_window, 0); - update_offline_menu_item (shell_window, e_shell_get_line_status (shell)); -} diff --git a/shell/e-shell-window-commands.h b/shell/e-shell-window-commands.h deleted file mode 100644 index b27b611f74..0000000000 --- a/shell/e-shell-window-commands.h +++ /dev/null @@ -1,30 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* e-shell-window-commands.h - * - * Copyright (C) 2003 Ettore Perazzoli - * - * 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_WINDOW_COMMANDS_H_ -#define _E_SHELL_WINDOW_COMMANDS_H_ - -#include "e-shell-window.h" - -void e_shell_window_commands_setup (EShellWindow *window); - -#endif /* _E_SHELL_WINDOW_COMMANDS_H_ */ diff --git a/shell/e-shell-window.c b/shell/e-shell-window.c deleted file mode 100644 index a427d28bbe..0000000000 --- a/shell/e-shell-window.c +++ /dev/null @@ -1,825 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* e-shell-window.c - * - * Copyright (C) 2003 Ettore Perazzoli - * - * 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> - */ - -#include <config.h> - -#include "e-shell-window.h" - -#include "Evolution.h" - -#include "e-component-registry.h" -#include "e-shell-window-commands.h" -#include "e-shell-marshal.h" -#include "e-sidebar.h" - -#include "e-util/e-lang-utils.h" - -#include <gal/util/e-util.h> - -#include <gtk/gtkbutton.h> -#include <gtk/gtkhbox.h> -#include <gtk/gtkhpaned.h> -#include <gtk/gtkimage.h> -#include <gtk/gtklabel.h> -#include <gtk/gtknotebook.h> -#include <gtk/gtktooltips.h> -#include <gtk/gtkvbox.h> - -#include <bonobo/bonobo-exception.h> -#include <bonobo/bonobo-object.h> -#include <bonobo/bonobo-ui-util.h> -#include <bonobo/bonobo-widget.h> - -#include <libgnome/gnome-i18n.h> - -#include <gconf/gconf-client.h> - -#include <string.h> - - -#define PARENT_TYPE gtk_window_get_type () -static GtkWindowClass *parent_class = NULL; - - -/* A view for each component. These are all created when EShellWindow is - instantiated, but with the widget pointers to NULL and the page number set - to -1. When the views are created the first time, the widget pointers as - well as the notebook page value get set. */ -struct _ComponentView { - int button_id; - char *component_id; - char *component_alias; - - GtkWidget *sidebar_widget; - GtkWidget *view_widget; - GtkWidget *statusbar_widget; - - int notebook_page_num; -}; -typedef struct _ComponentView ComponentView; - - -struct _EShellWindowPrivate { - EShell *shell; - - /* All the ComponentViews. */ - GSList *component_views; - - /* The sidebar. */ - GtkWidget *sidebar; - - /* Notebooks used to switch between components. */ - GtkWidget *sidebar_notebook; - GtkWidget *view_notebook; - GtkWidget *statusbar_notebook; - - /* Bonobo foo. */ - BonoboUIComponent *ui_component; - - /* The current view (can be NULL initially). */ - ComponentView *current_view; - - /* Tooltips. */ - GtkTooltips *tooltips; - - /* The status bar widgetry. */ - GtkWidget *status_bar; - GtkWidget *offline_toggle; - GtkWidget *offline_toggle_image; - GtkWidget *menu_hint_label; -}; - - -enum { - COMPONENT_CHANGED, - LAST_SIGNAL -}; - -static guint signals[LAST_SIGNAL] = { 0 }; - - -/* 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; - - -/* ComponentView handling. */ - -static ComponentView * -component_view_new (const char *id, const char *alias, int button_id) -{ - ComponentView *view = g_new0 (ComponentView, 1); - - view->component_id = g_strdup (id); - view->component_alias = g_strdup (alias); - view->button_id = button_id; - view->notebook_page_num = -1; - - return view; -} - -static void -component_view_free (ComponentView *view) -{ - g_free (view->component_id); - g_free (view->component_alias); - g_free (view); -} - -static void -component_view_deactivate (ComponentView *view) -{ - BonoboControlFrame *view_control_frame; - BonoboControlFrame *sidebar_control_frame; - - g_return_if_fail (view->sidebar_widget != NULL); - g_return_if_fail (view->view_widget != NULL); - - view_control_frame = bonobo_widget_get_control_frame (BONOBO_WIDGET (view->view_widget)); - bonobo_control_frame_control_deactivate (view_control_frame); - - sidebar_control_frame = bonobo_widget_get_control_frame (BONOBO_WIDGET (view->sidebar_widget)); - bonobo_control_frame_control_deactivate (sidebar_control_frame); -} - -static void -component_view_activate (ComponentView *view) -{ - BonoboControlFrame *view_control_frame; - BonoboControlFrame *sidebar_control_frame; - - g_return_if_fail (view->sidebar_widget != NULL); - g_return_if_fail (view->view_widget != NULL); - - view_control_frame = bonobo_widget_get_control_frame (BONOBO_WIDGET (view->view_widget)); - bonobo_control_frame_control_activate (view_control_frame); - - sidebar_control_frame = bonobo_widget_get_control_frame (BONOBO_WIDGET (view->sidebar_widget)); - bonobo_control_frame_control_activate (sidebar_control_frame); -} - -static void -init_view (EShellWindow *window, - ComponentView *view) -{ - EShellWindowPrivate *priv = window->priv; - EComponentRegistry *registry = e_shell_peek_component_registry (window->priv->shell); - GNOME_Evolution_Component component_iface; - Bonobo_UIContainer container; - Bonobo_Control sidebar_control; - Bonobo_Control view_control; - Bonobo_Control statusbar_control; - CORBA_Environment ev; - int sidebar_notebook_page_num; - int view_notebook_page_num; - int statusbar_notebook_page_num; - - g_assert (view->view_widget == NULL); - g_assert (view->sidebar_widget == NULL); - g_assert (view->notebook_page_num == -1); - - CORBA_exception_init (&ev); - - /* 1. Activate component. (FIXME: Shouldn't do this here.) */ - - component_iface = e_component_registry_activate (registry, view->component_id, &ev); - if (BONOBO_EX (&ev) || component_iface == CORBA_OBJECT_NIL) { - char *ex_text = bonobo_exception_get_text (&ev); - g_warning ("Cannot activate component %s: %s", view->component_id, ex_text); - g_free (ex_text); - CORBA_exception_free (&ev); - return; - } - - /* 2. Set up view. */ - - GNOME_Evolution_Component_createControls (component_iface, &sidebar_control, &view_control, &statusbar_control, &ev); - if (BONOBO_EX (&ev)) { - g_warning ("Cannot create view for %s", view->component_id); - - /* The rest of the code assumes that the component is valid and can create - controls; if this fails something is really wrong in the component - (e.g. methods not implemented)... So handle it as if there was no - component at all. */ - bonobo_object_release_unref (component_iface, NULL); - CORBA_exception_free (&ev); - return; - } - - CORBA_exception_free (&ev); - - container = bonobo_ui_component_get_container (priv->ui_component); - - view->sidebar_widget = bonobo_widget_new_control_from_objref (sidebar_control, container); - gtk_widget_show (view->sidebar_widget); - bonobo_object_release_unref (sidebar_control, NULL); - - view->view_widget = bonobo_widget_new_control_from_objref (view_control, container); - gtk_widget_show (view->view_widget); - bonobo_object_release_unref (view_control, NULL); - - view->statusbar_widget = bonobo_widget_new_control_from_objref (statusbar_control, container); - gtk_widget_show (view->statusbar_widget); - bonobo_object_release_unref (statusbar_control, NULL); - - gtk_notebook_append_page (GTK_NOTEBOOK (priv->sidebar_notebook), view->sidebar_widget, NULL); - gtk_notebook_append_page (GTK_NOTEBOOK (priv->view_notebook), view->view_widget, NULL); - gtk_notebook_append_page (GTK_NOTEBOOK (priv->statusbar_notebook), view->statusbar_widget, NULL); - - sidebar_notebook_page_num = gtk_notebook_page_num (GTK_NOTEBOOK (priv->sidebar_notebook), view->sidebar_widget); - view_notebook_page_num = gtk_notebook_page_num (GTK_NOTEBOOK (priv->view_notebook), view->view_widget); - statusbar_notebook_page_num = gtk_notebook_page_num (GTK_NOTEBOOK (priv->view_notebook), view->statusbar_widget); - - /* Since we always add a view page and a sidebar page at the same time... */ - g_assert (sidebar_notebook_page_num == view_notebook_page_num); - - view->notebook_page_num = view_notebook_page_num; - - /* 3. Switch to the new page. */ - - gtk_notebook_set_current_page (GTK_NOTEBOOK (priv->view_notebook), view_notebook_page_num); - gtk_notebook_set_current_page (GTK_NOTEBOOK (priv->sidebar_notebook), view_notebook_page_num); - gtk_notebook_set_current_page (GTK_NOTEBOOK (priv->statusbar_notebook), view_notebook_page_num); - - if (priv->current_view != NULL) - component_view_deactivate (priv->current_view); - priv->current_view = view; - component_view_activate (view); - - bonobo_object_release_unref (component_iface, NULL); -} - -static void -switch_view (EShellWindow *window, ComponentView *component_view) -{ - EShellWindowPrivate *priv = window->priv; - GConfClient *gconf_client = gconf_client_get_default (); - - if (component_view->sidebar_widget == NULL) { - init_view (window, component_view); - } else { - if (priv->current_view != NULL) - component_view_deactivate (priv->current_view); - priv->current_view = component_view; - component_view_activate (component_view); - - gtk_notebook_set_current_page (GTK_NOTEBOOK (priv->view_notebook), component_view->notebook_page_num); - gtk_notebook_set_current_page (GTK_NOTEBOOK (priv->sidebar_notebook), component_view->notebook_page_num); - gtk_notebook_set_current_page (GTK_NOTEBOOK (priv->statusbar_notebook), component_view->notebook_page_num); - } - - gconf_client_set_string (gconf_client, "/apps/evolution/shell/view_defaults/component_id", - (component_view->component_alias != NULL - ? component_view->component_alias - : component_view->component_id), - NULL); - - g_object_unref (gconf_client); - - g_signal_emit (window, signals[COMPONENT_CHANGED], 0); -} - - -/* Functions to update the sensitivity of buttons and menu items depending on the status. */ - -static void -update_offline_toggle_status (EShellWindow *window) -{ - EShellWindowPrivate *priv; - GdkPixmap *icon_pixmap; - GdkBitmap *icon_mask; - const char *tooltip; - gboolean sensitive; - - priv = window->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); -} - -static void -update_send_receive_sensitivity (EShellWindow *window) -{ - if (e_shell_get_line_status (window->priv->shell) == E_SHELL_LINE_STATUS_OFFLINE) - bonobo_ui_component_set_prop (window->priv->ui_component, - "/commands/SendReceive", - "sensitive", "0", NULL); - else - bonobo_ui_component_set_prop (window->priv->ui_component, - "/commands/SendReceive", - "sensitive", "1", NULL); -} - - -/* Callbacks. */ - -static void -sidebar_button_selected_callback (ESidebar *sidebar, - int button_id, - EShellWindow *window) -{ - EShellWindowPrivate *priv = window->priv; - ComponentView *component_view; - GSList *p; - - for (p = priv->component_views; p != NULL; p = p->next) { - if (((ComponentView *) p->data)->button_id == button_id) { - component_view = p->data; - break; - } - } - - if (component_view == NULL) { - g_warning ("Unknown component button id %d", button_id); - return; - } - - switch_view (window, component_view); -} - -static void -offline_toggle_clicked_callback (GtkButton *button, - EShellWindow *window) -{ - EShellWindowPrivate *priv = window->priv; - - switch (e_shell_get_line_status (priv->shell)) { - case E_SHELL_LINE_STATUS_ONLINE: - e_shell_go_offline (priv->shell, window); - break; - case E_SHELL_LINE_STATUS_OFFLINE: - e_shell_go_online (priv->shell, window); - break; - default: - g_assert_not_reached (); - } -} - -static void -shell_line_status_changed_callback (EShell *shell, - EShellLineStatus new_status, - EShellWindow *window) -{ - update_offline_toggle_status (window); - update_send_receive_sensitivity (window); -} - -static void -ui_engine_add_hint_callback (BonoboUIEngine *engine, - const char *hint, - EShellWindow *window) -{ - gtk_label_set_text (GTK_LABEL (window->priv->menu_hint_label), hint); - gtk_widget_show (window->priv->menu_hint_label); - gtk_widget_hide (window->priv->statusbar_notebook); -} - -static void -ui_engine_remove_hint_callback (BonoboUIEngine *engine, - EShellWindow *window) -{ - gtk_widget_hide (window->priv->menu_hint_label); - gtk_widget_show (window->priv->statusbar_notebook); -} - - -/* Widgetry. */ - -static void -load_icons (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 -setup_offline_toggle (EShellWindow *window) -{ - EShellWindowPrivate *priv; - GtkWidget *toggle; - GtkWidget *image; - - priv = window->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_callback), window); - - 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 (window); - - 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 (EShellWindow *window) -{ - EShellWindowPrivate *priv; - - priv = window->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_statusbar_notebook (EShellWindow *window) -{ - EShellWindowPrivate *priv; - - priv = window->priv; - - priv->statusbar_notebook = gtk_notebook_new (); - gtk_notebook_set_show_tabs (GTK_NOTEBOOK (priv->statusbar_notebook), FALSE); - gtk_notebook_set_show_border (GTK_NOTEBOOK (priv->statusbar_notebook), FALSE); - - gtk_box_pack_start (GTK_BOX (priv->status_bar), priv->statusbar_notebook, TRUE, TRUE, 0); - gtk_widget_show (priv->statusbar_notebook); -} - -static void -setup_status_bar (EShellWindow *window) -{ - EShellWindowPrivate *priv; - BonoboUIEngine *ui_engine; - - priv = window->priv; - - priv->status_bar = gtk_hbox_new (FALSE, 2); - gtk_widget_show (priv->status_bar); - - setup_offline_toggle (window); - setup_menu_hint_label (window); - setup_statusbar_notebook (window); - - ui_engine = bonobo_window_get_ui_engine (BONOBO_WINDOW (window)); - - g_signal_connect (ui_engine, "add_hint", G_CALLBACK (ui_engine_add_hint_callback), window); - g_signal_connect (ui_engine, "remove_hint", G_CALLBACK (ui_engine_remove_hint_callback), window); -} - -static void -setup_widgets (EShellWindow *window) -{ - EShellWindowPrivate *priv = window->priv; - EComponentRegistry *registry = e_shell_peek_component_registry (priv->shell); - GtkWidget *paned; - GtkWidget *contents_vbox; - GSList *p; - int button_id; - - paned = gtk_hpaned_new (); - - priv->sidebar = e_sidebar_new (); - g_signal_connect (priv->sidebar, "button_selected", - G_CALLBACK (sidebar_button_selected_callback), window); - gtk_paned_pack1 (GTK_PANED (paned), priv->sidebar, FALSE, FALSE); - - priv->sidebar_notebook = gtk_notebook_new (); - gtk_notebook_set_show_tabs (GTK_NOTEBOOK (priv->sidebar_notebook), FALSE); - gtk_notebook_set_show_border (GTK_NOTEBOOK (priv->sidebar_notebook), FALSE); - e_sidebar_set_selection_widget (E_SIDEBAR (priv->sidebar), priv->sidebar_notebook); - - priv->view_notebook = gtk_notebook_new (); - gtk_notebook_set_show_tabs (GTK_NOTEBOOK (priv->view_notebook), FALSE); - gtk_notebook_set_show_border (GTK_NOTEBOOK (priv->view_notebook), FALSE); - gtk_paned_pack2 (GTK_PANED (paned), priv->view_notebook, TRUE, TRUE); - - gtk_paned_set_position (GTK_PANED (paned), 200); - - button_id = 0; - for (p = e_component_registry_peek_list (registry); p != NULL; p = p->next) { - EComponentInfo *info = p->data; - ComponentView *view = component_view_new (info->id, info->alias, button_id); - - window->priv->component_views = g_slist_prepend (window->priv->component_views, view); - e_sidebar_add_button (E_SIDEBAR (priv->sidebar), info->button_label, info->button_icon, button_id); - - button_id ++; - } - - setup_status_bar (window); - - contents_vbox = gtk_vbox_new (FALSE, 0); - gtk_box_pack_start (GTK_BOX (contents_vbox), paned, TRUE, TRUE, 0); - gtk_box_pack_start (GTK_BOX (contents_vbox), priv->status_bar, FALSE, TRUE, 0); - gtk_widget_show_all (contents_vbox); - - /* We only display this when a menu item is actually selected. */ - gtk_widget_hide (priv->menu_hint_label); - - bonobo_window_set_contents (BONOBO_WINDOW (window), contents_vbox); -} - - -/* GObject methods. */ - -static void -impl_dispose (GObject *object) -{ - EShellWindowPrivate *priv = E_SHELL_WINDOW (object)->priv; - - if (priv->shell != NULL) { - g_object_remove_weak_pointer (G_OBJECT (priv->shell), (void **) &priv->shell); - priv->shell = NULL; - } - - if (priv->ui_component != NULL) { - bonobo_object_unref (BONOBO_OBJECT (priv->ui_component)); - priv->ui_component = NULL; - } - - if (priv->tooltips != NULL) { - gtk_object_destroy (GTK_OBJECT (priv->tooltips)); - priv->tooltips = NULL; - } - - (* G_OBJECT_CLASS (parent_class)->dispose) (object); -} - -static void -impl_finalize (GObject *object) -{ - EShellWindowPrivate *priv = E_SHELL_WINDOW (object)->priv; - - g_slist_foreach (priv->component_views, (GFunc) component_view_free, NULL); - g_slist_free (priv->component_views); - - g_free (priv); - - (* G_OBJECT_CLASS (parent_class)->finalize) (object); -} - - -/* Initialization. */ - -static void -class_init (EShellWindowClass *class) -{ - GObjectClass *object_class = G_OBJECT_CLASS (class); - - object_class->dispose = impl_dispose; - object_class->finalize = impl_finalize; - - parent_class = g_type_class_peek_parent (class); - - signals[COMPONENT_CHANGED] = g_signal_new ("component_changed", - G_OBJECT_CLASS_TYPE (object_class), - G_SIGNAL_RUN_FIRST, - G_STRUCT_OFFSET (EShellWindowClass, component_changed), - NULL, NULL, - e_shell_marshal_NONE__NONE, - G_TYPE_NONE, 0); - - load_icons (); -} - -static void -init (EShellWindow *shell_window) -{ - EShellWindowPrivate *priv = g_new0 (EShellWindowPrivate, 1); - - priv->tooltips = gtk_tooltips_new (); - - shell_window->priv = priv; -} - - -/* Instantiation. */ - -GtkWidget * -e_shell_window_new (EShell *shell, - const char *component_id) -{ - EShellWindow *window = g_object_new (e_shell_window_get_type (), NULL); - EShellWindowPrivate *priv = window->priv; - GConfClient *gconf_client = gconf_client_get_default (); - BonoboUIContainer *ui_container; - - if (bonobo_window_construct (BONOBO_WINDOW (window), - bonobo_ui_container_new (), - "evolution", "Ximian Evolution") == NULL) { - g_object_unref (window); - g_object_unref (gconf_client); - return NULL; - } - - window->priv->shell = shell; - g_object_add_weak_pointer (G_OBJECT (shell), (void **) &window->priv->shell); - - /* FIXME TODO: Add system_exception signal handling and all the other - stuff from e_shell_view_construct(). */ - - ui_container = bonobo_window_get_ui_container (BONOBO_WINDOW (window)); - - priv->ui_component = bonobo_ui_component_new ("evolution"); - bonobo_ui_component_set_container (priv->ui_component, - bonobo_object_corba_objref (BONOBO_OBJECT (ui_container)), - NULL); - - bonobo_ui_util_set_ui (priv->ui_component, - PREFIX, - EVOLUTION_UIDIR "/evolution.xml", - "evolution-" BASE_VERSION, NULL); - - e_shell_window_commands_setup (window); - - setup_widgets (window); - - g_signal_connect_object (shell, "line_status_changed", G_CALLBACK (shell_line_status_changed_callback), window, 0); - - gtk_window_set_default_size (GTK_WINDOW (window), 640, 480); - - if (component_id != NULL) { - e_shell_window_switch_to_component (window, component_id); - } else { - char *default_component_id; - - default_component_id = gconf_client_get_string (gconf_client, - "/apps/evolution/shell/view_defaults/component_id", - NULL); - g_object_unref (gconf_client); - - if (default_component_id == NULL) { - e_shell_window_switch_to_component (window, "mail"); - } else { - e_shell_window_switch_to_component (window, default_component_id); - g_free (default_component_id); - } - } - - gtk_window_set_default_size (GTK_WINDOW (window), - gconf_client_get_int (gconf_client, "/apps/evolution/shell/view_defaults/width", NULL), - gconf_client_get_int (gconf_client, "/apps/evolution/shell/view_defaults/height", NULL)); - - e_user_creatable_items_handler_attach_menus (e_shell_peek_user_creatable_items_handler (shell), window); - - g_object_unref (gconf_client); - return GTK_WIDGET (window); -} - - -void -e_shell_window_switch_to_component (EShellWindow *window, const char *component_id) -{ - EShellWindowPrivate *priv = window->priv; - ComponentView *view = NULL; - GSList *p; - - g_return_if_fail (E_IS_SHELL_WINDOW (window)); - g_return_if_fail (component_id != NULL); - - for (p = priv->component_views; p != NULL; p = p->next) { - ComponentView *this_view = p->data; - - if (strcmp (this_view->component_id, component_id) == 0 - || (this_view->component_alias != NULL - && strcmp (this_view->component_alias, component_id) == 0)) - { - view = p->data; - break; - } - } - - if (view == NULL) { - g_warning ("Unknown component %s", component_id); - return; - } - - e_sidebar_select_button (E_SIDEBAR (priv->sidebar), view->button_id); -} - - -const char * -e_shell_window_peek_current_component_id (EShellWindow *window) -{ - g_return_val_if_fail (E_IS_SHELL_WINDOW (window), NULL); - - if (window->priv->current_view == NULL) - return NULL; - - return window->priv->current_view->component_id; -} - - -EShell * -e_shell_window_peek_shell (EShellWindow *window) -{ - g_return_val_if_fail (E_IS_SHELL_WINDOW (window), NULL); - - return window->priv->shell; -} - - -BonoboUIComponent * -e_shell_window_peek_bonobo_ui_component (EShellWindow *window) -{ - g_return_val_if_fail (E_IS_SHELL_WINDOW (window), NULL); - - return window->priv->ui_component; -} - -void -e_shell_window_save_defaults (EShellWindow *window) -{ - GConfClient *client = gconf_client_get_default (); - - gconf_client_set_int (client, "/apps/evolution/shell/view_defaults/width", - GTK_WIDGET (window)->allocation.width, NULL); - gconf_client_set_int (client, "/apps/evolution/shell/view_defaults/height", - GTK_WIDGET (window)->allocation.height, NULL); - - g_object_unref (client); -} - -void -e_shell_window_show_settings (EShellWindow *window) -{ - g_return_if_fail (E_IS_SHELL_WINDOW (window)); - - e_shell_show_settings (window->priv->shell, NULL, window); -} - - -E_MAKE_TYPE (e_shell_window, "EShellWindow", EShellWindow, class_init, init, BONOBO_TYPE_WINDOW) diff --git a/shell/e-shell-window.h b/shell/e-shell-window.h deleted file mode 100644 index 01c231c329..0000000000 --- a/shell/e-shell-window.h +++ /dev/null @@ -1,71 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* e-shell-window.h - * - * Copyright (C) 2003 Ettore Perazzoli - * - * 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_WINDOW_H_ -#define _E_SHELL_WINDOW_H_ - -#include <bonobo/bonobo-window.h> -#include <bonobo/bonobo-ui-component.h> - -#define E_TYPE_SHELL_WINDOW (e_shell_window_get_type ()) -#define E_SHELL_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), E_TYPE_SHELL_WINDOW, EShellWindow)) -#define E_SHELL_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), E_TYPE_SHELL_WINDOW, EShellWindowClass)) -#define E_IS_SHELL_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), E_TYPE_SHELL_WINDOW)) -#define E_IS_SHELL_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), E_TYPE_SHELL_WINDOW)) - - -typedef struct _EShellWindow EShellWindow; -typedef struct _EShellWindowPrivate EShellWindowPrivate; -typedef struct _EShellWindowClass EShellWindowClass; - -struct _EShellWindow { - BonoboWindow parent; - - EShellWindowPrivate *priv; -}; - -struct _EShellWindowClass { - BonoboWindowClass parent_class; - - void (* component_changed) (EShellWindow *window); -}; - - -#include "e-shell.h" - - -GType e_shell_window_get_type (void); - -GtkWidget *e_shell_window_new (EShell *shell, - const char *component_id); - -void e_shell_window_switch_to_component (EShellWindow *shell, - const char *component_id); -const char *e_shell_window_peek_current_component_id (EShellWindow *shell); - -EShell *e_shell_window_peek_shell (EShellWindow *window); -BonoboUIComponent *e_shell_window_peek_bonobo_ui_component (EShellWindow *window); - -void e_shell_window_save_defaults (EShellWindow *window); -void e_shell_window_show_settings (EShellWindow *window); - -#endif /* _E_SHELL_WINDOW_H_ */ diff --git a/shell/e-shell.c b/shell/e-shell.c deleted file mode 100644 index 7da688d100..0000000000 --- a/shell/e-shell.c +++ /dev/null @@ -1,1073 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* e-shell.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 - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include "e-shell.h" - -#include "e-util/e-dialog-utils.h" - -#include "e-setup.h" -#include "e-shell-constants.h" -#include "e-shell-offline-handler.h" -#include "e-shell-settings-dialog.h" -#include "e-shell-startup-wizard.h" - -#include "e-shell-marshal.h" - -#include "evolution-shell-component-utils.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-activation/bonobo-activation.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; - - GList *windows; - - EUserCreatableItemsHandler *user_creatable_items_handler; - /* EUriSchemaRegistry *uri_schema_registry; FIXME */ - EComponentRegistry *component_registry; - - /* Names for the types of the folders that have maybe crashed. */ - /* FIXME TODO */ - GList *crash_type_names; /* char * */ - - /* Line status. */ - EShellLineStatus line_status; - - /* 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; - - /* 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; -}; - - -/* Signals. */ - -enum { - NO_WINDOWS_LEFT, - LINE_STATUS_CHANGED, - NEW_WINDOW_CREATED, - LAST_SIGNAL -}; - -static guint signals[LAST_SIGNAL] = { 0 }; - - -/* Utility functions. */ - -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) -{ - /* FIXME TODO */ -} - - -/* 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 void -impl_Shell_createNewWindow (PortableServer_Servant servant, - const CORBA_char *component_id, - CORBA_Environment *ev) -{ - BonoboObject *bonobo_object; - EShell *shell; - EShellWindow *shell_window; - - if (raise_exception_if_not_ready (servant, ev)) - return; - - bonobo_object = bonobo_object_from_servant (servant); - shell = E_SHELL (bonobo_object); - - if (component_id[0] == '\0') - component_id = NULL; - - shell_window = e_shell_create_window (shell, component_id, NULL); - if (shell_window == NULL) { - CORBA_exception_set (ev, CORBA_USER_EXCEPTION, - ex_GNOME_Evolution_Shell_ComponentNotFound, NULL); - return; - } -} - -static void -impl_Shell_handleURI (PortableServer_Servant servant, - const CORBA_char *uri, - CORBA_Environment *ev) -{ - EShell *shell = E_SHELL (bonobo_object_from_servant (servant)); - EComponentInfo *component_info; - const char *colon_p; - char *schema; - - colon_p = strchr (uri, ':'); - if (colon_p == NULL) - schema = g_strdup (uri); - else - schema = g_strndup (uri, colon_p - uri); - - component_info = e_component_registry_peek_info_for_uri_schema (shell->priv->component_registry, schema); - g_free (schema); - - if (component_info == NULL) { - CORBA_exception_set (ev, CORBA_USER_EXCEPTION, ex_GNOME_Evolution_Shell_UnsupportedSchema, NULL); - return; - } - - GNOME_Evolution_Component_handleURI (component_info->iface, uri, ev); -} - -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); -} - - -/* EShellWindow handling and bookkeeping. */ - -static int -window_delete_event_cb (GtkWidget *widget, - GdkEventAny *ev, - void *data) -{ - EShell *shell; - - g_assert (E_IS_SHELL_WINDOW (widget)); - shell = E_SHELL (data); - - return ! e_shell_request_close_window (shell, E_SHELL_WINDOW (widget)); -} - -static gboolean -notify_no_windows_left_idle_cb (void *data) -{ - EShell *shell; - - shell = E_SHELL (data); - - set_interactive (shell, FALSE); - - g_signal_emit (shell, signals [NO_WINDOWS_LEFT], 0); - - bonobo_object_unref (BONOBO_OBJECT (shell)); - - return FALSE; -} - -static void -window_weak_notify (void *data, - GObject *where_the_object_was) -{ - EShell *shell; - int num_windows; - - shell = E_SHELL (data); - - num_windows = g_list_length (shell->priv->windows); - - /* If this is our last window, save settings now because in the callback - for no_windows_left shell->priv->windows will be NULL and settings won't - be saved because of that. */ - if (num_windows == 1) - e_shell_save_settings (shell); - - shell->priv->windows = g_list_remove (shell->priv->windows, where_the_object_was); - - if (shell->priv->windows == NULL) { - bonobo_object_ref (BONOBO_OBJECT (shell)); - g_idle_add (notify_no_windows_left_idle_cb, shell); - } -} - -static EShellWindow * -create_window (EShell *shell, - const char *component_id, - EShellWindow *template_window) -{ - EShellPrivate *priv; - EShellWindow *window; - - priv = shell->priv; - - window = E_SHELL_WINDOW (e_shell_window_new (shell, component_id)); - - g_signal_connect (window, "delete_event", G_CALLBACK (window_delete_event_cb), shell); - g_object_weak_ref (G_OBJECT (window), window_weak_notify, shell); - - shell->priv->windows = g_list_prepend (shell->priv->windows, window); - - g_signal_emit (shell, signals[NEW_WINDOW_CREATED], 0, window); - - return window; -} - - -/* 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->user_creatable_items_handler != NULL) { - g_object_unref (priv->user_creatable_items_handler); - priv->user_creatable_items_handler = NULL; - } - -#if 0 /* FIXME */ - if (priv->uri_schema_registry != NULL) { - g_object_unref (priv->uri_schema_registry); - priv->uri_schema_registry = NULL; - } -#endif - - if (priv->offline_handler != NULL) { - g_object_unref (priv->offline_handler); - priv->offline_handler = NULL; - } - - for (p = priv->windows; p != NULL; p = p->next) { - EShellWindow *window; - - window = E_SHELL_WINDOW (p->data); - - g_signal_handlers_disconnect_by_func (window, G_CALLBACK (window_delete_event_cb), shell); - g_object_weak_unref (G_OBJECT (window), window_weak_notify, shell); - - gtk_object_destroy (GTK_OBJECT (window)); - } - - g_list_free (priv->windows); - priv->windows = NULL; - - /* No unreffing for these as they are aggregate. */ - /* bonobo_object_unref (BONOBO_OBJECT (priv->corba_storage_registry)); */ - - 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))); - - 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_WINDOWS_LEFT] = - g_signal_new ("no_windows_left", - G_OBJECT_CLASS_TYPE (object_class), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (EShellClass, no_windows_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_WINDOW_CREATED] = - g_signal_new ("new_window_created", - G_OBJECT_CLASS_TYPE (object_class), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (EShellClass, new_window_created), - NULL, NULL, - e_shell_marshal_NONE__POINTER, - G_TYPE_NONE, 1, - G_TYPE_POINTER); - - epv = & klass->epv; - epv->createNewWindow = impl_Shell_createNewWindow; - epv->handleURI = impl_Shell_handleURI; - epv->setLineStatus = impl_Shell_setLineStatus; -} - -static void -e_shell_init (EShell *shell) -{ - EShellPrivate *priv; - - priv = g_new0 (EShellPrivate, 1); - priv->line_status = E_SHELL_LINE_STATUS_OFFLINE; - priv->component_registry = e_component_registry_new (); - priv->user_creatable_items_handler = e_user_creatable_items_handler_new (priv->component_registry); - - shell->priv = priv; -} - - -/** - * e_shell_construct: - * @shell: An EShell object to construct - * @iid: OAFIID for registering the shell into the name server - * @startup_line_mode: How to set up the line mode (online or offline) initally. - * - * Construct @shell so that it uses the specified @corba_object. - * - * Return value: The result of the operation. - **/ -EShellConstructResult -e_shell_construct (EShell *shell, - const char *iid, - EShellStartupLineMode startup_line_mode) -{ - GtkWidget *splash = NULL; - EShellPrivate *priv; - CORBA_Object corba_object; - 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 (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); - - /* 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; - - while (gtk_events_pending ()) - gtk_main_iteration (); - - if (splash) - gtk_widget_destroy (splash); - - if (e_shell_startup_wizard_create () == FALSE) { - 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: - * @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 (EShellStartupLineMode startup_line_mode, - EShellConstructResult *construct_result_return) -{ - EShell *new; - EShellPrivate *priv; - EShellConstructResult construct_result; - - new = g_object_new (e_shell_get_type (), NULL); - - construct_result = e_shell_construct (new, E_SHELL_OAFIID, 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; - - *construct_result_return = E_SHELL_CONSTRUCT_RESULT_OK; - return new; -} - - -/** - * e_shell_attempt_upgrade: - * @shell: - * @from_version: - * - * Upgrade config and components from the specified version name. - * - * Return value: %TRUE If it works, %FALSE if it fails (it should only fail if - * upgrade from @from_version is unsupported). - **/ -gboolean -e_shell_attempt_upgrade (EShell *shell, - const char *from_version) -{ - GSList *component_infos, *p; - int major, minor, revision; - int current_major, current_minor, current_revision; - gboolean success; - - g_return_val_if_fail (E_IS_SHELL (shell), FALSE); - g_return_val_if_fail (from_version != NULL, FALSE); - - sscanf (from_version, "%u.%u.%u", &major, &minor, &revision); - sscanf (VERSION, "%u.%u.%u", ¤t_major, ¤t_minor, ¤t_revision); - - if (! (current_major > major - || (current_major == major && current_minor > minor) - || (current_minor == current_minor && current_revision > current_revision))) { - return TRUE; - } - - success = TRUE; - - component_infos = e_component_registry_peek_list (shell->priv->component_registry); - for (p = component_infos; p != NULL; p = p->next) { - const EComponentInfo *info = p->data; - CORBA_Environment ev; - gboolean component_upgraded; - - CORBA_exception_init (&ev); - - component_upgraded = GNOME_Evolution_Component_upgradeFromVersion (info->iface, major, minor, revision, &ev); - - if (BONOBO_EX (&ev)) { - char *exception_text; - - // Ignore components that do not implement this version, it might just mean that they don't need an - // upgrade path. - if (strcmp (ev._id, ex_CORBA_NO_IMPLEMENT) == 0) { - CORBA_exception_free (&ev); - continue; - } - - exception_text = bonobo_exception_get_text (&ev); - g_warning ("Upgrade of component \"%s\" from version %s failed with exception %s", - info->alias, from_version, exception_text); - g_free (exception_text); - CORBA_exception_free (&ev); - success = FALSE; - } else { - CORBA_exception_free (&ev); - if (! component_upgraded) { - g_warning ("Component \"%s\" could not upgrade configuration from version \"%s\"", - info->alias, from_version); - success = FALSE; - } - } - } - - return success; -} - - -/** - * e_shell_create_window: - * @shell: The shell for which to create a new window. - * @component_id: Id or alias of the component to display in the new window. - * @template_window: Window from which to copy the window settings (can be %NULL). - * - * Create a new window for @uri. - * - * Return value: The new window. - **/ -EShellWindow * -e_shell_create_window (EShell *shell, - const char *component_id, - EShellWindow *template_window) -{ - EShellWindow *window; - EShellPrivate *priv; - - /* FIXME need to actually copy settings from template_window. */ - - g_return_val_if_fail (shell != NULL, NULL); - g_return_val_if_fail (E_IS_SHELL (shell), NULL); - - priv = shell->priv; - - window = create_window (shell, component_id, template_window); - - gtk_widget_show (GTK_WIDGET (window)); - - set_interactive (shell, TRUE); - - return window; -} - -gboolean -e_shell_request_close_window (EShell *shell, - EShellWindow *shell_window) -{ - g_return_val_if_fail (E_IS_SHELL (shell), FALSE); - g_return_val_if_fail (E_IS_SHELL_WINDOW (shell_window), FALSE); - - e_shell_save_settings (shell); - - if (g_list_length (shell->priv->windows) != 1) { - /* Not the last window. */ - return TRUE; - } - - if (shell->priv->preparing_to_quit) - return FALSE; - - /* If it's the last window, save settings and ask for confirmation before - quitting. */ - - e_shell_window_save_defaults (shell_window); - - if (e_shell_prepare_for_quit (shell)) - return TRUE; - else - return FALSE; -} - - -#if 0 /* FIXME */ -/** - * e_shell_peek_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_peek_uri_schema_registry (EShell *shell) -{ - g_return_val_if_fail (E_IS_SHELL (shell), NULL); - - return shell->priv->uri_schema_registry; -} -#endif - - -/** - * e_shell_peek_component_registry: - * @shell: - * - * Get the component registry associated to @shell. - * - * Return value: - **/ -EComponentRegistry * -e_shell_peek_component_registry (EShell *shell) -{ - g_return_val_if_fail (E_IS_SHELL (shell), NULL); - - return shell->priv->component_registry; -} - - -/** - * 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 windows - * have been saved. - **/ -gboolean -e_shell_save_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_close_all_windows: - * @shell: - * - * Destroy all the windows in @shell. - **/ -void -e_shell_close_all_windows (EShell *shell) -{ - EShellPrivate *priv; - GList *p, *pnext; - - g_return_if_fail (shell != NULL); - g_return_if_fail (E_IS_SHELL (shell)); - - if (shell->priv->windows) - e_shell_save_settings (shell); - - priv = shell->priv; - for (p = priv->windows; p != NULL; p = pnext) { - pnext = p->next; - - /* Note that this will also remove the window from the list... Hence the - need for the pnext variable. */ - gtk_widget_destroy (GTK_WIDGET (p->data)); - } -} - - -/** - * 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; -} - - -/* 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_go_offline: - * @shell: - * @action_window: - * - * Make the shell go into off-line mode. - **/ -void -e_shell_go_offline (EShell *shell, - EShellWindow *action_window) -{ - EShellPrivate *priv; - - g_return_if_fail (shell != NULL); - g_return_if_fail (E_IS_SHELL (shell)); - g_return_if_fail (action_window != NULL); - g_return_if_fail (action_window == NULL || E_IS_SHELL_WINDOW (action_window)); - - priv = shell->priv; - - if (priv->line_status != E_SHELL_LINE_STATUS_ONLINE) - return; - - 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, GTK_WINDOW (action_window)); -} - -/** - * e_shell_go_online: - * @shell: - * @action_window: - * - * Make the shell go into on-line mode. - **/ -void -e_shell_go_online (EShell *shell, - EShellWindow *action_window) -{ - EShellPrivate *priv; - GSList *component_infos; - GSList *p; - - g_return_if_fail (shell != NULL); - g_return_if_fail (E_IS_SHELL (shell)); - g_return_if_fail (action_window == NULL || E_IS_SHELL_WINDOW (action_window)); - - priv = shell->priv; - - component_infos = e_component_registry_peek_list (priv->component_registry); - for (p = component_infos; p != NULL; p = p->next) { - EComponentInfo *info = p->data; - CORBA_Environment ev; - GNOME_Evolution_Offline offline_interface; - const char *id; - - CORBA_exception_init (&ev); - - offline_interface = Bonobo_Unknown_queryInterface (info->iface, "IDL:GNOME/Evolution/Offline:1.0", &ev); - if (ev._major != CORBA_NO_EXCEPTION || offline_interface == CORBA_OBJECT_NIL) { - CORBA_exception_free (&ev); - continue; - } - - CORBA_exception_free (&ev); - - 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); - } - - 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) -{ - GSList *component_list; - GSList *p; - - g_return_if_fail (E_IS_SHELL (shell)); - - component_list = e_component_registry_peek_list (shell->priv->component_registry); - - for (p = component_list; p != NULL; p = p->next) { - EComponentInfo *info = p->data; - CORBA_Environment ev; - - CORBA_exception_init (&ev); - - GNOME_Evolution_Component_sendAndReceive (info->iface, &ev); - - // Ignore errors, the components can decide to not implement - // this interface. - - CORBA_exception_free (&ev); - } -} - - -void -e_shell_show_settings (EShell *shell, - const char *type, - EShellWindow *shell_window) -{ - 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); -} - - -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"); - } -} - - -gboolean -e_shell_prepare_for_quit (EShell *shell) -{ - EShellPrivate *priv; - GSList *component_infos; - GList *p; - GSList *sp; - CORBA_boolean can_quit; - - g_return_val_if_fail (E_IS_SHELL (shell), FALSE); - - priv = shell->priv; - priv->preparing_to_quit = TRUE; - - /* Make all the windows insensitive so we have some modal-like - behavior. */ - for (p = priv->windows; p != NULL; p = p->next) - gtk_widget_set_sensitive (GTK_WIDGET (p->data), FALSE); - - component_infos = e_component_registry_peek_list (priv->component_registry); - can_quit = TRUE; - for (sp = component_infos; sp != NULL; sp = sp->next) { - EComponentInfo *info = sp->data; - CORBA_Environment ev; - - CORBA_exception_init (&ev); - - can_quit = GNOME_Evolution_Component_requestQuit (info->iface, &ev); - if (BONOBO_EX (&ev)) { - /* The component might not implement the interface, in which case we assume we can quit. */ - can_quit = TRUE; - } - - CORBA_exception_free (&ev); - - if (! can_quit) - break; - } - - /* Restore all the windows to be sensitive. */ - for (p = priv->windows; p != NULL; p = p->next) - gtk_widget_set_sensitive (GTK_WIDGET (p->data), TRUE); - - priv->preparing_to_quit = FALSE; - return can_quit; -} - - -EUserCreatableItemsHandler * -e_shell_peek_user_creatable_items_handler (EShell *shell) -{ - g_return_val_if_fail (E_IS_SHELL (shell), NULL); - - return shell->priv->user_creatable_items_handler; -} - - -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 b8922de39d..0000000000 --- a/shell/e-shell.h +++ /dev/null @@ -1,145 +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-window.h" -#include "e-user-creatable-items-handler.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_windows_left) (EShell *shell); - void (* line_status_changed) (EShell *shell, EShellLineStatus status); - void (* new_window_created) (EShell *shell, EShellWindow *window); -}; - - -/* ID for registering the shell in the OAF name service. */ -#define E_SHELL_OAFIID "OAFIID:GNOME_Evolution_Shell:" BASE_VERSION - -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; - - -GtkType e_shell_get_type (void); -EShellConstructResult e_shell_construct (EShell *shell, - const char *iid, - EShellStartupLineMode startup_line_mode); -EShell *e_shell_new (EShellStartupLineMode startup_line_mode, - EShellConstructResult *construct_result_return); - -gboolean e_shell_attempt_upgrade (EShell *shell, - const char *from_version); - -EShellWindow *e_shell_create_window (EShell *shell, - const char *component_id, - EShellWindow *template_window); -gboolean e_shell_request_close_window (EShell *shell, - EShellWindow *window); - - -#if 0 -EUriSchemaRegistry *e_shell_peek_uri_schema_registry (EShell *shell); -#endif - -EComponentRegistry *e_shell_peek_component_registry (EShell *shell); - -gboolean e_shell_save_settings (EShell *shell); -void e_shell_close_all_windows (EShell *shell); - -EShellLineStatus e_shell_get_line_status (EShell *shell); -void e_shell_go_offline (EShell *shell, - EShellWindow *action_window); -void e_shell_go_online (EShell *shell, - EShellWindow *action_window); - -void e_shell_send_receive (EShell *shell); - -void e_shell_show_settings (EShell *shell, - const char *type, - EShellWindow *shell_window); - -gboolean e_shell_prepare_for_quit (EShell *shell); - -const char *e_shell_construct_result_to_string (EShellConstructResult result); - -EUserCreatableItemsHandler *e_shell_peek_user_creatable_items_handler (EShell *shell); - - -#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 2672dc251d..0000000000 --- a/shell/e-shortcuts.c +++ /dev/null @@ -1,1289 +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="Spam" type="vspam">evolution:/local/Spam</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, group_num, -1, E_SUMMARY_URI, _("Summary"), 0, "summary", NULL); - - e_shortcuts_add_shortcut (shortcuts, group_num, -1, "default:mail", _("Inbox"), 0, "mail", "inbox"); - e_shortcuts_add_shortcut (shortcuts, group_num, -1, "default:calendar", _("Calendar"), 0, "calendar", NULL); - e_shortcuts_add_shortcut (shortcuts, group_num, -1, "default:tasks", _("Tasks"), 0, "tasks", NULL); - e_shortcuts_add_shortcut (shortcuts, group_num, -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, e_shortcuts_get_num_groups (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-sidebar.c b/shell/e-sidebar.c deleted file mode 100644 index 5636716b32..0000000000 --- a/shell/e-sidebar.c +++ /dev/null @@ -1,453 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* e-sidebar.c - * - * Copyright (C) 2003 Ettore Perazzoli - * - * 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> - */ - -#include <config.h> - -#include "e-sidebar.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 <gtk/gtktogglebutton.h> - - -#define PARENT_TYPE gtk_container_get_type () -static GtkContainerClass *parent_class = NULL; - - -typedef struct { - GtkWidget *button_widget; - int id; -} Button; - -struct _ESidebarPrivate { - GtkWidget *selection_widget; - GSList *buttons; - - gboolean in_toggle; -}; - - -enum { - BUTTON_SELECTED, - NUM_SIGNALS -}; - -static unsigned int signals[NUM_SIGNALS] = { 0 }; - - -#define PADDING 6 - - -/* Utility functions. */ - -static Button * -button_new (GtkWidget *button_widget, - int id) -{ - Button *button = g_new (Button, 1); - - button->button_widget = button_widget; - button->id = id; - - g_object_ref (button_widget); - - return button; -} - -static void -button_free (Button *button) -{ - g_object_unref (button->button_widget); - g_free (button); -} - -static void -update_buttons (ESidebar *sidebar, int new_selected_id) -{ - GSList *p; - - sidebar->priv->in_toggle = TRUE; - - for (p = sidebar->priv->buttons; p != NULL; p = p->next) { - Button *button = p->data; - - if (button->id == new_selected_id) - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button->button_widget), TRUE); - else - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button->button_widget), FALSE); - } - - sidebar->priv->in_toggle = FALSE; -} - - -/* Callbacks. */ - -static void -button_toggled_callback (GtkToggleButton *toggle_button, - ESidebar *sidebar) -{ - int id = 0; - GSList *p; - - if (sidebar->priv->in_toggle) - return; - - sidebar->priv->in_toggle = TRUE; - - for (p = sidebar->priv->buttons; p != NULL; p = p->next) { - Button *button = p->data; - - if (button->button_widget != GTK_WIDGET (toggle_button)) { - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button->button_widget), FALSE); - } else { - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button->button_widget), TRUE); - id = button->id; - } - } - - sidebar->priv->in_toggle = FALSE; - - g_signal_emit (sidebar, signals[BUTTON_SELECTED], 0, id); -} - - -/* Layout. */ - -static void -do_layout (ESidebar *sidebar) -{ - GtkAllocation *allocation = & GTK_WIDGET (sidebar)->allocation; - GSList *rows [g_slist_length (sidebar->priv->buttons)]; - GSList *p; - int row_number; - int row_width; - int row_last; - int x, y; - int i; - - /* (Yes, this code calls gtk_widget_size_request() an ungodly number of times, but it's not - like we care about performance here, and this makes the code simpler.) */ - - /* 1. Split the buttons into rows, depending on their width. */ - - row_number = 0; - rows [0] = NULL; - row_width = PADDING; - for (p = sidebar->priv->buttons; p != NULL; p = p->next) { - Button *button = p->data; - GtkRequisition requisition; - - gtk_widget_size_request (GTK_WIDGET (button->button_widget), &requisition); - - if (row_width + requisition.width + PADDING >= allocation->width - && rows [row_number] != NULL) { - row_number ++; - rows [row_number] = NULL; - row_width = PADDING; - } - - row_width += requisition.width + PADDING; - rows [row_number] = g_slist_append (rows [row_number], button->button_widget); - } - - row_last = row_number; - - /* 2. Layout the buttons. */ - - y = allocation->y + allocation->height - PADDING - 1; - for (i = row_last; i >= 0; i --) { - int row_height = 0; - - for (p = rows [i]; p != NULL; p = p->next) { - GtkRequisition requisition; - - gtk_widget_size_request (GTK_WIDGET (p->data), &requisition); - row_height = MAX (row_height, requisition.height); - } - - y -= row_height; - x = PADDING; - for (p = rows [i]; p != NULL; p = p->next) { - GtkRequisition requisition; - GtkAllocation child_allocation; - - gtk_widget_size_request (GTK_WIDGET (p->data), &requisition); - - child_allocation.x = x; - child_allocation.y = y; - child_allocation.width = requisition.width; - child_allocation.height = requisition.height; - - gtk_widget_size_allocate (GTK_WIDGET (p->data), &child_allocation); - - x += requisition.width + PADDING; - } - - y -= PADDING; - } - - - /* 3. Place the selection widget. */ - - { - GtkAllocation child_allocation; - - child_allocation.x = allocation->x + PADDING; - child_allocation.y = allocation->y + PADDING; - child_allocation.width = allocation->width - PADDING * 2; - child_allocation.height = y - allocation->y - PADDING; - - gtk_widget_size_allocate (sidebar->priv->selection_widget, & child_allocation); - } - - - /* 4. Free stuff */ - - for (i = 0; i <= row_last; i ++) - g_slist_free (rows [i]); -} - - -/* GtkContainer methods. */ - -static void -impl_forall (GtkContainer *container, - gboolean include_internals, - GtkCallback callback, - void *callback_data) -{ - ESidebar *sidebar = E_SIDEBAR (container); - GSList *p; - - if (sidebar->priv->selection_widget != NULL) - (* callback) (sidebar->priv->selection_widget, callback_data); - - for (p = sidebar->priv->buttons; p != NULL; p = p->next) { - GtkWidget *widget = ((Button *) p->data)->button_widget; - (* callback) (widget, callback_data); - } -} - -static void -impl_remove (GtkContainer *container, - GtkWidget *widget) -{ - ESidebar *sidebar = E_SIDEBAR (container); - GSList *p; - - if (widget == sidebar->priv->selection_widget) { - e_sidebar_set_selection_widget (sidebar, NULL); - return; - } - - for (p = sidebar->priv->buttons; p != NULL; p = p->next) { - GtkWidget *button_widget = ((Button *) p->data)->button_widget; - - if (button_widget == widget) { - gtk_widget_unparent (button_widget); - sidebar->priv->buttons = g_slist_remove_link (sidebar->priv->buttons, p); - gtk_widget_queue_resize (GTK_WIDGET (sidebar)); - break; - } - } -} - - -/* GtkWidget methods. */ - -static void -impl_size_request (GtkWidget *widget, - GtkRequisition *requisition) -{ - ESidebar *sidebar = E_SIDEBAR (widget); - GSList *p; - - if (sidebar->priv->selection_widget == NULL) { - requisition->width = 2 * PADDING; - requisition->height = 2 * PADDING; - } else { - gtk_widget_size_request (sidebar->priv->selection_widget, requisition); - requisition->width += 2 * PADDING; - requisition->height += 2 * PADDING; - } - - for (p = sidebar->priv->buttons; p != NULL; p = p->next) { - Button *button = p->data; - GtkRequisition button_requisition; - - gtk_widget_size_request (button->button_widget, &button_requisition); - - requisition->width = MAX (requisition->width, button_requisition.width + 2 * PADDING); - requisition->height += button_requisition.height + PADDING; - } -} - -static void -impl_size_allocate (GtkWidget *widget, - GtkAllocation *allocation) -{ - widget->allocation = *allocation; - - do_layout (E_SIDEBAR (widget)); -} - - -/* GObject methods. */ - -static void -impl_dispose (GObject *object) -{ - ESidebarPrivate *priv = E_SIDEBAR (object)->priv; - - g_slist_foreach (priv->buttons, (GFunc) button_free, NULL); - g_slist_free (priv->buttons); - priv->buttons = NULL; - - (* G_OBJECT_CLASS (parent_class)->dispose) (object); -} - -static void -impl_finalize (GObject *object) -{ - ESidebarPrivate *priv = E_SIDEBAR (object)->priv; - - g_free (priv); - - (* G_OBJECT_CLASS (parent_class)->finalize) (object); -} - - -/* Initialization. */ - -static void -class_init (ESidebarClass *class) -{ - GtkContainerClass *container_class = GTK_CONTAINER_CLASS (class); - GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (class); - GObjectClass *object_class = G_OBJECT_CLASS (class); - - container_class->forall = impl_forall; - container_class->remove = impl_remove; - - widget_class->size_request = impl_size_request; - widget_class->size_allocate = impl_size_allocate; - - object_class->dispose = impl_dispose; - object_class->finalize = impl_finalize; - - parent_class = g_type_class_peek_parent (class); - - - signals[BUTTON_SELECTED] - = g_signal_new ("button_selected", - G_OBJECT_CLASS_TYPE (object_class), - G_SIGNAL_RUN_FIRST, - G_STRUCT_OFFSET (ESidebarClass, button_selected), - NULL, NULL, - e_shell_marshal_NONE__INT, - G_TYPE_NONE, 1, - G_TYPE_INT); -} - -static void -init (ESidebar *sidebar) -{ - ESidebarPrivate *priv; - - GTK_WIDGET_SET_FLAGS (sidebar, GTK_NO_WINDOW); - - priv = g_new0 (ESidebarPrivate, 1); - sidebar->priv = priv; -} - - -GtkWidget * -e_sidebar_new (void) -{ - ESidebar *sidebar = g_object_new (e_sidebar_get_type (), NULL); - - return GTK_WIDGET (sidebar); -} - - -void -e_sidebar_set_selection_widget (ESidebar *sidebar, GtkWidget *widget) -{ - if (sidebar->priv->selection_widget != NULL) - gtk_widget_unparent (sidebar->priv->selection_widget); - - sidebar->priv->selection_widget = widget; - - if (widget != NULL) - gtk_widget_set_parent (widget, GTK_WIDGET (sidebar)); - - gtk_widget_queue_resize (GTK_WIDGET (sidebar)); -} - - -void -e_sidebar_add_button (ESidebar *sidebar, - const char *label, - GdkPixbuf *icon, - int id) -{ - GtkWidget *button_widget; - GtkWidget *hbox; - GtkWidget *icon_widget; - GtkWidget *label_widget; - - button_widget = gtk_toggle_button_new (); - sidebar->priv->buttons = g_slist_append (sidebar->priv->buttons, button_new (button_widget, id)); - gtk_widget_set_parent (button_widget, GTK_WIDGET (sidebar)); - - g_signal_connect (button_widget, "toggled", G_CALLBACK (button_toggled_callback), sidebar); - - hbox = gtk_hbox_new (FALSE, 3); - gtk_container_set_border_width (GTK_CONTAINER (hbox), 2); - icon_widget = gtk_image_new_from_pixbuf (icon); - label_widget = gtk_label_new (label); - gtk_box_pack_start (GTK_BOX (hbox), icon_widget, FALSE, TRUE, 0); - gtk_box_pack_start (GTK_BOX (hbox), label_widget, TRUE, TRUE, 0); - gtk_container_add (GTK_CONTAINER (button_widget), hbox); - - gtk_widget_show_all (button_widget); - - gtk_widget_queue_resize (GTK_WIDGET (sidebar)); -} - - -void -e_sidebar_select_button (ESidebar *sidebar, int id) -{ - update_buttons (sidebar, id); - - g_signal_emit (sidebar, signals[BUTTON_SELECTED], 0, id); -} - - -E_MAKE_TYPE (e_sidebar, "ESidebar", ESidebar, class_init, init, PARENT_TYPE) diff --git a/shell/e-sidebar.h b/shell/e-sidebar.h deleted file mode 100644 index e224698346..0000000000 --- a/shell/e-sidebar.h +++ /dev/null @@ -1,66 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* e-sidebar.h - * - * Copyright (C) 2003 Ettore Perazzoli - * - * 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_SIDEBAR_H_ -#define _E_SIDEBAR_H_ - -#include <gtk/gtkcontainer.h> - -#define E_TYPE_SIDEBAR (e_sidebar_get_type ()) -#define E_SIDEBAR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), E_TYPE_SIDEBAR, ESidebar)) -#define E_SIDEBAR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), E_TYPE_SIDEBAR, ESidebarClass)) -#define E_IS_SIDEBAR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), E_TYPE_SIDEBAR)) -#define E_IS_SIDEBAR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), E_TYPE_SIDEBAR)) - - -typedef struct _ESidebar ESidebar; -typedef struct _ESidebarPrivate ESidebarPrivate; -typedef struct _ESidebarClass ESidebarClass; - -struct _ESidebar { - GtkContainer parent; - - ESidebarPrivate *priv; -}; - -struct _ESidebarClass { - GtkContainerClass parent_class; - - void (* button_selected) (ESidebar *sidebar, int id); -}; - - -GType e_sidebar_get_type (void); -GtkWidget *e_sidebar_new (void); - -void e_sidebar_set_selection_widget (ESidebar *sidebar, - GtkWidget *widget); - -void e_sidebar_add_button (ESidebar *sidebar, - const char *label, - GdkPixbuf *icon, - int id); - -void e_sidebar_select_button (ESidebar *sidebar, - int id); - -#endif /* _E_SIDEBAR_H_ */ diff --git a/shell/e-splash.c b/shell/e-splash.c deleted file mode 100644 index 7168e2b387..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.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-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/e-user-creatable-items-handler.c b/shell/e-user-creatable-items-handler.c deleted file mode 100644 index f45bb5183d..0000000000 --- a/shell/e-user-creatable-items-handler.c +++ /dev/null @@ -1,789 +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-user-creatable-items-handler.h" - -#include "e-shell-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 <bonobo/bonobo-control.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:" BASE_VERSION - -#define SHELL_WINDOW_KEY "EUserCreatableItemsHandler:shell_window" -#define COMBO_BUTTON_WIDGET_KEY "EUserCreatableItemsHandler:combo_button" -#define TOOLTIPS_KEY "EUserCreatableItemsHandler:tooltips" - -struct _Component { - char *id; - GNOME_Evolution_Component component; - GNOME_Evolution_CreatableItemTypeList *type_list; -}; -typedef struct _Component Component; - -/* Representation of a single menu item. */ -struct _MenuItem { - const char *label; - char shortcut; - char *verb; - char *tooltip; - char *component_id; - GdkPixbuf *icon; -}; -typedef struct _MenuItem MenuItem; - -struct _EUserCreatableItemsHandlerPrivate { - /* 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, - GNOME_Evolution_Component component) -{ - CORBA_Environment ev; - Component *new; - - CORBA_exception_init (&ev); - - new = g_new (Component, 1); - new->id = g_strdup (id); - - new->type_list = GNOME_Evolution_Component__get_userCreatableItems (component, &ev); - if (BONOBO_EX (&ev)) - new->type_list = NULL; - - new->component = component; - Bonobo_Unknown_ref (new->component, &ev); - - if (ev._major != CORBA_NO_EXCEPTION) - new->type_list = NULL; - - CORBA_exception_free (&ev); - - return new; -} - -static void -component_free (Component *component) -{ - CORBA_Environment ev; - - CORBA_exception_init (&ev); - - Bonobo_Unknown_unref (component->component, &ev); - - g_free (component->id); - - if (component->type_list != NULL) - CORBA_free (component->type_list); - - CORBA_exception_free (&ev); - - g_free (component); -} - -static void -get_components_from_registry (EUserCreatableItemsHandler *handler, - EComponentRegistry *registry) -{ - GSList *registry_list = e_component_registry_peek_list (registry); - GSList *p; - - for (p = registry_list; p != NULL; p = p->next) { - EComponentInfo *info = p->data; - Component *component; - - e_component_registry_activate (registry, info->id, NULL); - - if (info->iface != CORBA_OBJECT_NIL) - component = component_new (info->id, info->iface); - - handler->priv->components = g_slist_prepend (handler->priv->components, component); - } -} - - -/* Helper functions. */ - -static gboolean -item_is_default (const MenuItem *item, - const char *component_id) -{ - if (component_id == NULL) - 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 (EUserCreatableItemsHandler *handler) -{ - EUserCreatableItemsHandlerPrivate *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_CreatableItemType *type; - MenuItem *item; - - type = (const GNOME_Evolution_CreatableItemType *) 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 (component->id); - - if (strcmp (item->component_id, EVOLUTION_MAIL_OAFIID) == 0 - && strcmp (type->id, "message") == 0) - default_verb = item->verb; - - if (type->iconName == "") { - item->icon = NULL; - } else { - char *icon_path = e_shell_get_icon_path (type->iconName, TRUE); - item->icon = gdk_pixbuf_new_from_file (icon_path, NULL); - g_free (icon_path); - } - - menu_items = g_slist_prepend (menu_items, item); - } - } - - component_num ++; - } - - priv->menu_items = g_slist_reverse (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 (EUserCreatableItemsHandler *handler, - EShellWindow *window) -{ - EUserCreatableItemsHandlerPrivate *priv; - const char *window_component_id; - const GSList *p; - - priv = handler->priv; - - window_component_id = e_shell_window_peek_current_component_id (window); - if (window_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, window_component_id)) - 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 (EUserCreatableItemsHandler *handler, - const char *component_id) -{ - EUserCreatableItemsHandlerPrivate *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=\"EUserCreatableItemsPlaceholder\">"); - - /* 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, 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=\"EUserCreatableItemsHandlerSeparator\"/>"); - - /* 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, 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>"); /* EUserCreatableItemsPlaceholder */ - g_string_append (xml, "</placeholder>"); /* ComponentItems */ - - retval = xml->str; - g_string_free (xml, FALSE); - - return retval; -} - - -/* Verb handling. */ - -static void -execute_verb (EUserCreatableItemsHandler *handler, - EShellWindow *window, - const char *verb_name) -{ - EUserCreatableItemsHandlerPrivate *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_Component_requestCreateItem (component->component, id, &ev); - - if (ev._major != CORBA_NO_EXCEPTION) - g_warning ("Error in requestCreateItem -- %s", BONOBO_EX_REPOID (&ev)); - - CORBA_exception_free (&ev); - return; - } - } -} - -static void -verb_fn (BonoboUIComponent *ui_component, - void *data, - const char *verb_name) -{ - EUserCreatableItemsHandler *handler; - EShellWindow *shell_window; - - shell_window = g_object_get_data (G_OBJECT (ui_component), SHELL_WINDOW_KEY); - g_assert (E_IS_SHELL_WINDOW (shell_window)); - - handler = E_USER_CREATABLE_ITEMS_HANDLER (data); - - execute_verb (handler, shell_window, verb_name); -} - -static void -add_verbs (EUserCreatableItemsHandler *handler, - EShellWindow *window) -{ - EUserCreatableItemsHandlerPrivate *priv; - BonoboUIComponent *ui_component; - int component_num; - GSList *p; - - priv = handler->priv; - - ui_component = e_shell_window_peek_bonobo_ui_component (window); - g_object_set_data (G_OBJECT (ui_component), SHELL_WINDOW_KEY, window); - - 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) -{ - EShellWindow *shell_window; - EUserCreatableItemsHandler *handler; - const MenuItem *menu_item; - - shell_window = E_SHELL_WINDOW (data); - handler = e_shell_peek_user_creatable_items_handler (e_shell_window_peek_shell (shell_window)); - - menu_item = get_default_action_for_view (handler, shell_window); - execute_verb (handler, shell_window, menu_item->verb); -} - -static void -setup_toolbar_button (EUserCreatableItemsHandler *handler, - EShellWindow *window) -{ - EUserCreatableItemsHandlerPrivate *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), window); - - ui_component = e_shell_window_peek_bonobo_ui_component (window); - bonobo_window_add_popup (BONOBO_WINDOW (window), GTK_MENU (menu), "/popups/NewPopup"); - - control = bonobo_control_new (combo_button); - - bonobo_ui_component_object_set (ui_component, "/Toolbar/NewComboButton", - BONOBO_OBJREF (control), NULL); - - bonobo_object_unref (control); - - g_object_set_data (G_OBJECT (window), COMBO_BUTTON_WIDGET_KEY, combo_button); - - tooltips = gtk_tooltips_new (); - g_object_set_data (G_OBJECT (combo_button), TOOLTIPS_KEY, tooltips); -} - - -static void -update_for_window (EUserCreatableItemsHandler *handler, - EShellWindow *window) -{ - GtkWidget *combo_button_widget; - GtkTooltips *tooltips; - BonoboUIComponent *ui_component; - const MenuItem *default_menu_item; - char *menu_xml; - - combo_button_widget = g_object_get_data (G_OBJECT (window), 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, window); - 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_window_peek_bonobo_ui_component (window); - bonobo_ui_component_rm (ui_component, "/menu/File/New/ComponentItems/EUserCreatableItemsPlaceholder", NULL); - bonobo_ui_component_rm (ui_component, "/popups/NewPopup/ComponentItems/EUserCreatableItemsPlaceholder", NULL); - - menu_xml = create_menu_xml (handler, e_shell_window_peek_current_component_id (window)); - - 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); -} - - -/* This handles the menus for a given EShellWindow. 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_window_component_changed_callback (EShellWindow *shell_window, - EUserCreatableItemsHandler *handler) -{ - update_for_window (handler, shell_window); -} - - -/* GObject methods. */ - -static void -impl_dispose (GObject *object) -{ - EUserCreatableItemsHandler *handler; - EUserCreatableItemsHandlerPrivate *priv; - GSList *p; - - handler = E_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) -{ - EUserCreatableItemsHandler *handler; - EUserCreatableItemsHandlerPrivate *priv; - - handler = E_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 (EUserCreatableItemsHandler *shell_user_creatable_items_handler) -{ - EUserCreatableItemsHandlerPrivate *priv; - - priv = g_new (EUserCreatableItemsHandlerPrivate, 1); - priv->components = NULL; - priv->menu_items = NULL; - priv->default_menu_item = NULL; - - shell_user_creatable_items_handler->priv = priv; -} - - -EUserCreatableItemsHandler * -e_user_creatable_items_handler_new (EComponentRegistry *registry) -{ - EUserCreatableItemsHandler *new; - - new = g_object_new (e_user_creatable_items_handler_get_type (), NULL); - - get_components_from_registry (new, registry); - - return new; -} - - -/** - * e_user_creatable_items_handler_attach_menus: - * @handler: - * @shell_window: - * - * Set up the menus and toolbar items for @shell_window. 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_user_creatable_items_handler_attach_menus (EUserCreatableItemsHandler *handler, - EShellWindow *window) -{ - BonoboUIComponent *ui_component; - EUserCreatableItemsHandlerPrivate *priv; - char *menu_xml; - - g_return_if_fail (E_IS_USER_CREATABLE_ITEMS_HANDLER (handler)); - g_return_if_fail (E_IS_SHELL_WINDOW (window)); - - priv = handler->priv; - - setup_toolbar_button (handler, window); - g_signal_connect (window, "component_changed", G_CALLBACK (shell_window_component_changed_callback), handler); - - add_verbs (handler, window); - menu_xml = create_menu_xml (handler, e_shell_window_peek_current_component_id (window)); - - ui_component = e_shell_window_peek_bonobo_ui_component (window); - 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); - - update_for_window (handler, window); -} - - -E_MAKE_TYPE (e_user_creatable_items_handler, "EUserCreatableItemsHandler", EUserCreatableItemsHandler, class_init, init, PARENT_TYPE) diff --git a/shell/e-user-creatable-items-handler.h b/shell/e-user-creatable-items-handler.h deleted file mode 100644 index d6f12e3973..0000000000 --- a/shell/e-user-creatable-items-handler.h +++ /dev/null @@ -1,73 +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_USER_CREATABLE_ITEMS_HANDLER_H_ -#define _E_USER_CREATABLE_ITEMS_HANDLER_H_ - -#include <glib-object.h> -#include <bonobo/bonobo-ui-component.h> - -#ifdef __cplusplus -extern "C" { -#pragma } -#endif /* __cplusplus */ - -#define E_TYPE_USER_CREATABLE_ITEMS_HANDLER (e_user_creatable_items_handler_get_type ()) -#define E_USER_CREATABLE_ITEMS_HANDLER(obj) (GTK_CHECK_CAST ((obj), E_TYPE_USER_CREATABLE_ITEMS_HANDLER, EUserCreatableItemsHandler)) -#define E_USER_CREATABLE_ITEMS_HANDLER_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_USER_CREATABLE_ITEMS_HANDLER, EUserCreatableItemsHandlerClass)) -#define E_IS_USER_CREATABLE_ITEMS_HANDLER(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_USER_CREATABLE_ITEMS_HANDLER)) -#define E_IS_USER_CREATABLE_ITEMS_HANDLER_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_USER_CREATABLE_ITEMS_HANDLER)) - - -typedef struct _EUserCreatableItemsHandler EUserCreatableItemsHandler; -typedef struct _EUserCreatableItemsHandlerPrivate EUserCreatableItemsHandlerPrivate; -typedef struct _EUserCreatableItemsHandlerClass EUserCreatableItemsHandlerClass; - - -#include "e-shell-window.h" - - -struct _EUserCreatableItemsHandler { - GObject parent; - - EUserCreatableItemsHandlerPrivate *priv; -}; - -struct _EUserCreatableItemsHandlerClass { - GObjectClass parent_class; -}; - - -GtkType e_user_creatable_items_handler_get_type (void); -EUserCreatableItemsHandler *e_user_creatable_items_handler_new (EComponentRegistry *registry); - -void e_user_creatable_items_handler_add_component (EUserCreatableItemsHandler *handler, - const char *id, - GNOME_Evolution_Component component); -void e_user_creatable_items_handler_attach_menus (EUserCreatableItemsHandler *handler, - EShellWindow *window); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* _E_USER_CREATABLE_ITEMS_HANDLER_H_ */ diff --git a/shell/evolution-activity-client.c b/shell/evolution-activity-client.c deleted file mode 100644 index 9b2fc8da70..0000000000 --- a/shell/evolution-activity-client.c +++ /dev/null @@ -1,461 +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 <bonobo/Bonobo.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; - } -} - -static CORBA_Object -get_shell_activity_iface (GNOME_Evolution_Shell shell_iface) -{ - CORBA_Object iface_object; - const char *iface_name = "IDL:GNOME/Evolution/Activity:" BASE_VERSION; - - iface_object = bonobo_object_query_remote (shell_iface, iface_name, NULL); - if (iface_object == CORBA_OBJECT_NIL) - g_warning ("EvolutionActivityClient: No iface %s on Shell", iface_name); - - return iface_object; -} - - -/* 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, - GNOME_Evolution_Shell shell_iface, - 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 (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 = get_shell_activity_iface (shell_iface); - 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 (GNOME_Evolution_Shell shell_iface, - 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_iface != CORBA_OBJECT_NIL, 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_iface, - 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-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-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-shell-client.c b/shell/evolution-shell-client.c deleted file mode 100644 index 46908f79b2..0000000000 --- a/shell/evolution-shell-client.c +++ /dev/null @@ -1,139 +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 <gal/util/e-util.h> - -#include "evolution-shell-client.h" -#include "e-shell-corba-icon-utils.h" - -#define PARENT_TYPE G_TYPE_OBJECT - - -static void -class_init (EvolutionShellClientClass *klass) -{ -} - -static void -init (EvolutionShellClient *shell_client) -{ -} - - -void -evolution_shell_client_construct (EvolutionShellClient *shell_client, - GNOME_Evolution_Shell corba_shell) -{ - g_assert_not_reached (); -} - -EvolutionShellClient * -evolution_shell_client_new (GNOME_Evolution_Shell corba_shell) -{ - g_assert_not_reached (); - return NULL; -} - -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 CORBA_OBJECT_NIL; -} - - -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) -{ - g_assert_not_reached (); -} - - -GNOME_Evolution_Activity -evolution_shell_client_get_activity_interface (EvolutionShellClient *shell_client) -{ - g_assert_not_reached (); - return CORBA_OBJECT_NIL; -} - -GNOME_Evolution_Shortcuts -evolution_shell_client_get_shortcuts_interface (EvolutionShellClient *shell_client) -{ - g_assert_not_reached (); - return CORBA_OBJECT_NIL; -} - -GNOME_Evolution_StorageRegistry -evolution_shell_client_get_storage_registry_interface (EvolutionShellClient *shell_client) -{ - g_assert_not_reached (); - return CORBA_OBJECT_NIL; -} - - -GNOME_Evolution_Storage -evolution_shell_client_get_local_storage (EvolutionShellClient *shell_client) -{ - g_assert_not_reached (); - return CORBA_OBJECT_NIL; -} - -void -evolution_shell_client_set_line_status (EvolutionShellClient *shell_client, - gboolean line_status) -{ - g_assert_not_reached (); -} - - -GdkPixbuf * -evolution_shell_client_get_pixbuf_for_type (EvolutionShellClient *shell_client, - const char *folder_type, - gboolean mini) -{ - g_assert_not_reached (); - return NULL; -} - - -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) -{ - g_assert_not_reached (); - return NULL; -} - - -E_MAKE_TYPE (evolution_shell_client, "EvolutionShellClient", EvolutionShellClient, class_init, init, PARENT_TYPE) 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-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.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 6ea4fddead..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:" BASE_VERSION, - &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:" BASE_VERSION, - &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-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 "Forward" 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 "Apply" 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 "Import" 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 d8c8c0b918..0000000000 --- a/shell/importer/intelligent.c +++ /dev/null @@ -1,485 +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_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw), GTK_SHADOW_IN); - 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 2807600f68..0000000000 --- a/shell/main.c +++ /dev/null @@ -1,625 +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-window.h" /* FIXME */ -#include "e-setup.h" - -#include "e-shell.h" - -#include <gconf/gconf-client.h> - -#include <gtk/gtkalignment.h> -#include <gtk/gtkbox.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-DataServer.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> - - -#define DEVELOPMENT_WARNING - - -static EShell *shell = NULL; - -/* Command-line options. */ -static gboolean start_online = FALSE; -static gboolean start_offline = FALSE; -static gboolean setup_only = FALSE; -static gboolean killev = FALSE; -static char *default_component_id = NULL; - -static char *evolution_debug_log = NULL; - - -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_windows_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); - - 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 (); -} - - -#ifdef KILL_PROCESS_CMD - -static void -kill_dataserver (void) -{ - g_print ("(Killing old version of evolution-data-server...)\n"); - - system (KILL_PROCESS_CMD " -9 lt-evolution-data-server 2> /dev/null"); - system (KILL_PROCESS_CMD " -9 evolution-data-server 2> /dev/null"); - - system (KILL_PROCESS_CMD " -9 lt-evolution-alarm-notify 2> /dev/null"); - system (KILL_PROCESS_CMD " -9 evolution-alarm-notify 2> /dev/null"); -} - -static void -kill_old_dataserver (void) -{ - GNOME_Evolution_DataServer_InterfaceCheck iface; - CORBA_Environment ev; - CORBA_char *version; - - CORBA_exception_init (&ev); - - iface = bonobo_activation_activate_from_id ("OAFIID:GNOME_Evolution_DataServer_InterfaceCheck", 0, NULL, &ev); - if (BONOBO_EX (&ev) || iface == CORBA_OBJECT_NIL) { - kill_dataserver (); - CORBA_exception_free (&ev); - return; - } - - version = GNOME_Evolution_DataServer_InterfaceCheck__get_interfaceVersion (iface, &ev); - if (BONOBO_EX (&ev)) { - kill_dataserver (); - CORBA_Object_release (iface, &ev); - CORBA_exception_free (&ev); - return; - } - - if (strcmp (version, DATASERVER_VERSION) != 0) { - CORBA_free (version); - kill_dataserver (); - CORBA_Object_release (iface, &ev); - CORBA_exception_free (&ev); - return; - } - - CORBA_free (version); - CORBA_Object_release (iface, &ev); - CORBA_exception_free (&ev); -} -#endif - - -#ifdef DEVELOPMENT_WARNING - -/* 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.4"); - 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 -window_map_callback (GtkWidget *widget, - void *data) -{ - g_signal_handlers_disconnect_by_func (widget, G_CALLBACK (window_map_callback), data); - - show_development_warning (GTK_WINDOW (widget)); -} - -static void -new_window_created_callback (EShell *shell, - EShellWindow *window, - void *data) -{ - g_signal_handlers_disconnect_by_func (shell, G_CALLBACK (new_window_created_callback), data); - - g_signal_connect (window, "map", G_CALLBACK (window_map_callback), NULL); -} - -#endif /* DEVELOPMENT_WARNING */ - - -static void -attempt_upgrade (EShell *shell) -{ - GConfClient *gconf_client = gconf_client_get_default (); - char *previous_version = gconf_client_get_string (gconf_client, "/apps/evolution/version", NULL); - - if (previous_version != NULL) { - if (! e_shell_attempt_upgrade (shell, previous_version)) - e_notice (NULL, GTK_MESSAGE_ERROR, - _("Warning: Evolution could not upgrade all your data from version %s.\n" - "The data hasn't been deleted, but it will not be seen by this version of Evolution.\n"), - previous_version); - } - - gconf_client_set_string (gconf_client, "/apps/evolution/version", VERSION, NULL); - g_object_unref (gconf_client); -} - - -/* 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; - -#ifdef KILL_PROCESS_CMD - kill_old_dataserver (); -#endif - - 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 (startup_line_mode, &result); - - switch (result) { - case E_SHELL_CONSTRUCT_RESULT_OK: - g_signal_connect (shell, "no_windows_left", G_CALLBACK (no_windows_left_cb), NULL); - g_object_weak_ref (G_OBJECT (shell), shell_weak_notify, NULL); - -#ifdef DEVELOPMENT_WARNING - if (!getenv ("EVOLVE_ME_HARDER")) - g_signal_connect (shell, "new_window_created", - G_CALLBACK (new_window_created_callback), NULL); -#endif - - 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; - - } - - if (shell != NULL) - attempt_upgrade (shell); - - have_evolution_uri = FALSE; - - if (shell != NULL) { - e_shell_create_window (shell, default_component_id, NULL); - } else { - CORBA_Environment ev; - - CORBA_exception_init (&ev); - if (default_component_id == NULL) - GNOME_Evolution_Shell_createNewWindow (corba_shell, "", &ev); - else - GNOME_Evolution_Shell_createNewWindow (corba_shell, default_component_id, &ev); - CORBA_exception_free (&ev); - } - - 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) { - g_warning ("Invalid URI: %s", uri); - CORBA_exception_free (&ev); - } - } - - g_slist_free (uri_list); - - 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[] = { - { "component", 'c', POPT_ARG_STRING, &default_component_id, 0, - N_("Start Evolution activating the specified component"), 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 }, - { "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; - char *evolution_directory; - - /* 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 (); - - 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); - - g_free (evolution_directory); - - 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); - - g_idle_add (idle_cb, uri_list); - - bonobo_main (); - - return 0; -} |