Skip to content

Commit c2b220c

Browse files
committed
2 parents 899e49c + a236e7a commit c2b220c

File tree

17 files changed

+323
-106
lines changed

17 files changed

+323
-106
lines changed

ColorControl.UI/Components/Pages/Generic/TriggerInput.razor

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,11 @@
2727
<label class="form-label" for="excludedProcesses">Excluded processes</label>
2828
<input class="form-control" type="text" @bind="trigger.ExcludedProcessesAsString" />
2929
</div>
30+
<div class="mb-2">
31+
<label class="form-label" for="connectedDisplays">Connected displays Regex</label>
32+
<input class="form-control" type="text" @bind="trigger.ConnectedDisplaysRegex"
33+
title="The preset will be executed only if the supplied Regular Expression matches the device name of at least one of the displays that are connected at the moment the trigger is fired." />
34+
</div>
3035
}
3136
}
3237

ColorControl/Program.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -342,6 +342,7 @@ private static IHostBuilder CreateHostBuilder()
342342
services.AddSingleton<ProcessEventDispatcher>();
343343
services.AddSingleton<WindowMessageDispatcher>();
344344
services.AddSingleton<KeyboardShortcutDispatcher>();
345+
services.AddSingleton<DisplayChangeEventDispatcher>();
345346
services.AddSingleton<MainForm>();
346347
services.AddSingleton<LogWindow>();
347348
services.AddSingleton<BrowserWindow>();

ColorControl/Services/LG/LgPanel.Designer.cs

Lines changed: 64 additions & 34 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ColorControl/Services/LG/LgPanel.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,7 @@ private void lvLgPresets_SelectedIndexChanged(object sender, EventArgs e)
172172
btnLgPresetEditTriggerConditions.Enabled = enabled;
173173
edtLgPresetIncludedProcesses.Enabled = enabled;
174174
edtLgPresetExcludedProcesses.Enabled = enabled;
175+
edtLgPresetConnectedDisplaysRegex.Enabled = enabled;
175176

176177
var preset = GetSelectedLgPreset();
177178

@@ -208,6 +209,7 @@ private void lvLgPresets_SelectedIndexChanged(object sender, EventArgs e)
208209

209210
edtLgPresetIncludedProcesses.Text = trigger?.IncludedProcesses?.Join(", ") ?? string.Empty;
210211
edtLgPresetExcludedProcesses.Text = trigger?.ExcludedProcesses?.Join(", ") ?? string.Empty;
212+
edtLgPresetConnectedDisplaysRegex.Text = trigger?.ConnectedDisplaysRegex ?? string.Empty;
211213
}
212214
else
213215
{
@@ -223,6 +225,7 @@ private void lvLgPresets_SelectedIndexChanged(object sender, EventArgs e)
223225
edtLgPresetTriggerConditions.Tag = 0;
224226
edtLgPresetIncludedProcesses.Text = string.Empty;
225227
edtLgPresetExcludedProcesses.Text = string.Empty;
228+
edtLgPresetConnectedDisplaysRegex.Text = string.Empty;
226229
}
227230
}
228231

@@ -281,7 +284,8 @@ private void btnSetShortcutLg_Click(object sender, EventArgs e)
281284
preset.UpdateTrigger(triggerType,
282285
(PresetConditionType)edtLgPresetTriggerConditions.Tag,
283286
edtLgPresetIncludedProcesses.Text,
284-
edtLgPresetExcludedProcesses.Text);
287+
edtLgPresetExcludedProcesses.Text,
288+
edtLgPresetConnectedDisplaysRegex.Text);
285289

286290
preset.shortcut = shortcut;
287291

ColorControl/Services/LG/LgPanel.resx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<root>
33
<!--
4-
Microsoft ResX Schema
4+
Microsoft ResX Schema
55
66
Version 2.0
77
@@ -48,7 +48,7 @@
4848
value : The object must be serialized with
4949
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
5050
: and then encoded with base64 encoding.
51-
51+
5252
mimetype: application/x-microsoft.net.object.soap.base64
5353
value : The object must be serialized with
5454
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
@@ -117,6 +117,9 @@
117117
<resheader name="writer">
118118
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
119119
</resheader>
120+
<metadata name="toolTipLgPreset.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
121+
<value>471, 16</value>
122+
</metadata>
120123
<metadata name="mnuLgExpert.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
121124
<value>17, 17</value>
122125
</metadata>

ColorControl/Services/LG/LgService.cs

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ public LgDevice SelectedDevice
5353
private readonly PowerEventDispatcher _powerEventDispatcher;
5454
private readonly SessionSwitchDispatcher _sessionSwitchDispatcher;
5555
private readonly ProcessEventDispatcher _processEventDispatcher;
56+
private readonly DisplayChangeEventDispatcher _displayChangeEventDispatcher;
5657
private readonly ServiceManager _serviceManager;
5758
private LgDevice _selectedDevice;
5859
private string _rcButtonsFilename;
@@ -72,12 +73,22 @@ public LgDevice SelectedDevice
7273
public static readonly int SHORTCUTID_LGQA = -202;
7374
public static readonly int SHORTCUTID_GAMEBAR = -101;
7475

