Send commitlog mailing list submissions to
        [email protected]

To subscribe or unsubscribe via the World Wide Web, visit
        http://lists.openmoko.org/mailman/listinfo/commitlog
or, via email, send a message with subject or body 'help' to
        [EMAIL PROTECTED]

You can reach the person managing the list at
        [EMAIL PROTECTED]

When replying, please edit your Subject line so it is more specific
than "Re: Contents of commitlog digest..."
Today's Topics:

   1. r3407 - in
      trunk/src/target/OM-2007.2/applications/openmoko-dialer2: .
      src/phone-kit ([EMAIL PROTECTED])
   2. r3408 - in trunk/src/target/OM-2007.2/daemons/neod: . data
      src ([EMAIL PROTECTED])
--- Begin Message ---
Author: chris
Date: 2007-11-13 19:14:40 +0100 (Tue, 13 Nov 2007)
New Revision: 3407

Added:
   
trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-dialer-sms-dbus.xml
   
trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-dialer-sms.c
   
trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-dialer-sms.h
Modified:
   trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog
   trunk/src/target/OM-2007.2/applications/openmoko-dialer2/configure.ac
   
trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/Makefile.am
Log:
        * configure.ac:
        * src/phone-kit/Makefile.am:
        * src/phone-kit/moko-dialer-sms-dbus.xml:
        * src/phone-kit/moko-dialer-sms.c: (moko_dialer_sms_get_property),
        (moko_dialer_sms_set_property), (moko_dialer_sms_dispose),
        (moko_dialer_sms_finalize), (moko_dialer_sms_class_init),
        (gsmd_eventhandler), (moko_dialer_sms_init), (moko_dialer_sms_new),
        (moko_dialer_sms_send), (moko_dialer_sms_sending),
        (moko_dialer_sms_sent), (moko_dialer_sms_rejected):
        * src/phone-kit/moko-dialer-sms.h:
        Add beginnings of SMS part of phone-kit. May or may not work.


Modified: trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog  
2007-11-13 16:27:39 UTC (rev 3406)
+++ trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog  
2007-11-13 18:14:40 UTC (rev 3407)
@@ -1,3 +1,17 @@
+2007-11-13  Chris Lord  <[EMAIL PROTECTED]>
+
+       * configure.ac:
+       * src/phone-kit/Makefile.am:
+       * src/phone-kit/moko-dialer-sms-dbus.xml:
+       * src/phone-kit/moko-dialer-sms.c: (moko_dialer_sms_get_property),
+       (moko_dialer_sms_set_property), (moko_dialer_sms_dispose),
+       (moko_dialer_sms_finalize), (moko_dialer_sms_class_init),
+       (gsmd_eventhandler), (moko_dialer_sms_init), (moko_dialer_sms_new),
+       (moko_dialer_sms_send), (moko_dialer_sms_sending),
+       (moko_dialer_sms_sent), (moko_dialer_sms_rejected):
+       * src/phone-kit/moko-dialer-sms.h:
+       Add beginnings of SMS part of phone-kit. May or may not work.
+
 2007-11-12  Thomas Wood  <[EMAIL PROTECTED]>
 
        * src/common/moko-contacts.c: (moko_contacts_get_photo),

Modified: trunk/src/target/OM-2007.2/applications/openmoko-dialer2/configure.ac
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-dialer2/configure.ac       
2007-11-13 16:27:39 UTC (rev 3406)
+++ trunk/src/target/OM-2007.2/applications/openmoko-dialer2/configure.ac       
2007-11-13 18:14:40 UTC (rev 3407)
@@ -20,6 +20,8 @@
                   libmokoui2
                   libpulse)
 
