Changeset 3408


Ignore:
Timestamp:
11/13/07 20:36:17 (6 years ago)
Author:
mickey
Message:

neod: major revamp

  • make popup menus fullscreen
  • first shot at power handling
  • add easter egg about dialog
Location:
trunk/src/target/OM-2007.2/daemons/neod
Files:
3 added
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/target/OM-2007.2/daemons/neod/Makefile.am

    r2624 r3408  
    1 SUBDIRS = src po 
     1SUBDIRS = src data po 
    22 
    33INTLTOOL_BUILT = \ 
  • trunk/src/target/OM-2007.2/daemons/neod/configure.ac

    r3348 r3408  
    4747po/Makefile.in 
    4848src/Makefile 
     49data/Makefile 
    4950]) 
  • trunk/src/target/OM-2007.2/daemons/neod/src/Makefile.am

    r3357 r3408  
    1111neod_SOURCES = \ 
    1212  buttonactions.c \ 
     13  moko-adaptive-box.c \ 
    1314  neod-main.c 
    1415 
  • trunk/src/target/OM-2007.2/daemons/neod/src/buttonactions.c

    r3358 r3408  
    1717#include <gconf/gconf-client.h> 
    1818 
    19 #include <gtk/gtklabel.h> 
    20 #include <gtk/gtkmenu.h> 
    21 #include <gtk/gtkmenuitem.h> 
    22 #include <gtk/gtkcheckmenuitem.h> 
    23 #include <gtk/gtkseparatormenuitem.h> 
    24  
     19#include <gtk/gtk.h> 
    2520#include <gdk/gdkx.h> 
    2621 
    2722#include <glib.h> 
     23#include <glib/gstdio.h> 
    2824 
    2925#include <X11/Xlib.h> 
     
    7167 
    7268#ifdef NEOD_PLATFORM_IPAQ 
    73     #define AUX_BUTTON_KEYCODE 89   /* _KEY_RECORD */ 
    74     #define POWER_BUTTON_KEYCODE 0x74 /* KEY_POWER */ 
     69    #define AUX_BUTTON_KEYCODE 89     /* record */ 
     70    #define POWER_BUTTON_KEYCODE 0x74 /* power */ 
    7571    #define TOUCHSCREEN_BUTTON_KEYCODE 0x14a 
    7672#endif 
     
    10096 
    10197GConfClient* gconfc = 0; 
     98 
     99enum PeripheralUnit 
     100{ 
     101    GSM = 0, 
     102    BLUETOOTH = 1, 
     103    GPS = 2, 
     104}; 
    102105 
    103106enum PowerManagementMode 
     
    412415gboolean neod_buttonactions_aux_timeout( guint timeout ) 
    413416{ 
     417    if ( aux_timer == -1 ) 
     418        return FALSE; 
    414419    g_debug( "aux pressed for %d", timeout ); 
    415420 
     
    477482} 
    478483 
    479 // this is hardcoded to the Neo1973 
    480 void neod_buttonactions_popup_positioning_cb( GtkMenu* menu, gint* x, gint* y, gboolean* push_in, gpointer user_data ) 
    481 { 
    482     GtkRequisition req; 
    483     gtk_widget_size_request( GTK_WIDGET(menu), &req ); 
    484     gint screen_width = gdk_screen_width(); 
    485     gint screen_height = gdk_screen_height(); 
    486     gboolean landscape_mode = gdk_screen_width() >= gdk_screen_height(); 
    487  
    488     if ( GTK_WIDGET(menu) == aux_menu ) 
    489     { 
    490         if (landscape_mode) 
    491             *x = screen_width - req.width; 
    492         else 
    493             *x = 0; 
    494         *y = 0; 
    495     } 
    496     else if ( GTK_WIDGET(menu) == power_menu ) 
    497     { 
    498         if (landscape_mode) 
    499             *x = 0; 
    500         else 
    501             *x = screen_width - req.width; 
    502         *y = screen_height - req.height; 
    503     } 
    504     else 
    505         g_assert( FALSE ); // fail here if called for unknown menu 
    506 } 
    507  
    508 void neod_buttonactions_popup_selected_fullscreen( GtkMenuItem* menu, gpointer user_data ) 
     484void neod_buttonactions_popup_selected_fullscreen( GtkWidget* button, gpointer user_data ) 
    509485{ 
    510486    static int is_fullscreen = 0; 
     
    540516} 
    541517 
    542 void neod_buttonactions_popup_selected_orientation( GtkMenuItem* menu, gpointer user_data ) 
     518void neod_buttonactions_popup_selected_orientation( GtkWidget* button, gpointer user_data ) 
    543519{ 
    544520    gtk_widget_hide( aux_menu ); 
     
    550526} 
    551527 
    552 void neod_buttonactions_popup_selected_screenshot( GtkMenuItem* menu, gpointer user_data ) 
     528void neod_buttonactions_popup_selected_screenshot( GtkWidget* button, gpointer user_data ) 
    553529{ 
    554530    gtk_widget_hide( aux_menu ); 
     
    556532} 
    557533 
    558 void neod_buttonactions_popup_selected_fullPM( GtkMenuItem* menu, gpointer user_data ) 
    559 { 
    560     gconf_client_set_int( gconfc, "/desktop/openmoko/neod/power_management", FULL, NULL ); 
    561 } 
    562  
    563 void neod_buttonactions_popup_selected_dimOnly( GtkMenuItem* menu, gpointer user_data ) 
    564 { 
    565     gconf_client_set_int( gconfc, "/desktop/openmoko/neod/power_management", DIM_ONLY, NULL ); 
    566 } 
    567  
    568 void neod_buttonactions_popup_selected_noPM( GtkMenuItem* menu, gpointer user_data ) 
    569 { 
    570     gconf_client_set_int( gconfc, "/desktop/openmoko/neod/power_management", NONE, NULL ); 
    571 } 
    572  
    573 void neod_buttonactions_popup_selected_lock( GtkMenuItem* menu, gpointer user_data ) 
     534void neod_buttonactions_popup_selected_lock( GtkWidget* button, gpointer user_data ) 
    574535{ 
    575536    int fd = open( "/sys/power/state", O_WRONLY ); 
     
    582543} 
    583544 
    584 void neod_buttonactions_popup_selected_restartUI( GtkMenuItem* menu, gpointer user_data ) 
    585 { 
     545void neod_buttonactions_popup_selected_restartUI( GtkWidget* button, gpointer user_data ) 
     546{ 
     547    gtk_widget_hide( power_menu ); 
    586548    //FIXME notify user 
    587549    system( "/etc/init.d/xserver-nodm restart"); 
    588550} 
    589551 
    590 void neod_buttonactions_popup_selected_reboot( GtkMenuItem* menu, gpointer user_data ) 
    591 { 
     552void neod_buttonactions_popup_selected_reboot( GtkWidget* button, gpointer user_data ) 
     553{ 
     554    gtk_widget_hide( power_menu ); 
    592555    //moko_ui_banner_show_text( 4, "Rebooting System..." ); 
    593556    system( "/sbin/reboot"); 
    594557} 
    595558 
    596 void neod_buttonactions_popup_selected_poweroff( GtkMenuItem* menu, gpointer user_data ) 
    597 { 
     559void neod_buttonactions_popup_selected_poweroff( GtkWidget* button, gpointer user_data ) 
     560{ 
     561    gtk_widget_hide( power_menu ); 
    598562    //moko_ui_banner_show_text( 4, "Shutting down System..." ); 
    599563    system( "/sbin/poweroff"); 
     564} 
     565 
     566void neod_buttonactions_popup_selected_pmprofile( GtkComboBox* combo, gpointer user_data ) 
     567{ 
     568    gtk_widget_hide( power_menu ); 
     569    int new_pmprofile = gtk_combo_box_get_active( combo ); 
     570    g_assert( FULL <= new_pmprofile && new_pmprofile <= NONE ); 
     571    g_debug( "switch pm profile to %d", new_pmprofile ); 
     572    gconf_client_set_int( gconfc, "/desktop/openmoko/neod/power_management", new_pmprofile, NULL ); 
     573} 
     574 
     575static gboolean read_boolean_from_path( const gchar* path ) 
     576{ 
     577    int value; 
     578    FILE* f = fopen( path, "r" ); 
     579    if ( f == NULL ) 
     580    { 
     581        g_debug( "can't open file '%s': (%s), aborting.", path, strerror( errno ) ); 
     582        return FALSE; 
     583    } 
     584    fscanf( f, "%d", &value ); 
     585    fclose( f ); 
     586    g_debug( "read value from '%s' = '%d'", path, value ); 
     587    return value; 
     588} 
     589 
     590static void write_boolean_to_path( const gchar* path, gboolean b ) 
     591{ 
     592    FILE* f = fopen( path, "w" ); 
     593    if ( f == NULL ) 
     594    { 
     595        g_debug( "can't open file '%s': (%s), aborting.", path, strerror( errno ) ); 
     596        return; 
     597    } 
     598    fprintf( f, b ? "1\n" : "0\n" ); 
     599    fclose( f ); 
     600} 
     601 
     602static gboolean is_turned_on( int unit ) 
     603{ 
     604    switch( unit ) 
     605    { 
     606        case GSM: 
     607#ifdef NEOD_PLATFORM_FIC_NEO1973 
     608            return read_boolean_from_path( "/sys/devices/platform/gta01-pm-gsm.0/power_on" ); 
     609#endif 
     610            return FALSE; 
     611        case BLUETOOTH: 
     612#ifdef NEOD_PLATFORM_FIC_NEO1973 
     613            return read_boolean_from_path( "/sys/devices/platform/s3c2410-i2c/i2c-adapter/i2c-0/0-0008/gta01-pm-bt.0/power_on" ); 
     614#endif 
     615            return FALSE; 
     616        case GPS: 
     617#ifdef NEOD_PLATFORM_FIC_NEO1973 
     618            return read_boolean_from_path( "/sys/devices/platform/s3c2410-i2c/i2c-adapter/i2c-0/0-0008/gta01-pm-gps.0/power_on" ); 
     619#endif 
     620            return FALSE; 
     621        default: 
     622            g_assert( FALSE ); // should never reach this 
     623    } 
     624} 
     625 
     626static void peripheral_set_power( int unit, gboolean on ) 
     627{ 
     628    switch( unit ) 
     629    { 
     630        case GSM: 
     631#ifdef NEOD_PLATFORM_FIC_NEO1973 
     632            write_boolean_to_path( "/sys/devices/platform/gta01-pm-gsm.0/power_on", on ); 
     633#endif 
     634            break; 
     635        case BLUETOOTH: 
     636#ifdef NEOD_PLATFORM_FIC_NEO1973 
     637            write_boolean_to_path( "/sys/devices/platform/s3c2410-i2c/i2c-adapter/i2c-0/0-0008/gta01-pm-bt.0/power_on", on ); 
     638#endif 
     639            break; 
     640        case GPS: 
     641#ifdef NEOD_PLATFORM_FIC_NEO1973 
     642            write_boolean_to_path( "/sys/devices/platform/s3c2410-i2c/i2c-adapter/i2c-0/0-0008/gta01-pm-gps.0/power_on", on ); 
     643#endif 
     644            break; 
     645        default: 
     646            g_assert( FALSE ); // should never reach this 
     647    } 
     648} 
     649 
     650void neod_buttonactions_popup_selected_switch_power( GtkWidget* button, gpointer user_data ) 
     651{ 
     652    gtk_widget_hide( power_menu ); 
     653    gboolean new_power_state = !is_turned_on( (int)user_data ); 
     654    g_debug( "switch power of unit %d to %d", (int)user_data, (int)new_power_state ); 
     655    //FIXME implement this and notify user 
    600656} 
    601657 
     
    617673    if ( !aux_menu ) 
    618674    { 
    619         aux_menu = gtk_menu_new(); 
    620  
    621         GtkWidget* fullscreen = gtk_menu_item_new_with_label( "Toggle Fullscreen" ); 
    622         g_signal_connect( G_OBJECT(fullscreen), "activate", G_CALLBACK(neod_buttonactions_popup_selected_fullscreen), NULL ); 
    623         gtk_menu_shell_append( GTK_MENU_SHELL(aux_menu), fullscreen ); 
    624  
    625         GtkWidget* orientation = gtk_menu_item_new_with_label( "Swap Orientation" ); 
    626         g_signal_connect( G_OBJECT(orientation), "activate", G_CALLBACK(neod_buttonactions_popup_selected_orientation), NULL ); 
    627         gtk_menu_shell_append( GTK_MENU_SHELL(aux_menu), orientation ); 
    628  
    629         GtkWidget* scap = gtk_menu_item_new_with_label( "Screenshot" ); 
    630         g_signal_connect( G_OBJECT(scap), "activate", G_CALLBACK(neod_buttonactions_popup_selected_screenshot), NULL ); 
    631         gtk_menu_shell_append( GTK_MENU_SHELL(aux_menu), scap ); 
    632  
    633         gtk_widget_show_all( GTK_WIDGET(aux_menu) ); 
    634     } 
    635     gtk_menu_popup( GTK_MENU(aux_menu), NULL, NULL, neod_buttonactions_popup_positioning_cb, 0, 0, GDK_CURRENT_TIME ); 
     675        aux_menu = gtk_dialog_new_with_buttons( "AUX Menu", 
     676                                                NULL, 
     677                                                GTK_DIALOG_MODAL, 
     678                                                "Dismiss this menu", GTK_RESPONSE_OK, 
     679                                                NULL ); 
     680        gtk_widget_set_name( GTK_WIDGET(aux_menu), "neod-dialog" ); 
     681        gtk_button_box_set_layout( GTK_BUTTON_BOX(GTK_DIALOG(aux_menu)->action_area), GTK_BUTTONBOX_SPREAD ); 
     682        GtkWidget* box = gtk_vbox_new( 0, 0 ); 
     683        gtk_widget_set_name( box, "neod-menu" ); 
     684//        GtkWidget* title = gtk_label_new( "AUX Button Menu" ); 
     685//        gtk_box_pack_start_defaults( GTK_BOX(box), title ); 
     686 
     687        GtkWidget* fullscreen = gtk_button_new_with_label( "Toggle Fullscreen" ); 
     688        g_signal_connect( G_OBJECT(fullscreen), "clicked", G_CALLBACK(neod_buttonactions_popup_selected_fullscreen), NULL ); 
     689        gtk_box_pack_start_defaults( GTK_BOX(box), fullscreen ); 
     690 
     691        GtkWidget* orientation = gtk_button_new_with_label( "Swap Orientation" ); 
     692        g_signal_connect( G_OBJECT(orientation), "clicked", G_CALLBACK(neod_buttonactions_popup_selected_orientation), NULL ); 
     693        gtk_box_pack_start_defaults( GTK_BOX(box), orientation ); 
     694 
     695        GtkWidget* scap = gtk_button_new_with_label( "Screenshot" ); 
     696        g_signal_connect( G_OBJECT(scap), "clicked", G_CALLBACK(neod_buttonactions_popup_selected_screenshot), NULL ); 
     697        gtk_box_pack_start_defaults( GTK_BOX(box), scap ); 
     698 
     699        gtk_widget_show_all( GTK_WIDGET(box) ); 
     700 
     701        // override, otherwise matchbox won't show it fullscreen 
     702        gtk_window_set_type_hint( GTK_WINDOW(aux_menu), GDK_WINDOW_TYPE_HINT_NORMAL ); 
     703        //gtk_window_fullscreen( GTK_WINDOW(aux_menu) ); 
     704        g_signal_connect_swapped( aux_menu, "response", G_CALLBACK(gtk_widget_hide), aux_menu); 
     705        gtk_box_pack_start_defaults( GTK_BOX(GTK_DIALOG(aux_menu)->vbox), box ); 
     706    } 
     707    int response = gtk_dialog_run( GTK_DIALOG(aux_menu) ); 
     708    g_debug( "gtk_dialog_run completed, response = %d", response ); 
    636709} 
    637710 
    638711void neod_buttonactions_show_power_menu() 
    639712{ 
     713    static GtkWidget* gsmpower = 0; 
     714    static GtkWidget* btpower = 0; 
     715    static GtkWidget* gpspower = 0; 
     716    static GtkWidget* pmprofile = 0; 
     717 
    640718    // show popup menu requesting for actions 
    641719    if ( !power_menu ) 
    642720    { 
    643         power_menu = gtk_menu_new(); 
    644  
    645         GtkWidget* bluetooth = gtk_check_menu_item_new_with_label( "Bluetooth Power" ); 
    646         gtk_widget_set_state( bluetooth, GTK_STATE_INSENSITIVE ); 
    647         gtk_menu_shell_append( GTK_MENU_SHELL(power_menu), bluetooth ); 
    648  
    649         GtkWidget* gps = gtk_check_menu_item_new_with_label( "GPS Power" ); 
    650         gtk_widget_set_state( gps, GTK_STATE_INSENSITIVE ); 
    651         gtk_menu_shell_append( GTK_MENU_SHELL(power_menu), gps ); 
    652  
    653         GtkWidget* gsm = gtk_check_menu_item_new_with_label( "GSM Power" ); 
    654         gtk_widget_set_state( gsm, GTK_STATE_INSENSITIVE ); 
    655         gtk_menu_shell_append( GTK_MENU_SHELL(power_menu), gsm ); 
    656  
    657         gtk_menu_shell_append( GTK_MENU_SHELL(power_menu), gtk_separator_menu_item_new() ); 
    658  
    659         // add profiles 
    660         // TODO build profile list dynamically from database 
    661         GtkWidget* profile = 0; 
    662         profile = gtk_check_menu_item_new_with_label( "Profile: Full PM" ); 
    663         gtk_check_menu_item_set_draw_as_radio( GTK_CHECK_MENU_ITEM(profile), TRUE ); 
    664         gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(profile), pm_value == FULL ); 
    665         g_signal_connect( G_OBJECT(profile), "activate", G_CALLBACK(neod_buttonactions_popup_selected_fullPM), NULL ); 
    666         gtk_menu_shell_append( GTK_MENU_SHELL(power_menu), profile ); 
    667         profile = gtk_check_menu_item_new_with_label( "Profile: Dim Only" ); 
    668         gtk_check_menu_item_set_draw_as_radio( GTK_CHECK_MENU_ITEM(profile), TRUE ); 
    669         gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(profile), pm_value == DIM_ONLY ); 
    670         g_signal_connect( G_OBJECT(profile), "activate", G_CALLBACK(neod_buttonactions_popup_selected_dimOnly), NULL ); 
    671         gtk_menu_shell_append( GTK_MENU_SHELL(power_menu), profile ); 
    672         profile = gtk_check_menu_item_new_with_label( "Profile: No PM" ); 
    673         gtk_check_menu_item_set_draw_as_radio( GTK_CHECK_MENU_ITEM(profile), TRUE ); 
    674         gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(profile), pm_value == NONE ); 
    675         g_signal_connect( G_OBJECT(profile), "activate", G_CALLBACK(neod_buttonactions_popup_selected_noPM), NULL ); 
    676         gtk_menu_shell_append( GTK_MENU_SHELL(power_menu), profile ); 
    677  
    678         gtk_menu_shell_append( GTK_MENU_SHELL(power_menu), gtk_separator_menu_item_new() ); 
    679  
    680         GtkWidget* lock = gtk_menu_item_new_with_label( "Lock Phone" ); 
    681         g_signal_connect( G_OBJECT(lock), "activate", G_CALLBACK(neod_buttonactions_popup_selected_lock), NULL ); 
    682         gtk_menu_shell_append( GTK_MENU_SHELL(power_menu), lock ); 
    683             //GtkWidget* flightmode = gtk_menu_item_new_with_label( "Flight Mode" ); 
    684             //gtk_menu_shell_append( GTK_MENU_SHELL(power_menu), flightmode ); 
    685             //GtkWidget* profilelist = gtk_menu_item_new_with_label( "<Profile List>" ); 
    686             //gtk_menu_shell_append( GTK_MENU_SHELL(power_menu), profilelist ); 
    687             //GtkWidget* restartUI = gtk_menu_item_new_with_label( "Restart UI" ); 
    688             //g_signal_connect( G_OBJECT(restartUI), "activate", G_CALLBACK(neod_buttonactions_popup_selected_restartUI), NULL ); 
    689             //gtk_menu_shell_append( GTK_MENU_SHELL(power_menu), restartUI ); 
    690         GtkWidget* reboot = gtk_menu_item_new_with_label( "Reboot Phone" ); 
    691         g_signal_connect( G_OBJECT(reboot), "activate", G_CALLBACK(neod_buttonactions_popup_selected_reboot), NULL ); 
    692         gtk_menu_shell_append( GTK_MENU_SHELL(power_menu), reboot ); 
    693         GtkWidget* poweroff = gtk_menu_item_new_with_label( "Power Off" ); 
    694         g_signal_connect( G_OBJECT(poweroff), "activate", G_CALLBACK(neod_buttonactions_popup_selected_poweroff), NULL ); 
    695         gtk_menu_shell_append( GTK_MENU_SHELL(power_menu), poweroff ); 
    696         gtk_widget_show_all( GTK_WIDGET(power_menu) ); 
    697     } 
    698     gtk_menu_popup( GTK_MENU(power_menu), NULL, NULL, neod_buttonactions_popup_positioning_cb, 0, 0, GDK_CURRENT_TIME ); 
     721        power_menu = gtk_dialog_new_with_buttons( "POWER Menu", 
     722                NULL, 
     723                GTK_DIALOG_MODAL, 
     724                "Dismiss this menu", GTK_RESPONSE_OK, 
     725                NULL ); 
     726        gtk_widget_set_name( GTK_WIDGET(power_menu), "neod-dialog" ); 
     727        gtk_button_box_set_layout( GTK_BUTTON_BOX(GTK_DIALOG(power_menu)->action_area), GTK_BUTTONBOX_SPREAD ); 
     728        GtkWidget* box = gtk_vbox_new( 0, 0 ); 
     729        gtk_widget_set_name( box, "neod-menu" ); 
     730//        GtkWidget* title = gtk_label_new( "POWER Button Menu" ); 
     731//        gtk_box_pack_start_defaults( GTK_BOX(box), title ); 
     732 
     733        gsmpower = gtk_button_new(); 
     734        g_signal_connect( G_OBJECT(gsmpower), "clicked", G_CALLBACK(neod_buttonactions_popup_selected_switch_power), (void*)GSM ); 
     735        gtk_box_pack_start_defaults( GTK_BOX(box), gsmpower ); 
     736 
     737        btpower = gtk_button_new(); 
     738        g_signal_connect( G_OBJECT(btpower), "clicked", G_CALLBACK(neod_buttonactions_popup_selected_switch_power), (void*)BLUETOOTH ); 
     739        gtk_box_pack_start_defaults( GTK_BOX(box), btpower ); 
     740 
     741        gpspower = gtk_button_new(); 
     742        g_signal_connect( G_OBJECT(gpspower), "clicked", G_CALLBACK(neod_buttonactions_popup_selected_switch_power), (void*)GPS ); 
     743        gtk_box_pack_start_defaults( GTK_BOX(box), gpspower ); 
     744 
     745        gtk_box_pack_start_defaults( GTK_BOX(box), gtk_hseparator_new() ); 
     746 
     747        pmprofile = gtk_combo_box_new_text(); 
     748        gtk_combo_box_append_text( GTK_COMBO_BOX(pmprofile), "Power Management:\nDim first, then lock" ); 
     749        gtk_combo_box_append_text( GTK_COMBO_BOX(pmprofile), "Power Management:\nDim only, don't lock" ); 
     750        gtk_combo_box_append_text( GTK_COMBO_BOX(pmprofile), "Power Management:\nDisabled" ); 
     751        gtk_combo_box_set_active( GTK_COMBO_BOX(pmprofile), pm_value ); 
     752        g_signal_connect( G_OBJECT(pmprofile), "changed", G_CALLBACK(neod_buttonactions_popup_selected_pmprofile), NULL ); 
     753        gtk_box_pack_start_defaults( GTK_BOX(box), pmprofile ); 
     754 
     755        gtk_box_pack_start_defaults( GTK_BOX(box), gtk_hseparator_new() ); 
     756 
     757        GtkWidget* lock = gtk_button_new_with_label( "Lock Now" ); 
     758        g_signal_connect( G_OBJECT(lock), "clicked", G_CALLBACK(neod_buttonactions_popup_selected_lock), NULL ); 
     759        gtk_box_pack_start_defaults( GTK_BOX(box), lock ); 
     760 
     761        GtkWidget* poweroff = gtk_button_new_with_label( "Shutdown Now" ); 
     762        g_signal_connect( G_OBJECT(poweroff), "clicked", G_CALLBACK(neod_buttonactions_popup_selected_poweroff), NULL ); 
     763        gtk_box_pack_start_defaults( GTK_BOX(box), poweroff ); 
     764 
     765        gtk_widget_show_all( GTK_WIDGET(box) ); 
     766 
     767        // override, otherwise matchbox won't show it fullscreen 
     768        gtk_window_set_type_hint( GTK_WINDOW(power_menu), GDK_WINDOW_TYPE_HINT_NORMAL ); 
     769        //gtk_window_fullscreen( GTK_WINDOW(power_menu) ); 
     770        g_signal_connect_swapped( power_menu, "response", G_CALLBACK(gtk_widget_hide), power_menu); 
     771        gtk_box_pack_start_defaults( GTK_BOX(GTK_DIALOG(power_menu)->vbox), box ); 
     772    } 
     773    gtk_button_set_label( gsmpower, g_strdup_printf( "Turn %s GSM", is_turned_on( GSM ) ? "off" : "on" ) ); 
     774    gtk_button_set_label( btpower, g_strdup_printf( "Turn %s Bluetooth", is_turned_on( BLUETOOTH ) ? "off" : "on" ) ); 
     775    gtk_button_set_label( gpspower, g_strdup_printf( "Turn %s GPS", is_turned_on( GPS ) ? "off" : "on" ) ); 
     776    int response = gtk_dialog_run( GTK_DIALOG(power_menu) ); 
     777    g_debug( "gtk_dialog_run completed, response = %d", response ); 
     778} 
     779 
     780const gchar* authors[] = { 
     781    "OpenMoko has been brought to you by:", 
     782    " " 
     783    "Sean Moss-Pultz", 
     784    "Harald 'LaF0rge' Welte", 
     785    "Michael 'Mickey' Lauer", 
     786    "Werner Almesberger", 
     787    "Alice Tang", 
     788    "Allen Chang", 
     789    "Dave Wu", 
     790    "Wanda", 
     791    "Jelan Hsu", 
     792    "Miles Hsieh", 
     793    "Nod Huang", 
     794    "Paul Tian", 
     795    "Sean Chiang", 
     796    "Shawn Lin", 
     797    "Timmy Huang", 
     798    "Willie Chen", 
     799    "Olv", 
     800    "JServ", 
     801    "Jollen", 
     802    "Rasterman", 
     803    "Matt Hsu", 
     804    "John Lee", 
     805    "Tick", 
     806    "Roh", 
     807    "Erin Yueh", 
     808    "Jeremy", 
     809    "Holger 'Zecke' Freyther", 
     810    "Daniel 'Alphaone' Willmann", 
     811    "Stefan Schmidt", 
     812    "Jan 'Shoragan' Luebbe", 
     813    "Soeren 'Abraxa' Apel", 
     814    "Rod Whitby", 
     815    "Chris @ O-Hand", 
     816    "Ross @ O-Hand", 
     817    "Thomas @ O-Hand", 
     818    "Rob @ O-Hand", 
     819    "Dodji @ O-Hand", 
     820    "NJP @ O-Hand", 
     821    " ", 
     822    "@" __DATE__ ":" __TIME__, 
     823    "gcc " __VERSION__, 
     824}; 
     825 
     826gboolean neod_buttonactions_power_while_aux() 
     827{ 
     828    g_debug( "aux and power pressed together" ); 
     829    if ( aux_menu ) 
     830        gtk_widget_hide( aux_menu ); 
     831    gtk_show_about_dialog( NULL, 
     832        "authors", authors, 
     833        "comments", "open. mobile. free.", 
     834        "copyright", "2006-2007 OpenMoko, Inc.", 
     835        "program-name", "OpenMoko 2007.2", 
     836        "website", "http://www.openmoko.org", 
     837        "logo", gdk_pixbuf_new_from_file( PKGDATADIR "/openmoko-logo.jpg", NULL ), 
     838        NULL ); 
     839    return FALSE; 
    699840} 
    700841 
     
    708849 
    709850    power_timer = -1; 
     851 
     852    // special case for power button being pressed while aux is held 
     853    if ( aux_timer != -1 || ( aux_menu && GTK_WIDGET_MAPPED( aux_menu ) ) ) 
     854        return neod_buttonactions_power_while_aux(); 
     855 
    710856    if ( timeout < 1 ) 
    711857    { 
     
    822968{ 
    823969    g_debug( "mainmenu powersave timeout 1" ); 
    824     //FIXME talk to neod 
     970    //FIXME talk to peripheral device abstraction daemon 
    825971    power_state = DISPLAY_DIM; 
    826972    neod_buttonactions_set_display( 25 ); 
     
    831977{ 
    832978    g_debug( "mainmenu powersave timeout 2" ); 
    833     //FIXME talk to neod 
     979    //FIXME talk to peripheral device abstraction daemon 
    834980    neod_buttonactions_set_display( 0 ); 
    835981    power_state = DISPLAY_OFF; 
     
    842988        return FALSE; 
    843989    g_debug( "mainmenu powersave timeout 3" ); 
    844     //FIXME talk to neod 
     990    //FIXME talk to peripheral device abstraction daemon 
    845991    power_state = SUSPEND; 
    846992    system( "/usr/bin/apm -s"); 
Note: See TracChangeset for help on using the changeset viewer.