forked from AuroraMiddleware/gtk
X11: Provide settings in logical pixels
This makes GtkSettings values on X11 match what we get on other backends. Reporting size settings in logical pixels (i.e for scale == 1) is useful for properly supporting mixed-DPI setups. As X11 doesn't support mixed-DPI setups anyway, XSettings doesn't bother providing logical values. Thus we scale from physical to logical values ourselves. Fixes https://gitlab.gnome.org/GNOME/gtk/-/issues/5223 Fixes https://gitlab.gnome.org/GNOME/gtk/-/issues/5230
This commit is contained in:
parent
114e2b607b
commit
ac60bc6095
@ -281,27 +281,32 @@ gdk_x11_display_set_cursor_theme (GdkDisplay *display,
|
|||||||
const int size)
|
const int size)
|
||||||
{
|
{
|
||||||
#if defined(HAVE_XCURSOR) && defined(HAVE_XFIXES) && XFIXES_MAJOR >= 2
|
#if defined(HAVE_XCURSOR) && defined(HAVE_XFIXES) && XFIXES_MAJOR >= 2
|
||||||
|
GdkX11Screen *x11_screen;
|
||||||
Display *xdisplay;
|
Display *xdisplay;
|
||||||
char *old_theme;
|
char *old_theme;
|
||||||
|
int real_size;
|
||||||
int old_size;
|
int old_size;
|
||||||
gpointer cursor, xcursor;
|
gpointer cursor, xcursor;
|
||||||
GHashTableIter iter;
|
GHashTableIter iter;
|
||||||
|
|
||||||
g_return_if_fail (GDK_IS_DISPLAY (display));
|
g_return_if_fail (GDK_IS_DISPLAY (display));
|
||||||
|
|
||||||
|
x11_screen = gdk_x11_display_get_screen (display);
|
||||||
xdisplay = GDK_DISPLAY_XDISPLAY (display);
|
xdisplay = GDK_DISPLAY_XDISPLAY (display);
|
||||||
|
|
||||||
|
real_size = size * x11_screen->surface_scale;
|
||||||
|
|
||||||
old_theme = XcursorGetTheme (xdisplay);
|
old_theme = XcursorGetTheme (xdisplay);
|
||||||
old_size = XcursorGetDefaultSize (xdisplay);
|
old_size = XcursorGetDefaultSize (xdisplay);
|
||||||
|
|
||||||
if (old_size == size &&
|
if (old_size == real_size &&
|
||||||
(old_theme == theme ||
|
(old_theme == theme ||
|
||||||
(old_theme && theme && strcmp (old_theme, theme) == 0)))
|
(old_theme && theme && strcmp (old_theme, theme) == 0)))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
XcursorSetTheme (xdisplay, theme);
|
XcursorSetTheme (xdisplay, theme);
|
||||||
if (size > 0)
|
if (real_size > 0)
|
||||||
XcursorSetDefaultSize (xdisplay, size);
|
XcursorSetDefaultSize (xdisplay, real_size);
|
||||||
|
|
||||||
if (GDK_X11_DISPLAY (display)->cursors == NULL)
|
if (GDK_X11_DISPLAY (display)->cursors == NULL)
|
||||||
return;
|
return;
|
||||||
|
@ -457,16 +457,31 @@ read_settings (GdkX11Screen *x11_screen,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (do_notify)
|
|
||||||
notify_changes (x11_screen, old_list);
|
|
||||||
if (old_list)
|
|
||||||
g_hash_table_unref (old_list);
|
|
||||||
|
|
||||||
g_value_init (&value, G_TYPE_INT);
|
g_value_init (&value, G_TYPE_INT);
|
||||||
|
|
||||||
if (!x11_screen->fixed_surface_scale &&
|
if (!x11_screen->fixed_surface_scale &&
|
||||||
gdk_display_get_setting (display, "gdk-window-scaling-factor", &value))
|
gdk_display_get_setting (display, "gdk-window-scaling-factor", &value))
|
||||||
_gdk_x11_screen_set_surface_scale (x11_screen, g_value_get_int (&value));
|
_gdk_x11_screen_set_surface_scale (x11_screen, g_value_get_int (&value));
|
||||||
|
|
||||||
|
/* XSettings gives us the cursor theme size in physical pixel size,
|
||||||
|
* while we want logical pixel values instead.
|
||||||
|
*/
|
||||||
|
if (x11_screen->surface_scale > 1 &&
|
||||||
|
gdk_display_get_setting (display, "gtk-cursor-theme-size", &value))
|
||||||
|
{
|
||||||
|
int cursor_theme_size = g_value_get_int (&value);
|
||||||
|
|
||||||
|
copy = g_new0 (GValue, 1);
|
||||||
|
g_value_init (copy, G_TYPE_INT);
|
||||||
|
g_value_set_int (copy, cursor_theme_size / x11_screen->surface_scale);
|
||||||
|
g_hash_table_insert (x11_screen->xsettings,
|
||||||
|
(gpointer) "gtk-cursor-theme-size", copy);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (do_notify)
|
||||||
|
notify_changes (x11_screen, old_list);
|
||||||
|
if (old_list)
|
||||||
|
g_hash_table_unref (old_list);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Atom
|
static Atom
|
||||||
|
Loading…
Reference in New Issue
Block a user