1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-08-02 12:07:47 +00:00
Commit graph

2264 commits

Author SHA1 Message Date
thankyouverycool
e87eb97e68 WindowServer: Do not pop-up submenus directly atop their ancestors
Previously submenus would pop-up on their immediate open ancestors in
cases of limited screen real estate. If the submenu was sufficiently
large, this could make it difficult to navigate back down the menu
stack. Now submenus display on either side of their ancestors, making
it easy to zig-zag up and down menu stacks. This is similar to how
menus operate in many other DEs.
2022-08-16 16:52:09 +02:00
thankyouverycool
4489f9dbef WindowServer: Add MenuManager helper to find closest open ancestor 2022-08-16 16:52:09 +02:00
thankyouverycool
db852548ce WindowServer: Force cursor invalidation when composing immediately
And invalidate the cursor before creating a new drag-and-drop
overlay. Fixes dnd overlay bitmaps failing to draw at the correct
location immedately after changing cursors.
2022-08-16 16:43:27 +02:00
thankyouverycool
9bcd7dc0ce WindowServer: Don't start a drag and drop unless holding Primary mouse
Adds a member to record the last processed mouse buttons. If they
do not include MouseButton::Primary, return early before creating
a new drag and drop client. This fixes race conditions in which
MouseUp events canceling or completing a drop could be swallowed
by Overlay creation or postponed by an executing DragOperation,
leaving the operation in limbo.
2022-08-16 16:43:27 +02:00
thankyouverycool
7c1995993f WindowServer: Use correct config group for workspace settings
WindowServer.ini already contained the correct pluralized group by
default, but was left unused by a typo.
2022-08-16 16:41:47 +02:00
thankyouverycool
1f1ac99ef9 WindowServer+WorkspacePicker: Adjust active and inactive colors
Now uses the Selection ColorRole for the active desktop and a
slightly darkened Window for inactive ones. Several themes use
the same color for thread highlighting and inactive windows which
was causing frames to draw without the correct perception of depth.
2022-08-16 16:41:47 +02:00
Andreas Kling
072dde9387 WindowServer: Always use the automatic cursor tracking window's cursor
Whenever we're in the "automatic cursor tracking" state, we should only
display the tracking window's cursor, as the state is globally modal.
2022-08-16 00:58:26 +02:00
Andreas Kling
296e68fdbf WindowServer: Move "automatic cursor tracking window" to WindowManager
It didn't make sense for this to be a per-WindowStack concept, since
automatic cursor tracking is globally modal.
2022-08-16 00:58:26 +02:00
Andreas Kling
add4f42d21 WindowServer: Rename "active input tracking window"
...to "automatic cursor tracking window". This matches what we call its
sibling concept in LibGUI ("automatic cursor tracking widget").
2022-08-16 00:58:26 +02:00
Andreas Kling
3f14582b85 LoginServer+LibCore: Only create user temp directory from LoginServer
Other programs use Core::Account::login(), notably su(1), which stopped
working due to a missing "cpath" pledge promise.

This patch moves the /tmp/user/ creation logic to a separate function
that LoginServer can call.
2022-08-15 17:18:11 +02:00
Lucas CHOLLET
c248569d6b Base: Launch InspectorServer at session start-up 2022-08-14 21:52:35 +01:00
Lucas CHOLLET
1da9375400 Base: Launch ImageDecoder at session start-up 2022-08-14 21:52:35 +01:00
Lucas CHOLLET
e9e94ef3cc Base: Launch WebSocket at session start-up 2022-08-14 21:52:35 +01:00
Lucas CHOLLET
266e18e0b6 Base: Launch Request at session start-up 2022-08-14 21:52:35 +01:00
Lucas CHOLLET
1b36348d8b LibCore+LibIPC: Recognise %uid in path
This patch allows to insert "%uid" in `IPC_CLIENT_CONNECTION`
declaration and in SystemServer's ini files. This pattern is replaced
then replaced by the UID of the owner of the service. It opens a path
for seamlessly managed, per-user portal.
2022-08-14 21:52:35 +01:00
Lucas CHOLLET
c5b7c9f479 LibCore+LaunchServer: Move portal directory to /tmp/user/%uid
The `/tmp/user` directory is owned by root, this solution prevents
malicious users to interfere with other users' portals.

