fix popups space bar problem
This commit is contained in:
		
							parent
							
								
									765bfcb516
								
							
						
					
					
						commit
						31f5c75a90
					
				
					 15 changed files with 242 additions and 15 deletions
				
			
		| 
						 | 
					@ -6,6 +6,7 @@
 | 
				
			||||||
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 | 
					 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					using System;
 | 
				
			||||||
using System.Threading.Tasks;
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
using System.Windows.Automation;
 | 
					using System.Windows.Automation;
 | 
				
			||||||
using System.Windows.Controls;
 | 
					using System.Windows.Controls;
 | 
				
			||||||
| 
						 | 
					@ -50,7 +51,22 @@ namespace SafeExamBrowser.UserInterface.Desktop.Controls.ActionCenter
 | 
				
			||||||
					LayoutsStackPanel.Children[0].Focus();
 | 
										LayoutsStackPanel.Children[0].Focus();
 | 
				
			||||||
				}));
 | 
									}));
 | 
				
			||||||
			};
 | 
								};
 | 
				
			||||||
			Button.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() => Popup.IsOpen = Popup.IsMouseOver));
 | 
								var lastOpenedBySpacePress = DateTime.MinValue;
 | 
				
			||||||
 | 
								Button.PreviewKeyDown += (o, args) =>
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									if (args.Key == System.Windows.Input.Key.Space)                 // for some reason, the popup immediately closes again if opened by a Space Bar key event - as a mitigation, we record the space bar event and leave the popup open for at least 3 seconds
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										lastOpenedBySpacePress = DateTime.Now;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								};
 | 
				
			||||||
 | 
								Button.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() =>
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									if (Popup.IsOpen && (DateTime.Now - lastOpenedBySpacePress).TotalSeconds < 3)
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										return;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									Popup.IsOpen = Popup.IsMouseOver;
 | 
				
			||||||
 | 
								}));
 | 
				
			||||||
			Popup.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() => Popup.IsOpen = IsMouseOver));
 | 
								Popup.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() => Popup.IsOpen = IsMouseOver));
 | 
				
			||||||
			Popup.Opened += (o, args) => Grid.Background = Brushes.Gray;
 | 
								Popup.Opened += (o, args) => Grid.Background = Brushes.Gray;
 | 
				
			||||||
			Popup.Closed += (o, args) => Grid.Background = originalBrush;
 | 
								Popup.Closed += (o, args) => Grid.Background = originalBrush;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -45,7 +45,22 @@ namespace SafeExamBrowser.UserInterface.Desktop.Controls.ActionCenter
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			adapter.Changed += () => Dispatcher.InvokeAsync(Update);
 | 
								adapter.Changed += () => Dispatcher.InvokeAsync(Update);
 | 
				
			||||||
			Button.Click += (o, args) => Popup.IsOpen = !Popup.IsOpen;
 | 
								Button.Click += (o, args) => Popup.IsOpen = !Popup.IsOpen;
 | 
				
			||||||
			Button.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() => Popup.IsOpen = Popup.IsMouseOver));
 | 
								var lastOpenedBySpacePress = DateTime.MinValue;
 | 
				
			||||||
 | 
								Button.PreviewKeyDown += (o, args) =>
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									if (args.Key == System.Windows.Input.Key.Space)                 // for some reason, the popup immediately closes again if opened by a Space Bar key event - as a mitigation, we record the space bar event and leave the popup open for at least 3 seconds
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										lastOpenedBySpacePress = DateTime.Now;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								};
 | 
				
			||||||
 | 
								Button.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() =>
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									if (Popup.IsOpen && (DateTime.Now - lastOpenedBySpacePress).TotalSeconds < 3)
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										return;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									Popup.IsOpen = Popup.IsMouseOver;
 | 
				
			||||||
 | 
								}));
 | 
				
			||||||
			Popup.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() => Popup.IsOpen = IsMouseOver));
 | 
								Popup.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() => Popup.IsOpen = IsMouseOver));
 | 
				
			||||||
			Popup.Opened += (o, args) => Grid.Background = Brushes.Gray;
 | 
								Popup.Opened += (o, args) => Grid.Background = Brushes.Gray;
 | 
				
			||||||
			Popup.Closed += (o, args) => Grid.Background = originalBrush;
 | 
								Popup.Closed += (o, args) => Grid.Background = originalBrush;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -55,7 +55,22 @@ namespace SafeExamBrowser.UserInterface.Desktop.Controls.ActionCenter
 | 
				
			||||||
			RaisedIcon = new XamlIconResource { Uri = new Uri("pack://application:,,,/SafeExamBrowser.UserInterface.Desktop;component/Images/Hand_Raised.xaml") };
 | 
								RaisedIcon = new XamlIconResource { Uri = new Uri("pack://application:,,,/SafeExamBrowser.UserInterface.Desktop;component/Images/Hand_Raised.xaml") };
 | 
				
			||||||
			Icon.Content = IconResourceLoader.Load(LoweredIcon);
 | 
								Icon.Content = IconResourceLoader.Load(LoweredIcon);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			NotificationButton.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() => Popup.IsOpen = Popup.IsMouseOver));
 | 
								var lastOpenedBySpacePress = DateTime.MinValue;
 | 
				
			||||||
 | 
								NotificationButton.PreviewKeyDown += (o, args) =>
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									if (args.Key == System.Windows.Input.Key.Space)                 // for some reason, the popup immediately closes again if opened by a Space Bar key event - as a mitigation, we record the space bar event and leave the popup open for at least 3 seconds
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										lastOpenedBySpacePress = DateTime.Now;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								};
 | 
				
			||||||
 | 
								NotificationButton.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() =>
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									if (Popup.IsOpen && (DateTime.Now - lastOpenedBySpacePress).TotalSeconds < 3)
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										return;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									Popup.IsOpen = Popup.IsMouseOver;
 | 
				
			||||||
 | 
								}));
 | 
				
			||||||
			NotificationButton.PreviewMouseLeftButtonUp += NotificationButton_PreviewMouseLeftButtonUp;
 | 
								NotificationButton.PreviewMouseLeftButtonUp += NotificationButton_PreviewMouseLeftButtonUp;
 | 
				
			||||||
			NotificationButton.PreviewMouseRightButtonUp += NotificationButton_PreviewMouseRightButtonUp;
 | 
								NotificationButton.PreviewMouseRightButtonUp += NotificationButton_PreviewMouseRightButtonUp;
 | 
				
			||||||
			NotificationButton.ToolTip = text.Get(TextKey.Notification_ProctoringHandLowered);
 | 
								NotificationButton.ToolTip = text.Get(TextKey.Notification_ProctoringHandLowered);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -48,7 +48,22 @@ namespace SafeExamBrowser.UserInterface.Desktop.Controls.Taskbar
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			audio.VolumeChanged += Audio_VolumeChanged;
 | 
								audio.VolumeChanged += Audio_VolumeChanged;
 | 
				
			||||||
			Button.Click += (o, args) => Popup.IsOpen = !Popup.IsOpen;
 | 
								Button.Click += (o, args) => Popup.IsOpen = !Popup.IsOpen;
 | 
				
			||||||
			Button.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() => Popup.IsOpen = Popup.IsMouseOver));
 | 
								var lastOpenedBySpacePress = DateTime.MinValue;
 | 
				
			||||||
 | 
								Button.PreviewKeyDown += (o, args) =>
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									if (args.Key == System.Windows.Input.Key.Space)                 // for some reason, the popup immediately closes again if opened by a Space Bar key event - as a mitigation, we record the space bar event and leave the popup open for at least 3 seconds
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										lastOpenedBySpacePress = DateTime.Now;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								};
 | 
				
			||||||
 | 
								Button.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() =>
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									if (Popup.IsOpen && (DateTime.Now - lastOpenedBySpacePress).TotalSeconds < 3)
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										return;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									Popup.IsOpen = Popup.IsMouseOver;
 | 
				
			||||||
 | 
								}));
 | 
				
			||||||
			MuteButton.Click += MuteButton_Click;
 | 
								MuteButton.Click += MuteButton_Click;
 | 
				
			||||||
			MutedIcon = new XamlIconResource { Uri = new Uri("pack://application:,,,/SafeExamBrowser.UserInterface.Desktop;component/Images/Audio_Muted.xaml") };
 | 
								MutedIcon = new XamlIconResource { Uri = new Uri("pack://application:,,,/SafeExamBrowser.UserInterface.Desktop;component/Images/Audio_Muted.xaml") };
 | 
				
			||||||
			NoDeviceIcon = new XamlIconResource { Uri = new Uri("pack://application:,,,/SafeExamBrowser.UserInterface.Desktop;component/Images/Audio_NoDevice.xaml") };
 | 
								NoDeviceIcon = new XamlIconResource { Uri = new Uri("pack://application:,,,/SafeExamBrowser.UserInterface.Desktop;component/Images/Audio_NoDevice.xaml") };
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -54,7 +54,22 @@ namespace SafeExamBrowser.UserInterface.Desktop.Controls.Taskbar
 | 
				
			||||||
					((LayoutsStackPanel.Children[0] as ContentControl).Content as UIElement).Focus();
 | 
										((LayoutsStackPanel.Children[0] as ContentControl).Content as UIElement).Focus();
 | 
				
			||||||
				})));
 | 
									})));
 | 
				
			||||||
			};
 | 
								};
 | 
				
			||||||
			Button.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() => Popup.IsOpen = Popup.IsMouseOver));
 | 
								var lastOpenedBySpacePress = DateTime.MinValue;
 | 
				
			||||||
 | 
								Button.PreviewKeyDown += (o, args) =>
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									if (args.Key == System.Windows.Input.Key.Space)                 // for some reason, the popup immediately closes again if opened by a Space Bar key event - as a mitigation, we record the space bar event and leave the popup open for at least 3 seconds
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										lastOpenedBySpacePress = DateTime.Now;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								};
 | 
				
			||||||
 | 
								Button.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() =>
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									if (Popup.IsOpen && (DateTime.Now - lastOpenedBySpacePress).TotalSeconds < 3)
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										return;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									Popup.IsOpen = Popup.IsMouseOver;
 | 
				
			||||||
 | 
								}));
 | 
				
			||||||
			Popup.CustomPopupPlacementCallback = new CustomPopupPlacementCallback(Popup_PlacementCallback);
 | 
								Popup.CustomPopupPlacementCallback = new CustomPopupPlacementCallback(Popup_PlacementCallback);
 | 
				
			||||||
			Popup.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() => Popup.IsOpen = IsMouseOver));
 | 
								Popup.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() => Popup.IsOpen = IsMouseOver));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -45,8 +45,23 @@ namespace SafeExamBrowser.UserInterface.Desktop.Controls.Taskbar
 | 
				
			||||||
			var originalBrush = Button.Background;
 | 
								var originalBrush = Button.Background;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			adapter.Changed += () => Dispatcher.InvokeAsync(Update);
 | 
								adapter.Changed += () => Dispatcher.InvokeAsync(Update);
 | 
				
			||||||
 | 
								var lastOpenedBySpacePress = DateTime.MinValue;
 | 
				
			||||||
 | 
								Button.PreviewKeyDown += (o, args) =>
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									if (args.Key == System.Windows.Input.Key.Space)					// for some reason, the popup immediately closes again if opened by a Space Bar key event - as a mitigation, we record the space bar event and leave the popup open for at least 3 seconds
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										lastOpenedBySpacePress = DateTime.Now;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								};
 | 
				
			||||||
			Button.Click += (o, args) => Popup.IsOpen = !Popup.IsOpen;
 | 
								Button.Click += (o, args) => Popup.IsOpen = !Popup.IsOpen;
 | 
				
			||||||
			Button.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() => Popup.IsOpen = Popup.IsMouseOver));
 | 
								Button.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() =>
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									if (Popup.IsOpen && (DateTime.Now - lastOpenedBySpacePress).TotalSeconds < 3)
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										return;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									Popup.IsOpen = Popup.IsMouseOver;
 | 
				
			||||||
 | 
								}));
 | 
				
			||||||
			Popup.CustomPopupPlacementCallback = new CustomPopupPlacementCallback(Popup_PlacementCallback);
 | 
								Popup.CustomPopupPlacementCallback = new CustomPopupPlacementCallback(Popup_PlacementCallback);
 | 
				
			||||||
			Popup.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() => Popup.IsOpen = IsMouseOver));
 | 
								Popup.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() => Popup.IsOpen = IsMouseOver));
 | 
				
			||||||
			WirelessIcon.Child = GetWirelessIcon(0);
 | 
								WirelessIcon.Child = GetWirelessIcon(0);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -55,7 +55,22 @@ namespace SafeExamBrowser.UserInterface.Desktop.Controls.Taskbar
 | 
				
			||||||
			RaisedIcon = new XamlIconResource { Uri = new Uri("pack://application:,,,/SafeExamBrowser.UserInterface.Desktop;component/Images/Hand_Raised.xaml") };
 | 
								RaisedIcon = new XamlIconResource { Uri = new Uri("pack://application:,,,/SafeExamBrowser.UserInterface.Desktop;component/Images/Hand_Raised.xaml") };
 | 
				
			||||||
			Icon.Content = IconResourceLoader.Load(LoweredIcon);
 | 
								Icon.Content = IconResourceLoader.Load(LoweredIcon);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			NotificationButton.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() => Popup.IsOpen = Popup.IsMouseOver));
 | 
								var lastOpenedBySpacePress = DateTime.MinValue;
 | 
				
			||||||
 | 
								NotificationButton.PreviewKeyDown += (o, args) =>
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									if (args.Key == System.Windows.Input.Key.Space)                 // for some reason, the popup immediately closes again if opened by a Space Bar key event - as a mitigation, we record the space bar event and leave the popup open for at least 3 seconds
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										lastOpenedBySpacePress = DateTime.Now;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								};
 | 
				
			||||||
 | 
								NotificationButton.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() =>
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									if (Popup.IsOpen && (DateTime.Now - lastOpenedBySpacePress).TotalSeconds < 3)
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										return;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									Popup.IsOpen = Popup.IsMouseOver;
 | 
				
			||||||
 | 
								}));
 | 
				
			||||||
			NotificationButton.PreviewMouseLeftButtonUp += NotificationButton_PreviewMouseLeftButtonUp;
 | 
								NotificationButton.PreviewMouseLeftButtonUp += NotificationButton_PreviewMouseLeftButtonUp;
 | 
				
			||||||
			NotificationButton.PreviewMouseRightButtonUp += NotificationButton_PreviewMouseRightButtonUp;
 | 
								NotificationButton.PreviewMouseRightButtonUp += NotificationButton_PreviewMouseRightButtonUp;
 | 
				
			||||||
			NotificationButton.ToolTip = text.Get(TextKey.Notification_ProctoringHandLowered);
 | 
								NotificationButton.ToolTip = text.Get(TextKey.Notification_ProctoringHandLowered);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -49,7 +49,22 @@ namespace SafeExamBrowser.UserInterface.Mobile.Controls.ActionCenter
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			audio.VolumeChanged += Audio_VolumeChanged;
 | 
								audio.VolumeChanged += Audio_VolumeChanged;
 | 
				
			||||||
			Button.Click += (o, args) => Popup.IsOpen = !Popup.IsOpen;
 | 
								Button.Click += (o, args) => Popup.IsOpen = !Popup.IsOpen;
 | 
				
			||||||
			Button.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() => Popup.IsOpen = Popup.IsMouseOver));
 | 
								var lastOpenedBySpacePress = DateTime.MinValue;
 | 
				
			||||||
 | 
								Button.PreviewKeyDown += (o, args) =>
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									if (args.Key == System.Windows.Input.Key.Space)                 // for some reason, the popup immediately closes again if opened by a Space Bar key event - as a mitigation, we record the space bar event and leave the popup open for at least 3 seconds
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										lastOpenedBySpacePress = DateTime.Now;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								};
 | 
				
			||||||
 | 
								Button.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() =>
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									if (Popup.IsOpen && (DateTime.Now - lastOpenedBySpacePress).TotalSeconds < 3)
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										return;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									Popup.IsOpen = Popup.IsMouseOver;
 | 
				
			||||||
 | 
								}));
 | 
				
			||||||
			MuteButton.Click += MuteButton_Click;
 | 
								MuteButton.Click += MuteButton_Click;
 | 
				
			||||||
			MutedIcon = new XamlIconResource { Uri = new Uri("pack://application:,,,/SafeExamBrowser.UserInterface.Mobile;component/Images/Audio_Muted.xaml") };
 | 
								MutedIcon = new XamlIconResource { Uri = new Uri("pack://application:,,,/SafeExamBrowser.UserInterface.Mobile;component/Images/Audio_Muted.xaml") };
 | 
				
			||||||
			NoDeviceIcon = new XamlIconResource { Uri = new Uri("pack://application:,,,/SafeExamBrowser.UserInterface.Mobile;component/Images/Audio_Light_NoDevice.xaml") };
 | 
								NoDeviceIcon = new XamlIconResource { Uri = new Uri("pack://application:,,,/SafeExamBrowser.UserInterface.Mobile;component/Images/Audio_Light_NoDevice.xaml") };
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -6,6 +6,7 @@
 | 
				
			||||||
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 | 
					 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					using System;
 | 
				
			||||||
