Age | Commit message (Collapse) | Author |
|
While working on the ELF loader I was trying to keep binaries as simple as
possible so I could understand them easily. Now that the ELF loader is mature
and working fine, we can move closer towards ld defaults.
|
|
|
|
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.
|
|
|
|
|
|
I found a cute program that renders an animated nyancat in the terminal.
This patch adds enough hackery to get it working correctly. :^)
|
|
|
|
|
|
|
|
This makes the cursor pleasantly see-through.
|
|
|
|
|
|
Also have them send the appropriate escape sequences in Terminal.
Basic history browsing now works in bash. How nice! :^)
|
|
|
|
This ownership model is a bit confusing. There's a retain cycle between
MasterPTY and SlavePTY, but it's broken when the SlavePTY is closed, meaning
that there are no more FileDescriptors referring to it.
|
|
This required a fair bit of plumbing. The CharacterDevice::close() virtual
will now be closed by ~FileDescriptor(), allowing device implementations to
do custom cleanup at that point.
One big problem remains: if the master PTY is closed before the slave PTY,
we go into crashy land.
|
|
This thing is extremely useful for performance testing so let's put it here.
|
|
Instead of clients painting whenever they feel like it, we now ask that they
paint in response to a paint message.
After finishing painting, clients notify the WindowServer about the rect(s)
they painted into and then flush eventually happens, etc.
This stuff leaves us with a lot of badly named things. Need to fix that.
|
|
Use this in the /bin/sh prompt to keep the window title in sync with the
shell's working directory. :^)
|
|
|
|
This means we only have to do one fill_rect() per line and the whole process
ends up being ~10% faster than before.
Also added a read_tsc() syscall to give userspace access to the TSC.
|
|
|
|
|
|
To start painting, call:
gui$get_window_backing_store()
Then finish up with:
gui$release_window_backing_store()
Process will retain the underlying GraphicsBitmap behind the scenes.
This fixes racing between the WindowServer and GUI clients.
This patch also adds a WSWindowLocker that is exactly what it sounds like.
|
|
|
|
|
|
|
|
|
|
Previously we'd blit every pixel in every window that intersected any dirty
rect to the back buffer. With this patch, we limit ourselves to blitting the
pixels inside the actual dirty rects.
There's still a lot of optimizations to make in this code.
|
|
I'm not in love with this syscall API but it allows me to make progress.
|
|
|
|
Use this in Terminal to only invalidate rows where anything changed.
|
|
Use this to implement different looking Terminal cursors depending on
the window active state.
|
|
This makes the cursor look a bit nicer.
|
|
|
|
|
|
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.
|
|
We already have an abstraction between Process and Inode/CharacterDevice/FIFO
and it's called FileDescriptor. :^)
|
|
Now we can block on both the PTY *and* the GUI event stream in Terminal.
|
|
We track dirty character cells + pending whole-terminal scrolls.
This drastically reduces the number of pixels pushed.
|
|
Via the TIOCSCTTY and TIOCNOTTY ioctls.
|
|
|
|
This is starting to feel vaguely usable! :^)
|
|
|
|
The Terminal program now hosts an interactive shell. :^)
|
|
For now, there are four hard-coded PTYs: /dev/pt{m,s}[0123]
Use this in the Terminal to open a pty pair and spawn a shell.
|
|
|
|
|
|
|