fix popups space bar problem
This commit is contained in:
		
							parent
							
								
									08fc19c6a0
								
							
						
					
					
						commit
						bdb1e82087
					
				
					 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
	
	 Jonas Sourlier
						Jonas Sourlier