70
71
extern UnloadPluginProc loaderUnloadPlugin;
71
72
extern ListPluginsProc loaderListPlugins;
83
* Provide a definition for PluginKey, with a protected
84
* constructor which is a friend of VTableBase */
91
friend class VTableBase;
99
virtual ~VTableBase () {};
74
106
* Base plug-in interface for Compiz. All plugins must implement this
75
107
* interface, which provides basics for loading, unloading, options,
91
126
const CompString &name () const;
93
128
virtual bool init () = 0;
95
129
virtual void fini ();
131
/* Mark the plugin as ready to be instantiated */
132
virtual void markReadyToInstantiate () = 0;
134
/* Mark the plugin as disallowing further instantiation */
135
virtual void markNoFurtherInstantiation () = 0;
97
137
virtual bool initScreen (CompScreen *s);
99
139
virtual void finiScreen (CompScreen *s);
117
template <typename T, typename T2>
118
class VTableForScreenAndWindow : public VTable {
119
bool initScreen (CompScreen *s);
121
void finiScreen (CompScreen *s);
123
bool initWindow (CompWindow *w);
125
void finiWindow (CompWindow *w);
127
CompOption::Vector & getOptions ();
129
bool setOption (const CompString &name, CompOption::Value &value);
157
template <typename T, typename T2, int ABI = 0>
158
class VTableForScreenAndWindow :
163
bool initScreen (CompScreen *s);
164
void finiScreen (CompScreen *s);
165
bool initWindow (CompWindow *w);
166
void finiWindow (CompWindow *w);
167
CompOption::Vector & getOptions ();
168
bool setOption (const CompString &name,
169
CompOption::Value &value);
173
/* Mark the plugin as ready to be instantiated */
174
void markReadyToInstantiate ();
176
/* Mark the plugin as disallowing further instantiation */
177
void markNoFurtherInstantiation ();
135
template <typename T>
136
class VTableForScreen : public VTable {
137
bool initScreen (CompScreen *s);
139
void finiScreen (CompScreen *s);
141
CompOption::Vector & getOptions ();
143
bool setOption (const CompString &name, CompOption::Value &value);
183
template <typename T, int ABI = 0>
184
class VTableForScreen :
189
bool initScreen (CompScreen *s);
190
void finiScreen (CompScreen *s);
191
CompOption::Vector & getOptions ();
192
bool setOption (const CompString &name, CompOption::Value &value);
196
/* Mark the plugin as ready to be instantiated */
197
void markReadyToInstantiate ();
199
/* Mark the plugin as disallowing further instantiation */
200
void markNoFurtherInstantiation ();
146
203
typedef std::map<CompString, CompPlugin *> Map;
215
template <typename T, typename T2>
216
bool CompPlugin::VTableForScreenAndWindow<T,T2>::initScreen (CompScreen *s)
272
* Mark the plugin class handlers as ready to be initialized
274
template <typename T, typename T2, int ABI>
276
CompPlugin::VTableForScreenAndWindow<T, T2, ABI>::markReadyToInstantiate ()
278
namespace cpi = compiz::plugin::internal;
280
typedef typename T::ClassPluginBaseType ScreenBase;
281
typedef typename T2::ClassPluginBaseType WindowBase;
283
typedef cpi::LoadedPluginClassBridge <T, ScreenBase, ABI> ScreenBridge;
284
typedef cpi::LoadedPluginClassBridge <T2, WindowBase, ABI> WindowBridge;
286
ScreenBridge::allowInstantiations (*this);
287
WindowBridge::allowInstantiations (*this);
291
* Allow no further class handler initialization
293
template <typename T, typename T2, int ABI>
295
CompPlugin::VTableForScreenAndWindow<T, T2, ABI>::markNoFurtherInstantiation ()
297
namespace cpi = compiz::plugin::internal;
299
typedef typename T::ClassPluginBaseType ScreenBase;
300
typedef typename T2::ClassPluginBaseType WindowBase;
302
typedef cpi::LoadedPluginClassBridge <T, ScreenBase, ABI> ScreenBridge;
303
typedef cpi::LoadedPluginClassBridge <T2, WindowBase, ABI> WindowBridge;
305
ScreenBridge::disallowInstantiations (*this);
306
WindowBridge::disallowInstantiations (*this);
309
template <typename T, typename T2, int ABI>
311
CompPlugin::VTableForScreenAndWindow<T, T2, ABI>::initScreen (CompScreen *s)
218
313
T * ps = T::get (s);
225
template <typename T, typename T2>
226
void CompPlugin::VTableForScreenAndWindow<T,T2>::finiScreen (CompScreen *s)
320
template <typename T, typename T2, int ABI>
322
CompPlugin::VTableForScreenAndWindow<T, T2, ABI>::finiScreen (CompScreen *s)
228
324
T * ps = T::get (s);
232
template <typename T, typename T2>
233
bool CompPlugin::VTableForScreenAndWindow<T,T2>::initWindow (CompWindow *w)
328
template <typename T, typename T2, int ABI>
330
CompPlugin::VTableForScreenAndWindow<T, T2, ABI>::initWindow (CompWindow *w)
235
332
T2 * pw = T2::get (w);
242
template <typename T, typename T2>
243
void CompPlugin::VTableForScreenAndWindow<T,T2>::finiWindow (CompWindow *w)
339
template <typename T, typename T2, int ABI>
341
CompPlugin::VTableForScreenAndWindow<T, T2, ABI>::finiWindow (CompWindow *w)
245
343
T2 * pw = T2::get (w);
249
template <typename T, typename T2>
250
CompOption::Vector & CompPlugin::VTableForScreenAndWindow<T,T2>::getOptions ()
347
template <typename T, typename T2, int ABI>
348
CompOption::Vector & CompPlugin::VTableForScreenAndWindow<T, T2, ABI>::getOptions ()
252
350
CompOption::Class *oc = dynamic_cast<CompOption::Class *> (T::get (screen));
255
353
return oc->getOptions ();
258
template <typename T, typename T2>
259
bool CompPlugin::VTableForScreenAndWindow<T,T2>::setOption (const CompString &name,
260
CompOption::Value &value)
356
template <typename T, typename T2, int ABI>
358
CompPlugin::VTableForScreenAndWindow<T, T2, ABI>::setOption (const CompString &name,
359
CompOption::Value &value)
262
361
CompOption::Class *oc = dynamic_cast<CompOption::Class *> (T::get (screen));
265
364
return oc->setOption (name, value);
268
template <typename T>
269
bool CompPlugin::VTableForScreen<T>::initScreen (CompScreen *s)
368
* Mark the plugin class handlers as ready to be initialized
370
template <typename T, int ABI>
372
CompPlugin::VTableForScreen<T, ABI>::markReadyToInstantiate ()
374
namespace cpi = compiz::plugin::internal;
376
typedef typename T::ClassPluginBaseType ScreenBase;
377
typedef cpi::LoadedPluginClassBridge <T, ScreenBase, ABI> ScreenBridge;
379
ScreenBridge::allowInstantiations (*this);
383
* Allow no further class handler initialization
385
template <typename T, int ABI>
387
CompPlugin::VTableForScreen<T, ABI>::markNoFurtherInstantiation ()
389
namespace cpi = compiz::plugin::internal;
391
typedef typename T::ClassPluginBaseType ScreenBase;
392
typedef cpi::LoadedPluginClassBridge <T, ScreenBase, ABI> ScreenBridge;
394
ScreenBridge::disallowInstantiations (*this);
397
template <typename T, int ABI>
399
CompPlugin::VTableForScreen<T, ABI>::initScreen (CompScreen *s)
271
401
T * ps = new T (s);
272
402
if (ps->loadFailed ())
280
template <typename T>
281
void CompPlugin::VTableForScreen<T>::finiScreen (CompScreen *s)
410
template <typename T, int ABI>
411
void CompPlugin::VTableForScreen<T, ABI>::finiScreen (CompScreen *s)
283
413
T * ps = T::get (s);
287
template <typename T>
288
CompOption::Vector & CompPlugin::VTableForScreen<T>::getOptions ()
417
template <typename T, int ABI>
419
CompPlugin::VTableForScreen<T, ABI>::getOptions ()
290
421
CompOption::Class *oc = dynamic_cast<CompOption::Class *> (T::get (screen));
293
424
return oc->getOptions ();
296
template <typename T>
297
bool CompPlugin::VTableForScreen<T>::setOption (const CompString &name,
427
template <typename T, int ABI>
429
CompPlugin::VTableForScreen<T, ABI>::setOption (const CompString &name,
298
430
CompOption::Value &value)
300
432
CompOption::Class *oc = dynamic_cast<CompOption::Class *> (T::get (screen));