Add SocketConfigServer PanelAgent module 64/83364/7
authorLi Zhang <li2012.zhang@samsung.com>
Mon, 1 Aug 2016 06:43:46 +0000 (14:43 +0800)
committerJihoon Kim <jihoon48.kim@samsung.com>
Wed, 17 Aug 2016 01:08:20 +0000 (10:08 +0900)
Change-Id: Ifefe946b0203324365c4dcf10269442be74993ba

19 files changed:
configure.ac
ism/configs/global
ism/extras/efl_panel/isf_panel_efl.cpp
ism/modules/Makefile.am
ism/modules/config/scim_socket_config.cpp
ism/modules/panelagent/ecoresocket/ecore_socket_panel_agent_module.cpp
ism/modules/panelagent/socketconfigserver/Makefile.am [new file with mode: 0644]
ism/modules/panelagent/socketconfigserver/socket_config_server_panel_agent_module.cpp [new file with mode: 0644]
ism/modules/panelagent/socketconfigserver/socketconfigserver.version-script [new file with mode: 0644]
ism/modules/panelagent/wayland/wayland_panel_agent_module.cpp
ism/src/isf_info_manager.cpp
ism/src/isf_info_manager.h
ism/src/isf_panel_agent_base.cpp
ism/src/isf_panel_agent_base.h
ism/src/isf_panel_agent_manager.cpp
ism/src/isf_panel_agent_manager.h
ism/src/scim_helper.cpp
ism/src/scim_helper_launcher.cpp
ism/src/scim_socket.cpp

