diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index f610645a..72f6221f 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -29,6 +29,8 @@ #include #include #include +#include +#include #include #include #include @@ -41,6 +43,7 @@ #include #include #include +#include #include #include #include @@ -104,6 +107,8 @@ MainWindow::MainWindow( const QStringList& arguments ) // UIC stuff setupUi( this ); + setAcceptDrops( true ); + // Set up layout direction if ( pConfig->m_advLayoutDirectionRL ) qApp->setLayoutDirection( Qt::RightToLeft ); @@ -608,6 +613,45 @@ void MainWindow::closeEvent( QCloseEvent* e ) QMainWindow::closeEvent( e ); } +void MainWindow::dragEnterEvent( QDragEnterEvent* e ) +{ + if ( e->mimeData()->hasUrls() ) + { + QUrl url = e->mimeData()->urls().first(); + + if ( url.isLocalFile() ) + { + QString fileName = url.toLocalFile(); + + if ( fileName.endsWith( ".chm", Qt::CaseInsensitive ) || fileName.endsWith( ".epub", Qt::CaseInsensitive ) ) + { + e->acceptProposedAction(); + return; + } + } + } + + e->ignore(); +} + +void MainWindow::dropEvent( QDropEvent* e ) +{ + if ( e->mimeData()->hasUrls() ) + { + QUrl url = e->mimeData()->urls().first(); + + if ( url.isLocalFile() ) + { + QString fileName = url.toLocalFile(); + + if ( fileName.endsWith( ".chm", Qt::CaseInsensitive ) || fileName.endsWith( ".epub", Qt::CaseInsensitive ) ) + loadFile( fileName ); + } + + e->acceptProposedAction(); + } +} + void MainWindow::printHelpAndExit() { fprintf( stderr, "Usage: %s [options] [helpfile]\n" diff --git a/src/mainwindow.h b/src/mainwindow.h index ed847dce..c10f8c03 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -172,6 +172,8 @@ class MainWindow : public QMainWindow, public Ui::MainWindow protected: // Reimplemented functions void closeEvent( QCloseEvent* e ); + void dragEnterEvent( QDragEnterEvent* e ); + void dropEvent( QDropEvent* e ); bool event( QEvent* e ); private: diff --git a/src/viewwindowmgr.cpp b/src/viewwindowmgr.cpp index 19630d84..288f4609 100644 --- a/src/viewwindowmgr.cpp +++ b/src/viewwindowmgr.cpp @@ -160,6 +160,7 @@ ViewWindow* ViewWindowMgr::current() ViewWindow* ViewWindowMgr::addNewTab( bool set_active ) { ViewWindow* browser = new ViewWindow( m_tabWidget ); + browser->setAcceptDrops( false ); editFind->installEventFilter( this );