diff --git a/honoka/libhonoka/honokapluginbase.cpp b/honoka/libhonoka/honokapluginbase.cpp index 50586ec..4fbd839 100644 --- a/honoka/libhonoka/honokapluginbase.cpp +++ b/honoka/libhonoka/honokapluginbase.cpp @@ -40,3 +40,44 @@ return String("PluginBase"); } + + +/*! + \fn Honoka::HonokaPluginBase::findTimerEventId(int id) + */ +bool Honoka::HonokaPluginBase::findTimerEventId(int id) +{ + return timerEventId.count(id); +} + + +/*! + \fn Honoka::HonokaPluginBase::timerEvent(int id) + */ +void Honoka::HonokaPluginBase::timerEvent(int id) +{ + return; +} + + +/*! + \fn Honoka::HonokaPluginBase::appendDelayEvent(uint32 delay) + */ +int Honoka::HonokaPluginBase::appendDelayEvent(uint32 delay) +{ + int id = HonokaTimer::self()->appendDelayEvent(delay); + timerEventId.insert(id); + return id; +} + + +/*! + \fn Honoka::HonokaPluginBase::removeTimerEventId(int id) + */ +bool Honoka::HonokaPluginBase::removeTimerEventId(int id) +{ + if (!timerEventId.count(id)) return false; + timerEventId.erase(id); + return true; +} + diff --git a/honoka/libhonoka/honokapluginbase.h b/honoka/libhonoka/honokapluginbase.h index 3835c8a..9b55735 100644 --- a/honoka/libhonoka/honokapluginbase.h +++ b/honoka/libhonoka/honokapluginbase.h @@ -24,6 +24,7 @@ #include #include #include +#include #include #define Uses_SCIM_CONFIG_BASE @@ -33,6 +34,7 @@ using namespace scim; #include +#include #define HONOKA_CONFIG_PLUGINLOADER_PREFIX "/IMEngine/Honoka/PluginLoader" #define HONOKA_CONFIG_KEY_CONVERTOR_PREFIX "/IMEngine/Honoka/Key/Convertor" @@ -76,14 +78,19 @@ protected: HonokaPluginBase(const String pluginType); ~HonokaPluginBase(); + int appendDelayEvent(uint32 delay); + bool removeTimerEventId(int id); public: String getPluginType(); virtual String getName(); + bool findTimerEventId(int id); + virtual void timerEvent(int id); private: String type; + set timerEventId; }; } diff --git a/honoka/src/honoka_imengine.cpp b/honoka/src/honoka_imengine.cpp index 581189d..a63d8bc 100644 --- a/honoka/src/honoka_imengine.cpp +++ b/honoka/src/honoka_imengine.cpp @@ -1680,6 +1680,25 @@ */ void HonokaInstance::timerEvent(int id) { + for(unsigned int i = 0;i < preeditors.size();i ++) { + if (preeditors[i]->findTimerEventId(id)) { + preeditors[i]->timerEvent(id); + if ((!m_conversion) && (!m_prediction)) updatePreEditor(); + return; + } + } + for(unsigned int i = 0;i < convertors.size();i ++) { + if (convertors[i]->findTimerEventId(id)) { + convertors[i]->timerEvent(id); + return; + } + } + for(unsigned int i = 0;i < predictors.size();i ++) { + if (predictors[i]->findTimerEventId(id)) { + predictors[i]->timerEvent(id); + return; + } + } if ((id == preeditKeyDelay) && (!m_conversion) && (!m_prediction)) { WideString w = m_preeditor->getText(); if (!w.length()) {