[gnome-control-center/wip/power: 7/9] power: Add a bluetooth switch



commit 8a29facacfde94a8d43ab1905ddcff28f83e144d
Author: Matthias Clasen <mclasen redhat com>
Date:   Sun Dec 2 14:35:24 2012 -0500

    power: Add a bluetooth switch
    
    This is using gnome-bluetooth.

 configure.ac                  |    3 +
 panels/power/Makefile.am      |    5 ++
 panels/power/cc-power-panel.c |   84 ++++++++++++++++++++++++++++++++++++++++-
 3 files changed, 90 insertions(+), 2 deletions(-)
---
diff --git a/configure.ac b/configure.ac
index b93859c..8900d82 100644
--- a/configure.ac
+++ b/configure.ac
@@ -182,6 +182,9 @@ AM_CONDITIONAL(BUILD_NETWORK, [test x$have_networkmanager = xyes])
 PKG_CHECK_MODULES(BLUETOOTH, $COMMON_MODULES gnome-bluetooth-1.0 >= 3.5.5,
 		  [have_bluetooth=yes], have_bluetooth=no)
 AM_CONDITIONAL(BUILD_BLUETOOTH, [test x$have_bluetooth = xyes])
+if test x${have_bluetooth} = xyes; then
+  AC_DEFINE(HAVE_BLUETOOTH, 1, [Define to 1 if bluetooth support is available])
+fi
 
 # Check for CUPS 1.4 or newer
 AC_ARG_ENABLE([cups],
diff --git a/panels/power/Makefile.am b/panels/power/Makefile.am
index c9866df..9416be2 100644
--- a/panels/power/Makefile.am
+++ b/panels/power/Makefile.am
@@ -22,6 +22,11 @@ libpower_la_SOURCES =		\
 libpower_la_LIBADD = $(PANEL_LIBS) $(POWER_PANEL_LIBS)
 libpower_la_LDFLAGS = $(PANEL_LDFLAGS)
 
+if BUILD_BLUETOOTH
+INCLUDES += $(BLUETOOTH_CFLAGS)
+libpower_la_LIBADD += $(BLUETOOTH_LIBS)
+endif
+
 uidir = $(pkgdatadir)/ui
 dist_ui_DATA = power.ui
 
diff --git a/panels/power/cc-power-panel.c b/panels/power/cc-power-panel.c
index fc0470a..f0445c0 100644
--- a/panels/power/cc-power-panel.c
+++ b/panels/power/cc-power-panel.c
@@ -27,6 +27,10 @@
 #include <gnome-settings-daemon/gsd-enums.h>
 #include "egg-list-box/egg-list-box.h"
 
+#ifdef HAVE_BLUETOOTH
+#include <bluetooth-killswitch.h>
+#endif
+
 #include "cc-power-panel.h"
 
 #define WID(b, w) (GtkWidget *) gtk_builder_get_object (b, w)
@@ -60,6 +64,11 @@ struct _CcPowerPanelPrivate
   GtkWidget     *automatic_suspend_label;
   GtkWidget     *critical_battery_row;
   GtkWidget     *critical_battery_combo;
+
+#ifdef HAVE_BLUETOOTH
+  BluetoothKillswitch *bt_killswitch;
+  GtkWidget           *bt_switch;
+#endif
 };
 
 enum
@@ -85,6 +94,9 @@ cc_power_panel_dispose (GObject *object)
   g_clear_object (&priv->proxy);
   g_clear_object (&priv->screen_proxy);
   g_clear_object (&priv->up_client);
+#ifdef HAVE_BLUETOOTH
+  g_clear_object (&priv->bt_killswitch);
+#endif
 
   G_OBJECT_CLASS (cc_power_panel_parent_class)->dispose (object);
 }
@@ -1070,6 +1082,41 @@ update_separator_func (GtkWidget **separator,
     }
 }
 
