diff options
-rw-r--r-- | ChangeLog | 30 | ||||
-rw-r--r-- | ChangeLog.pre-2-0 | 30 | ||||
-rw-r--r-- | ChangeLog.pre-2-10 | 30 | ||||
-rw-r--r-- | ChangeLog.pre-2-2 | 30 | ||||
-rw-r--r-- | ChangeLog.pre-2-4 | 30 | ||||
-rw-r--r-- | ChangeLog.pre-2-6 | 30 | ||||
-rw-r--r-- | ChangeLog.pre-2-8 | 30 | ||||
-rw-r--r-- | gtk/gtkcalendar.c | 1085 | ||||
-rw-r--r-- | gtk/gtkcalendar.h | 113 | ||||
-rw-r--r-- | gtk/gtkclist.c | 54 | ||||
-rw-r--r-- | gtk/gtkclist.h | 10 |
11 files changed, 877 insertions, 595 deletions
@@ -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) |