2 This file is part of the KDE project
3 Copyright (C) 1998-2005 David Faure <faure@kde.org>
5 This program is free software; you can redistribute it and/or
6 modify it under the terms of the GNU General Public
7 License as published by the Free Software Foundation; either
8 version 2 of the License, or (at your option) any later version.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with this program; see the file COPYING. If not, write to
17 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18 Boston, MA 02110-1301, USA.
23 #include "KonqViewAdaptor.h"
24 #include "konqsettingsxt.h"
25 #include "konqframestatusbar.h"
27 #include <konq_events.h>
28 #include "konqviewmanager.h"
30 #include "konqbrowseriface.h"
31 #include <kparts/statusbarextension.h>
32 #include <kparts/browserextension.h>
34 #include "konqhistorymanager.h"
35 #include "konqpixmapprovider.h"
40 #include <kmessagebox.h>
44 #include <kio/jobuidelegate.h>
45 #include <ktoggleaction.h>
47 #include <QtGui/QApplication>
48 #include <QtCore/QArgument>
49 #include <QtCore/QObject>
50 #include <QtCore/QByteRef>
51 #include <QtCore/QEvent>
52 #include <QtGui/QKeyEvent>
53 #include <QtCore/QFile>
54 #include <QtGui/QScrollArea>
55 #include <kjobuidelegate.h>
57 //#define DEBUG_HISTORY
59 KonqView::KonqView( KonqViewFactory
&viewFactory
,
61 KonqMainWindow
*mainWindow
,
62 const KService::Ptr
&service
,
63 const KService::List
&partServiceOffers
,
64 const KService::List
&appServiceOffers
,
65 const QString
&serviceType
,
69 m_pKonqFrame
= viewFrame
;
70 m_pKonqFrame
->setView( this );
72 m_sLocationBarURL
= "";
73 m_pageSecurity
= KonqMainWindow::NotCrypted
;
74 m_bLockHistory
= false;
76 m_pMainWindow
= mainWindow
;
80 m_randID
= KRandom::random();
83 m_partServiceOffers
= partServiceOffers
;
84 m_appServiceOffers
= appServiceOffers
;
85 m_serviceType
= serviceType
;
87 m_bAllowHTML
= m_pMainWindow
->isHTMLAllowed();
88 m_lstHistoryIndex
= -1;
90 m_bPendingRedirection
= false;
91 m_bPassiveMode
= passiveMode
;
92 m_bLockedLocation
= false;
93 m_bLinkedView
= false;
95 m_bToggleView
= false;
96 m_bHierarchicalView
= false;
97 m_bDisableScrolling
= false;
98 m_bGotIconURL
= false;
99 m_bPopupMenuEnabled
= true;
100 m_browserIface
= new KonqBrowserInterface( this );
101 m_bBackRightClick
= KonqSettings::backRightClick();
102 m_bFollowActive
= false;
103 m_bBuiltinView
= false;
104 m_bURLDropHandling
= false;
106 switchView( viewFactory
);
109 KonqView::~KonqView()
111 //kDebug(1202) << "part=" << m_pPart;
113 if (KonqMainWindow::s_crashlog_file
) {
116 part_url
= m_pPart
->url().url();
117 if (part_url
.isNull())
120 line
= ( QString("close(%1):%2\n").arg(m_randID
,0,16).arg(part_url
) ).toUtf8();
121 KonqMainWindow::s_crashlog_file
->write(line
, line
.length());
122 KonqMainWindow::s_crashlog_file
->flush();
125 // We did so ourselves for passive views
128 finishedWithCurrentURL();
129 if ( isPassiveMode() )
130 disconnect( m_pPart
, SIGNAL( destroyed() ), m_pMainWindow
->viewManager(), SLOT( slotObjectDestroyed() ) );
135 qDeleteAll( m_lstHistory
);
136 m_lstHistory
.clear();
139 //kDebug(1202) << this << "done";
142 void KonqView::openUrl( const KUrl
&url
, const QString
& locationBarURL
,
143 const QString
& nameFilter
, bool tempFile
)
145 kDebug(1202) << "url=" << url
<< "locationBarURL=" << locationBarURL
;
148 if (KonqMainWindow::s_crashlog_file
) {
151 part_url
= m_pPart
->url().url();
152 if (part_url
.isNull())
155 QString url_url
= url
.url();
156 if (url_url
.isNull())
157 url_url
= QString("");
161 line
= ( QString("closed(%1):%2\n").arg(m_randID
,0,16).arg(part_url
) ).toUtf8();
162 KonqMainWindow::s_crashlog_file
->write(line
,line
.length());
163 line
= ( QString("opened(%3):%4\n").arg(m_randID
,0,16).arg(url_url
) ).toUtf8();
164 KonqMainWindow::s_crashlog_file
->write(line
,line
.length());
165 KonqMainWindow::s_crashlog_file
->flush();
168 KParts::OpenUrlArguments args
;
170 args
= m_pPart
->arguments();
172 KParts::BrowserExtension
*ext
= browserExtension();
173 KParts::BrowserArguments browserArgs
;
175 browserArgs
= ext
->browserArguments();
177 // Typing "Enter" again after the URL of an aborted view, triggers a reload.
178 if ( m_bAborted
&& m_pPart
&& m_pPart
->url() == url
&& !browserArgs
.doPost())
180 if ( !prepareReload( args
, browserArgs
, false /* not softReload */ ) )
182 m_pPart
->setArguments( args
);
186 kDebug(1202) << "m_bLockedLocation=" << m_bLockedLocation
<< "browserArgs.lockHistory()=" << browserArgs
.lockHistory();
188 if ( browserArgs
.lockHistory() )
191 if ( !m_bLockHistory
)
193 // Store this new URL in the history, removing any existing forward history.
194 // We do this first so that everything is ready if a part calls completed().
195 createHistoryEntry();
197 m_bLockHistory
= false;
200 m_pPart
->setProperty("nameFilter", nameFilter
);
202 if ( m_bDisableScrolling
)
203 callExtensionMethod( "disableScrolling" );
205 setLocationBarURL( locationBarURL
);
206 setPageSecurity(KonqMainWindow::NotCrypted
);
208 if ( !args
.reload() )
210 // Save the POST data that is necessary to open this URL
211 // (so that reload can re-post it)
212 m_doPost
= browserArgs
.doPost();
213 m_postContentType
= browserArgs
.contentType();
214 m_postData
= browserArgs
.postData
;
216 m_pageReferrer
= args
.metaData()["referrer"];
220 // Store the path to the tempfile. Yes, we could store a bool only,
221 // but this would be more dangerous. If anything goes wrong in the code,
222 // we might end up deleting a real file.
223 if ( url
.isLocalFile() )
224 m_tempFile
= url
.path();
226 kWarning(1202) << "Tempfile option is set, but URL is remote:" << url
;
229 aboutToOpenURL( url
, args
);
231 m_pPart
->openUrl( url
);
233 updateHistoryEntry(false /* don't save location bar URL yet */);
234 // add pending history entry
235 KonqHistoryManager::kself()->addPending( url
, locationBarURL
, QString());
238 kDebug(1202) << "Current position:" << historyIndex();
242 void KonqView::switchView( KonqViewFactory
&viewFactory
)
246 m_pPart
->widget()->hide();
248 KParts::ReadOnlyPart
*oldPart
= m_pPart
;
249 m_pPart
= m_pKonqFrame
->attach( viewFactory
); // creates the part
251 // Set the statusbar in the BE asap to avoid a KMainWindow statusbar being created.
252 KParts::StatusBarExtension
* sbext
= statusBarExtension();
254 sbext
->setStatusBar( frame()->statusbar() );
256 // Activate the new part
259 m_pPart
->setObjectName( oldPart
->objectName() );
260 emit
sigPartChanged( this, oldPart
, m_pPart
);
268 prop
= m_service
->property( "X-KDE-BrowserView-FollowActive");
269 if (prop
.isValid() && prop
.toBool())
271 //kDebug(1202) << "X-KDE-BrowserView-FollowActive -> setFollowActive";
272 setFollowActive(true);
275 prop
= m_service
->property( "X-KDE-BrowserView-Built-Into" );
276 m_bBuiltinView
= (prop
.isValid() && prop
.toString() == "konqueror");
278 if ( !m_pMainWindow
->viewManager()->isLoadingProfile() )
280 // Honor "non-removeable passive mode" (like the dirtree)
281 prop
= m_service
->property( "X-KDE-BrowserView-PassiveMode");
282 if ( prop
.isValid() && prop
.toBool() )
284 kDebug(1202) << "X-KDE-BrowserView-PassiveMode -> setPassiveMode";
285 setPassiveMode( true ); // set as passive
288 // Honor "linked view"
289 prop
= m_service
->property( "X-KDE-BrowserView-LinkedView");
290 if ( prop
.isValid() && prop
.toBool() )
292 setLinkedView( true ); // set as linked
293 // Two views : link both
294 if (m_pMainWindow
->viewCount() <= 2) // '1' can happen if this view is not yet in the map
296 KonqView
* otherView
= m_pMainWindow
->otherView( this );
298 otherView
->setLinkedView( true );
303 prop
= m_service
->property( "X-KDE-BrowserView-HierarchicalView");
304 if ( prop
.isValid() && prop
.toBool() )
306 kDebug() << "X-KDE-BrowserView-HierarchicalView -> setHierarchicalView";
307 setHierarchicalView( true ); // set as hierarchial
311 setHierarchicalView( false );
315 bool KonqView::ensureViewSupports( const QString
&mimeType
,
316 bool forceAutoEmbed
)
318 if (supportsMimeType(mimeType
)) {
319 // could be more specific, let's store it so that OpenUrlArguments::mimeType is correct
320 // testcase: http://acid3.acidtests.org/svg.xml should be opened as image/svg+xml
321 m_serviceType
= mimeType
;
324 return changePart(mimeType
, QString(), forceAutoEmbed
);
327 bool KonqView::changePart(const QString
&mimeType
,
328 const QString
&serviceName
,
331 // Caller should call stop first.
332 assert( !m_bLoading
);
334 //kDebug(1202) << "mimeType=" << mimeType
335 // << "requested serviceName=" << serviceName
336 // << "current service name=" << m_service->desktopEntryName();
338 if (serviceName
== m_service
->desktopEntryName()) {
339 m_serviceType
= mimeType
;
343 if (isLockedViewMode()) {
344 //kDebug(1202) << "This view's mode is locked - can't change";
345 return false; // we can't do that if our view mode is locked
348 KService::List partServiceOffers
, appServiceOffers
;
349 KService::Ptr service
;
350 KonqFactory konqFactory
;
351 KonqViewFactory viewFactory
= konqFactory
.createView( mimeType
, serviceName
, &service
, &partServiceOffers
, &appServiceOffers
, forceAutoEmbed
);
353 if ( viewFactory
.isNull() )
355 // Revert location bar's URL to the working one
356 if(currentHistoryEntry())
357 setLocationBarURL( currentHistoryEntry()->locationBarURL
);
361 m_serviceType
= mimeType
;
362 m_partServiceOffers
= partServiceOffers
;
363 m_appServiceOffers
= appServiceOffers
;
365 // Check if that's already the kind of part we have -> no need to recreate it
366 // Note: we should have an operator== for KService...
367 if ( m_service
&& m_service
->entryPath() == service
->entryPath() )
369 kDebug( 1202 ) << "Reusing service. Service type set to" << m_serviceType
;
370 if ( m_pMainWindow
->currentView() == this )
371 m_pMainWindow
->updateViewModeActions();
377 switchView( viewFactory
);
380 if ( m_pMainWindow
->viewManager()->activePart() != m_pPart
)
382 // Make the new part active. Note that we don't do it each time we
383 // open a URL (becomes awful in view-follows-view mode), but we do
384 // each time we change the view mode.
385 // We don't do it in switchView either because it's called from the constructor too,
386 // where the location bar url isn't set yet.
387 //kDebug(1202) << "Giving focus to new part" << m_pPart;
388 m_pMainWindow
->viewManager()->setActivePart( m_pPart
);
393 void KonqView::connectPart()
396 connect( m_pPart
, SIGNAL( started( KIO::Job
* ) ),
397 this, SLOT( slotStarted( KIO::Job
* ) ) );
398 connect( m_pPart
, SIGNAL( completed() ),
399 this, SLOT( slotCompleted() ) );
400 connect( m_pPart
, SIGNAL( completed(bool) ),
401 this, SLOT( slotCompleted(bool) ) );
402 connect( m_pPart
, SIGNAL( canceled( const QString
& ) ),
403 this, SLOT( slotCanceled( const QString
& ) ) );
404 connect( m_pPart
, SIGNAL( setWindowCaption( const QString
& ) ),
405 this, SLOT( setCaption( const QString
& ) ) );
406 if (!internalViewMode().isEmpty()) {
407 // Update checked action in "View Mode" menu when switching view mode in dolphin
408 connect(m_pPart
, SIGNAL(viewModeChanged()),
409 m_pMainWindow
, SLOT(slotInternalViewModeChanged()));
412 KParts::BrowserExtension
*ext
= browserExtension();
416 ext
->setBrowserInterface( m_browserIface
);
418 connect( ext
, SIGNAL( openUrlRequestDelayed(const KUrl
&, const KParts::OpenUrlArguments
&, const KParts::BrowserArguments
&) ),
419 m_pMainWindow
, SLOT( slotOpenURLRequest( const KUrl
&, const KParts::OpenUrlArguments
&, const KParts::BrowserArguments
& ) ) );
421 if ( m_bPopupMenuEnabled
)
423 m_bPopupMenuEnabled
= false; // force
424 enablePopupMenu( true );
427 connect( ext
, SIGNAL( setLocationBarUrl( const QString
& ) ),
428 this, SLOT( setLocationBarURL( const QString
& ) ) );
430 connect( ext
, SIGNAL( setIconUrl( const KUrl
& ) ),
431 this, SLOT( setIconURL( const KUrl
& ) ) );
433 connect( ext
, SIGNAL( setPageSecurity( int ) ),
434 this, SLOT( setPageSecurity( int ) ) );
436 connect( ext
, SIGNAL( createNewWindow(const KUrl
&, const KParts::OpenUrlArguments
&, const KParts::BrowserArguments
&, const KParts::WindowArgs
&, KParts::ReadOnlyPart
**) ),
437 m_pMainWindow
, SLOT( slotCreateNewWindow( const KUrl
&, const KParts::OpenUrlArguments
&, const KParts::BrowserArguments
&, const KParts::WindowArgs
&, KParts::ReadOnlyPart
**) ) );
439 connect( ext
, SIGNAL( loadingProgress( int ) ),
440 m_pKonqFrame
->statusbar(), SLOT( slotLoadingProgress( int ) ) );
442 connect( ext
, SIGNAL( speedProgress( int ) ),
443 m_pKonqFrame
->statusbar(), SLOT( slotSpeedProgress( int ) ) );
445 connect( ext
, SIGNAL( selectionInfo( const KFileItemList
& ) ),
446 this, SLOT( slotSelectionInfo( const KFileItemList
& ) ) );
448 connect( ext
, SIGNAL( mouseOverInfo( const KFileItem
& ) ),
449 this, SLOT( slotMouseOverInfo( const KFileItem
& ) ) );
451 connect( ext
, SIGNAL( openUrlNotify() ),
452 this, SLOT( slotOpenURLNotify() ) );
454 connect( ext
, SIGNAL( enableAction( const char *, bool ) ),
455 this, SLOT( slotEnableAction( const char *, bool ) ) );
457 connect( ext
, SIGNAL( setActionText( const char *, const QString
& ) ),
458 this, SLOT( slotSetActionText( const char *, const QString
& ) ) );
460 connect( ext
, SIGNAL( moveTopLevelWidget( int, int ) ),
461 this, SLOT( slotMoveTopLevelWidget( int, int ) ) );
463 connect( ext
, SIGNAL( resizeTopLevelWidget( int, int ) ),
464 this, SLOT( slotResizeTopLevelWidget( int, int ) ) );
466 connect( ext
, SIGNAL( requestFocus(KParts::ReadOnlyPart
*) ),
467 this, SLOT( slotRequestFocus(KParts::ReadOnlyPart
*) ) );
469 if (service()->desktopEntryName() != "konq_sidebartng") {
470 connect( ext
, SIGNAL( infoMessage( const QString
& ) ),
471 m_pKonqFrame
->statusbar(), SLOT( message( const QString
& ) ) );
474 SIGNAL( addWebSideBar(const KUrl
&, const QString
&) ),
476 SLOT( slotAddWebSideBar(const KUrl
&, const QString
&) ) );
480 QVariant urlDropHandling
;
483 urlDropHandling
= ext
->property( "urlDropHandling" );
485 urlDropHandling
= QVariant( true );
487 // Handle url drops if
488 // a) either the property says "ok"
490 // b) the part is a plain krop (no BE)
491 m_bURLDropHandling
= ( urlDropHandling
.type() == QVariant::Bool
&&
492 urlDropHandling
.toBool() );
494 m_pPart
->widget()->installEventFilter( this );
496 if (m_bBackRightClick
) {
497 QAbstractScrollArea
* scrollArea
= ::qobject_cast
<QAbstractScrollArea
*>( m_pPart
->widget() );
499 scrollArea
->viewport()->installEventFilter( this );
504 // KonqDirPart signal
505 if ( ::qobject_cast
<KonqDirPart
*>(m_pPart
) )
507 connect( m_pPart
, SIGNAL( findOpen( KonqDirPart
* ) ),
508 m_pMainWindow
, SLOT( slotFindOpen( KonqDirPart
* ) ) );
513 void KonqView::slotEnableAction( const char * name
, bool enabled
)
515 if ( m_pMainWindow
->currentView() == this )
516 m_pMainWindow
->enableAction( name
, enabled
);
517 // Otherwise, we don't have to do anything, the state of the action is
518 // stored inside the browser-extension.
521 void KonqView::slotSetActionText( const char* name
, const QString
& text
)
523 if ( m_pMainWindow
->currentView() == this )
524 m_pMainWindow
->setActionText( name
, text
);
525 // Otherwise, we don't have to do anything, the state of the action is
526 // stored inside the browser-extension.
529 void KonqView::slotMoveTopLevelWidget( int x
, int y
)
531 KonqFrameContainerBase
* container
= frame()->parentContainer();
532 // If tabs are shown, only accept to move the whole window if there's only one tab.
533 if (container
->frameType() != KonqFrameBase::Tabs
|| static_cast<KonqFrameTabs
*>(container
)->count() == 1)
534 m_pMainWindow
->move( x
, y
);
537 void KonqView::slotResizeTopLevelWidget( int w
, int h
)
539 KonqFrameContainerBase
* container
= frame()->parentContainer();
540 // If tabs are shown, only accept to resize the whole window if there's only one tab.
541 // ### Maybe we could store the size requested by each tab and resize the window to the biggest one.
542 if (container
->frameType() != KonqFrameBase::Tabs
|| static_cast<KonqFrameTabs
*>(container
)->count() == 1)
543 m_pMainWindow
->resize( w
, h
);
546 void KonqView::slotStarted( KIO::Job
* job
)
548 //kDebug(1202) << job;
553 // Manage passwords properly...
554 kDebug(7035) << "Window ID =" << m_pMainWindow
->window()->winId();
555 job
->ui()->setWindow (m_pMainWindow
->window());
557 connect( job
, SIGNAL( percent( KJob
*, unsigned long ) ), this, SLOT( slotPercent( KJob
*, unsigned long ) ) );
558 connect( job
, SIGNAL( speed( KJob
*, unsigned long ) ), this, SLOT( slotSpeed( KJob
*, unsigned long ) ) );
559 connect( job
, SIGNAL( infoMessage( KJob
*, const QString
&, const QString
& ) ), this, SLOT( slotInfoMessage( KJob
*, const QString
& ) ) );
563 void KonqView::slotRequestFocus( KParts::ReadOnlyPart
* )
565 m_pMainWindow
->viewManager()->showTab(this);
568 void KonqView::setLoading( bool loading
, bool hasPending
/*= false*/)
570 //kDebug(1202) << "loading=" << loading << "hasPending=" << hasPending;
571 m_bLoading
= loading
;
572 m_bPendingRedirection
= hasPending
;
573 if ( m_pMainWindow
->currentView() == this )
574 m_pMainWindow
->updateToolBarActions( hasPending
);
576 m_pMainWindow
->viewManager()->setLoading( this, loading
|| hasPending
);
579 void KonqView::slotPercent( KJob
*, unsigned long percent
)
581 m_pKonqFrame
->statusbar()->slotLoadingProgress( percent
);
584 void KonqView::slotSpeed( KJob
*, unsigned long bytesPerSecond
)
586 m_pKonqFrame
->statusbar()->slotSpeedProgress( bytesPerSecond
);
589 void KonqView::slotInfoMessage( KJob
*, const QString
&msg
)
591 m_pKonqFrame
->statusbar()->message( msg
);
594 void KonqView::slotCompleted()
596 slotCompleted( false );
599 void KonqView::slotCompleted( bool hasPending
)
601 //kDebug(1202) << "hasPending=" << hasPending;
602 m_pKonqFrame
->statusbar()->slotLoadingProgress( -1 );
604 if ( ! m_bLockHistory
)
606 // Success... update history entry, including location bar URL
607 updateHistoryEntry( true );
609 if ( m_bAborted
) // remove the pending entry on error
610 KonqHistoryManager::kself()->removePending( url() );
611 else if ( currentHistoryEntry() ) // register as proper history entry
612 KonqHistoryManager::kself()->confirmPending(url(), typedUrl(),
613 currentHistoryEntry()->title
);
615 emit
viewCompleted( this );
617 setLoading( false, hasPending
);
619 if (!m_bGotIconURL
&& !m_bAborted
)
621 if ( KonqSettings::enableFavicon() == true )
623 // Try to get /favicon.ico
624 if ( supportsMimeType( "text/html" ) && url().protocol().startsWith( "http" ) )
625 KonqPixmapProvider::self()->downloadHostIcon( url().url() );
630 void KonqView::slotCanceled( const QString
& errorMsg
)
633 // The errorMsg comes from the ReadOnlyPart's job.
634 // It should probably be used in a KMessageBox
635 // Let's use the statusbar for now
636 m_pKonqFrame
->statusbar()->message( errorMsg
);
641 void KonqView::slotSelectionInfo( const KFileItemList
&items
)
643 KonqFileSelectionEvent
ev( items
, m_pPart
);
644 QApplication::sendEvent( m_pMainWindow
, &ev
);
647 void KonqView::slotMouseOverInfo( const KFileItem
& item
)
649 KonqFileMouseOverEvent
ev( item
, m_pPart
);
650 QApplication::sendEvent( m_pMainWindow
, &ev
);
653 void KonqView::setLocationBarURL( const KUrl
& locationBarURL
)
655 setLocationBarURL( locationBarURL
.pathOrUrl() );
658 void KonqView::setLocationBarURL( const QString
& locationBarURL
)
660 //kDebug(1202) << locationBarURL << "this=" << this;
661 m_sLocationBarURL
= locationBarURL
;
662 if (m_pMainWindow
->currentView() == this) {
663 //kDebug(1202) << "is current view" << this;
664 m_pMainWindow
->setLocationBarURL( m_sLocationBarURL
);
665 m_pMainWindow
->setPageSecurity( m_pageSecurity
);
668 setTabIcon( KUrl( m_sLocationBarURL
) );
671 void KonqView::setIconURL( const KUrl
& iconURL
)
672 // This function sets the favIcon in konqui's window if enabled,
673 // thus it is responsible for the icon in the taskbar.
674 // It does not set the tab's favIcon.
676 if ( KonqSettings::enableFavicon() )
678 KonqPixmapProvider::self()->setIconForUrl( m_sLocationBarURL
, iconURL
.url() );
679 m_bGotIconURL
= true;
683 void KonqView::setPageSecurity( int pageSecurity
)
685 m_pageSecurity
= (KonqMainWindow::PageSecurity
)pageSecurity
;
687 if ( m_pMainWindow
->currentView() == this )
688 m_pMainWindow
->setPageSecurity( m_pageSecurity
);
691 void KonqView::setTabIcon( const KUrl
&url
)
693 if (!m_bPassiveMode
) frame()->setTabIcon( url
, 0L );
696 void KonqView::setCaption( const QString
& caption
)
698 if (caption
.isEmpty()) return;
700 QString adjustedCaption
= caption
;
701 // For local URLs we prefer to use only the directory name
702 if (url().isLocalFile())
704 // Is the caption a URL? If so, is it local? If so, only display the filename!
706 if (url
.isValid() && url
.isLocalFile() && url
.fileName() == this->url().fileName())
707 adjustedCaption
= url
.fileName();
710 m_caption
= adjustedCaption
;
711 if (!m_bPassiveMode
) frame()->setTitle( adjustedCaption
, 0L );
714 void KonqView::slotOpenURLNotify()
719 updateHistoryEntry(true);
720 createHistoryEntry();
721 if ( m_pMainWindow
->currentView() == this )
722 m_pMainWindow
->updateToolBarActions();
725 void KonqView::createHistoryEntry()
727 // First, remove any forward history
728 HistoryEntry
* current
= currentHistoryEntry();
732 kDebug(1202) << "Truncating history";
734 while ( current
!= m_lstHistory
.last() )
735 delete m_lstHistory
.takeLast();
737 // Append a new entry
739 kDebug(1202) << "Append a new entry";
741 appendHistoryEntry( new HistoryEntry
);
742 setHistoryIndex( m_lstHistory
.count()-1 ); // made current
744 kDebug(1202) << "at=" << historyIndex() << "count=" << m_lstHistory
.count();
748 void KonqView::appendHistoryEntry(HistoryEntry
* historyEntry
)
750 // If there are too many HistoryEntries remove old ones
751 while(m_lstHistory
.count() > 0 && m_lstHistory
.count() >= KonqSettings::maximumHistoryEntriesPerView())
752 delete m_lstHistory
.takeFirst();
754 m_lstHistory
.append( historyEntry
);
757 void KonqView::updateHistoryEntry( bool saveLocationBarURL
)
759 Q_ASSERT( !m_bLockHistory
); // should never happen
761 HistoryEntry
* current
= currentHistoryEntry();
765 current
->reload
= false; // We have a state for it now.
766 if ( browserExtension() )
768 current
->buffer
= QByteArray(); // Start with empty buffer.
769 QDataStream
stream( ¤t
->buffer
, QIODevice::WriteOnly
);
771 browserExtension()->saveState( stream
);
775 kDebug(1202) << "Saving part URL:" << m_pPart
->url() << "in history position" << historyIndex();
777 current
->url
= m_pPart
->url();
779 if (saveLocationBarURL
)
782 kDebug(1202) << "Saving location bar URL:" << m_sLocationBarURL
<< "in history position" << historyIndex();
784 current
->locationBarURL
= m_sLocationBarURL
;
785 current
->pageSecurity
= m_pageSecurity
;
788 kDebug(1202) << "Saving title:" << m_caption
<< "in history position" << historyIndex();
790 current
->title
= m_caption
;
791 current
->strServiceType
= m_serviceType
;
792 current
->strServiceName
= m_service
->desktopEntryName();
794 current
->doPost
= m_doPost
;
795 current
->postData
= m_doPost
? m_postData
: QByteArray();
796 current
->postContentType
= m_doPost
? m_postContentType
: QString();
797 current
->pageReferrer
= m_pageReferrer
;
800 void KonqView::goHistory( int steps
)
802 // This is called by KonqBrowserInterface
803 if ( m_pMainWindow
->currentView() == this )
804 m_pMainWindow
->viewManager()->setActivePart( part() );
806 // Delay the go() call (we need to return to the caller first)
807 m_pMainWindow
->slotGoHistoryActivated( steps
);
810 void KonqView::go( int steps
)
812 if ( !steps
) // [WildFox] i bet there are sites on the net with stupid devs who do that :)
815 kDebug(1202) << "go(0) -> reload";
817 // [David] and you're right. And they expect that it reloads, apparently.
818 // [George] I'm going to make nspluginviewer rely on this too. :-)
819 m_pMainWindow
->slotReload();
823 int newPos
= historyIndex() + steps
;
825 kDebug(1202) << "steps=" << steps
826 << "newPos=" << newPos
827 << "m_lstHistory.count()=" << m_lstHistory
.count();
829 if( newPos
< 0 || newPos
>= m_lstHistory
.count() )
834 setHistoryIndex( newPos
); // sets current item
837 kDebug(1202) << "New position" << historyIndex();
843 void KonqView::restoreHistory()
845 HistoryEntry
h( *currentHistoryEntry() ); // make a copy of the current history entry, as the data
846 // the pointer points to will change with the following calls
849 kDebug(1202) << "Restoring servicetype/name, and location bar URL from history:" << h
.locationBarURL
;
851 setLocationBarURL( h
.locationBarURL
);
852 setPageSecurity( h
.pageSecurity
);
855 if (!changePart(h
.strServiceType
, h
.strServiceName
)) {
856 kWarning(1202) << "Couldn't change view mode to" << h
.strServiceType
<< h
.strServiceName
;
862 aboutToOpenURL( h
.url
);
864 if ( h
.reload
== false && browserExtension() )
866 //kDebug(1202) << "Restoring view from stream";
867 QDataStream
stream( h
.buffer
);
869 browserExtension()->restoreState( stream
);
872 m_postContentType
= h
.postContentType
;
873 m_postData
= h
.postData
;
874 m_pageReferrer
= h
.pageReferrer
;
877 m_pPart
->openUrl( h
.url
);
879 if ( m_pMainWindow
->currentView() == this )
880 m_pMainWindow
->updateToolBarActions();
883 kDebug(1202) << "New position (2)" << historyIndex();
887 const HistoryEntry
* KonqView::historyAt(int pos
)
889 return m_lstHistory
.value(pos
);
892 void KonqView::copyHistory( KonqView
*other
)
894 qDeleteAll( m_lstHistory
);
895 m_lstHistory
.clear();
897 foreach ( HistoryEntry
* he
, other
->m_lstHistory
)
898 appendHistoryEntry( new HistoryEntry( *he
) );
899 setHistoryIndex(other
->historyIndex());
902 KUrl
KonqView::url() const
905 return m_pPart
->url();
908 KUrl
KonqView::upUrl() const
912 currentURL
= m_pRun
->url();
914 currentURL
= m_sLocationBarURL
;
915 return currentURL
.upUrl();
918 void KonqView::setRun( KonqRun
* run
)
922 // Tell the KonqRun to abort, but don't delete it ourselves.
923 // It could be showing a message box right now. It will delete itself anyway.
925 // finish() will be emitted later (when back to event loop)
926 // and we don't want it to call slotRunFinished (which stops the animation and stop button).
927 m_pRun
->disconnect( m_pMainWindow
);
929 frame()->unsetCursor();
932 frame()->setCursor( Qt::BusyCursor
);
936 void KonqView::stop()
940 finishedWithCurrentURL();
941 if ( m_bLoading
|| m_bPendingRedirection
)
943 // aborted -> confirm the pending url. We might as well remove it, but
944 // we decided to keep it :)
945 KonqHistoryManager::kself()->confirmPending( url(), m_sTypedURL
);
947 //kDebug(1202) << "m_pPart->closeUrl()";
950 m_pKonqFrame
->statusbar()->slotLoadingProgress( -1 );
951 setLoading( false, false );
955 // Revert to working URL - unless the URL was typed manually
956 // This is duplicated with KonqMainWindow::slotRunFinished, but we can't call it
957 // since it relies on sender()...
958 if ( currentHistoryEntry() && m_pRun
->typedUrl().isEmpty() ) { // not typed
959 setLocationBarURL( currentHistoryEntry()->locationBarURL
);
960 setPageSecurity( currentHistoryEntry()->pageSecurity
);
964 m_pKonqFrame
->statusbar()->slotLoadingProgress( -1 );
966 if ( !m_bLockHistory
&& m_lstHistory
.count() > 0 )
967 updateHistoryEntry(true);
970 void KonqView::finishedWithCurrentURL()
972 if ( !m_tempFile
.isEmpty() )
974 kDebug(1202) << "######### Deleting tempfile after use:" << m_tempFile
;
975 QFile::remove( m_tempFile
);
980 void KonqView::setPassiveMode( bool mode
)
982 // In theory, if m_bPassiveMode is true and mode is false,
983 // the part should be removed from the part manager,
984 // and if the other way round, it should be readded to the part manager...
985 m_bPassiveMode
= mode
;
987 if ( mode
&& m_pMainWindow
->viewCount() > 1 && m_pMainWindow
->currentView() == this )
989 KParts::Part
* part
= m_pMainWindow
->viewManager()->chooseNextView( this )->part(); // switch active part
990 m_pMainWindow
->viewManager()->setActivePart( part
);
993 // Update statusbar stuff
994 m_pMainWindow
->viewManager()->viewCountChanged();
997 void KonqView::setHierarchicalView( bool mode
)
999 m_bHierarchicalView
=mode
;
1004 void KonqView::setLinkedView( bool mode
)
1006 m_bLinkedView
= mode
;
1007 if ( m_pMainWindow
->currentView() == this )
1008 m_pMainWindow
->linkViewAction()->setChecked( mode
);
1009 frame()->statusbar()->setLinkedView( mode
);
1012 void KonqView::setLockedLocation( bool b
)
1014 m_bLockedLocation
= b
;
1017 void KonqView::aboutToOpenURL( const KUrl
&url
, const KParts::OpenUrlArguments
&args
)
1019 KParts::OpenUrlEvent
ev( m_pPart
, url
, args
);
1020 QApplication::sendEvent( m_pMainWindow
, &ev
);
1022 m_bGotIconURL
= false;
1026 void KonqView::setPartMimeType()
1028 KParts::OpenUrlArguments
args( m_pPart
->arguments() );
1029 args
.setMimeType( m_serviceType
);
1030 m_pPart
->setArguments( args
);
1033 QStringList
KonqView::frameNames() const
1035 return childFrameNames( m_pPart
);
1038 QStringList
KonqView::childFrameNames( KParts::ReadOnlyPart
*part
)
1042 KParts::BrowserHostExtension
*hostExtension
= KParts::BrowserHostExtension::childObject( part
);
1044 if ( !hostExtension
)
1047 res
+= hostExtension
->frameNames();
1049 const QList
<KParts::ReadOnlyPart
*> children
= hostExtension
->frames();
1050 QListIterator
<KParts::ReadOnlyPart
*> i(children
);
1052 res
+= childFrameNames( i
.next() );
1057 KParts::BrowserHostExtension
* KonqView::hostExtension( KParts::ReadOnlyPart
*part
, const QString
&name
)
1059 KParts::BrowserHostExtension
*ext
= KParts::BrowserHostExtension::childObject( part
);
1064 if ( ext
->frameNames().contains( name
) )
1067 const QList
<KParts::ReadOnlyPart
*> children
= ext
->frames();
1068 QListIterator
<KParts::ReadOnlyPart
*> i(children
);
1071 KParts::BrowserHostExtension
*childHost
= hostExtension( i
.next(), name
);
1080 bool KonqView::callExtensionMethod( const char *methodName
)
1082 QObject
*obj
= KParts::BrowserExtension::childObject( m_pPart
);
1083 if ( !obj
) // not all views have a browser extension !
1086 return QMetaObject::invokeMethod( obj
, methodName
, Qt::DirectConnection
);
1089 bool KonqView::callExtensionBoolMethod( const char *methodName
, bool value
)
1091 QObject
*obj
= KParts::BrowserExtension::childObject( m_pPart
);
1092 if ( !obj
) // not all views have a browser extension !
1095 return QMetaObject::invokeMethod( obj
, methodName
, Qt::DirectConnection
, Q_ARG(bool,value
));
1098 bool KonqView::callExtensionURLMethod( const char *methodName
, const KUrl
& value
)
1100 QObject
*obj
= KParts::BrowserExtension::childObject( m_pPart
);
1101 if ( !obj
) // not all views have a browser extension !
1104 return QMetaObject::invokeMethod( obj
, methodName
, Qt::DirectConnection
, Q_ARG(KUrl
, value
));
1107 void KonqView::setViewName( const QString
&name
)
1109 //kDebug() << this << "name=" << name;
1111 m_pPart
->setObjectName( name
);
1114 QString
KonqView::viewName() const
1116 return m_pPart
? m_pPart
->objectName() : QString();
1119 void KonqView::enablePopupMenu( bool b
)
1121 Q_ASSERT( m_pMainWindow
);
1123 KParts::BrowserExtension
*ext
= browserExtension();
1128 if ( m_bPopupMenuEnabled
== b
)
1131 // enable context popup
1133 m_bPopupMenuEnabled
= true;
1135 connect( ext
, SIGNAL(popupMenu(QPoint
,KFileItemList
,KParts::OpenUrlArguments
,KParts::BrowserArguments
,KParts::BrowserExtension::PopupFlags
,KParts::BrowserExtension::ActionGroupMap
)),
1136 m_pMainWindow
, SLOT(slotPopupMenu(QPoint
,KFileItemList
,KParts::OpenUrlArguments
,KParts::BrowserArguments
,KParts::BrowserExtension::PopupFlags
,KParts::BrowserExtension::ActionGroupMap
)) );
1138 connect( ext
, SIGNAL(popupMenu(QPoint
,KUrl
,mode_t
,KParts::OpenUrlArguments
,KParts::BrowserArguments
,KParts::BrowserExtension::PopupFlags
,KParts::BrowserExtension::ActionGroupMap
)),
1139 m_pMainWindow
, SLOT(slotPopupMenu(QPoint
,KUrl
,mode_t
,KParts::OpenUrlArguments
,KParts::BrowserArguments
,KParts::BrowserExtension::PopupFlags
,KParts::BrowserExtension::ActionGroupMap
)) );
1141 else // disable context popup
1143 m_bPopupMenuEnabled
= false;
1145 disconnect( ext
, SIGNAL(popupMenu(QPoint
,KFileItemList
,KParts::OpenUrlArguments
,KParts::BrowserArguments
,KParts::BrowserExtension::PopupFlags
,KParts::BrowserExtension::ActionGroupMap
)),
1146 m_pMainWindow
, SLOT(slotPopupMenu(QPoint
,KFileItemList
,KParts::OpenUrlArguments
,KParts::BrowserArguments
,KParts::BrowserExtension::PopupFlags
,KParts::BrowserExtension::ActionGroupMap
)) );
1148 disconnect( ext
, SIGNAL(popupMenu(QPoint
,KUrl
,mode_t
,KParts::OpenUrlArguments
,KParts::BrowserArguments
,KParts::BrowserExtension::PopupFlags
,KParts::BrowserExtension::ActionGroupMap
)),
1149 m_pMainWindow
, SLOT(slotPopupMenu(QPoint
,KUrl
,mode_t
,KParts::OpenUrlArguments
,KParts::BrowserArguments
,KParts::BrowserExtension::PopupFlags
,KParts::BrowserExtension::ActionGroupMap
)) );
1151 enableBackRightClick( m_bBackRightClick
);
1154 // caller should ensure that this is called only when b changed, or for new parts
1155 void KonqView::enableBackRightClick( bool b
)
1157 m_bBackRightClick
= b
;
1159 connect( this, SIGNAL( backRightClick() ),
1160 m_pMainWindow
, SLOT( slotBack() ) );
1162 disconnect( this, SIGNAL( backRightClick() ),
1163 m_pMainWindow
, SLOT( slotBack() ) );
1166 void KonqView::reparseConfiguration()
1168 callExtensionMethod( "reparseConfiguration" );
1169 const bool b
= KonqSettings::backRightClick();
1170 if ( m_bBackRightClick
!= b
) {
1171 QAbstractScrollArea
* scrollArea
= ::qobject_cast
<QAbstractScrollArea
*>( m_pPart
->widget() );
1173 if ( m_bBackRightClick
) {
1174 scrollArea
->viewport()->installEventFilter( this );
1176 scrollArea
->viewport()->removeEventFilter( this );
1179 enableBackRightClick( b
);
1183 void KonqView::disableScrolling()
1185 m_bDisableScrolling
= true;
1186 callExtensionMethod( "disableScrolling" );
1189 QString
KonqView::dbusObjectPath()
1191 // TODO maybe this can be improved?
1192 // E.g. using the part's name, but we'd have to update the name in setViewName maybe?
1193 // And to make sure it's a valid dbus object path like in kmainwindow...
1194 static int s_viewNumber
= 0;
1195 if ( m_dbusObjectPath
.isEmpty() ) {
1196 m_dbusObjectPath
= m_pMainWindow
->dbusName() + '/' + QString::number( ++s_viewNumber
);
1197 new KonqViewAdaptor( this );
1198 QDBusConnection::sessionBus().registerObject( m_dbusObjectPath
, this );
1200 return m_dbusObjectPath
;
1203 QString
KonqView::partObjectPath()
1208 const QVariant dcopProperty
= m_pPart
->property( "dbusObjectPath" );
1209 return dcopProperty
.toString();
1212 bool KonqView::eventFilter( QObject
*obj
, QEvent
*e
)
1216 // kDebug() << "--" << obj->className() << "--" << e->type() << "--" ;
1217 if ( e
->type() == QEvent::DragEnter
&& m_bURLDropHandling
&& obj
== m_pPart
->widget() )
1219 QDragEnterEvent
*ev
= static_cast<QDragEnterEvent
*>( e
);
1221 if ( KUrl::List::canDecode( ev
->mimeData() ) )
1223 KUrl::List lstDragURLs
= KUrl::List::fromMimeData( ev
->mimeData() );
1225 QList
<QWidget
*> children
= qFindChildren
<QWidget
*>( m_pPart
->widget() );
1227 if ( !lstDragURLs
.isEmpty()
1228 && !lstDragURLs
.first().url().startsWith( "javascript:", Qt::CaseInsensitive
) && // ### this looks like a hack to me
1229 ev
->source() != m_pPart
->widget() &&
1230 !children
.contains( ev
->source() ) )
1231 ev
->acceptProposedAction();
1234 else if ( e
->type() == QEvent::Drop
&& m_bURLDropHandling
&& obj
== m_pPart
->widget() )
1236 QDropEvent
*ev
= static_cast<QDropEvent
*>( e
);
1238 KUrl::List lstDragURLs
= KUrl::List::fromMimeData( ev
->mimeData() );
1239 KParts::BrowserExtension
*ext
= browserExtension();
1240 if ( !lstDragURLs
.isEmpty() && ext
&& lstDragURLs
.first().isValid() )
1241 emit ext
->openUrlRequest( lstDragURLs
.first() ); // this will call m_pMainWindow::slotOpenURLRequest delayed
1244 if ( m_bBackRightClick
)
1246 if ( e
->type() == QEvent::ContextMenu
)
1248 QContextMenuEvent
*ev
= static_cast<QContextMenuEvent
*>( e
);
1249 if ( ev
->reason() == QContextMenuEvent::Mouse
)
1254 else if ( e
->type() == QEvent::MouseButtonPress
)
1256 QMouseEvent
*ev
= static_cast<QMouseEvent
*>( e
);
1257 if ( ev
->button() == Qt::RightButton
)
1262 else if ( e
->type() == QEvent::MouseButtonRelease
)
1264 QMouseEvent
*ev
= static_cast<QMouseEvent
*>( e
);
1265 if ( ev
->button() == Qt::RightButton
)
1267 emit
backRightClick();
1271 else if ( e
->type() == QEvent::MouseMove
)
1273 QMouseEvent
*ev
= static_cast<QMouseEvent
*>( e
);
1274 if ( ev
->button() == Qt::RightButton
)
1276 obj
->removeEventFilter( this );
1277 QMouseEvent
me( QEvent::MouseButtonPress
, ev
->pos(), Qt::RightButton
, Qt::RightButton
, Qt::NoModifier
);
1278 QApplication::sendEvent( obj
, &me
);
1279 QContextMenuEvent
ce( QContextMenuEvent::Mouse
, ev
->pos(), ev
->globalPos() );
1280 QApplication::sendEvent( obj
, &ce
);
1281 obj
->installEventFilter( this );
1287 if ( e
->type() == QEvent::FocusIn
)
1289 setActiveComponent();
1294 void KonqView::setActiveComponent()
1296 if ( m_bBuiltinView
|| !m_pPart
->componentData().isValid() /*never!*/)
1297 KGlobal::setActiveComponent( KGlobal::mainComponent() );
1299 KGlobal::setActiveComponent( m_pPart
->componentData() );
1302 bool KonqView::prepareReload( KParts::OpenUrlArguments
& args
, KParts::BrowserArguments
& browserArgs
, bool softReload
)
1304 args
.setReload( true );
1306 browserArgs
.softReload
= true;
1308 // Repost form data if this URL is the result of a POST HTML form.
1309 if ( m_doPost
&& !browserArgs
.redirectedRequest() )
1311 if ( KMessageBox::warningContinueCancel( 0, i18n(
1312 "The page you are trying to view is the result of posted form data. "
1313 "If you resend the data, any action the form carried out (such as search or online purchase) will be repeated. "),
1314 i18n( "Warning" ), KGuiItem(i18n( "Resend" )) ) == KMessageBox::Continue
)
1316 browserArgs
.setDoPost( true );
1317 browserArgs
.setContentType( m_postContentType
);
1318 browserArgs
.postData
= m_postData
;
1324 args
.metaData()["referrer"] = m_pageReferrer
;
1329 KParts::BrowserExtension
* KonqView::browserExtension() const
1331 return KParts::BrowserExtension::childObject( m_pPart
);
1334 KParts::StatusBarExtension
* KonqView::statusBarExtension() const
1336 return KParts::StatusBarExtension::childObject( m_pPart
);
1339 bool KonqView::supportsMimeType( const QString
&mimeType
) const
1341 KMimeType::Ptr mime
= KMimeType::mimeType(mimeType
, KMimeType::ResolveAliases
);
1344 const QStringList lst
= serviceTypes();
1345 for( QStringList::ConstIterator it
= lst
.begin(); it
!= lst
.end(); ++it
) {
1346 if ( mime
->is(*it
) ) // same as mime == *it, but also respect inheritance, mimeType can be a subclass
1352 void HistoryEntry::saveConfig( KConfigGroup
& config
, const QString
&prefix
, const KonqFrameBase::Options
&options
)
1354 if (options
& KonqFrameBase::saveURLs
) {
1355 config
.writeEntry( QString::fromLatin1( "Url" ).prepend( prefix
), url
.url() );
1356 config
.writeEntry( QString::fromLatin1( "LocationBarURL" ).prepend( prefix
), locationBarURL
);
1357 config
.writeEntry( QString::fromLatin1( "Title" ).prepend( prefix
), title
);
1358 config
.writeEntry( QString::fromLatin1( "StrServiceType" ).prepend( prefix
), strServiceType
);
1359 config
.writeEntry( QString::fromLatin1( "StrServiceName" ).prepend( prefix
), strServiceName
);
1360 } else if(options
& KonqFrameBase::saveHistoryItems
) {
1361 config
.writeEntry( QString::fromLatin1( "Url" ).prepend( prefix
), url
.url() );
1362 config
.writeEntry( QString::fromLatin1( "LocationBarURL" ).prepend( prefix
), locationBarURL
);
1363 config
.writeEntry( QString::fromLatin1( "Title" ).prepend( prefix
), title
);
1364 config
.writeEntry( QString::fromLatin1( "Buffer" ).prepend( prefix
), buffer
);
1365 config
.writeEntry( QString::fromLatin1( "StrServiceType" ).prepend( prefix
), strServiceType
);
1366 config
.writeEntry( QString::fromLatin1( "StrServiceName" ).prepend( prefix
), strServiceName
);
1367 config
.writeEntry( QString::fromLatin1( "PostData" ).prepend( prefix
), postData
);
1368 config
.writeEntry( QString::fromLatin1( "PostContentType" ).prepend( prefix
), postContentType
);
1369 config
.writeEntry( QString::fromLatin1( "DoPost" ).prepend( prefix
), doPost
);
1370 config
.writeEntry( QString::fromLatin1( "PageReferrer" ).prepend( prefix
), pageReferrer
);
1371 config
.writeEntry( QString::fromLatin1( "PageSecurity" ).prepend( prefix
), (int)pageSecurity
);
1375 void HistoryEntry::loadItem( const KConfigGroup
& config
, const QString
&prefix
, const KonqFrameBase::Options
&options
)
1378 if (options
& KonqFrameBase::saveURLs
) {
1379 url
= KUrl(config
.readEntry( QString::fromLatin1( "Url" ).prepend( prefix
), "" ));
1380 locationBarURL
= config
.readEntry( QString::fromLatin1( "LocationBarURL" ).prepend( prefix
), "" );
1381 title
= config
.readEntry( QString::fromLatin1( "Title" ).prepend( prefix
), "" );
1382 strServiceType
= config
.readEntry( QString::fromLatin1( "StrServiceType" ).prepend( prefix
), "" );
1383 strServiceName
= config
.readEntry( QString::fromLatin1( "StrServiceName" ).prepend( prefix
), "" );
1385 } else if(options
& KonqFrameBase::saveHistoryItems
) {
1386 url
= KUrl(config
.readEntry( QString::fromLatin1( "Url" ).prepend( prefix
), "" ));
1387 locationBarURL
= config
.readEntry( QString::fromLatin1( "LocationBarURL" ).prepend( prefix
), "" );
1388 title
= config
.readEntry( QString::fromLatin1( "Title" ).prepend( prefix
), "" );
1389 buffer
= config
.readEntry( QString::fromLatin1( "Buffer" ).prepend( prefix
), QByteArray() );
1390 strServiceType
= config
.readEntry( QString::fromLatin1( "StrServiceType" ).prepend( prefix
), "" );
1391 strServiceName
= config
.readEntry( QString::fromLatin1( "StrServiceName" ).prepend( prefix
), "" );
1392 postData
= config
.readEntry( QString::fromLatin1( "PostData" ).prepend( prefix
), QByteArray() );
1393 postContentType
= config
.readEntry( QString::fromLatin1( "PostContentType" ).prepend( prefix
), "" );
1394 doPost
= config
.readEntry( QString::fromLatin1( "DoPost" ).prepend( prefix
), false );
1395 pageReferrer
= config
.readEntry( QString::fromLatin1( "PageReferrer" ).prepend( prefix
), "" );
1396 pageSecurity
= (KonqMainWindow::PageSecurity
)config
.readEntry( QString::fromLatin1( "PageSecurity" ).prepend( prefix
), 0 );
1401 void KonqView::saveConfig( KConfigGroup
& config
, const QString
&prefix
, const KonqFrameBase::Options
&options
)
1403 config
.writeEntry( QString::fromLatin1( "ServiceType" ).prepend( prefix
), serviceType() );
1404 config
.writeEntry( QString::fromLatin1( "ServiceName" ).prepend( prefix
), service()->desktopEntryName() );
1405 config
.writeEntry( QString::fromLatin1( "PassiveMode" ).prepend( prefix
), isPassiveMode() );
1406 config
.writeEntry( QString::fromLatin1( "LinkedView" ).prepend( prefix
), isLinkedView() );
1407 config
.writeEntry( QString::fromLatin1( "ToggleView" ).prepend( prefix
), isToggleView() );
1408 config
.writeEntry( QString::fromLatin1( "LockedLocation" ).prepend( prefix
), isLockedLocation() );
1410 if (options
& KonqFrameBase::saveURLs
) {
1411 config
.writePathEntry( QString::fromLatin1( "URL" ).prepend( prefix
), url().url() );
1412 } else if(options
& KonqFrameBase::saveHistoryItems
) {
1413 if (m_pPart
&& !m_bLockHistory
)
1414 updateHistoryEntry(true);
1415 QList
<HistoryEntry
*>::Iterator it
= m_lstHistory
.begin();
1416 for ( int i
= 0; it
!= m_lstHistory
.end(); ++it
, ++i
)
1418 // In order to not end up with a huge config file, we only save full
1419 // history for current history item
1420 KonqFrameBase::Options options
;
1421 if(i
== m_lstHistoryIndex
)
1422 options
= KonqFrameBase::saveHistoryItems
;
1424 options
= KonqFrameBase::saveURLs
;
1426 (*it
)->saveConfig(config
, QString::fromLatin1( "HistoryItem" )
1427 + QString::number(i
).prepend( prefix
), options
);
1429 config
.writeEntry( QString::fromLatin1( "CurrentHistoryItem" ).prepend( prefix
), m_lstHistoryIndex
);
1430 config
.writeEntry( QString::fromLatin1( "NumberOfHistoryItems" ).prepend( prefix
), historyLength() );
1434 void KonqView::loadHistoryConfig(const KConfigGroup
& config
, const QString
&prefix
)
1436 // First, remove any history
1437 qDeleteAll(m_lstHistory
);
1438 m_lstHistory
.clear();
1440 int historySize
= config
.readEntry( QString::fromLatin1( "NumberOfHistoryItems" ).prepend( prefix
), 0 );
1441 int currentIndex
= config
.readEntry( QString::fromLatin1( "CurrentHistoryItem" ).prepend( prefix
), historySize
-1 );
1443 // No history to restore..
1444 if (historySize
== 0)
1446 createHistoryEntry();
1450 // restore history list
1451 for ( int i
= 0; i
< historySize
; ++i
)
1453 HistoryEntry
* historyEntry
= new HistoryEntry
;
1455 // Only current history item saves completely its HistoryEntry
1456 KonqFrameBase::Options options
;
1457 if(i
== currentIndex
)
1458 options
= KonqFrameBase::saveHistoryItems
;
1460 options
= KonqFrameBase::saveURLs
;
1462 historyEntry
->loadItem(config
, QString::fromLatin1( "HistoryItem" ) + QString::number(i
).prepend( prefix
), options
);
1464 appendHistoryEntry( historyEntry
);
1467 // Shouldn't happen, but just in case..
1468 if(currentIndex
>= historyLength())
1469 currentIndex
= historyLength()-1;
1471 // set and load the correct history index
1472 setHistoryIndex( currentIndex
);
1477 QString
KonqView::internalViewMode() const
1479 const QVariant viewModeProperty
= m_pPart
->property("currentViewMode");
1480 return viewModeProperty
.toString();
1483 void KonqView::setInternalViewMode(const QString
& viewMode
)
1485 m_pPart
->setProperty("currentViewMode", viewMode
);
1488 QString
KonqView::nameFilter() const
1490 const QVariant nameFilterProperty
= m_pPart
->property("nameFilter");
1491 return nameFilterProperty
.toString();
1494 bool KonqView::showsDirectory() const
1496 return supportsMimeType(QString::fromLatin1("inode/directory"));
1499 #include "konqview.moc"