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/args.cc | 389 ++++++++++++++++++++++++++++ src/args.hh | 64 +++++ src/dbus_common.cc | 7 + src/dbus_common.hh | 14 ++ src/find_desktop.cc | 152 +++++++++++ src/find_desktop.hh | 10 + src/main.cc | 59 +++++ src/monitor.cc | 626 ++++++++++++++++++++++++++++++++++++++++++++++ src/monitor.hh | 13 + src/notify.cc | 59 +++++ src/notify.hh | 12 + src/xcb_atoms.cc | 81 ++++++ src/xcb_atoms.hh | 57 +++++ src/xcb_colors.cc | 96 +++++++ src/xcb_colors.hh | 57 +++++ src/xcb_connection.cc | 25 ++ src/xcb_connection.hh | 28 +++ src/xcb_event.hh | 30 +++ src/xcb_resource.cc | 41 +++ src/xcb_resource.hh | 99 ++++++++ src/xcb_resources.hh | 35 +++ src/xcb_resources_none.cc | 37 +++ src/xcb_resources_xrm.cc | 74 ++++++ src/xcb_xkb.cc | 167 +++++++++++++ src/xcb_xkb.hh | 30 +++ 25 files changed, 2262 insertions(+) create mode 100644 src/args.cc create mode 100644 src/args.hh create mode 100644 src/dbus_common.cc create mode 100644 src/dbus_common.hh create mode 100644 src/find_desktop.cc create mode 100644 src/find_desktop.hh create mode 100644 src/main.cc create mode 100644 src/monitor.cc create mode 100644 src/monitor.hh create mode 100644 src/notify.cc create mode 100644 src/notify.hh create mode 100644 src/xcb_atoms.cc create mode 100644 src/xcb_atoms.hh create mode 100644 src/xcb_colors.cc create mode 100644 src/xcb_colors.hh create mode 100644 src/xcb_connection.cc create mode 100644 src/xcb_connection.hh create mode 100644 src/xcb_event.hh create mode 100644 src/xcb_resource.cc create mode 100644 src/xcb_resource.hh create mode 100644 src/xcb_resources.hh create mode 100644 src/xcb_resources_none.cc create mode 100644 src/xcb_resources_xrm.cc create mode 100644 src/xcb_xkb.cc create mode 100644 src/xcb_xkb.hh (limited to 'src') diff --git a/src/args.cc b/src/args.cc new file mode 100644 index 0000000..1794941 --- /dev/null +++ b/src/args.cc @@ -0,0 +1,389 @@ +#include "args.hh" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace { + +std::string kEmpty; + +class OptionImpl : public Args::OptionArgument { + public: + enum Type : uint8_t { + NoArgument, + RequiredArgument, + OptionalArgument, + }; + + OptionImpl(Type type, char shortname, std::string longname, std::string arg, + std::string help) + : type(type), + shortname(shortname), + longname(std::move(longname)), + arg(std::move(arg)), + help(std::move(help)) {} + + const Type type; + const char shortname; + const std::string longname; + const std::string arg; + const std::string help; + + [[nodiscard]] bool is_set() const override { return is_set_; } + + [[nodiscard]] bool has_argument() const override { + return value_.has_value(); + } + + [[nodiscard]] const std::string& argument() const override { + if (value_.has_value()) + return value_.value(); + assert(false); + return kEmpty; + } + + void clear() { + is_set_ = false; + value_.reset(); + } + + void set_argument(std::string value) { + assert(type == Type::RequiredArgument || type == Type::OptionalArgument); + is_set_ = true; + value_ = std::move(value); + } + + void set_no_argument() { + assert(type == Type::NoArgument || type == Type::OptionalArgument); + is_set_ = true; + value_.reset(); + } + + private: + bool is_set_{false}; + std::optional value_; +}; + +class ArgsImpl : public Args { + public: + explicit ArgsImpl(std::string prgname) : prgname_(std::move(prgname)) {} + + std::shared_ptr