#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 }
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;
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)))
if (!calendar_type)
{
- GtkTypeInfo calendar_info =
+ static const GtkTypeInfo calendar_info =
{
"GtkCalendar",
sizeof (GtkCalendar),
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*
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;
* Handle freeze/thaw functionality
*/
- if (private_data->frozen)
+ if (private_data->freeze_count)
{
private_data->dirty_day_names = 1;
return;
* Handle freeze/thaw functionality
*/
- if (private_data->frozen)
+ if (private_data->freeze_count)
{
private_data->dirty_week = 1;
return;
* Handle freeze/thaw functionality
*/
- if (private_data->frozen)
+ if (private_data->freeze_count)
{
private_data->dirty_main = 1;
return;
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);
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;
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;
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
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