Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <campbell@blender.org>2022-10-25 07:00:03 +0300
committerCampbell Barton <campbell@blender.org>2022-10-25 07:00:03 +0300
commitdd08b490afc9224d700eb08c39a4a1a5aa2317a9 (patch)
tree8424edcc3a2ac68a964b26cce9a1d936c58564ce /intern/ghost
parent71079d49e2f0e6a649e32ad3b2651eb27da75be7 (diff)
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.
Diffstat (limited to 'intern/ghost')
-rw-r--r--intern/ghost/intern/GHOST_SystemWayland.cpp32
-rw-r--r--intern/ghost/intern/GHOST_SystemWayland.h4
2 files changed, 23 insertions, 13 deletions
diff --git a/intern/ghost/intern/GHOST_SystemWayland.cpp b/intern/ghost/intern/GHOST_SystemWayland.cpp
index f565dad3284..60247660a9c 100644
--- a/intern/ghost/intern/GHOST_SystemWayland.cpp
+++ b/intern/ghost/intern/GHOST_SystemWayland.cpp
@@ -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()
{
diff --git a/intern/ghost/intern/GHOST_SystemWayland.h b/intern/ghost/intern/GHOST_SystemWayland.h
index c27f175002e..7c5459fc461 100644
--- a/intern/ghost/intern/GHOST_SystemWayland.h
+++ b/intern/ghost/intern/GHOST_SystemWayland.h
@@ -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();