X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=gtk-gui.c;h=a536c15e688101efaf616e2c1adf818125876342;hb=415383d65ef425de8ddee86324632e3f720827f9;hp=5bc46d2190248be4c7a7c68b121c2766258b9f0b;hpb=d0e27c6c533005b5fd161286f68f1325bdabe8e3;p=ext%2Fsubsurface.git diff --git a/gtk-gui.c b/gtk-gui.c index 5bc46d2..a536c15 100644 --- 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; + 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, ¤t_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,11 +777,11 @@ 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; GtkWidget *vbox; + GtkWidget *scrolled; GdkScreen *screen; GtkIconTheme *icon_theme=NULL; GtkSettings *settings; @@ -826,13 +853,16 @@ void init_ui(int *argcp, char ***argvp) vpane = gtk_vpaned_new(); gtk_box_pack_start(GTK_BOX(vbox), vpane, TRUE, TRUE, 3); - hpane = gtk_hpaned_new(); gtk_paned_add1(GTK_PANED(vpane), hpane); + g_signal_connect_after(G_OBJECT(vbox), "realize", G_CALLBACK(view_three), NULL); /* Notebook for dive info vs profile vs .. */ notebook = gtk_notebook_new(); - gtk_paned_add1(GTK_PANED(hpane), notebook); + scrolled = gtk_scrolled_window_new(NULL, NULL); + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); + gtk_paned_add1(GTK_PANED(hpane), scrolled); + gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled), notebook); g_signal_connect(notebook, "switch-page", G_CALLBACK(switch_page), NULL); /* Create the actual divelist */