network: Disable NetworkManager when the airplane switch gets changed

This commit is contained in:
Richard Hughes 2011-02-07 13:39:07 +00:00
parent a345d23ed0
commit 419248bae9

View file

@ -88,6 +88,7 @@ enum {
}; };
static void panel_device_refresh_item_ui (PanelDeviceItem *item); static void panel_device_refresh_item_ui (PanelDeviceItem *item);
static void panel_refresh_devices (CcNetworkPanel *panel);
static void static void
cc_network_panel_get_property (GObject *object, cc_network_panel_get_property (GObject *object,
@ -965,6 +966,9 @@ panel_dbus_manager_signal_cb (GDBusProxy *proxy,
/* get the new state */ /* get the new state */
if (g_strcmp0 (signal_name, "StateChanged") == 0) { if (g_strcmp0 (signal_name, "StateChanged") == 0) {
g_debug ("ensure devices are correct"); g_debug ("ensure devices are correct");
/* refresh devices */
panel_refresh_devices (panel);
goto out; goto out;
} }
@ -985,6 +989,32 @@ out:
g_free (object_path); g_free (object_path);
} }
/**
* panel_refresh_devices:
**/
static void
panel_refresh_devices (CcNetworkPanel *panel)
{
GtkListStore *liststore_devices;
CcNetworkPanelPrivate *priv = panel->priv;
/* clear the existing list */
liststore_devices = GTK_LIST_STORE (gtk_builder_get_object (priv->builder,
"liststore_devices"));
gtk_list_store_clear (liststore_devices);
/* get the new state */
g_dbus_proxy_call (priv->proxy,
"GetDevices",
NULL,
G_DBUS_CALL_FLAGS_NONE,
-1,
priv->cancellable,
panel_get_devices_cb,
panel);
}
/** /**
* panel_got_network_proxy_cb: * panel_got_network_proxy_cb:
**/ **/
@ -1009,15 +1039,8 @@ panel_got_network_proxy_cb (GObject *source_object, GAsyncResult *res, gpointer
G_CALLBACK (panel_dbus_manager_signal_cb), G_CALLBACK (panel_dbus_manager_signal_cb),
user_data); user_data);
/* get the new state */ /* refresh devices */
g_dbus_proxy_call (priv->proxy, panel_refresh_devices (panel);
"GetDevices",
NULL,
G_DBUS_CALL_FLAGS_NONE,
-1,
priv->cancellable,
panel_get_devices_cb,
user_data);
out: out:
return; return;
} }
@ -1775,6 +1798,55 @@ panel_add_proxy_device (CcNetworkPanel *panel)
g_free (title); g_free (title);
} }
/**
* panel_enable_cb:
**/
static void
panel_enable_cb (GObject *source_object,
GAsyncResult *res,
gpointer user_data)
{
GError *error = NULL;
GVariant *result;
result = g_dbus_proxy_call_finish (G_DBUS_PROXY (source_object), res, &error);
if (result == NULL) {
g_printerr ("Error enabling NetworkManager: %s\n",
error->message);
g_error_free (error);
goto out;
}
out:
if (result != NULL)
g_variant_unref (result);
}
/**
* cc_network_panel_notify_enable_active_cb:
**/
static void
cc_network_panel_notify_enable_active_cb (GtkSwitch *sw,
GParamSpec *pspec,
CcNetworkPanel *panel)
{
gboolean enable;
CcNetworkPanelPrivate *priv = panel->priv;
/* get enabled state */
enable = !gtk_switch_get_active (sw);
/* get the new state */
g_dbus_proxy_call (priv->proxy,
"Enable",
g_variant_new ("(b)", enable),
G_DBUS_CALL_FLAGS_NONE,
-1,
priv->cancellable,
panel_enable_cb,
panel);
}
/** /**
* cc_network_panel_init: * cc_network_panel_init:
**/ **/
@ -1958,7 +2030,10 @@ cc_network_panel_init (CcNetworkPanel *panel)
gtk_widget_set_sensitive (widget, FALSE); gtk_widget_set_sensitive (widget, FALSE);
widget = GTK_WIDGET (gtk_builder_get_object (panel->priv->builder, widget = GTK_WIDGET (gtk_builder_get_object (panel->priv->builder,
"switch_flight_mode")); "switch_flight_mode"));
gtk_widget_set_sensitive (widget, FALSE); g_signal_connect (GTK_SWITCH (widget), "notify::active",
G_CALLBACK (cc_network_panel_notify_enable_active_cb),
panel);
widget = GTK_WIDGET (gtk_builder_get_object (panel->priv->builder, widget = GTK_WIDGET (gtk_builder_get_object (panel->priv->builder,
"notebook_types")); "notebook_types"));