[gnome-control-center] network: don't add the header widget in an idle
- From: Cosimo Cecchi <cosimoc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-control-center] network: don't add the header widget in an idle
- Date: Wed, 7 Nov 2012 20:44:08 +0000 (UTC)
commit fdb42333d1060ac635f7d8d8188b8fba2937c661
Author: Cosimo Cecchi <cosimoc gnome org>
Date: Wed Nov 7 12:30:37 2012 -0500
network: don't add the header widget in an idle
Add it in constructed() instead, since we need the value of the
construct-only shell property in order for it to work.
https://bugzilla.gnome.org/show_bug.cgi?id=687864
panels/network/cc-network-panel.c | 197 ++++++++++++++++++-------------------
1 files changed, 96 insertions(+), 101 deletions(-)
---
diff --git a/panels/network/cc-network-panel.c b/panels/network/cc-network-panel.c
index 3139a57..f3eb708 100644
--- a/panels/network/cc-network-panel.c
+++ b/panels/network/cc-network-panel.c
@@ -66,7 +66,6 @@ struct _CcNetworkPanelPrivate
NMClient *client;
NMRemoteSettings *remote_settings;
gboolean updating_device;
- guint add_header_widgets_idle;
guint nm_warning_idle;
guint refresh_idle;
GtkWidget *kill_switch_header;
@@ -213,10 +212,6 @@ cc_network_panel_dispose (GObject *object)
g_source_remove (priv->nm_warning_idle);
priv->nm_warning_idle = 0;
}
- if (priv->add_header_widgets_idle != 0) {
- g_source_remove (priv->add_header_widgets_idle);
- priv->add_header_widgets_idle = 0;
- }
G_OBJECT_CLASS (cc_network_panel_parent_class)->dispose (object);
}
@@ -238,6 +233,100 @@ cc_network_panel_get_help_uri (CcPanel *panel)
}
static void
+cc_network_panel_notify_enable_active_cb (GtkSwitch *sw,
+ GParamSpec *pspec,
+ CcNetworkPanel *panel)
+{
+ gboolean enable;
+
+ /* set enabled state */
+ enable = !gtk_switch_get_active (sw);
+ nm_client_wireless_set_enabled (panel->priv->client, enable);
+}
+
+static void
+panel_refresh_killswitch_visibility (CcNetworkPanel *panel)
+{
+ gboolean ret;
+ gboolean show_flight_toggle = FALSE;
+ GtkTreeIter iter;
+ GtkTreeModel *model;
+ NetObject *object_tmp;
+ NMDeviceModemCapabilities caps;
+ NMDevice *nm_device;
+
+ /* find any wireless devices in model */
+ model = GTK_TREE_MODEL (gtk_builder_get_object (panel->priv->builder,
+ "liststore_devices"));
+ ret = gtk_tree_model_get_iter_first (model, &iter);
+ if (!ret)
+ return;
+ do {
+ gtk_tree_model_get (model, &iter,
+ PANEL_DEVICES_COLUMN_OBJECT, &object_tmp,
+ -1);
+ if (NET_IS_DEVICE (object_tmp)) {
+ nm_device = net_device_get_nm_device (NET_DEVICE (object_tmp));
+ switch (nm_device_get_device_type (nm_device)) {
+ case NM_DEVICE_TYPE_WIFI:
+ case NM_DEVICE_TYPE_WIMAX:
+ show_flight_toggle = TRUE;
+ break;
+ case NM_DEVICE_TYPE_MODEM:
+ {
+ caps = nm_device_modem_get_current_capabilities (NM_DEVICE_MODEM (nm_device));
+ if ((caps & NM_DEVICE_MODEM_CAPABILITY_GSM_UMTS) ||
+ (caps & NM_DEVICE_MODEM_CAPABILITY_CDMA_EVDO))
+ show_flight_toggle = TRUE;
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ if (object_tmp != NULL)
+ g_object_unref (object_tmp);
+ } while (!show_flight_toggle && gtk_tree_model_iter_next (model, &iter));
+
+ /* only show toggle if there are wireless devices */
+ gtk_widget_set_visible (panel->priv->kill_switch_header,
+ show_flight_toggle);
+}
+
+static void
+cc_network_panel_constructed (GObject *object)
+{
+ CcNetworkPanel *panel = CC_NETWORK_PANEL (object);
+ gboolean ret;
+ GtkWidget *box;
+ GtkWidget *label;
+ GtkWidget *widget;
+
+ G_OBJECT_CLASS (cc_network_panel_parent_class)->constructed (object);
+
+ /* add kill switch widgets */
+ box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 3);
+ /* TRANSLATORS: this is to disable the radio hardware in the
+ * network panel */
+ label = gtk_label_new_with_mnemonic (_("Air_plane Mode"));
+ gtk_box_pack_start (GTK_BOX (box), label, FALSE, FALSE, 0);
+ gtk_widget_set_visible (label, TRUE);
+ widget = gtk_switch_new ();
+ gtk_label_set_mnemonic_widget (GTK_LABEL (label), widget);
+ gtk_box_pack_start (GTK_BOX (box), widget, FALSE, FALSE, 0);
+ gtk_widget_set_visible (widget, TRUE);
+ cc_shell_embed_widget_in_header (cc_panel_get_shell (CC_PANEL (panel)), box);
+ panel->priv->kill_switch_header = g_object_ref (box);
+
+ ret = nm_client_wireless_get_enabled (panel->priv->client);
+ gtk_switch_set_active (GTK_SWITCH (widget), !ret);
+ g_signal_connect (GTK_SWITCH (widget), "notify::active",
+ G_CALLBACK (cc_network_panel_notify_enable_active_cb),
+ panel);
+ panel_refresh_killswitch_visibility (panel);
+}
+
+static void
cc_network_panel_class_init (CcNetworkPanelClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
@@ -251,6 +340,7 @@ cc_network_panel_class_init (CcNetworkPanelClass *klass)
object_class->set_property = cc_network_panel_set_property;
object_class->dispose = cc_network_panel_dispose;
object_class->finalize = cc_network_panel_finalize;
+ object_class->constructed = cc_network_panel_constructed;
g_object_class_override_property (object_class, PROP_ARGV, "argv");
}
@@ -335,55 +425,6 @@ object_removed_cb (NetObject *object, CcNetworkPanel *panel)
} while (gtk_tree_model_iter_next (model, &iter));
}
-static void
-panel_refresh_killswitch_visibility (CcNetworkPanel *panel)
-{
- gboolean ret;
- gboolean show_flight_toggle = FALSE;
- GtkTreeIter iter;
- GtkTreeModel *model;
- NetObject *object_tmp;
- NMDeviceModemCapabilities caps;
- NMDevice *nm_device;
-
- /* find any wireless devices in model */
- model = GTK_TREE_MODEL (gtk_builder_get_object (panel->priv->builder,
- "liststore_devices"));
- ret = gtk_tree_model_get_iter_first (model, &iter);
- if (!ret)
- return;
- do {
- gtk_tree_model_get (model, &iter,
- PANEL_DEVICES_COLUMN_OBJECT, &object_tmp,
- -1);
- if (NET_IS_DEVICE (object_tmp)) {
- nm_device = net_device_get_nm_device (NET_DEVICE (object_tmp));
- switch (nm_device_get_device_type (nm_device)) {
- case NM_DEVICE_TYPE_WIFI:
- case NM_DEVICE_TYPE_WIMAX:
- show_flight_toggle = TRUE;
- break;
- case NM_DEVICE_TYPE_MODEM:
- {
- caps = nm_device_modem_get_current_capabilities (NM_DEVICE_MODEM (nm_device));
- if ((caps & NM_DEVICE_MODEM_CAPABILITY_GSM_UMTS) ||
- (caps & NM_DEVICE_MODEM_CAPABILITY_CDMA_EVDO))
- show_flight_toggle = TRUE;
- }
- break;
- default:
- break;
- }
- }
- if (object_tmp != NULL)
- g_object_unref (object_tmp);
- } while (!show_flight_toggle && gtk_tree_model_iter_next (model, &iter));
-
- /* only show toggle if there are wireless devices */
- gtk_widget_set_visible (panel->priv->kill_switch_header,
- show_flight_toggle);
-}
-
GPtrArray *
cc_network_panel_get_devices (CcNetworkPanel *panel)
{
@@ -778,18 +819,6 @@ panel_add_proxy_device (CcNetworkPanel *panel)
}
static void
-cc_network_panel_notify_enable_active_cb (GtkSwitch *sw,
- GParamSpec *pspec,
- CcNetworkPanel *panel)
-{
- gboolean enable;
-
- /* set enabled state */
- enable = !gtk_switch_get_active (sw);
- nm_client_wireless_set_enabled (panel->priv->client, enable);
-}
-
-static void
connection_state_changed (NMActiveConnection *c, GParamSpec *pspec, CcNetworkPanel *panel)
{
}
@@ -878,6 +907,7 @@ out:
}
panel_refresh_device_titles (panel);
+ panel_refresh_killswitch_visibility (panel);
g_debug ("Calling handle_argv() after cold-plugging devices");
handle_argv (panel);
@@ -1141,38 +1171,6 @@ on_toplevel_map (GtkWidget *widget,
}
}
-static gboolean
-network_add_shell_header_widgets_cb (gpointer user_data)
-{
- CcNetworkPanel *panel = CC_NETWORK_PANEL (user_data);
- gboolean ret;
- GtkWidget *box;
- GtkWidget *label;
- GtkWidget *widget;
-
- box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 3);
- /* TRANSLATORS: this is to disable the radio hardware in the
- * network panel */
- label = gtk_label_new_with_mnemonic (_("Air_plane Mode"));
- gtk_box_pack_start (GTK_BOX (box), label, FALSE, FALSE, 0);
- gtk_widget_set_visible (label, TRUE);
- widget = gtk_switch_new ();
- gtk_label_set_mnemonic_widget (GTK_LABEL (label), widget);
- gtk_box_pack_start (GTK_BOX (box), widget, FALSE, FALSE, 0);
- gtk_widget_set_visible (widget, TRUE);
- cc_shell_embed_widget_in_header (cc_panel_get_shell (CC_PANEL (panel)), box);
- panel->priv->kill_switch_header = g_object_ref (box);
-
- ret = nm_client_wireless_get_enabled (panel->priv->client);
- gtk_switch_set_active (GTK_SWITCH (widget), !ret);
- g_signal_connect (GTK_SWITCH (widget), "notify::active",
- G_CALLBACK (cc_network_panel_notify_enable_active_cb),
- panel);
- panel_refresh_killswitch_visibility (panel);
-
- return FALSE;
-}
-
static void
cc_network_panel_init (CcNetworkPanel *panel)
{
@@ -1265,9 +1263,6 @@ cc_network_panel_init (CcNetworkPanel *panel)
widget = GTK_WIDGET (gtk_builder_get_object (panel->priv->builder,
"vbox1"));
gtk_widget_reparent (widget, (GtkWidget *) panel);
-
- /* add kill switch widgets when dialog activated */
- panel->priv->add_header_widgets_idle = g_idle_add (network_add_shell_header_widgets_cb, panel);
}
void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]