sdl: disable touch input support by default

It looks like that the Android system gets confused when both a pointer
and an touch based input device are connected to the system. As touch
support is so far only used Ubports we can keep it disabled for the
snap version but provide a configuration switch to enable it again.
This commit is contained in:
Simon Fels 2018-08-10 20:54:02 +02:00
commit 348ff8a320
2 changed files with 21 additions and 3 deletions

View file

@ -136,3 +136,8 @@ configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in"
add_custom_target(uninstall "${CMAKE_COMMAND}"
-P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake")
option(TOUCH_INPUT "Enable touch input support" OFF)
if (TOUCH_INPUT)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DENABLE_TOUCH_INPUT")
endif()

View file

@ -101,6 +101,7 @@ Platform::Platform(
keyboard_->set_key_bit(BTN_MISC);
keyboard_->set_key_bit(KEY_OK);
#ifdef ENABLE_TOUCH_INPUT
touch_ = input_manager->create_device();
touch_->set_name("anbox-touch");
touch_->set_driver_version(1);
@ -122,6 +123,7 @@ Platform::Platform(
touch_->set_abs_bit(ABS_MT_TRACKING_ID);
touch_->set_abs_max(ABS_MT_TRACKING_ID, 10);
touch_->set_prop_bit(INPUT_PROP_DIRECT);
#endif
event_thread_ = std::thread(&Platform::process_events, this);
}
@ -189,8 +191,10 @@ void Platform::process_input_event(const SDL_Event &event) {
std::int32_t x = 0;
std::int32_t y = 0;
#ifdef ENABLE_TOUCH_INPUT
std::int32_t rel_x = 0;
std::int32_t rel_y = 0;
#endif
SDL_Window *window = nullptr;
@ -251,6 +255,7 @@ void Platform::process_input_event(const SDL_Event &event) {
keyboard_events.push_back({EV_KEY, code, 0});
break;
}
#ifdef ENABLE_TOUCH_INPUT
// Touch screen
case SDL_FINGERDOWN: {
touch_events.push_back({EV_ABS, ABS_MT_TRACKING_ID, static_cast<std::int32_t>(event.tfinger.fingerId)});
@ -343,13 +348,21 @@ void Platform::process_input_event(const SDL_Event &event) {
touch_events.push_back({EV_SYN, SYN_REPORT, 0});
break;
}
#endif
default:
break;
}
if (mouse_events.size() > 0) pointer_->send_events(mouse_events);
if (keyboard_events.size() > 0) keyboard_->send_events(keyboard_events);
if (touch_events.size() > 0) touch_->send_events(touch_events);
if (mouse_events.size() > 0)
pointer_->send_events(mouse_events);
if (keyboard_events.size() > 0)
keyboard_->send_events(keyboard_events);
#ifdef ENABLE_TOUCH_INPUT
if (touch_events.size() > 0)
touch_->send_events(touch_events);
#endif
}
Window::Id Platform::next_window_id() {