cd4477930e72b1be069d5c97b90d96e989645bfc
2003-03-04 JP Rosevear <jpr@ximian.com> Merging in 1.2 stuff Fixes #35598 * gui/dialogs/task-details-page.c (task_details_page_fill_widgets): count a status of needs action as a status of none (not started) (date_changed_cb): set the option menu to a status of none (status_changed): no need to handle needs action status now * gui/dialogs/task-details-page.glade: remove needs-action menu item Fixes #36763 * gui/dialogs/alarm-page.c (add_clicked_cb): if no address was set for an email alarm, set the default (button_options_clicked_cb): pass the default email address * gui/dialogs/alarm-options.h (alarm_options_dialog_run): update proto * gui/dialogs/alarm-options.c (alarm_to_malarm_widgets): if there are no email attendees, default to the passed in value (alarm_options_dialog_run): take and track an email param * pcs/cal.c (impl_Cal_get_alarm_email_address): implement by calling backend method (cal_class_init): set alarm email address method implementation * pcs/cal-backend.h: add new virtual proto * pcs/cal-backend.c (cal_backend_class_init): set alarm email address virtual method to NULL (cal_backend_get_alarm_email_address): call backend method * pcs/cal-backend-file.c (cal_backend_file_class_init): set alarm email address method (cal_backend_file_get_alarm_email_address): implement by returning NULL * idl/evolution-calendar.idl: add getAlarmEmailAddress method Fixes #37102 * gui/dialogs/task-editor.c (set_menu_sens): don't allow task assignment if the backend says not to * gui/dialogs/recurrence-page.c (fill_component): kill warning (preview_recur): display the recurrences in the dtstart timezone if possible * gui/gnome-cal.c (dn_query_obj_updated_cb): pass NULL to use default tag zone * gui/tag-calendar.c (tag_calendar_by_comp): allow display zone for the tagged calendar to be passed in (prepare_tag): use the passed in timezone for display if non-null * gui/tag-calendar.h (tag_calendar_by_comp): update proto * gui/dialogs/recurrence-page.c (recurrence_page_set_dates): make sure we always update the preview * conduits/todo/todo-conduit.c (add_record): make sure to create a unique uid for the record * conduits/calendar/calendar-conduit.c (add_record): ditto * conduits/todo/todo-conduit.c (e_todo_context_new): init default comp and timezone to NULL (e_todo_context_destroy): unref default comp (pre_sync): et the default comp via the client and set the default timezone (add_record): pass the default comp as the base comp * conduits/calendar/calendar-conduit.c (e_calendar_context_new): init default comp to NULL (e_calendar_context_destroy): unref default comp (pre_sync): get the default comp via the client (add_record): pass the default comp as the base comp * conduits/calendar/calendar-conduit.c (local_record_from_comp): only add the recurrence rule if its not an instance * gui/itip-control-factory.c (set_data_idle_cb): idle call back to set control data (pstream_load): set the data in an idle callback to avoid deadlock (get_prop): handle view_only (set_prop): ditto (itip_control_factory): add view_only * gui/e-itip-control.h: add protos * gui/e-itip-control.c (write_html): only write out the options if we aren't in view_only mode (e_itip_control_set_view_only): accessor (e_itip_control_get_view_only): ditto Fixes #36909 * gui/dialogs/alarm-page.c (button_options_clicked_cb): indicate whether the options dialog should allow repeating * gui/dialogs/alarm-options.h: update proto * gui/dialogs/alarm-options.c (alarm_to_repeat_widgets): if repeating is not allowed, sensitize the widgets appropriately (alarm_options_dialog_run): store the repeat param * gui/calendar-model.c (calendar_model_append_row): guard against saving before the calendar is open * gui/e-day-view.c (e_day_view_key_press): ditto * gui/dialogs/comp-editor.c (page_changed_cb): change warning dialog to not mention email (page_summary_changed_cb): ditto (page_dates_changed_cb): ditto * gui/itip-utils.c (itip_organizer_is_user): make the compare case insensitive * gui/dialogs/meeting-page.c (meeting_page_fill_widgets): don't allow the organizer to be changed if its not an email address * gui/e-day-view.c, calendar-model.c, e-week-view.c, task-editor.c, event-editor.c, comp-editor.c, meeting-page.c: pass additional param * gui/itip-utils.c (itip_organizer_is_user): take client as param, and if organizer-not-email-address and email address and organizer match, assume the user is the organizer * gui/itip-utils.h: update proto * pcs/cal.c (build_fb_seq): set the max * gui/e-meeting-model.c (e_meeting_model_add_attendee_with_defaults): correct typo and set rsvp appropriately * gui/dialogs/send-comp.c (send_component_dialog): if save schedules, return FALSE for now * gui/dialogs/recurrence-page.c (sensitize_recur_widgets): de-sensitize the preview widget if we are viewing an instance (preview_recur): return if the comp is an instance * gui/dialogs/event-page.glade: name the show time frame * gui/dialogs/event-page.c (event_page_fill_widgets) (event_page_init): init show time frame (event_page_fill_widgets): hide/show frame as needed (get_widgets): get the frame * gui/alarm-notify/alarm-queue.c (mail_notification): kill mail notification code * cal-client/cal-client.c (load_static_capabilities): grab static capabilities string (check_capability): see if a capability is in the string (cal_client_get_one_alarm_only): accessor (cal_client_get_organizer_must_attend): use check_capability (cal_client_get_static_capability): ditto * cal-client/cal-client.h: new, changed protos * idl/evolution-calendar.idl: change over getSchedulingInformation to a more general getStaticCapabilities call * pcs/cal-backend-file.c (cal_backend_file_get_static_capabilities): return "no-email-alarms" * pcs/cal-backend.c (cal_backend_get_static_capabilities): ditto * pcs/cal-backend.h: ditto * pcs/cal.c (impl_Cal_get_static_capabilities): ditto * gui/alarm-notify/alarm-queue.c (get_default_address): utility routine to snag address info * gui/alarm-notify/Makefile.am: build composer idl * *.c: pass client param for send an cancel params * gui/dialogs/send-comp.c (send_component_dialog): take client as a parm and if save schedules return true right away * gui/dialogs/send-comp.h: update proto * gui/dialogs/cancel-comp.c (cancel_component_dialog): take client as a param and if we are deleting and schedule saves, return true right away * gui/dialogs/cancel-comp.h (cancel_component_dialog): update proto * gui/dialogs/alarm-options.glade: add Send To: button * gui/dialogs/alarm-options.c (addressbook_clicked_cb): display dialog (setup_select_names): attach above to Send To: button clicked signal * gui/dialogs/alarm-options.c (get_widgets): get mail alarm widgets (setup_select_names): add the select names widget (alarm_to_malarm_widgets): show the attendees and description (alarm_to_dialog): set the title for mail alarms properly (malarm_widgets_to_alarm): save attendees and descriptions in alarm (alarm_options_dialog_run): call setup_select_names * gui/dialogs/alarm-page.c: add email to alarm types * gui/dialogs/alarm-options.glade: add mail alarm widgets * gui/dialogs/alarm-page.glade: add email to alarm types * cal-util/cal-component.c (scan_attendee): kill unnecessary CalComponent param (scan_property): don't pass same (set_attendee_list): take an icalcomp instead of a CalComponent (cal_component_set_attendee_list): pass same (scan_alarm_property): if its an attendee, scan it (make_alarm): set attendee_list member to null (cal_component_alarm_new): ditto (cal_component_alarm_free): free attendee list (cal_component_alarm_get_attendee_list): return attendee list (cal_component_alarm_set_attendee_list): set attendee list (cal_component_alarm_has_attendees): return true if alarm has attendees * cal-util/cal-component.h: new protos * gui/calendar-model.c (calendar_model_append_row): use cal_comp_task_new_with_defaults * gui/comp-editor-factory.c (get_default_task): ditto * gui/e-tasks.c (e_tasks_new_task): ditto * gui/gnome-cal.c (gnome_calendar_new_task): ditto * gui/comp-util.h (cal_comp_task_new_with_defaults): new proto * gui/comp-util.c (cal_comp_task_new_with_defaults): new utility routine * cal-util/cal-util.c (generate_absolute_triggers): skip omitted alarm types (add_alarm_occurrences_cb): ditto (cal_util_generate_alarms_for_list): take/pass omit param (cal_util_generate_alarms_for_comp): ditto * cal-util/cal-util.h: update protos * pcs/cal-backend-file.c (cal_backend_file_get_alarms_for_object): add omit param (cal_backend_file_get_alarms_in_range): ditto * pcs/cal-backend.c (cal_backend_get_scheduling_information): remove dead param * gui/dialogs/meeting-page.h: delete proto * gui/dialogs/meeting-page.c: remove dead routine * gui/dialogs/event-editor.c (event_editor_edit_comp): we don't need to add the organizer as an attendee ourselves, just set the edit level properly * gui/dialogs/task-editor.c (task_editor_edit_comp): ditto * gui/comp-util.c (cal_comp_event_new_with_defaults): take client as arg so we can obtain the default from the backend * gui/comp-editor-factory.c (get_default_event): pass cal_comp_event_new_with_defaults the new param * gui/gnome-cal.c (gnome_calendar_new_appointment_for): ditto * gui/e-week-view.c (e_week_view_key_press): ditto * gui/e-day-view.c (e_day_view_key_press): ditto * gui/calendar-model.c (calendar_model_append_row): ditto * gui/comp-util.h (cal_comp_event_new_with_defaults): update proto * pcs/cal-backend-file.c (cal_backend_file_get_default_object): return appropriate default object * pcs/cal-backend.c (cal_backend_get_default_object): call get_default_backend class method * pcs/cal-backend.h: add proto * pcs/cal.c (impl_Cal_get_default_object): implement (cal_class_init): set handler for getDefaultObject call * idl/evolution-calendar.idl: remove always schedule from SchedulingInformation and add getDefaultObject call * cal-client/cal-client.c (cal_client_get_default_object): gets a default object from the server (cal_client_init): remove always_schedule (load_scheduling_info): ditto * cal-client/cal-client.h: add a proto, delete a proto * gui/dialogs/meeting-page.c (right_click_cb): if the attendee is not fully editable, don't allow deletion (meeting_page_construct): keep the default organizer as an itip address (meeting_page_get_default_organizer): return the default organizer * gui/dialogs/meeting-page.h: new proto * gui/dialogs/event-editor.c (event_editor_edit_comp): we set appropriate edit levels now for users and if the backend always schedules we always show the meeting pages and add the organizer as an attendee * gui/dialogs/task-editor.c (task_editor_edit_comp): same * gui/e-meeting-model.c (is_cell_editable): use the edit level of the attendee to determine if cell is editable (init): we no longer keep the attendee list of restricted * gui/e-meeting-attendee.c (e_meeting_attendee_get_edit_level): accessor (e_meeting_attendee_set_edit_level): ditto * gui/e-meeting-attendee.h: new protos and edit level enum * cal-client/cal-client.c (load_scheduling_info): load the scheduling info (cal_client_get_always_schedule): accessor (cal_client_get_organizer_must_attend): ditto (cal_client_get_save_schedules): ditto (cal_client_init): init scheduling data members * cal-client/cal-client.h: accessors for scheduling information * pcs/cal-backend-file.c (cal_backend_file_get_scheduling_information): implement the new virtual method * pcs/cal-backend.c (cal_backend_get_scheduling_information): call the class specific method * pcs/cal-backend.h: add virtual method * idl/evolution-calendar.idl: add a getSchedulingInformation call which describes how the backend does its scheduling * pcs/cal.c (impl_Cal_get_scheduling_information): implement above * gui/e-day-view.c: pass NULL as parent to recur dialog * gui/e-week-view.c: ditto * gui/dialogs/comp-editor.c (prompt_to_save_changes): show recur dialog after prompting, not before (save_cmd): ditto (save_close_cmd): ditto (real_edit_comp): don't show recur dialog before opening * gui/dialogs/recur-comp.h (recur_component_dialog): update proto * gui/dialogs/recur-comp.c (recur_component_dialog): take a parent argument and set the dialog parent if non-null * gui/e-week-view.c (e_day_view_on_editing_stopped): Don't update appointment if both the old and the new summary texts are empty. * gui/e-week-view.c (e_week_view_show_popup_menu): mask out "make moveable" if its an instance * gui/e-day-view.c (e_day_view_on_event_right_click): ditto * gui/e-week-view.c (e_week_view_on_editing_stopped): if its an instance, show the recur comp dialog and modify it based on the response (or not if cancel is hit) * gui/e-day-view.c (e_day_view_finish_long_event_resize): if its an instance, show the recur comp dialog and modify it based on the response (or not if cancel is hit) (e_day_view_finish_resize): ditto (e_day_view_on_editing_stopped): ditto (e_day_view_on_top_canvas_drag_data_received): ditto (e_day_view_on_main_canvas_drag_data_received): ditto * gui/dialogs/comp-editor.c (real_edit_comp): reflect changes in proto of recur_component_dialog * gui/dialogs/recur-comp.c (recur_component_dialog): use ok/cancel instead and radio buttons for the mod type * gui/dialogs/recur-comp.h: update proto * gui/e-day-view.c (e_day_view_on_long_event_click): allow dragging if its an instance (e_day_view_on_event_click): ditto (e_day_view_on_top_canvas_motion): ditto (e_day_view_on_main_canvas_motion): ditto * gui/dialogs/comp-editor.c (save_comp): if its an instance, update with the mod type (real_edit_comp): ask the user what instances they want to change * gui/dialogs/recur-comp.[hc]: new dialog to ask user what recurrences to modify * gui/dialogs/Makefile.am: Compile new files * gui/e-day-view.c (e_day_view_on_delete_occurrence): if its an instance, just remove with THIS mod * gui/e-week-view.c (e_week_view_on_delete_occurrence): ditto * cal-client/cal-client.c (cal_client_remove_object_with_mod): send the mod parameter to the backend (cal_client_remove_object): implement with above (cal_client_update_object_with_mod): send the mod parameter to the backend (cal_client_update_object): implement with above * cal-client/cal-client.h: new protos * cal-client/cal-client.c (cal_client_is_read_only): return booleans in the pre conditions (cal_client_update_object): pass mod param (cal_client_update_objects): ditto (cal_client_remove_object): ditto (cal_client_ensure_timezone_on_server): ditto * pcs/cal.c (impl_Cal_update_objects): take mod param (impl_Cal_remove_object): ditto * pcs/cal-backend.h: fix protos * pcs/cal-backend.c (cal_backend_update_objects): take mod param (cal_backend_remove_object): ditto * pcs/cal-backend-file.c (cal_backend_file_update_objects): take mod param (cal_backend_file_remove_object): ditto * cal-util/cal-util.h: add mod enum * cal-util/cal-recur.c (cal_recur_generate_instances_of_rule): if its an instance, just report the instance * cal-util/cal-component.h: new protos * cal-util/cal-component.c (cal_component_is_instance): indicate whether the component is an instance or not (cal_component_free_range): free a range * idl/evolution-calendar.idl: get remove and update to take mod type svn path=/trunk/; revision=20142
…
…
…
Evolution is the integrated mail, calendar and address book
distributed suite from Ximian, Inc.
See http://www.ximian.com/products/evolution for more information.
If you are using Evolution, you may wish to subscribe to the Evolution
users mailing list. If you are interested in contributing to
development on it, you should certainly subscribe to the Evolution
Hackers mailing list. Visit
http://developer.ximian.com/community/lists.html to subscribe to
Ximian mailing lists. If you are planning to work on any part of
Evolution, please send mail to the mailing list first, to avoid
duplicated effort (and to make sure that you aren't basing your work
on interfaces that are expected to change).
There are mailing list archives available at
http://lists.ximian.com/archives/public/evolution/ and
http://lists.ximian.com/archives/public/evolution-hackers/
There is also an #evolution IRC channel on irc.gnome.org.
Help for Evolution is available in the user manual (select "Help" from
the menu after running the application), at the Ximian knowledge base
(http://support.ximian.com), in the Evolution man page (run "man
evolution" at the command line), and in the --help strings (run
"evolution --help" at the command line).
The rest of this file is dedicated to building Evolution.
PROBLEMS BUILDING EVOLUTION
---------------------------
Did you read the "How to build" section below?
If the configure script complains that you don't have a library that
you know you have installed, it usually means either that you've
installed things into multiple prefixes (see the bits on GNOME_PATH
below) or (if you're on Linux) that you installed the "foo" package
but forgot the "foo-devel" or "foo-dev" packages.
HOW TO BUILD EVOLUTION
----------------------
*** READ THIS BEFORE YOU START BUILDING ANYTHING! ***
Evolution depends on a large number of unreleased and rapidly-changing
libraries. Some of these libraries in turn depend on other unreleased
and rapidly-changing libraries.
Building Evolution is HARD, and it's going to stay hard until all of
the libraries it depends on stabilize, and there's nothing we can do
to make it any easier until then.
GENERAL PRINCIPLES
------------------
First you have to decide whether you want to install Evolution (and
its dependencies) into the same prefix as the rest of your GNOME
install, or into a new prefix. Installing everything into the same
prefix as the rest of your GNOME install will make it much easier to
build and run programs, and easier to switch between using packages
and building it yourself, but it may also make it harder to uninstall
later.
If you want to install into the same prefix as the rest of GNOME,
type:
gnome-config --prefix
gnome-config --sysconfdir
and remember the answers, and pass them to "configure" or "autogen.sh"
when building the other packages you need. For example:
./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var/lib
--localstatedir is needed to make the docs integrate with scrollkeeper
and needs to point to the directory containing the scrollkeeper indices
which are in: gnome-config --localstatedir
If you build in another prefix instead, you will need to set the
GNOME_PATH environment variable (and ACLOCAL_FLAGS as well if building
from CVS) to include the prefix you install into. For example:
export GNOME_PATH=/usr/local
export ACLOCAL_FLAGS="-I /usr/local/share/aclocal"
(Assuming your shell is bash, and you installed into /usr/local.) You
need to set GNOME_PATH both during compiling AND when you run
evolution. Remember also that if you're installing into an odd prefix
such as /evolution, that you also need to make sure to put
${prefix}/bin in your PATH and ${prefix}/lib in your LD_LIBRARY_PATH.
DEPENDENCIES
------------
The following required libraries are available in GNOME CVS, under the
given names. Most (but not all) of them are also available as
tarballs on ftp.gnome.org or one of the Ximian mirrors listed at
http://ximian.com/mirrors.html.
If installing from packages, remember that you need both the runtime
and -devel packages for each library.
- GNU intltool 0.18
- scrollkeeper - 0.1.4 or later
- gnome-xml - 1.8.17 or later in the 1.0 series, but not from the 2.0
series (If you get this from GNOME CVS, use the tag "LIB_XML_1_BRANCH".)
- gnome-print - 0.35 or later
- gdk-pixbuf - 0.18.0 or later
- ORBit - 0.5.8 or later (If you get this from GNOME CVS, use the
tag "orbit-stable-0-5".)
- oaf - 0.6.10 or later (If you get this from GNOME CVS, use the tag
"oaf-stable-0-6")
*** If you are using oaf from CVS, you should use the flag
*** "--disable-more-warnings" when you configure, or it may fail to
*** build.
- gnome-vfs - 1.0.5 or later (If you get this from GNOME CVS, use
the tag "gnome-vfs-1-0")
*** If you are using gnome-vfs from CVS, you should use the flag
*** "--disable-more-warnings" when configuring, or it may fail to
*** build.
- libglade - 0.14 or later
- bonobo - 1.0.3 or later
*** Note that bonobo must be installed with the same --prefix as
*** either gnome-libs or evolution for the Makefiles to work
*** properly.
- bonobo-conf - 1.0.16 or later
- gal (GNOME Application Library) - 0.21 or later
- gtkhtml - 1.1.5 or later
- SOUP - 0.7.x
*** If you are compiling from CVS, grab the soup-0-7 branch.
Other non-GNOME Dependencies:
- Berkeley's libdb - 3.1.17
db3 is available from http://www.sleepycat.com. Make sure to get
3.1.17, which isn't the latest version.
--- IMPORTANT WARNING ---
The on-disk format of DB files has been changing between versions
2, 3 and 4. Also, because of the libdb API, there is no way to
easily handle the different formats from within the application.
For this reason, Evolution has chosen to use one specific version
of the library (version 3) and stick to it, so that users do not
need to convert their addressbook files to use them with
different version of Evolution.
That's why Evolution REQUIRES libdb 3.1.17, and NO OTHER VERSION.
If you force the check to accept a version different from 3.1.17,
your binary of Evolution will be using a different format from
the chosen one; this means that it will not be able to read
addressbook databases created by other versions of Evolution
which were compiled in the standard way. Also, we DO NOT
GUARRANTEE that Evolution will work with different versions of
libdb at all, even if it can be trivially made to compile against
them.
SPECIAL NOTE FOR BINARY PACKAGERS:
If you are making binary packages for end-users (e.g. if you are
a distribution vendor), please statically link Evolution to
Berkeley DB 3.1.17, as mandated by the configure.in check. DO
NOT patch configure.in to work around the check. Forcing the
check to link to a different version of the library will only
give headaches and pain to your users, who will see their
addressbook disappear and will complain to us (the Evolution
team) about losing their data.
Besides, libdb will be linked statically, which means that your
distribution doesn't actually need to ship DB 3.1.17 itself
separately.
The Evolution team will be infinitely grateful for your
co-operation. Thanks.
COMPILING BERKELEY DB
---------------------
If you don't have 3.1.17 installed on your system or Evolution doesn't
detect it for some reason, here is a way to get Evolution to link to
it without messing up your system installation.
* Get the Sleepycat tarball from:
http://www.sleepycat.com/update/snapshot/db-3.1.17.tar.gz
* Install the content somewhere _other_ than the evolution source tree.
e.g: NOT evolution/db-3.1.17
* Compile according to instructions, but installing into some custom
prefix, for example:
../dist/configure --prefix=/home/user/berkeleydb-3.1.17
* Autogen Evolution specifying that it has to look for the DB
library there, for example:
./autogen.sh --prefix=/opt/gnome
--with-db3-includes=/home/user/berkeleydb-3.1.17/include
--with-db3-libs=/home/user/berkeleydb-3.1.17/lib
COMPILING PALM PILOT SUPPORT
----------------------------
If you want support for PalmPilot syncing you will also need recent
versions of:
1) pilot-link
http://www.pilot-link.org
2) gnome-pilot
http://www.eskil.org/gnome-pilot/
3) evolution
In your evolution source directory do ./autogen.sh --prefix=<evo-prefix>
--with-pisock=<pilot-link-prefix> --enable-pilot-conduits=yes
make
make install
SSL SUPPORT
-----------
If you want SSL support (and someday S/MIME), you will also need
mozilla-nspr and mozilla-nss, which can be found at
http://www.mozilla.org.
Once you have those libraries (and their respective includes)
installed, in your evolution source directory do:
./autogen.sh --prefix=<evo-prefix> --with-nspr-includes=<nspr-includes-prefix>
--with-nspr-libs=<nspr-libs-prefix> --with-nss-includes=<nss-includes-prefix>
--with-nss-libs=<nss-libs-prefix>
NEWSGROUP (NNTP) SUPPORT
------------------------
Experimental support for NNTP is enabled if you use the --enable-nntp
configure option, but it's currently unmaintained and highly unstable
and experimental.
Description
Languages
C
96.8%
JavaScript
1.4%
CMake
1.2%
Makefile
0.2%
Python
0.2%