r2670 - in trunk/src/target/OM-2007.2/daemons/neod: . src

mickey at sita.openmoko.org mickey at sita.openmoko.org
Thu Aug 9 15:03:29 CEST 2007


Author: mickey
Date: 2007-08-09 15:03:28 +0200 (Thu, 09 Aug 2007)
New Revision: 2670

Modified:
   trunk/src/target/OM-2007.2/daemons/neod/configure.ac
   trunk/src/target/OM-2007.2/daemons/neod/src/Makefile.am
   trunk/src/target/OM-2007.2/daemons/neod/src/buttonactions.c
   trunk/src/target/OM-2007.2/daemons/neod/src/buttonactions.h
Log:
neod: save/load power management values via gconf, enable changing PM profile via power-button-hold menu


Modified: trunk/src/target/OM-2007.2/daemons/neod/configure.ac
===================================================================
--- trunk/src/target/OM-2007.2/daemons/neod/configure.ac	2007-08-09 12:44:25 UTC (rev 2669)
+++ trunk/src/target/OM-2007.2/daemons/neod/configure.ac	2007-08-09 13:03:28 UTC (rev 2670)
@@ -5,8 +5,6 @@
 AM_CONFIG_HEADER(config.h)
 AM_MAINTAINER_MODE
 
-LIBGTK_VERSION=2.6.0
-
 AC_ISC_POSIX
 AC_PROG_CC
 AC_PROG_CC_STDC
@@ -20,14 +18,9 @@
 AC_SUBST(GETTEXT_PACKAGE)
 AM_GLIB_GNU_GETTEXT
 
-PKG_CHECK_MODULES(GTK, gtk+-2.0 >= $LIBGTK_VERSION)
-PKG_CHECK_MODULES(PULSE, libpulse)
+PKG_CHECK_MODULES(NEOD, gtk+-2.0 gconf-2.0 libpulse)
 
