Skip to content

Commit e3174c4

Browse files
committed
Restore initialization-presets on ddcutil events.
Trying to avoid lock conflicts.
1 parent e141c4e commit e3174c4

File tree

1 file changed

+10
-6
lines changed

1 file changed

+10
-6
lines changed

vdu_controls.py

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7496,13 +7496,12 @@ def create_ddcutil(self):
74967496
def vdu_connectivity_changed_callback(edid_encoded: str, event_type: int, flags: int):
74977497
if event_type == DdcEventType.DPMS_AWAKE.value:
74987498
log_info(f"DPMS awake event {event_type=} {edid_encoded=:.30}")
7499-
if self.lux_auto_controller is not None and self.lux_auto_controller.is_auto_enabled():
7500-
self.lux_auto_controller.adjust_brightness_now() # don't wait for normal interval to finish
7501-
elif event_type == DdcEventType.DPMS_ASLEEP.value:
7499+
if event_type == DdcEventType.DPMS_ASLEEP.value:
75027500
log_info(f"DPMS asleep event {event_type=} {edid_encoded=:.30}")
7501+
return
75037502
else:
75047503
log_info(f"Connected VDUs changed {event_type=} {flags=} {edid_encoded:.30}...")
7505-
self.start_refresh()
7504+
self.start_refresh(ddcutil_event=True)
75067505

75077506
change_handler = vdu_connectivity_changed_callback
75087507
log_debug("Enabled callback for VDU-connectivity-change D-Bus signals")
@@ -7612,10 +7611,10 @@ def lux_check_action(self) -> bool:
76127611
return False
76137612
self.lux_auto_controller.adjust_brightness_now()
76147613

7615-
def start_refresh(self) -> None:
7614+
def start_refresh(self, ddcutil_event: bool = False) -> None:
76167615
if not is_running_in_gui_thread():
76177616
log_debug("Reinvoke start_refresh() in GUI thread.")
7618-
self.main_window.run_in_gui_thread(self.start_refresh)
7617+
self.main_window.run_in_gui_thread(self.start_refresh, ddcutil_event)
76197618
return
76207619

76217620
def update_from_vdu(worker: WorkerThread) -> None:
@@ -7626,9 +7625,13 @@ def update_from_vdu(worker: WorkerThread) -> None:
76267625
log_info("Refresh commences")
76277626
self.ddcutil.refresh_connection()
76287627
self.detected_vdu_list = self.ddcutil.detect_vdus()
7628+
if ddcutil_event:
7629+
self.restore_vdu_intialization_presets()
76297630
for control_panel in self.main_window.get_main_panel().vdu_control_panels.values():
76307631
if control_panel.controller.get_full_id() in self.detected_vdu_list:
76317632
control_panel.refresh_from_vdu()
7633+
if self.lux_auto_controller is not None and self.lux_auto_controller.is_auto_enabled():
7634+
self.lux_auto_controller.adjust_brightness_now() # don't wait for normal interval to finish
76327635
except (subprocess.SubprocessError, ValueError, re.error, OSError) as e:
76337636
if self.refresh_data_task.vdu_exception is None:
76347637
self.refresh_data_task.vdu_exception = VduException(vdu_description="unknown", operation="unknown",
@@ -7680,6 +7683,7 @@ def restore_preset(self, preset: Preset, finished_func: Callable[[PresetTransiti
76807683

76817684
log_debug("restore_preset: try to obtain application_configuration_lock", trace=False) if log_debug_enabled else None
76827685
with self.application_lock: # The lock prevents a transition firing when the GUI/app is reconfiguring
7686+
log_debug("restore_preset: holding application_configuration_lock", trace=False) if log_debug_enabled else None
76837687
self.transitioning_dummy_preset = None
76847688
if not immediately:
76857689
self.transitioning_dummy_preset = PresetTransitionDummy(preset)

0 commit comments

Comments
 (0)