static MetaWindow * get_window_for_event (MetaDisplay *display, const ClutterEvent *event) { switch (display->event_route) { case META_EVENT_ROUTE_NORMAL: { ClutterActor *source; /* Always use the key focused window for key events. */ if (IS_KEY_EVENT (event)) return stage_has_key_focus () ? display->focus_window : NULL; source = clutter_event_get_source (event); if (META_IS_SURFACE_ACTOR (source)) return meta_surface_actor_get_window (META_SURFACE_ACTOR (source)); else return NULL; } case META_EVENT_ROUTE_WINDOW_OP: case META_EVENT_ROUTE_COMPOSITOR_GRAB: case META_EVENT_ROUTE_WAYLAND_POPUP: case META_EVENT_ROUTE_FRAME_BUTTON: return display->grab_window; default: g_assert_not_reached (); } }
void UserMainProc(void) { NVTEVT evt; UINT32 paramNum; UINT32 paramArray[MAX_MESSAGE_PARAM_NUM]; CHAR buffer[8]={0}; debug_msg("event loop - begin!\r\n"); //jacky lan for ACC power on detetion********************* //memcpy((void *)buffer, (void *)BLINFO_ACCPOWERON_FLAG, 8); if (rtc_getPWROnSource()==RTC_PWRON_SRC_PWR_SW4) { gbACCPowerOn=TRUE; } else if(rtc_getPWROnSource()==RTC_PWRON_SRC_PWR_SW) { gbACCPowerOn=FALSE; } else { gbACCPowerOn=FALSE; } debug_msg("ACC FLAG :%d..\r\n",rtc_getPWROnSource()); //************************************************* #if (POWERON_TESTFLOW == ENABLE) //System_OnPowerPreInit(); System_InstallMode(); System_OnTimerInit(); System_OnOutputInit(); GxSystem_BootStart(); if(GxSystem_GetPowerOnSource() == GX_PWRON_SRC_PWR_VBUS) { GxUSB_Init(TRUE); } if(gIsUSBChargePreCheck) { UINT32 uiChargeCurrent = USB_CHARGE_CURRENT_2P5MA; System_OnUsbInit(); System_OnStrgInit_INMEM(); System_OnStrgInit_EXMEM(); Install_AppObj(); //must install before any event dispatch UI_UnlockEvent(); debug_msg("wait USB - begin\r\n"); do { UserWaitEvent(NVTEVT_USB_CHARGE_CURRENT, ¶mNum, paramArray); //(paramNum == 1 && paramArray[0] == 0) //power-on begin uiChargeCurrent = paramArray[0]; debug_msg("USB charging current(%d)\r\n",paramArray[0]); } while(uiChargeCurrent < USB_CHARGE_CURRENT_500MA); debug_msg("wait USB - end\r\n"); //SxCmd_DoCommand("dma eclk"); GxLED_SetCtrl(KEYSCAN_LED_FCS,TURNON_LED,TRUE); } //UserWaitEvent(NVTEVT_SYSTEM_BOOT, ¶mNum, paramArray); //(paramNum == 1 && paramArray[0] == 0) //power-on begin ////////////////////////////////////////////////////////////// // Direct boot flow //Init Device & Lib SysDbgUtCmd_Init(); //Init Once DbgUt System_OnVideoInit(); System_OnAudioInit(); if(!gIsUSBChargePreCheck) { System_OnStrgInit_INMEM(); System_OnStrgInit_EXMEM(); System_OnStrgInit_FWS(); System_OnStrgInit_PS(); System_OnStrgInit_FS(); System_OnUsbInit(); } System_OnLensInit(); System_OnSensorInit(); System_OnPowerInit(); System_OnInputInit(); ////////////////////////////////////////////////////////////// //Init object list for UIControl event process if(!gIsUSBChargePreCheck) Install_AppObj(); //must install before any event dispatch //UserWaitEvent(NVTEVT_SYSTEM_BOOT, ¶mNum, paramArray); //(paramNum == 1 && paramArray[0] == 0) //power-on begin Ux_SendEvent(0, NVTEVT_SYSTEM_BOOT, 1, 1); #else System_OnStrgInit_INMEM(); System_OnStrgInit_FWS(); System_OnStrg_DownloadFW(UserSection_Order_full, UserSection_LoadCb); System_OnPowerPreInit(); System_InstallMode(); System_OnTimerInit(); System_OnOutputInit(); GxSystem_BootStart(); //UserWaitEvent(NVTEVT_SYSTEM_BOOT, ¶mNum, paramArray); //(paramNum == 1 && paramArray[0] == 0) //power-on begin ////////////////////////////////////////////////////////////// // Direct boot flow //Init Device & Lib //#NT#2013/2/20#Philex Lin - begin // for pressing longer to power up system #if (UI_STYLE==UI_STYLE_DRIVER) #if (LONG_STARTUP == ENABLE) SysInit_ResetShutDownTimer(); while (guiResetSDTimerCount < RESET_SHUTDOWN_TIMER_COUNT) ; System_OnVideoInit(); #else System_OnVideoInit(); #endif #else System_OnVideoInit(); #endif //#NT#2013/2/20#Philex Lin - end System_OnAudioInit(); System_OnStrgInit_EXMEM(); System_OnStrgInit_PS(); System_OnStrgInit_FS(); System_OnUsbInit(); #if (UI_STYLE==UI_STYLE_DRIVER) usb_setConfig(USB_CONFIG_ID_STANDARD_CHARGER, FALSE); #endif #if 1//(LENS_FUNCTION == ENABLE) System_OnLensInit(); #endif System_OnSensorInit(); System_OnPowerInit(); System_OnInputInit(); ////////////////////////////////////////////////////////////// //Init object list for UIControl event process Install_AppObj(); //must install before any event dispatch #if (UI_STYLE==UI_STYLE_DRIVER) aud_setTotalVolLevel(AUDIO_VOL_LEVEL8); #if (UPDATE_CFG == UPDATE_CFG_YES) // Do UI_LoadCfgFile() function UI_LoadCfgFile(); #endif #endif DscMovie_SetFDB_ROFolder("RO"); //UserWaitEvent(NVTEVT_SYSTEM_BOOT, ¶mNum, paramArray); //(paramNum == 1 && paramArray[0] == 0) //power-on begin Ux_SendEvent(0, NVTEVT_SYSTEM_BOOT, 1, 1); #endif while(!bUI_Quit) { Ux_WaitEvent(&evt, ¶mNum, paramArray); if(evt) { INT32 result = NVTEVT_PASS; DBG_IND("^YMSG: get event %08x!\r\n", evt); if(IS_KEY_EVENT(evt)) result = System_UserKeyFilter(evt, paramNum, paramArray); #if (TOUCH_FUNCTION == ENABLE) if(result != NVTEVT_CONSUME) { if(IS_TOUCH_EVENT(evt)) result = System_UserTouchFilter(evt, paramNum, paramArray); } #endif if(result != NVTEVT_CONSUME) { if(IS_APP_EVENT(evt)) result = Ux_AppDispatchMessage(evt, paramNum, paramArray); } if(result != NVTEVT_CONSUME) result = Ux_WndDispatchMessage(evt, paramNum, paramArray); Ux_Redraw(); #if 0 //background task wait done flag,need to remove // A special case. // UI background is busy until finishing the event handler of BACKGROUND_DONE if (evt == NVTEVT_BACKGROUND_DONE) { BKG_Done(); } #endif //return result; } } ////////////////////////////////////////////////////////////// //System_PowerOff(SYS_POWEROFF_NORMAL); //Exit Lib & Device System_OnVideoExit(); System_OnAudioExit(); System_OnStrgExit_FS(); System_OnStrgExit_PS(); System_OnStrgExit_FWS(); System_OnStrgExit_EXMEM(); System_OnStrgExit_INMEM(); System_OnUsbExit(); System_OnLensExit(); System_OnSensorExit(); System_OnPowerExit(); System_OnInputExit(); System_OnOutputExit(); System_OnTimerExit(); ////////////////////////////////////////////////////////////// GxSystem_ShutDownEnd(); GxSystem_PowerOff(); debug_msg("event loop - end!\r\n"); }
static gboolean meta_display_handle_event (MetaDisplay *display, const ClutterEvent *event) { MetaWindow *window; gboolean bypass_clutter = FALSE; G_GNUC_UNUSED gboolean bypass_wayland = FALSE; MetaGestureTracker *tracker; ClutterEventSequence *sequence; ClutterInputDevice *source; sequence = clutter_event_get_event_sequence (event); /* Set the pointer emulating sequence on touch begin, if eligible */ if (event->type == CLUTTER_TOUCH_BEGIN) { if (sequence_is_pointer_emulated (display, event)) { /* This is the new pointer emulating sequence */ display->pointer_emulating_sequence = sequence; } else if (display->pointer_emulating_sequence == sequence) { /* This sequence was "pointer emulating" in a prior incarnation, * but now it isn't. We unset the pointer emulating sequence at * this point so the current sequence is not mistaken as pointer * emulating, while we've ensured that it's been deemed * "pointer emulating" throughout all of the event processing * of the previous incarnation. */ display->pointer_emulating_sequence = NULL; } } #ifdef HAVE_WAYLAND MetaWaylandCompositor *compositor = NULL; if (meta_is_wayland_compositor ()) { compositor = meta_wayland_compositor_get_default (); meta_wayland_compositor_update (compositor, event); } #endif if (!display->current_pad_osd && (event->type == CLUTTER_PAD_BUTTON_PRESS || event->type == CLUTTER_PAD_BUTTON_RELEASE)) { MetaBackend *backend = meta_get_backend (); if (meta_input_settings_handle_pad_button (meta_backend_get_input_settings (backend), clutter_event_get_source_device (event), event->type == CLUTTER_PAD_BUTTON_PRESS, event->pad_button.button)) { bypass_wayland = bypass_clutter = TRUE; goto out; } } source = clutter_event_get_source_device (event); if (source) { meta_backend_update_last_device (meta_get_backend (), clutter_input_device_get_device_id (source)); } #ifdef HAVE_WAYLAND if (meta_is_wayland_compositor () && event->type == CLUTTER_MOTION) { MetaWaylandCompositor *compositor; compositor = meta_wayland_compositor_get_default (); if (meta_wayland_tablet_manager_consumes_event (compositor->tablet_manager, event)) { meta_wayland_tablet_manager_update_cursor_position (compositor->tablet_manager, event); } else { MetaCursorTracker *tracker = meta_cursor_tracker_get_for_screen (NULL); meta_cursor_tracker_update_position (tracker, event->motion.x, event->motion.y); } display->monitor_cache_invalidated = TRUE; } #endif handle_idletime_for_event (event); window = get_window_for_event (display, event); display->current_time = event->any.time; if (window && !window->override_redirect && (event->type == CLUTTER_KEY_PRESS || event->type == CLUTTER_BUTTON_PRESS || event->type == CLUTTER_TOUCH_BEGIN)) { if (CurrentTime == display->current_time) { /* We can't use missing (i.e. invalid) timestamps to set user time, * nor do we want to use them to sanity check other timestamps. * See bug 313490 for more details. */ meta_warning ("Event has no timestamp! You may be using a broken " "program such as xse. Please ask the authors of that " "program to fix it.\n"); } else { meta_window_set_user_time (window, display->current_time); meta_display_sanity_check_timestamps (display, display->current_time); } } tracker = meta_display_get_gesture_tracker (display); if (meta_gesture_tracker_handle_event (tracker, event)) { bypass_wayland = bypass_clutter = TRUE; goto out; } if (display->event_route == META_EVENT_ROUTE_WINDOW_OP) { if (meta_window_handle_mouse_grab_op_event (window, event)) { bypass_clutter = TRUE; bypass_wayland = TRUE; goto out; } } /* For key events, it's important to enforce single-handling, or * we can get into a confused state. So if a keybinding is * handled (because it's one of our hot-keys, or because we are * in a keyboard-grabbed mode like moving a window, we don't * want to pass the key event to the compositor or Wayland at all. */ if (meta_keybindings_process_event (display, window, event)) { bypass_clutter = TRUE; bypass_wayland = TRUE; goto out; } /* Do not pass keyboard events to Wayland if key focus is not on the * stage in normal mode (e.g. during keynav in the panel) */ if (display->event_route == META_EVENT_ROUTE_NORMAL) { if (IS_KEY_EVENT (event) && !stage_has_key_focus ()) { bypass_wayland = TRUE; goto out; } } if (display->current_pad_osd) { bypass_wayland = TRUE; goto out; } if (window) { /* Events that are likely to trigger compositor gestures should * be known to clutter so they can propagate along the hierarchy. * Gesture-wise, there's two groups of events we should be getting * here: * - CLUTTER_TOUCH_* with a touch sequence that's not yet accepted * by the gesture tracker, these might trigger gesture actions * into recognition. Already accepted touch sequences are handled * directly by meta_gesture_tracker_handle_event(). * - CLUTTER_TOUCHPAD_* events over windows. These can likewise * trigger ::captured-event handlers along the way. */ bypass_clutter = !IS_GESTURE_EVENT (event); meta_window_handle_ungrabbed_event (window, event); /* This might start a grab op. If it does, then filter out the * event, and if it doesn't, replay the event to release our * own sync grab. */ if (display->event_route == META_EVENT_ROUTE_WINDOW_OP || display->event_route == META_EVENT_ROUTE_FRAME_BUTTON) { bypass_clutter = TRUE; bypass_wayland = TRUE; } else { /* Only replay button press events, since that's where we * have the synchronous grab. */ if (event->type == CLUTTER_BUTTON_PRESS) { MetaBackend *backend = meta_get_backend (); if (META_IS_BACKEND_X11 (backend)) { Display *xdisplay = meta_backend_x11_get_xdisplay (META_BACKEND_X11 (backend)); meta_verbose ("Allowing events time %u\n", (unsigned int)event->button.time); XIAllowEvents (xdisplay, clutter_event_get_device_id (event), XIReplayDevice, event->button.time); } } } goto out; } out: /* If the compositor has a grab, don't pass that through to Wayland */ if (display->event_route == META_EVENT_ROUTE_COMPOSITOR_GRAB) bypass_wayland = TRUE; /* If a Wayland client has a grab, don't pass that through to Clutter */ if (display->event_route == META_EVENT_ROUTE_WAYLAND_POPUP) bypass_clutter = TRUE; #ifdef HAVE_WAYLAND if (compositor && !bypass_wayland) { if (meta_wayland_compositor_handle_event (compositor, event)) bypass_clutter = TRUE; } #endif display->current_time = CurrentTime; return bypass_clutter; }
void UserMainProc(void) { NVTEVT evt; UINT32 paramNum; UINT32 paramArray[MAX_MESSAGE_PARAM_NUM]; debug_msg("event loop - begin!\r\n"); #if (POWERON_TESTFLOW == ENABLE) //System_OnPowerPreInit(); System_InstallMode(); System_OnTimerInit(); System_OnOutputInit(); GxSystem_BootStart(); if(GxSystem_GetPowerOnSource() == GX_PWRON_SRC_PWR_VBUS) { GxUSB_Init(TRUE); } if(gIsUSBChargePreCheck) { UINT32 uiChargeCurrent = USB_CHARGE_CURRENT_2P5MA; System_OnUsbInit(); System_OnStrgInit_INMEM(); System_OnStrgInit_EXMEM(); Install_AppObj(); //must install before any event dispatch UI_UnlockEvent(); debug_msg("wait USB - begin\r\n"); do { UserWaitEvent(NVTEVT_USB_CHARGE_CURRENT, ¶mNum, paramArray); //(paramNum == 1 && paramArray[0] == 0) //power-on begin uiChargeCurrent = paramArray[0]; debug_msg("USB charging current(%d)\r\n",paramArray[0]); } while(uiChargeCurrent < USB_CHARGE_CURRENT_500MA); debug_msg("wait USB - end\r\n"); //SxCmd_DoCommand("dma eclk"); GxLED_SetCtrl(KEYSCAN_LED_FCS,TURNON_LED,TRUE); } //UserWaitEvent(NVTEVT_SYSTEM_BOOT, ¶mNum, paramArray); //(paramNum == 1 && paramArray[0] == 0) //power-on begin ////////////////////////////////////////////////////////////// // Direct boot flow //Init Device & Lib SysDbgUtCmd_Init(); //Init Once DbgUt System_OnVideoInit(); System_OnAudioInit(); if(!gIsUSBChargePreCheck) { System_OnStrgInit_INMEM(); System_OnStrgInit_EXMEM(); System_OnStrgInit_FWS(); System_OnStrgInit_PS(); System_OnStrgInit_FS(); System_OnUsbInit(); } System_OnLensInit(); System_OnSensorInit(); System_OnPowerInit(); System_OnInputInit(); ////////////////////////////////////////////////////////////// //Init object list for UIControl event process if(!gIsUSBChargePreCheck) Install_AppObj(); //must install before any event dispatch //UserWaitEvent(NVTEVT_SYSTEM_BOOT, ¶mNum, paramArray); //(paramNum == 1 && paramArray[0] == 0) //power-on begin Ux_SendEvent(0, NVTEVT_SYSTEM_BOOT, 1, 1); #else System_OnStrgInit_INMEM(); System_OnStrgInit_FWS(); System_OnStrg_DownloadFW(UserSection_Order_full, UserSection_LoadCb); System_OnPowerPreInit(); System_InstallMode(); System_OnTimerInit(); System_OnOutputInit(); GxSystem_BootStart(); #if 1 //-------jacky lan -------------- System_OnStrgInit_PS(); Load_MenuInfo(); //-------jacky lan -------------- #endif //UserWaitEvent(NVTEVT_SYSTEM_BOOT, ¶mNum, paramArray); //(paramNum == 1 && paramArray[0] == 0) //power-on begin ////////////////////////////////////////////////////////////// // Direct boot flow //#NT#2014/11/26#KS Hung -begin GSensor_open(); //#NT#2014/11/26#KS Hung -end //Init Device & Lib //#NT#2013/2/20#Philex Lin - begin // for pressing longer to power up system #if (UI_STYLE==UI_STYLE_DRIVER) #if(LONG_STARTUP == ENABLE) usb_open(); debug_msg("usb_StateChange :%d--->power source :%d--->updateFW :%d\r\n",usb_StateChange(),GxSystem_GetPowerOnSource(),gBinInfo.ld.LdCtrl2 & LDCF_UPDATE_FW); #if((_MODEL_DSC_ == _MODEL_DUAL_BMWCABLE_)||(_MODEL_DSC_==_MODEL_DUAL_G2800_)||(_MODEL_DSC_ == _MODEL_DUAL_JIACHANGLING_)||(_MODEL_DSC_ == _MODEL_DUAL_QIZHENG_M1_)\ ||(_MODEL_DSC_ == _MODEL_DUAL_XWH_)||(_MODEL_DSC_ == _MODEL_DUAL_SAIBOSHI_)) if(((GxSystem_GetPowerOnSource() == USB_SOURCE_POWERON)&&(usb_StateChange()==TRUE))||(gBinInfo.ld.LdCtrl2 & LDCF_UPDATE_FW)||(GxSystem_GetPowerOnSource() == GSENSOR_TRIGGER_SOURCE_POWERON)\ ||((GxSystem_GetPowerOnSource() == ACC_SOURCE_POWERON)&&(usb_StateChange()==TRUE))) #elif(_MODEL_DSC_ == _MODEL_KERNAL_BOARD_880_) if(((GxSystem_GetPowerOnSource() == USB_SOURCE_POWERON)&&(usb_StateChange()==TRUE))||(gBinInfo.ld.LdCtrl2 & LDCF_UPDATE_FW)||(GxSystem_GetPowerOnSource() == GSENSOR_TRIGGER_SOURCE_POWERON)\ ||((GxSystem_GetPowerOnSource() == ACC_SOURCE_POWERON)&&(usb_StateChange()==TRUE))) #else if(((GxSystem_GetPowerOnSource() == USB_SOURCE_POWERON)&&(usb_StateChange()==TRUE))||(gBinInfo.ld.LdCtrl2 & LDCF_UPDATE_FW)||(GxSystem_GetPowerOnSource() == GSENSOR_TRIGGER_SOURCE_POWERON)) #endif { usb_close(); System_OnVideoInit(); } else { usb_close(); SysInit_ResetShutDownTimer(); while (guiResetSDTimerCount < RESET_SHUTDOWN_TIMER_COUNT) ; System_OnVideoInit(); } #else System_OnVideoInit(); #endif #else System_OnVideoInit(); #endif //#NT#2013/2/20#Philex Lin - end System_OnAudioInit(); System_OnStrgInit_EXMEM(); //System_OnStrgInit_PS();//jacky lan //#NT#2015/01/21#KS Hung -begin //#NT#Fast boot recording. #if ((_DUAL_CARD_FUNC_ == ENABLE)||(_FAST_BOOT_REC_FUNC_)) Load_MenuInfo(); #endif //#NT#2015/01/21#KS Hung -end #if ((_DUAL_CARD_FUNC_ == ENABLE) && (_CHIP_ == _CHIP_650_)) System_OnStrgExit_PS(); System_OnStrgExit_FWS(); #endif System_OnStrgInit_FS(); System_OnUsbInit(); #if (UI_STYLE==UI_STYLE_DRIVER) usb_setConfig(USB_CONFIG_ID_STANDARD_CHARGER, FALSE); #endif #if 1//(LENS_FUNCTION == ENABLE) System_OnLensInit(); #endif System_OnSensorInit(); System_OnPowerInit(); System_OnInputInit(); ////////////////////////////////////////////////////////////// //Init object list for UIControl event process Install_AppObj(); //must install before any event dispatch #if (UI_STYLE==UI_STYLE_DRIVER) aud_setTotalVolLevel(AUDIO_VOL_LEVEL8); #if (UPDATE_CFG == UPDATE_CFG_YES) // Do UI_LoadCfgFile() function UI_LoadCfgFile(); #endif #endif //UserWaitEvent(NVTEVT_SYSTEM_BOOT, ¶mNum, paramArray); //(paramNum == 1 && paramArray[0] == 0) //power-on begin Ux_SendEvent(0, NVTEVT_SYSTEM_BOOT, 1, 1); #endif while(!bUI_Quit) { Ux_WaitEvent(&evt, ¶mNum, paramArray); if(evt) { INT32 result = NVTEVT_PASS; DBG_IND("^YMSG: get event %08x!\r\n", evt); if(IS_KEY_EVENT(evt)) result = System_UserKeyFilter(evt, paramNum, paramArray); #if (TOUCH_FUNCTION == ENABLE) if(result != NVTEVT_CONSUME) { if(IS_TOUCH_EVENT(evt)) result = System_UserTouchFilter(evt, paramNum, paramArray); } #endif if(result != NVTEVT_CONSUME) { if(IS_APP_EVENT(evt)) result = Ux_AppDispatchMessage(evt, paramNum, paramArray); } //#NT#2015/01/21#KS Hung -begin //#NT#Fast boot recording. #if (_FAST_BOOT_REC_FUNC_) if (g_bUIWndDispatchMessage) #endif { if(result != NVTEVT_CONSUME) result = Ux_WndDispatchMessage(evt, paramNum, paramArray); Ux_Redraw(); } //#NT#2015/01/21#KS Hung -end #if 0 //background task wait done flag,need to remove // A special case. // UI background is busy until finishing the event handler of BACKGROUND_DONE if (evt == NVTEVT_BACKGROUND_DONE) { BKG_Done(); } #endif //return result; } } ////////////////////////////////////////////////////////////// //System_PowerOff(SYS_POWEROFF_NORMAL); //Exit Lib & Device System_OnVideoExit(); System_OnAudioExit(); System_OnStrgExit_FS(); System_OnStrgExit_PS(); System_OnStrgExit_FWS(); System_OnStrgExit_EXMEM(); System_OnStrgExit_INMEM(); System_OnUsbExit(); System_OnLensExit(); System_OnSensorExit(); System_OnPowerExit(); System_OnInputExit(); System_OnOutputExit(); System_OnTimerExit(); ////////////////////////////////////////////////////////////// GxSystem_ShutDownEnd(); GxSystem_PowerOff(); debug_msg("event loop - end!\r\n"); }