|
Packit |
8fb625 |
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
|
|
Packit |
8fb625 |
/*
|
|
Packit |
8fb625 |
* (C) Copyright 2007-2009 Bastien Nocera <hadess@hadess.net>
|
|
Packit |
8fb625 |
*
|
|
Packit |
8fb625 |
* This library is free software; you can redistribute it and/or
|
|
Packit |
8fb625 |
* modify it under the terms of the GNU Library General Public
|
|
Packit |
8fb625 |
* License as published by the Free Software Foundation; either
|
|
Packit |
8fb625 |
* version 2 of the License, or (at your option) any later version.
|
|
Packit |
8fb625 |
*
|
|
Packit |
8fb625 |
* This library is distributed in the hope that it will be useful,
|
|
Packit |
8fb625 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit |
8fb625 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Packit |
8fb625 |
* Library General Public License for more details.
|
|
Packit |
8fb625 |
*
|
|
Packit |
8fb625 |
* You should have received a copy of the GNU Library General Public
|
|
Packit |
8fb625 |
* License along with this library; if not, see <http://www.gnu.org/licenses/>.
|
|
Packit |
8fb625 |
*/
|
|
Packit |
8fb625 |
|
|
Packit |
8fb625 |
/**
|
|
Packit |
8fb625 |
* SECTION:bluetooth-chooser-combo
|
|
Packit |
8fb625 |
* @short_description: a Bluetooth chooser combo button
|
|
Packit |
8fb625 |
* @stability: Stable
|
|
Packit |
8fb625 |
* @include: bluetooth-chooser-combo.h
|
|
Packit |
8fb625 |
*
|
|
Packit |
8fb625 |
* A combo box used to select Bluetooth devices.
|
|
Packit |
8fb625 |
**/
|
|
Packit |
8fb625 |
|
|
Packit |
8fb625 |
#ifdef HAVE_CONFIG_H
|
|
Packit |
8fb625 |
#include "config.h"
|
|
Packit |
8fb625 |
#endif
|
|
Packit |
8fb625 |
|
|
Packit |
8fb625 |
#include <glib/gi18n.h>
|
|
Packit |
8fb625 |
#include <gtk/gtk.h>
|
|
Packit |
8fb625 |
|
|
Packit |
8fb625 |
#include "bluetooth-chooser-combo.h"
|
|
Packit |
8fb625 |
#include "bluetooth-client.h"
|
|
Packit |
8fb625 |
#include "bluetooth-chooser.h"
|
|
Packit |
8fb625 |
#include "bluetooth-chooser-private.h"
|
|
Packit |
8fb625 |
#include "bluetooth-utils.h"
|
|
Packit |
8fb625 |
|
|
Packit |
8fb625 |
struct _BluetoothChooserComboPrivate {
|
|
Packit |
8fb625 |
GtkWidget *chooser;
|
|
Packit |
8fb625 |
GtkWidget *drop_box;
|
|
Packit |
8fb625 |
GtkWidget *drop;
|
|
Packit |
8fb625 |
GtkTreeModel *model;
|
|
Packit |
8fb625 |
guint model_notify_id;
|
|
Packit |
8fb625 |
GtkTreeSelection *selection;
|
|
Packit |
8fb625 |
|
|
Packit |
8fb625 |
char *bdaddr;
|
|
Packit |
8fb625 |
};
|
|
Packit |
8fb625 |
|
|
Packit |
8fb625 |
enum {
|
|
Packit |
8fb625 |
PROP_0,
|
|
Packit |
8fb625 |
PROP_CHOOSER,
|
|
Packit |
8fb625 |
PROP_DEVICE,
|
|
Packit |
8fb625 |
};
|
|
Packit |
8fb625 |
|
|
Packit |
8fb625 |
enum {
|
|
Packit |
8fb625 |
CHOOSER_CREATED,
|
|
Packit |
8fb625 |
LAST_SIGNAL
|
|
Packit |
8fb625 |
};
|
|
Packit |
8fb625 |
|
|
Packit |
8fb625 |
static int signals[LAST_SIGNAL] = { 0 };
|
|
Packit |
8fb625 |
|
|
Packit |
8fb625 |
static void bluetooth_chooser_combo_class_init (BluetoothChooserComboClass * klass);
|
|
Packit |
8fb625 |
static void bluetooth_chooser_combo_init (BluetoothChooserCombo * combo);
|
|
Packit |
8fb625 |
|
|
Packit |
8fb625 |
static GtkBoxClass *parent_class;
|
|
Packit |
8fb625 |
|
|
Packit |
8fb625 |
G_DEFINE_TYPE(BluetoothChooserCombo, bluetooth_chooser_combo, GTK_TYPE_BOX);
|
|
Packit |
8fb625 |
|
|
Packit |
8fb625 |
#define BLUETOOTH_CHOOSER_COMBO_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), \
|
|
Packit |
8fb625 |
BLUETOOTH_TYPE_CHOOSER_COMBO, BluetoothChooserComboPrivate))
|
|
Packit |
8fb625 |
|
|
Packit |
8fb625 |
static void
|
|
Packit |
8fb625 |
bluetooth_chooser_combo_set_device (BluetoothChooserCombo *combo,
|
|
Packit |
8fb625 |
const char *bdaddr)
|
|
Packit |
8fb625 |
{
|
|
Packit |
8fb625 |
if (bdaddr == NULL || combo->priv->model == NULL) {
|
|
Packit |
8fb625 |
g_free (combo->priv->bdaddr);
|
|
Packit |
8fb625 |
gtk_widget_set_sensitive (combo->priv->drop_box, FALSE);
|
|
Packit |
8fb625 |
} else {
|
|
Packit |
8fb625 |
GtkTreeIter iter;
|
|
Packit |
8fb625 |
gboolean cont = FALSE;
|
|
Packit |
8fb625 |
|
|
Packit |
8fb625 |
gtk_widget_set_sensitive (combo->priv->drop_box, TRUE);
|
|
Packit |
8fb625 |
|
|
Packit |
8fb625 |
g_free (combo->priv->bdaddr);
|
|
Packit |
8fb625 |
if (g_strcmp0 (BLUETOOTH_CHOOSER_COMBO_FIRST_DEVICE, bdaddr) != 0)
|
|
Packit |
8fb625 |
combo->priv->bdaddr = g_strdup (bdaddr);
|
|
Packit |
8fb625 |
else
|
|
Packit |
8fb625 |
combo->priv->bdaddr = NULL;
|
|
Packit |
8fb625 |
|
|
Packit |
8fb625 |
cont = gtk_tree_model_iter_children (combo->priv->model, &iter, NULL);
|
|
Packit |
8fb625 |
while (cont == TRUE) {
|
|
Packit |
8fb625 |
char *value;
|
|
Packit |
8fb625 |
|
|
Packit |
8fb625 |
gtk_tree_model_get (GTK_TREE_MODEL (combo->priv->model), &iter,
|
|
Packit |
8fb625 |
BLUETOOTH_COLUMN_ADDRESS, &value, -1);
|
|
Packit |
8fb625 |
|
|
Packit |
8fb625 |
if (combo->priv->bdaddr == NULL) {
|
|
Packit |
8fb625 |
gtk_tree_selection_select_iter (combo->priv->selection, &iter);
|
|
Packit |
8fb625 |
combo->priv->bdaddr = value;
|
|
Packit |
8fb625 |
break;
|
|
Packit |
8fb625 |
}
|
|
Packit |
8fb625 |
|
|
Packit |
8fb625 |
if (g_ascii_strcasecmp(bdaddr, value) == 0) {
|
|
Packit |
8fb625 |
gtk_tree_selection_select_iter (combo->priv->selection, &iter);
|
|
Packit |
8fb625 |
g_free (value);
|
|
Packit |
8fb625 |
break;
|
|
Packit |
8fb625 |
}
|
|
Packit |
8fb625 |
g_free (value);
|
|
Packit |
8fb625 |
cont = gtk_tree_model_iter_next (GTK_TREE_MODEL (combo->priv->model), &iter);
|
|
Packit |
8fb625 |
}
|
|
Packit |
8fb625 |
}
|
|
Packit |
8fb625 |
g_object_notify (G_OBJECT (combo), "device");
|
|
Packit |
8fb625 |
}
|
|
Packit |
8fb625 |
|
|
Packit |
8fb625 |
static void
|
|
Packit |
8fb625 |
bluetooth_chooser_combo_dispose (GObject *object)
|
|
Packit |
8fb625 |
{
|
|
Packit |
8fb625 |
BluetoothChooserCombo *combo = BLUETOOTH_CHOOSER_COMBO (object);
|
|
Packit |
8fb625 |
|
|
Packit |
8fb625 |
if (combo->priv->model_notify_id != 0) {
|
|
Packit |
8fb625 |
GtkWidget *treeview;
|
|
Packit |
8fb625 |
|
|
Packit |
8fb625 |
treeview = bluetooth_chooser_get_treeview (BLUETOOTH_CHOOSER (combo->priv->chooser));
|
|
Packit |
8fb625 |
g_signal_handler_disconnect (treeview, combo->priv->model_notify_id);
|
|
Packit |
8fb625 |
combo->priv->model_notify_id = 0;
|
|
Packit |
8fb625 |
}
|
|
Packit |
8fb625 |
if (combo->priv->model != NULL) {
|
|
Packit |
8fb625 |
g_object_unref (combo->priv->model);
|
|
Packit |
8fb625 |
combo->priv->model = NULL;
|
|
Packit |
8fb625 |
}
|
|
Packit |
8fb625 |
if (combo->priv->chooser != NULL) {
|
|
Packit |
8fb625 |
g_object_unref (combo->priv->chooser);
|
|
Packit |
8fb625 |
combo->priv->chooser = NULL;
|
|
Packit |
8fb625 |
}
|
|
Packit |
8fb625 |
|
|
Packit |
8fb625 |
G_OBJECT_CLASS (parent_class)->dispose (object);
|
|
Packit |
8fb625 |
}
|
|
Packit |
8fb625 |
|
|
Packit |
8fb625 |
static void
|
|
Packit |
8fb625 |
bluetooth_chooser_combo_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec)
|
|
Packit |
8fb625 |
{
|
|
Packit |
8fb625 |
BluetoothChooserCombo *combo;
|
|
Packit |
8fb625 |
|
|
Packit |
8fb625 |
g_return_if_fail (BLUETOOTH_IS_CHOOSER_COMBO (object));
|
|
Packit |
8fb625 |
combo = BLUETOOTH_CHOOSER_COMBO (object);
|
|
Packit |
8fb625 |
|
|
Packit |
8fb625 |
switch (property_id) {
|
|
Packit |
8fb625 |
case PROP_DEVICE:
|
|
Packit |
8fb625 |
g_return_if_fail (bluetooth_verify_address (g_value_get_string (value)) || g_value_get_string (value) == NULL);
|
|
Packit |
8fb625 |
bluetooth_chooser_combo_set_device (combo, g_value_get_string (value));
|
|
Packit |
8fb625 |
break;
|
|
Packit |
8fb625 |
default:
|
|
Packit |
8fb625 |
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
|
|
Packit |
8fb625 |
}
|
|
Packit |
8fb625 |
}
|
|
Packit |
8fb625 |
|
|
Packit |
8fb625 |
static void
|
|
Packit |
8fb625 |
bluetooth_chooser_combo_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec)
|
|
Packit |
8fb625 |
{
|
|
Packit |
8fb625 |
BluetoothChooserCombo *combo;
|
|
Packit |
8fb625 |
|
|
Packit |
8fb625 |
g_return_if_fail (BLUETOOTH_IS_CHOOSER_COMBO (object));
|
|
Packit |
8fb625 |
combo = BLUETOOTH_CHOOSER_COMBO (object);
|
|
Packit |
8fb625 |
|
|
Packit |
8fb625 |
switch (property_id) {
|
|
Packit |
8fb625 |
case PROP_CHOOSER:
|
|
Packit |
8fb625 |
g_value_set_object (value, combo->priv->chooser);
|
|
Packit |
8fb625 |
break;
|
|
Packit |
8fb625 |
case PROP_DEVICE:
|
|
Packit |
8fb625 |
g_value_set_string (value, combo->priv->bdaddr);
|
|
Packit |
8fb625 |
break;
|
|
Packit |
8fb625 |
default:
|
|
Packit |
8fb625 |
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
|
|
Packit |
8fb625 |
}
|
|
Packit |
8fb625 |
}
|
|
Packit |
8fb625 |
|
|
Packit |
8fb625 |
static void
|
|
Packit |
8fb625 |
bluetooth_chooser_combo_class_init (BluetoothChooserComboClass *klass)
|
|
Packit |
8fb625 |
{
|
|
Packit |
8fb625 |
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
|
Packit |
8fb625 |
|
|
Packit |
8fb625 |
parent_class = g_type_class_peek_parent (klass);
|
|
Packit |
8fb625 |
|
|
Packit |
8fb625 |
object_class->dispose = bluetooth_chooser_combo_dispose;
|
|
Packit |
8fb625 |
object_class->set_property = bluetooth_chooser_combo_set_property;
|
|
Packit |
8fb625 |
object_class->get_property = bluetooth_chooser_combo_get_property;
|
|
Packit |
8fb625 |
|
|
Packit |
8fb625 |
g_type_class_add_private(klass, sizeof(BluetoothChooserComboPrivate));
|
|
Packit |
8fb625 |
|
|
Packit |
8fb625 |
/**
|
|
Packit |
8fb625 |
* BluetoothChooserCombo::chooser-created:
|
|
Packit |
8fb625 |
* @self: a #BluetoothChooserCombo widget
|
|
Packit |
8fb625 |
* @chooser: a #BluetoothChooser widget
|
|
Packit |
8fb625 |
*
|
|
Packit |
8fb625 |
* The signal is sent when a popup dialogue is created for the user to select
|
|
Packit |
8fb625 |
* a device. This signal allows you to change the configuration and filtering
|
|
Packit |
8fb625 |
* of the tree from its defaults.
|
|
Packit |
8fb625 |
**/
|
|
Packit |
8fb625 |
signals[CHOOSER_CREATED] =
|
|
Packit |
8fb625 |
g_signal_new ("chooser-created",
|
|
Packit |
8fb625 |
G_TYPE_FROM_CLASS (klass),
|
|
Packit |
8fb625 |
G_SIGNAL_RUN_LAST,
|
|
Packit |
8fb625 |
G_STRUCT_OFFSET (BluetoothChooserComboClass, chooser_created),
|
|
Packit |
8fb625 |
NULL, NULL,
|
|
Packit |
8fb625 |
g_cclosure_marshal_VOID__OBJECT,
|
|
Packit |
8fb625 |
G_TYPE_NONE, 1, G_TYPE_OBJECT);
|
|
Packit |
8fb625 |
|
|
Packit |
8fb625 |
/**
|
|
Packit |
8fb625 |
* BluetoothChooserCombo:chooser:
|
|
Packit |
8fb625 |
*
|
|
Packit |
8fb625 |
* The #BluetoothChooser used in the widget
|
|
Packit |
8fb625 |
**/
|
|
Packit |
8fb625 |
g_object_class_install_property (object_class, PROP_CHOOSER,
|
|
Packit |
8fb625 |
g_param_spec_object ("chooser", "Chooser", "The #BluetoothChooser used in the widget",
|
|
Packit |
8fb625 |
BLUETOOTH_TYPE_CHOOSER, G_PARAM_READABLE));
|
|
Packit |
8fb625 |
/**
|
|
Packit |
8fb625 |
* BluetoothChooserCombo:device:
|
|
Packit |
8fb625 |
*
|
|
Packit |
8fb625 |
* The Bluetooth address of the selected device or %NULL
|
|
Packit |
8fb625 |
**/
|
|
Packit |
8fb625 |
g_object_class_install_property (object_class, PROP_DEVICE,
|
|
Packit |
8fb625 |
g_param_spec_string ("device", "Device", "The Bluetooth address of the selected device.",
|
|
Packit |
8fb625 |
NULL, G_PARAM_READWRITE));
|
|
Packit |
8fb625 |
}
|
|
Packit |
8fb625 |
|
|
Packit |
8fb625 |
static void
|
|
Packit |
8fb625 |
treeview_model_notify_cb (GObject *gobject,
|
|
Packit |
8fb625 |
GParamSpec *pspec,
|
|
Packit |
8fb625 |
gpointer user_data)
|
|
Packit |
8fb625 |
{
|
|
Packit |
8fb625 |
BluetoothChooserCombo *combo = BLUETOOTH_CHOOSER_COMBO (user_data);
|
|
Packit |
8fb625 |
GtkTreeModel *model;
|
|
Packit |
8fb625 |
|
|
Packit |
8fb625 |
g_object_get (gobject, "model", &model, NULL);
|
|
Packit |
8fb625 |
gtk_combo_box_set_model (GTK_COMBO_BOX (combo->priv->drop), model);
|
|
Packit |
8fb625 |
if (combo->priv->model != NULL) {
|
|
Packit |
8fb625 |
g_object_unref (combo->priv->model);
|
|
Packit |
8fb625 |
combo->priv->model = NULL;
|
|
Packit |
8fb625 |
}
|
|
Packit |
8fb625 |
combo->priv->model = model;
|
|
Packit |
8fb625 |
}
|
|
Packit |
8fb625 |
|
|
Packit |
8fb625 |
static void
|
|
Packit |
8fb625 |
treeview_selection_changed_cb (GtkTreeSelection *treeselection,
|
|
Packit |
8fb625 |
gpointer user_data)
|
|
Packit |
8fb625 |
{
|
|
Packit |
8fb625 |
BluetoothChooserCombo *combo = BLUETOOTH_CHOOSER_COMBO (user_data);
|
|
Packit |
8fb625 |
GtkTreeIter iter;
|
|
Packit |
8fb625 |
char *value = NULL;
|
|
Packit |
8fb625 |
|
|
Packit |
8fb625 |
if (gtk_tree_selection_get_selected (combo->priv->selection, NULL, &iter)) {
|
|
Packit |
8fb625 |
gtk_combo_box_set_active_iter (GTK_COMBO_BOX (combo->priv->drop), &iter);
|
|
Packit |
8fb625 |
if (combo->priv->model != NULL)
|
|
Packit |
8fb625 |
gtk_tree_model_get (GTK_TREE_MODEL (combo->priv->model), &iter,
|
|
Packit |
8fb625 |
BLUETOOTH_COLUMN_ADDRESS, &value, -1);
|
|
Packit |
8fb625 |
} else {
|
|
Packit |
8fb625 |
if (combo->priv->model != NULL)
|
|
Packit |
8fb625 |
gtk_combo_box_set_active (GTK_COMBO_BOX (combo->priv->drop), -1);
|
|
Packit |
8fb625 |
}
|
|
Packit |
8fb625 |
|
|
Packit |
8fb625 |
if (g_strcmp0 (combo->priv->bdaddr, value) != 0) {
|
|
Packit |
8fb625 |
g_free (combo->priv->bdaddr);
|
|
Packit |
8fb625 |
combo->priv->bdaddr = value;
|
|
Packit |
8fb625 |
g_object_notify (G_OBJECT (combo), "device");
|
|
Packit |
8fb625 |
} else {
|
|
Packit |
8fb625 |
g_free (value);
|
|
Packit |
8fb625 |
}
|
|
Packit |
8fb625 |
}
|
|
Packit |
8fb625 |
|
|
Packit |
8fb625 |
static void
|
|
Packit |
8fb625 |
drop_changed_cb (GtkComboBox *widget,
|
|
Packit |
8fb625 |
gpointer user_data)
|
|
Packit |
8fb625 |
{
|
|
Packit |
8fb625 |
BluetoothChooserCombo *combo = BLUETOOTH_CHOOSER_COMBO (user_data);
|
|
Packit |
8fb625 |
GtkTreeIter iter;
|
|
Packit |
8fb625 |
char *value = NULL;
|
|
Packit |
8fb625 |
|
|
Packit |
8fb625 |
if (gtk_combo_box_get_active_iter (widget, &iter)) {
|
|
Packit |
8fb625 |
gtk_tree_selection_select_iter (combo->priv->selection, &iter);
|
|
Packit |
8fb625 |
if (combo->priv->model != NULL)
|
|
Packit |
8fb625 |
gtk_tree_model_get (GTK_TREE_MODEL (combo->priv->model), &iter,
|
|
Packit |
8fb625 |
BLUETOOTH_COLUMN_ADDRESS, &value, -1);
|
|
Packit |
8fb625 |
} else {
|
|
Packit |
8fb625 |
if (combo->priv->model != NULL)
|
|
Packit |
8fb625 |
gtk_tree_selection_unselect_all (combo->priv->selection);
|
|
Packit |
8fb625 |
}
|
|
Packit |
8fb625 |
|
|
Packit |
8fb625 |
if (g_strcmp0 (combo->priv->bdaddr, value) != 0) {
|
|
Packit |
8fb625 |
g_free (combo->priv->bdaddr);
|
|
Packit |
8fb625 |
combo->priv->bdaddr = value;
|
|
Packit |
8fb625 |
g_object_notify (G_OBJECT (combo), "device");
|
|
Packit |
8fb625 |
} else {
|
|
Packit |
8fb625 |
g_free (value);
|
|
Packit |
8fb625 |
}
|
|
Packit |
8fb625 |
}
|
|
Packit |
8fb625 |
|
|
Packit |
8fb625 |
static void
|
|
Packit |
8fb625 |
bluetooth_chooser_combo_init (BluetoothChooserCombo *combo)
|
|
Packit |
8fb625 |
{
|
|
Packit |
8fb625 |
GtkWidget *treeview;
|
|
Packit |
8fb625 |
GtkCellRenderer *renderer;
|
|
Packit |
8fb625 |
|
|
Packit |
8fb625 |
combo->priv = BLUETOOTH_CHOOSER_COMBO_GET_PRIVATE (combo);
|
|
Packit |
8fb625 |
|
|
Packit |
8fb625 |
combo->priv->drop_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
|
|
Packit |
8fb625 |
gtk_box_set_homogeneous (GTK_BOX (combo->priv->drop_box), TRUE);
|
|
Packit |
8fb625 |
gtk_box_pack_start (GTK_BOX (combo), combo->priv->drop_box,
|
|
Packit |
8fb625 |
TRUE, FALSE, 0);
|
|
Packit |
8fb625 |
/* Setup the combo itself */
|
|
Packit |
8fb625 |
combo->priv->drop = gtk_combo_box_new ();
|
|
Packit |
8fb625 |
gtk_box_pack_start (GTK_BOX (combo->priv->drop_box), combo->priv->drop,
|
|
Packit |
8fb625 |
TRUE, TRUE, 0);
|
|
Packit |
8fb625 |
renderer = gtk_cell_renderer_pixbuf_new ();
|
|
Packit |
8fb625 |
gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo->priv->drop),
|
|
Packit |
8fb625 |
renderer,
|
|
Packit |
8fb625 |
FALSE);
|
|
Packit |
8fb625 |
gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo->priv->drop),
|
|
Packit |
8fb625 |
renderer,
|
|
Packit |
8fb625 |
"icon-name", BLUETOOTH_COLUMN_ICON,
|
|
Packit |
8fb625 |
NULL);
|
|
Packit |
8fb625 |
renderer = gtk_cell_renderer_text_new ();
|
|
Packit |
8fb625 |
gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo->priv->drop),
|
|
Packit |
8fb625 |
renderer,
|
|
Packit |
8fb625 |
TRUE);
|
|
Packit |
8fb625 |
gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo->priv->drop),
|
|
Packit |
8fb625 |
renderer,
|
|
Packit |
8fb625 |
"text", BLUETOOTH_COLUMN_ALIAS,
|
|
Packit |
8fb625 |
NULL);
|
|
Packit |
8fb625 |
|
|
Packit |
8fb625 |
combo->priv->chooser = bluetooth_chooser_new ();
|
|
Packit |
8fb625 |
|
|
Packit |
8fb625 |
treeview = bluetooth_chooser_get_treeview (BLUETOOTH_CHOOSER (combo->priv->chooser));
|
|
Packit |
8fb625 |
combo->priv->model_notify_id = g_signal_connect (G_OBJECT (treeview), "notify::model",
|
|
Packit |
8fb625 |
G_CALLBACK (treeview_model_notify_cb), combo);
|
|
Packit |
8fb625 |
treeview_model_notify_cb (G_OBJECT (treeview), NULL, combo);
|
|
Packit |
8fb625 |
gtk_combo_box_set_active (GTK_COMBO_BOX (combo->priv->drop), 0);
|
|
Packit |
8fb625 |
|
|
Packit |
8fb625 |
combo->priv->selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview));
|
|
Packit |
8fb625 |
g_signal_connect (G_OBJECT (combo->priv->selection), "changed",
|
|
Packit |
8fb625 |
G_CALLBACK (treeview_selection_changed_cb), combo);
|
|
Packit |
8fb625 |
g_signal_connect (G_OBJECT (combo->priv->drop), "changed",
|
|
Packit |
8fb625 |
G_CALLBACK (drop_changed_cb), combo);
|
|
Packit |
8fb625 |
|
|
Packit |
8fb625 |
gtk_widget_show_all (GTK_WIDGET (combo));
|
|
Packit |
8fb625 |
}
|
|
Packit |
8fb625 |
|
|
Packit |
8fb625 |
/**
|
|
Packit |
8fb625 |
* bluetooth_chooser_combo_new:
|
|
Packit |
8fb625 |
*
|
|
Packit |
8fb625 |
* Returns a new #BluetoothChooserCombo widget.
|
|
Packit |
8fb625 |
*
|
|
Packit |
8fb625 |
* Return value: a #BluetoothChooserCombo widget.
|
|
Packit |
8fb625 |
**/
|
|
Packit |
8fb625 |
GtkWidget *
|
|
Packit |
8fb625 |
bluetooth_chooser_combo_new (void)
|
|
Packit |
8fb625 |
{
|
|
Packit |
8fb625 |
return g_object_new (BLUETOOTH_TYPE_CHOOSER_COMBO, NULL);
|
|
Packit |
8fb625 |
}
|
|
Packit |
8fb625 |
|