Andreas Kling
d17a91f185
Move WindowServer into Servers.
2019-03-20 04:34:14 +01:00
Andreas Kling
43304d2adf
WindowServer: Add special treatment for modal windows.
...
While a WSClientConnection has a modal window showing, non-modal windows
belonging to that client are not sent any events.
2019-03-19 00:52:39 +01:00
Andreas Kling
0c806bfa25
WindowServer: Include switcher windows in the window iteration.
2019-03-10 13:30:43 +01:00
Andreas Kling
64237c5028
WindowServer: Show the username of the WindowServer owner in the menu.
2019-03-10 03:16:27 +01:00
Andreas Kling
a149ad9b44
WindowServer: Window iteration should see the highlight window "in front".
2019-03-10 02:33:43 +01:00
Andreas Kling
ffe4522316
SharedGraphics: Allow passing a Font to text drawing functions.
...
This way we don't have to juggle around with calls to Painter::set_font()
which simplifies a bunch of places.
2019-03-09 21:24:12 +01:00
Andreas Kling
5c27e74fac
WindowServer: Add a window switcher.
...
This needs some work on the window ordering and things like that, but it
works quite nicely as a starting point.
The keyboard shortcut is Logo+Tab. :^)
2019-03-03 15:17:05 +01:00
Andreas Kling
b4631d2083
WindowManager: Allow moving windows around using Logo+LMB.
2019-03-03 13:18:58 +01:00
Andreas Kling
57fe316e01
Detect the "Logo" (Windows/Apple/whatever) key and use it for window resize.
...
This will be comfortable enough while I'm still developing with emulators.
QEMU keeps eating my "Alt" key presses and it's making things difficult.
2019-03-03 12:56:48 +01:00
Andreas Kling
2fb3fa7f69
WindowServer: Add a simple CPU usage graph to the global menu bar.
...
This is pretty cute and helps me spot when something's chewing up CPU.
2019-02-26 02:17:25 +01:00
Andreas Kling
59b8183c4b
WindowServer: Support resizing windows.
...
This is pretty limited and not entirely stable, but it does work! :^)
2019-02-20 15:34:55 +01:00
Andreas Kling
96943dbad1
WindowServer: Remove some unused WSWindowManager members.
2019-02-20 13:17:09 +01:00
Andreas Kling
bf30502560
LibGUI: Implement enter/leave events (with WindowServer support.)
...
Windows now learn when the mouse cursor leaves or enters them.
Use this to implement GWidget::{enter,leave}_event() and use that
to implement the CoolBar button effect. :^)
2019-02-20 10:12:19 +01:00
Andreas Kling
98784ad3cb
WindowServer: Avoid overdraw by shattering dirty rects into unique shards.
...
The algorithm I came up with is O(n^2) but given the small numbers of rects
we're typically working with, it doesn't really matter. May need to revisit
this in the future if we find ourselves with a huge number of rects.
2019-02-19 14:49:23 +01:00
Andreas Kling
0730b3c15f
Add ability to switch video modes from the system menu.
...
I had to change PhysicalPage around a bit for this. Physical pages can now
be instantiated for any arbitrary physical address without worrying that
such pages end up in the kernel page allocator when released.
Most of the pieces were already in place, I just glued everything together.
2019-02-17 13:12:59 +01:00
Andreas Kling
9a39c01551
WindowServer: WSWindow can have a pointer to the client rather than an ID.
...
Since WSWindows are owned by WSConnectionClients, it's fine for them to just
reference the client directly.
2019-02-17 08:54:57 +01:00
Andreas Kling
82768e7ac5
WindowServer: Move video mode setup to WSScreen.
2019-02-17 01:43:01 +01:00
Andreas Kling
640360e958
Move WindowServer to userspace.
...
This is a monster patch that required changing a whole bunch of things.
There are performance and stability issues all over the place, but it works.
Pretty cool, I have to admit :^)
2019-02-17 00:13:47 +01:00
Andreas Kling
468113422f
Kernel: Add ioctls to BochsVGADevice for mode setting and page flipping.
...
Use these in WindowServer instead of poking at the BochsVGADevice directly.
2019-02-16 10:26:01 +01:00
Andreas Kling
2733a788eb
WindowServer: Make MenuBar unaware of Process.
2019-02-14 10:49:59 +01:00
Andreas Kling
aa7947c889
WindowServer: Add WSClientConnection class to manage an individual client.
...
This makes both object lifetimes and object ID's a lot easier to understand.
2019-02-14 08:22:47 +01:00
Andreas Kling
f529b845ec
WindowServer: Convert entire API to be message-based.
...
One big step towards userspace WindowServer. :^)
2019-02-14 01:21:32 +01:00
Andreas Kling
cf432b4c3d
WindowServer: Refactor more of the menu APIs to be message-based.
...
This is all pretty verbose but I can whittle it down later. :^)
2019-02-13 18:49:23 +01:00
Andreas Kling
4f98a35beb
WindowServer: Begin refactoring towards a fully asynchronous protocol.
...
In order to move the WindowServer to userspace, I have to eliminate its
dependence on system call facilities. The communication channel with each
client needs to be message-based in both directions.
2019-02-13 17:54:30 +01:00
Andreas Kling
c5a00a56c8
WindowServer: Put a clock in the top right corner of the screen.
...
This way we don't even need the Clock app anymore. Very cool :^)
2019-02-13 09:27:08 +01:00
Andreas Kling
cac8153436
WindowServer: Try out a new IterationDecision thing for lambda iteration.
2019-02-13 01:04:11 +01:00
Andreas Kling
732f273949
WindowServer: Switch menubar based on the currently active window.
2019-02-13 00:19:21 +01:00
Andreas Kling
4f33fb3a1a
WindowServer: Process window mouse events in the correct z-order.
2019-02-12 23:56:19 +01:00
Andreas Kling
c61f9eba61
WindowServer: Add a WSWindowType enum.
...
So far there's only Normal and Menu. Maybe we'll need more later.
2019-02-12 11:53:45 +01:00
Andreas Kling
4b8133e925
WindowServer: Clean up any menu objects on process exit.
...
..and now that this works, implement the Quit menu action in Terminal. :^)
2019-02-12 10:41:09 +01:00
Andreas Kling
5cd588a497
WindowServer: Always include the system menu in the menubar.
...
Solve this by adding a for_each_active_menubar_menu() iteration helper that
automagically visits the system menu before the current menubar's menus.
2019-02-12 08:49:07 +01:00
Andreas Kling
15b4c9f9f1
WindowServer: More work on the menu system.
...
Menus are now tied to a Process (by WeakPtr.) This will allow us to pass
notifications to the correct event stream.
2019-02-12 08:39:19 +01:00
Andreas Kling
133706d697
Add API's and plumbing for WindowServer clients to make menus.
2019-02-12 00:52:19 +01:00
Andreas Kling
3c863e0ffa
WindowServer: Make automatic menu dismissal feel more "natural."
2019-02-11 13:59:26 +01:00
Andreas Kling
443b043b49
WindowServer: Start implementing a menu system.
...
I'm going with a global top-of-the-screen menu instead of per-window menus.
The basic idea is that menus will live in the WindowServer and clients can
create menus via WindowServer requests.
2019-02-11 09:47:10 +01:00
Andreas Kling
33d34d9b26
Kernel: Use a Lockable<bool> for sysctl booleans as well.
2019-02-08 16:18:24 +01:00
Andreas Kling
7a996e608c
WindowServer: Allow changing the desktop wallpaper through a sysctl.
...
Just write the path of your new wallpaper to /proc/sys/wm_wallpaper. :^)
2019-02-08 09:49:09 +01:00
Andreas Kling
90d3375dc2
WindowServer: Support desktop wallpapers.
...
For now, you don't get to choose the wallpaper, but it's still pretty cool.
2019-02-08 08:45:59 +01:00
Andreas Kling
443d1c2237
WindowServer: Coordinate double-buffering with the BochsVGA card.
...
Use the BochsVGA card's virtual-height + virtual-y features to implement
a "hardware double buffering" type scheme.
This is a performance degradation since we now draw a bunch more than before.
But there's also no tearing or cursor flickering. I'm gonna commit this and
try to improve upon it. :^)
2019-02-07 08:56:26 +01:00
Andreas Kling
a1b63bb6d4
Bootloader: Locate the kernel's data segment and clear it.
...
This was a constant source of stupid bugs and I kept postponing it because
I wasn't in the mood to write assembly code. Until now! :^)
2019-02-06 16:02:10 +01:00
Andreas Kling
11db8c1697
Add a simple close button ("X") to windows.
...
Clicking the button generates a WindowCloseRequest event which the client app
then has to deal with. The default behavior for GWindow is to close() itself.
I also added a flag, GWindow::should_exit_event_loop_on_close() which does
what it sounds like it does.
This patch exposed some bugs in GWindow and GWidget teardown.
2019-02-05 10:31:37 +01:00
Andreas Kling
cacba45f1c
LizaBold8x10: Import a bold variant of Liza8x10 and make it the default bold.
...
Start using it right away for window titles.
2019-02-04 11:37:15 +01:00
Andreas Kling
9fa8d4e22f
WindowServer: Rename the two painting phases.
...
Work now happens in terms of two messages:
- WM_ClientWantsToPaint
- WM_ClientFinishedPaint
This feels fairly obvious compared to the old Paint/Invalidate.
2019-01-26 05:45:47 +01:00
Andreas Kling
244d5bcce1
WindowServer: More event -> message renaming.
2019-01-26 05:35:45 +01:00
Andreas Kling
bba21adae3
WindowServer: Rename WSEvent to WSMessage.
...
Also do the same for WSMessageLoop and WSMessageReceiver. More to come.
2019-01-26 05:28:02 +01:00
Andreas Kling
0db72786cf
Snazz up the windows with some title bar gradients. :^)
2019-01-25 05:02:32 +01:00
Andreas Kling
c6b7b92625
WindowServer: Put the desktop background color in a member.
2019-01-25 03:48:50 +01:00
Andreas Kling
51595603bd
WindowServer: Rename WSEvent subclasses WSFooEvent for consistency.
...
Add a WSWindowInvalidationEvent that carries a rect instead of having an
awkward single-purpose rect in WSEvent.
Flesh out WSKeyEvent a bit more.
2019-01-21 07:28:04 +01:00
Andreas Kling
7e5b81fe48
Make a SharedGraphics directory for classes shared between Kernel and LibGUI.
2019-01-19 23:22:46 +01:00
Andreas Kling
b413e234e1
WSWindowManager: Minor style fixes.
2019-01-19 14:33:59 +01:00