diff --git a/Kernel/Makefile b/Kernel/Makefile index 3f3f73d036..0dfb4f501b 100644 --- a/Kernel/Makefile +++ b/Kernel/Makefile @@ -5,7 +5,6 @@ KERNEL_OBJS = \ StdLib.o \ i386.o \ Process.o \ - ProcessGUI.o \ i8253.o \ Keyboard.o \ CMOS.o \ diff --git a/Kernel/Process.cpp b/Kernel/Process.cpp index d1958ecafd..457d03423d 100644 --- a/Kernel/Process.cpp +++ b/Kernel/Process.cpp @@ -18,7 +18,8 @@ #include "Scheduler.h" #include "FIFO.h" #include "KSyms.h" -#include +#include +#include #include "MasterPTY.h" #include "elf.h" @@ -48,7 +49,7 @@ void Process::initialize() s_hostname = new String("courage"); s_hostname_lock = new Lock; Scheduler::initialize(); - initialize_gui_statics(); + new WSMessageLoop; } Vector Process::all_pids() @@ -2133,7 +2134,9 @@ void Process::finalize() { ASSERT(current == g_finalizer); - destroy_all_windows(); + if (WSMessageLoop::the().running()) + WSMessageLoop::the().notify_client_died(gui_client_id()); + m_fds.clear(); m_tty = nullptr; @@ -2221,3 +2224,21 @@ bool Process::tick() ++m_ticks_in_kernel; return --m_ticks_left; } + +DisplayInfo Process::set_video_resolution(int width, int height) +{ + DisplayInfo info; + info.width = width; + info.height = height; + info.bpp = 32; + info.pitch = width * 4; + size_t framebuffer_size = width * height * 4 * 2; + if (!m_display_framebuffer_region) { + auto framebuffer_vmo = VMObject::create_framebuffer_wrapper(BochsVGADevice::the().framebuffer_address(), framebuffer_size); + m_display_framebuffer_region = allocate_region_with_vmo(LinearAddress(0xe0000000), framebuffer_size, move(framebuffer_vmo), 0, "framebuffer", true, true); + } + info.framebuffer = m_display_framebuffer_region->laddr().as_ptr(); + + BochsVGADevice::the().set_resolution(width, height); + return info; +} diff --git a/Kernel/Process.h b/Kernel/Process.h index 2e60a708d3..68c2cbc480 100644 --- a/Kernel/Process.h +++ b/Kernel/Process.h @@ -222,8 +222,6 @@ public: DisplayInfo set_video_resolution(int width, int height); static void initialize(); - static void initialize_gui_statics(); - void destroy_all_windows(); void crash() NORETURN; static int reap(Process&) WARN_UNUSED_RESULT; diff --git a/Kernel/ProcessGUI.cpp b/Kernel/ProcessGUI.cpp deleted file mode 100644 index 4c87cd7146..0000000000 --- a/Kernel/ProcessGUI.cpp +++ /dev/null @@ -1,43 +0,0 @@ -#include "Process.h" -#include "MemoryManager.h" -#include -#include -#include -#include -#include -#include -#include -#include - -//#define LOG_GUI_SYSCALLS - -void Process::initialize_gui_statics() -{ - new WSMessageLoop; -} - -void Process::destroy_all_windows() -{ - if (!WSMessageLoop::the().running()) - return; - dbgprintf("Sending death notification for client_id %d\n", gui_client_id()); - WSMessageLoop::the().notify_client_died(gui_client_id()); -} - -DisplayInfo Process::set_video_resolution(int width, int height) -{ - DisplayInfo info; - info.width = width; - info.height = height; - info.bpp = 32; - info.pitch = width * 4; - size_t framebuffer_size = width * height * 4 * 2; - if (!m_display_framebuffer_region) { - auto framebuffer_vmo = VMObject::create_framebuffer_wrapper(BochsVGADevice::the().framebuffer_address(), framebuffer_size); - m_display_framebuffer_region = allocate_region_with_vmo(LinearAddress(0xe0000000), framebuffer_size, move(framebuffer_vmo), 0, "framebuffer", true, true); - } - info.framebuffer = m_display_framebuffer_region->laddr().as_ptr(); - - BochsVGADevice::the().set_resolution(width, height); - return info; -}