Commit Graph
100 Commits
Author SHA1 Message Date
Georges Basile Stavracas Neto 692a9639a3 month-view: fix various reference issues with GDateTime
The current code does multiple needless unrefs, uses the
GDateTime API in a wrongly manner and leaks references
all around.

This causes the Calendar application to emit multiple warning
messages and in the worst case, crash immediately.

Fix that by rewriting the critical sections of the code that
deals with the start and end mark cells.

https://bugzilla.gnome.org/show_bug.cgi?id=763641
2016-05-18 11:20:00 -03:00
Georges Basile Stavracas Neto b03edc6cd4 theme: drop .views CSS class
The default class for content viewers in Gtk+ is .view and
ideally provided by the theme. Not only that, but it provides
the exact same functionality of ours, but in a way that is
overridable for theme designers.

Fix this issue by removing the class from out CSS.

https://bugzilla.gnome.org/show_bug.cgi?id=765664
2016-05-08 14:45:57 -03:00
Georges Basile Stavracas Neto 48df0903e5 month-view: consider the top padding for the extra events popover
When the mouse button is released, only the bottom padding was being
taken into account to calculate whether the click was in the "Show
N events" area.

This commit fixes this issue by considering the top padding as well.

https://bugzilla.gnome.org/show_bug.cgi?id=765678
2016-05-08 14:14:56 -03:00
Georges Basile Stavracas Neto 4e735ef3ce build: define ABOUT_NLS when configuring
This fixes the various translation issues throughout
Calendar.

https://bugzilla.gnome.org/show_bug.cgi?id=764333
2016-03-29 20:41:04 -03:00
Georges Basile Stavracas Neto ff651256bd Bump 3.19.92 release 2016-03-14 21:56:42 -03:00
Georges Basile Stavracas Neto c9499b6f7b utils: better compare datetimes by date
By multiplying the year difference by 360 and
month difference by 30, we have a much better
idea of how far the dates are.
2016-03-11 22:55:00 -03:00
Georges Basile Stavracas Neto 1f021f8da2 month-view: fix one more child context issue
The code for multiday events was broken as well.
2016-03-09 17:42:21 -03:00
Georges Basile Stavracas Neto 34a6ac389a view: update interface code
This commit updates GcalView interface to use
modern GLib API and, consequently, removes tons
of obsolete code.
2016-03-09 14:19:04 -03:00
Georges Basile Stavracas Neto 042a9b34ab month-view: emit dates in local timezone 2016-03-09 12:22:06 -03:00
Georges Basile Stavracas Neto 7d3e125012 event-widget: remove obsolete comment 2016-03-09 12:07:05 -03:00
Georges Basile Stavracas Neto 1c52e36c71 month-view: match style context state from child
We were mistakenly using the style context of the view
to retrieve the child's margin.

Fix that by retrieving the child margin from the child's
style context.
2016-03-09 12:04:28 -03:00
Georges Basile Stavracas Neto fef23f1243 search-view: don't load events with no dtstart 2016-03-09 11:19:52 -03:00
Georges Basile Stavracas Neto 09b79e1cc8 Bump 3.19.91 release 2016-03-02 22:28:53 -03:00
Georges Basile Stavracas Neto 64747e4f80 event: load tzid with icaltimezone_get_builtin_timezone 2016-03-01 15:27:07 -03:00
Georges Basile Stavracas Neto 67e370034a style: fix white on white current day on year view 2016-03-01 01:19:41 -03:00
Georges Basile Stavracas Neto 7be1dd95fa event-widget: draw icons at the end of the widget
Instead of breaking the vertical alignment of events by
drawing icons both at the start and end of the widget,
only draw them by the end.

This commit also improves drawing for RTL locales.
2016-03-01 00:16:49 -03:00
Georges Basile Stavracas Neto 5227f3fcdc event-widget: show start time when event is timed
We differentiate all day events from timed events by their
ordering, but we don't give any visual clues of this
differentiation.

Fix that by adding the start time of the event when it's a
timed event.

