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.Escape && !settings.AllowAltEsc; | ||||||
| 			block |= modifier.HasFlag(KeyModifier.Alt) && key == Key.F4 && !settings.AllowAltF4; | 			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.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; | 			block |= modifier.HasFlag(KeyModifier.Ctrl) && key == Key.Escape && !settings.AllowCtrlEsc; | ||||||
| 
 | 
 | ||||||
| 			if (block) | 			if (block) | ||||||
|  |  | ||||||
|  | @ -29,16 +29,10 @@ namespace SafeExamBrowser.UserInterface.Shared.Activators | ||||||
| 			this.logger = logger; | 			this.logger = logger; | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		public void Pause() | 		protected override void OnBeforeResume() | ||||||
| 		{ |  | ||||||
| 			Paused = true; |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		public void Resume() |  | ||||||
| 		{ | 		{ | ||||||
| 			A = false; | 			A = false; | ||||||
| 			LeftWindows = false; | 			LeftWindows = false; | ||||||
| 			Paused = false; |  | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		protected override bool Process(Key key, KeyModifier modifier, KeyState state) | 		protected override bool Process(Key key, KeyModifier modifier, KeyState state) | ||||||
|  |  | ||||||
|  | @ -31,15 +31,9 @@ namespace SafeExamBrowser.UserInterface.Shared.Activators | ||||||
| 			this.nativeMethods = nativeMethods; | 			this.nativeMethods = nativeMethods; | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		public void Pause() | 		protected override void OnBeforeResume() | ||||||
| 		{ |  | ||||||
| 			Paused = true; |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		public void Resume() |  | ||||||
| 		{ | 		{ | ||||||
| 			isDown = false; | 			isDown = false; | ||||||
| 			Paused = false; |  | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		protected override bool Process(MouseButton button, MouseButtonState state, MouseInformation info) | 		protected override bool Process(MouseButton button, MouseButtonState state, MouseInformation info) | ||||||
|  |  | ||||||
|  | @ -15,10 +15,9 @@ namespace SafeExamBrowser.UserInterface.Shared.Activators | ||||||
| { | { | ||||||
| 	public abstract class KeyboardActivator | 	public abstract class KeyboardActivator | ||||||
| 	{ | 	{ | ||||||
| 		private INativeMethods nativeMethods; |  | ||||||
| 		private Guid? hookId; | 		private Guid? hookId; | ||||||
| 
 | 		private INativeMethods nativeMethods; | ||||||
| 		protected bool Paused { get; set; } | 		private bool paused; | ||||||
| 
 | 
 | ||||||
| 		protected KeyboardActivator(INativeMethods nativeMethods) | 		protected KeyboardActivator(INativeMethods nativeMethods) | ||||||
| 		{ | 		{ | ||||||
|  | @ -27,6 +26,18 @@ namespace SafeExamBrowser.UserInterface.Shared.Activators | ||||||
| 
 | 
 | ||||||
| 		protected abstract bool Process(Key key, KeyModifier modifier, KeyState state); | 		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() | 		public void Start() | ||||||
| 		{ | 		{ | ||||||
| 			hookId = nativeMethods.RegisterKeyboardHook(KeyboardHookCallback); | 			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) | 		private bool KeyboardHookCallback(int keyCode, KeyModifier modifier, KeyState state) | ||||||
| 		{ | 		{ | ||||||
| 			if (!Paused) | 			if (!paused) | ||||||
| 			{ | 			{ | ||||||
| 				return Process(KeyInterop.KeyFromVirtualKey(keyCode), modifier, state); | 				return Process(KeyInterop.KeyFromVirtualKey(keyCode), modifier, state); | ||||||
| 			} | 			} | ||||||
|  |  | ||||||
|  | @ -17,7 +17,7 @@ namespace SafeExamBrowser.UserInterface.Shared.Activators | ||||||
| { | { | ||||||
| 	public class TaskViewKeyboardActivator : KeyboardActivator, ITaskViewActivator | 	public class TaskViewKeyboardActivator : KeyboardActivator, ITaskViewActivator | ||||||
| 	{ | 	{ | ||||||
| 		private bool Activated, BlockActivation, LeftShift, Tab; | 		private bool Activated, LeftShift, Tab; | ||||||
| 		private ILogger logger; | 		private ILogger logger; | ||||||
| 
 | 
 | ||||||
| 		public event ActivatorEventHandler Deactivated; | 		public event ActivatorEventHandler Deactivated; | ||||||
|  | @ -29,14 +29,22 @@ namespace SafeExamBrowser.UserInterface.Shared.Activators | ||||||
| 			this.logger = logger; | 			this.logger = logger; | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		public void Pause() | 		protected override void OnBeforePause() | ||||||
| 		{ | 		{ | ||||||
| 			BlockActivation = true; | 			if (Activated) | ||||||
|  | 			{ | ||||||
|  | 				logger.Debug("Auto-deactivation."); | ||||||
|  | 				Deactivated?.Invoke(); | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			Activated = false; | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		public void Resume() | 		protected override void OnBeforeResume() | ||||||
| 		{ | 		{ | ||||||
| 			BlockActivation = false; | 			Activated = false; | ||||||
|  | 			LeftShift = false; | ||||||
|  | 			Tab = false; | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		protected override bool Process(Key key, KeyModifier modifier, KeyState state) | 		protected override bool Process(Key key, KeyModifier modifier, KeyState state) | ||||||
|  | @ -73,7 +81,7 @@ namespace SafeExamBrowser.UserInterface.Shared.Activators | ||||||
| 
 | 
 | ||||||
| 			var isActivation = Tab && changed; | 			var isActivation = Tab && changed; | ||||||
| 
 | 
 | ||||||
| 			if (isActivation && !BlockActivation) | 			if (isActivation) | ||||||
| 			{ | 			{ | ||||||
| 				Activated = true; | 				Activated = true; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -27,17 +27,11 @@ namespace SafeExamBrowser.UserInterface.Shared.Activators | ||||||
| 			this.logger = logger; | 			this.logger = logger; | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		public void Pause() | 		protected override void OnBeforeResume() | ||||||
| 		{ |  | ||||||
| 			Paused = true; |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		public void Resume() |  | ||||||
| 		{ | 		{ | ||||||
| 			Q = false; | 			Q = false; | ||||||
| 			LeftCtrl = false; | 			LeftCtrl = false; | ||||||
| 			RightCtrl = false; | 			RightCtrl = false; | ||||||
| 			Paused = false; |  | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		protected override bool Process(Key key, KeyModifier modifier, KeyState state) | 		protected override bool Process(Key key, KeyModifier modifier, KeyState state) | ||||||
|  |  | ||||||
|  | @ -14,18 +14,29 @@ namespace SafeExamBrowser.UserInterface.Shared.Activators | ||||||
| { | { | ||||||
| 	public abstract class TouchActivator | 	public abstract class TouchActivator | ||||||
| 	{ | 	{ | ||||||
| 		private INativeMethods nativeMethods; |  | ||||||
| 		private Guid? hookId; | 		private Guid? hookId; | ||||||
| 
 | 		private INativeMethods nativeMethods; | ||||||
| 		protected bool Paused { get; set; } | 		protected bool paused; | ||||||
| 
 | 
 | ||||||
| 		protected TouchActivator(INativeMethods nativeMethods) | 		protected TouchActivator(INativeMethods nativeMethods) | ||||||
| 		{ | 		{ | ||||||
| 			this.nativeMethods = nativeMethods; | 			this.nativeMethods = nativeMethods; | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
|  | 		protected abstract void OnBeforeResume(); | ||||||
| 		protected abstract bool Process(MouseButton button, MouseButtonState state, MouseInformation info); | 		protected abstract bool Process(MouseButton button, MouseButtonState state, MouseInformation info); | ||||||
| 
 | 
 | ||||||
|  | 		public void Pause() | ||||||
|  | 		{ | ||||||
|  | 			paused = true; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		public void Resume() | ||||||
|  | 		{ | ||||||
|  | 			OnBeforeResume(); | ||||||
|  | 			paused = false; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
| 		public void Start() | 		public void Start() | ||||||
| 		{ | 		{ | ||||||
| 			hookId = nativeMethods.RegisterMouseHook(MouseHookCallback); | 			hookId = nativeMethods.RegisterMouseHook(MouseHookCallback); | ||||||
|  | @ -41,7 +52,7 @@ namespace SafeExamBrowser.UserInterface.Shared.Activators | ||||||
| 
 | 
 | ||||||
| 		private bool MouseHookCallback(MouseButton button, MouseButtonState state, MouseInformation info) | 		private bool MouseHookCallback(MouseButton button, MouseButtonState state, MouseInformation info) | ||||||
| 		{ | 		{ | ||||||
| 			if (!Paused && info.IsTouch) | 			if (!paused && info.IsTouch) | ||||||
| 			{ | 			{ | ||||||
| 				return Process(button, state, info); | 				return Process(button, state, info); | ||||||
| 			} | 			} | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 dbuechel
						dbuechel