- Replaced pass-by-value std::string parameters with const std::string& or std::string_view to prevent SSO overallocations. - Refactored static mapping functions in UPower to return std::string_view instead of constructing std::string literals, enabling perfect cache locality. - Optimized string concatenation in hot loops (network IPs, inhibitor lists, sway window marks) by using std::string::append() and pre-reserving capacity instead of overloaded operator+ which produces temporary heap instances. These optimizations reduce high-frequency memory churn and overall heap fragmentation within the main rendering loops. Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
77 lines
2.0 KiB
C++
77 lines
2.0 KiB
C++
#pragma once
|
|
|
|
#include <gtkmm/button.h>
|
|
#include <gtkmm/label.h>
|
|
#include <json/value.h>
|
|
|
|
#include <cstddef>
|
|
#include <cstdint>
|
|
#include <map>
|
|
#include <memory>
|
|
#include <optional>
|
|
#include <regex>
|
|
#include <string>
|
|
#include <variant>
|
|
#include <vector>
|
|
|
|
#include "AModule.hpp"
|
|
#include "bar.hpp"
|
|
#include "modules/hyprland/backend.hpp"
|
|
#include "util/enum.hpp"
|
|
#include "util/regex_collection.hpp"
|
|
|
|
using WindowAddress = std::string;
|
|
|
|
namespace waybar::modules::hyprland {
|
|
|
|
class Workspaces;
|
|
|
|
struct WindowRepr {
|
|
std::string address;
|
|
std::string window_class;
|
|
std::string window_title;
|
|
std::string repr_rewrite;
|
|
bool isActive = false;
|
|
|
|
public:
|
|
bool empty() const { return address.empty(); }
|
|
void setActive(bool value) { isActive = value; }
|
|
};
|
|
|
|
class WindowCreationPayload {
|
|
public:
|
|
WindowCreationPayload(const std::string& workspace_name, WindowAddress window_address,
|
|
WindowRepr window_repr);
|
|
WindowCreationPayload(const std::string& workspace_name, WindowAddress window_address,
|
|
const std::string& window_class, const std::string& window_title,
|
|
bool is_active);
|
|
WindowCreationPayload(Json::Value const& client_data);
|
|
|
|
int incrementTimeSpentUncreated();
|
|
bool isEmpty(Workspaces& workspace_manager);
|
|
bool reprIsReady() const { return std::holds_alternative<Repr>(m_window); }
|
|
WindowRepr repr(Workspaces& workspace_manager);
|
|
void setActive(bool value) { m_isActive = value; }
|
|
|
|
std::string getWorkspaceName() const { return m_workspaceName; }
|
|
WindowAddress getAddress() const { return m_windowAddress; }
|
|
|
|
void moveToWorkspace(std::string& new_workspace_name);
|
|
|
|
private:
|
|
void clearAddr();
|
|
void clearWorkspaceName();
|
|
|
|
using Repr = WindowRepr;
|
|
using ClassAndTitle = std::pair<std::string, std::string>;
|
|
std::variant<Repr, ClassAndTitle> m_window;
|
|
|
|
WindowAddress m_windowAddress;
|
|
std::string m_workspaceName;
|
|
bool m_isActive = false;
|
|
|
|
int m_timeSpentUncreated = 0;
|
|
};
|
|
|
|
} // namespace waybar::modules::hyprland
|