]> Pileus Git - ~andy/gtk/blobdiff - gtk/gtkcalendar.c
Use gdk_window_get_origin() instead of gdk_window_get_position, because
[~andy/gtk] / gtk / gtkcalendar.c
index af6ef3ac6a87c4cd023e4fc81a1e9f2106a353c3..33147b3b89a12927bb95ecfb964946179c6fdf79 100644 (file)
@@ -43,13 +43,13 @@ typedef enum { false = FALSE , true = TRUE } boolean;
 #define and        &&      /* logical (boolean) operators: lower case */
 #define or         ||
 
-static N_int month_length[2][13] =
+static const N_int month_length[2][13] =
 {
   { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 },
   { 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }
 };
 
-static N_int days_in_months[2][14] =
+static const N_int days_in_months[2][14] =
 {
   { 0, 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 },
   { 0, 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366 }
@@ -216,7 +216,9 @@ struct _GtkCalendarPrivateData
   GdkWindow *week_win;
   GdkWindow *arrow_win[4];
 
-  guint header_h, day_name_h, main_h;
+  guint header_h;
+  guint day_name_h;
+  guint main_h;
 
   guint             arrow_state[4];
   guint             arrow_width;
@@ -234,12 +236,13 @@ struct _GtkCalendarPrivateData
   guint max_label_char_descent;
   guint max_week_char_width;
   
+  guint freeze_count;
+
   /* flags */
-  unsigned int dirty_header:1;
-  unsigned int dirty_day_names:1;
-  unsigned int dirty_main:1;
-  unsigned int dirty_week:1;
-  unsigned int frozen;
+  guint dirty_header : 1;
+  guint dirty_day_names : 1;
+  guint dirty_main : 1;
+  guint dirty_week : 1;
 };
 
 #define GTK_CALENDAR_PRIVATE_DATA(widget)  (((GtkCalendarPrivateData*)(GTK_CALENDAR (widget)->private_data)))
@@ -310,7 +313,7 @@ gtk_calendar_get_type (void)
   
   if (!calendar_type)
     {
-      GtkTypeInfo calendar_info =
+      static const GtkTypeInfo calendar_info =
       {
        "GtkCalendar",
        sizeof (GtkCalendar),
@@ -466,12 +469,13 @@ gtk_calendar_init (GtkCalendar *calendar)
   private_data->max_label_char_descent = 0;
 
   private_data->arrow_width = 10;
+
+  private_data->freeze_count = 0;
   
   private_data->dirty_header = 0;
   private_data->dirty_day_names = 0;
   private_data->dirty_week = 0;
   private_data->dirty_main = 0;
-  private_data->frozen = 0;
 }
 
 GtkWidget*
@@ -1519,7 +1523,7 @@ gtk_calendar_paint_header (GtkWidget *widget)
   calendar = GTK_CALENDAR (widget);
   private_data = GTK_CALENDAR_PRIVATE_DATA (widget);
 
-  if (private_data->frozen)
+  if (private_data->freeze_count)
     {
       private_data->dirty_header = 1;
       return;
@@ -1609,7 +1613,7 @@ gtk_calendar_paint_day_names (GtkWidget *widget)
    * Handle freeze/thaw functionality
    */
   
-  if (private_data->frozen)
+  if (private_data->freeze_count)
     {
       private_data->dirty_day_names = 1;
       return;
@@ -1688,7 +1692,7 @@ gtk_calendar_paint_week_numbers (GtkWidget *widget)
    * Handle freeze/thaw functionality
    */
   
-  if (private_data->frozen)
+  if (private_data->freeze_count)
     {
       private_data->dirty_week = 1;
       return;
@@ -1811,7 +1815,7 @@ gtk_calendar_paint_day (GtkWidget *widget,
    * Handle freeze/thaw functionality
    */
   
-  if (private_data->frozen)
+  if (private_data->freeze_count)
     {
       private_data->dirty_main = 1;
       return;
@@ -1877,7 +1881,8 @@ gtk_calendar_paint_day (GtkWidget *widget,
   gdk_draw_string (private_data->main_win,
                   DAY_FONT (widget), gc,
                   x_loc, y_baseline, buffer);
-  if (calendar->marked_date[day-1])
+  if (calendar->marked_date[day-1]
+      && calendar->day_month[row][col] == MONTH_CURRENT)
     gdk_draw_string (private_data->main_win,
                     DAY_FONT (widget), gc,
                     x_loc-1, y_baseline, buffer);
@@ -1907,7 +1912,7 @@ gtk_calendar_paint_main (GtkWidget *widget)
   calendar = GTK_CALENDAR (widget);
   private_data = GTK_CALENDAR_PRIVATE_DATA (widget);
 
-  if (private_data->frozen)
+  if (private_data->freeze_count)
     {
       private_data->dirty_main = 1;
       return;
@@ -2452,7 +2457,7 @@ gtk_calendar_paint_arrow (GtkWidget *widget,
   calendar = GTK_CALENDAR (widget);
   private_data = GTK_CALENDAR_PRIVATE_DATA (widget);
 
-  if (private_data->frozen)
+  if (private_data->freeze_count)
     {
       private_data->dirty_header = 1;
       return;
@@ -2486,7 +2491,7 @@ gtk_calendar_freeze (GtkCalendar *calendar)
   g_return_if_fail (calendar != NULL);
   g_return_if_fail (GTK_IS_CALENDAR (calendar));
   
-  GTK_CALENDAR_PRIVATE_DATA (calendar)->frozen++;
+  GTK_CALENDAR_PRIVATE_DATA (calendar)->freeze_count++;
 }
 
 void
@@ -2498,29 +2503,26 @@ gtk_calendar_thaw (GtkCalendar *calendar)
   g_return_if_fail (GTK_IS_CALENDAR (calendar));
   
   private_data = GTK_CALENDAR_PRIVATE_DATA (calendar);
-
-  if (private_data->frozen)
-    {
-      private_data->frozen--;
-      if (private_data->frozen)
-       return;
-      
-      if (private_data->dirty_header)
-       if (GTK_WIDGET_DRAWABLE (calendar))
-         gtk_calendar_paint_header (GTK_WIDGET (calendar));
-      
-      if (private_data->dirty_day_names)
-       if (GTK_WIDGET_DRAWABLE (calendar))
-         gtk_calendar_paint_day_names (GTK_WIDGET (calendar));
-      
-      if (private_data->dirty_week)
-       if (GTK_WIDGET_DRAWABLE (calendar))
-         gtk_calendar_paint_week_numbers (GTK_WIDGET (calendar));
-      
-      if (private_data->dirty_main)
-       if (GTK_WIDGET_DRAWABLE (calendar))
-         gtk_calendar_paint_main (GTK_WIDGET (calendar));
-    }
+  
+  if (private_data->freeze_count)
+    if (!(--private_data->freeze_count))
+      {
+       if (private_data->dirty_header)
+         if (GTK_WIDGET_DRAWABLE (calendar))
+           gtk_calendar_paint_header (GTK_WIDGET (calendar));
+       
+       if (private_data->dirty_day_names)
+         if (GTK_WIDGET_DRAWABLE (calendar))
+           gtk_calendar_paint_day_names (GTK_WIDGET (calendar));
+       
+       if (private_data->dirty_week)
+         if (GTK_WIDGET_DRAWABLE (calendar))
+           gtk_calendar_paint_week_numbers (GTK_WIDGET (calendar));
+       
+       if (private_data->dirty_main)
+         if (GTK_WIDGET_DRAWABLE (calendar))
+           gtk_calendar_paint_main (GTK_WIDGET (calendar));
+      }
 }
 
 static void