Commit Graph

1157 Commits

Author SHA1 Message Date
Andreas Kling
f0a869ea50 Kernel: Process::cwd_inode() should return a reference.
There's always a current working directory inode.
2019-02-21 16:19:07 +01:00
Andreas Kling
ce3b548077 Kernel: Separate VFS stat() from open().
It was very confusing that you had to open a FileDescriptor in order to stat
a file. This patch gives VFS a separate stat() function and uses it to
implement the stat() and lstat() syscalls.
2019-02-21 16:09:12 +01:00
Andreas Kling
f5f136931a Kernel: Start adding various file system permission checks.
Fail with EACCES in various situations. Fix userland bugs that were exposed.
2019-02-21 15:45:31 +01:00
Andreas Kling
43075e5878 Add a simple /bin/df which gathers its info from /proc/df. 2019-02-21 14:48:00 +01:00
Andreas Kling
7d288aafb2 Kernel: Add link() syscall to create hard links.
This accidentally grew into a little bit of VFS cleanup as well.

Also add a simple /bin/ln implementation to exercise it.
2019-02-21 13:26:40 +01:00
Andreas Kling
b6115ee5b7 WindowServer: Choose resizing direction based on where it's initiated.
Divide the window into 3x3 hot areas and resize in the direction of the
corner where the resize starts. The middle is a no-op area.

This needs some polish but the basic mechanism is good.
2019-02-21 11:06:37 +01:00
Andreas Kling
16cd4585cd WindowServer: Oops, forgot to plumb through the base size for incresize. 2019-02-21 10:11:12 +01:00
Andreas Kling
6084cd0c56 Add concept of size increments to windowing system.
Use this to implement incremental resizing for Terminal so that we only
ever resize to fit a perfect number of rows and columns.

This is very nice. :^)
2019-02-21 00:21:23 +01:00
Andreas Kling
fd575055c2 Userland: /bin/sh shouldn't crash on EINTR. 2019-02-20 23:45:00 +01:00
Andreas Kling
0aaec6b19a Support resizing the Terminal app.
I set it up so that TIOCSWINSZ on a master PTY gets forwarded to the slave.
This feels intuitively right. Terminal can then use that to inform the shell
or whoever is inside the slave that the window size has changed.

TIOCSWINSZ also triggers the generation of a SIGWINCH signal. :^)
2019-02-20 23:38:20 +01:00
Andreas Kling
0ca3112301 FileManager: Fix glitch in the alternating directory item backgrounds. 2019-02-20 22:10:28 +01:00
Andreas Kling
fa02d2a39b Rework the rendering model so that clients instantiate backing stores.
This makes interactive resizing work a lot better, althought it's still not
perfect. There are still glitches and unpleasant flashes of zeroed memory.
2019-02-20 22:08:14 +01:00
Andreas Kling
e0b81ee4c9 Ext2FS: Remove the inode cache lock in favor of one big lock instead. 2019-02-20 21:58:55 +01:00
Andreas Kling
266e77259e Kernel: If someone else zero-fills a shared VMO page, don't freak out.
Just map the new page and move on.
2019-02-20 21:33:07 +01:00
Andreas Kling
6158f456fa Kernel: Don't remove from SharedBuffer map while iterating it.
This was causing a finalizer crash when handling a process that co-owned
multiple shared buffers.
2019-02-20 21:31:52 +01:00
Andreas Kling
d054fbee91 WindowServer: Don't spam clients with resize events.
Wait for them to finish a paint, then send them a new resize event.
The exception is when releasing the mouse button to end the resize.
Then we send a new resize event right away.
2019-02-20 15:50:05 +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
a9911fca80 WindowServer: Minor style tweak. 2019-02-20 13:59:13 +01:00
Andreas Kling
96943dbad1 WindowServer: Remove some unused WSWindowManager members. 2019-02-20 13:17:09 +01:00
Andreas Kling
3df4a902df Ext2FS: Lock a lot. Go way overkill with locking for now. 2019-02-20 13:09:59 +01:00
Andreas Kling
809ffa56d7 Kernel: Reduce code duplication in exception handlers. 2019-02-20 12:28:41 +01:00
Andreas Kling
9763eb44f9 LibGUI: Pack toolbar buttons closer together. 2019-02-20 11:56:28 +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
af7eb5c89c Launcher: Let's use CoolBar style buttons in here for now.
This will be helpful for testing the hover events.
2019-02-20 09:33:59 +01:00
Andreas Kling
d353c7c3d6 LibGUI: Support different button styles.
I want to try an MS Office 97 "CoolBar" inspired look for my toolbars.
This is only the painting support, we still need hover events to implement
the actual effect.
2019-02-20 09:22:38 +01:00
Andreas Kling
dc753b58a5 LibGUI: Improve GBoxLayout so it can better support GToolBar.
Added spacing and margin concepts to GLayout. Support layout a sequence
of nothing but fixed-size objects in the desired orientation. :^)
2019-02-20 09:04:28 +01:00
Andreas Kling
b704d3d295 LibGUI: Add a GToolBar class that can be populated with GActions.
The same action can be added to both a menu and a toolbar.
Use this to put a toolbar into FileManager. This is pretty neat. :^)
2019-02-20 02:39:46 +01:00
Andreas Kling
4804609b7e WindowServer: Display menus with 95% opacity by default. 2019-02-19 16:41:13 +01:00
Andreas Kling
210646edd2 SharedGraphics: Minor tweaks in rect shattering code. 2019-02-19 16:37:12 +01:00
Andreas Kling
57546d8420 WindowServer: Only invalidate the menubar rect when switching menubars. 2019-02-19 16:32:06 +01:00
Andreas Kling
b561a5976f WindowServer: Correct invalidation rects for menu windows. 2019-02-19 15:46:48 +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
420b7bd55f FileManager: Add an icon for socket files. 2019-02-19 03:13:43 +01:00
Andreas Kling
bf6b0ea181 Base: Remove an unused icon. 2019-02-19 03:11:12 +01:00
Andreas Kling
fad69464f6 Kernel: Fix wrong calculation of current Unix timestamp. 2019-02-19 02:39:18 +01:00
Andreas Kling
9b71307d49 WindowServer: Support windows with alpha channels. And per-WSWindow opacity.
This patch also adds a Format concept to GraphicsBitmap. For now there are
only two formats: RGB32 and RGBA32. Windows with alpha channel have their
backing stores created in the RGBA32 format.

