diff --git a/gtk/inspector/general.c b/gtk/inspector/general.c
index 54002ea5fa..773ef889a1 100644
--- a/gtk/inspector/general.c
+++ b/gtk/inspector/general.c
@@ -20,7 +20,6 @@
#include "general.h"
-#include "gtkadjustment.h"
#include "gtkdebug.h"
#include "gtklabel.h"
#include "gtkscale.h"
@@ -61,9 +60,6 @@ struct _GtkInspectorGeneralPrivate
GtkWidget *gtk_exe_prefix;
GtkWidget *gtk_data_prefix;
GtkWidget *gsettings_schema_dir;
- GtkWidget *hidpi_spin;
- GtkWidget *touchscreen_switch;
- GtkAdjustment *scale_adjustment;
};
G_DEFINE_TYPE_WITH_PRIVATE (GtkInspectorGeneral, gtk_inspector_general, GTK_TYPE_BOX)
@@ -149,72 +145,6 @@ init_env (GtkInspectorGeneral *gen)
set_path_label (gen->priv->gsettings_schema_dir, "GSETTINGS_SCHEMA_DIR");
}
-static void
-update_touchscreen (GtkSwitch *sw, GParamSpec *pspec, GtkInspectorGeneral *gen)
-{
- GtkDebugFlag flags;
-
- flags = gtk_get_debug_flags ();
-
- if (gtk_switch_get_active (sw))
- flags |= GTK_DEBUG_TOUCHSCREEN;
- else
- flags &= ~GTK_DEBUG_TOUCHSCREEN;
-
- gtk_set_debug_flags (flags);
-}
-
-#if defined (GDK_WINDOWING_X11) && defined (HAVE_CAIRO_SURFACE_SET_DEVICE_SCALE)
-static void
-scale_changed (GtkAdjustment *adjustment, GtkInspectorGeneral *gen)
-{
- GdkDisplay *display;
- gint scale;
-
- scale = gtk_adjustment_get_value (adjustment);
- display = gtk_widget_get_display (GTK_WIDGET (gen));
- gdk_x11_display_set_window_scale (display, scale);
-}
-#endif
-
-static void
-init_settings (GtkInspectorGeneral *gen)
-{
-#if defined (GDK_WINDOWING_X11) && defined (HAVE_CAIRO_SURFACE_SET_DEVICE_SCALE)
- GdkScreen *screen;
-
- screen = gtk_widget_get_screen (GTK_WIDGET (gen));
- if (GDK_IS_X11_SCREEN (screen))
- {
- gdouble scale;
-
- scale = gdk_screen_get_monitor_scale_factor (screen, 0);
- gtk_adjustment_set_value (gen->priv->scale_adjustment, scale);
- g_signal_connect (gen->priv->scale_adjustment, "value-changed",
- G_CALLBACK (scale_changed), gen);
- }
- else
-#endif
- {
- gtk_adjustment_set_value (gen->priv->scale_adjustment, 1);
- gtk_widget_set_sensitive (gen->priv->hidpi_spin, FALSE);
- gtk_widget_set_tooltip_text (gen->priv->hidpi_spin,
- _("Backend does not support window scaling"));
- }
-
- gtk_switch_set_active (GTK_SWITCH (gen->priv->touchscreen_switch), (gtk_get_debug_flags () & GTK_DEBUG_TOUCHSCREEN) != 0);
- g_signal_connect (gen->priv->touchscreen_switch, "notify::active",
- G_CALLBACK (update_touchscreen), gen);
-
- if (g_getenv ("GTK_TEST_TOUCHSCREEN") != 0)
- {
- /* hardcoded, nothing we can do */
- gtk_switch_set_active (GTK_SWITCH (gen->priv->touchscreen_switch), TRUE);
- gtk_widget_set_sensitive (gen->priv->touchscreen_switch, FALSE);
- gtk_widget_set_tooltip_text (gen->priv->touchscreen_switch, _("Setting is hardcoded by GTK_TEST_TOUCHSCREEN"));
- }
-}
-
static void
gtk_inspector_general_init (GtkInspectorGeneral *gen)
{
@@ -222,7 +152,6 @@ gtk_inspector_general_init (GtkInspectorGeneral *gen)
gtk_widget_init_template (GTK_WIDGET (gen));
init_version (gen);
init_env (gen);
- init_settings (gen);
}
static void
@@ -240,9 +169,6 @@ gtk_inspector_general_class_init (GtkInspectorGeneralClass *klass)
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorGeneral, gtk_exe_prefix);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorGeneral, gtk_data_prefix);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorGeneral, gsettings_schema_dir);
- gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorGeneral, hidpi_spin);
- gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorGeneral, scale_adjustment);
- gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorGeneral, touchscreen_switch);
}
// vim: set et sw=2 ts=2:
diff --git a/gtk/inspector/general.ui b/gtk/inspector/general.ui
index b20020a7c7..65de4f641a 100644
--- a/gtk/inspector/general.ui
+++ b/gtk/inspector/general.ui
@@ -1,11 +1,5 @@
-
vertical
60
@@ -284,74 +278,6 @@
-
-
-
horizontal
@@ -365,7 +291,6 @@
-
@@ -373,7 +298,6 @@
-
diff --git a/gtk/inspector/visual.c b/gtk/inspector/visual.c
index a665b5b7ac..9af48530fe 100644
--- a/gtk/inspector/visual.c
+++ b/gtk/inspector/visual.c
@@ -20,6 +20,8 @@
#include "visual.h"
+#include "gtkadjustment.h"
+#include "gtkbox.h"
#include "gtkcomboboxtext.h"
#include "gtkdebug.h"
#include "gtkprivate.h"
@@ -27,19 +29,30 @@
#include "gtkswitch.h"
#include "gtkwindow.h"
+#ifdef GDK_WINDOWING_X11
+#include "x11/gdkx.h"
+#endif
+
struct _GtkInspectorVisualPrivate
{
- GtkWidget *direction_combo;
- GtkWidget *updates_switch;
- GtkWidget *baselines_switch;
- GtkWidget *pixelcache_switch;
-
+ GtkWidget *visual_box;
GtkWidget *theme_combo;
GtkWidget *dark_switch;
GtkWidget *icon_combo;
+ GtkWidget *direction_combo;
+ GtkWidget *hidpi_spin;
+ GtkAdjustment *scale_adjustment;
+
+ GtkWidget *debug_box;
+ GtkWidget *updates_switch;
+ GtkWidget *baselines_switch;
+ GtkWidget *pixelcache_switch;
+ GtkWidget *touchscreen_switch;
+
+ GtkAdjustment *focus_adjustment;
};
-G_DEFINE_TYPE_WITH_PRIVATE (GtkInspectorVisual, gtk_inspector_visual, GTK_TYPE_BOX)
+G_DEFINE_TYPE_WITH_PRIVATE (GtkInspectorVisual, gtk_inspector_visual, GTK_TYPE_SCROLLED_WINDOW)
static void
fix_direction_recurse (GtkWidget *widget,
@@ -325,6 +338,116 @@ icons_changed (GtkComboBox *c,
g_free (theme);
}
+#if defined (GDK_WINDOWING_X11) && defined (HAVE_CAIRO_SURFACE_SET_DEVICE_SCALE)
+static void
+scale_changed (GtkAdjustment *adjustment, GtkInspectorVisual *vis)
+{
+ GdkDisplay *display;
+ gint scale;
+
+ scale = gtk_adjustment_get_value (adjustment);
+ display = gtk_widget_get_display (GTK_WIDGET (vis));
+ gdk_x11_display_set_window_scale (display, scale);
+}
+#endif
+
+static void
+init_scale (GtkInspectorVisual *vis)
+{
+#if defined (GDK_WINDOWING_X11) && defined (HAVE_CAIRO_SURFACE_SET_DEVICE_SCALE)
+ GdkScreen *screen;
+
+ screen = gtk_widget_get_screen (GTK_WIDGET (vis));
+ if (GDK_IS_X11_SCREEN (screen))
+ {
+ gdouble scale;
+
+ scale = gdk_screen_get_monitor_scale_factor (screen, 0);
+ gtk_adjustment_set_value (vis->priv->scale_adjustment, scale);
+ g_signal_connect (vis->priv->scale_adjustment, "value-changed",
+ G_CALLBACK (scale_changed), vis);
+ }
+ else
+#endif
+ {
+ gtk_adjustment_set_value (vis->priv->scale_adjustment, 1);
+ gtk_widget_set_sensitive (vis->priv->hidpi_spin, FALSE);
+ gtk_widget_set_tooltip_text (vis->priv->hidpi_spin,
+ _("Backend does not support window scaling"));
+ }
+}
+
+static void
+update_touchscreen (GtkSwitch *sw)
+{
+ GtkDebugFlag flags;
+
+ flags = gtk_get_debug_flags ();
+
+ if (gtk_switch_get_active (sw))
+ flags |= GTK_DEBUG_TOUCHSCREEN;
+ else
+ flags &= ~GTK_DEBUG_TOUCHSCREEN;
+
+ gtk_set_debug_flags (flags);
+}
+
+static void
+init_touchscreen (GtkInspectorVisual *vis)
+{
+ gtk_switch_set_active (GTK_SWITCH (vis->priv->touchscreen_switch), (gtk_get_debug_flags () & GTK_DEBUG_TOUCHSCREEN) != 0);
+ g_signal_connect (vis->priv->touchscreen_switch, "notify::active",
+ G_CALLBACK (update_touchscreen), NULL);
+
+ if (g_getenv ("GTK_TEST_TOUCHSCREEN") != 0)
+ {
+ /* hardcoded, nothing we can do */
+ gtk_switch_set_active (GTK_SWITCH (vis->priv->touchscreen_switch), TRUE);
+ gtk_widget_set_sensitive (vis->priv->touchscreen_switch, FALSE);
+ gtk_widget_set_tooltip_text (vis->priv->touchscreen_switch, _("Setting is hardcoded by GTK_TEST_TOUCHSCREEN"));
+ }
+}
+
+static gboolean
+keynav_failed (GtkWidget *widget, GtkDirectionType direction, GtkInspectorVisual *vis)
+{
+ GtkWidget *next;
+ gdouble value, lower, upper, page;
+
+ if (direction == GTK_DIR_DOWN &&
+ widget == vis->priv->visual_box)
+ next = vis->priv->debug_box;
+ else if (direction == GTK_DIR_UP &&
+ widget == vis->priv->debug_box)
+ next = vis->priv->visual_box;
+ else
+ next = NULL;
+
+ if (next)
+ {
+ gtk_widget_child_focus (next, direction);
+ return TRUE;
+ }
+
+ value = gtk_adjustment_get_value (vis->priv->focus_adjustment);
+ lower = gtk_adjustment_get_lower (vis->priv->focus_adjustment);
+ upper = gtk_adjustment_get_upper (vis->priv->focus_adjustment);
+ page = gtk_adjustment_get_page_size (vis->priv->focus_adjustment);
+
+ if (direction == GTK_DIR_UP && value > lower)
+ {
+ gtk_adjustment_set_value (vis->priv->focus_adjustment, lower);
+ return TRUE;
+ }
+ else if (direction == GTK_DIR_DOWN && value < upper - page)
+ {
+ gtk_adjustment_set_value (vis->priv->focus_adjustment, upper - page);
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
static void
gtk_inspector_visual_init (GtkInspectorVisual *vis)
{
@@ -334,12 +457,32 @@ gtk_inspector_visual_init (GtkInspectorVisual *vis)
init_theme (vis);
init_dark (vis);
init_icons (vis);
+ init_scale (vis);
+ init_touchscreen (vis);
+}
+
+static void
+gtk_inspector_visual_constructed (GObject *object)
+{
+ GtkInspectorVisual *vis = GTK_INSPECTOR_VISUAL (object);
+
+ G_OBJECT_CLASS (gtk_inspector_visual_parent_class)->constructed (object);
+
+ vis->priv->focus_adjustment = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (vis));
+ gtk_container_set_focus_vadjustment (GTK_CONTAINER (gtk_bin_get_child (GTK_BIN (vis))),
+ vis->priv->focus_adjustment);
+
+ g_signal_connect (vis->priv->visual_box, "keynav-failed", G_CALLBACK (keynav_failed), vis);
+ g_signal_connect (vis->priv->debug_box, "keynav-failed", G_CALLBACK (keynav_failed), vis);
}
static void
gtk_inspector_visual_class_init (GtkInspectorVisualClass *klass)
{
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->constructed = gtk_inspector_visual_constructed;
gtk_widget_class_set_template_from_resource (widget_class, "/org/gtk/inspector/visual.ui");
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorVisual, updates_switch);
@@ -349,6 +492,11 @@ gtk_inspector_visual_class_init (GtkInspectorVisualClass *klass)
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorVisual, dark_switch);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorVisual, theme_combo);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorVisual, icon_combo);
+ gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorVisual, hidpi_spin);
+ gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorVisual, scale_adjustment);
+ gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorVisual, touchscreen_switch);
+ gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorVisual, visual_box);
+ gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorVisual, debug_box);
gtk_widget_class_bind_template_callback (widget_class, updates_activate);
gtk_widget_class_bind_template_callback (widget_class, direction_changed);
@@ -356,7 +504,6 @@ gtk_inspector_visual_class_init (GtkInspectorVisualClass *klass)
gtk_widget_class_bind_template_callback (widget_class, pixelcache_activate);
gtk_widget_class_bind_template_callback (widget_class, theme_changed);
gtk_widget_class_bind_template_callback (widget_class, icons_changed);
-
}
// vim: set et sw=2 ts=2:
diff --git a/gtk/inspector/visual.h b/gtk/inspector/visual.h
index 593be52b32..90df94f034 100644
--- a/gtk/inspector/visual.h
+++ b/gtk/inspector/visual.h
@@ -18,7 +18,7 @@
#ifndef _GTK_INSPECTOR_VISUAL_H_
#define _GTK_INSPECTOR_VISUAL_H_
-#include
+#include
#define GTK_TYPE_INSPECTOR_VISUAL (gtk_inspector_visual_get_type())
#define GTK_INSPECTOR_VISUAL(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GTK_TYPE_INSPECTOR_VISUAL, GtkInspectorVisual))
@@ -32,13 +32,13 @@ typedef struct _GtkInspectorVisualPrivate GtkInspectorVisualPrivate;
typedef struct _GtkInspectorVisual
{
- GtkBox parent;
+ GtkScrolledWindow parent;
GtkInspectorVisualPrivate *priv;
} GtkInspectorVisual;
typedef struct _GtkInspectorVisualClass
{
- GtkBoxClass parent;
+ GtkScrolledWindowClass parent;
} GtkInspectorVisualClass;
G_BEGIN_DECLS
diff --git a/gtk/inspector/visual.ui b/gtk/inspector/visual.ui
index 5233c9403a..499bc4ad10 100644
--- a/gtk/inspector/visual.ui
+++ b/gtk/inspector/visual.ui
@@ -1,6 +1,17 @@
-
+
+ 1
+ 2
+ 1
+ 1
+
+
+ never
+ automatic
+
+
+ True
vertical
60
10
@@ -9,9 +20,12 @@
True
center
-
+
True
none
+
True
@@ -127,6 +141,35 @@
+
+
+ True
+ horizontal
+ 10
+ 40
+
+
+ True
+ Window scaling
+ start
+ baseline
+ 0.0
+
+
+
+
+ True
+ end
+ baseline
+ scale_adjustment
+ True
+
+
+ True
+
+
+
+
@@ -136,7 +179,7 @@
True
center
-
+
True
none
@@ -223,10 +266,39 @@
+
+
+ True
+ horizontal
+ 10
+ 40
+
+
+ True
+ Simulate touchscreen
+ start
+ baseline
+ 0.0
+
+
+
+
+ True
+ end
+ baseline
+
+
+ True
+
+
+
+
+
+
horizontal
@@ -235,9 +307,11 @@
+
+