+PKG_CHECK_MODULES(JANA, libjana libjana-ecal)
+
 old_cflags=$CFLAGS
 CFLAGS=$DIALER_CFLAGS
 AC_CHECK_TYPE(EContactPhotoType, [], [], [#include <libebook/e-book.h>])

Modified: 
trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/Makefile.am
===================================================================
--- 
trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/Makefile.am
  2007-11-13 16:27:39 UTC (rev 3406)
+++ 
trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/Makefile.am
  2007-11-13 18:14:40 UTC (rev 3407)
@@ -1,5 +1,5 @@
 AM_CPPFLAGS = -DDATADIR=\"$(datadir)\" -DPKGDATADIR=\"$(pkgdatadir)\"
-AM_CFLAGS = -Wall @DIALER_CFLAGS@
+AM_CFLAGS = -Wall @DIALER_CFLAGS@ @JANA_CFLAGS@
 
 INCLUDES = -I$(top_srcdir)/src/common
 
@@ -10,15 +10,16 @@
        moko-dialer.c moko-dialer.h \
        moko-notify.c moko-notify.h \
        moko-sound.c moko-sound.h \
-       moko-talking.c moko-talking.h
+       moko-talking.c moko-talking.h \
+       moko-dialer-sms.c moko-dialer-sms.h
 
-phone_kit_LDADD = @DIALER_LIBS@ $(top_srcdir)/src/common/libdialer-common.a
+phone_kit_LDADD = @DIALER_LIBS@ @JANA_LIBS@ 
$(top_srcdir)/src/common/libdialer-common.a
 
 
-moko-dialer-glue.h: moko-dialer-dbus.xml
-       $(LIBTOOL) --mode=execute $(DBUS_GLIB_BIN)/dbus-binding-tool 
--prefix=moko_dialer --mode=glib-server --output=$@ $<
+%-glue.h: %-dbus.xml
+       $(LIBTOOL) --mode=execute $(DBUS_GLIB_BIN)/dbus-binding-tool 
--prefix=$(subst -,_,$*) --mode=glib-server --output=$@ $<
        
-BUILT_SOURCES = moko-dialer-glue.h
+BUILT_SOURCES = moko-dialer-glue.h moko-dialer-sms-glue.h
 
-EXTRA_DIST = moko-dialer-dbus.xml
+EXTRA_DIST = moko-dialer-dbus.xml moko-dialer-sms-dbus.xml
 

Added: 
trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-dialer-sms-dbus.xml
===================================================================
--- 
trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-dialer-sms-dbus.xml
     2007-11-13 16:27:39 UTC (rev 3406)
+++ 
trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-dialer-sms-dbus.xml
     2007-11-13 18:14:40 UTC (rev 3407)
@@ -0,0 +1,23 @@
+<?xml version="1.0"?>
+<node name="/org/openmoko/Dialer">
+<interface name="org.openmoko.Dialer.SMS">
+<annotation name="org.freedesktop.DBus.GLib.CSymbol" value="moko_dialer_sms"/>
+  <method name="Send">
+    <arg type="s" name="number" />
+    <arg type="s" name="message" />
+    <arg type="b" name="ascii" />
+  </method>
+
+  <signal name="Sending">
+  </signal>
+
+  <signal name="Sent">
+  </signal>
+
+  <signal name="Rejected">
+    <arg type="s" name="message" />
+  </signal>
+
+</interface>
+</node>
+

Added: 
trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-dialer-sms.c
===================================================================
--- 
trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-dialer-sms.c
    2007-11-13 16:27:39 UTC (rev 3406)
+++ 
trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-dialer-sms.c
    2007-11-13 18:14:40 UTC (rev 3407)
@@ -0,0 +1,242 @@
+
+#include "moko-dialer-sms.h"
+#include <dbus/dbus-glib.h>
+#include <dbus/dbus-glib-bindings.h>
+#include <libgsmd/libgsmd.h>
+#include <libgsmd/misc.h>
+#include <libgsmd/sms.h>
+#include <libjana/jana.h>
+#include <libjana-ecal/jana-ecal.h>
+
+#include "moko-dialer-sms-glue.h"
+
+G_DEFINE_TYPE (MokoDialerSMS, moko_dialer_sms, G_TYPE_OBJECT)
+
+#define SMS_PRIVATE(o) \
+  (G_TYPE_INSTANCE_GET_PRIVATE ((o), MOKO_DIALER_TYPE_SMS, 
MokoDialerSMSPrivate))
+
+typedef struct _MokoDialerSMSPrivate MokoDialerSMSPrivate;
+
+struct _MokoDialerSMSPrivate {
+       struct lgsm_handle *handle;
+       JanaStore *note_store;
+};
+
+enum {
+  SENDING,
+  SENT,
+  REJECTED,
+  LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL];
+
+static void
+moko_dialer_sms_get_property (GObject *object, guint property_id,
+                              GValue *value, GParamSpec *pspec)
+{
+       switch (property_id) {
+           default:
+               G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+       }
+}
+
+static void
+moko_dialer_sms_set_property (GObject *object, guint property_id,
+                              const GValue *value, GParamSpec *pspec)
+{
+       switch (property_id) {
+           default:
+               G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+       }
+}
+
+static void
+moko_dialer_sms_dispose (GObject *object)
+{
+       if (G_OBJECT_CLASS (moko_dialer_sms_parent_class)->dispose)
+               G_OBJECT_CLASS (moko_dialer_sms_parent_class)->dispose (object);
+}
+
+static void
+moko_dialer_sms_finalize (GObject *object)
+{
+       G_OBJECT_CLASS (moko_dialer_sms_parent_class)->finalize (object);
+}
+
+static void
+moko_dialer_sms_class_init (MokoDialerSMSClass *klass)
+{
+       GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+       g_type_class_add_private (klass, sizeof (MokoDialerSMSPrivate));
+
+       object_class->get_property = moko_dialer_sms_get_property;
+       object_class->set_property = moko_dialer_sms_set_property;
+       object_class->dispose = moko_dialer_sms_dispose;
+       object_class->finalize = moko_dialer_sms_finalize;
+       
+       signals[SENDING] = g_signal_new ("sending", 
+               G_TYPE_FROM_CLASS (object_class),
+               G_SIGNAL_RUN_LAST,
+               G_STRUCT_OFFSET (MokoDialerSMSClass, sending),
+               NULL, NULL,
+               g_cclosure_marshal_VOID__VOID,
+               G_TYPE_NONE, 0);
+
+       signals[SENT] = g_signal_new ("sent", 
+               G_TYPE_FROM_CLASS (object_class),
+               G_SIGNAL_RUN_LAST,
+               G_STRUCT_OFFSET (MokoDialerSMSClass, sent),
+               NULL, NULL,
+               g_cclosure_marshal_VOID__VOID,
+               G_TYPE_NONE, 0);
+
+       signals[REJECTED] = g_signal_new ("rejected", 
+               G_TYPE_FROM_CLASS (object_class),
+               G_SIGNAL_RUN_LAST,
+               G_STRUCT_OFFSET (MokoDialerSMSClass, rejected),
+               NULL, NULL,
+               g_cclosure_marshal_VOID__STRING,
+               G_TYPE_NONE, 1, G_TYPE_STRING);
+}
+
+MokoDialerSMS *static_self;
+
+static int 
+gsmd_eventhandler (struct lgsm_handle *lh, int evt_type,
+                  struct gsmd_evt_auxdata *aux)
+{
+       MokoDialerSMSPrivate *priv = SMS_PRIVATE (static_self);
+       
+       switch (evt_type) {
+           case GSMD_EVT_IN_SMS : /* Incoming SMS */
+               if (aux->u.sms.inlined) {
+                       gchar *message;
+
+                       struct gsmd_sms_list * sms =
+                               (struct gsmd_sms_list *)aux->data;
+
+                       /* Ignore voicemail notifications */
+                       if (sms->payload.is_voicemail) break;
+
+                       message = NULL;
+                       switch (sms->payload.coding_scheme) {
+                           case ALPHABET_DEFAULT :
+                               message = g_malloc (GSMD_SMS_DATA_MAXLEN);
+                               unpacking_7bit_character (
+                                       &sms->payload, message);
+                               break;
+                           case ALPHABET_8BIT :
+                               /* TODO: Verify: Is this encoding just UTF-8? */
+                               message = g_strdup (sms->payload.data);
+                               break;
+                           case ALPHABET_UCS2 :
+                               message = g_utf16_to_utf8 ((const gunichar2 *)
+                                       sms->payload.data, sms->payload.length,
+                                       NULL, NULL, NULL);
+                               break;
+                       }
+                       
+                       /* Store message in the journal */
+                       if (message) {
+                               struct lgsm_sms_delete sms_del;
+                               gchar *author, *recipient;
+                               JanaNote *note = jana_ecal_note_new ();
+                               
+                               author = g_strconcat (((sms->addr.type &
+                                       __GSMD_TOA_TON_MASK) ==
+                                       GSMD_TOA_TON_INTERNATIONAL) ? "+" : "",
+                                       sms->addr.number, NULL);
+                               jana_note_set_author (note, author);
+                               g_free (author);
+                               
+                               /* TODO: Normalise number necessary? */
+                               recipient = g_strdup_printf ("%d",
+                                       lgsm_get_subscriber_num (priv->handle));
+                               jana_note_set_recipient (note, recipient);
+                               g_free (recipient);
+                               
+                               jana_note_set_body (note, message);
+                               
+                               /* TODO: Set creation time from SMS timestamp */
+                               
+                               /* Add SMS to store */
+                               jana_store_add_component (priv->note_store,
+                                       JANA_COMPONENT (note));
+                               
+                               /* Delete SMS from internal storage */
+                               sms_del.index = sms->index;
+                               sms_del.delflg = LGSM_SMS_DELFLG_INDEX;
+                               lgsm_sms_delete (priv->handle, &sms_del);
+                       }
+               } else {
+               }
+               break;
+           case GSMD_EVT_IN_DS : /* SMS status report */
+               break;
+           default :
+               g_warning ("Unhandled gsmd event (%d)", evt_type);
+       }
+       
+       return 0;
+}
+
+static void
+moko_dialer_sms_init (MokoDialerSMS *self)
+{
+       static gboolean first_init = TRUE;
+       MokoDialerSMSPrivate *priv = SMS_PRIVATE (self);
+       
+       /* We can only have one of these objects per process, as the gsmd 
+        * event handling callback does not allow for custom data...
+        */
+       if (!first_init)
+               g_error ("MokoDialerSMS already created in this process");
+       first_init = FALSE;
+       static_self = self;
+       
+       /* Get the note store */
+       priv->note_store = jana_ecal_store_new (JANA_COMPONENT_NOTE);
+       
+       /* Initialise gsmd and connect event handler */
+       if (!(priv->handle = lgsm_init (LGSMD_DEVICE_GSMD))) {
+               g_warning ("Failed to connect to gsmd, signals won't work");
+       } else {
+               lgsm_evt_handler_register (priv->handle, GSMD_EVT_IN_SMS,
+                       gsmd_eventhandler);
+               lgsm_evt_handler_register (priv->handle, GSMD_EVT_IN_DS,
+                       gsmd_eventhandler);
+       }
+}
+
+MokoDialerSMS*
+moko_dialer_sms_new (void)
+{
+       return g_object_new (MOKO_DIALER_TYPE_SMS, NULL);
+}
+
+gboolean
+moko_dialer_sms_send (MokoDialerSMS *sms, const gchar *number,
+                     const gchar *message, gboolean ascii, GError **error)
+{
+}
+
+void
+moko_dialer_sms_sending (MokoDialerSMS *sms)
+{
+       g_signal_emit (sms, signals[SENDING], 0);
+}
+
+void
+moko_dialer_sms_sent (MokoDialerSMS *sms)
+{
+       g_signal_emit (sms, signals[SENT], 0);
+}
+
+void
+moko_dialer_sms_rejected (MokoDialerSMS *sms, const gchar *message)
+{
+       g_signal_emit (sms, signals[REJECTED], 0, message);
+}
+

Added: 
trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-dialer-sms.h
===================================================================
--- 
trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-dialer-sms.h
    2007-11-13 16:27:39 UTC (rev 3406)
+++ 
trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-dialer-sms.h
    2007-11-13 18:14:40 UTC (rev 3407)
@@ -0,0 +1,57 @@
+#ifndef _MOKO_DIALER_SMS_H
+#define _MOKO_DIALER_SMS_H
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#define MOKO_DIALER_TYPE_SMS moko_dialer_sms_get_type()
+
+#define MOKO_DIALER_SMS(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
+       MOKO_DIALER_TYPE_SMS, MokoDialerSMS))
+
+#define MOKO_DIALER_SMS_CLASS(klass) \
+       (G_TYPE_CHECK_CLASS_CAST ((klass), \
+       MOKO_DIALER_TYPE_SMS, MokoDialerSMSClass))
+
+#define MOKO_DIALER_IS_SMS(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
+       MOKO_DIALER_TYPE_SMS))
+
+#define MOKO_DIALER_IS_SMS_CLASS(klass) \
+       (G_TYPE_CHECK_CLASS_TYPE ((klass), \
+       MOKO_DIALER_TYPE_SMS))
+
+#define MOKO_DIALER_SMS_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS ((obj), \
+       MOKO_DIALER_TYPE_SMS, MokoDialerSMSClass))
+
+typedef struct {
+       GObject parent;
+} MokoDialerSMS;
+
+typedef struct {
+       GObjectClass parent_class;
+       
+       void    (*sending)      (MokoDialerSMS *sms);
+       void    (*sent)         (MokoDialerSMS *sms);
+       void    (*rejected)     (MokoDialerSMS *sms, const gchar *message);
+} MokoDialerSMSClass;
+
+GType moko_dialer_sms_get_type (void);
+
+MokoDialerSMS * moko_dialer_sms_new (void);
+
+gboolean moko_dialer_sms_send (MokoDialerSMS *sms, const gchar *number,
+                              const gchar *message, gboolean ascii,
+                              GError **error);
+
+void moko_dialer_sms_sending (MokoDialerSMS *sms);
+void moko_dialer_sms_sent (MokoDialerSMS *sms);
+void moko_dialer_sms_rejected (MokoDialerSMS *sms, const gchar *message);
+
+G_END_DECLS
+
+#endif /* _MOKO_DIALER_SMS_H */
+




