#include "UniversalSwitch.hpp"
#include "Window.hpp"
#include "utils.hpp"
+#include "ecore.hpp"
static constexpr int DEFAULT_STEPS_NUMBER = 20; //DispatchDragEvent will generate 20 middle steps between start and end point
static constexpr int NO_DELAY = 0.0;
protected:
std::vector<std::shared_ptr<UIElement>> uiElements;
+ ecore::Timer timer;
};
template <typename DerivedType>
public:
using GestureDispatcher<DerivedType>::uiElements;
using GestureDispatcher<DerivedType>::markAsCompleted;
+ using GestureDispatcher<DerivedType>::timer;
static constexpr unsigned int requiredArguments = 1;
void process(DoneCallback doneCb) override
{
- ASSERT(uiElements.size() == requiredArguments);
- auto coord = uiElements.front()->getScanningCoordinates();
-
- utils::EventGenerator::generateTapGesture(coord.x, coord.y, DerivedType::hold_time);
- doneCb.callAfterTimeElapsed(sideEffectDelays::eModGesture);
- markAsCompleted();
+ timer.reset(NO_DELAY, [this, doneCb = std::move(doneCb)]() {
+ ASSERT(uiElements.size() == requiredArguments);
+ auto coord = uiElements.front()->getScanningCoordinates();
+ utils::EventGenerator::generateTapGesture(coord.x, coord.y, DerivedType::hold_time);
+ doneCb.callAfterTimeElapsed(sideEffectDelays::eModGesture);
+ markAsCompleted();
+ return ecore::TimerRepetitionPolicy::cancel;
+ });
}
};
public:
using GestureDispatcher<DerivedType>::uiElements;
using GestureDispatcher<DerivedType>::markAsCompleted;
+ using GestureDispatcher<DerivedType>::timer;
static constexpr int requiredArguments = 1;
void process(DoneCallback doneCb) override
{
- ASSERT(uiElements.size() == requiredArguments);
+ timer.reset(NO_DELAY, [this, doneCb = std::move(doneCb)]() {
+ ASSERT(uiElements.size() == requiredArguments);
- auto from = getStartPoint();
- auto to = getEndPoint();
+ auto from = getStartPoint();
+ auto to = getEndPoint();
- utils::EventGenerator::generateDragGesture(from.x, from.y, to.x, to.y, DEFAULT_STEPS_NUMBER, NO_DELAY);
- doneCb.callAfterTimeElapsed(sideEffectDelays::eModGesture);
- markAsCompleted();
+ utils::EventGenerator::generateDragGesture(from.x, from.y, to.x, to.y, DEFAULT_STEPS_NUMBER, NO_DELAY);
+ doneCb.callAfterTimeElapsed(sideEffectDelays::eModGesture);
+ markAsCompleted();
+ return ecore::TimerRepetitionPolicy::cancel;
+ });
}
protected:
public:
using GestureDispatcher<DerivedType>::uiElements;
using GestureDispatcher<DerivedType>::markAsCompleted;
+ using GestureDispatcher<DerivedType>::timer;
static constexpr int requiredArguments = 2;
void process(DoneCallback doneCb) override
{
- ASSERT(uiElements.size() == requiredArguments);
+ timer.reset(NO_DELAY, [this, doneCb = std::move(doneCb)]() {
+ ASSERT(uiElements.size() == requiredArguments);
- auto from = uiElements.front()->getScanningCoordinates();
- auto to = uiElements.back()->getScanningCoordinates();
+ auto from = uiElements.front()->getScanningCoordinates();
+ auto to = uiElements.back()->getScanningCoordinates();
- utils::EventGenerator::generateDragGesture(from.x, from.y, to.x, to.y, DerivedType::steps, DerivedType::hold_time);
- doneCb.callAfterTimeElapsed(sideEffectDelays::eModGesture);
- markAsCompleted();
+ utils::EventGenerator::generateDragGesture(from.x, from.y, to.x, to.y, DerivedType::steps, DerivedType::hold_time);
+ doneCb.callAfterTimeElapsed(sideEffectDelays::eModGesture);
+ markAsCompleted();
+ return ecore::TimerRepetitionPolicy::cancel;
+ });
}
};
public:
using GestureDispatcher<DerivedType>::uiElements;
using GestureDispatcher<DerivedType>::markAsCompleted;
+ using GestureDispatcher<DerivedType>::timer;
static constexpr int requiredArguments = 1;
void process(DoneCallback doneCb) override
{
- ASSERT(GestureDispatcher<DerivedType>::uiElements.size() == requiredArguments);
- auto coord = GestureDispatcher<DerivedType>::uiElements.front()->getScanningCoordinates();
-
- utils::EventGenerator::generatePinchGesture(coord.x, coord.y, DerivedType::radius_change, DEFAULT_STEPS_NUMBER);
- doneCb.callAfterTimeElapsed(sideEffectDelays::eModGesture);
- markAsCompleted();
+ timer.reset(NO_DELAY, [this, doneCb = std::move(doneCb)]() {
+ ASSERT(GestureDispatcher<DerivedType>::uiElements.size() == requiredArguments);
+ auto coord = GestureDispatcher<DerivedType>::uiElements.front()->getScanningCoordinates();
+
+ utils::EventGenerator::generatePinchGesture(coord.x, coord.y, DerivedType::radius_change, DEFAULT_STEPS_NUMBER);
+ doneCb.callAfterTimeElapsed(sideEffectDelays::eModGesture);
+ markAsCompleted();
+ return ecore::TimerRepetitionPolicy::cancel;
+ });
}
};
}
handler.reset(windowHandler);
+ waylandWindow = elm_win_wl_window_get(windowHandler);
// TODO: name setter should be removed after reaching full functionality by navigation interface
elm_atspi_accessible_name_set(windowHandler, "UniversalSwitch Main Window");
efl_util_set_notification_window_level(windowHandler, EFL_UTIL_NOTIFICATION_LEVEL_3);
- elm_win_override_set(windowHandler, EINA_TRUE);
elm_win_alpha_set(windowHandler, EINA_TRUE);
auto size = getDimensions().size;
elm_win_wm_rotation_available_rotations_set(windowHandler, rotations, 3);
evas_object_show(windowHandler);
- waylandWindow = elm_win_wl_window_get(windowHandler);
- ecore_wl_window_input_region_set(waylandWindow, 0, 0, 0, 0);
- ecore_wl_window_focus_skip_set(waylandWindow, EINA_TRUE);
+ acceptTouchInput(false);
auto status = efl_util_set_window_screen_mode(windowHandler, EFL_UTIL_SCREEN_MODE_ALWAYS_ON);
if (status)
{
return quickpanel.get();
}
+
+void Window::acceptTouchInput(bool state)
+{
+ elm_win_override_set(handler.get(), state ? EINA_FALSE : EINA_TRUE);
+ ecore_wl_window_focus_skip_set(waylandWindow, state ? EINA_FALSE : EINA_TRUE);
+ auto size = 0;
+ if (state) {
+ auto dimensions = getDimensions();
+ size = std::max(dimensions.size.width, dimensions.size.height);
+ }
+
+ ecore_wl_window_input_region_set(waylandWindow, 0, 0, size, size);
+}