workspace taskbars: More config options
- orientation - icon-size - icon-theme
This commit is contained in:
@ -63,7 +63,6 @@ class Workspace {
|
|||||||
std::optional<WindowRepr> closeWindow(WindowAddress const& addr);
|
std::optional<WindowRepr> closeWindow(WindowAddress const& addr);
|
||||||
|
|
||||||
void update(const std::string& workspace_icon);
|
void update(const std::string& workspace_icon);
|
||||||
void updateTaskbar(const std::string& workspace_icon);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Workspaces& m_workspaceManager;
|
Workspaces& m_workspaceManager;
|
||||||
@ -85,6 +84,8 @@ class Workspace {
|
|||||||
Gtk::Box m_content;
|
Gtk::Box m_content;
|
||||||
Gtk::Label m_labelBefore;
|
Gtk::Label m_labelBefore;
|
||||||
Gtk::Label m_labelAfter;
|
Gtk::Label m_labelAfter;
|
||||||
|
|
||||||
|
void updateTaskbar(const std::string& workspace_icon);
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace waybar::modules::hyprland
|
} // namespace waybar::modules::hyprland
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <gtkmm/button.h>
|
#include <gtkmm/button.h>
|
||||||
|
#include <gtkmm/enums.h>
|
||||||
#include <gtkmm/label.h>
|
#include <gtkmm/label.h>
|
||||||
#include <json/value.h>
|
#include <json/value.h>
|
||||||
|
|
||||||
@ -46,6 +47,8 @@ class Workspaces : public AModule, public EventHandler {
|
|||||||
auto formatAfter() const -> std::string { return m_formatAfter; }
|
auto formatAfter() const -> std::string { return m_formatAfter; }
|
||||||
auto taskbarFormatBefore() const -> std::string { return m_taskbarFormatBefore; }
|
auto taskbarFormatBefore() const -> std::string { return m_taskbarFormatBefore; }
|
||||||
auto taskbarFormatAfter() const -> std::string { return m_taskbarFormatAfter; }
|
auto taskbarFormatAfter() const -> std::string { return m_taskbarFormatAfter; }
|
||||||
|
auto taskbarIconSize() const -> int { return m_taskbarIconSize; }
|
||||||
|
auto taskbarOrientation() const -> Gtk::Orientation { return m_taskbarOrientation; }
|
||||||
|
|
||||||
std::string getRewrite(std::string window_class, std::string window_title);
|
std::string getRewrite(std::string window_class, std::string window_title);
|
||||||
std::string& getWindowSeparator() { return m_formatWindowSeparator; }
|
std::string& getWindowSeparator() { return m_formatWindowSeparator; }
|
||||||
@ -160,6 +163,8 @@ class Workspaces : public AModule, public EventHandler {
|
|||||||
bool m_taskbarWithIcon = false;
|
bool m_taskbarWithIcon = false;
|
||||||
std::string m_taskbarFormatBefore;
|
std::string m_taskbarFormatBefore;
|
||||||
std::string m_taskbarFormatAfter;
|
std::string m_taskbarFormatAfter;
|
||||||
|
int m_taskbarIconSize = 16;
|
||||||
|
Gtk::Orientation m_taskbarOrientation = Gtk::ORIENTATION_HORIZONTAL;
|
||||||
|
|
||||||
std::vector<std::regex> m_ignoreWorkspaces;
|
std::vector<std::regex> m_ignoreWorkspaces;
|
||||||
|
|
||||||
|
@ -24,6 +24,13 @@ inline std::string capitalize(const std::string& str) {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline std::string toLower(const std::string& str) {
|
||||||
|
std::string result = str;
|
||||||
|
std::transform(result.begin(), result.end(), result.begin(),
|
||||||
|
[](unsigned char c) { return std::tolower(c); });
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
inline std::vector<std::string> split(std::string_view s, std::string_view delimiter,
|
inline std::vector<std::string> split(std::string_view s, std::string_view delimiter,
|
||||||
int max_splits = -1) {
|
int max_splits = -1) {
|
||||||
std::vector<std::string> result;
|
std::vector<std::string> result;
|
||||||
|
@ -32,9 +32,8 @@ Workspace::Workspace(const Json::Value &workspace_data, Workspaces &workspace_ma
|
|||||||
false);
|
false);
|
||||||
|
|
||||||
m_button.set_relief(Gtk::RELIEF_NONE);
|
m_button.set_relief(Gtk::RELIEF_NONE);
|
||||||
if (true) {
|
if (m_workspaceManager.enableWorkspaceTaskbar()) {
|
||||||
// TODO-WorkspaceTaskbar: Allow vertical?
|
m_content.set_orientation(m_workspaceManager.taskbarOrientation());
|
||||||
m_content.set_orientation(Gtk::ORIENTATION_HORIZONTAL);
|
|
||||||
m_content.pack_start(m_labelBefore, false, false);
|
m_content.pack_start(m_labelBefore, false, false);
|
||||||
} else {
|
} else {
|
||||||
m_content.set_center_widget(m_labelBefore);
|
m_content.set_center_widget(m_labelBefore);
|
||||||
@ -251,12 +250,10 @@ void Workspace::updateTaskbar(const std::string &workspace_icon) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (m_workspaceManager.taskbarWithIcon()) {
|
if (m_workspaceManager.taskbarWithIcon()) {
|
||||||
// TODO-WorkspaceTaskbar: support themes
|
|
||||||
auto app_info_ = IconLoader::get_app_info_from_app_id_list(window_repr.window_class);
|
auto app_info_ = IconLoader::get_app_info_from_app_id_list(window_repr.window_class);
|
||||||
|
int icon_size = m_workspaceManager.taskbarIconSize();
|
||||||
// TODO-WorkspaceTaskbar: icon size
|
|
||||||
auto window_icon = Gtk::make_managed<Gtk::Image>();
|
auto window_icon = Gtk::make_managed<Gtk::Image>();
|
||||||
m_workspaceManager.iconLoader().image_load_icon(*window_icon, app_info_, 24);
|
m_workspaceManager.iconLoader().image_load_icon(*window_icon, app_info_, icon_size);
|
||||||
window_box->pack_start(*window_icon, false, false);
|
window_box->pack_start(*window_icon, false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -685,6 +685,23 @@ auto Workspaces::populateWorkspaceTaskbarConfig(const Json::Value &config) -> vo
|
|||||||
/* The default is to only show the icon */
|
/* The default is to only show the icon */
|
||||||
m_taskbarWithIcon = true;
|
m_taskbarWithIcon = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
auto iconTheme = workspaceTaskbar["icon-theme"];
|
||||||
|
if (iconTheme.isArray()) {
|
||||||
|
for (auto &c : iconTheme) {
|
||||||
|
m_iconLoader.add_custom_icon_theme(c.asString());
|
||||||
|
}
|
||||||
|
} else if (iconTheme.isString()) {
|
||||||
|
m_iconLoader.add_custom_icon_theme(iconTheme.asString());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (workspaceTaskbar["icon-size"].isInt()) {
|
||||||
|
m_taskbarIconSize = workspaceTaskbar["icon-size"].asInt();
|
||||||
|
}
|
||||||
|
if (workspaceTaskbar["orientation"].isString() &&
|
||||||
|
toLower(workspaceTaskbar["orientation"].asString()) == "vertical") {
|
||||||
|
m_taskbarOrientation = Gtk::ORIENTATION_VERTICAL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Workspaces::registerOrphanWindow(WindowCreationPayload create_window_payload) {
|
void Workspaces::registerOrphanWindow(WindowCreationPayload create_window_payload) {
|
||||||
|
Reference in New Issue
Block a user