-CFLAGS=$GTK_CFLAGS
-AC_CHECK_DECLS([g_date_set_time_t],
-               [have_date=yes], [have_date=no], [#include <glib.h>])
-AM_CONDITIONAL(HAVE_GDATE_TIME_T, test "x$have_date" = "xyes")
-CFLAGS=$old_cflags
+CFLAGS=$NEOD_CFLAGS
 
 AC_OUTPUT([
 Makefile

Modified: trunk/src/target/OM-2007.2/daemons/neod/src/Makefile.am
===================================================================
--- trunk/src/target/OM-2007.2/daemons/neod/src/Makefile.am	2007-08-09 12:44:25 UTC (rev 2669)
+++ trunk/src/target/OM-2007.2/daemons/neod/src/Makefile.am	2007-08-09 13:03:28 UTC (rev 2670)
@@ -4,7 +4,7 @@
                -DNEOD_LOCALE_DIR=\""$(prefix)/$(DATADIRNAME)/locale"\" \
                -DDATADIR=\""$(datadir)"\" -D_GNU_SOURCE
 
-AM_CFLAGS    = -Wall -pedantic -std=c99 @GTK_CFLAGS@ @PULSE_CFLAGS@
+AM_CFLAGS    = -Wall -pedantic -std=c99 @NEOD_CFLAGS@
 
 bin_PROGRAMS = neod
 
@@ -12,7 +12,7 @@
   buttonactions.c \
   neod-main.c
 
-neod_LDADD = @GTK_LIBS@ @PULSE_LIBS@
+neod_LDADD = @NEOD_LIBS@
 
 MAINTAINERCLEANFILES  = config.h.in Makefile.in
 

Modified: trunk/src/target/OM-2007.2/daemons/neod/src/buttonactions.c
===================================================================
--- trunk/src/target/OM-2007.2/daemons/neod/src/buttonactions.c	2007-08-09 12:44:25 UTC (rev 2669)
+++ trunk/src/target/OM-2007.2/daemons/neod/src/buttonactions.c	2007-08-09 13:03:28 UTC (rev 2670)
@@ -14,9 +14,12 @@
  */
 #include "buttonactions.h"
 
+#include <gconf/gconf-client.h>
+
 #include <gtk/gtklabel.h>
 #include <gtk/gtkmenu.h>
 #include <gtk/gtkmenuitem.h>
+#include <gtk/gtkcheckmenuitem.h>
 
 #include <gdk/gdkx.h>
 
@@ -66,6 +69,17 @@
 GtkWidget* aux_menu = 0;
 GtkWidget* power_menu = 0;
 
+GConfClient* gconfc = 0;
+
+enum PowerManagementMode
+{
+    FULL = 0,
+    DIM_ONLY = 1,
+    NONE = 2,
+};
+
+int pm_value = 0;
+
 typedef enum _PowerState
 {
     NORMAL,
@@ -191,10 +205,25 @@
     }
     g_source_attach( button_watcher, NULL );
 
+    // get PM profile setting from gconf and listen for changes
+    gconfc = gconf_client_get_default();
+    if (!gconfc)
+    {
+        g_error( "can't get connection to gconfd" );
+        return FALSE;
+    }
+    GError* error = 0;
+    pm_value = gconf_client_get_int( gconfc, "/desktop/openmoko/neod/power_management", &error );
+    if ( error ) g_debug( "gconf error: %s", error->message );
+    gconf_client_add_dir( gconfc, "/desktop/openmoko/neod", GCONF_CLIENT_PRELOAD_NONE, &error );
+    if ( error ) g_debug( "gconf error: %s", error->message );
+    gconf_client_notify_add( gconfc, "/desktop/openmoko/neod/power_management", (GConfClientNotifyFunc) neod_buttonactions_gconf_cb, NULL, NULL, &error );
+    if ( error ) g_debug( "gconf error: %s", error->message );
+
+    neod_buttonactions_powersave_reset();
     return TRUE;
 }
 
-
 gboolean neod_buttonactions_input_prepare( GSource* source, gint* timeout )
 {
     return FALSE;
@@ -348,17 +377,17 @@
 
 void neod_buttonactions_popup_selected_fullPM( GtkMenuItem* menu, gpointer user_data )
 {
-    //FIXME set PM to full
+    gconf_client_set_int( gconfc, "/desktop/openmoko/neod/power_management", FULL, NULL );
 }
 
 void neod_buttonactions_popup_selected_dimOnly( GtkMenuItem* menu, gpointer user_data )
 {
-    //FIXME set PM to dim-only
+    gconf_client_set_int( gconfc, "/desktop/openmoko/neod/power_management", DIM_ONLY, NULL );
 }
 
 void neod_buttonactions_popup_selected_noPM( GtkMenuItem* menu, gpointer user_data )
 {
-    //FIXME set PM to none
+    gconf_client_set_int( gconfc, "/desktop/openmoko/neod/power_management", NONE, NULL );
 }
 
 void neod_buttonactions_popup_selected_lock( GtkMenuItem* menu, gpointer user_data )
@@ -390,6 +419,18 @@
     system( "/sbin/poweroff");
 }
 
+void neod_buttonactions_gconf_cb( GConfClient *client, guint cnxn_id, GConfEntry *entry, gpointer data )
+{
+    g_debug( "gconf callback" );
+    pm_value = gconf_client_get_int( client, "/desktop/openmoko/neod/power_management", NULL );
+    if ( pm_value < 0 || pm_value > 2 ) pm_value = 0;
+    neod_buttonactions_powersave_reset();
+    neod_buttonactions_set_display( 100 );
+    gtk_widget_destroy( power_menu );
+    //gtk_widget_unref( power_menu );
+    power_menu = 0;
+}
+
 gboolean neod_buttonactions_power_timeout( guint timeout )
 {
     g_debug( "power pressed for %d", timeout );
@@ -444,12 +485,18 @@
             // TODO build profile list dynamically from database
             GtkWidget* profile = 0;
             profile = gtk_check_menu_item_new_with_label( "Full PM" );
+            gtk_check_menu_item_set_draw_as_radio( GTK_CHECK_MENU_ITEM(profile), TRUE );
+            gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(profile), pm_value == FULL );
             g_signal_connect( G_OBJECT(profile), "activate", G_CALLBACK(neod_buttonactions_popup_selected_fullPM), NULL );
             gtk_menu_shell_append( GTK_MENU_SHELL(power_menu), profile );
             profile = gtk_check_menu_item_new_with_label( "Dim Only" );
+            gtk_check_menu_item_set_draw_as_radio( GTK_CHECK_MENU_ITEM(profile), TRUE );
+            gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(profile), pm_value == DIM_ONLY );
             g_signal_connect( G_OBJECT(profile), "activate", G_CALLBACK(neod_buttonactions_popup_selected_dimOnly), NULL );
             gtk_menu_shell_append( GTK_MENU_SHELL(power_menu), profile );
             profile = gtk_check_menu_item_new_with_label( "No PM" );
+            gtk_check_menu_item_set_draw_as_radio( GTK_CHECK_MENU_ITEM(profile), TRUE );
+            gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(profile), pm_value == NONE );
             g_signal_connect( G_OBJECT(profile), "activate", G_CALLBACK(neod_buttonactions_popup_selected_noPM), NULL );
             gtk_menu_shell_append( GTK_MENU_SHELL(power_menu), profile );
 
@@ -480,6 +527,9 @@
 
 void neod_buttonactions_powersave_reset()
 {
+    if ( pm_value == NONE )
+        return;
+
     g_debug( "mainmenu powersave reset" );
     if ( powersave_timer1 != -1 )
         g_source_remove( powersave_timer1 );
@@ -529,6 +579,8 @@
 
 gboolean neod_buttonactions_powersave_timeout3( guint timeout )
 {
+    if ( pm_value != FULL )
+        return;
     g_debug( "mainmenu powersave timeout 3" );
     //FIXME talk to neod
     power_state = SUSPEND;
@@ -587,3 +639,4 @@
                            );
 
 }
+

Modified: trunk/src/target/OM-2007.2/daemons/neod/src/buttonactions.h
===================================================================
--- trunk/src/target/OM-2007.2/daemons/neod/src/buttonactions.h	2007-08-09 12:44:25 UTC (rev 2669)
+++ trunk/src/target/OM-2007.2/daemons/neod/src/buttonactions.h	2007-08-09 13:03:28 UTC (rev 2670)
@@ -16,13 +16,14 @@
 #define BUTTONACTIONS_H
 
 #include <glib.h>
+#include <gconf/gconf-client.h>
 #include <gdk/gdk.h>
 
 gboolean neod_buttonactions_input_prepare( GSource* source, gint* timeout );
 gboolean neod_buttonactions_input_check( GSource* source );
 gboolean neod_buttonactions_input_dispatch( GSource* source, GSourceFunc callback, gpointer data );
 
-gboolean neod_buttonactions_touchscreen_cb( GIOChannel *source, GIOCondition condition, gpointer data );
+void neod_buttonactions_gconf_cb( GConfClient *client, guint cnxn_id, GConfEntry *entry, gpointer data );
 
 gboolean neod_buttonactions_aux_timeout( guint timeout );
 gboolean neod_buttonactions_power_timeout( guint timeout );





More information about the commitlog mailing list