mirror of
https://github.com/rad4day/Waybar.git
synced 2025-07-13 22:52:30 +02:00
Added cffi/* module for third-party advanced modules
This commit is contained in:
@ -91,7 +91,7 @@
|
||||
#include "modules/cava.hpp"
|
||||
#endif
|
||||
#include "bar.hpp"
|
||||
#include "modules/cabi.hpp"
|
||||
#include "modules/cffi.hpp"
|
||||
#include "modules/custom.hpp"
|
||||
#include "modules/image.hpp"
|
||||
#include "modules/temperature.hpp"
|
||||
|
@ -1,28 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
#include <fmt/format.h>
|
||||
|
||||
#include <csignal>
|
||||
#include <string>
|
||||
|
||||
#include "AModule.hpp"
|
||||
#include "util/command.hpp"
|
||||
#include "util/json.hpp"
|
||||
#include "util/sleeper_thread.hpp"
|
||||
|
||||
namespace waybar::modules {
|
||||
|
||||
class CABI : public AModule {
|
||||
public:
|
||||
CABI(const std::string&, const std::string&, const Json::Value&);
|
||||
virtual ~CABI();
|
||||
|
||||
private:
|
||||
void* cabi_instance_ = nullptr;
|
||||
|
||||
std::function<void*(GtkContainer*)> wbcabi_init_ = nullptr;
|
||||
std::function<void(void*)> wbcabi_deinit_ = [](void*) {};
|
||||
std::function<const char*(void*)> wbcabi_last_error_str_ = [](void*) { return nullptr; };
|
||||
};
|
||||
|
||||
} // namespace waybar::modules
|
50
include/modules/cffi.hpp
Normal file
50
include/modules/cffi.hpp
Normal file
@ -0,0 +1,50 @@
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
|
||||
#include "AModule.hpp"
|
||||
#include "util/command.hpp"
|
||||
#include "util/json.hpp"
|
||||
#include "util/sleeper_thread.hpp"
|
||||
|
||||
namespace waybar::modules {
|
||||
|
||||
extern "C" {
|
||||
// C ABI representation of a config key/value pair
|
||||
struct wbcffi_config_entry {
|
||||
const char* key;
|
||||
const char* value;
|
||||
};
|
||||
}
|
||||
|
||||
class CFFI : public AModule {
|
||||
public:
|
||||
CFFI(const std::string&, const std::string&, const Json::Value&);
|
||||
virtual ~CFFI();
|
||||
|
||||
// virtual auto update() -> void override;
|
||||
// virtual operator Gtk::Widget&() override;
|
||||
|
||||
virtual auto refresh(int signal) -> void override;
|
||||
virtual auto doAction(const std::string& name) -> void override;
|
||||
|
||||
private:
|
||||
///
|
||||
void* cffi_instance_ = nullptr;
|
||||
|
||||
typedef void*(InitFn)(GtkContainer*, const struct wbcffi_config_entry* config_entries,
|
||||
size_t config_entries_len);
|
||||
typedef void(DenitFn)(void* instance);
|
||||
typedef void(RefreshFn)(void* instance, int signal);
|
||||
typedef void(DoActionFn)(void* instance, const char* name);
|
||||
|
||||
// FFI hooks
|
||||
struct {
|
||||
std::function<InitFn> init = nullptr;
|
||||
std::function<DenitFn> deinit = nullptr;
|
||||
std::function<RefreshFn> refresh = [](void*, int) {};
|
||||
std::function<DoActionFn> doAction = [](void*, const char*) {};
|
||||
} hooks_;
|
||||
};
|
||||
|
||||
} // namespace waybar::modules
|
Reference in New Issue
Block a user