X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/628e155d8c70da0f962289cf1e1dea3699255707..5e53c1c21e1241487f62737f0d442277d1c8d872:/src/gtk/calctrl.cpp diff --git a/src/gtk/calctrl.cpp b/src/gtk/calctrl.cpp index 9c5b2a1717..2da9293d0b 100644 --- a/src/gtk/calctrl.cpp +++ b/src/gtk/calctrl.cpp @@ -28,7 +28,14 @@ extern "C" { static void gtk_day_selected_callback(GtkWidget *WXUNUSED(widget), wxGtkCalendarCtrl *cal) { + wxDateTime date = cal->GetDate(); + if (cal->m_selectedDate == date) + return; + + cal->m_selectedDate = date; + cal->GenerateEvent(wxEVT_CALENDAR_SEL_CHANGED); + // send deprecated event cal->GenerateEvent(wxEVT_CALENDAR_DAY_CHANGED); } @@ -81,10 +88,13 @@ bool wxGtkCalendarCtrl::Create(wxWindow *parent, } m_widget = gtk_calendar_new(); + g_object_ref(m_widget); SetDate(date.IsValid() ? date : wxDateTime::Today()); if (style & wxCAL_NO_MONTH_CHANGE) g_object_set (G_OBJECT (m_widget), "no-month-change", true, NULL); + if (style & wxCAL_SHOW_WEEK_NUMBERS) + g_object_set (G_OBJECT (m_widget), "show-week-numbers", true, NULL); g_signal_connect_after(m_widget, "day-selected", G_CALLBACK (gtk_day_selected_callback), @@ -127,13 +137,22 @@ bool wxGtkCalendarCtrl::EnableMonthChange(bool enable) return true; } + bool wxGtkCalendarCtrl::SetDate(const wxDateTime& date) { + g_signal_handlers_block_by_func(m_widget, + (gpointer) gtk_day_selected_callback, this); + + m_selectedDate = date; int year = date.GetYear(); int month = date.GetMonth(); int day = date.GetDay(); gtk_calendar_select_month(GTK_CALENDAR(m_widget), month, year); gtk_calendar_select_day(GTK_CALENDAR(m_widget), day); + + g_signal_handlers_unblock_by_func( m_widget, + (gpointer) gtk_day_selected_callback, this); + return true; }