using System.Threading.Tasks;
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
using System.Windows.Automation;
 | 
					using System.Windows.Automation;
 | 
				
			||||||
using System.Windows.Controls;
 | 
					using System.Windows.Controls;
 | 
				
			||||||
| 
						 | 
					@ -50,7 +51,22 @@ namespace SafeExamBrowser.UserInterface.Mobile.Controls.ActionCenter
 | 
				
			||||||
					LayoutsStackPanel.Children[0].Focus();
 | 
										LayoutsStackPanel.Children[0].Focus();
 | 
				
			||||||
				}));
 | 
									}));
 | 
				
			||||||
			};
 | 
								};
 | 
				
			||||||
			Button.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() => Popup.IsOpen = Popup.IsMouseOver));
 | 
								var lastOpenedBySpacePress = DateTime.MinValue;
 | 
				
			||||||
 | 
								Button.PreviewKeyDown += (o, args) =>
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									if (args.Key == System.Windows.Input.Key.Space)                 // for some reason, the popup immediately closes again if opened by a Space Bar key event - as a mitigation, we record the space bar event and leave the popup open for at least 3 seconds
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										lastOpenedBySpacePress = DateTime.Now;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								};
 | 
				
			||||||
 | 
								Button.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() =>
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									if (Popup.IsOpen && (DateTime.Now - lastOpenedBySpacePress).TotalSeconds < 3)
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										return;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									Popup.IsOpen = Popup.IsMouseOver;
 | 
				
			||||||
 | 
								}));
 | 
				
			||||||
			Popup.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() => Popup.IsOpen = IsMouseOver));
 | 
								Popup.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() => Popup.IsOpen = IsMouseOver));
 | 
				
			||||||
			Popup.Opened += (o, args) => Grid.Background = Brushes.Gray;
 | 
								Popup.Opened += (o, args) => Grid.Background = Brushes.Gray;
 | 
				
			||||||
			Popup.Closed += (o, args) => Grid.Background = originalBrush;
 | 
								Popup.Closed += (o, args) => Grid.Background = originalBrush;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -45,7 +45,22 @@ namespace SafeExamBrowser.UserInterface.Mobile.Controls.ActionCenter
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			adapter.Changed += () => Dispatcher.InvokeAsync(Update);
 | 
								adapter.Changed += () => Dispatcher.InvokeAsync(Update);
 | 
				
			||||||
			Button.Click += (o, args) => Popup.IsOpen = !Popup.IsOpen;
 | 
								Button.Click += (o, args) => Popup.IsOpen = !Popup.IsOpen;
 | 
				
			||||||
			Button.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() => Popup.IsOpen = Popup.IsMouseOver));
 | 
								var lastOpenedBySpacePress = DateTime.MinValue;
 | 
				
			||||||
 | 
								Button.PreviewKeyDown += (o, args) =>
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									if (args.Key == System.Windows.Input.Key.Space)                 // for some reason, the popup immediately closes again if opened by a Space Bar key event - as a mitigation, we record the space bar event and leave the popup open for at least 3 seconds
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										lastOpenedBySpacePress = DateTime.Now;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								};
 | 
				
			||||||
 | 
								Button.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() =>
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									if (Popup.IsOpen && (DateTime.Now - lastOpenedBySpacePress).TotalSeconds < 3)
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										return;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									Popup.IsOpen = Popup.IsMouseOver;
 | 
				
			||||||
 | 
								}));
 | 
				
			||||||
			Popup.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() => Popup.IsOpen = IsMouseOver));
 | 
								Popup.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() => Popup.IsOpen = IsMouseOver));
 | 
				
			||||||
			Popup.Opened += (o, args) => Grid.Background = Brushes.Gray;
 | 
								Popup.Opened += (o, args) => Grid.Background = Brushes.Gray;
 | 
				
			||||||
			Popup.Closed += (o, args) => Grid.Background = originalBrush;
 | 
								Popup.Closed += (o, args) => Grid.Background = originalBrush;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -55,7 +55,22 @@ namespace SafeExamBrowser.UserInterface.Mobile.Controls.ActionCenter
 | 
				
			||||||
			RaisedIcon = new XamlIconResource { Uri = new Uri("pack://application:,,,/SafeExamBrowser.UserInterface.Desktop;component/Images/Hand_Raised.xaml") };
 | 
								RaisedIcon = new XamlIconResource { Uri = new Uri("pack://application:,,,/SafeExamBrowser.UserInterface.Desktop;component/Images/Hand_Raised.xaml") };
 | 
				
			||||||
			Icon.Content = IconResourceLoader.Load(LoweredIcon);
 | 
								Icon.Content = IconResourceLoader.Load(LoweredIcon);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			NotificationButton.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() => Popup.IsOpen = Popup.IsMouseOver));
 | 
								var lastOpenedBySpacePress = DateTime.MinValue;
 | 
				
			||||||
 | 
								NotificationButton.PreviewKeyDown += (o, args) =>
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									if (args.Key == System.Windows.Input.Key.Space)                 // for some reason, the popup immediately closes again if opened by a Space Bar key event - as a mitigation, we record the space bar event and leave the popup open for at least 3 seconds
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										lastOpenedBySpacePress = DateTime.Now;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								};
 | 
				
			||||||
 | 
								NotificationButton.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() =>
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									if (Popup.IsOpen && (DateTime.Now - lastOpenedBySpacePress).TotalSeconds < 3)
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										return;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									Popup.IsOpen = Popup.IsMouseOver;
 | 
				
			||||||
 | 
								}));
 | 
				
			||||||
			NotificationButton.PreviewMouseLeftButtonUp += NotificationButton_PreviewMouseLeftButtonUp;
 | 
								NotificationButton.PreviewMouseLeftButtonUp += NotificationButton_PreviewMouseLeftButtonUp;
 | 
				
			||||||
			NotificationButton.PreviewMouseRightButtonUp += NotificationButton_PreviewMouseRightButtonUp;
 | 
								NotificationButton.PreviewMouseRightButtonUp += NotificationButton_PreviewMouseRightButtonUp;
 | 
				
			||||||
			NotificationButton.ToolTip = text.Get(TextKey.Notification_ProctoringHandLowered);
 | 
								NotificationButton.ToolTip = text.Get(TextKey.Notification_ProctoringHandLowered);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -48,7 +48,22 @@ namespace SafeExamBrowser.UserInterface.Mobile.Controls.Taskbar
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			audio.VolumeChanged += Audio_VolumeChanged;
 | 
								audio.VolumeChanged += Audio_VolumeChanged;
 | 
				
			||||||
			Button.Click += (o, args) => Popup.IsOpen = !Popup.IsOpen;
 | 
								Button.Click += (o, args) => Popup.IsOpen = !Popup.IsOpen;
 | 
				
			||||||
			Button.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() => Popup.IsOpen = Popup.IsMouseOver));
 | 
								var lastOpenedBySpacePress = DateTime.MinValue;
 | 
				
			||||||
 | 
								Button.PreviewKeyDown += (o, args) =>
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									if (args.Key == System.Windows.Input.Key.Space)                 // for some reason, the popup immediately closes again if opened by a Space Bar key event - as a mitigation, we record the space bar event and leave the popup open for at least 3 seconds
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										lastOpenedBySpacePress = DateTime.Now;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								};
 | 
				
			||||||
 | 
								Button.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() =>
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									if (Popup.IsOpen && (DateTime.Now - lastOpenedBySpacePress).TotalSeconds < 3)
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										return;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									Popup.IsOpen = Popup.IsMouseOver;
 | 
				
			||||||
 | 
								}));
 | 
				
			||||||
			MuteButton.Click += MuteButton_Click;
 | 
								MuteButton.Click += MuteButton_Click;
 | 
				
			||||||
			MutedIcon = new XamlIconResource { Uri = new Uri("pack://application:,,,/SafeExamBrowser.UserInterface.Mobile;component/Images/Audio_Muted.xaml") };
 | 
								MutedIcon = new XamlIconResource { Uri = new Uri("pack://application:,,,/SafeExamBrowser.UserInterface.Mobile;component/Images/Audio_Muted.xaml") };
 | 
				
			||||||
			NoDeviceIcon = new XamlIconResource { Uri = new Uri("pack://application:,,,/SafeExamBrowser.UserInterface.Mobile;component/Images/Audio_NoDevice.xaml") };
 | 
								NoDeviceIcon = new XamlIconResource { Uri = new Uri("pack://application:,,,/SafeExamBrowser.UserInterface.Mobile;component/Images/Audio_NoDevice.xaml") };
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -54,7 +54,22 @@ namespace SafeExamBrowser.UserInterface.Mobile.Controls.Taskbar
 | 
				
			||||||
					((LayoutsStackPanel.Children[0] as ContentControl).Content as UIElement).Focus();
 | 
										((LayoutsStackPanel.Children[0] as ContentControl).Content as UIElement).Focus();
 | 
				
			||||||
				})));
 | 
									})));
 | 
				
			||||||
			};
 | 
								};
 | 
				
			||||||
			Button.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() => Popup.IsOpen = Popup.IsMouseOver));
 | 
								var lastOpenedBySpacePress = DateTime.MinValue;
 | 
				
			||||||
 | 
								Button.PreviewKeyDown += (o, args) =>
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									if (args.Key == System.Windows.Input.Key.Space)                 // for some reason, the popup immediately closes again if opened by a Space Bar key event - as a mitigation, we record the space bar event and leave the popup open for at least 3 seconds
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										lastOpenedBySpacePress = DateTime.Now;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								};
 | 
				
			||||||
 | 
								Button.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() =>
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									if (Popup.IsOpen && (DateTime.Now - lastOpenedBySpacePress).TotalSeconds < 3)
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										return;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									Popup.IsOpen = Popup.IsMouseOver;
 | 
				
			||||||
 | 
								}));
 | 
				
			||||||
			Popup.CustomPopupPlacementCallback = new CustomPopupPlacementCallback(Popup_PlacementCallback);
 | 
								Popup.CustomPopupPlacementCallback = new CustomPopupPlacementCallback(Popup_PlacementCallback);
 | 
				
			||||||
			Popup.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() => Popup.IsOpen = IsMouseOver));
 | 
								Popup.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() => Popup.IsOpen = IsMouseOver));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -46,7 +46,22 @@ namespace SafeExamBrowser.UserInterface.Mobile.Controls.Taskbar
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			adapter.Changed += () => Dispatcher.InvokeAsync(Update);
 | 
								adapter.Changed += () => Dispatcher.InvokeAsync(Update);
 | 
				
			||||||
			Button.Click += (o, args) => Popup.IsOpen = !Popup.IsOpen;
 | 
								Button.Click += (o, args) => Popup.IsOpen = !Popup.IsOpen;
 | 
				
			||||||
			Button.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() => Popup.IsOpen = Popup.IsMouseOver));
 | 
								var lastOpenedBySpacePress = DateTime.MinValue;
 | 
				
			||||||
 | 
								Button.PreviewKeyDown += (o, args) =>
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									if (args.Key == System.Windows.Input.Key.Space)                 // for some reason, the popup immediately closes again if opened by a Space Bar key event - as a mitigation, we record the space bar event and leave the popup open for at least 3 seconds
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										lastOpenedBySpacePress = DateTime.Now;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								};
 | 
				
			||||||
 | 
								Button.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() =>
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									if (Popup.IsOpen && (DateTime.Now - lastOpenedBySpacePress).TotalSeconds < 3)
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										return;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									Popup.IsOpen = Popup.IsMouseOver;
 | 
				
			||||||
 | 
								}));
 | 
				
			||||||
			Popup.CustomPopupPlacementCallback = new CustomPopupPlacementCallback(Popup_PlacementCallback);
 | 
								Popup.CustomPopupPlacementCallback = new CustomPopupPlacementCallback(Popup_PlacementCallback);
 | 
				
			||||||
			Popup.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() => Popup.IsOpen = IsMouseOver));
 | 
								Popup.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() => Popup.IsOpen = IsMouseOver));
 | 
				
			||||||
			WirelessIcon.Child = GetWirelessIcon(0);
 | 
								WirelessIcon.Child = GetWirelessIcon(0);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -55,7 +55,22 @@ namespace SafeExamBrowser.UserInterface.Mobile.Controls.Taskbar
 | 
				
			||||||
			RaisedIcon = new XamlIconResource { Uri = new Uri("pack://application:,,,/SafeExamBrowser.UserInterface.Desktop;component/Images/Hand_Raised.xaml") };
 | 
								RaisedIcon = new XamlIconResource { Uri = new Uri("pack://application:,,,/SafeExamBrowser.UserInterface.Desktop;component/Images/Hand_Raised.xaml") };
 | 
				
			||||||
			Icon.Content = IconResourceLoader.Load(LoweredIcon);
 | 
								Icon.Content = IconResourceLoader.Load(LoweredIcon);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			NotificationButton.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() => Popup.IsOpen = Popup.IsMouseOver));
 | 
								var lastOpenedBySpacePress = DateTime.MinValue;
 | 
				
			||||||
 | 
								NotificationButton.PreviewKeyDown += (o, args) =>
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									if (args.Key == System.Windows.Input.Key.Space)                 // for some reason, the popup immediately closes again if opened by a Space Bar key event - as a mitigation, we record the space bar event and leave the popup open for at least 3 seconds
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										lastOpenedBySpacePress = DateTime.Now;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								};
 | 
				
			||||||
 | 
								NotificationButton.MouseLeave += (o, args) => Task.Delay(250).ContinueWith(_ => Dispatcher.Invoke(() =>
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									if (Popup.IsOpen && (DateTime.Now - lastOpenedBySpacePress).TotalSeconds < 3)
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										return;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									Popup.IsOpen = Popup.IsMouseOver;
 | 
				
			||||||
 | 
								}));
 | 
				
			||||||
			NotificationButton.PreviewMouseLeftButtonUp += NotificationButton_PreviewMouseLeftButtonUp;
 | 
								NotificationButton.PreviewMouseLeftButtonUp += NotificationButton_PreviewMouseLeftButtonUp;
 | 
				
			||||||
			NotificationButton.PreviewMouseRightButtonUp += NotificationButton_PreviewMouseRightButtonUp;
 | 
								NotificationButton.PreviewMouseRightButtonUp += NotificationButton_PreviewMouseRightButtonUp;
 | 
				
			||||||
			NotificationButton.ToolTip = text.Get(TextKey.Notification_ProctoringHandLowered);
 | 
								NotificationButton.ToolTip = text.Get(TextKey.Notification_ProctoringHandLowered);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue