/* This file is part of the KDE project Copyright (C) 1998, 1999 David Faure <faure@kde.org> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; see the file COPYING. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include <tqwhatsthis.h> #include <tqstyle.h> #include <tqdir.h> #include <kapplication.h> #include <kdebug.h> #include <kmessagebox.h> #include <kurifilter.h> #include <klocale.h> #include <kstandarddirs.h> #include <kwin.h> #include <kprotocolinfo.h> #include <kurldrag.h> #include <kstartupinfo.h> #include "konq_misc.h" #include "konq_mainwindow.h" #include "konq_viewmgr.h" #include "konq_view.h" /********************************************** * * KonqMisc * **********************************************/ // Terminates fullscreen-mode for any full-screen window on the current desktop void KonqMisc::abortFullScreenMode() { TQPtrList<KonqMainWindow> *mainWindows = KonqMainWindow::mainWindowList(); if ( mainWindows ) { TQPtrListIterator<KonqMainWindow> it( *mainWindows ); for (; it.current(); ++it ) { if ( it.current()->fullScreenMode() ) { KWin::WindowInfo info = KWin::windowInfo( it.current()->winId(), NET::WMDesktop ); if ( info.valid() && info.isOnCurrentDesktop() ) it.current()->showNormal(); } } } } // #### this can probably be removed KonqMainWindow * KonqMisc::createSimpleWindow( const KURL & _url, const TQString &frameName ) { abortFullScreenMode(); // If _url is 0L, open $HOME [this doesn't happen anymore] KURL url; if (_url.isEmpty()) url.setPath(TQDir::homeDirPath()); else url = _url; KonqMainWindow *win = new KonqMainWindow( KURL(), false ); win->setInitialFrameName( frameName ); win->openURL( 0L, url ); win->show(); return win; } KonqMainWindow * KonqMisc::createSimpleWindow( const KURL & url, const KParts::URLArgs &args, bool tempFile ) { abortFullScreenMode(); KonqOpenURLRequest req; req.args = args; req.tempFile = tempFile; KonqMainWindow *win = new KonqMainWindow( KURL(), false ); win->openURL( 0L, url, TQString::null, req ); win->show(); return win; } KonqMainWindow * KonqMisc::createNewWindow( const KURL &url, const KParts::URLArgs &args, bool forbidUseHTML, TQStringList filesToSelect, bool tempFile, bool openURL ) { kdDebug() << "KonqMisc::createNewWindow url=" << url << endl; // For HTTP or html files, use the web browsing profile, otherwise use filemanager profile TQString profileName = (!(KProtocolInfo::supportsListing(url)) || KMimeType::findByURL(url)->name() == "text/html") ? "webbrowsing" : "filemanagement"; TQString profile = locate( "data", TQString::tqfromLatin1("konqueror/profiles/") + profileName ); return createBrowserWindowFromProfile(profile, profileName, url, args, forbidUseHTML, filesToSelect, tempFile, openURL ); } KonqMainWindow * KonqMisc::createBrowserWindowFromProfile( const TQString &path, const TQString &filename, const KURL &url, const KParts::URLArgs &args, bool forbidUseHTML, const TQStringList& filesToSelect, bool tempFile, bool openURL ) { kdDebug(1202) << "void KonqMisc::createBrowserWindowFromProfile() " << endl; kdDebug(1202) << "path=" << path << ",filename=" << filename << ",url=" << url.prettyURL() << endl; abortFullScreenMode(); KonqMainWindow * mainWindow; if ( path.isEmpty() ) { // The profile doesn't exit -> creating a simple window mainWindow = createSimpleWindow( url, args, tempFile ); if ( forbidUseHTML ) mainWindow->setShowHTML( false ); } else if( KonqMainWindow::isPreloaded() && KonqMainWindow::preloadedWindow() != NULL ) { mainWindow = KonqMainWindow::preloadedWindow(); KStartupInfo::setWindowStartupId( mainWindow->winId(), kapp->startupId()); KonqMainWindow::setPreloadedWindow( NULL ); KonqMainWindow::setPreloadedFlag( false ); mainWindow->resetWindow(); mainWindow->reparseConfiguration(); if( forbidUseHTML ) mainWindow->setShowHTML( false ); KonqOpenURLRequest req; req.args = args; req.filesToSelect = filesToSelect; req.tempFile = tempFile; mainWindow->viewManager()->loadViewProfile( path, filename, url, req, true ); } else { KConfig cfg( path, true ); cfg.setDollarExpansion( true ); cfg.setGroup( "Profile" ); TQString xmluiFile=cfg.readEntry("XMLUIFile","konqueror.rc"); mainWindow = new KonqMainWindow( KURL(), false, 0, xmluiFile ); if ( forbidUseHTML ) mainWindow->setShowHTML( false ); KonqOpenURLRequest req; req.args = args; req.filesToSelect = filesToSelect; req.tempFile = tempFile; mainWindow->viewManager()->loadViewProfile( cfg, filename, url, req, false, openURL ); } mainWindow->setInitialFrameName( args.frameName ); mainWindow->show(); return mainWindow; } KonqMainWindow * KonqMisc::newWindowFromHistory( KonqView* view, int steps ) { int oldPos = view->historyPos(); int newPos = oldPos + steps; const HistoryEntry * he = view->historyAt(newPos); if(!he) return 0L; KonqMainWindow* mainwindow = createNewWindow(he->url, KParts::URLArgs(), false, TQStringList(), false, /*openURL*/false); if(!mainwindow) return 0L; KonqView* newView = mainwindow->currentView(); if(!newView) return 0L; newView->copyHistory(view); newView->setHistoryPos(newPos); newView->restoreHistory(); return mainwindow; } TQString KonqMisc::konqFilteredURL( TQWidget* parent, const TQString& _url, const TQString& _path ) { if ( !_url.startsWith( "about:" ) ) // Don't filter "about:" URLs { KURIFilterData data = _url; if( !_path.isEmpty() ) data.setAbsolutePath(_path); // We do not want to the filter to check for executables // from the location bar. data.setCheckForExecutables (false); if( KURIFilter::self()->filterURI( data ) ) { if( data.uriType() == KURIFilterData::ERROR && !data.errorMsg().isEmpty() ) { KMessageBox::sorry( parent, i18n( data.errorMsg().utf8() ) ); return TQString::null; } else return data.uri().url(); } } else if ( _url.startsWith( "about:" ) && _url != "about:blank" ) { // We can't use "about:" as it is, KURL doesn't parse it. if (_url == "about:plugins") return "about:plugins"; return "about:konqueror"; } return _url; // return the original url if it cannot be filtered. } KonqDraggableLabel::KonqDraggableLabel( KonqMainWindow* mw, const TQString& text ) : TQLabel( text, 0L, "kde toolbar widget" ) // Use this name for it to be styled! , m_mw(mw) { setBackgroundMode( TQt::PaletteButton ); tqsetAlignment( (TQApplication::reverseLayout() ? Qt::AlignRight : Qt::AlignLeft) | Qt::AlignVCenter | TQt::ShowPrefix ); setAcceptDrops(true); adjustSize(); validDrag = false; } void KonqDraggableLabel::mousePressEvent( TQMouseEvent * ev ) { validDrag = true; startDragPos = ev->pos(); } void KonqDraggableLabel::mouseMoveEvent( TQMouseEvent * ev ) { if ((startDragPos - ev->pos()).manhattanLength() > TQApplication::startDragDistance()) { validDrag = false; if ( m_mw->currentView() ) { KURL::List lst; lst.append( m_mw->currentView()->url() ); TQDragObject * drag = new KURLDrag( lst, m_mw ); drag->setPixmap( KMimeType::pixmapForURL( lst.first(), 0, KIcon::Small ) ); drag->dragCopy(); } } } void KonqDraggableLabel::mouseReleaseEvent( TQMouseEvent * ) { validDrag = false; } void KonqDraggableLabel::dragEnterEvent( TQDragEnterEvent *ev ) { if ( KURLDrag::canDecode( ev ) ) ev->acceptAction(); } void KonqDraggableLabel::dropEvent( TQDropEvent* ev ) { _savedLst.clear(); if ( KURLDrag::decode( ev, _savedLst ) ) { TQTimer::singleShot(0, this, TQT_SLOT(delayedOpenURL())); } } void KonqDraggableLabel::delayedOpenURL() { m_mw->openURL( 0L, _savedLst.first() ); } #include "konq_misc.moc"