diff options
-rw-r--r-- | panels/bluetooth/cc-bluetooth-panel.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/panels/bluetooth/cc-bluetooth-panel.c b/panels/bluetooth/cc-bluetooth-panel.c index 17616e918..0a1c6e59b 100644 --- a/panels/bluetooth/cc-bluetooth-panel.c +++ b/panels/bluetooth/cc-bluetooth-panel.c @@ -50,6 +50,7 @@ CC_PANEL_REGISTER (CcBluetoothPanel, cc_bluetooth_panel) struct CcBluetoothPanelPrivate { GtkBuilder *builder; GtkWidget *chooser; + char *selected_bdaddr; BluetoothClient *client; BluetoothKillswitch *killswitch; gboolean debug; @@ -108,6 +109,8 @@ cc_bluetooth_panel_finalize (GObject *object) self->priv->client = NULL; } + g_clear_pointer (&self->priv->selected_bdaddr, g_free); + G_OBJECT_CLASS (cc_bluetooth_panel_parent_class)->finalize (object); } @@ -255,10 +258,12 @@ cc_bluetooth_panel_update_properties (CcBluetoothPanel *self) gtk_widget_hide (WID ("browse_box")); gtk_widget_hide (WID ("send_box")); + bdaddr = bluetooth_chooser_get_selected_device (BLUETOOTH_CHOOSER (self->priv->chooser)); + /* Remove the extra setup widgets */ - remove_extra_setup_widgets (self); + if (g_strcmp0 (self->priv->selected_bdaddr, bdaddr) != 0) + remove_extra_setup_widgets (self); - bdaddr = bluetooth_chooser_get_selected_device (BLUETOOTH_CHOOSER (self->priv->chooser)); if (bdaddr == NULL) { gtk_widget_set_sensitive (WID ("properties_vbox"), FALSE); gtk_switch_set_active (button, FALSE); @@ -329,15 +334,18 @@ cc_bluetooth_panel_update_properties (CcBluetoothPanel *self) } /* Extra widgets */ - add_extra_setup_widgets (self, bdaddr); + if (g_strcmp0 (self->priv->selected_bdaddr, bdaddr) != 0) + add_extra_setup_widgets (self, bdaddr); gtk_label_set_text (GTK_LABEL (WID ("address_label")), bdaddr); - g_free (bdaddr); gtk_widget_set_sensitive (WID ("button_delete"), TRUE); set_notebook_page (self, NOTEBOOK_PAGE_PROPS); } + g_free (self->priv->selected_bdaddr); + self->priv->selected_bdaddr = bdaddr; + g_signal_handlers_unblock_by_func (button, switch_connected_active_changed, self); } |