index 9814d63..b557508 100644 (file)
@@ -832,6 +832,7 @@ AC_CONFIG_FILES([Makefile
                  ism/modules/config/Makefile
                  ism/modules/panelagent/ecoresocket/Makefile
                  ism/modules/panelagent/wayland/Makefile
+                 ism/modules/panelagent/socketconfigserver/Makefile
                  ism/configs/Makefile
                  ism/extras/Makefile
                  ism/extras/gtk2_immodule/Makefile
index bd675f4..600b976 100755 (executable)
@@ -3,7 +3,7 @@
 /DefaultConfigModule = simple
 /DefaultSocketFrontEndAddress = local:/tmp/scim-socket-frontend
 /DefaultSocketIMEngineAddress = local:/tmp/scim-socket-frontend
-/DefaultSocketConfigAddress = local:/tmp/scim-panel-socket
+/DefaultSocketConfigAddress = local:/tmp/scim-socket-config
 /DefaultPanelSocketAddress = local:/tmp/scim-panel-socket
 /DefaultHelperManagerSocketAddress = local:/tmp/scim-socket-frontend
 /DefaultSocketTimeout = 5000
index 0c9393d..5394255 100644 (file)
@@ -1814,7 +1814,6 @@ static bool set_active_ise (const String &uuid, bool launch_ise)
 
                 _config->flush ();
                 _config->reload ();
-                _info_manager->reload_config ();
 
 #if HAVE_VCONF
                 vconf_set_str (VCONFKEY_ISF_ACTIVE_KEYBOARD_UUID, uuid.c_str ());
@@ -1853,7 +1852,6 @@ static void load_config (void)
 static void config_reload_cb (const ConfigPointer &config)
 {
     SCIM_DEBUG_MAIN (3) << __FUNCTION__ << "...\n";
-    _info_manager->reload_config();
     /* load_config (); */
 }
 
@@ -5778,10 +5776,9 @@ static void slot_set_keyboard_ise (const String &uuid)
     String language = String ("~other");/*scim_get_locale_language (scim_get_current_locale ());*/
     _config->write (String (SCIM_CONFIG_DEFAULT_IMENGINE_FACTORY) + String ("/") + language, uuid);
     _config->flush ();
-    _config->reload ();
 
     _info_manager->change_factory (uuid);
-    _info_manager->reload_config ();
+    _config->reload ();
 }
 
 /**
@@ -6423,7 +6420,6 @@ static void change_keyboard_mode (TOOLBAR_MODE_T mode)
         _ise_state = WINDOW_STATE_HIDE;
         _info_manager->set_current_toolbar_mode (TOOLBAR_KEYBOARD_MODE);
         _info_manager->hide_helper (helper_uuid);
-        _info_manager->reload_config ();
 
         /* Check whether stop soft keyboard */
         if (_focus_in && (_ime_info[get_ise_index (helper_uuid)].options & ISM_HELPER_PROCESS_KEYBOARD_KEYEVENT)) {
index fe3a45d..cd4e894 100644 (file)
@@ -18,4 +18,4 @@
 MAINTAINERCLEANFILES   = Makefile.in
 CLEANFILES             = *.bak
 
-SUBDIRS                        = frontend imengine config filter panelagent/ecoresocket panelagent/wayland
+SUBDIRS                        = frontend imengine config filter panelagent/ecoresocket panelagent/wayland panelagent/socketconfigserver
index a053cf1..b001f4b 100644 (file)
@@ -87,13 +87,6 @@ SocketConfig::SocketConfig ()
 {
     SCIM_DEBUG_CONFIG (2) << " Construct SocketConfig object.\n";
 
-    String display_name;
-    {
-        const char *p = getenv ("DISPLAY");
-        if (p) display_name = String (p);
-    }
-    m_socket_address = scim_get_default_panel_socket_address (display_name);
-
     m_valid = open_connection ();
 }
 
index fff9768..d989085 100755 (executable)
@@ -78,9 +78,6 @@ struct IMControlStub {
 #define scim_panel_agent_module_get_instance ecoresocket_LTX_scim_panel_agent_module_get_instance
 
 
-static ConfigPointer        _config;
-
-
 //==================================== PanelAgent ===========================
 class EcoreSocketPanelAgent: public PanelAgentBase
 {
@@ -96,7 +93,6 @@ class EcoreSocketPanelAgent: public PanelAgentBase
 
     bool                                m_should_shared_ise;
     bool                                m_ise_exiting;
-    bool                                m_config_readonly;
 
     std::vector<Ecore_Fd_Handler*>     _read_handler_list;
 
@@ -108,8 +104,7 @@ public:
           m_should_exit(false),
           m_socket_timeout(scim_get_default_socket_timeout()),
           m_should_shared_ise(false),
-          m_ise_exiting(false),
-          m_config_readonly (false) {
+          m_ise_exiting(false) {
         m_socket_server.signal_connect_accept(slot(this, &EcoreSocketPanelAgent::socket_accept_callback));
         m_socket_server.signal_connect_receive(slot(this, &EcoreSocketPanelAgent::socket_receive_callback));
         m_socket_server.signal_connect_exception(slot(this, &EcoreSocketPanelAgent::socket_exception_callback));
@@ -127,13 +122,6 @@ public:
         m_info_manager = info_manager;
         m_socket_address = scim_get_default_panel_socket_address(display);
 
-        if (!_config.null ())
-            m_config_readonly = _config->read (String (SCIM_CONFIG_PANEL_SOCKET_CONFIG_READONLY), false);
-        else {
-            m_config_readonly = false;
-            LOGW("config is not ready");
-        }
-
         m_socket_server.shutdown();
 
         if (m_socket_server.create(SocketAddress(m_socket_address))) {
@@ -160,7 +148,6 @@ public:
         if (client.connect(SocketAddress(m_socket_address))) {
             client.close();
         }
-        _config.reset();
     }
 private:
     void update_panel_event(int client, uint32 context_id, int cmd, uint32 nType, uint32 nValue) {
@@ -2520,10 +2507,6 @@ private:
                         m_info_manager->socket_helper_update_property(client_id, property);
                     else
                         LOGW ("wrong format of transaction\n");
-#if 0 //only receives reload message by socketconfig
-                } else if (cmd == SCIM_TRANS_CMD_RELOAD_CONFIG) {
-                    m_info_manager->reload_config();
-#endif
                 } else if (cmd == ISM_TRANS_CMD_UPDATE_ISE_INPUT_CONTEXT) {
                     uint32 type;
                     uint32 value;
@@ -3032,401 +3015,6 @@ private:
             }
 
             socket_transaction_end();
-        } else if (client_info.type == CONFIG_CLIENT) {
-            socket_transaction_start ();
-            while (m_recv_trans.get_command (cmd)) {
-                LOGD ("PanelAgent::cmd = %d\n", cmd);
-
-                if (cmd == SCIM_TRANS_CMD_FLUSH_CONFIG) {
-                    if (m_config_readonly) {
-                        LOGW ("sorry config readonly");
-                        continue;
-                    }
-                    if (_config.null ()) {
-                        LOGW ("config is not ready");
-                        continue;
-                    }
-                    SCIM_DEBUG_FRONTEND (2) << " socket_flush_config.\n";
-
-                    _config->flush ();
-
-                } else if (cmd == SCIM_TRANS_CMD_ERASE_CONFIG) {
-
-                    String key;
-
-                    SCIM_DEBUG_FRONTEND (2) << " socket_erase_config.\n";
-
-                    if (m_recv_trans.get_data (key)) {
-
-                        SCIM_DEBUG_FRONTEND (3) << "  Key   (" << key << ").\n";
-                        if (m_config_readonly) {
-                            LOGW ("sorry config readonly");
-                            continue;
-                        }
-                        _config->erase (key);
-                    } else {
-                        LOGW ("wrong format of transaction\n");
-                        break;
-                    }
-                } else if (cmd == SCIM_TRANS_CMD_RELOAD_CONFIG) {
-
-                    SCIM_DEBUG_FRONTEND (2) << " socket_reload_config.\n";
-                    Socket client_socket (client_id);
-                    m_send_trans.clear ();
-                    m_send_trans.put_command (SCIM_TRANS_CMD_REPLY);
-
-                    if (_config.null ()) {
-                        LOGW ("config is not ready");
-                        m_send_trans.put_command (SCIM_TRANS_CMD_FAIL);
-                    } else {
-                        static timeval last_timestamp = {0, 0};
-
-                        timeval timestamp;
-
-                        gettimeofday (&timestamp, 0);
-
-                        if (timestamp.tv_sec >= last_timestamp.tv_sec)
-                            _config->reload ();
-
-                        gettimeofday (&last_timestamp, 0);
-                        m_send_trans.put_command (SCIM_TRANS_CMD_OK);
-                    }
-
-                    m_send_trans.write_to_socket (client_socket);
-
-                } else if (cmd == SCIM_TRANS_CMD_GET_CONFIG_STRING) {
-                    String key;
-
-                    SCIM_DEBUG_FRONTEND (2) << " socket_get_config_string.\n";
-
-                    if (m_recv_trans.get_data (key)) {
-                        String value;
-
-                        SCIM_DEBUG_FRONTEND (3) << "  Key (" << key << ").\n";
-                        Socket client_socket (client_id);
-                        m_send_trans.clear ();
-                        m_send_trans.put_command (SCIM_TRANS_CMD_REPLY);
-                        if (!_config.null () && _config->read (key, &value)) {
-                            m_send_trans.put_data (value);
-                            m_send_trans.put_command (SCIM_TRANS_CMD_OK);
-                        } else {
-                            m_send_trans.put_command (SCIM_TRANS_CMD_FAIL);
-                            LOGW ("read config key = %s faided\n", key.c_str());
-                        }
-                        m_send_trans.write_to_socket (client_socket);
-                    } else {
-                        LOGW ("wrong format of transaction\n");
-                        break;
-                    }
-                } else if (cmd == SCIM_TRANS_CMD_SET_CONFIG_STRING) {
-                    String key;
-                    String value;
-
-                    SCIM_DEBUG_FRONTEND (2) << " socket_set_config_string.\n";
-
-                    if (m_recv_trans.get_data (key) &&
-                        m_recv_trans.get_data (value)) {
-
-                        SCIM_DEBUG_FRONTEND (3) << "  Key   (" << key << ").\n";
-                        SCIM_DEBUG_FRONTEND (3) << "  Value (" << value << ").\n";
-                        if (m_config_readonly) {
-                            LOGW ("sorry config readonly");
-                            continue;
-                        }
-                        if (_config.null ()) {
-                            LOGW ("config is not ready");
-                            continue;
-                        }
-                        _config->write (key, value);
-                    } else {
-                        LOGW ("wrong format of transaction\n");
-                        break;
-                    }
-                } else if (cmd == SCIM_TRANS_CMD_GET_CONFIG_INT) {
-                    if (_config.null ()) {
-                        LOGW ("config not ready");
-                        break;
-                    }
-
-                    String key;
-
-                    SCIM_DEBUG_FRONTEND (2) << " socket_get_config_int.\n";
-
-                    if (m_recv_trans.get_data (key)) {
-
-                        SCIM_DEBUG_FRONTEND (3) << "  Key (" << key << ").\n";
-
-                        int value;
-                        Socket client_socket (client_id);
-                        m_send_trans.clear ();
-                        m_send_trans.put_command (SCIM_TRANS_CMD_REPLY);
-                        if (_config->read (key, &value)) {
-                            m_send_trans.put_data ((uint32) value);
-                            m_send_trans.put_command (SCIM_TRANS_CMD_OK);
-                        } else {
-                            m_send_trans.put_command (SCIM_TRANS_CMD_FAIL);
-                            LOGW ("read config key = %s faided\n", key.c_str());
-                        }
-                        m_send_trans.write_to_socket (client_socket);
-                    } else {
-                        LOGW ("wrong format of transaction\n");
-                        break;
-                    }
-
-                } else if (cmd == SCIM_TRANS_CMD_SET_CONFIG_INT) {
-
-                    String key;
-                    uint32 value;
-
-                    SCIM_DEBUG_FRONTEND (2) << " socket_set_config_int.\n";
-
-                    if (m_recv_trans.get_data (key) &&
-                        m_recv_trans.get_data (value)) {
-
-                        SCIM_DEBUG_FRONTEND (3) << "  Key   (" << key << ").\n";
-                        SCIM_DEBUG_FRONTEND (3) << "  Value (" << value << ").\n";
-                        if (m_config_readonly) {
-                            LOGW ("sorry config readonly");
-                            continue;
-                        }
-                        if (_config.null ()) {
-                            LOGW ("config is not ready");
-                            continue;
-                        }
-                        _config->write (key, (int) value);
-                    } else {
-                        LOGW ("wrong format of transaction\n");
-                        break;
-                    }
-
-                } else if (cmd == SCIM_TRANS_CMD_GET_CONFIG_BOOL) {
-
-                    String key;
-
-                    SCIM_DEBUG_FRONTEND (2) << " socket_get_config_bool.\n";
-
-                    if (m_recv_trans.get_data (key)) {
-                        bool value;
-
-                        SCIM_DEBUG_FRONTEND (3) << "  Key (" << key << ").\n";
-                        Socket client_socket (client_id);
-                        m_send_trans.clear ();
-                        m_send_trans.put_command (SCIM_TRANS_CMD_REPLY);
-
-                        if (!_config.null () && _config->read (key, &value)) {
-                            m_send_trans.put_data ((uint32) value);
-                            m_send_trans.put_command (SCIM_TRANS_CMD_OK);
-                        } else {
-                            m_send_trans.put_command (SCIM_TRANS_CMD_FAIL);
-                            LOGW ("read config key = %s faided\n", key.c_str());
-                        }
-                        m_send_trans.write_to_socket (client_socket);
-                    } else {
-                        LOGW ("wrong format of transaction\n");
-                        break;
-                    }
-
-                } else if (cmd == SCIM_TRANS_CMD_SET_CONFIG_BOOL) {
-
-                    String key;
-                    uint32 value;
-
-                    SCIM_DEBUG_FRONTEND (2) << " socket_set_config_bool.\n";
-
-                    if (m_recv_trans.get_data (key) &&
-                        m_recv_trans.get_data (value)) {
-
-                        SCIM_DEBUG_FRONTEND (3) << "  Key   (" << key << ").\n";
-                        SCIM_DEBUG_FRONTEND (3) << "  Value (" << value << ").\n";
-                        if (m_config_readonly) {
-                            LOGW ("sorry config readonly");
-                            continue;
-                        }
-                        if (_config.null ()) {
-                            LOGW ("config is not ready");
-                            continue;
-                        }
-                        _config->write (key, (bool) value);
-                    } else {
-                        LOGW ("wrong format of transaction\n");
-                        break;
-                    }
-
-                } else if (cmd == SCIM_TRANS_CMD_GET_CONFIG_DOUBLE) {
-                    String key;
-
-                    SCIM_DEBUG_FRONTEND (2) << " socket_get_config_double.\n";
-
-                    if (m_recv_trans.get_data (key)) {
-                        double value;
-
-                        SCIM_DEBUG_FRONTEND (3) << "  Key (" << key << ").\n";
-                        Socket client_socket (client_id);
-                        m_send_trans.clear ();
-                        m_send_trans.put_command (SCIM_TRANS_CMD_REPLY);
-
-                        if (!_config.null () && _config->read (key, &value)) {
-                            char buf [80];
-                            snprintf (buf, 79, "%lE", value);
-                            m_send_trans.put_data (String (buf));
-                            m_send_trans.put_command (SCIM_TRANS_CMD_OK);
-                        } else {
-                            m_send_trans.put_command (SCIM_TRANS_CMD_FAIL);
-                            LOGW ("read config key = %s faided\n", key.c_str());
-                        }
-                        m_send_trans.write_to_socket (client_socket);
-                    } else {
-                        LOGW ("wrong format of transaction\n");
-                        break;
-                    }
-
-                } else if (cmd == SCIM_TRANS_CMD_SET_CONFIG_DOUBLE) {
-
-                    String key;
-                    String str;
-
-                    SCIM_DEBUG_FRONTEND (2) << " socket_set_config_double.\n";
-
-                    if (m_recv_trans.get_data (key) &&
-                        m_recv_trans.get_data (str)) {
-                        double value;
-                        sscanf (str.c_str (), "%lE", &value);
-
-                        SCIM_DEBUG_FRONTEND (3) << "  Key   (" << key << ").\n";
-                        SCIM_DEBUG_FRONTEND (3) << "  Value (" << value << ").\n";
-                        if (m_config_readonly) {
-                            LOGW ("sorry config readonly");
-                            continue;
-                        }
-                        if (_config.null ()) {
-                            LOGW ("config is not ready");
-                            continue;
-                        }
-                        _config->write (key, value);
-                    } else {
-                        LOGW ("wrong format of transaction\n");
-                        break;
-                    }
-
-                } else if (cmd == SCIM_TRANS_CMD_GET_CONFIG_VECTOR_STRING) {
-
-                    String key;
-
-                    SCIM_DEBUG_FRONTEND (2) << " socket_get_config_vector_string.\n";
-
-                    if (m_recv_trans.get_data (key)) {
-                        std::vector <String> vec;
-
-                        SCIM_DEBUG_FRONTEND (3) << "  Key (" << key << ").\n";
-                        Socket client_socket (client_id);
-                        m_send_trans.clear ();
-                        m_send_trans.put_command (SCIM_TRANS_CMD_REPLY);
-
-                        if (!_config.null () && _config->read (key, &vec)) {
-                            m_send_trans.put_data (vec);
-                            m_send_trans.put_command (SCIM_TRANS_CMD_OK);
-                        } else {
-                            m_send_trans.put_command (SCIM_TRANS_CMD_FAIL);
-                            LOGW ("read config key = %s faided\n", key.c_str());
-                        }
-                        m_send_trans.write_to_socket (client_socket);
-                    } else {
-                        LOGW ("wrong format of transaction\n");
-                        break;
-                    }
-
-                } else if (cmd == SCIM_TRANS_CMD_SET_CONFIG_VECTOR_STRING) {
-
-                    String key;
-                    std::vector<String> vec;
-
-                    SCIM_DEBUG_FRONTEND (2) << " socket_set_config_vector_string.\n";
-
-                    if (m_recv_trans.get_data (key) &&
-                        m_recv_trans.get_data (vec)) {
-
-                        SCIM_DEBUG_FRONTEND (3) << "  Key (" << key << ").\n";
-                        if (m_config_readonly) {
-                            LOGW ("sorry config readonly");
-                            continue;
-                        }
-                        if (_config.null ()) {
-                            LOGW ("config is not ready");
-                            continue;
-                        }
-                        _config->write (key, vec);
-                    } else {
-                        LOGW ("wrong format of transaction\n");
-                        break;
-                    }
-
-                } else if (cmd == SCIM_TRANS_CMD_GET_CONFIG_VECTOR_INT) {
-
-                    String key;
-
-                    SCIM_DEBUG_FRONTEND (2) << " socket_get_config_vector_int.\n";
-
-                    if (m_recv_trans.get_data (key)) {
-                        std::vector <int> vec;
-
-                        SCIM_DEBUG_FRONTEND (3) << "  Key (" << key << ").\n";
-                        Socket client_socket (client_id);
-                        m_send_trans.clear ();
-                        m_send_trans.put_command (SCIM_TRANS_CMD_REPLY);
-
-                        if (!_config.null () && _config->read (key, &vec)) {
-                            std::vector <uint32> reply;
-
-                            for (uint32 i=0; i<vec.size (); ++i)
-                                reply.push_back ((uint32) vec[i]);
-
-                            m_send_trans.put_data (reply);
-                            m_send_trans.put_command (SCIM_TRANS_CMD_OK);
-                        } else {
-                            m_send_trans.put_command (SCIM_TRANS_CMD_FAIL);
-                            LOGW ("read config key = %s faided\n", key.c_str());
-                        }
-                        m_send_trans.write_to_socket (client_socket);
-
-                    } else {
-                        LOGW ("wrong format of transaction\n");
-                        break;
-                    }
-
-                } else if (cmd == SCIM_TRANS_CMD_SET_CONFIG_VECTOR_INT) {
-
-                    String key;
-                    std::vector<uint32> vec;
-
-                    SCIM_DEBUG_FRONTEND (2) << " socket_set_config_vector_int.\n";
-
-                    if (m_recv_trans.get_data (key) &&
-                        m_recv_trans.get_data (vec)) {
-                        if (m_config_readonly) {
-                            LOGW ("sorry config readonly");
-                            continue;
-                        }
-                        if (_config.null ()) {
-                            LOGW ("config is not ready");
-                            continue;
-                        }
-                        std::vector<int> req;
-
-                        SCIM_DEBUG_FRONTEND (3) << "  Key (" << key << ").\n";
-
-                        for (uint32 i=0; i<vec.size (); ++i)
-                            req.push_back ((int) vec[i]);
-
-                        _config->write (key, req);
-                    } else {
-                        LOGW ("wrong format of transaction\n");
-                        break;
-                    }
-
-                }
-            }
-
-            socket_transaction_end ();
         }
     }
 
@@ -3525,7 +3113,6 @@ extern "C" {
     EXAPI void scim_panel_agent_module_init(const scim::ConfigPointer& config)
     {
         LOGD ("");
-        scim::_config = config;
     }
 
     EXAPI scim::PanelAgentPointer scim_panel_agent_module_get_instance()
diff --git a/ism/modules/panelagent/socketconfigserver/Makefile.am b/ism/modules/panelagent/socketconfigserver/Makefile.am
new file mode 100644 (file)
index 0000000..6ac0b5f
--- /dev/null
@@ -0,0 +1,47 @@
+MAINTAINERCLEANFILES = Makefile.in
+CLEANFILES           = *.bak *.edj
+EXTRA_DIST             = socketconfigserver.version-script
+
+AM_CPPFLAGS = -I$(top_builddir) \
+           -I$(top_builddir)/ism/src \
+           -I$(top_srcdir) \
+           -I$(top_srcdir)/ism/src \
+           -I$(top_srcdir)/ism/intl \
+           -I$(top_srcdir)/ism/data \
+           -I$(top_srcdir)/ism/utils \
+           -I$(includedir) \
+           -DSCIM_DATADIR=\"@SCIM_DATADIR@\" \
+           -DSCIM_LOCALEDIR=\"@SCIM_LOCALEDIR@\" \
+           -DSCIM_SYSCONFDIR=\"@SCIM_SYSCONFDIR@\" \
+           -DSCIM_LIBEXECDIR=\"@SCIM_LIBEXECDIR@\" \
+           -DSCIM_ICONDIR=\"@SCIM_ICONDIR@\" \
+           -DSCIM_MODULE_PATH=\"@SCIM_MODULE_PATH@\" \
+           -DSCIM_TEMPDIR=\"@SCIM_TEMPDIR@\"
+
+noinst_HEADERS =
+
+
+CONFIG_SOCKETCONFIGSERVER_PANELAGENT_MODULE  = socket_config_server.la
+
+
+if SCIM_LD_VERSION_SCRIPT
+LD_VERSION_SCRIPT_OPTION="-Wl,--version-script=$(srcdir)/socketconfigserver.version-script"
+endif
+
+moduledir              = @SCIM_MODULE_PATH@/$(SCIM_BINARY_VERSION)/PanelAgent
+module_LTLIBRARIES     = $(CONFIG_SOCKETCONFIGSERVER_PANELAGENT_MODULE)
+
+socket_config_server_la_SOURCES  = socket_config_server_panel_agent_module.cpp
+
+socket_config_server_la_CXXFLAGS = @DLOG_CFLAGS@ @ECORE_CFLAGS@
+
+socket_config_server_la_LDFLAGS  = -avoid-version \
+                         -rpath $(moduledir) \
+                         -module \
+                         $(LD_VERSION_SCRIPT_OPTION) \
+                         @LIBTOOL_EXPORT_OPTIONS@ \
+                         @LTLIBINTL@ \
+                         @DLOG_LIBS@ \
+                         @ECORE_LIBS@
+
+socket_config_server_la_LIBADD    = $(top_builddir)/ism/src/libscim@SCIM_EPOCH@.la
diff --git a/ism/modules/panelagent/socketconfigserver/socket_config_server_panel_agent_module.cpp b/ism/modules/panelagent/socketconfigserver/socket_config_server_panel_agent_module.cpp
new file mode 100644 (file)
index 0000000..60e5ed8
--- /dev/null
@@ -0,0 +1,814 @@
+/*
+ * ISF(Input Service Framework)
+ *
+ * ISF is based on SCIM 1.4.7 and extended for supporting more mobile fitable.
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ *
+ * Contact: Li Zhang <li2012.zhang@samsung.com>
+ *
+ * This library is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU Lesser General Public License as published by the
+ * Free Software Foundation; either version 2.1 of the License, or (at your option)
+ * any later version.
+ *
+ * This library is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
+ * License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this library; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ */
+
+#define Uses_SCIM_TRANSACTION
+#define Uses_SCIM_TRANS_COMMANDS
+#define Uses_SCIM_PANEL_AGENT
+#define Uses_SCIM_SOCKET
+#define Uses_SCIM_EVENT
+#define Uses_SCIM_CONFIG
+#define Uses_SCIM_CONFIG_MODULE
+#define Uses_SCIM_CONFIG_PATH
+#define Uses_SCIM_UTILITY
+
+#include <string.h>
+#include <sys/types.h>
+#include <sys/times.h>
+#include <dlog.h>
+#include <unistd.h>
+#include <Ecore.h>
+#include "scim_private.h"
+#include "scim.h"
+#include "scim_stl_map.h"
+
+#ifdef LOG_TAG
+# undef LOG_TAG
+#endif
+#define LOG_TAG             "ISF_SOCKET_CONFIG_SERVER_MODULE"
+
+#define SCIM_CONFIG_PANEL_SOCKET_CONFIG_READONLY    "/Panel/Socket/ConfigReadOnly"
+
+
+namespace scim
+{
+
+#if SCIM_USE_STL_EXT_HASH_MAP
+typedef __gnu_cxx::hash_map <int, ClientInfo, __gnu_cxx::hash <int> >       ClientRepository;
+#elif SCIM_USE_STL_HASH_MAP
+typedef std::hash_map <int, ClientInfo, std::hash <int> >                   ClientRepository;
+#else
+typedef std::map <int, ClientInfo>                                          ClientRepository;
+#endif
+
+
+#define scim_module_init socketconfigserver_LTX_scim_module_init
+#define scim_module_exit socketconfigserver_LTX_scim_module_exit
+#define scim_panel_agent_module_init socketconfigserver_LTX_scim_panel_agent_module_init
+#define scim_panel_agent_module_get_instance socketconfigserver_LTX_scim_panel_agent_module_get_instance
+
+
+static ConfigPointer        _config;
+
+
+class SocketConfigServerPanelAgent: public PanelAgentBase
+{
+    bool                                m_should_exit;
+
+    int                                 m_socket_timeout;
+    String                              m_socket_address;
+    SocketServer                        m_socket_server;
+
+    Transaction                         m_send_trans;
+    Transaction                         m_recv_trans;
+
+    bool                                m_ise_exiting;
+    bool                                m_config_readonly;
+
+    ClientRepository                    m_clients;
+    std::vector<Ecore_Fd_Handler*>     _read_handler_list;
+    Connection                          m_config_connection;
+
+public:
+    SocketConfigServerPanelAgent ()
+        : PanelAgentBase ("socket_config_server"),
+          m_should_exit (false),
+          m_socket_timeout (scim_get_default_socket_timeout ()),
+          m_ise_exiting (false),
+          m_config_readonly (false) {
+        m_socket_server.signal_connect_accept (slot (this, &SocketConfigServerPanelAgent::socket_accept_callback));
+        m_socket_server.signal_connect_receive (slot (this, &SocketConfigServerPanelAgent::socket_receive_callback));
+        m_socket_server.signal_connect_exception (slot (this, &SocketConfigServerPanelAgent::socket_exception_callback));
+    }
+
+    ~SocketConfigServerPanelAgent () {
+        for (unsigned int ii = 0; ii < _read_handler_list.size (); ++ii) {
+            ecore_main_fd_handler_del (_read_handler_list[ii]);
+        }
+        _read_handler_list.clear ();
+    }
+
+    bool initialize (InfoManager* info_manager, const String& display, bool resident) {
+        LOGD ("");
+        m_socket_address = scim_get_default_socket_config_address ();
+
+        if (!_config.null ())
+            m_config_readonly = _config->read (String (SCIM_CONFIG_PANEL_SOCKET_CONFIG_READONLY), false);
+        else {
+            m_config_readonly = false;
+            LOGW ("config is not ready");
+        }
+
+        m_config_connection = _config->signal_connect_reload (slot (this, &SocketConfigServerPanelAgent::reload_config_callback));
+
+        m_socket_server.shutdown ();
+
+        if (m_socket_server.create (SocketAddress (m_socket_address))) {
+            Ecore_Fd_Handler* panel_agent_read_handler = ecore_main_fd_handler_add (m_socket_server.get_id (), ECORE_FD_READ, panel_agent_handler, this, NULL, NULL);
+            _read_handler_list.push_back (panel_agent_read_handler);
+            return true;
+        }
+
+        LOGE ("create socketconfig server failed\n");
+        return false;
+    }
+
+    bool valid (void) const {
+        return m_socket_server.valid ();
+    }
+
+    void stop (void) {
+        SCIM_DEBUG_MAIN(1) << "PanelAgent::stop ()\n";
+        LOGD ("");
+        m_config_connection.disconnect ();
+        lock ();
+        m_should_exit = true;
+        unlock ();
+        SocketClient  client;
+        if (client.connect (SocketAddress (m_socket_address))) {
+            client.close ();
+        }
+        m_socket_server.shutdown ();
+        m_clients.clear ();
+        _config.reset ();
+    }
+private:
+
+    void reload_config_callback (const ConfigPointer &config) {
+
+        SCIM_DEBUG_MAIN(1) << "PanelAgent::reload_config ()\n";
+        LOGD ("");
+        for (unsigned int ii = 0; ii < _read_handler_list.size (); ++ii) {
+
+            m_send_trans.clear ();
+            m_send_trans.put_command (SCIM_TRANS_CMD_REPLY);
+            m_send_trans.put_command (SCIM_TRANS_CMD_RELOAD_CONFIG);
+
+            Socket client_socket (ecore_main_fd_handler_fd_get (_read_handler_list[ii]));
+            m_send_trans.write_to_socket (client_socket);
+        }
+    }
+
+private:
+
+    bool socket_check_client_connection (const Socket& client) {
+        SCIM_DEBUG_MAIN(3) << "PanelAgent::socket_check_client_connection (" << client.get_id () << ")\n";
+
+        unsigned char buf [sizeof(uint32)];
+
+        int nbytes = client.read_with_timeout (buf, sizeof(uint32), m_socket_timeout);
+
+        if (nbytes == sizeof(uint32))
+            return true;
+
+        if (nbytes < 0) {
+            LOGW ("Error occurred when reading socket: %s\n", client.get_error_message ().c_str());
+        } else {
+            LOGW ("Timeout when reading socket\n");
+        }
+
+        return false;
+    }
+
+    /**
+     * @brief Callback function for ecore fd handler.
+     *
+     * @param data The data to pass to this callback.
+     * @param fd_handler The ecore fd handler.
+     *
+     * @return ECORE_CALLBACK_RENEW
+     */
+    static Eina_Bool panel_agent_handler (void* data, Ecore_Fd_Handler* fd_handler) {
+        if (fd_handler == NULL || data == NULL)
+            return ECORE_CALLBACK_RENEW;
+
+        SocketConfigServerPanelAgent* _agent = (SocketConfigServerPanelAgent*)data;
+
+        int fd = ecore_main_fd_handler_fd_get (fd_handler);
+
+        for (unsigned int i = 0; i < _agent->_read_handler_list.size (); i++) {
+            if (fd_handler == _agent->_read_handler_list [i]) {
+                if (!_agent->filter_event (fd)) {
+                    std::cerr << "_panel_agent->filter_event () is failed!!!\n";
+                    ::close (fd);
+                    ecore_main_fd_handler_del (fd_handler);
+
+                    ISF_SAVE_LOG ("_panel_agent->filter_event (fd=%d) is failed!!!\n", fd);
+                }
+
+                return ECORE_CALLBACK_RENEW;
+            }
+        }
+
+        std::cerr << "panel_agent_handler () has received exception event!!!\n";
+        _agent->filter_exception_event (fd);
+        ::close (fd);
+        ecore_main_fd_handler_del (fd_handler);
+
+        ISF_SAVE_LOG ("Received exception event (fd=%d)!!!\n", fd);
+        return ECORE_CALLBACK_RENEW;
+    }
+
+    void socket_accept_callback (SocketServer*   server,
+                                 const Socket&   client) {
+        SCIM_DEBUG_MAIN(2) << "PanelAgent::socket_accept_callback (" << client.get_id () << ")\n";
+        LOGD ("");
+        lock ();
+
+        if (m_should_exit) {
+            SCIM_DEBUG_MAIN (3) << "Exit Socket Server Thread.\n";
+            server->shutdown();
+        } else {
+            //m_signal_accept_connection (client.get_id ());
+            Ecore_Fd_Handler* panel_agent_read_handler = ecore_main_fd_handler_add (client.get_id (), ECORE_FD_READ, panel_agent_handler, this, NULL, NULL);
+            _read_handler_list.push_back (panel_agent_read_handler);
+        }
+
+        unlock ();
+    }
+
+    void socket_receive_callback (SocketServer*   server,
+                                  const Socket&   client) {
+        int     client_id = client.get_id ();
+        int     cmd     = 0;
+        uint32  key     = 0;
+
+        ClientInfo client_info;
+
+        SCIM_DEBUG_MAIN(1) << "PanelAgent::socket_receive_callback (" << client_id << ")\n";
+
+        /* If the connection is closed then close this client. */
+        if (!socket_check_client_connection (client)) {
+            LOGW ("check client connection failed\n");
+            socket_close_connection (server, client);
+            return;
+        }
+
+        ClientRepository::iterator it = m_clients.find (client.get_id ());
+        if (it == m_clients.end ()) {
+            socket_open_connection (server, client);
+            return;
+        } else
+            client_info = it->second;
+
+        /* If can not read the transaction,
+         * or the transaction is not started with SCIM_TRANS_CMD_REQUEST,
+         * or the key is mismatch,
+         * just return. */
+        if (!m_recv_trans.read_from_socket (client, m_socket_timeout) ||
+            !m_recv_trans.get_command (cmd) || cmd != SCIM_TRANS_CMD_REQUEST ||
+            !m_recv_trans.get_data (key)    || key != (uint32) client_info.key) {
+            LOGW ("cmd:%d key:%d client info key: %d\n", cmd, key, client_info.key);
+            return;
+        }
+
+        {
+            socket_transaction_start ();
+            while (m_recv_trans.get_command (cmd)) {
+                LOGD ("PanelAgent::cmd = %d\n", cmd);
+
+                if (cmd == SCIM_TRANS_CMD_FLUSH_CONFIG) {
+                    if (m_config_readonly) {
+                        LOGW ("sorry config readonly");
+                        continue;
+                    }
+                    if (_config.null ()) {
+                        LOGW ("config is not ready");
+                        continue;
+                    }
+                    SCIM_DEBUG_FRONTEND (2) << " socket_flush_config.\n";
+
+                    _config->flush ();
+
+                } else if (cmd == SCIM_TRANS_CMD_ERASE_CONFIG) {
+
+                    String key;
+
+                    SCIM_DEBUG_FRONTEND (2) << " socket_erase_config.\n";
+
+                    if (m_recv_trans.get_data (key)) {
+
+                        SCIM_DEBUG_FRONTEND (3) << "  Key   (" << key << ").\n";
+                        if (m_config_readonly) {
+                            LOGW ("sorry config readonly");
+                            continue;
+                        }
+                        _config->erase (key);
+                    } else {
+                        LOGW ("wrong format of transaction\n");
+                        break;
+                    }
+                } else if (cmd == SCIM_TRANS_CMD_RELOAD_CONFIG) {
+
+                    SCIM_DEBUG_FRONTEND (2) << " socket_reload_config.\n";
+                    Socket client_socket (client_id);
+                    m_send_trans.clear ();
+                    m_send_trans.put_command (SCIM_TRANS_CMD_REPLY);
+
+                    if (_config.null ()) {
+                        LOGW ("config is not ready");
+                        m_send_trans.put_command (SCIM_TRANS_CMD_FAIL);
+                    } else {
+                        static timeval last_timestamp = {0, 0};
+
+                        timeval timestamp;
+
+                        gettimeofday (&timestamp, 0);
+
+                        if (timestamp.tv_sec >= last_timestamp.tv_sec)
+                            _config->reload ();
+
+                        gettimeofday (&last_timestamp, 0);
+                        m_send_trans.put_command (SCIM_TRANS_CMD_OK);
+                    }
+
+                    m_send_trans.write_to_socket (client_socket);
+
+                } else if (cmd == SCIM_TRANS_CMD_GET_CONFIG_STRING) {
+                    String key;
+
+                    SCIM_DEBUG_FRONTEND (2) << " socket_get_config_string.\n";
+
+                    if (m_recv_trans.get_data (key)) {
+                        String value;
+
+                        SCIM_DEBUG_FRONTEND (3) << "  Key (" << key << ").\n";
+                        Socket client_socket (client_id);
+                        m_send_trans.clear ();
+                        m_send_trans.put_command (SCIM_TRANS_CMD_REPLY);
+                        if (!_config.null () && _config->read (key, &value)) {
+                            LOGD ("get %s:%s", key.c_str (), value.c_str ());
+                            m_send_trans.put_data (value);
+                            m_send_trans.put_command (SCIM_TRANS_CMD_OK);
+                        } else {
+                            m_send_trans.put_command (SCIM_TRANS_CMD_FAIL);
+                            LOGW ("read config key = %s faided\n", key.c_str ());
+                        }
+                        m_send_trans.write_to_socket (client_socket);
+                    } else {
+                        LOGW ("wrong format of transaction\n");
+                        break;
+                    }
+                } else if (cmd == SCIM_TRANS_CMD_SET_CONFIG_STRING) {
+                    String key;
+                    String value;
+
+                    SCIM_DEBUG_FRONTEND (2) << " socket_set_config_string.\n";
+
+                    if (m_recv_trans.get_data (key) &&
+                        m_recv_trans.get_data (value)) {
+
+                        SCIM_DEBUG_FRONTEND (3) << "  Key   (" << key << ").\n";
+                        SCIM_DEBUG_FRONTEND (3) << "  Value (" << value << ").\n";
+                        if (m_config_readonly) {
+                            LOGW ("sorry config readonly");
+                            continue;
+                        }
+                        if (_config.null ()) {
+                            LOGW ("config is not ready");
+                            continue;
+                        }
+                        LOGD ("set %s:%s", key.c_str (), value.c_str ());
+                        _config->write (key, value);
+                    } else {
+                        LOGW ("wrong format of transaction\n");
+                        break;
+                    }
+                } else if (cmd == SCIM_TRANS_CMD_GET_CONFIG_INT) {
+                    if (_config.null ()) {
+                        LOGW ("config not ready");
+                        break;
+                    }
+
+                    String key;
+
+                    SCIM_DEBUG_FRONTEND (2) << " socket_get_config_int.\n";
+
+                    if (m_recv_trans.get_data (key)) {
+
+                        SCIM_DEBUG_FRONTEND (3) << "  Key (" << key << ").\n";
+
+                        int value;
+                        Socket client_socket (client_id);
+                        m_send_trans.clear ();
+                        m_send_trans.put_command (SCIM_TRANS_CMD_REPLY);
+                        if (_config->read (key, &value)) {
+                            LOGD ("get %s:%d", key.c_str (), value);
+                            m_send_trans.put_data ((uint32) value);
+                            m_send_trans.put_command (SCIM_TRANS_CMD_OK);
+                        } else {
+                            m_send_trans.put_command (SCIM_TRANS_CMD_FAIL);
+                            LOGW ("read config key = %s faided\n", key.c_str ());
+                        }
+                        m_send_trans.write_to_socket (client_socket);
+                    } else {
+                        LOGW ("wrong format of transaction\n");
+                        break;
+                    }
+
+                } else if (cmd == SCIM_TRANS_CMD_SET_CONFIG_INT) {
+
+                    String key;
+                    uint32 value;
+
+                    SCIM_DEBUG_FRONTEND (2) << " socket_set_config_int.\n";
+
+                    if (m_recv_trans.get_data (key) &&
+                        m_recv_trans.get_data (value)) {
+
+                        SCIM_DEBUG_FRONTEND (3) << "  Key   (" << key << ").\n";
+                        SCIM_DEBUG_FRONTEND (3) << "  Value (" << value << ").\n";
+                        if (m_config_readonly) {
+                            LOGW ("sorry config readonly");
+                            continue;
+                        }
+                        if (_config.null ()) {
+                            LOGW ("config is not ready");
+                            continue;
+                        }
+                        LOGD ("set %s:%d", key.c_str (), value);
+                        _config->write (key, (int) value);
+                    } else {
+                        LOGW ("wrong format of transaction\n");
+                        break;
+                    }
+
+                } else if (cmd == SCIM_TRANS_CMD_GET_CONFIG_BOOL) {
+
+                    String key;
+
+                    SCIM_DEBUG_FRONTEND (2) << " socket_get_config_bool.\n";
+
+                    if (m_recv_trans.get_data (key)) {
+                        bool value;
+
+                        SCIM_DEBUG_FRONTEND (3) << "  Key (" << key << ").\n";
+                        Socket client_socket (client_id);
+                        m_send_trans.clear ();
+                        m_send_trans.put_command (SCIM_TRANS_CMD_REPLY);
+
+                        if (!_config.null () && _config->read (key, &value)) {
+                            m_send_trans.put_data ((uint32) value);
+                            m_send_trans.put_command (SCIM_TRANS_CMD_OK);
+                        } else {
+                            m_send_trans.put_command (SCIM_TRANS_CMD_FAIL);
+                            LOGW ("read config key = %s faided\n", key.c_str ());
+                        }
+                        m_send_trans.write_to_socket (client_socket);
+                    } else {
+                        LOGW ("wrong format of transaction\n");
+                        break;
+                    }
+
+                } else if (cmd == SCIM_TRANS_CMD_SET_CONFIG_BOOL) {
+
+                    String key;
+                    uint32 value;
+
+                    SCIM_DEBUG_FRONTEND (2) << " socket_set_config_bool.\n";
+
+                    if (m_recv_trans.get_data (key) &&
+                        m_recv_trans.get_data (value)) {
+
+                        SCIM_DEBUG_FRONTEND (3) << "  Key   (" << key << ").\n";
+                        SCIM_DEBUG_FRONTEND (3) << "  Value (" << value << ").\n";
+                        if (m_config_readonly) {
+                            LOGW ("sorry config readonly");
+                            continue;
+                        }
+                        if (_config.null ()) {
+                            LOGW ("config is not ready");
+                            continue;
+                        }
+                        _config->write (key, (bool) value);
+                    } else {
+                        LOGW ("wrong format of transaction\n");
+                        break;
+                    }
+
+                } else if (cmd == SCIM_TRANS_CMD_GET_CONFIG_DOUBLE) {
+                    String key;
+
+                    SCIM_DEBUG_FRONTEND (2) << " socket_get_config_double.\n";
+
+                    if (m_recv_trans.get_data (key)) {
+                        double value;
+
+                        SCIM_DEBUG_FRONTEND (3) << "  Key (" << key << ").\n";
+                        Socket client_socket (client_id);
+                        m_send_trans.clear ();
+                        m_send_trans.put_command (SCIM_TRANS_CMD_REPLY);
+
+                        if (!_config.null () && _config->read (key, &value)) {
+                            char buf [80];
+                            snprintf (buf, 79, "%lE", value);
+                            m_send_trans.put_data (String (buf));
+                            m_send_trans.put_command (SCIM_TRANS_CMD_OK);
+                        } else {
+                            m_send_trans.put_command (SCIM_TRANS_CMD_FAIL);
+                            LOGW ("read config key = %s faided\n", key.c_str());
+                        }
+                        m_send_trans.write_to_socket (client_socket);
+                    } else {
+                        LOGW ("wrong format of transaction\n");
+                        break;
+                    }
+
+                } else if (cmd == SCIM_TRANS_CMD_SET_CONFIG_DOUBLE) {
+
+                    String key;
+                    String str;
+
+                    SCIM_DEBUG_FRONTEND (2) << " socket_set_config_double.\n";
+
+                    if (m_recv_trans.get_data (key) &&
+                        m_recv_trans.get_data (str)) {
+                        double value;
+                        sscanf (str.c_str (), "%lE", &value);
+
+                        SCIM_DEBUG_FRONTEND (3) << "  Key   (" << key << ").\n";
+                        SCIM_DEBUG_FRONTEND (3) << "  Value (" << value << ").\n";
+                        if (m_config_readonly) {
+                            LOGW ("sorry config readonly");
+                            continue;
+                        }
+                        if (_config.null ()) {
+                            LOGW ("config is not ready");
+                            continue;
+                        }
+                        _config->write (key, value);
+                    } else {
+                        LOGW ("wrong format of transaction\n");
+                        break;
+                    }
+
+                } else if (cmd == SCIM_TRANS_CMD_GET_CONFIG_VECTOR_STRING) {
+
+                    String key;
+
+                    SCIM_DEBUG_FRONTEND (2) << " socket_get_config_vector_string.\n";
+
+                    if (m_recv_trans.get_data (key)) {
+                        std::vector <String> vec;
+
+                        SCIM_DEBUG_FRONTEND (3) << "  Key (" << key << ").\n";
+                        Socket client_socket (client_id);
+                        m_send_trans.clear ();
+                        m_send_trans.put_command (SCIM_TRANS_CMD_REPLY);
+
+                        if (!_config.null () && _config->read (key, &vec)) {
+                            m_send_trans.put_data (vec);
+                            m_send_trans.put_command (SCIM_TRANS_CMD_OK);
+                        } else {
+                            m_send_trans.put_command (SCIM_TRANS_CMD_FAIL);
+                            LOGW ("read config key = %s faided\n", key.c_str());
+                        }
+                        m_send_trans.write_to_socket (client_socket);
+                    } else {
+                        LOGW ("wrong format of transaction\n");
+                        break;
+                    }
+
+                } else if (cmd == SCIM_TRANS_CMD_SET_CONFIG_VECTOR_STRING) {
+
+                    String key;
+                    std::vector<String> vec;
+
+                    SCIM_DEBUG_FRONTEND (2) << " socket_set_config_vector_string.\n";
+
+                    if (m_recv_trans.get_data (key) &&
+                        m_recv_trans.get_data (vec)) {
+
+                        SCIM_DEBUG_FRONTEND (3) << "  Key (" << key << ").\n";
+                        if (m_config_readonly) {
+                            LOGW ("sorry config readonly");
+                            continue;
+                        }
+                        if (_config.null ()) {
+                            LOGW ("config is not ready");
+                            continue;
+                        }
+                        _config->write (key, vec);
+                    } else {
+                        LOGW ("wrong format of transaction\n");
+                        break;
+                    }
+
+                } else if (cmd == SCIM_TRANS_CMD_GET_CONFIG_VECTOR_INT) {
+
+                    String key;
+
+                    SCIM_DEBUG_FRONTEND (2) << " socket_get_config_vector_int.\n";
+
+                    if (m_recv_trans.get_data (key)) {
+                        std::vector <int> vec;
+
+                        SCIM_DEBUG_FRONTEND (3) << "  Key (" << key << ").\n";
+                        Socket client_socket (client_id);
+                        m_send_trans.clear ();
+                        m_send_trans.put_command (SCIM_TRANS_CMD_REPLY);
+
+                        if (!_config.null () && _config->read (key, &vec)) {
+                            std::vector <uint32> reply;
+
+                            for (uint32 i=0; i < vec.size (); ++i)
+                                reply.push_back ((uint32) vec[i]);
+
+                            m_send_trans.put_data (reply);
+                            m_send_trans.put_command (SCIM_TRANS_CMD_OK);
+                        } else {
+                            m_send_trans.put_command (SCIM_TRANS_CMD_FAIL);
+                            LOGW ("read config key = %s faided\n", key.c_str());
+                        }
+                        m_send_trans.write_to_socket (client_socket);
+
+                    } else {
+                        LOGW ("wrong format of transaction\n");
+                        break;
+                    }
+
+                } else if (cmd == SCIM_TRANS_CMD_SET_CONFIG_VECTOR_INT) {
+
+                    String key;
+                    std::vector<uint32> vec;
+
+                    SCIM_DEBUG_FRONTEND (2) << " socket_set_config_vector_int.\n";
+
+                    if (m_recv_trans.get_data (key) &&
+                        m_recv_trans.get_data (vec)) {
+                        if (m_config_readonly) {
+                            LOGW ("sorry config readonly");
+                            continue;
+                        }
+                        if (_config.null ()) {
+                            LOGW ("config is not ready");
+                            continue;
+                        }
+                        std::vector<int> req;
+
+                        SCIM_DEBUG_FRONTEND (3) << "  Key (" << key << ").\n";
+
+                        for (uint32 i=0; i < vec.size (); ++i)
+                            req.push_back ((int) vec[i]);
+
+                        _config->write (key, req);
+                    } else {
+                        LOGW ("wrong format of transaction\n");
+                        break;
+                    }
+
+                }
+            }
+
+            socket_transaction_end ();
+        }
+    }
+
+    void socket_exception_callback (SocketServer*   server,
+                                    const Socket&   client) {
+        SCIM_DEBUG_MAIN(2) << "PanelAgent::socket_exception_callback (" << client.get_id() << ")\n";
+        LOGD ("client id:%d\n", client.get_id ());
+        socket_close_connection (server, client);
+    }
+
+    bool socket_open_connection (SocketServer*   server,
+                                 const Socket&   client) {
+        SCIM_DEBUG_MAIN(3) << "PanelAgent::socket_open_connection (" << client.get_id() << ")\n";
+        LOGD ("client id:%d\n", client.get_id());
+        uint32 key;
+        String type = scim_socket_accept_connection (key,
+                      String ("Panel"),
+                      String ("SocketConfig"),
+                      client,
+                      m_socket_timeout);
+
+        SCIM_DEBUG_MAIN (3) << "type = " << type << "\n";
+        if (type.length ()) {
+            ClientInfo info;
+            info.key = key;
+            info.type = CONFIG_CLIENT;
+            m_clients [client.get_id ()] = info;
+            return true;
+        }
+        LOGW ("open_connection failed\n");
+
+        SCIM_DEBUG_MAIN(4) << "Close client connection " << client.get_id () << "\n";
+        server->close_connection (client);
+        return false;
+    }
+
+    void socket_close_connection (SocketServer*   server,
+                                  const Socket&   client) {
+        SCIM_DEBUG_MAIN(3) << "PanelAgent::socket_close_connection (" << client.get_id () << ")\n";
+        LOGD ("client id:%d\n", client.get_id ());
+
+        ClientRepository::iterator it = m_clients.find (client.get_id ());
+        if (it != m_clients.end ())
+            m_clients.erase (client.get_id ());
+
+        int i = 0;
+        std::vector<Ecore_Fd_Handler *>::iterator IterPos;
+
+        for (IterPos = _read_handler_list.begin (); IterPos != _read_handler_list.end (); ++IterPos,++i) {
+            if (ecore_main_fd_handler_fd_get (_read_handler_list[i]) == client.get_id ()) {
+                ecore_main_fd_handler_del (_read_handler_list[i]);
+                ::close (client.get_id ());
+                _read_handler_list.erase (IterPos);
+                break;
+            }
+        }
+        LOGD ("client:%d , read handler: %d", m_clients.size (), _read_handler_list.size ());
+    }
+
+    bool filter_event (int fd) {
+        SCIM_DEBUG_MAIN(1) << "PanelAgent::filter_event ()\n";
+
+        return m_socket_server.filter_event (fd);
+    }
+
+    bool filter_exception_event (int fd) {
+        SCIM_DEBUG_MAIN(1) << "PanelAgent::filter_exception_event ()\n";
+
+        return m_socket_server.filter_exception_event (fd);
+    }
+
+    void socket_transaction_start (void) {
+        //m_signal_transaction_start ();
+    }
+
+    void socket_transaction_end (void) {
+        //m_signal_transaction_end ();
+    }
+
+    void lock (void) {
+        //m_signal_lock ();
+    }
+    void unlock (void) {
+        //m_signal_unlock ();
+    }
+};
+
+} /* namespace scim */
+
+/***************************************************/
+/*** Beginning of panel agent interface for ISF ***/
+/***************************************************/
+static scim::PanelAgentPointer instance;
+
+extern "C" {
+
+    EXAPI void scim_module_init (void)
+    {
+    }
+
+    EXAPI void scim_module_exit (void)
+    {
+        instance.reset ();
+    }
+
+    EXAPI void scim_panel_agent_module_init (const scim::ConfigPointer& config)
+    {
+        LOGD ("");
+        scim::_config = config;
+    }
+
+    EXAPI scim::PanelAgentPointer scim_panel_agent_module_get_instance ()
+    {
+        scim::PanelAgentBase* _instance = NULL;
+        if (instance.null ()) {
+            try {
+                _instance = new scim::SocketConfigServerPanelAgent ();
+            } catch (...) {
+                delete _instance;
+                _instance = NULL;
+            }
+            if (_instance)
+                instance = _instance;
+        }
+        return instance;
+    }
+}
+
+/*
+vi:ts=4:nowrap:ai:expandtab
+*/
diff --git a/ism/modules/panelagent/socketconfigserver/socketconfigserver.version-script b/ism/modules/panelagent/socketconfigserver/socketconfigserver.version-script
new file mode 100644 (file)
index 0000000..da27a4c
--- /dev/null
@@ -0,0 +1,16 @@
+SCIM_IMENGINE_1.0 {
+    global:
+        extern "C" {
+            *scim_panel_agent_module_create_instance*;
+            *scim_panel_agent_module_init*;
+            *scim_module_exit*;
+            *scim_module_init*;
+        };
+
+    local:
+        extern "C++" {
+            scim::*;
+            std::*;
+            __gnu_cxx::*;
+        };
+};
index 9e3115b..953147b 100644 (file)
@@ -191,20 +191,12 @@ static void     _update_preedit_string        (int                     context,
                                                          int               caret);
 static void     panel_req_update_bidi_direction         (WSCContextISF     *ic, int direction);
 
-/* Panel iochannel handler*/
-static void     panel_initialize                        (void);
-static void     panel_finalize                          (void);
-
-
 /* utility functions */
 
 static bool     filter_keys                             (const char *keyname,
                                                          const char *config_path);
 static void     set_ic_capabilities                     (WSCContextISF     *ic);
 
-static void     initialize                              (void);
-static void     finalize                                (void);
-
 static void     send_wl_key_event                       (WSCContextISF *ic, const KeyEvent &key, bool fake);
 static void     _hide_preedit_string                    (int context, bool update_preedit);
 
@@ -221,8 +213,6 @@ static ConfigPointer                                    _config;
 
 static WSCContextISF                                   *_focused_ic                 = 0;
 
-static bool                                             _scim_initialized           = false;
-
 static int                                              _panel_client_id            = 0;
 static uint32                                           _active_helper_option       = 0;
 
@@ -1281,63 +1271,6 @@ insert_text (const char *text, uint32_t offset, const char *insert)
     return new_text;
 }
 
-/* Public functions */
-void
-isf_wsc_context_init (void)
-{
-    SCIM_DEBUG_FRONTEND (1) << __FUNCTION__ << "...\n";
-    LOGD ("");
-    int val;
-
-    if (!_scim_initialized) {
-        ecore_wl_init (NULL);
-        initialize ();
-        _scim_initialized = true;
-        isf_wsc_input_panel_init ();
-        //isf_wsc_context_set_hardware_keyboard_mode(context_scim);
-
-        /* get autoperiod allow vconf value */
-        if (vconf_get_bool (VCONFKEY_AUTOPERIOD_ALLOW_BOOL, &val) == 0) {
-            if (val == EINA_TRUE)
-                autoperiod_allow = EINA_TRUE;
-        }
-
-        vconf_notify_key_changed (VCONFKEY_AUTOPERIOD_ALLOW_BOOL, autoperiod_allow_changed_cb, NULL);
-
-        /* get autocapital allow vconf value */
-        if (vconf_get_bool (VCONFKEY_AUTOCAPITAL_ALLOW_BOOL, &val) == 0) {
-            if (val == EINA_TRUE)
-                autocap_allow = EINA_TRUE;
-        }
-
-        vconf_notify_key_changed (VCONFKEY_AUTOCAPITAL_ALLOW_BOOL, autocapital_allow_changed_cb, NULL);
-
-        /* get input language vconf value */
-        get_input_language ();
-
-        vconf_notify_key_changed (VCONFKEY_ISF_INPUT_LANGUAGE, input_language_changed_cb, NULL);
-    }
-}
-
-void
-isf_wsc_context_shutdown (void)
-{
-    LOGD ("");
-    SCIM_DEBUG_FRONTEND (1) << __FUNCTION__ << "...\n";
-
-    if (_scim_initialized) {
-        _scim_initialized = false;
-
-        vconf_ignore_key_changed (VCONFKEY_AUTOPERIOD_ALLOW_BOOL, autoperiod_allow_changed_cb);
-        vconf_ignore_key_changed (VCONFKEY_AUTOCAPITAL_ALLOW_BOOL, autocapital_allow_changed_cb);
-        vconf_ignore_key_changed (VCONFKEY_ISF_INPUT_LANGUAGE, input_language_changed_cb);
-
-        isf_wsc_input_panel_shutdown ();
-        finalize ();
-        ecore_wl_shutdown ();
-    }
-}
-
 void
 isf_wsc_context_add (WSCContextISF *wsc_ctx)
 {
@@ -2381,41 +2314,6 @@ filter_keys (const char *keyname, const char *config_path)
 }
 
 static void
-panel_initialize (void)
-{
-    SCIM_DEBUG_FRONTEND (1) << __FUNCTION__ << "...\n";
-    LOGD ("");
-    String display_name;
-    {
-        const char *p = getenv ("DISPLAY");
-        if (p) display_name = String (p);
-    }
-    g_info_manager->add_client (WAYLAND_MODULE_CLIENT_ID, 2, FRONTEND_CLIENT);
-    _panel_client_id = WAYLAND_MODULE_CLIENT_ID;
-    g_info_manager->register_panel_client (_panel_client_id, _panel_client_id);
-    WSCContextISF* context_scim = _ic_list;
-
-    while (context_scim != NULL) {
-        //FIXME:modify the parameter
-        g_info_manager->register_input_context (WAYLAND_MODULE_CLIENT_ID, context_scim->id, "");
-
-        context_scim = context_scim->next;
-    }
-
-    if (_focused_ic) {
-        _focused_ic = 0;
-    }
-}
-
-static void
-panel_finalize (void)
-{
-    SCIM_DEBUG_FRONTEND (1) << __FUNCTION__ << "...\n";
-    LOGD ("");
-    g_info_manager->del_client (WAYLAND_MODULE_CLIENT_ID);
-}
-
-static void
 panel_slot_update_preedit_caret (int context, int caret)
 {
     LOGD ("");
@@ -2597,49 +2495,6 @@ _update_preedit_string (int context,
     }
 }
 
-void
-initialize (void)
-{
-
-    LOGD ("Initializing Wayland ISF IMModule...\n");
-
-    // Get system language.
-    _language = scim_get_locale_language (scim_get_current_locale ());
-
-    panel_initialize ();
-}
-
-static void
-finalize (void)
-{
-    LOGD ("Finalizing Ecore ISF IMModule...\n");
-
-    SCIM_DEBUG_FRONTEND(2) << "Finalize all IC partially.\n";
-    while (_used_ic_impl_list) {
-        // In case in "shared input method" mode,
-        // all contexts share only one instance,
-        // so we need point the reference pointer correctly before finalizing.
-        #if 0 //REMOVE
-        if (_used_ic_impl_list->si) {
-            _used_ic_impl_list->si->set_frontend_data (static_cast <void*> (_used_ic_impl_list->parent));
-        }
-        #endif
-        if (_used_ic_impl_list->parent && _used_ic_impl_list->parent->ctx) {
-            isf_wsc_context_del (_used_ic_impl_list->parent);
-        }
-    }
-
-    delete_all_ic_impl ();
-
-    SCIM_DEBUG_FRONTEND(2) << " Releasing Config...\n";
-    _config.reset ();
-    _focused_ic = NULL;
-    _ic_list = NULL;
-
-    _scim_initialized = false;
-    panel_finalize ();
-}
-
 static uint32_t _keyname_to_keysym (uint32_t keyname, uint32_t *modifiers)
 {
     if (!modifiers)
@@ -2785,12 +2640,63 @@ public:
         : PanelAgentBase ("wayland") {
     }
     ~WaylandPanelAgent () {
-        stop ();
     }
     bool initialize (InfoManager* info_manager, const String& display, bool resident) {
-        LOGD ("");
+        LOGD ("Initializing Wayland ISF IMModule...\n");
+
         g_info_manager = info_manager;
-        isf_wsc_context_init ();
+        int val;
+
+        ecore_wl_init (NULL);
+
+        // Get system language.
+        _language = scim_get_locale_language (scim_get_current_locale ());
+
+        String display_name;
+        {
+            const char *p = getenv ("DISPLAY");
+            if (p) display_name = String (p);
+        }
+
+        g_info_manager->add_client (WAYLAND_MODULE_CLIENT_ID, 2, FRONTEND_CLIENT);
+        _panel_client_id = WAYLAND_MODULE_CLIENT_ID;
+        g_info_manager->register_panel_client (_panel_client_id, _panel_client_id);
+        WSCContextISF* context_scim = _ic_list;
+
+        while (context_scim != NULL) {
+            //FIXME:modify the parameter
+            g_info_manager->register_input_context (WAYLAND_MODULE_CLIENT_ID, context_scim->id, "");
+
+            context_scim = context_scim->next;
+        }
+
+        if (_focused_ic) {
+            _focused_ic = 0;
+        }
+
+        isf_wsc_input_panel_init ();
+        //isf_wsc_context_set_hardware_keyboard_mode(context_scim);
+
+        /* get autoperiod allow vconf value */
+        if (vconf_get_bool (VCONFKEY_AUTOPERIOD_ALLOW_BOOL, &val) == 0) {
+            if (val == EINA_TRUE)
+                autoperiod_allow = EINA_TRUE;
+        }
+
+        vconf_notify_key_changed (VCONFKEY_AUTOPERIOD_ALLOW_BOOL, autoperiod_allow_changed_cb, NULL);
+
+        /* get autocapital allow vconf value */
+        if (vconf_get_bool (VCONFKEY_AUTOCAPITAL_ALLOW_BOOL, &val) == 0) {
+            if (val == EINA_TRUE)
+                autocap_allow = EINA_TRUE;
+        }
+
+        vconf_notify_key_changed (VCONFKEY_AUTOCAPITAL_ALLOW_BOOL, autocapital_allow_changed_cb, NULL);
+
+        /* get input language vconf value */
+        get_input_language ();
+
+        vconf_notify_key_changed (VCONFKEY_ISF_INPUT_LANGUAGE, input_language_changed_cb, NULL);
 
         if (!_wsc_setup (&_wsc)) {
             return false;
@@ -2800,21 +2706,49 @@ public:
 
         return true;
     }
+
     bool valid (void) const {
         return true;
     }
 
     void stop (void) {
+        LOGD ("");
+        SCIM_DEBUG_FRONTEND (1) << __FUNCTION__ << "...\n";
+
+        vconf_ignore_key_changed (VCONFKEY_AUTOPERIOD_ALLOW_BOOL, autoperiod_allow_changed_cb);
+        vconf_ignore_key_changed (VCONFKEY_AUTOCAPITAL_ALLOW_BOOL, autocapital_allow_changed_cb);
+        vconf_ignore_key_changed (VCONFKEY_ISF_INPUT_LANGUAGE, input_language_changed_cb);
+
+        isf_wsc_input_panel_shutdown ();
+
+        while (_used_ic_impl_list) {
+            // In case in "shared input method" mode,
+            // all contexts share only one instance,
+            // so we need point the reference pointer correctly before finalizing.
+            #if 0 //REMOVE
+            if (_used_ic_impl_list->si) {
+                _used_ic_impl_list->si->set_frontend_data (static_cast <void*> (_used_ic_impl_list->parent));
+            }
+            #endif
+            if (_used_ic_impl_list->parent && _used_ic_impl_list->parent->ctx) {
+                isf_wsc_context_del (_used_ic_impl_list->parent);
+            }
+        }
+
+        delete_all_ic_impl ();
+
+        _focused_ic = NULL;
+        _ic_list = NULL;
+
+        g_info_manager->del_client (WAYLAND_MODULE_CLIENT_ID);
+
         _config_connection.disconnect ();
-        isf_wsc_context_shutdown ();
+        _config.reset ();
+
+        ecore_wl_shutdown ();
     }
 
 public:
-    void
-    exit (int id, uint32 contextid) {
-        LOGD ("client id:%d", id);
-        finalize ();
-    }
 
     void
     update_preedit_caret (int id, uint32 context_id, uint32 caret) {
@@ -3003,12 +2937,6 @@ public:
     }
 
     void
-    reload_config (int id)
-    {
-        LOGD ("client id:%d", id);
-    }
-
-    void
     hide_helper_ise (int id, uint32 context_id)
     {
         LOGD ("client id:%d", id);
index 4b68c77..7c597b8 100644 (file)
@@ -1829,34 +1829,6 @@ public:
             set_helper_caps_mode (m_current_helper_uuid, mode);
     }
 
-    //SCIM_TRANS_CMD_RELOAD_CONFIG
-    void reload_config (void) {
-        SCIM_DEBUG_MAIN (1) << "InfoManager::reload_config ()\n";
-        LOGD ("");
-        lock ();
-
-        for (ClientRepository::iterator it = m_client_repository.begin (); it != m_client_repository.end (); ++it) {
-            if (it->second.type == FRONTEND_CLIENT || it->second.type == HELPER_CLIENT) {
-                m_panel_agent_manager.reload_config (it->first);
-            }
-        }
-
-        unlock ();
-    }
-
-    bool exit (void) {
-        SCIM_DEBUG_MAIN (1) << "InfoManager::exit ()\n";
-        lock ();
-
-        for (ClientRepository::iterator it = m_client_repository.begin (); it != m_client_repository.end (); ++it) {
-            m_panel_agent_manager.exit (it->first, 0);
-        }
-
-        unlock ();
-        stop ();
-        return true;
-    }
-
     void update_ise_list (std::vector<String>& strList) {
         /* request PanelClient to update keyboard ise list */
         update_keyboard_ise_list ();
@@ -3954,8 +3926,7 @@ InfoManager::valid (void) const
 void
 InfoManager::stop (void)
 {
-    if (m_impl != NULL)
-        m_impl->stop ();
+    m_impl->stop ();
 }
 
 const ClientInfo&
@@ -4181,17 +4152,6 @@ InfoManager::set_should_shared_ise (const bool should_shared_ise)
     m_impl->set_should_shared_ise (should_shared_ise);
 }
 
-//void
-//InfoManager::reload_config                  (void)
-//{
-//    m_impl->reload_config ();
-//}
-
-bool
-InfoManager::exit (void)
-{
-    return m_impl->exit ();
-}
 void
 InfoManager::update_ise_list (std::vector<String>& strList)
 {
@@ -4445,12 +4405,6 @@ void InfoManager::set_ise_caps_mode (int client_id, uint32 mode)
     m_impl->set_ise_caps_mode (client_id, mode);
 }
 
-//SCIM_TRANS_CMD_RELOAD_CONFIG
-void InfoManager::reload_config (void)
-{
-    m_impl->reload_config ();
-}
-
 //ISM_TRANS_CMD_SEND_WILL_SHOW_ACK
 void InfoManager::will_show_ack (int client_id)
 {
index 5fee7d3..e61e5e7 100644 (file)
@@ -527,19 +527,6 @@ public:
     bool stop_helper (const String&  uuid);
 
     /**
-     * @brief Let all FrontEnds and Helpers reload configuration.
-     * @return true if the command was sent correctly.
-     */
-    //void reload_config                  (void);
-
-    /**
-     * @brief Let all FrontEnds, Helpers and this Panel exit.
-     * @return true if the command was sent correctly.
-     */
-    bool exit (void);
-
-
-    /**
      * @brief Send candidate longpress event to ISE.
      *
      * @param type The candidate object type.
@@ -710,10 +697,6 @@ public:
     void set_ise_caps_mode (int client_id, uint32 mode);
 
 
-    //SCIM_TRANS_CMD_RELOAD_CONFIG
-    void reload_config (void);
-
-
     //ISM_TRANS_CMD_SEND_WILL_SHOW_ACK
     void will_show_ack (int client_id);
 
index 5c303bc..e78de0c 100644 (file)
@@ -209,7 +209,6 @@ void PanelAgentBase::socket_start_helper (int client, uint32 context, const Stri
     LOGW ("not implemented for %s", m_name.c_str ());
 }
 
-
 void PanelAgentBase::exit (int client, uint32 context)
 {
     LOGW ("not implemented for %s", m_name.c_str ());
@@ -343,11 +342,6 @@ void PanelAgentBase::reset_helper_context (int client, uint32 context, const Str
     LOGW ("not implemented for %s", m_name.c_str ());
 }
 
-void PanelAgentBase::reload_config (int client)
-{
-    LOGW ("not implemented for %s", m_name.c_str ());
-}
-
 void PanelAgentBase::socket_update_surrounding_text (int client, uint32 context, const String& uuid, String& text, uint32 cursor)
 {
     LOGW ("not implemented for %s", m_name.c_str ());
index 27a0607..1316a3e 100644 (file)
@@ -311,12 +311,6 @@ public:
     virtual void trigger_property (int client, uint32 context, const String&  property);
 
     /**
-     * @brief Let all FrontEnds and Helpers reload configuration.
-     * @return true if the command was sent correctly.
-     */
-    virtual void reload_config (int client);
-
-    /**
      * @brief Let all FrontEnds, Helpers and this Panel exit.
      * @return true if the command was sent correctly.
      */
index 48c77f8..03f886b 100644 (file)
@@ -73,6 +73,7 @@ public:
 
     PanelAgentPointer m_socket;
     PanelAgentPointer m_wayland;
+    PanelAgentPointer m_config;
 public:
     PanelAgentManagerImpl () {
     }
@@ -80,6 +81,7 @@ public:
     ~PanelAgentManagerImpl () {
         m_socket.reset(0);
         m_wayland.reset(0);
+        m_config.reset (0);
         std::vector<PanelAgentModule*>::iterator iter = m_panel_agent_modules.begin ();
 
         for (; iter != m_panel_agent_modules.end (); iter++) {
@@ -144,8 +146,10 @@ bool PanelAgentManager::initialize (InfoManager* info_manager, const ConfigPoint
 
         if (_panel_agent_module->get_module_name () == "wayland")
             m_impl->m_wayland = _panelagent;
-        else
+        else if (_panel_agent_module->get_module_name () == "ecoresocket")
             m_impl->m_socket = _panelagent;
+        else if (_panel_agent_module->get_module_name () == "socketconfigserver")
+            m_impl->m_config = _panelagent;
     }
 
     return true;
@@ -158,7 +162,13 @@ bool PanelAgentManager::valid (void) const
 
 void PanelAgentManager::stop (void)
 {
-    SCIM_DEBUG_MAIN (1) << "PanelAgent::stop ()\n";
+    LOGD ("");
+    if (!m_impl->m_wayland.null ())
+        m_impl->m_wayland->stop ();
+    if (!m_impl->m_socket.null ())
+        m_impl->m_socket->stop ();
+    if (!m_impl->m_config.null ())
+        m_impl->m_config->stop ();
 }
 
 void PanelAgentManager::update_panel_event (int id,  uint32 context_id, int cmd, uint32 nType, uint32 nValue)
@@ -345,7 +355,6 @@ void PanelAgentManager::socket_start_helper (int id, uint32 context_id, const St
         _p->socket_start_helper (id, context_id, ic_uuid);
 }
 
-
 void PanelAgentManager::exit (int id, uint32 context_id)
 {
     PanelAgentPointer _p = m_impl->get_panel_agent_by_id (id);
@@ -556,14 +565,6 @@ void PanelAgentManager::reset_helper_context (int id, uint32 context_id, const S
         _p->reset_helper_context (id, context_id, uuid);
 }
 
-void PanelAgentManager::reload_config (int id)
-{
-    PanelAgentPointer _p = m_impl->get_panel_agent_by_id (id);
-
-    if (!_p.null ())
-        _p->reload_config (id);
-}
-
 void PanelAgentManager::socket_update_surrounding_text (int id, uint32 context_id, const String& uuid, String& text, uint32 cursor)
 {
     PanelAgentPointer _p = m_impl->get_panel_agent_by_id (id);
index 5164a10..a0f6352 100644 (file)
@@ -268,14 +268,6 @@ public:
      */
     void trigger_property (int client, uint32 context, const String&  property);
 
-
-
-    /**
-     * @brief Let all FrontEnds and Helpers reload configuration.
-     * @return true if the command was sent correctly.
-     */
-    void reload_config (int client);
-
     /**
      * @brief Let all FrontEnds, Helpers and this Panel exit.
      * @return true if the command was sent correctly.
index 2027eae..b4f7ee9 100644 (file)
@@ -160,7 +160,8 @@ public:
     HelperAgentSignalVoid           signal_exit;
     HelperAgentSignalVoid           signal_attach_input_context;
     HelperAgentSignalVoid           signal_detach_input_context;
-    HelperAgentSignalVoid           signal_reload_config;
+    //Deprecated
+    //HelperAgentSignalVoid           signal_reload_config;
     HelperAgentSignalInt            signal_update_screen;
     HelperAgentSignalIntInt         signal_update_spot_location;
     HelperAgentSignalInt            signal_update_cursor_position;
@@ -540,6 +541,7 @@ public:
             send.write_to_socket (socket_active, magic_active);
         }
     }
+
 private:
     HelperAgentImpl () : magic (0), magic_active (0), timeout (-1), focused_ic ((uint32) -1) { }
 };
@@ -864,14 +866,6 @@ HelperAgent::handle_message (MessageItem *message)
             m_impl->signal_exit(this, subclass->get_ic_ref(), subclass->get_ic_uuid_ref());
             break;
         }
-        case SCIM_TRANS_CMD_RELOAD_CONFIG:
-        {
-            MessageItemReloadConfig *subclass = static_cast<MessageItemReloadConfig*>(message);
-            m_impl->signal_reload_config (this, subclass->get_ic_ref(), subclass->get_ic_uuid_ref());
-            if (!m_impl->m_config.null())
-                m_impl->m_config->ConfigBase::reload();
-            break;
-        }
         case SCIM_TRANS_CMD_UPDATE_SCREEN:
         {
             MessageItemUpdateScreen *subclass = static_cast<MessageItemUpdateScreen*>(message);
@@ -1351,6 +1345,7 @@ HelperAgent::handle_message (MessageItem *message)
 }
 
 /**
+ * Deprecated: replace by ConfigBase::get (false, "socket")->reload()
  * @brief Request SCIM to reload all configuration.
  *
  * This function should only by used by Setup Helper to request
@@ -1360,15 +1355,6 @@ void
 HelperAgent::reload_config () const
 {
     LOGD ("");
-#if 0 //reload config message only send by socketconfig client
-    if (m_impl->socket_active.is_connected ()) {
-        m_impl->send.clear ();
-        m_impl->send.put_command (SCIM_TRANS_CMD_REQUEST);
-        m_impl->send.put_data (m_impl->magic_active);
-        m_impl->send.put_command (SCIM_TRANS_CMD_RELOAD_CONFIG);
-        m_impl->send.write_to_socket (m_impl->socket_active, m_impl->magic_active);
-    }
-#endif
     if (!m_impl->m_config.null())
         m_impl->m_config->reload();
 }
@@ -2559,6 +2545,7 @@ HelperAgent::signal_connect_detach_input_context (HelperAgentSlotVoid *slot)
 }
 
 /**
+ * Deprecated: replace by ConfigBase::get (false, "socket")->signal_connect_reload (slot (reload_config_callback));
  * @brief Connect a slot to Helper reload config signal.
  *
  * This signal is used to let the Helper reload configuration.
@@ -2570,7 +2557,8 @@ HelperAgent::signal_connect_detach_input_context (HelperAgentSlotVoid *slot)
 Connection
 HelperAgent::signal_connect_reload_config (HelperAgentSlotVoid *slot)
 {
-    return m_impl->signal_reload_config.connect (slot);
+    //return m_impl->signal_reload_config.connect (slot);
+    return Connection();
 }
 
 /**
index c09e9eb..7ee53aa 100644 (file)
@@ -172,11 +172,6 @@ int main (int argc, char *argv [])
         return -1;
     }
 
-    //FIXME
-    //Temporary solution
-    //remove this if simple socket config server is done
-    config = "simple";
-
     ConfigPointer config_pointer = ConfigBase::get (true, config);
 
     if (config_pointer.null ()) {
index dbc2c4c..be703a4 100644 (file)
@@ -1336,6 +1336,7 @@ SocketClient::close ()
 #define SCIM_DEFAULT_SOCKET_FRONTEND_ADDRESS        "local:/tmp/scim-socket-frontend"
 #define SCIM_DEFAULT_PANEL_SOCKET_ADDRESS           "local:/tmp/scim-panel-socket"
 #define SCIM_DEFAULT_HELPER_MANAGER_SOCKET_ADDRESS  "local:/tmp/scim-socket-frontend"
+#define SCIM_DEFAULT_SOCKET_CONFIG_SOCKET_ADDRESS   "local:/tmp/scim-socket-config"
 
 String scim_get_default_socket_frontend_address ()
 {
@@ -1381,7 +1382,7 @@ String scim_get_default_socket_imengine_address ()
 
 String scim_get_default_socket_config_address ()
 {
-    String address (SCIM_DEFAULT_SOCKET_FRONTEND_ADDRESS);
+    String address (SCIM_DEFAULT_SOCKET_CONFIG_SOCKET_ADDRESS);
 
     address = scim_global_config_read (SCIM_GLOBAL_CONFIG_DEFAULT_SOCKET_CONFIG_ADDRESS, address);
 
@@ -1395,7 +1396,7 @@ String scim_get_default_socket_config_address ()
     }
 
     if (address == "default")
-        address = SCIM_DEFAULT_SOCKET_FRONTEND_ADDRESS;
+        address = SCIM_DEFAULT_SOCKET_CONFIG_SOCKET_ADDRESS;
 
     return address;
 }