--- End Message ---
--- Begin Message ---
Author: mickey
Date: 2007-11-13 20:36:17 +0100 (Tue, 13 Nov 2007)
New Revision: 3408

Added:
   trunk/src/target/OM-2007.2/daemons/neod/data/
   trunk/src/target/OM-2007.2/daemons/neod/data/Makefile.am
   trunk/src/target/OM-2007.2/daemons/neod/data/openmoko-logo.jpg
Modified:
   trunk/src/target/OM-2007.2/daemons/neod/Makefile.am
   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
Log:
neod: major revamp
* make popup menus fullscreen
* first shot at power handling
* add easter egg about dialog


Modified: trunk/src/target/OM-2007.2/daemons/neod/Makefile.am
===================================================================
--- trunk/src/target/OM-2007.2/daemons/neod/Makefile.am 2007-11-13 18:14:40 UTC 
(rev 3407)
+++ trunk/src/target/OM-2007.2/daemons/neod/Makefile.am 2007-11-13 19:36:17 UTC 
(rev 3408)
@@ -1,4 +1,4 @@
-SUBDIRS = src po
+SUBDIRS = src data po
 
 INTLTOOL_BUILT = \
         intltool-extract \

Modified: trunk/src/target/OM-2007.2/daemons/neod/configure.ac
===================================================================
--- trunk/src/target/OM-2007.2/daemons/neod/configure.ac        2007-11-13 
18:14:40 UTC (rev 3407)
+++ trunk/src/target/OM-2007.2/daemons/neod/configure.ac        2007-11-13 
19:36:17 UTC (rev 3408)
@@ -46,4 +46,5 @@
 Makefile
 po/Makefile.in
 src/Makefile
