Skip to content

Commit 23f48cb

Browse files
committed
refactor: prefer static methods
1 parent 03132bd commit 23f48cb

File tree

8 files changed

+134
-130
lines changed

8 files changed

+134
-130
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
.DS_Store
22
*~
33
vgcore.*
4+
/.vscode
45
*.swp
56
packagecache
67
/subprojects/fmt-4.1.0

.vscode/settings.json

Lines changed: 0 additions & 14 deletions
This file was deleted.

include/bar.hpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,19 @@ namespace waybar {
2020
auto setWidth(int) -> void;
2121
auto toggle() -> void;
2222
private:
23+
static void _handleGeometry(void *data, struct wl_output *wl_output,
24+
int32_t x, int32_t y, int32_t physical_width, int32_t physical_height,
25+
int32_t subpixel, const char *make, const char *model, int32_t transform);
26+
static void _handleMode(void *data, struct wl_output *wl_output,
27+
uint32_t f, int32_t w, int32_t h, int32_t refresh);
28+
static void _handleDone(void *data, struct wl_output *);
29+
static void _handleScale(void *data, struct wl_output *wl_output,
30+
int32_t factor);
31+
static void _layerSurfaceHandleConfigure(void *data,
32+
struct zwlr_layer_surface_v1 *surface, uint32_t serial, uint32_t width,
33+
uint32_t height);
34+
static void _layerSurfaceHandleClosed(void *data,
35+
struct zwlr_layer_surface_v1 *surface);
2336
auto _setupConfig() -> void;
2437
auto _setupWidgets() -> void;
2538
auto _setupCss() -> void;

include/client.hpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,14 +37,14 @@ namespace waybar {
3737
struct wl_seat *seat;
3838
util::ptr_vec<Bar> bars;
3939

40-
struct {
41-
sigc::signal<void(int, int)> workspace_state;
42-
sigc::signal<void(std::string)> focused_window_name;
43-
} signals;
44-
4540
Client(int argc, char* argv[]);
4641
void bind_interfaces();
4742
auto setup_css();
4843
int main(int argc, char* argv[]);
44+
private:
45+
static void _handle_global(void *data, struct wl_registry *registry,
46+
uint32_t name, const char *interface, uint32_t version);
47+
static void _handle_global_remove(void *data,
48+
struct wl_registry *registry, uint32_t name);
4949
};
5050
}

