• Skip to content
  • Skip to link menu
Trinity API Reference
  • Trinity API Reference
  • tdeutils
 

tdeutils

  • tdeutils
tdecmoduleproxy.cpp
1 /* This file is part of the KDE project
2  Copyright (C) 2004 Frans Englich <frans.englich@telia.com>
3  Copyright (C) 2003 Matthias Kretz <kretz@kde.org>
4 
5  This library is free software; you can redistribute it and/or
6  modify it under the terms of the GNU Library General Public
7  License version 2 as published by the Free Software Foundation.
8 
9  This library is distributed in the hope that it will be useful,
10  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12  Library General Public License for more details.
13 
14  You should have received a copy of the GNU Library General Public License
15  along with this library; see the file COPYING.LIB. If not, write to
16  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17  Boston, MA 02110-1301, USA.
18 */
19 
20 #include <tqapplication.h>
21 #include <tqcursor.h>
22 #include <tqdatastream.h>
23 #include <tqevent.h>
24 #include <tqfileinfo.h>
25 #include <tqframe.h>
26 #include <tqlabel.h>
27 #include <tqlayout.h>
28 #include <tqpoint.h>
29 #include <tqscrollview.h>
30 #include <tqtextstream.h>
31 #include <tqvbox.h>
32 #include <tqwhatsthis.h>
33 #include <tqwidget.h>
34 
35 #include <dcopclient.h>
36 #include <qxembed.h>
37 
38 #include <tdeapplication.h>
39 #include <tdeaboutdata.h>
40 #include <tdecmodule.h>
41 #include <tdecmoduleinfo.h>
42 #include <tdecmoduleloader.h>
43 #include <kdebug.h>
44 #include <kdialog.h>
45 #include <tdelocale.h>
46 #include <tdeprocess.h>
47 #include <kservice.h>
48 #include <kstandarddirs.h>
49 #include <kuser.h>
50 
51 #include <X11/Xlib.h>
52 
53 #include "tdecmoduleproxy.h"
54 #include "tdecmoduleproxyIface.h"
55 #include "tdecmoduleproxyIfaceImpl.h"
56 
57 /***************************************************************/
58 class TDECModuleProxy::TDECModuleProxyPrivate
59 {
60  public:
61  TDECModuleProxyPrivate( const TDECModuleInfo & info )
62  : args( 0 )
63  , kcm( 0 )
64  //, view( 0 )
65  , embedWidget( 0 )
66  , rootProcess ( 0 )
67  , embedFrame ( 0 )
68  , dcopObject( 0 )
69  , dcopClient( 0 )
70  , topLayout( 0 )
71  , rootCommunicator( 0 )
72  , rootInfo( 0 )
73  , modInfo( info )
74  , withFallback( false )
75  , changed( false )
76  , rootMode( false )
77  , bogusOccupier( false )
78  , isInitialized( false )
79  {}
80 
81  ~TDECModuleProxyPrivate()
82  {
83  delete rootInfo; // Delete before embedWidget!
84  delete embedWidget; // Delete before embedFrame!
85  delete embedFrame;
86  delete dcopClient;
87  delete dcopObject;
88  delete rootCommunicator;
89  delete rootProcess;
90  delete kcm;
91  }
92 
93  TQStringList args;
94  TDECModule *kcm;
95  QXEmbed *embedWidget;
96  TDEProcess *rootProcess;
97  TQVBox *embedFrame;
98  TDECModuleProxyIfaceImpl *dcopObject;
99  DCOPClient *dcopClient;
100  TQVBoxLayout *topLayout; /* Contains TQScrollView view, and root stuff */
101  TDECModuleProxyRootCommunicatorImpl *rootCommunicator;
102  TQLabel *rootInfo;
103  TQCString dcopName;
104  TDECModuleInfo modInfo;
105  bool withFallback;
106  bool changed;
107  bool rootMode;
108  bool bogusOccupier;
109  bool isInitialized;
110 };
111 /***************************************************************/
112 
113 
114 
115 /*
116  TODO:
117 
118  - How TDECModuleProxy behaves wrt memory leaks and behavior, when exiting
119  from root mode is not tested, because no code make use of it. It needs
120  work, if it should be used.
121 
122  - Should write a document which outlines test cases, to avoid
123  regressions. This class is a hazard.
124 
125  - Two Layout problems in runAsRoot:
126  * lblBusy doesn't show
127  * d->kcm/d->rootInfo doesn't get it right when the user
128  presses cancel in the tdesu dialog
129 
130  - Resizing horizontally is contrained; minimum size is set somewhere.
131  It appears to be somehow derived from the module's size.
132 
133  - Prettify: set icon in KCMultiDialog.
134 
135  - Perhaps it's possible to link against tdesu such that
136  the dialog is in process?
137 
138  */
139 /***************************************************************/
140 TDECModule * TDECModuleProxy::realModule() const
141 {
142 
143  /*
144  * Note, don't call any function that calls realModule() since
145  * that leads to an infinite loop.
146  */
147 
148  kdDebug(711) << k_funcinfo << endl;
149 
150  /* Already loaded */
151  if( d->kcm )
152  return d->kcm;
153 
154  /* /We/ have no kcm, but tdecmshell running with root prevs does.. */
155  if( d->rootMode )
156  return 0;
157 
158  TQApplication::setOverrideCursor( TQt::WaitCursor );
159 
160  TDECModuleProxy * that = const_cast<TDECModuleProxy*>( this );
161 
162  if( !d->isInitialized )
163  {
164  d->dcopName = TQString(moduleInfo().handle().prepend("TDECModuleProxy-")).utf8();
165  d->topLayout = new TQVBoxLayout( that, 0, 0, "topLayout" );
166 
167  d->isInitialized = true;
168  }
169 
170  if( !d->dcopClient )
171  d->dcopClient = new DCOPClient();
172 
173  if( !d->dcopClient->isRegistered() )
174  d->dcopClient->registerAs( d->dcopName, false );
175 
176  d->dcopClient->setAcceptCalls( true );
177 
178  if( d->dcopClient->appId() == d->dcopName || d->bogusOccupier )
179  { /* We got the name we requested, because no one was before us,
180  * or, it was an random application which had picked that name */
181  kdDebug(711) << "Module not already loaded, loading module" << endl;
182 
183  d->dcopObject = new TDECModuleProxyIfaceImpl( d->dcopName, that );
184 
185  d->kcm = TDECModuleLoader::loadModule( moduleInfo(), TDECModuleLoader::Inline, d->withFallback,
186  that, name(), d->args );
187 
188  connect( d->kcm, TQ_SIGNAL( changed( bool ) ),
189  TQ_SLOT(moduleChanged(bool)) );
190  connect( d->kcm, TQ_SIGNAL( destroyed() ),
191  TQ_SLOT( moduleDestroyed() ) );
192  connect( d->kcm, TQ_SIGNAL(quickHelpChanged()),
193  TQ_SIGNAL(quickHelpChanged()));
194  TQWhatsThis::add( that, d->kcm->quickHelp() );
195 
196  d->topLayout->addWidget( d->kcm );
197 
198  if ( !d->rootInfo && /* If the message was not yet created */
199  d->kcm->useRootOnlyMsg() /* and the module requests the message */ &&
200  moduleInfo().needsRootPrivileges() /* and the module wants root access */ &&
201  !KUser().isSuperUser() ) /* and we are not currently root */
202  {
203 
204  d->rootInfo = new TQLabel( that, "rootInfo" );
205  d->topLayout->insertWidget( 0, d->rootInfo );
206 
207  d->rootInfo->setFrameShape(TQFrame::Box);
208  d->rootInfo->setFrameShadow(TQFrame::Raised);
209 
210  const TQString msg = d->kcm->rootOnlyMsg();
211  if( msg.isEmpty() )
212  d->rootInfo->setText(i18n(
213  "<b>Changes in this section requires root access.</b><br />"
214  "Click the \"Administrator Mode\" button to "
215  "allow modifications."));
216  else
217  d->rootInfo->setText(msg);
218 
219  TQWhatsThis::add( d->rootInfo, i18n(
220  "This section requires special permissions, probably "
221  "for system-wide changes; therefore, it is "
222  "required that you provide the root password to be "
223  "able to change the module's properties. If "
224  "you do not provide the password, the module will be "
225  "disabled."));
226  }
227  }
228  else
229  {
230  kdDebug(711) << "Module already loaded, loading KCMError" << endl;
231 
232  d->dcopClient->detach();
233  /* Re-register as anonymous */
234  d->dcopClient->attach();
235 
236  d->dcopClient->setNotifications( true );
237  connect( d->dcopClient, TQ_SIGNAL( applicationRemoved( const TQCString& )),
238  TQ_SLOT( applicationRemoved( const TQCString& )));
239 
240  /* Figure out the name of where the module is already loaded */
241  TQByteArray replyData, data;
242  TQCString replyType;
243  TQString result;
244  TQDataStream arg, stream( replyData, IO_ReadOnly );
245 
246  if( d->dcopClient->call( d->dcopName, d->dcopName, "applicationName()",
247  data, replyType, replyData ))
248  {
249  stream >> result;
250 
251  d->kcm = TDECModuleLoader::reportError( TDECModuleLoader::Inline,
252  i18n( "Argument is application name", "This configuration section is "
253  "already opened in %1" ).arg( result ), " ", that );
254 
255  d->topLayout->addWidget( d->kcm );
256  }
257  else
258  {
259  kdDebug(711) << "Calling TDECModuleProxy's DCOP interface for fetching the name failed." << endl;
260  d->bogusOccupier = true;
261  TQApplication::restoreOverrideCursor();
262  return realModule();
263  }
264  }
265 
266  TQApplication::restoreOverrideCursor();
267 
268  return d->kcm;
269 }
270 
271 void TDECModuleProxy::applicationRemoved( const TQCString& app )
272 {
273  if( app == d->dcopName )
274  {
275  /* Violence: Get rid of KCMError & CO, so that
276  * realModule() attempts to reload the module */
277  delete d->kcm;
278  d->kcm = 0;
279  d->dcopClient->setNotifications( false );
280  realModule();
281  d->kcm->show();
282  }
283 }
284 
285 void TDECModuleProxy::showEvent( TQShowEvent * ev )
286 {
287 
288  kdDebug(711) << k_funcinfo << endl;
289  ( void )realModule();
290 
291  /* We have no kcm, if we're in root mode */
292  if( d->kcm )
293  d->kcm->show();
294 
295  TQWidget::showEvent( ev );
296 
297 }
298 
299 void TDECModuleProxy::runAsRoot()
300 {
301  if ( !moduleInfo().needsRootPrivileges() )
302  return;
303 
304  TQApplication::setOverrideCursor( TQt::WaitCursor );
305 
306  delete d->rootProcess;
307  delete d->embedWidget;
308  delete d->embedFrame;
309 
310  d->embedFrame = new TQVBox( this, "embedFrame" );
311  d->embedFrame->setFrameStyle( TQFrame::Box | TQFrame::Raised );
312 
313  TQPalette pal( red );
314  pal.setColor( TQColorGroup::Background,
315  colorGroup().background() );
316  d->embedFrame->setPalette( pal );
317  d->embedFrame->setLineWidth( 2 );
318  d->embedFrame->setMidLineWidth( 2 );
319  d->topLayout->addWidget(d->embedFrame,1);
320 
321  d->embedWidget = new QXEmbed( d->embedFrame, "embedWidget" );
322 
323  d->embedFrame->show();
324 
325  TQLabel *lblBusy = new TQLabel(i18n("<big>Loading...</big>"), d->embedWidget, "lblBusy" );
326  lblBusy->setTextFormat(RichText);
327  lblBusy->setAlignment(AlignCenter);
328  lblBusy->setGeometry(0,0, d->kcm->width(), d->kcm->height());
329  lblBusy->show();
330 
331  deleteClient();
332  /* The DCOP registration is now gone, and it will occur again when tdecmshell soon
333  * registers. Here's a race condition in other words, but how likely is that?
334  *
335  * - It's a user initiated action, which means the user have to do weird stuff, very
336  * quick.
337  * - If the user _do_ manage to fsck up, the code will recover gracefully, see realModule().
338  *
339  * So no worry. At the end of this function, communication with
340  * the DCOP object is established.
341  */
342 
343  /* Prepare the process to run the tdecmshell */
344  TQString cmd = moduleInfo().service()->exec().stripWhiteSpace();
345  if (cmd.left(5) == "tdesu")
346  {
347  cmd = TQString(cmd.remove(0,5)).stripWhiteSpace();
348 
349  /* Remove all tdesu switches */
350  while( cmd.length() > 1 && cmd[ 0 ] == '-' )
351  cmd = TQString(cmd.remove( 0, cmd.find( ' ' ) )).stripWhiteSpace();
352  }
353 
354  if (cmd.left(8) == "tdecmshell")
355  cmd = TQString(cmd.remove(0,8)).stripWhiteSpace();
356 
357  /* Run the process */
358  TQString tdesu = TDEStandardDirs::findExe("tdesu");
359  if (!tdesu.isEmpty())
360  {
361 
362  d->rootProcess = new TDEProcess;
363 
364  *d->rootProcess << tdesu;
365  *d->rootProcess << "--nonewdcop" << "-n" << "-d" << TQString( "-i%1" ).arg(moduleInfo().icon());
366 
367  *d->rootProcess << TQString("%1 %2 --embed-proxy %3 --lang %4").arg(locate("exe", "tdecmshell"))
368  .arg(cmd).arg(d->embedWidget->winId()).arg(TDEGlobal::locale()->language());
369 
370  connect(d->rootProcess, TQ_SIGNAL(processExited(TDEProcess*)), TQ_SLOT(rootExited()));
371 
372  if ( !d->rootProcess->start( TDEProcess::NotifyOnExit ))
373  {
374  d->rootMode = false;
375  rootExited();
376  }
377  else
378  {
379  d->rootMode = true;
380  kapp->dcopClient();
381  d->rootCommunicator = new TDECModuleProxyRootCommunicatorImpl( d->dcopName + "-RootCommunicator", this );
382  }
383 
384  delete lblBusy;
385  TQApplication::restoreOverrideCursor();
386  return;
387  }
388 
389  /* Clean up in case of failure */
390  delete d->embedWidget;
391  d->embedWidget = 0;
392  delete d->embedFrame;
393  d->embedFrame = 0;
394 
395  TQApplication::restoreOverrideCursor();
396 }
397 
398 void TDECModuleProxy::rootExited()
399 {
400  kdDebug(711) << k_funcinfo << endl;
401 
402  if ( d->embedWidget->embeddedWinId() )
403  XDestroyWindow(tqt_xdisplay(), d->embedWidget->embeddedWinId());
404 
405  delete d->embedWidget;
406  d->embedWidget = 0;
407 
408  delete d->rootProcess;
409  d->rootProcess = 0;
410 
411  delete d->embedFrame;
412  d->embedFrame=0;
413 
414  delete d->rootCommunicator;
415  d->rootCommunicator = 0;
416 
417  /* Such that the "ordinary" module loads again */
418  d->rootMode = false;
419 
420  d->topLayout->invalidate();
421 
422  TQShowEvent ev;
423  showEvent( &ev );
424 
425  moduleChanged( false );
426  emit childClosed();
427 }
428 
429 TDECModuleProxy::~TDECModuleProxy()
430 {
431  deleteClient();
432  TDECModuleLoader::unloadModule(moduleInfo());
433 
434  delete d;
435 }
436 
437 void TDECModuleProxy::deleteClient()
438 {
439  if( d->embedWidget )
440  XKillClient(tqt_xdisplay(), d->embedWidget->embeddedWinId());
441 
442 
443  delete d->kcm;
444  d->kcm = 0;
445 
446  delete d->dcopObject;
447  d->dcopObject = 0;
448 
449  if( d->dcopClient && !d->dcopClient->detach() )
450  kdDebug(711) << "Unregistering from DCOP failed." << endl;
451 
452  delete d->dcopClient;
453  d->dcopClient = 0;
454 
455  kapp->syncX();
456 
457 }
458 
459 void TDECModuleProxy::moduleChanged( bool c )
460 {
461  if( d->changed == c )
462  return;
463 
464  d->changed = c;
465  emit changed( c );
466  emit changed( this );
467 }
468 
469 void TDECModuleProxy::moduleDestroyed()
470 {
471  d->kcm = 0;
472 }
473 
474 TDECModuleProxy::TDECModuleProxy( const KService::Ptr & service, bool withFallback,
475  TQWidget * parent, const char * name, const TQStringList & args)
476  : TQWidget( parent, name )
477 {
478  init( TDECModuleInfo( service ));
479  d->args = args;
480  d->withFallback = withFallback;
481 }
482 
483 TDECModuleProxy::TDECModuleProxy( const TDECModuleInfo & info, bool withFallback,
484  TQWidget * parent, const char * name, const TQStringList & args )
485  : TQWidget( parent, name )
486 {
487  init( info );
488  d->args = args;
489  d->withFallback = withFallback;
490 }
491 
492 TDECModuleProxy::TDECModuleProxy( const TQString& serviceName, bool withFallback,
493  TQWidget * parent, const char * name,
494  const TQStringList & args)
495  : TQWidget( parent, name )
496 {
497  init( TDECModuleInfo( serviceName ));
498  d->args = args;
499  d->withFallback = withFallback;
500 }
501 
502 void TDECModuleProxy::init( const TDECModuleInfo& info )
503 {
504  kdDebug(711) << k_funcinfo << endl;
505 
506  d = new TDECModuleProxyPrivate( info );
507 
508  /* This is all we do for now; all the heavy work is
509  * done in realModule(). It's called when the module
510  * _actually_ is needed, in for example showEvent().
511  * The module is loaded "on demand" -- lazy loading.
512  */
513 
514 }
515 
516 void TDECModuleProxy::load()
517 {
518 
519  if( d->rootMode )
520  callRootModule( "load()" );
521  else if( realModule() )
522  {
523  d->kcm->load();
524  moduleChanged( false );
525  }
526 }
527 
528 void TDECModuleProxy::save()
529 {
530  if( d->rootMode )
531  callRootModule( "save()" );
532  else if( d->changed && realModule() )
533  {
534  d->kcm->save();
535  moduleChanged( false );
536  }
537 }
538 
539 void TDECModuleProxy::callRootModule( const TQCString& function )
540 {
541  TQByteArray sendData, replyData;
542  TQCString replyType;
543 
544  /* Note, we don't use d->dcopClient here, because it's used for
545  * the loaded module(and it's not "us" when this function is called) */
546  if( !kapp->dcopClient()->call( d->dcopName, d->dcopName, function, sendData,
547  replyType, replyData, true, -1 ))
548  kdDebug(711) << "Calling function '" << function << "' failed." << endl;
549 
550 }
551 
552 void TDECModuleProxy::defaults()
553 {
554  if( d->rootMode )
555  callRootModule( "defaults()" );
556  if( realModule() )
557  d->kcm->defaults();
558 }
559 
560 TQString TDECModuleProxy::quickHelp() const
561 {
562 
563  if( !d->rootMode )
564  return realModule() ? realModule()->quickHelp() : TQString::null;
565  else
566  {
567  TQByteArray data, replyData;
568  TQCString replyType;
569 
570  if (kapp->dcopClient()->call(d->dcopName, d->dcopName, "quickHelp()",
571  data, replyType, replyData))
572  kdDebug(711) << "Calling DCOP function bool changed() failed." << endl;
573  else
574  {
575  TQDataStream reply(replyData, IO_ReadOnly);
576  if (replyType == "TQString")
577  {
578  TQString result;
579  reply >> result;
580  return result;
581  }
582  else
583  kdDebug(711) << "DCOP function changed() returned mumbo jumbo." << endl;
584  }
585  return TQString::null;
586  }
587 }
588 
589 const TDEAboutData * TDECModuleProxy::aboutData() const
590 {
591  if( !d->rootMode ) {
592  return realModule() ? realModule()->aboutData() : 0;
593  }
594  else {
595  /* This needs fixing, perhaps cache a TDEAboutData copy
596  * while in root mode? */
597  return 0;
598  }
599 }
600 
601 TQString TDECModuleProxy::handbookDocPath() const
602 {
603  if( !d->rootMode ) {
604  return realModule() ? realModule()->handbookDocPath() : TQString::null;
605  }
606  else {
607  /* This needs fixing, perhaps cache a handbookSection() copy
608  * while in root mode? */
609  return TQString::null;
610  }
611 }
612 
613 TQString TDECModuleProxy::handbookSection() const
614 {
615  if( !d->rootMode ) {
616  return realModule() ? realModule()->handbookSection() : TQString::null;
617  }
618  else {
619  /* This needs fixing, perhaps cache a handbookSection() copy
620  * while in root mode? */
621  return TQString::null;
622  }
623 }
624 
625 int TDECModuleProxy::buttons() const
626 {
627  return realModule() ? realModule()->buttons() :
628  TDECModule::Help | TDECModule::Default | TDECModule::Apply ;
629 }
630 
631 TQString TDECModuleProxy::rootOnlyMsg() const
632 {
633  return realModule() ? realModule()->rootOnlyMsg() : TQString::null;
634 }
635 
636 bool TDECModuleProxy::useRootOnlyMsg() const
637 {
638  return realModule() ? realModule()->useRootOnlyMsg() : true;
639 }
640 
641 TDEInstance * TDECModuleProxy::instance() const
642 {
643  return realModule() ? realModule()->instance() : 0;
644 }
645 
646 bool TDECModuleProxy::changed() const
647 {
648  return d->changed;
649 }
650 
651 const TDECModuleInfo& TDECModuleProxy::moduleInfo() const
652 {
653  return d->modInfo;
654 }
655 
656 bool TDECModuleProxy::rootMode() const
657 {
658  return d->rootMode;
659 }
660 
661 TQCString TDECModuleProxy::dcopName() const
662 {
663  return d->dcopName;
664 }
665 
666 void TDECModuleProxy::emitQuickHelpChanged()
667 {
668  emit quickHelpChanged();
669 }
670 
671 /***************************************************************/
672 #include "tdecmoduleproxy.moc"
KUser
TDEAboutData
TDECModuleInfo
A class that provides information about a TDECModule.
Definition: tdecmoduleinfo.h:50
TDECModuleInfo::service
KService::Ptr service() const
Definition: tdecmoduleinfo.h:137
TDECModuleLoader::loadModule
static TDECModule * loadModule(const TDECModuleInfo &module, bool withFallback=true, TQWidget *parent=0, const char *name=0, const TQStringList &args=TQStringList()) TDE_DEPRECATED
Loads a TDECModule.
Definition: tdecmoduleloader.cpp:116
TDECModuleLoader::reportError
static TDECModule * reportError(ErrorReporting report, const TQString &text, TQString details, TQWidget *parent)
Returns a TDECModule containing the messages report and text.
Definition: tdecmoduleloader.cpp:284
TDECModuleLoader::Inline
@ Inline
the error report is shown instead of the TDECModule that should have * been loaded
Definition: tdecmoduleloader.h:93
TDECModuleLoader::unloadModule
static void unloadModule(const TDECModuleInfo &mod)
Unloads the module's library.
Definition: tdecmoduleloader.cpp:204
TDECModuleProxy
Encapsulates a TDECModule for embedding.
Definition: tdecmoduleproxy.h:69
TDECModuleProxy::useRootOnlyMsg
bool useRootOnlyMsg() const
Definition: tdecmoduleproxy.cpp:636
TDECModuleProxy::showEvent
void showEvent(TQShowEvent *)
Reimplemented for internal purposes.
Definition: tdecmoduleproxy.cpp:285
TDECModuleProxy::aboutData
const TDEAboutData * aboutData() const
Definition: tdecmoduleproxy.cpp:589
TDECModuleProxy::~TDECModuleProxy
~TDECModuleProxy()
Default destructor.
Definition: tdecmoduleproxy.cpp:429
TDECModuleProxy::TDECModuleProxy
TDECModuleProxy(const TDECModuleInfo &info, bool withFallback=true, TQWidget *parent=0, const char *name=0, const TQStringList &args=TQStringList())
Constructs a TDECModuleProxy from a TDECModuleInfo class.
Definition: tdecmoduleproxy.cpp:483
TDECModuleProxy::buttons
int buttons() const
Definition: tdecmoduleproxy.cpp:625
TDECModuleProxy::realModule
TDECModule * realModule() const
Access to the actual module.
Definition: tdecmoduleproxy.cpp:140
TDECModuleProxy::dcopName
TQCString dcopName() const
Returns the DCOP the module's DCOPClient and DCOPObject has(they are identical).
Definition: tdecmoduleproxy.cpp:661
TDECModuleProxy::childClosed
void childClosed()
When a module running with root privileges and exits, returns to normal mode, the childClosed() signa...
TDECModuleProxy::handbookSection
TQString handbookSection() const
Definition: tdecmoduleproxy.cpp:613
TDECModuleProxy::defaults
void defaults()
Calling it will cause the contained module to load its default values.
Definition: tdecmoduleproxy.cpp:552
TDECModuleProxy::instance
TDEInstance * instance() const
Returns the embedded TDECModule's TDEInstance.
Definition: tdecmoduleproxy.cpp:641
TDECModuleProxy::handbookDocPath
TQString handbookDocPath() const
Definition: tdecmoduleproxy.cpp:601
TDECModuleProxy::rootOnlyMsg
TQString rootOnlyMsg() const
Definition: tdecmoduleproxy.cpp:631
TDECModuleProxy::init
void init(const TDECModuleInfo &info)
Internal intialization function, called by the constructors.
Definition: tdecmoduleproxy.cpp:502
TDECModuleProxy::save
void save()
Calling it will cause the contained module to run its save() routine.
Definition: tdecmoduleproxy.cpp:528
TDECModuleProxy::rootMode
bool rootMode() const
Returns whether the module is running in root mode.
Definition: tdecmoduleproxy.cpp:656
TDECModuleProxy::load
void load()
Calling it will cause the contained module to run its load() routine.
Definition: tdecmoduleproxy.cpp:516
TDECModuleProxy::moduleInfo
const TDECModuleInfo & moduleInfo() const
Definition: tdecmoduleproxy.cpp:651
TDECModuleProxy::changed
bool changed() const
Definition: tdecmoduleproxy.cpp:646
TDECModuleProxy::deleteClient
void deleteClient()
Calling this, results in deleting the contained module, and unregistering from DCOP.
Definition: tdecmoduleproxy.cpp:437
TDECModuleProxy::emitQuickHelpChanged
void emitQuickHelpChanged()
Emits the quickHelpChanged signal.
Definition: tdecmoduleproxy.cpp:666
TDECModuleProxy::runAsRoot
void runAsRoot()
Calling this will cause the module to be run in "administrator mode".
Definition: tdecmoduleproxy.cpp:299
TDECModuleProxy::quickHelp
TQString quickHelp() const
Definition: tdecmoduleproxy.cpp:560
TDECModule
TDECModule::quickHelp
virtual TQString quickHelp() const
TDECModule::handbookDocPath
virtual TQString handbookDocPath() const
TDECModule::buttons
int buttons() const
TDECModule::useRootOnlyMsg
bool useRootOnlyMsg() const
TDECModule::rootOnlyMsg
TQString rootOnlyMsg() const
TDECModule::handbookSection
virtual TQString handbookSection() const
TDECModule::aboutData
virtual const TDEAboutData * aboutData() const
TDEGlobal::locale
static TDELocale * locale()
TDEInstance
TDEProcess
TDEProcess::NotifyOnExit
NotifyOnExit
TDEStandardDirs::findExe
static TQString findExe(const TQString &appname, const TQString &pathstr=TQString::null, bool ignoreExecBit=false)
endl
kndbgstream & endl(kndbgstream &s)
kdDebug
kdbgstream kdDebug(int area=0)
locate
TQString locate(const char *type, const TQString &filename, const TDEInstance *instance=TDEGlobal::instance())
tdelocale.h

tdeutils

Skip menu "tdeutils"
  • Main Page
  • Modules
  • Namespace List
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Class Members
  • Related Pages

tdeutils

Skip menu "tdeutils"
  • arts
  • dcop
  • dnssd
  • interfaces
  •   kspeech
  •     interface
  •     library
  •   tdetexteditor
  • kate
  • kded
  • kdoctools
  • kimgio
  • kjs
  • libtdemid
  • libtdescreensaver
  • tdeabc
  • tdecmshell
  • tdecore
  • tdefx
  • tdehtml
  • tdeinit
  • tdeio
  •   bookmarks
  •   httpfilter
  •   kpasswdserver
  •   kssl
  •   tdefile
  •   tdeio
  •   tdeioexec
  • tdeioslave
  •   http
  • tdemdi
  •   tdemdi
  • tdenewstuff
  • tdeparts
  • tdeprint
  • tderandr
  • tderesources
  • tdespell2
  • tdesu
  • tdeui
  • tdeunittest
  • tdeutils
  • tdewallet
Generated for tdeutils by doxygen 1.9.1
This website is maintained by Timothy Pearson.