+#ifdef HAVE_BLUETOOTH
+static void
+bt_switch_changed (GtkSwitch    *sw,
+                   GParamSpec   *pspec,
+                   CcPowerPanel *panel)
+{
+  BluetoothKillswitchState state;
+
+  if (gtk_switch_get_active (sw))
+    state = BLUETOOTH_KILLSWITCH_STATE_UNBLOCKED;
+  else
+    state = BLUETOOTH_KILLSWITCH_STATE_SOFT_BLOCKED;
+
+  g_debug ("Setting bt killswitch to %s", bluetooth_killswitch_state_to_string (state));
+
+  bluetooth_killswitch_set_state (panel->priv->bt_killswitch, state);
+}
+
+static void
+bt_killswitch_state_changed (BluetoothKillswitch      *killswitch,
+                             BluetoothKillswitchState  state,
+                             CcPowerPanel             *panel)
+{
+  gboolean enabled;
+
+  g_debug ("bt killswitch state changed to %s", bluetooth_killswitch_state_to_string (state));
+
+  enabled = state == BLUETOOTH_KILLSWITCH_STATE_UNBLOCKED;
+
+  g_signal_handlers_block_by_func (panel->priv->bt_switch, bt_switch_changed, panel);
+  gtk_switch_set_active (GTK_SWITCH (panel->priv->bt_switch), enabled);
+  g_signal_handlers_unblock_by_func (panel->priv->bt_switch, bt_switch_changed, panel);
+}
+#endif
+
 static void
 add_power_saving_section (CcPowerPanel *self)
 {
@@ -1109,7 +1156,7 @@ add_power_saving_section (CcPowerPanel *self)
   gtk_box_pack_start (GTK_BOX (vbox), box, FALSE, TRUE, 0);
 
   priv->brightness_row = box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
-  label = gtk_label_new (_("Screen _Brightness"));
+  label = gtk_label_new (_("_Screen Brightness"));
   gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
   gtk_label_set_use_underline (GTK_LABEL (label), TRUE);
   gtk_widget_set_margin_left (label, 12);
@@ -1128,7 +1175,7 @@ add_power_saving_section (CcPowerPanel *self)
   gtk_container_add (GTK_CONTAINER (widget), box);
 
   box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
-  label = gtk_label_new (_("Screen Power _Saving"));
+  label = gtk_label_new (_("Screen _Power Saving"));
   gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
   gtk_label_set_use_underline (GTK_LABEL (label), TRUE);
   gtk_widget_set_margin_left (label, 12);
@@ -1148,6 +1195,39 @@ add_power_saving_section (CcPowerPanel *self)
   gtk_label_set_mnemonic_widget (GTK_LABEL (label), sw);
   gtk_container_add (GTK_CONTAINER (widget), box);
 
+#ifdef HAVE_BLUETOOTH
+  {
+    BluetoothKillswitchState bt_state;
+    priv->bt_killswitch = bluetooth_killswitch_new ();
+    bt_state = bluetooth_killswitch_get_state (priv->bt_killswitch);
+    if (bt_state != BLUETOOTH_KILLSWITCH_STATE_NO_ADAPTER)
+      {
+        box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
+        label = gtk_label_new (_("_Bluetooth"));
+        gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
+        gtk_label_set_use_underline (GTK_LABEL (label), TRUE);
+        gtk_widget_set_margin_left (label, 12);
+        gtk_widget_set_margin_right (label, 12);
+        gtk_widget_set_margin_top (label, 6);
+        gtk_widget_set_margin_bottom (label, 6);
+        gtk_box_pack_start (GTK_BOX (box), label, TRUE, TRUE, 0);
+
+        priv->bt_switch = sw = gtk_switch_new ();
+        gtk_widget_set_margin_left (sw, 12);
+        gtk_widget_set_margin_right (sw, 12);
+        gtk_box_pack_start (GTK_BOX (box), sw, FALSE, TRUE, 0);
+        gtk_label_set_mnemonic_widget (GTK_LABEL (label), sw);
+        gtk_container_add (GTK_CONTAINER (widget), box);
+
+        bt_killswitch_state_changed (priv->bt_killswitch, bt_state, self);
+        g_signal_connect (G_OBJECT (priv->bt_killswitch), "state-changed",
+                          G_CALLBACK (bt_killswitch_state_changed), self);
+        g_signal_connect (G_OBJECT (priv->bt_switch), "notify::active",
+                          G_CALLBACK (bt_switch_changed), self);
+      }
+    }
+#endif
+
   gtk_widget_show_all (widget);
 }
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]