void EnableVisibilityEvent(WindowFrameEvent ev) { if (!VisibilityEventsEnabled()) { // TODO } }
void IBackend.EnableEvent(object eventId) { if (eventId is WindowFrameEvent) { var @event = (WindowFrameEvent)eventId; switch (@event) { case WindowFrameEvent.BoundsChanged: Window.DidResize += HandleDidResize; Window.DidMove += HandleDidResize; break; case WindowFrameEvent.Hidden: EnableVisibilityEvent(@event); Window.WillClose += OnWillClose; break; case WindowFrameEvent.Shown: EnableVisibilityEvent(@event); break; case WindowFrameEvent.CloseRequested: Window.WindowShouldClose = OnShouldClose; break; } eventsEnabled |= @event; } }
void DisableVisibilityEvent(WindowFrameEvent ev) { if (eventsEnabled.HasFlag(ev)) { eventsEnabled ^= ev; if (!VisibilityEventsEnabled()) { ContentView.RemoveObserver(this, HiddenProperty); } } }
void EnableVisibilityEvent(WindowFrameEvent ev) { if (!VisibilityEventsEnabled()) { ContentView.AddObserver(this, HiddenProperty, NSKeyValueObservingOptions.New, IntPtr.Zero); } if (!eventsEnabled.HasFlag(ev)) { eventsEnabled |= ev; } }
void IBackend.DisableEvent(object eventId) { if (eventId is WindowFrameEvent) { var @event = (WindowFrameEvent)eventId; eventsEnabled &= ~@event; switch (@event) { case WindowFrameEvent.Hidden: case WindowFrameEvent.Shown: if (!VisibilityEventsEnabled()) { ContentView.RemoveObserver(this, HiddenProperty); } break; } } }
void IBackend.EnableEvent(object eventId) { if (eventId is WindowFrameEvent) { var @event = (WindowFrameEvent)eventId; switch (@event) { case WindowFrameEvent.Hidden: case WindowFrameEvent.Shown: if (!VisibilityEventsEnabled()) { ContentView.AddObserver(this, HiddenProperty, NSKeyValueObservingOptions.New, IntPtr.Zero); } break; } eventsEnabled |= @event; } }
void IBackend.DisableEvent(object eventId) { if (eventId is WindowFrameEvent) { var @event = (WindowFrameEvent)eventId; eventsEnabled &= ~@event; switch (@event) { case WindowFrameEvent.BoundsChanged: NSNotificationCenter.DefaultCenter.RemoveObservers(new [] { didResizeObserver, didMoveObserver }); break; case WindowFrameEvent.Hidden: NSNotificationCenter.DefaultCenter.RemoveObserver(willCloseObserver); DisableVisibilityEvent(); break; case WindowFrameEvent.Shown: DisableVisibilityEvent(); break; } } }
void IBackend.DisableEvent(object eventId) { if (eventId is WindowFrameEvent) { var @event = (WindowFrameEvent)eventId; eventsEnabled &= ~@event; switch (@event) { case WindowFrameEvent.BoundsChanged: Window.DidResize -= HandleDidResize; Window.DidMove -= HandleDidResize; break; case WindowFrameEvent.Hidden: Window.WillClose -= OnWillClose; DisableVisibilityEvent(); break; case WindowFrameEvent.Shown: DisableVisibilityEvent(); break; } } }
void IBackend.EnableEvent(object eventId) { if (eventId is WindowFrameEvent) { var @event = (WindowFrameEvent)eventId; switch (@event) { case WindowFrameEvent.BoundsChanged: didResizeObserver = NSNotificationCenter.DefaultCenter.AddObserver(NSWindow.ResizedNotification, HandleDidResize, Window); didMoveObserver = NSNotificationCenter.DefaultCenter.AddObserver(NSWindow.MovedNotification, HandleDidResize, Window); break; case WindowFrameEvent.Hidden: EnableVisibilityEvent(@event); willCloseObserver = NSNotificationCenter.DefaultCenter.AddObserver(NSWindow.WillCloseNotification, OnWillClose, Window); break; case WindowFrameEvent.Shown: EnableVisibilityEvent(@event); break; case WindowFrameEvent.CloseRequested: // NOTE: this works only if the wrapped window has no delegate if (!hasExternalDelegate) // don't replace existing delegates { Window.WindowShouldClose = OnShouldClose; } else { return; // skip eventEnabled update to avoid touching WindowShouldClose when disabling events } break; } eventsEnabled |= @event; } }
void DisableVisibilityEvent (WindowFrameEvent ev) { if (eventsEnabled.HasFlag (ev)) { eventsEnabled ^= ev; if (!VisibilityEventsEnabled ()) { ContentView.RemoveObserver (this, HiddenProperty); } } }
void EnableVisibilityEvent (WindowFrameEvent ev) { if (!VisibilityEventsEnabled ()) { ContentView.AddObserver (this, HiddenProperty, NSKeyValueObservingOptions.New, IntPtr.Zero); } if (!eventsEnabled.HasFlag (ev)) { eventsEnabled |= ev; } }