https://bugzilla.gnome.org/show_bug.cgi?id=753131
2016-02-29 23:24:14 -03:00
Georges Basile Stavracas Neto d84be66d70 event-widget: bring back alarm icon 2016-02-29 22:20:52 -03:00
Georges Basile Stavracas Neto ab902030e7 edit-dialog: don't destroy the dialog on delete 2016-02-29 18:09:59 -03:00
Georges Basile Stavracas Neto a56e6c00c3 event: both start & end dates must be midnight to be all day
https://bugzilla.gnome.org/show_bug.cgi?id=762570
2016-02-29 16:14:22 -03:00
Georges Basile Stavracas Neto 4d170155de event: remove spurious debug message 2016-02-29 16:09:55 -03:00
Georges Basile Stavracas Neto 9a3baf726c edit-dialog: correctly transform the edited datetime 2016-02-29 15:49:36 -03:00
Georges Basile Stavracas Neto ce2c955269 event: correctly store timezones 2016-02-29 15:49:22 -03:00
Georges Basile Stavracas Neto d70613929b utils: fix timezones on event component creation 2016-02-28 14:13:19 -03:00
Georges Basile Stavracas Neto 1cdd73a69a event: format tzid with builtin GDateTime facilities 2016-02-28 14:13:19 -03:00
Georges Basile Stavracas Neto af6f2141ab window: use g_clear_pointer instead of g_date_time_unref
This would handle the case where the datetime is NULL for us.
2016-02-28 14:13:19 -03:00
Georges Basile Stavracas Neto 85f4854a73 quick-add-popover: only multiday events are all day
Everything else is considered a 1h event starting now on
local timezone.
2016-02-26 21:14:30 +01:00
Georges Basile Stavracas Neto e85e55a350 month-view: only send end_date if event is multiday 2016-02-26 21:14:23 +01:00
Georges Basile Stavracas Neto 87620ebbbd event: properly set the timezone 2016-02-26 21:14:23 +01:00
Georges Basile Stavracas Neto e067e8cf73 event-widget: disconnect from event's signals on finalize
When we finalize, we remove the event. Normally this means
that the event also gets finalized, as the widget almost
always holds the only reference to the event.

However, there are some rare cases where we finalize the widget
but not the event. If the event the updates the color or the
summary, we try to redraw the finalized widget and crash.

Fix that by disconnecting the signals when finalizing the widget.
2016-02-22 00:02:59 -03:00
Georges Basile Stavracas Neto e4bfdb7ed2 event: plug a memory leak 2016-02-22 00:02:59 -03:00
Georges Basile Stavracas Neto 079750561a window: remove queued event on finalize
When the user removes an event, we first hide it and,
after a timeout, we remove it. The problem is that if
the user closes the window before the timeout is fired,
the event never gets deleted.

Fix that by deleting the event on finalize if there's
any event queued.

https://bugzilla.gnome.org/show_bug.cgi?id=762284
2016-02-18 15:36:56 -02:00
Georges Basile Stavracas Neto d5cd6c7fc9 window: don't block mainloop when showing dialogs
By using gtk_dialog_run(), we enter in a recursive mainloop
which blocks the parent's one. Because of that, we see weird
things like the quick add popover not still floating around.
2016-02-18 15:28:17 -02:00
Georges Basile Stavracas Neto 9df6a37fd9 edit-dialog: fix more timezone issues 2016-02-18 10:27:53 +01:00
Georges Basile Stavracas Neto fd6d6e97c9 quick-add-popover: fix event creation again 2016-02-18 04:02:46 -02:00
Georges Basile Stavracas Neto 21aa8ecde4 event-widget: simplify rendering code 2016-02-18 04:02:46 -02:00
Georges Basile Stavracas Neto 1a77668b40 style: improve style 2016-02-18 02:11:08 -02:00
Georges Basile Stavracas Neto 83d49be004 style: match single and multi day event themes
We were using different border radius values, and this
commit unifies them.
2016-02-18 02:09:54 -02:00
Georges Basile Stavracas Neto 47bf180809 month-view: fix bottom event overflow calc
We draw a sector of height = bottom_padding * 2 + font_height,
but we calculate it wrongly. Fix that by correctly multiplying
by 2.
2016-02-18 02:08:16 -02:00
Georges Basile Stavracas Neto 6775ffd7b3 edit-dialog: edit datetimes in the system timezone
The dates are adjusted to the system timezone when an
event is set, and we adjust it back to the event's zone
when we save and close the dialog.
2016-02-18 01:28:42 -02:00
Georges Basile Stavracas Neto beac852401 year-view: adjust hours to local timezone
The same principle of month view's overflow popover.
2016-02-18 04:13:34 +01:00
Georges Basile Stavracas Neto 86c6e5da87 quick-add-popover: set local timezone when editing the event
If we add directly from the quick add popover, the event is
all day by default. If we're editing the event, it may or
may not be an all day event. In that case, if the user decides
to give it a time, we want it to be in the local timezone.
2016-02-18 04:03:09 +01:00
Georges Basile Stavracas Neto e5cd5ba7f5 edit-dialog: set UTC timezone when event is all day
This is part of the definition of an all day event.
2016-02-18 04:02:37 +01:00
Georges Basile Stavracas Neto 1af016e2d5 month-view: use adjust hours on popover headers
If an event is from a different timezone, the headers of
the overflown popover should be translated to the current
timezone.

