diff options
author | Jiří Klimeš <jklimes@redhat.com> | 2015-12-17 13:13:51 +0100 |
---|---|---|
committer | Jiří Klimeš <jklimes@redhat.com> | 2015-12-21 12:11:24 +0100 |
commit | 90017ad50ce00e2bc1e4a6fa17e860aecb2742ec (patch) | |
tree | 6672545299cc49da44853163bc711c0b9cae9686 | |
parent | 633c5562fc5bd99b74cef1599b8ea39b707798bc (diff) | |
download | network-manager-applet-90017ad50ce00e2bc1e4a6fa17e860aecb2742ec.tar.gz |
editor: populate available Bluetooth devices in Bluetooth page (rh #1271581)
(cherry picked from commit 7444686857e8829e3921857151594405df49405b)
-rw-r--r-- | src/connection-editor/ce-page-bluetooth.ui | 17 | ||||
-rw-r--r-- | src/connection-editor/ce-page.c | 15 | ||||
-rw-r--r-- | src/connection-editor/ce-page.h | 1 | ||||
-rw-r--r-- | src/connection-editor/page-bluetooth.c | 61 | ||||
-rw-r--r-- | src/connection-editor/page-ethernet.c | 4 | ||||
-rw-r--r-- | src/connection-editor/page-infiniband.c | 4 | ||||
-rw-r--r-- | src/connection-editor/page-wifi.c | 4 | ||||
-rw-r--r-- | src/connection-editor/page-wimax.c | 4 |
8 files changed, 80 insertions, 30 deletions
diff --git a/src/connection-editor/ce-page-bluetooth.ui b/src/connection-editor/ce-page-bluetooth.ui index f67ef9b0..e72a3c6f 100644 --- a/src/connection-editor/ce-page-bluetooth.ui +++ b/src/connection-editor/ce-page-bluetooth.ui @@ -10,13 +10,15 @@ <property name="column_spacing">12</property> <property name="row_spacing">6</property> <child> - <object class="GtkEntry" id="bluetooth_bdaddr"> + <object class="GtkBox" id="bluetooth_device_vbox"> + <property name="orientation">vertical</property> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="primary_icon_activatable">False</property> - <property name="secondary_icon_activatable">False</property> - <property name="primary_icon_sensitive">True</property> - <property name="secondary_icon_sensitive">True</property> + <property name="can_focus">False</property> + <property name="valign">start</property> + <property name="spacing">12</property> + <child> + <placeholder/> + </child> </object> <packing> <property name="left_attach">1</property> @@ -25,13 +27,12 @@ </packing> </child> <child> - <object class="GtkLabel" id="label1"> + <object class="GtkLabel" id="bluetooth_device_label"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> <property name="label" translatable="yes">_Device:</property> <property name="use_underline">True</property> - <property name="mnemonic_widget">bluetooth_bdaddr</property> </object> <packing> <property name="x_options">GTK_FILL</property> diff --git a/src/connection-editor/ce-page.c b/src/connection-editor/ce-page.c index f837a221..6cbea073 100644 --- a/src/connection-editor/ce-page.c +++ b/src/connection-editor/ce-page.c @@ -31,6 +31,7 @@ #include <nm-setting-connection.h> #include <nm-utils.h> +#include <nm-device-bt.h> #include "ce-page.h" #include "nma-marshal.h" @@ -425,7 +426,10 @@ _get_device_list (CEPage *self, if (!G_TYPE_CHECK_INSTANCE_TYPE (dev, device_type)) continue; - ifname = nm_device_get_iface (NM_DEVICE (dev)); + if (device_type == NM_TYPE_DEVICE_BT) + ifname = nm_device_bt_get_name (NM_DEVICE_BT (dev)); + else + ifname = nm_device_get_iface (NM_DEVICE (dev)); if (mac_property) g_object_get (G_OBJECT (dev), mac_property, &mac, NULL); @@ -457,7 +461,7 @@ _device_entry_parse (const char *entry_text, char **first, char **second) return TRUE; } - sp = strchr (entry_text, ' '); + sp = strstr (entry_text, " ("); if (sp) { *first = g_strndup (entry_text, sp - entry_text); left = sp + 1; @@ -553,7 +557,8 @@ ce_page_setup_device_combo (CEPage *self, } gboolean -ce_page_device_entry_get (GtkEntry *entry, int type, char **ifname, GByteArray **mac, const char *device_name, GError **error) +ce_page_device_entry_get (GtkEntry *entry, int type, gboolean check_ifname, + char **ifname, GByteArray **mac, const char *device_name, GError **error) { char *first, *second; const char *ifname_tmp = NULL, *mac_tmp = NULL; @@ -570,7 +575,7 @@ ce_page_device_entry_get (GtkEntry *entry, int type, char **ifname, GByteArray * if (first) { if (_mac_is_valid (first, type)) mac_tmp = first; - else if (nm_utils_iface_valid_name (first)) + else if (!check_ifname || nm_utils_iface_valid_name (first)) ifname_tmp = first; else valid = FALSE; @@ -581,7 +586,7 @@ ce_page_device_entry_get (GtkEntry *entry, int type, char **ifname, GByteArray * mac_tmp = second; else valid = FALSE; - } else if (nm_utils_iface_valid_name (second)) { + } else if (!check_ifname || nm_utils_iface_valid_name (second)) { if (!ifname_tmp) ifname_tmp = second; else diff --git a/src/connection-editor/ce-page.h b/src/connection-editor/ce-page.h index 69955f50..cda5978a 100644 --- a/src/connection-editor/ce-page.h +++ b/src/connection-editor/ce-page.h @@ -129,6 +129,7 @@ void ce_page_setup_device_combo (CEPage *self, gboolean ce_page_mac_entry_valid (GtkEntry *entry, int type, const char *property_name, GError **error); gboolean ce_page_interface_name_valid (const char *iface, const char *property_name, GError **error); gboolean ce_page_device_entry_get (GtkEntry *entry, int type, + gboolean check_ifname, char **ifname, GByteArray **mac, const char *device_name, GError **error); diff --git a/src/connection-editor/page-bluetooth.c b/src/connection-editor/page-bluetooth.c index d2b3ae44..7137a109 100644 --- a/src/connection-editor/page-bluetooth.c +++ b/src/connection-editor/page-bluetooth.c @@ -29,6 +29,8 @@ #include <nm-setting-connection.h> #include <nm-setting-bluetooth.h> +#include <nm-device-bt.h> +#include <nm-utils.h> #include "page-bluetooth.h" #include "nm-connection-editor.h" @@ -41,7 +43,7 @@ G_DEFINE_TYPE (CEPageBluetooth, ce_page_bluetooth, CE_TYPE_PAGE) typedef struct { NMSettingBluetooth *setting; - GtkEntry *bdaddr; + GtkComboBoxText *bdaddr; gboolean disposed; } CEPageBluetoothPrivate; @@ -51,10 +53,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 +79,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 +154,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, FALSE, 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 +173,28 @@ ce_page_validate_v (CEPage *page, NMConnection *connection, GError **error) { CEPageBluetooth *self = CE_PAGE_BLUETOOTH (page); CEPageBluetoothPrivate *priv = CE_PAGE_BLUETOOTH_GET_PRIVATE (self); - - if (!ce_page_mac_entry_valid (priv->bdaddr, ARPHRD_ETHER, _("bdaddr"), error)) - return FALSE; + GtkWidget *entry; + GByteArray *bdaddr = NULL; + char *str_addr; + + entry = gtk_bin_get_child (GTK_BIN (priv->bdaddr)); + if (entry) { + ce_page_device_entry_get (GTK_ENTRY (entry), ARPHRD_ETHER, FALSE, NULL, &bdaddr, NULL, NULL); + if (!bdaddr || !utils_ether_addr_valid ((struct ether_addr *)bdaddr->data)) { + if (bdaddr) + str_addr = nm_utils_hwaddr_ntoa (bdaddr->data, ARPHRD_ETHER); + else + str_addr = g_strdup ("null"); + g_set_error (error, NMA_ERROR, NMA_ERROR_GENERIC, + _("invalid Bluetooth device (%s)"), str_addr); + g_free (str_addr); + if (bdaddr) + g_byte_array_free (bdaddr, TRUE); + return FALSE; + } + if (bdaddr) + g_byte_array_free (bdaddr, TRUE); + } ui_to_setting (self); return nm_setting_verify (NM_SETTING (priv->setting), NULL, error); diff --git a/src/connection-editor/page-ethernet.c b/src/connection-editor/page-ethernet.c index 92404c8d..d10e2aed 100644 --- a/src/connection-editor/page-ethernet.c +++ b/src/connection-editor/page-ethernet.c @@ -312,7 +312,7 @@ ui_to_setting (CEPageEthernet *self) entry = gtk_bin_get_child (GTK_BIN (priv->device_combo)); if (entry) - ce_page_device_entry_get (GTK_ENTRY (entry), ARPHRD_ETHER, &ifname, &device_mac, NULL, NULL); + ce_page_device_entry_get (GTK_ENTRY (entry), ARPHRD_ETHER, TRUE, &ifname, &device_mac, NULL, NULL); cloned_mac = ce_page_entry_to_mac (priv->cloned_mac, ARPHRD_ETHER, NULL); g_object_set (s_con, @@ -345,7 +345,7 @@ ce_page_validate_v (CEPage *page, NMConnection *connection, GError **error) entry = gtk_bin_get_child (GTK_BIN (priv->device_combo)); if (entry) { - if (!ce_page_device_entry_get (GTK_ENTRY (entry), ARPHRD_ETHER, NULL, NULL, _("Ethernet device"), error)) + if (!ce_page_device_entry_get (GTK_ENTRY (entry), ARPHRD_ETHER, TRUE, NULL, NULL, _("Ethernet device"), error)) return FALSE; } diff --git a/src/connection-editor/page-infiniband.c b/src/connection-editor/page-infiniband.c index 8e1eae65..a3c8a329 100644 --- a/src/connection-editor/page-infiniband.c +++ b/src/connection-editor/page-infiniband.c @@ -199,7 +199,7 @@ ui_to_setting (CEPageInfiniband *self) entry = gtk_bin_get_child (GTK_BIN (priv->device_combo)); if (entry) - ce_page_device_entry_get (GTK_ENTRY (entry), ARPHRD_INFINIBAND, &ifname, &device_mac, NULL, NULL); + ce_page_device_entry_get (GTK_ENTRY (entry), ARPHRD_INFINIBAND, TRUE, &ifname, &device_mac, NULL, NULL); g_object_set (s_con, NM_SETTING_CONNECTION_INTERFACE_NAME, ifname, @@ -224,7 +224,7 @@ ce_page_validate_v (CEPage *page, NMConnection *connection, GError **error) entry = gtk_bin_get_child (GTK_BIN (priv->device_combo)); if (entry) { - if (!ce_page_device_entry_get (GTK_ENTRY (entry), ARPHRD_INFINIBAND, NULL, NULL, _("infiniband device"), error)) + if (!ce_page_device_entry_get (GTK_ENTRY (entry), ARPHRD_INFINIBAND, TRUE, NULL, NULL, _("infiniband device"), error)) return FALSE; } diff --git a/src/connection-editor/page-wifi.c b/src/connection-editor/page-wifi.c index 92494537..ac7cad2b 100644 --- a/src/connection-editor/page-wifi.c +++ b/src/connection-editor/page-wifi.c @@ -547,7 +547,7 @@ ui_to_setting (CEPageWifi *self) bssid = ce_page_entry_to_mac (GTK_ENTRY (entry), ARPHRD_ETHER, NULL); entry = gtk_bin_get_child (GTK_BIN (priv->device_combo)); if (entry) - ce_page_device_entry_get (GTK_ENTRY (entry), ARPHRD_ETHER, &ifname, &device_mac, NULL, NULL); + ce_page_device_entry_get (GTK_ENTRY (entry), ARPHRD_ETHER, TRUE, &ifname, &device_mac, NULL, NULL); cloned_mac = ce_page_entry_to_mac (priv->cloned_mac, ARPHRD_ETHER, NULL); g_object_set (s_con, @@ -592,7 +592,7 @@ ce_page_validate_v (CEPage *page, NMConnection *connection, GError **error) entry = gtk_bin_get_child (GTK_BIN (priv->device_combo)); if (entry) { - if (!ce_page_device_entry_get (GTK_ENTRY (entry), ARPHRD_ETHER, NULL, NULL, _("Wi-Fi device"), error)) + if (!ce_page_device_entry_get (GTK_ENTRY (entry), ARPHRD_ETHER, TRUE, NULL, NULL, _("Wi-Fi device"), error)) return FALSE; } diff --git a/src/connection-editor/page-wimax.c b/src/connection-editor/page-wimax.c index e7a470e6..ff880137 100644 --- a/src/connection-editor/page-wimax.c +++ b/src/connection-editor/page-wimax.c @@ -158,7 +158,7 @@ ui_to_setting (CEPageWimax *self) entry = gtk_bin_get_child (GTK_BIN (priv->device_combo)); if (entry) - ce_page_device_entry_get (GTK_ENTRY (entry), ARPHRD_ETHER, &ifname, &device_mac, NULL, NULL); + ce_page_device_entry_get (GTK_ENTRY (entry), ARPHRD_ETHER, TRUE, &ifname, &device_mac, NULL, NULL); g_object_set (s_con, NM_SETTING_CONNECTION_INTERFACE_NAME, ifname, @@ -189,7 +189,7 @@ ce_page_validate_v (CEPage *page, NMConnection *connection, GError **error) entry = gtk_bin_get_child (GTK_BIN (priv->device_combo)); if (entry) { - if (!ce_page_device_entry_get (GTK_ENTRY (entry), ARPHRD_ETHER, NULL, NULL, _("WiMAX device"), error)) + if (!ce_page_device_entry_get (GTK_ENTRY (entry), ARPHRD_ETHER, TRUE, NULL, NULL, _("WiMAX device"), error)) return FALSE; } |