+data/Makefile
 ])

Added: trunk/src/target/OM-2007.2/daemons/neod/data/Makefile.am
===================================================================
--- trunk/src/target/OM-2007.2/daemons/neod/data/Makefile.am    2007-11-13 
18:14:40 UTC (rev 3407)
+++ trunk/src/target/OM-2007.2/daemons/neod/data/Makefile.am    2007-11-13 
19:36:17 UTC (rev 3408)
@@ -0,0 +1,5 @@
+resourcedir = $(pkgdatadir)
+resource_DATA = openmoko-logo.jpg
+
+EXTRA_DIST = $(resource_DATA)
+

Added: trunk/src/target/OM-2007.2/daemons/neod/data/openmoko-logo.jpg
===================================================================
(Binary files differ)


Property changes on: 
trunk/src/target/OM-2007.2/daemons/neod/data/openmoko-logo.jpg
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Modified: trunk/src/target/OM-2007.2/daemons/neod/src/Makefile.am
===================================================================
--- trunk/src/target/OM-2007.2/daemons/neod/src/Makefile.am     2007-11-13 
18:14:40 UTC (rev 3407)
+++ trunk/src/target/OM-2007.2/daemons/neod/src/Makefile.am     2007-11-13 
19:36:17 UTC (rev 3408)
@@ -10,6 +10,7 @@
 
 neod_SOURCES = \
   buttonactions.c \
+  moko-adaptive-box.c \
   neod-main.c
 
 neod_LDADD = @NEOD_LIBS@ -lapm

Modified: trunk/src/target/OM-2007.2/daemons/neod/src/buttonactions.c
===================================================================
--- trunk/src/target/OM-2007.2/daemons/neod/src/buttonactions.c 2007-11-13 
18:14:40 UTC (rev 3407)
+++ trunk/src/target/OM-2007.2/daemons/neod/src/buttonactions.c 2007-11-13 
19:36:17 UTC (rev 3408)
@@ -16,15 +16,11 @@
 
 #include <gconf/gconf-client.h>
 
-#include <gtk/gtklabel.h>
-#include <gtk/gtkmenu.h>
-#include <gtk/gtkmenuitem.h>
-#include <gtk/gtkcheckmenuitem.h>
-#include <gtk/gtkseparatormenuitem.h>
-
+#include <gtk/gtk.h>
 #include <gdk/gdkx.h>
 
 #include <glib.h>
+#include <glib/gstdio.h>
 
 #include <X11/Xlib.h>
 #include <X11/Xatom.h>
@@ -70,8 +66,8 @@
 #endif
 
 #ifdef NEOD_PLATFORM_IPAQ
-    #define AUX_BUTTON_KEYCODE 89   /* _KEY_RECORD */
-    #define POWER_BUTTON_KEYCODE 0x74 /* KEY_POWER */
+    #define AUX_BUTTON_KEYCODE 89     /* record */
+    #define POWER_BUTTON_KEYCODE 0x74 /* power */
     #define TOUCHSCREEN_BUTTON_KEYCODE 0x14a
 #endif
 
@@ -100,6 +96,13 @@
 
 GConfClient* gconfc = 0;
 
