inspector: Make visual settings respect the inspected display

This is not quite complete, GTK and GSK debug flags
are not per display, and slowdown and text direction
are not either.
This commit is contained in:
Matthias Clasen 2019-12-07 12:07:12 -05:00
parent 174d8b72a5
commit bd1f7e057a
5 changed files with 60 additions and 41 deletions

View File

@ -91,6 +91,8 @@ struct _GtkInspectorVisualPrivate
GtkInspectorOverlay *fps_overlay;
GtkInspectorOverlay *updates_overlay;
GtkInspectorOverlay *layout_overlay;
GdkDisplay *display;
};
G_DEFINE_TYPE_WITH_PRIVATE (GtkInspectorVisual, gtk_inspector_visual, GTK_TYPE_WIDGET)
@ -165,11 +167,11 @@ static double
get_font_scale (GtkInspectorVisual *vis)
{
#ifdef GDK_WINDOWING_X11
if (GDK_IS_X11_DISPLAY (gdk_display_get_default ()))
if (GDK_IS_X11_DISPLAY (vis->priv->display))
{
int dpi_int;
g_object_get (gtk_settings_get_default (),
g_object_get (gtk_settings_get_for_display (vis->priv->display),
"gtk-xft-dpi", &dpi_int,
NULL);
@ -177,11 +179,11 @@ get_font_scale (GtkInspectorVisual *vis)
}
#endif
#ifdef GDK_WINDOWING_WAYLAND
if (GDK_IS_WAYLAND_DISPLAY (gdk_display_get_default ()))
if (GDK_IS_WAYLAND_DISPLAY (vis->priv->display))
{
int dpi_int;
g_object_get (gtk_settings_get_default (),
g_object_get (gtk_settings_get_for_display (vis->priv->display),
"gtk-xft-dpi", &dpi_int,
NULL);
@ -198,7 +200,7 @@ update_font_scale (GtkInspectorVisual *vis,
gboolean update_adjustment,
gboolean update_entry)
{
g_object_set (gtk_settings_get_default (),
g_object_set (gtk_settings_get_for_display (vis->priv->display),
"gtk-xft-dpi", (gint)(factor * 96 * 1024),
NULL);
@ -505,7 +507,8 @@ init_theme (GtkInspectorVisual *vis)
g_list_free (list);
g_hash_table_destroy (t);
g_object_bind_property (gtk_settings_get_default (), "gtk-theme-name",
g_object_bind_property (gtk_settings_get_for_display (vis->priv->display),
"gtk-theme-name",
vis->priv->theme_combo, "active-id",
G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
@ -523,7 +526,8 @@ init_theme (GtkInspectorVisual *vis)
static void
init_dark (GtkInspectorVisual *vis)
{
g_object_bind_property (gtk_settings_get_default (), "gtk-application-prefer-dark-theme",
g_object_bind_property (gtk_settings_get_for_display (vis->priv->display),
"gtk-application-prefer-dark-theme",
vis->priv->dark_switch, "active",
G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
@ -596,7 +600,8 @@ init_icons (GtkInspectorVisual *vis)
g_hash_table_destroy (t);
g_list_free (list);
g_object_bind_property (gtk_settings_get_default (), "gtk-icon-theme-name",
g_object_bind_property (gtk_settings_get_for_display (vis->priv->display),
"gtk-icon-theme-name",
vis->priv->icon_combo, "active-id",
G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
}
@ -658,7 +663,8 @@ init_cursors (GtkInspectorVisual *vis)
g_hash_table_destroy (t);
g_list_free (list);
g_object_bind_property (gtk_settings_get_default (), "gtk-cursor-theme-name",
g_object_bind_property (gtk_settings_get_for_display (vis->priv->display),
"gtk-cursor-theme-name",
vis->priv->cursor_combo, "active-id",
G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
}
@ -669,7 +675,7 @@ cursor_size_changed (GtkAdjustment *adjustment, GtkInspectorVisual *vis)
gint size;
size = gtk_adjustment_get_value (adjustment);
g_object_set (gtk_settings_get_default (), "gtk-cursor-theme-size", size, NULL);
g_object_set (gtk_settings_get_for_display (vis->priv->display), "gtk-cursor-theme-size", size, NULL);
}
static void
@ -677,7 +683,7 @@ init_cursor_size (GtkInspectorVisual *vis)
{
gint size;
g_object_get (gtk_settings_get_default (), "gtk-cursor-theme-size", &size, NULL);
g_object_get (gtk_settings_get_for_display (vis->priv->display), "gtk-cursor-theme-size", &size, NULL);
if (size == 0)
size = 32;
@ -689,7 +695,8 @@ init_cursor_size (GtkInspectorVisual *vis)
static void
init_font (GtkInspectorVisual *vis)
{
g_object_bind_property (gtk_settings_get_default (), "gtk-font-name",
g_object_bind_property (gtk_settings_get_for_display (vis->priv->display),
"gtk-font-name",
vis->priv->font_button, "font",
G_BINDING_BIDIRECTIONAL|G_BINDING_SYNC_CREATE);
}
@ -711,12 +718,10 @@ init_font_scale (GtkInspectorVisual *vis)
static void
scale_changed (GtkAdjustment *adjustment, GtkInspectorVisual *vis)
{
GdkDisplay *display;
gint scale;
scale = gtk_adjustment_get_value (adjustment);
display = gdk_display_get_default ();
gdk_x11_display_set_surface_scale (display, scale);
gdk_x11_display_set_surface_scale (vis->priv->display, scale);
}
#endif
@ -724,14 +729,11 @@ static void
init_scale (GtkInspectorVisual *vis)
{
#if defined (GDK_WINDOWING_X11)
GdkDisplay *display;
display = gdk_display_get_default ();
if (GDK_IS_X11_DISPLAY (display))
if (GDK_IS_X11_DISPLAY (vis->priv->display))
{
gdouble scale;
scale = gdk_monitor_get_scale_factor (gdk_display_get_primary_monitor (display));
scale = gdk_monitor_get_scale_factor (gdk_display_get_primary_monitor (vis->priv->display));
gtk_adjustment_set_value (vis->priv->scale_adjustment, scale);
g_signal_connect (vis->priv->scale_adjustment, "value-changed",
G_CALLBACK (scale_changed), vis);
@ -751,7 +753,7 @@ init_scale (GtkInspectorVisual *vis)
static void
init_animation (GtkInspectorVisual *vis)
{
g_object_bind_property (gtk_settings_get_default (), "gtk-enable-animations",
g_object_bind_property (gtk_settings_get_for_display (vis->priv->display), "gtk-enable-animations",
vis->priv->animation_switch, "active",
G_BINDING_BIDIRECTIONAL|G_BINDING_SYNC_CREATE);
}
@ -952,7 +954,7 @@ row_activated (GtkListBox *box,
static void
init_gl (GtkInspectorVisual *vis)
{
GdkDebugFlags flags = gdk_display_get_debug_flags (gdk_display_get_default ());
GdkDebugFlags flags = gdk_display_get_debug_flags (vis->priv->display);
gtk_switch_set_active (GTK_SWITCH (vis->priv->software_gl_switch), flags & GDK_DEBUG_GL_SOFTWARE);
@ -968,22 +970,24 @@ init_gl (GtkInspectorVisual *vis)
static void
update_gl_flag (GtkSwitch *sw,
GdkDebugFlags flag)
GdkDebugFlags flag,
GtkInspectorVisual *vis)
{
GdkDebugFlags flags = gdk_display_get_debug_flags (gdk_display_get_default ());
GdkDebugFlags flags = gdk_display_get_debug_flags (vis->priv->display);
if (gtk_switch_get_active (sw))
flags |= flag;
else
flags &= ~flag;
gdk_display_set_debug_flags (gdk_display_get_default (), flags);
gdk_display_set_debug_flags (vis->priv->display, flags);
}
static void
software_gl_activate (GtkSwitch *sw)
software_gl_activate (GtkSwitch *sw,
GtkInspectorVisual *vis)
{
update_gl_flag (sw, GDK_DEBUG_GL_SOFTWARE);
update_gl_flag (sw, GDK_DEBUG_GL_SOFTWARE, vis);
}
static void
@ -991,19 +995,6 @@ gtk_inspector_visual_init (GtkInspectorVisual *vis)
{
vis->priv = gtk_inspector_visual_get_instance_private (vis);
gtk_widget_init_template (GTK_WIDGET (vis));
init_direction (vis);
init_theme (vis);
init_dark (vis);
init_icons (vis);
init_cursors (vis);
init_cursor_size (vis);
init_font (vis);
init_font_scale (vis);
init_scale (vis);
init_animation (vis);
init_slowdown (vis);
init_touchscreen (vis);
init_gl (vis);
}
static void
@ -1124,4 +1115,25 @@ gtk_inspector_visual_class_init (GtkInspectorVisualClass *klass)
gtk_widget_class_bind_template_callback (widget_class, software_gl_activate);
}
void
gtk_inspector_visual_set_display (GtkInspectorVisual *vis,
GdkDisplay *display)
{
vis->priv->display = display;
init_direction (vis);
init_theme (vis);
init_dark (vis);
init_icons (vis);
init_cursors (vis);
init_cursor_size (vis);
init_font (vis);
init_font_scale (vis);
init_scale (vis);
init_animation (vis);
init_slowdown (vis);
init_touchscreen (vis);
init_gl (vis);
}
// vim: set et sw=2 ts=2:

View File

@ -44,6 +44,9 @@ typedef struct _GtkInspectorVisualClass
G_BEGIN_DECLS
GType gtk_inspector_visual_get_type (void);
void gtk_inspector_visual_set_display (GtkInspectorVisual *vis,
GdkDisplay *display);
G_END_DECLS

View File

@ -41,6 +41,7 @@
#include "misc-info.h"
#include "magnifier.h"
#include "recorder.h"
#include "visual.h"
#include "gdk-private.h"
#include "gskrendererprivate.h"
@ -268,6 +269,7 @@ gtk_inspector_window_constructed (GObject *object)
gtk_inspector_object_tree_set_display (GTK_INSPECTOR_OBJECT_TREE (iw->object_tree), iw->inspected_display);
gtk_inspector_css_editor_set_display (GTK_INSPECTOR_CSS_EDITOR (iw->css_editor), iw->inspected_display);
gtk_inspector_visual_set_display (GTK_INSPECTOR_VISUAL (iw->visual), iw->inspected_display);
}
static void
@ -418,6 +420,7 @@ gtk_inspector_window_class_init (GtkInspectorWindowClass *klass)
gtk_widget_class_bind_template_child (widget_class, GtkInspectorWindow, magnifier);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorWindow, sidebar_revealer);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorWindow, css_editor);
gtk_widget_class_bind_template_child (widget_class, GtkInspectorWindow, visual);
gtk_widget_class_bind_template_callback (widget_class, gtk_inspector_on_inspect);
gtk_widget_class_bind_template_callback (widget_class, on_object_activated);

View File

@ -72,6 +72,7 @@ typedef struct
GtkWidget *magnifier;
GtkWidget *sidebar_revealer;
GtkWidget *css_editor;
GtkWidget *visual;
GtkWidget *selected_widget;

View File

@ -473,7 +473,7 @@
<property name="name">visual</property>
<property name="title" translatable="yes">Settings</property>
<property name="child">
<object class="GtkInspectorVisual"/>
<object class="GtkInspectorVisual" id="visual"/>
</property>
</object>
</child>