#include "viktrwlayer_export.h"
#include "gpx.h"
+static gchar *last_folder_uri = NULL;
+
void vik_trw_layer_export ( VikTrwLayer *vtl, const gchar *title, const gchar* default_name, VikTrack* trk, VikFileType_t file_type )
{
GtkWidget *file_selector;
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
NULL);
- gchar *cwd = g_get_current_dir();
- if ( cwd ) {
- gtk_file_chooser_set_current_folder ( GTK_FILE_CHOOSER(file_selector), cwd );
- g_free ( cwd );
- }
+ if ( last_folder_uri )
+ gtk_file_chooser_set_current_folder_uri ( GTK_FILE_CHOOSER(file_selector), last_folder_uri );
gtk_file_chooser_set_current_name ( GTK_FILE_CHOOSER(file_selector), default_name );
if ( g_file_test ( fn, G_FILE_TEST_EXISTS ) == FALSE ||
a_dialog_yes_or_no ( GTK_WINDOW(file_selector), _("The file \"%s\" exists, do you wish to overwrite it?"), a_file_basename ( fn ) ) )
{
+ g_free ( last_folder_uri );
+ last_folder_uri = gtk_file_chooser_get_current_folder_uri ( GTK_FILE_CHOOSER(file_selector) );
+
gtk_widget_hide ( file_selector );
vik_window_set_busy_cursor ( VIK_WINDOW(VIK_GTK_WINDOW_FROM_LAYER(vtl)) );
// Don't Export invisible items - unless requested on this specific track
#define DRAW_IMAGE_DEFAULT_HEIGHT 1024
#define DRAW_IMAGE_DEFAULT_SAVE_AS_PNG TRUE
+// The last used directories
+static gchar *last_folder_files_uri = NULL;
+static gchar *last_folder_images_uri = NULL;
+
static void window_finalize ( GObject *gob );
static GObjectClass *parent_class;
static void destroy_window ( GtkWidget *widget,
gpointer data )
{
- if ( ! --window_count )
+ if ( ! --window_count ) {
+ g_free ( last_folder_files_uri );
+ g_free ( last_folder_images_uri );
gtk_main_quit ();
+ }
}
#define VIK_SETTINGS_WIN_SIDEPANEL "window_sidepanel"
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
NULL);
- gchar *cwd = g_get_current_dir();
- if ( cwd ) {
- gtk_file_chooser_set_current_folder ( GTK_FILE_CHOOSER(vw->open_dia), cwd );
- g_free ( cwd );
- }
+ if ( last_folder_files_uri )
+ gtk_file_chooser_set_current_folder_uri ( GTK_FILE_CHOOSER(vw->open_dia), last_folder_files_uri );
GtkFileFilter *filter;
// NB file filters are listed this way for alphabetical ordering
}
if ( gtk_dialog_run ( GTK_DIALOG(vw->open_dia) ) == GTK_RESPONSE_ACCEPT )
{
+ g_free ( last_folder_files_uri );
+ last_folder_files_uri = gtk_file_chooser_get_current_folder_uri ( GTK_FILE_CHOOSER(vw->open_dia) );
+
gtk_widget_hide ( vw->open_dia );
#ifdef VIKING_PROMPT_IF_MODIFIED
if ( (vw->modified || vw->filename) && newwindow )
#endif
g_signal_emit ( G_OBJECT(vw), window_signals[VW_OPENWINDOW_SIGNAL], 0, gtk_file_chooser_get_filenames (GTK_FILE_CHOOSER(vw->open_dia) ) );
else {
+
files = gtk_file_chooser_get_filenames (GTK_FILE_CHOOSER(vw->open_dia) );
gboolean change_fn = newwindow && (g_slist_length(files)==1); /* only change fn if one file */
gboolean first_vik_file = TRUE;
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
NULL);
- gchar *cwd = g_get_current_dir();
- if ( cwd ) {
- gtk_file_chooser_set_current_folder ( GTK_FILE_CHOOSER(vw->save_dia), cwd );
- g_free ( cwd );
- }
+ if ( last_folder_files_uri )
+ gtk_file_chooser_set_current_folder_uri ( GTK_FILE_CHOOSER(vw->save_dia), last_folder_files_uri );
GtkFileFilter *filter;
filter = gtk_file_filter_new ();
{
window_set_filename ( vw, fn );
rv = window_save ( vw );
- vw->modified = FALSE;
+ if ( rv ) {
+ vw->modified = FALSE;
+ g_free ( last_folder_files_uri );
+ last_folder_files_uri = gtk_file_chooser_get_current_folder_uri ( GTK_FILE_CHOOSER(vw->save_dia) );
+ }
break;
}
}
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
NULL);
-
- gchar *cwd = g_get_current_dir();
- if ( cwd ) {
- gtk_file_chooser_set_current_folder ( GTK_FILE_CHOOSER(vw->save_img_dia), cwd );
- g_free ( cwd );
- }
+ if ( last_folder_images_uri )
+ gtk_file_chooser_set_current_folder_uri ( GTK_FILE_CHOOSER(vw->save_img_dia), last_folder_images_uri );
GtkFileChooser *chooser = GTK_FILE_CHOOSER ( vw->save_img_dia );
/* Add filters */