/*static*/ FmJobErrorAction TabPage::onFolderError(FmFolder* _folder, GError* err, FmJobErrorSeverity severity, TabPage* pThis) { if(err->domain == G_IO_ERROR) { if(err->code == G_IO_ERROR_NOT_MOUNTED && severity < FM_JOB_ERROR_CRITICAL) { FmPath* path = fm_folder_get_path(_folder); MountOperation* op = new MountOperation(pThis); op->mount(path); if(op->wait()) { // blocking event loop, wait for mount operation to finish. // This will reload the folder, which generates a new "start-loading" // signal, so we get more "start-loading" signals than "finish-loading" // signals. FIXME: This is a bug of libfm. // Because the two signals are not correctly paired, we need to // remove busy cursor here since "finish-loading" is not emitted. QApplication::restoreOverrideCursor(); // remove busy cursor pThis->overrideCursor_ = false; return FM_JOB_RETRY; } } } if(severity >= FM_JOB_ERROR_MODERATE) { /* Only show more severe errors to the users and * ignore milder errors. Otherwise too many error * message boxes can be annoying. * This fixes bug #3411298- Show "Permission denied" when switching to super user mode. * https://sourceforge.net/tracker/?func=detail&aid=3411298&group_id=156956&atid=801864 * */ // FIXME: consider replacing this modal dialog with an info bar to improve usability QMessageBox::critical(pThis, tr("Error"), QString::fromUtf8(err->message)); } return FM_JOB_CONTINUE; }
void PlacesView::activateRow(int type, const QModelIndex& index) { if(!index.parent().isValid()) // ignore root items return; PlacesModelItem* item = static_cast<PlacesModelItem*>(model_->itemFromIndex(index)); if(item) { FmPath* path = item->path(); if(!path) { // check if mounting volumes is needed if(item->type() == PlacesModelItem::Volume) { PlacesModelVolumeItem* volumeItem = static_cast<PlacesModelVolumeItem*>(item); if(!volumeItem->isMounted()) { // Mount the volume GVolume* volume = volumeItem->volume(); MountOperation* op = new MountOperation(true, this); op->mount(volume); // connect(op, SIGNAL(finished(GError*)), SLOT(onMountOperationFinished(GError*))); // blocking here until the mount operation is finished? // FIXME: update status of the volume after mount is finished!! if(!op->wait()) return; path = item->path(); } } } if(path) { Q_EMIT chdirRequested(type, path); } } }
void PlacesView::onEjectVolume() { PlacesModel::ItemAction* action = static_cast<PlacesModel::ItemAction*>(sender()); if(!action->index().isValid()) return; PlacesModelVolumeItem* item = static_cast<PlacesModelVolumeItem*>(model_->itemFromIndex(action->index())); MountOperation* op = new MountOperation(true, this); op->eject(item->volume()); op->wait(); }
void PlacesView::onUnmountMount() { PlacesModel::ItemAction* action = static_cast<PlacesModel::ItemAction*>(sender()); if(!action->index().isValid()) return; PlacesModelMountItem* item = static_cast<PlacesModelMountItem*>(model_->itemFromIndex(action->index())); GMount* mount = item->mount(); MountOperation* op = new MountOperation(true, this); op->unmount(mount); op->wait(); }