From 08be86fbe1a40ded7e27ce6cf40e62b5bfac87c5 Mon Sep 17 00:00:00 2001 From: Michael Carlberg Date: Mon, 5 Dec 2016 20:41:00 +0100 Subject: [PATCH] wip(refactor): Improve signal and event handling --- include/common.hpp | 6 - include/components/bar.hpp | 35 +- include/components/builder.hpp | 6 +- include/components/command_line.hpp | 14 +- include/components/config.hpp | 6 +- include/components/controller.hpp | 97 +-- include/components/eventloop.hpp | 175 +++--- include/components/eventloop_fwd.hpp | 18 + include/components/ipc.hpp | 30 +- include/components/logger.hpp | 82 +-- include/components/parser.hpp | 4 +- include/components/renderer.hpp | 52 +- include/components/screen.hpp | 21 +- include/components/signals.hpp | 68 --- include/components/types.hpp | 34 +- include/config.hpp.cmake | 9 + include/drawtypes/iconset.hpp | 4 +- include/errors.hpp | 1 + include/events/signal.hpp | 135 +++++ include/events/signal_emitter.hpp | 112 ++++ include/events/signal_fwd.hpp | 48 ++ include/events/signal_receiver.hpp | 50 ++ include/modules/meta/base.hpp | 2 + include/modules/meta/factory.hpp | 96 +++ include/modules/script.hpp | 2 +- include/modules/xbacklight.hpp | 17 +- include/modules/xkeyboard.hpp | 2 +- include/modules/xwindow.hpp | 2 +- include/modules/xworkspaces.hpp | 2 +- include/utils/command.hpp | 9 +- include/utils/factory.hpp | 17 +- include/x11/color.hpp | 4 +- include/x11/connection.hpp | 16 +- include/x11/fonts.hpp | 2 +- include/x11/tray_client.hpp | 49 ++ include/x11/{tray.hpp => tray_manager.hpp} | 84 +-- include/x11/wm.hpp | 15 +- include/x11/xkb.hpp | 4 + include/x11/xresources.hpp | 2 +- include/x11/xutils.hpp | 3 - src/components/bar.cpp | 660 +++++++------------- src/components/builder.cpp | 2 +- src/components/config.cpp | 1 + src/components/controller.cpp | 551 +++++++---------- src/components/eventloop.cpp | 323 ++++------ src/components/ipc.cpp | 76 +-- src/components/logger.cpp | 15 +- src/components/parser.cpp | 77 +-- src/components/renderer.cpp | 388 ++++++------ src/components/screen.cpp | 17 +- src/components/signals.cpp | 45 -- src/drawtypes/animation.cpp | 2 +- src/drawtypes/label.cpp | 4 +- src/drawtypes/ramp.cpp | 2 +- src/events/signal_emitter.cpp | 8 + src/events/signal_receiver.cpp | 1 + src/main.cpp | 84 ++- src/modules/bspwm.cpp | 6 +- src/modules/i3.cpp | 6 +- src/modules/mpd.cpp | 2 +- src/modules/xbacklight.cpp | 11 +- src/modules/xkeyboard.cpp | 2 +- src/modules/xwindow.cpp | 4 +- src/modules/xworkspaces.cpp | 8 +- src/utils/inotify.cpp | 9 +- src/x11/color.cpp | 3 +- src/x11/connection.cpp | 8 - src/x11/fonts.cpp | 5 +- src/x11/tray_client.cpp | 122 ++++ src/x11/{tray.cpp => tray_manager.cpp} | 665 ++++++++++----------- src/x11/wm.cpp | 21 +- src/x11/xresources.cpp | 8 +- src/x11/xutils.cpp | 8 - 73 files changed, 2228 insertions(+), 2251 deletions(-) create mode 100644 include/components/eventloop_fwd.hpp delete mode 100644 include/components/signals.hpp create mode 100644 include/events/signal.hpp create mode 100644 include/events/signal_emitter.hpp create mode 100644 include/events/signal_fwd.hpp create mode 100644 include/events/signal_receiver.hpp create mode 100644 include/modules/meta/factory.hpp create mode 100644 include/x11/tray_client.hpp rename include/x11/{tray.hpp => tray_manager.hpp} (72%) delete mode 100644 src/components/signals.cpp create mode 100644 src/events/signal_emitter.cpp create mode 100644 src/events/signal_receiver.cpp create mode 100644 src/x11/tray_client.cpp rename src/x11/{tray.cpp => tray_manager.cpp} (67%) diff --git a/include/common.hpp b/include/common.hpp index b8afaea7..23f1dbbb 100644 --- a/include/common.hpp +++ b/include/common.hpp @@ -4,12 +4,8 @@ #define BOOST_DI_CFG_DIAGNOSTICS_LEVEL 2 #endif -#include -#include -#include #include #include -#include #include "config.hpp" @@ -41,7 +37,6 @@ POLYBAR_NS -namespace di = boost::di; namespace placeholders = std::placeholders; using std::string; @@ -58,7 +53,6 @@ using std::make_unique; using std::make_shared; using std::make_pair; using std::array; -using std::map; using std::vector; using std::to_string; diff --git a/include/components/bar.hpp b/include/components/bar.hpp index 3d7e69fb..d06d6d7d 100644 --- a/include/components/bar.hpp +++ b/include/components/bar.hpp @@ -2,12 +2,16 @@ #include "common.hpp" #include "components/config.hpp" +#include "components/screen.hpp" #include "components/types.hpp" #include "errors.hpp" +#include "events/signal_emitter.hpp" +#include "events/signal_fwd.hpp" #include "utils/concurrency.hpp" #include "utils/throttle.hpp" #include "x11/connection.hpp" #include "x11/events.hpp" +#include "x11/tray_manager.hpp" #include "x11/types.hpp" #include "x11/window.hpp" @@ -21,20 +25,16 @@ class renderer; class bar : public xpp::event::sink { public: - explicit bar(connection& conn, const config& config, const logger& logger, unique_ptr screen, unique_ptr tray_manager); - ~bar(); + explicit bar(connection& conn, signal_emitter& emitter, const config& config, const logger& logger, + unique_ptr screen, unique_ptr tray_manager); - void bootstrap(bool nodraw = false); - void bootstrap_tray(); - void activate_tray(); + ~bar(); const bar_settings settings() const; void parse(const string& data, bool force = false); protected: - void setup_monitor(); - void configure_geom(); void restack_window(); void reconfigure_pos(); void reconfigure_struts(); @@ -47,22 +47,37 @@ class bar : public xpp::event::sink m_screen; unique_ptr m_tray; unique_ptr m_renderer; - xcb_window_t m_window; bar_settings m_opts; string m_lastinput; std::mutex m_mutex; - event_timer m_buttonpress{}; + event_timer m_buttonpress{0L, 5L}; }; -di::injector> configure_bar(); +namespace { + /** + * Configure bar controller + */ + inline unique_ptr make_bar() { + // clang-format off + return factory_util::unique( + make_connection(), + make_signal_emitter(), + make_confreader(), + make_logger(), + make_screen(), + make_tray_manager()); + // clang-format on + } +} POLYBAR_NS_END diff --git a/include/components/builder.hpp b/include/components/builder.hpp index d9533286..b7ec348b 100644 --- a/include/components/builder.hpp +++ b/include/components/builder.hpp @@ -1,5 +1,7 @@ #pragma once +#include + #include "common.hpp" #include "components/config.hpp" #include "components/types.hpp" @@ -7,6 +9,8 @@ POLYBAR_NS +using std::map; + #define DEFAULT_SPACING -1 #ifndef BUILDER_SPACE_TOKEN @@ -28,7 +32,7 @@ class builder { explicit builder(const bar_settings bar) : m_bar(bar) {} string flush(); - void append(string text); + void append(const string& text); void node(string str, bool add_space = false); void node(string str, int font_index, bool add_space = false); void node(const label_t& label, bool add_space = false); diff --git a/include/components/command_line.hpp b/include/components/command_line.hpp index 50ebd880..bf6221ca 100644 --- a/include/components/command_line.hpp +++ b/include/components/command_line.hpp @@ -1,7 +1,10 @@ #pragma once +#include + #include "common.hpp" #include "errors.hpp" +#include "utils/factory.hpp" POLYBAR_NS @@ -12,7 +15,7 @@ namespace command_line { class option; using choices = vector; using options = vector