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:
parent
5983a217c3
commit
133f9aa352
2 changed files with 9 additions and 0 deletions
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue