File scim-bridge-remember-focus-state.patch of Package scim-bridge
Index: scim-bridge-0.4.15/agent/scim-bridge-agent-imcontext.cpp
===================================================================
--- scim-bridge-0.4.15.orig/agent/scim-bridge-agent-imcontext.cpp
+++ scim-bridge-0.4.15/agent/scim-bridge-agent-imcontext.cpp
@@ -146,6 +146,7 @@ class ScimBridgeAgentIMContextImpl: publ
IMEngineInstancePointer imengine;
bool enabled;
+ bool focused;
scim_bridge_preedit_mode_t preedit_mode;
bool preedit_shown;
@@ -274,7 +275,7 @@ void ScimBridgeAgentIMContext::set_on_th
ScimBridgeAgentIMContextImpl::ScimBridgeAgentIMContextImpl (ScimBridgeAgentClientListener *new_client_listener):
-client_listener (new_client_listener), imengine (NULL), enabled (false), preedit_mode (PREEDIT_ANY),
+client_listener (new_client_listener), imengine (NULL), enabled (false), focused(false) ,preedit_mode (PREEDIT_ANY),
preedit_shown (false), preedit_cursor_position (0)
{
if (free_imcontexts.empty ()) {
@@ -646,6 +647,8 @@ void ScimBridgeAgentIMContextImpl::focus
panel_listener->hide_aux_string ();
panel_listener->hide_lookup_table ();
hide_preedit ();
+
+ focused = true;
}
@@ -653,6 +656,9 @@ void ScimBridgeAgentIMContextImpl::focus
{
ScimBridgeAgentIMContext *focused_imcontext = static_cast<ScimBridgeAgentIMContext*> (get_imengine ()->get_frontend_data ());
+ if ( !focused )
+ return;
+
get_imengine ()->set_frontend_data (static_cast<ScimBridgeAgentIMContext*> (this));
hide_preedit ();
@@ -666,6 +672,8 @@ void ScimBridgeAgentIMContextImpl::focus
} else {
imengine->set_frontend_data (NULL);
}
+
+ focused = false;
}