diff options
-rw-r--r-- | calendar/ChangeLog | 30 | ||||
-rw-r--r-- | calendar/gui/apps_evolution_calendar.schemas | 16 | ||||
-rw-r--r-- | calendar/gui/calendar-config.c | 36 | ||||
-rw-r--r-- | calendar/gui/calendar-config.h | 16 | ||||
-rw-r--r-- | calendar/gui/calendar-model.c | 6 | ||||
-rw-r--r-- | calendar/gui/gnome-cal.c | 190 |
6 files changed, 132 insertions, 162 deletions
diff --git a/calendar/ChangeLog b/calendar/ChangeLog index 05dc8d5d2b..509487247d 100644 --- a/calendar/ChangeLog +++ b/calendar/ChangeLog @@ -1,3 +1,33 @@ +2003-04-15 JP Rosevear <jpr@ximian.com> + + Fixes #39735 and 40257 + + * gui/gnome-cal.c: convert float pane positions to ints + (setup_widgets): set the initial position after realization and + track the drags to get the new position, pack the panes slightly + differently + (gnome_calendar_set_pane_positions): set purely pixel oriented + positions + (gnome_calendar_update_config_settings): no need to update quanta + setting + (gnome_calendar_hpane_realized): realization callback + (gnome_calendar_vpane_realized): ditto + (gnome_calendar_vpane_resized): resize callback, store new size + (gnome_calendar_hpane_resized): ditto + + * gui/calendar-model.c (get_due_status): handle an error getting + the timezone + + * gui/calendar-config.c (calendar_config_get_hpane_pos): return an int + (calendar_config_set_hpane_pos): take an int + (calendar_config_get_vpane_pos): return an int + (calendar_config_set_vpane_pos): take an int + + * gui/calendar-config.h: update protos + + * gui/apps_evolution_calendar.schemas: update defaults for pane + positions + 2003-04-15 Hans Petter Jansson <hpj@ximian.com> * gui/calendar-component.c (owner_set_cb): If we already have an diff --git a/calendar/gui/apps_evolution_calendar.schemas b/calendar/gui/apps_evolution_calendar.schemas index 3e4aa24e7f..c9c04a9241 100644 --- a/calendar/gui/apps_evolution_calendar.schemas +++ b/calendar/gui/apps_evolution_calendar.schemas @@ -106,8 +106,8 @@ <key>/schemas/apps/evolution/calendar/display/hpane_position</key> <applyto>/apps/evolution/calendar/display/hpane_position</applyto> <owner>evolution-calendar</owner> - <type>float</type> - <default>1.0</default> + <type>int</type> + <default>400</default> <locale name="C"> <short>Position of the horizontal pane</short> </locale> @@ -117,8 +117,8 @@ <key>/schemas/apps/evolution/calendar/display/vpane_position</key> <applyto>/apps/evolution/calendar/display/vpane_position</applyto> <owner>evolution-calendar</owner> - <type>float</type> - <default>1.0</default> + <type>int</type> + <default>150</default> <locale name="C"> <short>Position of the vertical pane</short> </locale> @@ -128,8 +128,8 @@ <key>/schemas/apps/evolution/calendar/display/month_hpane_position</key> <applyto>/apps/evolution/calendar/display/month_hpane_position</applyto> <owner>evolution-calendar</owner> - <type>float</type> - <default>0.0</default> + <type>int</type> + <default>640</default> <locale name="C"> <short>Position of the horizontal pane in the month view</short> </locale> @@ -139,8 +139,8 @@ <key>/schemas/apps/evolution/calendar/display/month_vpane_position</key> <applyto>/apps/evolution/calendar/display/month_vpane_position</applyto> <owner>evolution-calendar</owner> - <type>float</type> - <default>1.0</default> + <type>int</type> + <default>150</default> <locale name="C"> <short>Position of the vertical pane in the month view</short> </locale> diff --git a/calendar/gui/calendar-config.c b/calendar/gui/calendar-config.c index fd5dd0f3a3..e191a6e8d8 100644 --- a/calendar/gui/calendar-config.c +++ b/calendar/gui/calendar-config.c @@ -281,61 +281,61 @@ calendar_config_set_default_view (gint view) /* The positions of the panes in the normal and month views. */ -gfloat +gint calendar_config_get_hpane_pos (void) { - return e_config_listener_get_float_with_default (config, - "/apps/evolution/calendar/display/hpane_position", - 1.0, NULL); + return e_config_listener_get_long_with_default (config, + "/apps/evolution/calendar/display/hpane_position", + -1, NULL); } void -calendar_config_set_hpane_pos (gfloat hpane_pos) +calendar_config_set_hpane_pos (gint hpane_pos) { - e_config_listener_set_float (config, "/apps/evolution/calendar/display/hpane_position", hpane_pos); + e_config_listener_set_long (config, "/apps/evolution/calendar/display/hpane_position", hpane_pos); } -gfloat +gint calendar_config_get_vpane_pos (void) { - return e_config_listener_get_float_with_default (config, "/apps/evolution/calendar/display/vpane_position", 1.0, NULL); + return e_config_listener_get_long_with_default (config, "/apps/evolution/calendar/display/vpane_position", -1, NULL); } void -calendar_config_set_vpane_pos (gfloat vpane_pos) +calendar_config_set_vpane_pos (gint vpane_pos) { - e_config_listener_set_float (config, "/apps/evolution/calendar/display/vpane_position", vpane_pos); + e_config_listener_set_long (config, "/apps/evolution/calendar/display/vpane_position", vpane_pos); } -gfloat +gint calendar_config_get_month_hpane_pos (void) { - return e_config_listener_get_float_with_default (config, "/apps/evolution/calendar/display/month_hpane_position", 0.0, NULL); + return e_config_listener_get_long_with_default (config, "/apps/evolution/calendar/display/month_hpane_position", -1, NULL); } void -calendar_config_set_month_hpane_pos (gfloat hpane_pos) +calendar_config_set_month_hpane_pos (gint hpane_pos) { - e_config_listener_set_float (config, "/apps/evolution/calendar/display/month_hpane_position", hpane_pos); + e_config_listener_set_long (config, "/apps/evolution/calendar/display/month_hpane_position", hpane_pos); } -gfloat +gint calendar_config_get_month_vpane_pos (void) { - return e_config_listener_get_float_with_default (config, "/apps/evolution/calendar/display/month_vpane_position", 1.0, NULL); + return e_config_listener_get_long_with_default (config, "/apps/evolution/calendar/display/month_vpane_position", 0, NULL); } void -calendar_config_set_month_vpane_pos (gfloat vpane_pos) +calendar_config_set_month_vpane_pos (gint vpane_pos) { - e_config_listener_set_float (config, "/apps/evolution/calendar/display/month_vpane_position", vpane_pos); + e_config_listener_set_long (config, "/apps/evolution/calendar/display/month_vpane_position", vpane_pos); } diff --git a/calendar/gui/calendar-config.h b/calendar/gui/calendar-config.h index d1e18bcb65..351f58469d 100644 --- a/calendar/gui/calendar-config.h +++ b/calendar/gui/calendar-config.h @@ -117,17 +117,17 @@ gint calendar_config_get_default_view (void); void calendar_config_set_default_view (gint view); /* The positions of the panes in the normal and month views. */ -gfloat calendar_config_get_hpane_pos (void); -void calendar_config_set_hpane_pos (gfloat hpane_pos); +gint calendar_config_get_hpane_pos (void); +void calendar_config_set_hpane_pos (gint hpane_pos); -gfloat calendar_config_get_vpane_pos (void); -void calendar_config_set_vpane_pos (gfloat vpane_pos); +gint calendar_config_get_vpane_pos (void); +void calendar_config_set_vpane_pos (gint vpane_pos); -gfloat calendar_config_get_month_hpane_pos (void); -void calendar_config_set_month_hpane_pos (gfloat hpane_pos); +gint calendar_config_get_month_hpane_pos (void); +void calendar_config_set_month_hpane_pos (gint hpane_pos); -gfloat calendar_config_get_month_vpane_pos (void); -void calendar_config_set_month_vpane_pos (gfloat vpane_pos); +gint calendar_config_get_month_vpane_pos (void); +void calendar_config_set_month_vpane_pos (gint vpane_pos); /* Colors for the task list */ const char *calendar_config_get_tasks_due_today_color (void); diff --git a/calendar/gui/calendar-model.c b/calendar/gui/calendar-model.c index ebe38ab6a3..9ee184cee6 100644 --- a/calendar/gui/calendar-model.c +++ b/calendar/gui/calendar-model.c @@ -673,9 +673,13 @@ get_due_status (CalendarModel *model, CalComponent *comp) retval = CALENDAR_MODEL_DUE_FUTURE; } else { /* Get the current time in the same timezone as the DUE date.*/ - /* FIXME: TIMEZONES: Handle error. */ status = cal_client_get_timezone (model->priv->client, dt.tzid, &zone); + if (status != CAL_CLIENT_GET_SUCCESS) { + retval = CALENDAR_MODEL_DUE_FUTURE; + goto out; + } + now_tt = icaltime_current_time_with_zone (zone); if (icaltime_compare (*dt.value, now_tt) <= 0) diff --git a/calendar/gui/gnome-cal.c b/calendar/gui/gnome-cal.c index 570577fd22..be5de68b80 100644 --- a/calendar/gui/gnome-cal.c +++ b/calendar/gui/gnome-cal.c @@ -119,10 +119,10 @@ struct _GnomeCalendarPrivate { /* These are the saved positions of the panes. They are multiples of calendar month widths & heights in the date navigator, so that they will work OK after theme changes. */ - gfloat hpane_pos; - gfloat vpane_pos; - gfloat hpane_pos_month_view; - gfloat vpane_pos_month_view; + gint hpane_pos; + gint vpane_pos; + gint hpane_pos_month_view; + gint vpane_pos_month_view; /* The signal handler id for our GtkCalendar "day_selected" handler. */ guint day_selected_id; @@ -172,13 +172,11 @@ static void gnome_calendar_set_pane_positions (GnomeCalendar *gcal); static void gnome_calendar_update_view_times (GnomeCalendar *gcal); static void gnome_calendar_update_date_navigator (GnomeCalendar *gcal); -static void gnome_calendar_on_date_navigator_style_set (GtkWidget *widget, - GtkStyle *previous_style, - gpointer data); -static void gnome_calendar_update_paned_quanta (GnomeCalendar *gcal); -static void gnome_calendar_on_date_navigator_size_allocate (GtkWidget *widget, - GtkAllocation *allocation, - gpointer data); +static void gnome_calendar_hpane_realized (GtkWidget *w, GnomeCalendar *gcal); +static void gnome_calendar_vpane_realized (GtkWidget *w, GnomeCalendar *gcal); +static gboolean gnome_calendar_vpane_resized (GtkWidget *w, GdkEventButton *e, GnomeCalendar *gcal); +static gboolean gnome_calendar_hpane_resized (GtkWidget *w, GdkEventButton *e, GnomeCalendar *gcal); + static void gnome_calendar_on_date_navigator_date_range_changed (ECalendarItem *calitem, GnomeCalendar *gcal); static void gnome_calendar_on_date_navigator_selection_changed (ECalendarItem *calitem, @@ -748,6 +746,10 @@ setup_widgets (GnomeCalendar *gcal) /* The main HPaned, with the notebook of calendar views on the left and the ECalendar and ToDo list on the right. */ priv->hpane = gtk_hpaned_new (); + g_signal_connect_after(priv->hpane, "realize", + G_CALLBACK(gnome_calendar_hpane_realized), gcal); + g_signal_connect (priv->hpane, "button_release_event", + G_CALLBACK (gnome_calendar_hpane_resized), gcal); gtk_widget_show (priv->hpane); gtk_box_pack_start (GTK_BOX (gcal), priv->hpane, TRUE, TRUE, 0); @@ -756,12 +758,16 @@ setup_widgets (GnomeCalendar *gcal) gtk_notebook_set_show_border (GTK_NOTEBOOK (priv->notebook), FALSE); gtk_notebook_set_show_tabs (GTK_NOTEBOOK (priv->notebook), FALSE); gtk_widget_show (priv->notebook); - gtk_paned_pack1 (GTK_PANED (priv->hpane), priv->notebook, TRUE, TRUE); + gtk_paned_pack1 (GTK_PANED (priv->hpane), priv->notebook, FALSE, TRUE); /* The VPaned widget, to contain the GtkCalendar & ToDo list. */ priv->vpane = gtk_vpaned_new (); + g_signal_connect_after (priv->vpane, "realize", + G_CALLBACK(gnome_calendar_vpane_realized), gcal); + g_signal_connect (priv->vpane, "button_release_event", + G_CALLBACK (gnome_calendar_vpane_resized), gcal); gtk_widget_show (priv->vpane); - gtk_paned_pack2 (GTK_PANED (priv->hpane), priv->vpane, FALSE, TRUE); + gtk_paned_pack2 (GTK_PANED (priv->hpane), priv->vpane, TRUE, TRUE); /* The ECalendar. */ w = e_calendar_new (); @@ -773,11 +779,8 @@ setup_widgets (GnomeCalendar *gcal) (ECalendarItemGetTimeCallback) get_current_time, gcal, NULL); - gtk_paned_pack1 (GTK_PANED (priv->vpane), w, FALSE, TRUE); - g_signal_connect (priv->date_navigator, "style_set", - G_CALLBACK (gnome_calendar_on_date_navigator_style_set), gcal); - g_signal_connect_after (priv->date_navigator, "size_allocate", - G_CALLBACK (gnome_calendar_on_date_navigator_size_allocate), gcal); + gtk_paned_pack1 (GTK_PANED (priv->vpane), w, FALSE, TRUE); + g_signal_connect (priv->date_navigator->calitem, "selection_changed", G_CALLBACK (gnome_calendar_on_date_navigator_selection_changed), gcal); g_signal_connect (priv->date_navigator->calitem, "date_range_changed", @@ -1447,49 +1450,16 @@ static void gnome_calendar_set_pane_positions (GnomeCalendar *gcal) { GnomeCalendarPrivate *priv; - gint top_border, bottom_border, left_border, right_border; - gint col_width, row_height; - gfloat right_pane_width, top_pane_height; priv = gcal->priv; - /* Get the size of the calendar month width & height. */ - e_calendar_get_border_size (priv->date_navigator, - &top_border, &bottom_border, - &left_border, &right_border); - g_object_get (G_OBJECT (priv->date_navigator->calitem), - "row_height", &row_height, - "column_width", &col_width, - NULL); - if (priv->current_view_type == GNOME_CAL_MONTH_VIEW && !priv->range_selected) { - right_pane_width = priv->hpane_pos_month_view; - top_pane_height = priv->vpane_pos_month_view; + gtk_paned_set_position (GTK_PANED (priv->hpane), priv->hpane_pos_month_view); + gtk_paned_set_position (GTK_PANED (priv->vpane), priv->vpane_pos_month_view); } else { - right_pane_width = priv->hpane_pos; - top_pane_height = priv->vpane_pos; + gtk_paned_set_position (GTK_PANED (priv->hpane), priv->hpane_pos); + gtk_paned_set_position (GTK_PANED (priv->vpane), priv->vpane_pos); } - - /* We add the borders before multiplying due to the way we are using - the EPaned quantum feature. */ - if (right_pane_width < 0.001) - right_pane_width = 0.0; - else - right_pane_width = (right_pane_width * (col_width + left_border + right_border) - + 0.5); - if (top_pane_height < 0.001) - top_pane_height = 0.0; - else - top_pane_height = (top_pane_height * (row_height + top_border + bottom_border) - + 0.5); - - gtk_paned_set_position (GTK_PANED (priv->hpane), -1); - gtk_paned_set_position (GTK_PANED (priv->vpane), -1); - - /* We add one to each dimension since we can't use 0. */ - - gtk_widget_set_usize (priv->vpane, right_pane_width + 1, -2); - gtk_widget_set_usize (GTK_WIDGET (priv->date_navigator), -2, top_pane_height + 1); } /* Displays an error to indicate that opening a calendar failed */ @@ -2160,8 +2130,6 @@ gnome_calendar_update_config_settings (GnomeCalendar *gcal, priv->vpane_pos = calendar_config_get_vpane_pos (); priv->hpane_pos_month_view = calendar_config_get_month_hpane_pos (); priv->vpane_pos_month_view = calendar_config_get_month_vpane_pos (); - } else { - gnome_calendar_update_paned_quanta (gcal); } /* The range of days shown may have changed, so we update the date @@ -2614,100 +2582,68 @@ gnome_calendar_on_date_navigator_date_range_changed (ECalendarItem *calitem, update_query (gcal); } - static void -gnome_calendar_on_date_navigator_style_set (GtkWidget *widget, - GtkStyle *previous_style, - gpointer data) +gnome_calendar_hpane_realized (GtkWidget *w, GnomeCalendar *gcal) { - gnome_calendar_update_paned_quanta (GNOME_CALENDAR (data)); -} + GnomeCalendarPrivate *priv; + + priv = gcal->priv; + if (priv->current_view_type == GNOME_CAL_MONTH_VIEW && !priv->range_selected) { + gtk_paned_set_position (GTK_PANED (priv->hpane), priv->hpane_pos_month_view); + } else { + gtk_paned_set_position (GTK_PANED (priv->hpane), priv->hpane_pos); + } +} static void -gnome_calendar_update_paned_quanta (GnomeCalendar *gcal) +gnome_calendar_vpane_realized (GtkWidget *w, GnomeCalendar *gcal) { GnomeCalendarPrivate *priv; - gint row_height, col_width; - gint top_border, bottom_border, left_border, right_border; priv = gcal->priv; - e_calendar_get_border_size (priv->date_navigator, - &top_border, &bottom_border, - &left_border, &right_border); - g_object_get (G_OBJECT (priv->date_navigator->calitem), - "row_height", &row_height, - "column_width", &col_width, - NULL); - - /* The EPaned quantum feature works better if we add on the calendar - borders to the quantum size. Otherwise if you shrink the date - navigator you get left with the border widths/heights which looks - bad. EPaned should be more flexible really. */ - col_width += left_border + right_border; - row_height += top_border + bottom_border; - - /* We don't have to use the EPaned quantum feature. We could just let - the calendar expand to fill the allocated space, showing as many - months as will fit. But for that to work nicely the EPaned should - resize the widgets as the bar is dragged. Otherwise the user has - to mess around to get the number of months that they want. */ -#if 0 - g_object_set (G_OBJECT (priv->hpane), "quantum", (guint) col_width, NULL); - g_object_set (G_OBJECT (priv->vpane), "quantum", (guint) row_height, NULL); -#endif - - gnome_calendar_set_pane_positions (gcal); + if (priv->current_view_type == GNOME_CAL_MONTH_VIEW && !priv->range_selected) { + gtk_paned_set_position (GTK_PANED (priv->vpane), priv->vpane_pos_month_view); + } else { + gtk_paned_set_position (GTK_PANED (priv->vpane), priv->vpane_pos); + } } - -static void -gnome_calendar_on_date_navigator_size_allocate (GtkWidget *widget, - GtkAllocation *allocation, - gpointer data) +static gboolean +gnome_calendar_vpane_resized (GtkWidget *w, GdkEventButton *e, GnomeCalendar *gcal) { - GnomeCalendar *gcal; GnomeCalendarPrivate *priv; - gint width, height, row_height, col_width; - gint top_border, bottom_border, left_border, right_border; - gfloat hpane_pos, vpane_pos; - gcal = GNOME_CALENDAR (data); priv = gcal->priv; - e_calendar_get_border_size (priv->date_navigator, - &top_border, &bottom_border, - &left_border, &right_border); - g_object_get (G_OBJECT (priv->date_navigator->calitem), - "row_height", &row_height, - "column_width", &col_width, - NULL); + if (priv->current_view_type == GNOME_CAL_MONTH_VIEW && !priv->range_selected) { + priv->vpane_pos_month_view = gtk_paned_get_position (priv->vpane); + calendar_config_set_month_vpane_pos (priv->vpane_pos_month_view); + } else { + priv->vpane_pos = gtk_paned_get_position (priv->vpane); + calendar_config_set_vpane_pos (priv->vpane_pos); + } - /* We subtract one from each dimension since we added 1 in - set_view(). */ - width = allocation->width - 1; - height = allocation->height - 1; + return FALSE; +} - /* We add the border sizes to work around the EPaned - quantized feature. */ - col_width += left_border + right_border; - row_height += top_border + bottom_border; +static gboolean +gnome_calendar_hpane_resized (GtkWidget *w, GdkEventButton *e, GnomeCalendar *gcal) +{ + GnomeCalendarPrivate *priv; - hpane_pos = (gfloat) width / col_width; - vpane_pos = (gfloat) height / row_height; + priv = gcal->priv; if (priv->current_view_type == GNOME_CAL_MONTH_VIEW && !priv->range_selected) { - priv->hpane_pos_month_view = hpane_pos; - priv->vpane_pos_month_view = vpane_pos; - calendar_config_set_month_hpane_pos (hpane_pos); - calendar_config_set_month_vpane_pos (vpane_pos); + priv->hpane_pos_month_view = gtk_paned_get_position (priv->hpane); + calendar_config_set_month_hpane_pos (priv->hpane_pos_month_view); } else { - priv->hpane_pos = hpane_pos; - priv->vpane_pos = vpane_pos; - calendar_config_set_hpane_pos (hpane_pos); - calendar_config_set_vpane_pos (vpane_pos); + priv->hpane_pos = gtk_paned_get_position (priv->hpane); + calendar_config_set_hpane_pos (priv->hpane_pos); } + + return FALSE; } void |