static void fm_tab_page_chdir_without_history(FmTabPage* page, FmPath* path, FmPath* select_path) { if (select_path) select_path = fm_path_ref(select_path); if (page->select_path_after_chdir) fm_path_unref(page->select_path_after_chdir); page->select_path_after_chdir = select_path; fm_tab_page_update_label(page, path); free_folder(page); page->folder = fm_folder_from_path(path); g_signal_connect(page->folder, "start-loading", G_CALLBACK(on_folder_start_loading), page); g_signal_connect(page->folder, "finish-loading", G_CALLBACK(on_folder_finish_loading), page); g_signal_connect(page->folder, "error", G_CALLBACK(on_folder_error), page); g_signal_connect(page->folder, "fs-info", G_CALLBACK(on_folder_fs_info), page); /* destroy the page when the folder is unmounted or deleted. */ g_signal_connect(page->folder, "removed", G_CALLBACK(on_folder_removed), page); g_signal_connect(page->folder, "unmount", G_CALLBACK(on_folder_unmount), page); g_signal_connect(page->folder, "content-changed", G_CALLBACK(on_folder_content_changed), page); if(fm_folder_is_loaded(page->folder)) { on_folder_start_loading(page->folder, page); on_folder_finish_loading(page->folder, page); on_folder_fs_info(page->folder, page); } else on_folder_start_loading(page->folder, page); fm_side_pane_chdir(page->side_pane, path); /* tell the world that our current working directory is changed */ g_signal_emit(page, signals[CHDIR], 0, path); }
void TabPage::chdir(FmPath* newPath, bool addHistory) { if(folder_) { // we're already in the specified dir if(fm_path_equal(newPath, fm_folder_get_path(folder_))) return; // remember the previous folder path that we have browsed. lastFolderPath_ = fm_folder_get_path(folder_); if(addHistory) { // store current scroll pos in the browse history BrowseHistoryItem& item = history_.currentItem(); QAbstractItemView* childView = folderView_->childView(); item.setScrollPos(childView->verticalScrollBar()->value()); } // free the previous model if(folderModel_) { proxyModel_->setSourceModel(NULL); folderModel_->unref(); // unref the cached model folderModel_ = NULL; } freeFolder(); } char* disp_name = fm_path_display_basename(newPath); title_ = QString::fromUtf8(disp_name); Q_EMIT titleChanged(title_); g_free(disp_name); folder_ = fm_folder_from_path(newPath); proxyFilter_->setVirtHidden(folder_); if(addHistory) { // add current path to browse history history_.add(path()); } g_signal_connect(folder_, "start-loading", G_CALLBACK(onFolderStartLoading), this); g_signal_connect(folder_, "finish-loading", G_CALLBACK(onFolderFinishLoading), this); g_signal_connect(folder_, "error", G_CALLBACK(onFolderError), this); g_signal_connect(folder_, "fs-info", G_CALLBACK(onFolderFsInfo), this); /* destroy the page when the folder is unmounted or deleted. */ g_signal_connect(folder_, "removed", G_CALLBACK(onFolderRemoved), this); g_signal_connect(folder_, "unmount", G_CALLBACK(onFolderUnmount), this); g_signal_connect(folder_, "content-changed", G_CALLBACK(onFolderContentChanged), this); folderModel_ = CachedFolderModel::modelFromFolder(folder_); proxyModel_->setSourceModel(folderModel_); proxyModel_->sort(proxyModel_->sortColumn(), proxyModel_->sortOrder()); Settings& settings = static_cast<Application*>(qApp)->settings(); proxyModel_->setFolderFirst(settings.sortFolderFirst()); proxyModel_->sort(settings.sortColumn(), settings.sortOrder()); if(fm_folder_is_loaded(folder_)) { onFolderStartLoading(folder_, this); onFolderFinishLoading(folder_, this); onFolderFsInfo(folder_, this); } else onFolderStartLoading(folder_, this); }