fix(ewmh): Use deleter to deallocate atoms

This commit is contained in:
Michael Carlberg 2016-12-03 15:44:54 +01:00
parent 158d4dd515
commit 0f91d3d8df
3 changed files with 11 additions and 14 deletions

View File

@ -8,9 +8,9 @@ namespace memory_util {
/**
* Create a shared pointer using malloc/free
*/
template <typename T>
inline auto make_malloc_ptr(size_t size = sizeof(T)) {
return shared_ptr<T>(static_cast<T*>(malloc(size)), free);
template <typename T, typename Deleter = decltype(free)>
inline auto make_malloc_ptr(size_t size = sizeof(T), Deleter deleter = free) {
return shared_ptr<T>(static_cast<T*>(malloc(size)), deleter);
}
/**

View File

@ -15,7 +15,6 @@ namespace ewmh_util {
extern ewmh_connection_t g_ewmh_connection;
ewmh_connection_t initialize();
void dealloc();
bool supports(xcb_ewmh_connection_t* ewmh, xcb_atom_t atom, int screen = 0);

View File

@ -1,5 +1,5 @@
#include "components/types.hpp"
#include "x11/ewmh.hpp"
#include "components/types.hpp"
#include "x11/xutils.hpp"
POLYBAR_NS
@ -9,19 +9,16 @@ namespace ewmh_util {
ewmh_connection_t initialize() {
if (!g_ewmh_connection) {
g_ewmh_connection = memory_util::make_malloc_ptr<xcb_ewmh_connection_t>();
g_ewmh_connection = memory_util::make_malloc_ptr<xcb_ewmh_connection_t>(
sizeof(xcb_ewmh_connection_t), bind(xcb_ewmh_connection_wipe, std::placeholders::_1));
auto* xconn = xutils::get_connection();
auto* conn = g_ewmh_connection.get();
xcb_ewmh_init_atoms_replies(conn, xcb_ewmh_init_atoms(xconn, conn), nullptr);
}
return g_ewmh_connection;
}
void dealloc() {
if (g_ewmh_connection) {
xcb_ewmh_connection_wipe(g_ewmh_connection.get());
g_ewmh_connection.reset();
}
return g_ewmh_connection;
}
bool supports(xcb_ewmh_connection_t* ewmh, xcb_atom_t atom, int screen) {
@ -98,7 +95,8 @@ namespace ewmh_util {
}
for (size_t n = 0; n < reply.desktop_viewport_len; n++) {
viewports.emplace_back(position{static_cast<int16_t>(reply.desktop_viewport[n].x), static_cast<int16_t>(reply.desktop_viewport[n].y)});
viewports.emplace_back(position{
static_cast<int16_t>(reply.desktop_viewport[n].x), static_cast<int16_t>(reply.desktop_viewport[n].y)});
}
return viewports;