1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 16:57:35 +00:00

WindowServer: Slap everything with locks.

This commit is contained in:
Andreas Kling 2019-01-17 16:21:04 +01:00
parent 5983a217c3
commit 133f9aa352
2 changed files with 9 additions and 0 deletions

View file

@ -51,6 +51,7 @@ int WSEventLoop::exec()
Vector<QueuedEvent> events; Vector<QueuedEvent> events;
{ {
ASSERT_INTERRUPTS_ENABLED();
LOCKER(m_lock); LOCKER(m_lock);
events = move(m_queued_events); events = move(m_queued_events);
} }

View file

@ -141,6 +141,7 @@ WSWindowManager::~WSWindowManager()
void WSWindowManager::paintWindowFrame(WSWindow& window) void WSWindowManager::paintWindowFrame(WSWindow& window)
{ {
LOCKER(m_lock);
//printf("[WM] paintWindowFrame {%p}, rect: %d,%d %dx%d\n", &window, window.rect().x(), window.rect().y(), window.rect().width(), window.rect().height()); //printf("[WM] paintWindowFrame {%p}, rect: %d,%d %dx%d\n", &window, window.rect().x(), window.rect().y(), window.rect().width(), window.rect().height());
auto titleBarRect = titleBarRectForWindow(window.rect()); auto titleBarRect = titleBarRectForWindow(window.rect());
@ -167,6 +168,7 @@ void WSWindowManager::paintWindowFrame(WSWindow& window)
void WSWindowManager::addWindow(WSWindow& window) void WSWindowManager::addWindow(WSWindow& window)
{ {
LOCKER(m_lock);
m_windows.set(&window); m_windows.set(&window);
m_windows_in_order.append(&window); m_windows_in_order.append(&window);
if (!activeWindow()) if (!activeWindow())
@ -175,12 +177,14 @@ void WSWindowManager::addWindow(WSWindow& window)
void WSWindowManager::move_to_front(WSWindow& window) void WSWindowManager::move_to_front(WSWindow& window)
{ {
LOCKER(m_lock);
m_windows_in_order.remove(&window); m_windows_in_order.remove(&window);
m_windows_in_order.append(&window); m_windows_in_order.append(&window);
} }
void WSWindowManager::removeWindow(WSWindow& window) void WSWindowManager::removeWindow(WSWindow& window)
{ {
LOCKER(m_lock);
if (!m_windows.contains(&window)) if (!m_windows.contains(&window))
return; return;
@ -270,6 +274,7 @@ void WSWindowManager::processMouseEvent(MouseEvent& event)
void WSWindowManager::compose() void WSWindowManager::compose()
{ {
LOCKER(m_lock);
auto invalidated_rects = move(m_invalidated_rects); auto invalidated_rects = move(m_invalidated_rects);
#ifdef DEBUG_COUNTERS #ifdef DEBUG_COUNTERS
dbgprintf("[WM] compose #%u (%u rects)\n", ++m_recompose_count, invalidated_rects.size()); dbgprintf("[WM] compose #%u (%u rects)\n", ++m_recompose_count, invalidated_rects.size());
@ -351,6 +356,7 @@ void WSWindowManager::event(WSEvent& event)
void WSWindowManager::setActiveWindow(WSWindow* window) void WSWindowManager::setActiveWindow(WSWindow* window)
{ {
LOCKER(m_lock);
if (window == m_activeWindow.ptr()) if (window == m_activeWindow.ptr())
return; return;
@ -363,12 +369,14 @@ void WSWindowManager::setActiveWindow(WSWindow* window)
void WSWindowManager::invalidate() void WSWindowManager::invalidate()
{ {
LOCKER(m_lock);
m_invalidated_rects.clear_with_capacity(); m_invalidated_rects.clear_with_capacity();
m_invalidated_rects.append(m_screen_rect); m_invalidated_rects.append(m_screen_rect);
} }
void WSWindowManager::invalidate(const Rect& a_rect) void WSWindowManager::invalidate(const Rect& a_rect)
{ {
LOCKER(m_lock);
auto rect = Rect::intersection(a_rect, m_screen_rect); auto rect = Rect::intersection(a_rect, m_screen_rect);
if (rect.is_empty()) if (rect.is_empty())
return; return;