gdctl: Allow setting color mode

This allows configuring a monitor to enter BT.2100 a.k.a. HDR mode.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4192>
This commit is contained in:
Jonas Ådahl 2024-12-19 00:47:35 +01:00 committed by Marge Bot
parent 53ae155e03
commit b674048184
2 changed files with 48 additions and 8 deletions

View File

@ -134,6 +134,12 @@ MONITOR OPTIONS
Set the mode of the monitor.
``--color-mode``, ``-c``
Set the color mode of the monitor. Available color modes are ``default`` and
``bt2100``.
EXAMPLES
--------

View File

@ -296,6 +296,7 @@ class Monitor:
properties: dict
current_mode: MonitorMode | None
preferred_mode: MonitorMode | None
color_mode: ColorMode | None
@classmethod
def from_variant(cls, variant):
@ -320,6 +321,7 @@ class Monitor:
)
display_name = properties.get("display-name", None)
color_mode = properties.get("color-mode", None)
return cls(
connector=connector,
@ -331,6 +333,7 @@ class Monitor:
current_mode=current_mode,
preferred_mode=preferred_mode,
display_name=display_name,
color_mode=color_mode,
)
@ -715,6 +718,9 @@ def create_logical_monitor(monitors_state, layout_mode, logical_monitor_args):
)
monitor.mode = mode
monitor.color_mode = ColorMode.maybe_from_string(
monitor_args.get("color_mode", None)
)
monitors.append(monitor)
@ -836,10 +842,17 @@ def print_config(config):
)
print_data(
level=4,
is_last=True,
is_last=not monitor.color_mode,
lines=lines,
data=f"Mode: {monitor.mode.name}",
)
if monitor.color_mode:
print_data(
level=4,
is_last=True,
lines=lines,
data=f"Color mode: {monitor.color_mode}",
)
index += 1
@ -1076,15 +1089,23 @@ class Config:
layout_mode: LayoutMode
def generate_monitor_tuples(self, monitors):
return [
tuples = []
for monitor in monitors:
options = {}
if monitor.color_mode:
options["color-mode"] = GLib.Variant(
"u", monitor.color_mode.value
)
# Variant type: (ssa{sv})
(
monitor.connector,
monitor.mode.name,
{},
tuples.append(
(
monitor.connector,
monitor.mode.name,
options,
)
)
for monitor in monitors
]
return tuples
def generate_logical_monitor_tuples(self):
tuples = []
@ -1232,6 +1253,11 @@ class TransformCompleter(NamedEnumCompleter):
super().__init__(Transform)
class ColorModeCompleter(NamedEnumCompleter):
def __init__(self):
super().__init__(ColorMode)
if __name__ == "__main__":
parser = GdctlParser(
description="Display control utility",
@ -1333,6 +1359,14 @@ if __name__ == "__main__":
help="Monitor mode",
type=str,
).completer = MonitorModeCompleter()
monitor_parser.add_argument(
"--color-mode",
"-c",
action=AppendToSubGroup,
help="Color mode",
choices=[str(color_mode) for color_mode in list(ColorMode)],
type=str,
).completer = ColorModeCompleter()
logical_monitor_parser.add_argument(
"--primary",
"-p",