You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
300 lines
9.8 KiB
300 lines
9.8 KiB
Index: engine_interface.h
|
|
===================================================================
|
|
--- unix/ibus/engine_interface.h (revision 177)
|
|
+++ unix/ibus/engine_interface.h (working copy)
|
|
@@ -106,6 +106,11 @@
|
|
gint y,
|
|
gint w,
|
|
gint h) = 0;
|
|
+
|
|
+ // The interface function for the "set-content-type" signal
|
|
+ virtual void SetContentType(IBusEngine *engine,
|
|
+ guint purpose,
|
|
+ guint hints) = 0;
|
|
};
|
|
|
|
} // namespace ibus
|
|
Index: engine_registrar.cc
|
|
===================================================================
|
|
--- unix/ibus/engine_registrar.cc (revision 177)
|
|
+++ unix/ibus/engine_registrar.cc (working copy)
|
|
@@ -63,7 +63,9 @@
|
|
engine_class->reset = Reset;
|
|
engine_class->set_capabilities = SetCapabilities;
|
|
engine_class->set_cursor_location = SetCursorLocation;
|
|
-
|
|
+#if defined(MOZC_ENABLE_IBUS_INPUT_PURPOSE)
|
|
+ engine_class->set_content_type = SetContentType;
|
|
+#endif // MOZC_ENABLE_IBUS_INPUT_PURPOSE
|
|
return true;
|
|
}
|
|
|
|
@@ -87,6 +89,9 @@
|
|
engine_class->reset = NULL;
|
|
engine_class->set_capabilities = NULL;
|
|
engine_class->set_cursor_location = NULL;
|
|
+#if defined(MOZC_ENABLE_IBUS_INPUT_PURPOSE)
|
|
+ engine_class->set_content_type = NULL;
|
|
+#endif // MOZC_ENABLE_IBUS_INPUT_PURPOSE
|
|
|
|
mozc::ibus::EngineInterface *previous = g_engine;
|
|
g_engine = NULL;
|
|
@@ -179,5 +184,12 @@
|
|
g_engine->SetCursorLocation(engine, x, y, w, h);
|
|
}
|
|
|
|
+void EngineRegistrar::SetContentType(
|
|
+ IBusEngine *engine,
|
|
+ guint purpose,
|
|
+ guint hints) {
|
|
+ g_engine->SetContentType(engine, purpose, hints);
|
|
+}
|
|
+
|
|
} // namespace ibus
|
|
} // namespace mozc
|
|
Index: engine_registrar.h
|
|
===================================================================
|
|
--- unix/ibus/engine_registrar.h (revision 177)
|
|
+++ unix/ibus/engine_registrar.h (working copy)
|
|
@@ -84,6 +84,9 @@
|
|
gint y,
|
|
gint w,
|
|
gint h);
|
|
+ static void SetContentType(IBusEngine *engine,
|
|
+ guint purpose,
|
|
+ guint hints);
|
|
};
|
|
|
|
} // namespace ibus
|
|
Index: ibus_header.h
|
|
===================================================================
|
|
--- unix/ibus/ibus_header.h (revision 177)
|
|
+++ unix/ibus/ibus_header.h (working copy)
|
|
@@ -36,5 +36,10 @@
|
|
#error "ibus-mozc now requires IBus>=1.4.1"
|
|
#endif // libibus (<1.4.1)
|
|
|
|
+#if IBUS_CHECK_VERSION(1, 5, 4)
|
|
+#if !defined(MOZC_ENABLE_IBUS_INPUT_PURPOSE)
|
|
+#define MOZC_ENABLE_IBUS_INPUT_PURPOSE
|
|
+#endif // !MOZC_ENABLE_IBUS_INPUT_PURPOSE
|
|
+#endif // libibus(>=1.5.4)
|
|
|
|
#endif // MOZC_UNIX_IBUS_IBUS_HEADER_H_
|
|
Index: mozc_engine.cc
|
|
===================================================================
|
|
--- unix/ibus/mozc_engine.cc (revision 177)
|
|
+++ unix/ibus/mozc_engine.cc (working copy)
|
|
@@ -372,6 +372,7 @@
|
|
|
|
void MozcEngine::FocusOut(IBusEngine *engine) {
|
|
GetCandidateWindowHandler(engine)->Hide(engine);
|
|
+ property_handler_->ResetContentType(engine);
|
|
|
|
// Do not call SubmitSession or RevertSession. Preedit string will commit on
|
|
// Focus Out event automatically by ibus_engine_update_preedit_text_with_mode
|
|
@@ -397,6 +398,11 @@
|
|
VLOG(2) << "keyval: " << keyval
|
|
<< ", keycode: " << keycode
|
|
<< ", modifiers: " << modifiers;
|
|
+ if (property_handler_->IsDisabled()) {
|
|
+ // It is each enginze's responsibility for ignoreing keyevents on
|
|
+ // the password field on the locked screen since IBus 1.5.4.
|
|
+ return FALSE;
|
|
+ }
|
|
|
|
// Send current caret location to mozc_server to manage suggest window
|
|
// position.
|
|
@@ -501,6 +507,18 @@
|
|
// Do nothing
|
|
}
|
|
|
|
+void MozcEngine::SetContentType(IBusEngine *engine,
|
|
+ guint purpose,
|
|
+ guint hints) {
|
|
+ const bool prev_disabled =
|
|
+ property_handler_->IsDisabled();
|
|
+ property_handler_->UpdateContentType(engine);
|
|
+ if (!prev_disabled && property_handler_->IsDisabled()) {
|
|
+ // Make sure on-going composition is reverted.
|
|
+ RevertSession(engine);
|
|
+ }
|
|
+}
|
|
+
|
|
GType MozcEngine::GetType() {
|
|
static GType type = 0;
|
|
|
|
Index: mozc_engine.h
|
|
===================================================================
|
|
--- unix/ibus/mozc_engine.h (revision 177)
|
|
+++ unix/ibus/mozc_engine.h (working copy)
|
|
@@ -99,6 +99,9 @@
|
|
gint y,
|
|
gint w,
|
|
gint h);
|
|
+ void SetContentType(IBusEngine *engine,
|
|
+ guint purpose,
|
|
+ guint hints);
|
|
|
|
// Returns the GType which this class represents.
|
|
static GType GetType();
|
|
Index: property_handler.cc
|
|
===================================================================
|
|
--- unix/ibus/property_handler.cc (revision 177)
|
|
+++ unix/ibus/property_handler.cc (working copy)
|
|
@@ -61,6 +61,19 @@
|
|
bool IsMozcToolAvailable() {
|
|
return FileUtil::FileExists(SystemUtil::GetToolPath());
|
|
}
|
|
+
|
|
+bool GetDisabled(IBusEngine *engine) {
|
|
+ bool disabled = false;
|
|
+#if defined(MOZC_ENABLE_IBUS_INPUT_PURPOSE)
|
|
+ guint purpose = IBUS_INPUT_PURPOSE_FREE_FORM;
|
|
+ guint hints = IBUS_INPUT_HINT_NONE;
|
|
+ ibus_engine_get_content_type(engine, &purpose, &hints);
|
|
+ disabled = (purpose == IBUS_INPUT_PURPOSE_PASSWORD ||
|
|
+ purpose == IBUS_INPUT_PURPOSE_PIN);
|
|
+#endif // MOZC_ENABLE_IBUS_INPUT_PURPOSE
|
|
+ return disabled;
|
|
+}
|
|
+
|
|
} // namespace
|
|
|
|
PropertyHandler::PropertyHandler(MessageTranslatorInterface *translator,
|
|
@@ -71,7 +84,8 @@
|
|
client_(client),
|
|
translator_(translator),
|
|
original_composition_mode_(kMozcEngineInitialCompositionMode),
|
|
- is_activated_(true) {
|
|
+ is_activated_(true),
|
|
+ is_disabled_(false) {
|
|
|
|
AppendCompositionPropertyToPanel();
|
|
#ifndef OS_CHROMEOS
|
|
@@ -105,6 +119,7 @@
|
|
|
|
void PropertyHandler::Register(IBusEngine *engine) {
|
|
ibus_engine_register_properties(engine, prop_root_);
|
|
+ UpdateContentType(engine);
|
|
}
|
|
|
|
// TODO(nona): do not use kMozcEngine*** directory.
|
|
@@ -228,8 +243,34 @@
|
|
ibus_prop_list_append(prop_root_, prop_mozc_tool_);
|
|
}
|
|
|
|
+void PropertyHandler::UpdateContentTypeImpl(IBusEngine *engine,
|
|
+ bool disabled) {
|
|
+ const bool prev_is_disabled = is_disabled_;
|
|
+ is_disabled_ = disabled;
|
|
+ if (prev_is_disabled == is_disabled_) {
|
|
+ return;
|
|
+ }
|
|
+ const commands::CompositionMode visible_mode =
|
|
+ (prev_is_disabled && !is_disabled_ && IsActivated())
|
|
+ ? original_composition_mode_ :
|
|
+ kMozcEnginePropertyIMEOffState->composition_mode;
|
|
+ UpdateCompositionModeIcon(engine, visible_mode);
|
|
+}
|
|
+
|
|
+void PropertyHandler::ResetContentType(IBusEngine *engine) {
|
|
+ UpdateContentTypeImpl(engine, false);
|
|
+}
|
|
+
|
|
+void PropertyHandler::UpdateContentType(IBusEngine *engine) {
|
|
+ UpdateContentTypeImpl(engine, GetDisabled(engine));
|
|
+}
|
|
+
|
|
void PropertyHandler::Update(IBusEngine *engine,
|
|
const commands::Output &output) {
|
|
+ if (IsDisabled()) {
|
|
+ return;
|
|
+ }
|
|
+
|
|
if (output.has_status() &&
|
|
(output.status().activated() != is_activated_ ||
|
|
output.status().mode() != original_composition_mode_)) {
|
|
@@ -325,6 +366,10 @@
|
|
const gchar *property_name,
|
|
guint property_state) {
|
|
#ifndef OS_CHROMEOS
|
|
+ if (IsDisabled()) {
|
|
+ return;
|
|
+ }
|
|
+
|
|
if (prop_mozc_tool_) {
|
|
for (guint prop_index = 0; ; ++prop_index) {
|
|
IBusProperty *prop = ibus_prop_list_get(
|
|
@@ -371,9 +416,13 @@
|
|
}
|
|
|
|
bool PropertyHandler::IsActivated() const {
|
|
- return is_activated_;
|
|
+ return is_activated_ && !IsDisabled();
|
|
}
|
|
|
|
+bool PropertyHandler::IsDisabled() const {
|
|
+ return is_disabled_;
|
|
+}
|
|
+
|
|
commands::CompositionMode PropertyHandler::GetOriginalCompositionMode() const {
|
|
return original_composition_mode_;
|
|
}
|
|
Index: property_handler.h
|
|
===================================================================
|
|
--- unix/ibus/property_handler.h (revision 177)
|
|
+++ unix/ibus/property_handler.h (working copy)
|
|
@@ -54,14 +54,19 @@
|
|
virtual ~PropertyHandler();
|
|
|
|
virtual void Register(IBusEngine *engine);
|
|
+ virtual void ResetContentType(IBusEngine *engine);
|
|
+ virtual void UpdateContentType(IBusEngine *engine);
|
|
virtual void Update(IBusEngine *engine, const commands::Output &output);
|
|
virtual void ProcessPropertyActivate(IBusEngine *engine,
|
|
const gchar *property_name,
|
|
guint property_state);
|
|
virtual bool IsActivated() const;
|
|
+ virtual bool IsDisabled() const;
|
|
virtual commands::CompositionMode GetOriginalCompositionMode() const;
|
|
|
|
private:
|
|
+ void UpdateContentTypeImpl(IBusEngine *engine, bool disabled);
|
|
+
|
|
// Appends composition properties into panel
|
|
void AppendCompositionPropertyToPanel();
|
|
// Appends tool properties into panel
|
|
@@ -79,6 +84,7 @@
|
|
scoped_ptr<MessageTranslatorInterface> translator_;
|
|
commands::CompositionMode original_composition_mode_;
|
|
bool is_activated_;
|
|
+ bool is_disabled_;
|
|
};
|
|
|
|
} // namespace ibus
|
|
Index: property_handler_interface.h
|
|
===================================================================
|
|
--- unix/ibus/property_handler_interface.h (revision 177)
|
|
+++ unix/ibus/property_handler_interface.h (working copy)
|
|
@@ -45,6 +45,9 @@
|
|
// Registers current properties into engine.
|
|
virtual void Register(IBusEngine *engine) ABSTRACT;
|
|
|
|
+ virtual void ResetContentType(IBusEngine *engine) ABSTRACT;
|
|
+ virtual void UpdateContentType(IBusEngine *engine) ABSTRACT;
|
|
+
|
|
// Update properties.
|
|
virtual void Update(IBusEngine *engine,
|
|
const commands::Output &output) ABSTRACT;
|
|
@@ -55,6 +58,9 @@
|
|
// Returns if IME is activated or not.
|
|
virtual bool IsActivated() const ABSTRACT;
|
|
|
|
+ // Returns if IME is forcesully disabled, e.g. on a password field.
|
|
+ virtual bool IsDisabled() const ABSTRACT;
|
|
+
|
|
// Returns original composition mode before.
|
|
virtual commands::CompositionMode GetOriginalCompositionMode() const ABSTRACT;
|
|
};
|