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;
 }
 
 
openSUSE Build Service is sponsored by