SEBWIN-312: Ensured system task view is never activated and improved pause mechanism for activators.
This commit is contained in:
		
							parent
							
								
									d7a4dc8782
								
							
						
					
					
						commit
						0a939e19ac
					
				
					 7 changed files with 56 additions and 36 deletions
				
			
		|  | @ -69,7 +69,7 @@ namespace SafeExamBrowser.Monitoring.Keyboard | |||
| 			block |= modifier.HasFlag(KeyModifier.Alt) && key == Key.Escape && !settings.AllowAltEsc; | ||||
| 			block |= modifier.HasFlag(KeyModifier.Alt) && key == Key.F4 && !settings.AllowAltF4; | ||||
| 			block |= modifier.HasFlag(KeyModifier.Alt) && key == Key.Space; | ||||
| 			block |= modifier.HasFlag(KeyModifier.Alt) && key == Key.Tab && !settings.AllowAltTab; | ||||
| 			block |= modifier.HasFlag(KeyModifier.Alt) && key == Key.Tab; | ||||
| 			block |= modifier.HasFlag(KeyModifier.Ctrl) && key == Key.Escape && !settings.AllowCtrlEsc; | ||||
| 
 | ||||
| 			if (block) | ||||
|  |  | |||
|  | @ -29,16 +29,10 @@ namespace SafeExamBrowser.UserInterface.Shared.Activators | |||
| 			this.logger = logger; | ||||
| 		} | ||||
| 
 | ||||
| 		public void Pause() | ||||
| 		{ | ||||
| 			Paused = true; | ||||
| 		} | ||||
| 
 | ||||
| 		public void Resume() | ||||
| 		protected override void OnBeforeResume() | ||||
| 		{ | ||||
| 			A = false; | ||||
| 			LeftWindows = false; | ||||
| 			Paused = false; | ||||
| 		} | ||||
| 
 | ||||
| 		protected override bool Process(Key key, KeyModifier modifier, KeyState state) | ||||
|  |  | |||
|  | @ -31,15 +31,9 @@ namespace SafeExamBrowser.UserInterface.Shared.Activators | |||
| 			this.nativeMethods = nativeMethods; | ||||
| 		} | ||||
| 
 | ||||
| 		public void Pause() | ||||
| 		{ | ||||
| 			Paused = true; | ||||
| 		} | ||||
| 
 | ||||
| 		public void Resume() | ||||
| 		protected override void OnBeforeResume() | ||||
| 		{ | ||||
| 			isDown = false; | ||||
| 			Paused = false; | ||||
| 		} | ||||
| 
 | ||||
