Re: [Bluez-devel] [PATCH] Attempt bonding with keyboards.

David Woodhouse
2007-09-22T23:10:59Z

On Sat, 2007-09-22 at 20:57 +0200, Marcel Holtmann wrote:
> I think it should be part of the UI and it should create the pairing
> before connecting the input device.

In the meantime, this would at least let the user initiate bonding
'manually' through the GUI, without having to use hcitool.

diff --git a/properties/adapter.c b/properties/adapter.c
index b9109cb..17b3aba 100644
--- a/properties/adapter.c
+++ b/properties/adapter.c
@@ -71,7 +71,7 @@ struct adapter_data {
GtkWidget *timeout_scale;
GtkWidget *entry;
GtkWidget *combo;
- GtkWidget *button_delete;
+ GtkWidget *button_bonding;
GtkWidget *button_trusted;
GtkWidget *button_disconnect;
GtkTreeSelection *selection;
@@ -248,7 +248,11 @@ static void update_buttons(struct adapter_data *adapter, gboolean bonded,
gtk_button_set_label(GTK_BUTTON(adapter->button_trusted),
_("Remove _Trust"));

- gtk_widget_set_sensitive(adapter->button_delete, bonded);
+ gtk_widget_set_sensitive(adapter->button_bonding, 1);
+ if (bonded)
+ gtk_button_set_label(GTK_BUTTON(adapter->button_bonding), _("Delete _Bonding"));
+ else
+ gtk_button_set_label(GTK_BUTTON(adapter->button_bonding), _("Create _Bonding"));

gtk_widget_set_sensitive(adapter->button_disconnect, connected);
}
@@ -270,10 +274,13 @@ static void select_callback(GtkTreeSelection *selection, gpointer user_data)

update_buttons(adapter, bonded, trusted, connected);

- if (selected == TRUE)
+ if (selected == TRUE) {
gtk_widget_show(adapter->button_trusted);
- else
+ gtk_widget_show(adapter->button_bonding);
+ } else {
gtk_widget_hide(adapter->button_trusted);
+ gtk_widget_hide(adapter->button_bonding);
+ }
}

static void row_callback(GtkTreeModel *model, GtkTreePath *path,
@@ -293,21 +300,28 @@ static void row_callback(GtkTreeModel *model, GtkTreePath *path,
update_buttons(adapter, bonded, trusted, connected);
}

-static void delete_callback(GtkWidget *button, gpointer user_data)
+static void bonding_callback(GtkWidget *button, gpointer user_data)
{
struct adapter_data *adapter = user_data;
GtkTreeModel *model;
GtkTreeIter iter;
gchar *address;
+ gboolean bonded;

if (gtk_tree_selection_get_selected(adapter->selection,
&model, &iter) == FALSE)
return;

- gtk_tree_model_get(model, &iter, COLUMN_ADDRESS, &address, -1);
+ gtk_tree_model_get(model, &iter, COLUMN_ADDRESS, &address,
+ COLUMN_BONDED, &bonded, -1);

- if (show_confirm_dialog() == TRUE)
- bluetooth_client_remove_bonding(client, adapter->path, address);
+ if (bonded) {
+ if (show_confirm_dialog() == TRUE)
+ bluetooth_client_remove_bonding(client, adapter->path, address);
+ } else {
+ bluetooth_client_create_bonding(client, adapter->path, address);
+ }
+

g_free(address);
}
@@ -762,14 +776,14 @@ static void create_adapter(struct adapter_data *adapter)
gtk_box_set_homogeneous(GTK_BOX(buttonbox), FALSE);
gtk_box_pack_start(GTK_BOX(vbox), buttonbox, FALSE, FALSE, 0);

- button = gtk_button_new_from_stock(GTK_STOCK_DELETE);
- gtk_widget_set_sensitive(GTK_WIDGET(button), FALSE);
+ button = gtk_button_new_with_mnemonic(NULL);
+ gtk_widget_set_no_show_all(button, TRUE);
gtk_container_add(GTK_CONTAINER(buttonbox), button);

g_signal_connect(G_OBJECT(button), "clicked",
- G_CALLBACK(delete_callback), adapter);
+ G_CALLBACK(bonding_callback), adapter);

- adapter->button_delete = button;
+ adapter->button_bonding = button;

button = gtk_button_new_with_mnemonic(NULL);
gtk_widget_set_no_show_all(button, TRUE);