summaryrefslogtreecommitdiff
path: root/src/connection-editor/page-bluetooth.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/connection-editor/page-bluetooth.c')
-rw-r--r--src/connection-editor/page-bluetooth.c43
1 files changed, 35 insertions, 8 deletions
diff --git a/src/connection-editor/page-bluetooth.c b/src/connection-editor/page-bluetooth.c
index d2b3ae44..d2f7e729 100644
--- a/src/connection-editor/page-bluetooth.c
+++ b/src/connection-editor/page-bluetooth.c
@@ -29,6 +29,7 @@
#include <nm-setting-connection.h>
#include <nm-setting-bluetooth.h>
+#include <nm-device-bt.h>
#include "page-bluetooth.h"
#include "nm-connection-editor.h"
@@ -41,7 +42,7 @@ G_DEFINE_TYPE (CEPageBluetooth, ce_page_bluetooth, CE_TYPE_PAGE)
typedef struct {
NMSettingBluetooth *setting;
- GtkEntry *bdaddr;
+ GtkComboBoxText *bdaddr;
gboolean disposed;
} CEPageBluetoothPrivate;
@@ -51,10 +52,24 @@ bluetooth_private_init (CEPageBluetooth *self)
{
CEPageBluetoothPrivate *priv = CE_PAGE_BLUETOOTH_GET_PRIVATE (self);
GtkBuilder *builder;
+ GtkWidget *vbox;
+ GtkLabel *label;
builder = CE_PAGE (self)->builder;
- priv->bdaddr = GTK_ENTRY (gtk_builder_get_object (builder, "bluetooth_bdaddr"));
+ priv->bdaddr = GTK_COMBO_BOX_TEXT (gtk_combo_box_text_new_with_entry ());
+ gtk_combo_box_set_entry_text_column (GTK_COMBO_BOX (priv->bdaddr), 0);
+ gtk_widget_set_tooltip_text (GTK_WIDGET (priv->bdaddr),
+ _("MAC address of the Bluetooth device. Example: 00:11:22:33:44:55"));
+
+ vbox = GTK_WIDGET (gtk_builder_get_object (builder, "bluetooth_device_vbox"));
+ gtk_container_add (GTK_CONTAINER (vbox), GTK_WIDGET (priv->bdaddr));
+ gtk_widget_set_halign (GTK_WIDGET (priv->bdaddr), GTK_ALIGN_FILL);
+ gtk_widget_show_all (GTK_WIDGET (priv->bdaddr));
+
+ /* Set mnemonic widget for Device label */
+ label = GTK_LABEL (gtk_builder_get_object (builder, "bluetooth_device_label"));
+ gtk_label_set_mnemonic_widget (label, GTK_WIDGET (priv->bdaddr));
}
@@ -63,9 +78,13 @@ populate_ui (CEPageBluetooth *self, NMConnection *connection)
{
CEPageBluetoothPrivate *priv = CE_PAGE_BLUETOOTH_GET_PRIVATE (self);
NMSettingBluetooth *setting = priv->setting;
+ const GByteArray *bdaddr;
- ce_page_mac_to_entry (nm_setting_bluetooth_get_bdaddr (setting),
- ARPHRD_ETHER, priv->bdaddr);
+ bdaddr = nm_setting_bluetooth_get_bdaddr (setting);
+ ce_page_setup_device_combo (CE_PAGE (self), GTK_COMBO_BOX (priv->bdaddr),
+ NM_TYPE_DEVICE_BT, NULL,
+ bdaddr, ARPHRD_ETHER, NM_DEVICE_BT_HW_ADDRESS, TRUE);
+ g_signal_connect_swapped (priv->bdaddr, "changed", G_CALLBACK (ce_page_changed), self);
}
static void
@@ -134,9 +153,13 @@ static void
ui_to_setting (CEPageBluetooth *self)
{
CEPageBluetoothPrivate *priv = CE_PAGE_BLUETOOTH_GET_PRIVATE (self);
- GByteArray *bdaddr;
+ GtkWidget *entry;
+ GByteArray *bdaddr = NULL;
+
+ entry = gtk_bin_get_child (GTK_BIN (priv->bdaddr));
+ if (entry)
+ ce_page_device_entry_get (GTK_ENTRY (entry), ARPHRD_ETHER, NULL, &bdaddr, NULL, NULL);
- bdaddr = ce_page_entry_to_mac (priv->bdaddr, ARPHRD_ETHER, NULL);
g_object_set (priv->setting,
NM_SETTING_BLUETOOTH_BDADDR, bdaddr,
NULL);
@@ -149,9 +172,13 @@ ce_page_validate_v (CEPage *page, NMConnection *connection, GError **error)
{
CEPageBluetooth *self = CE_PAGE_BLUETOOTH (page);
CEPageBluetoothPrivate *priv = CE_PAGE_BLUETOOTH_GET_PRIVATE (self);
+ GtkWidget *entry;
- if (!ce_page_mac_entry_valid (priv->bdaddr, ARPHRD_ETHER, _("bdaddr"), error))
- return FALSE;
+ entry = gtk_bin_get_child (GTK_BIN (priv->bdaddr));
+ if (entry) {
+ if (!ce_page_device_entry_get (GTK_ENTRY (entry), ARPHRD_ETHER, NULL, NULL, _("Bluetooth device"), error))
+ return FALSE;
+ }
ui_to_setting (self);
return nm_setting_verify (NM_SETTING (priv->setting), NULL, error);