Do not go back to online when marked as 'Offline'
authorGustavo Sverzut Barbieri <barbieri@gmail.com>
Thu, 21 Jan 2010 18:26:08 +0000 (18:26 +0000)
committerGustavo Sverzut Barbieri <barbieri@gmail.com>
Thu, 21 Jan 2010 18:26:08 +0000 (18:26 +0000)
The way it was, if you changed offline it was repeatedly toggling due
E "offline mode" state and connman module fighting. Now it does it once.

By: Lucas De Marchi <lucas.demarchi@profusion.mobi>

SVN revision: 45410

src/modules/connman/e_mod_main.c
src/modules/connman/e_mod_main.h

index a01f3b6d5e9f428e7b239336bd8ebbda23bc137b..4ca055678ae3b0f1ed348feaae8da17f96f2993e 100644 (file)
@@ -112,9 +112,7 @@ _connman_toggle_offline_mode_cb(void *data, DBusMessage *msg __UNUSED__, DBusErr
    if ((!error) || (!dbus_error_is_set(error)))
      {
        printf("DBG CONNMAN: successfuly toggled to offline mode\n");
-       // XXX hack: connman does not emit propertychanged for this, they need to fix it
-       e_connman_manager_sync_elements();
-       _connman_default_service_changed_delayed(ctxt);
+       ctxt->offline_mode_pending = EINA_FALSE;
        return;
      }
 
@@ -122,14 +120,6 @@ _connman_toggle_offline_mode_cb(void *data, DBusMessage *msg __UNUSED__, DBusErr
    dbus_error_free(error);
 }
 
-static void
-_connman_toggle_offline_mode_pending_cb(void *data, DBusMessage *msg, DBusError *error)
-{
-   E_Connman_Module_Context *ctxt = data;
-   ctxt->offline_mode_pending = EINA_FALSE;
-   _connman_toggle_offline_mode_cb(data, msg, error);
-}
-
 static void
 _connman_toggle_offline_mode(E_Connman_Module_Context *ctxt)
 {
@@ -915,6 +905,7 @@ _connman_popup_cb_offline_mode_changed(void *data, Evas_Object *obj, void *event
          (_("Cannot toggle system's offline mode."));
        return;
      }
+   ctxt->offline_mode_pending = EINA_TRUE;
 }
 
 static void
@@ -1617,13 +1608,14 @@ _connman_event_mode_changed(void *data, int type __UNUSED__, void *event __UNUSE
    if ((ctxt->offline_mode == e_config->mode.offline) ||
        (!ctxt->has_manager))
      return 1;
-
-   if (!e_connman_manager_offline_mode_set
-       (e_config->mode.offline, _connman_toggle_offline_mode_pending_cb, ctxt))
-     _connman_operation_error_show
-       (_("Cannot toggle system's offline mode."));
+   if (!ctxt->offline_mode_pending)
+     {
+       if (!e_connman_manager_offline_mode_set(e_config->mode.offline,
+                _connman_toggle_offline_mode_cb, ctxt))
+         _connman_operation_error_show(_("Cannot toggle system's offline mode."));
+     }
    else
-     ctxt->offline_mode_pending = EINA_TRUE;
+     ctxt->offline_mode_pending = EINA_FALSE;
 
    return 1;
 }
index ca78522837597ac2a75c324cbe1311db3ee118d5..59d2c57a0bff78176056671d0847329e04d16955 100644 (file)
@@ -10,7 +10,6 @@
 
 #define MOD_CONF_VERSION 2
 
-
 typedef struct E_Connman_Instance E_Connman_Instance;
 typedef struct E_Connman_Module_Context E_Connman_Module_Context;
 typedef struct E_Connman_Service E_Connman_Service;