[evolution] I#1387 - Calendar: Cannot select events by mouse



commit 0150d1cfd0dcaea106838ef5ae2cac1970119948
Author: Milan Crha <mcrha redhat com>
Date:   Thu Feb 25 16:57:13 2021 +0100

    I#1387 - Calendar: Cannot select events by mouse
    
    Closes https://gitlab.gnome.org/GNOME/evolution/-/issues/1387

 src/calendar/gui/e-day-view.c  | 24 ++++++++++++++++++++----
 src/calendar/gui/e-week-view.c | 39 +++++++++++++++++++++++++++++----------
 2 files changed, 49 insertions(+), 14 deletions(-)
---
diff --git a/src/calendar/gui/e-day-view.c b/src/calendar/gui/e-day-view.c
index 49cd449647..ed25f45d22 100644
--- a/src/calendar/gui/e-day-view.c
+++ b/src/calendar/gui/e-day-view.c
@@ -500,6 +500,20 @@ enum {
 
 G_DEFINE_TYPE (EDayView, e_day_view, E_TYPE_CALENDAR_VIEW)
 
+static void
+e_day_view_set_popup_event (EDayView *day_view,
+                           gint day,
+                           gint event_num)
+{
+       if (day_view->popup_event_day != day ||
+           day_view->popup_event_num != event_num) {
+               day_view->popup_event_day = day;
+               day_view->popup_event_num = event_num;
+
+               g_signal_emit_by_name (day_view, "selection-changed");
+       }
+}
+
 static void
 day_view_notify_time_divisions_cb (EDayView *day_view)
 {
@@ -3190,8 +3204,7 @@ e_day_view_remove_event_cb (EDayView *day_view,
        }
 
        if (day_view->popup_event_num == event_num && day_view->popup_event_day == day) {
-               day_view->popup_event_num = -1;
-               day_view->popup_event_day = -1;
+               e_day_view_set_popup_event (day_view, -1, -1);
        } else if (day_view->popup_event_num > event_num && day_view->popup_event_day == day) {
                day_view->popup_event_num--;
        }
@@ -4620,6 +4633,8 @@ e_day_view_on_long_event_click (EDayView *day_view,
                return;
        }
 
+       e_day_view_set_popup_event (day_view, E_DAY_VIEW_LONG_EVENT, event_num);
+
        if ((e_cal_util_component_is_instance (event->comp_data->icalcomp) ||
             !e_cal_util_component_has_recurrences (event->comp_data->icalcomp))
            && (pos == E_CALENDAR_VIEW_POS_LEFT_EDGE
@@ -4727,6 +4742,8 @@ e_day_view_on_event_click (EDayView *day_view,
                return;
        }
 
+       e_day_view_set_popup_event (day_view, day, event_num);
+
        if ((e_cal_util_component_is_instance (event->comp_data->icalcomp) ||
             !e_cal_util_component_has_recurrences (event->comp_data->icalcomp))
            && (pos == E_CALENDAR_VIEW_POS_TOP_EDGE
@@ -4844,8 +4861,7 @@ e_day_view_show_popup_menu (EDayView *day_view,
        if (pevent && pevent->canvas_item)
                tooltip_destroy (day_view, pevent->canvas_item);
 
-       day_view->popup_event_day = day;
-       day_view->popup_event_num = event_num;
+       e_day_view_set_popup_event (day_view, day, event_num);
 
        e_calendar_view_popup_event (E_CALENDAR_VIEW (day_view), button_event);
 }
diff --git a/src/calendar/gui/e-week-view.c b/src/calendar/gui/e-week-view.c
index 8aac9753a2..a15116be97 100644
--- a/src/calendar/gui/e-week-view.c
+++ b/src/calendar/gui/e-week-view.c
@@ -208,6 +208,17 @@ enum {
 static gint map_left[] = {0, 1, 2, 0, 1, 2, 2};
 static gint map_right[] = {3, 4, 5, 3, 4, 5, 6};
 
+static void
+e_week_view_set_popup_event (EWeekView *week_view,
+                            gint event_num)
+{
+       if (week_view->popup_event_num != event_num) {
+               week_view->popup_event_num = event_num;
+
+               g_signal_emit_by_name (week_view, "selection-changed");
+       }
+}
+
 static void
 week_view_process_component (EWeekView *week_view,
                              ECalModelComponent *comp_data)
@@ -2754,7 +2765,7 @@ e_week_view_remove_event_cb (EWeekView *week_view,
        }
 
        if (week_view->popup_event_num == event_num)
-               week_view->popup_event_num = -1;
+               e_week_view_set_popup_event (week_view, -1);
 
        if (is_comp_data_valid (event))
                g_object_unref (event->comp_data);
@@ -2946,6 +2957,8 @@ e_week_view_on_button_press (GtkWidget *widget,
                              GdkEvent *button_event,
                              EWeekView *week_view)
 {
+       GnomeCanvasItem *item;
+       gint event_num = -1, span_num = -1;
        guint event_button = 0;
        gdouble event_x_win = 0;
        gdouble event_y_win = 0;
@@ -2965,11 +2978,19 @@ e_week_view_on_button_press (GtkWidget *widget,
                return TRUE;
 
        /* If an event is pressed just return. */
-       if (week_view->pressed_event_num != -1)
+       if (week_view->pressed_event_num != -1) {
+               e_week_view_set_popup_event (week_view, week_view->pressed_event_num);
                return FALSE;
+       }
 
        e_week_view_stop_editing_event (week_view);
 
+       item = gnome_canvas_get_item_at (GNOME_CANVAS (widget), x, y);
+       if (!item || !e_week_view_find_event_from_item (week_view, item, &event_num, &span_num))
+               event_num = -1;
+
+       e_week_view_set_popup_event (week_view, event_num);
+
        if (event_button == 1 && button_event->type == GDK_2BUTTON_PRESS) {
                time_t dtstart, dtend;
 
@@ -3026,9 +3047,6 @@ e_week_view_on_button_press (GtkWidget *widget,
                        gtk_widget_queue_draw (week_view->main_canvas);
                }
        } else if (event_button == 3) {
-               GnomeCanvasItem *item;
-               gint event_num = -1, span_num = -1;
-
                if (!gtk_widget_has_focus (GTK_WIDGET (week_view)))
                        gtk_widget_grab_focus (GTK_WIDGET (week_view));
 
@@ -3041,10 +3059,6 @@ e_week_view_on_button_press (GtkWidget *widget,
                        gtk_widget_queue_draw (week_view->main_canvas);
                }
 
-               item = gnome_canvas_get_item_at (GNOME_CANVAS (widget), x, y);
-               if (!item || !e_week_view_find_event_from_item (week_view, item, &event_num, &span_num))
-                       event_num = -1;
-
                e_week_view_show_popup_menu (week_view, button_event, event_num);
        }
 
@@ -3622,6 +3636,7 @@ tooltip_event_cb (GnomeCanvasItem *item,
                   EWeekView *view)
 {
        gint event_num;
+       guint event_button = 0;
        EWeekViewEvent *pevent;
 
        e_week_view_check_layout (view);
@@ -3671,6 +3686,9 @@ tooltip_event_cb (GnomeCanvasItem *item,
                case GDK_KEY_PRESS:
                case GDK_BUTTON_PRESS:
                        tooltip_destroy (view, item);
+                       if (gdk_event_get_button (event, &event_button) && event_button == 1)
+                               e_week_view_set_popup_event (view, event_num);
+
                        return FALSE;
                default:
                        return FALSE;
@@ -4293,6 +4311,7 @@ e_week_view_on_text_item_event (GnomeCanvasItem *item,
                if (event_button != 3) {
                        week_view->pressed_event_num = event_num;
                        week_view->pressed_span_num = span_num;
+                       e_week_view_set_popup_event (week_view, week_view->pressed_event_num);
                }
 
                /* Only let the EText handle the event while editing. */
@@ -5160,7 +5179,7 @@ e_week_view_show_popup_menu (EWeekView *week_view,
                g_object_set_data (G_OBJECT (week_view), "tooltip-timeout", NULL);
        }
 
-       week_view->popup_event_num = event_num;
+       e_week_view_set_popup_event (week_view, event_num);
 
        e_calendar_view_popup_event (E_CALENDAR_VIEW (week_view), button_event);
 }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]