This commit also moves `launch`'s portal in the user directory.
2022-08-14 21:52:35 +01:00
Lucas CHOLLET
f0012c2162 SystemServer: Create accounts with Account::Read::PasswdOnly
This prevents non-root instances of SystemServer to try to open
`/etc/shadow`.
2022-08-14 21:52:35 +01:00
Lucas CHOLLET
a3b8a9a142 SystemServer: Change user only when needed 2022-08-14 21:52:35 +01:00
Lucas CHOLLET
a13ffffbec SystemServer: Unlink before binding a new socket
Prevent "Address already in use" issues when restarting a service.
2022-08-14 21:52:35 +01:00
thankyouverycool
d11ce1d808 WindowServer: Let WindowManager set serverside effects
Menu and Window animations can now be disabled and the geometry
overlay made conditional. Shadow options are dependent on the
current theme actually supplying bitmaps, but they provide a fast
way to toggle those that do without having to edit theme files.
2022-08-09 12:08:21 +02:00
thankyouverycool
841d06f676 LibGUI+WindowServer: Create IPC calls for passing SystemEffects
SystemEffects are sent to the WindowManager through
set_system_effects() and broadcast to Desktop clients with
update_system_effects(). WindowManager is reponsible for saving,
loading and rebroadcasting effects from WindowServer.ini on
config changes.
2022-08-09 12:08:21 +02:00
thankyouverycool
8904a61d71 LibGUI+WindowServer: Add a SystemEffects wrapper and helpers
SystemEffects provides a tidy way to work with system-wide
visual options passed through IPC.
2022-08-09 12:08:21 +02:00
Andreas Kling
50d951aea2 LibJS: Let Shape store a Realm instead of a GlobalObject
This is a cautious first step towards being able to create JS objects
before a global object has been instantiated.
2022-08-05 12:42:46 +02:00
0xbigshaq
af46734497 LibHTTP+WebServer: Add querystring support
Split the path from querystring when determining the requested resource.
2022-08-02 21:05:32 +00:00
networkException
ad060befad WindowServer+LibGUI: Remove awkward roundtrip for set wallpaper response
Previously we would wait for a separate message confirming that a
wallpaper got set instead of just calling a synchronous api.

I'm guessing that this was a limitation of the IPC system when
WindowServer got ported to using it.

This patch removes the SetWallpaperFinished message and updates the
set_wallpaper api to synchronously return a success boolean.
2022-08-02 04:04:08 +00:00
Andreas Kling
548081ea23 Userland+Base: Make the window titlebar font configurable separately
Instead of defaulting to "bold variant of the system default font",
let's allow the user to set any font they want as the titlebar font.
2022-08-01 10:29:53 +02:00
demostanis
b89aced2e3 LaunchServer: Let open_file_url use app defaults
Before, programs using open_file_url (such as Terminal) would
fail to open any file if its extension (or mime type) wasn't
specified in LaunchServer.ini. This patch now permits it.
2022-07-27 17:11:25 +01:00
demostanis
48766449e5 LaunchServer+LibDesktop: Open from mime type
Before, LaunchServer would only open files based on their extension.
This wouldn't work if the file had the wrong one.
2022-07-27 17:11:25 +01:00
Sam Atkins
11cb7c7b28 WindowServer: Ensure windows are wide enough to show title buttons :^)
Previously, windows without a defined minimum size (or one produced from
the minimum sizes of their contents) would be shrunk down to 0 x 0,
which makes the title buttons stick out the side and become impossible
to interact with.

This patch uses the theme metrics to calculate a minimum size that is as
small as possible while still keeping the title buttons and app icon
usable. This is combined with the minimum size requested by the app
itself.

Switching themes automatically updates the calculated minimum sizes for
all existing windows. As noted, if the new theme has narrower title
buttons then the old minimum is kept, but this shouldn't be noticeable
unless you're looking for it.
2022-07-27 00:01:42 +01:00
Liav A
977aa81310 Kernel+Userland: Add ioctl to set process ownership of DisplayConnector
Now that the infrastructure of the Graphics subsystem is quite stable,
it is time to try to fix a long-standing problem, which is the lack of
locking on display connector devices. Reading and writing from multiple
processes to a framebuffer controlled by the display connector is not a
huge problem - it could be solved with POSIX locking.

The real problem is some program that will try to do ioctl operations on
a display connector without the WindowServer being aware of that which
can lead to very bad situations, for example - assuming a framebuffer is
encoded at a known resolution and certain display timings, but another
process changed the ModeSetting of the display connector, leading to
inconsistency on the properties of the current ModeSetting.

