diff --git a/desmume/src/gtk-glade/glade/DeSmuMe_Dtools.glade b/desmume/src/gtk-glade/glade/DeSmuMe_Dtools.glade index efc5b2fd3..6439ec531 100755 --- a/desmume/src/gtk-glade/glade/DeSmuMe_Dtools.glade +++ b/desmume/src/gtk-glade/glade/DeSmuMe_Dtools.glade @@ -312,7 +312,7 @@ ARM7 cpu True True - 0 0 15 1 2 1 + 0 0 15 1 2 0 1 @@ -471,7 +471,7 @@ ARM7 cpu True True - 0 0 15 1 2 1 + 0 0 15 1 2 0 1 diff --git a/desmume/src/gtk/main.cpp b/desmume/src/gtk/main.cpp index 0d10e5f0d..568ac5619 100644 --- a/desmume/src/gtk/main.cpp +++ b/desmume/src/gtk/main.cpp @@ -76,16 +76,16 @@ static SDL_sem *fps_limiter_semaphore; static int gtk_fps_limiter_disabled; enum { - MAIN_BG_0 = 0, - MAIN_BG_1, - MAIN_BG_2, - MAIN_BG_3, - MAIN_OBJ, - SUB_BG_0, - SUB_BG_1, - SUB_BG_2, - SUB_BG_3, - SUB_OBJ + MAIN_BG_0 = 0, + MAIN_BG_1, + MAIN_BG_2, + MAIN_BG_3, + MAIN_OBJ, + SUB_BG_0, + SUB_BG_1, + SUB_BG_2, + SUB_BG_3, + SUB_OBJ }; /************************ CONFIG FILE *****************************/ @@ -100,12 +100,12 @@ static void Printscreen(); static void Reset(); static const GtkActionEntry action_entries[] = { - { "open", "gtk-open", "Open", "o", NULL, G_CALLBACK(Open_Select) }, - { "run", "gtk-media-play", "Run", "r", NULL, G_CALLBACK(Launch) }, - { "pause", "gtk-media-pause", "Pause", "p", NULL, G_CALLBACK(Pause) }, - { "quit", "gtk-quit", "Quit", "q", NULL, G_CALLBACK(gtk_main_quit) }, - { "printscreen","gtk-media-record", "Take a screenshot", "s", NULL, G_CALLBACK(Printscreen) }, - { "reset", "gtk-refresh", "Reset", NULL, NULL, G_CALLBACK(Reset) } + { "open", "gtk-open", "Open", "o", NULL, G_CALLBACK(Open_Select) }, + { "run", "gtk-media-play", "Run", "r", NULL, G_CALLBACK(Launch) }, + { "pause", "gtk-media-pause", "Pause", "p", NULL, G_CALLBACK(Pause) }, + { "quit", "gtk-quit", "Quit", "q", NULL, G_CALLBACK(gtk_main_quit) }, + { "printscreen","gtk-media-record", "Take a screenshot", "s", NULL, G_CALLBACK(Printscreen) }, + { "reset", "gtk-refresh", "Reset", NULL, NULL, G_CALLBACK(Reset) } }; GtkActionGroup * action_group; @@ -198,13 +198,13 @@ fill_configured_features( struct configured_features *config, { "disable-sound", 0, 0, G_OPTION_ARG_NONE, &config->disable_sound, "Disables the sound emulation", NULL}, { "disable-limiter", 0, 0, G_OPTION_ARG_NONE, &config->disable_limiter, "Disables the 60fps limiter", NULL}, { "fwlang", 0, 0, G_OPTION_ARG_INT, &config->firmware_language, "Set the language in the firmware, LANG as follows:\n" - "\t\t\t\t 0 = Japanese\n" - "\t\t\t\t 1 = English\n" - "\t\t\t\t 2 = French\n" - "\t\t\t\t 3 = German\n" - "\t\t\t\t 4 = Italian\n" - "\t\t\t\t 5 = Spanish\n", - "LANG"}, + "\t\t\t\t 0 = Japanese\n" + "\t\t\t\t 1 = English\n" + "\t\t\t\t 2 = French\n" + "\t\t\t\t 3 = German\n" + "\t\t\t\t 4 = Italian\n" + "\t\t\t\t 5 = Spanish\n", + "LANG"}, #ifdef GDB_STUB { "arm9gdb", 0, 0, G_OPTION_ARG_INT, &config->arm9_gdb_port, "Enable the ARM9 GDB stub on the given port", "PORT_NUM"}, { "arm7gdb", 0, 0, G_OPTION_ARG_INT, &config->arm7_gdb_port, "Enable the ARM7 GDB stub on the given port", "PORT_NUM"}, @@ -303,69 +303,69 @@ u16 Keypad_Temp[NB_KEYS]; static int Write_ConfigFile(const gchar *config_file) { - int i; - GKeyFile * keyfile; - gchar *contents; - gboolean ret; + int i; + GKeyFile * keyfile; + gchar *contents; + gboolean ret; - keyfile = g_key_file_new(); + keyfile = g_key_file_new(); - for(i = 0; i < NB_KEYS; i++) { - g_key_file_set_integer(keyfile, "KEYS", key_names[i], keyboard_cfg[i]); - g_key_file_set_integer(keyfile, "JOYKEYS", key_names[i], joypad_cfg[i]); - } + for(i = 0; i < NB_KEYS; i++) { + g_key_file_set_integer(keyfile, "KEYS", key_names[i], keyboard_cfg[i]); + g_key_file_set_integer(keyfile, "JOYKEYS", key_names[i], joypad_cfg[i]); + } -// if(FirmwareFile[0]) { -// ini_add_section(ini, "FIRMWARE"); -// ini_add_value(ini, "FIRMWARE", "FILE", FirmwareFile); -// } +// if(FirmwareFile[0]) { +// ini_add_section(ini, "FIRMWARE"); +// ini_add_value(ini, "FIRMWARE", "FILE", FirmwareFile); +// } - contents = g_key_file_to_data(keyfile, 0, 0); - ret = g_file_set_contents(config_file, contents, -1, NULL); - if (!ret) - g_printerr("Failed to write to %s\n", config_file); - g_free (contents); + contents = g_key_file_to_data(keyfile, 0, 0); + ret = g_file_set_contents(config_file, contents, -1, NULL); + if (!ret) + g_printerr("Failed to write to %s\n", config_file); + g_free (contents); - g_key_file_free(keyfile); + g_key_file_free(keyfile); - return 0; + return 0; } static int Read_ConfigFile(const gchar *config_file) { - int i, tmp; - GKeyFile * keyfile = g_key_file_new(); - GError * error = NULL; + int i, tmp; + GKeyFile * keyfile = g_key_file_new(); + GError * error = NULL; - load_default_config(); + load_default_config(); - g_key_file_load_from_file(keyfile, config_file, G_KEY_FILE_NONE, 0); + g_key_file_load_from_file(keyfile, config_file, G_KEY_FILE_NONE, 0); - /* Load keyboard keys */ - for(i = 0; i < NB_KEYS; i++) { - tmp = g_key_file_get_integer(keyfile, "KEYS", key_names[i], &error); - if (error != NULL) { + /* Load keyboard keys */ + for(i = 0; i < NB_KEYS; i++) { + tmp = g_key_file_get_integer(keyfile, "KEYS", key_names[i], &error); + if (error != NULL) { g_error_free(error); error = NULL; - } else { + } else { keyboard_cfg[i] = tmp; - } - } + } + } - /* Load joystick keys */ - for(i = 0; i < NB_KEYS; i++) { - tmp = g_key_file_get_integer(keyfile, "JOYKEYS", key_names[i], &error); - if (error != NULL) { + /* Load joystick keys */ + for(i = 0; i < NB_KEYS; i++) { + tmp = g_key_file_get_integer(keyfile, "JOYKEYS", key_names[i], &error); + if (error != NULL) { g_error_free(error); error = NULL; - } else { + } else { joypad_cfg[i] = tmp; - } - } + } + } - g_key_file_free(keyfile); + g_key_file_free(keyfile); - return 0; + return 0; } /************************ GTK *******************************/ @@ -392,131 +392,130 @@ static BOOL regMainLoop = FALSE; static inline void pStatusBar_Change (const char *message) { - gint pStatusBar_Ctx; + gint pStatusBar_Ctx; - pStatusBar_Ctx = gtk_statusbar_get_context_id(GTK_STATUSBAR(pStatusBar), "Global"); - gtk_statusbar_pop(GTK_STATUSBAR(pStatusBar), pStatusBar_Ctx); - gtk_statusbar_push(GTK_STATUSBAR(pStatusBar), pStatusBar_Ctx, message); + pStatusBar_Ctx = gtk_statusbar_get_context_id(GTK_STATUSBAR(pStatusBar), "Global"); + gtk_statusbar_pop(GTK_STATUSBAR(pStatusBar), pStatusBar_Ctx); + gtk_statusbar_push(GTK_STATUSBAR(pStatusBar), pStatusBar_Ctx, message); } gboolean EmuLoop(gpointer data); static void About(GtkWidget* widget, gpointer data) { - GdkPixbuf * pixbuf = gdk_pixbuf_new_from_xpm_data(DeSmuME_xpm); + GdkPixbuf * pixbuf = gdk_pixbuf_new_from_xpm_data(DeSmuME_xpm); - gtk_show_about_dialog(GTK_WINDOW(pWindow), - "name", "DeSmuME", - "version", VERSION, - "website", "http://desmume.org", - "logo", pixbuf, - "comments", "Nintendo DS emulator based on work by Yopyop", - NULL); + gtk_show_about_dialog(GTK_WINDOW(pWindow), + "name", "DeSmuME", + "version", VERSION, + "website", "http://desmume.org", + "logo", pixbuf, + "comments", "Nintendo DS emulator based on work by Yopyop", + NULL); - g_object_unref(pixbuf); + g_object_unref(pixbuf); } static int Open(const char *filename, const char *cflash_disk_image) { - return NDS_LoadROM( filename, backupmemorytype, backupmemorysize, cflash_disk_image ); + return NDS_LoadROM( filename, backupmemorytype, backupmemorysize, cflash_disk_image ); } static void Launch() { - desmume_resume(); + desmume_resume(); - if(!regMainLoop) { - g_idle_add_full(EMULOOP_PRIO, &EmuLoop, pWindow, NULL); - regMainLoop = TRUE; - } + if(!regMainLoop) { + g_idle_add_full(EMULOOP_PRIO, &EmuLoop, pWindow, NULL); + regMainLoop = TRUE; + } - pStatusBar_Change("Running ..."); + pStatusBar_Change("Running ..."); - gtk_action_set_sensitive(gtk_action_group_get_action(action_group, "pause"), TRUE); - gtk_action_set_sensitive(gtk_action_group_get_action(action_group, "run"), FALSE); - gtk_action_set_sensitive(gtk_action_group_get_action(action_group, "reset"), TRUE); - gtk_action_set_sensitive(gtk_action_group_get_action(action_group, "printscreen"), TRUE); + gtk_action_set_sensitive(gtk_action_group_get_action(action_group, "pause"), TRUE); + gtk_action_set_sensitive(gtk_action_group_get_action(action_group, "run"), FALSE); + gtk_action_set_sensitive(gtk_action_group_get_action(action_group, "reset"), TRUE); + gtk_action_set_sensitive(gtk_action_group_get_action(action_group, "printscreen"), TRUE); } static void Pause() { - desmume_pause(); - pStatusBar_Change("Paused"); + desmume_pause(); + pStatusBar_Change("Paused"); - gtk_action_set_sensitive(gtk_action_group_get_action(action_group, "pause"), FALSE); - gtk_action_set_sensitive(gtk_action_group_get_action(action_group, "run"), TRUE); + gtk_action_set_sensitive(gtk_action_group_get_action(action_group, "pause"), FALSE); + gtk_action_set_sensitive(gtk_action_group_get_action(action_group, "run"), TRUE); } /* Choose a file then load it */ static void Open_Select(GtkWidget* widget, gpointer data) { - GtkFileFilter *pFilter_nds, *pFilter_dsgba, *pFilter_any; - GtkWidget *pFileSelection; - GtkWidget *pParent; - gchar *sChemin; + GtkFileFilter *pFilter_nds, *pFilter_dsgba, *pFilter_any; + GtkWidget *pFileSelection; + GtkWidget *pParent; + gchar *sPath; - if (desmume_running()) - Pause(); + if (desmume_running()) + Pause(); - pParent = GTK_WIDGET(data); + pParent = GTK_WIDGET(data); - pFilter_nds = gtk_file_filter_new(); - gtk_file_filter_add_pattern(pFilter_nds, "*.nds"); + pFilter_nds = gtk_file_filter_new(); + gtk_file_filter_add_pattern(pFilter_nds, "*.nds"); #ifdef HAVE_LIBZ - gtk_file_filter_add_pattern(pFilter_nds, "*.nds.gz"); + gtk_file_filter_add_pattern(pFilter_nds, "*.nds.gz"); #endif #ifdef HAVE_LIBZZIP - gtk_file_filter_add_pattern(pFilter_nds, "*.nds.zip"); + gtk_file_filter_add_pattern(pFilter_nds, "*.nds.zip"); #endif - gtk_file_filter_set_name(pFilter_nds, "Nds binary (.nds)"); + gtk_file_filter_set_name(pFilter_nds, "Nds binary (.nds)"); - pFilter_dsgba = gtk_file_filter_new(); - gtk_file_filter_add_pattern(pFilter_dsgba, "*.ds.gba"); - gtk_file_filter_set_name(pFilter_dsgba, "Nds binary with loader (.ds.gba)"); + pFilter_dsgba = gtk_file_filter_new(); + gtk_file_filter_add_pattern(pFilter_dsgba, "*.ds.gba"); + gtk_file_filter_set_name(pFilter_dsgba, "Nds binary with loader (.ds.gba)"); - pFilter_any = gtk_file_filter_new(); - gtk_file_filter_add_pattern(pFilter_any, "*"); - gtk_file_filter_set_name(pFilter_any, "All files"); + pFilter_any = gtk_file_filter_new(); + gtk_file_filter_add_pattern(pFilter_any, "*"); + gtk_file_filter_set_name(pFilter_any, "All files"); - /* Creating the selection window */ - pFileSelection = gtk_file_chooser_dialog_new("Open...", - GTK_WINDOW(pParent), - GTK_FILE_CHOOSER_ACTION_OPEN, - GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, - GTK_STOCK_OPEN, GTK_RESPONSE_OK, - NULL); - /* On limite les actions a cette fenetre */ - gtk_window_set_modal(GTK_WINDOW(pFileSelection), TRUE); + /* Creating the selection window */ + pFileSelection = gtk_file_chooser_dialog_new("Open...", + GTK_WINDOW(pParent), + GTK_FILE_CHOOSER_ACTION_OPEN, + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + GTK_STOCK_OPEN, GTK_RESPONSE_OK, + NULL); + /* Only the dialog window is accepting events: */ + gtk_window_set_modal(GTK_WINDOW(pFileSelection), TRUE); - gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(pFileSelection), pFilter_nds); - gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(pFileSelection), pFilter_dsgba); - gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(pFileSelection), pFilter_any); + gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(pFileSelection), pFilter_nds); + gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(pFileSelection), pFilter_dsgba); + gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(pFileSelection), pFilter_any); - /* Affichage fenetre */ - switch(gtk_dialog_run(GTK_DIALOG(pFileSelection))) { - case GTK_RESPONSE_OK: - /* Recuperation du chemin */ - sChemin = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(pFileSelection)); - if(Open((const char*)sChemin, bad_glob_cflash_disk_image_file) < 0) { - GtkWidget *pDialog = gtk_message_dialog_new(GTK_WINDOW(pFileSelection), - GTK_DIALOG_MODAL, - GTK_MESSAGE_ERROR, - GTK_BUTTONS_OK, - "Unable to load :\n%s", sChemin); - gtk_dialog_run(GTK_DIALOG(pDialog)); - gtk_widget_destroy(pDialog); - } else { - gtk_action_set_sensitive(gtk_action_group_get_action(action_group, "run"), TRUE); - } + /* Showing the window */ + switch(gtk_dialog_run(GTK_DIALOG(pFileSelection))) { + case GTK_RESPONSE_OK: + sPath = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(pFileSelection)); + if(Open((const char*)sPath, bad_glob_cflash_disk_image_file) < 0) { + GtkWidget *pDialog = gtk_message_dialog_new(GTK_WINDOW(pFileSelection), + GTK_DIALOG_MODAL, + GTK_MESSAGE_ERROR, + GTK_BUTTONS_OK, + "Unable to load :\n%s", sPath); + gtk_dialog_run(GTK_DIALOG(pDialog)); + gtk_widget_destroy(pDialog); + } else { + gtk_action_set_sensitive(gtk_action_group_get_action(action_group, "run"), TRUE); + } - //Launch(NULL, pWindow); + //Launch(NULL, pWindow); - g_free(sChemin); - break; - default: - break; - } - gtk_widget_destroy(pFileSelection); + g_free(sPath); + break; + default: + break; + } + gtk_widget_destroy(pFileSelection); } #if 0 /* not used */ @@ -527,14 +526,12 @@ static void Close() static void Reset() { - NDS_Reset(); - desmume_resume(); + NDS_Reset(); + desmume_resume(); - pStatusBar_Change("Running ..."); + pStatusBar_Change("Running ..."); } - - #ifdef GTKGLEXT_AVAILABLE static void gtk_init_main_gl_area(GtkWidget *widget, @@ -627,11 +624,11 @@ gtk_init_sub_gl_area(GtkWidget *widget, static inline void gpu_screen_to_rgb(u8 *rgb, int size) { - for (int i = 0; i < size; i++) { - rgb[(i*3)+0] = ((*((u16 *)&GPU_screen[(i<<1)]) >> 0) & 0x1f) << 3; - rgb[(i*3)+1] = ((*((u16 *)&GPU_screen[(i<<1)]) >> 5) & 0x1f) << 3; - rgb[(i*3)+2] = ((*((u16 *)&GPU_screen[(i<<1)]) >> 10) & 0x1f) << 3; - } + for (int i = 0; i < size; i++) { + rgb[(i*3)+0] = ((*((u16 *)&GPU_screen[(i<<1)]) >> 0) & 0x1f) << 3; + rgb[(i*3)+1] = ((*((u16 *)&GPU_screen[(i<<1)]) >> 5) & 0x1f) << 3; + rgb[(i*3)+2] = ((*((u16 *)&GPU_screen[(i<<1)]) >> 10) & 0x1f) << 3; + } } #ifdef GTKGLEXT_AVAILABLE @@ -870,98 +867,100 @@ common_configure_fn( GtkWidget *widget, /* Drawing callback */ static int gtkFloatExposeEvent (GtkWidget *widget, GdkEventExpose *event, gpointer data) { - guchar *rgb; - rgb = (guchar *) malloc(SCREENS_PIXEL_SIZE*3); - if (!rgb) - return 0; + guchar *rgb; + rgb = (guchar *) malloc(SCREENS_PIXEL_SIZE*3); + if (!rgb) + return 0; - gpu_screen_to_rgb(rgb, SCREENS_PIXEL_SIZE); - gdk_draw_rgb_image (widget->window, - widget->style->fg_gc[widget->state], 0, 0, - 256, 192*2, - GDK_RGB_DITHER_NONE, - rgb, 256*3); + gpu_screen_to_rgb(rgb, SCREENS_PIXEL_SIZE); + gdk_draw_rgb_image (widget->window, + widget->style->fg_gc[widget->state], 0, 0, + 256, 192*2, + GDK_RGB_DITHER_NONE, + rgb, 256*3); - free(rgb); - return 1; + free(rgb); + return 1; } /////////////////////////////// KEYS AND STYLUS UPDATE /////////////////////////////////////// static gboolean Stylus_Move(GtkWidget *w, GdkEventMotion *e, gpointer data) { - GdkModifierType state; - gint x,y; - s32 EmuX, EmuY; + GdkModifierType state; + gint x,y; + s32 EmuX, EmuY; const int *opengl = (const int *)data; - if(click) { + if(click) { int scaled_x, scaled_y; - if(e->is_hint) - gdk_window_get_pointer(w->window, &x, &y, &state); - else { - x= (gint)e->x; - y= (gint)e->y; - state=(GdkModifierType)e->state; - } + if(e->is_hint) + gdk_window_get_pointer(w->window, &x, &y, &state); + else { + x= (gint)e->x; + y= (gint)e->y; + state=(GdkModifierType)e->state; + } scaled_x = x * nds_screen_size_ratio; scaled_y = y * nds_screen_size_ratio; - LOG("X=%d, Y=%d, S&1=%d\n", x,y,state&GDK_BUTTON1_MASK); + LOG("X=%d, Y=%d, S&1=%d\n", x,y,state&GDK_BUTTON1_MASK); if ( !(*opengl)) { scaled_y -= 192; } - if(scaled_y >= 0 && (state & GDK_BUTTON1_MASK)) { + if(scaled_y >= 0 && (state & GDK_BUTTON1_MASK)) { EmuX = scaled_x; EmuY = scaled_y; if(EmuX<0) EmuX = 0; else if(EmuX>255) EmuX = 255; if(EmuY<0) EmuY = 0; else if(EmuY>192) EmuY = 192; NDS_setTouchPos(EmuX, EmuY); - } - } + } + } - return TRUE; + return TRUE; } -static gboolean Stylus_Press(GtkWidget *w, GdkEventButton *e, gpointer data) + +static gboolean Stylus_Press(GtkWidget * w, GdkEventButton * e, + gpointer data) { - GdkModifierType state; - gint x,y; - s32 EmuX, EmuY; - const int *opengl = (const int *)data; + GdkModifierType state; + gint x, y; + s32 EmuX, EmuY; + const int *opengl = (const int *) data; - if(desmume_running()) { - if(e->button == 1) { - int scaled_x, scaled_y; - click = TRUE; + if (desmume_running()) { + if (e->button == 1) { + int scaled_x, scaled_y; + click = TRUE; - gdk_window_get_pointer(w->window, &x, &y, &state); + gdk_window_get_pointer(w->window, &x, &y, &state); - scaled_x = x * nds_screen_size_ratio; - scaled_y = y * nds_screen_size_ratio; + scaled_x = x * nds_screen_size_ratio; + scaled_y = y * nds_screen_size_ratio; - if ( !(*opengl)) { - scaled_y -= 192; - } - if(scaled_y >= 0 && (state & GDK_BUTTON1_MASK)) { - EmuX = scaled_x; - EmuY = scaled_y; - if(EmuX<0) EmuX = 0; else if(EmuX>255) EmuX = 255; - if(EmuY<0) EmuY = 0; else if(EmuY>192) EmuY = 192; - NDS_setTouchPos(EmuX, EmuY); - } - } - } + if (!(*opengl)) { + scaled_y -= 192; + } + if (scaled_y >= 0 && (state & GDK_BUTTON1_MASK)) { + EmuX = scaled_x; + EmuY = scaled_y; + if (EmuX < 0) EmuX = 0; else if (EmuX > 255) EmuX = 255; + if (EmuY < 0) EmuY = 0; else if (EmuY > 192) EmuY = 192; + NDS_setTouchPos(EmuX, EmuY); + } + } + } - return TRUE; + return TRUE; } static gboolean Stylus_Release(GtkWidget *w, GdkEventButton *e, gpointer data) { - if(click) NDS_releaseTouch(); - click = FALSE; - return TRUE; + if(click) NDS_releaseTouch(); + click = FALSE; + return TRUE; } void loadgame(int num){ @@ -1003,16 +1002,26 @@ static gint Key_Press(GtkWidget *w, GdkEventKey *e, gpointer data) savegame(e->keyval - GDK_F1 + 1); return 1; } - u16 Key = lookup_key(e->keyval); - ADD_KEY( Cur_Keypad, Key ); - if(desmume_running()) update_keypad(Cur_Keypad); + // FIXME: this is a hack to allow accels to work together with keypad emulation + // should be fixed by somebody who knows how to make key_press_event trigger AFTER all GtkAccels + guint mask; + mask = GDK_SHIFT_MASK | GDK_CONTROL_MASK | GDK_MOD1_MASK | GDK_MOD5_MASK; // shift,ctrl, both alts + if( (e->state & mask) == 0){ + u16 Key = lookup_key(e->keyval); + if(Key){ + ADD_KEY( Cur_Keypad, Key ); + if(desmume_running()) update_keypad(Cur_Keypad); + return 1; + } + } #ifdef PROFILE_MEMORY_ACCESS if ( e->keyval == GDK_Tab) { print_memory_profiling(); + return 1; } #endif - return 1; + return 0; } static gint Key_Release(GtkWidget *w, GdkEventKey *e, gpointer data) @@ -1035,97 +1044,97 @@ static gint Key_Release(GtkWidget *w, GdkEventKey *e, gpointer data) /////////////////////////////// CONTROLS EDIT ////////////////////////////////////// struct modify_key_ctx { - gint mk_key_chosen; - GtkWidget *label; + gint mk_key_chosen; + GtkWidget *label; }; static void Modify_Key_Press(GtkWidget *w, GdkEventKey *e, struct modify_key_ctx *ctx) { - gchar *YouPressed; + gchar *YouPressed; - ctx->mk_key_chosen = e->keyval; - YouPressed = g_strdup_printf("You pressed : %s\nClick OK to keep this key.", gdk_keyval_name(e->keyval)); - gtk_label_set(GTK_LABEL(ctx->label), YouPressed); - g_free(YouPressed); + ctx->mk_key_chosen = e->keyval; + YouPressed = g_strdup_printf("You pressed : %s\nClick OK to keep this key.", gdk_keyval_name(e->keyval)); + gtk_label_set(GTK_LABEL(ctx->label), YouPressed); + g_free(YouPressed); } static void Modify_Key(GtkWidget* widget, gpointer data) { - struct modify_key_ctx ctx; - GtkWidget *mkDialog; - gchar *Key_Label; - gchar *Title; - gint Key; + struct modify_key_ctx ctx; + GtkWidget *mkDialog; + gchar *Key_Label; + gchar *Title; + gint Key; - Key = GPOINTER_TO_INT(data); - ctx.mk_key_chosen = 0; - Title = g_strdup_printf("Press \"%s\" key ...\n", key_names[Key]); - mkDialog = gtk_dialog_new_with_buttons(Title, - GTK_WINDOW(pWindow), - GTK_DIALOG_MODAL, - GTK_STOCK_OK,GTK_RESPONSE_OK, - GTK_STOCK_CANCEL,GTK_RESPONSE_CANCEL, - NULL); + Key = GPOINTER_TO_INT(data); + ctx.mk_key_chosen = 0; + Title = g_strdup_printf("Press \"%s\" key ...\n", key_names[Key]); + mkDialog = gtk_dialog_new_with_buttons(Title, + GTK_WINDOW(pWindow), + GTK_DIALOG_MODAL, + GTK_STOCK_OK,GTK_RESPONSE_OK, + GTK_STOCK_CANCEL,GTK_RESPONSE_CANCEL, + NULL); - ctx.label = gtk_label_new(Title); - g_free(Title); - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(mkDialog)->vbox), ctx.label, TRUE, FALSE, 0); + ctx.label = gtk_label_new(Title); + g_free(Title); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(mkDialog)->vbox), ctx.label, TRUE, FALSE, 0); - g_signal_connect(G_OBJECT(mkDialog), "key_press_event", G_CALLBACK(Modify_Key_Press), &ctx); + g_signal_connect(G_OBJECT(mkDialog), "key_press_event", G_CALLBACK(Modify_Key_Press), &ctx); - gtk_widget_show_all(GTK_DIALOG(mkDialog)->vbox); + gtk_widget_show_all(GTK_DIALOG(mkDialog)->vbox); - switch(gtk_dialog_run(GTK_DIALOG(mkDialog))) { - case GTK_RESPONSE_OK: - Keypad_Temp[Key] = ctx.mk_key_chosen; - Key_Label = g_strdup_printf("%s (%s)", key_names[Key], gdk_keyval_name(Keypad_Temp[Key])); - gtk_button_set_label(GTK_BUTTON(widget), Key_Label); - g_free(Key_Label); - break; - case GTK_RESPONSE_CANCEL: - case GTK_RESPONSE_NONE: - ctx.mk_key_chosen = 0; - break; - } + switch(gtk_dialog_run(GTK_DIALOG(mkDialog))) { + case GTK_RESPONSE_OK: + Keypad_Temp[Key] = ctx.mk_key_chosen; + Key_Label = g_strdup_printf("%s (%s)", key_names[Key], gdk_keyval_name(Keypad_Temp[Key])); + gtk_button_set_label(GTK_BUTTON(widget), Key_Label); + g_free(Key_Label); + break; + case GTK_RESPONSE_CANCEL: + case GTK_RESPONSE_NONE: + ctx.mk_key_chosen = 0; + break; + } - gtk_widget_destroy(mkDialog); + gtk_widget_destroy(mkDialog); } static void Edit_Controls(GtkWidget* widget, gpointer data) { - GtkWidget *ecDialog; - GtkWidget *ecKey; - gchar *Key_Label; - int i; + GtkWidget *ecDialog; + GtkWidget *ecKey; + gchar *Key_Label; + int i; - memcpy(&Keypad_Temp, &keyboard_cfg, sizeof(keyboard_cfg)); + memcpy(&Keypad_Temp, &keyboard_cfg, sizeof(keyboard_cfg)); - ecDialog = gtk_dialog_new_with_buttons("Edit controls", - GTK_WINDOW(pWindow), - GTK_DIALOG_MODAL, - GTK_STOCK_OK,GTK_RESPONSE_OK, - GTK_STOCK_CANCEL,GTK_RESPONSE_CANCEL, - NULL); + ecDialog = gtk_dialog_new_with_buttons("Edit controls", + GTK_WINDOW(pWindow), + GTK_DIALOG_MODAL, + GTK_STOCK_OK,GTK_RESPONSE_OK, + GTK_STOCK_CANCEL,GTK_RESPONSE_CANCEL, + NULL); - for(i = 0; i < NB_KEYS; i++) { - Key_Label = g_strdup_printf("%s (%s)", key_names[i], gdk_keyval_name(Keypad_Temp[i])); - ecKey = gtk_button_new_with_label(Key_Label); - g_free(Key_Label); - g_signal_connect(G_OBJECT(ecKey), "clicked", G_CALLBACK(Modify_Key), GINT_TO_POINTER(i)); - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(ecDialog)->vbox), ecKey,TRUE, FALSE, 0); - } + for(i = 0; i < NB_KEYS; i++) { + Key_Label = g_strdup_printf("%s (%s)", key_names[i], gdk_keyval_name(Keypad_Temp[i])); + ecKey = gtk_button_new_with_label(Key_Label); + g_free(Key_Label); + g_signal_connect(G_OBJECT(ecKey), "clicked", G_CALLBACK(Modify_Key), GINT_TO_POINTER(i)); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(ecDialog)->vbox), ecKey,TRUE, FALSE, 0); + } - gtk_widget_show_all(GTK_DIALOG(ecDialog)->vbox); + gtk_widget_show_all(GTK_DIALOG(ecDialog)->vbox); - switch (gtk_dialog_run(GTK_DIALOG(ecDialog))) { - case GTK_RESPONSE_OK: - memcpy(&keyboard_cfg, &Keypad_Temp, sizeof(keyboard_cfg)); - case GTK_RESPONSE_CANCEL: - case GTK_RESPONSE_NONE: - break; - } - gtk_widget_destroy(ecDialog); + switch (gtk_dialog_run(GTK_DIALOG(ecDialog))) { + case GTK_RESPONSE_OK: + memcpy(&keyboard_cfg, &Keypad_Temp, sizeof(keyboard_cfg)); + case GTK_RESPONSE_CANCEL: + case GTK_RESPONSE_NONE: + break; + } + gtk_widget_destroy(ecDialog); } @@ -1136,13 +1145,13 @@ static void Edit_Controls(GtkWidget* widget, gpointer data) static void Modify_ScreenCoeff(GtkWidget* widget, gpointer data) { - guint Size = GPOINTER_TO_UINT(data); - static int ScreenCoeff_Size; + guint Size = GPOINTER_TO_UINT(data); + static int ScreenCoeff_Size; - gtk_drawing_area_size(GTK_DRAWING_AREA(pDrawingArea), 256 * Size, 384 * Size); - gtk_widget_set_usize (pDrawingArea, 256 * Size, 384 * Size); + gtk_drawing_area_size(GTK_DRAWING_AREA(pDrawingArea), 256 * Size, 384 * Size); + gtk_widget_set_usize (pDrawingArea, 256 * Size, 384 * Size); - ScreenCoeff_Size = Size; + ScreenCoeff_Size = Size; } #endif @@ -1150,100 +1159,100 @@ static void Modify_ScreenCoeff(GtkWidget* widget, gpointer data) static void Modify_Layer(GtkWidget* widget, gpointer data) { - guint Layer = GPOINTER_TO_UINT(data); - gboolean active; + guint Layer = GPOINTER_TO_UINT(data); + gboolean active; - if (!desmume_running()) - return; + if (!desmume_running()) + return; - active = gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget)); + active = gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget)); - switch (Layer) { - case MAIN_BG_0: - case MAIN_BG_1: - case MAIN_BG_2: - case MAIN_BG_3: - if(active == TRUE) { - if (!MainScreen.gpu->dispBG[Layer]) - GPU_addBack(MainScreen.gpu, Layer); - } else { - if (MainScreen.gpu->dispBG[Layer]) - GPU_remove(MainScreen.gpu, Layer); - } - break; - case MAIN_OBJ: - if(active == TRUE) { - if (!MainScreen.gpu->dispOBJ) - GPU_addBack(MainScreen.gpu, Layer); - } else { - if (MainScreen.gpu->dispOBJ) - GPU_remove(MainScreen.gpu, Layer); - } - break; - case SUB_BG_0: - case SUB_BG_1: - case SUB_BG_2: - case SUB_BG_3: - if(active == TRUE) { - if (!SubScreen.gpu->dispBG[Layer-SUB_BG_0]) - GPU_addBack(SubScreen.gpu, Layer-SUB_BG_0); - } else { - if (SubScreen.gpu->dispBG[Layer-SUB_BG_0]) - GPU_remove(SubScreen.gpu, Layer-SUB_BG_0); - } - break; - case SUB_OBJ: - if(active == TRUE) { - if (!SubScreen.gpu->dispOBJ) - GPU_addBack(SubScreen.gpu, Layer-SUB_BG_0); - } else { - if (SubScreen.gpu->dispOBJ) - GPU_remove(SubScreen.gpu, Layer-SUB_BG_0); - } - break; - default: - break; - } - LOG ("Changed %s to %d\n",Layer,gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget))); + switch (Layer) { + case MAIN_BG_0: + case MAIN_BG_1: + case MAIN_BG_2: + case MAIN_BG_3: + if(active == TRUE) { + if (!MainScreen.gpu->dispBG[Layer]) + GPU_addBack(MainScreen.gpu, Layer); + } else { + if (MainScreen.gpu->dispBG[Layer]) + GPU_remove(MainScreen.gpu, Layer); + } + break; + case MAIN_OBJ: + if(active == TRUE) { + if (!MainScreen.gpu->dispOBJ) + GPU_addBack(MainScreen.gpu, Layer); + } else { + if (MainScreen.gpu->dispOBJ) + GPU_remove(MainScreen.gpu, Layer); + } + break; + case SUB_BG_0: + case SUB_BG_1: + case SUB_BG_2: + case SUB_BG_3: + if(active == TRUE) { + if (!SubScreen.gpu->dispBG[Layer-SUB_BG_0]) + GPU_addBack(SubScreen.gpu, Layer-SUB_BG_0); + } else { + if (SubScreen.gpu->dispBG[Layer-SUB_BG_0]) + GPU_remove(SubScreen.gpu, Layer-SUB_BG_0); + } + break; + case SUB_OBJ: + if(active == TRUE) { + if (!SubScreen.gpu->dispOBJ) + GPU_addBack(SubScreen.gpu, Layer-SUB_BG_0); + } else { + if (SubScreen.gpu->dispOBJ) + GPU_remove(SubScreen.gpu, Layer-SUB_BG_0); + } + break; + default: + break; + } + LOG ("Changed %s to %d\n",Layer,gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget))); } /////////////////////////////// PRINTSCREEN ///////////////////////////////// static void Printscreen() { - GdkPixbuf *screenshot; - gchar *filename; - GError *error = NULL; - u8 *rgb; - static int seq = 0; + GdkPixbuf *screenshot; + gchar *filename; + GError *error = NULL; + u8 *rgb; + static int seq = 0; - rgb = (u8 *) malloc(SCREENS_PIXEL_SIZE*3); - if (!rgb) - return; + rgb = (u8 *) malloc(SCREENS_PIXEL_SIZE*3); + if (!rgb) + return; - gpu_screen_to_rgb(rgb, SCREENS_PIXEL_SIZE); - screenshot = gdk_pixbuf_new_from_data(rgb, - GDK_COLORSPACE_RGB, - FALSE, - 8, - 256, - 192*2, - 256*3, - NULL, - NULL); + gpu_screen_to_rgb(rgb, SCREENS_PIXEL_SIZE); + screenshot = gdk_pixbuf_new_from_data(rgb, + GDK_COLORSPACE_RGB, + FALSE, + 8, + 256, + 192*2, + 256*3, + NULL, + NULL); - filename = g_strdup_printf("./desmume-screenshot-%d.png", seq); - gdk_pixbuf_save(screenshot, filename, "png", &error, NULL); - if (error) { - g_error_free (error); - g_printerr("Failed to save %s", filename); - } else { - seq++; - } + filename = g_strdup_printf("./desmume-screenshot-%d.png", seq); + gdk_pixbuf_save(screenshot, filename, "png", &error, NULL); + if (error) { + g_error_free (error); + g_printerr("Failed to save %s", filename); + } else { + seq++; + } - free(rgb); - g_object_unref(screenshot); - g_free(filename); + free(rgb); + g_object_unref(screenshot); + g_free(filename); } /////////////////////////////// DS CONFIGURATION ////////////////////////////////// @@ -1254,157 +1263,149 @@ char FirmwareFile[256]; int LoadFirmware(const char *filename) { - int i; - u32 size; - FILE *f; + int i; + u32 size; + FILE *f; - strncpy(FirmwareFile, filename, ARRAY_SIZE(FirmwareFile)); + strncpy(FirmwareFile, filename, ARRAY_SIZE(FirmwareFile)); - f = fopen(filename, "rb"); - if(!f) return -1; + f = fopen(filename, "rb"); + if(!f) return -1; - fseek(f, 0, SEEK_END); - size = ftell(f); - fseek(f, 0, SEEK_SET); + fseek(f, 0, SEEK_END); + size = ftell(f); + fseek(f, 0, SEEK_SET); - if(size > MMU.spi7.fw.size) { fclose(f); return -1; } /* this must be a small file*/ + if(size > MMU.spi7.fw.size) { fclose(f); return -1; } /* this must be a small file*/ - i = fread(MMU.spi7.fw.data, size, 1, f); + i = fread(MMU.spi7.fw.data, size, 1, f); - fclose(f); + fclose(f); - return i; + return i; } int SelectFirmwareFile_Load(GtkWidget *w, gpointer data) { - GtkFileFilter *pFilter_nds, *pFilter_bin, *pFilter_any; - GtkWidget *pFileSelection; - GtkWidget *pParent; - gchar *sChemin; + GtkFileFilter *pFilter_nds, *pFilter_bin, *pFilter_any; + GtkWidget *pFileSelection; + GtkWidget *pParent; + gchar *sPath; - BOOL oldState = desmume_running(); - Pause(); + BOOL oldState = desmume_running(); + Pause(); - pParent = GTK_WIDGET(data); + pParent = GTK_WIDGET(data); - pFilter_nds = gtk_file_filter_new(); - gtk_file_filter_add_pattern(pFilter_nds, "*.nds"); - gtk_file_filter_set_name(pFilter_nds, "Nds binary (.nds)"); + pFilter_nds = gtk_file_filter_new(); + gtk_file_filter_add_pattern(pFilter_nds, "*.nds"); + gtk_file_filter_set_name(pFilter_nds, "Nds binary (.nds)"); - pFilter_bin = gtk_file_filter_new(); - gtk_file_filter_add_pattern(pFilter_bin, "*.bin"); - gtk_file_filter_set_name(pFilter_bin, "Binary file (.bin)"); + pFilter_bin = gtk_file_filter_new(); + gtk_file_filter_add_pattern(pFilter_bin, "*.bin"); + gtk_file_filter_set_name(pFilter_bin, "Binary file (.bin)"); - pFilter_any = gtk_file_filter_new(); - gtk_file_filter_add_pattern(pFilter_any, "*"); - gtk_file_filter_set_name(pFilter_any, "All files"); + pFilter_any = gtk_file_filter_new(); + gtk_file_filter_add_pattern(pFilter_any, "*"); + gtk_file_filter_set_name(pFilter_any, "All files"); - /* Creation de la fenetre de selection */ - pFileSelection = gtk_file_chooser_dialog_new("Load firmware...", - GTK_WINDOW(pParent), - GTK_FILE_CHOOSER_ACTION_OPEN, - GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, - GTK_STOCK_OPEN, GTK_RESPONSE_OK, - NULL); - /* On limite les actions a cette fenetre */ - gtk_window_set_modal(GTK_WINDOW(pFileSelection), TRUE); + pFileSelection = gtk_file_chooser_dialog_new("Load firmware...", + GTK_WINDOW(pParent), + GTK_FILE_CHOOSER_ACTION_OPEN, + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + GTK_STOCK_OPEN, GTK_RESPONSE_OK, + NULL); + gtk_window_set_modal(GTK_WINDOW(pFileSelection), TRUE); - gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(pFileSelection), pFilter_nds); - gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(pFileSelection), pFilter_bin); - gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(pFileSelection), pFilter_any); + gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(pFileSelection), pFilter_nds); + gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(pFileSelection), pFilter_bin); + gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(pFileSelection), pFilter_any); - if(FirmwareFile[0]) gtk_file_chooser_select_uri(GTK_FILE_CHOOSER(pFileSelection), FirmwareFile); + if(FirmwareFile[0]) gtk_file_chooser_select_uri(GTK_FILE_CHOOSER(pFileSelection), FirmwareFile); - /* Affichage fenetre */ - switch(gtk_dialog_run(GTK_DIALOG(pFileSelection))) { - case GTK_RESPONSE_OK: - /* Recuperation du chemin */ - sChemin = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(pFileSelection)); - if(LoadFirmware((const char*)sChemin) < 0) { - GtkWidget *pDialog = gtk_message_dialog_new(GTK_WINDOW(pFileSelection), GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, "Unable to load :\n%s", sChemin); - gtk_dialog_run(GTK_DIALOG(pDialog)); - gtk_widget_destroy(pDialog); - } else { - GtkWidget *pDialog = gtk_message_dialog_new(GTK_WINDOW(pFileSelection), GTK_DIALOG_MODAL, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, "Selected firmware :\n%s", sChemin); - gtk_dialog_run(GTK_DIALOG(pDialog)); - gtk_widget_destroy(pDialog); - } + switch(gtk_dialog_run(GTK_DIALOG(pFileSelection))) { + case GTK_RESPONSE_OK: + sPath = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(pFileSelection)); + if(LoadFirmware((const char*)sPath) < 0) { + GtkWidget *pDialog = gtk_message_dialog_new(GTK_WINDOW(pFileSelection), GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, "Unable to load :\n%s", sPath); + gtk_dialog_run(GTK_DIALOG(pDialog)); + gtk_widget_destroy(pDialog); + } else { + GtkWidget *pDialog = gtk_message_dialog_new(GTK_WINDOW(pFileSelection), GTK_DIALOG_MODAL, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, "Selected firmware :\n%s", sPath); + gtk_dialog_run(GTK_DIALOG(pDialog)); + gtk_widget_destroy(pDialog); + } - g_free(sChemin); - break; - default: - break; - } - gtk_widget_destroy(pFileSelection); + g_free(sPath); + break; + default: + break; + } + gtk_widget_destroy(pFileSelection); - if(oldState) Launch(); + if(oldState) Launch(); } int SelectFirmwareFile_Load(GtkWidget *w, gpointer data) { - GtkFileFilter *pFilter_nds, *pFilter_bin, *pFilter_any; - GtkWidget *pFileSelection; - GtkWidget *pParent; - gchar *sChemin; + GtkFileFilter *pFilter_nds, *pFilter_bin, *pFilter_any; + GtkWidget *pFileSelection; + GtkWidget *pParent; + gchar *sPath; - BOOL oldState = desmume_running(); - Pause(); + BOOL oldState = desmume_running(); + Pause(); - pParent = GTK_WIDGET(data); + pParent = GTK_WIDGET(data); - pFilter_nds = gtk_file_filter_new(); - gtk_file_filter_add_pattern(pFilter_nds, "*.nds"); - gtk_file_filter_set_name(pFilter_nds, "Nds binary (.nds)"); + pFilter_nds = gtk_file_filter_new(); + gtk_file_filter_add_pattern(pFilter_nds, "*.nds"); + gtk_file_filter_set_name(pFilter_nds, "Nds binary (.nds)"); - pFilter_bin = gtk_file_filter_new(); - gtk_file_filter_add_pattern(pFilter_bin, "*.bin"); - gtk_file_filter_set_name(pFilter_bin, "Binary file (.bin)"); + pFilter_bin = gtk_file_filter_new(); + gtk_file_filter_add_pattern(pFilter_bin, "*.bin"); + gtk_file_filter_set_name(pFilter_bin, "Binary file (.bin)"); - pFilter_any = gtk_file_filter_new(); - gtk_file_filter_add_pattern(pFilter_any, "*"); - gtk_file_filter_set_name(pFilter_any, "All files"); + pFilter_any = gtk_file_filter_new(); + gtk_file_filter_add_pattern(pFilter_any, "*"); + gtk_file_filter_set_name(pFilter_any, "All files"); - /* Creation de la fenetre de selection */ - pFileSelection = gtk_file_chooser_dialog_new("Save firmware...", - GTK_WINDOW(pParent), - GTK_FILE_CHOOSER_ACTION_OPEN, - GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, - GTK_STOCK_SAVE, GTK_RESPONSE_OK, - NULL); - /* On limite les actions a cette fenetre */ - gtk_window_set_modal(GTK_WINDOW(pFileSelection), TRUE); + pFileSelection = gtk_file_chooser_dialog_new("Save firmware...", + GTK_WINDOW(pParent), + GTK_FILE_CHOOSER_ACTION_OPEN, + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + GTK_STOCK_SAVE, GTK_RESPONSE_OK, + NULL); + gtk_window_set_modal(GTK_WINDOW(pFileSelection), TRUE); - gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(pFileSelection), pFilter_nds); - gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(pFileSelection), pFilter_bin); - gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(pFileSelection), pFilter_any); + gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(pFileSelection), pFilter_nds); + gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(pFileSelection), pFilter_bin); + gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(pFileSelection), pFilter_any); - if(FirmwareFile[0]) gtk_file_chooser_select_uri(GTK_FILE_CHOOSER(pFileSelection), FirmwareFile); + if(FirmwareFile[0]) gtk_file_chooser_select_uri(GTK_FILE_CHOOSER(pFileSelection), FirmwareFile); - /* Affichage fenetre */ - switch(gtk_dialog_run(GTK_DIALOG(pFileSelection))) { - case GTK_RESPONSE_OK: - /* Recuperation du chemin */ - sChemin = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(pFileSelection)); - if(LoadFirmware((const char*)sChemin) < 0) { - GtkWidget *pDialog = gtk_message_dialog_new(GTK_WINDOW(pFileSelection), GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, "Unable to load :\n%s", sChemin); - gtk_dialog_run(GTK_DIALOG(pDialog)); - gtk_widget_destroy(pDialog); - } else { - GtkWidget *pDialog = gtk_message_dialog_new(GTK_WINDOW(pFileSelection), GTK_DIALOG_MODAL, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, "Selected firmware :\n%s", sChemin); - gtk_dialog_run(GTK_DIALOG(pDialog)); - gtk_widget_destroy(pDialog); - } + switch(gtk_dialog_run(GTK_DIALOG(pFileSelection))) { + case GTK_RESPONSE_OK: + sPath = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(pFileSelection)); + if(LoadFirmware((const char*)sPath) < 0) { + GtkWidget *pDialog = gtk_message_dialog_new(GTK_WINDOW(pFileSelection), GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, "Unable to load :\n%s", sPath); + gtk_dialog_run(GTK_DIALOG(pDialog)); + gtk_widget_destroy(pDialog); + } else { + GtkWidget *pDialog = gtk_message_dialog_new(GTK_WINDOW(pFileSelection), GTK_DIALOG_MODAL, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, "Selected firmware :\n%s", sPath); + gtk_dialog_run(GTK_DIALOG(pDialog)); + gtk_widget_destroy(pDialog); + } - g_free(sChemin); - break; - default: - break; - } - gtk_widget_destroy(pFileSelection); + g_free(sPath); + break; + default: + break; + } + gtk_widget_destroy(pFileSelection); - if(oldState) Launch(); + if(oldState) Launch(); } @@ -1416,7 +1417,7 @@ int SelectFirmwareFile_Load(GtkWidget *w, gpointer data) static void Modify_Frameskip(GtkWidget *widget, gpointer data) { - Frameskip = GPOINTER_TO_INT(data); + Frameskip = GPOINTER_TO_INT(data); } /////////////////////////////// TOOLS MANAGEMENT /////////////////////////////// @@ -1430,64 +1431,64 @@ BOOL *dTools_running; static void Start_dTool(GtkWidget *widget, gpointer data) { - int tool = GPOINTER_TO_INT(data); + int tool = GPOINTER_TO_INT(data); - if(dTools_running == NULL || dTools_running[tool]) - return; + if(dTools_running == NULL || dTools_running[tool]) + return; - dTools_list[tool]->open(tool); - dTools_running[tool] = TRUE; + dTools_list[tool]->open(tool); + dTools_running[tool] = TRUE; } void dTool_CloseCallback(int tool) { - if (dTools_running == NULL) - return; + if (dTools_running == NULL) + return; - dTools_running[tool] = FALSE; + dTools_running[tool] = FALSE; } /////////////////////////////// MAIN EMULATOR LOOP /////////////////////////////// static inline void _updateDTools() { - if (dTools_running == NULL) - return; + if (dTools_running == NULL) + return; - for(int i = 0; i < dTools_list_size; i++) { - if(dTools_running[i]) { dTools_list[i]->update(); } - } + for(int i = 0; i < dTools_list_size; i++) { + if(dTools_running[i]) { dTools_list[i]->update(); } + } } gboolean EmuLoop(gpointer data) { - static Uint32 fps, fps_SecStart, fps_FrameCount; - unsigned int i; - gchar *Title; + static Uint32 fps, fps_SecStart, fps_FrameCount; + unsigned int i; + gchar *Title; - if(desmume_running()) { /* Si on est en train d'executer le programme ... */ - static int limiter_frame_counter = 0; - fps_FrameCount += Frameskip + 1; - if(!fps_SecStart) fps_SecStart = SDL_GetTicks(); - if(SDL_GetTicks() - fps_SecStart >= 1000) { - fps_SecStart = SDL_GetTicks(); - fps = fps_FrameCount; - fps_FrameCount = 0; + if(desmume_running()) { /* Si on est en train d'executer le programme ... */ + static int limiter_frame_counter = 0; + fps_FrameCount += Frameskip + 1; + if(!fps_SecStart) fps_SecStart = SDL_GetTicks(); + if(SDL_GetTicks() - fps_SecStart >= 1000) { + fps_SecStart = SDL_GetTicks(); + fps = fps_FrameCount; + fps_FrameCount = 0; - Title = g_strdup_printf("Desmume - %dfps", fps); - gtk_window_set_title(GTK_WINDOW(pWindow), Title); - g_free(Title); - } + Title = g_strdup_printf("Desmume - %dfps", fps); + gtk_window_set_title(GTK_WINDOW(pWindow), Title); + g_free(Title); + } - desmume_cycle(); /* Emule ! */ - NDS_SkipFrame(true); - for(i = 0; i < Frameskip; i++) { - desmume_cycle(); - } - NDS_SkipFrame(false); + desmume_cycle(); /* Emule ! */ + NDS_SkipFrame(true); + for(i = 0; i < Frameskip; i++) { + desmume_cycle(); + } + NDS_SkipFrame(false); - _updateDTools(); - gtk_widget_queue_draw( nds_screen_widget); + _updateDTools(); + gtk_widget_queue_draw( nds_screen_widget); if ( !gtk_fps_limiter_disabled) { limiter_frame_counter += 1; @@ -1497,14 +1498,14 @@ gboolean EmuLoop(gpointer data) /* wait for the timer to expire */ SDL_SemWait( fps_limiter_semaphore); } - } + } - return TRUE; - } + return TRUE; + } - regMainLoop = FALSE; - return FALSE; + regMainLoop = FALSE; + return FALSE; } @@ -1537,260 +1538,260 @@ static void dui_set_accel_group(gpointer action, gpointer group) { static void desmume_gtk_menu_file (GtkWidget *pMenuBar) { - GtkWidget *pMenu, *pMenuItem; + GtkWidget *pMenu, *pMenuItem; - pMenu = gtk_menu_new(); - gtk_container_add(GTK_CONTAINER(pMenu), gtk_action_create_menu_item(gtk_action_group_get_action(action_group, "open"))); - gtk_container_add(GTK_CONTAINER(pMenu), gtk_action_create_menu_item(gtk_action_group_get_action(action_group, "printscreen"))); - gtk_container_add(GTK_CONTAINER(pMenu), gtk_action_create_menu_item(gtk_action_group_get_action(action_group, "quit"))); + pMenu = gtk_menu_new(); + gtk_container_add(GTK_CONTAINER(pMenu), gtk_action_create_menu_item(gtk_action_group_get_action(action_group, "open"))); + gtk_container_add(GTK_CONTAINER(pMenu), gtk_action_create_menu_item(gtk_action_group_get_action(action_group, "printscreen"))); + gtk_container_add(GTK_CONTAINER(pMenu), gtk_action_create_menu_item(gtk_action_group_get_action(action_group, "quit"))); - pMenuItem = gtk_menu_item_new_with_label("File"); - gtk_menu_item_set_submenu(GTK_MENU_ITEM(pMenuItem), pMenu); - gtk_menu_shell_append(GTK_MENU_SHELL(pMenuBar), pMenuItem); + pMenuItem = gtk_menu_item_new_with_label("File"); + gtk_menu_item_set_submenu(GTK_MENU_ITEM(pMenuItem), pMenu); + gtk_menu_shell_append(GTK_MENU_SHELL(pMenuBar), pMenuItem); } static void changesavetype(GtkCheckMenuItem *checkmenuitem, gpointer type) { - if (gtk_check_menu_item_get_active(checkmenuitem)) - mmu_select_savetype(GPOINTER_TO_INT(type), &backupmemorytype, &backupmemorysize); + if (gtk_check_menu_item_get_active(checkmenuitem)) + mmu_select_savetype(GPOINTER_TO_INT(type), &backupmemorytype, &backupmemorysize); } static void desmume_gtk_menu_emulation_saves (GtkWidget *pMenu) { - GtkWidget *pMenuItem, *pSubmenu, *item; - GSList * list; - const char * types[] = { - "Autodetect", - "EEPROM 4kbit", - "EEPROM 64kbit", - "EEPROM 512kbit", - "FRAM 256kbit", - "FLASH 2mbit", - "FLASH 4mbit", - NULL - }; + GtkWidget *pMenuItem, *pSubmenu, *item; + GSList * list; + const char * types[] = { + "Autodetect", + "EEPROM 4kbit", + "EEPROM 64kbit", + "EEPROM 512kbit", + "FRAM 256kbit", + "FLASH 2mbit", + "FLASH 4mbit", + NULL + }; - pSubmenu = gtk_menu_new(); - pMenuItem = gtk_menu_item_new_with_label("Saves"); - gtk_menu_item_set_submenu(GTK_MENU_ITEM(pMenuItem), pSubmenu); - gtk_menu_shell_append(GTK_MENU_SHELL(pMenu), pMenuItem); + pSubmenu = gtk_menu_new(); + pMenuItem = gtk_menu_item_new_with_label("Saves"); + gtk_menu_item_set_submenu(GTK_MENU_ITEM(pMenuItem), pSubmenu); + gtk_menu_shell_append(GTK_MENU_SHELL(pMenu), pMenuItem); - list = NULL; - for (gint i = 0; types[i] != NULL; i++) - { - item = gtk_radio_menu_item_new_with_label(list, types[i]); - g_signal_connect(item, "toggled", G_CALLBACK(changesavetype), GINT_TO_POINTER(i)); - list = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(item)); - gtk_menu_shell_append(GTK_MENU_SHELL(pSubmenu), item); - } + list = NULL; + for (gint i = 0; types[i] != NULL; i++) + { + item = gtk_radio_menu_item_new_with_label(list, types[i]); + g_signal_connect(item, "toggled", G_CALLBACK(changesavetype), GINT_TO_POINTER(i)); + list = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(item)); + gtk_menu_shell_append(GTK_MENU_SHELL(pSubmenu), item); + } } static void desmume_gtk_menu_emulation_frameskip (GtkWidget *pMenu) { - GtkWidget *mFrameskip_Radio[MAX_FRAMESKIP]; - GtkWidget *pMenuItem, *pSubmenu; - gchar *buf; - guint i; + GtkWidget *mFrameskip_Radio[MAX_FRAMESKIP]; + GtkWidget *pMenuItem, *pSubmenu; + gchar *buf; + guint i; - pSubmenu = gtk_menu_new(); - pMenuItem = gtk_menu_item_new_with_label("Frameskip"); - gtk_menu_item_set_submenu(GTK_MENU_ITEM(pMenuItem), pSubmenu); - gtk_menu_shell_append(GTK_MENU_SHELL(pMenu), pMenuItem); + pSubmenu = gtk_menu_new(); + pMenuItem = gtk_menu_item_new_with_label("Frameskip"); + gtk_menu_item_set_submenu(GTK_MENU_ITEM(pMenuItem), pSubmenu); + gtk_menu_shell_append(GTK_MENU_SHELL(pMenu), pMenuItem); - for(i = 0; i < MAX_FRAMESKIP; i++) { - buf = g_strdup_printf("%d", i); - if (i>0) - mFrameskip_Radio[i] = gtk_radio_menu_item_new_with_label_from_widget(GTK_RADIO_MENU_ITEM(mFrameskip_Radio[i-1]), buf); - else - mFrameskip_Radio[i] = gtk_radio_menu_item_new_with_label(NULL, buf); - g_free(buf); - g_signal_connect(G_OBJECT(mFrameskip_Radio[i]), "activate", G_CALLBACK(Modify_Frameskip), GINT_TO_POINTER(i)); - gtk_menu_shell_append(GTK_MENU_SHELL(pSubmenu), mFrameskip_Radio[i]); - } - gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(mFrameskip_Radio[0]), TRUE); + for(i = 0; i < MAX_FRAMESKIP; i++) { + buf = g_strdup_printf("%d", i); + if (i>0) + mFrameskip_Radio[i] = gtk_radio_menu_item_new_with_label_from_widget(GTK_RADIO_MENU_ITEM(mFrameskip_Radio[i-1]), buf); + else + mFrameskip_Radio[i] = gtk_radio_menu_item_new_with_label(NULL, buf); + g_free(buf); + g_signal_connect(G_OBJECT(mFrameskip_Radio[i]), "activate", G_CALLBACK(Modify_Frameskip), GINT_TO_POINTER(i)); + gtk_menu_shell_append(GTK_MENU_SHELL(pSubmenu), mFrameskip_Radio[i]); + } + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(mFrameskip_Radio[0]), TRUE); } #ifdef BROKEN_SCREENSIZE static void desmume_gtk_menu_emulation_display_size (GtkWidget *pMenu, gboolean opengl) { - GtkWidget *pMenuItem, *pSubmenu; - GtkWidget *mSize_Radio[MAX_SCREENCOEFF]; - gchar *buf; - guint i; + GtkWidget *pMenuItem, *pSubmenu; + GtkWidget *mSize_Radio[MAX_SCREENCOEFF]; + gchar *buf; + guint i; - /* FIXME: this does not work and there's a lot of code that assume the default screen size, drawing function included */ - if (!opengl) { - pSubmenu = gtk_menu_new(); - pMenuItem = gtk_menu_item_new_with_label("Display size"); - gtk_menu_item_set_submenu(GTK_MENU_ITEM(pMenuItem), pSubmenu); - gtk_menu_shell_append(GTK_MENU_SHELL(pMenu), pMenuItem); + /* FIXME: this does not work and there's a lot of code that assume the default screen size, drawing function included */ + if (!opengl) { + pSubmenu = gtk_menu_new(); + pMenuItem = gtk_menu_item_new_with_label("Display size"); + gtk_menu_item_set_submenu(GTK_MENU_ITEM(pMenuItem), pSubmenu); + gtk_menu_shell_append(GTK_MENU_SHELL(pMenu), pMenuItem); - for(i = 1; i < MAX_SCREENCOEFF; i++) { - buf = g_strdup_printf("x%d", i); - if (i>1) - mSize_Radio[i] = gtk_radio_menu_item_new_with_label_from_widget(GTK_RADIO_MENU_ITEM(mSize_Radio[i-1]), buf); - else - mSize_Radio[i] = gtk_radio_menu_item_new_with_label(NULL, buf); - g_free(buf); - g_signal_connect(G_OBJECT(mSize_Radio[i]), "activate", G_CALLBACK(Modify_ScreenCoeff), GUINT_TO_POINTER(i)); - gtk_menu_shell_append(GTK_MENU_SHELL(pSubmenu), mSize_Radio[i]); - } - } + for(i = 1; i < MAX_SCREENCOEFF; i++) { + buf = g_strdup_printf("x%d", i); + if (i>1) + mSize_Radio[i] = gtk_radio_menu_item_new_with_label_from_widget(GTK_RADIO_MENU_ITEM(mSize_Radio[i-1]), buf); + else + mSize_Radio[i] = gtk_radio_menu_item_new_with_label(NULL, buf); + g_free(buf); + g_signal_connect(G_OBJECT(mSize_Radio[i]), "activate", G_CALLBACK(Modify_ScreenCoeff), GUINT_TO_POINTER(i)); + gtk_menu_shell_append(GTK_MENU_SHELL(pSubmenu), mSize_Radio[i]); + } + } } #endif static void desmume_gtk_menu_emulation_layers (GtkWidget *pMenu, gboolean opengl) { - GtkWidget *pMenuItem, *pSubmenu; - GtkWidget *mLayers_Radio[10]; - const char *Layers_Menu[10] = { - "Main BG 0", - "Main BG 1", - "Main BG 2", - "Main BG 3", - "Main OBJ", - "SUB BG 0", - "SUB BG 1", - "SUB BG 2", - "SUB BG 3", - "SUB OBJ" - }; - guint i; + GtkWidget *pMenuItem, *pSubmenu; + GtkWidget *mLayers_Radio[10]; + const char *Layers_Menu[10] = { + "Main BG 0", + "Main BG 1", + "Main BG 2", + "Main BG 3", + "Main OBJ", + "SUB BG 0", + "SUB BG 1", + "SUB BG 2", + "SUB BG 3", + "SUB OBJ" + }; + guint i; - pSubmenu = gtk_menu_new(); - pMenuItem = gtk_menu_item_new_with_label("Layers"); - gtk_menu_item_set_submenu(GTK_MENU_ITEM(pMenuItem), pSubmenu); - gtk_menu_shell_append(GTK_MENU_SHELL(pMenu), pMenuItem); + pSubmenu = gtk_menu_new(); + pMenuItem = gtk_menu_item_new_with_label("Layers"); + gtk_menu_item_set_submenu(GTK_MENU_ITEM(pMenuItem), pSubmenu); + gtk_menu_shell_append(GTK_MENU_SHELL(pMenu), pMenuItem); - for(i = 0; i < 10; i++) { - mLayers_Radio[i] = gtk_check_menu_item_new_with_label(Layers_Menu[i]); - g_signal_connect(G_OBJECT(mLayers_Radio[i]), "activate", G_CALLBACK(Modify_Layer), GUINT_TO_POINTER(i)); - gtk_menu_shell_append(GTK_MENU_SHELL(pSubmenu), mLayers_Radio[i]); - gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(mLayers_Radio[i]), TRUE); - } + for(i = 0; i < 10; i++) { + mLayers_Radio[i] = gtk_check_menu_item_new_with_label(Layers_Menu[i]); + g_signal_connect(G_OBJECT(mLayers_Radio[i]), "activate", G_CALLBACK(Modify_Layer), GUINT_TO_POINTER(i)); + gtk_menu_shell_append(GTK_MENU_SHELL(pSubmenu), mLayers_Radio[i]); + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(mLayers_Radio[i]), TRUE); + } } static void desmume_gtk_disable_audio (GtkWidget *widget, gpointer data) { - if (gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget)) == TRUE) { - SPU_ChangeSoundCore(SNDCORE_SDL, 735 * 4); - } else { - SPU_ChangeSoundCore(0, 0); - } + if (gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget)) == TRUE) { + SPU_ChangeSoundCore(SNDCORE_SDL, 735 * 4); + } else { + SPU_ChangeSoundCore(0, 0); + } } static void desmume_gtk_menu_emulation_disable_audio (GtkWidget *pMenu) { - GtkWidget *pMenuItem; + GtkWidget *pMenuItem; - pMenuItem = gtk_check_menu_item_new_with_label("Enable Audio"); - g_signal_connect(G_OBJECT(pMenuItem), "toggled", G_CALLBACK(desmume_gtk_disable_audio), NULL); - gtk_menu_shell_append(GTK_MENU_SHELL(pMenu), pMenuItem); - gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(pMenuItem), TRUE); + pMenuItem = gtk_check_menu_item_new_with_label("Enable Audio"); + g_signal_connect(G_OBJECT(pMenuItem), "toggled", G_CALLBACK(desmume_gtk_disable_audio), NULL); + gtk_menu_shell_append(GTK_MENU_SHELL(pMenu), pMenuItem); + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(pMenuItem), TRUE); } static void desmume_gtk_menu_emulation (GtkWidget *pMenuBar, gboolean opengl) { - GtkWidget *pMenu, *pMenuItem; + GtkWidget *pMenu, *pMenuItem; - pMenu = gtk_menu_new(); - pMenuItem = gtk_menu_item_new_with_label("Emulation"); - gtk_menu_item_set_submenu(GTK_MENU_ITEM(pMenuItem), pMenu); - gtk_menu_shell_append(GTK_MENU_SHELL(pMenuBar), pMenuItem); + pMenu = gtk_menu_new(); + pMenuItem = gtk_menu_item_new_with_label("Emulation"); + gtk_menu_item_set_submenu(GTK_MENU_ITEM(pMenuItem), pMenu); + gtk_menu_shell_append(GTK_MENU_SHELL(pMenuBar), pMenuItem); - gtk_container_add(GTK_CONTAINER(pMenu), gtk_action_create_menu_item(gtk_action_group_get_action(action_group, "run"))); - gtk_container_add(GTK_CONTAINER(pMenu), gtk_action_create_menu_item(gtk_action_group_get_action(action_group, "pause"))); - gtk_container_add(GTK_CONTAINER(pMenu), gtk_action_create_menu_item(gtk_action_group_get_action(action_group, "reset"))); + gtk_container_add(GTK_CONTAINER(pMenu), gtk_action_create_menu_item(gtk_action_group_get_action(action_group, "run"))); + gtk_container_add(GTK_CONTAINER(pMenu), gtk_action_create_menu_item(gtk_action_group_get_action(action_group, "pause"))); + gtk_container_add(GTK_CONTAINER(pMenu), gtk_action_create_menu_item(gtk_action_group_get_action(action_group, "reset"))); - desmume_gtk_menu_emulation_disable_audio(pMenu); - desmume_gtk_menu_emulation_frameskip(pMenu); - desmume_gtk_menu_emulation_saves(pMenu); - desmume_gtk_menu_emulation_layers(pMenu, opengl); + desmume_gtk_menu_emulation_disable_audio(pMenu); + desmume_gtk_menu_emulation_frameskip(pMenu); + desmume_gtk_menu_emulation_saves(pMenu); + desmume_gtk_menu_emulation_layers(pMenu, opengl); #ifdef BROKEN_SCREENSIZE - desmume_gtk_menu_emulation_display_size(pMenu, opengl); + desmume_gtk_menu_emulation_display_size(pMenu, opengl); #endif } static void desmume_gtk_menu_config (GtkWidget *pMenuBar) { - GtkWidget *pMenu, *pMenuItem; - - pMenu = gtk_menu_new(); - pMenuItem = gtk_menu_item_new_with_label("Config"); - gtk_menu_item_set_submenu(GTK_MENU_ITEM(pMenuItem), pMenu); - gtk_menu_shell_append(GTK_MENU_SHELL(pMenuBar), pMenuItem); + GtkWidget *pMenu, *pMenuItem; + + pMenu = gtk_menu_new(); + pMenuItem = gtk_menu_item_new_with_label("Config"); + gtk_menu_item_set_submenu(GTK_MENU_ITEM(pMenuItem), pMenu); + gtk_menu_shell_append(GTK_MENU_SHELL(pMenuBar), pMenuItem); - pMenuItem = gtk_menu_item_new_with_label("Edit controls"); - g_signal_connect(G_OBJECT(pMenuItem), "activate", G_CALLBACK(Edit_Controls), (GtkWidget*) pWindow); - gtk_menu_shell_append(GTK_MENU_SHELL(pMenu), pMenuItem); + pMenuItem = gtk_menu_item_new_with_label("Edit controls"); + g_signal_connect(G_OBJECT(pMenuItem), "activate", G_CALLBACK(Edit_Controls), (GtkWidget*) pWindow); + gtk_menu_shell_append(GTK_MENU_SHELL(pMenu), pMenuItem); #if 0 - GtkWidget *pSubMenu; - pSubmenu = gtk_menu_new(); - pMenuItem = gtk_menu_item_new_with_label("Firmware"); - gtk_menu_item_set_submenu(GTK_MENU_ITEM(pMenuItem), pSubmenu); - gtk_menu_shell_append(GTK_MENU_SHELL(pMenu), pMenuItem); + GtkWidget *pSubMenu; + pSubmenu = gtk_menu_new(); + pMenuItem = gtk_menu_item_new_with_label("Firmware"); + gtk_menu_item_set_submenu(GTK_MENU_ITEM(pMenuItem), pSubmenu); + gtk_menu_shell_append(GTK_MENU_SHELL(pMenu), pMenuItem); - pMenuItem = gtk_menu_item_new_with_label("Select..."); - g_signal_connect(G_OBJECT(pMenuItem), "activate", G_CALLBACK(SelectFirmwareFile), (gpointer)0); - gtk_menu_shell_append(GTK_MENU_SHELL(pSubmenu), pMenuItem); + pMenuItem = gtk_menu_item_new_with_label("Select..."); + g_signal_connect(G_OBJECT(pMenuItem), "activate", G_CALLBACK(SelectFirmwareFile), (gpointer)0); + gtk_menu_shell_append(GTK_MENU_SHELL(pSubmenu), pMenuItem); #endif } static void desmume_gtk_menu_tools (GtkWidget *pMenuBar) { - GtkWidget *pMenu, *pMenuItem; - gint i; + GtkWidget *pMenu, *pMenuItem; + gint i; - pMenu = gtk_menu_new(); - for(i = 0; i < dTools_list_size; i++) { - pMenuItem = gtk_menu_item_new_with_label(dTools_list[i]->name); - g_signal_connect(G_OBJECT(pMenuItem), "activate", G_CALLBACK(Start_dTool), GINT_TO_POINTER(i)); - gtk_menu_shell_append(GTK_MENU_SHELL(pMenu), pMenuItem); - } + pMenu = gtk_menu_new(); + for(i = 0; i < dTools_list_size; i++) { + pMenuItem = gtk_menu_item_new_with_label(dTools_list[i]->name); + g_signal_connect(G_OBJECT(pMenuItem), "activate", G_CALLBACK(Start_dTool), GINT_TO_POINTER(i)); + gtk_menu_shell_append(GTK_MENU_SHELL(pMenu), pMenuItem); + } - pMenuItem = gtk_menu_item_new_with_label("Tools"); - gtk_menu_item_set_submenu(GTK_MENU_ITEM(pMenuItem), pMenu); - gtk_menu_shell_append(GTK_MENU_SHELL(pMenuBar), pMenuItem); + pMenuItem = gtk_menu_item_new_with_label("Tools"); + gtk_menu_item_set_submenu(GTK_MENU_ITEM(pMenuItem), pMenu); + gtk_menu_shell_append(GTK_MENU_SHELL(pMenuBar), pMenuItem); } static void desmume_gtk_menu_help (GtkWidget *pMenuBar) { - GtkWidget *pMenu, *pMenuItem; + GtkWidget *pMenu, *pMenuItem; - pMenu = gtk_menu_new(); - pMenuItem = gtk_image_menu_item_new_from_stock(GTK_STOCK_ABOUT,NULL); - g_signal_connect(G_OBJECT(pMenuItem), "activate", G_CALLBACK(About), (GtkWidget*) pWindow); - gtk_menu_shell_append(GTK_MENU_SHELL(pMenu), pMenuItem); + pMenu = gtk_menu_new(); + pMenuItem = gtk_image_menu_item_new_from_stock(GTK_STOCK_ABOUT,NULL); + g_signal_connect(G_OBJECT(pMenuItem), "activate", G_CALLBACK(About), (GtkWidget*) pWindow); + gtk_menu_shell_append(GTK_MENU_SHELL(pMenu), pMenuItem); - pMenuItem = gtk_menu_item_new_with_label("Help"); - gtk_menu_item_set_submenu(GTK_MENU_ITEM(pMenuItem), pMenu); - gtk_menu_shell_append(GTK_MENU_SHELL(pMenuBar), pMenuItem); + pMenuItem = gtk_menu_item_new_with_label("Help"); + gtk_menu_item_set_submenu(GTK_MENU_ITEM(pMenuItem), pMenu); + gtk_menu_shell_append(GTK_MENU_SHELL(pMenuBar), pMenuItem); } static void desmume_gtk_toolbar (GtkWidget *pVBox) { - GtkWidget *pToolbar; - - pToolbar = gtk_toolbar_new(); - gtk_box_pack_start(GTK_BOX(pVBox), pToolbar, FALSE, FALSE, 0); + GtkWidget *pToolbar; + + pToolbar = gtk_toolbar_new(); + gtk_box_pack_start(GTK_BOX(pVBox), pToolbar, FALSE, FALSE, 0); - gtk_toolbar_insert(GTK_TOOLBAR(pToolbar), GTK_TOOL_ITEM(gtk_action_create_tool_item(gtk_action_group_get_action(action_group, "open"))), -1); - gtk_toolbar_insert(GTK_TOOLBAR(pToolbar), GTK_TOOL_ITEM(gtk_action_create_tool_item(gtk_action_group_get_action(action_group, "run"))), -1); - gtk_toolbar_insert(GTK_TOOLBAR(pToolbar), GTK_TOOL_ITEM(gtk_action_create_tool_item(gtk_action_group_get_action(action_group, "pause"))), -1); - gtk_toolbar_insert(GTK_TOOLBAR(pToolbar), GTK_TOOL_ITEM(gtk_action_create_tool_item(gtk_action_group_get_action(action_group, "quit"))), -1); + gtk_toolbar_insert(GTK_TOOLBAR(pToolbar), GTK_TOOL_ITEM(gtk_action_create_tool_item(gtk_action_group_get_action(action_group, "open"))), -1); + gtk_toolbar_insert(GTK_TOOLBAR(pToolbar), GTK_TOOL_ITEM(gtk_action_create_tool_item(gtk_action_group_get_action(action_group, "run"))), -1); + gtk_toolbar_insert(GTK_TOOLBAR(pToolbar), GTK_TOOL_ITEM(gtk_action_create_tool_item(gtk_action_group_get_action(action_group, "pause"))), -1); + gtk_toolbar_insert(GTK_TOOLBAR(pToolbar), GTK_TOOL_ITEM(gtk_action_create_tool_item(gtk_action_group_get_action(action_group, "quit"))), -1); } static int common_gtk_main( struct configured_features *my_config) { - SDL_TimerID limiter_timer = NULL; - gchar *config_file; + SDL_TimerID limiter_timer = NULL; + gchar *config_file; - GtkAccelGroup * accel_group; - GtkWidget *pVBox; - GtkWidget *pMenuBar; - gint pStatusBar_Ctx; + GtkAccelGroup * accel_group; + GtkWidget *pVBox; + GtkWidget *pMenuBar; + gint pStatusBar_Ctx; #ifdef GTKGLEXT_AVAILABLE GdkGLConfig *glconfig; @@ -1863,12 +1864,12 @@ common_gtk_main( struct configured_features *my_config) #endif /* FIXME: SDL_INIT_VIDEO is needed for joystick support to work!? Perhaps it needs a "window" to catch events...? */ - if(SDL_Init(SDL_INIT_TIMER|SDL_INIT_VIDEO) == -1) { + if(SDL_Init(SDL_INIT_TIMER|SDL_INIT_VIDEO) == -1) { g_printerr("Error trying to initialize SDL: %s\n", SDL_GetError()); return 1; } - desmume_init( arm9_memio, &arm9_ctrl_iface, + desmume_init( arm9_memio, &arm9_ctrl_iface, arm7_memio, &arm7_ctrl_iface, my_config->disable_sound); @@ -1892,56 +1893,56 @@ common_gtk_main( struct configured_features *my_config) /* Initialize joysticks */ if(!init_joy()) return 1; - dTools_running = (BOOL*)malloc(sizeof(BOOL) * dTools_list_size); - if (dTools_running != NULL) - memset(dTools_running, FALSE, sizeof(BOOL) * dTools_list_size); + dTools_running = (BOOL*)malloc(sizeof(BOOL) * dTools_list_size); + if (dTools_running != NULL) + memset(dTools_running, FALSE, sizeof(BOOL) * dTools_list_size); - config_file = g_build_filename(g_get_home_dir(), ".desmume.ini", NULL); - Read_ConfigFile(config_file); + config_file = g_build_filename(g_get_home_dir(), ".desmume.ini", NULL); + Read_ConfigFile(config_file); - /* Creation de la fenetre */ - pWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL); - gtk_window_set_title(GTK_WINDOW(pWindow), "Desmume"); + /* Create the window */ + pWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL); + gtk_window_set_title(GTK_WINDOW(pWindow), "Desmume"); - gtk_window_set_resizable(GTK_WINDOW (pWindow), my_config->opengl_2d ? TRUE : FALSE); + gtk_window_set_resizable(GTK_WINDOW (pWindow), my_config->opengl_2d ? TRUE : FALSE); - gtk_window_set_icon(GTK_WINDOW (pWindow), gdk_pixbuf_new_from_xpm_data(DeSmuME_xpm)); + gtk_window_set_icon(GTK_WINDOW (pWindow), gdk_pixbuf_new_from_xpm_data(DeSmuME_xpm)); - g_signal_connect(G_OBJECT(pWindow), "destroy", G_CALLBACK(gtk_main_quit), NULL); - g_signal_connect(G_OBJECT(pWindow), "key_press_event", G_CALLBACK(Key_Press), NULL); - g_signal_connect(G_OBJECT(pWindow), "key_release_event", G_CALLBACK(Key_Release), NULL); + g_signal_connect(G_OBJECT(pWindow), "destroy", G_CALLBACK(gtk_main_quit), NULL); + g_signal_connect(G_OBJECT(pWindow), "key_press_event", G_CALLBACK(Key_Press), NULL); + g_signal_connect(G_OBJECT(pWindow), "key_release_event", G_CALLBACK(Key_Release), NULL); - /* Creation de la GtkVBox */ - pVBox = gtk_vbox_new(FALSE, 0); - gtk_container_add(GTK_CONTAINER(pWindow), pVBox); + /* Create the GtkVBox */ + pVBox = gtk_vbox_new(FALSE, 0); + gtk_container_add(GTK_CONTAINER(pWindow), pVBox); - accel_group = gtk_accel_group_new(); - action_group = gtk_action_group_new("dui"); - gtk_action_group_add_actions(action_group, action_entries, sizeof(action_entries) / sizeof(GtkActionEntry), pWindow); - { - GList * list = gtk_action_group_list_actions(action_group); - g_list_foreach(list, dui_set_accel_group, accel_group); - } - gtk_window_add_accel_group(GTK_WINDOW(pWindow), accel_group); - gtk_action_set_sensitive(gtk_action_group_get_action(action_group, "pause"), FALSE); - gtk_action_set_sensitive(gtk_action_group_get_action(action_group, "run"), FALSE); - gtk_action_set_sensitive(gtk_action_group_get_action(action_group, "reset"), FALSE); - gtk_action_set_sensitive(gtk_action_group_get_action(action_group, "printscreen"), FALSE); + accel_group = gtk_accel_group_new(); + action_group = gtk_action_group_new("dui"); + gtk_action_group_add_actions(action_group, action_entries, sizeof(action_entries) / sizeof(GtkActionEntry), pWindow); + { + GList * list = gtk_action_group_list_actions(action_group); + g_list_foreach(list, dui_set_accel_group, accel_group); + } + gtk_window_add_accel_group(GTK_WINDOW(pWindow), accel_group); + gtk_action_set_sensitive(gtk_action_group_get_action(action_group, "pause"), FALSE); + gtk_action_set_sensitive(gtk_action_group_get_action(action_group, "run"), FALSE); + gtk_action_set_sensitive(gtk_action_group_get_action(action_group, "reset"), FALSE); + gtk_action_set_sensitive(gtk_action_group_get_action(action_group, "printscreen"), FALSE); - /* Menu and Toolbar */ - pMenuBar = gtk_menu_bar_new(); + /* Menu and Toolbar */ + pMenuBar = gtk_menu_bar_new(); - desmume_gtk_menu_file(pMenuBar); - desmume_gtk_menu_emulation(pMenuBar, my_config->opengl_2d); - desmume_gtk_menu_config(pMenuBar); - desmume_gtk_menu_tools(pMenuBar); - desmume_gtk_menu_help(pMenuBar); + desmume_gtk_menu_file(pMenuBar); + desmume_gtk_menu_emulation(pMenuBar, my_config->opengl_2d); + desmume_gtk_menu_config(pMenuBar); + desmume_gtk_menu_tools(pMenuBar); + desmume_gtk_menu_help(pMenuBar); - gtk_box_pack_start(GTK_BOX(pVBox), pMenuBar, FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(pVBox), pMenuBar, FALSE, FALSE, 0); - desmume_gtk_toolbar(pVBox); + desmume_gtk_toolbar(pVBox); - /* Création de l'endroit pour l'affichage des écrans */ + /* Creating the place for showing DS screens */ #ifdef GTKGLEXT_AVAILABLE if ( my_config->opengl_2d) { /* @@ -2009,7 +2010,7 @@ common_gtk_main( struct configured_features *my_config) nds_screen_widget = top_screen_widget; } else { #else - { + { #endif pDrawingArea= gtk_drawing_area_new(); @@ -2036,15 +2037,15 @@ common_gtk_main( struct configured_features *my_config) nds_screen_widget = pDrawingArea; } - /* Status bar */ - pStatusBar = gtk_statusbar_new(); - pStatusBar_Ctx = gtk_statusbar_get_context_id(GTK_STATUSBAR(pStatusBar), "Global"); - pStatusBar_Change("Desmume"); - gtk_box_pack_end(GTK_BOX(pVBox), pStatusBar, FALSE, FALSE, 0); + /* Status bar */ + pStatusBar = gtk_statusbar_new(); + pStatusBar_Ctx = gtk_statusbar_get_context_id(GTK_STATUSBAR(pStatusBar), "Global"); + pStatusBar_Change("Desmume"); + gtk_box_pack_end(GTK_BOX(pVBox), pStatusBar, FALSE, FALSE, 0); - gtk_widget_show_all(pWindow); + gtk_widget_show_all(pWindow); - //LoadFirmware("fw.bin"); + //LoadFirmware("fw.bin"); gtk_fps_limiter_disabled = my_config->disable_limiter; if ( !gtk_fps_limiter_disabled) { @@ -2058,7 +2059,7 @@ common_gtk_main( struct configured_features *my_config) SDL_GetError()); return 1; } - } + } /* * Set the 3D emulation to use @@ -2080,33 +2081,33 @@ common_gtk_main( struct configured_features *my_config) "removing 3D support\n"); } - /* Command line arg */ - if( my_config->nds_file != NULL) { - if(Open( my_config->nds_file, bad_glob_cflash_disk_image_file) >= 0) { + /* Command line arg */ + if( my_config->nds_file != NULL) { + if(Open( my_config->nds_file, bad_glob_cflash_disk_image_file) >= 0) { if(my_config->load_slot){ loadstate_slot(my_config->load_slot); } - Launch(); - } else { - GtkWidget *pDialog = gtk_message_dialog_new(GTK_WINDOW(pWindow), - GTK_DIALOG_MODAL, - GTK_MESSAGE_INFO, - GTK_BUTTONS_OK, - "Unable to load :\n%s", my_config->nds_file); - gtk_dialog_run(GTK_DIALOG(pDialog)); - gtk_widget_destroy(pDialog); - } - } + Launch(); + } else { + GtkWidget *pDialog = gtk_message_dialog_new(GTK_WINDOW(pWindow), + GTK_DIALOG_MODAL, + GTK_MESSAGE_INFO, + GTK_BUTTONS_OK, + "Unable to load :\n%s", my_config->nds_file); + gtk_dialog_run(GTK_DIALOG(pDialog)); + gtk_widget_destroy(pDialog); + } + } - /* Boucle principale */ + /* Main loop */ -// gtk_idle_add(&EmuLoop, pWindow); -// g_idle_add(&EmuLoop, pWindow); +// gtk_idle_add(&EmuLoop, pWindow); +// g_idle_add(&EmuLoop, pWindow); - gtk_main(); + gtk_main(); - desmume_free(); + desmume_free(); if ( !gtk_fps_limiter_disabled) { /* tidy up the FPS limiter timer and semaphore */ @@ -2117,10 +2118,10 @@ common_gtk_main( struct configured_features *my_config) /* Unload joystick */ uninit_joy(); - SDL_Quit(); + SDL_Quit(); - Write_ConfigFile(config_file); - g_free(config_file); + Write_ConfigFile(config_file); + g_free(config_file); #ifdef GDB_STUB if ( my_config->arm9_gdb_port != 0) { @@ -2131,7 +2132,7 @@ common_gtk_main( struct configured_features *my_config) } #endif - return EXIT_SUCCESS; + return EXIT_SUCCESS; }