[gnome-flashback] backends: add updated display config interface
- From: Alberts Muktupāvels <muktupavels src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-flashback] backends: add updated display config interface
- Date: Sat, 9 Sep 2017 22:18:21 +0000 (UTC)
commit e88314287c24908abcd02166e3ba789e66e23316
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date: Sat Sep 9 21:42:21 2017 +0300
backends: add updated display config interface
backends/Makefile.am | 11 +
backends/org.gnome.Mutter.DisplayConfig.xml | 449 +++++++++++++++++++++++++++
2 files changed, 460 insertions(+), 0 deletions(-)
---
diff --git a/backends/Makefile.am b/backends/Makefile.am
index 01801ee..e53f01d 100644
--- a/backends/Makefile.am
+++ b/backends/Makefile.am
@@ -44,10 +44,21 @@ libbackends_la_LIBADD = \
$(LIBM) \
$(NULL)
+gf-dbus-display-config.h:
+gf-dbus-display-config.c: org.gnome.Mutter.DisplayConfig.xml
+ $(AM_V_GEN) $(GDBUS_CODEGEN) \
+ --c-namespace GfDBus \
+ --generate-c-code gf-dbus-display-config \
+ --interface-prefix org.gnome.Mutter \
+ $(srcdir)/org.gnome.Mutter.DisplayConfig.xml
+
BUILT_SOURCES = \
+ gf-dbus-display-config.c \
+ gf-dbus-display-config.h \
$(NULL)
EXTRA_DIST = \
+ org.gnome.Mutter.DisplayConfig.xml \
$(NULL)
CLEANFILES = \
diff --git a/backends/org.gnome.Mutter.DisplayConfig.xml b/backends/org.gnome.Mutter.DisplayConfig.xml
new file mode 100644
index 0000000..f0e877c
--- /dev/null
+++ b/backends/org.gnome.Mutter.DisplayConfig.xml
@@ -0,0 +1,449 @@
+<!DOCTYPE node PUBLIC
+'-//freedesktop//DTD D-BUS Object Introspection 1.0//EN'
+'http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd'>
+<node>
+ <!--
+ org.gnome.Mutter.DisplayConfig:
+ @short_description: display configuration interface
+
+ This interface is used by mutter and gnome-settings-daemon
+ to apply multiple monitor configuration.
+ -->
+
+ <interface name="org.gnome.Mutter.DisplayConfig">
+
+ <!--
+ GetResources:
+ @serial: configuration serial
+ @crtcs: available CRTCs
+ @outputs: available outputs
+ @modes: available modes
+ @max_screen_width:
+ @max_screen_height:
+
+ Retrieves the current layout of the hardware.
+
+ @serial is an unique identifier representing the current state
+ of the screen. It must be passed back to ApplyConfiguration()
+ and will be increased for every configuration change (so that
+ mutter can detect that the new configuration is based on old
+ state).
+
+ A CRTC (CRT controller) is a logical monitor, ie a portion
+ of the compositor coordinate space. It might correspond
+ to multiple monitors, when in clone mode, but not that
+ it is possible to implement clone mode also by setting different
+ CRTCs to the same coordinates.
+
+ The number of CRTCs represent the maximum number of monitors
+ that can be set to expand and it is a HW constraint; if more
+ monitors are connected, then necessarily some will clone. This
+ is complementary to the concept of the encoder (not exposed in
+ the API), which groups outputs that necessarily will show the
+ same image (again a HW constraint).
+
+ A CRTC is represented by a DBus structure with the following
+ layout:
+ * u ID: the ID in the API of this CRTC
+ * x winsys_id: the low-level ID of this CRTC (which might
+ be a XID, a KMS handle or something entirely
+ different)
+ * i x, y, width, height: the geometry of this CRTC
+ (might be invalid if the CRTC is not in
+ use)
+ * i current_mode: the current mode of the CRTC, or -1 if this
+ CRTC is not used
+ Note: the size of the mode will always correspond
+ to the width and height of the CRTC
+ * u current_transform: the current transform (espressed according
+ to the wayland protocol)
+ * au transforms: all possible transforms
+ * a{sv} properties: other high-level properties that affect this
+ CRTC; they are not necessarily reflected in
+ the hardware.
+ No property is specified in this version of the API.
+
+ Note: all geometry information refers to the untransformed
+ display.
+
+ An output represents a physical screen, connected somewhere to
+ the computer. Floating connectors are not exposed in the API.
+ An output is a DBus struct with the following fields:
+ * u ID: the ID in the API
+ * x winsys_id: the low-level ID of this output (XID or KMS handle)
+ * i current_crtc: the CRTC that is currently driving this output,
+ or -1 if the output is disabled
+ * au possible_crtcs: all CRTCs that can control this output
+ * s name: the name of the connector to which the output is attached
+ (like VGA1 or HDMI)
+ * au modes: valid modes for this output
+ * au clones: valid clones for this output, ie other outputs that
+ can be assigned the same CRTC as this one; if you
+ want to mirror two outputs that don't have each other
+ in the clone list, you must configure two different
+ CRTCs for the same geometry
+ * a{sv} properties: other high-level properties that affect this
+ output; they are not necessarily reflected in
+ the hardware.
+ Known properties:
+ - "vendor" (s): (readonly) the human readable name
+ of the manufacturer
+ - "product" (s): (readonly) the human readable name
+ of the display model
+ - "serial" (s): (readonly) the serial number of this
+ particular hardware part
+ - "display-name" (s): (readonly) a human readable name
+ of this output, to be shown in the UI
+ - "backlight" (i): (readonly, use the specific interface)
+ the backlight value as a percentage
+ (-1 if not supported)
+ - "primary" (b): whether this output is primary
+ or not
+ - "presentation" (b): whether this output is
+ for presentation only
+ Note: properties might be ignored if not consistenly
+ applied to all outputs in the same clone group. In
+ general, it's expected that presentation or primary
+ outputs will not be cloned.
+
+ A mode represents a set of parameters that are applied to
+ each output, such as resolution and refresh rate. It is a separate
+ object so that it can be referenced by CRTCs and outputs.
+ Multiple outputs in the same CRTCs must all have the same mode.
+ A mode is exposed as:
+ * u ID: the ID in the API
+ * x winsys_id: the low-level ID of this mode
+ * u width, height: the resolution
+ * d frequency: refresh rate
+ * u flags: mode flags as defined in xf86drmMode.h and randr.h
+
+ Output and modes are read-only objects (except for output properties),
+ they can change only in accordance to HW changes (such as hotplugging
+ a monitor), while CRTCs can be changed with ApplyConfiguration().
+
+ XXX: actually, if you insist enough, you can add new modes
+ through xrandr command line or the KMS API, overriding what the
+ kernel driver and the EDID say.
+ Usually, it only matters with old cards with broken drivers, or
+ old monitors with broken EDIDs, but it happens more often with
+ projectors (if for example the kernel driver doesn't add the
+ 640x480 - 800x600 - 1024x768 default modes). Probably something
+ that we need to handle in mutter anyway.
+ -->
+ <method name="GetResources">
+ <arg name="serial" direction="out" type="u" />
+ <arg name="crtcs" direction="out" type="a(uxiiiiiuaua{sv})" />
+ <arg name="outputs" direction="out" type="a(uxiausauaua{sv})" />
+ <arg name="modes" direction="out" type="a(uxuudu)" />
+ <arg name="max_screen_width" direction="out" type="i" />
+ <arg name="max_screen_height" direction="out" type="i" />
+ </method>
+
+ <!--
+ ApplyConfiguration:
+ @serial: configuration serial
+ @persistent: whether this configuration should be saved on disk
+ @crtcs: new data for CRTCs
+ @outputs: new data for outputs
+
+ Applies the requested configuration changes.
+
+ @serial must match the serial from the last GetResources() call,
+ or org.freedesktop.DBus.AccessDenied will be generated.
+
+ If @persistent is true, mutter will attempt to replicate this
+ configuration the next time this HW layout appears.
+
+ @crtcs represents the new logical configuration, as a list
+ of structures containing:
+ - u ID: the API ID from the corresponding GetResources() call
+ - i new_mode: the API ID of the new mode to configure the CRTC
+ with, or -1 if the CRTC should be disabled
+ - i x, y: the new coordinates of the top left corner
+ the geometry will be completed with the size information
+ from @new_mode
+ - u transform: the desired transform
+ - au outputs: the API ID of outputs that should be assigned to
+ this CRTC
+ - a{sv} properties: properties whose value should be changed
+
+ Note: CRTCs not referenced in the array will be disabled.
+
+ @outputs represent the output property changes as:
+ - u ID: the API ID of the output to change
+ - a{sv} properties: properties whose value should be changed
+
+ Note: both for CRTCs and outputs, properties not included in
+ the dictionary will not be changed.
+
+ Note: unrecognized properties will have no effect, but if the
+ configuration change succeeds the property will be reported
+ by the next GetResources() call, and if @persistent is true,
+ it will also be saved to disk.
+
+ If the configuration is invalid according to the previous
+ GetResources() call, for example because a CRTC references
+ an output it cannot drive, or not all outputs support the
+ chosen mode, the error org.freedesktop.DBus.InvalidArgs will
+ be generated.
+
+ If the configuration cannot be applied for any other reason
+ (eg. the screen size would exceed texture limits), the error
+ org.freedesktop.DBus.Error.LimitsExceeded will be generated.
+ -->
+ <method name="ApplyConfiguration">
+ <arg name="serial" direction="in" type="u" />
+ <arg name="persistent" direction="in" type="b" />
+ <arg name="crtcs" direction="in" type="a(uiiiuaua{sv})" />
+ <arg name="outputs" direction="in" type="a(ua{sv})" />
+ </method>
+
+ <!--
+ ChangeBacklight:
+ @serial: configuration serial
+ @output: the API id of the output
+ @value: the new backlight value
+
+ Changes the backlight of @output to @value, which is
+ expressed as a percentage and rounded to the HW limits.
+
+ Returns the new value after rounding.
+ -->
+ <method name="ChangeBacklight">
+ <arg name="serial" direction="in" type="u" />
+ <arg name="output" direction="in" type="u" />
+ <arg name="value" direction="in" type="i" />
+ <arg name="new_value" direction="out" type="i" />
+ </method>
+
+ <!--
+ GetCrtcGamma:
+ @serial: configuration serial
+ @crtc: API id of the crtc
+ @red: red gamma ramp
+ @green: green gamma ramp
+ @blue: blue gamma ramp
+
+ Requests the current gamma ramps of @crtc.
+ -->
+ <method name="GetCrtcGamma">
+ <arg name="serial" direction="in" type="u" />
+ <arg name="crtc" direction="in" type="u" />
+ <arg name="red" direction="out" type="aq" />
+ <arg name="green" direction="out" type="aq" />
+ <arg name="blue" direction="out" type="aq" />
+ </method>
+
+ <!--
+ SetCrtcGamma:
+ @serial: configuration serial
+ @crtc: API id of the crtc
+ @red: red gamma ramp
+ @green: green gamma ramp
+ @blue: blue gamma ramp
+
+ Changes the gamma ramps of @crtc.
+ -->
+ <method name="SetCrtcGamma">
+ <arg name="serial" direction="in" type="u" />
+ <arg name="crtc" direction="in" type="u" />
+ <arg name="red" direction="in" type="aq" />
+ <arg name="green" direction="in" type="aq" />
+ <arg name="blue" direction="in" type="aq" />
+ </method>
+
+ <!--
+ PowerSaveMode:
+
+ Contains the current power saving mode for the screen, and
+ allows changing it.
+
+ Possible values:
+ - 0: on
+ - 1: standby
+ - 2: suspend
+ - 3: off
+ - -1: unknown (unsupported)
+
+ A client should not attempt to change the powersave mode
+ from -1 (unknown) to any other value, and viceversa.
+ Note that the actual effects of the different values
+ depend on the hardware and the kernel driver in use, and
+ it's perfectly possible that all values different than on
+ have the same effect.
+ Also, setting the PowerSaveMode to 3 (off) may or may
+ not have the same effect as disabling all outputs by
+ setting no CRTC on them with ApplyConfiguration(), and
+ may or may not cause a configuration change.
+
+ Also note that this property might become out of date
+ if changed through different means (for example using the
+ XRandR interface directly).
+ -->
+ <property name="PowerSaveMode" type="i" access="readwrite" />
+
+ <!--
+ MonitorsChanged:
+
+ The signal is emitted every time the screen configuration
+ changes.
+ The client should then call GetResources() to read the new layout.
+ -->
+ <signal name="MonitorsChanged" />
+
+ <!--
+ GetCurrentState:
+ @serial: configuration serial
+ @monitors: available monitors
+ @logical_monitors: current logical monitor configuration
+ @properties: display configuration properties
+
+ @monitors represent connected physical monitors
+
+ * s connector: connector name (e.g. HDMI-1, DP-1, etc)
+ * s vendor: vendor name
+ * s product: product name
+ * s serial: product serial
+ * a(siiddada{sv}) modes: available modes
+ * s id: mode ID
+ * i width: width in physical pixels
+ * i height: height in physical pixels
+ * d refresh rate: refresh rate
+ * d preferred scale: scale preferred as per calculations
+ * ad supported scales: scales supported by this mode
+ * a{sv} properties: optional properties, including:
+ - "is-current" (b): the mode is currently active mode
+ - "is-preferred" (b): the mode is the preferred mode
+ - "is-interlaced" (b): the mode is an interlaced mode
+ * a{sv} properties: optional properties, including:
+ - "width-mm" (i): physical width of monitor in millimeters
+ - "height-mm" (i): physical height of monitor in millimeters
+ - "is-underscanning" (b): whether underscanning is enabled
+ (absence of this means underscanning
+ not being supported)
+ - "max-screen-size" (ii): the maximum size a screen may have
+ (absence of this means unlimited screen
+ size)
+ - "is-builtin" (b): whether the monitor is built in, e.g. a
+ laptop panel (absence of this means it is
+ not built in)
+ - "display-name" (s): a human readable display name of the monitor
+
+ Possible mode flags:
+ 1 : preferred mode
+ 2 : current mode
+
+
+ @logical_monitors represent current logical monitor configuration
+
+ * i x: x position
+ * i y: y position
+ * d scale: scale
+ * u transform: transform (see below)
+ * b primary: true if this is the primary logical monitor
+ * a(sss) monitors: monitors displaying this logical monitor
+ * connector: name of the connector (e.g. DP-1, eDP-1 etc)
+ * vendor: vendor name
+ * product: product name
+ * serial: product serial
+ * a{sv} properties: possibly other properties
+
+ Posisble transform values:
+ 0: normal
+ 1: 90°
+ 2: 180°
+ 3: 270°
+ 4: flipped
+ 5: 90° flipped
+ 6: 180° flipped
+ 7: 270° flipped
+
+
+ @layout_mode current layout mode represents the way logical monitors
+ are layed out on the screen. Possible modes include:
+
+ 1 : physical
+ 2 : logical
+
+ With physical layout mode, each logical monitor has the same dimensions
+ an the monitor modes of the associated monitors assigned to it, no
+ matter what scale is in use.
+
+ With logical mode, the dimension of a logical monitor is the dimension
+ of the monitor mode, divided by the logical monitor scale.
+
+
+ Possible @properties are:
+
+ * "supports-mirroring" (b): FALSE if mirroring not supported; TRUE or not
+ present if mirroring is supported.
+ * "layout-mode" (u): Represents in what way logical monitors are laid
+ out on the screen. The layout mode can be either
+ of the ones listed below. Absence of this property
+ means the layout mode cannot be changed, and that
+ "logical" mode is assumed to be used.
+ * 1 : logical - the dimension of a logical monitor is derived from
+ the monitor modes associated with it, then scaled
+ using the logical monitor scale.
+ * 2 : physical - the dimension of a logical monitor is derived from
+ the monitor modes associated with it.
+ * "supports-changing-layout-mode" (b): True if the layout mode can be
+ changed. Absence of this means the
+ layout mode cannot be changed.
+ * "global-scale-required" (b): True if all the logical monitors must
+ always use the same scale. Absence of
+ this means logical monitor scales can
+ differ.
+ -->
+ <method name="GetCurrentState">
+ <arg name="serial" direction="out" type="u" />
+ <arg name="monitors" direction="out" type="a((ssss)a(siiddada{sv})a{sv})" />
+ <arg name="logical_monitors" direction="out" type="a(iiduba(ssss)a{sv})" />
+ <arg name="properties" direction="out" type="a{sv}" />
+ </method>
+
+ <!--
+ ApplyMonitorsConfig:
+ @serial: configuration serial
+ @method: configuration method
+ @logical_monitors: monitors configuration
+ @properties: properties
+
+ @method represents the way the configuration should be handled.
+
+ Possible methods:
+ 0: verify
+ 1: temporary
+ 2: persistent
+
+ @logical_monitors consists of a list of logical monitor configurations.
+ Each logical monitor configuration consists of:
+
+ * i: layout x position
+ * i: layout y position
+ * d: scale
+ * u: transform (see GetCurrentState)
+ * b primary: true if this is the primary logical monitor
+ * a(ssa{sv}): a list of monitors, each consisting of:
+ * s: connector
+ * s: monitor mode ID
+ * a{sv}: monitor properties, including:
+ - "enable_underscanning" (b): enable monitor underscanning;
+ may only be set when underscanning
+ is supported (see GetCurrentState).
+
+ @properties may effect the global monitor configuration state. Possible
+ properties are:
+
+ * "layout-mode" (u): layout mode the passed configuration is in; may
+ only be set when changing the layout mode is
+ supported (see GetCurrentState).
+ -->
+ <method name="ApplyMonitorsConfig">
+ <arg name="serial" direction="in" type="u" />
+ <arg name="method" direction="in" type="u" />
+ <arg name="logical_monitors" direction="in" type="a(iiduba(ssa{sv}))" />
+ <arg name="properties" direction="in" type="a{sv}" />
+ </method>
+ </interface>
+</node>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]