[gnome-bluetooth/moblin-dev] Make the host discoverable for two minutes when opening the panel



commit bcdb3d4e87a2305c2fe5a898040405261ba1afb9
Author: Ross Burton <ross linux intel com>
Date:   Fri Feb 19 16:36:15 2010 +0000

    Make the host discoverable for two minutes when opening the panel

 moblin/main.c         |   17 ++++++++++--
 moblin/moblin-panel.c |   68 +++++++++++++++++++++++++++++++++++++++++++++++-
 moblin/moblin-panel.h |    5 ++-
 3 files changed, 83 insertions(+), 7 deletions(-)
---
diff --git a/moblin/main.c b/moblin/main.c
index 0531c3b..dc88768 100644
--- a/moblin/main.c
+++ b/moblin/main.c
@@ -65,11 +65,19 @@ panel_request_focus (MoblinPanel *panel, gpointer user_data)
  * i.e. stop any discovery and show the defaults devices view
  */
 static void
-_reset_view_cb (MplPanelClient *client, gpointer user_data)
+panel_hidden_cb (MplPanelClient *client, gpointer user_data)
 {
 	MoblinPanel *panel = MOBLIN_PANEL (user_data);
 
-	moblin_panel_reset_view (panel);
+	moblin_panel_hidden (panel);
+}
+
+static void
+panel_shown_cb (MplPanelClient *client, gpointer user_data)
+{
+	MoblinPanel *panel = MOBLIN_PANEL (user_data);
+
+        moblin_panel_shown (panel);
 }
 
 int
@@ -118,6 +126,8 @@ main (int argc, char *argv[])
 
 		gtk_container_add (GTK_CONTAINER (window), content);
 		gtk_widget_show (window);
+
+                moblin_panel_shown (MOBLIN_PANEL (content));
 	}  else {
 		panel = mpl_panel_gtk_new (MPL_PANEL_BLUETOOTH, _("bluetooth"),
 					THEME_DIR "/bluetooth-panel.css",
@@ -125,7 +135,8 @@ main (int argc, char *argv[])
 		window  = mpl_panel_gtk_get_window (MPL_PANEL_GTK (panel));
 
 		content = moblin_panel_new ();
-		g_signal_connect (panel, "hide-end", (GCallback) _reset_view_cb, content);
+		g_signal_connect (panel, "show", (GCallback) panel_shown_cb, content);
+		g_signal_connect (panel, "hide-end", (GCallback) panel_hidden_cb, content);
 		g_signal_connect (content, "state-changed",
 				G_CALLBACK (bluetooth_status_changed), panel);
 		g_signal_connect (content, "request-focus",
diff --git a/moblin/moblin-panel.c b/moblin/moblin-panel.c
index 1863842..58634d9 100644
--- a/moblin/moblin-panel.c
+++ b/moblin/moblin-panel.c
@@ -66,6 +66,9 @@ struct _MoblinPanelPrivate
 
 	/* Page widgets that need to be "globally" accessible */
 	GtkWidget *power_switch;
+	guint      visible_countdown; /* seconds */
+	GtkWidget *visible_label;
+	GtkWidget *visible_button;
 	GtkWidget *notebook;
 	GtkWidget *label_pin_help;
 	GtkWidget *label_pin;
@@ -154,6 +157,52 @@ power_switch_toggled_cb (MxGtkLightSwitch *light_switch,
 	}
 }
 
+static gboolean
+update_visible (gpointer data)
+{
+	MoblinPanel *panel = MOBLIN_PANEL (data);
+	MoblinPanelPrivate *priv = MOBLIN_PANEL_GET_PRIVATE (panel);
+	char *s;
+
+	if (priv->visible_countdown -= 5) {
+		gtk_widget_hide (priv->visible_button);
+		gtk_widget_show (priv->visible_label);
+
+		/* TODO: better display formatting */
+		s = g_strdup_printf (_("Your computer is visible on Bluetooth for %d seconds."),
+				     priv->visible_countdown);
+		gtk_label_set_text (GTK_LABEL (priv->visible_label), s);
+		g_free (s);
+		return TRUE;
+	} else {
+		bluetooth_client_set_discoverable (priv->client, FALSE);
+
+		gtk_widget_show (priv->visible_button);
+		gtk_widget_hide (priv->visible_label);
+
+		return FALSE;
+	}
+}
+
+static void
+make_discoverable (MoblinPanel *panel)
+{
+	MoblinPanelPrivate *priv = MOBLIN_PANEL_GET_PRIVATE (panel);
+
+	bluetooth_client_set_discoverable (priv->client, TRUE);
+
+	priv->visible_countdown = 60 * 2; /* 2 minutes */
+
+	update_visible (panel);
+	g_timeout_add_seconds (5, update_visible, panel);
+}
+
+static void
+visible_button_cb (GtkButton *button, gpointer user_data)
+{
+	make_discoverable (MOBLIN_PANEL (user_data));
+}
+
 static void
 enable_send_file (MoblinPanel *self)
 {
@@ -1463,6 +1512,14 @@ create_devices_page (MoblinPanel *self)
 	gtk_widget_show (priv->power_switch);
 	gtk_box_pack_start (GTK_BOX (hbox), priv->power_switch, FALSE, FALSE, 4);
 
+	priv->visible_label = gtk_label_new (NULL);
+	gtk_label_set_line_wrap (GTK_LABEL (priv->visible_label), TRUE);
+	gtk_box_pack_start (GTK_BOX (vbox), priv->visible_label, FALSE, FALSE, 4);
+
+	priv->visible_button = gtk_button_new_with_label (_("Make visible on Bluetooth"));
+	g_signal_connect (priv->visible_button, "clicked", G_CALLBACK (visible_button_cb), self);
+	gtk_box_pack_start (GTK_BOX (vbox), priv->visible_button, FALSE, FALSE, 4);
+
 	/* Button for Send file */
 	priv->send_button = gtk_button_new_with_label (_("Send file from your computer"));
 	gtk_widget_show (priv->send_button);
@@ -1677,12 +1734,19 @@ moblin_panel_new (void)
 
 /**
  *
- * moblin_panel_reset_view:
+ * moblin_panel_hidden:
  *
  * @self: A #MoblinPanel widget
  **/
 void
-moblin_panel_reset_view (MoblinPanel *self)
+moblin_panel_hidden (MoblinPanel *self)
+{
+	set_current_page (self, PAGE_DEVICES);
+}
+
+void
+moblin_panel_shown (MoblinPanel *self)
 {
 	set_current_page (self, PAGE_DEVICES);
+	make_discoverable (self);
 }
diff --git a/moblin/moblin-panel.h b/moblin/moblin-panel.h
index d273e79..c688312 100644
--- a/moblin/moblin-panel.h
+++ b/moblin/moblin-panel.h
@@ -62,7 +62,6 @@ struct _MoblinPanel
 struct _MoblinPanelClass
 {
   GtkHBoxClass parent_class;
-  MoblinPanelPrivate *priv;
 
   void (*status_connecting) (MoblinPanel *self, gboolean connecting);
 };
@@ -71,7 +70,9 @@ GType moblin_panel_get_type (void);
 
 GtkWidget *moblin_panel_new (void);
 
-void moblin_panel_reset_view (MoblinPanel *self);
+void moblin_panel_shown (MoblinPanel *self);
+
+void moblin_panel_hidden (MoblinPanel *self);
 
 G_END_DECLS
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]