|
Packit Service |
fc05fa |
/*
|
|
Packit Service |
fc05fa |
*
|
|
Packit Service |
fc05fa |
* BlueZ - Bluetooth protocol stack for Linux
|
|
Packit Service |
fc05fa |
*
|
|
Packit Service |
fc05fa |
* Copyright (C) 2005-2008 Marcel Holtmann <marcel@holtmann.org>
|
|
Packit Service |
fc05fa |
* Copyright (C) 2006-2007 Bastien Nocera <hadess@hadess.net>
|
|
Packit Service |
fc05fa |
*
|
|
Packit Service |
fc05fa |
*
|
|
Packit Service |
fc05fa |
* This program is free software; you can redistribute it and/or modify
|
|
Packit Service |
fc05fa |
* it under the terms of the GNU General Public License as published by
|
|
Packit Service |
fc05fa |
* the Free Software Foundation; either version 2 of the License, or
|
|
Packit Service |
fc05fa |
* (at your option) any later version.
|
|
Packit Service |
fc05fa |
*
|
|
Packit Service |
fc05fa |
* This program is distributed in the hope that it will be useful,
|
|
Packit Service |
fc05fa |
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit Service |
fc05fa |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
Packit Service |
fc05fa |
* GNU General Public License for more details.
|
|
Packit Service |
fc05fa |
*
|
|
Packit Service |
fc05fa |
* You should have received a copy of the GNU General Public License
|
|
Packit Service |
fc05fa |
* along with this program; if not, write to the Free Software
|
|
Packit Service |
fc05fa |
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
Packit Service |
fc05fa |
*
|
|
Packit Service |
fc05fa |
*/
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
#ifdef HAVE_CONFIG_H
|
|
Packit Service |
fc05fa |
#include <config.h>
|
|
Packit Service |
fc05fa |
#endif
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
#include <gtk/gtk.h>
|
|
Packit Service |
fc05fa |
#include <stdlib.h>
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
#include "bluetooth-chooser.h"
|
|
Packit Service |
fc05fa |
#include "bluetooth-chooser-button.h"
|
|
Packit Service |
fc05fa |
#include "bluetooth-chooser-combo.h"
|
|
Packit Service |
fc05fa |
#include "bluetooth-chooser-private.h"
|
|
Packit Service |
fc05fa |
#include "bluetooth-client.h"
|
|
Packit Service |
fc05fa |
#include "bluetooth-client-private.h"
|
|
Packit Service |
fc05fa |
#include "bluetooth-utils.h"
|
|
Packit Service |
fc05fa |
#include "bluetooth-filter-widget.h"
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
static void select_device_changed(BluetoothChooser *sel,
|
|
Packit Service |
fc05fa |
gchar *address, gpointer user_data)
|
|
Packit Service |
fc05fa |
{
|
|
Packit Service |
fc05fa |
GtkDialog *dialog = user_data;
|
|
Packit Service |
fc05fa |
char *name;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
name = bluetooth_chooser_get_selected_device_name (sel);
|
|
Packit Service |
fc05fa |
gtk_dialog_set_response_sensitive(dialog,
|
|
Packit Service |
fc05fa |
GTK_RESPONSE_ACCEPT, (address != NULL && name != NULL));
|
|
Packit Service |
fc05fa |
g_free (name);
|
|
Packit Service |
fc05fa |
}
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
static void selected_device_activated(BluetoothChooser *sel,
|
|
Packit Service |
fc05fa |
gchar *address, gpointer user_data)
|
|
Packit Service |
fc05fa |
{
|
|
Packit Service |
fc05fa |
GtkDialog *dialog = user_data;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
gtk_dialog_response(dialog, GTK_RESPONSE_ACCEPT);
|
|
Packit Service |
fc05fa |
}
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
static void device_selected_cb(GObject *object,
|
|
Packit Service |
fc05fa |
GParamSpec *spec, gpointer user_data)
|
|
Packit Service |
fc05fa |
{
|
|
Packit Service |
fc05fa |
g_message ("Property \"device-selected\" changed");
|
|
Packit Service |
fc05fa |
if (bluetooth_chooser_get_selected_device (BLUETOOTH_CHOOSER (object)))
|
|
Packit Service |
fc05fa |
bluetooth_chooser_dump_selected_device (BLUETOOTH_CHOOSER (object));
|
|
Packit Service |
fc05fa |
}
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
static void device_type_filter_selected_cb(GObject *object,
|
|
Packit Service |
fc05fa |
GParamSpec *spec, gpointer user_data)
|
|
Packit Service |
fc05fa |
{
|
|
Packit Service |
fc05fa |
g_message ("Property \"device-type-filter\" changed");
|
|
Packit Service |
fc05fa |
}
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
static void device_category_filter_selected_cb(GObject *object,
|
|
Packit Service |
fc05fa |
GParamSpec *spec, gpointer user_data)
|
|
Packit Service |
fc05fa |
{
|
|
Packit Service |
fc05fa |
g_message ("Property \"device-category-filter\" changed");
|
|
Packit Service |
fc05fa |
}
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
/* Phone chooser */
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
static void
|
|
Packit Service |
fc05fa |
chooser_created (BluetoothChooserButton *button, BluetoothChooser *chooser, gpointer data)
|
|
Packit Service |
fc05fa |
{
|
|
Packit Service |
fc05fa |
g_object_set(chooser,
|
|
Packit Service |
fc05fa |
"show-searching", FALSE,
|
|
Packit Service |
fc05fa |
"show-pairing", FALSE,
|
|
Packit Service |
fc05fa |
"show-device-type", FALSE,
|
|
Packit Service |
fc05fa |
"device-type-filter", BLUETOOTH_TYPE_PHONE,
|
|
Packit Service |
fc05fa |
"show-device-category", FALSE,
|
|
Packit Service |
fc05fa |
"device-category-filter", BLUETOOTH_CATEGORY_PAIRED,
|
|
Packit Service |
fc05fa |
NULL);
|
|
Packit Service |
fc05fa |
}
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
static void
|
|
Packit Service |
fc05fa |
is_available_changed (GObject *gobject,
|
|
Packit Service |
fc05fa |
GParamSpec *pspec,
|
|
Packit Service |
fc05fa |
gpointer user_data)
|
|
Packit Service |
fc05fa |
{
|
|
Packit Service |
fc05fa |
gboolean is_available;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
g_object_get (gobject, "is-available", &is_available, NULL);
|
|
Packit Service |
fc05fa |
g_message ("button is available: %d", is_available);
|
|
Packit Service |
fc05fa |
gtk_widget_set_sensitive (GTK_WIDGET (gobject), is_available);
|
|
Packit Service |
fc05fa |
}
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
static void
|
|
Packit Service |
fc05fa |
device_changed (GObject *gobject,
|
|
Packit Service |
fc05fa |
GParamSpec *pspec,
|
|
Packit Service |
fc05fa |
gpointer user_data)
|
|
Packit Service |
fc05fa |
{
|
|
Packit Service |
fc05fa |
char *device;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
g_object_get (gobject, "device", &device, NULL);
|
|
Packit Service |
fc05fa |
g_message ("Property \"device\" changed to '%s'", device);
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
g_free (device);
|
|
Packit Service |
fc05fa |
}
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
static GtkWidget *
|
|
Packit Service |
fc05fa |
create_phone_dialogue (const char *bdaddr)
|
|
Packit Service |
fc05fa |
{
|
|
Packit Service |
fc05fa |
GtkWidget *dialog, *button;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
dialog = g_object_new(GTK_TYPE_DIALOG,
|
|
Packit Service |
fc05fa |
"use-header-bar", 1,
|
|
Packit Service |
fc05fa |
"title", "My test prefs",
|
|
Packit Service |
fc05fa |
NULL);
|
|
Packit Service |
fc05fa |
button = bluetooth_chooser_button_new ();
|
|
Packit Service |
fc05fa |
if (bdaddr != NULL)
|
|
Packit Service |
fc05fa |
g_object_set (G_OBJECT (button), "device", bdaddr, NULL);
|
|
Packit Service |
fc05fa |
g_signal_connect (G_OBJECT (button), "chooser-created",
|
|
Packit Service |
fc05fa |
G_CALLBACK (chooser_created), NULL);
|
|
Packit Service |
fc05fa |
g_signal_connect (G_OBJECT (button), "notify::is-available",
|
|
Packit Service |
fc05fa |
G_CALLBACK (is_available_changed), NULL);
|
|
Packit Service |
fc05fa |
g_signal_connect (G_OBJECT (button), "notify::device",
|
|
Packit Service |
fc05fa |
G_CALLBACK (device_changed), NULL);
|
|
Packit Service |
fc05fa |
is_available_changed (G_OBJECT (button), NULL, NULL);
|
|
Packit Service |
fc05fa |
gtk_widget_show (button);
|
|
Packit Service |
fc05fa |
gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))),
|
|
Packit Service |
fc05fa |
button, TRUE, TRUE, 0);
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
g_signal_connect (G_OBJECT (dialog), "response",
|
|
Packit Service |
fc05fa |
G_CALLBACK (gtk_main_quit), NULL);
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
g_object_add_weak_pointer (G_OBJECT(dialog), (gpointer *) (&dialog));
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
return dialog;
|
|
Packit Service |
fc05fa |
}
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
/* Wizard and co. */
|
|
Packit Service |
fc05fa |
static GtkWidget *
|
|
Packit Service |
fc05fa |
create_dialogue (const char *title)
|
|
Packit Service |
fc05fa |
{
|
|
Packit Service |
fc05fa |
GtkWidget *dialog, *button;
|
|
Packit Service |
fc05fa |
GtkStyleContext *context;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
dialog = g_object_new (GTK_TYPE_DIALOG,
|
|
Packit Service |
fc05fa |
"use-header-bar", 1,
|
|
Packit Service |
fc05fa |
"title", title,
|
|
Packit Service |
fc05fa |
NULL);
|
|
Packit Service |
fc05fa |
gtk_dialog_add_buttons(GTK_DIALOG (dialog),
|
|
Packit Service |
fc05fa |
"_Cancel", GTK_RESPONSE_CANCEL,
|
|
Packit Service |
fc05fa |
"Connect", GTK_RESPONSE_ACCEPT, NULL);
|
|
Packit Service |
fc05fa |
gtk_dialog_set_response_sensitive(GTK_DIALOG(dialog),
|
|
Packit Service |
fc05fa |
GTK_RESPONSE_ACCEPT, FALSE);
|
|
Packit Service |
fc05fa |
gtk_window_set_default_size(GTK_WINDOW(dialog), 480, 400);
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
gtk_container_set_border_width (GTK_CONTAINER (dialog), 5);
|
|
Packit Service |
fc05fa |
gtk_box_set_spacing (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), 2);
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
button = gtk_dialog_get_widget_for_response(GTK_DIALOG (dialog), GTK_RESPONSE_ACCEPT);
|
|
Packit Service |
fc05fa |
context = gtk_widget_get_style_context(button);
|
|
Packit Service |
fc05fa |
gtk_style_context_add_class (context, "suggested-action");
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
return dialog;
|
|
Packit Service |
fc05fa |
}
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
static void
|
|
Packit Service |
fc05fa |
response_cb (GtkDialog *dialog, gint response_id, BluetoothChooser *selector)
|
|
Packit Service |
fc05fa |
{
|
|
Packit Service |
fc05fa |
if (response_id == GTK_RESPONSE_ACCEPT) {
|
|
Packit Service |
fc05fa |
char *address, *name, *icon;
|
|
Packit Service |
fc05fa |
guint type;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
address = bluetooth_chooser_get_selected_device (selector);
|
|
Packit Service |
fc05fa |
name = bluetooth_chooser_get_selected_device_name (selector);
|
|
Packit Service |
fc05fa |
icon = bluetooth_chooser_get_selected_device_icon (selector);
|
|
Packit Service |
fc05fa |
type = bluetooth_chooser_get_selected_device_type (selector);
|
|
Packit Service |
fc05fa |
g_message("Selected device is: %s (address: %s, icon: %s, type: %s)",
|
|
Packit Service |
fc05fa |
name, address, icon, bluetooth_type_to_string (type));
|
|
Packit Service |
fc05fa |
g_free(address);
|
|
Packit Service |
fc05fa |
g_free (name);
|
|
Packit Service |
fc05fa |
g_free (icon);
|
|
Packit Service |
fc05fa |
} else {
|
|
Packit Service |
fc05fa |
g_message ("No selected device");
|
|
Packit Service |
fc05fa |
}
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
if (response_id == GTK_RESPONSE_DELETE_EVENT)
|
|
Packit Service |
fc05fa |
exit (0);
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
gtk_main_quit ();
|
|
Packit Service |
fc05fa |
}
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
static GtkWidget *
|
|
Packit Service |
fc05fa |
create_wizard_dialogue (void)
|
|
Packit Service |
fc05fa |
{
|
|
Packit Service |
fc05fa |
GtkWidget *dialog, *selector;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
dialog = create_dialogue ("Add a Device");
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
selector = bluetooth_chooser_new();
|
|
Packit Service |
fc05fa |
gtk_container_set_border_width(GTK_CONTAINER(selector), 5);
|
|
Packit Service |
fc05fa |
gtk_widget_show(selector);
|
|
Packit Service |
fc05fa |
g_object_set(selector,
|
|
Packit Service |
fc05fa |
"show-searching", TRUE,
|
|
Packit Service |
fc05fa |
"show-device-type", TRUE,
|
|
Packit Service |
fc05fa |
"show-device-category", FALSE,
|
|
Packit Service |
fc05fa |
"device-category-filter", BLUETOOTH_CATEGORY_NOT_PAIRED_OR_TRUSTED,
|
|
Packit Service |
fc05fa |
NULL);
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
g_signal_connect(selector, "selected-device-changed",
|
|
Packit Service |
fc05fa |
G_CALLBACK(select_device_changed), dialog);
|
|
Packit Service |
fc05fa |
g_signal_connect(selector, "notify::device-selected",
|
|
Packit Service |
fc05fa |
G_CALLBACK(device_selected_cb), dialog);
|
|
Packit Service |
fc05fa |
g_signal_connect(selector, "notify::device-type-filter",
|
|
Packit Service |
fc05fa |
G_CALLBACK(device_type_filter_selected_cb), dialog);
|
|
Packit Service |
fc05fa |
g_signal_connect(selector, "notify::device-category-filter",
|
|
Packit Service |
fc05fa |
G_CALLBACK(device_category_filter_selected_cb), dialog);
|
|
Packit Service |
fc05fa |
g_signal_connect(selector, "selected-device-activated",
|
|
Packit Service |
fc05fa |
G_CALLBACK(selected_device_activated), dialog);
|
|
Packit Service |
fc05fa |
gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG(dialog))), selector,
|
|
Packit Service |
fc05fa |
TRUE, TRUE, 0);
|
|
Packit Service |
fc05fa |
bluetooth_chooser_start_discovery (BLUETOOTH_CHOOSER (selector));
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
g_signal_connect (G_OBJECT (dialog), "response",
|
|
Packit Service |
fc05fa |
G_CALLBACK (response_cb), selector);
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
return dialog;
|
|
Packit Service |
fc05fa |
}
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
static GtkWidget *
|
|
Packit Service |
fc05fa |
create_props_dialogue (void)
|
|
Packit Service |
fc05fa |
{
|
|
Packit Service |
fc05fa |
GtkWidget *dialog, *selector;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
dialog = create_dialogue ("Add a Device");
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
selector = bluetooth_chooser_new();
|
|
Packit Service |
fc05fa |
gtk_container_set_border_width(GTK_CONTAINER(selector), 5);
|
|
Packit Service |
fc05fa |
gtk_widget_show(selector);
|
|
Packit Service |
fc05fa |
g_object_set(selector,
|
|
Packit Service |
fc05fa |
"show-searching", FALSE,
|
|
Packit Service |
fc05fa |
"show-device-type", FALSE,
|
|
Packit Service |
fc05fa |
"show-device-category", FALSE,
|
|
Packit Service |
fc05fa |
"show-pairing", TRUE,
|
|
Packit Service |
fc05fa |
"show-connected", TRUE,
|
|
Packit Service |
fc05fa |
"device-category-filter", BLUETOOTH_CATEGORY_PAIRED_OR_TRUSTED,
|
|
Packit Service |
fc05fa |
NULL);
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
g_signal_connect(selector, "selected-device-changed",
|
|
Packit Service |
fc05fa |
G_CALLBACK(select_device_changed), dialog);
|
|
Packit Service |
fc05fa |
g_signal_connect(selector, "notify::device-selected",
|
|
Packit Service |
fc05fa |
G_CALLBACK(device_selected_cb), dialog);
|
|
Packit Service |
fc05fa |
g_signal_connect(selector, "notify::device-type-filter",
|
|
Packit Service |
fc05fa |
G_CALLBACK(device_type_filter_selected_cb), dialog);
|
|
Packit Service |
fc05fa |
g_signal_connect(selector, "notify::device-category-filter",
|
|
Packit Service |
fc05fa |
G_CALLBACK(device_category_filter_selected_cb), dialog);
|
|
Packit Service |
fc05fa |
g_signal_connect(selector, "selected-device-activated",
|
|
Packit Service |
fc05fa |
G_CALLBACK(selected_device_activated), dialog);
|
|
Packit Service |
fc05fa |
gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG(dialog))), selector,
|
|
Packit Service |
fc05fa |
TRUE, TRUE, 0);
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
g_signal_connect (G_OBJECT (dialog), "response",
|
|
Packit Service |
fc05fa |
G_CALLBACK (response_cb), selector);
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
return dialog;
|
|
Packit Service |
fc05fa |
}
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
static void device_changed_cb (GObject *object,
|
|
Packit Service |
fc05fa |
GParamSpec *spec,
|
|
Packit Service |
fc05fa |
GtkDialog *dialog)
|
|
Packit Service |
fc05fa |
{
|
|
Packit Service |
fc05fa |
char *device;
|
|
Packit Service |
fc05fa |
BluetoothChooser *chooser;
|
|
Packit Service |
fc05fa |
GtkWidget *tree;
|
|
Packit Service |
fc05fa |
GtkTreeModel *model;
|
|
Packit Service |
fc05fa |
GtkTreeSelection *selection;
|
|
Packit Service |
fc05fa |
GtkTreeIter iter;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
g_object_get (object, "device", &device, NULL);
|
|
Packit Service |
fc05fa |
g_message ("Property \"device\" changed to '%s'", device);
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
gtk_dialog_set_response_sensitive (dialog,
|
|
Packit Service |
fc05fa |
GTK_RESPONSE_ACCEPT,
|
|
Packit Service |
fc05fa |
device != NULL);
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
g_object_get (object, "chooser", &chooser, NULL);
|
|
Packit Service |
fc05fa |
tree = bluetooth_chooser_get_treeview (BLUETOOTH_CHOOSER (chooser));
|
|
Packit Service |
fc05fa |
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (tree));
|
|
Packit Service |
fc05fa |
gtk_tree_selection_get_selected (selection, &model, &iter);
|
|
Packit Service |
fc05fa |
if (model != NULL)
|
|
Packit Service |
fc05fa |
bluetooth_client_dump_device (model, &iter);
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
g_object_unref (chooser);
|
|
Packit Service |
fc05fa |
g_free (device);
|
|
Packit Service |
fc05fa |
}
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
static GtkWidget *
|
|
Packit Service |
fc05fa |
create_combo_dialogue (const char *bdaddr)
|
|
Packit Service |
fc05fa |
{
|
|
Packit Service |
fc05fa |
GtkWidget *dialog, *selector, *chooser;
|
|
Packit Service |
fc05fa |
const char *filter = "OBEXObjectPush";
|
|
Packit Service |
fc05fa |
// const char *filter[] = { "OBEXObjectPush", "OBEXFileTransfer", NULL };
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
dialog = create_dialogue ("Add a Device");
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
selector = bluetooth_chooser_combo_new ();
|
|
Packit Service |
fc05fa |
g_signal_connect (G_OBJECT (selector), "notify::device",
|
|
Packit Service |
fc05fa |
G_CALLBACK (device_changed_cb), dialog);
|
|
Packit Service |
fc05fa |
g_object_get (G_OBJECT (selector), "chooser", &chooser, NULL);
|
|
Packit Service |
fc05fa |
g_object_set(chooser,
|
|
Packit Service |
fc05fa |
"show-searching", TRUE,
|
|
Packit Service |
fc05fa |
"show-device-type", TRUE,
|
|
Packit Service |
fc05fa |
"show-device-category", TRUE,
|
|
Packit Service |
fc05fa |
"show-pairing", TRUE,
|
|
Packit Service |
fc05fa |
"show-connected", FALSE,
|
|
Packit Service |
fc05fa |
"device-service-filter", filter,
|
|
Packit Service |
fc05fa |
NULL);
|
|
Packit Service |
fc05fa |
g_object_set (G_OBJECT (selector), "device", bdaddr, NULL);
|
|
Packit Service |
fc05fa |
bluetooth_chooser_start_discovery (BLUETOOTH_CHOOSER (chooser));
|
|
Packit Service |
fc05fa |
gtk_container_set_border_width(GTK_CONTAINER(selector), 5);
|
|
Packit Service |
fc05fa |
gtk_widget_show(selector);
|
|
Packit Service |
fc05fa |
gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))),
|
|
Packit Service |
fc05fa |
selector, TRUE, FALSE, 6);
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
g_signal_connect (G_OBJECT (dialog), "response",
|
|
Packit Service |
fc05fa |
G_CALLBACK (response_cb), chooser);
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
return dialog;
|
|
Packit Service |
fc05fa |
}
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
static GtkWidget *
|
|
Packit Service |
fc05fa |
create_filter_dialogue (void)
|
|
Packit Service |
fc05fa |
{
|
|
Packit Service |
fc05fa |
GtkWidget *dialog, *selector, *filter, *vbox, *hbox;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
dialog = create_dialogue ("Add a Device");
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
|
|
Packit Service |
fc05fa |
gtk_widget_show (hbox);
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
selector = bluetooth_chooser_new();
|
|
Packit Service |
fc05fa |
gtk_container_set_border_width(GTK_CONTAINER(selector), 5);
|
|
Packit Service |
fc05fa |
gtk_widget_show(selector);
|
|
Packit Service |
fc05fa |
g_object_set(selector,
|
|
Packit Service |
fc05fa |
"show-searching", TRUE,
|
|
Packit Service |
fc05fa |
"device-category-filter", BLUETOOTH_CATEGORY_NOT_PAIRED_OR_TRUSTED,
|
|
Packit Service |
fc05fa |
NULL);
|
|
Packit Service |
fc05fa |
gtk_box_pack_start (GTK_BOX (hbox), selector, TRUE, TRUE, 6);
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
|
|
Packit Service |
fc05fa |
gtk_widget_show (vbox);
|
|
Packit Service |
fc05fa |
gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0);
|
|
Packit Service |
fc05fa |
filter = bluetooth_filter_widget_new ();
|
|
Packit Service |
fc05fa |
g_object_set (filter,
|
|
Packit Service |
fc05fa |
"show-device-type", TRUE,
|
|
Packit Service |
fc05fa |
"show-device-category", FALSE,
|
|
Packit Service |
fc05fa |
NULL);
|
|
Packit Service |
fc05fa |
gtk_widget_show (filter);
|
|
Packit Service |
fc05fa |
bluetooth_filter_widget_bind_filter (BLUETOOTH_FILTER_WIDGET (filter), BLUETOOTH_CHOOSER (selector));
|
|
Packit Service |
fc05fa |
gtk_box_pack_start (GTK_BOX (vbox), filter, FALSE, FALSE, 6);
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
g_signal_connect(selector, "selected-device-changed",
|
|
Packit Service |
fc05fa |
G_CALLBACK(select_device_changed), dialog);
|
|
Packit Service |
fc05fa |
g_signal_connect(selector, "notify::device-selected",
|
|
Packit Service |
fc05fa |
G_CALLBACK(device_selected_cb), dialog);
|
|
Packit Service |
fc05fa |
g_signal_connect(selector, "notify::device-type-filter",
|
|
Packit Service |
fc05fa |
G_CALLBACK(device_type_filter_selected_cb), dialog);
|
|
Packit Service |
fc05fa |
g_signal_connect(selector, "notify::device-category-filter",
|
|
Packit Service |
fc05fa |
G_CALLBACK(device_category_filter_selected_cb), dialog);
|
|
Packit Service |
fc05fa |
gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))),
|
|
Packit Service |
fc05fa |
hbox, TRUE, TRUE, 0);
|
|
Packit Service |
fc05fa |
bluetooth_chooser_start_discovery (BLUETOOTH_CHOOSER (selector));
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
g_signal_connect (G_OBJECT (dialog), "response",
|
|
Packit Service |
fc05fa |
G_CALLBACK (response_cb), selector);
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
return dialog;
|
|
Packit Service |
fc05fa |
}
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
int main(int argc, char **argv)
|
|
Packit Service |
fc05fa |
{
|
|
Packit Service |
fc05fa |
GtkWidget *dialog;
|
|
Packit Service |
fc05fa |
const char *selection;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
gtk_init(&argc, &argv);
|
|
Packit Service |
fc05fa |
if (argc < 2)
|
|
Packit Service |
fc05fa |
selection = "wizard";
|
|
Packit Service |
fc05fa |
else
|
|
Packit Service |
fc05fa |
selection = argv[1];
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
if (g_str_equal (selection, "phone")) {
|
|
Packit Service |
fc05fa |
if (argc == 3)
|
|
Packit Service |
fc05fa |
dialog = create_phone_dialogue (argv[2]);
|
|
Packit Service |
fc05fa |
else
|
|
Packit Service |
fc05fa |
dialog = create_phone_dialogue (NULL);
|
|
Packit Service |
fc05fa |
} else if (g_str_equal (selection, "wizard")) {
|
|
Packit Service |
fc05fa |
dialog = create_wizard_dialogue ();
|
|
Packit Service |
fc05fa |
} else if (g_str_equal (selection, "props")) {
|
|
Packit Service |
fc05fa |
dialog = create_props_dialogue ();
|
|
Packit Service |
fc05fa |
} else if (g_str_equal (selection, "combo")) {
|
|
Packit Service |
fc05fa |
if (argc == 3)
|
|
Packit Service |
fc05fa |
dialog = create_combo_dialogue (argv[2]);
|
|
Packit Service |
fc05fa |
else
|
|
Packit Service |
fc05fa |
dialog = create_combo_dialogue (BLUETOOTH_CHOOSER_COMBO_FIRST_DEVICE);
|
|
Packit Service |
fc05fa |
} else if (g_str_equal (selection, "filter")) {
|
|
Packit Service |
fc05fa |
dialog = create_filter_dialogue ();
|
|
Packit Service |
fc05fa |
} else {
|
|
Packit Service |
fc05fa |
g_warning ("Unknown dialogue type, try either \"phone\", \"props\", \"combo\", \"filter\" or \"wizard\"");
|
|
Packit Service |
fc05fa |
return 1;
|
|
Packit Service |
fc05fa |
}
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
gtk_widget_show(dialog);
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
gtk_main ();
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
if (dialog)
|
|
Packit Service |
fc05fa |
gtk_widget_destroy(dialog);
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
return 0;
|
|
Packit Service |
fc05fa |
}
|