• 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 <tdestandarddirs.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/***************************************************************/
58class 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/***************************************************************/
140TDECModule * 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
271void 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
285void 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
299void 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 tdeApp->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
398void 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
429TDECModuleProxy::~TDECModuleProxy()
430{
431 deleteClient();
432 TDECModuleLoader::unloadModule(moduleInfo());
433
434 delete d;
435}
436
437void 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 tdeApp->syncX();
456
457}
458
459void 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
469void TDECModuleProxy::moduleDestroyed()
470{
471 d->kcm = 0;
472}
473
474TDECModuleProxy::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
483TDECModuleProxy::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
492TDECModuleProxy::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
502void 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
516void 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
528void 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
539void 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( !tdeApp->dcopClient()->call( d->dcopName, d->dcopName, function, sendData,
547 replyType, replyData, true, -1 ))
548 kdDebug(711) << "Calling function '" << function << "' failed." << endl;
549
550}
551
552void TDECModuleProxy::defaults()
553{
554 if( d->rootMode )
555 callRootModule( "defaults()" );
556 if( realModule() )
557 d->kcm->defaults();
558}
559
560TQString 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 (tdeApp->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
589const 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
601TQString 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
613TQString 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
625int TDECModuleProxy::buttons() const
626{
627 return realModule() ? realModule()->buttons() :
628 TDECModule::Help | TDECModule::Default | TDECModule::Apply ;
629}
630
631TQString TDECModuleProxy::rootOnlyMsg() const
632{
633 return realModule() ? realModule()->rootOnlyMsg() : TQString::null;
634}
635
636bool TDECModuleProxy::useRootOnlyMsg() const
637{
638 return realModule() ? realModule()->useRootOnlyMsg() : true;
639}
640
641TDEInstance * TDECModuleProxy::instance() const
642{
643 return realModule() ? realModule()->instance() : 0;
644}
645
646bool TDECModuleProxy::changed() const
647{
648 return d->changed;
649}
650
651const TDECModuleInfo& TDECModuleProxy::moduleInfo() const
652{
653 return d->modInfo;
654}
655
656bool TDECModuleProxy::rootMode() const
657{
658 return d->rootMode;
659}
660
661TQCString TDECModuleProxy::dcopName() const
662{
663 return d->dcopName;
664}
665
666void 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.4
This website is maintained by Timothy Pearson.