forked from AuroraMiddleware/gtk
Fix initial size allocation with child widgets
On some cases, it would take a resize of the window for children to 'jump into place'. https://bugzilla.gnome.org/show_bug.cgi?id=633500
This commit is contained in:
parent
6c301d4b0a
commit
0aa94bb946
@ -106,6 +106,7 @@ static GObject *gtk_statusbar_buildable_get_internal_child (GtkBuildable *builda
|
|||||||
static void gtk_statusbar_update (GtkStatusbar *statusbar,
|
static void gtk_statusbar_update (GtkStatusbar *statusbar,
|
||||||
guint context_id,
|
guint context_id,
|
||||||
const gchar *text);
|
const gchar *text);
|
||||||
|
static void gtk_statusbar_realize (GtkWidget *widget);
|
||||||
static void gtk_statusbar_destroy (GtkWidget *widget);
|
static void gtk_statusbar_destroy (GtkWidget *widget);
|
||||||
static void gtk_statusbar_size_allocate (GtkWidget *widget,
|
static void gtk_statusbar_size_allocate (GtkWidget *widget,
|
||||||
GtkAllocation *allocation);
|
GtkAllocation *allocation);
|
||||||
@ -128,6 +129,7 @@ gtk_statusbar_class_init (GtkStatusbarClass *class)
|
|||||||
gobject_class = (GObjectClass *) class;
|
gobject_class = (GObjectClass *) class;
|
||||||
widget_class = (GtkWidgetClass *) class;
|
widget_class = (GtkWidgetClass *) class;
|
||||||
|
|
||||||
|
widget_class->realize = gtk_statusbar_realize;
|
||||||
widget_class->destroy = gtk_statusbar_destroy;
|
widget_class->destroy = gtk_statusbar_destroy;
|
||||||
widget_class->size_allocate = gtk_statusbar_size_allocate;
|
widget_class->size_allocate = gtk_statusbar_size_allocate;
|
||||||
widget_class->hierarchy_changed = gtk_statusbar_hierarchy_changed;
|
widget_class->hierarchy_changed = gtk_statusbar_hierarchy_changed;
|
||||||
@ -646,11 +648,11 @@ gtk_statusbar_size_allocate (GtkWidget *widget,
|
|||||||
GdkRectangle translated_rect;
|
GdkRectangle translated_rect;
|
||||||
|
|
||||||
window = gtk_widget_get_toplevel (widget);
|
window = gtk_widget_get_toplevel (widget);
|
||||||
|
|
||||||
if (GTK_IS_WINDOW (window) &&
|
if (GTK_IS_WINDOW (window) &&
|
||||||
gtk_window_resize_grip_is_visible (GTK_WINDOW (window)))
|
gtk_window_resize_grip_is_visible (GTK_WINDOW (window)))
|
||||||
{
|
{
|
||||||
gtk_window_get_resize_grip_area (GTK_WINDOW (window), &rect);
|
gtk_window_get_resize_grip_area (GTK_WINDOW (window), &rect);
|
||||||
|
|
||||||
if (gtk_widget_translate_coordinates (gtk_widget_get_parent (widget),
|
if (gtk_widget_translate_coordinates (gtk_widget_get_parent (widget),
|
||||||
window,
|
window,
|
||||||
allocation->x,
|
allocation->x,
|
||||||
@ -733,9 +735,9 @@ resize_grip_visible_changed (GObject *object,
|
|||||||
GtkStatusbar *statusbar = GTK_STATUSBAR (user_data);
|
GtkStatusbar *statusbar = GTK_STATUSBAR (user_data);
|
||||||
GtkStatusbarPrivate *priv = statusbar->priv;
|
GtkStatusbarPrivate *priv = statusbar->priv;
|
||||||
|
|
||||||
gtk_widget_queue_resize (GTK_WIDGET (statusbar));
|
|
||||||
gtk_widget_queue_resize (priv->label);
|
gtk_widget_queue_resize (priv->label);
|
||||||
gtk_widget_queue_resize (priv->frame);
|
gtk_widget_queue_resize (priv->frame);
|
||||||
|
gtk_widget_queue_resize (GTK_WIDGET (statusbar));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -752,4 +754,14 @@ gtk_statusbar_hierarchy_changed (GtkWidget *widget,
|
|||||||
if (GTK_IS_WINDOW (window))
|
if (GTK_IS_WINDOW (window))
|
||||||
g_signal_connect (window, "notify::resize-grip-visible",
|
g_signal_connect (window, "notify::resize-grip-visible",
|
||||||
G_CALLBACK (resize_grip_visible_changed), widget);
|
G_CALLBACK (resize_grip_visible_changed), widget);
|
||||||
|
|
||||||
|
resize_grip_visible_changed (NULL, NULL, widget);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gtk_statusbar_realize (GtkWidget *widget)
|
||||||
|
{
|
||||||
|
GTK_WIDGET_CLASS (gtk_statusbar_parent_class)->realize (widget);
|
||||||
|
|
||||||
|
resize_grip_visible_changed (NULL, NULL, widget);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user