internal void RegisterTopWindow (Gtk.Window win)
{
if (topLevelWindows.First != null && topLevelWindows.First.Value == win)
return;
// Ensure all events that were subscribed in StartWaitingForUserInteraction are unsubscribed
// before doing any change to the topLevelWindows list
EndWaitingForUserInteraction ();
var node = topLevelWindows.Find (win);
if (node != null) {
if (win.HasToplevelFocus) {
topLevelWindows.Remove (node);
topLevelWindows.AddFirst (node);
}
} else {
topLevelWindows.AddFirst (win);
win.KeyPressEvent += OnKeyPressed;
win.KeyReleaseEvent += OnKeyReleased;
win.ButtonPressEvent += HandleButtonPressEvent;
win.Destroyed += TopLevelDestroyed;
}
}