* 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 <http://www.gnu.org/licenses/>.Free
*/
/*
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;
/**
- * GtkCalendar:inner-border
+ * GtkCalendar:inner-border:
*
* The spacing around the day/week headers and main area.
*/
GTK_PARAM_READABLE));
/**
- * GtkCalndar:vertical-separation
+ * GtkCalndar:vertical-separation:
*
* Separation between day headers and main area.
*/
GTK_PARAM_READABLE));
/**
- * GtkCalendar:horizontal-separation
+ * GtkCalendar:horizontal-separation:
*
* Separation between week headers and main area.
*/
&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
{
{
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;
}
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);
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));
}
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;
}
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);
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);
}
}
pango_cairo_show_layout (cr, layout);
}
- if (gtk_widget_has_focus (widget)
- && priv->focus_row == row && priv->focus_col == col)
+ if (gtk_widget_has_visible_focus (widget) &&
+ priv->focus_row == row && priv->focus_col == col)
gtk_render_focus (context, cr,
day_rect.x, day_rect.y,
day_rect.width, day_rect.height);
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);
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;
/* 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);
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);
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);
}
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);
}
{
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