Exemple #1
0
static void WidgetFocusProc( LCUI_Event *event, void *unused )
{
	LCUI_Widget *widget = NULL, *valid_widget = NULL, *focus_widget;
	/* 如果输入法需要处理这个键,则退出本函数 */
	if( LCUIIME_ProcessKey( &event->key ) ) {
		return;
	}
	//_DEBUG_MSG("key code: %d\n", event->key.key_code );
	/* 否则,将这个键盘消息发送给当前获得焦点的部件 */
	while( 1 ) {
		/* 获取当前容器中已获得焦点的部件 */
		focus_widget = Get_FocusWidget( widget );
		//_DEBUG_MSG("focus_widget: %p\n", focus_widget);
		//print_widget_info( focus_widget );
		if( !focus_widget ) {
			if( !valid_widget ) {
				break;
			}
			Widget_DispatchKeyboardEvent( valid_widget, &event->key );
			break;
		}
		/* 切换到子部件 */
		widget = focus_widget;
		/* 保存已关联按键事件的部件指针 */
		if( EventSlots_Find( &widget->event, EVENT_KEYBOARD ) ) {
			valid_widget = widget;
		}
	}
}
Exemple #2
0
static void 
WidgetFocusProc( LCUI_Key *key_data, void *arg )
{
	LCUI_Widget *widget, *tmp = NULL, *focus_widget;
	
	widget = NULL;
	//printf("key, code: %d, status:%d\n", 
	//	key_data->code, key_data->status);
	while( 1 ) {
		focus_widget = Get_FocusWidget( widget );
		if( !focus_widget ) {
			if( tmp ) {
				Handle_Widget_KeyboardEvent( tmp, *key_data );
			}
			break;
		}
		widget = focus_widget;
		/* 保存已关联按键事件的部件指针 */
		if( Find_Event( &widget->event, EVENT_KEYBOARD ) ) {
			tmp = widget;
		}
	}
}