75-
public LgService(GlobalContext globalContext, PowerEventDispatcher powerEventDispatcher, SessionSwitchDispatcher sessionSwitchDispatcher, ProcessEventDispatcher processEventDispatcher, ServiceManager serviceManager, RestartDetector restartDetector, WinApiService winApiService, WinApiAdminService winApiAdminService) : base(globalContext)
76+
public LgService(
77+
GlobalContext globalContext,
78+
PowerEventDispatcher powerEventDispatcher,
79+
SessionSwitchDispatcher sessionSwitchDispatcher,
80+
ProcessEventDispatcher processEventDispatcher,
81+
DisplayChangeEventDispatcher displayChangeEventDispatcher,
82+
ServiceManager serviceManager,
83+
RestartDetector restartDetector,
84+
WinApiService winApiService,
85+
WinApiAdminService winApiAdminService) : base(globalContext)
7686
{
7787
_allowPowerOn = globalContext.StartUpParams.RunningFromScheduledTask;
7888
_powerEventDispatcher = powerEventDispatcher;
7989
_sessionSwitchDispatcher = sessionSwitchDispatcher;
8090
_processEventDispatcher = processEventDispatcher;
91+
_displayChangeEventDispatcher = displayChangeEventDispatcher;
8192
_serviceManager = serviceManager;
8293
LgPreset.GetDeviceName += LgPreset_GetDeviceName;
8394
LgPreset.GetAppName += LgPreset_GetAppName;
@@ -466,10 +477,7 @@ public override void InstallEventHandlers()
466477
SetShortcuts(SHORTCUTID_LGQA, Config.QuickAccessShortcut);
467478

468479
var keyboardShortcutDispatcher = _globalContext.ServiceProvider.GetService<KeyboardShortcutDispatcher>();
469-
if (keyboardShortcutDispatcher != null)
470-
{
471-
keyboardShortcutDispatcher.RegisterShortcut(SHORTCUTID_GAMEBAR, Config.GameBarShortcut);
472-
}
480+
keyboardShortcutDispatcher?.RegisterShortcut(SHORTCUTID_GAMEBAR, Config.GameBarShortcut);
473481

474482
_powerEventDispatcher.RegisterAsyncEventHandler(PowerEventDispatcher.Event_Startup, PowerStateChanged);
475483
_powerEventDispatcher.RegisterEventHandler(PowerEventDispatcher.Event_Suspend, PowerModeChanged);
@@ -481,6 +489,13 @@ public override void InstallEventHandlers()
481489
_sessionSwitchDispatcher.RegisterEventHandler(SessionSwitchDispatcher.Event_SessionSwitch, SessionSwitched);
482490

483491
_processEventDispatcher.RegisterAsyncEventHandler(ProcessEventDispatcher.Event_ProcessChanged, ProcessChanged);
492+
493+
_displayChangeEventDispatcher.RegisterAsyncEventHandler(DisplayChangeEventDispatcher.Event_DisplayChanged, DisplayChanged);
494+
}
495+
496+
private async Task DisplayChanged(object sender, DisplayChangedEventArgs e, CancellationToken ct)
497+
{
498+
await ExecutePresetsForEvent(PresetTriggerType.DisplayChange);
484499
}
485500

486501
private async Task PowerStateChanged(object sender, PowerStateChangedEventArgs e, CancellationToken token)
@@ -633,8 +648,14 @@ public async Task ProcessChanged(object sender, ProcessChangedEventArgs args, Ca
633648
return;
634649
}
635650

636-
var applicableDevices = Devices.Where(d => d.PowerOffOnScreenSaver || d.PowerOnAfterScreenSaver || d.TriggersEnabled && _presets.Any(p => p.Triggers.Any(t => t.Trigger != PresetTriggerType.None) &&
637-
((string.IsNullOrEmpty(p.DeviceMacAddress) && d == SelectedDevice) || p.DeviceMacAddress.Equals(d.MacAddress, StringComparison.OrdinalIgnoreCase)))).ToList();
651+
var applicableDevices = Devices.Where(d =>
652+
d.PowerOffOnScreenSaver
653+
|| d.PowerOnAfterScreenSaver
654+
|| (d.TriggersEnabled
655+
// only these trigger types are ever triggered by a process changed event
656+
&& _presets.Any(p => p.Triggers.Any(t => t.Trigger == PresetTriggerType.ProcessSwitch || t.Trigger == PresetTriggerType.ScreensaverStart || t.Trigger == PresetTriggerType.ScreensaverStop)
657+
&& ((string.IsNullOrEmpty(p.DeviceMacAddress) && d == SelectedDevice) || p.DeviceMacAddress.Equals(d.MacAddress, StringComparison.OrdinalIgnoreCase)))))
658+
.ToList();
638659

639660
if (!applicableDevices.Any())
640661
{

0 commit comments

Comments
 (0)