For example, if an event happens at 17h -0300, the translated
hour is 22h +0200. The current code already handles these
differnces, but the listbox row wasn't updated.
2016-02-18 03:42:41 +01:00
Georges Basile Stavracas Neto 2bb5f42b66 edit-dialog: forbid editing times when source is readonly 2016-02-18 03:34:48 +01:00
Georges Basile Stavracas Neto b1184978b1 window: use GDateTimes to pass the range
Another case where we can improve the code by porting
to GLib's api.
2016-02-18 03:31:35 +01:00
Georges Basile Stavracas Neto 5a75abb52e data-model: fix boudaries' checks
The end date is non-incluse, as defined by the iCalendar
protocol.
2016-02-18 03:31:35 +01:00
Georges Basile Stavracas Neto cc1fd4908c month-view: small style fix 2016-02-17 19:10:23 +01:00
Georges Basile Stavracas Neto d87a6e5bfd month-view: compare to adjusted dates 2016-02-17 19:09:59 +01:00
Georges Basile Stavracas Neto 4c2096ec8a subscriber-view: remove is_child_multicell() vfunc
After we added GcalEvent::is_multiday(), there is no need to
wrap it in a vfunc anymore.

To fix it, simply use is_multiday() function and get rid of the
vfunc.
2016-02-17 19:07:50 +01:00
Georges Basile Stavracas Neto 710ee5fc8f window: fix start & end ranges
When we apply a timezone, the ranges change. Therefore, we
should set the timezone to the date itself and then get the
range.
2016-02-17 19:00:07 +01:00
Georges Basile Stavracas Neto 093e9fa52f event: properly detect the timezone 2016-02-17 18:56:42 +01:00
Georges Basile Stavracas Neto 8b0aa6f499 Bump 3.19.90 release 2016-02-16 20:53:08 -02:00
Georges Basile Stavracas Neto ef0a401ccf build: add help-overlay.ui to EXTRA_DIST 2016-02-16 20:42:39 -02:00
Georges Basile Stavracas Neto 4ce918c9aa project: add a shortcuts window
And with this, we finish the last big UI change
that will land for 3.20.
2016-02-16 18:26:02 -02:00
Georges Basile Stavracas Neto 9ff5e05f9c app: automatically load resources from base path
We don't have to load most of the menus we're currently loading
by using the very handy automatic resource loading.

This patch fixup so the app loads resources automagically.
2016-02-16 18:12:18 -02:00
Georges Basile Stavracas Neto bfe18b00df window: fix new event action 2016-02-16 17:53:16 -02:00
Georges Basile Stavracas Neto 9ba89e1db6 window: update calendar colors from popover
When we change the calendar color, everything that represents
this calendar must be updated to match the changes. The calendar
popover, however, wasn't aware of these changes and did not match
updates of calendars.

Fix that by destryoing and readding the row for the given calendar
when it changes.

https://bugzilla.gnome.org/show_bug.cgi?id=762069
2016-02-16 15:09:11 -02:00
Georges Basile Stavracas Neto bf95aad2ca event-widget: remove old colors when applying new ones
For the sake of safety and correctness, remove the old color's
CSS before applying the new color's one.
2016-02-16 15:09:11 -02:00
Georges Basile Stavracas Neto 7c0e3776e1 window: use GcalQuickAddPopover internally
Saves a lot of code from the window file, and makes
things better. Yay!
2016-02-16 13:37:54 -02:00
Georges Basile Stavracas Neto 11070f1d17 quick-add-popover: new class to handle new events
Instead of throwing it all for GcalWindow to handle,
add a new class called GcalQuickAddPopover that handles
event creation.

Events are always all day when created from the quick
add popover, unless the user wants to change it and click
'Edit Details' button.

