static Eldbus_Message *_sc_enable(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
static Eldbus_Message *_ssp_enable(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
static Eldbus_Message *_asp_enable(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
+static Eldbus_Message *_bbi_enable(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
static Eldbus_Message *_is_slider(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
static Eldbus_Message *_highlighted_object_info(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
static Eldbus_Message *_is_screen_reader_support(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
{ "AccessoriesSwitchProviderEnabled", ELDBUS_ARGS({"b", "bool"}), NULL,
_asp_enable
},
+ { "BackButtonInterceptionEnabled", ELDBUS_ARGS({"b", "bool"}), NULL,
+ _bbi_enable
+ },
{ "IsSlider", ELDBUS_ARGS({"b", "bool"}), NULL,
_is_slider
},
[MOUSE_UP_SIGNAL] = {"MouseUp", ELDBUS_ARGS({"i", "deviceId"}), 0},
[KEY_DOWN_SIGNAL] = {"KeyDown", ELDBUS_ARGS({"s", "keyId"}), 0},
[KEY_UP_SIGNAL] = {"KeyUp", ELDBUS_ARGS({"s", "keyId"}), 0},
+ [BACK_BUTTON_DOWN_SIGNAL] = {"BackButtonDown", 0, 0},
+ [BACK_BUTTON_UP_SIGNAL] = {"BackButtonUp", 0, 0},
{ }
};
return eldbus_message_method_return_new(msg);
}
+static Eldbus_Message *
+_bbi_enable(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg)
+{
+ Eina_Bool enabled = EINA_FALSE;
+ if (!eldbus_message_arguments_get(msg, "b", &enabled))
+ {
+ ERROR("eldbus_message_arguments_get() error\n");
+ return NULL;
+ }
+
+ if (enabled)
+ _bbi_submodule_init();
+ else
+ _bbi_submodule_shutdown();
+
+ return eldbus_message_method_return_new(msg);
+}
+
static Eldbus_Message *
_is_slider(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg)
static Ecore_Event_Filter *screen_switch_provider_filter = NULL;
static Ecore_Event_Filter *accessories_switch_provider_filter = NULL;
+static Ecore_Event_Filter *back_button_filter = NULL;
static const char* uncaught_keys[] = {"XF86Back", "XF86Menu", "XF86AudioRaiseVolume", "XF86AudioLowerVolume"};
+static const char* back_button_code = "XF86Back";
static Eina_Bool _ssp_filter(void *data, void *loop_data, int type, void *event)
{
return EINA_FALSE;
}
+static Eina_Bool _bbi_filter(void *data, void *loop_data, int type, void *event)
+{
+ if (type != ECORE_EVENT_KEY_DOWN && type != ECORE_EVENT_KEY_UP)
+ return EINA_TRUE;
+
+ Ecore_Event_Key *ev = event;
+
+ if (strcmp(ev->key, back_button_code) != 0)
+ return EINA_TRUE;
+
+ if (type == ECORE_EVENT_KEY_DOWN)
+ eldbus_service_signal_emit(iface, BACK_BUTTON_DOWN_SIGNAL);
+ else
+ eldbus_service_signal_emit(iface, BACK_BUTTON_UP_SIGNAL);
+
+ return EINA_FALSE;
+}
+
void _ssp_submodule_init()
{
if (screen_switch_provider_filter)
ecore_event_filter_del(accessories_switch_provider_filter);
accessories_switch_provider_filter = NULL;
}
+
+void _bbi_submodule_init()
+{
+ if (back_button_filter)
+ return;
+
+ back_button_filter = ecore_event_filter_add(NULL, _bbi_filter, NULL, NULL);
+}
+
+void _bbi_submodule_shutdown()
+{
+ if (!back_button_filter)
+ return;
+
+ ecore_event_filter_del(back_button_filter);
+ back_button_filter = NULL;
+}