feat: basic plugin system

The wayland plugin now uses it.
This commit is contained in:
outfoxxed 2024-02-25 23:47:17 -08:00
parent 6c6272e523
commit 3bd587cfcc
Signed by: outfoxxed
GPG key ID: 4C88A185FB89301E
8 changed files with 94 additions and 4 deletions

29
src/core/plugin.hpp Normal file
View file

@ -0,0 +1,29 @@
#pragma once
#include <qcontainerfwd.h>
#include <qfunctionpointer.h>
class QuickshellPlugin {
public:
QuickshellPlugin() = default;
virtual ~QuickshellPlugin() = default;
QuickshellPlugin(QuickshellPlugin&&) = delete;
QuickshellPlugin(const QuickshellPlugin&) = delete;
void operator=(QuickshellPlugin&&) = delete;
void operator=(const QuickshellPlugin&) = delete;
virtual bool applies() { return true; }
virtual void init() {}
virtual void registerTypes() {}
static void registerPlugin(QuickshellPlugin& plugin);
static void initPlugins();
};
// NOLINTBEGIN
#define QS_REGISTER_PLUGIN(clazz) \
[[gnu::constructor]] void qsInitPlugin() { \
static clazz plugin; \
QuickshellPlugin::registerPlugin(plugin); \
}
// NOLINTEND