}
}
+static void slot_process_input_device_event(const scim::HelperAgent *agent, scim::uint32 &type, char *data, size_t &len, scim::uint32 &ret) {
+ CSCLCoreImpl *impl = CSCLCoreImpl::get_instance();
+ if (impl) {
+ ISCLCoreEventCallback *callback = impl->get_core_event_callback();
+ if (callback) {
+ /* Input Device Event callback is available in versions after 1.1 */
+ if (check_interface_version(callback, 1, 1)) {
+ callback->on_process_input_device_event(type, data, len, &ret);
+ }
+ }
+ }
+}
+
/* Internal input handler function */
Eina_Bool input_handler(void *data, Ecore_Fd_Handler *fd_handler)
{
m_helper_agent.signal_connect_process_key_event(scim::slot(slot_process_key_event));
m_helper_agent.signal_connect_candidate_show(scim::slot(slot_candidate_show));
m_helper_agent.signal_connect_candidate_hide(scim::slot(slot_candidate_hide));
+ m_helper_agent.signal_connect_process_input_device_event(scim::slot(slot_process_input_device_event));
m_initialized = TRUE;
}
virtual void on_candidate_show(sclint ic, const sclchar *ic_uuid) {}
virtual void on_candidate_hide(sclint ic, const sclchar *ic_uuid) {}
+
+ /* Added in callback interface version 1.1 */
+ virtual void on_process_input_device_event(sclu32 &type, sclchar *data, size_t &len, sclu32 *ret) {}
+
+ ISCLCoreEventCallback() {
+ /* Current callback interface version is 1.1 */
+ m_version_major = 1;
+ m_version_minor = 1;
+ }
+ sclint get_version_major() { return m_version_major; }
+ sclint get_version_minor() { return m_version_minor; }
+private:
+ int m_version_major;
+ int m_version_minor;
};
+inline sclboolean check_interface_version(ISCLCoreEventCallback *callback, int version_major, int version_minor)
+{
+ if (callback) {
+ if (callback->get_version_major() >= version_major) {
+ if (callback->get_version_minor() >= version_minor) {
+ return TRUE;
+ }
+ }
+ }
+ return FALSE;
+}
+
}
//SCL_END_DECLS