Beispiel #1
0
static Ret ftk_source_primary_dispatch(FtkSource* thiz)
{
	FtkEvent event = {0};
	DECL_PRIV(thiz, priv);
	int ret = ftk_pipe_read(priv->pipe, &event, sizeof(FtkEvent));
	return_val_if_fail(ret == sizeof(FtkEvent), RET_REMOVE);

	switch(event.type)
	{
		case FTK_EVT_NOP:
		{
			break;
		}
		case FTK_EVT_ADD_SOURCE:
		{
			ftk_sources_manager_add(ftk_default_sources_manager(), event.u.extra);
			break;
		}
		case FTK_EVT_REMOVE_SOURCE:
		{
			ftk_sources_manager_remove(ftk_default_sources_manager(), event.u.extra);
			break;
		}
		default:
		{
			if(priv->on_event != NULL)
			{
				priv->on_event(priv->user_data, &event);
			}
		}
	}

	return RET_OK;
}
FtkWndManager* ftk_wnd_manager_default_create(FtkMainLoop* main_loop)
{
	FtkWndManager* thiz = NULL;
	return_val_if_fail(main_loop != NULL, NULL);

	if((thiz = (FtkWndManager*)FTK_ZALLOC(sizeof(FtkWndManager) + sizeof(PrivInfo))) != NULL)
	{
		DECL_PRIV(thiz, priv);

		priv->main_loop = main_loop;
		priv->long_press_timer = ftk_source_timer_create(1500, (FtkTimer)ftk_wnd_manager_default_long_press, thiz);
		ftk_set_primary_source(ftk_source_primary_create((FtkOnEvent)ftk_wnd_manager_default_dispatch_event, thiz));
		ftk_sources_manager_add(ftk_default_sources_manager(), ftk_primary_source());

		thiz->grab   = ftk_wnd_manager_default_grab;
		thiz->ungrab = ftk_wnd_manager_default_ungrab;
		thiz->add    = ftk_wnd_manager_default_add;
		thiz->remove = ftk_wnd_manager_default_remove;
		thiz->restack= ftk_wnd_manager_default_restack;
		thiz->update         = ftk_wnd_manager_default_update;
		thiz->get_work_area  = ftk_wnd_manager_default_get_work_area;
		thiz->queue_event    = ftk_wnd_manager_default_queue_event;
		thiz->dispatch_event         = ftk_wnd_manager_default_dispatch_event;
		thiz->add_global_listener    = ftk_wnd_manager_default_add_global_listener;
		thiz->remove_global_listener = ftk_wnd_manager_default_remove_global_listener;
		thiz->destroy                = ftk_wnd_manager_default_destroy;


#ifndef FTK_SUPPORT_C99
	key_tanslate_table_init();
#endif
	}

	return thiz;
}
Beispiel #3
0
static void ftk_source_touch_init(void)
{
	FtkSource* source = NULL;

	source = ftk_source_touch_create(FTK_TOUCH_NAME,
				(FtkOnEvent)ftk_wnd_manager_queue_event_auto_rotate, ftk_default_wnd_manager());
	if (source != NULL)
	{
		ftk_sources_manager_add(ftk_default_sources_manager(), source);
	}
	ftk_logd("%s: touch dev %s source=%p\n", __func__, FTK_TOUCH_NAME, source);
}
Beispiel #4
0
static Ret ftk_init_input(void)
{
	const char* tsdev = NULL;
	FtkSource* source = NULL;
	
	source = ftk_source_input_create((FtkOnEvent)ftk_wnd_manager_queue_event_auto_rotate, ftk_default_wnd_manager());

	if(source != NULL)
	{
		ftk_sources_manager_add(ftk_default_sources_manager(), source);
	}

	return RET_OK;
}
Beispiel #5
0
static Ret ftk_init_input(void)
{
	char filename[260] = {0};
	const char* tsdev = NULL;
	FtkSource* source = NULL;
	struct dirent* iter = NULL;
	const char* extra_input = NULL;
	struct stat buf;
	DIR* dir = opendir("/dev/input");
	
	return_val_if_fail(dir != NULL, RET_FAIL);

	tsdev = getenv("FTK_TSLIB_FILE") ? getenv("FTK_TSLIB_FILE") : FTK_TSLIB_FILE;
	while((iter = readdir(dir)) != NULL)
	{
		if(iter->d_name[0] == '.')
			continue;

		ftk_snprintf(filename, sizeof(filename), "/dev/input/%s", iter->d_name);
		if (stat(filename, &buf) == -1)
		{
			perror("stat");
			continue;
		}

		//if(!(iter->d_type & DT_CHR)) continue;
		if(!(buf.st_mode & S_IFCHR))
			continue;

#ifdef USE_TSLIB
		if(strcmp(filename, tsdev) == 0)
		{
			/*skip tsdev now, open it later.*/
			continue;
		}
		else
#endif
		if(strcmp(filename, "/dev/input/mice") == 0)
		{
			int max_x = ftk_display_width(ftk_default_display());
			int max_y = ftk_display_height(ftk_default_display());

			source = ftk_source_ps2mouse_create(filename, 
				(FtkOnEvent)ftk_wnd_manager_queue_event_auto_rotate, ftk_default_wnd_manager(), max_x, max_y);
		}
		else
		{
			source = ftk_source_input_create(filename, 
				(FtkOnEvent)ftk_wnd_manager_queue_event_auto_rotate, ftk_default_wnd_manager());
		}
		if(source != NULL)
		{
			ftk_sources_manager_add(ftk_default_sources_manager(), source);
		}
	}
	closedir(dir);

#ifdef USE_TSLIB
	source = ftk_source_tslib_create(tsdev, 
				(FtkOnEvent)ftk_wnd_manager_queue_event_auto_rotate, ftk_default_wnd_manager());
	if(source != NULL)
	{
		ftk_sources_manager_add(ftk_default_sources_manager(), source);
	}
	ftk_logd("%s: tsdev %s source=%p\n", __func__, tsdev, source);
#endif

	extra_input = getenv("FTK_EXTRA_INPUT");
	if(extra_input != NULL)
	{
		source = ftk_source_input_create(filename, 
				(FtkOnEvent)ftk_wnd_manager_queue_event_auto_rotate, ftk_default_wnd_manager());
		if(source != NULL)
		{
			ftk_sources_manager_add(ftk_default_sources_manager(), source);

			ftk_logd("add %s input device\n", extra_input);
		}
	}

	return RET_OK;
}