diff options
author | Matthew Barnes <mbarnes@redhat.com> | 2010-01-04 11:47:27 +0800 |
---|---|---|
committer | Matthew Barnes <mbarnes@redhat.com> | 2010-01-05 09:22:21 +0800 |
commit | 5c80f1534b435ff5c1c9cc88eb9f5c5c1124f82a (patch) | |
tree | 92b05ad7116690bf2da53a0fa6ba813fcbea50c7 /calendar/gui | |
parent | 69945127d8a7933512bb14eb20ff85354704b5cc (diff) | |
download | gsoc2013-evolution-5c80f1534b435ff5c1c9cc88eb9f5c5c1124f82a.tar gsoc2013-evolution-5c80f1534b435ff5c1c9cc88eb9f5c5c1124f82a.tar.gz gsoc2013-evolution-5c80f1534b435ff5c1c9cc88eb9f5c5c1124f82a.tar.bz2 gsoc2013-evolution-5c80f1534b435ff5c1c9cc88eb9f5c5c1124f82a.tar.lz gsoc2013-evolution-5c80f1534b435ff5c1c9cc88eb9f5c5c1124f82a.tar.xz gsoc2013-evolution-5c80f1534b435ff5c1c9cc88eb9f5c5c1124f82a.tar.zst gsoc2013-evolution-5c80f1534b435ff5c1c9cc88eb9f5c5c1124f82a.zip |
Coding style and whitespace cleanup.
Diffstat (limited to 'calendar/gui')
-rw-r--r-- | calendar/gui/dialogs/comp-editor.h | 27 | ||||
-rw-r--r-- | calendar/gui/e-task-table.c | 50 | ||||
-rw-r--r-- | calendar/gui/ea-cal-view-event.c | 4 | ||||
-rw-r--r-- | calendar/gui/gnome-cal.h | 20 | ||||
-rw-r--r-- | calendar/gui/weekday-picker.c | 475 |
5 files changed, 301 insertions, 275 deletions
diff --git a/calendar/gui/dialogs/comp-editor.h b/calendar/gui/dialogs/comp-editor.h index 54672ec3b8..4871beae8f 100644 --- a/calendar/gui/dialogs/comp-editor.h +++ b/calendar/gui/dialogs/comp-editor.h @@ -67,16 +67,25 @@ struct _CompEditorClass { const gchar *help_section; /* Virtual functions */ - void (*edit_comp) (CompEditor *page, ECalComponent *comp); - void (*object_created) (CompEditor *page); - gboolean (*send_comp) (CompEditor *page, ECalComponentItipMethod method, gboolean strip_alarms); + void (*edit_comp) (CompEditor *page, + ECalComponent *comp); + void (*object_created) (CompEditor *page); + gboolean (*send_comp) (CompEditor *page, + ECalComponentItipMethod method, + gboolean strip_alarms); - void (*show_categories) (CompEditor *editor, gboolean visible); - void (*show_role) (CompEditor *editor, gboolean visible); - void (*show_rsvp) (CompEditor *editor, gboolean visible); - void (*show_status) (CompEditor *editor, gboolean visible); - void (*show_time_zone) (CompEditor *editor, gboolean visible); - void (*show_type) (CompEditor *editor, gboolean visible); + void (*show_categories) (CompEditor *editor, + gboolean visible); + void (*show_role) (CompEditor *editor, + gboolean visible); + void (*show_rsvp) (CompEditor *editor, + gboolean visible); + void (*show_status) (CompEditor *editor, + gboolean visible); + void (*show_time_zone) (CompEditor *editor, + gboolean visible); + void (*show_type) (CompEditor *editor, + gboolean visible); }; typedef enum { diff --git a/calendar/gui/e-task-table.c b/calendar/gui/e-task-table.c index 009d47daec..c4d364a930 100644 --- a/calendar/gui/e-task-table.c +++ b/calendar/gui/e-task-table.c @@ -739,7 +739,9 @@ task_table_query_tooltip (GtkWidget *widget, use_24_hour_format = e_cal_model_get_use_24_hour_format (model); if (dtstart.tzid) { - zone = icalcomponent_get_timezone (e_cal_component_get_icalcomponent (new_comp), dtstart.tzid); + zone = icalcomponent_get_timezone ( + e_cal_component_get_icalcomponent (new_comp), + dtstart.tzid); if (!zone) e_cal_get_timezone ( comp_data->client, dtstart.tzid, &zone, NULL); @@ -1390,20 +1392,23 @@ check_for_retract (ECalComponent *comp, ECal *client) ECalComponentOrganizer org; gchar *email = NULL; const gchar *strip = NULL; - gboolean ret_val = FALSE; + gboolean ret_val; - if (!(e_cal_component_has_attendees (comp) && - e_cal_get_save_schedules (client))) - return ret_val; + if (!e_cal_component_has_attendees (comp)) + return FALSE; + + if (!e_cal_get_save_schedules (client)) + return FALSE; e_cal_component_get_organizer (comp, &org); strip = itip_strip_mailto (org.value); - if (e_cal_get_cal_address (client, &email, NULL) && !g_ascii_strcasecmp (email, strip)) { - ret_val = TRUE; - } + ret_val = + e_cal_get_cal_address (client, &email, NULL) && + g_ascii_strcasecmp (email, strip) == 0; g_free (email); + return ret_val; } @@ -1438,14 +1443,17 @@ e_task_table_delete_selected (ETaskTable *task_table) if (comp_data) { comp = e_cal_component_new (); - e_cal_component_set_icalcomponent (comp, icalcomponent_new_clone (comp_data->icalcomp)); + e_cal_component_set_icalcomponent ( + comp, icalcomponent_new_clone (comp_data->icalcomp)); } if ((n_selected == 1) && comp && check_for_retract (comp, comp_data->client)) { gchar *retract_comment = NULL; gboolean retract = FALSE; - delete = prompt_retract_dialog (comp, &retract_comment, GTK_WIDGET (task_table), &retract); + delete = prompt_retract_dialog ( + comp, &retract_comment, + GTK_WIDGET (task_table), &retract); if (retract) { GList *users = NULL; icalcomponent *icalcomp = NULL, *mod_comp = NULL; @@ -1471,7 +1479,9 @@ e_task_table_delete_selected (ETaskTable *task_table) } } else { - delete = delete_component_dialog (comp, FALSE, n_selected, E_CAL_COMPONENT_TODO, GTK_WIDGET (task_table)); + delete = delete_component_dialog ( + comp, FALSE, n_selected, + E_CAL_COMPONENT_TODO, GTK_WIDGET (task_table)); } if (delete) @@ -1506,7 +1516,10 @@ e_task_table_get_selected (ETaskTable *task_table) } static void -hide_completed_rows (ECalModel *model, GList *clients_list, gchar *hide_sexp, GPtrArray *comp_objects) +hide_completed_rows (ECalModel *model, + GList *clients_list, + gchar *hide_sexp, + GPtrArray *comp_objects) { GList *l, *m, *objects; ECal *client; @@ -1548,13 +1561,17 @@ hide_completed_rows (ECalModel *model, GList *clients_list, gchar *hide_sexp, GP } if (changed) { - /* to notify about changes, because in call of row_deleted there are still all events */ + /* To notify about changes, because in call of + * row_deleted there are still all events. */ e_table_model_changed (E_TABLE_MODEL (model)); } } static void -show_completed_rows (ECalModel *model, GList *clients_list, gchar *show_sexp, GPtrArray *comp_objects) +show_completed_rows (ECalModel *model, + GList *clients_list, + gchar *show_sexp, + GPtrArray *comp_objects) { GList *l, *m, *objects; ECal *client; @@ -1583,7 +1600,10 @@ show_completed_rows (ECalModel *model, GList *clients_list, gchar *show_sexp, GP comp_data->icalcomp = icalcomponent_new_clone (m->data); e_cal_model_set_instance_times (comp_data, e_cal_model_get_timezone (model)); - comp_data->dtstart = comp_data->dtend = comp_data->due = comp_data->completed = NULL; + comp_data->dtstart = NULL; + comp_data->dtend = NULL; + comp_data->due = NULL; + comp_data->completed = NULL; comp_data->color = NULL; g_ptr_array_add (comp_objects, comp_data); diff --git a/calendar/gui/ea-cal-view-event.c b/calendar/gui/ea-cal-view-event.c index 5f0af90261..4fbc93e3e2 100644 --- a/calendar/gui/ea-cal-view-event.c +++ b/calendar/gui/ea-cal-view-event.c @@ -276,7 +276,9 @@ ea_cal_view_event_get_name (AtkObject *accessible) else summary_string = g_strdup (_("Calendar Event: It has no summary.")); - name_string = g_strdup_printf ("%s %s %s %s", summary_string, alarm_string, recur_string, meeting_string); + name_string = g_strdup_printf ( + "%s %s %s %s", summary_string, + alarm_string, recur_string, meeting_string); g_free (summary_string); ATK_OBJECT_CLASS (parent_class)->set_name (accessible, name_string); diff --git a/calendar/gui/gnome-cal.h b/calendar/gui/gnome-cal.h index 197396dbd6..5703b99811 100644 --- a/calendar/gui/gnome-cal.h +++ b/calendar/gui/gnome-cal.h @@ -93,19 +93,23 @@ struct _GnomeCalendarClass { GtkVBoxClass parent_class; /* Notification signals */ - void (* dates_shown_changed) (GnomeCalendar *gcal); + void (*dates_shown_changed) (GnomeCalendar *gcal); - void (* calendar_selection_changed) (GnomeCalendar *gcal); + void (*calendar_selection_changed) (GnomeCalendar *gcal); - void (* calendar_focus_change) (GnomeCalendar *gcal, gboolean in); - void (* change_view) (GnomeCalendar *gcal, - GnomeCalendarViewType view_type); + void (*calendar_focus_change) (GnomeCalendar *gcal, + gboolean in); + void (*change_view) (GnomeCalendar *gcal, + GnomeCalendarViewType view_type); - void (* source_added) (GnomeCalendar *gcal, ESource *source); - void (* source_removed) (GnomeCalendar *gcal, ESource *source); + void (*source_added) (GnomeCalendar *gcal, + ESource *source); + void (*source_removed) (GnomeCalendar *gcal, + ESource *source); /* Action signals */ - void (* goto_date) (GnomeCalendar *gcal, GnomeCalendarGotoDateType date); + void (*goto_date) (GnomeCalendar *gcal, + GnomeCalendarGotoDateType date); }; GType gnome_calendar_get_type (void); diff --git a/calendar/gui/weekday-picker.c b/calendar/gui/weekday-picker.c index 12c09b43c5..6e9f4bb34f 100644 --- a/calendar/gui/weekday-picker.c +++ b/calendar/gui/weekday-picker.c @@ -70,196 +70,19 @@ enum { LAST_SIGNAL }; -static void weekday_picker_destroy (GtkObject *object); - -static void weekday_picker_realize (GtkWidget *widget); -static void weekday_picker_size_request (GtkWidget *widget, GtkRequisition *requisition); -static void weekday_picker_size_allocate (GtkWidget *widget, GtkAllocation *allocation); -static void weekday_picker_style_set (GtkWidget *widget, GtkStyle *previous_style); -static gboolean weekday_picker_focus (GtkWidget *widget, GtkDirectionType direction); -static void colorize_items (WeekdayPicker *wp); - static guint wp_signals[LAST_SIGNAL]; G_DEFINE_TYPE (WeekdayPicker, weekday_picker, GNOME_TYPE_CANVAS) -/* Class initialization function for the weekday picker */ -static void -weekday_picker_class_init (WeekdayPickerClass *class) -{ - GtkObjectClass *object_class; - GtkWidgetClass *widget_class; - - object_class = (GtkObjectClass *) class; - widget_class = (GtkWidgetClass *) class; - - wp_signals[CHANGED] = - g_signal_new ("changed", - G_TYPE_FROM_CLASS (object_class), - G_SIGNAL_RUN_FIRST, - G_STRUCT_OFFSET (WeekdayPickerClass, changed), - NULL, NULL, - g_cclosure_marshal_VOID__VOID, - G_TYPE_NONE, 0); - - object_class->destroy = weekday_picker_destroy; - - widget_class->realize = weekday_picker_realize; - widget_class->size_request = weekday_picker_size_request; - widget_class->size_allocate = weekday_picker_size_allocate; - widget_class->style_set = weekday_picker_style_set; - widget_class->focus = weekday_picker_focus; - - class->changed = NULL; -} - -static void -day_clicked (WeekdayPicker *wp, gint index) -{ - WeekdayPickerPrivate *priv = wp->priv; - guint8 day_mask; - - if (priv->blocked_day_mask & (0x1 << index)) - return; - - if (priv->day_mask & (0x1 << index)) - day_mask = priv->day_mask & ~(0x1 << index); - else - day_mask = priv->day_mask | (0x1 << index); - - weekday_picker_set_days (wp, day_mask); -} - -static gint -handle_key_press_event (WeekdayPicker *wp, GdkEvent *event) -{ - WeekdayPickerPrivate *priv = wp->priv; - guint keyval = event->key.keyval; - - if (priv->focus_day == -1) - priv->focus_day = priv->week_start_day; - - switch (keyval) { - case GDK_Up: - case GDK_Right: - priv->focus_day += 1; - break; - case GDK_Down: - case GDK_Left: - priv->focus_day -= 1; - break; - case GDK_space: - case GDK_Return: - day_clicked (wp, priv->focus_day); - return TRUE; - default: - return FALSE; - } - - if (priv->focus_day > 6) - priv->focus_day = 0; - if (priv->focus_day < 0) - priv->focus_day = 6; - - colorize_items (wp); - gnome_canvas_item_grab_focus (priv->boxes[priv->focus_day]); - return TRUE; -} - -/* Event handler for the day items */ -static gint -day_event_cb (GnomeCanvasItem *item, GdkEvent *event, gpointer data) -{ - WeekdayPicker *wp; - WeekdayPickerPrivate *priv; - gint i; - - wp = WEEKDAY_PICKER (data); - priv = wp->priv; - - if (event->type == GDK_KEY_PRESS) - return handle_key_press_event(wp, event); - - if (!(event->type == GDK_BUTTON_PRESS && event->button.button == 1)) - return FALSE; - - /* Find which box was clicked */ - - for (i = 0; i < 7; i++) - if (priv->boxes[i] == item || priv->labels[i] == item) - break; - - g_return_val_if_fail (i != 7, TRUE); - - i += priv->week_start_day; - if (i >= 7) - i -= 7; - - priv->focus_day = i; - gnome_canvas_item_grab_focus (priv->boxes[i]); - day_clicked (wp, i); - return TRUE; -} - -/* Creates the canvas items for the weekday picker. The items are empty until - * they are configured elsewhere. - */ -static void -create_items (WeekdayPicker *wp) -{ - WeekdayPickerPrivate *priv; - GnomeCanvasGroup *parent; - gint i; - - priv = wp->priv; - - parent = gnome_canvas_root (GNOME_CANVAS (wp)); - - for (i = 0; i < 7; i++) { - priv->boxes[i] = gnome_canvas_item_new (parent, - GNOME_TYPE_CANVAS_RECT, - NULL); - g_signal_connect (priv->boxes[i], "event", G_CALLBACK (day_event_cb), wp); - - priv->labels[i] = gnome_canvas_item_new (parent, - GNOME_TYPE_CANVAS_TEXT, - NULL); - g_signal_connect (priv->labels[i], "event", G_CALLBACK (day_event_cb), wp); - } -} - -/* Object initialization function for the weekday picker */ -static void -weekday_picker_init (WeekdayPicker *wp) -{ - WeekdayPickerPrivate *priv; - - priv = g_new0 (WeekdayPickerPrivate, 1); - - wp->priv = priv; - - create_items (wp); - priv->focus_day = -1; -} - -/* Finalize handler for the weekday picker */ -static void -weekday_picker_destroy (GtkObject *object) +static gchar * +get_day_text (gint day_index) { - WeekdayPicker *wp; - WeekdayPickerPrivate *priv; - - g_return_if_fail (object != NULL); - g_return_if_fail (IS_WEEKDAY_PICKER (object)); - - wp = WEEKDAY_PICKER (object); - priv = wp->priv; + GDateWeekday weekday; - g_free (priv); - wp->priv = NULL; + /* Convert from tm_wday to GDateWeekday. */ + weekday = (day_index == 0) ? G_DATE_SUNDAY : day_index; - if (GTK_OBJECT_CLASS (weekday_picker_parent_class)->destroy) - (* GTK_OBJECT_CLASS (weekday_picker_parent_class)->destroy) (object); + return g_strdup (e_get_weekday_name (weekday, TRUE)); } static void @@ -314,18 +137,6 @@ colorize_items (WeekdayPicker *wp) } } -/* Configures the items in the weekday picker by setting their attributes. */ -static gchar * -get_day_text (gint day_index) -{ - GDateWeekday weekday; - - /* Convert from tm_wday to GDateWeekday. */ - weekday = (day_index == 0) ? G_DATE_SUNDAY : day_index; - - return g_strdup (e_get_weekday_name (weekday, TRUE)); -} - static void configure_items (WeekdayPicker *wp) { @@ -370,7 +181,25 @@ configure_items (WeekdayPicker *wp) colorize_items (wp); } -/* Realize handler for the weekday picker */ +static void +weekday_picker_destroy (GtkObject *object) +{ + WeekdayPicker *wp; + WeekdayPickerPrivate *priv; + + g_return_if_fail (object != NULL); + g_return_if_fail (IS_WEEKDAY_PICKER (object)); + + wp = WEEKDAY_PICKER (object); + priv = wp->priv; + + g_free (priv); + wp->priv = NULL; + + /* Chain up to parent's destroy() method. */ + GTK_OBJECT_CLASS (weekday_picker_parent_class)->destroy (object); +} + static void weekday_picker_realize (GtkWidget *widget) { @@ -378,15 +207,15 @@ weekday_picker_realize (GtkWidget *widget) wp = WEEKDAY_PICKER (widget); - if (GTK_WIDGET_CLASS (weekday_picker_parent_class)->realize) - (* GTK_WIDGET_CLASS (weekday_picker_parent_class)->realize) (widget); + /* Chain up to parent's realize() method. */ + GTK_WIDGET_CLASS (weekday_picker_parent_class)->realize (widget); configure_items (wp); } -/* Size_request handler for the weekday picker */ static void -weekday_picker_size_request (GtkWidget *widget, GtkRequisition *requisition) +weekday_picker_size_request (GtkWidget *widget, + GtkRequisition *requisition) { WeekdayPicker *wp; WeekdayPickerPrivate *priv; @@ -398,27 +227,31 @@ weekday_picker_size_request (GtkWidget *widget, GtkRequisition *requisition) requisition->height = (priv->font_ascent + priv->font_descent + 2 * PADDING + 2); } -/* Size_allocate handler for the weekday picker */ static void -weekday_picker_size_allocate (GtkWidget *widget, GtkAllocation *allocation) +weekday_picker_size_allocate (GtkWidget *widget, + GtkAllocation *allocation) { + GtkWidgetClass *widget_class; WeekdayPicker *wp; wp = WEEKDAY_PICKER (widget); - if (GTK_WIDGET_CLASS (weekday_picker_parent_class)->size_allocate) - (* GTK_WIDGET_CLASS (weekday_picker_parent_class)->size_allocate) (widget, allocation); + /* Chain up to parent's size_allocate() method. */ + widget_class = GTK_WIDGET_CLASS (weekday_picker_parent_class); + widget_class->size_allocate (widget, allocation); - gnome_canvas_set_scroll_region (GNOME_CANVAS (wp), - 0, 0, allocation->width, allocation->height); + gnome_canvas_set_scroll_region ( + GNOME_CANVAS (wp), 0, 0, + allocation->width, allocation->height); configure_items (wp); } -/* Style_set handler for the weekday picker */ static void -weekday_picker_style_set (GtkWidget *widget, GtkStyle *previous_style) +weekday_picker_style_set (GtkWidget *widget, + GtkStyle *previous_style) { + GtkWidgetClass *widget_class; WeekdayPicker *wp; WeekdayPickerPrivate *priv; gint max_width; @@ -434,12 +267,15 @@ weekday_picker_style_set (GtkWidget *widget, GtkStyle *previous_style) /* Set up Pango prerequisites */ font_desc = gtk_widget_get_style (widget)->font_desc; pango_context = gtk_widget_get_pango_context (widget); - font_metrics = pango_context_get_metrics (pango_context, font_desc, - pango_context_get_language (pango_context)); + font_metrics = pango_context_get_metrics ( + pango_context, font_desc, + pango_context_get_language (pango_context)); layout = pango_layout_new (pango_context); - priv->font_ascent = PANGO_PIXELS (pango_font_metrics_get_ascent (font_metrics)); - priv->font_descent = PANGO_PIXELS (pango_font_metrics_get_descent (font_metrics)); + priv->font_ascent = + PANGO_PIXELS (pango_font_metrics_get_ascent (font_metrics)); + priv->font_descent = + PANGO_PIXELS (pango_font_metrics_get_descent (font_metrics)); max_width = 0; @@ -462,11 +298,193 @@ weekday_picker_style_set (GtkWidget *widget, GtkStyle *previous_style) g_object_unref (layout); pango_font_metrics_unref (font_metrics); - if (GTK_WIDGET_CLASS (weekday_picker_parent_class)->style_set) - (* GTK_WIDGET_CLASS (weekday_picker_parent_class)->style_set) (widget, previous_style); + /* Chain up to parent's style_set() method. */ + widget_class = GTK_WIDGET_CLASS (weekday_picker_parent_class); + widget_class->style_set (widget, previous_style); } - +static gboolean +weekday_picker_focus (GtkWidget *widget, + GtkDirectionType direction) +{ + WeekdayPicker *wp; + WeekdayPickerPrivate *priv; + + g_return_val_if_fail (widget != NULL, FALSE); + g_return_val_if_fail (IS_WEEKDAY_PICKER (widget), FALSE); + wp = WEEKDAY_PICKER (widget); + priv = wp->priv; + + if (!GTK_WIDGET_CAN_FOCUS (widget)) + return FALSE; + + if (GTK_WIDGET_HAS_FOCUS (widget)) { + priv->focus_day = -1; + colorize_items (wp); + return FALSE; + } + + priv->focus_day = priv->week_start_day; + gnome_canvas_item_grab_focus (priv->boxes[priv->focus_day]); + colorize_items (wp); + + return TRUE; +} +static void +weekday_picker_class_init (WeekdayPickerClass *class) +{ + GtkObjectClass *object_class; + GtkWidgetClass *widget_class; + + object_class = GTK_OBJECT_CLASS (class); + object_class->destroy = weekday_picker_destroy; + + widget_class = GTK_WIDGET_CLASS (class); + widget_class->realize = weekday_picker_realize; + widget_class->size_request = weekday_picker_size_request; + widget_class->size_allocate = weekday_picker_size_allocate; + widget_class->style_set = weekday_picker_style_set; + widget_class->focus = weekday_picker_focus; + + class->changed = NULL; + + wp_signals[CHANGED] = g_signal_new ( + "changed", + G_TYPE_FROM_CLASS (object_class), + G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET (WeekdayPickerClass, changed), + NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0); +} + +static void +day_clicked (WeekdayPicker *wp, gint index) +{ + WeekdayPickerPrivate *priv = wp->priv; + guint8 day_mask; + + if (priv->blocked_day_mask & (0x1 << index)) + return; + + if (priv->day_mask & (0x1 << index)) + day_mask = priv->day_mask & ~(0x1 << index); + else + day_mask = priv->day_mask | (0x1 << index); + + weekday_picker_set_days (wp, day_mask); +} + +static gint +handle_key_press_event (WeekdayPicker *wp, GdkEvent *event) +{ + WeekdayPickerPrivate *priv = wp->priv; + guint keyval = event->key.keyval; + + if (priv->focus_day == -1) + priv->focus_day = priv->week_start_day; + + switch (keyval) { + case GDK_Up: + case GDK_Right: + priv->focus_day += 1; + break; + case GDK_Down: + case GDK_Left: + priv->focus_day -= 1; + break; + case GDK_space: + case GDK_Return: + day_clicked (wp, priv->focus_day); + return TRUE; + default: + return FALSE; + } + + if (priv->focus_day > 6) + priv->focus_day = 0; + if (priv->focus_day < 0) + priv->focus_day = 6; + + colorize_items (wp); + gnome_canvas_item_grab_focus (priv->boxes[priv->focus_day]); + return TRUE; +} + +/* Event handler for the day items */ +static gint +day_event_cb (GnomeCanvasItem *item, GdkEvent *event, gpointer data) +{ + WeekdayPicker *wp; + WeekdayPickerPrivate *priv; + gint i; + + wp = WEEKDAY_PICKER (data); + priv = wp->priv; + + if (event->type == GDK_KEY_PRESS) + return handle_key_press_event(wp, event); + + if (!(event->type == GDK_BUTTON_PRESS && event->button.button == 1)) + return FALSE; + + /* Find which box was clicked */ + + for (i = 0; i < 7; i++) + if (priv->boxes[i] == item || priv->labels[i] == item) + break; + + g_return_val_if_fail (i != 7, TRUE); + + i += priv->week_start_day; + if (i >= 7) + i -= 7; + + priv->focus_day = i; + gnome_canvas_item_grab_focus (priv->boxes[i]); + day_clicked (wp, i); + return TRUE; +} + +/* Creates the canvas items for the weekday picker. The items are empty until + * they are configured elsewhere. + */ +static void +create_items (WeekdayPicker *wp) +{ + WeekdayPickerPrivate *priv; + GnomeCanvasGroup *parent; + gint i; + + priv = wp->priv; + + parent = gnome_canvas_root (GNOME_CANVAS (wp)); + + for (i = 0; i < 7; i++) { + priv->boxes[i] = gnome_canvas_item_new (parent, + GNOME_TYPE_CANVAS_RECT, + NULL); + g_signal_connect (priv->boxes[i], "event", G_CALLBACK (day_event_cb), wp); + + priv->labels[i] = gnome_canvas_item_new (parent, + GNOME_TYPE_CANVAS_TEXT, + NULL); + g_signal_connect (priv->labels[i], "event", G_CALLBACK (day_event_cb), wp); + } +} + +static void +weekday_picker_init (WeekdayPicker *wp) +{ + WeekdayPickerPrivate *priv; + + priv = g_new0 (WeekdayPickerPrivate, 1); + + wp->priv = priv; + + create_items (wp); + priv->focus_day = -1; +} /** * weekday_picker_new: @@ -614,30 +632,3 @@ weekday_picker_get_week_start_day (WeekdayPicker *wp) return priv->week_start_day; } -/* focus handler for weekday picker */ -static gboolean -weekday_picker_focus (GtkWidget *widget, GtkDirectionType direction) -{ - WeekdayPicker *wp; - WeekdayPickerPrivate *priv; - - g_return_val_if_fail (widget != NULL, FALSE); - g_return_val_if_fail (IS_WEEKDAY_PICKER (widget), FALSE); - wp = WEEKDAY_PICKER (widget); - priv = wp->priv; - - if (!GTK_WIDGET_CAN_FOCUS (widget)) - return FALSE; - - if (GTK_WIDGET_HAS_FOCUS (widget)) { - priv->focus_day = -1; - colorize_items (wp); - return FALSE; - } - - priv->focus_day = priv->week_start_day; - gnome_canvas_item_grab_focus (priv->boxes[priv->focus_day]); - colorize_items (wp); - - return TRUE; -} |