X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=gtk%2Fgtkcalendar.c;h=cfceb08a1530698aec9c2ca9606e44b1229d2fd8;hb=c8403f697edef57f33c66d3d8deb1488db86d949;hp=cff79bf5642a2419e4df542c4970fe6961700b8a;hpb=2ba9c4b4a7d9ffc3161e2db1774743182a365d99;p=~andy%2Fgtk diff --git a/gtk/gtkcalendar.c b/gtk/gtkcalendar.c index cff79bf56..cfceb08a1 100644 --- a/gtk/gtkcalendar.c +++ b/gtk/gtkcalendar.c @@ -18,8 +18,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free - * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * License along with this library. If not, see .Free */ /* @@ -271,7 +270,7 @@ struct _GtkCalendarPrivate guint day_name_h; guint main_h; - guint arrow_state[4]; + guint arrow_prelight : 4; guint arrow_width; guint max_month_width; guint max_year_width; @@ -611,7 +610,7 @@ gtk_calendar_class_init (GtkCalendarClass *class) /** - * GtkCalendar:inner-border + * GtkCalendar:inner-border: * * The spacing around the day/week headers and main area. */ @@ -623,7 +622,7 @@ gtk_calendar_class_init (GtkCalendarClass *class) GTK_PARAM_READABLE)); /** - * GtkCalndar:vertical-separation + * GtkCalndar:vertical-separation: * * Separation between day headers and main area. */ @@ -635,7 +634,7 @@ gtk_calendar_class_init (GtkCalendarClass *class) GTK_PARAM_READABLE)); /** - * GtkCalendar:horizontal-separation + * GtkCalendar:horizontal-separation: * * Separation between week headers and main area. */ @@ -1594,11 +1593,9 @@ calendar_realize_arrows (GtkCalendar *calendar) &attributes, attributes_mask); - if (!gtk_widget_is_sensitive (widget)) - priv->arrow_state[i] = GTK_STATE_FLAG_INSENSITIVE; - - gdk_window_set_user_data (priv->arrow_win[i], widget); + gtk_widget_register_window (widget, priv->arrow_win[i]); } + priv->arrow_prelight = 0x0; } else { @@ -1617,7 +1614,7 @@ calendar_unrealize_arrows (GtkCalendar *calendar) { if (priv->arrow_win[i]) { - gdk_window_set_user_data (priv->arrow_win[i], NULL); + gtk_widget_unregister_window (GTK_WIDGET (calendar), priv->arrow_win[i]); gdk_window_destroy (priv->arrow_win[i]); priv->arrow_win[i] = NULL; } @@ -1684,6 +1681,7 @@ gtk_calendar_realize (GtkWidget *widget) attributes.wclass = GDK_INPUT_ONLY; attributes.window_type = GDK_WINDOW_CHILD; attributes.event_mask = (gtk_widget_get_events (widget) | GDK_EXPOSURE_MASK + | GDK_SCROLL_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK | GDK_LEAVE_NOTIFY_MASK); @@ -1706,7 +1704,7 @@ gtk_calendar_realize (GtkWidget *widget) priv->main_win = gdk_window_new (gtk_widget_get_window (widget), &attributes, attributes_mask); - gdk_window_set_user_data (priv->main_win, widget); + gtk_widget_register_window (widget, priv->main_win); calendar_realize_arrows (GTK_CALENDAR (widget)); } @@ -1720,7 +1718,7 @@ gtk_calendar_unrealize (GtkWidget *widget) if (priv->main_win) { - gdk_window_set_user_data (priv->main_win, NULL); + gtk_widget_unregister_window (widget, priv->main_win); gdk_window_destroy (priv->main_win); priv->main_win = NULL; } @@ -2590,6 +2588,7 @@ calendar_paint_day (GtkCalendar *calendar, g_return_if_fail (col < 7); context = gtk_widget_get_style_context (widget); + state = gtk_widget_get_state_flags (widget); day = priv->day[row][col]; show_details = (priv->display_flags & GTK_CALENDAR_SHOW_DETAILS); @@ -2598,30 +2597,24 @@ calendar_paint_day (GtkCalendar *calendar, gtk_style_context_save (context); - if (!gtk_widget_get_sensitive (widget)) - state |= GTK_STATE_FLAG_INSENSITIVE; + state &= ~(GTK_STATE_FLAG_INCONSISTENT | GTK_STATE_FLAG_ACTIVE | GTK_STATE_FLAG_SELECTED); + + if (priv->day_month[row][col] == MONTH_PREV || + priv->day_month[row][col] == MONTH_NEXT) + state |= GTK_STATE_FLAG_INCONSISTENT; else { - if (gtk_widget_has_focus (widget)) - state |= GTK_STATE_FLAG_FOCUSED; + if (priv->marked_date[day-1]) + state |= GTK_STATE_FLAG_ACTIVE; - if (priv->day_month[row][col] == MONTH_PREV || - priv->day_month[row][col] == MONTH_NEXT) - state |= GTK_STATE_FLAG_INCONSISTENT; - else + if (priv->selected_day == day) { - if (priv->marked_date[day-1]) - state |= GTK_STATE_FLAG_ACTIVE; + state |= GTK_STATE_FLAG_SELECTED; - if (priv->selected_day == day) - { - state |= GTK_STATE_FLAG_SELECTED; - - gtk_style_context_set_state (context, state); - gtk_render_background (context, cr, - day_rect.x, day_rect.y, - day_rect.width, day_rect.height); - } + gtk_style_context_set_state (context, state); + gtk_render_background (context, cr, + day_rect.x, day_rect.y, + day_rect.width, day_rect.height); } } @@ -2782,7 +2775,12 @@ calendar_paint_arrow (GtkCalendar *calendar, cairo_save (cr); context = gtk_widget_get_style_context (widget); - state = priv->arrow_state[arrow]; + state = gtk_widget_get_state_flags (widget); + + if (priv->arrow_prelight & (1 << arrow)) + state |= GTK_STATE_FLAG_PRELIGHT; + else + state &= ~(GTK_STATE_FLAG_PRELIGHT); gtk_style_context_save (context); gtk_style_context_set_state (context, state); @@ -2988,7 +2986,7 @@ calendar_main_button_press (GtkCalendar *calendar, if (!gtk_widget_has_focus (widget)) gtk_widget_grab_focus (widget); - if (event->button == 1) + if (event->button == GDK_BUTTON_PRIMARY) { priv->in_drag = 1; priv->drag_start_x = x; @@ -3029,7 +3027,7 @@ gtk_calendar_button_press (GtkWidget *widget, /* only call the action on single click, not double */ if (event->type == GDK_BUTTON_PRESS) { - if (event->button == 1) + if (event->button == GDK_BUTTON_PRIMARY) calendar_start_spinning (calendar, arrow); calendar_arrow_action (calendar, arrow); @@ -3049,7 +3047,7 @@ gtk_calendar_button_release (GtkWidget *widget, GtkCalendar *calendar = GTK_CALENDAR (widget); GtkCalendarPrivate *priv = GTK_CALENDAR_GET_PRIVATE (widget); - if (event->button == 1) + if (event->button == GDK_BUTTON_PRIMARY) { calendar_stop_spinning (calendar); @@ -3096,25 +3094,25 @@ gtk_calendar_enter_notify (GtkWidget *widget, if (event->window == priv->arrow_win[ARROW_MONTH_LEFT]) { - priv->arrow_state[ARROW_MONTH_LEFT] |= GTK_STATE_FLAG_PRELIGHT; + priv->arrow_prelight |= (1 << ARROW_MONTH_LEFT); calendar_invalidate_arrow (calendar, ARROW_MONTH_LEFT); } if (event->window == priv->arrow_win[ARROW_MONTH_RIGHT]) { - priv->arrow_state[ARROW_MONTH_RIGHT] |= GTK_STATE_FLAG_PRELIGHT; + priv->arrow_prelight |= (1 << ARROW_MONTH_RIGHT); calendar_invalidate_arrow (calendar, ARROW_MONTH_RIGHT); } if (event->window == priv->arrow_win[ARROW_YEAR_LEFT]) { - priv->arrow_state[ARROW_YEAR_LEFT] |= GTK_STATE_FLAG_PRELIGHT; + priv->arrow_prelight |= (1 << ARROW_YEAR_LEFT); calendar_invalidate_arrow (calendar, ARROW_YEAR_LEFT); } if (event->window == priv->arrow_win[ARROW_YEAR_RIGHT]) { - priv->arrow_state[ARROW_YEAR_RIGHT] |= GTK_STATE_FLAG_PRELIGHT; + priv->arrow_prelight |= (1 << ARROW_YEAR_RIGHT); calendar_invalidate_arrow (calendar, ARROW_YEAR_RIGHT); } @@ -3130,25 +3128,25 @@ gtk_calendar_leave_notify (GtkWidget *widget, if (event->window == priv->arrow_win[ARROW_MONTH_LEFT]) { - priv->arrow_state[ARROW_MONTH_LEFT] &= ~(GTK_STATE_FLAG_PRELIGHT); + priv->arrow_prelight &= ~(1 << ARROW_MONTH_LEFT); calendar_invalidate_arrow (calendar, ARROW_MONTH_LEFT); } if (event->window == priv->arrow_win[ARROW_MONTH_RIGHT]) { - priv->arrow_state[ARROW_MONTH_RIGHT] &= ~(GTK_STATE_FLAG_PRELIGHT); + priv->arrow_prelight &= ~(1 << ARROW_MONTH_RIGHT); calendar_invalidate_arrow (calendar, ARROW_MONTH_RIGHT); } if (event->window == priv->arrow_win[ARROW_YEAR_LEFT]) { - priv->arrow_state[ARROW_YEAR_LEFT] &= ~(GTK_STATE_FLAG_PRELIGHT); + priv->arrow_prelight &= ~(1 << ARROW_YEAR_LEFT); calendar_invalidate_arrow (calendar, ARROW_YEAR_LEFT); } if (event->window == priv->arrow_win[ARROW_YEAR_RIGHT]) { - priv->arrow_state[ARROW_YEAR_RIGHT] &= ~(GTK_STATE_FLAG_PRELIGHT); + priv->arrow_prelight &= ~(1 << ARROW_YEAR_RIGHT); calendar_invalidate_arrow (calendar, ARROW_YEAR_RIGHT); } @@ -3335,19 +3333,12 @@ gtk_calendar_state_flags_changed (GtkWidget *widget, { GtkCalendar *calendar = GTK_CALENDAR (widget); GtkCalendarPrivate *priv = GTK_CALENDAR_GET_PRIVATE (widget); - int i; if (!gtk_widget_is_sensitive (widget)) { priv->in_drag = 0; calendar_stop_spinning (calendar); } - - for (i = 0; i < 4; i++) - if (gtk_widget_is_sensitive (widget)) - priv->arrow_state[i] &= ~(GTK_STATE_FLAG_INSENSITIVE); - else - priv->arrow_state[i] |= GTK_STATE_FLAG_INSENSITIVE; } static void