In the future, we'll look forward adding natural language
support, so the user can type the times directly from the
entry (like e.g. "soccer at park from 10am to 11:30am").
2016-02-16 13:32:35 -02:00
Georges Basile Stavracas Neto 3c0c3646f4 utils: use GDateTime to build component
As part of our epic journey to GDateTime, and to
prepare ground for the future work, use GDateTime
as arguments for building the ECalComponent.
2016-02-16 11:54:35 -02:00
Georges Basile Stavracas Neto 6a64384971 year-view: don't allow selection on event list 2016-02-16 03:49:13 +01:00
Georges Basile Stavracas Neto 5d96c11c55 year-view: only apply widget dates to multiday events
Single day events won't ever show slanted edges.
2016-02-16 03:47:31 +01:00
Georges Basile Stavracas Neto 004af2893f month-view: fix date calc on rtl languages 2016-02-16 11:27:21 +09:00
Georges Basile Stavracas Neto 3f4d11f68e event: normalize dates before applying them
I don't know the reasoning behind it, but sometimes
I see dates like March 32 or February 30. Events are
correctly added, so I suspect it's an issue with another
app.

In any case, we should be able to handle weird dates
without crashing, so normalize the dates before using
them.
2016-02-16 10:39:37 +09:00
Georges Basile Stavracas Neto f39991c7c3 month-view: reallocate children when date changes
The subscriber does not add components who are already
added to the view - and doesn't need to do it. To overcome
that fact, we have to reallocate the events even when
nothing was added.

Fix that by setting the GcalSubscriberView->children_changed
to TRUE and queueing an allocation right after the date
changes.

https://bugzilla.gnome.org/show_bug.cgi?id=762066
2016-02-15 21:18:13 -02:00
Georges Basile Stavracas Neto e8647eb829 month-view: use the event's dates instead of widget's ones
Conceptually, we need to compare the event's dates to make
sure we're allocating the widgets correctly, as widget's
dates may not represent the event's ones.
2016-02-15 21:11:17 -02:00
Georges Basile Stavracas Neto 87e36adbb6 month-view: rework allocation code
GcalEventWidget added API to automatically change
the widget rendering according to the initial and
final dates. Month view, however, was still handling
it manually (and wrongly).

Fix that by reworking the allocation code, documenting
it and using the apropriate API from GcalEventWidget.
2016-02-15 20:42:47 -02:00
Georges Basile Stavracas Neto 7a6a13d7e0 event: fix timezone handling
Using libical with libecal means that the dates
are always stored as UTF dates, and we receive the
timezone as the ECalComponentDateTime::tzid value.

This fact was net being considered when adding date
support on GcalEvent, and was causing various issues
when displaying dates.

Fix that by properly handling timezones in GcalEvent.
2016-02-15 20:42:47 -02:00
Georges Basile Stavracas Neto c66a1dbc6b event: fix is_multiday() method
We have to pass the end date first.
2016-02-15 20:42:47 -02:00
Georges Basile Stavracas Neto 6283d9d025 application: update event colors when agenda changes
When we change a source (aka agenda) color, we have to
restart Calendar in order to see it in action.

After the work on GcalEvent, events are now able to track
the agenda's color changes, and the event widget updates
itself in response to that.

The last step was simple notifying GcalApplication when an
agenda changes, so it knows when to recreate the color schemes.
2016-02-14 12:51:32 -02:00
Georges Basile Stavracas Neto 8511285525 year-view: move comparing function from gcal-event-widget.c
The compare_for_single_day() method is reproducing the
same functionality from gcal_event_compare(), and the only
consumer is the Year View. So, for now, simplify the
comparing function and put it in year view file.

Also, this commit vastly improves and documents the year
view's algorithm to add events to the sidebar list.
2016-02-14 12:17:37 -02:00
Georges Basile Stavracas Neto 070bc681fc edit-dialog: simplify code
We don't need to have 2 functions that do exactly
the same thing.
2016-02-14 12:17:37 -02:00
Georges Basile Stavracas Neto a5658e3993 window: remove source when finalizing
Sometimes we crash the window right after closing it
because we set a timeout for save_geometry() before
destroying it, and the timeout is called after the
window is destroyed.
2016-02-14 12:17:37 -02:00
Georges Basile Stavracas Neto 34ff93ce3f time-selector: use GDateTime
Pretty much like the previous commit, but porting the
GcalTimeSelector class.
2016-02-14 12:17:37 -02:00
Georges Basile Stavracas Neto afe8def60c date-selector: use GDateTime internally
Using a GDateTime improves consistency with the
other components (ideally, we'll move completely
to GDateTime) and simplifies the code.

