2 * Copyright(c) 2023 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
19 using System.ComponentModel;
20 using System.Runtime.InteropServices;
21 using Tizen.NUI.BaseComponents;
22 using System.Collections.Generic;
27 /// The window class is used internally for drawing.<br />
28 /// The window has an orientation and indicator properties.<br />
30 /// <since_tizen> 3 </since_tizen>
31 public partial class Window
33 private WindowFocusChangedEventCallbackType windowFocusChangedEventCallback;
34 private RootLayerTouchDataCallbackType rootLayerTouchDataCallback;
35 private RootLayerTouchDataCallbackType rootLayerInterceptTouchDataCallback;
36 private WheelEventCallbackType wheelEventCallback;
37 private WheelEventCallbackType interceptWheelCallback;
38 private EventCallbackDelegateType1 stageKeyCallbackDelegate;
39 private InterceptKeyEventDelegateType stageInterceptKeyCallbackDelegate;
40 private EventCallbackDelegateType0 stageEventProcessingFinishedEventCallbackDelegate;
41 private EventHandler stageContextLostEventHandler;
42 private EventCallbackDelegateType0 stageContextLostEventCallbackDelegate;
43 private EventHandler stageContextRegainedEventHandler;
44 private EventCallbackDelegateType0 stageContextRegainedEventCallbackDelegate;
45 private EventHandler stageSceneCreatedEventHandler;
46 private EventCallbackDelegateType0 stageSceneCreatedEventCallbackDelegate;
47 private WindowResizeEventCallbackType windowResizeEventCallback;
48 private WindowFocusChangedEventCallbackType windowFocusChangedEventCallback2;
49 private TransitionEffectEventCallbackType transitionEffectEventCallback;
50 private MovedEventCallbackType movedEventCallback;
51 private OrientationChangedEventCallbackType orientationChangedEventCallback;
52 private KeyboardRepeatSettingsChangedEventCallbackType keyboardRepeatSettingsChangedEventCallback;
53 private AuxiliaryMessageEventCallbackType auxiliaryMessageEventCallback;
54 private WindowMouseInOutEventCallbackType windowMouseInOutEventCallback;
55 private MoveCompletedEventCallbackType moveCompletedEventCallback;
56 private ResizeCompletedEventCallbackType resizeCompletedEventCallback;
57 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
58 private delegate void WindowFocusChangedEventCallbackType(IntPtr window, bool focusGained);
59 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
60 private delegate bool RootLayerTouchDataCallbackType(IntPtr view, IntPtr touchData);
61 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
62 private delegate bool WheelEventCallbackType(IntPtr view, IntPtr wheelEvent);
63 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
64 private delegate void WindowResizeEventCallbackType(IntPtr window, IntPtr windowSize);
65 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
66 private delegate void WindowFocusChangedEventCallbackType2(IntPtr window, bool focusGained);
67 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
68 private delegate void TransitionEffectEventCallbackType(IntPtr window, int state, int type);
69 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
70 private delegate void MovedEventCallbackType(IntPtr window, IntPtr position);
71 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
72 private delegate void OrientationChangedEventCallbackType(IntPtr window, int orientation);
73 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
74 private delegate void KeyboardRepeatSettingsChangedEventCallbackType();
75 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
76 private delegate void AuxiliaryMessageEventCallbackType(IntPtr kData, IntPtr vData, IntPtr optionsArray);
77 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
78 private delegate bool InterceptKeyEventDelegateType(IntPtr arg1);
79 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
80 private delegate void WindowMouseInOutEventCallbackType(IntPtr window, IntPtr mouseEvent);
81 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
82 private delegate void MoveCompletedEventCallbackType(IntPtr window, IntPtr position);
83 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
84 private delegate void ResizeCompletedEventCallbackType(IntPtr window, IntPtr size);
88 /// FocusChanged event.
90 /// <since_tizen> 3 </since_tizen>
91 public event EventHandler<FocusChangedEventArgs> FocusChanged
95 if (windowFocusChangedEventHandler == null)
97 windowFocusChangedEventCallback = OnWindowFocusedChanged;
98 using WindowFocusSignalType signal = new WindowFocusSignalType(Interop.Window.FocusChangedSignal(SwigCPtr), false);
99 signal.Ensure()?.Connect(windowFocusChangedEventCallback);
101 windowFocusChangedEventHandler += value;
105 windowFocusChangedEventHandler -= value;
106 if (windowFocusChangedEventHandler == null && windowFocusChangedEventCallback != null)
108 using WindowFocusSignalType signal = new WindowFocusSignalType(Interop.Window.FocusChangedSignal(SwigCPtr), false);
109 signal.Ensure()?.Disconnect(windowFocusChangedEventCallback);
110 windowFocusChangedEventCallback = null;
116 /// Emits the event when the screen is touched and when the touch ends.<br />
117 /// If there are multiple touch points then it is emitted when the first touch occurs and
118 /// when the last finger is lifted too.<br />
119 /// Even though incoming events are interrupted, the event occurs.<br />
121 /// <since_tizen> 3 </since_tizen>
122 public event EventHandler<TouchEventArgs> TouchEvent
126 if (rootLayerTouchDataEventHandler == null)
128 rootLayerTouchDataCallback = OnWindowTouch;
129 Interop.ActorSignal.TouchConnect(Layer.getCPtr(GetRootLayer()), rootLayerTouchDataCallback.ToHandleRef(this));
130 NDalicPINVOKE.ThrowExceptionIfExists();
132 rootLayerTouchDataEventHandler += value;
136 rootLayerTouchDataEventHandler -= value;
137 if (rootLayerTouchDataEventHandler == null && rootLayerTouchDataCallback != null)
139 Interop.ActorSignal.TouchDisconnect(Layer.getCPtr(GetRootLayer()), rootLayerTouchDataCallback.ToHandleRef(this));
140 NDalicPINVOKE.ThrowExceptionIfExists();
141 rootLayerTouchDataCallback = null;
147 /// An event for the touched signal which can be used to subscribe or unsubscribe the event handler provided by the user.<br />
148 /// The touched signal is emitted when the touch input is received.<br />
149 /// This can receive touch events before child. <br />
150 /// If it returns false, the child can receive the touch event. If it returns true, the touch event is intercepted. So child cannot receive touch event.<br />
152 [EditorBrowsable(EditorBrowsableState.Never)]
153 public event ReturnTypeEventHandler<object, TouchEventArgs, bool> InterceptTouchEvent
157 if (rootLayerInterceptTouchDataEventHandler == null)
159 rootLayerInterceptTouchDataCallback = OnWindowInterceptTouch;
160 Interop.ActorSignal.InterceptTouchConnect(Layer.getCPtr(GetRootLayer()), rootLayerInterceptTouchDataCallback.ToHandleRef(this));
161 NDalicPINVOKE.ThrowExceptionIfExists();
163 rootLayerInterceptTouchDataEventHandler += value;
167 rootLayerInterceptTouchDataEventHandler -= value;
168 if (rootLayerInterceptTouchDataEventHandler == null && rootLayerInterceptTouchDataCallback != null)
170 Interop.ActorSignal.InterceptTouchDisconnect(Layer.getCPtr(GetRootLayer()), rootLayerInterceptTouchDataCallback.ToHandleRef(this));
171 NDalicPINVOKE.ThrowExceptionIfExists();
172 rootLayerInterceptTouchDataCallback = null;
178 /// Emits the event when the wheel event is received.
180 /// <since_tizen> 3 </since_tizen>
181 public event EventHandler<WheelEventArgs> WheelEvent
185 if (stageWheelHandler == null)
187 wheelEventCallback = OnStageWheel;
188 Interop.ActorSignal.WheelEventConnect(Layer.getCPtr(GetRootLayer()), wheelEventCallback.ToHandleRef(this));
189 NDalicPINVOKE.ThrowExceptionIfExists();
191 stageWheelHandler += value;
193 if (DetentEventHandler == null)
195 DetentEventCallback = OnDetentEvent;
196 using StageWheelSignal signal = new StageWheelSignal(Interop.StageSignal.WheelEventSignal(stageCPtr), false);
197 signal.Ensure()?.Connect(DetentEventCallback);
199 DetentEventHandler += value;
203 stageWheelHandler -= value;
204 if (stageWheelHandler == null && wheelEventCallback != null)
206 Interop.ActorSignal.WheelEventDisconnect(Layer.getCPtr(GetRootLayer()), wheelEventCallback.ToHandleRef(this));
207 NDalicPINVOKE.ThrowExceptionIfExists();
208 wheelEventCallback = null;
211 DetentEventHandler -= value;
212 if (DetentEventHandler == null && DetentEventCallback != null)
214 using StageWheelSignal signal = new StageWheelSignal(Interop.StageSignal.WheelEventSignal(stageCPtr), false);
215 signal.Ensure()?.Disconnect(DetentEventCallback);
216 DetentEventCallback = null;
222 /// An event for the wheel event signal which can be used to subscribe or unsubscribe the event handler provided by the user.<br />
223 /// The wheel event signal is emitted when the wheel input is received.<br />
224 /// This can receive wheel events before child. <br />
225 /// If it returns false, the child can receive the wheel event. If it returns true, the wheel event is intercepted. So child cannot receive wheel event.<br />
227 [EditorBrowsable(EditorBrowsableState.Never)]
228 public event ReturnTypeEventHandler<object, WheelEventArgs, bool> InterceptWheelEvent
232 if (interceptWheelHandler == null)
234 interceptWheelCallback = OnWindowInterceptWheel;
235 Interop.ActorSignal.InterceptWheelConnect(Layer.getCPtr(GetRootLayer()), interceptWheelCallback.ToHandleRef(this));
236 NDalicPINVOKE.ThrowExceptionIfExists();
238 interceptWheelHandler += value;
242 interceptWheelHandler -= value;
243 if (interceptWheelHandler == null && interceptWheelCallback != null)
245 Interop.ActorSignal.InterceptWheelDisconnect(Layer.getCPtr(GetRootLayer()), interceptWheelCallback.ToHandleRef(this));
246 NDalicPINVOKE.ThrowExceptionIfExists();
247 interceptWheelCallback = null;
253 /// Emits the event when the key event is received.
255 /// <since_tizen> 3 </since_tizen>
256 public event EventHandler<KeyEventArgs> KeyEvent
260 if (stageKeyHandler == null)
262 stageKeyCallbackDelegate = OnStageKey;
263 using KeyEventSignal signal = new KeyEventSignal(Interop.Window.KeyEventSignal(SwigCPtr), false);
264 signal.Ensure()?.Connect(stageKeyCallbackDelegate);
266 stageKeyHandler += value;
270 stageKeyHandler -= value;
271 if (stageKeyHandler == null && stageKeyCallbackDelegate != null)
273 using KeyEventSignal signal = new KeyEventSignal(Interop.Window.KeyEventSignal(SwigCPtr), false);
274 signal.Ensure()?.Disconnect(stageKeyCallbackDelegate);
275 stageKeyCallbackDelegate = null;
281 /// Intercepts KeyEvents in the window before dispatching KeyEvents to the child.<br />
282 /// If it returns true(consumed), no KeyEvent is delivered to the child.
284 [EditorBrowsable(EditorBrowsableState.Never)]
285 public event ReturnTypeEventHandler<object, KeyEventArgs, bool> InterceptKeyEvent
289 if (stageInterceptKeyHandler == null)
291 stageInterceptKeyCallbackDelegate = OnStageInterceptKey;
292 using KeyEventSignal signal = new KeyEventSignal(Interop.Window.InterceptKeyEventSignal(SwigCPtr), false);
293 signal.Ensure()?.Connect(stageInterceptKeyCallbackDelegate);
295 stageInterceptKeyHandler += value;
299 stageInterceptKeyHandler -= value;
300 if (stageInterceptKeyHandler == null && stageInterceptKeyCallbackDelegate != null)
302 using KeyEventSignal signal = new KeyEventSignal(Interop.Window.InterceptKeyEventSignal(SwigCPtr), false);
303 signal.Ensure()?.Disconnect(stageInterceptKeyCallbackDelegate);
304 stageInterceptKeyCallbackDelegate = null;
310 /// Emits the event when window is resized by user or the display server.<br />
312 /// <since_tizen> 3 </since_tizen>
313 public event EventHandler<ResizedEventArgs> Resized
317 if (windowResizeEventHandler == null)
319 windowResizeEventCallback = OnResized;
320 using ResizeSignal signal = new ResizeSignal(Interop.Window.ResizeSignal(SwigCPtr), false);
321 signal.Ensure()?.Connect(windowResizeEventCallback);
324 windowResizeEventHandler += value;
328 windowResizeEventHandler -= value;
329 if (windowResizeEventHandler == null && windowResizeEventCallback != null)
331 using ResizeSignal signal = new ResizeSignal(Interop.Window.ResizeSignal(SwigCPtr), false);
332 signal.Ensure()?.Disconnect(windowResizeEventCallback);
333 windowResizeEventCallback = null;
339 /// Do not use this, that will be deprecated. Use 'FocusChanged' event instead.
341 /// <since_tizen> 3 </since_tizen>
342 /// Do not use this, that will be deprecated.
343 /// Instead Use FocusChanged.
344 [Obsolete("Do not use this, that will be deprecated. Use FocusChanged instead. " +
346 "NUIApplication.GetDefaultWindow().FocusChanged = OnFocusChanged; " +
347 "private void OnFocusChanged(object source, Window.FocusChangedEventArgs args) {...}")]
348 [EditorBrowsable(EditorBrowsableState.Never)]
349 public event EventHandler<FocusChangedEventArgs> WindowFocusChanged
353 if (windowFocusChangedEventHandler2 == null)
355 windowFocusChangedEventCallback2 = OnWindowFocusedChanged2;
356 using WindowFocusSignalType signal = new WindowFocusSignalType(Interop.Window.FocusChangedSignal(SwigCPtr), false);
357 signal.Ensure()?.Connect(windowFocusChangedEventCallback2);
359 windowFocusChangedEventHandler2 += value;
363 windowFocusChangedEventHandler2 -= value;
364 if (windowFocusChangedEventHandler2 == null && windowFocusChangedEventCallback2 != null)
366 using WindowFocusSignalType signal = new WindowFocusSignalType(Interop.Window.FocusChangedSignal(SwigCPtr), false);
367 signal.Ensure()?.Disconnect(windowFocusChangedEventCallback2);
368 windowFocusChangedEventCallback2 = null;
376 [EditorBrowsable(EditorBrowsableState.Never)]
377 public event EventHandler<TransitionEffectEventArgs> TransitionEffect
381 if (transitionEffectHandler == null)
383 transitionEffectEventCallback = OnTransitionEffect;
384 using WindowTransitionEffectSignal signal = new WindowTransitionEffectSignal(Interop.WindowTransitionEffectSignal.GetSignal(SwigCPtr), false);
385 signal.Ensure()?.Connect(transitionEffectEventCallback);
387 transitionEffectHandler += value;
391 transitionEffectHandler -= value;
392 if (transitionEffectHandler == null && transitionEffectEventCallback != null)
394 using WindowTransitionEffectSignal signal = new WindowTransitionEffectSignal(Interop.WindowTransitionEffectSignal.GetSignal(SwigCPtr), false);
395 signal.Ensure()?.Disconnect(transitionEffectEventCallback);
396 transitionEffectEventCallback = null;
402 /// Emits the event when window is moved by user or the display server.<br />
404 [EditorBrowsable(EditorBrowsableState.Never)]
405 public event EventHandler<WindowMovedEventArgs> Moved
409 if (movedHandler == null)
411 movedEventCallback = OnMoved;
412 using WindowMovedSignal signal = new WindowMovedSignal(Interop.WindowMovedSignal.GetSignal(SwigCPtr), false);
413 signal.Ensure()?.Connect(movedEventCallback);
415 movedHandler += value;
419 movedHandler -= value;
420 if (movedHandler == null && movedEventCallback != null)
422 using WindowMovedSignal signal = new WindowMovedSignal(Interop.WindowMovedSignal.GetSignal(SwigCPtr), false);
423 signal.Ensure()?.Disconnect(movedEventCallback);
424 movedEventCallback = null;
430 /// Window Orientation Changed event
431 /// This event is for per windows
433 [EditorBrowsable(EditorBrowsableState.Never)]
434 public event EventHandler<WindowOrientationChangedEventArgs> OrientationChanged
438 if (orientationChangedHandler == null)
440 orientationChangedEventCallback = OnOrientationChanged;
441 using WindowOrientationChangedSignal signal = new WindowOrientationChangedSignal(Interop.WindowOrientationChangedSignal.GetSignal(SwigCPtr), false);
442 signal.Ensure()?.Connect(orientationChangedEventCallback);
444 orientationChangedHandler += value;
448 orientationChangedHandler -= value;
449 if (orientationChangedHandler == null && orientationChangedEventCallback != null)
451 using WindowOrientationChangedSignal signal = new WindowOrientationChangedSignal(Interop.WindowOrientationChangedSignal.GetSignal(SwigCPtr), false);
452 signal.Ensure()?.Disconnect(orientationChangedEventCallback);
453 orientationChangedEventCallback = null;
459 /// Keyboard Repeat Settings Changed
461 [EditorBrowsable(EditorBrowsableState.Never)]
462 public event EventHandler KeyboardRepeatSettingsChanged
466 if (keyboardRepeatSettingsChangedHandler == null)
468 keyboardRepeatSettingsChangedEventCallback = OnKeyboardRepeatSettingsChanged;
469 using KeyboardRepeatSettingsChangedSignal signal = new KeyboardRepeatSettingsChangedSignal(Interop.KeyboardRepeatSettingsChangedSignal.GetSignal(SwigCPtr), false);
470 signal.Ensure()?.Connect(keyboardRepeatSettingsChangedEventCallback);
472 keyboardRepeatSettingsChangedHandler += value;
476 keyboardRepeatSettingsChangedHandler -= value;
477 if (keyboardRepeatSettingsChangedHandler == null && keyboardRepeatSettingsChangedEventCallback != null)
479 using KeyboardRepeatSettingsChangedSignal signal = new KeyboardRepeatSettingsChangedSignal(Interop.KeyboardRepeatSettingsChangedSignal.GetSignal(SwigCPtr), false);
480 signal.Ensure()?.Disconnect(keyboardRepeatSettingsChangedEventCallback);
481 keyboardRepeatSettingsChangedEventCallback = null;
487 /// MouseInOutEvent event.
489 [EditorBrowsable(EditorBrowsableState.Never)]
490 public event EventHandler<MouseInOutEventArgs> MouseInOutEvent
494 if (windowMouseInOutEventHandler == null)
496 windowMouseInOutEventCallback = OnWindowMouseInOutEvent;
497 using WindowMouseInOutEventSignal signal = new WindowMouseInOutEventSignal(Interop.WindowMouseInOutEventSignal.GetSignal(SwigCPtr), false);
498 signal.Ensure()?.Connect(windowMouseInOutEventCallback);
500 windowMouseInOutEventHandler += value;
504 windowMouseInOutEventHandler -= value;
505 if (windowMouseInOutEventHandler == null && windowMouseInOutEventCallback != null)
507 using WindowMouseInOutEventSignal signal = new WindowMouseInOutEventSignal(Interop.WindowMouseInOutEventSignal.GetSignal(SwigCPtr), false);
508 signal.Ensure()?.Disconnect(windowMouseInOutEventCallback);
509 windowMouseInOutEventCallback = null;
515 /// Emits the event when window has been moved by the display server.<br />
516 /// To make the window move by display server, RequestMoveToServer() should be called.<br />
517 /// After the moving job is completed, this signal will be emitted.<br />
519 [EditorBrowsable(EditorBrowsableState.Never)]
520 public event EventHandler<WindowMoveCompletedEventArgs> MoveCompleted
524 if (moveCompletedHandler == null)
526 moveCompletedEventCallback = OnMoveCompleted;
527 using WindowMoveCompletedSignal signal = new WindowMoveCompletedSignal(Interop.WindowMoveCompletedSignal.GetSignal(SwigCPtr), false);
528 signal.Ensure()?.Connect(moveCompletedEventCallback);
530 moveCompletedHandler += value;
534 moveCompletedHandler -= value;
535 if (moveCompletedHandler == null && moveCompletedEventCallback != null)
537 using WindowMoveCompletedSignal signal = new WindowMoveCompletedSignal(Interop.WindowMoveCompletedSignal.GetSignal(SwigCPtr), false);
538 signal.Ensure()?.Disconnect(moveCompletedEventCallback);
539 moveCompletedEventCallback = null;
545 /// Emits the event when window has been resized by the display server.<br />
546 /// To make the window resize by display server, RequestResizeToServer() should be called.<br />
547 /// After the resizing job is completed, this signal will be emitted.<br />
549 [EditorBrowsable(EditorBrowsableState.Never)]
550 public event EventHandler<WindowResizeCompletedEventArgs> ResizeCompleted
554 if (resizeCompletedHandler == null)
556 resizeCompletedEventCallback = OnResizeCompleted;
557 using WindowResizeCompletedSignal signal = new WindowResizeCompletedSignal(Interop.WindowResizeCompletedSignal.GetSignal(SwigCPtr), false);
558 signal.Ensure()?.Connect(resizeCompletedEventCallback);
560 resizeCompletedHandler += value;
564 resizeCompletedHandler -= value;
565 if (resizeCompletedHandler == null && resizeCompletedEventCallback != null)
567 using WindowResizeCompletedSignal signal = new WindowResizeCompletedSignal(Interop.WindowResizeCompletedSignal.GetSignal(SwigCPtr), false);
568 signal.Ensure()?.Disconnect(resizeCompletedEventCallback);
569 resizeCompletedEventCallback = null;
574 private event EventHandler<FocusChangedEventArgs> windowFocusChangedEventHandler;
575 private event EventHandler<TouchEventArgs> rootLayerTouchDataEventHandler;
576 private ReturnTypeEventHandler<object, TouchEventArgs, bool> rootLayerInterceptTouchDataEventHandler;
577 private event EventHandler<WheelEventArgs> stageWheelHandler;
578 private ReturnTypeEventHandler<object, WheelEventArgs, bool> interceptWheelHandler;
579 private event EventHandler<KeyEventArgs> stageKeyHandler;
580 private ReturnTypeEventHandler<object, KeyEventArgs, bool> stageInterceptKeyHandler;
581 private event EventHandler stageEventProcessingFinishedEventHandler;
582 private event EventHandler<ResizedEventArgs> windowResizeEventHandler;
583 private event EventHandler<FocusChangedEventArgs> windowFocusChangedEventHandler2;
584 private event EventHandler<TransitionEffectEventArgs> transitionEffectHandler;
585 private event EventHandler<WindowMovedEventArgs> movedHandler;
586 private event EventHandler<WindowOrientationChangedEventArgs> orientationChangedHandler;
587 private event EventHandler keyboardRepeatSettingsChangedHandler;
588 private event EventHandler<AuxiliaryMessageEventArgs> auxiliaryMessageEventHandler;
589 private event EventHandler<MouseInOutEventArgs> windowMouseInOutEventHandler;
590 private event EventHandler<WindowMoveCompletedEventArgs> moveCompletedHandler;
591 private event EventHandler<WindowResizeCompletedEventArgs> resizeCompletedHandler;
594 internal event EventHandler EventProcessingFinished
598 if (stageEventProcessingFinishedEventHandler == null)
600 stageEventProcessingFinishedEventCallbackDelegate = OnEventProcessingFinished;
601 using VoidSignal signal = new VoidSignal(Interop.StageSignal.EventProcessingFinishedSignal(stageCPtr), false);
602 signal.Ensure()?.Connect(stageEventProcessingFinishedEventCallbackDelegate);
604 stageEventProcessingFinishedEventHandler += value;
608 stageEventProcessingFinishedEventHandler -= value;
609 if (stageEventProcessingFinishedEventHandler == null && stageEventProcessingFinishedEventCallbackDelegate != null)
611 using VoidSignal signal = new VoidSignal(Interop.StageSignal.EventProcessingFinishedSignal(stageCPtr), false);
612 signal.Ensure()?.Disconnect(stageEventProcessingFinishedEventCallbackDelegate);
613 stageEventProcessingFinishedEventCallbackDelegate = null;
618 internal event EventHandler ContextLost
622 if (stageContextLostEventHandler == null)
624 stageContextLostEventCallbackDelegate = OnContextLost;
625 using VoidSignal signal = new VoidSignal(Interop.StageSignal.ContextLostSignal(stageCPtr), false);
626 signal.Ensure()?.Connect(stageContextLostEventCallbackDelegate);
628 stageContextLostEventHandler += value;
632 stageContextLostEventHandler -= value;
633 if (stageContextLostEventHandler == null && stageContextLostEventCallbackDelegate != null)
635 using VoidSignal signal = new VoidSignal(Interop.StageSignal.ContextLostSignal(stageCPtr), false);
636 signal.Ensure()?.Disconnect(stageContextLostEventCallbackDelegate);
637 stageContextLostEventCallbackDelegate = null;
642 internal event EventHandler ContextRegained
646 if (stageContextRegainedEventHandler == null)
648 stageContextRegainedEventCallbackDelegate = OnContextRegained;
649 using VoidSignal signal = new VoidSignal(Interop.StageSignal.ContextRegainedSignal(stageCPtr), false);
650 signal.Ensure()?.Connect(stageContextRegainedEventCallbackDelegate);
652 stageContextRegainedEventHandler += value;
656 stageContextRegainedEventHandler -= value;
657 if (stageContextRegainedEventHandler == null && stageContextRegainedEventCallbackDelegate != null)
659 using VoidSignal signal = new VoidSignal(Interop.StageSignal.ContextRegainedSignal(stageCPtr), false);
660 signal.Ensure()?.Disconnect(stageContextRegainedEventCallbackDelegate);
661 stageContextRegainedEventCallbackDelegate = null;
666 internal event EventHandler SceneCreated
670 if (stageSceneCreatedEventHandler == null)
672 stageSceneCreatedEventCallbackDelegate = OnSceneCreated;
673 using VoidSignal signal = new VoidSignal(Interop.StageSignal.SceneCreatedSignal(stageCPtr), false);
674 signal.Ensure()?.Connect(stageSceneCreatedEventCallbackDelegate);
676 stageSceneCreatedEventHandler += value;
680 stageSceneCreatedEventHandler -= value;
681 if (stageSceneCreatedEventHandler == null && stageSceneCreatedEventCallbackDelegate != null)
683 using VoidSignal signal = new VoidSignal(Interop.StageSignal.SceneCreatedSignal(stageCPtr), false);
684 signal.Ensure()?.Disconnect(stageSceneCreatedEventCallbackDelegate);
685 stageSceneCreatedEventCallbackDelegate = null;
690 internal System.IntPtr GetNativeWindowHandler()
692 System.IntPtr ret = Interop.Window.GetNativeWindowHandler(HandleRef.ToIntPtr(this.SwigCPtr));
693 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
698 /// Disconnect all native signals
700 /// <since_tizen> 5 </since_tizen>
701 internal void DisconnectNativeSignals()
703 if (HasBody() == false)
705 NUILog.Debug($"[Dispose] DisConnectFromSignals() No native body! No need to Disconnect Signals!");
709 if (windowFocusChangedEventCallback != null)
711 using WindowFocusSignalType signal = new WindowFocusSignalType(Interop.Window.FocusChangedSignal(GetBaseHandleCPtrHandleRef), false);
712 signal?.Disconnect(windowFocusChangedEventCallback);
713 windowFocusChangedEventCallback = null;
716 if (rootLayerTouchDataCallback != null)
718 Interop.ActorSignal.TouchDisconnect(Layer.getCPtr(GetRootLayer()), rootLayerTouchDataCallback.ToHandleRef(this));
719 NDalicPINVOKE.ThrowExceptionIfExists();
720 rootLayerTouchDataCallback = null;
723 if (rootLayerInterceptTouchDataCallback != null)
725 Interop.ActorSignal.InterceptTouchDisconnect(Layer.getCPtr(GetRootLayer()), rootLayerInterceptTouchDataCallback.ToHandleRef(this));
726 NDalicPINVOKE.ThrowExceptionIfExists();
727 rootLayerInterceptTouchDataCallback = null;
730 if (wheelEventCallback != null)
732 Interop.ActorSignal.WheelEventDisconnect(Layer.getCPtr(GetRootLayer()), wheelEventCallback.ToHandleRef(this));
733 NDalicPINVOKE.ThrowExceptionIfExists();
734 wheelEventCallback = null;
737 if (DetentEventCallback != null)
739 using StageWheelSignal signal = new StageWheelSignal(Interop.StageSignal.WheelEventSignal(stageCPtr), false);
740 signal?.Disconnect(DetentEventCallback);
741 DetentEventCallback = null;
744 if (interceptWheelCallback != null)
746 Interop.ActorSignal.InterceptWheelDisconnect(Layer.getCPtr(GetRootLayer()), interceptWheelCallback.ToHandleRef(this));
747 NDalicPINVOKE.ThrowExceptionIfExists();
748 interceptWheelCallback = null;
751 if (stageKeyCallbackDelegate != null)
753 using KeyEventSignal signal = new KeyEventSignal(Interop.Window.KeyEventSignal(GetBaseHandleCPtrHandleRef), false);
754 signal?.Disconnect(stageKeyCallbackDelegate);
755 stageKeyCallbackDelegate = null;
758 if (stageInterceptKeyCallbackDelegate != null)
760 using KeyEventSignal signal = new KeyEventSignal(Interop.Window.InterceptKeyEventSignal(GetBaseHandleCPtrHandleRef), false);
761 signal?.Disconnect(stageInterceptKeyCallbackDelegate);
762 stageInterceptKeyCallbackDelegate = null;
765 if (stageEventProcessingFinishedEventCallbackDelegate != null)
767 using VoidSignal signal = new VoidSignal(Interop.StageSignal.EventProcessingFinishedSignal(stageCPtr), false);
768 signal?.Disconnect(stageEventProcessingFinishedEventCallbackDelegate);
769 stageEventProcessingFinishedEventCallbackDelegate = null;
772 if (stageContextLostEventCallbackDelegate != null)
774 using VoidSignal signal = new VoidSignal(Interop.StageSignal.ContextLostSignal(stageCPtr), false);
775 signal?.Disconnect(stageContextLostEventCallbackDelegate);
776 stageContextLostEventCallbackDelegate = null;
779 if (stageContextRegainedEventCallbackDelegate != null)
781 using VoidSignal signal = new VoidSignal(Interop.StageSignal.ContextRegainedSignal(stageCPtr), false);
782 signal?.Disconnect(stageContextRegainedEventCallbackDelegate);
783 stageContextRegainedEventCallbackDelegate = null;
786 if (stageSceneCreatedEventCallbackDelegate != null)
788 using VoidSignal signal = new VoidSignal(Interop.StageSignal.SceneCreatedSignal(stageCPtr), false);
789 signal?.Disconnect(stageSceneCreatedEventCallbackDelegate);
790 stageSceneCreatedEventCallbackDelegate = null;
793 if (windowResizeEventCallback != null)
795 using ResizeSignal signal = new ResizeSignal(Interop.Window.ResizeSignal(GetBaseHandleCPtrHandleRef), false);
796 signal?.Disconnect(windowResizeEventCallback);
797 windowResizeEventCallback = null;
800 if (windowFocusChangedEventCallback2 != null)
802 using WindowFocusSignalType signal = new WindowFocusSignalType(Interop.Window.FocusChangedSignal(GetBaseHandleCPtrHandleRef), false);
803 signal?.Disconnect(windowFocusChangedEventCallback2);
804 windowFocusChangedEventCallback2 = null;
807 if (transitionEffectEventCallback != null)
809 using WindowTransitionEffectSignal signal = new WindowTransitionEffectSignal(Interop.WindowTransitionEffectSignal.GetSignal(GetBaseHandleCPtrHandleRef), false);
810 signal?.Disconnect(transitionEffectEventCallback);
811 transitionEffectEventCallback = null;
814 if (movedEventCallback != null)
816 using WindowMovedSignal signal = new WindowMovedSignal(Interop.WindowMovedSignal.GetSignal(GetBaseHandleCPtrHandleRef), false);
817 signal?.Disconnect(movedEventCallback);
818 movedEventCallback = null;
821 if (orientationChangedEventCallback != null)
823 using WindowOrientationChangedSignal signal = new WindowOrientationChangedSignal(Interop.WindowOrientationChangedSignal.GetSignal(GetBaseHandleCPtrHandleRef), false);
824 signal?.Disconnect(orientationChangedEventCallback);
825 orientationChangedEventCallback = null;
828 if (keyboardRepeatSettingsChangedEventCallback != null)
830 using KeyboardRepeatSettingsChangedSignal signal = new KeyboardRepeatSettingsChangedSignal(Interop.KeyboardRepeatSettingsChangedSignal.GetSignal(GetBaseHandleCPtrHandleRef), false);
831 signal?.Disconnect(keyboardRepeatSettingsChangedEventCallback);
832 keyboardRepeatSettingsChangedEventCallback = null;
835 if (auxiliaryMessageEventCallback != null)
837 using WindowAuxiliaryMessageSignal signal = new WindowAuxiliaryMessageSignal(Interop.WindowAuxiliaryMessageSignalType.Get(GetBaseHandleCPtrHandleRef), false);
838 signal?.Disconnect(auxiliaryMessageEventCallback);
839 auxiliaryMessageEventCallback = null;
842 if (AccessibilityHighlightEventCallback != null)
844 using WindowAccessibilityHighlightEvent signal = new WindowAccessibilityHighlightEvent(Interop.WindowAccessibilityHighlightSignal.GetSignal(GetBaseHandleCPtrHandleRef), false);
845 signal?.Disconnect(AccessibilityHighlightEventCallback);
846 AccessibilityHighlightEventCallback = null;
849 if (windowMouseInOutEventCallback != null)
851 using WindowMouseInOutEventSignal signal = new WindowMouseInOutEventSignal(Interop.WindowMouseInOutEventSignal.GetSignal(GetBaseHandleCPtrHandleRef), false);
852 signal?.Disconnect(windowMouseInOutEventCallback);
853 windowMouseInOutEventCallback = null;
856 if (moveCompletedEventCallback != null)
858 using WindowMoveCompletedSignal signal = new WindowMoveCompletedSignal(Interop.WindowMoveCompletedSignal.GetSignal(GetBaseHandleCPtrHandleRef), false);
859 signal?.Disconnect(moveCompletedEventCallback);
860 moveCompletedEventCallback = null;
863 if (resizeCompletedEventCallback != null)
865 using WindowResizeCompletedSignal signal = new WindowResizeCompletedSignal(Interop.WindowResizeCompletedSignal.GetSignal(GetBaseHandleCPtrHandleRef), false);
866 signal?.Disconnect(resizeCompletedEventCallback);
867 resizeCompletedEventCallback = null;
871 private void OnWindowFocusedChanged(IntPtr window, bool focusGained)
873 if (window == IntPtr.Zero)
875 NUILog.Error("OnWindowFocusedChanged() Window is null! Do nothing!");
879 if (windowFocusChangedEventHandler != null)
881 FocusChangedEventArgs e = new FocusChangedEventArgs();
882 e.FocusGained = focusGained;
883 windowFocusChangedEventHandler(this, e);
887 private bool OnWindowTouch(IntPtr view, IntPtr touchData)
889 if (touchData == global::System.IntPtr.Zero)
891 NUILog.Error("touchData should not be null!");
895 if (rootLayerTouchDataEventHandler != null)
897 TouchEventArgs e = new TouchEventArgs();
898 e.Touch = Tizen.NUI.Touch.GetTouchFromPtr(touchData);
899 rootLayerTouchDataEventHandler(this, e);
904 private bool OnWindowInterceptTouch(IntPtr view, IntPtr touchData)
906 if (touchData == global::System.IntPtr.Zero)
908 NUILog.Error("touchData should not be null!");
912 bool consumed = false;
913 if (rootLayerInterceptTouchDataEventHandler != null)
915 TouchEventArgs e = new TouchEventArgs();
916 e.Touch = Tizen.NUI.Touch.GetTouchFromPtr(touchData);
917 consumed = rootLayerInterceptTouchDataEventHandler(this, e);
922 private bool OnStageWheel(IntPtr rootLayer, IntPtr wheelEvent)
924 if (wheelEvent == global::System.IntPtr.Zero)
926 NUILog.Error("wheelEvent should not be null!");
930 if (stageWheelHandler != null)
932 WheelEventArgs e = new WheelEventArgs();
933 e.Wheel = Tizen.NUI.Wheel.GetWheelFromPtr(wheelEvent);
934 stageWheelHandler(this, e);
939 private bool OnWindowInterceptWheel(IntPtr view, IntPtr wheelEvent)
941 if (wheelEvent == global::System.IntPtr.Zero)
943 NUILog.Error("wheelEvent should not be null!");
947 bool consumed = false;
948 if (interceptWheelHandler != null)
950 WheelEventArgs e = new WheelEventArgs();
951 e.Wheel = Tizen.NUI.Wheel.GetWheelFromPtr(wheelEvent);
952 consumed = interceptWheelHandler(this, e);
957 // Callback for Stage KeyEventsignal
958 private void OnStageKey(IntPtr data)
960 if (stageKeyHandler != null)
962 KeyEventArgs e = new KeyEventArgs();
963 e.Key = Tizen.NUI.Key.GetKeyFromPtr(data);
964 //here we send all data to user event handlers
965 stageKeyHandler(this, e);
969 // Callback for Stage InterceptKeyEventsignal
970 private bool OnStageInterceptKey(IntPtr data)
972 bool consumed = false;
973 if (stageInterceptKeyHandler != null)
975 KeyEventArgs e = new KeyEventArgs();
976 e.Key = Tizen.NUI.Key.GetKeyFromPtr(data);
977 //here we send all data to user event handlers
978 consumed = stageInterceptKeyHandler(this, e);
983 // Callback for Stage EventProcessingFinishedSignal
984 private void OnEventProcessingFinished()
986 stageEventProcessingFinishedEventHandler?.Invoke(this, null);
989 // Callback for Stage ContextLostSignal
990 private void OnContextLost()
992 stageContextLostEventHandler?.Invoke(this, null);
995 // Callback for Stage ContextRegainedSignal
996 private void OnContextRegained()
998 stageContextRegainedEventHandler?.Invoke(this, null);
1001 // Callback for Stage SceneCreatedSignal
1002 private void OnSceneCreated()
1004 stageSceneCreatedEventHandler?.Invoke(this, null);
1007 private void OnResized(IntPtr window, IntPtr windowSize)
1009 if (window == IntPtr.Zero)
1011 NUILog.Error("OnResized() Window is null! Do nothing!");
1015 if (windowResizeEventHandler != null)
1017 ResizedEventArgs e = new ResizedEventArgs();
1018 // var val = new Uint16Pair(windowSize, false);
1019 // e.WindowSize = new Size2D(val.GetWidth(), val.GetHeight());
1022 // Workaround : windowSize should be valid pointer from dali,
1023 // but currently it is fixed and is not Uint16Pair class.
1024 // will be fixed later.
1025 e.WindowSize = this.WindowSize;
1026 windowResizeEventHandler(this, e);
1030 private void OnWindowFocusedChanged2(IntPtr window, bool focusGained)
1032 if (window == IntPtr.Zero)
1034 NUILog.Error("OnWindowFocusedChanged() Window is null! Do nothing!");
1038 if (windowFocusChangedEventHandler2 != null)
1040 FocusChangedEventArgs e = new FocusChangedEventArgs();
1041 e.FocusGained = focusGained;
1042 windowFocusChangedEventHandler2(this, e);
1046 private void OnTransitionEffect(IntPtr window, int state, int type)
1048 if (window == global::System.IntPtr.Zero)
1053 if (transitionEffectHandler != null)
1055 TransitionEffectEventArgs e = new TransitionEffectEventArgs();
1056 e.State = (EffectState)state;
1057 e.Type = (EffectType)type;
1058 transitionEffectHandler(this, e);
1063 private void OnMoved(IntPtr window, IntPtr position)
1065 if (window == global::System.IntPtr.Zero)
1070 if (movedHandler != null)
1072 WindowMovedEventArgs e = new WindowMovedEventArgs();
1073 e.WindowPosition = this.WindowPosition;
1074 movedHandler(this, e);
1079 private void OnOrientationChanged(IntPtr window, int orientation)
1081 if (window == global::System.IntPtr.Zero)
1086 if (orientationChangedHandler != null)
1088 WindowOrientationChangedEventArgs e = new WindowOrientationChangedEventArgs();
1089 e.WindowOrientation = (WindowOrientation)orientation;
1090 orientationChangedHandler(this, e);
1095 private void OnKeyboardRepeatSettingsChanged()
1097 keyboardRepeatSettingsChangedHandler?.Invoke(this, null);
1101 private void OnWindowMouseInOutEvent(IntPtr view, IntPtr mouseEvent)
1103 if (mouseEvent == global::System.IntPtr.Zero)
1105 NUILog.Error("mouseEvent should not be null!");
1109 if (windowMouseInOutEventHandler != null)
1111 MouseInOutEventArgs e = new MouseInOutEventArgs();
1112 e.MouseInOut = Tizen.NUI.MouseInOut.GetMouseInOutFromPtr(mouseEvent);
1113 windowMouseInOutEventHandler(this, e);
1117 private void OnMoveCompleted(IntPtr window, IntPtr position)
1119 if (window == global::System.IntPtr.Zero)
1124 if (moveCompletedHandler != null)
1126 WindowMoveCompletedEventArgs e = new WindowMoveCompletedEventArgs(this.WindowPosition);
1127 moveCompletedHandler(this, e);
1132 private void OnResizeCompleted(IntPtr window, IntPtr size)
1134 if (window == global::System.IntPtr.Zero)
1139 if (resizeCompletedHandler != null)
1141 WindowResizeCompletedEventArgs e = new WindowResizeCompletedEventArgs(this.WindowSize);
1142 resizeCompletedHandler(this, e);
1148 /// The focus changed event argument.
1150 /// <since_tizen> 3 </since_tizen>
1151 public class FocusChangedEventArgs : EventArgs
1154 /// FocusGained flag.
1156 /// <since_tizen> 3 </since_tizen>
1157 public bool FocusGained
1165 /// The touch event argument.
1167 /// <since_tizen> 3 </since_tizen>
1168 public class TouchEventArgs : EventArgs
1170 private Touch touch;
1175 /// <since_tizen> 3 </since_tizen>
1190 /// Wheel event arguments.
1192 /// <since_tizen> 3 </since_tizen>
1193 public class WheelEventArgs : EventArgs
1195 private Wheel wheel;
1200 /// <since_tizen> 3 </since_tizen>
1215 /// Key event arguments.
1217 /// <since_tizen> 3 </since_tizen>
1218 public class KeyEventArgs : EventArgs
1225 /// <since_tizen> 3 </since_tizen>
1240 /// Feeds a key event into the window.
1241 /// This resized event arguments.
1243 /// <since_tizen> 3 </since_tizen>
1244 public class ResizedEventArgs : EventArgs
1249 /// This window size.
1251 /// <since_tizen> 4 </since_tizen>
1252 public Size2D WindowSize
1266 /// MouseInOut evnet arguments.
1268 [EditorBrowsable(EditorBrowsableState.Never)]
1269 public class MouseInOutEventArgs : EventArgs
1271 private MouseInOut mouseEvent;
1274 /// MouseInOut event.
1276 [EditorBrowsable(EditorBrowsableState.Never)]
1277 public MouseInOut MouseInOut
1291 /// Do not use this, that will be deprecated.
1293 /// <since_tizen> 3 </since_tizen>
1294 [Obsolete("Do not use this, that will be deprecated. Use FocusChangedEventArgs instead. " +
1296 "NUIApplication.GetDefaultWindow().FocusChanged = OnFocusChanged; " +
1297 "private void OnFocusChanged(object source, Window.FocusChangedEventArgs args) {...}")]
1298 [EditorBrowsable(EditorBrowsableState.Never)]
1299 [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1034:NestedTypesShouldNotBeVisible")]
1300 public class WindowFocusChangedEventArgs : EventArgs
1303 /// Do not use this, that will be deprecated.
1305 /// <since_tizen> 3 </since_tizen>
1306 public bool FocusGained
1314 /// Contains and encapsulates Native Window handle.
1316 /// <since_tizen> 4 </since_tizen>
1317 [Obsolete("This has been deprecated in API9 and will be removed in API11. Use Window.NativeHandle instead.")]
1318 public class SafeNativeWindowHandle : SafeHandle
1321 ///Constructor, Native window handle is set to handle.
1323 /// <since_tizen> 4 </since_tizen>
1324 public SafeNativeWindowHandle() : base(IntPtr.Zero, false)
1326 SetHandle(NUIApplication.GetDefaultWindow().GetNativeWindowHandler());
1329 /// Null check if the handle is valid or not.
1331 /// <since_tizen> 4 </since_tizen>
1332 public override bool IsInvalid
1336 return this.handle == IntPtr.Zero;
1340 /// Release handle itself.
1342 /// <returns>true when released successfully.</returns>
1343 /// <since_tizen> 4 </since_tizen>
1344 protected override bool ReleaseHandle()
1351 /// TransitionEffectArgs
1353 [EditorBrowsable(EditorBrowsableState.Never)]
1354 public class TransitionEffectEventArgs : EventArgs
1356 private EffectState state;
1357 private EffectType type;
1362 [EditorBrowsable(EditorBrowsableState.Never)]
1363 public EffectState State
1377 [EditorBrowsable(EditorBrowsableState.Never)]
1378 public EffectType Type
1391 private EventHandler<WheelEventArgs> DetentEventHandler;
1393 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
1394 private delegate void DetentEventCallbackType(IntPtr arg1);
1396 private DetentEventCallbackType DetentEventCallback;
1398 private void OnDetentEvent(IntPtr wheelEvent)
1400 WheelEventArgs e = new WheelEventArgs();
1402 if (wheelEvent != global::System.IntPtr.Zero)
1404 e.Wheel = Wheel.GetWheelFromPtr(wheelEvent);
1407 DetentEventHandler?.Invoke(this, e);
1411 /// VisibilityChangedArgs
1413 [EditorBrowsable(EditorBrowsableState.Never)]
1414 public class VisibilityChangedEventArgs : EventArgs
1416 private bool visibility;
1420 [EditorBrowsable(EditorBrowsableState.Never)]
1421 public bool Visibility
1431 private void OnVisibilityChanged(IntPtr window, bool visibility)
1433 if (window == global::System.IntPtr.Zero)
1435 NUILog.Error("[ERR] OnVisibilityChanged() window is null");
1439 VisibilityChangedEventArgs e = new VisibilityChangedEventArgs();
1440 e.Visibility = visibility;
1441 if (VisibilityChangedEventHandler != null)
1443 VisibilityChangedEventHandler.Invoke(this, e);
1447 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
1448 private delegate void VisibilityChangedEventCallbackType(IntPtr window, bool visibility);
1449 private VisibilityChangedEventCallbackType VisibilityChangedEventCallback;
1450 private event EventHandler<VisibilityChangedEventArgs> VisibilityChangedEventHandler;
1451 private WindowVisibilityChangedEvent VisibilityChangedEventSignal;
1456 [EditorBrowsable(EditorBrowsableState.Never)]
1457 public event EventHandler<VisibilityChangedEventArgs> VisibilityChanged
1461 if (VisibilityChangedEventHandler == null)
1463 VisibilityChangedEventCallback = OnVisibilityChanged;
1464 using WindowVisibilityChangedEvent signal = new WindowVisibilityChangedEvent(Interop.WindowVisibilityChangedSignal.GetSignal(Window.getCPtr(this)), false);
1465 signal.Ensure()?.Connect(VisibilityChangedEventCallback);
1467 VisibilityChangedEventHandler += value;
1471 VisibilityChangedEventHandler -= value;
1472 if (VisibilityChangedEventHandler == null && VisibilityChangedEventCallback != null)
1474 using WindowVisibilityChangedEvent signal = new WindowVisibilityChangedEvent(Interop.WindowVisibilityChangedSignal.GetSignal(Window.getCPtr(this)), false);
1475 signal.Ensure()?.Disconnect(VisibilityChangedEventCallback);
1476 VisibilityChangedEventCallback = null;
1482 /// VisibiltyChangedSignalEmit
1484 [EditorBrowsable(EditorBrowsableState.Never)]
1485 public void VisibiltyChangedSignalEmit(bool visibility)
1487 if (VisibilityChangedEventSignal == null)
1489 VisibilityChangedEventSignal = new WindowVisibilityChangedEvent(this);
1491 VisibilityChangedEventSignal.Emit(this, visibility);
1494 private void OnAuxiliaryMessage(IntPtr kData, IntPtr vData, IntPtr optionsArray)
1496 if (kData == IntPtr.Zero || vData == IntPtr.Zero)
1501 using var tmp = new PropertyArray(optionsArray, false);
1502 var size = tmp.Size();
1504 List<string> tmpList = new List<string>();
1506 for (int i = 0; i < size; i++)
1508 string option = "none";
1509 tmp.GetElementAt((uint)i).Get(out option);
1510 tmpList.Add(option);
1515 AuxiliaryMessageEventArgs e = new AuxiliaryMessageEventArgs();
1516 e.Key = StringToVoidSignal.GetResult(kData);
1517 e.Value = StringToVoidSignal.GetResult(vData); ;
1518 e.Options = tmpList;
1520 auxiliaryMessageEventHandler?.Invoke(this, e);
1524 /// Auxiliary message is sent by displayer server when window's auxiliary was changed then display server sent the message.
1525 /// When client application added the window's auxiliary hint and if the auxiliary is changed,
1526 /// display server send the auxiliary message.
1527 /// Auxiliary message has the key, value and options.
1529 [EditorBrowsable(EditorBrowsableState.Never)]
1530 public event EventHandler<AuxiliaryMessageEventArgs> AuxiliaryMessage
1534 if (auxiliaryMessageEventHandler == null)
1536 auxiliaryMessageEventCallback = OnAuxiliaryMessage;
1537 using WindowAuxiliaryMessageSignal signal = new WindowAuxiliaryMessageSignal(Interop.WindowAuxiliaryMessageSignalType.Get(SwigCPtr), false);
1538 signal.Ensure()?.Connect(auxiliaryMessageEventCallback);
1540 auxiliaryMessageEventHandler += value;
1544 auxiliaryMessageEventHandler -= value;
1545 if (auxiliaryMessageEventHandler == null && auxiliaryMessageEventCallback != null)
1547 using WindowAuxiliaryMessageSignal signal = new WindowAuxiliaryMessageSignal(Interop.WindowAuxiliaryMessageSignalType.Get(SwigCPtr), false);
1548 signal.Ensure()?.Disconnect(auxiliaryMessageEventCallback);
1549 auxiliaryMessageEventCallback = null;
1555 /// AccessibilityHighlightArgs
1557 [EditorBrowsable(EditorBrowsableState.Never)]
1558 public class AccessibilityHighlightEventArgs : EventArgs
1560 private bool accessibilityHighlight;
1562 /// accessibilityHighlight
1564 [EditorBrowsable(EditorBrowsableState.Never)]
1565 public bool AccessibilityHighlight
1567 get => accessibilityHighlight;
1570 accessibilityHighlight = value;
1575 private void OnAccessibilityHighlight(IntPtr window, bool highlight)
1577 if (window == global::System.IntPtr.Zero)
1579 NUILog.Error("[ERR] OnAccessibilityHighlight() window is null");
1583 AccessibilityHighlightEventArgs e = new AccessibilityHighlightEventArgs();
1584 e.AccessibilityHighlight = highlight;
1585 if (AccessibilityHighlightEventHandler != null)
1587 AccessibilityHighlightEventHandler.Invoke(this, e);
1591 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
1592 private delegate void AccessibilityHighlightEventCallbackType(IntPtr window, bool highlight);
1593 private AccessibilityHighlightEventCallbackType AccessibilityHighlightEventCallback;
1594 private event EventHandler<AccessibilityHighlightEventArgs> AccessibilityHighlightEventHandler;
1597 /// Emits the event when the window needs to grab or clear highlight.
1599 [EditorBrowsable(EditorBrowsableState.Never)]
1600 public event EventHandler<AccessibilityHighlightEventArgs> AccessibilityHighlight
1604 if (AccessibilityHighlightEventHandler == null)
1606 AccessibilityHighlightEventCallback = OnAccessibilityHighlight;
1607 using WindowAccessibilityHighlightEvent signal = new WindowAccessibilityHighlightEvent(Interop.WindowAccessibilityHighlightSignal.GetSignal(SwigCPtr), false);
1608 signal.Ensure()?.Connect(AccessibilityHighlightEventCallback);
1610 AccessibilityHighlightEventHandler += value;
1614 AccessibilityHighlightEventHandler -= value;
1615 if (AccessibilityHighlightEventHandler == null && AccessibilityHighlightEventCallback != null)
1617 using WindowAccessibilityHighlightEvent signal = new WindowAccessibilityHighlightEvent(Interop.WindowAccessibilityHighlightSignal.GetSignal(SwigCPtr), false);
1618 signal.Ensure()?.Disconnect(AccessibilityHighlightEventCallback);
1619 AccessibilityHighlightEventCallback = null;
1626 /// Move event is sent when window is resized by user or the display server.
1628 [EditorBrowsable(EditorBrowsableState.Never)]
1629 public class WindowMovedEventArgs : EventArgs
1631 private Position2D position;
1633 [EditorBrowsable(EditorBrowsableState.Never)]
1634 public Position2D WindowPosition
1648 /// OrientationChangedArgs
1650 [EditorBrowsable(EditorBrowsableState.Never)]
1651 public class WindowOrientationChangedEventArgs : EventArgs
1653 private Window.WindowOrientation orientation;
1655 [EditorBrowsable(EditorBrowsableState.Never)]
1656 public Window.WindowOrientation WindowOrientation
1664 orientation = value;
1670 /// Move Completed event is sent when window has been moved the display server.
1671 /// It is triggered by calling RequestMoveToServer().
1673 [EditorBrowsable(EditorBrowsableState.Never)]
1674 public class WindowMoveCompletedEventArgs : EventArgs
1676 public WindowMoveCompletedEventArgs(Position2D completedPosition)
1678 WindowCompletedPosition = completedPosition;
1681 public Position2D WindowCompletedPosition
1689 /// Resize Completed event is sent when window has been resized the display server.
1690 /// It is triggered by calling RequestResizeToServer().
1692 [EditorBrowsable(EditorBrowsableState.Never)]
1693 public class WindowResizeCompletedEventArgs : EventArgs
1695 public WindowResizeCompletedEventArgs(Size2D completedSize)
1697 WindowCompletedSize = completedSize;
1700 public Size2D WindowCompletedSize