Make GtkSpinButton a no-window widget
We still retain an input-only window here for now, but all the painting is done to the parent window.
This commit is contained in:
parent
f4d57dbe98
commit
331323e5c7
@ -598,7 +598,7 @@ gtk_spin_button_realize (GtkWidget *widget)
|
|||||||
GTK_WIDGET_CLASS (gtk_spin_button_parent_class)->realize (widget);
|
GTK_WIDGET_CLASS (gtk_spin_button_parent_class)->realize (widget);
|
||||||
|
|
||||||
attributes.window_type = GDK_WINDOW_CHILD;
|
attributes.window_type = GDK_WINDOW_CHILD;
|
||||||
attributes.wclass = GDK_INPUT_OUTPUT;
|
attributes.wclass = GDK_INPUT_ONLY;
|
||||||
attributes.visual = gtk_widget_get_visual (widget);
|
attributes.visual = gtk_widget_get_visual (widget);
|
||||||
attributes.event_mask = gtk_widget_get_events (widget);
|
attributes.event_mask = gtk_widget_get_events (widget);
|
||||||
attributes.event_mask |= GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK
|
attributes.event_mask |= GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK
|
||||||
@ -616,9 +616,6 @@ gtk_spin_button_realize (GtkWidget *widget)
|
|||||||
&attributes, attributes_mask);
|
&attributes, attributes_mask);
|
||||||
gdk_window_set_user_data (priv->panel, widget);
|
gdk_window_set_user_data (priv->panel, widget);
|
||||||
|
|
||||||
gtk_style_set_background (style,
|
|
||||||
priv->panel, GTK_STATE_NORMAL);
|
|
||||||
|
|
||||||
return_val = FALSE;
|
return_val = FALSE;
|
||||||
g_signal_emit (spin_button, spinbutton_signals[OUTPUT], 0, &return_val);
|
g_signal_emit (spin_button, spinbutton_signals[OUTPUT], 0, &return_val);
|
||||||
if (return_val == FALSE)
|
if (return_val == FALSE)
|
||||||
@ -784,35 +781,31 @@ gtk_spin_button_draw (GtkWidget *widget,
|
|||||||
{
|
{
|
||||||
GtkSpinButton *spin = GTK_SPIN_BUTTON (widget);
|
GtkSpinButton *spin = GTK_SPIN_BUTTON (widget);
|
||||||
GtkSpinButtonPrivate *priv = spin->priv;
|
GtkSpinButtonPrivate *priv = spin->priv;
|
||||||
|
GtkShadowType shadow_type;
|
||||||
|
GtkStateType state;
|
||||||
|
|
||||||
GTK_WIDGET_CLASS (gtk_spin_button_parent_class)->draw (widget, cr);
|
GTK_WIDGET_CLASS (gtk_spin_button_parent_class)->draw (widget, cr);
|
||||||
|
|
||||||
if (gtk_cairo_should_draw_window (cr, priv->panel))
|
cairo_save (cr);
|
||||||
{
|
|
||||||
GtkShadowType shadow_type;
|
|
||||||
|
|
||||||
shadow_type = spin_button_get_shadow_type (spin);
|
shadow_type = spin_button_get_shadow_type (spin);
|
||||||
|
|
||||||
gtk_cairo_transform_to_window (cr, widget, priv->panel);
|
state = gtk_widget_has_focus (widget) ?
|
||||||
|
GTK_STATE_ACTIVE : gtk_widget_get_state (widget);
|
||||||
|
|
||||||
if (shadow_type != GTK_SHADOW_NONE)
|
gtk_cairo_transform_to_window (cr, widget, priv->panel);
|
||||||
{
|
|
||||||
GtkStateType state;
|
|
||||||
|
|
||||||
state = gtk_widget_has_focus (widget) ?
|
gtk_paint_box (gtk_widget_get_style (widget), cr,
|
||||||
GTK_STATE_ACTIVE : gtk_widget_get_state (widget);
|
state, shadow_type,
|
||||||
|
widget, "spinbutton",
|
||||||
|
0, 0,
|
||||||
|
gdk_window_get_width (priv->panel),
|
||||||
|
gdk_window_get_height (priv->panel));
|
||||||
|
|
||||||
gtk_paint_box (gtk_widget_get_style (widget), cr,
|
gtk_spin_button_draw_arrow (spin, cr, GTK_ARROW_UP);
|
||||||
state, shadow_type,
|
gtk_spin_button_draw_arrow (spin, cr, GTK_ARROW_DOWN);
|
||||||
widget, "spinbutton",
|
|
||||||
0, 0,
|
|
||||||
gdk_window_get_width (priv->panel),
|
|
||||||
gdk_window_get_height (priv->panel));
|
|
||||||
}
|
|
||||||
|
|
||||||
gtk_spin_button_draw_arrow (spin, cr, GTK_ARROW_UP);
|
cairo_restore (cr);
|
||||||
gtk_spin_button_draw_arrow (spin, cr, GTK_ARROW_DOWN);
|
|
||||||
}
|
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
@ -849,13 +842,13 @@ gtk_spin_button_draw_arrow (GtkSpinButton *spin_button,
|
|||||||
GtkArrowType arrow_type)
|
GtkArrowType arrow_type)
|
||||||
{
|
{
|
||||||
GtkSpinButtonPrivate *priv;
|
GtkSpinButtonPrivate *priv;
|
||||||
GtkRequisition requisition;
|
|
||||||
GtkStateType state_type;
|
GtkStateType state_type;
|
||||||
GtkShadowType shadow_type;
|
GtkShadowType shadow_type;
|
||||||
GtkStyle *style;
|
GtkStyle *style;
|
||||||
GtkWidget *widget;
|
GtkWidget *widget;
|
||||||
gint x;
|
gint x;
|
||||||
gint y;
|
gint y;
|
||||||
|
gint panel_height;
|
||||||
gint height;
|
gint height;
|
||||||
gint width;
|
gint width;
|
||||||
gint h, w;
|
gint h, w;
|
||||||
@ -866,23 +859,23 @@ gtk_spin_button_draw_arrow (GtkSpinButton *spin_button,
|
|||||||
widget = GTK_WIDGET (spin_button);
|
widget = GTK_WIDGET (spin_button);
|
||||||
|
|
||||||
style = gtk_widget_get_style (widget);
|
style = gtk_widget_get_style (widget);
|
||||||
gtk_widget_get_preferred_size (widget, &requisition, NULL);
|
|
||||||
|
|
||||||
width = spin_button_get_arrow_size (spin_button) + 2 * style->xthickness;
|
width = spin_button_get_arrow_size (spin_button) + 2 * style->xthickness;
|
||||||
|
panel_height = gdk_window_get_height (priv->panel);
|
||||||
|
|
||||||
if (arrow_type == GTK_ARROW_UP)
|
if (arrow_type == GTK_ARROW_UP)
|
||||||
{
|
{
|
||||||
x = 0;
|
x = 0;
|
||||||
y = 0;
|
y = 0;
|
||||||
|
|
||||||
height = requisition.height / 2;
|
height = panel_height / 2;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
x = 0;
|
x = 0;
|
||||||
y = requisition.height / 2;
|
y = panel_height / 2;
|
||||||
|
|
||||||
height = (requisition.height + 1) / 2;
|
height = (panel_height + 1) / 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (spin_button_at_limit (spin_button, arrow_type))
|
if (spin_button_at_limit (spin_button, arrow_type))
|
||||||
@ -919,7 +912,7 @@ gtk_spin_button_draw_arrow (GtkSpinButton *spin_button,
|
|||||||
(arrow_type == GTK_ARROW_UP)? "spinbutton_up" : "spinbutton_down",
|
(arrow_type == GTK_ARROW_UP)? "spinbutton_up" : "spinbutton_down",
|
||||||
x, y, width, height);
|
x, y, width, height);
|
||||||
|
|
||||||
height = requisition.height;
|
height = panel_height;
|
||||||
|
|
||||||
if (arrow_type == GTK_ARROW_DOWN)
|
if (arrow_type == GTK_ARROW_DOWN)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user