x11-display: Expose UI scaling factor via D-Bus
This replaces the `legacy-ui-scaling-factor` entry in `org.gnome.Mutter.DisplayConfig`, with the motivation being to no longer expose X11 specific state via the monitor configuration API. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3567>
This commit is contained in:
parent
2e20602fe8
commit
7635abcbf4
5 changed files with 76 additions and 12 deletions
|
@ -426,10 +426,6 @@
|
||||||
always use the same scale. Absence of
|
always use the same scale. Absence of
|
||||||
this means logical monitor scales can
|
this means logical monitor scales can
|
||||||
differ.
|
differ.
|
||||||
* "legacy-ui-scaling-factor" (i): The legacy scaling factor traditionally
|
|
||||||
used to scale X11 clients (commonly
|
|
||||||
communicated via the
|
|
||||||
Gdk/WindowScalingFactor XSetting entry).
|
|
||||||
-->
|
-->
|
||||||
<method name="GetCurrentState">
|
<method name="GetCurrentState">
|
||||||
<arg name="serial" direction="out" type="u" />
|
<arg name="serial" direction="out" type="u" />
|
||||||
|
|
8
data/dbus-interfaces/org.gnome.Mutter.X11.xml
Normal file
8
data/dbus-interfaces/org.gnome.Mutter.X11.xml
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
<!DOCTYPE node PUBLIC
|
||||||
|
'-//freedesktop//DTD D-BUS Object Introspection 1.0//EN'
|
||||||
|
'http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd'>
|
||||||
|
<node>
|
||||||
|
<interface name="org.gnome.Mutter.X11">
|
||||||
|
<property name="UiScalingFactor" type="i" access="readwrite" />
|
||||||
|
</interface>
|
||||||
|
</node>
|
|
@ -1948,14 +1948,12 @@ meta_monitor_manager_handle_get_current_state (MetaDBusDisplayConfig *skeleton,
|
||||||
GDBusMethodInvocation *invocation,
|
GDBusMethodInvocation *invocation,
|
||||||
MetaMonitorManager *manager)
|
MetaMonitorManager *manager)
|
||||||
{
|
{
|
||||||
MetaSettings *settings = meta_backend_get_settings (manager->backend);
|
|
||||||
GVariantBuilder monitors_builder;
|
GVariantBuilder monitors_builder;
|
||||||
GVariantBuilder logical_monitors_builder;
|
GVariantBuilder logical_monitors_builder;
|
||||||
GVariantBuilder properties_builder;
|
GVariantBuilder properties_builder;
|
||||||
GList *l;
|
GList *l;
|
||||||
int i;
|
int i;
|
||||||
MetaMonitorManagerCapability capabilities;
|
MetaMonitorManagerCapability capabilities;
|
||||||
int ui_scaling_factor;
|
|
||||||
int max_screen_width, max_screen_height;
|
int max_screen_width, max_screen_height;
|
||||||
|
|
||||||
g_variant_builder_init (&monitors_builder,
|
g_variant_builder_init (&monitors_builder,
|
||||||
|
@ -2158,11 +2156,6 @@ meta_monitor_manager_handle_get_current_state (MetaDBusDisplayConfig *skeleton,
|
||||||
g_variant_new_boolean (TRUE));
|
g_variant_new_boolean (TRUE));
|
||||||
}
|
}
|
||||||
|
|
||||||
ui_scaling_factor = meta_settings_get_ui_scaling_factor (settings);
|
|
||||||
g_variant_builder_add (&properties_builder, "{sv}",
|
|
||||||
"legacy-ui-scaling-factor",
|
|
||||||
g_variant_new_int32 (ui_scaling_factor));
|
|
||||||
|
|
||||||
if (meta_monitor_manager_get_max_screen_size (manager,
|
if (meta_monitor_manager_get_max_screen_size (manager,
|
||||||
&max_screen_width,
|
&max_screen_width,
|
||||||
&max_screen_height))
|
&max_screen_height))
|
||||||
|
|
|
@ -968,6 +968,11 @@ dbus_interfaces = [
|
||||||
'interface': 'org.gnome.Mutter.DebugControl.xml',
|
'interface': 'org.gnome.Mutter.DebugControl.xml',
|
||||||
'prefix': 'org.gnome.Mutter',
|
'prefix': 'org.gnome.Mutter',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
'name': 'meta-dbus-x11',
|
||||||
|
'interface': 'org.gnome.Mutter.X11.xml',
|
||||||
|
'prefix': 'org.gnome.Mutter',
|
||||||
|
},
|
||||||
]
|
]
|
||||||
|
|
||||||
if have_profiler
|
if have_profiler
|
||||||
|
|
|
@ -71,7 +71,7 @@
|
||||||
#include "wayland/meta-xwayland-private.h"
|
#include "wayland/meta-xwayland-private.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
G_DEFINE_TYPE (MetaX11Display, meta_x11_display, G_TYPE_OBJECT)
|
#include "meta-dbus-x11.h"
|
||||||
|
|
||||||
static GQuark quark_x11_display_logical_monitor_data = 0;
|
static GQuark quark_x11_display_logical_monitor_data = 0;
|
||||||
|
|
||||||
|
@ -90,6 +90,14 @@ typedef struct _MetaX11DisplayLogicalMonitorData
|
||||||
int xinerama_index;
|
int xinerama_index;
|
||||||
} MetaX11DisplayLogicalMonitorData;
|
} MetaX11DisplayLogicalMonitorData;
|
||||||
|
|
||||||
|
typedef struct _MetaX11DisplayPrivate
|
||||||
|
{
|
||||||
|
MetaDBusX11 *dbus_api;
|
||||||
|
guint dbus_name_id;
|
||||||
|
} MetaX11DisplayPrivate;
|
||||||
|
|
||||||
|
G_DEFINE_TYPE_WITH_PRIVATE (MetaX11Display, meta_x11_display, G_TYPE_OBJECT)
|
||||||
|
|
||||||
static char *get_screen_name (Display *xdisplay,
|
static char *get_screen_name (Display *xdisplay,
|
||||||
int number);
|
int number);
|
||||||
|
|
||||||
|
@ -152,13 +160,46 @@ meta_x11_event_filter_free (MetaX11EventFilter *filter)
|
||||||
g_free (filter);
|
g_free (filter);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
on_bus_acquired (GDBusConnection *connection,
|
||||||
|
const char *name,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
MetaX11Display *x11_display = user_data;
|
||||||
|
MetaX11DisplayPrivate *priv =
|
||||||
|
meta_x11_display_get_instance_private (x11_display);
|
||||||
|
|
||||||
|
g_dbus_interface_skeleton_export (G_DBUS_INTERFACE_SKELETON (priv->dbus_api),
|
||||||
|
connection,
|
||||||
|
"/org/gnome/Mutter/X11",
|
||||||
|
NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
update_ui_scaling_factor (MetaX11Display *x11_display)
|
||||||
|
{
|
||||||
|
MetaX11DisplayPrivate *priv =
|
||||||
|
meta_x11_display_get_instance_private (x11_display);
|
||||||
|
MetaBackend *backend = backend_from_x11_display (x11_display);
|
||||||
|
MetaSettings *settings = meta_backend_get_settings (backend);
|
||||||
|
int ui_scaling_factor;
|
||||||
|
|
||||||
|
ui_scaling_factor = meta_settings_get_ui_scaling_factor (settings);
|
||||||
|
meta_dbus_x11_set_ui_scaling_factor (priv->dbus_api, ui_scaling_factor);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
meta_x11_display_dispose (GObject *object)
|
meta_x11_display_dispose (GObject *object)
|
||||||
{
|
{
|
||||||
MetaX11Display *x11_display = META_X11_DISPLAY (object);
|
MetaX11Display *x11_display = META_X11_DISPLAY (object);
|
||||||
|
MetaX11DisplayPrivate *priv =
|
||||||
|
meta_x11_display_get_instance_private (x11_display);
|
||||||
|
|
||||||
x11_display->closing = TRUE;
|
x11_display->closing = TRUE;
|
||||||
|
|
||||||
|
g_clear_handle_id (&priv->dbus_name_id, g_bus_unown_name);
|
||||||
|
g_clear_object (&priv->dbus_api);
|
||||||
|
|
||||||
g_clear_pointer (&x11_display->alarm_filters, g_ptr_array_unref);
|
g_clear_pointer (&x11_display->alarm_filters, g_ptr_array_unref);
|
||||||
|
|
||||||
g_clear_list (&x11_display->event_funcs,
|
g_clear_list (&x11_display->event_funcs,
|
||||||
|
@ -1221,6 +1262,23 @@ meta_x11_display_init_frames_client (MetaX11Display *x11_display)
|
||||||
on_frames_client_died, x11_display);
|
on_frames_client_died, x11_display);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
initialize_dbus_interface (MetaX11Display *x11_display)
|
||||||
|
{
|
||||||
|
MetaX11DisplayPrivate *priv =
|
||||||
|
meta_x11_display_get_instance_private (x11_display);
|
||||||
|
|
||||||
|
priv->dbus_api = meta_dbus_x11_skeleton_new ();
|
||||||
|
priv->dbus_name_id =
|
||||||
|
g_bus_own_name (G_BUS_TYPE_SESSION,
|
||||||
|
"org.gnome.Mutter.X11",
|
||||||
|
G_BUS_NAME_OWNER_FLAGS_NONE,
|
||||||
|
on_bus_acquired,
|
||||||
|
NULL, NULL,
|
||||||
|
x11_display, NULL);
|
||||||
|
update_ui_scaling_factor (x11_display);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* meta_x11_display_new:
|
* meta_x11_display_new:
|
||||||
*
|
*
|
||||||
|
@ -1317,6 +1375,8 @@ meta_x11_display_new (MetaDisplay *display,
|
||||||
x11_display = g_object_new (META_TYPE_X11_DISPLAY, NULL);
|
x11_display = g_object_new (META_TYPE_X11_DISPLAY, NULL);
|
||||||
x11_display->display = display;
|
x11_display->display = display;
|
||||||
|
|
||||||
|
initialize_dbus_interface (x11_display);
|
||||||
|
|
||||||
/* here we use XDisplayName which is what the user
|
/* here we use XDisplayName which is what the user
|
||||||
* probably put in, vs. DisplayString(display) which is
|
* probably put in, vs. DisplayString(display) which is
|
||||||
* canonicalized by XOpenDisplay()
|
* canonicalized by XOpenDisplay()
|
||||||
|
@ -1980,6 +2040,8 @@ on_monitors_changed_internal (MetaMonitorManager *monitor_manager,
|
||||||
}
|
}
|
||||||
|
|
||||||
x11_display->has_xinerama_indices = FALSE;
|
x11_display->has_xinerama_indices = FALSE;
|
||||||
|
|
||||||
|
update_ui_scaling_factor (x11_display);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Bool
|
static Bool
|
||||||
|
|
Loading…
Reference in a new issue