]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/calctrl.cpp
Swap client data pointers in wxRearrangeList too.
[wxWidgets.git] / src / gtk / calctrl.cpp
index 9c5b2a1717f664b2ec132fed89ed92296de99475..3672664b25dca0f746288a3dc8334b1601e6b4ea 100644 (file)
@@ -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;
 }