[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kfm-devel
Subject:    [PATCH] Bugfixes for profiles and preloading.
From:       Emanuele Tamponi <emanuele () valinor ! it>
Date:       2005-12-21 15:22:55
Message-ID: 200512211622.55346.emanuele () valinor ! it
[Download RAW message or body]

Hello,
I just completed a little patch.
Because my explanation was very lenghtly and needed a lot of html (because I 
pasted some code), I link here the webpage where I wrote the explanation.

The patch is the attached file, but you can download it also from the webpage:


http://principe.homelinux.net/patch/


I hope the patch is fine...
Bye ;)
Emanuele

["konquerorpatch.diff" (text/x-diff)]

Index: konq_mainwindow.h
===================================================================
--- konq_mainwindow.h	(revisione 487901)
+++ konq_mainwindow.h	(copia locale)
@@ -63,6 +63,7 @@
 class KonqFrameContainer;
 class KToolBarPopupAction;
 class KonqLogoAction;
+class KonqMainWindowPrivate;
 class KonqViewModeAction;
 class KonqPart;
 class KonqViewManager;
@@ -104,6 +105,9 @@
   KonqMainWindow( const KURL &initialURL = KURL(), bool openInitialURL = true, const \
char *name = 0, const QString& xmluiFile="konqueror.rc");  ~KonqMainWindow();
 
