From a4d9eccbc6d9258d680b4d299c260dea5854ce33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timm=20B=C3=A4der?= Date: Sat, 6 Sep 2014 16:36:05 +0200 Subject: [PATCH] inspector: Show widget allocation https://bugzilla.gnome.org/show_bug.cgi?id=736191 --- gtk/inspector/misc-info.c | 25 ++- gtk/inspector/misc-info.h | 6 +- gtk/inspector/misc-info.ui | 294 ++++++++++++++++++++--------------- gtk/inspector/misc-info.ui.h | 1 + 4 files changed, 195 insertions(+), 131 deletions(-) diff --git a/gtk/inspector/misc-info.c b/gtk/inspector/misc-info.c index 8ef531487d..4b615e52cc 100644 --- a/gtk/inspector/misc-info.c +++ b/gtk/inspector/misc-info.c @@ -43,6 +43,8 @@ struct _GtkInspectorMiscInfoPrivate { GtkWidget *focus_widget_row; GtkWidget *focus_widget; GtkWidget *focus_widget_button; + GtkWidget *allocated_size_row; + GtkWidget *allocated_size; }; enum @@ -50,8 +52,8 @@ enum PROP_0, PROP_WIDGET_TREE }; - -G_DEFINE_TYPE_WITH_PRIVATE (GtkInspectorMiscInfo, gtk_inspector_misc_info, GTK_TYPE_BOX) + +G_DEFINE_TYPE_WITH_PRIVATE (GtkInspectorMiscInfo, gtk_inspector_misc_info, GTK_TYPE_SCROLLED_WINDOW) static gchar * format_state_flags (GtkStateFlags state) @@ -92,6 +94,17 @@ state_flags_changed (GtkWidget *w, GtkStateFlags old_flags, GtkInspectorMiscInfo g_free (s); } +static void +allocation_changed (GtkWidget *w, GdkRectangle *allocation, GtkInspectorMiscInfo *sl) +{ + gchar *size_label = g_strdup_printf ("%d × %d", + gtk_widget_get_allocated_width (w), + gtk_widget_get_allocated_height (w)); + + gtk_label_set_label (GTK_LABEL (sl->priv->allocated_size), size_label); + g_free (size_label); +} + static void disconnect_each_other (gpointer still_alive, GObject *for_science) @@ -209,6 +222,7 @@ gtk_inspector_misc_info_set_object (GtkInspectorMiscInfo *sl, { g_signal_handlers_disconnect_by_func (sl->priv->object, state_flags_changed, sl); g_signal_handlers_disconnect_by_func (sl->priv->object, set_focus_cb, sl); + g_signal_handlers_disconnect_by_func (sl->priv->object, allocation_changed, sl); disconnect_each_other (sl->priv->object, G_OBJECT (sl)); disconnect_each_other (sl, sl->priv->object); sl->priv->object = NULL; @@ -231,10 +245,15 @@ gtk_inspector_misc_info_set_object (GtkInspectorMiscInfo *sl, gtk_widget_show (sl->priv->state_row); g_signal_connect_object (object, "state-flags-changed", G_CALLBACK (state_flags_changed), sl, 0); state_flags_changed (GTK_WIDGET (sl->priv->object), 0, sl); + + allocation_changed (GTK_WIDGET (sl->priv->object), NULL, sl); + gtk_widget_show (sl->priv->allocated_size_row); + g_signal_connect_object (object, "size-allocate", G_CALLBACK (allocation_changed), sl, 0); } else { gtk_widget_hide (sl->priv->state_row); + gtk_widget_hide (sl->priv->allocated_size_row); } if (GTK_IS_BUILDABLE (object)) @@ -336,6 +355,8 @@ gtk_inspector_misc_info_class_init (GtkInspectorMiscInfoClass *klass) gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, focus_widget_row); gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, focus_widget); gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, focus_widget_button); + gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, allocated_size_row); + gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, allocated_size); gtk_widget_class_bind_template_callback (widget_class, show_default_widget); gtk_widget_class_bind_template_callback (widget_class, show_focus_widget); diff --git a/gtk/inspector/misc-info.h b/gtk/inspector/misc-info.h index 537e946fbf..c3bf79301d 100644 --- a/gtk/inspector/misc-info.h +++ b/gtk/inspector/misc-info.h @@ -18,7 +18,7 @@ #ifndef _GTK_INSPECTOR_MISC_INFO_H_ #define _GTK_INSPECTOR_MISC_INFO_H_ -#include +#include "gtkscrolledwindow.h" #define GTK_TYPE_INSPECTOR_MISC_INFO (gtk_inspector_misc_info_get_type()) #define GTK_INSPECTOR_MISC_INFO(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GTK_TYPE_INSPECTOR_MISC_INFO, GtkInspectorMiscInfo)) @@ -32,13 +32,13 @@ typedef struct _GtkInspectorMiscInfoPrivate GtkInspectorMiscInfoPrivate; typedef struct _GtkInspectorMiscInfo { - GtkBox parent; + GtkScrolledWindow parent; GtkInspectorMiscInfoPrivate *priv; } GtkInspectorMiscInfo; typedef struct _GtkInspectorMiscInfoClass { - GtkBoxClass parent; + GtkScrolledWindowClass parent; } GtkInspectorMiscInfoClass; G_BEGIN_DECLS diff --git a/gtk/inspector/misc-info.ui b/gtk/inspector/misc-info.ui index c91e7eef28..bb03b90ded 100644 --- a/gtk/inspector/misc-info.ui +++ b/gtk/inspector/misc-info.ui @@ -1,168 +1,210 @@ -