Merge pull request #109 from SpoinkyNL/issue93

Issue93
This commit is contained in:
Robert Beekman authored and GitHub committed 2016-06-13 11:52:17 +02:00
commit 25d396ce88
1 file changed
+46 -19
+46 -19
View File
@@ -1,6 +1,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading;
using Artemis.DeviceProviders; using Artemis.DeviceProviders;
using Artemis.Events; using Artemis.Events;
using Artemis.Services; using Artemis.Services;
@@ -93,33 +94,59 @@ namespace Artemis.Managers
if (!wasNull) if (!wasNull)
ReleaseActiveKeyboard(); ReleaseActiveKeyboard();
var asynchEnable = false;
// Disable everything if there's no active keyboard found if (keyboardProvider.CanEnable())
if (!keyboardProvider.CanEnable())
{ {
DialogService.ShowErrorMessageBox(keyboardProvider.CantEnableText); FinishEnableKeyboard(keyboardProvider, oldKeyboard);
ActiveKeyboard = null;
General.Default.LastKeyboard = null;
General.Default.Save();
_logger.Warn("Failed enabling keyboard: {0}", keyboardProvider.Name);
ChangingKeyboard = false;
return;
} }
else
{
for (var i = 1; i <= 10; i++)
{
var thread = new Thread(() =>
{
Thread.Sleep(500*i);
asynchEnable = keyboardProvider.CanEnable();
});
ActiveKeyboard = keyboardProvider; _logger.Warn("Failed enabling keyboard: {0}, re-attempt {1} of 10", keyboardProvider.Name, i);
ActiveKeyboard.Enable();
General.Default.LastKeyboard = ActiveKeyboard.Name; thread.Start();
General.Default.Save(); if (asynchEnable)
break;
}
EnableUsableDevices(); if (!asynchEnable)
{
ChangingKeyboard = false; // Disable everything if there's no active keyboard found
_events.PublishOnUIThread(new ActiveKeyboardChanged(oldKeyboard, ActiveKeyboard)); DialogService.ShowErrorMessageBox(keyboardProvider.CantEnableText);
_logger.Debug("Enabled keyboard: {0}", keyboardProvider.Name); ActiveKeyboard = null;
General.Default.LastKeyboard = null;
General.Default.Save();
_logger.Warn("Failed enabling keyboard: {0}", keyboardProvider.Name);
ChangingKeyboard = false;
return;
}
FinishEnableKeyboard(keyboardProvider, oldKeyboard);
}
} }
} }
private void FinishEnableKeyboard(KeyboardProvider keyboardProvider, KeyboardProvider oldKeyboard)
{
ActiveKeyboard = keyboardProvider;
ActiveKeyboard.Enable();
General.Default.LastKeyboard = ActiveKeyboard.Name;
General.Default.Save();
EnableUsableDevices();
ChangingKeyboard = false;
_events.PublishOnUIThread(new ActiveKeyboardChanged(oldKeyboard, ActiveKeyboard));
_logger.Debug("Enabled keyboard: {0}", keyboardProvider.Name);
}
private void EnableUsableDevices() private void EnableUsableDevices()
{ {
foreach (var mouseProvider in MiceProviders) foreach (var mouseProvider in MiceProviders)