+  bool autoSaveKonqSettings() const;
+  void setAutoSaveKonqSettings( const QString & groupName, bool saveWindowSize );
+  void resetAutoSaveKonqSettings();
 
   /**
    * Filters the URL and calls the main openURL method.
@@ -325,6 +329,9 @@
   void viewRemoved( KonqView *view );
 
 public slots:
+  void setKonqSettingsDirty();
+  void saveAutoSaveKonqSettings();
+
   void slotCtrlTabPressed();
 
   // for KBookmarkMenu and KBookmarkBar
@@ -755,6 +762,8 @@
   static time_t s_startupTime;
   static int s_preloadUsageCount;
 
+  KonqMainWindowPrivate *dk;
+
 public:
 
   static QFile *s_crashlog_file;
Index: konq_mainwindow.cc
===================================================================
--- konq_mainwindow.cc	(revisione 487901)
+++ konq_mainwindow.cc	(copia locale)
@@ -136,6 +136,15 @@
 
 #include "konq_mainwindow_p.h"
 
+class KonqMainWindowPrivate {
+public:
+    bool autoSaveSettings:1;
+    bool settingsDirty:1;
+    bool autoSaveWindowSize:1;
+    QTimer* settingsTimer;
+    QString autoSaveGroup;
+};
+
 KonqExtendedBookmarkOwner::KonqExtendedBookmarkOwner(KonqMainWindow *w)
 {
    m_pKonqMainWindow = w;
@@ -273,8 +282,18 @@
       // silent
       m_bNeedApplyKonqMainWindowSettings = false;
 
+  dk = new KonqMainWindowPrivate;
+  dk->settingsDirty = false;
+  dk->autoSaveSettings = false;
+  dk->autoSaveWindowSize = true; // for compatibility
+  dk->settingsTimer = 0;
+
+  // Dirty hack to get d->autoSaveWindowSize = false
+  setAutoSaveSettings( "Main Window Settings", false );
+  resetAutoSaveSettings();
+
   // Read basic main-view settings, and set to autosave
-  setAutoSaveSettings( "KonqMainWindow", false );
+  setAutoSaveKonqSettings( "Main Window Settings", false );
 
   if ( !initialGeometrySet() )
       resize( 700, 480 );
@@ -291,6 +310,9 @@
 KonqMainWindow::~KonqMainWindow()
 {
   kdDebug(1202) << "KonqMainWindow::~KonqMainWindow " << this << endl;
+  
+  delete dk->settingsTimer;
+  delete dk;
 
   delete m_pViewManager;
 
@@ -336,6 +358,70 @@
   kdDebug(1202) << "KonqMainWindow::~KonqMainWindow " << this << " done" << endl;
 }
 
+bool KonqMainWindow::autoSaveKonqSettings() const
+{
+    return dk->autoSaveSettings;
+}
+
+void KonqMainWindow::resetAutoSaveKonqSettings()
+{
+    dk->autoSaveSettings = false;
+    if ( dk->settingsTimer )
+        dk->settingsTimer->stop();
+}
+
+void KonqMainWindow::setKonqSettingsDirty()
+{
+    //kdDebug(200) << "KMainWindow::setSettingsDirty" << endl;
+    dk->settingsDirty = true;
+    if ( dk->autoSaveSettings )
+    {
+        // Use a timer to save "immediately" user-wise, but not too immediately
+        // (to compress calls and save only once, in case of multiple changes)
+        if ( !dk->settingsTimer )
+        {
+           dk->settingsTimer = new QTimer( this );
+           connect( dk->settingsTimer, SIGNAL( timeout() ), SLOT( \
saveAutoSaveKonqSettings() ) ); +        }
+        dk->settingsTimer->start( 500, true );
+    }
+}
+
+void KonqMainWindow::setAutoSaveKonqSettings( const QString & groupName, bool \
saveWindowSize ) +{
+    dk->autoSaveSettings = true;
+    dk->autoSaveGroup = groupName;
+    dk->autoSaveWindowSize = saveWindowSize;
+    // Get notified when the user moves a toolbar around
+    disconnect( this, SIGNAL( dockWindowPositionChanged( QDockWindow * ) ),
+                this, SLOT( setSettingsDirty() ) );
+    connect( this, SIGNAL( dockWindowPositionChanged( QDockWindow * ) ),
+             this, SLOT( setKonqSettingsDirty() ) );
+
+    // Now read the previously saved settings
+    KConfig cfg(locate("data",QString::fromLatin1("konqueror/profiles/")+m_pViewManager->currentProfile()));
 +    applyMainWindowSettings( &cfg, groupName );
+}
+
+void KonqMainWindow::saveAutoSaveKonqSettings()
+{
+    Q_ASSERT( dk->autoSaveSettings );
+    //kdDebug(200) << "KMainWindow::saveAutoSaveSettings -> saving settings" << \
endl; +    QString profile = m_pViewManager->currentProfile();
+    if (!profile.isEmpty()) {
+        QString path = \
locateLocal("data",QString::fromLatin1("konqueror/profiles/")+profile); +        \
KConfig cfg( path ); +        if (QFile::exists( path ))
+            saveMainWindowSettings( &cfg, dk->autoSaveGroup );
+        else
+            m_pViewManager->saveViewProfile( profile, \
m_pViewManager->currentProfileText(), true, false ); +        cfg.sync();
+    }
+    dk->settingsDirty = false;
+    if ( dk->settingsTimer )
+        dk->settingsTimer->stop();
+}
+
 QWidget * KonqMainWindow::createContainer( QWidget *parent, int index, const \
QDomElement &element, int &id )  {
   static QString nameBookmarkBar = QString::fromLatin1( "bookmarkToolBar" );
@@ -1133,9 +1219,13 @@
         return;
     }
 
-    mainWindow = new KonqMainWindow( KURL(), false );
+    QString profileName = QString::fromLatin1( url.isLocalFile() ? \
"konqueror/profiles/filemanagement" : "konqueror/profiles/webbrowsing" ); +    \
KSimpleConfig cfg( locate( "data", profileName ), true ); +    cfg.setGroup( \
"Profile" ); +
+    mainWindow = new KonqMainWindow( KURL(), false, 0, cfg.readEntry("XMLUIFile") );
     mainWindow->setInitialFrameName( args.frameName );
-    mainWindow->resetAutoSaveSettings(); // Don't autosave
+    mainWindow->resetAutoSaveKonqSettings(); // Don't autosave
 
     KonqOpenURLRequest req;
     req.args = args;
@@ -1165,10 +1255,6 @@
        mainWindow->viewManager()->setActivePart( part, true );
     }
 
-    QString profileName = QString::fromLatin1( url.isLocalFile() ? \
                "konqueror/profiles/filemanagement" : \
                "konqueror/profiles/webbrowsing" );
-    KSimpleConfig cfg( locate( "data", profileName ), true );
-    cfg.setGroup( "Profile" );
-
     if ( windowArgs.x != -1 )
         mainWindow->move( windowArgs.x, mainWindow->y() );
     if ( windowArgs.y != -1 )
@@ -1205,6 +1291,12 @@
         (*it)->hide();
       }
     }
+    else
+    {
+      QString savedGroup = cfg.group();
+      mainWindow->applyMainWindowSettings( &cfg, "Main Window Settings" );
+      cfg.setGroup( savedGroup );
+    }
 
     if ( view ) {
         if ( !windowArgs.scrollBarsVisible )
@@ -1924,8 +2016,11 @@
 
 void KonqMainWindow::slotConfigureToolbars()
 {
-  if ( autoSaveSettings() )
-    saveMainWindowSettings( KGlobal::config(), "KonqMainWindow" );
+  if ( autoSaveKonqSettings() )
+  {
+      KConfig cfg(locate("data",QString::fromLatin1("konqueror/profiles/")+m_pViewManager->currentProfile()));
 +      saveMainWindowSettings( &cfg, "Main Window Settings" );
+  }
   KEditToolbar dlg(factory());
   connect(&dlg,SIGNAL(newToolbarConfig()),this,SLOT(slotNewToolbarConfig()));
   connect(&dlg,SIGNAL(newToolbarConfig()),this,SLOT(initBookmarkBar()));
@@ -1941,7 +2036,8 @@
 
     plugViewModeActions();
 
-    applyMainWindowSettings( KGlobal::config(), "KonqMainWindow" );
+    KConfig cfg(locate("data",QString::fromLatin1("konqueror/profiles/")+m_pViewManager->currentProfile()));
 +    applyMainWindowSettings( &cfg, "Main Window Settings" );
 }
 
 void KonqMainWindow::slotUndoAvailable( bool avail )
@@ -3494,10 +3590,12 @@
 void KonqMainWindow::slotForceSaveMainWindowSettings()
 {
 //  kdDebug(1202)<<"slotForceSaveMainWindowSettings()"<<endl;
-  if ( autoSaveSettings() ) // don't do it on e.g. JS window.open windows with no \
toolbars! +  if ( autoSaveKonqSettings() ) // don't do it on e.g. JS window.open \
windows with no toolbars!  {
-      saveMainWindowSettings( KGlobal::config(), "KonqMainWindow" );
-      KGlobal::config()->sync();
+      QString profile = m_pViewManager->currentProfile();
+      KConfig cfg(locate("data",QString::fromLatin1("konqueror/profiles/")+profile));
 +      saveMainWindowSettings( &cfg, "Main Window Settings" );
+      cfg.sync();
   }
 }
 
Index: konq_misc.cc
===================================================================
--- konq_misc.cc	(revisione 487901)
+++ konq_misc.cc	(copia locale)
@@ -126,7 +126,8 @@
       if ( forbidUseHTML )
           mainWindow->setShowHTML( false );
   }
-  else if( KonqMainWindow::isPreloaded() && KonqMainWindow::preloadedWindow() != \
NULL ) +  else if( KonqMainWindow::isPreloaded() && KonqMainWindow::preloadedWindow() \
!= NULL && +           KonqMainWindow::preloadedWindow()->xmlFile() == (new \
KConfig(path))->readEntry("XMLUIFile") )  {
       mainWindow = KonqMainWindow::preloadedWindow();
       KStartupInfo::setWindowStartupId( mainWindow->winId(), kapp->startupId());
Index: konq_viewmgr.cc
===================================================================
--- konq_viewmgr.cc	(revisione 487901)
+++ konq_viewmgr.cc	(copia locale)
@@ -25,6 +25,7 @@
 #include "konq_profiledlg.h"
 #include "konq_events.h"
 #include "konq_settingsxt.h"
+#include "konq_misc.h"
 
 #include <qfileinfo.h>
 #include <qptrlist.h>
@@ -1185,6 +1186,14 @@
 
   bool alwaysTabbedMode = KonqSettings::alwaysTabbedMode();
 
+  if (!m_currentProfile.isEmpty()) {
+    if ( m_pMainWindow->xmlFile() != cfg.readEntry ("XMLUIFile","konqueror.rc") ) {
+      KonqMisc::createBrowserWindowFromProfile( \
locate("data",QString::fromLatin1("konqueror/profiles/")+filename), filename ); +     \
m_pMainWindow->close(); +      return;
+    }
+  }
+
   m_currentProfile = filename;
   m_currentProfileText = cfg.readPathEntry("Name",filename);
   m_profileHomeURL = cfg.readEntry("HomeURL", QString::null);
@@ -1294,7 +1303,8 @@
 
   if( resetWindow )
   { // force default settings for the GUI
-     m_pMainWindow->applyMainWindowSettings( KGlobal::config(), "KonqMainWindow", \
true ); +     KConfig \
cfg(locate("data",QString::fromLatin1("konqueror/profiles/")+currentProfile())); +    \
m_pMainWindow->applyMainWindowSettings( &cfg, "Main Window Settings", true );  }
 
   // Apply menu/toolbar settings saved in profile. Read from a separate group



[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic