diff --git a/SafeExamBrowser.Client.UnitTests/Operations/BrowserOperationTests.cs b/SafeExamBrowser.Client.UnitTests/Operations/BrowserOperationTests.cs index a24d6384..955ab80f 100644 --- a/SafeExamBrowser.Client.UnitTests/Operations/BrowserOperationTests.cs +++ b/SafeExamBrowser.Client.UnitTests/Operations/BrowserOperationTests.cs @@ -26,7 +26,7 @@ namespace SafeExamBrowser.Client.UnitTests.Operations private Mock logger; private AppSettings settings; private Mock taskbar; - private Mock taskView; + private Mock taskview; private Mock uiFactory; private BrowserOperation sut; @@ -40,13 +40,13 @@ namespace SafeExamBrowser.Client.UnitTests.Operations logger = new Mock(); settings = new AppSettings(); taskbar = new Mock(); - taskView = new Mock(); + taskview = new Mock(); uiFactory = new Mock(); context.Browser = browser.Object; context.Settings = settings; - sut = new BrowserOperation(actionCenter.Object, context, logger.Object, taskbar.Object, taskView.Object, uiFactory.Object); + sut = new BrowserOperation(actionCenter.Object, context, logger.Object, taskbar.Object, taskview.Object, uiFactory.Object); } [TestMethod] diff --git a/SafeExamBrowser.Client.UnitTests/Operations/ShellOperationTests.cs b/SafeExamBrowser.Client.UnitTests/Operations/ShellOperationTests.cs index 2ced5bdb..7bb5da2f 100644 --- a/SafeExamBrowser.Client.UnitTests/Operations/ShellOperationTests.cs +++ b/SafeExamBrowser.Client.UnitTests/Operations/ShellOperationTests.cs @@ -38,7 +38,7 @@ namespace SafeExamBrowser.Client.UnitTests.Operations private Mock powerSupply; private Mock systemInfo; private Mock taskbar; - private Mock taskView; + private Mock taskview; private Mock text; private Mock uiFactory; private Mock wirelessAdapter; @@ -60,7 +60,7 @@ namespace SafeExamBrowser.Client.UnitTests.Operations powerSupply = new Mock(); systemInfo = new Mock(); taskbar = new Mock(); - taskView = new Mock(); + taskview = new Mock(); text = new Mock(); uiFactory = new Mock(); wirelessAdapter = new Mock(); @@ -84,7 +84,7 @@ namespace SafeExamBrowser.Client.UnitTests.Operations powerSupply.Object, systemInfo.Object, taskbar.Object, - taskView.Object, + taskview.Object, text.Object, uiFactory.Object, wirelessAdapter.Object); @@ -94,7 +94,7 @@ namespace SafeExamBrowser.Client.UnitTests.Operations public void Perform_MustInitializeActivators() { var actionCenterActivator = new Mock(); - var taskViewActivator = new Mock(); + var taskViewActivator = new Mock(); var terminationActivator = new Mock(); context.Activators.Add(actionCenterActivator.Object); @@ -261,18 +261,18 @@ namespace SafeExamBrowser.Client.UnitTests.Operations public void Revert_MustTerminateActivators() { var actionCenterActivator = new Mock(); - var taskViewActivator = new Mock(); + var taskviewActivator = new Mock(); var terminationActivator = new Mock(); context.Activators.Add(actionCenterActivator.Object); - context.Activators.Add(taskViewActivator.Object); + context.Activators.Add(taskviewActivator.Object); context.Activators.Add(terminationActivator.Object); context.Settings.ActionCenter.EnableActionCenter = true; sut.Revert(); actionCenterActivator.Verify(a => a.Stop(), Times.Once); - taskViewActivator.Verify(a => a.Stop(), Times.Once); + taskviewActivator.Verify(a => a.Stop(), Times.Once); terminationActivator.Verify(a => a.Stop(), Times.Once); } diff --git a/SafeExamBrowser.Client/ClientController.cs b/SafeExamBrowser.Client/ClientController.cs index 8fe48d67..ef6eb1e9 100644 --- a/SafeExamBrowser.Client/ClientController.cs +++ b/SafeExamBrowser.Client/ClientController.cs @@ -528,7 +528,15 @@ namespace SafeExamBrowser.Client private void AskForApplicationPath(ApplicationNotFoundEventArgs args) { - // TODO + var message = text.Get(TextKey.FolderDialog_ApplicationLocation).Replace("%%NAME%%", args.DisplayName).Replace("%%EXECUTABLE%%", args.ExecutableName); + var dialog = uiFactory.CreateFolderDialog(message); + var result = dialog.Show(splashScreen); + + if (result.Success) + { + args.CustomPath = result.FolderPath; + args.Success = true; + } } private void InformAboutFailedApplicationInitialization(ApplicationInitializationFailedEventArgs args) diff --git a/SafeExamBrowser.Client/CompositionRoot.cs b/SafeExamBrowser.Client/CompositionRoot.cs index 0e6947c4..0743d239 100644 --- a/SafeExamBrowser.Client/CompositionRoot.cs +++ b/SafeExamBrowser.Client/CompositionRoot.cs @@ -71,7 +71,7 @@ namespace SafeExamBrowser.Client private IRuntimeProxy runtimeProxy; private ISystemInfo systemInfo; private ITaskbar taskbar; - private ITaskView taskview; + private ITaskview taskview; private IText text; private ITextResource textResource; private IUserInterfaceFactory uiFactory; @@ -95,7 +95,7 @@ namespace SafeExamBrowser.Client uiFactory = BuildUserInterfaceFactory(); runtimeProxy = new RuntimeProxy(runtimeHostUri, new ProxyObjectFactory(), ModuleLogger(nameof(RuntimeProxy)), Interlocutor.Client); taskbar = BuildTaskbar(); - taskview = BuildTaskView(); + taskview = BuildTaskview(); var processFactory = new ProcessFactory(ModuleLogger(nameof(ProcessFactory))); var applicationMonitor = new ApplicationMonitor(TWO_SECONDS, ModuleLogger(nameof(ApplicationMonitor)), nativeMethods, processFactory); @@ -265,7 +265,7 @@ namespace SafeExamBrowser.Client context.Activators.Add(new ActionCenterKeyboardActivator(ModuleLogger(nameof(ActionCenterKeyboardActivator)), nativeMethods)); context.Activators.Add(new ActionCenterTouchActivator(ModuleLogger(nameof(ActionCenterTouchActivator)), nativeMethods)); - context.Activators.Add(new TaskViewKeyboardActivator(ModuleLogger(nameof(TaskViewKeyboardActivator)), nativeMethods)); + context.Activators.Add(new TaskviewKeyboardActivator(ModuleLogger(nameof(TaskviewKeyboardActivator)), nativeMethods)); context.Activators.Add(new TerminationActivator(ModuleLogger(nameof(TerminationActivator)), nativeMethods)); return operation; @@ -304,7 +304,7 @@ namespace SafeExamBrowser.Client } } - private ITaskView BuildTaskView() + private ITaskview BuildTaskview() { switch (uiMode) { diff --git a/SafeExamBrowser.Client/Operations/BrowserOperation.cs b/SafeExamBrowser.Client/Operations/BrowserOperation.cs index f62e85ff..e816ceb8 100644 --- a/SafeExamBrowser.Client/Operations/BrowserOperation.cs +++ b/SafeExamBrowser.Client/Operations/BrowserOperation.cs @@ -20,7 +20,7 @@ namespace SafeExamBrowser.Client.Operations private IActionCenter actionCenter; private ILogger logger; private ITaskbar taskbar; - private ITaskView taskview; + private ITaskview taskview; private IUserInterfaceFactory uiFactory; public override event ActionRequiredEventHandler ActionRequired { add { } remove { } } @@ -31,7 +31,7 @@ namespace SafeExamBrowser.Client.Operations ClientContext context, ILogger logger, ITaskbar taskbar, - ITaskView taskview, + ITaskview taskview, IUserInterfaceFactory uiFactory) : base(context) { this.actionCenter = actionCenter; diff --git a/SafeExamBrowser.Client/Operations/ShellOperation.cs b/SafeExamBrowser.Client/Operations/ShellOperation.cs index 4577ef45..bf7c8313 100644 --- a/SafeExamBrowser.Client/Operations/ShellOperation.cs +++ b/SafeExamBrowser.Client/Operations/ShellOperation.cs @@ -35,7 +35,7 @@ namespace SafeExamBrowser.Client.Operations private IPowerSupply powerSupply; private ISystemInfo systemInfo; private ITaskbar taskbar; - private ITaskView taskview; + private ITaskview taskview; private IText text; private IUserInterfaceFactory uiFactory; private IWirelessAdapter wirelessAdapter; @@ -56,7 +56,7 @@ namespace SafeExamBrowser.Client.Operations IPowerSupply powerSupply, ISystemInfo systemInfo, ITaskbar taskbar, - ITaskView taskview, + ITaskview taskview, IText text, IUserInterfaceFactory uiFactory, IWirelessAdapter wirelessAdapter) : base(context) @@ -114,7 +114,7 @@ namespace SafeExamBrowser.Client.Operations actionCenterActivator.Start(); } - if (Context.Settings.Keyboard.AllowAltTab && activator is ITaskViewActivator taskViewActivator) + if (Context.Settings.Keyboard.AllowAltTab && activator is ITaskviewActivator taskViewActivator) { taskview.Register(taskViewActivator); taskViewActivator.Start(); diff --git a/SafeExamBrowser.I18n.Contracts/TextKey.cs b/SafeExamBrowser.I18n.Contracts/TextKey.cs index 1e26f2b0..ae3abdc3 100644 --- a/SafeExamBrowser.I18n.Contracts/TextKey.cs +++ b/SafeExamBrowser.I18n.Contracts/TextKey.cs @@ -23,6 +23,7 @@ namespace SafeExamBrowser.I18n.Contracts BrowserWindow_DeveloperConsoleMenuItem, BrowserWindow_ZoomMenuItem, Build, + FolderDialog_ApplicationLocation, LockScreen_AllowOption, LockScreen_Message, LockScreen_TerminateOption, diff --git a/SafeExamBrowser.I18n/Text.xml b/SafeExamBrowser.I18n/Text.xml index 228f06cb..4b8fc263 100644 --- a/SafeExamBrowser.I18n/Text.xml +++ b/SafeExamBrowser.I18n/Text.xml @@ -27,6 +27,9 @@ Build + + Application "%%NAME%%" could not be found on the system! Please locate the folder containing the main executable "%%EXECUTABLE%%". + Temporarily allow the blacklisted applications. This applies only to the currently running instances and session! diff --git a/SafeExamBrowser.UserInterface.Contracts/IUserInterfaceFactory.cs b/SafeExamBrowser.UserInterface.Contracts/IUserInterfaceFactory.cs index ddee4229..f8d558c0 100644 --- a/SafeExamBrowser.UserInterface.Contracts/IUserInterfaceFactory.cs +++ b/SafeExamBrowser.UserInterface.Contracts/IUserInterfaceFactory.cs @@ -49,6 +49,11 @@ namespace SafeExamBrowser.UserInterface.Contracts /// IBrowserWindow CreateBrowserWindow(IBrowserControl control, BrowserSettings settings, bool isMainWindow); + /// + /// Creates a folder dialog with the given message. + /// + IFolderDialog CreateFolderDialog(string message); + /// /// Creates a system control which allows to change the keyboard layout of the computer. /// diff --git a/SafeExamBrowser.UserInterface.Contracts/SafeExamBrowser.UserInterface.Contracts.csproj b/SafeExamBrowser.UserInterface.Contracts/SafeExamBrowser.UserInterface.Contracts.csproj index ce89a3a0..b1a43d79 100644 --- a/SafeExamBrowser.UserInterface.Contracts/SafeExamBrowser.UserInterface.Contracts.csproj +++ b/SafeExamBrowser.UserInterface.Contracts/SafeExamBrowser.UserInterface.Contracts.csproj @@ -76,13 +76,15 @@ - - + + + + diff --git a/SafeExamBrowser.UserInterface.Contracts/Shell/ITaskView.cs b/SafeExamBrowser.UserInterface.Contracts/Shell/ITaskView.cs index ae6701de..bc56ef47 100644 --- a/SafeExamBrowser.UserInterface.Contracts/Shell/ITaskView.cs +++ b/SafeExamBrowser.UserInterface.Contracts/Shell/ITaskView.cs @@ -13,7 +13,7 @@ namespace SafeExamBrowser.UserInterface.Contracts.Shell /// /// The task view provides an overview of all currently running application instances. /// - public interface ITaskView + public interface ITaskview { /// /// Adds the given application to the task view. @@ -23,6 +23,6 @@ namespace SafeExamBrowser.UserInterface.Contracts.Shell /// /// Registers the specified activator for the task view. /// - void Register(ITaskViewActivator activator); + void Register(ITaskviewActivator activator); } } diff --git a/SafeExamBrowser.UserInterface.Contracts/Shell/ITaskViewActivator.cs b/SafeExamBrowser.UserInterface.Contracts/Shell/ITaskViewActivator.cs index f00c6d76..80aae076 100644 --- a/SafeExamBrowser.UserInterface.Contracts/Shell/ITaskViewActivator.cs +++ b/SafeExamBrowser.UserInterface.Contracts/Shell/ITaskViewActivator.cs @@ -11,9 +11,9 @@ using SafeExamBrowser.UserInterface.Contracts.Shell.Events; namespace SafeExamBrowser.UserInterface.Contracts.Shell { /// - /// A module which can be used to control the . + /// A module which can be used to control the . /// - public interface ITaskViewActivator : IActivator + public interface ITaskviewActivator : IActivator { /// /// Fired when the task view should be hidden. diff --git a/SafeExamBrowser.UserInterface.Contracts/Windows/Data/FolderDialogResult.cs b/SafeExamBrowser.UserInterface.Contracts/Windows/Data/FolderDialogResult.cs new file mode 100644 index 00000000..8f124927 --- /dev/null +++ b/SafeExamBrowser.UserInterface.Contracts/Windows/Data/FolderDialogResult.cs @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2019 ETH Zürich, Educational Development and Technology (LET) + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +namespace SafeExamBrowser.UserInterface.Contracts.Windows.Data +{ + /// + /// Defines the user interaction result of an . + /// + public class FolderDialogResult + { + /// + /// The full path of the folder selected by the user, or null if the interaction was unsuccessful. + /// + public string FolderPath { get; set; } + + /// + /// Indicates whether the user confirmed the dialog or not. + /// + public bool Success { get; set; } + } +} diff --git a/SafeExamBrowser.UserInterface.Contracts/Windows/IFolderDialog.cs b/SafeExamBrowser.UserInterface.Contracts/Windows/IFolderDialog.cs new file mode 100644 index 00000000..3e30ea89 --- /dev/null +++ b/SafeExamBrowser.UserInterface.Contracts/Windows/IFolderDialog.cs @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2019 ETH Zürich, Educational Development and Technology (LET) + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +using SafeExamBrowser.UserInterface.Contracts.Windows.Data; + +namespace SafeExamBrowser.UserInterface.Contracts.Windows +{ + public interface IFolderDialog + { + /// + /// Shows the dialog to the user. If a parent window is specified, the dialog is rendered modally for the given parent. + /// + FolderDialogResult Show(IWindow parent = null); + } +} diff --git a/SafeExamBrowser.UserInterface.Desktop/FolderDialog.cs b/SafeExamBrowser.UserInterface.Desktop/FolderDialog.cs new file mode 100644 index 00000000..c91107f8 --- /dev/null +++ b/SafeExamBrowser.UserInterface.Desktop/FolderDialog.cs @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2019 ETH Zürich, Educational Development and Technology (LET) + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +using System; +using System.Windows; +using System.Windows.Forms; +using System.Windows.Interop; +using SafeExamBrowser.UserInterface.Contracts.Windows; +using SafeExamBrowser.UserInterface.Contracts.Windows.Data; + +namespace SafeExamBrowser.UserInterface.Desktop +{ + internal class FolderDialog : IFolderDialog + { + private string message; + + internal FolderDialog(string message) + { + this.message = message; + } + + public FolderDialogResult Show(IWindow parent = null) + { + var result = new FolderDialogResult(); + + using (var dialog = new FolderBrowserDialog()) + { + var dialogResult = DialogResult.None; + + dialog.Description = message; + dialog.ShowNewFolderButton = false; + + if (parent is Window w) + { + dialogResult = dialog.ShowDialog(new Win32Window(w)); + } + else + { + dialogResult = dialog.ShowDialog(); + } + + if (dialogResult == DialogResult.OK) + { + result.FolderPath = dialog.SelectedPath; + result.Success = true; + } + } + + return result; + } + + private class Win32Window : System.Windows.Forms.IWin32Window + { + private Window w; + + public Win32Window(Window w) + { + this.w = w; + } + + public IntPtr Handle => w.Dispatcher.Invoke(() => new WindowInteropHelper(w).Handle); + } + } +} diff --git a/SafeExamBrowser.UserInterface.Desktop/SafeExamBrowser.UserInterface.Desktop.csproj b/SafeExamBrowser.UserInterface.Desktop/SafeExamBrowser.UserInterface.Desktop.csproj index d86976d3..533b49bf 100644 --- a/SafeExamBrowser.UserInterface.Desktop/SafeExamBrowser.UserInterface.Desktop.csproj +++ b/SafeExamBrowser.UserInterface.Desktop/SafeExamBrowser.UserInterface.Desktop.csproj @@ -145,6 +145,7 @@ TaskviewWindowControl.xaml + LockScreen.xaml diff --git a/SafeExamBrowser.UserInterface.Desktop/TaskView.xaml.cs b/SafeExamBrowser.UserInterface.Desktop/TaskView.xaml.cs index 1bea115c..01860b34 100644 --- a/SafeExamBrowser.UserInterface.Desktop/TaskView.xaml.cs +++ b/SafeExamBrowser.UserInterface.Desktop/TaskView.xaml.cs @@ -18,7 +18,7 @@ using SafeExamBrowser.UserInterface.Desktop.Controls; namespace SafeExamBrowser.UserInterface.Desktop { - public partial class Taskview : Window, ITaskView + public partial class Taskview : Window, ITaskview { private IList applications; private LinkedListNode current; @@ -41,7 +41,7 @@ namespace SafeExamBrowser.UserInterface.Desktop applications.Add(application); } - public void Register(ITaskViewActivator activator) + public void Register(ITaskviewActivator activator) { activator.Deactivated += Activator_Deactivated; activator.NextActivated += Activator_Next; diff --git a/SafeExamBrowser.UserInterface.Desktop/UserInterfaceFactory.cs b/SafeExamBrowser.UserInterface.Desktop/UserInterfaceFactory.cs index 05f3b8ec..818a4151 100644 --- a/SafeExamBrowser.UserInterface.Desktop/UserInterfaceFactory.cs +++ b/SafeExamBrowser.UserInterface.Desktop/UserInterfaceFactory.cs @@ -75,6 +75,11 @@ namespace SafeExamBrowser.UserInterface.Desktop return new BrowserWindow(control, settings, isMainWindow, text); } + public IFolderDialog CreateFolderDialog(string message) + { + return new FolderDialog(message); + } + public ISystemControl CreateKeyboardLayoutControl(IKeyboard keyboard, Location location) { if (location == Location.ActionCenter) diff --git a/SafeExamBrowser.UserInterface.Mobile/FolderDialog.cs b/SafeExamBrowser.UserInterface.Mobile/FolderDialog.cs new file mode 100644 index 00000000..82aaea03 --- /dev/null +++ b/SafeExamBrowser.UserInterface.Mobile/FolderDialog.cs @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2019 ETH Zürich, Educational Development and Technology (LET) + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +using System; +using System.Windows; +using System.Windows.Forms; +using System.Windows.Interop; +using SafeExamBrowser.UserInterface.Contracts.Windows; +using SafeExamBrowser.UserInterface.Contracts.Windows.Data; + +namespace SafeExamBrowser.UserInterface.Mobile +{ + internal class FolderDialog : IFolderDialog + { + private string message; + + internal FolderDialog(string message) + { + this.message = message; + } + + public FolderDialogResult Show(IWindow parent = null) + { + var result = new FolderDialogResult(); + + using (var dialog = new FolderBrowserDialog()) + { + var dialogResult = DialogResult.None; + + dialog.Description = message; + dialog.ShowNewFolderButton = false; + + if (parent is Window w) + { + dialogResult = dialog.ShowDialog(new Win32Window(w)); + } + else + { + dialogResult = dialog.ShowDialog(); + } + + if (dialogResult == DialogResult.OK) + { + result.FolderPath = dialog.SelectedPath; + result.Success = true; + } + } + + return result; + } + + private class Win32Window : System.Windows.Forms.IWin32Window + { + private Window w; + + public Win32Window(Window w) + { + this.w = w; + } + + public IntPtr Handle => w.Dispatcher.Invoke(() => new WindowInteropHelper(w).Handle); + } + } +} diff --git a/SafeExamBrowser.UserInterface.Mobile/SafeExamBrowser.UserInterface.Mobile.csproj b/SafeExamBrowser.UserInterface.Mobile/SafeExamBrowser.UserInterface.Mobile.csproj index 4cdcfcb7..0fd5e3be 100644 --- a/SafeExamBrowser.UserInterface.Mobile/SafeExamBrowser.UserInterface.Mobile.csproj +++ b/SafeExamBrowser.UserInterface.Mobile/SafeExamBrowser.UserInterface.Mobile.csproj @@ -146,6 +146,7 @@ TaskviewWindowControl.xaml + LockScreen.xaml diff --git a/SafeExamBrowser.UserInterface.Mobile/TaskView.xaml.cs b/SafeExamBrowser.UserInterface.Mobile/TaskView.xaml.cs index aab6a216..1b81faca 100644 --- a/SafeExamBrowser.UserInterface.Mobile/TaskView.xaml.cs +++ b/SafeExamBrowser.UserInterface.Mobile/TaskView.xaml.cs @@ -18,7 +18,7 @@ using SafeExamBrowser.UserInterface.Mobile.Controls; namespace SafeExamBrowser.UserInterface.Mobile { - public partial class Taskview : Window, ITaskView + public partial class Taskview : Window, ITaskview { private IList applications; private LinkedListNode current; @@ -41,7 +41,7 @@ namespace SafeExamBrowser.UserInterface.Mobile applications.Add(application); } - public void Register(ITaskViewActivator activator) + public void Register(ITaskviewActivator activator) { activator.Deactivated += Activator_Deactivated; activator.NextActivated += Activator_Next; diff --git a/SafeExamBrowser.UserInterface.Mobile/UserInterfaceFactory.cs b/SafeExamBrowser.UserInterface.Mobile/UserInterfaceFactory.cs index ab93cb37..37c488bd 100644 --- a/SafeExamBrowser.UserInterface.Mobile/UserInterfaceFactory.cs +++ b/SafeExamBrowser.UserInterface.Mobile/UserInterfaceFactory.cs @@ -75,6 +75,11 @@ namespace SafeExamBrowser.UserInterface.Mobile return new BrowserWindow(control, settings, isMainWindow, text); } + public IFolderDialog CreateFolderDialog(string message) + { + return new FolderDialog(message); + } + public ISystemControl CreateKeyboardLayoutControl(IKeyboard keyboard, Location location) { if (location == Location.ActionCenter) diff --git a/SafeExamBrowser.UserInterface.Shared/Activators/TaskViewKeyboardActivator.cs b/SafeExamBrowser.UserInterface.Shared/Activators/TaskViewKeyboardActivator.cs index f1418ec8..39f59035 100644 --- a/SafeExamBrowser.UserInterface.Shared/Activators/TaskViewKeyboardActivator.cs +++ b/SafeExamBrowser.UserInterface.Shared/Activators/TaskViewKeyboardActivator.cs @@ -15,7 +15,7 @@ using SafeExamBrowser.WindowsApi.Contracts.Events; namespace SafeExamBrowser.UserInterface.Shared.Activators { - public class TaskViewKeyboardActivator : KeyboardActivator, ITaskViewActivator + public class TaskviewKeyboardActivator : KeyboardActivator, ITaskviewActivator { private bool Activated, LeftShift, Tab; private ILogger logger; @@ -24,7 +24,7 @@ namespace SafeExamBrowser.UserInterface.Shared.Activators public event ActivatorEventHandler NextActivated; public event ActivatorEventHandler PreviousActivated; - public TaskViewKeyboardActivator(ILogger logger, INativeMethods nativeMethods) : base(nativeMethods) + public TaskviewKeyboardActivator(ILogger logger, INativeMethods nativeMethods) : base(nativeMethods) { this.logger = logger; } diff --git a/SafeExamBrowser.UserInterface.Shared/SafeExamBrowser.UserInterface.Shared.csproj b/SafeExamBrowser.UserInterface.Shared/SafeExamBrowser.UserInterface.Shared.csproj index c76d587a..5cf0d7f9 100644 --- a/SafeExamBrowser.UserInterface.Shared/SafeExamBrowser.UserInterface.Shared.csproj +++ b/SafeExamBrowser.UserInterface.Shared/SafeExamBrowser.UserInterface.Shared.csproj @@ -66,7 +66,7 @@ - +