Cleanup: move singleton pointers into the system

Avoid top level global pointers, remove the window_manager pointer
and move the clipboard mutex along side the clipboard data.

Also skip updating window DPI if the window doesn't use the output
that changed it's scale.
This commit is contained in:
Campbell Barton 2022-10-25 15:00:03 +11:00
parent 71079d49e2
commit dd08b490af
2 changed files with 23 additions and 13 deletions

View File

@ -751,9 +751,6 @@ static GWL_SeatStatePointer *gwl_seat_state_pointer_from_cursor_surface(
struct GWL_RegistryEntry;
/** Check this lock before accessing #GHOST_SystemWayland::clipboard_ from a thread. */
static std::mutex system_clipboard_mutex;
struct GWL_Display {
GHOST_SystemWayland *system = nullptr;
@ -783,6 +780,7 @@ struct GWL_Display {
GWL_SimpleBuffer clipboard;
GWL_SimpleBuffer clipboard_primary;
std::mutex clipboard_mutex;
};
static void gwl_display_destroy(GWL_Display *display)
@ -815,7 +813,7 @@ static void gwl_display_destroy(GWL_Display *display)
}
{
std::lock_guard lock{system_clipboard_mutex};
std::lock_guard lock{display->clipboard_mutex};
gwl_simple_buffer_free_data(&display->clipboard);
gwl_simple_buffer_free_data(&display->clipboard_primary);
}
@ -1001,8 +999,6 @@ static void gwl_registry_entry_remove_all(GWL_Display *display)
/** \name Private Utility Functions
* \{ */
static GHOST_WindowManager *window_manager = nullptr;
/**
* Callback for WAYLAND to run when there is an error.
*
@ -2004,7 +2000,8 @@ static void data_device_handle_selection(void *data,
data_offer, mime_receive.c_str(), &seat->data_offer_copy_paste_mutex, &data_len);
{
std::lock_guard lock{system_clipboard_mutex};
std::mutex &clipboard_mutex = system->clipboard_mutex();
std::lock_guard lock{clipboard_mutex};
GWL_SimpleBuffer *buf = system->clipboard_data(false);
gwl_simple_buffer_set_and_take_ownership(buf, data, data_len);
}
@ -3581,7 +3578,8 @@ static void primary_selection_device_handle_selection(
data_offer, mime_receive.c_str(), &primary->data_offer_mutex, &data_len);
{
std::lock_guard lock{system_clipboard_mutex};
std::mutex &clipboard_mutex = system->clipboard_mutex();
std::lock_guard lock{clipboard_mutex};
GWL_SimpleBuffer *buf = system->clipboard_data(true);
gwl_simple_buffer_set_and_take_ownership(buf, data, data_len);
}
@ -4052,11 +4050,17 @@ static void output_handle_done(void *data, struct wl_output * /*wl_output*/)
static void output_handle_scale(void *data, struct wl_output * /*wl_output*/, const int32_t factor)
{
CLOG_INFO(LOG, 2, "scale");
static_cast<GWL_Output *>(data)->scale = factor;
GWL_Output *output = static_cast<GWL_Output *>(data);
output->scale = factor;
GHOST_WindowManager *window_manager = output->system->getWindowManager();
if (window_manager) {
for (GHOST_IWindow *iwin : window_manager->getWindows()) {
GHOST_WindowWayland *win = static_cast<GHOST_WindowWayland *>(iwin);
const std::vector<GWL_Output *> &outputs = win->outputs();
if (std::find(outputs.begin(), outputs.end(), output) == outputs.cend()) {
continue;
}
win->outputs_changed_update_scale();
}
}
@ -4235,6 +4239,7 @@ static void gwl_registry_xdg_output_manager_remove(GWL_Display *display,
static void gwl_registry_wl_output_add(GWL_Display *display, const GWL_RegisteryAdd_Params *params)
{
GWL_Output *output = new GWL_Output;
output->system = display->system;
output->wl_output = static_cast<wl_output *>(
wl_registry_bind(params->wl_registry, params->name, &wl_output_interface, 2));
ghost_wl_output_tag(output->wl_output);
@ -5226,10 +5231,6 @@ GHOST_IWindow *GHOST_SystemWayland::createWindow(const char *title,
const GHOST_IWindow *parentWindow)
{
/* Globally store pointer to window manager. */
if (!window_manager) {
window_manager = getWindowManager();
}
GHOST_WindowWayland *window = new GHOST_WindowWayland(
this,
title,
@ -6020,6 +6021,11 @@ struct GWL_SimpleBuffer *GHOST_SystemWayland::clipboard_data(bool selection) con
return selection ? &display_->clipboard_primary : &display_->clipboard;
}
struct std::mutex &GHOST_SystemWayland::clipboard_mutex() const
{
return display_->clipboard_mutex;
}
#ifdef WITH_GHOST_WAYLAND_LIBDECOR
bool GHOST_SystemWayland::use_libdecor_runtime()
{

View File

@ -23,6 +23,7 @@
# include <libdecor.h>
#endif
#include <mutex>
#include <string>
class GHOST_WindowWayland;
@ -51,6 +52,8 @@ void ghost_wl_dynload_libraries_exit();
#endif
struct GWL_Output {
GHOST_SystemWayland *system = nullptr;
struct wl_output *wl_output = nullptr;
struct zxdg_output_v1 *xdg_output = nullptr;
/** Dimensions in pixels. */
@ -187,6 +190,7 @@ class GHOST_SystemWayland : public GHOST_System {
int scale);
struct GWL_SimpleBuffer *clipboard_data(bool selection) const;
struct std::mutex &clipboard_mutex() const;
#ifdef WITH_GHOST_WAYLAND_LIBDECOR
static bool use_libdecor_runtime();