This commit adds a new property GcalDateSelector::date
and adapts the API to use GDateTime.
2016-02-14 12:17:37 -02:00
Georges Basile Stavracas Neto 2775012346 manager: use GcalEvent on it's API
To make things consistend and clear, use the
GcalEvent class to handle events.
2016-02-14 12:17:37 -02:00
Georges Basile Stavracas Neto c65fe989fe window: use a GcalEvent to delete events
Instead of using the GcalEventData struct, use the
deleted event. It holds a reference until the event
gets destroyed.

With this commit, we can safely drop GcalEventData
structure, since it's not used anymore.
2016-02-14 12:17:37 -02:00
Georges Basile Stavracas Neto 4676a21a58 search-view: use GcalEvent
Instead of relying on the now deprecated GcalEventData,
use the newly introduced GcalEvent class. As a side
effect, the code is simpler and much more saner to
deal with.
2016-02-14 12:17:37 -02:00
Georges Basile Stavracas Neto eb360dc809 shell-provider: use GcalEvent instead of event data
Following the sequence of porting commits, make the Shell's
search provider class handle events using GcalEvent classes
instead of the old GcalEventData structure.
2016-02-14 12:17:37 -02:00
Georges Basile Stavracas Neto e31e6eeac0 edit-dialog: use GcalEvent internally
Instead of using the ESource + ECalComponent combination,
use the new GcalEvent class, which wraps up and simplifies
most of the code.

This commit adds a GcalEditDialog::event property, and
adapts the dialog (and everything dependant on it's code)
to use the GcalEvent class.
2016-02-14 12:17:37 -02:00
Georges Basile Stavracas Neto 0ec0ea8121 event-widget: use GcalEvent internally
This saves a lot of code, and is much saner to maintain.
2016-02-14 12:17:37 -02:00
Georges Basile Stavracas Neto 2ded8b3147 event-widget: drop unused function 2016-02-14 12:17:37 -02:00
Georges Basile Stavracas Neto 5e0d4018f4 event: add a wrapper around events
Instead of relying on confusing structures, raw data
and direct access to components, add a wrapper for
events.
2016-02-14 12:17:37 -02:00
Georges Basile Stavracas Neto 9515c5e627 build: alphabetically sort source files 2016-02-12 15:17:48 -02:00
Georges Basile Stavracas Neto ca327e2ce5 time-selector: turn into a final class 2016-01-19 21:12:19 -02:00
Georges Basile Stavracas Neto 65cfea9609 search-view: turn into a final class 2016-01-19 20:55:17 -02:00
Georges Basile Stavracas Neto f9101b9bc8 year-view: turn into a final class 2016-01-19 20:45:05 -02:00
Georges Basile Stavracas Neto 771d227520 window: turn into a final class 2016-01-19 20:27:21 -02:00
Georges Basile Stavracas Neto 50ce09617e source-dialog: remove private field 2016-01-19 20:03:19 -02:00
Georges Basile Stavracas Neto 80b03531f2 manager: turn into a final class 2016-01-19 19:31:04 -02:00
Georges Basile Stavracas Neto f001fb48b7 event-widget: turn into a final class 2016-01-19 19:12:13 -02:00
Georges Basile Stavracas Neto 5fe6578b16 date-selector: turn into a final class
There is no subclass of GcalDateSelector, and
actually it isn't needed. So, turn the class
into a final class and get rid of the needless
private field.
2016-01-19 18:54:29 -02:00
Georges Basile Stavracas Neto adc83a7a93 application: turn into a final class
GcalApplication is not derivable, so turn it
into a final class and get rid of the private
field.
2016-01-19 18:43:11 -02:00
Georges Basile Stavracas Neto 994a2a839c Bump 3.19.4 release 2016-01-19 18:24:51 -02:00
Georges Basile Stavracas Neto bc6d40b718 build: remove glib-gettext
It's deprecated
2016-01-19 18:20:53 -02:00
Georges Basile Stavracas Neto 7a7910797c Update TODO 2016-01-19 18:16:34 -02:00
Georges Basile Stavracas Neto 7b28416361 month-view: make lines stronger
The current lines are very light and people
with visual issues may not find them easy.

To fix that, make these lines slightly stronger,
enough to make them clearly visible.

https://bugzilla.gnome.org/show_bug.cgi?id=758679
2016-01-12 17:00:07 -02:00
Georges Basile Stavracas Neto df9af0e8f9 month-view: remove leftover
This was supposed to be removed, since there's no
use in setting a state and immediately restore the
context.
2016-01-04 22:24:10 -02:00