diff options
author | Peng Wu <alexepico@gmail.com> | 2014-02-19 10:57:40 -0500 |
---|---|---|
committer | Peng Huang <penghuang@google.com> | 2014-02-19 10:57:40 -0500 |
commit | 97565d04e40634a1ab62790f718a8377754d2954 (patch) | |
tree | 12659c649f8cd80b2a4a02d3587be773a9f7fd88 | |
parent | 525084f34c4b0b81ac1904a8b7fc53b857fed705 (diff) | |
download | ibus-pinyin-97565d04e40634a1ab62790f718a8377754d2954.tar.gz |
support setContentType method
ibus now supports setContentType method, if an application input some
password, the password will not be shown.
BUG=rhbz#1027029
R=Shawn.P.Huang@gmail.com
Review URL: https://codereview.appspot.com/22330043
Patch from Peng Wu <alexepico@gmail.com>.
-rw-r--r-- | src/PYBopomofoEngine.cc | 5 | ||||
-rw-r--r-- | src/PYEngine.cc | 54 | ||||
-rw-r--r-- | src/PYEngine.h | 14 | ||||
-rw-r--r-- | src/PYPinyinEngine.cc | 5 |
4 files changed, 76 insertions, 2 deletions
diff --git a/src/PYBopomofoEngine.cc b/src/PYBopomofoEngine.cc index 581c4cf..16d47b3 100644 --- a/src/PYBopomofoEngine.cc +++ b/src/PYBopomofoEngine.cc @@ -72,6 +72,9 @@ BopomofoEngine::processKeyEvent (guint keyval, guint keycode, guint modifiers) { gboolean retval = FALSE; + if (contentIsPassword()) + return retval; + /* check Shift + Release hotkey, * and then ignore other Release key event */ if (modifiers & IBUS_RELEASE_MASK) { @@ -139,6 +142,8 @@ BopomofoEngine::focusIn (void) void BopomofoEngine::focusOut (void) { + Engine::focusOut(); + reset (); } diff --git a/src/PYEngine.cc b/src/PYEngine.cc index d9fa04a..553d13f 100644 --- a/src/PYEngine.cc +++ b/src/PYEngine.cc @@ -67,6 +67,12 @@ static gboolean ibus_pinyin_engine_process_key_event guint modifiers); static void ibus_pinyin_engine_focus_in (IBusEngine *engine); static void ibus_pinyin_engine_focus_out (IBusEngine *engine); +#if IBUS_CHECK_VERSION (1, 5, 4) +static void ibus_pinyin_engine_set_content_type + (IBusEngine *engine, + guint purpose, + guint hints); +#endif static void ibus_pinyin_engine_reset (IBusEngine *engine); static void ibus_pinyin_engine_enable (IBusEngine *engine); static void ibus_pinyin_engine_disable (IBusEngine *engine); @@ -123,6 +129,10 @@ ibus_pinyin_engine_class_init (IBusPinyinEngineClass *klass) engine_class->focus_in = ibus_pinyin_engine_focus_in; engine_class->focus_out = ibus_pinyin_engine_focus_out; +#if IBUS_CHECK_VERSION (1, 5, 4) + engine_class->set_content_type = ibus_pinyin_engine_set_content_type; +#endif + engine_class->page_up = ibus_pinyin_engine_page_up; engine_class->page_down = ibus_pinyin_engine_page_down; @@ -182,6 +192,17 @@ ibus_pinyin_engine_process_key_event (IBusEngine *engine, return pinyin->engine->processKeyEvent (keyval, keycode, modifiers); } +#if IBUS_CHECK_VERSION (1, 5, 4) +static void +ibus_pinyin_engine_set_content_type (IBusEngine *engine, + guint purpose, + guint hints) +{ + IBusPinyinEngine *pinyin = (IBusPinyinEngine *) engine; + return pinyin->engine->setContentType (purpose, hints); +} +#endif + static void ibus_pinyin_engine_property_activate (IBusEngine *engine, const gchar *prop_name, @@ -220,6 +241,39 @@ FUNCTION(cursor_up, cursorUp) FUNCTION(cursor_down, cursorDown) #undef FUNCTION +Engine::Engine (IBusEngine *engine) : m_engine (engine) +{ +#if IBUS_CHECK_VERSION (1, 5, 4) + m_input_purpose = IBUS_INPUT_PURPOSE_FREE_FORM; +#endif +} + +gboolean +Engine::contentIsPassword() +{ +#if IBUS_CHECK_VERSION (1, 5, 4) + return IBUS_INPUT_PURPOSE_PASSWORD == m_input_purpose; +#else + return false; +#endif +} + +void +Engine::focusOut (void) +{ +#if IBUS_CHECK_VERSION (1, 5, 4) + m_input_purpose = IBUS_INPUT_PURPOSE_FREE_FORM; +#endif +} + +#if IBUS_CHECK_VERSION(1, 5, 4) +void +Engine::setContentType (guint purpose, guint hints) +{ + m_input_purpose = (IBusInputPurpose) purpose; +} +#endif + Engine::~Engine (void) { } diff --git a/src/PYEngine.h b/src/PYEngine.h index b74e6e8..21041b1 100644 --- a/src/PYEngine.h +++ b/src/PYEngine.h @@ -37,13 +37,18 @@ GType ibus_pinyin_engine_get_type (void); class Engine { public: - Engine (IBusEngine *engine) : m_engine (engine) { } + Engine (IBusEngine *engine); virtual ~Engine (void); + gboolean contentIsPassword(); + // virtual functions virtual gboolean processKeyEvent (guint keyval, guint keycode, guint modifiers) = 0; virtual void focusIn (void) = 0; - virtual void focusOut (void) = 0; + virtual void focusOut (void); +#if IBUS_CHECK_VERSION (1, 5, 4) + virtual void setContentType (guint purpose, guint hints); +#endif virtual void reset (void) = 0; virtual void enable (void) = 0; virtual void disable (void) = 0; @@ -122,6 +127,11 @@ protected: protected: Pointer<IBusEngine> m_engine; // engine pointer + +#if IBUS_CHECK_VERSION (1, 5, 4) + IBusInputPurpose m_input_purpose; +#endif + }; }; diff --git a/src/PYPinyinEngine.cc b/src/PYPinyinEngine.cc index 7aea261..babaaed 100644 --- a/src/PYPinyinEngine.cc +++ b/src/PYPinyinEngine.cc @@ -82,6 +82,9 @@ PinyinEngine::processKeyEvent (guint keyval, guint keycode, guint modifiers) { gboolean retval = FALSE; + if (contentIsPassword()) + return retval; + /* check Shift + Release hotkey, * and then ignore other Release key event */ if (modifiers & IBUS_RELEASE_MASK) { @@ -195,6 +198,8 @@ PinyinEngine::focusIn (void) void PinyinEngine::focusOut (void) { + Engine::focusOut (); + reset (); } |