diff options
Diffstat (limited to 'src/eulogium.c')
-rw-r--r-- | src/eulogium.c | 48 |
1 files changed, 45 insertions, 3 deletions
diff --git a/src/eulogium.c b/src/eulogium.c index 0c405db..803c8d4 100644 --- a/src/eulogium.c +++ b/src/eulogium.c @@ -18,6 +18,7 @@ #include "eulogium_private.h" #include "gettext.h" #include "procedures.h" +#include "dbus_handlers.h" #include "widget_data.h" #define COPYRIGHT "Copyright © 2015 Olliver Schinagl <o.schinagl@ultimaker.com> and various contributors (see AUTHORS)." @@ -495,6 +496,13 @@ static struct menu_def menu_settings_network = { .item = { .type = LIST_ITEM_CHECK, .state = EINA_FALSE, + ._widget = NULL, + }, + .dbus = { + .signal = "WifiPowerChanged", + .sig_cb = on_signal_network_power_changed_ret, + .method = "isWifiPowered", + .met_cb = on_method_is_network_powered_ret, }, .end = NULL, .footer = NULL, @@ -505,6 +513,17 @@ static struct menu_def menu_settings_network = { }, { .icon = NULL, .label = "Ethernet", + .item = { + .type = LIST_ITEM_CHECK, + .state = EINA_FALSE, + ._widget = NULL, + }, + .dbus = { + .signal = "EthernetPowerChanged", + .sig_cb = on_signal_network_power_changed_ret, + .method = "isEthernetPowered", + .met_cb = on_method_is_network_powered_ret, + }, .end = NULL, .footer = NULL, .footer_alt = NULL, @@ -514,6 +533,17 @@ static struct menu_def menu_settings_network = { }, { .icon = NULL, .label = "Hotspot", + .item = { + .type = LIST_ITEM_CHECK, + .state = EINA_FALSE, + ._widget = NULL, + }, + .dbus = { + .signal = "HotspotPowerChanged", + .sig_cb = on_signal_network_power_changed_ret, + .method = "isHotspotPowered", + .met_cb = on_method_is_network_powered_ret, + }, .footer = NULL, .footer_alt = NULL, .end = NULL, @@ -3269,6 +3299,19 @@ static void _on_error_ret(void *data, const Eldbus_Message *msg) _on_get_error_ret(data, msg, NULL); } +static uint_fast16_t _dbus_members_map(Eldbus_Proxy *proxy, struct menu_entry_def *entry) +{ + uint_fast16_t i; + + for (i = 0; entry[i].label; i++) + if (entry[i].dbus.signal && entry[i].dbus.sig_cb) + eldbus_proxy_signal_handler_add(proxy, entry[i].dbus.signal, entry[i].dbus.sig_cb, &entry[i].item); + if (entry[i].dbus.method && entry[i].dbus.met_cb) + eldbus_proxy_call(proxy, entry[i].dbus.method, entry[i].dbus.met_cb, &entry[i].item, -1, ""); + + return i; +} + static int eulogium_dbus_init(struct eulogium_data *eulogium) { Eldbus_Object *obj; @@ -3328,10 +3371,9 @@ static int eulogium_dbus_init(struct eulogium_data *eulogium) EINA_LOG_WARN("Could not get dbus network proxy."); return -EFAULT; } - /* First query the status and store it, we don't know the initial status, - * and the statusChanged signal may not have been fired yet - */ + _dbus_members_map(eulogium->dbus.proxy[NETWORK], menu_settings_network.entry); /* TODO: put signal/method name strings in macro/LUT */ + eldbus_proxy_call(eulogium->dbus.proxy[PRINTER], "getError", _on_get_error_ret, eulogium, -1, ""); eldbus_proxy_signal_handler_add(eulogium->dbus.proxy[PRINTER], "onError", _on_error_ret, eulogium); eldbus_proxy_call(eulogium->dbus.proxy[PRINTER], "getAvailableProcedures", _on_get_available_procedures_ret, eulogium, -1, ""); |