From dfeb19b0a83b8ce57d28bf94a4f8d129993d1064 Mon Sep 17 00:00:00 2001 From: Joel Klinghed Date: Mon, 12 Jan 2026 23:06:20 +0100 Subject: Initial commit --- src/xcb_resources_xrm.cc | 74 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 src/xcb_resources_xrm.cc (limited to 'src/xcb_resources_xrm.cc') diff --git a/src/xcb_resources_xrm.cc b/src/xcb_resources_xrm.cc new file mode 100644 index 0000000..1574fdc --- /dev/null +++ b/src/xcb_resources_xrm.cc @@ -0,0 +1,74 @@ +#include "xcb_connection.hh" +#include "xcb_resources.hh" + +#include +#include +#include +#include +#include +#include + +namespace xcb { + +namespace { + +struct DatabaseDeleter { + void operator()(xcb_xrm_database_t* db) { xcb_xrm_database_free(db); } +}; + +class ResourcesXrm : public Resources { + public: + explicit ResourcesXrm(shared_conn conn) + : conn_(std::move(conn)), + db_(xcb_xrm_database_from_default(conn_.get())) {} + + std::optional get_string(std::string const& name, + std::string const& clazz) override { + if (db_) { + char* tmp; + if (xcb_xrm_resource_get_string(db_.get(), std::string(name).c_str(), + std::string(clazz).c_str(), &tmp) >= 0) { + std::string ret(tmp); + free(tmp); + return ret; + } + } + return std::nullopt; + } + + std::optional get_long(std::string const& name, + std::string const& clazz) override { + if (db_) { + long tmp; + if (xcb_xrm_resource_get_long(db_.get(), std::string(name).c_str(), + std::string(clazz).c_str(), &tmp) >= 0) { + return tmp; + } + } + return std::nullopt; + } + + std::optional get_bool(std::string const& name, + std::string const& clazz) override { + if (db_) { + bool tmp; + if (xcb_xrm_resource_get_bool(db_.get(), std::string(name).c_str(), + std::string(clazz).c_str(), &tmp) >= 0) { + return tmp; + } + } + return std::nullopt; + } + + private: + shared_conn conn_; + std::unique_ptr db_; +}; + +} // namespace + +std::unique_ptr Resources::create(shared_conn conn) { + return std::make_unique(std::move(conn)); +} + +} // namespace xcb -- cgit v1.2.3-70-g09d2