@@ -246,9 +246,11 @@ static void WidgetEventTranslator(LCUI_Event e, LCUI_WidgetEventPack pack)
246
246
handler -> func (w , & pack -> event , pack -> data );
247
247
while (!pack -> event .cancel_bubble && w -> parent ) {
248
248
w = w -> parent ;
249
- pack -> widget = w ;
250
- /** 向父级部件冒泡传递事件 */
251
- EventTrigger_Trigger (w -> trigger , e -> type , pack );
249
+ if (w -> trigger ) {
250
+ pack -> widget = w ;
251
+ /** 向父级部件冒泡传递事件 */
252
+ EventTrigger_Trigger (w -> trigger , e -> type , pack );
253
+ }
252
254
}
253
255
}
254
256
@@ -434,6 +436,9 @@ int Widget_BindEventById(LCUI_Widget widget, int event_id,
434
436
handler -> func = func ;
435
437
handler -> data = data ;
436
438
handler -> destroy_data = destroy_data ;
439
+ if (!widget -> trigger ) {
440
+ widget -> trigger = EventTrigger ();
441
+ }
437
442
return EventTrigger_Bind (widget -> trigger , event_id ,
438
443
(LCUI_EventFunc )WidgetEventTranslator , handler ,
439
444
DestroyWidgetEventHandler );
@@ -507,9 +512,6 @@ static int Widget_TriggerEventEx(LCUI_Widget widget, LCUI_WidgetEventPack pack)
507
512
{
508
513
LCUI_WidgetEvent e = & pack -> event ;
509
514
510
- if (!widget -> trigger ) {
511
- return -1 ;
512
- }
513
515
pack -> widget = widget ;
514
516
switch (e -> type ) {
515
517
case LCUI_WEVENT_CLICK :
@@ -522,7 +524,8 @@ static int Widget_TriggerEventEx(LCUI_Widget widget, LCUI_WidgetEventPack pack)
522
524
break ;
523
525
}
524
526
default :
525
- if (0 < EventTrigger_Trigger (widget -> trigger , e -> type , pack )) {
527
+ if (widget -> trigger && 0 <
528
+ EventTrigger_Trigger (widget -> trigger , e -> type , pack )) {
526
529
return 0 ;
527
530
}
528
531
if (!widget -> parent || e -> cancel_bubble ) {
@@ -534,7 +537,8 @@ static int Widget_TriggerEventEx(LCUI_Widget widget, LCUI_WidgetEventPack pack)
534
537
if (!widget -> parent || e -> cancel_bubble ) {
535
538
return -1 ;
536
539
}
537
- while (widget -> computed_style .pointer_events == SV_NONE ) {
540
+ while (widget -> trigger &&
541
+ widget -> computed_style .pointer_events == SV_NONE ) {
538
542
LCUI_Widget w ;
539
543
LCUI_BOOL is_pointer_event = TRUE;
540
544
int pointer_x , pointer_y ;
@@ -587,6 +591,7 @@ LCUI_BOOL Widget_PostEvent(LCUI_Widget widget, LCUI_WidgetEvent ev, void *data,
587
591
LCUI_Event sys_ev ;
588
592
LCUI_TaskRec task ;
589
593
LCUI_WidgetEventPack pack ;
594
+
590
595
if (widget -> state == LCUI_WSTATE_DELETED ) {
591
596
return FALSE;
592
597
}
@@ -620,6 +625,7 @@ LCUI_BOOL Widget_PostEvent(LCUI_Widget widget, LCUI_WidgetEvent ev, void *data,
620
625
int Widget_TriggerEvent (LCUI_Widget widget , LCUI_WidgetEvent e , void * data )
621
626
{
622
627
LCUI_WidgetEventPackRec pack ;
628
+
623
629
if (!e -> target ) {
624
630
e -> target = widget ;
625
631
}
@@ -1203,6 +1209,7 @@ int Widget_PostSurfaceEvent(LCUI_Widget w, int event_type, LCUI_BOOL sync_props)
1203
1209
int * data ;
1204
1210
LCUI_WidgetEventRec e = { 0 };
1205
1211
LCUI_Widget root = LCUIWidget_GetRoot ();
1212
+
1206
1213
if (w -> parent != root && w != root ) {
1207
1214
return -1 ;
1208
1215
}
@@ -1221,13 +1228,16 @@ int Widget_PostSurfaceEvent(LCUI_Widget w, int event_type, LCUI_BOOL sync_props)
1221
1228
void Widget_DestroyEventTrigger (LCUI_Widget w )
1222
1229
{
1223
1230
LCUI_WidgetEventRec e = { LCUI_WEVENT_DESTROY , 0 };
1231
+
1224
1232
Widget_TriggerEvent (w , & e , NULL );
1225
1233
Widget_ReleaseMouseCapture (w );
1226
1234
Widget_ReleaseTouchCapture (w , -1 );
1227
1235
Widget_StopEventPropagation (w );
1228
1236
LCUIWidget_ClearEventTarget (w );
1229
- EventTrigger_Destroy (w -> trigger );
1230
- w -> trigger = NULL ;
1237
+ if (w -> trigger ) {
1238
+ EventTrigger_Destroy (w -> trigger );
1239
+ w -> trigger = NULL ;
1240
+ }
1231
1241
}
1232
1242
1233
1243
static void BindSysEvent (int e , LCUI_SysEventFunc func )
0 commit comments