r2843 - in trunk/src/target/OM-2007.2/panel-plugins/openmoko-panel-bt: . src
stefan at sita.openmoko.org
stefan at sita.openmoko.org
Wed Aug 29 00:48:12 CEST 2007
Author: stefan
Date: 2007-08-29 00:48:10 +0200 (Wed, 29 Aug 2007)
New Revision: 2843
Modified:
trunk/src/target/OM-2007.2/panel-plugins/openmoko-panel-bt/ChangeLog
trunk/src/target/OM-2007.2/panel-plugins/openmoko-panel-bt/src/openmoko-panel-bt.c
Log:
2007-08-29 Stefan Schmidt <stefan at openmoko.org>
* src/openmoko-panel-bt.c:
Allow applet to turn the bt radio on and off. Patch from Alexandre
d'Alton <alex at alexdalton.org> (Closes #639)
Modified: trunk/src/target/OM-2007.2/panel-plugins/openmoko-panel-bt/ChangeLog
===================================================================
--- trunk/src/target/OM-2007.2/panel-plugins/openmoko-panel-bt/ChangeLog 2007-08-28 17:35:06 UTC (rev 2842)
+++ trunk/src/target/OM-2007.2/panel-plugins/openmoko-panel-bt/ChangeLog 2007-08-28 22:48:10 UTC (rev 2843)
@@ -1,3 +1,9 @@
+2007-08-29 Stefan Schmidt <stefan at openmoko.org>
+
+ * src/openmoko-panel-bt.c:
+ Allow applet to turn the bt radio on and off. Patch from Alexandre
+ d'Alton <alex at alexdalton.org> (Closes #639)
+
2007-07-30 Michael Lauer <mickey at openmoko.org>
* configure.ac:
Modified: trunk/src/target/OM-2007.2/panel-plugins/openmoko-panel-bt/src/openmoko-panel-bt.c
===================================================================
--- trunk/src/target/OM-2007.2/panel-plugins/openmoko-panel-bt/src/openmoko-panel-bt.c 2007-08-28 17:35:06 UTC (rev 2842)
+++ trunk/src/target/OM-2007.2/panel-plugins/openmoko-panel-bt/src/openmoko-panel-bt.c 2007-08-28 22:48:10 UTC (rev 2843)
@@ -17,18 +17,131 @@
#include <libmokopanelui2/moko-panel-applet.h>
#include <gtk/gtkimage.h>
+#include <gtk/gtkbox.h>
+#include <gtk/gtk.h>
#include <time.h>
+#include <stdlib.h>
+#include <stdio.h>
+
typedef struct {
- GtkImage *image;
+ MokoPanelApplet *mokoapplet;
+ GtkImage *image;
+ int state;
} BtApplet;
+void quick_message(gchar *message) {
+
+ GtkWidget *dialog, *label, *okay_button;
+
+ /* Create the widgets */
+
+ dialog = gtk_dialog_new();
+ label = gtk_label_new (message);
+ okay_button = gtk_button_new_with_label("Okay");
+
+ /* Ensure that the dialog box is destroyed when the user clicks ok. */
+
+ gtk_signal_connect_object (GTK_OBJECT (okay_button), "clicked",
+ GTK_SIGNAL_FUNC (gtk_widget_destroy), dialog);
+ gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->action_area),
+ okay_button);
+
+ gtk_window_set_title(GTK_WINDOW(dialog), "Bt Status");
+
+ /* Add the label, and show everything we've added to the dialog. */
+
+ gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->vbox),
+ label);
+ gtk_widget_show_all (dialog);
+}
+
+#define BT_POWERON_FILENAME "/sys/class/i2c-dev/i2c-0/device/0-0008/gta01-pm-bt.0/power_on"
+
+static int
+read_bt_power(void)
+{
+ FILE * f = fopen(BT_POWERON_FILENAME, "r+");
+ int val;
+
+ if (f == NULL) return -1;
+
+ fscanf(f, "%i", &val);
+ fclose(f);
+ return val;
+}
+
+static int
+set_bt_power(int val)
+{
+ FILE * f = fopen(BT_POWERON_FILENAME, "w");
+
+ if (f == NULL) return -1;
+
+ fprintf(f, "%i\n", val);
+
+ fclose(f);
+
+ return val;
+}
+
static void
+mb_panel_update(BtApplet *applet, int state)
+{
+
+ if(applet->state != state) {
+ printf("Will change the image ... \n");
+ if (state == 1)
+ gtk_image_set_from_file(applet->image, PKGDATADIR "/Bluetooth_On.png");
+ else
+ gtk_image_set_from_file(applet->image, PKGDATADIR "/Bluetooth_Off.png");
+ applet->state = state;
+ }
+}
+
+
+
+static void
+bt_applet_power_on(GtkWidget* menu, BtApplet* applet)
+{
+ int ret;
+ ret = set_bt_power(1);
+ mb_panel_update(applet, 1);
+ quick_message(" Bluetooth turned on \n\n");
+}
+
+static void
+bt_applet_power_off(GtkWidget* menu, BtApplet* applet)
+{
+ int ret;
+ ret = set_bt_power(0);
+ mb_panel_update(applet, 0);
+ quick_message(" Bluetooth turned off \n\n");
+}
+
+
+static void
+bt_applet_status(GtkWidget* menu, BtApplet* applet)
+{
+ int ret;
+ char tmp_string[256];
+
+ ret = read_bt_power();
+
+ sprintf(tmp_string, " Bluetooth is %s \n\n", ret ? "on" : "off");
+
+ quick_message(tmp_string);
+
+}
+
+static void
bt_applet_free (BtApplet *applet)
{
g_slice_free (BtApplet, applet);
}
+
+
G_MODULE_EXPORT GtkWidget*
mb_panel_applet_create(const char* id, GtkOrientation orientation)
{
@@ -40,11 +153,33 @@
applet = g_slice_new (BtApplet);
- applet->image = GTK_IMAGE(gtk_image_new_from_file ( PKGDATADIR "/Bluetooth_Off.png"));
+ applet->state = read_bt_power();
+ applet->mokoapplet = mokoapplet;
+
+ if (applet->state == 0) {
+ applet->image = GTK_IMAGE(gtk_image_new_from_file ( PKGDATADIR "/Bluetooth_Off.png"));
+ } else {
+ applet->image = GTK_IMAGE(gtk_image_new_from_file ( PKGDATADIR "/Bluetooth_On.png"));
+ }
gtk_widget_set_name( applet->image, "openmoko-bt-applet" );
g_object_weak_ref( G_OBJECT(applet->image), (GWeakNotify) bt_applet_free, applet );
+ moko_panel_applet_set_widget( GTK_CONTAINER(applet->mokoapplet), applet->image );
+ gtk_widget_show_all( GTK_WIDGET(applet->mokoapplet) );
+
- moko_panel_applet_set_widget( GTK_CONTAINER(mokoapplet), applet->image );
- gtk_widget_show_all( GTK_WIDGET(mokoapplet) );
+ GtkMenu* menu = GTK_MENU(gtk_menu_new());
+ GtkWidget* item1 = gtk_menu_item_new_with_label("Power-Up Bluetooth radio");
+ g_signal_connect(G_OBJECT(item1), "activate", G_CALLBACK(bt_applet_power_on), applet);
+ gtk_menu_shell_append(GTK_MENU_SHELL(menu), item1);
+ GtkWidget* item2 = gtk_menu_item_new_with_label("Power-Off Bluetooth radio");
+ g_signal_connect(G_OBJECT(item2), "activate", G_CALLBACK(bt_applet_power_off), applet);
+ gtk_menu_shell_append(GTK_MENU_SHELL(menu), item2);
+ GtkWidget* item3 = gtk_menu_item_new_with_label("Bluetooth status");
+ g_signal_connect(G_OBJECT(item3), "activate", G_CALLBACK(bt_applet_status), applet);
+ gtk_menu_shell_append(GTK_MENU_SHELL(menu), item3);
+
+ gtk_widget_show_all(GTK_WIDGET(menu));
+ moko_panel_applet_set_popup( mokoapplet, GTK_WIDGET(menu), MOKO_PANEL_APPLET_CLICK_POPUP);
+
return GTK_WIDGET(mokoapplet);
};
More information about the commitlog
mailing list