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:
parent
3a4207b863
commit
5c25f0c4db
7 changed files with 30 additions and 6 deletions
|
@ -14,6 +14,7 @@ public:
|
|||
WM_SetWindowTitle,
|
||||
WM_SetWindowRect,
|
||||
WM_DeferredCompose,
|
||||
WM_DestroyWindow,
|
||||
MouseMove,
|
||||
MouseDown,
|
||||
MouseUp,
|
||||
|
|
|
@ -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());
|
||||
|
|
|
@ -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();
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue