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 @@ - - 1 - 2 - 1 - 1 - 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 @@ -