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
Andreas Kling
4bffdd2394
WindowServer: Use a different border color for windows being dragged.
...
Also get rid of an unnecessary invalidation on drag end.
2019-01-18 15:55:28 +01:00
Andreas Kling
f7cc454162
Add mechanism to expose kernel variables to userspace via ProcFS.
...
Only booleans are supported at first. More types can be added easily.
Use this to add /proc/sys/wm_flash_flush which when enabled flashes pending
screen flush rects in yellow before they happen.
2019-01-18 15:01:40 +01:00
Andreas Kling
9454c5dd52
WindowServer: Merge WSFrameBuffer into WSScreen.
2019-01-18 05:41:15 +01:00
Andreas Kling
bb28c143fd
Update coding style in WSWindowManager.
2019-01-18 05:33:35 +01:00
Andreas Kling
dff70021ab
Make it possible to invalidate only a portion of a window.
...
Use this in Terminal to only invalidate rows where anything changed.
2019-01-18 04:37:49 +01:00
Andreas Kling
dad58db757
Add WindowActivated and WindowDeactivated events.
...
Use this to implement different looking Terminal cursors depending on
the window active state.
2019-01-17 17:38:04 +01:00
Andreas Kling
e9e57c5f65
Rename SpinLock to Lock. It hasn't been a SpinLock for some time.
...
I'm pretty happy with the mechanism of AK::Lock for now.
2019-01-17 16:25:02 +01:00