[gtk+] inspector: Avoid a split pane for objects
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] inspector: Avoid a split pane for objects
- Date: Sat, 11 Oct 2014 05:00:31 +0000 (UTC)
commit dffceb1a17cf2c131b48913d1df7744547f6be12
Author: Matthias Clasen <mclasen redhat com>
Date: Fri Oct 10 22:34:32 2014 -0400
inspector: Avoid a split pane for objects
Like for the resources page, use a separate page for details
to gain more room for both the tree and the details.
gtk/inspector/object-tree.c | 65 ++++++--
gtk/inspector/object-tree.h | 6 +-
gtk/inspector/object-tree.ui | 5 +-
gtk/inspector/window.c | 59 +++++---
gtk/inspector/window.h | 3 +
gtk/inspector/window.ui | 339 ++++++++++++++++++++----------------------
6 files changed, 257 insertions(+), 220 deletions(-)
---
diff --git a/gtk/inspector/object-tree.c b/gtk/inspector/object-tree.c
index 7b4def0..a88847c 100644
--- a/gtk/inspector/object-tree.c
+++ b/gtk/inspector/object-tree.c
@@ -59,7 +59,8 @@ enum
enum
{
- OBJECT_CHANGED,
+ OBJECT_SELECTED,
+ OBJECT_ACTIVATED,
LAST_SIGNAL
};
@@ -78,25 +79,46 @@ static guint signals[LAST_SIGNAL] = { 0 };
G_DEFINE_TYPE_WITH_PRIVATE (GtkInspectorObjectTree, gtk_inspector_object_tree, GTK_TYPE_BOX)
static void
-on_widget_selected (GtkTreeSelection *selection,
- GtkInspectorObjectTree *wt)
+on_row_activated (GtkTreeView *tree,
+ GtkTreePath *path,
+ GtkTreeViewColumn *col,
+ GtkInspectorObjectTree *wt)
+{
+ GtkTreeIter iter;
+ GObject *object;
+ gchar *name;
+
+ gtk_tree_model_get_iter (GTK_TREE_MODEL (wt->priv->model), &iter, path);
+ gtk_tree_model_get (GTK_TREE_MODEL (wt->priv->model), &iter,
+ OBJECT, &object,
+ OBJECT_NAME, &name,
+ -1);
+
+ g_signal_emit (wt, signals[OBJECT_ACTIVATED], 0, object, name);
+
+ g_free (name);
+}
+
+static void
+on_selection_changed (GtkTreeSelection *selection,
+ GtkInspectorObjectTree *wt)
{
GObject *object;
GtkTreeIter iter;
GtkTreeSelection *sel;
GtkTreeModel *model;
-
+
+ object = NULL;
sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (wt->priv->tree));
if (gtk_tree_selection_get_selected (sel, &model, &iter))
gtk_tree_model_get (model, &iter,
OBJECT, &object,
-1);
- else
- object = NULL;
-
- g_signal_emit (wt, signals[OBJECT_CHANGED], 0, object);
+ if (object)
+ g_signal_emit (wt, signals[OBJECT_SELECTED], 0, object);
}
+
typedef struct
{
GtkInspectorObjectTree *wt;
@@ -200,19 +222,29 @@ gtk_inspector_object_tree_class_init (GtkInspectorObjectTreeClass *klass)
object_class->finalize = gtk_inspector_object_tree_finalize;
- signals[OBJECT_CHANGED] =
- g_signal_new ("object-changed",
+ signals[OBJECT_ACTIVATED] =
+ g_signal_new ("object-activated",
+ G_OBJECT_CLASS_TYPE (klass),
+ G_SIGNAL_RUN_FIRST | G_SIGNAL_NO_RECURSE,
+ G_STRUCT_OFFSET (GtkInspectorObjectTreeClass, object_activated),
+ NULL, NULL,
+ NULL,
+ G_TYPE_NONE, 2, G_TYPE_OBJECT, G_TYPE_STRING);
+
+ signals[OBJECT_SELECTED] =
+ g_signal_new ("object-selected",
G_OBJECT_CLASS_TYPE (klass),
G_SIGNAL_RUN_FIRST | G_SIGNAL_NO_RECURSE,
- G_STRUCT_OFFSET (GtkInspectorObjectTreeClass, object_changed),
+ G_STRUCT_OFFSET (GtkInspectorObjectTreeClass, object_selected),
NULL, NULL,
- g_cclosure_marshal_VOID__OBJECT,
+ NULL,
G_TYPE_NONE, 1, G_TYPE_OBJECT);
gtk_widget_class_set_template_from_resource (widget_class, "/org/gtk/inspector/object-tree.ui");
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorObjectTree, model);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorObjectTree, tree);
- gtk_widget_class_bind_template_callback (widget_class, on_widget_selected);
+ gtk_widget_class_bind_template_callback (widget_class, on_selection_changed);
+ gtk_widget_class_bind_template_callback (widget_class, on_row_activated);
}
typedef struct
@@ -486,7 +518,6 @@ gtk_inspector_object_tree_append_object (GtkInspectorObjectTree *wt,
g_list_free (list);
}
}
-
}
void
@@ -550,10 +581,14 @@ gtk_inspector_object_tree_select_object (GtkInspectorObjectTree *wt,
if (gtk_inspector_object_tree_find_object (wt, object, &iter))
{
- GtkTreePath *path = gtk_tree_model_get_path (GTK_TREE_MODEL (wt->priv->model), &iter);
+ GtkTreePath *path;
+
+ path = gtk_tree_model_get_path (GTK_TREE_MODEL (wt->priv->model), &iter);
gtk_tree_view_expand_to_path (GTK_TREE_VIEW (wt->priv->tree), path);
gtk_tree_selection_select_iter (gtk_tree_view_get_selection (GTK_TREE_VIEW (wt->priv->tree)), &iter);
gtk_tree_view_scroll_to_cell (GTK_TREE_VIEW (wt->priv->tree), path, NULL, FALSE, 0, 0);
+ gtk_tree_view_row_activated (GTK_TREE_VIEW (wt->priv->tree), path, NULL);
+ gtk_tree_path_free (path);
}
}
diff --git a/gtk/inspector/object-tree.h b/gtk/inspector/object-tree.h
index a90efa6..3348230 100644
--- a/gtk/inspector/object-tree.h
+++ b/gtk/inspector/object-tree.h
@@ -46,8 +46,10 @@ typedef struct _GtkInspectorObjectTreeClass
{
GtkBoxClass parent;
- void (*object_changed) (GtkInspectorObjectTree *wt,
- GObject *object);
+ void (*object_selected) (GtkInspectorObjectTree *wt,
+ GObject *object);
+ void (*object_activated) (GtkInspectorObjectTree *wt,
+ GObject *object);
} GtkInspectorObjectTreeClass;
diff --git a/gtk/inspector/object-tree.ui b/gtk/inspector/object-tree.ui
index 6d0fc69..65f74c9 100644
--- a/gtk/inspector/object-tree.ui
+++ b/gtk/inspector/object-tree.ui
@@ -27,9 +27,12 @@
<property name="model">model</property>
<property name="enable-search">True</property>
<property name="search-column">2</property>
+ <property name="activate-on-single-click">True</property>
+ <signal name="row-activated" handler="on_row_activated"/>
<child internal-child="selection">
<object class="GtkTreeSelection">
- <signal name="changed" handler="on_widget_selected"/>
+ <property name="mode">single</property>
+ <signal name="changed" handler="on_selection_changed"/>
</object>
</child>
<child>
diff --git a/gtk/inspector/window.c b/gtk/inspector/window.c
index 63d04d8..c6aa52a 100644
--- a/gtk/inspector/window.c
+++ b/gtk/inspector/window.c
@@ -42,23 +42,31 @@
#include "misc-info.h"
#include "gestures.h"
-#include "gtknotebook.h"
+#include "gtklabel.h"
+#include "gtkbutton.h"
+#include "gtkstack.h"
+#include "gtktreeviewcolumn.h"
+#include "gtkwindow.h"
#include "gtkwindowgroup.h"
G_DEFINE_TYPE (GtkInspectorWindow, gtk_inspector_window, GTK_TYPE_WINDOW)
static void
-on_object_tree_selection_changed (GtkInspectorObjectTree *wt,
- GObject *selected,
- GtkInspectorWindow *iw)
+on_object_activated (GtkInspectorObjectTree *wt,
+ GObject *selected,
+ const gchar *name,
+ GtkInspectorWindow *iw)
{
- GtkWidget *notebook;
const gchar *tab;
- gint page_num;
+ gchar *id;
if (!gtk_inspector_prop_list_set_object (GTK_INSPECTOR_PROP_LIST (iw->prop_list), selected))
return;
+ id = g_strconcat (g_type_name_from_instance ((GTypeInstance*)selected), name[0] ? " : " : NULL, name,
NULL);
+ gtk_label_set_label (GTK_LABEL (iw->object_id), id);
+ g_free (id);
+
gtk_inspector_prop_list_set_object (GTK_INSPECTOR_PROP_LIST (iw->child_prop_list), selected);
gtk_inspector_style_prop_list_set_object (GTK_INSPECTOR_STYLE_PROP_LIST (iw->style_prop_list), selected);
gtk_inspector_signals_list_set_object (GTK_INSPECTOR_SIGNALS_LIST (iw->signals_list), selected);
@@ -72,29 +80,29 @@ on_object_tree_selection_changed (GtkInspectorObjectTree *wt,
gtk_inspector_menu_set_object (GTK_INSPECTOR_MENU (iw->menu), selected);
gtk_inspector_gestures_set_object (GTK_INSPECTOR_GESTURES (iw->gestures), selected);
- notebook = gtk_widget_get_parent (iw->prop_list);
tab = g_object_get_data (G_OBJECT (wt), "next-tab");
- if (g_strcmp0 (tab, "properties") == 0)
- {
- page_num = gtk_notebook_page_num (GTK_NOTEBOOK (notebook), iw->prop_list);
- gtk_notebook_set_current_page (GTK_NOTEBOOK (notebook), page_num);
- }
- else if (g_strcmp0 (tab, "data") == 0)
- {
- page_num = gtk_notebook_page_num (GTK_NOTEBOOK (notebook), iw->data_list);
- gtk_notebook_set_current_page (GTK_NOTEBOOK (notebook), page_num);
- }
- else if (g_strcmp0 (tab, "actions") == 0)
- {
- page_num = gtk_notebook_page_num (GTK_NOTEBOOK (notebook), iw->actions);
- gtk_notebook_set_current_page (GTK_NOTEBOOK (notebook), page_num);
- }
+ if (tab)
+ gtk_stack_set_visible_child_name (GTK_STACK (iw->object_details), tab);
+
+ gtk_stack_set_visible_child_name (GTK_STACK (iw->object_stack), "object-details");
+}
+static void
+on_object_selected (GtkInspectorObjectTree *wt,
+ GObject *selected,
+ GtkInspectorWindow *iw)
+{
if (GTK_IS_WIDGET (selected))
gtk_inspector_flash_widget (iw, GTK_WIDGET (selected));
}
static void
+close_details (GtkWidget *button, GtkInspectorWindow *iw)
+{
+ gtk_stack_set_visible_child_name (GTK_STACK (iw->object_stack), "object-tree");
+}
+
+static void
gtk_inspector_window_init (GtkInspectorWindow *iw)
{
gtk_widget_init_template (GTK_WIDGET (iw));
@@ -123,7 +131,10 @@ gtk_inspector_window_class_init (GtkInspectorWindowClass *klass)
gtk_widget_class_set_template_from_resource (widget_class, "/org/gtk/inspector/window.ui");
gtk_widget_class_bind_template_child (widget_class, GtkInspectorWindow, top_stack);
+ gtk_widget_class_bind_template_child (widget_class, GtkInspectorWindow, object_stack);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorWindow, object_tree);
+ gtk_widget_class_bind_template_child (widget_class, GtkInspectorWindow, object_details);
+ gtk_widget_class_bind_template_child (widget_class, GtkInspectorWindow, object_id);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorWindow, prop_list);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorWindow, child_prop_list);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorWindow, signals_list);
@@ -139,7 +150,9 @@ gtk_inspector_window_class_init (GtkInspectorWindowClass *klass)
gtk_widget_class_bind_template_child (widget_class, GtkInspectorWindow, gestures);
gtk_widget_class_bind_template_callback (widget_class, gtk_inspector_on_inspect);
- gtk_widget_class_bind_template_callback (widget_class, on_object_tree_selection_changed);
+ gtk_widget_class_bind_template_callback (widget_class, on_object_activated);
+ gtk_widget_class_bind_template_callback (widget_class, on_object_selected);
+ gtk_widget_class_bind_template_callback (widget_class, close_details);
}
GtkWidget *
diff --git a/gtk/inspector/window.h b/gtk/inspector/window.h
index 3ae6768..a0a1a02 100644
--- a/gtk/inspector/window.h
+++ b/gtk/inspector/window.h
@@ -42,7 +42,10 @@ typedef struct
GtkWindow parent;
GtkWidget *top_stack;
+ GtkWidget *object_stack;
GtkWidget *object_tree;
+ GtkWidget *object_id;
+ GtkWidget *object_details;
GtkWidget *prop_list;
GtkWidget *child_prop_list;
GtkWidget *signals_list;
diff --git a/gtk/inspector/window.ui b/gtk/inspector/window.ui
index ccd3c73..81b9227 100644
--- a/gtk/inspector/window.ui
+++ b/gtk/inspector/window.ui
@@ -44,217 +44,198 @@
<object class="GtkStack" id="top_stack">
<property name="visible">True</property>
<child>
- <object class="GtkPaned">
+ <object class="GtkStack" id="object_stack">
<property name="visible">True</property>
- <property name="orientation">horizontal</property>
<child>
<object class="GtkInspectorObjectTree" id="object_tree">
<property name="visible">True</property>
- <signal name="object-changed" handler="on_object_tree_selection_changed"/>
+ <signal name="object-activated" handler="on_object_activated"/>
+ <signal name="object-selected" handler="on_object_selected"/>
</object>
<packing>
- <property name="resize">True</property>
- <property name="shrink">True</property>
+ <property name="name">object-tree</property>
</packing>
</child>
<child>
- <object class="GtkNotebook">
+ <object class="GtkBox">
<property name="visible">True</property>
- <property name="show-border">False</property>
- <property name="scrollable">True</property>
+ <property name="orientation">vertical</property>
<child>
- <object class="GtkInspectorMiscInfo" id="misc_info">
+ <object class="GtkBox">
<property name="visible">True</property>
- <property name="object-tree">object_tree</property>
- </object>
- <packing>
- <property name="tab_expand">True</property>
- <property name="tab_fill">True</property>
- </packing>
- </child>
- <child type="tab">
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Miscellaneous</property>
- </object>
- </child>
- <child>
- <object class="GtkInspectorPropList" id="prop_list">
- <property name="visible">True</property>
- <property name="child-properties">False</property>
- <property name="object-tree">object_tree</property>
- </object>
- <packing>
- <property name="tab_expand">True</property>
- <property name="tab_fill">True</property>
- </packing>
- </child>
- <child type="tab">
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Properties</property>
- </object>
- </child>
- <child>
- <object class="GtkInspectorSignalsList" id="signals_list">
- <property name="visible">True</property>
- </object>
- <packing>
- <property name="tab_expand">True</property>
- <property name="tab_fill">True</property>
- </packing>
- </child>
- <child type="tab">
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Signals</property>
- </object>
- </child>
- <child>
- <object class="GtkInspectorObjectHierarchy" id="object_hierarchy">
- <property name="visible">True</property>
- </object>
- <packing>
- <property name="tab_expand">True</property>
- <property name="tab_fill">True</property>
- </packing>
- </child>
- <child type="tab">
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Hierarchy</property>
+ <property name="orientation">horizontal</property>
+ <child>
+ <object class="GtkButton">
+ <property name="visible">True</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="margin">6</property>
+ <signal name="clicked" handler="close_details"/>
+ <style>
+ <class name="image-button"/>
+ </style>
+ <child>
+ <object class="GtkImage">
+ <property name="visible">True</property>
+ <property name="icon-name">window-close-symbolic</property>
+ <property name="icon-size">1</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="object_id">
+ <property name="visible">True</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ </packing>
+ </child>
</object>
</child>
<child>
- <object class="GtkInspectorPropList" id="child_prop_list">
- <property name="child-properties">True</property>
- <property name="object-tree">object_tree</property>
- </object>
- <packing>
- <property name="tab_expand">True</property>
- <property name="tab_fill">True</property>
- </packing>
- </child>
- <child type="tab">
- <object class="GtkLabel">
+ <object class="GtkSeparator">
<property name="visible">True</property>
- <property name="label" translatable="yes">Child Properties</property>
+ <property name="orientation">horizontal</property>
</object>
</child>
<child>
- <object class="GtkInspectorClassesList" id="classes_list">
- </object>
- <packing>
- <property name="tab_expand">True</property>
- <property name="tab_fill">True</property>
- </packing>
- </child>
- <child type="tab">
- <object class="GtkLabel">
+ <object class="GtkBox">
<property name="visible">True</property>
- <property name="label" translatable="yes">CSS Classes</property>
- </object>
- </child>
- <child>
- <object class="GtkInspectorStylePropList" id="style_prop_list">
+ <property name="orientation">horizontal</property>
+ <child>
+ <object class="GtkSidebar">
+ <property name="visible">True</property>
+ <property name="stack">object_details</property>
</object>
- <packing>
- <property name="tab_expand">True</property>
- <property name="tab_fill">True</property>
- </packing>
- </child>
- <child type="tab">
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Style Properties</property>
+ </child>
+ <child>
+ <object class="GtkStack" id="object_details">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkInspectorMiscInfo" id="misc_info">
+ <property name="visible">True</property>
+ <property name="object-tree">object_tree</property>
+ </object>
+ <packing>
+ <property name="name">misc</property>
+ <property name="title" translatable="yes">Miscellaneous</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkInspectorPropList" id="prop_list">
+ <property name="visible">True</property>
+ <property name="child-properties">False</property>
+ <property name="object-tree">object_tree</property>
+ </object>
+ <packing>
+ <property name="name">properties</property>
+ <property name="title" translatable="yes">Properties</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkInspectorSignalsList" id="signals_list">
+ <property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="name">signals</property>
+ <property name="title" translatable="yes">Signals</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkInspectorObjectHierarchy" id="object_hierarchy">
+ <property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="name">hierarchy</property>
+ <property name="title" translatable="yes">Hierarchy</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkInspectorPropList" id="child_prop_list">
+ <property name="child-properties">True</property>
+ <property name="object-tree">object_tree</property>
+ </object>
+ <packing>
+ <property name="name">child-properties</property>
+ <property name="title" translatable="yes">Child Properties</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkInspectorClassesList" id="classes_list">
</object>
- </child>
- <child>
- <object class="GtkInspectorCssEditor" id="widget_css_editor">
- <property name="global">False</property>
+ <packing>
+ <property name="name">css-classes</property>
+ <property name="title" translatable="yes">CSS Classes</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkInspectorStylePropList" id="style_prop_list">
</object>
- <packing>
- <property name="tab_expand">True</property>
- <property name="tab_fill">True</property>
- </packing>
- </child>
- <child type="tab">
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Custom CSS</property>
+ <packing>
+ <property name="name">style-properties</property>
+ <property name="title" translatable="yes">Style Properties</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkInspectorCssEditor" id="widget_css_editor">
+ <property name="global">False</property>
+ </object>
+ <packing>
+ <property name="name">css</property>
+ <property name="title" translatable="yes">Custom CSS</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkInspectorSizeGroups" id="size_groups">
</object>
- </child>
- <child>
- <object class="GtkInspectorSizeGroups" id="size_groups">
- </object>
- <packing>
- <property name="tab_expand">True</property>
- <property name="tab_fill">True</property>
- </packing>
- </child>
- <child type="tab">
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Size Groups</property>
+ <packing>
+ <property name="name">size-groups</property>
+ <property name="title" translatable="yes">Size Groups</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkInspectorDataList" id="data_list">
</object>
- </child>
- <child>
- <object class="GtkInspectorDataList" id="data_list">
- </object>
- <packing>
- <property name="tab_expand">True</property>
- <property name="tab_fill">True</property>
- </packing>
- </child>
- <child type="tab">
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Data</property>
+ <packing>
+ <property name="name">data</property>
+ <property name="title" translatable="yes">Data</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkInspectorActions" id="actions">
</object>
- </child>
- <child>
- <object class="GtkInspectorActions" id="actions">
- </object>
- <packing>
- <property name="tab_expand">True</property>
- <property name="tab_fill">True</property>
- </packing>
- </child>
- <child type="tab">
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Actions</property>
+ <packing>
+ <property name="name">actions</property>
+ <property name="title" translatable="yes">Actions</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkInspectorMenu" id="menu">
</object>
- </child>
- <child>
- <object class="GtkInspectorMenu" id="menu">
+ <packing>
+ <property name="name">menu</property>
+ <property name="title" translatable="yes">Menu</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkInspectorGestures" id="gestures">
+ <property name="object-tree">object_tree</property>
+ </object>
+ <packing>
+ <property name="name">gestures</property>
+ <property name="title" translatable="yes">Gestures</property>
+ </packing>
+ </child>
</object>
- <packing>
- <property name="tab_expand">True</property>
- <property name="tab_fill">True</property>
- </packing>
- </child>
- <child type="tab">
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Menu</property>
- </object>
- </child>
- <child>
- <object class="GtkInspectorGestures" id="gestures">
- <property name="object-tree">object_tree</property>
- </object>
- </child>
- <child type="tab">
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Gestures</property>
+ </child>
</object>
</child>
</object>
<packing>
- <property name="resize">True</property>
- <property name="shrink">True</property>
+ <property name="name">object-details</property>
</packing>
</child>
</object>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]