Andreas Kling
b413e234e1
WSWindowManager: Minor style fixes.
2019-01-19 14:33:59 +01:00
Andreas Kling
102a5add16
Invalidate the window when starting to drag it.
...
This ensures that the drag color shows up immediately.
2019-01-19 14:29: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
7e044cf293
Add a simple /bin/sysctl that wraps the files in /proc/sys.
2019-01-18 15:35:38 +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
dff5051905
Support polling with select() by using a zero timeout.
...
Use this in WindowServer to avoid getting blocked in select() when
there are pending injected events.
2019-01-18 05:28:07 +01:00
Andreas Kling
a01e119e05
WindowServer: Always select() in the event loop.
...
This fixes an issue where a steady stream of injected events would prevent
us from ever draining the mouse and keyboard inputs.
2019-01-18 04:59:08 +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
9d7da26b4e
StringBuilder: Use a ByteBuffer internally instead of a Vector<String>.
2019-01-18 03:27:51 +01:00
Andreas Kling
074edffc44
Add a simple StringBuilder::appendf() and use it for ProcFS.
...
Okay, now ProcFS doesn't crash due to the crappy buffer size estimates
not really working out. This thing has dogshit performance and I will
fix that separately.
2019-01-18 02:46:39 +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
135ff48bb9
Terminal: Tighten the glyph rects.
...
This makes the cursor look a bit nicer.
2019-01-17 16:34:37 +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
Andreas Kling
133f9aa352
WindowServer: Slap everything with locks.
2019-01-17 16:21:04 +01:00
Andreas Kling
5983a217c3
Terminal: Draw the terminal cursor.
2019-01-17 16:19:49 +01:00
Andreas Kling
3ad0ec9b1b
Paper over annoying race in GraphicsBitmap instantiation.
...
This works for now. This has to be done quite differently when I eventually
move the WindowServer to userspace.
2019-01-17 02:58:34 +01:00
Andreas Kling
36e0ab3f18
Ignore WM_Invalidate events if there is an unprocessed one in the queue.
2019-01-17 02:42:52 +01:00
Andreas Kling
1c63a37bc9
Only drain mouse/keyboard streams if they actually have data.
...
Technically we could just grab directly at the CharacterDevices like we've
been doing but I'd like to stay away from in-kernel behavior like that.
This should eventually become a userspace process.
2019-01-17 02:34:08 +01:00
Andreas Kling
d793323254
Respect the overflow bit in PS/2 mouse data.
2019-01-17 02:32:40 +01:00
Andreas Kling
dc20f00872
PS2MouseDevice: Try to synchronize the data reporting stream.
...
Turns out this was the reason QEMU wouldn't boot us.
2019-01-17 02:13:21 +01:00
Andreas Kling
b5c76d7559
Get rid of #ifdef SERENITY. We're past that phase of bootstrapping.
2019-01-17 01:41:36 +01:00
Andreas Kling
5605295d00
Oops, forgot to add the select() files to LibC a while ago.
2019-01-17 01:41:13 +01:00
Andreas Kling
f92e721ae8
Tidy up Painter::fill_rect() a bit.
2019-01-17 01:25:26 +01:00
Andreas Kling
61bba1b9dd
WindowServer: Skip blitting windows into the back buffer if possible.
...
Windows that don't intersect any of the dirty rects don't need to be copied
into the back buffer since they won't be affected by the subsequent flushes.
2019-01-16 20:21:44 +01:00
Andreas Kling
b6c3df5188
Optimize Painter::draw_rect() a bit.
...
Reorganize the loops to make it go fast. The draw_rect() part of painting
window frames is now ~2.65x faster.
2019-01-16 20:21:41 +01:00
Andreas Kling
f651405694
Optimize the Painter::blit() loop a bit. ~3% fewer cycles, I'll take it.
2019-01-16 19:50:25 +01:00
Andreas Kling
7750e6952b
Move some more classes to the new coding style.
2019-01-16 17:57:58 +01:00
Andreas Kling
a2ec09bc20
Allow the scheduler to unblock the current process.
...
It's a bit confusing that the "current" process is not actually running
while we're inside the scheduler. Perhaps the scheduler should redirect
"current" to its own dummy Process. I'm not sure.
Regardless, this patch improves responsiveness by allowing the scheduler
to unblock a process right after it calls select() in case it already has
a pending wakeup request.
2019-01-16 17:47:18 +01:00
Andreas Kling
4fef895eda
Rework WindowServer to use select() in its main event loop.
...
The system can finally idle without burning CPU. :^)
There are some issues with scheduling making the mouse cursor sloppy
and unresponsive that need to be dealt with.
2019-01-16 17:20:58 +01:00
Andreas Kling
f7ca6d254d
Tear out or duplicate what's unique for WindowServer from Widgets.
...
This turned into a huge refactoring that somehow also includes
making locks recursive/reentrant.
2019-01-16 16:03:50 +01:00
Andreas Kling
e655aebd70
Window: Update coding style.
2019-01-16 13:50:24 +01:00
Andreas Kling
9dd29f9aa9
Add a PTY multiplexer (/dev/ptmx) device.
...
When you open /dev/ptmx, you get a file descriptor pointing to one of the
available MasterPTY's. If none are available, you get an EBUSY.
This makes it possible to open multiple (up to 4) Terminals. :^)
To support this, I also added a CharacterDevice::open() that gets control
when VFS is opening a CharacterDevice. This is useful when we want to return
a custom FileDescriptor like we do here.
2019-01-16 13:39:32 +01:00
Andreas Kling
b46ae2bf09
Get rid of Vnode concept.
...
We already have an abstraction between Process and Inode/CharacterDevice/FIFO
and it's called FileDescriptor. :^)
2019-01-16 12:57:07 +01:00
Andreas Kling
310a5f4199
Let each MasterPTY create its slave.
2019-01-16 02:11:50 +01:00
Andreas Kling
9c51d9dfcd
Catch anyone trying to use a DoubleBuffer with interrupts disabled.
2019-01-16 01:58:11 +01:00
Andreas Kling
09ba129bcf
Use a CircularQueue for the PS/2 mouse driver.
2019-01-16 01:52:39 +01:00
Andreas Kling
8ad2dfb6e1
Rename FileDescriptor::has_data_available_for_reading() -> can_read().
2019-01-16 00:47:00 +01:00
Andreas Kling
a8baee4dcd
Tidy up memory map a bit and write out the general map in MemoryManager.
...
There was a bug that given enough supervisor page allocation, we would
eventually start dipping into the kmalloc range.
2019-01-16 00:44:09 +01:00
Andreas Kling
bd3e77cc16
Pass the process to CharacterDevice::read/write.
...
This is much nicer than grabbing directly at 'current' inside a read().
2019-01-16 00:20:38 +01:00
Andreas Kling
08bfe518f9
Rename CharacterDevice::has_data_available_for_reading() -> can_read().
2019-01-16 00:10:13 +01:00
Andreas Kling
10387beda7
Implement basic support for POSIX-style select().
...
Now we can block on both the PTY *and* the GUI event stream in Terminal.
2019-01-16 00:09:58 +01:00
Andreas Kling
46181cf023
Oops, finish WindowServer rename.
2019-01-15 21:46:15 +01:00
Andreas Kling
52c004eb53
Add internal locking to DoubleBuffer.
2019-01-15 21:43:38 +01:00
Andreas Kling
e42f090ed3
Rename WindowComposer -> WindowServer.
...
I keep referring to it as the windowing server anyway.
2019-01-15 21:16:04 +01:00
Andreas Kling
d0137f0e96
Terminal: optimize repaints a bunch.
...
We track dirty character cells + pending whole-terminal scrolls.
This drastically reduces the number of pixels pushed.
2019-01-15 10:23:15 +01:00
Andreas Kling
e452303c66
Allow character devices to block write attempts until there is more space.
2019-01-15 09:17:22 +01:00
Andreas Kling
49b63281a0
Make it possible for a process to switch controlling terminals.
...
Via the TIOCSCTTY and TIOCNOTTY ioctls.
2019-01-15 08:49:24 +01:00
Andreas Kling
10308c6434
Let's not require TERM=ansi for tgetent() to work.
2019-01-15 08:32:53 +01:00