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. Set the mode of the monitor.
``--color-mode``, ``-c``
Set the color mode of the monitor. Available color modes are ``default`` and
``bt2100``.
EXAMPLES EXAMPLES
-------- --------

View File

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