include/modules/workspaces.hpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,17 @@ namespace waybar::modules {
1212
public:
1313
Workspaces(waybar::Bar &bar);
1414
auto update() -> void;
15-
void updateThread();
1615
operator Gtk::Widget &();
17-
util::SleeperThread *thread;
1816
private:
17+
void _updateThread();
18+
static void _handle_idle(void *data,
19+
struct org_kde_kwin_idle_timeout *timer);
20+
static void _handle_resume(void *data,
21+
struct org_kde_kwin_idle_timeout *timer);
1922
void _addWorkspace(Json::Value node);
2023
Json::Value _getWorkspaces();
2124
Bar &_bar;
25+
util::SleeperThread *_thread;
2226
Gtk::Box *_box;
2327
std::unordered_map<int, Gtk::Button> _buttons;
2428
int _ipcSocketfd;

src/bar.cpp

Lines changed: 45 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -7,39 +7,68 @@
77
#include "factory.hpp"
88
#include "util/chrono.hpp"
99

10-
static void handleGeometry(void *data, struct wl_output *wl_output, int32_t x,
11-
int32_t y, int32_t physical_width, int32_t physical_height, int32_t subpixel,
12-
const char *make, const char *model, int32_t transform)
10+
waybar::Bar::Bar(Client &client, std::unique_ptr<struct wl_output *> &&p_output)
11+
: client(client), window{Gtk::WindowType::WINDOW_TOPLEVEL},
12+
output(std::move(p_output))
13+
{
14+
static const struct wl_output_listener outputListener = {
15+
.geometry = _handleGeometry,
16+
.mode = _handleMode,
17+
.done = _handleDone,
18+
.scale = _handleScale,
19+
};
20+
wl_output_add_listener(*output, &outputListener, this);
21+
window.set_title("waybar");
22+
window.set_decorated(false);
23+
_setupConfig();
24+
_setupCss();
25+
_setupWidgets();
26+
gtk_widget_realize(GTK_WIDGET(window.gobj()));
27+
GdkWindow *gdkWindow = gtk_widget_get_window(GTK_WIDGET(window.gobj()));
28+
gdk_wayland_window_set_use_custom_surface(gdkWindow);
29+
surface = gdk_wayland_window_get_wl_surface(gdkWindow);
30+
layerSurface = zwlr_layer_shell_v1_get_layer_surface(
31+
client.layer_shell, surface, *output, ZWLR_LAYER_SHELL_V1_LAYER_TOP,
32+
"waybar");
33+
zwlr_layer_surface_v1_set_anchor(layerSurface,
34+
ZWLR_LAYER_SURFACE_V1_ANCHOR_LEFT | ZWLR_LAYER_SURFACE_V1_ANCHOR_TOP |
35+
ZWLR_LAYER_SURFACE_V1_ANCHOR_RIGHT);
36+
zwlr_layer_surface_v1_set_size(layerSurface, _width, client.height);
37+
static const struct zwlr_layer_surface_v1_listener layerSurfaceListener = {
38+
.configure = _layerSurfaceHandleConfigure,
39+
.closed = _layerSurfaceHandleClosed,
40+
};
41+
zwlr_layer_surface_v1_add_listener(layerSurface, &layerSurfaceListener,
42+
this);
43+
wl_surface_commit(surface);
44+
}
45+
46+
void waybar::Bar::_handleGeometry(void *data, struct wl_output *wl_output,
47+
int32_t x, int32_t y, int32_t physical_width, int32_t physical_height,
48+
int32_t subpixel, const char *make, const char *model, int32_t transform)
1349
{
1450
// Nothing here
1551
}
1652

17-
static void handleMode(void *data, struct wl_output *wl_output, uint32_t f,
18-
int32_t w, int32_t h, int32_t refresh)
53+
void waybar::Bar::_handleMode(void *data, struct wl_output *wl_output,
54+
uint32_t f, int32_t w, int32_t h, int32_t refresh)
1955
{
2056
auto o = reinterpret_cast<waybar::Bar *>(data);
2157
o->setWidth(w);
2258
}
2359

24-
static void handleDone(void *data, struct wl_output *)
60+
void waybar::Bar::_handleDone(void *data, struct wl_output *)
2561
{
2662
// Nothing here
2763
}
2864

29-
static void handleScale(void *data, struct wl_output *wl_output,
65+
void waybar::Bar::_handleScale(void *data, struct wl_output *wl_output,
3066
int32_t factor)
3167
{
3268
// Nothing here
3369
}
3470

35-
static const struct wl_output_listener outputListener = {
36-
.geometry = handleGeometry,
37-
.mode = handleMode,
38-
.done = handleDone,
39-
.scale = handleScale,
40-
};
41-
42-
static void layerSurfaceHandleConfigure(
71+
void waybar::Bar::_layerSurfaceHandleConfigure(
4372
void *data, struct zwlr_layer_surface_v1 *surface, uint32_t serial,
4473
uint32_t width, uint32_t height)
4574
{
@@ -56,7 +85,7 @@ static void layerSurfaceHandleConfigure(
5685
}
5786
}
5887

59-
static void layerSurfaceHandleClosed(void *data,
88+
void waybar::Bar::_layerSurfaceHandleClosed(void *data,
6089
struct zwlr_layer_surface_v1 *surface)
6190
{
6291
auto o = reinterpret_cast<waybar::Bar *>(data);
@@ -67,37 +96,6 @@ static void layerSurfaceHandleClosed(void *data,
6796
o->window.close();
6897
}
6998

70-
static const struct zwlr_layer_surface_v1_listener layerSurfaceListener = {
71-
.configure = layerSurfaceHandleConfigure,
72-
.closed = layerSurfaceHandleClosed,
73-
};
74-
75-
waybar::Bar::Bar(Client &client, std::unique_ptr<struct wl_output *> &&p_output)
76-
: client(client), window{Gtk::WindowType::WINDOW_TOPLEVEL},
77-
output(std::move(p_output))
78-
{
79-
wl_output_add_listener(*output, &outputListener, this);
80-
window.set_title("waybar");
81-
window.set_decorated(false);
82-
_setupConfig();
83-
_setupCss();
84-
_setupWidgets();
85-
gtk_widget_realize(GTK_WIDGET(window.gobj()));
86-
GdkWindow *gdkWindow = gtk_widget_get_window(GTK_WIDGET(window.gobj()));
87-
gdk_wayland_window_set_use_custom_surface(gdkWindow);
88-
surface = gdk_wayland_window_get_wl_surface(gdkWindow);
89-
layerSurface = zwlr_layer_shell_v1_get_layer_surface(
90-
client.layer_shell, surface, *output, ZWLR_LAYER_SHELL_V1_LAYER_TOP,
91-
"waybar");
92-
zwlr_layer_surface_v1_set_anchor(layerSurface,
93-
ZWLR_LAYER_SURFACE_V1_ANCHOR_LEFT | ZWLR_LAYER_SURFACE_V1_ANCHOR_TOP |
94-
ZWLR_LAYER_SURFACE_V1_ANCHOR_RIGHT);
95-
zwlr_layer_surface_v1_set_size(layerSurface, _width, client.height);
96-
zwlr_layer_surface_v1_add_listener(layerSurface, &layerSurfaceListener,
97-
this);
98-
wl_surface_commit(surface);
99-
}
100-
10199
auto waybar::Bar::setWidth(int width) -> void
102100
{
103101
if (width == this->_width) return;

src/client.cpp

Lines changed: 31 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,5 @@
11
#include "client.hpp"
22

3-
static void handle_global(void *data, struct wl_registry *registry,
4-
uint32_t name, const char *interface, uint32_t version)
5-
{
6-
auto o = reinterpret_cast<waybar::Client *>(data);
7-
if (!strcmp(interface, zwlr_layer_shell_v1_interface.name)) {
8-
o->layer_shell = (zwlr_layer_shell_v1 *)wl_registry_bind(registry, name,
9-
&zwlr_layer_shell_v1_interface, version);
10-
} else if (!strcmp(interface, wl_output_interface.name)) {
11-
auto output = std::make_unique<struct wl_output *>();
12-
*output = (struct wl_output *)wl_registry_bind(registry, name,
13-
&wl_output_interface, version);
14-
o->bars.emplace_back(*o, std::move(output));
15-
} else if (!strcmp(interface, org_kde_kwin_idle_interface.name)) {
16-
o->idle_manager = (org_kde_kwin_idle *)wl_registry_bind(registry, name,
17-
&org_kde_kwin_idle_interface, version);
18-
} else if (!strcmp(interface, wl_seat_interface.name)) {
19-
o->seat = (struct wl_seat *)wl_registry_bind(registry, name,
20-
&wl_seat_interface, version);
21-
}
22-
}
23-
24-
static void handle_global_remove(void *data,
25-
struct wl_registry *registry, uint32_t name)
26-
{
27-
// TODO
28-
}
29-
30-
static const struct wl_registry_listener registry_listener = {
31-
.global = handle_global,
32-
.global_remove = handle_global_remove,
33-
};
34-
353
waybar::Client::Client(int argc, char* argv[])
364
: gtk_main(argc, argv),
375
gdk_display(Gdk::Display::get_default()),
@@ -70,9 +38,40 @@ waybar::Client::Client(int argc, char* argv[])
7038

7139
}
7240

41+
void waybar::Client::_handle_global(void *data, struct wl_registry *registry,
42+
uint32_t name, const char *interface, uint32_t version)
43+
{
44+
auto o = reinterpret_cast<waybar::Client *>(data);
45+
if (!strcmp(interface, zwlr_layer_shell_v1_interface.name)) {
46+
o->layer_shell = (zwlr_layer_shell_v1 *)wl_registry_bind(registry, name,
47+
&zwlr_layer_shell_v1_interface, version);
48+
} else if (!strcmp(interface, wl_output_interface.name)) {
49+
auto output = std::make_unique<struct wl_output *>();
50+
*output = (struct wl_output *)wl_registry_bind(registry, name,
51+
&wl_output_interface, version);
52+
o->bars.emplace_back(*o, std::move(output));
53+
} else if (!strcmp(interface, org_kde_kwin_idle_interface.name)) {
54+
o->idle_manager = (org_kde_kwin_idle *)wl_registry_bind(registry, name,
55+
&org_kde_kwin_idle_interface, version);
56+
} else if (!strcmp(interface, wl_seat_interface.name)) {
57+
o->seat = (struct wl_seat *)wl_registry_bind(registry, name,
58+
&wl_seat_interface, version);
59+
}
60+
}
61+
62+
void waybar::Client::_handle_global_remove(void *data,
63+
struct wl_registry *registry, uint32_t name)
64+
{
65+
// TODO
66+
}
67+
7368
void waybar::Client::bind_interfaces()
7469
{
7570
registry = wl_display_get_registry(wlDisplay);
71+
static const struct wl_registry_listener registry_listener = {
72+
.global = _handle_global,
73+
.global_remove = _handle_global_remove,
74+
};
7675
wl_registry_add_listener(registry, &registry_listener, this);
7776
wl_display_roundtrip(wlDisplay);
7877
}

src/modules/workspaces.cpp

Lines changed: 33 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,8 @@
11
#include "modules/workspaces.hpp"
22
#include "ipc/client.hpp"
33

4-
static void handle_idle(void *data, struct org_kde_kwin_idle_timeout *timer) {
5-
auto o = reinterpret_cast<waybar::modules::Workspaces *>(data);
6-
if (o->thread) {
7-
delete o->thread;
8-
o->thread = nullptr;
9-
}
10-
}
11-
12-
static void handle_resume(void *data, struct org_kde_kwin_idle_timeout *timer) {
13-
auto o = reinterpret_cast<waybar::modules::Workspaces *>(data);
14-
if (!o->thread) {
15-
o->updateThread();
16-
}
17-
}
18-
19-
static const struct org_kde_kwin_idle_timeout_listener idle_timer_listener = {
20-
.idle = handle_idle,
21-
.resumed = handle_resume,
22-
};
23-
244
waybar::modules::Workspaces::Workspaces(Bar &bar)
25-
: thread(nullptr), _bar(bar), _box(Gtk::manage(new Gtk::Box))
5+
: _bar(bar), _thread(nullptr), _box(Gtk::manage(new Gtk::Box))
266
{
277
_box->get_style_context()->add_class("workspaces");
288
std::string socketPath = get_socketpath();
@@ -34,17 +14,13 @@ waybar::modules::Workspaces::Workspaces(Bar &bar)
3414
_idle_timer =
3515
org_kde_kwin_idle_get_idle_timeout(_bar.client.idle_manager,
3616
_bar.client.seat, 10000); // 10 seconds
17+
static const struct org_kde_kwin_idle_timeout_listener idle_timer_listener = {
18+
.idle = _handle_idle,
19+
.resumed = _handle_resume,
20+
};
3721
org_kde_kwin_idle_timeout_add_listener(_idle_timer,
3822
&idle_timer_listener, this);
39-
updateThread();
40-
}
41-
42-
void waybar::modules::Workspaces::updateThread()
43-
{
44-
thread = new waybar::util::SleeperThread([this] {
45-
update();
46-
thread->sleep_for(waybar::chrono::milliseconds(250));
47-
});
23+
_updateThread();
4824
}
4925

5026
auto waybar::modules::Workspaces::update() -> void
@@ -79,6 +55,33 @@ auto waybar::modules::Workspaces::update() -> void
7955
}
8056
}
8157

58+
void waybar::modules::Workspaces::_updateThread()
59+
{
60+
_thread = new waybar::util::SleeperThread([this] {
61+
update();
62+
_thread->sleep_for(waybar::chrono::milliseconds(250));
63+
});
64+
}
65+
66+
void waybar::modules::Workspaces::_handle_idle(void *data,
67+
struct org_kde_kwin_idle_timeout *timer) {
68+
auto o = reinterpret_cast<waybar::modules::Workspaces *>(data);
69+
if (o->_thread) {
70+
delete o->_thread;
71+
o->_thread = nullptr;
72+
std::cout << "IDLE" << std::endl;
73+
}
74+
}
75+
76+
void waybar::modules::Workspaces::_handle_resume(void *data,
77+
struct org_kde_kwin_idle_timeout *timer) {
78+
auto o = reinterpret_cast<waybar::modules::Workspaces *>(data);
79+
if (!o->_thread) {
80+
o->_updateThread();
81+
std::cout << "RESUME" << std::endl;
82+
}
83+
}
84+
8285
void waybar::modules::Workspaces::_addWorkspace(Json::Value node)
8386
{
8487
auto pair = _buttons.emplace(node["num"].asInt(), node["name"].asString());

0 commit comments

Comments
 (0)