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