| # kdecore Library API Documentation
Overview | Class Hierarchy | Classes | Classes (annotated) | Members | Namespaces | Source Files

# kprotocolinfo_kdecore.cpp

    00001 /* This file is part of the KDE libraries
    00002    Copyright (C) 1999 Torben Weis <weis@kde.org>
    00003
    00004    This library is free software; you can redistribute it and/or
    00005    modify it under the terms of the GNU Library General Public
    00006    License version 2 as published by the Free Software Foundation.
    00007
    00008    This library is distributed in the hope that it will be useful,
    00009    but WITHOUT ANY WARRANTY; without even the implied warranty of
    00010    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    00011    Library General Public License for more details.
    00012
    00013    You should have received a copy of the GNU Library General Public License
    00014    along with this library; see the file COPYING.LIB.  If not, write to
    00015    the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
    00016    Boston, MA 02111-1307, USA.
    00017 */
    00018
    00019 #ifdef MAKE_KDECORE_LIB //needed for proper linkage (win32)
    00020 #undef KIO_EXPORT
    00021 #define KIO_EXPORT KDE_EXPORT
    00022 #endif
    00023
    00024 #include "kprotocolinfo.h"
    00025 #include "kprotocolinfofactory.h"
    00026
    00027 #include <kstandarddirs.h>
    00028 #include <kglobal.h>
    00029 #include <kapplication.h>
    00030 #include <kdebug.h>
    00031 #include <ksimpleconfig.h>
    00032 #include <kconfig.h>
    00033 #include <kstringhandler.h>
    00034
    00035 class KProtocolInfo::KProtocolInfoPrivate
    00036 {
    00037 public:
    00038   QString docPath;
    00039   QString protClass;
    00040   KProtocolInfo::ExtraFieldList extraFields;
    00041   bool showPreviews;
    00042   bool canRenameFromFile;
    00043   bool canRenameToFile;
    00044   bool canDeleteRecursive;
    00045   bool fileNameUsedForCopying; // true if using UDS_NAME, false if using KURL::fileName() [default]
    00046   KURL::URIMode uriMode;
    00047   QStringList capabilities;
    00048   QString proxyProtocol;
    00049 };
    00050
    00051 //
    00052 // Internal functions:
    00053 //
    00054 KProtocolInfo::KProtocolInfo(const QString &path)
    00055  : KSycocaEntry(path)
    00056 {
    00057   d = new KProtocolInfoPrivate;
    00058   QString fullPath = locate("services", path);
    00059
    00060   KSimpleConfig config( fullPath, true );
    00061   config.setGroup( "Protocol" );
    00062
    00063   m_name = config.readEntry( "protocol" );
    00064   m_exec = config.readPathEntry( "exec" );
    00065   m_isSourceProtocol = config.readBoolEntry( "source", true );
    00066   m_isHelperProtocol = config.readBoolEntry( "helper", false );
    00067   m_supportsReading = config.readBoolEntry( "reading", false );
    00068   m_supportsWriting = config.readBoolEntry( "writing", false );
    00069   m_supportsMakeDir = config.readBoolEntry( "makedir", false );
    00070   m_supportsDeleting = config.readBoolEntry( "deleting", false );
    00071   m_supportsLinking = config.readBoolEntry( "linking", false );
    00072   m_supportsMoving = config.readBoolEntry( "moving", false );
    00073   m_canCopyFromFile = config.readBoolEntry( "copyFromFile", false );
    00074   m_canCopyToFile = config.readBoolEntry( "copyToFile", false );
    00075   d->canRenameFromFile = config.readBoolEntry( "renameFromFile", false );
    00076   d->canRenameToFile = config.readBoolEntry( "renameToFile", false );
    00077   d->canDeleteRecursive = config.readBoolEntry( "deleteRecursive", false );
    00078   d->fileNameUsedForCopying = config.readEntry( "fileNameUsedForCopying", "FromURL" ) == "Name";
    00079
    00080   m_listing = config.readListEntry( "listing" );
    00081   // Many .protocol files say "Listing=false" when they really mean "Listing=" (i.e. unsupported)
    00082   if ( m_listing.count() == 1 && m_listing.first() == "false" )
    00083     m_listing.clear();
    00084   m_supportsListing = ( m_listing.count() > 0 );
    00085   m_defaultMimetype = config.readEntry( "defaultMimetype" );
    00086   m_determineMimetypeFromExtension = config.readBoolEntry( "determineMimetypeFromExtension", true );
    00087   m_icon = config.readEntry( "Icon", "mime_empty" );
    00088   m_config = config.readEntry( "config", m_name );
    00089   m_maxSlaves = config.readNumEntry( "maxInstances", 1);
    00090
    00091   QString tmp = config.readEntry( "input" );
    00092   if ( tmp == "filesystem" )
    00093     m_inputType = KProtocolInfo::T_FILESYSTEM;
    00094   else if ( tmp == "stream" )
    00095     m_inputType = KProtocolInfo::T_STREAM;
    00096   else
    00097     m_inputType = KProtocolInfo::T_NONE;
    00098
    00099   tmp = config.readEntry( "output" );
    00100   if ( tmp == "filesystem" )
    00101     m_outputType = KProtocolInfo::T_FILESYSTEM;
    00102   else if ( tmp == "stream" )
    00103     m_outputType = KProtocolInfo::T_STREAM;
    00104   else
    00105     m_outputType = KProtocolInfo::T_NONE;
    00106
    00107   d->docPath = config.readPathEntry( "DocPath" );
    00108   d->protClass = config.readEntry( "Class" ).lower();
    00109   if (d->protClass[0] != ':')
    00110      d->protClass.prepend(':');
    00111
    00112   QStringList extraNames = config.readListEntry( "ExtraNames" );
    00113   QStringList extraTypes = config.readListEntry( "ExtraTypes" );
    00114   QStringList::Iterator it = extraNames.begin();
    00115   QStringList::Iterator typeit = extraTypes.begin();
    00116   for( ; it != extraNames.end() && typeit != extraTypes.end(); ++it, ++typeit ) {
    00117       d->extraFields.append( ExtraField( *it, *typeit ) );
    00118   }
    00119
    00120   d->showPreviews = config.readBoolEntry( "ShowPreviews", d->protClass == ":local" );
    00121
    00122   tmp = config.readEntry( "URIMode", QString::null ).lower();
    00123   if (tmp == "rawuri")
    00124      d->uriMode = KURL::RawURI;
    00125   else if (tmp == "mailto")
    00126      d->uriMode = KURL::Mailto;
    00127   else if (tmp == "url")
    00128      d->uriMode = KURL::URL;
    00129   else
    00130      d->uriMode = KURL::Auto;
    00131
    00132   d->capabilities = config.readListEntry( "Capabilities" );
    00133   d->proxyProtocol = config.readEntry( "ProxiedBy" );
    00134 }
    00135
    00136 KProtocolInfo::KProtocolInfo( QDataStream& _str, int offset) :
    00137     KSycocaEntry( _str, offset)
    00138 {
    00139    d = new KProtocolInfoPrivate;
    00140    load( _str );
    00141 }
    00142
    00143 KProtocolInfo::~KProtocolInfo()
    00144 {
    00145    delete d;
    00146 }
    00147
    00148 void
    00149 KProtocolInfo::load( QDataStream& _str)
    00150 {
    00151    // You may add new fields at the end. Make sure to update the version
    00152    // number in ksycoca.h
    00153    Q_INT32 i_inputType, i_outputType;
    00154    Q_INT8 i_isSourceProtocol, i_isHelperProtocol,
    00155           i_supportsListing, i_supportsReading,
    00156           i_supportsWriting, i_supportsMakeDir,
    00157           i_supportsDeleting, i_supportsLinking,
    00158           i_supportsMoving, i_determineMimetypeFromExtension,
    00159           i_canCopyFromFile, i_canCopyToFile, i_showPreviews,
    00160           i_uriMode, i_canRenameFromFile, i_canRenameToFile,
    00161           i_canDeleteRecursive, i_fileNameUsedForCopying;
    00162
    00163    _str >> m_name >> m_exec >> m_listing >> m_defaultMimetype
    00164         >> i_determineMimetypeFromExtension
    00165         >> m_icon
    00166         >> i_inputType >> i_outputType
    00167         >> i_isSourceProtocol >> i_isHelperProtocol
    00168         >> i_supportsListing >> i_supportsReading
    00169         >> i_supportsWriting >> i_supportsMakeDir
    00170         >> i_supportsDeleting >> i_supportsLinking
    00171         >> i_supportsMoving
    00172         >> i_canCopyFromFile >> i_canCopyToFile
    00173         >> m_config >> m_maxSlaves >> d->docPath >> d->protClass
    00174         >> d->extraFields >> i_showPreviews >> i_uriMode
    00175         >> d->capabilities >> d->proxyProtocol
    00176         >> i_canRenameFromFile >> i_canRenameToFile
    00177         >> i_canDeleteRecursive >> i_fileNameUsedForCopying;
    00178
    00179    m_inputType = (Type) i_inputType;
    00180    m_outputType = (Type) i_outputType;
    00181    m_isSourceProtocol = (i_isSourceProtocol != 0);
    00182    m_isHelperProtocol = (i_isHelperProtocol != 0);
    00183    m_supportsListing = (i_supportsListing != 0);
    00184    m_supportsReading = (i_supportsReading != 0);
    00185    m_supportsWriting = (i_supportsWriting != 0);
    00186    m_supportsMakeDir = (i_supportsMakeDir != 0);
    00187    m_supportsDeleting = (i_supportsDeleting != 0);
    00188    m_supportsLinking = (i_supportsLinking != 0);
    00189    m_supportsMoving = (i_supportsMoving != 0);
    00190    m_canCopyFromFile = (i_canCopyFromFile != 0);
    00191    m_canCopyToFile = (i_canCopyToFile != 0);
    00192    d->canRenameFromFile = (i_canRenameFromFile != 0);
    00193    d->canRenameToFile = (i_canRenameToFile != 0);
    00194    d->canDeleteRecursive = (i_canDeleteRecursive != 0);
    00195    d->fileNameUsedForCopying = (i_fileNameUsedForCopying != 0);
    00196    m_determineMimetypeFromExtension = (i_determineMimetypeFromExtension != 0);
    00197    d->showPreviews = (i_showPreviews != 0);
    00198    d->uriMode = (KURL::URIMode) i_uriMode;
    00199 }
    00200
    00201 void
    00202 KProtocolInfo::save( QDataStream& _str)
    00203 {
    00204    KSycocaEntry::save( _str );
    00205
    00206    // You may add new fields at the end. Make sure to update the version
    00207    // number in ksycoca.h
    00208    Q_INT32 i_inputType, i_outputType;
    00209    Q_INT8 i_isSourceProtocol, i_isHelperProtocol,
    00210           i_supportsListing, i_supportsReading,
    00211           i_supportsWriting, i_supportsMakeDir,
    00212           i_supportsDeleting, i_supportsLinking,
    00213           i_supportsMoving, i_determineMimetypeFromExtension,
    00214           i_canCopyFromFile, i_canCopyToFile, i_showPreviews,
    00215           i_uriMode, i_canRenameFromFile, i_canRenameToFile,
    00216           i_canDeleteRecursive, i_fileNameUsedForCopying;
    00217
    00218    i_inputType = (Q_INT32) m_inputType;
    00219    i_outputType = (Q_INT32) m_outputType;
    00220    i_isSourceProtocol = m_isSourceProtocol ? 1 : 0;
    00221    i_isHelperProtocol = m_isHelperProtocol ? 1 : 0;
    00222    i_supportsListing = m_supportsListing ? 1 : 0;
    00223    i_supportsReading = m_supportsReading ? 1 : 0;
    00224    i_supportsWriting = m_supportsWriting ? 1 : 0;
    00225    i_supportsMakeDir = m_supportsMakeDir ? 1 : 0;
    00226    i_supportsDeleting = m_supportsDeleting ? 1 : 0;
    00227    i_supportsLinking = m_supportsLinking ? 1 : 0;
    00228    i_supportsMoving = m_supportsMoving ? 1 : 0;
    00229    i_canCopyFromFile = m_canCopyFromFile ? 1 : 0;
    00230    i_canCopyToFile = m_canCopyToFile ? 1 : 0;
    00231    i_canRenameFromFile = d->canRenameFromFile ? 1 : 0;
    00232    i_canRenameToFile = d->canRenameToFile ? 1 : 0;
    00233    i_canDeleteRecursive = d->canDeleteRecursive ? 1 : 0;
    00234    i_fileNameUsedForCopying = d->fileNameUsedForCopying ? 1 : 0;
    00235    i_determineMimetypeFromExtension = m_determineMimetypeFromExtension ? 1 : 0;
    00236    i_showPreviews = d->showPreviews ? 1 : 0;
    00237    i_uriMode = d->uriMode;
    00238
    00239    _str << m_name << m_exec << m_listing << m_defaultMimetype
    00240         << i_determineMimetypeFromExtension
    00241         << m_icon
    00242         << i_inputType << i_outputType
    00243         << i_isSourceProtocol << i_isHelperProtocol
    00244         << i_supportsListing << i_supportsReading
    00245         << i_supportsWriting << i_supportsMakeDir
    00246         << i_supportsDeleting << i_supportsLinking
    00247         << i_supportsMoving
    00248         << i_canCopyFromFile << i_canCopyToFile
    00249         << m_config << m_maxSlaves << d->docPath << d->protClass
    00250         << d->extraFields << i_showPreviews << i_uriMode
    00251         << d->capabilities << d->proxyProtocol
    00252         << i_canRenameFromFile << i_canRenameToFile
    00253         << i_canDeleteRecursive << i_fileNameUsedForCopying;
    00254 }
    00255
    00256
    00257 //
    00258 // Static functions:
    00259 //
    00260
    00261 QStringList KProtocolInfo::protocols()
    00262 {
    00263   return KProtocolInfoFactory::self()->protocols();
    00264 }
    00265
    00266 bool KProtocolInfo::isSourceProtocol( const QString& _protocol )
    00267 {
    00268   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
    00269   if ( !prot )
    00270     return false;
    00271
    00272   return prot->m_isSourceProtocol;
    00273 }
    00274
    00275 bool KProtocolInfo::isFilterProtocol( const QString& _protocol )
    00276 {
    00277   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
    00278   if ( !prot )
    00279     return false;
    00280
    00281   return !prot->m_isSourceProtocol;
    00282 }
    00283
    00284 bool KProtocolInfo::isHelperProtocol( const QString& _protocol )
    00285 {
    00286   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
    00287   if ( !prot )
    00288     return false;
    00289
    00290   return prot->m_isHelperProtocol;
    00291 }
    00292
    00293 bool KProtocolInfo::isKnownProtocol( const QString& _protocol )
    00294 {
    00295   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
    00296   return ( prot != 0);
    00297 }
    00298
    00299 bool KProtocolInfo::supportsListing( const QString& _protocol )
    00300 {
    00301   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
    00302   if ( !prot )
    00303     return false;
    00304
    00305   return prot->m_supportsListing;
    00306 }
    00307
    00308 QStringList KProtocolInfo::listing( const QString& _protocol )
    00309 {
    00310   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
    00311   if ( !prot )
    00312     return QStringList();
    00313
    00314   return prot->m_listing;
    00315 }
    00316
    00317 bool KProtocolInfo::supportsReading( const QString& _protocol )
    00318 {
    00319   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
    00320   if ( !prot )
    00321     return false;
    00322
    00323   return prot->m_supportsReading;
    00324 }
    00325
    00326 bool KProtocolInfo::supportsWriting( const QString& _protocol )
    00327 {
    00328   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
    00329   if ( !prot )
    00330     return false;
    00331
    00332   return prot->m_supportsWriting;
    00333 }
    00334
    00335 bool KProtocolInfo::supportsMakeDir( const QString& _protocol )
    00336 {
    00337   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
    00338   if ( !prot )
    00339     return false;
    00340
    00341   return prot->m_supportsMakeDir;
    00342 }
    00343
    00344 bool KProtocolInfo::supportsDeleting( const QString& _protocol )
    00345 {
    00346   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
    00347   if ( !prot )
    00348     return false;
    00349
    00350   return prot->m_supportsDeleting;
    00351 }
    00352
    00353 bool KProtocolInfo::supportsLinking( const QString& _protocol )
    00354 {
    00355   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
    00356   if ( !prot )
    00357     return false;
    00358
    00359   return prot->m_supportsLinking;
    00360 }
    00361
    00362 bool KProtocolInfo::supportsMoving( const QString& _protocol )
    00363 {
    00364   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
    00365   if ( !prot )
    00366     return false;
    00367
    00368   return prot->m_supportsMoving;
    00369 }
    00370
    00371 bool KProtocolInfo::canCopyFromFile( const QString& _protocol )
    00372 {
    00373   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
    00374   if ( !prot )
    00375     return false;
    00376
    00377   return prot->m_canCopyFromFile;
    00378 }
    00379
    00380
    00381 bool KProtocolInfo::canCopyToFile( const QString& _protocol )
    00382 {
    00383   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
    00384   if ( !prot )
    00385     return false;
    00386
    00387   return prot->m_canCopyToFile;
    00388 }
    00389
    00390 QString KProtocolInfo::icon( const QString& _protocol )
    00391 {
    00392   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
    00393   if ( !prot )
    00394     return QString::fromLatin1("mime_empty");
    00395
    00396   return prot->m_icon;
    00397 }
    00398
    00399 QString KProtocolInfo::config( const QString& _protocol )
    00400 {
    00401   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
    00402   if ( !prot )
    00403     return QString::null;
    00404
    00405   return QString("kio_%1rc").arg(prot->m_config);
    00406 }
    00407
    00408 int KProtocolInfo::maxSlaves( const QString& _protocol )
    00409 {
    00410   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
    00411   if ( !prot )
    00412     return 1;
    00413
    00414   return prot->m_maxSlaves;
    00415 }
    00416
    00417 QString KProtocolInfo::defaultMimetype( const QString& _protocol )
    00418 {
    00419   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
    00420   if ( !prot )
    00421     return QString::null;
    00422
    00423   return prot->m_defaultMimetype;
    00424 }
    00425
    00426 bool KProtocolInfo::determineMimetypeFromExtension( const QString &_protocol )
    00427 {
    00428   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol( _protocol );
    00429   if ( !prot )
    00430     return true;
    00431
    00432   return prot->m_determineMimetypeFromExtension;
    00433 }
    00434
    00435 QString KProtocolInfo::exec( const QString& _protocol )
    00436 {
    00437   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
    00438   if ( !prot )
    00439     return QString::null;
    00440
    00441   return prot->m_exec;
    00442 }
    00443
    00444 KProtocolInfo::Type KProtocolInfo::inputType( const QString& _protocol )
    00445 {
    00446   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
    00447   if ( !prot )
    00448     return T_NONE;
    00449
    00450   return prot->m_inputType;
    00451 }
    00452
    00453 KProtocolInfo::Type KProtocolInfo::outputType( const QString& _protocol )
    00454 {
    00455   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
    00456   if ( !prot )
    00457     return T_NONE;
    00458
    00459   return prot->m_outputType;
    00460 }
    00461
    00462 KProtocolInfo::ExtraFieldList KProtocolInfo::extraFields( const KURL &url )
    00463 {
    00464   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(url.protocol());
    00465   if ( !prot )
    00466     return ExtraFieldList();
    00467
    00468   return prot->d->extraFields;
    00469 }
    00470
    00471 QString KProtocolInfo::docPath( const QString& _protocol )
    00472 {
    00473   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
    00474   if ( !prot )
    00475     return QString::null;
    00476
    00477   return prot->d->docPath;
    00478 }
    00479
    00480 QString KProtocolInfo::protocolClass( const QString& _protocol )
    00481 {
    00482   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
    00483   if ( !prot )
    00484     return QString::null;
    00485
    00486   return prot->d->protClass;
    00487 }
    00488
    00489 bool KProtocolInfo::showFilePreview( const QString& _protocol )
    00490 {
    00491   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
    00492   if ( !prot )
    00493     return false;
    00494
    00495   return prot->d->showPreviews;
    00496 }
    00497
    00498 KURL::URIMode KProtocolInfo::uriParseMode( const QString& _protocol )
    00499 {
    00500   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
    00501   if ( !prot )
    00502     return KURL::Auto;
    00503
    00504   return prot->d->uriMode;
    00505 }
    00506
    00507 QStringList KProtocolInfo::capabilities( const QString& _protocol )
    00508 {
    00509   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
    00510   if ( !prot )
    00511     return QStringList();
    00512
    00513   return prot->d->capabilities;
    00514 }
    00515
    00516 QString KProtocolInfo::proxiedBy( const QString& _protocol )
    00517 {
    00518   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
    00519   if ( !prot )
    00520     return QString::null;
    00521
    00522   return prot->d->proxyProtocol;
    00523 }
    00524
    00525 bool KProtocolInfo::canRenameFromFile() const
    00526 {
    00527   return d->canRenameFromFile;
    00528 }
    00529
    00530 bool KProtocolInfo::canRenameToFile() const
    00531 {
    00532   return d->canRenameToFile;
    00533 }
    00534
    00535 bool KProtocolInfo::canDeleteRecursive() const
    00536 {
    00537   return d->canDeleteRecursive;
    00538 }
    00539
    00540 KProtocolInfo::FileNameUsedForCopying KProtocolInfo::fileNameUsedForCopying() const
    00541 {
    00542   return d->fileNameUsedForCopying ? Name : FromURL;
    00543 }
    00544
    00545 QDataStream& operator>>( QDataStream& s, KProtocolInfo::ExtraField& field )  {
    00546   s >> field.name;
    00547   s >> field.type;
    00548   return s;
    00549 }
    00550
    00551 QDataStream& operator<<( QDataStream& s, const KProtocolInfo::ExtraField& field )  {
    00552   s << field.name;
    00553   s << field.type;
    00554   return s;
    00555 }
    00556
    00557 // KURL based static functions are implemented in ../kio/kio/kprotocolinfo.cpp
    00558
    00559 void KProtocolInfo::virtual_hook( int id, void* data )
    00560 { KSycocaEntry::virtual_hook( id, data ); }
    00561

This file is part of the documentation for kdecore Library Version 3.4.1.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Sat Jun 11 20:18:10 2005 by doxygen 1.4.1 written by Dimitri van Heesch, © 1997-2003