#define FILENAME_DESCRIPTION "Open Intel Hex file"
+static char previous_folder[MAX_FILENAME_LENGTH + 1];
+
+static void
+remember_current_folder(GtkFileChooser *chooser)
+{
+ char *folder;
+
+ folder = gtk_file_chooser_get_current_folder(chooser);
+
+ if (folder != NULL) {
+ if (strlen(folder) >= MAX_FILENAME_LENGTH) {
+ /* Non-critical error */
+ log_warn("current folder name too long for buffer");
+ } else {
+ log_info("current folder = %s", folder);
+ strncpy(previous_folder, folder, MAX_FILENAME_LENGTH);
+ }
+
+ g_free(folder);
+ }
+}
+
void
FileOpenEvent(GtkObject *object, gpointer data)
{
GtkWidget *file_dialog;
+ char *dir;
+ char *cwd = NULL;
-#if defined(DEBUG)
- g_print("FileOpenEvent()\n");
-#endif
+ log_info("FileOpenEvent()");
/* Create a new file selection widget. */
file_dialog = gtk_file_chooser_dialog_new(
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL);
+ if (strlen(previous_folder) == 0) {
+ /* Opening file chooser to current working directory. */
+ cwd = g_get_current_dir();
+ dir = cwd;
+ } else {
+ /* Opening file chooser to previous opened directory. */
+ dir = previous_folder;
+ }
+
+ gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(file_dialog), dir);
+
+ if (cwd)
+ g_free(cwd);
+
if (gtk_dialog_run(GTK_DIALOG(file_dialog)) == GTK_RESPONSE_ACCEPT) {
char *selected_file;
GTK_FILE_CHOOSER(file_dialog));
if (selected_file != NULL) {
-#if defined(DEBUG)
- g_print("emugtk_File = %s\n", selected_file);
-#endif
+ log_info("emugtk_File = %s", selected_file);
+
+ remember_current_folder(GTK_FILE_CHOOSER(file_dialog));
emugtk_new_file(selected_file);
g_free(selected_file);
static void
FileQuitEvent(gchar *string)
{
-#if defined(DEBUG)
- g_print("%s\n", string);
-#endif
-
gtk_main_quit();
}
/* Create the 'open' item. */
item = gtk_menu_item_new_with_label(FILENAME_DESCRIPTION);
- gtk_menu_append(GTK_MENU(menu), item);
+ gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
/* Attach the callback functions to the activate signal. */
- gtk_signal_connect_object(GTK_OBJECT(item), "activate",
- GTK_SIGNAL_FUNC(FileOpenEvent), NULL);
+ g_signal_connect(item, "activate", G_CALLBACK(FileOpenEvent), NULL);
AddMenuSeparator(menu);
item = gtk_menu_item_new_with_label("Exit");
- gtk_menu_append(GTK_MENU(menu), item);
+ gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
/* We can attach the Quit menu item to our exit function */
- gtk_signal_connect_object(GTK_OBJECT(item), "activate",
- GTK_SIGNAL_FUNC(FileQuitEvent),
- (gpointer) "file.quit");
+ g_signal_connect(item, "activate", G_CALLBACK(FileQuitEvent),
+ (gpointer) "file.quit");
/* Adding submenu title. */
item = gtk_menu_item_new_with_label("File");
gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), menu);
- gtk_menu_bar_append(GTK_MENU_BAR(menu_bar), item);
+ gtk_menu_shell_append((GtkMenuShell *) menu_bar, item);
}