+enum PeripheralUnit
+{
+    GSM = 0,
+    BLUETOOTH = 1,
+    GPS = 2,
+};
+
 enum PowerManagementMode
 {
     FULL = 0,
@@ -411,6 +414,8 @@
 
 gboolean neod_buttonactions_aux_timeout( guint timeout )
 {
+    if ( aux_timer == -1 )
+        return FALSE;
     g_debug( "aux pressed for %d", timeout );
 
     neod_buttonactions_sound_play( "touchscreen" );
@@ -476,37 +481,8 @@
     return FALSE;
 }
 
-// this is hardcoded to the Neo1973
-void neod_buttonactions_popup_positioning_cb( GtkMenu* menu, gint* x, gint* y, 
gboolean* push_in, gpointer user_data )
+void neod_buttonactions_popup_selected_fullscreen( GtkWidget* button, gpointer 
user_data )
 {
-    GtkRequisition req;
-    gtk_widget_size_request( GTK_WIDGET(menu), &req );
-    gint screen_width = gdk_screen_width();
-    gint screen_height = gdk_screen_height();
-    gboolean landscape_mode = gdk_screen_width() >= gdk_screen_height();
-
-    if ( GTK_WIDGET(menu) == aux_menu )
-    {
-        if (landscape_mode)
-            *x = screen_width - req.width;
-        else
-            *x = 0;
-        *y = 0;
-    }
-    else if ( GTK_WIDGET(menu) == power_menu )
-    {
-        if (landscape_mode)
-            *x = 0;
-        else
-            *x = screen_width - req.width;
-        *y = screen_height - req.height;
-    }
-    else
-        g_assert( FALSE ); // fail here if called for unknown menu
-}
-
-void neod_buttonactions_popup_selected_fullscreen( GtkMenuItem* menu, gpointer 
user_data )
-{
     static int is_fullscreen = 0;
 
     gtk_widget_hide( aux_menu );
@@ -539,7 +515,7 @@
     is_fullscreen = 1 - is_fullscreen;
 }
 
-void neod_buttonactions_popup_selected_orientation( GtkMenuItem* menu, 
gpointer user_data )
+void neod_buttonactions_popup_selected_orientation( GtkWidget* button, 
gpointer user_data )
 {
     gtk_widget_hide( aux_menu );
     if ( orientation )
@@ -549,29 +525,14 @@
     orientation = !orientation;
 }
 
-void neod_buttonactions_popup_selected_screenshot( GtkMenuItem* menu, gpointer 
user_data )
+void neod_buttonactions_popup_selected_screenshot( GtkWidget* button, gpointer 
user_data )
 {
     gtk_widget_hide( aux_menu );
     g_spawn_command_line_async( "gpe-scap", NULL );
 }
 
-void neod_buttonactions_popup_selected_fullPM( GtkMenuItem* menu, gpointer 
user_data )
+void neod_buttonactions_popup_selected_lock( GtkWidget* button, gpointer 
user_data )
 {
-    gconf_client_set_int( gconfc, "/desktop/openmoko/neod/power_management", 
FULL, NULL );
-}
-
-void neod_buttonactions_popup_selected_dimOnly( GtkMenuItem* menu, gpointer 
user_data )
-{
-    gconf_client_set_int( gconfc, "/desktop/openmoko/neod/power_management", 
DIM_ONLY, NULL );
-}
-
-void neod_buttonactions_popup_selected_noPM( GtkMenuItem* menu, gpointer 
user_data )
-{
-    gconf_client_set_int( gconfc, "/desktop/openmoko/neod/power_management", 
NONE, NULL );
-}
-
-void neod_buttonactions_popup_selected_lock( GtkMenuItem* menu, gpointer 
user_data )
-{
     int fd = open( "/sys/power/state", O_WRONLY );
     if ( fd != -1 )
     {
@@ -581,24 +542,119 @@
     }
 }
 
-void neod_buttonactions_popup_selected_restartUI( GtkMenuItem* menu, gpointer 
user_data )
+void neod_buttonactions_popup_selected_restartUI( GtkWidget* button, gpointer 
user_data )
 {
+    gtk_widget_hide( power_menu );
     //FIXME notify user
     system( "/etc/init.d/xserver-nodm restart");
 }
 
-void neod_buttonactions_popup_selected_reboot( GtkMenuItem* menu, gpointer 
user_data )
+void neod_buttonactions_popup_selected_reboot( GtkWidget* button, gpointer 
user_data )
 {
+    gtk_widget_hide( power_menu );
     //moko_ui_banner_show_text( 4, "Rebooting System..." );
     system( "/sbin/reboot");
 }
 
-void neod_buttonactions_popup_selected_poweroff( GtkMenuItem* menu, gpointer 
user_data )
+void neod_buttonactions_popup_selected_poweroff( GtkWidget* button, gpointer 
user_data )
 {
+    gtk_widget_hide( power_menu );
     //moko_ui_banner_show_text( 4, "Shutting down System..." );
     system( "/sbin/poweroff");
 }
 
+void neod_buttonactions_popup_selected_pmprofile( GtkComboBox* combo, gpointer 
user_data )
+{
+    gtk_widget_hide( power_menu );
+    int new_pmprofile = gtk_combo_box_get_active( combo );
+    g_assert( FULL <= new_pmprofile && new_pmprofile <= NONE );
+    g_debug( "switch pm profile to %d", new_pmprofile );
+    gconf_client_set_int( gconfc, "/desktop/openmoko/neod/power_management", 
new_pmprofile, NULL );
+}
+
+static gboolean read_boolean_from_path( const gchar* path )
+{
+    int value;
+    FILE* f = fopen( path, "r" );
+    if ( f == NULL )
+    {
+        g_debug( "can't open file '%s': (%s), aborting.", path, strerror( 
errno ) );
+        return FALSE;
+    }
+    fscanf( f, "%d", &value );
+    fclose( f );
+    g_debug( "read value from '%s' = '%d'", path, value );
+    return value;
+}
+
+static void write_boolean_to_path( const gchar* path, gboolean b )
+{
+    FILE* f = fopen( path, "w" );
+    if ( f == NULL )
+    {
+        g_debug( "can't open file '%s': (%s), aborting.", path, strerror( 
errno ) );
+        return;
+    }
+    fprintf( f, b ? "1\n" : "0\n" );
+    fclose( f );
+}
+
+static gboolean is_turned_on( int unit )
+{
+    switch( unit )
+    {
+        case GSM:
+#ifdef NEOD_PLATFORM_FIC_NEO1973
+            return read_boolean_from_path( 
"/sys/devices/platform/gta01-pm-gsm.0/power_on" );
+#endif
+            return FALSE;
+        case BLUETOOTH:
+#ifdef NEOD_PLATFORM_FIC_NEO1973
+            return read_boolean_from_path( 
"/sys/devices/platform/s3c2410-i2c/i2c-adapter/i2c-0/0-0008/gta01-pm-bt.0/power_on"
 );
+#endif
+            return FALSE;
+        case GPS:
+#ifdef NEOD_PLATFORM_FIC_NEO1973
+            return read_boolean_from_path( 
"/sys/devices/platform/s3c2410-i2c/i2c-adapter/i2c-0/0-0008/gta01-pm-gps.0/power_on"
 );
+#endif
+            return FALSE;
+        default:
+            g_assert( FALSE ); // should never reach this
+    }
+}
+
+static void peripheral_set_power( int unit, gboolean on )
+{
+    switch( unit )
+    {
+        case GSM:
+#ifdef NEOD_PLATFORM_FIC_NEO1973
+            write_boolean_to_path( 
"/sys/devices/platform/gta01-pm-gsm.0/power_on", on );
+#endif
+            break;
+        case BLUETOOTH:
+#ifdef NEOD_PLATFORM_FIC_NEO1973
+            write_boolean_to_path( 
"/sys/devices/platform/s3c2410-i2c/i2c-adapter/i2c-0/0-0008/gta01-pm-bt.0/power_on",
 on );
+#endif
+            break;
+        case GPS:
+#ifdef NEOD_PLATFORM_FIC_NEO1973
+            write_boolean_to_path( 
"/sys/devices/platform/s3c2410-i2c/i2c-adapter/i2c-0/0-0008/gta01-pm-gps.0/power_on",
 on );
+#endif
+            break;
+        default:
+            g_assert( FALSE ); // should never reach this
+    }
+}
+
+void neod_buttonactions_popup_selected_switch_power( GtkWidget* button, 
gpointer user_data )
+{
+    gtk_widget_hide( power_menu );
+    gboolean new_power_state = !is_turned_on( (int)user_data );
+    g_debug( "switch power of unit %d to %d", (int)user_data, 
(int)new_power_state );
+    //FIXME implement this and notify user
+}
+
 void neod_buttonactions_gconf_cb( GConfClient *client, guint cnxn_id, 
GConfEntry *entry, gpointer data )
 {
     g_debug( "gconf callback" );
@@ -616,88 +672,173 @@
     // show popup menu requesting for actions
     if ( !aux_menu )
     {
-        aux_menu = gtk_menu_new();
+        aux_menu = gtk_dialog_new_with_buttons( "AUX Menu",
+                                                NULL,
+                                                GTK_DIALOG_MODAL,
+                                                "Dismiss this menu", 
GTK_RESPONSE_OK,
+                                                NULL );
+        gtk_widget_set_name( GTK_WIDGET(aux_menu), "neod-dialog" );
+        gtk_button_box_set_layout( 
GTK_BUTTON_BOX(GTK_DIALOG(aux_menu)->action_area), GTK_BUTTONBOX_SPREAD );
+        GtkWidget* box = gtk_vbox_new( 0, 0 );
+        gtk_widget_set_name( box, "neod-menu" );
+//        GtkWidget* title = gtk_label_new( "AUX Button Menu" );
+//        gtk_box_pack_start_defaults( GTK_BOX(box), title );
 
-        GtkWidget* fullscreen = gtk_menu_item_new_with_label( "Toggle 
Fullscreen" );
-        g_signal_connect( G_OBJECT(fullscreen), "activate", 
G_CALLBACK(neod_buttonactions_popup_selected_fullscreen), NULL );
-        gtk_menu_shell_append( GTK_MENU_SHELL(aux_menu), fullscreen );
+        GtkWidget* fullscreen = gtk_button_new_with_label( "Toggle Fullscreen" 
);
+        g_signal_connect( G_OBJECT(fullscreen), "clicked", 
G_CALLBACK(neod_buttonactions_popup_selected_fullscreen), NULL );
+        gtk_box_pack_start_defaults( GTK_BOX(box), fullscreen );
 
-        GtkWidget* orientation = gtk_menu_item_new_with_label( "Swap 
Orientation" );
-        g_signal_connect( G_OBJECT(orientation), "activate", 
G_CALLBACK(neod_buttonactions_popup_selected_orientation), NULL );
-        gtk_menu_shell_append( GTK_MENU_SHELL(aux_menu), orientation );
+        GtkWidget* orientation = gtk_button_new_with_label( "Swap Orientation" 
);
+        g_signal_connect( G_OBJECT(orientation), "clicked", 
G_CALLBACK(neod_buttonactions_popup_selected_orientation), NULL );
+        gtk_box_pack_start_defaults( GTK_BOX(box), orientation );
 
-        GtkWidget* scap = gtk_menu_item_new_with_label( "Screenshot" );
-        g_signal_connect( G_OBJECT(scap), "activate", 
G_CALLBACK(neod_buttonactions_popup_selected_screenshot), NULL );
-        gtk_menu_shell_append( GTK_MENU_SHELL(aux_menu), scap );
+        GtkWidget* scap = gtk_button_new_with_label( "Screenshot" );
+        g_signal_connect( G_OBJECT(scap), "clicked", 
G_CALLBACK(neod_buttonactions_popup_selected_screenshot), NULL );
+        gtk_box_pack_start_defaults( GTK_BOX(box), scap );
 
-        gtk_widget_show_all( GTK_WIDGET(aux_menu) );
+        gtk_widget_show_all( GTK_WIDGET(box) );
+
+        // override, otherwise matchbox won't show it fullscreen
+        gtk_window_set_type_hint( GTK_WINDOW(aux_menu), 
GDK_WINDOW_TYPE_HINT_NORMAL );
+        //gtk_window_fullscreen( GTK_WINDOW(aux_menu) );
+        g_signal_connect_swapped( aux_menu, "response", 
G_CALLBACK(gtk_widget_hide), aux_menu);
+        gtk_box_pack_start_defaults( GTK_BOX(GTK_DIALOG(aux_menu)->vbox), box 
);
     }
-    gtk_menu_popup( GTK_MENU(aux_menu), NULL, NULL, 
neod_buttonactions_popup_positioning_cb, 0, 0, GDK_CURRENT_TIME );
+    int response = gtk_dialog_run( GTK_DIALOG(aux_menu) );
+    g_debug( "gtk_dialog_run completed, response = %d", response );
 }
 
 void neod_buttonactions_show_power_menu()
 {
+    static GtkWidget* gsmpower = 0;
+    static GtkWidget* btpower = 0;
+    static GtkWidget* gpspower = 0;
+    static GtkWidget* pmprofile = 0;
+
     // show popup menu requesting for actions
     if ( !power_menu )
     {
-        power_menu = gtk_menu_new();
+        power_menu = gtk_dialog_new_with_buttons( "POWER Menu",
+                NULL,
+                GTK_DIALOG_MODAL,
+                "Dismiss this menu", GTK_RESPONSE_OK,
+                NULL );
+        gtk_widget_set_name( GTK_WIDGET(power_menu), "neod-dialog" );
+        gtk_button_box_set_layout( 
GTK_BUTTON_BOX(GTK_DIALOG(power_menu)->action_area), GTK_BUTTONBOX_SPREAD );
+        GtkWidget* box = gtk_vbox_new( 0, 0 );
+        gtk_widget_set_name( box, "neod-menu" );
+//        GtkWidget* title = gtk_label_new( "POWER Button Menu" );
+//        gtk_box_pack_start_defaults( GTK_BOX(box), title );
 
-        GtkWidget* bluetooth = gtk_check_menu_item_new_with_label( "Bluetooth 
Power" );
-        gtk_widget_set_state( bluetooth, GTK_STATE_INSENSITIVE );
-        gtk_menu_shell_append( GTK_MENU_SHELL(power_menu), bluetooth );
+        gsmpower = gtk_button_new();
+        g_signal_connect( G_OBJECT(gsmpower), "clicked", 
G_CALLBACK(neod_buttonactions_popup_selected_switch_power), (void*)GSM );
+        gtk_box_pack_start_defaults( GTK_BOX(box), gsmpower );
 
-        GtkWidget* gps = gtk_check_menu_item_new_with_label( "GPS Power" );
-        gtk_widget_set_state( gps, GTK_STATE_INSENSITIVE );
-        gtk_menu_shell_append( GTK_MENU_SHELL(power_menu), gps );
+        btpower = gtk_button_new();
+        g_signal_connect( G_OBJECT(btpower), "clicked", 
G_CALLBACK(neod_buttonactions_popup_selected_switch_power), (void*)BLUETOOTH );
+        gtk_box_pack_start_defaults( GTK_BOX(box), btpower );
 
-        GtkWidget* gsm = gtk_check_menu_item_new_with_label( "GSM Power" );
-        gtk_widget_set_state( gsm, GTK_STATE_INSENSITIVE );
-        gtk_menu_shell_append( GTK_MENU_SHELL(power_menu), gsm );
+        gpspower = gtk_button_new();
+        g_signal_connect( G_OBJECT(gpspower), "clicked", 
G_CALLBACK(neod_buttonactions_popup_selected_switch_power), (void*)GPS );
+        gtk_box_pack_start_defaults( GTK_BOX(box), gpspower );
 
-        gtk_menu_shell_append( GTK_MENU_SHELL(power_menu), 
gtk_separator_menu_item_new() );
+        gtk_box_pack_start_defaults( GTK_BOX(box), gtk_hseparator_new() );
 
-        // add profiles
-        // TODO build profile list dynamically from database
-        GtkWidget* profile = 0;
-        profile = gtk_check_menu_item_new_with_label( "Profile: 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( "Profile: 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( "Profile: 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 );
+        pmprofile = gtk_combo_box_new_text();
+        gtk_combo_box_append_text( GTK_COMBO_BOX(pmprofile), "Power 
Management:\nDim first, then lock" );
+        gtk_combo_box_append_text( GTK_COMBO_BOX(pmprofile), "Power 
Management:\nDim only, don't lock" );
+        gtk_combo_box_append_text( GTK_COMBO_BOX(pmprofile), "Power 
Management:\nDisabled" );
+        gtk_combo_box_set_active( GTK_COMBO_BOX(pmprofile), pm_value );
+        g_signal_connect( G_OBJECT(pmprofile), "changed", 
G_CALLBACK(neod_buttonactions_popup_selected_pmprofile), NULL );
+        gtk_box_pack_start_defaults( GTK_BOX(box), pmprofile );
 
-        gtk_menu_shell_append( GTK_MENU_SHELL(power_menu), 
gtk_separator_menu_item_new() );
+        gtk_box_pack_start_defaults( GTK_BOX(box), gtk_hseparator_new() );
 
-        GtkWidget* lock = gtk_menu_item_new_with_label( "Lock Phone" );
-        g_signal_connect( G_OBJECT(lock), "activate", 
G_CALLBACK(neod_buttonactions_popup_selected_lock), NULL );
-        gtk_menu_shell_append( GTK_MENU_SHELL(power_menu), lock );
-            //GtkWidget* flightmode = gtk_menu_item_new_with_label( "Flight 
Mode" );
-            //gtk_menu_shell_append( GTK_MENU_SHELL(power_menu), flightmode );
-            //GtkWidget* profilelist = gtk_menu_item_new_with_label( "<Profile 
List>" );
-            //gtk_menu_shell_append( GTK_MENU_SHELL(power_menu), profilelist );
-            //GtkWidget* restartUI = gtk_menu_item_new_with_label( "Restart 
UI" );
-            //g_signal_connect( G_OBJECT(restartUI), "activate", 
G_CALLBACK(neod_buttonactions_popup_selected_restartUI), NULL );
-            //gtk_menu_shell_append( GTK_MENU_SHELL(power_menu), restartUI );
-        GtkWidget* reboot = gtk_menu_item_new_with_label( "Reboot Phone" );
-        g_signal_connect( G_OBJECT(reboot), "activate", 
G_CALLBACK(neod_buttonactions_popup_selected_reboot), NULL );
-        gtk_menu_shell_append( GTK_MENU_SHELL(power_menu), reboot );
-        GtkWidget* poweroff = gtk_menu_item_new_with_label( "Power Off" );
-        g_signal_connect( G_OBJECT(poweroff), "activate", 
G_CALLBACK(neod_buttonactions_popup_selected_poweroff), NULL );
-        gtk_menu_shell_append( GTK_MENU_SHELL(power_menu), poweroff );
-        gtk_widget_show_all( GTK_WIDGET(power_menu) );
+        GtkWidget* lock = gtk_button_new_with_label( "Lock Now" );
+        g_signal_connect( G_OBJECT(lock), "clicked", 
G_CALLBACK(neod_buttonactions_popup_selected_lock), NULL );
+        gtk_box_pack_start_defaults( GTK_BOX(box), lock );
+
+        GtkWidget* poweroff = gtk_button_new_with_label( "Shutdown Now" );
+        g_signal_connect( G_OBJECT(poweroff), "clicked", 
G_CALLBACK(neod_buttonactions_popup_selected_poweroff), NULL );
+        gtk_box_pack_start_defaults( GTK_BOX(box), poweroff );
+
+        gtk_widget_show_all( GTK_WIDGET(box) );
+
+        // override, otherwise matchbox won't show it fullscreen
+        gtk_window_set_type_hint( GTK_WINDOW(power_menu), 
GDK_WINDOW_TYPE_HINT_NORMAL );
+        //gtk_window_fullscreen( GTK_WINDOW(power_menu) );
+        g_signal_connect_swapped( power_menu, "response", 
G_CALLBACK(gtk_widget_hide), power_menu);
+        gtk_box_pack_start_defaults( GTK_BOX(GTK_DIALOG(power_menu)->vbox), 
box );
     }
-    gtk_menu_popup( GTK_MENU(power_menu), NULL, NULL, 
neod_buttonactions_popup_positioning_cb, 0, 0, GDK_CURRENT_TIME );
+    gtk_button_set_label( gsmpower, g_strdup_printf( "Turn %s GSM", 
is_turned_on( GSM ) ? "off" : "on" ) );
+    gtk_button_set_label( btpower, g_strdup_printf( "Turn %s Bluetooth", 
is_turned_on( BLUETOOTH ) ? "off" : "on" ) );
+    gtk_button_set_label( gpspower, g_strdup_printf( "Turn %s GPS", 
is_turned_on( GPS ) ? "off" : "on" ) );
+    int response = gtk_dialog_run( GTK_DIALOG(power_menu) );
+    g_debug( "gtk_dialog_run completed, response = %d", response );
 }
 
+const gchar* authors[] = {
+    "OpenMoko has been brought to you by:",
+    " "
+    "Sean Moss-Pultz",
+    "Harald 'LaF0rge' Welte",
+    "Michael 'Mickey' Lauer",
+    "Werner Almesberger",
+    "Alice Tang",
+    "Allen Chang",
+    "Dave Wu",
+    "Wanda",
+    "Jelan Hsu",
+    "Miles Hsieh",
+    "Nod Huang",
+    "Paul Tian",
+    "Sean Chiang",
+    "Shawn Lin",
+    "Timmy Huang",
+    "Willie Chen",
+    "Olv",
+    "JServ",
+    "Jollen",
+    "Rasterman",
+    "Matt Hsu",
+    "John Lee",
+    "Tick",
+    "Roh",
+    "Erin Yueh",
+    "Jeremy",
+    "Holger 'Zecke' Freyther",
+    "Daniel 'Alphaone' Willmann",
+    "Stefan Schmidt",
+    "Jan 'Shoragan' Luebbe",
+    "Soeren 'Abraxa' Apel",
+    "Rod Whitby",
+    "Chris @ O-Hand",
+    "Ross @ O-Hand",
+    "Thomas @ O-Hand",
+    "Rob @ O-Hand",
+    "Dodji @ O-Hand",
+    "NJP @ O-Hand",
+    " ",
+    "@" __DATE__ ":" __TIME__,
+    "gcc " __VERSION__,
+};
+
+gboolean neod_buttonactions_power_while_aux()
+{
+    g_debug( "aux and power pressed together" );
+    if ( aux_menu )
+        gtk_widget_hide( aux_menu );
+    gtk_show_about_dialog( NULL,
+        "authors", authors,
+        "comments", "open. mobile. free.",
+        "copyright", "2006-2007 OpenMoko, Inc.",
+        "program-name", "OpenMoko 2007.2",
+        "website", "http://www.openmoko.org";,
+        "logo", gdk_pixbuf_new_from_file( PKGDATADIR "/openmoko-logo.jpg", 
NULL ),
+        NULL );
+    return FALSE;
+}
+
 gboolean neod_buttonactions_power_timeout( guint timeout )
 {
     g_debug( "power pressed for %d", timeout );
@@ -707,6 +848,11 @@
     neod_buttonactions_set_display( 100 );
 
     power_timer = -1;
+
+    // special case for power button being pressed while aux is held
+    if ( aux_timer != -1 || ( aux_menu && GTK_WIDGET_MAPPED( aux_menu ) ) )
+        return neod_buttonactions_power_while_aux();
+
     if ( timeout < 1 )
     {
         Window xwindow = get_window_property( 
gdk_x11_get_default_root_xwindow(), 
gdk_x11_get_xatom_by_name("_NET_ACTIVE_WINDOW") );
@@ -821,7 +967,7 @@
 gboolean neod_buttonactions_powersave_timeout1( guint timeout )
 {
     g_debug( "mainmenu powersave timeout 1" );
-    //FIXME talk to neod
+    //FIXME talk to peripheral device abstraction daemon
     power_state = DISPLAY_DIM;
     neod_buttonactions_set_display( 25 );
     return FALSE;
@@ -830,7 +976,7 @@
 gboolean neod_buttonactions_powersave_timeout2( guint timeout )
 {
     g_debug( "mainmenu powersave timeout 2" );
-    //FIXME talk to neod
+    //FIXME talk to peripheral device abstraction daemon
     neod_buttonactions_set_display( 0 );
     power_state = DISPLAY_OFF;
     return FALSE;
@@ -841,7 +987,7 @@
     if ( pm_value != FULL )
         return FALSE;
     g_debug( "mainmenu powersave timeout 3" );
-    //FIXME talk to neod
+    //FIXME talk to peripheral device abstraction daemon
     power_state = SUSPEND;
     system( "/usr/bin/apm -s");
     neod_buttonactions_powersave_reset();




--- End Message ---
_______________________________________________
commitlog mailing list
[email protected]
http://lists.openmoko.org/mailman/listinfo/commitlog

Reply via email to