Browse Source

Fixed keyboard focus for gtk

pull/698/head
Nikita Tsukanov 10 years ago
parent
commit
fa2c3ab4a8
  1. 31
      src/Gtk/Avalonia.Gtk/Embedding/GtkAvaloniaControlHost.cs

31
src/Gtk/Avalonia.Gtk/Embedding/GtkAvaloniaControlHost.cs

@ -6,8 +6,11 @@ using System.Threading.Tasks;
using Avalonia.Controls;
using Avalonia.Controls.Embedding;
using Avalonia.Diagnostics;
using Avalonia.Input;
using Avalonia.Interactivity;
using Avalonia.Layout;
using Avalonia.Platform;
using Avalonia.VisualTree;
using Gdk;
using Gtk;
@ -21,6 +24,34 @@ namespace Avalonia.Gtk.Embedding
{
_root = new EmbeddableControlRoot(new EmbeddableImpl(this));
_root.Prepare();
if (_root.IsFocused)
Unfocus();
_root.GotFocus += RootGotFocus;
CanFocus = true;
}
void Unfocus()
{
var focused = (IVisual)FocusManager.Instance.Current;
if (focused == null)
return;
while (focused.VisualParent != null)
focused = focused.VisualParent;
if (focused == _root)
KeyboardDevice.Instance.SetFocusedElement(null, NavigationMethod.Unspecified, InputModifiers.None);
}
protected override bool OnFocusOutEvent(EventFocus evnt)
{
Unfocus();
return false;
}
private void RootGotFocus(object sender, RoutedEventArgs e)
{
this.HasFocus = true;
GdkWindow.Focus(0);
}
private Control _content;

Loading…
Cancel
Save