summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeng Wu <alexepico@gmail.com>2014-02-19 10:57:40 -0500
committerPeng Huang <penghuang@google.com>2014-02-19 10:57:40 -0500
commit97565d04e40634a1ab62790f718a8377754d2954 (patch)
tree12659c649f8cd80b2a4a02d3587be773a9f7fd88
parent525084f34c4b0b81ac1904a8b7fc53b857fed705 (diff)
downloadibus-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.cc5
-rw-r--r--src/PYEngine.cc54
-rw-r--r--src/PYEngine.h14
-rw-r--r--src/PYPinyinEngine.cc5
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 ();
}