1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 21:07:34 +00:00

Destroy all remaining windows in a process when it dies.

This commit is contained in:
Andreas Kling 2019-01-30 19:35:38 +01:00
parent 3a4207b863
commit 5c25f0c4db
7 changed files with 30 additions and 6 deletions

View file

@ -14,6 +14,7 @@ public:
WM_SetWindowTitle,
WM_SetWindowRect,
WM_DeferredCompose,
WM_DestroyWindow,
MouseMove,
MouseDown,
MouseUp,

View file

@ -71,9 +71,15 @@ int WSMessageLoop::exec()
}
}
void WSMessageLoop::post_message(WSMessageReceiver* receiver, OwnPtr<WSMessage>&& message)
void WSMessageLoop::post_message(WSMessageReceiver* receiver, OwnPtr<WSMessage>&& message, bool unsafe)
{
ASSERT_INTERRUPTS_ENABLED();
if (unsafe) {
// FIXME: This is such a hack. It should not exist.
m_queued_messages.append({ receiver, move(message) });
if (current != m_server_process)
m_server_process->request_wakeup();
return;
}
LOCKER(m_lock);
#ifdef WSEVENTLOOP_DEBUG
dbgprintf("WSMessageLoop::post_message: {%u} << receiver=%p, message=%p\n", m_queued_messages.size(), receiver, message.ptr());

View file

@ -15,7 +15,7 @@ public:
int exec();
void post_message(WSMessageReceiver* receiver, OwnPtr<WSMessage>&&);
void post_message(WSMessageReceiver* receiver, OwnPtr<WSMessage>&&, bool unsafe = false);
static WSMessageLoop& the();

View file

@ -107,12 +107,17 @@ void WSWindow::on_message(WSMessage& message)
case WSMessage::WM_SetWindowTitle:
set_title(static_cast<WSSetWindowTitleMessage&>(message).title());
return;
case WSMessage::WM_DestroyWindow:
delete this;
return;
case WSMessage::WindowActivated:
gui_event.type = GUI_Event::Type::WindowActivated;
break;
case WSMessage::WindowDeactivated:
gui_event.type = GUI_Event::Type::WindowDeactivated;
break;
default:
break;
}
if (gui_event.type == GUI_Event::Type::Invalid)