private RootLayerTouchDataCallbackType rootLayerTouchDataCallback;
private WheelEventCallbackType wheelEventCallback;
private EventCallbackDelegateType1 stageKeyCallbackDelegate;
+ private InterceptKeyEventDelegateType stageInterceptKeyCallbackDelegate;
private EventCallbackDelegateType0 stageEventProcessingFinishedEventCallbackDelegate;
private EventHandler stageContextLostEventHandler;
private EventCallbackDelegateType0 stageContextLostEventCallbackDelegate;
private WindowTransitionEffectSignal transitionEffectSignal;
private KeyboardRepeatSettingsChangedEventCallbackType keyboardRepeatSettingsChangedEventCallback;
private KeyboardRepeatSettingsChangedSignal keyboardRepeatSettingsChangedSignal;
+ private KeyEventSignal interceptKeyEventSignal;
private AuxiliaryMessageEventCallbackType auxiliaryMessageEventCallback;
[UnmanagedFunctionPointer(CallingConvention.StdCall)]
private delegate void KeyboardRepeatSettingsChangedEventCallbackType();
[UnmanagedFunctionPointer(CallingConvention.StdCall)]
private delegate void AuxiliaryMessageEventCallbackType(IntPtr kData, IntPtr vData, IntPtr optionsArray);
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ private delegate bool InterceptKeyEventDelegateType(IntPtr arg1);
/// <summary>
/// FocusChanged event.
}
/// <summary>
+ /// Intercepts KeyEvents in the window before dispatching KeyEvents to the child.<br />
+ /// If it returns true(consumed), no KeyEvent is delivered to the child.
+ /// </summary>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public event ReturnTypeEventHandler<object, KeyEventArgs, bool> InterceptKeyEvent
+ {
+ add
+ {
+ if (stageInterceptKeyHandler == null)
+ {
+ stageInterceptKeyCallbackDelegate = OnStageInterceptKey;
+ interceptKeyEventSignal = InterceptKeyEventSignal();
+ interceptKeyEventSignal?.Connect(stageInterceptKeyCallbackDelegate);
+ }
+ stageInterceptKeyHandler += value;
+ }
+ remove
+ {
+ stageInterceptKeyHandler -= value;
+ if (stageInterceptKeyHandler == null && interceptKeyEventSignal?.Empty() == false)
+ {
+ interceptKeyEventSignal?.Disconnect(stageInterceptKeyCallbackDelegate);
+ if (interceptKeyEventSignal?.Empty() == true)
+ {
+ stageInterceptKeyCallbackDelegate = null;
+ }
+ }
+ }
+ }
+
+
+ /// <summary>
/// Emits the event when the window resized.
/// </summary>
/// <since_tizen> 3 </since_tizen>
private event EventHandler<TouchEventArgs> rootLayerTouchDataEventHandler;
private event EventHandler<WheelEventArgs> stageWheelHandler;
private event EventHandler<KeyEventArgs> stageKeyHandler;
+ private ReturnTypeEventHandler<object, KeyEventArgs, bool> stageInterceptKeyHandler;
private event EventHandler stageEventProcessingFinishedEventHandler;
private event EventHandler<ResizedEventArgs> windowResizeEventHandler;
private event EventHandler<FocusChangedEventArgs> windowFocusChangedEventHandler2;
return ret;
}
+ internal KeyEventSignal InterceptKeyEventSignal()
+ {
+ KeyEventSignal ret = new KeyEventSignal(Interop.Window.InterceptKeyEventSignal(SwigCPtr), false);
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ return ret;
+ }
+
internal VoidSignal EventProcessingFinishedSignal()
{
VoidSignal ret = new VoidSignal(Interop.StageSignal.EventProcessingFinishedSignal(stageCPtr), false);
}
}
+ if (stageInterceptKeyCallbackDelegate != null)
+ {
+ interceptKeyEventSignal?.Disconnect(stageInterceptKeyCallbackDelegate);
+ stageInterceptKeyCallbackDelegate = null;
+ }
+
if (stageEventProcessingFinishedEventCallbackDelegate != null)
{
using VoidSignal eventProcessingFinishedSignal = EventProcessingFinishedSignal();
}
}
+ // Callback for Stage InterceptKeyEventsignal
+ private bool OnStageInterceptKey(IntPtr data)
+ {
+ bool consumed = false;
+ if (stageInterceptKeyHandler != null)
+ {
+ KeyEventArgs e = new KeyEventArgs();
+ e.Key = Tizen.NUI.Key.GetKeyFromPtr(data);
+ //here we send all data to user event handlers
+ consumed = stageInterceptKeyHandler(this, e);
+ }
+ return consumed;
+ }
+
// Callback for Stage EventProcessingFinishedSignal
private void OnEventProcessingFinished()
{