r3408 - in trunk/src/target/OM-2007.2/daemons/neod: . data src
mickey at sita.openmoko.org
mickey at sita.openmoko.org
Tue Nov 13 20:36:19 CET 2007
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();
More information about the commitlog
mailing list