diff options
Diffstat (limited to 'calendar/gui')
-rw-r--r-- | calendar/gui/e-cal-list-view.c | 7 | ||||
-rw-r--r-- | calendar/gui/e-calendar-view.c | 6 | ||||
-rw-r--r-- | calendar/gui/e-calendar-view.h | 4 | ||||
-rw-r--r-- | calendar/gui/e-day-view.c | 264 | ||||
-rw-r--r-- | calendar/gui/e-week-view-event-item.c | 24 | ||||
-rw-r--r-- | calendar/gui/e-week-view.c | 128 | ||||
-rw-r--r-- | calendar/gui/e-week-view.h | 2 |
7 files changed, 289 insertions, 146 deletions
diff --git a/calendar/gui/e-cal-list-view.c b/calendar/gui/e-cal-list-view.c index 6427002904..55280ce79c 100644 --- a/calendar/gui/e-cal-list-view.c +++ b/calendar/gui/e-cal-list-view.c @@ -68,7 +68,7 @@ static gboolean e_cal_list_view_get_visible_time_range (ECalendarView *cal_view static gboolean e_cal_list_view_popup_menu (GtkWidget *widget); static void e_cal_list_view_show_popup_menu (ECalListView *cal_list_view, gint row, - GdkEventButton *event); + GdkEvent *event); static gboolean e_cal_list_view_on_table_double_click (GtkWidget *table, gint row, gint col, GdkEvent *event, gpointer data); static gboolean e_cal_list_view_on_table_right_click (GtkWidget *table, gint row, gint col, @@ -359,7 +359,7 @@ e_cal_list_view_dispose (GObject *object) static void e_cal_list_view_show_popup_menu (ECalListView *cal_list_view, gint row, - GdkEventButton *event) + GdkEvent *event) { e_calendar_view_popup_event (E_CALENDAR_VIEW (cal_list_view), event); } @@ -398,7 +398,8 @@ e_cal_list_view_on_table_right_click (GtkWidget *table, { ECalListView *cal_list_view = E_CAL_LIST_VIEW (data); - e_cal_list_view_show_popup_menu (cal_list_view, row, (GdkEventButton *) event); + e_cal_list_view_show_popup_menu (cal_list_view, row, event); + return TRUE; } diff --git a/calendar/gui/e-calendar-view.c b/calendar/gui/e-calendar-view.c index 88f8abc86c..bbf890af59 100644 --- a/calendar/gui/e-calendar-view.c +++ b/calendar/gui/e-calendar-view.c @@ -998,12 +998,12 @@ calendar_view_selectable_init (ESelectableInterface *interface) void e_calendar_view_popup_event (ECalendarView *calendar_view, - GdkEventButton *event) + GdkEvent *button_event) { g_return_if_fail (E_IS_CALENDAR_VIEW (calendar_view)); - g_return_if_fail (event != NULL); + g_return_if_fail (button_event != NULL); - g_signal_emit (calendar_view, signals[POPUP_EVENT], 0, event); + g_signal_emit (calendar_view, signals[POPUP_EVENT], 0, button_event); } gboolean diff --git a/calendar/gui/e-calendar-view.h b/calendar/gui/e-calendar-view.h index ab4d4e3778..9ed1173533 100644 --- a/calendar/gui/e-calendar-view.h +++ b/calendar/gui/e-calendar-view.h @@ -133,7 +133,7 @@ struct _ECalendarViewClass { /* Notification signals */ void (*popup_event) (ECalendarView *cal_view, - GdkEventButton *event); + GdkEvent *button_event); void (*selection_changed) (ECalendarView *cal_view); void (*selected_time_changed)(ECalendarView *cal_view); void (*timezone_changed) (ECalendarView *cal_view, @@ -217,7 +217,7 @@ CompEditor * e_calendar_view_open_event_with_flags guint32 flags); void e_calendar_view_popup_event (ECalendarView *cal_view, - GdkEventButton *event); + GdkEvent *button_event); gboolean e_calendar_view_add_event (ECalendarView *cal_view, ECalClient *client, diff --git a/calendar/gui/e-day-view.c b/calendar/gui/e-day-view.c index 59d558078d..5c3b4f2202 100644 --- a/calendar/gui/e-day-view.c +++ b/calendar/gui/e-day-view.c @@ -175,20 +175,20 @@ static void e_day_view_on_canvas_realized (GtkWidget *widget, EDayView *day_view); static gboolean e_day_view_on_top_canvas_button_press (GtkWidget *widget, - GdkEventButton *event, + GdkEvent *button_event, EDayView *day_view); static gboolean e_day_view_on_top_canvas_button_release (GtkWidget *widget, - GdkEventButton *event, + GdkEvent *button_event, EDayView *day_view); static gboolean e_day_view_on_top_canvas_motion (GtkWidget *widget, GdkEventMotion *event, EDayView *day_view); static gboolean e_day_view_on_main_canvas_button_press (GtkWidget *widget, - GdkEventButton *event, + GdkEvent *button_event, EDayView *day_view); static gboolean e_day_view_on_main_canvas_button_release (GtkWidget *widget, - GdkEventButton *event, + GdkEvent *button_event, EDayView *day_view); static gboolean e_day_view_on_top_canvas_scroll (GtkWidget *widget, @@ -219,27 +219,27 @@ static void e_day_view_abort_resize (EDayView *day_view); static gboolean e_day_view_on_long_event_button_press (EDayView *day_view, gint event_num, - GdkEventButton *event, + GdkEvent *button_event, ECalendarViewPosition pos, gint event_x, gint event_y); static gboolean e_day_view_on_event_button_press (EDayView *day_view, gint day, gint event_num, - GdkEventButton *event, + GdkEvent *button_event, ECalendarViewPosition pos, gint event_x, gint event_y); static void e_day_view_on_long_event_click (EDayView *day_view, gint event_num, - GdkEventButton *bevent, + GdkEvent *button_event, ECalendarViewPosition pos, gint event_x, gint event_y); static void e_day_view_on_event_click (EDayView *day_view, gint day, gint event_num, - GdkEventButton *event, + GdkEvent *button_event, ECalendarViewPosition pos, gint event_x, gint event_y); @@ -247,11 +247,11 @@ static void e_day_view_on_event_double_click (EDayView *day_view, gint day, gint event_num); static void e_day_view_on_event_right_click (EDayView *day_view, - GdkEventButton *bevent, + GdkEvent *button_event, gint day, gint event_num); static void e_day_view_show_popup_menu (EDayView *day_view, - GdkEventButton *event, + GdkEvent *button_event, gint day, gint event_num); @@ -3098,17 +3098,24 @@ e_day_view_convert_time_to_position (EDayView *day_view, static gboolean e_day_view_on_top_canvas_button_press (GtkWidget *widget, - GdkEventButton *event, + GdkEvent *button_event, EDayView *day_view) { gint event_x, event_y, day, event_num; ECalendarViewPosition pos; GtkLayout *layout; GdkWindow *window; + GdkDevice *event_device; + guint event_button = 0; + guint32 event_time; layout = GTK_LAYOUT (widget); window = gtk_layout_get_bin_window (layout); + gdk_event_get_button (button_event, &event_button); + event_device = gdk_event_get_device (button_event); + event_time = gdk_event_get_time (button_event); + if (day_view->resize_event_num != -1) day_view->resize_event_num = -1; @@ -3118,7 +3125,7 @@ e_day_view_on_top_canvas_button_press (GtkWidget *widget, /* Convert the coords to the main canvas window, or return if the * window is not found. */ if (!e_day_view_convert_event_coords ( - day_view, (GdkEvent *) event, window, &event_x, &event_y)) + day_view, button_event, window, &event_x, &event_y)) return FALSE; pos = e_day_view_convert_position_in_top_canvas ( @@ -3133,14 +3140,17 @@ e_day_view_on_top_canvas_button_press (GtkWidget *widget, return e_day_view_on_long_event_button_press ( day_view, event_num, - event, pos, + button_event, + pos, event_x, event_y); e_day_view_stop_editing_event (day_view); - if (event->button == 1) { - if (event->type == GDK_2BUTTON_PRESS) { + if (event_button == 1) { + GdkGrabStatus grab_status; + + if (button_event->type == GDK_2BUTTON_PRESS) { time_t dtstart, dtend; e_day_view_get_selected_time_range ((ECalendarView *) day_view, &dtstart, &dtend); @@ -3150,25 +3160,36 @@ e_day_view_on_top_canvas_button_press (GtkWidget *widget, e_day_view_set_selected_time_range ((ECalendarView *) day_view, dtstart, dtend); } - e_calendar_view_new_appointment_for (E_CALENDAR_VIEW (day_view), - dtstart, dtend, - TRUE, calendar_config_get_prefer_meeting ()); + e_calendar_view_new_appointment_for ( + E_CALENDAR_VIEW (day_view), + dtstart, dtend, TRUE, + calendar_config_get_prefer_meeting ()); return TRUE; } if (!gtk_widget_has_focus (GTK_WIDGET (day_view))) gtk_widget_grab_focus (GTK_WIDGET (day_view)); - if (gdk_pointer_grab (window, FALSE, - GDK_POINTER_MOTION_MASK - | GDK_BUTTON_RELEASE_MASK, - NULL, NULL, event->time) == 0) { - if (event->time - day_view->bc_event_time > 250) - e_day_view_get_selected_time_range ((ECalendarView *) day_view, &day_view->before_click_dtstart, &day_view->before_click_dtend); - day_view->bc_event_time = event->time; + grab_status = gdk_device_grab ( + event_device, + window, + GDK_OWNERSHIP_NONE, + FALSE, + GDK_POINTER_MOTION_MASK | + GDK_BUTTON_RELEASE_MASK, + NULL, + event_time); + + if (grab_status == GDK_GRAB_SUCCESS) { + if (event_time - day_view->bc_event_time > 250) + e_day_view_get_selected_time_range ( + E_CALENDAR_VIEW (day_view), + &day_view->before_click_dtstart, + &day_view->before_click_dtend); + day_view->bc_event_time = event_time; e_day_view_start_selection (day_view, day, -1); } - } else if (event->button == 3) { + } else if (event_button == 3) { if (!gtk_widget_has_focus (GTK_WIDGET (day_view))) gtk_widget_grab_focus (GTK_WIDGET (day_view)); @@ -3177,7 +3198,7 @@ e_day_view_on_top_canvas_button_press (GtkWidget *widget, e_day_view_finish_selection (day_view); } - e_day_view_on_event_right_click (day_view, event, -1, -1); + e_day_view_on_event_right_click (day_view, button_event, -1, -1); } return TRUE; @@ -3235,17 +3256,24 @@ e_day_view_convert_event_coords (EDayView *day_view, static gboolean e_day_view_on_main_canvas_button_press (GtkWidget *widget, - GdkEventButton *event, + GdkEvent *button_event, EDayView *day_view) { gint event_x, event_y, row, day, event_num; ECalendarViewPosition pos; GtkLayout *layout; GdkWindow *window; + GdkDevice *event_device; + guint event_button = 0; + guint32 event_time; layout = GTK_LAYOUT (widget); window = gtk_layout_get_bin_window (layout); + gdk_event_get_button (button_event, &event_button); + event_device = gdk_event_get_device (button_event); + event_time = gdk_event_get_time (button_event); + if (day_view->resize_event_num != -1) day_view->resize_event_num = -1; @@ -3255,7 +3283,7 @@ e_day_view_on_main_canvas_button_press (GtkWidget *widget, /* Convert the coords to the main canvas window, or return if the * window is not found. */ if (!e_day_view_convert_event_coords ( - day_view, (GdkEvent *) event, window, &event_x, &event_y)) + day_view, button_event, window, &event_x, &event_y)) return FALSE; /* Find out where the mouse is. */ @@ -3270,15 +3298,21 @@ e_day_view_on_main_canvas_button_press (GtkWidget *widget, if (pos != E_CALENDAR_VIEW_POS_NONE) return e_day_view_on_event_button_press ( - day_view, day, - event_num, event, pos, - event_x, event_y); + day_view, + day, + event_num, + button_event, + pos, + event_x, + event_y); e_day_view_stop_editing_event (day_view); /* Start the selection drag. */ - if (event->button == 1) { - if (event->type == GDK_2BUTTON_PRESS) { + if (event_button == 1) { + GdkGrabStatus grab_status; + + if (button_event->type == GDK_2BUTTON_PRESS) { time_t dtstart, dtend; e_day_view_get_selected_time_range ((ECalendarView *) day_view, &dtstart, &dtend); @@ -3287,26 +3321,37 @@ e_day_view_on_main_canvas_button_press (GtkWidget *widget, dtend = day_view->before_click_dtend; e_day_view_set_selected_time_range ((ECalendarView *) day_view, dtstart, dtend); } - e_calendar_view_new_appointment_for (E_CALENDAR_VIEW (day_view), - dtstart, dtend, - FALSE, calendar_config_get_prefer_meeting ()); + e_calendar_view_new_appointment_for ( + E_CALENDAR_VIEW (day_view), + dtstart, dtend, FALSE, + calendar_config_get_prefer_meeting ()); return TRUE; } if (!gtk_widget_has_focus (GTK_WIDGET (day_view)) && !gtk_widget_has_focus (GTK_WIDGET (day_view->main_canvas))) gtk_widget_grab_focus (GTK_WIDGET (day_view)); - if (gdk_pointer_grab (window, FALSE, - GDK_POINTER_MOTION_MASK - | GDK_BUTTON_RELEASE_MASK, - NULL, NULL, event->time) == 0) { - if (event->time - day_view->bc_event_time > 250) - e_day_view_get_selected_time_range ((ECalendarView *) day_view, &day_view->before_click_dtstart, &day_view->before_click_dtend); - day_view->bc_event_time = event->time; + grab_status = gdk_device_grab ( + event_device, + window, + GDK_OWNERSHIP_NONE, + FALSE, + GDK_POINTER_MOTION_MASK | + GDK_BUTTON_RELEASE_MASK, + NULL, + event_time); + + if (grab_status == GDK_GRAB_SUCCESS) { + if (event_time - day_view->bc_event_time > 250) + e_day_view_get_selected_time_range ( + E_CALENDAR_VIEW (day_view), + &day_view->before_click_dtstart, + &day_view->before_click_dtend); + day_view->bc_event_time = event_time; e_day_view_start_selection (day_view, day, row); g_signal_emit_by_name (day_view, "selected_time_changed"); } - } else if (event->button == 3) { + } else if (event_button == 3) { if (!gtk_widget_has_focus (GTK_WIDGET (day_view))) gtk_widget_grab_focus (GTK_WIDGET (day_view)); @@ -3317,7 +3362,7 @@ e_day_view_on_main_canvas_button_press (GtkWidget *widget, e_day_view_finish_selection (day_view); } - e_day_view_on_event_right_click (day_view, event, -1, -1); + e_day_view_on_event_right_click (day_view, button_event, -1, -1); } return TRUE; @@ -3414,26 +3459,30 @@ e_day_view_on_time_canvas_scroll (GtkWidget *widget, static gboolean e_day_view_on_long_event_button_press (EDayView *day_view, gint event_num, - GdkEventButton *event, + GdkEvent *button_event, ECalendarViewPosition pos, gint event_x, gint event_y) { - if (event->button == 1) { - if (event->type == GDK_BUTTON_PRESS) { + guint event_button = 0; + + gdk_event_get_button (button_event, &event_button); + + if (event_button == 1) { + if (button_event->type == GDK_BUTTON_PRESS) { e_day_view_on_long_event_click ( day_view, event_num, - event, pos, + button_event, pos, event_x, event_y); return TRUE; - } else if (event->type == GDK_2BUTTON_PRESS) { + } else if (button_event->type == GDK_2BUTTON_PRESS) { e_day_view_on_event_double_click ( day_view, -1, event_num); g_signal_stop_emission_by_name (day_view->top_canvas, "button_press_event"); return TRUE; } - } else if (event->button == 3) { + } else if (event_button == 3) { EDayViewEvent *e; if (!is_array_index_in_bounds (day_view->long_events, event_num)) @@ -3444,7 +3493,7 @@ e_day_view_on_long_event_button_press (EDayView *day_view, e_day_view_set_selected_time_range_in_top_visible (day_view, e->start, e->end); e_day_view_on_event_right_click ( - day_view, event, + day_view, button_event, E_DAY_VIEW_LONG_EVENT, event_num); @@ -3457,19 +3506,23 @@ static gboolean e_day_view_on_event_button_press (EDayView *day_view, gint day, gint event_num, - GdkEventButton *event, + GdkEvent *button_event, ECalendarViewPosition pos, gint event_x, gint event_y) { - if (event->button == 1) { - if (event->type == GDK_BUTTON_PRESS) { + guint event_button = 0; + + gdk_event_get_button (button_event, &event_button); + + if (event_button == 1) { + if (button_event->type == GDK_BUTTON_PRESS) { e_day_view_on_event_click ( day_view, day, event_num, - event, pos, + button_event, pos, event_x, event_y); return TRUE; - } else if (event->type == GDK_2BUTTON_PRESS) { + } else if (button_event->type == GDK_2BUTTON_PRESS) { e_day_view_on_event_double_click ( day_view, day, event_num); @@ -3477,7 +3530,7 @@ e_day_view_on_event_button_press (EDayView *day_view, g_signal_stop_emission_by_name (day_view->main_canvas, "button_press_event"); return TRUE; } - } else if (event->button == 3) { + } else if (event_button == 3) { EDayViewEvent *e; if (!is_array_index_in_bounds (day_view->events[day], event_num)) @@ -3488,8 +3541,7 @@ e_day_view_on_event_button_press (EDayView *day_view, e_day_view_set_selected_time_range_visible (day_view, e->start, e->end); e_day_view_on_event_right_click ( - day_view, event, - day, event_num); + day_view, button_event, day, event_num); return TRUE; } @@ -3499,7 +3551,7 @@ e_day_view_on_event_button_press (EDayView *day_view, static void e_day_view_on_long_event_click (EDayView *day_view, gint event_num, - GdkEventButton *bevent, + GdkEvent *button_event, ECalendarViewPosition pos, gint event_x, gint event_y) @@ -3522,7 +3574,8 @@ e_day_view_on_long_event_click (EDayView *day_view, /* Ignore clicks on the EText while editing. */ if (pos == E_CALENDAR_VIEW_POS_EVENT && E_TEXT (event->canvas_item)->editing) { - GNOME_CANVAS_ITEM_GET_CLASS (event->canvas_item)->event (event->canvas_item, (GdkEvent *) bevent); + GNOME_CANVAS_ITEM_GET_CLASS (event->canvas_item)->event ( + event->canvas_item, button_event); return; } @@ -3530,6 +3583,10 @@ e_day_view_on_long_event_click (EDayView *day_view, !e_cal_util_component_has_recurrences (event->comp_data->icalcomp)) && (pos == E_CALENDAR_VIEW_POS_LEFT_EDGE || pos == E_CALENDAR_VIEW_POS_RIGHT_EDGE)) { + GdkGrabStatus grab_status; + GdkDevice *event_device; + guint32 event_time; + if (!e_day_view_find_long_event_days (event, day_view->days_shown, day_view->day_starts, @@ -3544,11 +3601,20 @@ e_day_view_on_long_event_click (EDayView *day_view, layout = GTK_LAYOUT (day_view->top_canvas); window = gtk_layout_get_bin_window (layout); - if (gdk_pointer_grab (window, FALSE, - GDK_POINTER_MOTION_MASK - | GDK_BUTTON_RELEASE_MASK, - NULL, NULL, bevent->time) == 0) { + event_device = gdk_event_get_device (button_event); + event_time = gdk_event_get_time (button_event); + + grab_status = gdk_device_grab ( + event_device, + window, + GDK_OWNERSHIP_NONE, + FALSE, + GDK_POINTER_MOTION_MASK | + GDK_BUTTON_RELEASE_MASK, + NULL, + event_time); + if (grab_status == GDK_GRAB_SUCCESS) { day_view->resize_event_day = E_DAY_VIEW_LONG_EVENT; day_view->resize_event_num = event_num; day_view->resize_drag_pos = pos; @@ -3582,7 +3648,7 @@ static void e_day_view_on_event_click (EDayView *day_view, gint day, gint event_num, - GdkEventButton *bevent, + GdkEvent *button_event, ECalendarViewPosition pos, gint event_x, gint event_y) @@ -3609,7 +3675,8 @@ e_day_view_on_event_click (EDayView *day_view, /* Ignore clicks on the EText while editing. */ if (pos == E_CALENDAR_VIEW_POS_EVENT && E_TEXT (event->canvas_item)->editing) { - GNOME_CANVAS_ITEM_GET_CLASS (event->canvas_item)->event (event->canvas_item, (GdkEvent *) bevent); + GNOME_CANVAS_ITEM_GET_CLASS (event->canvas_item)->event ( + event->canvas_item, button_event); return; } @@ -3617,6 +3684,10 @@ e_day_view_on_event_click (EDayView *day_view, !e_cal_util_component_has_recurrences (event->comp_data->icalcomp)) && (pos == E_CALENDAR_VIEW_POS_TOP_EDGE || pos == E_CALENDAR_VIEW_POS_BOTTOM_EDGE)) { + GdkGrabStatus grab_status; + GdkDevice *event_device; + guint32 event_time; + if (event && (!event->is_editable || e_client_is_readonly (E_CLIENT (event->comp_data->client)))) { return; } @@ -3629,11 +3700,20 @@ e_day_view_on_event_click (EDayView *day_view, layout = GTK_LAYOUT (day_view->main_canvas); window = gtk_layout_get_bin_window (layout); - if (gdk_pointer_grab (window, FALSE, - GDK_POINTER_MOTION_MASK - | GDK_BUTTON_RELEASE_MASK, - NULL, NULL, bevent->time) == 0) { + event_device = gdk_event_get_device (button_event); + event_time = gdk_event_get_time (button_event); + + grab_status = gdk_device_grab ( + event_device, + window, + GDK_OWNERSHIP_NONE, + FALSE, + GDK_POINTER_MOTION_MASK | + GDK_BUTTON_RELEASE_MASK, + NULL, + event_time); + if (grab_status != GDK_GRAB_SUCCESS) { day_view->resize_event_day = day; day_view->resize_event_num = event_num; day_view->resize_drag_pos = pos; @@ -3699,7 +3779,7 @@ e_day_view_on_event_double_click (EDayView *day_view, static void e_day_view_show_popup_menu (EDayView *day_view, - GdkEventButton *event, + GdkEvent *button_event, gint day, gint event_num) { @@ -3708,7 +3788,7 @@ e_day_view_show_popup_menu (EDayView *day_view, day_view->popup_event_day = day; day_view->popup_event_num = event_num; - e_calendar_view_popup_event (E_CALENDAR_VIEW (day_view), event); + e_calendar_view_popup_event (E_CALENDAR_VIEW (day_view), button_event); } static gboolean @@ -3806,23 +3886,29 @@ e_day_view_update_query (EDayView *day_view) static void e_day_view_on_event_right_click (EDayView *day_view, - GdkEventButton *bevent, + GdkEvent *button_event, gint day, gint event_num) { - e_day_view_show_popup_menu (day_view, bevent, day, event_num); + e_day_view_show_popup_menu (day_view, button_event, day, event_num); } static gboolean e_day_view_on_top_canvas_button_release (GtkWidget *widget, - GdkEventButton *event, + GdkEvent *button_event, EDayView *day_view) { + GdkDevice *event_device; + guint32 event_time; + + event_device = gdk_event_get_device (button_event); + event_time = gdk_event_get_time (button_event); + if (day_view->selection_is_being_dragged) { - gdk_pointer_ungrab (event->time); + gdk_device_ungrab (event_device, event_time); e_day_view_finish_selection (day_view); } else if (day_view->resize_drag_pos != E_CALENDAR_VIEW_POS_NONE) { - gdk_pointer_ungrab (event->time); + gdk_device_ungrab (event_device, event_time); e_day_view_finish_long_event_resize (day_view); } else if (day_view->pressed_event_day != -1) { e_day_view_start_editing_event ( @@ -3839,23 +3925,29 @@ e_day_view_on_top_canvas_button_release (GtkWidget *widget, static gboolean e_day_view_on_main_canvas_button_release (GtkWidget *widget, - GdkEventButton *event, + GdkEvent *button_event, EDayView *day_view) { + GdkDevice *event_device; + guint32 event_time; + + event_device = gdk_event_get_device (button_event); + event_time = gdk_event_get_time (button_event); + if (day_view->selection_is_being_dragged) { - gdk_pointer_ungrab (event->time); + gdk_device_ungrab (event_device, event_time); e_day_view_finish_selection (day_view); e_day_view_stop_auto_scroll (day_view); } else if (day_view->resize_drag_pos != E_CALENDAR_VIEW_POS_NONE) { - gdk_pointer_ungrab (event->time); + gdk_device_ungrab (event_device, event_time); e_day_view_finish_resize (day_view); e_day_view_stop_auto_scroll (day_view); } else if (day_view->pressed_event_day != -1) { e_day_view_start_editing_event ( day_view, - day_view->pressed_event_day, - day_view->pressed_event_num, - NULL); + day_view->pressed_event_day, + day_view->pressed_event_num, + NULL); } day_view->pressed_event_day = -1; diff --git a/calendar/gui/e-week-view-event-item.c b/calendar/gui/e-week-view-event-item.c index 6cd4a9048a..f517159e1b 100644 --- a/calendar/gui/e-week-view-event-item.c +++ b/calendar/gui/e-week-view-event-item.c @@ -120,7 +120,7 @@ week_view_event_item_get_position (EWeekViewEventItem *event_item, static gboolean week_view_event_item_double_click (EWeekViewEventItem *event_item, - GdkEvent *bevent) + GdkEvent *button_event) { EWeekView *week_view; EWeekViewEvent *event; @@ -179,7 +179,7 @@ week_view_event_item_double_click (EWeekViewEventItem *event_item, static gboolean week_view_event_item_button_press (EWeekViewEventItem *event_item, - GdkEvent *bevent) + GdkEvent *button_event) { EWeekView *week_view; ECalendarViewPosition pos; @@ -187,6 +187,12 @@ week_view_event_item_button_press (EWeekViewEventItem *event_item, EWeekViewEventSpan *span; GnomeCanvasItem *item; GtkWidget *parent; + guint event_button = 0; + gdouble event_x_win = 0; + gdouble event_y_win = 0; + + gdk_event_get_button (button_event, &event_button); + gdk_event_get_coords (button_event, &event_x_win, &event_y_win); item = GNOME_CANVAS_ITEM (event_item); @@ -211,12 +217,11 @@ week_view_event_item_button_press (EWeekViewEventItem *event_item, event->spans_index + event_item->priv->span_num); pos = week_view_event_item_get_position ( - event_item, bevent->button.x, - bevent->button.y); + event_item, event_x_win, event_y_win); if (pos == E_CALENDAR_VIEW_POS_NONE) return FALSE; - if (bevent->button.button == 1) { + if (event_button == 1) { week_view->pressed_event_num = event_item->priv->event_num; week_view->pressed_span_num = event_item->priv->span_num; @@ -226,14 +231,15 @@ week_view_event_item_button_press (EWeekViewEventItem *event_item, /* Remember the item clicked and the mouse position, * so we can start a drag if the mouse moves. */ - week_view->drag_event_x = bevent->button.x; - week_view->drag_event_y = bevent->button.y; + week_view->drag_event_x = event_x_win; + week_view->drag_event_y = event_y_win; /* FIXME: Remember the day offset from the start of the event. */ return TRUE; - } else if (bevent->button.button == 3) { + + } else if (event_button == 3) { if (!gtk_widget_has_focus (GTK_WIDGET (week_view))) { gtk_widget_grab_focus (GTK_WIDGET (week_view)); if (week_view->event_destroyed) { @@ -247,7 +253,7 @@ week_view_event_item_button_press (EWeekViewEventItem *event_item, week_view, event->start, event->end); e_week_view_show_popup_menu ( - week_view, (GdkEventButton *) bevent, + week_view, button_event, event_item->priv->event_num); g_signal_stop_emission_by_name ( item->canvas, "button_press_event"); diff --git a/calendar/gui/e-week-view.c b/calendar/gui/e-week-view.c index 574b79efab..83c41499cf 100644 --- a/calendar/gui/e-week-view.c +++ b/calendar/gui/e-week-view.c @@ -112,10 +112,10 @@ static void e_week_view_paste_text (ECalendarView *week_view); static void e_week_view_update_query (EWeekView *week_view); static gboolean e_week_view_on_button_press (GtkWidget *widget, - GdkEventButton *event, + GdkEvent *button_event, EWeekView *week_view); static gboolean e_week_view_on_button_release (GtkWidget *widget, - GdkEventButton *event, + GdkEvent *button_event, EWeekView *week_view); static gboolean e_week_view_on_scroll (GtkWidget *widget, GdkEventScroll *scroll, @@ -2416,26 +2416,32 @@ ewv_pass_gdkevent_to_etext (EWeekView *week_view, static gboolean e_week_view_on_button_press (GtkWidget *widget, - GdkEventButton *event, + GdkEvent *button_event, EWeekView *week_view) { + guint event_button = 0; + gdouble event_x_win = 0; + gdouble event_y_win = 0; gint x, y, day; + gdk_event_get_button (button_event, &event_button); + gdk_event_get_coords (button_event, &event_x_win, &event_y_win); + /* Convert the mouse position to a week & day. */ - x = event->x; - y = event->y; + x = (gint) event_x_win; + y = (gint) event_y_win; day = e_week_view_convert_position_to_day (week_view, x, y); if (day == -1) return FALSE; - if (ewv_pass_gdkevent_to_etext (week_view, (GdkEvent *) event)) + if (ewv_pass_gdkevent_to_etext (week_view, button_event)) return TRUE; /* If an event is pressed just return. */ if (week_view->pressed_event_num != -1) return FALSE; - if (event->button == 1 && event->type == GDK_2BUTTON_PRESS) { + if (event_button == 1 && button_event->type == GDK_2BUTTON_PRESS) { time_t dtstart, dtend; e_calendar_view_get_selected_time_range ((ECalendarView *) week_view, &dtstart, &dtend); @@ -2446,8 +2452,11 @@ e_week_view_on_button_press (GtkWidget *widget, return TRUE; } - if (event->button == 1) { + if (event_button == 1) { + GdkGrabStatus grab_status; GdkWindow *window; + GdkDevice *event_device; + guint32 event_time; /* Start the selection drag. */ if (!gtk_widget_has_focus (GTK_WIDGET (week_view)) && !gtk_widget_has_focus (GTK_WIDGET (week_view->main_canvas))) @@ -2455,13 +2464,26 @@ e_week_view_on_button_press (GtkWidget *widget, window = gtk_layout_get_bin_window (GTK_LAYOUT (widget)); - if (gdk_pointer_grab (window, FALSE, - GDK_POINTER_MOTION_MASK - | GDK_BUTTON_RELEASE_MASK, - NULL, NULL, event->time) == 0) { - if (event->time - week_view->bc_event_time > 250) - e_calendar_view_get_selected_time_range ((ECalendarView *) week_view, &week_view->before_click_dtstart, &week_view->before_click_dtend); - week_view->bc_event_time = event->time; + event_device = gdk_event_get_device (button_event); + event_time = gdk_event_get_time (button_event); + + grab_status = gdk_device_grab ( + event_device, + window, + GDK_OWNERSHIP_NONE, + FALSE, + GDK_POINTER_MOTION_MASK | + GDK_BUTTON_RELEASE_MASK, + NULL, + event_time); + + if (grab_status == GDK_GRAB_SUCCESS) { + if (event_time - week_view->bc_event_time > 250) + e_calendar_view_get_selected_time_range ( + E_CALENDAR_VIEW (week_view), + &week_view->before_click_dtstart, + &week_view->before_click_dtend); + week_view->bc_event_time = event_time; week_view->selection_start_day = day; week_view->selection_end_day = day; week_view->selection_drag_pos = E_WEEK_VIEW_DRAG_END; @@ -2470,7 +2492,7 @@ e_week_view_on_button_press (GtkWidget *widget, /* FIXME: Optimise? */ gtk_widget_queue_draw (week_view->main_canvas); } - } else if (event->button == 3) { + } else if (event_button == 3) { if (!gtk_widget_has_focus (GTK_WIDGET (week_view))) gtk_widget_grab_focus (GTK_WIDGET (week_view)); @@ -2483,7 +2505,7 @@ e_week_view_on_button_press (GtkWidget *widget, gtk_widget_queue_draw (week_view->main_canvas); } - e_week_view_show_popup_menu (week_view, event, -1); + e_week_view_show_popup_menu (week_view, button_event, -1); } return TRUE; @@ -2491,14 +2513,20 @@ e_week_view_on_button_press (GtkWidget *widget, static gboolean e_week_view_on_button_release (GtkWidget *widget, - GdkEventButton *event, + GdkEvent *button_event, EWeekView *week_view) { + GdkDevice *event_device; + guint32 event_time; + + event_device = gdk_event_get_device (button_event); + event_time = gdk_event_get_time (button_event); + if (week_view->selection_drag_pos != E_WEEK_VIEW_DRAG_NONE) { week_view->selection_drag_pos = E_WEEK_VIEW_DRAG_NONE; - gdk_pointer_ungrab (event->time); + gdk_device_ungrab (event_device, event_time); } else { - ewv_pass_gdkevent_to_etext (week_view, (GdkEvent *) event); + ewv_pass_gdkevent_to_etext (week_view, button_event); } return FALSE; @@ -3530,20 +3558,26 @@ cancel_editing (EWeekView *week_view) static gboolean e_week_view_on_text_item_event (GnomeCanvasItem *item, - GdkEvent *gdkevent, + GdkEvent *gdk_event, EWeekView *week_view) { EWeekViewEvent *event; gint event_num, span_num; gint nevent = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (item), "event-num")); EWeekViewEvent *pevent; + guint event_button = 0; + guint event_keyval = 0; + gdouble event_x_root = 0; + gdouble event_y_root = 0; pevent = tooltip_get_view_event (week_view, -1, nevent); - switch (gdkevent->type) { + switch (gdk_event->type) { case GDK_KEY_PRESS: tooltip_destroy (week_view, item); - if (!E_TEXT (item)->preedit_len && gdkevent && gdkevent->key.keyval == GDK_KEY_Return) { + gdk_event_get_keyval (gdk_event, &event_keyval); + + if (!E_TEXT (item)->preedit_len && event_keyval == GDK_KEY_Return) { /* We set the keyboard focus to the EDayView, so the * EText item loses it and stops the edit. */ gtk_widget_grab_focus (GTK_WIDGET (week_view)); @@ -3552,7 +3586,7 @@ e_week_view_on_text_item_event (GnomeCanvasItem *item, * other events getting to the EText item. */ g_signal_stop_emission_by_name (item, "event"); return TRUE; - } else if (gdkevent->key.keyval == GDK_KEY_Escape) { + } else if (event_keyval == GDK_KEY_Escape) { cancel_editing (week_view); g_signal_stop_emission_by_name (item, "event"); /* focus should go to week view when stop editing */ @@ -3592,7 +3626,8 @@ e_week_view_on_text_item_event (GnomeCanvasItem *item, &event_num, &span_num)) return FALSE; - if (gdkevent->button.button == 3) { + gdk_event_get_button (gdk_event, &event_button); + if (event_button == 3) { EWeekViewEvent *e; if (E_TEXT (item)->editing) { @@ -3612,29 +3647,30 @@ e_week_view_on_text_item_event (GnomeCanvasItem *item, e_week_view_set_selected_time_range_visible (week_view, e->start, e->end); e_week_view_show_popup_menu ( - week_view, - (GdkEventButton *) gdkevent, - event_num); + week_view, gdk_event, event_num); g_signal_stop_emission_by_name ( item->canvas, "button_press_event"); return TRUE; } - if (gdkevent->button.button != 3) { + if (event_button != 3) { week_view->pressed_event_num = event_num; week_view->pressed_span_num = span_num; } /* Only let the EText handle the event while editing. */ if (!E_TEXT (item)->editing) { + gdouble event_x_win = 0; + gdouble event_y_win = 0; + g_signal_stop_emission_by_name (item, "event"); - if (gdkevent) { - week_view->drag_event_x = gdkevent->button.x; - week_view->drag_event_y = gdkevent->button.y; - } else - g_warning ("No GdkEvent"); + gdk_event_get_coords ( + gdk_event, &event_x_win, &event_y_win); + + week_view->drag_event_x = (gint) event_x_win; + week_view->drag_event_y = (gint) event_y_win; /* FIXME: Remember the day offset from the start of * the event, for DnD. */ @@ -3684,8 +3720,11 @@ e_week_view_on_text_item_event (GnomeCanvasItem *item, data = g_malloc (sizeof (ECalendarViewEventData)); - pevent->x = ((GdkEventCrossing *) gdkevent)->x_root; - pevent->y = ((GdkEventCrossing *) gdkevent)->y_root; + gdk_event_get_root_coords ( + gdk_event, &event_x_root, &event_y_root); + + pevent->x = (gint) event_x_root; + pevent->y = (gint) event_y_root; pevent->tooltip = NULL; data->cal_view = (ECalendarView *) week_view; @@ -3705,8 +3744,11 @@ e_week_view_on_text_item_event (GnomeCanvasItem *item, return FALSE; case GDK_MOTION_NOTIFY: - pevent->x = ((GdkEventMotion *) gdkevent)->x_root; - pevent->y = ((GdkEventMotion *) gdkevent)->y_root; + gdk_event_get_root_coords ( + gdk_event, &event_x_root, &event_y_root); + + pevent->x = (gint) event_x_root; + pevent->y = (gint) event_y_root; pevent->tooltip = (GtkWidget *) g_object_get_data (G_OBJECT (week_view), "tooltip-window"); if (pevent->tooltip) { @@ -3714,7 +3756,7 @@ e_week_view_on_text_item_event (GnomeCanvasItem *item, } return TRUE; case GDK_FOCUS_CHANGE: - if (gdkevent->focus_change.in) { + if (gdk_event->focus_change.in) { e_week_view_on_editing_started (week_view, item); } else { e_week_view_on_editing_stopped (week_view, item); @@ -3728,7 +3770,9 @@ e_week_view_on_text_item_event (GnomeCanvasItem *item, return FALSE; } -static gboolean e_week_view_event_move (ECalendarView *cal_view, ECalViewMoveDirection direction) +static gboolean +e_week_view_event_move (ECalendarView *cal_view, + ECalViewMoveDirection direction) { EWeekViewEvent *event; gint event_num, adjust_days, current_start_day, current_end_day; @@ -4584,12 +4628,12 @@ e_week_view_key_press (GtkWidget *widget, void e_week_view_show_popup_menu (EWeekView *week_view, - GdkEventButton *bevent, + GdkEvent *button_event, gint event_num) { week_view->popup_event_num = event_num; - e_calendar_view_popup_event (E_CALENDAR_VIEW (week_view), bevent); + e_calendar_view_popup_event (E_CALENDAR_VIEW (week_view), button_event); } static gboolean diff --git a/calendar/gui/e-week-view.h b/calendar/gui/e-week-view.h index 5a1f2e6d22..bb84e2b8f6 100644 --- a/calendar/gui/e-week-view.h +++ b/calendar/gui/e-week-view.h @@ -438,7 +438,7 @@ gboolean e_week_view_start_editing_event (EWeekView *week_view, void e_week_view_stop_editing_event (EWeekView *week_view); void e_week_view_show_popup_menu (EWeekView *week_view, - GdkEventButton *event, + GdkEvent *button_event, gint event_num); void e_week_view_convert_time_to_display |