[gnome-bluetooth] Tidy up the moblin panel by switching to using a GtkNotebook
- From: Bastien Nocera <hadess src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gnome-bluetooth] Tidy up the moblin panel by switching to using a GtkNotebook
- Date: Fri, 2 Oct 2009 16:10:56 +0000 (UTC)
commit cb90b37e3e931aac092e3429d17a2c7d2d2186a2
Author: Joshua Lock <josh linux intel com>
Date: Fri Oct 2 16:56:44 2009 +0100
Tidy up the moblin panel by switching to using a GtkNotebook
Previously the moblin panel had many widgets as member variables and called
show/hide a lot to change the UI. This was both messy and wrong, this
commit switched the panel to using a GtkNotebook with a separate page for
each state of the UI.
https://bugzilla.gnome.org/show_bug.cgi?id=597130
moblin/moblin-panel.c | 674 +++++++++++++++++++++++++++++--------------------
1 files changed, 402 insertions(+), 272 deletions(-)
---
diff --git a/moblin/moblin-panel.c b/moblin/moblin-panel.c
index e3eba6d..057a24d 100644
--- a/moblin/moblin-panel.c
+++ b/moblin/moblin-panel.c
@@ -32,6 +32,7 @@
#include <nbtk/nbtk-gtk.h>
#include "bluetooth-client.h"
+#include "bluetooth-client-private.h"
#include "bluetooth-chooser.h"
#include "bluetooth-chooser-private.h"
#include "bluetooth-killswitch.h"
@@ -56,30 +57,39 @@ struct _MoblinPanelPrivate
BluetoothKillswitch *killswitch;
BluetoothAgent *agent;
- GtkWidget *device_list_frame;
- GtkWidget *chooser;
GtkWidget *power_switch;
- GtkWidget *power_label;
- GtkWidget *filter;
- GtkWidget *action_button;
- GtkWidget *scan_label;
+ GtkWidget *notebook;
GtkTreeModel *chooser_model;
+
gboolean target_ssp;
gchar *pincode;
gboolean automatic_pincode;
};
-static void set_scanning_view (GtkButton *button, gpointer user_data);
-static void send_file_button_clicked_cb (GtkButton *button, gpointer user_data);
-static void pin_options_button_clicked_cb (GtkButton *button, gpointer user_data);
+#define CONNECT_TIMEOUT 3.0
+#define AGENT_PATH "/org/bluez/agent/wizard"
+
+typedef struct {
+ char *path;
+ GTimer *timer;
+ MoblinPanel *self;
+} ConnectData;
+
+enum {
+ PROPS_PAGE,
+ ADD_PAGE,
+ SETUP_PAGE,
+ MESSAGE_PAGE
+} MoblinPages;
static void
power_switch_toggled_cb (NbtkGtkLightSwitch *light_switch,
gpointer user_data)
{
+ g_assert (MOBLIN_IS_PANEL (user_data));
MoblinPanelPrivate *priv = MOBLIN_PANEL_GET_PRIVATE(user_data);
- if (nbtk_gtk_light_switch_get_active (NBTK_GTK_LIGHT_SWITCH (light_switch))) {
+ if (nbtk_gtk_light_switch_get_active (NBTK_GTK_LIGHT_SWITCH (priv->power_switch))) {
bluetooth_killswitch_set_state (priv->killswitch, KILLSWITCH_STATE_UNBLOCKED);
} else {
bluetooth_killswitch_set_state (priv->killswitch, KILLSWITCH_STATE_SOFT_BLOCKED);
@@ -91,13 +101,9 @@ killswitch_state_changed_cb (BluetoothKillswitch *killswitch,
KillswitchState state,
gpointer user_data)
{
- MoblinPanel *self = user_data;
- MoblinPanelPrivate *priv = MOBLIN_PANEL_GET_PRIVATE (self);
-
- g_signal_handlers_disconnect_by_func (priv->power_switch, power_switch_toggled_cb,
- NULL);
+ MoblinPanelPrivate *priv = MOBLIN_PANEL_GET_PRIVATE (user_data);
- g_return_if_fail (self != NULL);
+ g_signal_handlers_block_by_func (priv->power_switch, power_switch_toggled_cb, user_data);
if (state == KILLSWITCH_STATE_SOFT_BLOCKED) {
nbtk_gtk_light_switch_set_active (NBTK_GTK_LIGHT_SWITCH (priv->power_switch),
@@ -112,18 +118,17 @@ killswitch_state_changed_cb (BluetoothKillswitch *killswitch,
g_assert_not_reached ();
}
- g_signal_connect (priv->power_switch, "switch-flipped",
- G_CALLBACK (power_switch_toggled_cb), self);
+ g_signal_handlers_unblock_by_func (priv->power_switch, power_switch_toggled_cb, user_data);
}
static void
selected_device_changed_cb (BluetoothChooser *chooser, const char *address, gpointer data)
{
- MoblinPanel *self = MOBLIN_PANEL (data);
- MoblinPanelPrivate *priv = MOBLIN_PANEL_GET_PRIVATE (self);
+ GtkWidget *send_button = GTK_WIDGET (data);
+
if (!address) {
- gtk_widget_set_sensitive (priv->action_button, FALSE); } else {
- gtk_widget_set_sensitive (priv->action_button, TRUE);
+ gtk_widget_set_sensitive (send_button, FALSE); } else {
+ gtk_widget_set_sensitive (send_button, TRUE);
}
}
@@ -142,101 +147,17 @@ set_frame_title (GtkFrame *frame, gchar *title)
}
static void
-set_default_view (GtkButton *button, gpointer user_data)
-{
- MoblinPanelPrivate *priv = MOBLIN_PANEL_GET_PRIVATE (user_data);
-
- set_frame_title (GTK_FRAME (priv->device_list_frame), _("Devices"));
-
- bluetooth_chooser_stop_discovery (BLUETOOTH_CHOOSER (priv->chooser));
- g_object_set (priv->chooser, "show-searching", FALSE, "device-category-filter",
- BLUETOOTH_CATEGORY_PAIRED_OR_TRUSTED, NULL);
-
- g_signal_handlers_disconnect_by_func (button, set_default_view, user_data);
- gtk_button_set_label (button, _("Add a new device"));
- g_signal_connect (button, "clicked", G_CALLBACK (set_scanning_view), user_data);
- gtk_widget_show (priv->power_switch);
- gtk_widget_show (priv->power_label);
-
- g_signal_handlers_disconnect_by_func (priv->action_button, pin_options_button_clicked_cb,
- NULL);
- gtk_button_set_label (GTK_BUTTON (priv->action_button), _("Send file from your computer"));
- gtk_widget_show (priv->action_button);
- g_signal_connect (priv->action_button, "clicked", G_CALLBACK (send_file_button_clicked_cb),
- NULL);
- gtk_widget_hide (priv->scan_label);
- g_signal_connect (priv->chooser, "selected-device-changed",
- G_CALLBACK (selected_device_changed_cb), MOBLIN_PANEL (user_data));
-
- gtk_widget_hide (priv->filter);
-}
-
-static void
-set_scanning_view (GtkButton *button, gpointer user_data)
-{
- MoblinPanelPrivate *priv = MOBLIN_PANEL_GET_PRIVATE (user_data);
-
- set_frame_title (GTK_FRAME (priv->device_list_frame), _("Add a new Bluetooth device"));
-
- g_object_set (priv->chooser, "show-searching", TRUE, "device-category-filter",
- BLUETOOTH_CATEGORY_NOT_PAIRED_OR_TRUSTED, NULL);
-
- g_signal_handlers_disconnect_by_func (button, set_scanning_view, user_data);
- gtk_button_set_label (button, _("Back to devices"));
- g_signal_connect (button, "clicked", G_CALLBACK (set_default_view),
- user_data);
-
- bluetooth_chooser_start_discovery (BLUETOOTH_CHOOSER (priv->chooser));
- gtk_widget_hide (priv->power_switch);
- gtk_widget_hide (priv->power_label);
-
- g_signal_handlers_disconnect_by_func (priv->action_button,
- send_file_button_clicked_cb, NULL);
- g_signal_handlers_disconnect_by_func (priv->chooser, selected_device_changed_cb,
- MOBLIN_PANEL (user_data));
- gtk_button_set_label (GTK_BUTTON (priv->action_button), _("PIN options"));
- gtk_widget_show (priv->action_button);
- g_signal_connect (priv->action_button, "clicked",
- G_CALLBACK (pin_options_button_clicked_cb), NULL);
- gtk_widget_show (priv->scan_label);
-
- gtk_widget_show (priv->filter);
-}
-
-#if 0
-static void
-set_pairing_view (MoblinPanel *self)
-{
- MoblinPanelPrivate *priv = MOBLIN_PANEL_GET_PRIVATE (self);
-
- set_frame_title (GTK_FRAME (priv->device_list_frame), _("Device setup"));
-
- gtk_widget_hide (priv->chooser);
-
- g_signal_handlers_disconnect_by_func (priv->action_button,
- send_file_button_clicked_cb, NULL);
- g_signal_handlers_disconnect_by_func (priv->chooser, selected_device_changed_cb,
- self);
- gtk_widget_hide (priv->action_button);
-
- gtk_widget_hide (priv->scan_label);
-
- gtk_widget_hide (priv->filter);
-}
-#endif
-static void
send_file_button_clicked_cb (GtkButton *button,
gpointer user_data)
{
- MoblinPanel *self = MOBLIN_PANEL (user_data);
- MoblinPanelPrivate *priv = MOBLIN_PANEL_GET_PRIVATE (self);
+ BluetoothChooser *chooser = BLUETOOTH_CHOOSER (user_data);
GPtrArray *a;
GError *err = NULL;
guint i;
const char *address, *name;
- address = bluetooth_chooser_get_selected_device (BLUETOOTH_CHOOSER (priv->chooser));
- name = bluetooth_chooser_get_selected_device_name (BLUETOOTH_CHOOSER (priv->chooser));
+ address = bluetooth_chooser_get_selected_device (chooser);
+ name = bluetooth_chooser_get_selected_device_name (chooser);
a = g_ptr_array_new ();
g_ptr_array_add (a, "bluetooth-sendto");
@@ -276,14 +197,14 @@ pin_options_button_clicked_cb (GtkButton *button,
static void
remove_clicked_cb (GtkCellRenderer *cell, gchar *path, gpointer user_data)
{
- MoblinPanelPrivate *priv = MOBLIN_PANEL_GET_PRIVATE (user_data);
+ BluetoothChooser *chooser = BLUETOOTH_CHOOSER (user_data);
GtkTreeView *view;
gchar *address = NULL;
GtkTreeSelection *selection;
GtkTreeIter iter;
GtkTreePath *tree_path;
- view = GTK_TREE_VIEW (bluetooth_chooser_get_treeview (BLUETOOTH_CHOOSER (priv->chooser)));
+ view = GTK_TREE_VIEW (bluetooth_chooser_get_treeview (chooser));
/* Set selection */
tree_path = gtk_tree_path_new_from_string (path);
@@ -294,17 +215,10 @@ remove_clicked_cb (GtkCellRenderer *cell, gchar *path, gpointer user_data)
if (gtk_tree_selection_get_selected (selection, NULL, &iter) == FALSE)
return;
- if (bluetooth_chooser_remove_selected_device (BLUETOOTH_CHOOSER (priv->chooser)) != FALSE)
+ if (bluetooth_chooser_remove_selected_device (chooser) != FALSE)
bluetooth_plugin_manager_device_deleted (address);
}
-
#if 0
-static void
-set_pin_view (MoblinPanel *self)
-{
- g_debug ("Show PIN");
-}
-
static gboolean
pincode_callback (DBusGMethodInvocation *context,
DBusGProxy *device,
@@ -314,70 +228,117 @@ pincode_callback (DBusGMethodInvocation *context,
MoblinPanelPrivate *priv = MOBLIN_PANEL_GET_PRIVATE (self);
priv->target_ssp = FALSE;
if (priv->automatic_pincode == FALSE)
- set_pin_view (self);
+ gtk_notebook_set_current_page (GTK_NOTEBOOK (priv->notebook), SETUP_PAGE);
dbus_g_method_return (context, priv->pincode);
return TRUE;
}
#endif
static void
-activity_clicked (GtkCellRenderer *renderer, const gchar *path, gpointer user_data)
+browse_clicked (GtkCellRenderer *renderer, const gchar *path, gpointer user_data)
{
MoblinPanelPrivate *priv = MOBLIN_PANEL_GET_PRIVATE (user_data);
GtkTreeIter iter;
- DBusGProxy *proxy = NULL;
char *address = NULL;
- char *name = NULL;
+ char *cmd = NULL;
GtkTreePath *tree_path;
+
tree_path = gtk_tree_path_new_from_string (path);
gtk_tree_model_get_iter (priv->chooser_model, &iter, tree_path);
- gtk_tree_model_get (priv->chooser_model, &iter, BLUETOOTH_COLUMN_PROXY, &proxy,
- BLUETOOTH_COLUMN_ADDRESS, &address,
- BLUETOOTH_COLUMN_NAME, &name, -1);
-
- if (address == NULL || name == NULL || proxy == NULL) {
- g_object_unref (proxy);
+ gtk_tree_model_get (priv->chooser_model, &iter, BLUETOOTH_COLUMN_ADDRESS, &address, -1);
+
+ if (address == NULL) {
+ cmd = g_strdup_printf ("%s --no-default-window \"obex://[%s]\"",
+ "nautilus", address);
+ if (!g_spawn_command_line_async (cmd, NULL))
+ g_printerr("Couldn't execute command: %s\n", cmd);
g_free (address);
- g_free (name);
- return;
+ g_free (cmd);
}
- g_debug ("Activity clicked on %s", address);
- g_free (address);
- g_free (name);
- g_object_unref (proxy);
+ g_debug ("Browse clicked on %s", address);
+}
+#if 0
+static void
+connect_callback (BluetoothClient *client, gboolean success, gpointer user_data)
+{
+ ConnectData *data = (ConnectData *)user_data;
+ MoblinPanelPrivate *priv = MOBLIN_PANEL_GET_PRIVATE (data->self);
+
+/* if (success == FALSE && g_timer_elapsed (data->timer, NULL) < CONNECT_TIMEOUT) {
+ if (bluetooth_client_connect_service (client, data->path, connect_callback, data) != FALSE) {
+ return;
+ }
+ }
+
+ if (success == FALSE)
+ g_message ("Failed to connect to device %s", data->path);
+
+ set_failure_view (MOBLIN_PANEL (data->self));
+ gtk_notebook_set_current_page (GTK_NOTEBOOK (priv->notebook), MESSAGE_PAGE);
+
+ g_timer_destroy (data->timer);
+ g_free (data->path);
+ g_free (data);*/
}
static void
-connect_clicked (GtkCellRenderer *renderer, const gchar *path, gpointer user_data)
+create_callback (BluetoothClient *client, const gchar *path, const GError *error, gpointer user_data)
{
- MoblinPanelPrivate *priv = MOBLIN_PANEL_GET_PRIVATE (user_data);
- GtkTreeIter iter;
- DBusGProxy *proxy = NULL;
- char *address = NULL;
- char *name = NULL;
- GtkTreePath *tree_path;
- tree_path = gtk_tree_path_new_from_string (path);
- gtk_tree_model_get_iter (priv->chooser_model, &iter, tree_path);
- gtk_tree_model_get (priv->chooser_model, &iter, BLUETOOTH_COLUMN_PROXY, &proxy,
- BLUETOOTH_COLUMN_ADDRESS, &address,
- BLUETOOTH_COLUMN_NAME, &name, -1);
+ MoblinPanel *self = MOBLIN_PANEL (user_data);
+ MoblinPanelPrivate *priv = MOBLIN_PANEL_GET_PRIVATE (self);
+ ConnectData *data;
- if (address == NULL || name == NULL || proxy == NULL) {
- g_object_unref (proxy);
- g_free (address);
- g_free (name);
+/* if (path == NULL) {
+ gtk_notebook_set_current_page (GTK_NOTEBOOK (priv->notebook), MESSAGE_PAGE);
return;
}
- g_debug ("Connect clicked on %s", address);
-
- /*bluetooth_agent_set_pincode_func (priv->agent, pincode_callback, self);
- bluetooth_agent_set_display_func (priv->agent, display_callback, self);
- bluetooth_agent_set_cancel_func (priv->agent, cancel_callback, self);
- bluetooth_agent_set_confirm_func (priv->agent, confirm_callback, self);
- bluetooth_agent_setup (priv->agent, bluetooth_path);
- set_pairing_view (self);*/
- g_free (address);
- g_free (name);
- g_object_unref (proxy);
+ bluetooth_client_set_trusted (priv->client, path, TRUE);
+
+ data = g_new0 (ConnectData, 1);
+ data->path = g_strdup (path);
+ data->timer = g_timer_new ();
+
+ if (bluetooth_client_connect_service (client, path, connect_callback, data) == FALSE) {
+ g_timer_destroy (data->timer);
+ g_free (data->path);
+ g_free (data);
+ }*/
+
+ gtk_notebook_set_current_page (GTK_NOTEBOOK (priv->notebook), PROPS_PAGE);
+}
+#endif
+static void
+pair_clicked (GtkCellRenderer *renderer, const gchar *path, gpointer user_data)
+{
+ /*MoblinPanelPrivate *priv = MOBLIN_PANEL_GET_PRIVATE (user_data);
+ const gchar *agent_path = AGENT_PATH;
+
+ gchar *pin_ret = NULL;
+
+ pin_ret = get_pincode_for_device (target_type, target_address, target_name, NULL);
+ if (pin_ret != NULL && g_str_equal (pin_ret, "NULL"))
+ path = NULL;
+
+ g_object_ref (priv->agent);
+ bluetooth_client_create_device (priv->client, target_address, agent_path,
+ create_callback, user_data);*/
+ g_debug ("Pair clicked");
+}
+
+static void
+connect_clicked (GtkCellRenderer *renderer, const gchar *path, gpointer user_data)
+{
+ /*MoblinPanelPrivate *priv = MOBLIN_PANEL_GET_PRIVATE (user_data);
+
+ gchar *pin_ret = NULL;
+
+ pin_ret = get_pincode_for_device (target_type, target_address, target_name, NULL);
+ if (pin_ret != NULL && g_str_equal (pin_ret, "NULL"))
+ path = NULL;
+
+ g_object_ref (priv->agent);
+ bluetooth_client_create_device (priv->client, target_address, agent_path,
+ create_callback, user_data);*/
+ g_debug ("Connect clicked");
}
static void
@@ -395,15 +356,15 @@ remove_to_icon (GtkTreeViewColumn *column, GtkCellRenderer *cell,
}
static void
-activity_to_text (GtkTreeViewColumn *column, GtkCellRenderer *cell,
+pair_to_text (GtkTreeViewColumn *column, GtkCellRenderer *cell,
GtkTreeModel *model, GtkTreeIter *iter, gpointer data)
{
gboolean paired, trusted;
gtk_tree_model_get (model, iter, BLUETOOTH_COLUMN_PAIRED, &paired,
BLUETOOTH_COLUMN_TRUSTED, &trusted, -1);
- if (paired || trusted) {
- g_object_set (cell, "markup", _("Activity"), NULL);
+ if (!paired && !trusted) {
+ g_object_set (cell, "markup", _("Pair"), NULL);
}
}
@@ -411,91 +372,210 @@ static void
connect_to_text (GtkTreeViewColumn *column, GtkCellRenderer *cell,
GtkTreeModel *model, GtkTreeIter *iter, gpointer data)
{
- gboolean paired, trusted;
+ gboolean paired, trusted, connected;
gtk_tree_model_get (model, iter, BLUETOOTH_COLUMN_PAIRED, &paired,
+ BLUETOOTH_COLUMN_CONNECTED, &connected,
BLUETOOTH_COLUMN_TRUSTED, &trusted, -1);
- if (paired || trusted) {
+ if ((paired || trusted) && !connected) {
g_object_set (cell, "markup", _("Connect"), NULL);
}
}
static void
-moblin_panel_dispose (GObject *object)
+browse_to_text (GtkTreeViewColumn *column, GtkCellRenderer *cell,
+ GtkTreeModel *model, GtkTreeIter *iter, gpointer data)
{
- MoblinPanelPrivate *priv = MOBLIN_PANEL_GET_PRIVATE (object);
-
- bluetooth_plugin_manager_cleanup ();
+ gboolean *connected;
+ guint type;
+ gtk_tree_model_get (model, iter, BLUETOOTH_COLUMN_CONNECTED, &connected,
+ BLUETOOTH_COLUMN_TYPE, &type, -1);
+
+ if (connected &&
+ (type == BLUETOOTH_TYPE_PHONE || type == BLUETOOTH_TYPE_COMPUTER || type == BLUETOOTH_TYPE_CAMERA)) {
+ g_object_set (cell, "markup", _("Browse"), NULL);
+ }
+}
- g_object_unref (priv->agent);
- G_OBJECT_CLASS (moblin_panel_parent_class)->dispose (object);
+static void
+set_scanning_view (GtkButton *button, MoblinPanel *self)
+{
+ MoblinPanelPrivate *priv = MOBLIN_PANEL_GET_PRIVATE (self);
+ gtk_notebook_set_current_page (GTK_NOTEBOOK (priv->notebook), ADD_PAGE);
}
static void
-moblin_panel_class_init (MoblinPanelClass *klass)
+set_properties_view (GtkButton *button, MoblinPanel *self)
{
- GObjectClass *obj_class = G_OBJECT_CLASS (klass);
- g_type_class_add_private (klass, sizeof (MoblinPanelPrivate));
- obj_class->dispose = moblin_panel_dispose;
+ MoblinPanelPrivate *priv = MOBLIN_PANEL_GET_PRIVATE (self);
+ gtk_notebook_set_current_page (GTK_NOTEBOOK (priv->notebook), PROPS_PAGE);
}
-static void
-moblin_panel_init (MoblinPanel *self)
+#if 0
+static GtkWidget *
+create_message_page (MoblinPanel *self)
{
MoblinPanelPrivate *priv;
- GtkWidget *add_new_button;
- GtkWidget *frame_title;
+ GtkWidget *label;
+
+ label = gtk_label_new ("Zing");
+
+ return label;
+}
+
+static GtkWidget *
+create_setup_page (MoblinPanel *self)
+{
+ MoblinPanelPrivate *priv;
+ GtkWidget *label;
+
+ label = gtk_label_new ("Zing");
+ return label;
+}
+#endif
+
+static GtkWidget *
+create_add_page (MoblinPanel *self)
+{
+ MoblinPanelPrivate *priv;
+ GtkWidget *page;
GtkWidget *vbox, *hbox;
- gchar *scan_text = NULL;
- KillswitchState switch_state;
+ GtkWidget *chooser, *filter;
+ GtkWidget *frame_title;
+ GtkWidget *frame;
+ GtkWidget *back_button;
+ GtkWidget *pin_button;
+ GtkWidget *tree_view;
GtkTreeViewColumn *type_column;
GtkCellRenderer *cell;
priv = MOBLIN_PANEL_GET_PRIVATE (self);
- priv->target_ssp = FALSE;
- priv->pincode = FALSE;
- priv->automatic_pincode = FALSE;
- priv->killswitch = bluetooth_killswitch_new ();
- if (bluetooth_killswitch_has_killswitches (priv->killswitch) == FALSE) {
- g_object_unref (priv->killswitch);
- priv->killswitch = NULL;
- } else {
- g_signal_connect (priv->killswitch, "state-changed",
- G_CALLBACK (killswitch_state_changed_cb), self);
- }
- priv->agent = bluetooth_agent_new ();
- bluetooth_plugin_manager_init ();
+ page = gtk_hbox_new (FALSE, 0);
+ gtk_widget_show (page);
- /* set up the box */
- gtk_box_set_homogeneous (GTK_BOX (self), FALSE);
- gtk_box_set_spacing (GTK_BOX (self), 4);
+ /* Add child widgetry */
+ vbox = gtk_vbox_new (FALSE, 4);
+ gtk_widget_show (vbox);
+ gtk_box_pack_start (GTK_BOX (page), vbox, TRUE, TRUE, 4);
+
+ frame = nbtk_gtk_frame_new ();
+ frame_title = gtk_label_new ("");
+ gtk_frame_set_label_widget (GTK_FRAME (frame), frame_title);
+ set_frame_title (GTK_FRAME (frame), _("Devices"));
+
+ /* Device list */
+ chooser = g_object_new (BLUETOOTH_TYPE_CHOOSER,
+ "has-internal-device-filter", FALSE,
+ "show-device-category", FALSE,
+ "show-searching", TRUE,
+ "device-category-filter", BLUETOOTH_CATEGORY_NOT_PAIRED_OR_TRUSTED,
+ NULL);
+ tree_view = bluetooth_chooser_get_treeview (BLUETOOTH_CHOOSER (chooser));
+ g_object_set (tree_view, "enable-grid-lines", TRUE, "headers-visible", FALSE, NULL);
+ //"grid-line-width", 2, "horizontal-separator", 6, "vertical-separator", 6,
+ bluetooth_chooser_start_discovery (BLUETOOTH_CHOOSER (chooser));
+ type_column = bluetooth_chooser_get_type_column (BLUETOOTH_CHOOSER (chooser));
+ /* Add the pair button */
+ cell = mux_cell_renderer_text_new ();
+ gtk_tree_view_column_pack_start (type_column, cell, FALSE);
+
+ gtk_tree_view_column_set_cell_data_func (type_column, cell,
+ pair_to_text, self, NULL);
+ g_signal_connect (cell, "activated", G_CALLBACK (pair_clicked), self);
+
+ gtk_widget_show (chooser);
+ gtk_container_add (GTK_CONTAINER (frame), chooser);
+ gtk_widget_show (frame);
+ gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 4);
+
+ /* Back button */
+ back_button = gtk_button_new_with_label (_("Back to devices"));
+ gtk_widget_show (back_button);
+ g_signal_connect (back_button, "clicked",
+ G_CALLBACK (set_properties_view), self);
+ gtk_box_pack_start (GTK_BOX (vbox), back_button, FALSE, FALSE, 4);
+
+ /* Right column */
+ vbox = gtk_vbox_new (FALSE, 4);
+ gtk_widget_show (vbox);
+ gtk_box_pack_start (GTK_BOX (page), vbox, FALSE, FALSE, 4);
+
+ hbox = gtk_hbox_new (FALSE, 4);
+ gtk_widget_show (hbox);
+ gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 4);
+
+ /* Filter combo */
+ filter = bluetooth_filter_widget_new ();
+ gtk_widget_show (filter);
+ bluetooth_filter_widget_set_title (BLUETOOTH_FILTER_WIDGET (filter), _("Only show:"));
+ bluetooth_filter_widget_bind_filter (BLUETOOTH_FILTER_WIDGET (filter),
+ BLUETOOTH_CHOOSER (chooser));
+ gtk_box_pack_start (GTK_BOX (vbox), filter, FALSE, FALSE, 4);
+
+ /* Button for PIN options file */
+ pin_button = gtk_button_new_with_label (_("PIN options"));
+ gtk_widget_show (pin_button);
+ g_signal_connect (pin_button, "clicked",
+ G_CALLBACK (pin_options_button_clicked_cb), chooser);
+ gtk_box_pack_start (GTK_BOX (vbox), pin_button, FALSE, FALSE, 4);
+
+ return page;
+}
+
+static GtkWidget *
+create_properties_page (MoblinPanel *self)
+{
+ MoblinPanelPrivate *priv;
+ GtkWidget *page;
+ GtkWidget *frame_title;
+ GtkWidget *chooser;
+ GtkWidget *vbox, *hbox;
+ GtkWidget *frame;
+ GtkWidget *send_button, *add_new_button;
+ GtkWidget *power_label;
+ GtkTreeViewColumn *type_column;
+ GtkCellRenderer *cell;
+ KillswitchState switch_state;
+ GtkWidget *tree_view;
+ priv = MOBLIN_PANEL_GET_PRIVATE (self);
+
+ page = gtk_hbox_new (FALSE, 0);
+ gtk_widget_show (page);
/* Add child widgetry */
vbox = gtk_vbox_new (FALSE, 4);
gtk_widget_show (vbox);
- gtk_box_pack_start (GTK_BOX (self), vbox, TRUE, TRUE, 4);
+ gtk_box_pack_start (GTK_BOX (page), vbox, TRUE, TRUE, 4);
- priv->device_list_frame = nbtk_gtk_frame_new ();
+ frame = nbtk_gtk_frame_new ();
frame_title = gtk_label_new ("");
- gtk_frame_set_label_widget (GTK_FRAME (priv->device_list_frame), frame_title);
- set_frame_title (GTK_FRAME (priv->device_list_frame), _("Devices"));
+ gtk_frame_set_label_widget (GTK_FRAME (frame), frame_title);
+ set_frame_title (GTK_FRAME (frame), _("Devices"));
/* Device list */
- priv->chooser = g_object_new (BLUETOOTH_TYPE_CHOOSER,
- "has-internal-device-filter", FALSE,
- "show-device-category", FALSE,
- NULL);
- priv->chooser_model = bluetooth_chooser_get_model (BLUETOOTH_CHOOSER (priv->chooser));
- type_column = bluetooth_chooser_get_type_column (BLUETOOTH_CHOOSER (priv->chooser));
- /* Add the activity button */
+ chooser = g_object_new (BLUETOOTH_TYPE_CHOOSER,
+ "has-internal-device-filter", FALSE,
+ "show-device-category", FALSE,
+ "show-searching", FALSE,
+ "device-category-filter", BLUETOOTH_CATEGORY_PAIRED_OR_TRUSTED,
+ NULL);
+ type_column = bluetooth_chooser_get_type_column (BLUETOOTH_CHOOSER (chooser));
+ if (!priv->chooser_model)
+ priv->chooser_model = bluetooth_chooser_get_model (BLUETOOTH_CHOOSER (chooser));
+
+ tree_view = bluetooth_chooser_get_treeview (BLUETOOTH_CHOOSER (chooser));
+ g_object_set (tree_view, "enable-grid-lines", TRUE, "headers-visible", FALSE, NULL);
+ //"grid-line-width", 2, "horizontal-separator", 6, "vertical-separator", 6, zebra
+
+ /* Add the browse button */
cell = mux_cell_renderer_text_new ();
gtk_tree_view_column_pack_start (type_column, cell, FALSE);
gtk_tree_view_column_set_cell_data_func (type_column, cell,
- activity_to_text, self, NULL);
- g_signal_connect (cell, "activated", G_CALLBACK (activity_clicked), self);
+ browse_to_text, self, NULL);
+ g_signal_connect (cell, "activated", G_CALLBACK (browse_clicked), self);
/* Add the connect button */
cell = mux_cell_renderer_text_new ();
@@ -509,15 +589,12 @@ moblin_panel_init (MoblinPanel *self)
gtk_tree_view_column_pack_end (type_column, cell, FALSE);
gtk_tree_view_column_set_cell_data_func (type_column, cell,
remove_to_icon, self, NULL);
- g_signal_connect (cell, "activated", G_CALLBACK (remove_clicked_cb), self);
- g_signal_connect (priv->chooser, "selected-device-changed",
- G_CALLBACK (selected_device_changed_cb), self);
+ g_signal_connect (cell, "activated", G_CALLBACK (remove_clicked_cb), chooser);
- gtk_widget_show (priv->chooser);
- gtk_container_add (GTK_CONTAINER (priv->device_list_frame), priv->chooser);
- gtk_widget_show (priv->device_list_frame);
- gtk_box_pack_start (GTK_BOX (vbox), priv->device_list_frame,
- FALSE, FALSE, 4);
+ gtk_widget_show (chooser);
+ gtk_container_add (GTK_CONTAINER (frame), chooser);
+ gtk_widget_show (frame);
+ gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 4);
/* Add new button */
add_new_button = gtk_button_new_with_label (_("Add a new device"));
@@ -527,76 +604,129 @@ moblin_panel_init (MoblinPanel *self)
gtk_box_pack_start (GTK_BOX (vbox), add_new_button, FALSE, FALSE, 4);
/* Right column */
- //group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
vbox = gtk_vbox_new (FALSE, 4);
gtk_widget_show (vbox);
- gtk_box_pack_start (GTK_BOX (self), vbox, FALSE, FALSE, 4);
+ gtk_box_pack_start (GTK_BOX (page), vbox, FALSE, FALSE, 4);
hbox = gtk_hbox_new (FALSE, 4);
gtk_widget_show (hbox);
- //gtk_size_group_add_widget (group, hbox);
gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 4);
/* Power switch */
- priv->power_label = gtk_label_new (_("Turn Bluetooth"));
- gtk_widget_show (priv->power_label);
- gtk_box_pack_start (GTK_BOX (hbox), priv->power_label, FALSE, FALSE, 4);
+ power_label = gtk_label_new (_("Turn Bluetooth"));
+ gtk_widget_show (power_label);
+ gtk_box_pack_start (GTK_BOX (hbox), power_label, FALSE, FALSE, 4);
priv->power_switch = nbtk_gtk_light_switch_new ();
if (priv->killswitch != NULL) {
- switch_state = bluetooth_killswitch_get_state (priv->killswitch);
-
- switch (switch_state) {
- case KILLSWITCH_STATE_UNBLOCKED:
- nbtk_gtk_light_switch_set_active
- (NBTK_GTK_LIGHT_SWITCH (priv->power_switch),
- TRUE);
- break;
- case KILLSWITCH_STATE_SOFT_BLOCKED:
- nbtk_gtk_light_switch_set_active
- (NBTK_GTK_LIGHT_SWITCH (priv->power_switch),
- FALSE);
- break;
- case KILLSWITCH_STATE_HARD_BLOCKED:
- default:
- gtk_widget_set_sensitive (priv->power_switch, FALSE);
- break;
+ if (bluetooth_killswitch_has_killswitches (priv->killswitch) == FALSE) {
+ g_object_unref (priv->killswitch);
+ priv->killswitch = NULL;
+ gtk_widget_set_sensitive (priv->power_switch, FALSE);
+ } else {
+ switch_state = bluetooth_killswitch_get_state (priv->killswitch);
+
+ switch (switch_state) {
+ case KILLSWITCH_STATE_UNBLOCKED:
+ nbtk_gtk_light_switch_set_active
+ (NBTK_GTK_LIGHT_SWITCH (priv->power_switch),
+ TRUE);
+ break;
+ case KILLSWITCH_STATE_SOFT_BLOCKED:
+ nbtk_gtk_light_switch_set_active
+ (NBTK_GTK_LIGHT_SWITCH (priv->power_switch),
+ FALSE);
+ break;
+ case KILLSWITCH_STATE_HARD_BLOCKED:
+ default:
+ gtk_widget_set_sensitive (priv->power_switch, FALSE);
+ break;
+ }
+
+ g_signal_connect (priv->killswitch, "state-changed",
+ G_CALLBACK (killswitch_state_changed_cb), self);
+ g_signal_connect (priv->power_switch, "switch-flipped",
+ G_CALLBACK (power_switch_toggled_cb), self);
}
} else {
gtk_widget_set_sensitive (priv->power_switch, FALSE);
}
gtk_widget_show (priv->power_switch);
- g_signal_connect (priv->power_switch, "switch-flipped",
- G_CALLBACK (power_switch_toggled_cb), self);
gtk_box_pack_start (GTK_BOX (hbox), priv->power_switch, FALSE, FALSE, 4);
- /* Filter combo */
- priv->filter = bluetooth_filter_widget_new ();
- bluetooth_filter_widget_set_title (BLUETOOTH_FILTER_WIDGET (priv->filter), _("Only show:"));
- bluetooth_filter_widget_bind_filter (BLUETOOTH_FILTER_WIDGET (priv->filter),
- BLUETOOTH_CHOOSER (priv->chooser));
- gtk_box_pack_start (GTK_BOX (vbox), priv->filter, FALSE, FALSE, 4);
-
- /* Button for Send file/PIN options */
- priv->action_button = gtk_button_new_with_label (_("Send file from your computer"));
- gtk_widget_show (priv->action_button);
- //gtk_size_group_add_widget (group, priv->action_button);
- g_signal_connect (priv->action_button, "clicked",
- G_CALLBACK (send_file_button_clicked_cb), self);
- gtk_box_pack_start (GTK_BOX (vbox), priv->action_button, FALSE, FALSE, 4);
-
- /* Scanning "help" label */
- scan_text = g_strdup (_("Searching for devices.\n\n"
- "Please make sure they're nearby and in 'discoverable' or "
- "'visible' mode. Check your devices manual if you have "
- "problems."));
- priv->scan_label = gtk_label_new (scan_text);
- //gtk_size_group_add_widget (group, priv->scan_label);
- gtk_label_set_line_wrap (GTK_LABEL (priv->scan_label), TRUE);
- g_free (scan_text);
- gtk_box_pack_start (GTK_BOX (vbox), priv->scan_label, FALSE, FALSE, 4);
-
- //g_object_unref (group);
+ /* Button for Send file */
+ send_button = gtk_button_new_with_label (_("Send file from your computer"));
+ gtk_widget_show (send_button);
+ g_signal_connect (send_button, "clicked",
+ G_CALLBACK (send_file_button_clicked_cb), chooser);
+ g_signal_connect (chooser, "selected-device-changed",
+ G_CALLBACK (selected_device_changed_cb), send_button);
+ gtk_box_pack_start (GTK_BOX (vbox), send_button, FALSE, FALSE, 4);
+
+ return page;
+}
+
+static void
+moblin_panel_init (MoblinPanel *self)
+{
+ MoblinPanelPrivate *priv;
+ GtkWidget *properties_page, *add_page; //, *setup_page, *message_page;
+
+ priv = MOBLIN_PANEL_GET_PRIVATE (self);
+ priv->target_ssp = FALSE;
+ priv->pincode = FALSE;
+ priv->automatic_pincode = FALSE;
+
+ priv->killswitch = bluetooth_killswitch_new ();
+
+ priv->agent = bluetooth_agent_new ();
+ bluetooth_plugin_manager_init ();
+
+ gtk_box_set_homogeneous (GTK_BOX (self), FALSE);
+ gtk_box_set_spacing (GTK_BOX (self), 4);
+
+ priv->notebook = gtk_notebook_new ();
+ gtk_notebook_set_show_tabs (GTK_NOTEBOOK (priv->notebook), FALSE);
+
+ properties_page = create_properties_page (self);
+ gtk_widget_show (properties_page);
+ gtk_notebook_append_page (GTK_NOTEBOOK (priv->notebook), properties_page, NULL);
+
+ add_page = create_add_page (self);
+ gtk_widget_show (add_page);
+ gtk_notebook_append_page (GTK_NOTEBOOK (priv->notebook), add_page, NULL);
+#if 0
+ setup_page = create_setup_page (self);
+ gtk_widget_show (setup_page);
+ gtk_notebook_append_page (GTK_NOTEBOOK (priv->notebook), setup_page, NULL);
+
+ message_page = create_message_page (self);
+ gtk_widget_show (message_page);
+ gtk_notebook_append_page (GTK_NOTEBOOK (priv->notebook), setup_page, NULL);
+#endif
+ gtk_notebook_set_current_page (GTK_NOTEBOOK (priv->notebook), PROPS_PAGE);
+ gtk_widget_show (priv->notebook);
+ gtk_container_add (GTK_CONTAINER (self), priv->notebook);
+}
+
+static void
+moblin_panel_dispose (GObject *object)
+{
+ //MoblinPanelPrivate *priv = MOBLIN_PANEL_GET_PRIVATE (object);
+
+ bluetooth_plugin_manager_cleanup ();
+
+ //g_object_unref (priv->agent);
+
+ G_OBJECT_CLASS (moblin_panel_parent_class)->dispose (object);
+}
+
+static void
+moblin_panel_class_init (MoblinPanelClass *klass)
+{
+ GObjectClass *obj_class = G_OBJECT_CLASS (klass);
+ g_type_class_add_private (klass, sizeof (MoblinPanelPrivate));
+ obj_class->dispose = moblin_panel_dispose;
}
/**
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]