diff --git a/gtk/inspector/misc-info.c b/gtk/inspector/misc-info.c
index efb0e6cebc..7f2db290bd 100644
--- a/gtk/inspector/misc-info.c
+++ b/gtk/inspector/misc-info.c
@@ -27,6 +27,9 @@
#include "gtkbuildable.h"
#include "gtklabel.h"
#include "gtkframe.h"
+#include "gtkbutton.h"
+#include "gtkwidgetprivate.h"
+
struct _GtkInspectorMiscInfoPrivate {
GtkInspectorObjectTree *object_tree;
@@ -43,8 +46,24 @@ struct _GtkInspectorMiscInfoPrivate {
GtkWidget *focus_widget_row;
GtkWidget *focus_widget;
GtkWidget *focus_widget_button;
+ GtkWidget *mnemonic_label_row;
+ GtkWidget *mnemonic_label;
GtkWidget *allocated_size_row;
GtkWidget *allocated_size;
+ GtkWidget *clip_area_row;
+ GtkWidget *clip_area;
+ GtkWidget *tick_callback_row;
+ GtkWidget *tick_callback;
+ GtkWidget *accessible_role_row;
+ GtkWidget *accessible_role;
+ GtkWidget *mapped_row;
+ GtkWidget *mapped;
+ GtkWidget *realized_row;
+ GtkWidget *realized;
+ GtkWidget *is_toplevel_row;
+ GtkWidget *is_toplevel;
+ GtkWidget *child_visible_row;
+ GtkWidget *child_visible;
};
enum
@@ -97,12 +116,31 @@ state_flags_changed (GtkWidget *w, GtkStateFlags old_flags, GtkInspectorMiscInfo
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));
+ GtkAllocation clip;
+ gchar *size_label;
+
+ 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);
+
+ gtk_widget_get_clip (w, &clip);
+
+ if (clip.width == gtk_widget_get_allocated_width (w) &&
+ clip.height == gtk_widget_get_allocated_height (w))
+ {
+ gtk_widget_hide (sl->priv->clip_area_row);
+ }
+ else
+ {
+ gtk_widget_show (sl->priv->clip_area_row);
+
+ size_label = g_strdup_printf ("%d × %d", clip.width, clip.height);
+ gtk_label_set_label (GTK_LABEL (sl->priv->clip_area), size_label);
+ g_free (size_label);
+ }
}
static void
@@ -214,6 +252,16 @@ show_focus_widget (GtkWidget *button, GtkInspectorMiscInfo *sl)
show_object (sl, G_OBJECT (widget), NULL, "properties");
}
+static void
+show_mnemonic_label (GtkWidget *button, GtkInspectorMiscInfo *sl)
+{
+ GtkWidget *widget;
+
+ widget = g_object_get_data (G_OBJECT (button), "mnemonic-label");
+ if (widget)
+ show_object (sl, G_OBJECT (widget), NULL, "properties");
+}
+
void
gtk_inspector_misc_info_set_object (GtkInspectorMiscInfo *sl,
GObject *object)
@@ -242,18 +290,67 @@ gtk_inspector_misc_info_set_object (GtkInspectorMiscInfo *sl,
if (GTK_IS_WIDGET (object))
{
+ AtkObject *accessible;
+ AtkRole role;
+ GList *list, *l;
+
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);
+ gtk_widget_show (sl->priv->mnemonic_label_row);
+ gtk_container_forall (GTK_CONTAINER (sl->priv->mnemonic_label), (GtkCallback)gtk_widget_destroy, NULL);
+ list = gtk_widget_list_mnemonic_labels (GTK_WIDGET (sl->priv->object));
+ for (l = list; l; l = l->next)
+ {
+ gchar *tmp;
+ GtkWidget *button;
+
+ tmp = g_strdup_printf ("%p (%s)", l->data, g_type_name_from_instance ((GTypeInstance*)l->data));
+ button = gtk_button_new_with_label (tmp);
+ gtk_widget_show (button);
+ gtk_container_add (GTK_CONTAINER (sl->priv->mnemonic_label), button);
+ g_object_set_data (G_OBJECT (button), "mnemonic-label", l->data);
+ g_signal_connect (button, "clicked", G_CALLBACK (show_mnemonic_label), sl);
+ }
+ g_list_free (list);
+
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);
+
+ gtk_widget_set_visible (sl->priv->tick_callback, gtk_widget_has_tick_callback (GTK_WIDGET (sl->priv->object)));
+ gtk_widget_show (sl->priv->tick_callback_row);
+
+ accessible = ATK_OBJECT (gtk_widget_get_accessible (GTK_WIDGET (sl->priv->object)));
+ role = atk_object_get_role (accessible);
+ gtk_label_set_text (GTK_LABEL (sl->priv->accessible_role), atk_role_get_name (role));
+ gtk_widget_show (sl->priv->accessible_role_row);
+
+ gtk_widget_set_visible (sl->priv->mapped, gtk_widget_get_mapped (GTK_WIDGET (sl->priv->object)));
+ gtk_widget_show (sl->priv->mapped_row);
+
+ gtk_widget_set_visible (sl->priv->realized, gtk_widget_get_realized (GTK_WIDGET (sl->priv->object)));
+ gtk_widget_show (sl->priv->realized_row);
+
+ gtk_widget_set_visible (sl->priv->is_toplevel, gtk_widget_is_toplevel (GTK_WIDGET (sl->priv->object)));
+ gtk_widget_show (sl->priv->is_toplevel_row);
+
+ gtk_widget_set_visible (sl->priv->child_visible, gtk_widget_get_child_visible (GTK_WIDGET (sl->priv->object)));
+ gtk_widget_show (sl->priv->is_toplevel_row);
}
else
{
gtk_widget_hide (sl->priv->state_row);
+ gtk_widget_hide (sl->priv->mnemonic_label_row);
gtk_widget_hide (sl->priv->allocated_size_row);
+ gtk_widget_hide (sl->priv->clip_area_row);
+ gtk_widget_hide (sl->priv->tick_callback_row);
+ gtk_widget_hide (sl->priv->accessible_role_row);
+ gtk_widget_hide (sl->priv->mapped_row);
+ gtk_widget_hide (sl->priv->realized_row);
+ gtk_widget_hide (sl->priv->is_toplevel_row);
+ gtk_widget_hide (sl->priv->child_visible_row);
}
if (GTK_IS_BUILDABLE (object))
@@ -355,8 +452,24 @@ 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, mnemonic_label_row);
+ gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, mnemonic_label);
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_child_private (widget_class, GtkInspectorMiscInfo, clip_area_row);
+ gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, clip_area);
+ gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, tick_callback_row);
+ gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, tick_callback);
+ gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, accessible_role_row);
+ gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, accessible_role);
+ gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, mapped_row);
+ gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, mapped);
+ gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, realized_row);
+ gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, realized);
+ gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, is_toplevel_row);
+ gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, is_toplevel);
+ gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, child_visible_row);
+ gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, child_visible);
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.ui b/gtk/inspector/misc-info.ui
index eceb9b51e9..ad0a0960b6 100644
--- a/gtk/inspector/misc-info.ui
+++ b/gtk/inspector/misc-info.ui
@@ -169,6 +169,41 @@
+
+
+
+
true
@@ -203,6 +238,254 @@
+
+
+ true
+ false
+
+
+ true
+ horizontal
+ 10
+ 40
+
+
+ true
+ Clip area
+ start
+ baseline
+ 0
+
+
+ true
+
+
+
+
+ true
+ end
+ baseline
+
+
+
+
+
+
+
+
+
+ true
+ false
+
+
+ true
+ horizontal
+ 10
+ 40
+
+
+ true
+ Tick callback
+ start
+ baseline
+ 0
+
+
+ true
+
+
+
+
+ true
+ end
+ baseline
+ object-select-symbolic
+ 1
+
+
+
+
+
+
+
+
+
+ true
+ false
+
+
+ true
+ horizontal
+ 10
+ 40
+
+
+ true
+ Accessible role
+ start
+ baseline
+ 0
+
+
+ true
+
+
+
+
+ true
+ end
+ baseline
+
+
+
+
+
+
+
+
+
+ true
+ false
+
+
+ true
+ horizontal
+ 10
+ 40
+
+
+ true
+ Mapped
+ start
+ baseline
+ 0
+
+
+ true
+
+
+
+
+ true
+ end
+ baseline
+ 1
+ object-select-symbolic
+
+
+
+
+
+
+
+
+
+ true
+ false
+
+
+ true
+ horizontal
+ 10
+ 40
+
+
+ true
+ Realized
+ start
+ baseline
+ 0
+
+
+ true
+
+
+
+
+ true
+ end
+ baseline
+ 1
+ object-select-symbolic
+
+
+
+
+
+
+
+
+
+ true
+ false
+
+
+ true
+ horizontal
+ 10
+ 40
+
+
+ true
+ Is Toplevel
+ start
+ baseline
+ 0
+
+
+ true
+
+
+
+
+ true
+ end
+ baseline
+ 1
+ object-select-symbolic
+
+
+
+
+
+
+
+
+
+ true
+ false
+
+
+ true
+ horizontal
+ 10
+ 40
+
+
+ true
+ Child Visible
+ start
+ baseline
+ 0
+
+
+ true
+
+
+
+
+ true
+ end
+ baseline
+ 1
+ object-select-symbolic
+
+
+
+
+
+
+
@@ -220,3 +503,4 @@
+
diff --git a/gtk/inspector/misc-info.ui.h b/gtk/inspector/misc-info.ui.h
index b78feec93a..6d954ce358 100644
--- a/gtk/inspector/misc-info.ui.h
+++ b/gtk/inspector/misc-info.ui.h
@@ -4,4 +4,12 @@ N_("Default Widget");
N_("Properties");
N_("Focus Widget");
N_("Properties");
+N_("Mnemonic Label");
N_("Allocated size");
+N_("Clip area");
+N_("Tick callback");
+N_("Accessible role");
+N_("Mapped");
+N_("Realized");
+N_("Is Toplevel");
+N_("Child Visible");