summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog30
-rw-r--r--ChangeLog.pre-2-030
-rw-r--r--ChangeLog.pre-2-1030
-rw-r--r--ChangeLog.pre-2-230
-rw-r--r--ChangeLog.pre-2-430
-rw-r--r--ChangeLog.pre-2-630
-rw-r--r--ChangeLog.pre-2-830
-rw-r--r--gtk/gtkcalendar.c1085
-rw-r--r--gtk/gtkcalendar.h113
-rw-r--r--gtk/gtkclist.c54
-rw-r--r--gtk/gtkclist.h10
11 files changed, 877 insertions, 595 deletions
diff --git a/ChangeLog b/ChangeLog
index 20e5890aee..cfd21ebc6f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,33 @@
+Thu Oct 1 10:40:20 1998 Tim Janik <timj@gtk.org>
+
+ * gtk/gtkclist.h (gtk_clist_prepend):
+ * gtk/gtkclist.c (gtk_clist_prepend): new function.
+ (gtk_clist_insert): added g_return_val_if_fail()
+ statements. accept a row parameter < 0 or > clist->rows to indicate
+ append mode.
+ (real_clear): first clean up all internal pointers and lists (e.g.
+ clist->row_list or clist->rows), then delete the distinct rows. this
+ is required because of destroy notifiers, we need to have all internal
+ structures updated and be reentrant.
+
+ * gtk/gtkcalendar.h:
+ * gtk/gtkcalendar.c: removed the `gtk_calendar_' prefix from the
+ GtkCalendarClass signal methods.
+ GtkType and macro fixups, put `void' into () prototypes, avoid C++
+ style comments, indentation fixes, fixed some g_return_if_fail()
+ statements.
+ (gtk_calendar_paint_header):
+ (gtk_calendar_paint_day_names):
+ (gtk_calendar_paint_week_numbers):
+ (gtk_calendar_paint_main): made these static functions.
+ (gtk_calendar_select_month):
+ (gtk_calendar_select_day):
+ (gtk_calendar_mark_day):
+ (gtk_calendar_unmark_day):
+ (gtk_calendar_get_date): signedness corrections, use guints
+ rather than gints.
+ (gtk_calendar_size_request): removed unused variables.
+
Wed Sep 30 13:11:09 1998 Tim Janik <timj@gtk.org>
* gtk/gtkitemfactory.c (gtk_item_factory_add_item): list all
diff --git a/ChangeLog.pre-2-0 b/ChangeLog.pre-2-0
index 20e5890aee..cfd21ebc6f 100644
--- a/ChangeLog.pre-2-0
+++ b/ChangeLog.pre-2-0
@@ -1,3 +1,33 @@
+Thu Oct 1 10:40:20 1998 Tim Janik <timj@gtk.org>
+
+ * gtk/gtkclist.h (gtk_clist_prepend):
+ * gtk/gtkclist.c (gtk_clist_prepend): new function.
+ (gtk_clist_insert): added g_return_val_if_fail()
+ statements. accept a row parameter < 0 or > clist->rows to indicate
+ append mode.
+ (real_clear): first clean up all internal pointers and lists (e.g.
+ clist->row_list or clist->rows), then delete the distinct rows. this
+ is required because of destroy notifiers, we need to have all internal
+ structures updated and be reentrant.
+
+ * gtk/gtkcalendar.h:
+ * gtk/gtkcalendar.c: removed the `gtk_calendar_' prefix from the
+ GtkCalendarClass signal methods.
+ GtkType and macro fixups, put `void' into () prototypes, avoid C++
+ style comments, indentation fixes, fixed some g_return_if_fail()
+ statements.
+ (gtk_calendar_paint_header):
+ (gtk_calendar_paint_day_names):
+ (gtk_calendar_paint_week_numbers):
+ (gtk_calendar_paint_main): made these static functions.
+ (gtk_calendar_select_month):
+ (gtk_calendar_select_day):
+ (gtk_calendar_mark_day):
+ (gtk_calendar_unmark_day):
+ (gtk_calendar_get_date): signedness corrections, use guints
+ rather than gints.
+ (gtk_calendar_size_request): removed unused variables.
+
Wed Sep 30 13:11:09 1998 Tim Janik <timj@gtk.org>
* gtk/gtkitemfactory.c (gtk_item_factory_add_item): list all
diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10
index 20e5890aee..cfd21ebc6f 100644
--- a/ChangeLog.pre-2-10
+++ b/ChangeLog.pre-2-10
@@ -1,3 +1,33 @@
+Thu Oct 1 10:40:20 1998 Tim Janik <timj@gtk.org>
+
+ * gtk/gtkclist.h (gtk_clist_prepend):
+ * gtk/gtkclist.c (gtk_clist_prepend): new function.
+ (gtk_clist_insert): added g_return_val_if_fail()
+ statements. accept a row parameter < 0 or > clist->rows to indicate
+ append mode.
+ (real_clear): first clean up all internal pointers and lists (e.g.
+ clist->row_list or clist->rows), then delete the distinct rows. this
+ is required because of destroy notifiers, we need to have all internal
+ structures updated and be reentrant.
+
+ * gtk/gtkcalendar.h:
+ * gtk/gtkcalendar.c: removed the `gtk_calendar_' prefix from the
+ GtkCalendarClass signal methods.
+ GtkType and macro fixups, put `void' into () prototypes, avoid C++
+ style comments, indentation fixes, fixed some g_return_if_fail()
+ statements.
+ (gtk_calendar_paint_header):
+ (gtk_calendar_paint_day_names):
+ (gtk_calendar_paint_week_numbers):
+ (gtk_calendar_paint_main): made these static functions.
+ (gtk_calendar_select_month):
+ (gtk_calendar_select_day):
+ (gtk_calendar_mark_day):
+ (gtk_calendar_unmark_day):
+ (gtk_calendar_get_date): signedness corrections, use guints
+ rather than gints.
+ (gtk_calendar_size_request): removed unused variables.
+
Wed Sep 30 13:11:09 1998 Tim Janik <timj@gtk.org>
* gtk/gtkitemfactory.c (gtk_item_factory_add_item): list all
diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2
index 20e5890aee..cfd21ebc6f 100644
--- a/ChangeLog.pre-2-2
+++ b/ChangeLog.pre-2-2
@@ -1,3 +1,33 @@
+Thu Oct 1 10:40:20 1998 Tim Janik <timj@gtk.org>
+
+ * gtk/gtkclist.h (gtk_clist_prepend):
+ * gtk/gtkclist.c (gtk_clist_prepend): new function.
+ (gtk_clist_insert): added g_return_val_if_fail()
+ statements. accept a row parameter < 0 or > clist->rows to indicate
+ append mode.
+ (real_clear): first clean up all internal pointers and lists (e.g.
+ clist->row_list or clist->rows), then delete the distinct rows. this
+ is required because of destroy notifiers, we need to have all internal
+ structures updated and be reentrant.
+
+ * gtk/gtkcalendar.h:
+ * gtk/gtkcalendar.c: removed the `gtk_calendar_' prefix from the
+ GtkCalendarClass signal methods.
+ GtkType and macro fixups, put `void' into () prototypes, avoid C++
+ style comments, indentation fixes, fixed some g_return_if_fail()
+ statements.
+ (gtk_calendar_paint_header):
+ (gtk_calendar_paint_day_names):
+ (gtk_calendar_paint_week_numbers):
+ (gtk_calendar_paint_main): made these static functions.
+ (gtk_calendar_select_month):
+ (gtk_calendar_select_day):
+ (gtk_calendar_mark_day):
+ (gtk_calendar_unmark_day):
+ (gtk_calendar_get_date): signedness corrections, use guints
+ rather than gints.
+ (gtk_calendar_size_request): removed unused variables.
+
Wed Sep 30 13:11:09 1998 Tim Janik <timj@gtk.org>
* gtk/gtkitemfactory.c (gtk_item_factory_add_item): list all
diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4
index 20e5890aee..cfd21ebc6f 100644
--- a/ChangeLog.pre-2-4
+++ b/ChangeLog.pre-2-4
@@ -1,3 +1,33 @@
+Thu Oct 1 10:40:20 1998 Tim Janik <timj@gtk.org>
+
+ * gtk/gtkclist.h (gtk_clist_prepend):
+ * gtk/gtkclist.c (gtk_clist_prepend): new function.
+ (gtk_clist_insert): added g_return_val_if_fail()
+ statements. accept a row parameter < 0 or > clist->rows to indicate
+ append mode.
+ (real_clear): first clean up all internal pointers and lists (e.g.
+ clist->row_list or clist->rows), then delete the distinct rows. this
+ is required because of destroy notifiers, we need to have all internal
+ structures updated and be reentrant.
+
+ * gtk/gtkcalendar.h:
+ * gtk/gtkcalendar.c: removed the `gtk_calendar_' prefix from the
+ GtkCalendarClass signal methods.
+ GtkType and macro fixups, put `void' into () prototypes, avoid C++
+ style comments, indentation fixes, fixed some g_return_if_fail()
+ statements.
+ (gtk_calendar_paint_header):
+ (gtk_calendar_paint_day_names):
+ (gtk_calendar_paint_week_numbers):
+ (gtk_calendar_paint_main): made these static functions.
+ (gtk_calendar_select_month):
+ (gtk_calendar_select_day):
+ (gtk_calendar_mark_day):
+ (gtk_calendar_unmark_day):
+ (gtk_calendar_get_date): signedness corrections, use guints
+ rather than gints.
+ (gtk_calendar_size_request): removed unused variables.
+
Wed Sep 30 13:11:09 1998 Tim Janik <timj@gtk.org>
* gtk/gtkitemfactory.c (gtk_item_factory_add_item): list all
diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6
index 20e5890aee..cfd21ebc6f 100644
--- a/ChangeLog.pre-2-6
+++ b/ChangeLog.pre-2-6
@@ -1,3 +1,33 @@
+Thu Oct 1 10:40:20 1998 Tim Janik <timj@gtk.org>
+
+ * gtk/gtkclist.h (gtk_clist_prepend):
+ * gtk/gtkclist.c (gtk_clist_prepend): new function.
+ (gtk_clist_insert): added g_return_val_if_fail()
+ statements. accept a row parameter < 0 or > clist->rows to indicate
+ append mode.
+ (real_clear): first clean up all internal pointers and lists (e.g.
+ clist->row_list or clist->rows), then delete the distinct rows. this
+ is required because of destroy notifiers, we need to have all internal
+ structures updated and be reentrant.
+
+ * gtk/gtkcalendar.h:
+ * gtk/gtkcalendar.c: removed the `gtk_calendar_' prefix from the
+ GtkCalendarClass signal methods.
+ GtkType and macro fixups, put `void' into () prototypes, avoid C++
+ style comments, indentation fixes, fixed some g_return_if_fail()
+ statements.
+ (gtk_calendar_paint_header):
+ (gtk_calendar_paint_day_names):
+ (gtk_calendar_paint_week_numbers):
+ (gtk_calendar_paint_main): made these static functions.
+ (gtk_calendar_select_month):
+ (gtk_calendar_select_day):
+ (gtk_calendar_mark_day):
+ (gtk_calendar_unmark_day):
+ (gtk_calendar_get_date): signedness corrections, use guints
+ rather than gints.
+ (gtk_calendar_size_request): removed unused variables.
+
Wed Sep 30 13:11:09 1998 Tim Janik <timj@gtk.org>
* gtk/gtkitemfactory.c (gtk_item_factory_add_item): list all
diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8
index 20e5890aee..cfd21ebc6f 100644
--- a/ChangeLog.pre-2-8
+++ b/ChangeLog.pre-2-8
@@ -1,3 +1,33 @@
+Thu Oct 1 10:40:20 1998 Tim Janik <timj@gtk.org>
+
+ * gtk/gtkclist.h (gtk_clist_prepend):
+ * gtk/gtkclist.c (gtk_clist_prepend): new function.
+ (gtk_clist_insert): added g_return_val_if_fail()
+ statements. accept a row parameter < 0 or > clist->rows to indicate
+ append mode.
+ (real_clear): first clean up all internal pointers and lists (e.g.
+ clist->row_list or clist->rows), then delete the distinct rows. this
+ is required because of destroy notifiers, we need to have all internal
+ structures updated and be reentrant.
+
+ * gtk/gtkcalendar.h:
+ * gtk/gtkcalendar.c: removed the `gtk_calendar_' prefix from the
+ GtkCalendarClass signal methods.
+ GtkType and macro fixups, put `void' into () prototypes, avoid C++
+ style comments, indentation fixes, fixed some g_return_if_fail()
+ statements.
+ (gtk_calendar_paint_header):
+ (gtk_calendar_paint_day_names):
+ (gtk_calendar_paint_week_numbers):
+ (gtk_calendar_paint_main): made these static functions.
+ (gtk_calendar_select_month):
+ (gtk_calendar_select_day):
+ (gtk_calendar_mark_day):
+ (gtk_calendar_unmark_day):
+ (gtk_calendar_get_date): signedness corrections, use guints
+ rather than gints.
+ (gtk_calendar_size_request): removed unused variables.
+
Wed Sep 30 13:11:09 1998 Tim Janik <timj@gtk.org>
* gtk/gtkitemfactory.c (gtk_item_factory_add_item): list all
diff --git a/gtk/gtkcalendar.c b/gtk/gtkcalendar.c
index cc05ad24af..f57ff6a8d3 100644
--- a/gtk/gtkcalendar.c
+++ b/gtk/gtkcalendar.c
@@ -14,7 +14,7 @@
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
@@ -35,145 +35,145 @@
* them seperate in case we want to update them if a newer lib_date comes
* out with fixes. */
-typedef unsigned int N_int;
-typedef unsigned long N_long;
-typedef signed long Z_long;
+typedef unsigned int N_int;
+typedef unsigned long N_long;
+typedef signed long Z_long;
typedef enum { false = FALSE , true = TRUE } boolean;
-#define and && /* logical (boolean) operators: lower case */
-#define or ||
+#define and && /* logical (boolean) operators: lower case */
+#define or ||
static 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 }
+ { 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] =
{
- { 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 }
+ { 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 }
};
static Z_long calc_days(N_int year, N_int mm, N_int dd);
static N_int day_of_week(N_int year, N_int mm, N_int dd);
static Z_long dates_difference(N_int year1, N_int mm1, N_int dd1,
- N_int year2, N_int mm2, N_int dd2);
+ N_int year2, N_int mm2, N_int dd2);
static N_int weeks_in_year(N_int year);
static boolean
leap(N_int year)
{
- return((((year % 4) == 0) and ((year % 100) != 0)) or ((year % 400) == 0));
+ return((((year % 4) == 0) and ((year % 100) != 0)) or ((year % 400) == 0));
}
static N_int
day_of_week(N_int year, N_int mm, N_int dd)
{
- Z_long days;
-
- days = calc_days(year, mm, dd);
- if (days > 0L)
+ Z_long days;
+
+ days = calc_days(year, mm, dd);
+ if (days > 0L)
{
- days--;
- days %= 7L;
- days++;
+ days--;
+ days %= 7L;
+ days++;
}
- return( (N_int) days );
+ return( (N_int) days );
}
static N_int weeks_in_year(N_int year)
{
- return(52 + ((day_of_week(year,1,1)==4) or (day_of_week(year,12,31)==4)));
+ return(52 + ((day_of_week(year,1,1)==4) or (day_of_week(year,12,31)==4)));
}
static boolean
check_date(N_int year, N_int mm, N_int dd)
{
- if (year < 1) return(false);
- if ((mm < 1) or (mm > 12)) return(false);
- if ((dd < 1) or (dd > month_length[leap(year)][mm])) return(false);
- return(true);
+ if (year < 1) return(false);
+ if ((mm < 1) or (mm > 12)) return(false);
+ if ((dd < 1) or (dd > month_length[leap(year)][mm])) return(false);
+ return(true);
}
static N_int
week_number(N_int year, N_int mm, N_int dd)
{
- N_int first;
-
- first = day_of_week(year,1,1) - 1;
- return( (N_int) ( (dates_difference(year,1,1, year,mm,dd) + first) / 7L ) +
- (first < 4) );
+ N_int first;
+
+ first = day_of_week(year,1,1) - 1;
+ return( (N_int) ( (dates_difference(year,1,1, year,mm,dd) + first) / 7L ) +
+ (first < 4) );
}
static Z_long
year_to_days(N_int year)
{
- return( year * 365L + (year / 4) - (year / 100) + (year / 400) );
+ return( year * 365L + (year / 4) - (year / 100) + (year / 400) );
}
static Z_long
calc_days(N_int year, N_int mm, N_int dd)
{
- boolean lp;
-
- if (year < 1) return(0L);
- if ((mm < 1) or (mm > 12)) return(0L);
- if ((dd < 1) or (dd > month_length[(lp = leap(year))][mm])) return(0L);
- return( year_to_days(--year) + days_in_months[lp][mm] + dd );
+ boolean lp;
+
+ if (year < 1) return(0L);
+ if ((mm < 1) or (mm > 12)) return(0L);
+ if ((dd < 1) or (dd > month_length[(lp = leap(year))][mm])) return(0L);
+ return( year_to_days(--year) + days_in_months[lp][mm] + dd );
}
static boolean
week_of_year(N_int *week, N_int *year, N_int mm, N_int dd)
{
- if (check_date(*year,mm,dd))
- {
- *week = week_number(*year,mm,dd);
- if (*week == 0)
- *week = weeks_in_year(--(*year));
- else if (*week > weeks_in_year(*year))
- {
- *week = 1;
- (*year)++;
- }
- return(true);
- }
- return(false);
+ if (check_date(*year,mm,dd))
+ {
+ *week = week_number(*year,mm,dd);
+ if (*week == 0)
+ *week = weeks_in_year(--(*year));
+ else if (*week > weeks_in_year(*year))
+ {
+ *week = 1;
+ (*year)++;
+ }
+ return(true);
+ }
+ return(false);
}
static Z_long
dates_difference(N_int year1, N_int mm1, N_int dd1,
- N_int year2, N_int mm2, N_int dd2)
+ N_int year2, N_int mm2, N_int dd2)
{
- return( calc_days(year2, mm2, dd2) - calc_days(year1, mm1, dd1) );
+ return( calc_days(year2, mm2, dd2) - calc_days(year1, mm1, dd1) );
}
/** END OF lib_date routines ************************************************/
-#define CALENDAR_MARGIN 0
-#define CALENDAR_YSEP 4
-#define CALENDAR_XSEP 4
-#define INNER_BORDER 4
+#define CALENDAR_MARGIN 0
+#define CALENDAR_YSEP 4
+#define CALENDAR_XSEP 4
+#define INNER_BORDER 4
#define DAY_XPAD 2
#define DAY_YPAD 2
-#define DAY_XSEP 0 /* not really good for small calendar */
+#define DAY_XSEP 0 /* not really good for small calendar */
#define DAY_YSEP 0 /* not really good for small calendar */
/* Color usage */
-#define HEADER_FG_COLOR(widget) (& (widget)->style->fg[GTK_WIDGET_STATE (widget)])
-#define HEADER_BG_COLOR(widget) (& (widget)->style->bg[GTK_WIDGET_STATE (widget)])
-#define DAY_NAME_COLOR(widget) (& (widget)->style->dark[GTK_WIDGET_STATE (widget)])
-#define NORMAL_DAY_COLOR(widget) (& (widget)->style->fg[GTK_WIDGET_STATE (widget)])
-#define SELECTION_FOCUS_COLOR(widget) (& (widget)->style->fg[GTK_WIDGET_STATE (widget)])
+#define HEADER_FG_COLOR(widget) (& (widget)->style->fg[GTK_WIDGET_STATE (widget)])
+#define HEADER_BG_COLOR(widget) (& (widget)->style->bg[GTK_WIDGET_STATE (widget)])
+#define DAY_NAME_COLOR(widget) (& (widget)->style->dark[GTK_WIDGET_STATE (widget)])
+#define NORMAL_DAY_COLOR(widget) (& (widget)->style->fg[GTK_WIDGET_STATE (widget)])
+#define SELECTION_FOCUS_COLOR(widget) (& (widget)->style->fg[GTK_WIDGET_STATE (widget)])
#define SELECTION_NO_FOCUS_COLOR(widget) (& (widget)->style->mid[GTK_WIDGET_STATE (widget)])
-#define PREV_MONTH_COLOR(widget) (& (widget)->style->mid[GTK_WIDGET_STATE (widget)])
-#define NEXT_MONTH_COLOR(widget) (& (widget)->style->mid[GTK_WIDGET_STATE (widget)])
-#define MARKED_COLOR(widget) (& (widget)->style->fg[GTK_WIDGET_STATE (widget)])
-#define FOREGROUND_COLOR(widget) (& (widget)->style->fg[GTK_WIDGET_STATE (widget)])
-#define BACKGROUND_COLOR(widget) (& (widget)->style->base[GTK_WIDGET_STATE (widget)])
-#define HIGHLIGHT_BACK_COLOR(widget) (& (widget)->style->mid[GTK_WIDGET_STATE (widget)])
+#define PREV_MONTH_COLOR(widget) (& (widget)->style->mid[GTK_WIDGET_STATE (widget)])
+#define NEXT_MONTH_COLOR(widget) (& (widget)->style->mid[GTK_WIDGET_STATE (widget)])
+#define MARKED_COLOR(widget) (& (widget)->style->fg[GTK_WIDGET_STATE (widget)])
+#define FOREGROUND_COLOR(widget) (& (widget)->style->fg[GTK_WIDGET_STATE (widget)])
+#define BACKGROUND_COLOR(widget) (& (widget)->style->base[GTK_WIDGET_STATE (widget)])
+#define HIGHLIGHT_BACK_COLOR(widget) (& (widget)->style->mid[GTK_WIDGET_STATE (widget)])
#define HEADER_FONT(widget) ((widget)->style->font)
#define LABEL_FONT(widget) ((widget)->style->font)
@@ -209,60 +209,68 @@ static gint gtk_calendar_signals[LAST_SIGNAL] = { 0 };
typedef void (*GtkCalendarSignalDate) (GtkObject *object, guint arg1, guint arg2, guint arg3, gpointer data);
-static void gtk_calendar_class_init (GtkCalendarClass *class);
-static void gtk_calendar_init (GtkCalendar *calendar);
-static void gtk_calendar_realize (GtkWidget *widget);
-static void gtk_calendar_unrealize (GtkWidget *widget);
-static void gtk_calendar_draw_focus (GtkWidget *widget);
-static void gtk_calendar_size_request (GtkWidget *widget,
- GtkRequisition *requisition);
-static void gtk_calendar_size_allocate (GtkWidget *widget,
- GtkAllocation *allocation);
-static gint gtk_calendar_expose (GtkWidget *widget,
- GdkEventExpose *event);
-static gint gtk_calendar_button_press (GtkWidget *widget,
- GdkEventButton *event);
-static void gtk_calendar_main_button (GtkWidget *widget,
- GdkEventButton *event);
-static gint gtk_calendar_motion_notify (GtkWidget *widget,
- GdkEventMotion *event);
-static gint gtk_calendar_enter_notify (GtkWidget *widget,
- GdkEventCrossing *event);
-static gint gtk_calendar_leave_notify (GtkWidget *widget,
- GdkEventCrossing *event);
-static gint gtk_calendar_key_press (GtkWidget *widget,
- GdkEventKey *event);
-static gint gtk_calendar_focus_in (GtkWidget *widget,
- GdkEventFocus *event);
-static gint gtk_calendar_focus_out (GtkWidget *widget,
- GdkEventFocus *event);
-static void gtk_calendar_state_changed (GtkWidget *widget,
+static void gtk_calendar_class_init (GtkCalendarClass *class);
+static void gtk_calendar_init (GtkCalendar *calendar);
+static void gtk_calendar_realize (GtkWidget *widget);
+static void gtk_calendar_unrealize (GtkWidget *widget);
+static void gtk_calendar_draw_focus (GtkWidget *widget);
+static void gtk_calendar_size_request (GtkWidget *widget,
+ GtkRequisition *requisition);
+static void gtk_calendar_size_allocate (GtkWidget *widget,
+ GtkAllocation *allocation);
+static gint gtk_calendar_expose (GtkWidget *widget,
+ GdkEventExpose *event);
+static gint gtk_calendar_button_press (GtkWidget *widget,
+ GdkEventButton *event);
+static void gtk_calendar_main_button (GtkWidget *widget,
+ GdkEventButton *event);
+static gint gtk_calendar_motion_notify (GtkWidget *widget,
+ GdkEventMotion *event);
+static gint gtk_calendar_enter_notify (GtkWidget *widget,
+ GdkEventCrossing *event);
+static gint gtk_calendar_leave_notify (GtkWidget *widget,
+ GdkEventCrossing *event);
+static gint gtk_calendar_key_press (GtkWidget *widget,
+ GdkEventKey *event);
+static gint gtk_calendar_focus_in (GtkWidget *widget,
+ GdkEventFocus *event);
+static gint gtk_calendar_focus_out (GtkWidget *widget,
+ GdkEventFocus *event);
+static void gtk_calendar_state_changed (GtkWidget *widget,
GtkStateType previous_state);
-static void gtk_calendar_style_set (GtkWidget *widget,
+static void gtk_calendar_style_set (GtkWidget *widget,
GtkStyle *previous_style);
-void gtk_calendar_paint_header (GtkWidget *widget);
-void gtk_calendar_paint_day_names (GtkWidget *widget);
-void gtk_calendar_paint_week_numbers (GtkWidget *widget);
-void gtk_calendar_paint_main (GtkWidget *widget);
-
-
-static void gtk_calendar_paint (GtkWidget *widget, GdkRectangle *area);
-static void gtk_calendar_paint_arrow (GtkWidget *widget, guint arrow);
-static void gtk_calendar_paint_day_num (GtkWidget *widget, gint day);
-static void gtk_calendar_paint_day (GtkWidget *widget, gint row, gint col);
-static void gtk_calendar_draw (GtkWidget *widget, GdkRectangle *area);
-static void gtk_calendar_compute_days (GtkCalendar *calendar);
-static gint left_x_for_column (GtkCalendar *calendar, gint column);
-static gint top_y_for_row (GtkCalendar *calendar, gint row);
+static void gtk_calendar_paint_header (GtkWidget *widget);
+static void gtk_calendar_paint_day_names (GtkWidget *widget);
+static void gtk_calendar_paint_week_numbers (GtkWidget *widget);
+static void gtk_calendar_paint_main (GtkWidget *widget);
+
+
+static void gtk_calendar_paint (GtkWidget *widget,
+ GdkRectangle *area);
+static void gtk_calendar_paint_arrow (GtkWidget *widget,
+ guint arrow);
+static void gtk_calendar_paint_day_num (GtkWidget *widget,
+ gint day);
+static void gtk_calendar_paint_day (GtkWidget *widget,
+ gint row,
+ gint col);
+static void gtk_calendar_draw (GtkWidget *widget,
+ GdkRectangle *area);
+static void gtk_calendar_compute_days (GtkCalendar *calendar);
+static gint left_x_for_column (GtkCalendar *calendar,
+ gint column);
+static gint top_y_for_row (GtkCalendar *calendar,
+ gint row);
static char *default_abbreviated_dayname[7];
static char *default_monthname[12];
-guint
-gtk_calendar_get_type ()
+GtkType
+gtk_calendar_get_type (void)
{
- static guint calendar_type = 0;
-
+ static GtkType calendar_type = 0;
+
if (!calendar_type)
{
GtkTypeInfo calendar_info =
@@ -275,10 +283,10 @@ gtk_calendar_get_type ()
(GtkArgSetFunc) NULL,
(GtkArgGetFunc) NULL,
};
-
- calendar_type = gtk_type_unique (gtk_widget_get_type (), &calendar_info);
+
+ calendar_type = gtk_type_unique (GTK_TYPE_WIDGET, &calendar_info);
}
-
+
return calendar_type;
}
@@ -287,12 +295,12 @@ gtk_calendar_class_init (GtkCalendarClass *class)
{
GtkObjectClass *object_class;
GtkWidgetClass *widget_class;
-
+
object_class = (GtkObjectClass*) class;
widget_class = (GtkWidgetClass*) class;
-
- parent_class = gtk_type_class (gtk_widget_get_type ());
-
+
+ parent_class = gtk_type_class (GTK_TYPE_WIDGET);
+
widget_class->realize = gtk_calendar_realize;
widget_class->unrealize = gtk_calendar_unrealize;
widget_class->expose_event = gtk_calendar_expose;
@@ -309,54 +317,52 @@ gtk_calendar_class_init (GtkCalendarClass *class)
widget_class->focus_out_event = gtk_calendar_focus_out;
widget_class->style_set = gtk_calendar_style_set;
widget_class->state_changed = gtk_calendar_state_changed;
-
+
gtk_calendar_signals[MONTH_CHANGED_SIGNAL] =
gtk_signal_new ("month_changed",
GTK_RUN_FIRST, object_class->type,
- GTK_SIGNAL_OFFSET (GtkCalendarClass, gtk_calendar_month_changed),
+ GTK_SIGNAL_OFFSET (GtkCalendarClass, month_changed),
gtk_signal_default_marshaller, GTK_TYPE_NONE, 0);
gtk_calendar_signals[DAY_SELECTED_SIGNAL] =
gtk_signal_new ("day_selected",
GTK_RUN_FIRST, object_class->type,
- GTK_SIGNAL_OFFSET (GtkCalendarClass, gtk_calendar_day_selected),
+ GTK_SIGNAL_OFFSET (GtkCalendarClass, day_selected),
gtk_signal_default_marshaller, GTK_TYPE_NONE, 0);
gtk_calendar_signals[DAY_SELECTED_DOUBLE_CLICK_SIGNAL] =
gtk_signal_new ("day_selected_double_click",
GTK_RUN_FIRST, object_class->type,
- GTK_SIGNAL_OFFSET (GtkCalendarClass, gtk_calendar_day_selected_double_click),
+ GTK_SIGNAL_OFFSET (GtkCalendarClass, day_selected_double_click),
gtk_signal_default_marshaller, GTK_TYPE_NONE, 0);
gtk_calendar_signals[PREV_MONTH_SIGNAL] =
gtk_signal_new ("prev_month",
GTK_RUN_FIRST, object_class->type,
- GTK_SIGNAL_OFFSET (GtkCalendarClass, gtk_calendar_prev_month),
+ GTK_SIGNAL_OFFSET (GtkCalendarClass, prev_month),
gtk_signal_default_marshaller, GTK_TYPE_NONE, 0);
gtk_calendar_signals[NEXT_MONTH_SIGNAL] =
gtk_signal_new ("next_month",
GTK_RUN_FIRST, object_class->type,
- GTK_SIGNAL_OFFSET (GtkCalendarClass, gtk_calendar_next_month),
+ GTK_SIGNAL_OFFSET (GtkCalendarClass, next_month),
gtk_signal_default_marshaller, GTK_TYPE_NONE, 0);
gtk_calendar_signals[PREV_YEAR_SIGNAL] =
gtk_signal_new ("prev_year",
GTK_RUN_FIRST, object_class->type,
- GTK_SIGNAL_OFFSET (GtkCalendarClass, gtk_calendar_prev_year),
+ GTK_SIGNAL_OFFSET (GtkCalendarClass, prev_year),
gtk_signal_default_marshaller, GTK_TYPE_NONE, 0);
gtk_calendar_signals[NEXT_YEAR_SIGNAL] =
gtk_signal_new ("next_year",
GTK_RUN_FIRST, object_class->type,
- GTK_SIGNAL_OFFSET (GtkCalendarClass, gtk_calendar_next_year),
+ GTK_SIGNAL_OFFSET (GtkCalendarClass, next_year),
gtk_signal_default_marshaller, GTK_TYPE_NONE, 0);
-
+
gtk_object_class_add_signals (object_class, gtk_calendar_signals, LAST_SIGNAL);
-
- class->gtk_calendar_month_changed = NULL;
- class->gtk_calendar_day_selected = NULL;
- class->gtk_calendar_day_selected_double_click = NULL;
- class->gtk_calendar_prev_month = NULL;
- class->gtk_calendar_next_month = NULL;
- class->gtk_calendar_prev_year = NULL;
- class->gtk_calendar_next_year = NULL;
-
- return;
+
+ class->month_changed = NULL;
+ class->day_selected = NULL;
+ class->day_selected_double_click = NULL;
+ class->prev_month = NULL;
+ class->next_month = NULL;
+ class->prev_year = NULL;
+ class->next_year = NULL;
}
static void
@@ -368,10 +374,10 @@ gtk_calendar_init (GtkCalendar *calendar)
char buffer[255];
time_t tmp_time;
GtkWidget *widget;
-
+
widget = GTK_WIDGET (calendar);
GTK_WIDGET_SET_FLAGS (widget, GTK_CAN_FOCUS);
-
+
if (!default_abbreviated_dayname[0])
for (i=0; i<7; i++)
{
@@ -379,7 +385,7 @@ gtk_calendar_init (GtkCalendar *calendar)
strftime ( buffer, sizeof (buffer), "%a", gmtime (&tmp_time));
default_abbreviated_dayname[i] = g_strdup (buffer);
}
-
+
if (!default_monthname[0])
for (i=0; i<12; i++)
{
@@ -387,26 +393,26 @@ gtk_calendar_init (GtkCalendar *calendar)
strftime ( buffer, sizeof (buffer), "%B", gmtime (&tmp_time));
default_monthname[i] = g_strdup (buffer);
}
-
+
/* Set defaults */
secs = time (NULL);
tm = localtime (&secs);
calendar->month = tm->tm_mon;
calendar->year = 1900 + tm->tm_year;
-
+
for (i=0;i<31;i++)
calendar->marked_date[i] = FALSE;
calendar->selected_day = 1;
-
+
calendar->arrow_width = 10;
-
+
/* Create cursor */
/* calendar->cross = gdk_cursor_new (GDK_PLUS); */
-
+
calendar->highlight_row = -1;
calendar->highlight_col = -1;
-
-
+
+
calendar->max_day_char_width=0;
calendar->max_week_char_width=0;
calendar->dirty_header = 0;
@@ -417,33 +423,34 @@ gtk_calendar_init (GtkCalendar *calendar)
}
GtkWidget*
-gtk_calendar_new ()
+gtk_calendar_new (void)
{
- return GTK_WIDGET (gtk_type_new (gtk_calendar_get_type ()));
+ return GTK_WIDGET (gtk_type_new (GTK_TYPE_CALENDAR));
}
/* column_from_x: returns the column 0-6 that the
* x pixel of the xwindow is in */
static gint
-column_from_x (GtkCalendar *calendar, gint event_x)
+column_from_x (GtkCalendar *calendar,
+ gint event_x)
{
gint c, column;
gint x_left, x_right;
-
+
column = -1;
-
+
for (c = 0; c < 7; c++)
{
x_left = left_x_for_column (calendar, c);
x_right = x_left + calendar->day_width;
-
+
if (event_x > x_left && event_x < x_right)
{
column = c;
break;
}
}
-
+
return column;
}
@@ -459,53 +466,56 @@ row_height (GtkCalendar *calendar)
/* row_from_y: returns the row 0-5 that the
* y pixel of the xwindow is in */
static gint
-row_from_y (GtkCalendar *calendar, gint event_y)
+row_from_y (GtkCalendar *calendar,
+ gint event_y)
{
gint r, row;
gint height;
gint y_top, y_bottom;
-
+
height = row_height (calendar);
row = -1;
-
+
for (r = 0; r < 6; r++)
{
y_top = top_y_for_row (calendar, r);
y_bottom = y_top + height;
-
+
if (event_y > y_top && event_y < y_bottom)
{
row = r;
break;
}
}
-
+
return row;
}
/* left_x_for_column: returns the x coordinate
* for the left of the column */
static gint
-left_x_for_column (GtkCalendar *calendar, gint column)
+left_x_for_column (GtkCalendar *calendar,
+ gint column)
{
gint width;
gint x_left;
-
+
width = calendar->day_width;
if (calendar->display_flags & GTK_CALENDAR_SHOW_WEEK_NUMBERS)
x_left = DAY_XSEP + (width + DAY_XSEP) * column;
else
x_left = CALENDAR_MARGIN + (width + DAY_XSEP) * column;
-
+
return x_left;
}
/* top_y_for_row: returns the y coordinate
* for the top of the row */
static gint
-top_y_for_row (GtkCalendar *calendar, gint row)
+top_y_for_row (GtkCalendar *calendar,
+ gint row)
{
-
+
return calendar->main_h - (CALENDAR_MARGIN + (6 - row) *
row_height (calendar));
}
@@ -513,10 +523,14 @@ top_y_for_row (GtkCalendar *calendar, gint row)
/* This function should be done by the toolkit, but we don't like the
* GTK arrows because they don't look good on this widget */
static void
-draw_arrow_right (GdkWindow *window, GdkGC *gc, gint x, gint y, gint size)
+draw_arrow_right (GdkWindow *window,
+ GdkGC *gc,
+ gint x,
+ gint y,
+ gint size)
{
gint i;
-
+
for (i = 0; i <= size / 2; i++)
{
gdk_draw_line (window, gc,
@@ -530,10 +544,14 @@ draw_arrow_right (GdkWindow *window, GdkGC *gc, gint x, gint y, gint size)
/* This function should be done by the toolkit, but we don't like the
* GTK arrows because they don't look good on this widget */
static void
-draw_arrow_left (GdkWindow *window, GdkGC *gc, gint x, gint y, gint size)
+draw_arrow_left (GdkWindow *window,
+ GdkGC *gc,
+ gint x,
+ gint y,
+ gint size)
{
gint i;
-
+
for (i = 0; i <= size / 2; i++)
{
gdk_draw_line (window, gc,
@@ -548,10 +566,10 @@ static void
gtk_calendar_set_month_prev (GtkCalendar *calendar)
{
gint month_len;
-
+
if (calendar->display_flags & GTK_CALENDAR_NO_MONTH_CHANGE)
return;
-
+
if (calendar->month == 0)
{
calendar->month = 11;
@@ -559,17 +577,17 @@ gtk_calendar_set_month_prev (GtkCalendar *calendar)
}
else
calendar->month--;
-
+
month_len = month_length[leap (calendar->year)][calendar->month + 1];
-
+
gtk_calendar_freeze (calendar);
gtk_calendar_compute_days (calendar);
-
+
gtk_signal_emit (GTK_OBJECT (calendar),
gtk_calendar_signals[PREV_MONTH_SIGNAL]);
gtk_signal_emit (GTK_OBJECT (calendar),
gtk_calendar_signals[MONTH_CHANGED_SIGNAL]);
-
+
if (month_len < calendar->selected_day)
{
calendar->selected_day = 0;
@@ -582,7 +600,7 @@ gtk_calendar_set_month_prev (GtkCalendar *calendar)
else
gtk_calendar_select_day (calendar, calendar->selected_day);
}
-
+
gtk_calendar_select_day (calendar, calendar->selected_day);
gtk_calendar_paint (GTK_WIDGET (calendar), NULL);
gtk_calendar_thaw (calendar);
@@ -593,14 +611,14 @@ static void
gtk_calendar_set_month_next (GtkCalendar *calendar)
{
gint month_len;
-
+
g_return_if_fail (calendar != NULL);
g_return_if_fail (GTK_IS_WIDGET (calendar));
-
+
if (calendar->display_flags & GTK_CALENDAR_NO_MONTH_CHANGE)
return;
-
-
+
+
if (calendar->month == 11)
{
calendar->month = 0;
@@ -608,16 +626,16 @@ gtk_calendar_set_month_next (GtkCalendar *calendar)
}
else
calendar->month++;
-
+
gtk_calendar_freeze (calendar);
gtk_calendar_compute_days (calendar);
gtk_signal_emit (GTK_OBJECT (calendar),
gtk_calendar_signals[NEXT_MONTH_SIGNAL]);
gtk_signal_emit (GTK_OBJECT (calendar),
gtk_calendar_signals[MONTH_CHANGED_SIGNAL]);
-
+
month_len = month_length[leap (calendar->year)][calendar->month + 1];
-
+
if (month_len < calendar->selected_day)
{
calendar->selected_day = 0;
@@ -625,7 +643,7 @@ gtk_calendar_set_month_next (GtkCalendar *calendar)
}
else
gtk_calendar_select_day (calendar, calendar->selected_day);
-
+
gtk_calendar_paint (GTK_WIDGET(calendar), NULL);
gtk_calendar_thaw (calendar);
}
@@ -634,10 +652,10 @@ static void
gtk_calendar_set_year_prev (GtkCalendar *calendar)
{
gint month_len;
-
+
g_return_if_fail (calendar != NULL);
g_return_if_fail (GTK_IS_WIDGET (calendar));
-
+
calendar->year--;
gtk_calendar_freeze (calendar);
gtk_calendar_compute_days (calendar);
@@ -645,9 +663,9 @@ gtk_calendar_set_year_prev (GtkCalendar *calendar)
gtk_calendar_signals[PREV_YEAR_SIGNAL]);
gtk_signal_emit (GTK_OBJECT (calendar),
gtk_calendar_signals[MONTH_CHANGED_SIGNAL]);
-
+
month_len = month_length[leap (calendar->year)][calendar->month + 1];
-
+
if (month_len < calendar->selected_day)
{
calendar->selected_day = 0;
@@ -655,7 +673,7 @@ gtk_calendar_set_year_prev (GtkCalendar *calendar)
}
else
gtk_calendar_select_day (calendar, calendar->selected_day);
-
+
gtk_calendar_paint (GTK_WIDGET (calendar), NULL);
gtk_calendar_thaw (calendar);
}
@@ -665,23 +683,23 @@ gtk_calendar_set_year_next (GtkCalendar *calendar)
{
gint month_len;
GtkWidget *widget;
-
+
g_return_if_fail (calendar != NULL);
g_return_if_fail (GTK_IS_WIDGET (calendar));
-
+
widget = GTK_WIDGET (calendar);
-
+
gtk_calendar_freeze (calendar);
-
+
calendar->year++;
gtk_calendar_compute_days (calendar);
gtk_signal_emit (GTK_OBJECT (calendar),
gtk_calendar_signals[NEXT_YEAR_SIGNAL]);
gtk_signal_emit (GTK_OBJECT (calendar),
gtk_calendar_signals[MONTH_CHANGED_SIGNAL]);
-
+
month_len = month_length[leap (calendar->year)][calendar->month + 1];
-
+
if (month_len < calendar->selected_day)
{
calendar->selected_day = 0;
@@ -689,30 +707,30 @@ gtk_calendar_set_year_next (GtkCalendar *calendar)
}
else
gtk_calendar_select_day (calendar, calendar->selected_day);
-
+
gtk_calendar_paint (GTK_WIDGET (calendar), NULL);
gtk_calendar_thaw (calendar);
}
static void
-gtk_calendar_main_button (GtkWidget *widget,
+gtk_calendar_main_button (GtkWidget *widget,
GdkEventButton *event)
{
GtkCalendar *calendar;
gint x, y;
gint row, col;
gint day_month;
-
+
calendar = GTK_CALENDAR (widget);
-
+
x = (gint) (event->x);
y = (gint) (event->y);
-
+
row = row_from_y (calendar, y);
col = column_from_x (calendar, x);
-
+
day_month = calendar->day_month[row][col];
-
+
if (day_month == MONTH_CURRENT)
{
if (event->type == GDK_2BUTTON_PRESS)
@@ -738,10 +756,10 @@ gtk_calendar_realize_arrows (GtkWidget *widget)
GdkWindowAttr attributes;
gint attributes_mask;
gint i;
-
+
g_return_if_fail (widget != NULL);
g_return_if_fail (GTK_IS_CALENDAR (widget));
-
+
calendar = GTK_CALENDAR (widget);
/* Arrow windows ------------------------------------- */
if (! (calendar->display_flags & GTK_CALENDAR_NO_MONTH_CHANGE)
@@ -796,12 +814,12 @@ gtk_calendar_realize_header (GtkWidget *widget)
GtkCalendar *calendar;
GdkWindowAttr attributes;
gint attributes_mask;
-
+
g_return_if_fail (widget != NULL);
g_return_if_fail (GTK_IS_CALENDAR (widget));
-
+
calendar = GTK_CALENDAR (widget);
-
+
/* Header window ------------------------------------- */
if (calendar->display_flags & GTK_CALENDAR_SHOW_HEADING)
{
@@ -817,16 +835,16 @@ gtk_calendar_realize_header (GtkWidget *widget)
attributes.height = calendar->header_h;
calendar->header_win = gdk_window_new (widget->window,
&attributes, attributes_mask);
-
+
gdk_window_set_background (calendar->header_win,
HEADER_BG_COLOR (GTK_WIDGET (calendar)));
gdk_window_show (calendar->header_win);
gdk_window_set_user_data (calendar->header_win, widget);
-
+
}
else
calendar->header_win = NULL;
-
+
gtk_calendar_realize_arrows (widget);
}
@@ -836,13 +854,13 @@ gtk_calendar_realize_day_names (GtkWidget *widget)
GtkCalendar *calendar;
GdkWindowAttr attributes;
gint attributes_mask;
-
+
g_return_if_fail (widget != NULL);
g_return_if_fail (GTK_IS_CALENDAR (widget));
-
+
calendar = GTK_CALENDAR (widget);
-
- /* Day names window --------------------------------- */
+
+ /* Day names window --------------------------------- */
if ( calendar->display_flags & GTK_CALENDAR_SHOW_DAY_NAMES)
{
attributes.wclass = GDK_INPUT_OUTPUT;
@@ -871,10 +889,10 @@ gtk_calendar_realize_week_numbers (GtkWidget *widget)
GtkCalendar *calendar;
GdkWindowAttr attributes;
gint attributes_mask;
-
+
g_return_if_fail (widget != NULL);
g_return_if_fail (GTK_IS_CALENDAR (widget));
-
+
calendar = GTK_CALENDAR (widget);
/* Week number window -------------------------------- */
if (calendar->display_flags & GTK_CALENDAR_SHOW_WEEK_NUMBERS)
@@ -884,7 +902,7 @@ gtk_calendar_realize_week_numbers (GtkWidget *widget)
attributes.visual = gtk_widget_get_visual (widget);
attributes.colormap = gtk_widget_get_colormap (widget);
attributes.event_mask = gtk_widget_get_events (widget) | GDK_EXPOSURE_MASK;
-
+
attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;
attributes.x = + (widget->style->klass->xthickness + INNER_BORDER);
attributes.y = (calendar->header_h + calendar->day_name_h
@@ -901,22 +919,21 @@ gtk_calendar_realize_week_numbers (GtkWidget *widget)
calendar->week_win = NULL;
}
-
static void
gtk_calendar_realize (GtkWidget *widget)
{
GtkCalendar *calendar;
GdkWindowAttr attributes;
gint attributes_mask;
-
+
g_return_if_fail (widget != NULL);
g_return_if_fail (GTK_IS_CALENDAR (widget));
-
+
calendar = GTK_CALENDAR (widget);
-
+
GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED);
gtk_calendar_compute_days (calendar);
-
+
attributes.x = widget->allocation.x;
attributes.y = widget->allocation.y;
attributes.width = widget->allocation.width;
@@ -927,24 +944,24 @@ gtk_calendar_realize (GtkWidget *widget)
| GDK_EXPOSURE_MASK |GDK_KEY_PRESS_MASK);
attributes.visual = gtk_widget_get_visual (widget);
attributes.colormap = gtk_widget_get_colormap (widget);
-
+
attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;
widget->window = gdk_window_new (widget->parent->window,
&attributes, attributes_mask);
-
+
widget->style = gtk_style_attach (widget->style, widget->window);
-
+
/* Header window ------------------------------------- */
gtk_calendar_realize_header (widget);
- /* Day names window --------------------------------- */
+ /* Day names window --------------------------------- */
gtk_calendar_realize_day_names (widget);
/* Week number window -------------------------------- */
gtk_calendar_realize_week_numbers (widget);
- /* Main Window -------------------------------------- */
+ /* Main Window -------------------------------------- */
attributes.event_mask = (gtk_widget_get_events (widget) | GDK_EXPOSURE_MASK
| GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK
| GDK_POINTER_MOTION_MASK | GDK_LEAVE_NOTIFY_MASK);
-
+
if (calendar->display_flags & GTK_CALENDAR_SHOW_WEEK_NUMBERS)
attributes.x = calendar->week_width;
else
@@ -961,7 +978,7 @@ gtk_calendar_realize (GtkWidget *widget)
gdk_window_set_background (widget->window, BACKGROUND_COLOR (widget));
gdk_window_show (widget->window);
gdk_window_set_user_data (widget->window, widget);
-
+
/* Set widgets gc */
calendar->gc = gdk_gc_new (widget->window);
}
@@ -971,12 +988,12 @@ gtk_calendar_unrealize (GtkWidget *widget)
{
GtkCalendar *calendar;
gint i;
-
+
g_return_if_fail (widget != NULL);
g_return_if_fail (GTK_IS_CALENDAR (widget));
-
+
calendar = GTK_CALENDAR (widget);
-
+
if (calendar->header_win)
{
for (i=0; i<4; i++)
@@ -990,27 +1007,27 @@ gtk_calendar_unrealize (GtkWidget *widget)
gdk_window_destroy (calendar->header_win);
calendar->header_win = NULL;
}
-
+
if (calendar->week_win)
{
gdk_window_set_user_data (calendar->week_win, NULL);
gdk_window_destroy (calendar->week_win);
calendar->week_win = NULL;
}
-
+
if (calendar->main_win)
{
gdk_window_set_user_data (calendar->main_win, NULL);
gdk_window_destroy (calendar->main_win);
calendar->main_win = NULL;
}
-
+
if (GTK_WIDGET_CLASS (parent_class)->unrealize)
(* GTK_WIDGET_CLASS (parent_class)->unrealize) (widget);
}
static void
-gtk_calendar_size_request (GtkWidget *widget,
+gtk_calendar_size_request (GtkWidget *widget,
GtkRequisition *requisition)
{
GtkCalendar *calendar;
@@ -1019,23 +1036,20 @@ gtk_calendar_size_request (GtkWidget *widget,
gchar buffer[255];
gint calendar_margin = CALENDAR_MARGIN;
gint header_width, main_width;
- gint day_font_lbearing;
- gint day_font_rbearing;
- gint day_font_width;
gint lbearing;
gint rbearing;
gint ascent;
gint descent;
gint width;
-
+
calendar = GTK_CALENDAR (widget);
-
+
/*
- * Calculate the requisition width for the widget.
+ * Calculate the requisition width for the widget.
*/
-
+
/* Header width */
-
+
if (calendar->display_flags & GTK_CALENDAR_SHOW_HEADING)
{
calendar->max_month_width = 0;
@@ -1043,7 +1057,7 @@ gtk_calendar_size_request (GtkWidget *widget,
calendar->max_month_width = MAX (calendar->max_month_width,
gdk_string_measure (HEADER_FONT (widget),
default_monthname[i]) + 8);
-
+
calendar->max_year_width = 0;
for (i=0; i<10; i++)
{
@@ -1058,16 +1072,16 @@ gtk_calendar_size_request (GtkWidget *widget,
calendar->max_month_width = 0;
calendar->max_year_width = 0;
}
-
+
if (calendar->display_flags & GTK_CALENDAR_NO_MONTH_CHANGE)
header_width = (calendar->max_month_width + calendar->max_year_width
+ 3 * 3);
else
header_width = (calendar->max_month_width + calendar->max_year_width
+ 4 * calendar->arrow_width + 3 * 3);
-
+
/* Mainwindow labels width */
-
+
calendar->max_day_char_width = 0;
for (i = 0; i < 9; i++)
{
@@ -1078,7 +1092,7 @@ gtk_calendar_size_request (GtkWidget *widget,
}
/* We add one to max_day_char_width to be able to make the marked day "bold" */
calendar->max_day_char_width = calendar->min_day_width / 2 +1;
-
+
if (calendar->display_flags & GTK_CALENDAR_SHOW_DAY_NAMES)
for (i = 0; i < 7; i++)
{
@@ -1096,7 +1110,7 @@ gtk_calendar_size_request (GtkWidget *widget,
calendar->max_label_char_descent = MAX (calendar->max_label_char_descent
, descent);
}
-
+
calendar->max_week_char_width = 0;
if (calendar->display_flags & GTK_CALENDAR_SHOW_WEEK_NUMBERS)
for (i = 0; i < 9; i++)
@@ -1105,26 +1119,26 @@ gtk_calendar_size_request (GtkWidget *widget,
calendar->max_week_char_width = MAX (calendar->max_week_char_width,
gdk_string_measure (LABEL_FONT (widget), buffer) / 2);
}
-
+
main_width = (7 * (calendar->min_day_width + DAY_XPAD * 2) + (DAY_XSEP * 6) + CALENDAR_MARGIN * 2
+ (calendar->max_week_char_width
? calendar->max_week_char_width * 2 + DAY_XPAD * 2 + CALENDAR_XSEP * 2
: 0));
-
-
+
+
requisition->width = MAX (header_width, main_width + (widget->style->klass->xthickness + INNER_BORDER) *2);
-
+
/*
* Calculate the requisition height for the widget.
*/
-
+
if (calendar->display_flags & GTK_CALENDAR_SHOW_HEADING)
calendar->header_h = (HEADER_FONT (widget)->ascent + HEADER_FONT (widget)->descent
+ CALENDAR_YSEP * 2);
else
calendar->header_h = 0;
-
-
+
+
if (calendar->display_flags & GTK_CALENDAR_SHOW_DAY_NAMES)
{
calendar->day_name_h = (calendar->max_label_char_ascent
@@ -1134,25 +1148,25 @@ gtk_calendar_size_request (GtkWidget *widget,
}
else
calendar->day_name_h = 0;
-
+
gdk_text_extents (DAY_FONT (widget),
- "0123456789",
- 10,
- &lbearing,
- &rbearing,
- &width,
- &calendar->max_day_char_ascent,
- &calendar->max_day_char_descent);
-
+ "0123456789",
+ 10,
+ &lbearing,
+ &rbearing,
+ &width,
+ &calendar->max_day_char_ascent,
+ &calendar->max_day_char_descent);
+
calendar->main_h = (CALENDAR_MARGIN + calendar_margin
+ 6 * (calendar->max_day_char_ascent
+ calendar->max_day_char_descent + DAY_YPAD * 2)
+ DAY_YSEP * 5);
-
+
/*
* If we display weeknumbers we need some extra space
*/
-
+
if (calendar->display_flags & GTK_CALENDAR_SHOW_WEEK_NUMBERS)
calendar->main_h = MAX (calendar->main_h,
(CALENDAR_MARGIN + calendar_margin
@@ -1160,26 +1174,26 @@ gtk_calendar_size_request (GtkWidget *widget,
+ calendar->max_day_char_descent
+ DAY_YPAD * 2)
+ DAY_YSEP * 5));
-
+
height = calendar->header_h + calendar->day_name_h + calendar->main_h;
-
+
requisition->height = height + (widget->style->klass->ythickness + INNER_BORDER) * 2;
}
static void
-gtk_calendar_size_allocate (GtkWidget *widget,
+gtk_calendar_size_allocate (GtkWidget *widget,
GtkAllocation *allocation)
{
GtkCalendar *calendar;
-
+
g_return_if_fail (widget != NULL);
g_return_if_fail (GTK_IS_CALENDAR (widget));
g_return_if_fail (allocation != NULL);
-
+
widget->allocation = *allocation;
-
+
calendar = GTK_CALENDAR (widget);
-
+
if (calendar->display_flags & GTK_CALENDAR_SHOW_WEEK_NUMBERS)
{
calendar->day_width = (calendar->min_day_width
@@ -1198,12 +1212,12 @@ gtk_calendar_size_allocate (GtkWidget *widget,
- (DAY_XSEP * 7))/7;
calendar->week_width = 0;
}
-
+
if (GTK_WIDGET_REALIZED (widget))
{
gdk_window_move_resize (widget->window,
allocation->x, allocation->y,
- allocation->width, allocation->height);
+ allocation->width, allocation->height);
if (calendar->header_win)
gdk_window_move_resize (calendar->header_win,
0, 0,
@@ -1255,8 +1269,6 @@ gtk_calendar_size_allocate (GtkWidget *widget,
}
}
-
-
static void
gtk_calendar_draw_focus (GtkWidget *widget)
{
@@ -1274,13 +1286,13 @@ gtk_calendar_draw_focus (GtkWidget *widget)
y = 0;
gdk_window_get_size (widget->window, &width, &height);
gdk_window_clear (widget->window);
-
+
if (calendar->display_flags & GTK_CALENDAR_SHOW_HEADING)
{
y += calendar->header_h;
height -= calendar->header_h;
}
-
+
if (GTK_WIDGET_HAS_FOCUS (widget))
{
x += 1;
@@ -1309,79 +1321,78 @@ gtk_calendar_draw_focus (GtkWidget *widget)
}
static gint
-gtk_calendar_expose (GtkWidget *widget,
- GdkEventExpose *event)
+gtk_calendar_expose (GtkWidget *widget,
+ GdkEventExpose *event)
{
GtkCalendar *calendar;
-
+
g_return_val_if_fail (widget != NULL, FALSE);
g_return_val_if_fail (GTK_IS_CALENDAR (widget), FALSE);
g_return_val_if_fail (event != NULL, FALSE);
-
+
calendar = GTK_CALENDAR (widget);
-
+
if (GTK_WIDGET_DRAWABLE (widget))
{
if (event->window == calendar->main_win)
gtk_calendar_paint_main (widget);
-
+
if (event->window == calendar->header_win)
gtk_calendar_paint_header (widget);
-
+
if (event->window == calendar->day_name_win)
gtk_calendar_paint_day_names (widget);
-
+
if (event->window == calendar->week_win)
gtk_calendar_paint_week_numbers (widget);
if (event->window == widget->window)
gtk_widget_draw_focus (widget);
}
-
+
return FALSE;
}
static void
-gtk_calendar_draw (GtkWidget *widget,
- GdkRectangle *area)
+gtk_calendar_draw (GtkWidget *widget,
+ GdkRectangle *area)
{
g_return_if_fail (widget != NULL);
g_return_if_fail (GTK_IS_CALENDAR (widget));
g_return_if_fail (area != NULL);
-
+
if (GTK_WIDGET_DRAWABLE (widget))
gtk_calendar_paint (widget, area);
-
+
}
-
static void
-gtk_calendar_paint (GtkWidget *widget,
- GdkRectangle *area)
+gtk_calendar_paint (GtkWidget *widget,
+ GdkRectangle *area)
{
GtkCalendar *calendar;
-
+
g_return_if_fail (widget != NULL);
g_return_if_fail (widget->window != NULL);
g_return_if_fail (GTK_IS_CALENDAR (widget));
-
+
calendar = GTK_CALENDAR (widget);
-
+
if (calendar->main_win != NULL)
gtk_calendar_paint_main (widget);
-
+
if (calendar->header_win != NULL)
gtk_calendar_paint_header (widget);
-
+
if (calendar->day_name_win != NULL)
gtk_calendar_paint_day_names (widget);
-
+
if (calendar->week_win != NULL)
gtk_calendar_paint_week_numbers (widget);
-
+
gtk_widget_draw_focus (widget);
}
-void
+static void
gtk_calendar_paint_header (GtkWidget *widget)
{
GtkCalendar *calendar;
@@ -1392,7 +1403,7 @@ gtk_calendar_paint_header (GtkWidget *widget)
gint str_width;
gint max_month_width;
gint max_year_width;
-
+
calendar = GTK_CALENDAR (widget);
if (calendar->frozen)
{
@@ -1401,27 +1412,27 @@ gtk_calendar_paint_header (GtkWidget *widget)
}
calendar->dirty_header = 0;
gc = calendar->gc;
-
+
/* Clear window */
gdk_window_clear (calendar->header_win);
-
+
cal_width = widget->allocation.width;
cal_height = widget->allocation.height;
-
+
max_month_width = calendar->max_month_width;
max_year_width = calendar->max_year_width;
-
+
gdk_gc_set_foreground (gc, BACKGROUND_COLOR (GTK_WIDGET (calendar)));
gtk_draw_shadow (widget->style, calendar->header_win,
- GTK_STATE_NORMAL, GTK_SHADOW_OUT,
+ GTK_STATE_NORMAL, GTK_SHADOW_OUT,
0, 0, cal_width, calendar->header_h);
-
+
/* Draw title */
y = calendar->header_h - (calendar->header_h - HEADER_FONT (widget)->ascent
+ HEADER_FONT (widget)->descent) / 2;
y_arrow = (calendar->header_h - 9) / 2;
-
+
/* Draw year and its arrows */
sprintf (buffer, "%d", calendar->year);
str_width = gdk_string_measure (HEADER_FONT (widget), buffer);
@@ -1436,7 +1447,7 @@ gtk_calendar_paint_header (GtkWidget *widget)
cal_width - (3 + calendar->arrow_width + max_year_width
- (max_year_width - str_width)/2),
y, buffer);
-
+
/* Draw month */
sprintf (buffer, "%s", default_monthname[calendar->month]);
str_width = gdk_string_measure (HEADER_FONT (widget), buffer);
@@ -1448,19 +1459,19 @@ gtk_calendar_paint_header (GtkWidget *widget)
gdk_draw_string (calendar->header_win, HEADER_FONT (widget), gc,
3 + calendar->arrow_width + (max_month_width - str_width)/2,
y, buffer);
-
+
y += CALENDAR_YSEP + HEADER_FONT (widget)->descent;
-
+
gdk_gc_set_foreground (gc, BACKGROUND_COLOR (GTK_WIDGET (calendar)));
-
+
gtk_calendar_paint_arrow (widget, ARROW_MONTH_LEFT);
gtk_calendar_paint_arrow (widget, ARROW_MONTH_RIGHT);
gtk_calendar_paint_arrow (widget, ARROW_YEAR_LEFT);
gtk_calendar_paint_arrow (widget, ARROW_YEAR_RIGHT);
-
+
}
-void
+static void
gtk_calendar_paint_day_names (GtkWidget *widget)
{
GtkCalendar *calendar;
@@ -1471,57 +1482,57 @@ gtk_calendar_paint_day_names (GtkWidget *widget)
gint cal_height;
int day_wid_sep;
int str_width;
-
+
g_return_if_fail (widget != NULL);
g_return_if_fail (GTK_IS_CALENDAR (widget));
calendar = GTK_CALENDAR (widget);
gc = calendar->gc;
-
+
/*
* Handle freeze/thaw functionality
*/
-
+
if (calendar->frozen)
{
calendar->dirty_day_names = 1;
return;
}
calendar->dirty_day_names = 0;
-
+
/*
* Clear the window
*/
-
+
gdk_window_clear (calendar->day_name_win);
-
+
day_width = calendar->day_width;
cal_width = widget->allocation.width;
cal_height = widget->allocation.height;
day_wid_sep = day_width + DAY_XSEP;
-
+
/*
* Draw rectangles as inverted background for the labels.
*/
-
+
gdk_gc_set_foreground (gc, DAY_NAME_COLOR (GTK_WIDGET (calendar)));
gdk_gc_set_background (gc, DAY_NAME_COLOR (GTK_WIDGET (calendar)));
gdk_draw_rectangle (calendar->day_name_win, gc, TRUE,
CALENDAR_MARGIN, CALENDAR_MARGIN,
cal_width-CALENDAR_MARGIN * 2,
calendar->day_name_h - CALENDAR_MARGIN);
-
-
+
+
if (calendar->display_flags & GTK_CALENDAR_SHOW_WEEK_NUMBERS)
gdk_draw_rectangle (calendar->day_name_win, gc, TRUE,
CALENDAR_MARGIN,
calendar->day_name_h - CALENDAR_YSEP,
calendar->week_width - CALENDAR_YSEP - CALENDAR_MARGIN,
CALENDAR_YSEP);
-
+
/*
* Write the labels
*/
-
+
gdk_gc_set_foreground (gc, BACKGROUND_COLOR ( GTK_WIDGET (calendar)));
for (i = 0; i < 7; i++)
{
@@ -1531,7 +1542,7 @@ gtk_calendar_paint_day_names (GtkWidget *widget)
sprintf (buffer, "%s", default_abbreviated_dayname[day]);
str_width = gdk_string_measure (LABEL_FONT (widget), buffer);
gdk_draw_string (calendar->day_name_win, LABEL_FONT (widget),
- gc,
+ gc,
((calendar->week_width ? CALENDAR_XSEP : CALENDAR_MARGIN)
+ day_wid_sep * i
+ calendar->week_width
@@ -1541,7 +1552,7 @@ gtk_calendar_paint_day_names (GtkWidget *widget)
}
}
-void
+static void
gtk_calendar_paint_week_numbers (GtkWidget *widget)
{
GtkCalendar *calendar;
@@ -1550,34 +1561,34 @@ gtk_calendar_paint_week_numbers (GtkWidget *widget)
gint x_loc;
char buffer[3];
gint y_baseline, day_height;
-
+
g_return_if_fail (widget != NULL);
g_return_if_fail (widget->window != NULL);
g_return_if_fail (GTK_IS_CALENDAR (widget));
calendar = GTK_CALENDAR (widget);
gc = calendar->gc;
-
+
/*
* Handle freeze/thaw functionality
*/
-
+
if (calendar->frozen)
{
calendar->dirty_week = 1;
return;
}
calendar->dirty_week = 0;
-
+
/*
* Clear the window
*/
-
+
gdk_window_clear (calendar->week_win);
-
+
/*
* Draw a rectangle as inverted background for the labels.
*/
-
+
gdk_gc_set_foreground (gc, DAY_NAME_COLOR (GTK_WIDGET (calendar)));
gdk_gc_set_background (gc, DAY_NAME_COLOR (GTK_WIDGET (calendar)));
if (calendar->day_name_win)
@@ -1592,11 +1603,11 @@ gtk_calendar_paint_week_numbers (GtkWidget *widget)
CALENDAR_MARGIN,
calendar->week_width - CALENDAR_MARGIN - CALENDAR_XSEP,
calendar->main_h - 2 * CALENDAR_MARGIN);
-
+
/*
* Write the labels
*/
-
+
gdk_gc_set_foreground (gc, BACKGROUND_COLOR (GTK_WIDGET (calendar)));
day_height = row_height (calendar);
for (row = 0; row < 6; row++)
@@ -1614,14 +1625,14 @@ gtk_calendar_paint_week_numbers (GtkWidget *widget)
- DAY_XPAD * 2 - CALENDAR_MARGIN ) / 2
- calendar->max_week_char_width
- CALENDAR_XSEP - DAY_XPAD);
-
+
if (week > 9)
{
sprintf (buffer, "%d", week/10);
gdk_draw_string (calendar->week_win, LABEL_FONT (widget), gc,
x_loc, y_baseline , buffer);
}
-
+
sprintf (buffer, "%d", week%10);
gdk_draw_string (calendar->week_win, LABEL_FONT (widget), gc,
x_loc + calendar->max_week_char_width, y_baseline , buffer);
@@ -1629,16 +1640,17 @@ gtk_calendar_paint_week_numbers (GtkWidget *widget)
}
static void
-gtk_calendar_paint_day_num (GtkWidget *widget, gint day)
+gtk_calendar_paint_day_num (GtkWidget *widget,
+ gint day)
{
GtkCalendar *calendar;
gint r, c, row, col;
-
+
g_return_if_fail (widget != NULL);
g_return_if_fail (GTK_IS_CALENDAR (widget));
-
+
calendar = GTK_CALENDAR (widget);
-
+
row = -1;
col = -1;
for (r = 0; r < 6; r++)
@@ -1649,16 +1661,17 @@ gtk_calendar_paint_day_num (GtkWidget *widget, gint day)
row = r;
col = c;
}
-
+
g_return_if_fail (row != -1);
g_return_if_fail (col != -1);
-
+
gtk_calendar_paint_day (widget, row, col);
}
-
static void
-gtk_calendar_paint_day (GtkWidget *widget, gint row, gint col)
+gtk_calendar_paint_day (GtkWidget *widget,
+ gint row,
+ gint col)
{
GtkCalendar *calendar;
GdkGC *gc;
@@ -1670,40 +1683,40 @@ gtk_calendar_paint_day (GtkWidget *widget, gint row, gint col)
gint y_top;
gint y_baseline;
gint day_xspace;
-
+
g_return_if_fail (widget != NULL);
g_return_if_fail (GTK_IS_CALENDAR (widget));
g_return_if_fail (row < 6);
g_return_if_fail (col < 7);
calendar = GTK_CALENDAR (widget);
-
+
/*
* Handle freeze/thaw functionality
*/
-
+
if (calendar->frozen)
{
calendar->dirty_main = 1;
return;
}
-
+
day_height = row_height (calendar);
-
+
day_xspace = calendar->day_width - calendar->max_day_char_width*2;
-
+
day = calendar->day[row][col];
-
+
x_left = left_x_for_column (calendar, col);
x_loc = x_left + calendar->day_width / 2 + calendar->max_day_char_width;
-
+
y_top = top_y_for_row (calendar, row);
y_baseline = y_top + (day_height + calendar->max_day_char_ascent)/2;
-
+
gdk_window_clear_area (calendar->main_win, x_left, y_top,
calendar->day_width, day_height);
-
+
gc = calendar->gc;
-
+
if (calendar->day_month[row][col] == MONTH_PREV)
{
gdk_gc_set_foreground (gc, PREV_MONTH_COLOR (GTK_WIDGET (calendar)));
@@ -1726,13 +1739,13 @@ gtk_calendar_paint_day (GtkWidget *widget, gint row, gint col)
if (GTK_WIDGET_HAS_FOCUS (widget))
gdk_gc_set_foreground (gc, SELECTION_FOCUS_COLOR (GTK_WIDGET (calendar)));
else
- gdk_gc_set_foreground (gc, SELECTION_NO_FOCUS_COLOR (GTK_WIDGET (calendar)));
+ gdk_gc_set_foreground (gc, SELECTION_NO_FOCUS_COLOR (GTK_WIDGET (calendar)));
gdk_draw_rectangle (calendar->main_win, gc, FALSE, x_left, y_top,
- calendar->day_width-1, day_height-1);
+ calendar->day_width-1, day_height-1);
}
if (calendar->marked_date[day-1])
- gdk_gc_set_foreground (gc, MARKED_COLOR (GTK_WIDGET (calendar)));
+ gdk_gc_set_foreground (gc, MARKED_COLOR (GTK_WIDGET (calendar)));
else
gdk_gc_set_foreground (gc, NORMAL_DAY_COLOR (GTK_WIDGET (calendar)));
}
@@ -1741,8 +1754,8 @@ gtk_calendar_paint_day (GtkWidget *widget, gint row, gint col)
x_loc -= gdk_string_measure (DAY_FONT (widget), buffer);
sprintf (buffer, "%d", day);
gdk_draw_string (calendar->main_win,
- DAY_FONT (widget), gc,
- x_loc, y_baseline, buffer);
+ DAY_FONT (widget), gc,
+ x_loc, y_baseline, buffer);
if (calendar->marked_date[day-1])
gdk_draw_string (calendar->main_win,
DAY_FONT (widget), gc,
@@ -1750,16 +1763,16 @@ gtk_calendar_paint_day (GtkWidget *widget, gint row, gint col)
}
-void
+static void
gtk_calendar_paint_main (GtkWidget *widget)
{
GtkCalendar *calendar;
gint row, col;
-
+
g_return_if_fail (widget != NULL);
g_return_if_fail (widget->window != NULL);
g_return_if_fail (GTK_IS_CALENDAR (widget));
-
+
calendar = GTK_CALENDAR (widget);
if (calendar->frozen)
{
@@ -1768,9 +1781,9 @@ gtk_calendar_paint_main (GtkWidget *widget)
}
calendar->dirty_main = 0;
gdk_window_clear (calendar->main_win);
-
- // gtk_calendar_compute_days (calendar); /* REMOVE later */
-
+
+ /* gtk_calendar_compute_days (calendar); */ /* REMOVE later */
+
for (col = 0; col < 7; col++)
for (row = 0; row < 6; row++)
gtk_calendar_paint_day (widget, row, col);
@@ -1787,30 +1800,30 @@ gtk_calendar_compute_days (GtkCalendar *calendar)
gint row;
gint col;
gint day;
-
+
g_return_if_fail (calendar != NULL);
g_return_if_fail (GTK_IS_CALENDAR (calendar));
-
+
year = calendar->year;
month = calendar->month + 1;
-
+
ndays_in_month = month_length[leap (year)][month];
-
+
first_day = day_of_week (year, month, 1);
-
+
if (calendar->display_flags & GTK_CALENDAR_WEEK_START_MONDAY)
first_day--;
else
first_day %= 7;
-
-
+
+
/* Compute days of previous month */
if (month > 1)
ndays_in_prev_month = month_length[leap (year)][month-1];
else
ndays_in_prev_month = month_length[leap (year)][12];
day = ndays_in_prev_month - first_day + 1;
-
+
row = 0;
if (first_day > 0)
{
@@ -1821,14 +1834,14 @@ gtk_calendar_compute_days (GtkCalendar *calendar)
day++;
}
}
-
+
/* Compute days of current month */
col = first_day;
for (day = 1; day <= ndays_in_month; day++)
{
calendar->day[row][col] = day;
calendar->day_month[row][col] = MONTH_CURRENT;
-
+
col++;
if (col == 7)
{
@@ -1836,7 +1849,7 @@ gtk_calendar_compute_days (GtkCalendar *calendar)
col = 0;
}
}
-
+
/* Compute days of next month */
day = 1;
for (; row <= 5; row++)
@@ -1854,27 +1867,29 @@ gtk_calendar_compute_days (GtkCalendar *calendar)
/* ----------------------------------------------------------------------
NAME: gtk_calendar_display_options
DESCRIPTION: Set display options (whether to display the
- heading and the month headings)
-
- flags is can be an XOR of:
- GTK_CALENDAR_SHOW_HEADING
- GTK_CALENDAR_SHOW_DAY_NAMES
- GTK_CALENDAR_NO_MONTH_CHANGE
- GTK_CALENDAR_SHOW_WEEK_NUMBERS
- GTK_CALENDAR_WEEK_START_MONDAY
+ heading and the month headings)
+
+ flags is can be an XOR of:
+ GTK_CALENDAR_SHOW_HEADING
+ GTK_CALENDAR_SHOW_DAY_NAMES
+ GTK_CALENDAR_NO_MONTH_CHANGE
+ GTK_CALENDAR_SHOW_WEEK_NUMBERS
+ GTK_CALENDAR_WEEK_START_MONDAY
---------------------------------------------------------------------- */
-void gtk_calendar_display_options (GtkCalendar *calendar,
- GtkCalendarDisplayOptions flags)
+void
+gtk_calendar_display_options (GtkCalendar *calendar,
+ GtkCalendarDisplayOptions flags)
{
gint resize = 0;
GtkWidget *widget;
gint i;
-
+
+ g_return_if_fail (calendar != NULL);
g_return_if_fail (GTK_IS_CALENDAR (calendar));
- g_return_if_fail (GTK_IS_WIDGET (calendar));
+
widget = GTK_WIDGET (calendar);
-
+
if (GTK_WIDGET_REALIZED (widget))
{
if ((flags ^ calendar->display_flags) & GTK_CALENDAR_NO_MONTH_CHANGE)
@@ -1897,11 +1912,11 @@ void gtk_calendar_display_options (GtkCalendar *calendar,
}
}
}
-
+
if ((flags ^ calendar->display_flags) & GTK_CALENDAR_SHOW_HEADING)
{
resize++;
-
+
if (flags & GTK_CALENDAR_SHOW_HEADING)
{
calendar->display_flags |= GTK_CALENDAR_SHOW_HEADING;
@@ -1921,12 +1936,12 @@ void gtk_calendar_display_options (GtkCalendar *calendar,
calendar->header_win = NULL;
}
}
-
-
+
+
if ((flags ^ calendar->display_flags) & GTK_CALENDAR_SHOW_DAY_NAMES)
{
resize++;
-
+
if (flags & GTK_CALENDAR_SHOW_DAY_NAMES)
{
calendar->display_flags |= GTK_CALENDAR_SHOW_DAY_NAMES;
@@ -1939,11 +1954,11 @@ void gtk_calendar_display_options (GtkCalendar *calendar,
calendar->day_name_win = NULL;
}
}
-
+
if ((flags ^ calendar->display_flags) & GTK_CALENDAR_SHOW_WEEK_NUMBERS)
{
resize++;
-
+
if (flags & GTK_CALENDAR_SHOW_WEEK_NUMBERS)
{
calendar->display_flags |= GTK_CALENDAR_SHOW_WEEK_NUMBERS;
@@ -1956,58 +1971,62 @@ void gtk_calendar_display_options (GtkCalendar *calendar,
calendar->week_win = NULL;
}
}
-
+
if ((flags ^ calendar->display_flags) & GTK_CALENDAR_WEEK_START_MONDAY)
{
if (calendar->display_flags & GTK_CALENDAR_WEEK_START_MONDAY)
calendar->display_flags &= ~GTK_CALENDAR_WEEK_START_MONDAY;
else
calendar->display_flags |= GTK_CALENDAR_WEEK_START_MONDAY;
-
+
gtk_calendar_compute_days (calendar);
gtk_calendar_paint_main (GTK_WIDGET (calendar));
if (calendar->day_name_win)
gtk_calendar_paint_day_names (GTK_WIDGET (calendar));
}
-
+
calendar->display_flags = flags;
if (resize)
gtk_widget_queue_resize (GTK_WIDGET (calendar));
-
+
}
else
calendar->display_flags = flags;
-
+
}
gint
-gtk_calendar_select_month (GtkCalendar *calendar, gint month, gint year)
+gtk_calendar_select_month (GtkCalendar *calendar,
+ guint month,
+ guint year)
{
g_return_val_if_fail (calendar != NULL, FALSE);
- g_return_val_if_fail (month >= 0 && month <= 11, FALSE);
g_return_val_if_fail (GTK_IS_CALENDAR (calendar), FALSE);
-
+ g_return_val_if_fail (month <= 11, FALSE);
+
calendar->month = month;
calendar->year = year;
-
+
gtk_calendar_compute_days (calendar);
-
+
if (GTK_WIDGET_DRAWABLE (GTK_WIDGET (calendar)))
gtk_calendar_paint (GTK_WIDGET (calendar), NULL);
-
+
gtk_signal_emit (GTK_OBJECT (calendar),
- gtk_calendar_signals[MONTH_CHANGED_SIGNAL]);
+ gtk_calendar_signals[MONTH_CHANGED_SIGNAL]);
return TRUE;
}
void
-gtk_calendar_select_day (GtkCalendar *calendar, gint day)
+gtk_calendar_select_day (GtkCalendar *calendar,
+ guint day)
{
g_return_if_fail (calendar != NULL);
- g_return_if_fail (GTK_IS_CALENDAR(calendar));
+ g_return_if_fail (GTK_IS_CALENDAR (calendar));
+ g_return_if_fail (day <= 31);
+
+ /* gtk_calendar_compute_days (calendar); */
- // gtk_calendar_compute_days (calendar);
-
/* Deselect the old day */
if (calendar->selected_day > 0)
{
@@ -2018,137 +2037,147 @@ gtk_calendar_select_day (GtkCalendar *calendar, gint day)
if (GTK_WIDGET_DRAWABLE (GTK_WIDGET (calendar)))
gtk_calendar_paint_day_num (GTK_WIDGET (calendar), selected_day);
}
-
+
calendar->selected_day = day;
-
+
/* Deselect the new day */
if (day != 0)
{
if (GTK_WIDGET_DRAWABLE (GTK_WIDGET (calendar)))
- gtk_calendar_paint_day_num (GTK_WIDGET (calendar), day);
+ gtk_calendar_paint_day_num (GTK_WIDGET (calendar), day);
}
-
+
gtk_signal_emit (GTK_OBJECT (calendar),
- gtk_calendar_signals[DAY_SELECTED_SIGNAL]);
+ gtk_calendar_signals[DAY_SELECTED_SIGNAL]);
}
void
gtk_calendar_clear_marks (GtkCalendar *calendar)
{
- gint day;
-
+ guint day;
+
g_return_if_fail (calendar != NULL);
-
- for (day = 0; day < 31; day ++)
+ g_return_if_fail (GTK_IS_CALENDAR (calendar));
+
+ for (day = 0; day < 31; day++)
{
calendar->marked_date[day] = FALSE;
}
-
- if (GTK_WIDGET_DRAWABLE (GTK_WIDGET (calendar)))
+
+ if (GTK_WIDGET_DRAWABLE (calendar))
{
gtk_calendar_paint_main (GTK_WIDGET (calendar));
}
}
gint
-gtk_calendar_mark_day (GtkCalendar *calendar, gint day)
+gtk_calendar_mark_day (GtkCalendar *calendar,
+ guint day)
{
g_return_val_if_fail (calendar != NULL, FALSE);
-
- if (day>=1 && day <=31)
- calendar->marked_date[day-1] = TRUE;
-
+ g_return_val_if_fail (GTK_IS_CALENDAR (calendar), FALSE);
+
+ if (day >= 1 && day <= 31)
+ calendar->marked_date[day - 1] = TRUE;
+
if (GTK_WIDGET_DRAWABLE (GTK_WIDGET (calendar)))
{
gtk_calendar_paint_main (GTK_WIDGET (calendar));
}
+
return TRUE;
}
gint
-gtk_calendar_unmark_day (GtkCalendar *calendar, gint day)
+gtk_calendar_unmark_day (GtkCalendar *calendar,
+ guint day)
{
g_return_val_if_fail (calendar != NULL, FALSE);
-
- if (day>=1 && day <=31)
- calendar->marked_date[day-1] = FALSE;
-
+ g_return_val_if_fail (GTK_IS_CALENDAR (calendar), FALSE);
+
+ if (day >= 1 && day <= 31)
+ calendar->marked_date[day - 1] = FALSE;
+
if (GTK_WIDGET_DRAWABLE (GTK_WIDGET (calendar)))
{
gtk_calendar_paint_main (GTK_WIDGET (calendar));
}
+
return TRUE;
}
void
-gtk_calendar_get_date (GtkCalendar *calendar, gint *year, gint *month, gint *day)
+gtk_calendar_get_date (GtkCalendar *calendar,
+ guint *year,
+ guint *month,
+ guint *day)
{
g_return_if_fail (calendar != NULL);
g_return_if_fail (GTK_IS_CALENDAR (calendar));
-
+
if (year)
*year = calendar->year;
-
+
if (month)
*month = calendar->month;
-
+
if (day)
*day = calendar->selected_day;
}
static gint
-gtk_calendar_button_press (GtkWidget *widget,
+gtk_calendar_button_press (GtkWidget *widget,
GdkEventButton *event)
{
GtkCalendar *calendar;
gint x, y;
-
+
g_return_val_if_fail (widget != NULL, FALSE);
g_return_val_if_fail (GTK_IS_CALENDAR (widget), FALSE);
g_return_val_if_fail (event != NULL, FALSE);
-
+
calendar = GTK_CALENDAR (widget);
-
+
x = (gint) (event->x);
y = (gint) (event->y);
-
+
if (event->window == calendar->arrow_win[ARROW_MONTH_LEFT])
gtk_calendar_set_month_prev (calendar);
-
+
if (event->window == calendar->arrow_win[ARROW_MONTH_RIGHT])
gtk_calendar_set_month_next (calendar);
-
+
if (event->window == calendar->arrow_win[ARROW_YEAR_LEFT])
gtk_calendar_set_year_prev (calendar);
-
+
if (event->window == calendar->arrow_win[ARROW_YEAR_RIGHT])
gtk_calendar_set_year_next (calendar);
-
+
if (event->window == calendar->main_win)
gtk_calendar_main_button (widget, event);
-
+
return FALSE;
}
static gint
-gtk_calendar_motion_notify (GtkWidget *widget,
+gtk_calendar_motion_notify (GtkWidget *widget,
GdkEventMotion *event)
{
GtkCalendar *calendar;
gint event_x, event_y;
gint row, col;
gint old_row, old_col;
-
+
calendar = (GtkCalendar*) widget;
event_x = (gint) (event->x);
event_y = (gint) (event->y);
-
+
if (event->window == calendar->main_win)
{
-
+
row = row_from_y (calendar, event_y);
col = column_from_x (calendar, event_x);
-
+
if (row != calendar->highlight_row || calendar->highlight_col != col)
{
old_row = calendar->highlight_row;
@@ -2159,10 +2188,10 @@ gtk_calendar_motion_notify (GtkWidget *widget,
calendar->highlight_col = -1;
gtk_calendar_paint_day (widget, old_row, old_col);
}
-
+
calendar->highlight_row = row;
calendar->highlight_col = col;
-
+
if (row > -1 && col > -1)
gtk_calendar_paint_day (widget, row, col);
}
@@ -2171,56 +2200,56 @@ gtk_calendar_motion_notify (GtkWidget *widget,
}
static gint
-gtk_calendar_enter_notify (GtkWidget *widget,
- GdkEventCrossing *event)
+gtk_calendar_enter_notify (GtkWidget *widget,
+ GdkEventCrossing *event)
{
GtkCalendar *calendar;
-
+
g_return_val_if_fail (widget != NULL, FALSE);
g_return_val_if_fail (event != NULL, FALSE);
-
+
calendar = GTK_CALENDAR (widget);
-
+
if (event->window == calendar->arrow_win[ARROW_MONTH_LEFT])
{
calendar->arrow_state[ARROW_MONTH_LEFT] = GTK_STATE_PRELIGHT;
gtk_calendar_paint_arrow (widget, ARROW_MONTH_LEFT);
}
-
+
if (event->window == calendar->arrow_win[ARROW_MONTH_RIGHT])
{
calendar->arrow_state[ARROW_MONTH_RIGHT] = GTK_STATE_PRELIGHT;
gtk_calendar_paint_arrow (widget, ARROW_MONTH_RIGHT);
}
-
+
if (event->window == calendar->arrow_win[ARROW_YEAR_LEFT])
{
calendar->arrow_state[ARROW_YEAR_LEFT] = GTK_STATE_PRELIGHT;
gtk_calendar_paint_arrow (widget, ARROW_YEAR_LEFT);
}
-
+
if (event->window == calendar->arrow_win[ARROW_YEAR_RIGHT])
{
calendar->arrow_state[ARROW_YEAR_RIGHT] = GTK_STATE_PRELIGHT;
gtk_calendar_paint_arrow (widget, ARROW_YEAR_RIGHT);
}
-
+
return TRUE;
}
static gint
-gtk_calendar_leave_notify (GtkWidget *widget,
- GdkEventCrossing *event)
+gtk_calendar_leave_notify (GtkWidget *widget,
+ GdkEventCrossing *event)
{
GtkCalendar *calendar;
gint row;
gint col;
-
+
g_return_val_if_fail (widget != NULL, FALSE);
g_return_val_if_fail (event != NULL, FALSE);
-
+
calendar = GTK_CALENDAR (widget);
-
+
if (event->window == calendar->main_win)
{
row = calendar->highlight_row;
@@ -2230,45 +2259,46 @@ gtk_calendar_leave_notify (GtkWidget *widget,
if (row > -1 && col > -1)
gtk_calendar_paint_day (widget, row, col);
}
-
+
if (event->window == calendar->arrow_win[ARROW_MONTH_LEFT])
{
calendar->arrow_state[ARROW_MONTH_LEFT] = GTK_STATE_NORMAL;
gtk_calendar_paint_arrow (widget, ARROW_MONTH_LEFT);
}
-
+
if (event->window == calendar->arrow_win[ARROW_MONTH_RIGHT])
{
calendar->arrow_state[ARROW_MONTH_RIGHT] = GTK_STATE_NORMAL;
gtk_calendar_paint_arrow (widget, ARROW_MONTH_RIGHT);
}
-
+
if (event->window == calendar->arrow_win[ARROW_YEAR_LEFT])
{
calendar->arrow_state[ARROW_YEAR_LEFT] = GTK_STATE_NORMAL;
gtk_calendar_paint_arrow (widget, ARROW_YEAR_LEFT);
}
-
+
if (event->window == calendar->arrow_win[ARROW_YEAR_RIGHT])
{
calendar->arrow_state[ARROW_YEAR_RIGHT] = GTK_STATE_NORMAL;
gtk_calendar_paint_arrow (widget, ARROW_YEAR_RIGHT);
}
-
+
return TRUE;
}
static void
-gtk_calendar_paint_arrow (GtkWidget *widget, guint arrow)
+gtk_calendar_paint_arrow (GtkWidget *widget,
+ guint arrow)
{
GdkWindow *window;
GdkGC *gc;
GtkCalendar *calendar;
gint state;
gint width, height;
-
+
g_return_if_fail (widget != NULL);
-
+
calendar = GTK_CALENDAR (widget);
if (calendar->frozen)
{
@@ -2280,16 +2310,16 @@ gtk_calendar_paint_arrow (GtkWidget *widget, guint arrow)
{
state = calendar->arrow_state[arrow];
gc = calendar->gc;
-
+
gdk_window_clear (window);
gdk_window_set_background (window, &(widget)->style->bg[state]);
gdk_window_get_size (window, &width, &height);
gdk_window_clear_area (window,
0,0,
width,height);
-
+
gdk_gc_set_foreground (gc, & (widget)->style->fg[state]);
-
+
if (arrow == ARROW_MONTH_LEFT || arrow == ARROW_YEAR_LEFT)
draw_arrow_left (window, gc, width/2 - 3, height/2 - 4, 8);
else
@@ -2301,32 +2331,36 @@ gtk_calendar_paint_arrow (GtkWidget *widget, guint arrow)
void
gtk_calendar_freeze (GtkCalendar *calendar)
{
+ g_return_if_fail (calendar != NULL);
g_return_if_fail (GTK_IS_CALENDAR (calendar));
+
calendar->frozen++;
}
void
gtk_calendar_thaw (GtkCalendar *calendar)
{
+ g_return_if_fail (calendar != NULL);
g_return_if_fail (GTK_IS_CALENDAR (calendar));
+
if (calendar->frozen)
{
calendar->frozen--;
if (calendar->frozen)
- return;
-
+ return;
+
if (calendar->dirty_header)
if (GTK_WIDGET_DRAWABLE (calendar))
gtk_calendar_paint_header (GTK_WIDGET (calendar));
-
+
if (calendar->dirty_day_names)
if (GTK_WIDGET_DRAWABLE (calendar))
gtk_calendar_paint_day_names (GTK_WIDGET (calendar));
-
+
if (calendar->dirty_week)
if (GTK_WIDGET_DRAWABLE (calendar))
gtk_calendar_paint_week_numbers (GTK_WIDGET (calendar));
-
+
if (calendar->dirty_main)
if (GTK_WIDGET_DRAWABLE (calendar))
gtk_calendar_paint_main (GTK_WIDGET (calendar));
@@ -2334,24 +2368,26 @@ gtk_calendar_thaw (GtkCalendar *calendar)
}
static void
-gtk_calendar_set_background(GtkWidget *widget)
+gtk_calendar_set_background (GtkWidget *widget)
{
GtkCalendar *calendar;
gint i;
-
+
+ g_return_if_fail (widget != NULL);
g_return_if_fail (GTK_IS_CALENDAR (widget));
+
if (GTK_WIDGET_REALIZED (widget))
{
calendar = GTK_CALENDAR (widget);
for (i=0; i<4; i++)
if (calendar->arrow_win[i])
- gdk_window_set_background (calendar->arrow_win[i], HEADER_BG_COLOR (widget));
+ gdk_window_set_background (calendar->arrow_win[i], HEADER_BG_COLOR (widget));
if (calendar->header_win)
gdk_window_set_background (calendar->header_win, HEADER_BG_COLOR (widget));
if (calendar->day_name_win)
gdk_window_set_background (calendar->day_name_win, BACKGROUND_COLOR (widget));
if (calendar->week_win)
- gdk_window_set_background (calendar->week_win, BACKGROUND_COLOR (widget));
+ gdk_window_set_background (calendar->week_win, BACKGROUND_COLOR (widget));
if (calendar->main_win)
gdk_window_set_background (calendar->main_win, BACKGROUND_COLOR (widget));
if (widget->window)
@@ -2367,32 +2403,33 @@ gtk_calendar_style_set (GtkWidget *widget,
{
g_return_if_fail (widget != NULL);
g_return_if_fail (GTK_IS_CALENDAR (widget));
-
+
if (previous_style && GTK_WIDGET_REALIZED (widget))
gtk_calendar_set_background(widget);
}
static void
-gtk_calendar_state_changed (GtkWidget *widget,
- GtkStateType previous_state)
+gtk_calendar_state_changed (GtkWidget *widget,
+ GtkStateType previous_state)
{
g_return_if_fail (widget != NULL);
g_return_if_fail (GTK_IS_CALENDAR (widget));
-
- gtk_calendar_set_background(widget);
+
+ gtk_calendar_set_background (widget);
}
-static gint gtk_calendar_focus_in (GtkWidget *widget,
- GdkEventFocus *event)
+static gint
+gtk_calendar_focus_in (GtkWidget *widget,
+ GdkEventFocus *event)
{
GtkCalendar *calendar;
-
+
g_return_val_if_fail (widget != NULL, FALSE);
g_return_val_if_fail (GTK_IS_CALENDAR (widget), FALSE);
g_return_val_if_fail (event != NULL, FALSE);
-
+
calendar = GTK_CALENDAR (widget);
-
+
GTK_WIDGET_SET_FLAGS (widget, GTK_HAS_FOCUS);
gtk_widget_draw_focus (widget);
gtk_calendar_paint_day_num (widget, calendar->selected_day);
@@ -2401,47 +2438,46 @@ static gint gtk_calendar_focus_in (GtkWidget *widget,
if (GTK_EDITABLE(widget)->ic)
gdk_im_begin (GTK_EDITABLE(widget)->ic, GTK_ENTRY(widget)->text_area);
#endif
-
+
return FALSE;
-
}
-static gint gtk_calendar_focus_out (GtkWidget *widget,
- GdkEventFocus *event)
+static gint
+gtk_calendar_focus_out (GtkWidget *widget,
+ GdkEventFocus *event)
{
GtkCalendar *calendar;
-
+
g_return_val_if_fail (widget != NULL, FALSE);
g_return_val_if_fail (GTK_IS_CALENDAR (widget), FALSE);
g_return_val_if_fail (event != NULL, FALSE);
-
+
calendar = GTK_CALENDAR (widget);
-
+
GTK_WIDGET_UNSET_FLAGS (widget, GTK_HAS_FOCUS);
gtk_widget_draw_focus (widget);
gtk_calendar_paint_day_num (widget, calendar->selected_day);
#ifdef USE_XIM
gdk_im_end ();
#endif
-
+
return FALSE;
}
static gint
gtk_calendar_key_press (GtkWidget *widget,
- GdkEventKey *event)
+ GdkEventKey *event)
{
GtkCalendar *calendar;
gint return_val;
-
+
g_return_val_if_fail (widget != NULL, FALSE);
g_return_val_if_fail (GTK_IS_CALENDAR (widget), FALSE);
g_return_val_if_fail (event != NULL, FALSE);
-
+
calendar = GTK_CALENDAR (widget);
return_val = FALSE;
-
-
+
switch (event->keyval)
{
case GDK_Left:
@@ -2541,6 +2577,7 @@ gtk_calendar_key_press (GtkWidget *widget,
gtk_calendar_select_day (calendar, calendar->selected_day + 7);
}
break;
- }
+ }
+
return return_val;
}
diff --git a/gtk/gtkcalendar.h b/gtk/gtkcalendar.h
index b09a95d791..c49f373eff 100644
--- a/gtk/gtkcalendar.h
+++ b/gtk/gtkcalendar.h
@@ -11,39 +11,43 @@
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the Free
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
-
#ifndef __GTK_CALENDAR_H__
#define __GTK_CALENDAR_H__
#include <gdk/gdk.h>
#include <gtk/gtksignal.h>
#include <gtk/gtkwidget.h>
-#include <gtk/gtkfeatures.h>
+
#ifdef __cplusplus
extern "C" {
+#pragma }
#endif /* __cplusplus */
-#define GTK_CALENDAR(obj) GTK_CHECK_CAST (obj, gtk_calendar_get_type (), GtkCalendar)
-#define GTK_CALENDAR_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, gtk_calendar_get_type (), GtkCalendarClass)
-#define GTK_IS_CALENDAR(obj) GTK_CHECK_TYPE (obj, gtk_calendar_get_type ())
-typedef struct _GtkCalendar GtkCalendar;
+#define GTK_TYPE_CALENDAR (gtk_calendar_get_type ())
+#define GTK_CALENDAR(obj) (GTK_CHECK_CAST ((obj), GTK_TYPE_CALENDAR, GtkCalendar))
+#define GTK_CALENDAR_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), GTK_TYPE_CALENDAR, GtkCalendarClass))
+#define GTK_IS_CALENDAR(obj) (GTK_CHECK_TYPE ((obj), GTK_TYPE_CALENDAR))
+#define GTK_IS_CALENDAR_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), GTK_TYPE_CALENDAR))
+
+
+typedef struct _GtkCalendar GtkCalendar;
typedef struct _GtkCalendarClass GtkCalendarClass;
typedef enum
{
- GTK_CALENDAR_SHOW_HEADING = 1 << 0,
- GTK_CALENDAR_SHOW_DAY_NAMES = 1 << 1,
- GTK_CALENDAR_NO_MONTH_CHANGE = 1 << 2,
- GTK_CALENDAR_SHOW_WEEK_NUMBERS = 1 << 3,
+ GTK_CALENDAR_SHOW_HEADING = 1 << 0,
+ GTK_CALENDAR_SHOW_DAY_NAMES = 1 << 1,
+ GTK_CALENDAR_NO_MONTH_CHANGE = 1 << 2,
+ GTK_CALENDAR_SHOW_WEEK_NUMBERS = 1 << 3,
GTK_CALENDAR_WEEK_START_MONDAY = 1 << 4
} GtkCalendarDisplayOptions;
@@ -51,47 +55,47 @@ struct _GtkCalendar
{
/* This widget is derived from GtkWidget */
GtkWidget widget;
-
+
GdkWindow *header_win, *day_name_win, *main_win, *week_win;
gint header_h, day_name_h, main_h;
GtkStyle *header_style;
GtkStyle *label_style;
-
+
gint month;
gint year;
gint selected_day;
-
+
gint day_month[6][7];
gint day[6][7];
-
+
gint num_marked_dates;
gint marked_date[31];
GtkCalendarDisplayOptions display_flags;
GdkColor marked_date_color[31];
-
+
/* Header Information */
GdkWindow *arrow_win[4];
- gint arrow_state[4];
- gint arrow_width;
- gint max_month_width;
- gint max_year_width;
-
+ gint arrow_state[4];
+ gint arrow_width;
+ gint max_month_width;
+ gint max_year_width;
+
/* Other info */
gint calstarty, calnumrows;
-
+
/* Style parameters for this widget */
GdkGC *gc;
GdkCursor *cross;
-
+
gint day_width;
gint week_width;
GdkRectangle header_button[4];
GdkRectangle rect_days[6][7];
-
+
gint highlight_row;
gint highlight_col;
-
+
gint min_day_width;
gint max_day_char_width;
gint max_day_char_ascent;
@@ -105,7 +109,7 @@ struct _GtkCalendar
unsigned int dirty_main:1;
unsigned int dirty_week:1;
unsigned int frozen;
-
+
gint week_num_w;
gint font_width_day_name, font_width_day;
char grow_space [32];
@@ -114,39 +118,50 @@ struct _GtkCalendar
struct _GtkCalendarClass
{
GtkWidgetClass parent_class;
-
+
/* Signal handlers */
- void (* gtk_calendar_month_changed) (GtkCalendarClass *);
- void (* gtk_calendar_day_selected) (GtkCalendarClass *);
- void (* gtk_calendar_day_selected_double_click) (GtkCalendarClass *);
- void (* gtk_calendar_prev_month) (GtkCalendarClass *);
- void (* gtk_calendar_next_month) (GtkCalendarClass *);
- void (* gtk_calendar_prev_year) (GtkCalendarClass *);
- void (* gtk_calendar_next_year) (GtkCalendarClass *);
-
+ void (* month_changed) (GtkCalendarClass *calendar);
+ void (* day_selected) (GtkCalendarClass *calendar);
+ void (* day_selected_double_click) (GtkCalendarClass *calendar);
+ void (* prev_month) (GtkCalendarClass *calendar);
+ void (* next_month) (GtkCalendarClass *calendar);
+ void (* prev_year) (GtkCalendarClass *calendar);
+ void (* next_year) (GtkCalendarClass *calendar);
+
};
-guint gtk_calendar_get_type (void);
-GtkWidget* gtk_calendar_new (void);
+GtkType gtk_calendar_get_type (void);
+GtkWidget* gtk_calendar_new (void);
+
+gint gtk_calendar_select_month (GtkCalendar *calendar,
+ guint month,
+ guint year);
+void gtk_calendar_select_day (GtkCalendar *calendar,
+ guint day);
+
+gint gtk_calendar_mark_day (GtkCalendar *calendar,
+ guint day);
+gint gtk_calendar_unmark_day (GtkCalendar *calendar,
+ guint day);
+void gtk_calendar_clear_marks (GtkCalendar *calendar);
+
+
+void gtk_calendar_display_options (GtkCalendar *calendar,
+ GtkCalendarDisplayOptions flags);
-gint gtk_calendar_select_month (GtkCalendar *calendar,
- gint month, gint year);
-void gtk_calendar_select_day (GtkCalendar *calendar, gint day);
+void gtk_calendar_get_date (GtkCalendar *calendar,
+ guint *year,
+ guint *month,
+ guint *day);
+void gtk_calendar_freeze (GtkCalendar *calendar);
+void gtk_calendar_thaw (GtkCalendar *calendar);
-gint gtk_calendar_mark_day (GtkCalendar *calendar, gint day);
-gint gtk_calendar_unmark_day (GtkCalendar *calendar, gint day);
-void gtk_calendar_clear_marks (GtkCalendar *calendar);
-void gtk_calendar_display_options (GtkCalendar *calendar,
- GtkCalendarDisplayOptions flags);
-void gtk_calendar_get_date (GtkCalendar *calendar,
- gint *year, gint *month, gint *day);
-void gtk_calendar_freeze (GtkCalendar *calendar);
-void gtk_calendar_thaw (GtkCalendar *calendar);
#ifdef __cplusplus
+#pragma {
}
#endif /* __cplusplus */
diff --git a/gtk/gtkclist.c b/gtk/gtkclist.c
index e9c21d2935..f5a51a30d8 100644
--- a/gtk/gtkclist.c
+++ b/gtk/gtkclist.c
@@ -1685,8 +1685,19 @@ gtk_clist_get_selectable (GtkCList *clist,
}
gint
-gtk_clist_append (GtkCList * clist,
- gchar * text[])
+gtk_clist_prepend (GtkCList *clist,
+ gchar *text[])
+{
+ g_return_val_if_fail (clist != NULL, -1);
+ g_return_val_if_fail (GTK_IS_CLIST (clist), -1);
+ g_return_val_if_fail (text != NULL, -1);
+
+ return GTK_CLIST_CLASS_FW (clist)->insert_row (clist, 0, text);
+}
+
+gint
+gtk_clist_append (GtkCList *clist,
+ gchar *text[])
{
g_return_val_if_fail (clist != NULL, -1);
g_return_val_if_fail (GTK_IS_CLIST (clist), -1);
@@ -1696,17 +1707,24 @@ gtk_clist_append (GtkCList * clist,
}
gint
-gtk_clist_insert (GtkCList * clist,
- gint row,
- gchar * text[])
+gtk_clist_insert (GtkCList *clist,
+ gint row,
+ gchar *text[])
{
+ g_return_val_if_fail (clist != NULL, -1);
+ g_return_val_if_fail (GTK_IS_CLIST (clist), -1);
+ g_return_val_if_fail (text != NULL, -1);
+
+ if (row < 0 || row > clist->rows)
+ row = clist->rows;
+
return GTK_CLIST_CLASS_FW (clist)->insert_row (clist, row, text);
}
static gint
-real_insert_row (GtkCList * clist,
- gint row,
- gchar * text[])
+real_insert_row (GtkCList *clist,
+ gint row,
+ gchar *text[])
{
gint i;
GtkCListRow *clist_row;
@@ -1924,36 +1942,36 @@ gtk_clist_clear (GtkCList * clist)
static void
real_clear (GtkCList * clist)
{
- GList *list;
+ GList *list, *free_list;
g_return_if_fail (clist != NULL);
g_return_if_fail (GTK_IS_CLIST (clist));
- /* remove all the rows */
- for (list = clist->row_list; list; list = list->next)
- row_delete (clist, GTK_CLIST_ROW (list));
-
- g_list_free (clist->row_list);
-
/* free up the selection list */
g_list_free (clist->selection);
g_list_free (clist->undo_selection);
g_list_free (clist->undo_unselection);
- clist->row_list = NULL;
- clist->row_list_end = NULL;
clist->selection = NULL;
clist->selection_end = NULL;
clist->undo_selection = NULL;
clist->undo_unselection = NULL;
clist->voffset = 0;
- clist->rows = 0;
clist->focus_row = -1;
clist->anchor = -1;
clist->undo_anchor = -1;
clist->anchor_state = GTK_STATE_SELECTED;
clist->drag_pos = -1;
+ /* remove all the rows */
+ free_list = clist->row_list;
+ clist->row_list = NULL;
+ clist->row_list_end = NULL;
+ clist->rows = 0;
+ for (list = free_list; list; list = list->next)
+ row_delete (clist, GTK_CLIST_ROW (list));
+ g_list_free (free_list);
+
/* zero-out the scrollbars */
if (clist->vscrollbar)
{
diff --git a/gtk/gtkclist.h b/gtk/gtkclist.h
index 1e482bcf47..a8d2608f44 100644
--- a/gtk/gtkclist.h
+++ b/gtk/gtkclist.h
@@ -526,11 +526,13 @@ void gtk_clist_set_selectable (GtkCList *clist,
gboolean gtk_clist_get_selectable (GtkCList *clist,
gint row);
-/* append returns the index of the row you just added, making
- * it easier to append and modify a row
+/* prepend/append returns the index of the row you just added,
+ * making it easier to append and modify a row
*/
-gint gtk_clist_append (GtkCList *clist,
- gchar *text[]);
+gint gtk_clist_prepend (GtkCList *clist,
+ gchar *text[]);
+gint gtk_clist_append (GtkCList *clist,
+ gchar *text[]);
/* inserts a row at index row and returns the row where it was actually
* inserted (may be different from "row" in auto_sort mode)