[prev in list] [next in list] [prev in thread] [next in thread]
List: kfm-devel
Subject: Re: MMB opens in new tab
From: Doug Hanley <hanleyman () adelphia ! net>
Date: 2002-07-19 3:25:08
[Download RAW message or body]
On Monday 15 July 2002 01:10 pm, David Faure wrote:
> The point is that:
> * openURL might or might not know the mimetype. If it does, it calls
> openView. If it doesn't, it creates a KonqRun which will call openView
> later too. * openView *ALWAYS* knows the mimetype. It's been found out
> before, see above ;)
> Better yet: let openURL find the mimetype first if necessary, and then,
> in openView, create the tab around the part.
> I guess you simply need a flag that tells openView to create a tab
> instead of a normal view.
>
> All the logic for the mimetype determination is in place and works fine,
> use it, don't work around it. Thanks ;)
Heres a new patch that takes all that into account, seems to work well.
Should I commit?
(sorry that this patch is kind of large)
-- Doug
["cvskonqtabs-071802.patch" (text/x-diff)]
Index: konq_mainwindow.cc
===================================================================
RCS file: /home/kde/kdebase/konqueror/konq_mainwindow.cc,v
retrieving revision 1.1022
diff -u -3 -p -r1.1022 konq_mainwindow.cc
--- konq_mainwindow.cc 2002/07/15 18:07:13 1.1022
+++ konq_mainwindow.cc 2002/07/19 03:19:26
@@ -111,6 +111,7 @@ KonqMainWindow::KonqMainWindow( const KU
m_pChildFrame = 0L;
m_pActiveChild = 0L;
m_pWorkingTab = 0L;
+ m_bNewTabInFront = false;
m_initialKonqRun = 0L;
m_pBookmarkMenu = 0L;
m_dcopObject = 0L;
@@ -355,7 +356,7 @@ void KonqMainWindow::openFilteredURL( co
void KonqMainWindow::openURL( KonqView *_view, const KURL &_url,
const QString &_serviceType, const KonqOpenURLRequest \
& req,
- bool trustedSource )
+ bool trustedSource, bool newTab )
{
kdDebug(1202) << "KonqMainWindow::openURL : url = '" << _url.url() << "' "
<< "serviceType='" << _serviceType << "' view=" << _view << endl;
@@ -383,7 +384,7 @@ void KonqMainWindow::openURL( KonqView *
}
KonqView *view = _view;
- if ( !view )
+ if ( !view && !newTab)
view = m_currentView; /* Note, this can be 0L, e.g. on startup */
if ( view )
@@ -419,7 +420,7 @@ void KonqMainWindow::openURL( KonqView *
if ( ( !serviceType.isEmpty() && serviceType != "application/octet-stream") || \
url.protocol() == "about" ) {
// Built-in view ?
- if ( !openView( serviceType, url, view /* can be 0L */, req ) )
+ if ( !openView( serviceType, url, view /* can be 0L */, req, newTab ) )
{
//kdDebug(1202) << "KonqMainWindow::openURL : openView returned false" << \
endl;
// Are we following another view ? Then forget about this URL. Otherwise \
fire app. @@ -455,7 +456,7 @@ void KonqMainWindow::openURL( KonqView *
else // no known serviceType, use KonqRun
{
kdDebug(1202) << "Creating new konqrun for " << url.url() << " req.typedURL=" \
<< req.typedURL << endl;
- KonqRun * run = new KonqRun( this, view /* can be 0L */, url, req, \
trustedSource ); + KonqRun * run = new KonqRun( this, view /* can be 0L */, url, \
req, trustedSource, newTab ); if ( view )
view->setRun( run );
else
@@ -471,7 +472,7 @@ void KonqMainWindow::openURL( KonqView *
}
}
-bool KonqMainWindow::openView( QString serviceType, const KURL &_url, KonqView \
*childView, KonqOpenURLRequest req ) +bool KonqMainWindow::openView( QString \
serviceType, const KURL &_url, KonqView *childView, KonqOpenURLRequest req, bool \
newTab ) {
if ( KonqRun::isExecutable( serviceType ) )
return false; // execute, don't open
@@ -602,11 +603,31 @@ bool KonqMainWindow::openView( QString s
bool ok = true;
if ( !childView )
{
- // Create a new view
- // Initialize always uses force auto-embed even if user setting is "separate \
viewer",
- // since this window has no view yet - we don't want to keep an empty \
mainwindow.
- // This can happen with e.g. application/pdf from a target="_blank" link, or \
window.open.
- childView = m_pViewManager->Initialize( serviceType, serviceName );
+ if (newTab)
+ {
+ childView = m_pViewManager->addTab( serviceType, serviceName );
+ if (m_bNewTabInFront && childView)
+ {
+ KonqFrameTabs* tabContainer = \
static_cast<KonqFrameTabs*>(m_pViewManager->docContainer()); + \
tabContainer->setCurrentPage( tabContainer->count()-1 ); + }
+ }
+
+ else
+ {
+ // Create a new view
+ // Initialize always uses force auto-embed even if user setting is "separate \
viewer", + // since this window has no view yet - we don't want to keep an \
empty mainwindow. + // This can happen with e.g. application/pdf from a \
target="_blank" link, or window.open. + childView = \
m_pViewManager->Initialize( serviceType, serviceName ); +
+ enableAllActions( true );
+
+ m_pViewManager->setActivePart( childView->part() );
+
+ childView->setViewName( m_initialFrameName );
+ m_initialFrameName = QString::null;
+ }
if ( !childView )
{
@@ -614,14 +635,7 @@ bool KonqMainWindow::openView( QString s
.arg(KLibLoader::self()->lastErrorMessage()) );
return true; // fake everything was ok, we don't want to propagate the \
error }
-
- enableAllActions( true );
-
- m_pViewManager->setActivePart( childView->part() );
-
- childView->setViewName( m_initialFrameName );
- m_initialFrameName = QString::null;
- }
+ }
else // We know the child view
{
//childView->stop();
@@ -807,11 +821,8 @@ void KonqMainWindow::slotCreateNewWindow
KConfig *config = KGlobal::config();
KConfigGroupSaver cs( config, QString::fromLatin1("FMSettings") );
if ( config->readBoolEntry( "MMBOpensTab", false ) ) {
- KFileItem item( url, 0 /*_mimeType*/, 0 /*_mode*/ ); // FIXME with real \
values
- KFileItemList items;
- items.append( &item );
- popupItems = items;
- popupNewTab(true); // False opens in background tab
+ m_bNewTabInFront = true;
+ openURL( 0L, url, QString::null, KonqOpenURLRequest(), false, true );
}
else
KonqMisc::createNewWindow( url, args );
@@ -1478,6 +1489,12 @@ void KonqMainWindow::slotRunFinished()
kdDebug(1202) << "KonqMainWindow::slotRunFinished()" << endl;
const KonqRun *run = static_cast<const KonqRun *>( sender() );
+ if (run->newTab() && m_bNewTabInFront && \
m_pViewManager->docContainer()->frameType()=="Tabs") + {
+ KonqFrameTabs* tabContainer = \
static_cast<KonqFrameTabs*>(m_pViewManager->docContainer()); + \
tabContainer->setCurrentPage( tabContainer->count()-1 ); + }
+
if ( run == m_initialKonqRun )
m_initialKonqRun = 0L;
@@ -1995,37 +2012,25 @@ void KonqMainWindow::slotBreakOffTabPopu
void KonqMainWindow::slotPopupNewTabAtFront()
{
- popupNewTab(true);
+ m_bNewTabInFront = true;
+ popupNewTab();
}
void KonqMainWindow::slotPopupNewTab()
{
- popupNewTab(false);
+ m_bNewTabInFront = false;
+ popupNewTab();
}
-void KonqMainWindow::popupNewTab(bool infront)
+void KonqMainWindow::popupNewTab()
{
- KURL url;
+ kdDebug(1202) << "KonqMainWindow::popupNewTab()" << endl;
+
KFileItemListIterator it ( popupItems );
- QString mimeType, mimeComment;
- KonqView* newView = 0;
- KonqView* lastView = 0;
for ( ; it.current(); ++it )
{
- newView = 0L;
- url = (*it)->url();
- mimeType = (*it)->mimetype();
- mimeComment = (*it)->mimeComment();
- if (mimeType == "application/octet-stream") mimeType = mimeComment = "";
- newView = m_pViewManager->addTab(mimeType, mimeComment);
- if (newView != 0L)
- {
- newView->openURL( url, url.prettyURL() );
- lastView = newView;
- }
+ openURL( 0L, (*it)->url(), QString::null, KonqOpenURLRequest(), false, true ); \
}
- if (infront)
- m_pViewManager->showTab(lastView);
}
void KonqMainWindow::slotRemoveView()
Index: konq_mainwindow.h
===================================================================
RCS file: /home/kde/kdebase/konqueror/konq_mainwindow.h,v
retrieving revision 1.363
diff -u -3 -p -r1.363 konq_mainwindow.h
--- konq_mainwindow.h 2002/07/15 18:07:13 1.363
+++ konq_mainwindow.h 2002/07/19 03:19:27
@@ -102,7 +102,8 @@ public:
*/
void openURL( KonqView * view, const KURL & url,
const QString &serviceType = QString::null,
- const KonqOpenURLRequest & req = KonqOpenURLRequest(), bool \
trustedSource = false ); + const KonqOpenURLRequest & req = \
KonqOpenURLRequest(), + bool trustedSource = false, bool newTab = false );
/**
* Called by openURL when it knows the service type (either directly,
@@ -111,7 +112,8 @@ public:
* that holds it might get destroyed (by childView->stop())
*/
bool openView( QString serviceType, const KURL &_url, KonqView *childView,
- KonqOpenURLRequest req = KonqOpenURLRequest() );
+ KonqOpenURLRequest req = KonqOpenURLRequest(),
+ bool newTab = false );
void abortLoading();
@@ -492,7 +494,7 @@ private:
void initCombo();
void initActions();
- void popupNewTab(bool infront);
+ void popupNewTab();
/**
* Tries to find a index.html (.kde.html) file in the specified directory
@@ -598,6 +600,7 @@ private:
KonqFrameBase* m_pWorkingTab;
KFileItemList popupItems;
+ bool m_bNewTabInFront;
KonqRun *m_initialKonqRun;
Index: konq_run.cc
===================================================================
RCS file: /home/kde/kdebase/konqueror/konq_run.cc,v
retrieving revision 1.74
diff -u -3 -p -r1.74 konq_run.cc
--- konq_run.cc 2002/06/14 04:59:56 1.74
+++ konq_run.cc 2002/07/19 03:19:27
@@ -28,12 +28,12 @@
#include <assert.h>
KonqRun::KonqRun( KonqMainWindow* mainWindow, KonqView *_childView,
- const KURL & _url, const KonqOpenURLRequest & req, bool \
trustedSource ) + const KURL & _url, const KonqOpenURLRequest & req, \
bool trustedSource, bool newTab )
: KParts::BrowserRun( _url, req.args, _childView ? _childView->part() : 0L, \
mainWindow,
//remove referrer if request was typed in manually.
// ### TODO: turn this off optionally.
!req.typedURL.isEmpty(), trustedSource ),
- m_pMainWindow( mainWindow ), m_pView( _childView ), m_bFoundMimeType( false ), \
m_req( req ) + m_pMainWindow( mainWindow ), m_pView( _childView ), \
m_bFoundMimeType( false ), m_bNewTab( newTab ), m_req( req ) {
assert( !m_pMainWindow.isNull() );
if (m_pView)
@@ -71,7 +71,7 @@ void KonqRun::foundMimeType( const QStri
// Grab the args back from BrowserRun
m_req.args = m_args;
- m_bFinished = m_pMainWindow->openView( mimeType, m_strURL, m_pView, m_req );
+ m_bFinished = m_pMainWindow->openView( mimeType, m_strURL, m_pView, m_req, \
m_bNewTab ); if ( m_bFinished ) {
m_pMainWindow = 0L;
m_timer.start( 0, true );
Index: konq_run.h
===================================================================
RCS file: /home/kde/kdebase/konqueror/konq_run.h,v
retrieving revision 1.23
diff -u -3 -p -r1.23 konq_run.h
--- konq_run.h 2002/01/12 17:32:00 1.23
+++ konq_run.h 2002/07/19 03:19:27
@@ -38,7 +38,7 @@ public:
*/
KonqRun( KonqMainWindow* mainWindow, KonqView *childView,
const KURL &url, const KonqOpenURLRequest & req = KonqOpenURLRequest(),
- bool trustedSource = false );
+ bool trustedSource = false, bool newTab = false );
virtual ~KonqRun();
@@ -50,6 +50,8 @@ public:
KonqView *childView() const { return m_pView; }
const QString & typedURL() const { return m_req.typedURL; }
+
+ bool newTab() const { return m_bNewTab; }
protected:
virtual void foundMimeType( const QString & _type );
@@ -59,6 +61,7 @@ protected:
QGuardedPtr<KonqMainWindow> m_pMainWindow;
QGuardedPtr<KonqView> m_pView;
bool m_bFoundMimeType;
+ bool m_bNewTab;
KonqOpenURLRequest m_req;
};
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic