void file_dialog_add_path_widgets(FileDialog *fdlg, const gchar *default_path, const gchar *path, const gchar *history_key, const gchar *filter, const gchar *filter_desc) { GtkWidget *tabcomp; GtkWidget *list; if (fdlg->entry) return; tabcomp = tab_completion_new_with_history(&fdlg->entry, NULL, history_key, -1, file_dialog_entry_enter_cb, fdlg); gtk_box_pack_end(GTK_BOX(GENERIC_DIALOG(fdlg)->vbox), tabcomp, FALSE, FALSE, 0); generic_dialog_attach_default(GENERIC_DIALOG(fdlg), fdlg->entry); gtk_widget_show(tabcomp); if (path && path[0] == G_DIR_SEPARATOR) { fdlg->dest_path = g_strdup(path); } else { const gchar *base; base = tab_completion_set_to_last_history(fdlg->entry); if (!base) base = default_path; if (!base) base = homedir(); if (path) { fdlg->dest_path = g_build_filename(base, path, NULL); } else { fdlg->dest_path = g_strdup(base); } } list = path_selection_new_with_files(fdlg->entry, fdlg->dest_path, filter, filter_desc); path_selection_add_select_func(fdlg->entry, file_dialog_entry_enter_cb, fdlg); gtk_box_pack_end(GTK_BOX(GENERIC_DIALOG(fdlg)->vbox), list, TRUE, TRUE, 0); gtk_widget_show(list); gtk_widget_grab_focus(fdlg->entry); if (fdlg->dest_path) { gtk_entry_set_text(GTK_ENTRY(fdlg->entry), fdlg->dest_path); gtk_editable_set_position(GTK_EDITABLE(fdlg->entry), strlen(fdlg->dest_path)); } g_signal_connect(G_OBJECT(fdlg->entry), "changed", G_CALLBACK(file_dialog_entry_cb), fdlg); }
static GtkWidget *layout_tool_setup(LayoutWindow *lw) { GtkWidget *box; GtkWidget *menu_bar; GtkWidget *tabcomp; box = gtk_vbox_new(FALSE, 0); menu_bar = layout_actions_menu_bar(lw); gtk_box_pack_start(GTK_BOX(box), menu_bar, FALSE, FALSE, 0); gtk_widget_show(menu_bar); lw->toolbar = layout_button_bar(lw); gtk_box_pack_start(GTK_BOX(box), lw->toolbar, FALSE, FALSE, 0); if (!lw->toolbar_hidden) gtk_widget_show(lw->toolbar); tabcomp = tab_completion_new_with_history(&lw->path_entry, NULL, "path_list", -1, layout_path_entry_cb, lw); tab_completion_add_tab_func(lw->path_entry, layout_path_entry_tab_cb, lw); gtk_box_pack_start(GTK_BOX(box), tabcomp, FALSE, FALSE, 0); gtk_widget_show(tabcomp); g_signal_connect(G_OBJECT(lw->path_entry->parent), "changed", G_CALLBACK(layout_path_entry_changed_cb), lw); if (lw->tree_view) { lw->vdt = vdtree_new(lw->path, TRUE); vdtree_set_layout(lw->vdt, lw); vdtree_set_select_func(lw->vdt, layout_vdtree_select_cb, lw); lw->dir_view = lw->vdt->widget; } else { lw->vdl = vdlist_new(lw->path); vdlist_set_layout(lw->vdl, lw); vdlist_set_select_func(lw->vdl, layout_vdlist_select_cb, lw); lw->dir_view = lw->vdl->widget; } gtk_box_pack_start(GTK_BOX(box), lw->dir_view, TRUE, TRUE, 0); gtk_widget_show(lw->dir_view); gtk_widget_show(box); return box; }