Use this to make Terminal windows semi-transparent for that comfy rice look.
There is one problem here, in that window compositing overdraw incurs
multiple passes of blending of the same pixels. This leads to a mismatch in
opacity which is obviously not good. I will work on this in a later patch.

The alpha blending is currently straight C++. It should be relatively easy
to optimize this using SSE instructions.

For now I'm just happy with the cute effect. :^)
2019-02-19 01:42:53 +01:00
Andreas Kling
d4973842c9 Kernel: Run the sync daemon once every second.
This is obviously not a final design, but 10 seconds was way too long.
2019-02-17 15:18:35 +01:00
Andreas Kling
8eedbbc9ca Prune compiler flags a bit. Let's go with -march=i686 for now. 2019-02-17 15:17:21 +01:00
Andreas Kling
e952a35994 WindowServer: Assume wallpaper images are 1024x768.
This is obviously not always the right thing to do, but it removes some
confusion while using other resolutions. Eventually we're gonna need some
kind of compressed image decoder.
2019-02-17 13:44:39 +01:00
Andreas Kling
e241f3a801 Kernel: Shrink kmalloc() chunk size from 128 to 64.
This sacrifices some speed for more space. I don't want to work on a new
allocator right this moment, so this buys me some time.
2019-02-17 13:41:15 +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
8321908abe LibGUI: Tweak the scrollbar and button styles a bit. 2019-02-17 12:08:28 +01:00
Andreas Kling
ff786aa38a Spawn Launcher and FileManager on startup by default again.
I disabled this while debugging WindowServer-in-userspace, and now that it
works fine we can bring these back up.
2019-02-17 11:31:52 +01:00
Andreas Kling
d5f515cf6c Kernel: Give each FileDescriptor a chance to co-open sockets.
Track how many fds are open for a socket's Accepted and Connected roles.
This allows fork() to clone a socket fd without a subsequent close() walking
all over the parent process's fd.
2019-02-17 11:00:35 +01:00
Andreas Kling
b0be3299b5 WindowServer: Close accepted sockets when the client has disconnected. 2019-02-17 10:59:58 +01:00
Andreas Kling
7bb00ea1e3 Kernel: socket() with SOCK_CLOEXEC was setting the wrong fd flag.
Turns out FD_CLOEXEC and O_CLOEXEC are different values. Silly mistake.
I noticed that Terminal's shell process still had the Terminal's window
server connection open, albeit in a broken state.
2019-02-17 10:41:37 +01:00
Andreas Kling
b6bf26430d Kernel: Have devices automagically register themselves with the VFS. 2019-02-17 10:38:07 +01:00
Andreas Kling
e74c833af3 AK: Fix broken instrumentation code for StringImpl. 2019-02-17 10:35:48 +01:00
Andreas Kling
cf8dd312ab Kernel: Fix String leaks in exec().
When the kernel performs a successful exec(), whatever was on the kernel
stack for that process before goes away. For this reason, we need to make
sure we don't have any stack objects holding onto kmalloc memory.
2019-02-17 10:18:25 +01:00
Andreas Kling
4b15dd2bca LibGUI: Rename GEventLoop::exit() and GApplication::exit() to quit().
These functions don't exit immediately, but rather on the next iteration
of the event loop.

Since exit() is already used by the standard library, let's call it quit()
instead. That way, saying exit() means the same thing here as anywhere else.
2019-02-17 09:59:56 +01:00