| 		protected override bool Process(MouseButton button, MouseButtonState state, MouseInformation info) | ||||
|  |  | |||
|  | @ -15,10 +15,9 @@ namespace SafeExamBrowser.UserInterface.Shared.Activators | |||
| { | ||||
| 	public abstract class KeyboardActivator | ||||
| 	{ | ||||
| 		private INativeMethods nativeMethods; | ||||
| 		private Guid? hookId; | ||||
| 
 | ||||
| 		protected bool Paused { get; set; } | ||||
| 		private INativeMethods nativeMethods; | ||||
| 		private bool paused; | ||||
| 
 | ||||
| 		protected KeyboardActivator(INativeMethods nativeMethods) | ||||
| 		{ | ||||
|  | @ -27,6 +26,18 @@ namespace SafeExamBrowser.UserInterface.Shared.Activators | |||
| 
 | ||||
| 		protected abstract bool Process(Key key, KeyModifier modifier, KeyState state); | ||||
| 
 | ||||
| 		public void Pause() | ||||
| 		{ | ||||
| 			OnBeforePause(); | ||||
| 			paused = true; | ||||
| 		} | ||||
| 
 | ||||
| 		public void Resume() | ||||
| 		{ | ||||
| 			OnBeforeResume(); | ||||
| 			paused = false; | ||||
| 		} | ||||
| 
 | ||||
| 		public void Start() | ||||
| 		{ | ||||
| 			hookId = nativeMethods.RegisterKeyboardHook(KeyboardHookCallback); | ||||
|  | @ -40,9 +51,17 @@ namespace SafeExamBrowser.UserInterface.Shared.Activators | |||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		protected virtual void OnBeforePause() | ||||
| 		{ | ||||
| 		} | ||||
| 
 | ||||
| 		protected virtual void OnBeforeResume() | ||||
| 		{ | ||||
| 		} | ||||
| 
 | ||||
| 		private bool KeyboardHookCallback(int keyCode, KeyModifier modifier, KeyState state) | ||||
| 		{ | ||||
| 			if (!Paused) | ||||
| 			if (!paused) | ||||
| 			{ | ||||
| 				return Process(KeyInterop.KeyFromVirtualKey(keyCode), modifier, state); | ||||
| 			} | ||||
|  |  | |||
|  | @ -17,7 +17,7 @@ namespace SafeExamBrowser.UserInterface.Shared.Activators | |||
| { | ||||
| 	public class TaskViewKeyboardActivator : KeyboardActivator, ITaskViewActivator | ||||
| 	{ | ||||
| 		private bool Activated, BlockActivation, LeftShift, Tab; | ||||
| 		private bool Activated, LeftShift, Tab; | ||||
| 		private ILogger logger; | ||||
| 
 | ||||
| 		public event ActivatorEventHandler Deactivated; | ||||
|  | @ -29,14 +29,22 @@ namespace SafeExamBrowser.UserInterface.Shared.Activators | |||
| 			this.logger = logger; | ||||
| 		} | ||||
| 
 | ||||
| 		public void Pause() | ||||
| 		protected override void OnBeforePause() | ||||
| 		{ | ||||
| 			BlockActivation = true; | ||||
| 			if (Activated) | ||||
| 			{ | ||||
| 				logger.Debug("Auto-deactivation."); | ||||
| 				Deactivated?.Invoke(); | ||||
| 			} | ||||
| 
 | ||||
| 		public void Resume() | ||||
| 			Activated = false; | ||||
| 		} | ||||
| 
 | ||||
| 		protected override void OnBeforeResume() | ||||
| 		{ | ||||
| 			BlockActivation = false; | ||||
| 			Activated = false; | ||||
| 			LeftShift = false; | ||||
| 			Tab = false; | ||||
| 		} | ||||
| 
 | ||||
| 		protected override bool Process(Key key, KeyModifier modifier, KeyState state) | ||||
|  | @ -73,7 +81,7 @@ namespace SafeExamBrowser.UserInterface.Shared.Activators | |||
| 
 | ||||
| 			var isActivation = Tab && changed; | ||||
| 
 | ||||
| 			if (isActivation && !BlockActivation) | ||||
| 			if (isActivation) | ||||
| 			{ | ||||
| 				Activated = true; | ||||
| 
 | ||||
|  |  | |||
|  | @ -27,17 +27,11 @@ namespace SafeExamBrowser.UserInterface.Shared.Activators | |||
| 			this.logger = logger; | ||||
| 		} | ||||
| 
 | ||||
| 		public void Pause() | ||||
| 		{ | ||||
| 			Paused = true; | ||||
| 		} | ||||
| 
 | ||||
| 		public void Resume() | ||||
| 		protected override void OnBeforeResume() | ||||
| 		{ | ||||
| 			Q = false; | ||||
| 			LeftCtrl = false; | ||||
| 			RightCtrl = false; | ||||
| 			Paused = false; | ||||
| 		} | ||||
| 
 | ||||
| 		protected override bool Process(Key key, KeyModifier modifier, KeyState state) | ||||
|  |  | |||
|  | @ -14,18 +14,29 @@ namespace SafeExamBrowser.UserInterface.Shared.Activators | |||
| { | ||||
| 	public abstract class TouchActivator | ||||
| 	{ | ||||
| 		private INativeMethods nativeMethods; | ||||
| 		private Guid? hookId; | ||||
| 
 | ||||
| 		protected bool Paused { get; set; } | ||||
| 		private INativeMethods nativeMethods; | ||||
| 		protected bool paused; | ||||
| 
 | ||||
| 		protected TouchActivator(INativeMethods nativeMethods) | ||||
| 		{ | ||||
| 			this.nativeMethods = nativeMethods; | ||||
| 		} | ||||
| 
 | ||||
| 		protected abstract void OnBeforeResume(); | ||||
| 		protected abstract bool Process(MouseButton button, MouseButtonState state, MouseInformation info); | ||||
| 
 | ||||
| 		public void Pause() | ||||
| 		{ | ||||
| 			paused = true; | ||||
| 		} | ||||
| 
 | ||||
| 		public void Resume() | ||||
| 		{ | ||||
| 			OnBeforeResume(); | ||||
| 			paused = false; | ||||
| 		} | ||||
| 
 | ||||
| 		public void Start() | ||||
| 		{ | ||||
| 			hookId = nativeMethods.RegisterMouseHook(MouseHookCallback); | ||||
|  | @ -41,7 +52,7 @@ namespace SafeExamBrowser.UserInterface.Shared.Activators | |||
| 
 | ||||
| 		private bool MouseHookCallback(MouseButton button, MouseButtonState state, MouseInformation info) | ||||
| 		{ | ||||
| 			if (!Paused && info.IsTouch) | ||||
| 			if (!paused && info.IsTouch) | ||||
| 			{ | ||||
| 				return Process(button, state, info); | ||||
| 			} | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 dbuechel
						dbuechel