r4376 - trunk/src/target/OM-2007.2/panel-plugins/openmoko-panel-gps/src
john_lee at sita.openmoko.org
john_lee at sita.openmoko.org
Fri Apr 18 12:55:15 CEST 2008
Author: john_lee
Date: 2008-04-18 12:55:13 +0200 (Fri, 18 Apr 2008)
New Revision: 4376
Modified:
trunk/src/target/OM-2007.2/panel-plugins/openmoko-panel-gps/src/openmoko-panel-gps.c
Log:
change openmoko-panel-gps to notification only
according to
http://lists.openmoko.org/pipermail/openmoko-devel/2008-April/002506.html
Modified: trunk/src/target/OM-2007.2/panel-plugins/openmoko-panel-gps/src/openmoko-panel-gps.c
===================================================================
--- trunk/src/target/OM-2007.2/panel-plugins/openmoko-panel-gps/src/openmoko-panel-gps.c 2008-04-18 10:54:21 UTC (rev 4375)
+++ trunk/src/target/OM-2007.2/panel-plugins/openmoko-panel-gps/src/openmoko-panel-gps.c 2008-04-18 10:55:13 UTC (rev 4376)
@@ -23,118 +23,78 @@
#include <stdio.h>
#define GPS_PWOERON_FILENAME "/sys/bus/platform/drivers/neo1973-pm-gps/neo1973-pm-gps.0/pwron"
-#define QUERY_FREQ 5
+#define QUERY_FREQ 5
typedef struct {
- MokoPanelApplet* mokoapplet;
- int state;
+ MokoPanelApplet *mokoapplet;
guint timeout_id;
} GpsApplet;
-static void
-gps_applet_free (GpsApplet *applet)
+static int gps_applet_power_get()
{
- g_slice_free (GpsApplet, applet);
-}
-
-static int
-gps_applet_power_get()
-{
char buf[64];
- FILE * f = fopen(GPS_PWOERON_FILENAME, "r");
+ FILE *f = fopen(GPS_PWOERON_FILENAME, "r");
int ret;
if (!f) {
- printf("Open file %s failed!!\n",GPS_PWOERON_FILENAME);
- return 0;
+ printf("Open file %s failed!!\n", GPS_PWOERON_FILENAME);
+ return 0;
}
- ret = fread(buf,sizeof(char),sizeof(buf)/sizeof(char),f);
+ ret = fread(buf, sizeof(char), sizeof(buf) / sizeof(char), f);
fclose(f);
- if (ret > 0 && buf[0]=='1') {
- return 1;
+ if (ret > 0 && buf[0] == '1') {
+ return 1;
}
return 0;
}
-static int
-gps_applet_power_set(int on)
+static void gps_applet_update_visibility(GpsApplet * applet)
{
- char buf[64];
- FILE * f = fopen(GPS_PWOERON_FILENAME, "w");
- int ret;
- if (!f) {
- printf("Open file %s failed!!\n",GPS_PWOERON_FILENAME);
- return 0;
- }
- sprintf(buf,"%d",on ==0 ? 0 : 1);
- ret = fwrite(buf,sizeof(char),sizeof(buf)/sizeof(char),f);
- fclose(f);
- if (ret <= 0) {
- printf("Write date into device failed!!\n");
- return 0;
- }
- return on ==0 ? 0 : 1;
+ if (gps_applet_power_get())
+ gtk_widget_show(GTK_WIDGET(applet->mokoapplet));
+ else
+ gtk_widget_hide(GTK_WIDGET(applet->mokoapplet));
}
-static void
-mb_panel_update (GpsApplet *applet, int state)
+static gboolean gps_applet_timeout_cb(gpointer data)
{
- moko_panel_applet_set_icon( applet->mokoapplet, state == 1 ? PKGDATADIR "/GPS_On.png" : PKGDATADIR "/GPS_Off.png");
- applet->state = state;
- printf("GPS State is %d\n", applet->state);
-}
+ gps_applet_update_visibility((GpsApplet *) data);
-static void
-gps_applet_power_on (GtkWidget* menu, GpsApplet* applet) {
- mb_panel_update(applet,gps_applet_power_set(1));
+ return TRUE;
}
-static void
-gps_applet_power_off (GtkWidget* menu, GpsApplet* applet) {
- mb_panel_update(applet,gps_applet_power_set(0));
-}
-static void
-gps_applet_update_visibility (GpsApplet *applet)
+static void gps_applet_weak_notify_cb(gpointer data, GObject * dead_object)
{
- moko_panel_applet_set_icon(applet->mokoapplet,PKGDATADIR "/GPS_Off.png");
- mb_panel_update(applet, gps_applet_power_get());
- gtk_widget_show_all( GTK_WIDGET(applet->mokoapplet) );
-}
+ GpsApplet *applet = (GpsApplet *) data;
-static gboolean
-gps_applet_timeout_cb (gpointer data)
-{
- gps_applet_update_visibility ((GpsApplet *)data);
-
- return TRUE;
+ g_source_remove(applet->timeout_id);
+ g_slice_free(GpsApplet, applet);
}
-G_MODULE_EXPORT GtkWidget*
-mb_panel_applet_create(const char* id, GtkOrientation orientation)
+G_MODULE_EXPORT GtkWidget *mb_panel_applet_create(const char *id,
+ GtkOrientation
+ orientation)
{
- MokoPanelApplet* mokoapplet = moko_panel_applet_new();
+ MokoPanelApplet *mokoapplet =
+ MOKO_PANEL_APPLET(moko_panel_applet_new());
GpsApplet *applet;
- time_t t;
- struct tm *local_time;
- applet = g_slice_new (GpsApplet);
+ applet = g_slice_new(GpsApplet);
applet->mokoapplet = mokoapplet;
- applet->state=-100;
- gps_applet_update_visibility (applet);
-
- GtkMenu* menu = GTK_MENU(gtk_menu_new());
- GtkWidget* item1 = gtk_menu_item_new_with_label("Power-Up GPS");
- GtkWidget* item2 = gtk_menu_item_new_with_label("Power-Off GPS");
- g_signal_connect(G_OBJECT(item1), "activate", G_CALLBACK(gps_applet_power_on), applet);
- g_signal_connect(G_OBJECT(item2), "activate", G_CALLBACK(gps_applet_power_off), applet);
- gtk_menu_shell_append(GTK_MENU_SHELL(menu), item1);
- gtk_menu_shell_append(GTK_MENU_SHELL(menu), item2);
- gtk_widget_show_all(GTK_WIDGET(menu));
- moko_panel_applet_set_popup( mokoapplet, GTK_WIDGET(menu), MOKO_PANEL_APPLET_CLICK_POPUP);
+ /*
+ * Weak reference so we can find out when the applet is destroyed to get
+ * rid of the timeout and tidy up
+ */
+ g_object_weak_ref((GObject *) applet->mokoapplet,
+ gps_applet_weak_notify_cb, applet);
- applet->timeout_id = g_timeout_add_seconds (QUERY_FREQ, gps_applet_timeout_cb,
- applet);
-
+ moko_panel_applet_set_icon(applet->mokoapplet,
+ PKGDATADIR "/GPS_Off.png");
+ gtk_widget_show_all(GTK_WIDGET(applet->mokoapplet));
+
+ applet->timeout_id =
+ g_timeout_add_seconds(QUERY_FREQ, gps_applet_timeout_cb, applet);
+
return GTK_WIDGET(mokoapplet);
-};
+}
More information about the commitlog
mailing list