1
From 01d3ae030937b024bba63445cefd5050be4b2c8e Mon Sep 17 00:00:00 2001
2
From: Lars Uebernickel <lars.uebernickel@canonical.com>
3
Date: Thu, 1 Oct 2015 15:35:09 +0200
4
Subject: [PATCH] calendar: always emit "day-selected" once
6
"day-selected" was emitted twice when clicking on a day of the previous
7
or next month. This was because calendar_set_month{next,prev}() always
8
selected the first (or last) day of the newly focussed month. Callers
9
that wanted a different day to be selected had to do so after calling
10
one of those functions.
12
Fix this by passing the desired day into those functions directly.
14
https://bugzilla.gnome.org/show_bug.cgi?id=755941
16
gtk/gtkcalendar.c | 72 +++++++++++++++++++++++++++++++++----------------------
17
1 file changed, 43 insertions(+), 29 deletions(-)
19
diff --git a/gtk/gtkcalendar.c b/gtk/gtkcalendar.c
20
index b4ef543..2d338ef 100644
21
--- a/gtk/gtkcalendar.c
22
+++ b/gtk/gtkcalendar.c
23
@@ -876,11 +876,15 @@ calendar_queue_refresh (GtkCalendar *calendar)
27
-calendar_set_month_next (GtkCalendar *calendar)
28
+calendar_set_month_next (GtkCalendar *calendar,
32
GtkCalendarPrivate *priv = calendar->priv;
35
+ day = priv->selected_day;
37
if (priv->display_flags & GTK_CALENDAR_NO_MONTH_CHANGE)
40
@@ -902,13 +906,13 @@ calendar_set_month_next (GtkCalendar *calendar)
42
month_len = month_length[leap (priv->year)][priv->month + 1];
44
- if (month_len < priv->selected_day)
45
+ if (month_len < day)
47
priv->selected_day = 0;
48
gtk_calendar_select_day (calendar, month_len);
51
- gtk_calendar_select_day (calendar, priv->selected_day);
52
+ gtk_calendar_select_day (calendar, day);
54
calendar_queue_refresh (calendar);
56
@@ -1298,11 +1302,15 @@ calendar_day_rectangle (GtkCalendar *calendar,
60
-calendar_set_month_prev (GtkCalendar *calendar)
61
+calendar_set_month_prev (GtkCalendar *calendar,
64
GtkCalendarPrivate *priv = calendar->priv;
68
+ day = priv->selected_day;
70
if (priv->display_flags & GTK_CALENDAR_NO_MONTH_CHANGE)
73
@@ -1325,16 +1333,16 @@ calendar_set_month_prev (GtkCalendar *calendar)
74
gtk_calendar_signals[MONTH_CHANGED_SIGNAL],
77
- if (month_len < priv->selected_day)
78
+ if (month_len < day)
80
priv->selected_day = 0;
81
gtk_calendar_select_day (calendar, month_len);
85
- if (priv->selected_day < 0)
86
- priv->selected_day = priv->selected_day + 1 + month_length[leap (priv->year)][priv->month + 1];
87
- gtk_calendar_select_day (calendar, priv->selected_day);
89
+ day = day + 1 + month_length[leap (priv->year)][priv->month + 1];
90
+ gtk_calendar_select_day (calendar, day);
93
calendar_queue_refresh (calendar);
94
@@ -2811,10 +2819,10 @@ calendar_arrow_action (GtkCalendar *calendar,
95
calendar_set_year_next (calendar);
97
case ARROW_MONTH_LEFT:
98
- calendar_set_month_prev (calendar);
99
+ calendar_set_month_prev (calendar, -1);
101
case ARROW_MONTH_RIGHT:
102
- calendar_set_month_next (calendar);
103
+ calendar_set_month_next (calendar, -1);
107
@@ -2913,21 +2921,27 @@ calendar_main_button_press (GtkCalendar *calendar,
108
day = priv->day[row][col];
110
if (day_month == MONTH_PREV)
111
- calendar_set_month_prev (calendar);
113
+ calendar_set_month_prev (calendar, day);
115
else if (day_month == MONTH_NEXT)
116
- calendar_set_month_next (calendar);
118
- if (!gtk_widget_has_focus (widget))
119
- gtk_widget_grab_focus (widget);
121
- if (event->button == GDK_BUTTON_PRIMARY)
124
- priv->drag_start_x = x;
125
- priv->drag_start_y = y;
126
+ calendar_set_month_next (calendar, day);
130
+ if (!gtk_widget_has_focus (widget))
131
+ gtk_widget_grab_focus (widget);
133
+ if (event->button == GDK_BUTTON_PRIMARY)
136
+ priv->drag_start_x = x;
137
+ priv->drag_start_y = y;
140
- calendar_select_and_focus_day (calendar, day);
141
+ calendar_select_and_focus_day (calendar, day);
144
else if (event->type == GDK_2BUTTON_PRESS)
146
@@ -3098,13 +3112,13 @@ gtk_calendar_scroll (GtkWidget *widget,
148
if (!gtk_widget_has_focus (widget))
149
gtk_widget_grab_focus (widget);
150
- calendar_set_month_prev (calendar);
151
+ calendar_set_month_prev (calendar, -1);
153
else if (event->direction == GDK_SCROLL_DOWN)
155
if (!gtk_widget_has_focus (widget))
156
gtk_widget_grab_focus (widget);
157
- calendar_set_month_next (calendar);
158
+ calendar_set_month_next (calendar, -1);
162
@@ -3179,7 +3193,7 @@ gtk_calendar_key_press (GtkWidget *widget,
165
if (event->state & GDK_CONTROL_MASK)
166
- calendar_set_month_prev (calendar);
167
+ calendar_set_month_prev (calendar, -1);
170
move_focus (calendar, -1);
171
@@ -3192,7 +3206,7 @@ gtk_calendar_key_press (GtkWidget *widget,
174
if (event->state & GDK_CONTROL_MASK)
175
- calendar_set_month_next (calendar);
176
+ calendar_set_month_next (calendar, -1);
179
move_focus (calendar, 1);
180
@@ -3246,11 +3260,11 @@ gtk_calendar_key_press (GtkWidget *widget,
182
day = priv->day[row][col];
183
if (priv->day_month[row][col] == MONTH_PREV)
184
- calendar_set_month_prev (calendar);
185
+ calendar_set_month_prev (calendar, day);
186
else if (priv->day_month[row][col] == MONTH_NEXT)
187
- calendar_set_month_next (calendar);
189
- calendar_select_and_focus_day (calendar, day);
190
+ calendar_set_month_next (calendar, day);
192
+ calendar_select_and_focus_day (calendar, day);