To solve this, there's a new "master" ioctl to take "ownership" and
another one to release that ownership of a display connector device. To
ensure we will not hold a Process object forever just because it has an
ownership over a display connector, we hold it with a weak reference,
and if the process is gone, someone else can take an ownership.
2022-07-23 10:42:08 +01:00
Liav A
1968aba69b Kernel+Userland: Rename FB.h => Graphics.h
This header file represents the entire interface between the kernel and
userland, and as such, no longer should be called FB.h but something
that represents the whole graphics subsystem.
2022-07-23 10:42:08 +01:00
Liav A
b5e5b299c4 Userland: Remove stale remainders of old framebuffer devices 2022-07-23 10:42:08 +01:00
Timur Sultanov
9906f41e01 Keymap+WindowServer: Add context menu to keymap applet
Adding a context menu which lists configured keymaps and allows
setting the active keymap
2022-07-21 16:40:47 +02:00
Idan Horowitz
23f3857cdd SystemServer: Create /tmp/semaphore on startup
This directory will store all LibPthread named semaphores
2022-07-21 16:39:22 +02:00
Lucas CHOLLET
70846d701c LaunchServer+SystemServer: Move the portal to a user-specific directory
Various changes are needed to support this:
 - The directory is created by Core::Account on login (and located in
   /tmp).
 - Service's sockets are now deleted on exit (to allow re-creation)
 - SystemServer needs to handle SIGTERM to correctly destroy services.
2022-07-19 11:15:14 +01:00
Lucas CHOLLET
cc0d53d6a6 LoginServer: Correctly retrieve SystemServer's exit code
The returned value of `waitpid` is the PID of the process and not the
exit code.
2022-07-19 11:15:14 +01:00
FrHun
f6cea8ad8c Taskbar: Center buttons again by fixing margins 2022-07-15 12:34:25 +02:00
Maciej
976562b817 NetworkServer: Use sv suffixes to avoid strlen at runtime 2022-07-14 23:26:47 +02:00
Maciej
b5708a084b NetworkServer: Disable interface if Enabled = false
We now remove default route and set IP address to 0.0.0.0 (Kernel
interprets this as "link down") for all disabled interfaces, so that
a reboot is no longer needed.
2022-07-14 23:26:47 +02:00
Maciej
211ced3b65 NetworkServer: Kill DHCPServer as the first thing done
The DHCPServer running while we setup interfaces might manage to setup
its own config before we kill it.
2022-07-14 23:26:47 +02:00
Atharva Kulkarni
3f93aec720 NotificationServer: Move notifications down if hovered
Currently in case of multiple notifications, the notifications are
drawn on top of each other when expanded.
The change moves the notificaiton below other notifications
2022-07-13 17:03:44 +01:00
sin-ack
c8585b77d2 Everywhere: Replace single-char StringView op. arguments with chars
This prevents us from needing a sv suffix, and potentially reduces the
need to run generic code for a single character (as contains,
starts_with, ends_with etc. for a char will be just a length and
equality check).

No functional changes.
2022-07-12 23:11:35 +02:00
sin-ack
3f3f45580a Everywhere: Add sv suffix to strings relying on StringView(char const*)
Each of these strings would previously rely on StringView's char const*
constructor overload, which would call __builtin_strlen on the string.
Since we now have operator ""sv, we can replace these with much simpler
versions. This opens the door to being able to remove
StringView(char const*).

No functional changes.
2022-07-12 23:11:35 +02:00
sin-ack
e5f09ea170 Everywhere: Split Error::from_string_literal and Error::from_string_view
Error::from_string_literal now takes direct char const*s, while
Error::from_string_view does what Error::from_string_literal used to do:
taking StringViews. This change will remove the need to insert `sv`
after error strings when returning string literal errors once
StringView(char const*) is removed.

No functional changes.
2022-07-12 23:11:35 +02:00
sin-ack
c70f45ff44 Everywhere: Explicitly specify the size in StringView constructors
This commit moves the length calculations out to be directly on the
StringView users. This is an important step towards the goal of removing
StringView(char const*), as it moves the responsibility of calculating
the size of the string to the user of the StringView (which will prevent
naive uses causing OOB access).
2022-07-12 23:11:35 +02:00
Liav A
9dbec601b0 Kernel+SystemServer: Make KCOVDevice a character device
This device should not be a block device, as in Serenity, block devices
represent an interface to either disk partitions or storage devices.
2022-07-10 14:57:55 +02:00
kleines Filmröllchen
69218b92a5 LibCore+Userland: Use StringViews when calling Core::System::open
For some reason we used raw char pointers sometimes, which caused at
least one heap buffer overflow detected in fuzzing.
2022-07-09 09:25:20 +01:00
Maciej
df7b7cbfa4 NetworkServer: Kill running DHCPServer before starting our own
We cannot run two DHCPServers at once, let's just kill the one that was
started previously.
2022-07-09 09:22:25 +01:00
Maciej
8526c3f680 NetworkServer: Clear default gateway route entry before adding 2022-07-09 09:22:25 +01:00
Tim Schumacher
84e1017272 Userland: Add /usr/local/sbin to PATH by default
`e2fsprogs` adds its tools there.
2022-07-08 12:04:01 +02:00