]> git.tdb.fi Git - ext/subsurface.git/blobdiff - gtk-gui.c
Fix broken default filename for save-as
[ext/subsurface.git] / gtk-gui.c
index 4e5b9edfb8b00405508727176bbabd6b564d8874..a536c15e688101efaf616e2c1adf818125876342 100644 (file)
--- a/gtk-gui.c
+++ b/gtk-gui.c
@@ -21,6 +21,8 @@ GtkWidget *main_vbox;
 GtkWidget *error_info_bar;
 GtkWidget *error_label;
 GtkWidget *vpane, *hpane;
+GtkWidget *notebook;
+
 int        error_count;
 
 const char *divelist_font;
@@ -170,10 +172,29 @@ static void file_open(GtkWidget *w, gpointer data)
        gtk_widget_destroy(dialog);
 }
 
+/* return the path and the file component contained in the full path */
+static char *path_and_file(char *pathin, char **fileout) {
+       char *slash = pathin, *next;
+
+       if (! pathin) {
+               *fileout = strdup("");
+               return strdup("");
+       }
+       while ((next = strpbrk(slash + 1, "\\/")))
+               slash = next;
+       if (pathin != slash)
+               slash++;
+       *fileout = strdup(slash);
+        return strndup(pathin, slash - pathin);
+}
+
 static void file_save_as(GtkWidget *w, gpointer data)
 {
        GtkWidget *dialog;
        char *filename = NULL;
+       char *current_file;
+       char *current_dir;
+
        dialog = gtk_file_chooser_dialog_new("Save File As",
                GTK_WINDOW(main_window),
                GTK_FILE_CHOOSER_ACTION_SAVE,
@@ -182,7 +203,9 @@ static void file_save_as(GtkWidget *w, gpointer data)
                NULL);
        gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(dialog), TRUE);
 
-       gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(dialog), existing_filename);
+       current_dir = path_and_file(existing_filename, &current_file);
+       gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), current_dir);
+       gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(dialog), current_file);
        if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
                filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
        }
@@ -662,10 +685,14 @@ static void view_info(GtkWidget *w, gpointer data)
 static void view_three(GtkWidget *w, gpointer data)
 {
        GtkAllocation alloc;
+       GtkRequisition requisition;
+
        gtk_widget_get_allocation(hpane, &alloc);
        gtk_paned_set_position(GTK_PANED(hpane), alloc.width/2);
        gtk_widget_get_allocation(vpane, &alloc);
-       gtk_paned_set_position(GTK_PANED(vpane), alloc.height/2);
+       gtk_widget_size_request(notebook, &requisition);
+       /* pick the requested size for the notebook plus 6 pixels for frame */
+       gtk_paned_set_position(GTK_PANED(vpane), requisition.height + 6);
 }
 
 static GtkActionEntry menu_items[] = {
@@ -750,7 +777,6 @@ static void switch_page(GtkNotebook *notebook, gint arg1, gpointer user_data)
 void init_ui(int *argcp, char ***argvp)
 {
        GtkWidget *win;
-       GtkWidget *notebook;
        GtkWidget *nb_page;
        GtkWidget *dive_list;
        GtkWidget *menubar;