bluetooth: Move all UI into the GtkTemplate
This commit is contained in:
parent
6fc8e57bdd
commit
af1ffd76e1
3 changed files with 213 additions and 119 deletions
|
@ -22,7 +22,6 @@
|
|||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#include <glib/gi18n-lib.h>
|
||||
#include <shell/cc-shell.h>
|
||||
#include <shell/cc-object-storage.h>
|
||||
#include <bluetooth-settings-widget.h>
|
||||
|
@ -30,14 +29,13 @@
|
|||
#include "cc-bluetooth-panel.h"
|
||||
#include "cc-bluetooth-resources.h"
|
||||
|
||||
#define WID(s) GTK_WIDGET (gtk_builder_get_object (self->builder, s))
|
||||
|
||||
struct _CcBluetoothPanel {
|
||||
CcPanel parent_instance;
|
||||
|
||||
GtkBox *airplane_box;
|
||||
GtkBuilder *builder;
|
||||
GtkBox *disabled_box;
|
||||
GtkSwitch *enable_switch;
|
||||
GtkBox *header_box;
|
||||
GtkBox *hw_airplane_box;
|
||||
GtkBox *no_devices_box;
|
||||
BluetoothSettingsWidget *settings_widget;
|
||||
|
@ -46,7 +44,6 @@ struct _CcBluetoothPanel {
|
|||
GCancellable *cancellable;
|
||||
|
||||
/* Killswitch */
|
||||
GtkWidget *kill_switch_header;
|
||||
GDBusProxy *rfkill;
|
||||
GDBusProxy *properties;
|
||||
gboolean airplane_mode;
|
||||
|
@ -75,7 +72,6 @@ cc_bluetooth_panel_finalize (GObject *object)
|
|||
|
||||
g_clear_object (&self->properties);
|
||||
g_clear_object (&self->rfkill);
|
||||
g_clear_object (&self->kill_switch_header);
|
||||
|
||||
G_OBJECT_CLASS (cc_bluetooth_panel_parent_class)->finalize (object);
|
||||
}
|
||||
|
@ -88,18 +84,16 @@ cc_bluetooth_panel_constructed (GObject *object)
|
|||
G_OBJECT_CLASS (cc_bluetooth_panel_parent_class)->constructed (object);
|
||||
|
||||
/* add kill switch widgets */
|
||||
self->kill_switch_header = g_object_ref (WID ("box_power"));
|
||||
cc_shell_embed_widget_in_header (cc_panel_get_shell (CC_PANEL (self)),
|
||||
self->kill_switch_header, GTK_POS_RIGHT);
|
||||
gtk_widget_show (self->kill_switch_header);
|
||||
GTK_WIDGET (self->header_box), GTK_POS_RIGHT);
|
||||
}
|
||||
|
||||
static void
|
||||
power_callback (CcBluetoothPanel *self)
|
||||
enable_switch_changed_cb (CcBluetoothPanel *self)
|
||||
{
|
||||
gboolean state;
|
||||
|
||||
state = gtk_switch_get_active (GTK_SWITCH (WID ("switch_bluetooth")));
|
||||
state = gtk_switch_get_active (self->enable_switch);
|
||||
g_debug ("Power switched to %s", state ? "on" : "off");
|
||||
g_dbus_proxy_call (self->properties,
|
||||
"Set",
|
||||
|
@ -112,10 +106,9 @@ power_callback (CcBluetoothPanel *self)
|
|||
}
|
||||
|
||||
static void
|
||||
cc_bluetooth_panel_update_power (CcBluetoothPanel *self)
|
||||
adapter_status_changed_cb (CcBluetoothPanel *self)
|
||||
{
|
||||
GtkAlign valign;
|
||||
GObject *toggle;
|
||||
gboolean sensitive, powered, change_powered;
|
||||
GtkWidget *page;
|
||||
|
||||
|
@ -155,13 +148,12 @@ cc_bluetooth_panel_update_power (CcBluetoothPanel *self)
|
|||
}
|
||||
|
||||
gtk_widget_set_valign (GTK_WIDGET (self->stack), valign);
|
||||
gtk_widget_set_sensitive (WID ("box_power") , sensitive);
|
||||
gtk_widget_set_sensitive (GTK_WIDGET (self->header_box), sensitive);
|
||||
|
||||
toggle = G_OBJECT (WID ("switch_bluetooth"));
|
||||
if (change_powered) {
|
||||
g_signal_handlers_block_by_func (toggle, power_callback, self);
|
||||
gtk_switch_set_active (GTK_SWITCH (toggle), powered);
|
||||
g_signal_handlers_unblock_by_func (toggle, power_callback, self);
|
||||
g_signal_handlers_block_by_func (self->enable_switch, enable_switch_changed_cb, self);
|
||||
gtk_switch_set_active (self->enable_switch, powered);
|
||||
g_signal_handlers_unblock_by_func (self->enable_switch, enable_switch_changed_cb, self);
|
||||
}
|
||||
|
||||
gtk_stack_set_visible_child (self->stack, page);
|
||||
|
@ -187,11 +179,11 @@ airplane_mode_changed (CcBluetoothPanel *self)
|
|||
bluetooth_has_airplane_mode = g_dbus_proxy_get_cached_property (self->rfkill, "BluetoothHasAirplaneMode");
|
||||
self->has_airplane_mode = g_variant_get_boolean (bluetooth_has_airplane_mode);
|
||||
|
||||
cc_bluetooth_panel_update_power (self);
|
||||
adapter_status_changed_cb (self);
|
||||
}
|
||||
|
||||
static void
|
||||
on_airplane_mode_off_clicked (CcBluetoothPanel *self)
|
||||
airplane_mode_off_button_clicked_cb (CcBluetoothPanel *self)
|
||||
{
|
||||
g_debug ("Airplane Mode Off clicked, disabling airplane mode");
|
||||
g_dbus_proxy_call (self->rfkill,
|
||||
|
@ -205,47 +197,9 @@ on_airplane_mode_off_clicked (CcBluetoothPanel *self)
|
|||
NULL, NULL);
|
||||
}
|
||||
|
||||
static GtkBox *
|
||||
add_stack_page (CcBluetoothPanel *self,
|
||||
const char *icon_name,
|
||||
const char *message,
|
||||
const char *explanation)
|
||||
{
|
||||
GtkWidget *label, *image, *box;
|
||||
char *str;
|
||||
|
||||
box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
|
||||
gtk_widget_show (box);
|
||||
g_object_set (G_OBJECT (box), "margin-top", 64, "margin-bottom", 64, NULL);
|
||||
g_object_set (G_OBJECT (box), "margin-start", 12, "margin-end", 12, NULL);
|
||||
|
||||
image = gtk_image_new_from_icon_name (icon_name,
|
||||
GTK_ICON_SIZE_DIALOG);
|
||||
gtk_widget_show (image);
|
||||
gtk_image_set_pixel_size (GTK_IMAGE (image), 192);
|
||||
gtk_style_context_add_class (gtk_widget_get_style_context (image), "dim-label");
|
||||
gtk_box_pack_start (GTK_BOX (box), image, FALSE, FALSE, 24);
|
||||
|
||||
str = g_strdup_printf ("<span size=\"larger\" weight=\"bold\">%s</span>", message);
|
||||
label = gtk_label_new ("");
|
||||
gtk_widget_show (label);
|
||||
gtk_label_set_markup (GTK_LABEL (label), str);
|
||||
g_free (str);
|
||||
gtk_box_pack_start (GTK_BOX (box), label, FALSE, FALSE, 0);
|
||||
|
||||
label = gtk_label_new (explanation);
|
||||
gtk_widget_show (label);
|
||||
gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
|
||||
gtk_box_pack_start (GTK_BOX (box), label, FALSE, FALSE, 0);
|
||||
|
||||
gtk_container_add (GTK_CONTAINER (self->stack), box);
|
||||
|
||||
return GTK_BOX (box);
|
||||
}
|
||||
|
||||
static void
|
||||
panel_changed (CcBluetoothPanel *self,
|
||||
const char *panel)
|
||||
panel_changed_cb (CcBluetoothPanel *self,
|
||||
const char *panel)
|
||||
{
|
||||
CcShell *shell;
|
||||
g_autoptr(GError) error = NULL;
|
||||
|
@ -259,32 +213,38 @@ static void
|
|||
cc_bluetooth_panel_class_init (CcBluetoothPanelClass *klass)
|
||||
{
|
||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
|
||||
CcPanelClass *panel_class = CC_PANEL_CLASS (klass);
|
||||
|
||||
object_class->constructed = cc_bluetooth_panel_constructed;
|
||||
object_class->finalize = cc_bluetooth_panel_finalize;
|
||||
|
||||
panel_class->get_help_uri = cc_bluetooth_panel_get_help_uri;
|
||||
|
||||
gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/control-center/bluetooth/cc-bluetooth-panel.ui");
|
||||
|
||||
gtk_widget_class_bind_template_child (widget_class, CcBluetoothPanel, airplane_box);
|
||||
gtk_widget_class_bind_template_child (widget_class, CcBluetoothPanel, disabled_box);
|
||||
gtk_widget_class_bind_template_child (widget_class, CcBluetoothPanel, enable_switch);
|
||||
gtk_widget_class_bind_template_child (widget_class, CcBluetoothPanel, header_box);
|
||||
gtk_widget_class_bind_template_child (widget_class, CcBluetoothPanel, no_devices_box);
|
||||
gtk_widget_class_bind_template_child (widget_class, CcBluetoothPanel, hw_airplane_box);
|
||||
gtk_widget_class_bind_template_child (widget_class, CcBluetoothPanel, settings_widget);
|
||||
gtk_widget_class_bind_template_child (widget_class, CcBluetoothPanel, stack);
|
||||
|
||||
gtk_widget_class_bind_template_callback (widget_class, adapter_status_changed_cb);
|
||||
gtk_widget_class_bind_template_callback (widget_class, airplane_mode_off_button_clicked_cb);
|
||||
gtk_widget_class_bind_template_callback (widget_class, enable_switch_changed_cb);
|
||||
gtk_widget_class_bind_template_callback (widget_class, panel_changed_cb);
|
||||
}
|
||||
|
||||
static void
|
||||
cc_bluetooth_panel_init (CcBluetoothPanel *self)
|
||||
{
|
||||
GError *error = NULL;
|
||||
GtkWidget *button;
|
||||
|
||||
bluetooth_settings_widget_get_type ();
|
||||
g_resources_register (cc_bluetooth_get_resource ());
|
||||
|
||||
self->builder = gtk_builder_new ();
|
||||
gtk_builder_set_translation_domain (self->builder, GETTEXT_PACKAGE);
|
||||
gtk_builder_add_from_resource (self->builder,
|
||||
"/org/gnome/control-center/bluetooth/cc-bluetooth-panel.ui",
|
||||
&error);
|
||||
if (error != NULL) {
|
||||
g_warning ("Could not load ui: %s", error->message);
|
||||
g_error_free (error);
|
||||
return;
|
||||
}
|
||||
gtk_widget_init_template (GTK_WIDGET (self));
|
||||
|
||||
self->cancellable = g_cancellable_new ();
|
||||
|
||||
|
@ -302,48 +262,7 @@ cc_bluetooth_panel_init (CcBluetoothPanel *self)
|
|||
"org.freedesktop.DBus.Properties",
|
||||
NULL, NULL);
|
||||
|
||||
self->stack = GTK_STACK (gtk_stack_new ());
|
||||
gtk_stack_set_homogeneous (self->stack, TRUE);
|
||||
self->no_devices_box = add_stack_page (self,
|
||||
"bluetooth-active-symbolic",
|
||||
_("No Bluetooth Found"),
|
||||
_("Plug in a dongle to use Bluetooth."));
|
||||
self->disabled_box = add_stack_page (self,
|
||||
"bluetooth-active-symbolic",
|
||||
_("Bluetooth Turned Off"),
|
||||
_("Turn on to connect devices and receive file transfers."));
|
||||
self->airplane_box = add_stack_page (self,
|
||||
"airplane-mode-symbolic",
|
||||
_("Airplane Mode is on"),
|
||||
_("Bluetooth is disabled when airplane mode is on."));
|
||||
self->hw_airplane_box = add_stack_page (self,
|
||||
"airplane-mode-symbolic",
|
||||
_("Hardware Airplane Mode is on"),
|
||||
_("Turn off the Airplane mode switch to enable Bluetooth."));
|
||||
|
||||
button = gtk_button_new_with_label (_("Turn Off Airplane Mode"));
|
||||
gtk_widget_show (button);
|
||||
gtk_widget_set_valign (button, GTK_ALIGN_CENTER);
|
||||
gtk_widget_set_halign (button, GTK_ALIGN_CENTER);
|
||||
g_signal_connect_swapped (G_OBJECT (button), "clicked",
|
||||
G_CALLBACK (on_airplane_mode_off_clicked), self);
|
||||
gtk_box_pack_start (self->airplane_box, button, FALSE, FALSE, 24);
|
||||
|
||||
self->settings_widget = BLUETOOTH_SETTINGS_WIDGET (bluetooth_settings_widget_new ());
|
||||
g_signal_connect_swapped (G_OBJECT (self->settings_widget), "panel-changed",
|
||||
G_CALLBACK (panel_changed), self);
|
||||
gtk_container_add (GTK_CONTAINER (self->stack), GTK_WIDGET (self->settings_widget));
|
||||
gtk_widget_show (GTK_WIDGET (self->settings_widget));
|
||||
gtk_widget_show (GTK_WIDGET (self->stack));
|
||||
|
||||
gtk_container_add (GTK_CONTAINER (self), GTK_WIDGET (self->stack));
|
||||
|
||||
airplane_mode_changed (self);
|
||||
g_signal_connect_object (self->rfkill, "g-properties-changed",
|
||||
G_CALLBACK (airplane_mode_changed), self, G_CONNECT_SWAPPED);
|
||||
g_signal_connect_object (G_OBJECT (self->settings_widget), "adapter-status-changed",
|
||||
G_CALLBACK (cc_bluetooth_panel_update_power), self, G_CONNECT_SWAPPED);
|
||||
|
||||
g_signal_connect_swapped (G_OBJECT (WID ("switch_bluetooth")), "notify::active",
|
||||
G_CALLBACK (power_callback), self);
|
||||
G_CALLBACK (airplane_mode_changed), self, G_CONNECT_SWAPPED);
|
||||
}
|
||||
|
|
|
@ -1,16 +1,192 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- Generated with glade 3.16.0 on Fri Nov 29 16:46:49 2013 -->
|
||||
<interface>
|
||||
<!-- interface-requires gtk+ 3.0 -->
|
||||
<object class="GtkBox" id="box_power">
|
||||
<template class="CcBluetoothPanel" parent="CcPanel">
|
||||
<property name="visible">True</property>
|
||||
<child>
|
||||
<object class="GtkStack" id="stack">
|
||||
<property name="visible">True</property>
|
||||
<child>
|
||||
<object class="GtkBox" id="no_devices_box">
|
||||
<property name="visible">True</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="margin_top">64</property>
|
||||
<property name="margin_bottom">64</property>
|
||||
<property name="margin_start">12</property>
|
||||
<property name="margin_end">12</property>
|
||||
<property name="spacing">24</property>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="visible">True</property>
|
||||
<property name="icon_name">bluetooth-active-symbolic</property>
|
||||
<property name="pixel_size">192</property>
|
||||
<style>
|
||||
<class name="dim-label"/>
|
||||
</style>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">No Bluetooth Found</property>
|
||||
<attributes>
|
||||
<attribute name="weight" value="bold"/>
|
||||
<attribute name="scale" value="1.2"/>
|
||||
</attributes>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<property name="visible">True</property>
|
||||
<property name="wrap">True</property>
|
||||
<property name="label" translatable="yes">Plug in a dongle to use Bluetooth.</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox" id="disabled_box">
|
||||
<property name="visible">True</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="margin_top">64</property>
|
||||
<property name="margin_bottom">64</property>
|
||||
<property name="margin_start">12</property>
|
||||
<property name="margin_end">12</property>
|
||||
<property name="spacing">24</property>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="visible">True</property>
|
||||
<property name="icon_name">bluetooth-active-symbolic</property>
|
||||
<property name="pixel_size">192</property>
|
||||
<style>
|
||||
<class name="dim-label"/>
|
||||
</style>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Bluetooth Turned Off</property>
|
||||
<attributes>
|
||||
<attribute name="weight" value="bold"/>
|
||||
<attribute name="scale" value="1.2"/>
|
||||
</attributes>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<property name="visible">True</property>
|
||||
<property name="wrap">True</property>
|
||||
<property name="label" translatable="yes">Turn on to connect devices and receive file transfers.</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox" id="airplane_box">
|
||||
<property name="visible">True</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="margin_top">64</property>
|
||||
<property name="margin_bottom">64</property>
|
||||
<property name="margin_start">12</property>
|
||||
<property name="margin_end">12</property>
|
||||
<property name="spacing">24</property>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="visible">True</property>
|
||||
<property name="icon_name">airplane-mode-symbolic</property>
|
||||
<property name="pixel_size">192</property>
|
||||
<style>
|
||||
<class name="dim-label"/>
|
||||
</style>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Airplane Mode is on</property>
|
||||
<attributes>
|
||||
<attribute name="weight" value="bold"/>
|
||||
<attribute name="scale" value="1.2"/>
|
||||
</attributes>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<property name="visible">True</property>
|
||||
<property name="wrap">True</property>
|
||||
<property name="label" translatable="yes">Bluetooth is disabled when airplane mode is on.</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Turn Off Airplane Mode</property>
|
||||
<property name="halign">center</property>
|
||||
<property name="valign">center</property>
|
||||
<signal name="clicked" handler="airplane_mode_off_button_clicked_cb" object="CcBluetoothPanel" swapped="yes"/>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox" id="hw_airplane_box">
|
||||
<property name="visible">True</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="margin_top">64</property>
|
||||
<property name="margin_bottom">64</property>
|
||||
<property name="margin_start">12</property>
|
||||
<property name="margin_end">12</property>
|
||||
<property name="spacing">24</property>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="visible">True</property>
|
||||
<property name="icon_name">airplane-mode-symbolic</property>
|
||||
<property name="pixel_size">192</property>
|
||||
<style>
|
||||
<class name="dim-label"/>
|
||||
</style>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Hardware Airplane Mode is on</property>
|
||||
<attributes>
|
||||
<attribute name="weight" value="bold"/>
|
||||
<attribute name="scale" value="1.2"/>
|
||||
</attributes>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<property name="visible">True</property>
|
||||
<property name="wrap">True</property>
|
||||
<property name="label" translatable="yes">Turn off the Airplane mode switch to enable Bluetooth.</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="BluetoothSettingsWidget" id="settings_widget">
|
||||
<property name="visible">True</property>
|
||||
<signal name="panel-changed" handler="panel_changed_cb" object="CcBluetoothPanel" swapped="yes"/>
|
||||
<signal name="adapter-status-changed" handler="adapter_status_changed_cb" object="CcBluetoothPanel" swapped="yes"/>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</template>
|
||||
<object class="GtkBox" id="header_box">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkSwitch" id="switch_bluetooth">
|
||||
<object class="GtkSwitch" id="enable_switch">
|
||||
<property name="use_action_appearance">False</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="valign">center</property>
|
||||
<signal name="notify::active" handler="enable_switch_changed_cb" object="CcBluetoothPanel" swapped="yes"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
|
|
|
@ -11,7 +11,6 @@ panels/background/cc-background-panel.c
|
|||
panels/background/cc-background-panel.ui
|
||||
panels/background/cc-background-preview.ui
|
||||
panels/background/gnome-background-panel.desktop.in.in
|
||||
panels/bluetooth/cc-bluetooth-panel.c
|
||||
panels/bluetooth/cc-bluetooth-panel.ui
|
||||
panels/bluetooth/gnome-bluetooth-panel.desktop.in.in
|
||||
panels/color/cc-color-calibrate.c
|
||||
|
|
Loading…
Add table
Reference in a new issue