Emit 'ValueChanged' signal upon change
authorEduardo Lima (Etrunko) <eduardo.lima@intel.com>
Fri, 27 Sep 2013 20:33:08 +0000 (17:33 -0300)
committerEduardo Lima (Etrunko) <eduardo.lima@intel.com>
Fri, 27 Sep 2013 20:45:45 +0000 (17:45 -0300)
Change-Id: I4079c68f6c2b22da7d74115ad50fe894278c515b
Signed-off-by: Eduardo Lima (Etrunko) <eduardo.lima@intel.com>
src/wkb-ibus-config-eet-test.c
src/wkb-ibus-config-eet.c
src/wkb-ibus-config-eet.h
src/wkb-ibus-config.c

index 5c014f1..5266be9 100644 (file)
@@ -37,7 +37,7 @@ main (int argc, char *argv[])
         goto eet_err;
      }
 
-   cfg = wkb_ibus_config_eet_new("ibus-cfg.eet");
+   cfg = wkb_ibus_config_eet_new("ibus-cfg.eet", NULL);
    wkb_ibus_config_eet_free(cfg);
 
 end:
index d3a1d7d..15b8fa2 100644 (file)
@@ -762,6 +762,7 @@ _config_ibus_new(void)
 struct wkb_ibus_config_eet
 {
    const char *path;
+   Eldbus_Service_Interface *iface;
    struct _config_section *ibus_config;
 
    Eet_Data_Descriptor *hotkey_edd;
@@ -772,6 +773,22 @@ struct wkb_ibus_config_eet
    Eet_Data_Descriptor *ibus_edd;
 };
 
+static void
+_config_eet_value_changed(struct wkb_ibus_config_eet *config_eet, const char *section, const char *name, Eldbus_Message_Iter *value)
+{
+   Eldbus_Message *signal = eldbus_service_signal_new(config_eet->iface, 0);
+   Eldbus_Message_Iter *iter = eldbus_message_iter_get(signal);
+
+   if (!value)
+     {
+        value = eldbus_message_iter_container_new(iter, 'v', NULL);
+        eldbus_message_iter_container_close(iter, value);
+     }
+
+   eldbus_message_iter_arguments_append(iter, "ssv", section, name, value);
+   eldbus_service_signal_send(config_eet->iface, signal);
+}
+
 Eina_Bool
 wkb_ibus_config_eet_set_value(struct wkb_ibus_config_eet *config_eet, const char *section, const char *name, Eldbus_Message_Iter *value)
 {
@@ -794,6 +811,7 @@ wkb_ibus_config_eet_set_value(struct wkb_ibus_config_eet *config_eet, const char
              ret = EINA_FALSE;
           }
         eet_close(ef);
+        _config_eet_value_changed(config_eet, section, name, value);
      }
 
 end:
@@ -862,9 +880,10 @@ wkb_ibus_config_eet_set_defaults(struct wkb_ibus_config_eet *config_eet)
 }
 
 static struct wkb_ibus_config_eet *
-_config_eet_init(const char *path)
+_config_eet_init(const char *path, Eldbus_Service_Interface *iface)
 {
    struct wkb_ibus_config_eet *eet = calloc(1, sizeof(*eet));
+   eet->iface = iface;
    eet->path = eina_stringshare_add(path);
 
    eet->hotkey_edd = _config_hotkey_edd_new();
@@ -885,9 +904,9 @@ _config_eet_exists(const char *path)
 }
 
 struct wkb_ibus_config_eet *
-wkb_ibus_config_eet_new(const char *path)
+wkb_ibus_config_eet_new(const char *path, Eldbus_Service_Interface *iface)
 {
-   struct wkb_ibus_config_eet *eet = _config_eet_init(path);
+   struct wkb_ibus_config_eet *eet = _config_eet_init(path, iface);
    Eet_File *ef = NULL;
    Eet_File_Mode mode = EET_FILE_MODE_READ_WRITE;
 
index ce2bde0..020d8a4 100644 (file)
@@ -28,7 +28,7 @@ Eina_Bool wkb_ibus_config_eet_get_values(struct wkb_ibus_config_eet *config_eet,
 
 void wkb_ibus_config_eet_set_defaults(struct wkb_ibus_config_eet *config_eet);
 
-struct wkb_ibus_config_eet *wkb_ibus_config_eet_new(const char *path);
+struct wkb_ibus_config_eet *wkb_ibus_config_eet_new(const char *path, Eldbus_Service_Interface *iface);
 void wkb_ibus_config_eet_free(struct wkb_ibus_config_eet *config_eet);
 
 #endif  /* _WKB_IBUS_CONFIG_EET_H_ */
index ebaf82e..aadffb7 100644 (file)
@@ -200,7 +200,7 @@ wkb_ibus_config_register(Eldbus_Connection *conn)
         goto end;
      }
 
-   _conf_eet = wkb_ibus_config_eet_new("/home/edebarro/projects/wayland/weekeyboard/ibus-cfg.eet");
+   _conf_eet = wkb_ibus_config_eet_new("/home/edebarro/projects/wayland/weekeyboard/ibus-cfg.eet", ret);
 
    if (!_conf_eet)
      {