18
18
// You should have received a copy of the GNU General Public License
19
19
// along with this program. If not, write to the Free Software Foundation,
20
// Inc. ,59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
20
// Inc, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
22
// =============================================================================
22
24
#define _KVI_DEBUG_CHECK_RANGE_
23
#include "kvi_debug.h"
25
#define _KVI_DEBUG_CLASS_NAME_ "KviPlugin"
25
#include "kvi_plugin.h"
27
#include "kvi_settings.h"
27
29
#ifdef COMPILE_PLUGIN_SUPPORT
29
#include "kvi_locale.h"
33
#include <qobjectlist.h>
30
36
#include "kvi_config.h"
37
#include "kvi_debug.h"
38
#include "kvi_defines.h"
39
#include "kvi_dockablewidget.h"
31
40
#include "kvi_event.h"
33
41
#include "kvi_frame.h"
42
#include "kvi_locale.h"
43
#include "kvi_plugin.h"
44
#include "kvi_statusbar.h"
45
#include "kvi_systray.h"
46
#include "kvi_systray_bar.h"
47
#include "kvi_systray_widget.h"
34
48
#include "kvi_window.h"
35
#include "kvi_style.h"
36
#include "kvi_statusbar.h"
37
#include "kvi_systray.h"
39
extern KviEventManager * g_pEventManager;
44
#include <qobjectdict.h>
45
#include <qmetaobject.h>
48
#include "kvi_statusbar.h"
51
extern KviEventManager *g_pEventManager;
50
53
KviPluginManager::KviPluginManager()
52
m_pPluginList = new QList<KviPluginData>;
55
m_pPluginList = new QPtrList<KviPluginData>;
53
56
m_pPluginList->setAutoDelete(true);
54
m_pCommandList = new QList<KviPluginCommandHandler>;
57
m_pCommandList = new QPtrList<KviPluginCommandHandler>;
55
58
m_pCommandList->setAutoDelete(true);
56
m_pFunctionList = new QList<KviPluginFunctionHandler>;
59
m_pFunctionList = new QPtrList<KviPluginFunctionHandler>;
57
60
m_pFunctionList->setAutoDelete(true);
60
63
KviPluginManager::~KviPluginManager()
62
while(m_pPluginList->first())unloadPlugin(m_pPluginList->first()->filename.ptr());
65
while( m_pPluginList->first() )
66
unloadPlugin(m_pPluginList->first()->filename.ptr());
63
67
delete m_pPluginList;
64
69
__range_valid(m_pCommandList->count() == 0);
65
70
delete m_pCommandList;
66
72
__range_valid(m_pFunctionList->count() == 0);
67
73
delete m_pFunctionList;
70
//#include <qasciidict.h>
72
void KviPluginManager::unregisterMetaObject(const char * metaObjName)
74
if(!objectDict)return;
75
QMetaObject * ob = objectDict->find(metaObjName);
78
// debug("QMetaObject(\"%s\") found...destroying",metaObjName);
79
// WARNING: HACK for a Qt bug
80
// ob->d->slotAccess is never zeroed , and we get sigsegvs here..
82
// mmmmmh...some versions of qt seem to not have it ? (set_slot_access)
84
ob->set_slot_access(0);
85
objectDict->remove(metaObjName);
86
// debug("QMetaObject(\"%s\") destroyed",metaObjName);
92
77
void KviPluginManager::getLastError(KviStr &buffer)
94
79
buffer = dlerror();
97
KviPluginData * KviPluginManager::loadPlugin(const char * fName,bool bAutoload,KviStr * pErrorRet)
82
KviPluginData *KviPluginManager::loadPlugin(const char *fName, bool bAutoload, KviStr *pErrorRet)
99
// unloadPlugin(fName); //unload the file with the same name...
100
KviPluginData * d = findPlugin(fName);
101
if(d)return d; //already there
103
void * handle = dlopen(fName,RTLD_NOW);
106
if(pErrorRet)pErrorRet->sprintf(__tr("dlopen error: %s"),dlerror());
84
KviPluginData *d = findPlugin(fName);
86
return d; // Already there
88
void *handle = dlopen(fName, RTLD_NOW);
91
pErrorRet->sprintf(_i18n_("dlopen() error: %s"), dlerror());
110
KviPlugin * description = (KviPlugin *)dlsym(handle,"kvirc_plugin");
112
// not a kvirc plugin
113
if(pErrorRet)*pErrorRet = __tr("Plugin loaded but exports no 'kvirc_plugin' symbol");
95
KviPlugin *description = (KviPlugin *) dlsym(handle, "kvirc_plugin");
99
*pErrorRet = _i18n_("Plugin loaded but exports no 'kvirc_plugin' symbol");
118
d = new KviPluginData;
121
d->description = description;
122
d->bAutoload = bAutoload;
104
d = new KviPluginData();
107
d->description = description;
108
d->bAutoload = bAutoload;
123
109
d->bInitExecuted = false;
125
111
m_pPluginList->append(d);
130
KviPluginData * KviPluginManager::findPlugin(const char * fName)
132
for(KviPluginData *d=m_pPluginList->first();d;d=m_pPluginList->next()){
133
if(kvi_strEqualCI(fName,d->filename.ptr()))return d;
138
KviPluginData * KviPluginManager::findPluginByModuleName(const char * name)
140
for(KviPluginData *d=m_pPluginList->first();d;d=m_pPluginList->next()){
141
if(kvi_strEqualCI(name,d->description->module_name))return d;
146
KviPluginData * KviPluginManager::findPlugin(void * plugin_handle)
148
for(KviPluginData *d=m_pPluginList->first();d;d=m_pPluginList->next()){
149
if(d->handle == plugin_handle)return d;
154
bool KviPluginManager::executeInitRoutine(KviPluginData * data,KviPluginCommandStruct * cmd)
116
KviPluginData *KviPluginManager::findPlugin(const char *fName)
118
for( KviPluginData *d = m_pPluginList->first(); d; d = m_pPluginList->next() ) {
119
if( kvi_strEqualCI(fName, d->filename.ptr()) )
125
KviPluginData *KviPluginManager::findPluginByModuleName(const char *name)
127
for( KviPluginData *d = m_pPluginList->first(); d; d = m_pPluginList->next() ) {
128
if( kvi_strEqualCI(name, d->description->module_name) )
134
KviPluginData *KviPluginManager::findPlugin(void *plugin_handle)
136
for( KviPluginData *d = m_pPluginList->first(); d; d = m_pPluginList->next() ) {
137
if( d->handle == plugin_handle )
143
bool KviPluginManager::executeInitRoutine(KviPluginData *data, KviPluginCommandStruct *cmd)
156
145
__range_valid(data);
157
146
__range_valid(findPlugin(data->filename.ptr()));
158
if(data->bInitExecuted)return true; //already done with success!
159
data->bInitExecuted = (data->description->init_routine)(cmd);
147
if( data->bInitExecuted )
148
return true; // Already successfully done!
149
data->bInitExecuted = (data->description->init_routine) (cmd);
160
150
return data->bInitExecuted;
163
bool KviPluginManager::unloadPlugin(const char * fName)
165
KviPluginData * d = findPlugin(fName);
167
unloadPluginInternal(d);
171
bool KviPluginManager::unloadPluginByModuleName(const char * mName)
173
KviPluginData * d = findPluginByModuleName(mName);
175
unloadPluginInternal(d);
179
bool KviPluginManager::unloadPlugin(void * plugin_handle)
181
KviPluginData * d = findPlugin(plugin_handle);
183
unloadPluginInternal(d);
153
bool KviPluginManager::unloadPlugin(const char *fName)
155
KviPluginData *d = findPlugin(fName);
156
if( !d ) return false;
158
unloadPluginInternal(d);
162
bool KviPluginManager::unloadPluginByModuleName(const char *mName)
164
KviPluginData *d = findPluginByModuleName(mName);
165
if( !d )return false;
167
unloadPluginInternal(d);
187
171
void KviPluginManager::unloadPluginInternal(KviPluginData *d)
189
173
__range_valid(d);
190
// debug("Unloading plugin %s",d->filename.ptr());
193
if(d->description->cleanup_routine){
194
// call the cleanup routine
174
if( d->bInitExecuted ) {
175
if( d->description->cleanup_routine ) {
176
// Call the cleanup routine
195
177
(d->description->cleanup_routine)();
197
179
g_pApp->unregisterStylesFor(d->handle);
206
188
m_pPluginList->removeRef(d);
209
void KviPluginManager::unregisterCommandsFor(void * plugin_handle)
191
void KviPluginManager::unregisterCommandsFor(void *plugin_handle)
211
QList<KviPluginCommandHandler> l;
193
QPtrList<KviPluginCommandHandler> l;
212
194
l.setAutoDelete(false);
213
// find all the handlers owned by this plugin
214
for(KviPluginCommandHandler * c=m_pCommandList->first();c;c=m_pCommandList->next()){
215
if(c->plugin_handle == plugin_handle)l.append(c);
195
// Find all the handlers owned by this plugin
196
for( KviPluginCommandHandler *c = m_pCommandList->first(); c; c = m_pCommandList->next() ) {
197
if( c->plugin_handle == plugin_handle )
218
for(KviPluginCommandHandler * h=l.first();h;h=l.next())m_pCommandList->removeRef(h);
201
for( KviPluginCommandHandler *h = l.first(); h; h = l.next() )
202
m_pCommandList->removeRef(h);
221
void KviPluginManager::registerCommand(void * plugin_handle,const char * cmdname,
222
bool (*handler_routine)(KviPluginCommandStruct *))
205
void KviPluginManager::registerCommand(
206
void *plugin_handle, const char *cmdname, bool (*handler_routine) (KviPluginCommandStruct *))
224
208
__range_valid(findPlugin(plugin_handle));
225
// kill any previous handler with this name
226
KviPluginCommandHandler * d = findCommandHandler(cmdname);
227
if(d)m_pCommandList->removeRef(d);
229
d = new KviPluginCommandHandler;
209
// Remove any previous handler with this name
210
KviPluginCommandHandler *d = findCommandHandler(cmdname);
212
m_pCommandList->removeRef(d);
214
d = new KviPluginCommandHandler();
230
215
d->plugin_handle = plugin_handle;
231
216
d->handler_routine = handler_routine;
232
217
d->cmd_name = cmdname;
233
218
m_pCommandList->append(d);
236
KviPluginCommandHandler * KviPluginManager::findCommandHandler(const char *cmdname)
221
KviPluginCommandHandler *KviPluginManager::findCommandHandler(const char *cmdname)
238
for(KviPluginCommandHandler * c=m_pCommandList->first();c;c=m_pCommandList->next()){
239
if(kvi_strEqualCI(c->cmd_name.ptr(),cmdname))return c;
223
for( KviPluginCommandHandler *c = m_pCommandList->first(); c; c = m_pCommandList->next() ) {
224
if( kvi_strEqualCI(c->cmd_name.ptr(), cmdname) )
244
void KviPluginManager::unregisterCommand(void * plugin_handle,const char *cmdname)
230
void KviPluginManager::unregisterCommand(void *plugin_handle, const char *cmdname)
246
KviPluginCommandHandler * c = findCommandHandler(cmdname);
232
KviPluginCommandHandler *c = findCommandHandler(cmdname);
248
234
__range_valid(c->plugin_handle = plugin_handle);
249
235
m_pCommandList->removeRef(c);
253
void KviPluginManager::registerFunction(void * plugin_handle,const char * fncname,
254
bool (*handler_routine)(KviPluginCommandStruct *,KviStr *))
239
void KviPluginManager::registerFunction(
240
void *plugin_handle, const char *fncname, bool (*handler_routine) (KviPluginCommandStruct *, KviStr *))
256
242
__range_valid(findPlugin(plugin_handle));
257
// kill any previous handler with this name
258
KviPluginFunctionHandler * d = findFunctionHandler(fncname);
259
if(d)m_pFunctionList->removeRef(d);
261
d = new KviPluginFunctionHandler;
243
// Remove any previous handler with this name
244
KviPluginFunctionHandler *d = findFunctionHandler(fncname);
246
m_pFunctionList->removeRef(d);
248
d = new KviPluginFunctionHandler();
262
249
d->plugin_handle = plugin_handle;
263
250
d->handler_routine = handler_routine;
264
251
d->fnc_name = fncname;
265
252
m_pFunctionList->append(d);
268
void KviPluginManager::unregisterFunction(void * plugin_handle,const char *fncname)
255
void KviPluginManager::unregisterFunction(void *plugin_handle, const char *fncname)
270
KviPluginFunctionHandler * c = findFunctionHandler(fncname);
257
KviPluginFunctionHandler *c = findFunctionHandler(fncname);
272
259
__range_valid(c->plugin_handle = plugin_handle);
273
260
m_pFunctionList->removeRef(c);
277
void KviPluginManager::unregisterFunctionsFor(void * plugin_handle)
264
void KviPluginManager::unregisterFunctionsFor(void *plugin_handle)
279
QList<KviPluginFunctionHandler> l;
266
QPtrList<KviPluginFunctionHandler> l;
280
267
l.setAutoDelete(false);
281
// find all the handlers owned by this plugin
282
for(KviPluginFunctionHandler * c=m_pFunctionList->first();c;c=m_pFunctionList->next()){
283
if(c->plugin_handle == plugin_handle)l.append(c);
268
// Find all the handlers owned by this plugin
269
for( KviPluginFunctionHandler *c = m_pFunctionList->first(); c; c = m_pFunctionList->next() ) {
270
if( c->plugin_handle == plugin_handle )
286
for(KviPluginFunctionHandler * h=l.first();h;h=l.next())m_pFunctionList->removeRef(h);
274
for( KviPluginFunctionHandler *h = l.first(); h; h = l.next() )
275
m_pFunctionList->removeRef(h);
289
KviPluginFunctionHandler * KviPluginManager::findFunctionHandler(const char *fncname)
278
KviPluginFunctionHandler *KviPluginManager::findFunctionHandler(const char *fncname)
291
for(KviPluginFunctionHandler * c=m_pFunctionList->first();c;c=m_pFunctionList->next()){
292
if(kvi_strEqualCI(c->fnc_name.ptr(),fncname))return c;
280
for( KviPluginFunctionHandler *c = m_pFunctionList->first(); c; c = m_pFunctionList->next() ) {
281
if( kvi_strEqualCI(c->fnc_name.ptr(), fncname) )
297
bool KviPluginManager::load(const char *configName,KviStr &error)
287
bool KviPluginManager::load(const char *configName, KviStr &error)
301
291
KviConfig cfg(configName);
302
int nPlugins = cfg.readIntEntry("nPlugins",0);
303
for(int i=0;i<nPlugins;i++){
304
KviStr tmp(KviStr::Format,"plugin%d",i);
305
KviStr fName = cfg.readEntry(tmp.ptr(),"");
307
KviPluginData * d = loadPlugin(fName.ptr());
292
int nPlugins = cfg.readIntEntry("nPlugins", 0);
293
for( int i = 0; i < nPlugins; i++ ) {
294
KviStr tmp(KviStr::Format, "plugin%d", i);
295
KviStr fName = cfg.readEntry(tmp.ptr(), "");
296
if( fName.hasData() ) {
297
KviPluginData *d = loadPlugin(fName.ptr());
309
299
error.append("Could not load plugin ");
310
300
error.append(fName);
311
301
error.append('\n');
338
328
KviConfig cfg(configName);
330
cfg.writeEntry("nPlugins", m_pPluginList->count());
340
331
int nPlugins = 0;
341
for(KviPluginData *d=m_pPluginList->first();d;d=m_pPluginList->next()){
343
KviStr tmp(KviStr::Format,"plugin%d",nPlugins);
344
cfg.writeEntry(tmp.ptr(),d->filename.ptr());
332
for( KviPluginData *d = m_pPluginList->first(); d; d = m_pPluginList->next() ) {
334
KviStr tmp(KviStr::Format, "plugin%d", nPlugins);
335
cfg.writeEntry(tmp.ptr(), d->filename.ptr());
348
cfg.writeEntry("nPlugins",nPlugins);
349
339
return cfg.sync();
352
void KviPluginManager::registerHook(void * plugin_handle,int eventindex,
353
bool (*handler_routine)(KviPluginCommandStruct *))
342
void KviPluginManager::registerHook(
343
void *plugin_handle, int eventindex, bool (*handler_routine) (KviPluginCommandStruct *))
355
345
__range_valid(findPlugin(plugin_handle));
356
if(isHookRegistered(plugin_handle,eventindex)){
357
unregisterHook(plugin_handle,eventindex); // kill the previous hook that belongs to this plugin
346
if( isHookRegistered(plugin_handle, eventindex) )
347
unregisterHook(plugin_handle, eventindex); // Remove the previous hook that belongs to this plugin
360
KviPluginEventHandlerStruct * s= new KviPluginEventHandlerStruct;
349
KviPluginEventHandlerStruct *s = new KviPluginEventHandlerStruct();
361
350
s->handler_routine = handler_routine;
362
s->plugin_handle = plugin_handle;
351
s->plugin_handle = plugin_handle;
364
if(!g_pEventManager->m_pEventHandlerList[eventindex]){
365
g_pEventManager->m_pEventHandlerList[eventindex] = new QList<KviPluginEventHandlerStruct>;
353
if( !g_pEventManager->m_pEventHandlerList[eventindex] ) {
354
g_pEventManager->m_pEventHandlerList[eventindex] = new QPtrList<KviPluginEventHandlerStruct>;
366
355
g_pEventManager->m_pEventHandlerList[eventindex]->setAutoDelete(true);
368
357
g_pEventManager->m_pEventHandlerList[eventindex]->append(s);
371
bool KviPluginManager::isHookRegistered(void * plugin_handle,int eventindex)
360
bool KviPluginManager::isHookRegistered(void *plugin_handle, int eventindex)
373
if(!g_pEventManager->m_pEventHandlerList[eventindex])return false; //no hooks registered
374
for(KviPluginEventHandlerStruct *s=g_pEventManager->m_pEventHandlerList[eventindex]->first();s;s=g_pEventManager->m_pEventHandlerList[eventindex]->next()){
375
if(s->plugin_handle == plugin_handle)return true;
362
if( !g_pEventManager->m_pEventHandlerList[eventindex] )
363
return false; // No hooks registered
365
for( KviPluginEventHandlerStruct *s = g_pEventManager->m_pEventHandlerList[eventindex]->first()
367
; s = g_pEventManager->m_pEventHandlerList[eventindex]->next()
369
if( s->plugin_handle == plugin_handle )
380
void KviPluginManager::unregisterHook(void * plugin_handle,int eventindex)
375
void KviPluginManager::unregisterHook(void *plugin_handle, int eventindex)
382
377
__range_valid(findPlugin(plugin_handle));
384
if(!g_pEventManager->m_pEventHandlerList[eventindex])return; //no hooks registered
386
KviPluginEventHandlerStruct *s=g_pEventManager->m_pEventHandlerList[eventindex]->first();
388
if(s->plugin_handle == plugin_handle){
378
if( !g_pEventManager->m_pEventHandlerList[eventindex] )
379
return; // No hooks registered
381
KviPluginEventHandlerStruct *s = g_pEventManager->m_pEventHandlerList[eventindex]->first();
383
if( s->plugin_handle == plugin_handle ) {
389
384
g_pEventManager->m_pEventHandlerList[eventindex]->removeRef(s);
391
} else s = g_pEventManager->m_pEventHandlerList[eventindex]->next();
387
s = g_pEventManager->m_pEventHandlerList[eventindex]->next();
394
if(g_pEventManager->m_pEventHandlerList[eventindex]->count() == 0){
395
// and cleanup if the list is empty
390
if( g_pEventManager->m_pEventHandlerList[eventindex]->count() == 0 ) {
391
// And cleanup if the list is empty
396
392
delete g_pEventManager->m_pEventHandlerList[eventindex];
397
393
g_pEventManager->m_pEventHandlerList[eventindex] = 0;
401
void KviPluginManager::unregisterHooksFor(void * plugin_handle)
397
void KviPluginManager::unregisterHooksFor(void *plugin_handle)
403
for(int i=0;i<KVI_NUM_EVENTS;i++)unregisterHook(plugin_handle,i);
399
for( int i = 0; i < KVI_NUM_EVENTS; i++ )
400
unregisterHook(plugin_handle, i);
406
void KviPluginManager::addPluginWindow(void * plugin_handle,KviFrame * frame,KviWindow *wnd,bool bShow)
403
void KviPluginManager::addPluginWindow(void *plugin_handle, KviFrame *frame, KviWindow *wnd, bool bShow)
408
if(wnd->type() != KVI_WND_TYPE_PLUGIN){
409
wnd->m_type = KVI_WND_TYPE_PLUGIN; //fix silently
405
if( wnd->type() != KVI_WND_TYPE_PLUGIN ) {
406
wnd->m_type = KVI_WND_TYPE_PLUGIN; // Fix silently
410
407
#ifdef _KVI_DEBUG_CHECK_RANGE_
411
debug("The window exported by the plugin is not of type KVI_WND_TYPE_PLUGIN : fixing");
408
debug("The window exported by the plugin is not of type KVI_WND_TYPE_PLUGIN: fixing");
414
411
KviStr tmp = wnd->caption();
415
if(!kvi_strEqualCIN("!",tmp.ptr(),1)){
412
if( !kvi_strEqualCIN("!", tmp.ptr(), 1) ) {
416
413
tmp.prepend("!");
417
414
wnd->setWindowCaption(tmp.ptr());
418
415
wnd->setName(tmp.ptr());
419
416
#ifdef _KVI_DEBUG_CHECK_RANGE_
420
debug("The window exported by the plugn has a wrong name : fixing");
417
debug("The window exported by the plugin has a wrong name: fixing");
423
420
wnd->m_pluginHandle = plugin_handle;
424
frame->addWindow(wnd,bShow);
421
frame->addWindow(wnd, bShow);
427
void KviPluginManager::removeAllPluginWindows(void * plugin_handle)
424
void KviPluginManager::removeAllPluginWindows(void *plugin_handle)
429
if(!g_pApp->m_pFrameList)return; //shutdown...no more windows here.
430
for(KviFrame * f=g_pApp->m_pFrameList->first();f;f=g_pApp->m_pFrameList->next()){
426
if( !g_pApp->m_pFrameList )
427
return; // Shut down... no more windows here.
429
for( KviFrame *f = g_pApp->m_pFrameList->first(); f; f = g_pApp->m_pFrameList->next() ) {
430
QPtrList<KviWindow> l;
432
431
l.setAutoDelete(false);
433
for(KviWindow *wnd=f->m_pWinList->first();wnd;wnd=f->m_pWinList->next()){
434
if(wnd->type() == KVI_WND_TYPE_PLUGIN){
435
if(wnd->m_pluginHandle == plugin_handle)l.append(wnd);
432
for( KviWindow *wnd = f->m_pWinList->first(); wnd; wnd = f->m_pWinList->next() ) {
433
if( wnd->type() == KVI_WND_TYPE_PLUGIN ) {
434
if( wnd->m_pluginHandle == plugin_handle )
438
for(KviWindow *w=l.first();w;w=l.next())f->closeWindow(w);
438
for( KviWindow *w = l.first(); w; w = l.next() )
442
void KviPluginManager::addPluginDockedWidget(void * plugin_handle,KviFrame * frame,KviDockableWidget * w)
443
void KviPluginManager::addPluginDockedWidget(void *plugin_handle, KviFrame *frame, KviDockableWidget *w)
444
445
w->m_plugin_handle = plugin_handle;
445
frame->m_pStatusBar->addWidget(w,0,true);
447
const QObjectList * l = frame->m_pStatusBar->children();
448
QObjectListIt it(*l);
450
while((o=it.current())){
451
KviStr tmp =o->className();
452
if(kvi_strEqualCI(tmp.ptr(),"QSizeGrip")){
453
((QWidget *)o)->setMaximumWidth(((QWidget *)o)->sizeHint().width());
446
frame->m_pStatusBar->addWidget(w, 0, true);
461
void KviPluginManager::removeAllPluginDockedWidgets(void * plugin_handle)
449
void KviPluginManager::removeAllPluginDockedWidgets(void *plugin_handle)
463
if(!g_pApp->m_pFrameList)return; //shutdown...no more windows here.
464
QList<KviDockableWidget> * list = new QList<KviDockableWidget>;
451
if( !g_pApp->m_pFrameList )
452
return; // Shut down... no more windows here.
454
QPtrList<KviDockableWidget> *list = new QPtrList<KviDockableWidget>;
465
455
list->setAutoDelete(true);
466
for(KviFrame * f=g_pApp->m_pFrameList->first();f;f=g_pApp->m_pFrameList->next()){
467
// f->m_pStatusBar->killDockedWidgetsByPluginHandle(plugin_handle);
468
QObjectList * l = f->m_pStatusBar->queryList("KviDockableWidget");
469
l->setAutoDelete(false); //!!!
456
for( KviFrame *f = g_pApp->m_pFrameList->first(); f; f = g_pApp->m_pFrameList->next() ) {
457
QObjectList *l = f->m_pStatusBar->queryList("KviDockableWidget");
458
l->setAutoDelete(false);
470
459
QObjectListIt it(*l);
472
while((o=it.current())){
473
if(((KviDockableWidget *)o)->m_plugin_handle == plugin_handle){
474
f->m_pStatusBar->removeWidget((QWidget *)o);
475
list->append((KviDockableWidget *)o);
461
while( (o = it.current()) ) {
462
if( ((KviDockableWidget *) o)->m_plugin_handle == plugin_handle ) {
463
f->m_pStatusBar->removeWidget((QWidget *) o);
464
list->append((KviDockableWidget *) o);
485
void KviPluginManager::addPluginSysTrayWidget(void * plugin_handle,KviFrame * frame,KviSysTrayWidget * w, bool _show)
473
void KviPluginManager::addPluginSysTrayWidget(void *plugin_handle, KviFrame *frame, KviSysTrayWidget *w, bool show)
487
475
w->m_plugin_handle = plugin_handle;
488
frame->m_pSysTrayBar->m_pSysTray->addPluginWidget(w, _show);
476
frame->m_pSysTrayBar->m_pSysTray->addPluginWidget(w, show);
491
void KviPluginManager::removeAllPluginSysTrayWidgets(void * plugin_handle)
479
void KviPluginManager::removeAllPluginSysTrayWidgets(void *plugin_handle)
493
if(!g_pApp->m_pFrameList)return; //shutdown...no more windows here.
494
QList<KviSysTrayWidget> * list = new QList<KviSysTrayWidget>;
481
if( !g_pApp->m_pFrameList )
482
return; // Shut down... no more windows here.
484
QPtrList<KviSysTrayWidget> *list = new QPtrList<KviSysTrayWidget>;
495
485
list->setAutoDelete(true);
496
for(KviFrame * f=g_pApp->m_pFrameList->first();f;f=g_pApp->m_pFrameList->next()){
497
// f->m_pStatusBar->killDockedWidgetsByPluginHandle(plugin_handle);
486
for( KviFrame *f = g_pApp->m_pFrameList->first(); f; f = g_pApp->m_pFrameList->next() ) {
498
487
f->m_pSysTrayBar->m_pSysTray->killPluginWidgets(plugin_handle);
503
#else //!COMPILE_PLUGIN_SUPPORT
491
#else // COMPILE_PLUGIN_SUPPORT
505
492
#warning "Plugin support is disabled"