summaryrefslogtreecommitdiffstats
path: root/konqueror/preloader/preloader.cpp
diff options
context:
space:
mode:
authorMichele Calgaro <michele.calgaro@yahoo.it>2020-12-07 22:58:44 +0900
committerMichele Calgaro <michele.calgaro@yahoo.it>2020-12-07 23:22:36 +0900
commitad6f3f6402df4bdf88672d511e21ab1e9b88d978 (patch)
treebacd0af440aa1a0671045d431406cda36d4df618 /konqueror/preloader/preloader.cpp
parent6ab96d20b89c0e1d86abc00513c7cec304d85800 (diff)
downloadtdebase-ad6f3f6402df4bdf88672d511e21ab1e9b88d978.tar.gz
tdebase-ad6f3f6402df4bdf88672d511e21ab1e9b88d978.zip
Renaming of files in preparation for code style tools.
Signed-off-by: Michele Calgaro <michele.calgaro@yahoo.it> (cherry picked from commit 145abc15d57fb29701a12e8a14dcb9c1fd72e9be)
Diffstat (limited to 'konqueror/preloader/preloader.cpp')
-rw-r--r--konqueror/preloader/preloader.cpp151
1 files changed, 151 insertions, 0 deletions
diff --git a/konqueror/preloader/preloader.cpp b/konqueror/preloader/preloader.cpp
new file mode 100644
index 000000000..5d87a8b07
--- /dev/null
+++ b/konqueror/preloader/preloader.cpp
@@ -0,0 +1,151 @@
+/* This file is part of the KDE project
+ Copyright (C) 2002 Lubos Lunak <l.lunak@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include "preloader.h"
+#include "konq_settingsxt.h"
+
+#include <tdeconfig.h>
+#include <dcopref.h>
+#include <tdeapplication.h>
+#include <dcopclient.h>
+#include <kdebug.h>
+
+KonqyPreloader::KonqyPreloader( const TQCString& obj )
+ : KDEDModule( obj )
+ {
+ reconfigure();
+ connect( kapp->dcopClient(), TQT_SIGNAL( applicationRemoved( const TQCString& )),
+ TQT_SLOT( appRemoved( const TQCString& )));
+ connect( &check_always_preloaded_timer, TQT_SIGNAL( timeout()),
+ TQT_SLOT( checkAlwaysPreloaded()));
+ }
+
+KonqyPreloader::~KonqyPreloader()
+ {
+ updateCount();
+ }
+
+bool KonqyPreloader::registerPreloadedKonqy( TQCString id, int screen )
+ {
+ if( instances.count() >= (uint)KonqSettings::maxPreloadCount() )
+ return false;
+ instances.append( KonqyData( id, screen ));
+ return true;
+ }
+
+TQCString KonqyPreloader::getPreloadedKonqy( int screen )
+ {
+ if( instances.count() == 0 )
+ return "";
+ for( InstancesList::Iterator it = instances.begin();
+ it != instances.end();
+ ++it )
+ {
+ if( (*it).screen == screen )
+ {
+ TQCString ret = (*it).id;
+ instances.remove( it );
+ check_always_preloaded_timer.start( 5000, true );
+ return ret;
+ }
+ }
+ return "";
+ }
+
+void KonqyPreloader::unregisterPreloadedKonqy( TQCString id_P )
+ {
+ for( InstancesList::Iterator it = instances.begin();
+ it != instances.end();
+ ++it )
+ if( (*it).id == id_P )
+ {
+ instances.remove( it );
+ return;
+ }
+ }
+
+void KonqyPreloader::appRemoved( const TQCString& id )
+ {
+ unregisterPreloadedKonqy( id );
+ }
+
+void KonqyPreloader::reconfigure()
+ {
+ KonqSettings::self()->readConfig();
+ updateCount();
+ // Ignore "PreloadOnStartup" here, it's used by the .desktop file
+ // in the autostart folder, which will do 'konqueror --preload' in autostart
+ // phase 2. This will also cause activation of this kded module.
+ }
+
+void KonqyPreloader::updateCount()
+ {
+ while( instances.count() > (uint)KonqSettings::maxPreloadCount() )
+ {
+ KonqyData konqy = instances.first();
+ instances.pop_front();
+ DCOPRef ref( konqy.id, "KonquerorIface" );
+ ref.send( "terminatePreloaded" );
+ }
+ if( KonqSettings::alwaysHavePreloaded() &&
+ KonqSettings::maxPreloadCount() > 0 &&
+ instances.count() == 0 )
+ {
+ if( !check_always_preloaded_timer.isActive())
+ {
+ if( kapp->tdeinitExec( TQString::fromLatin1( "konqueror" ),
+ TQStringList() << TQString::fromLatin1( "--preload" ), NULL, NULL, "0" ) == 0 )
+ {
+ kdDebug( 1202 ) << "Preloading Konqueror instance" << endl;
+ check_always_preloaded_timer.start( 5000, true );
+ }
+ // else do nothing, the launching failed
+ }
+ }
+ }
+
+// have 5s interval between attempts to preload a new konqy
+// in order not to start many of them at the same time
+void KonqyPreloader::checkAlwaysPreloaded()
+ {
+ // TODO here should be detection whether the system is too busy,
+ // and delaying preloading another konqy in such case
+ // but I have no idea how to do it
+ updateCount();
+ }
+
+void KonqyPreloader::unloadAllPreloaded()
+ {
+ while( instances.count() > 0 )
+ {
+ KonqyData konqy = instances.first();
+ instances.pop_front();
+ DCOPRef ref( konqy.id, "KonquerorIface" );
+ ref.send( "terminatePreloaded" );
+ }
+ // ignore 'always_have_preloaded' here
+ }
+
+extern "C"
+KDE_EXPORT KDEDModule *create_konqy_preloader( const TQCString& obj )
+ {
+ return new KonqyPreloader( obj );
+ }
+
+#include "preloader.moc"