summaryrefslogtreecommitdiff
path: root/Userland/Services/WindowServer/WindowServer.ipc
AgeCommit message (Collapse)Author
2021-06-20WindowServer: Enable screen capture to span multiple screensTom
This enables the shot utility to capture all screens or just one, and enables the Magnifier application to track the mouse cursor across multiple screens.
2021-06-20WindowServer: Add API to set/get screen layoutsTom
This sets the stage so that DisplaySettings can configure the screen layout and set various screen resolutions in one go. It also allows for an easy "atomic" revert of the previous settings.
2021-06-20WindowServer: Add initial support for rendering on multiple screensTom
This allows WindowServer to use multiple framebuffer devices and compose the desktop with any arbitrary layout. Currently, it is assumed that it is configured contiguous and non-overlapping, but this should eventually be enforced. To make rendering efficient, each window now also tracks on which screens it needs to be rendered. This way we don't have to iterate all the windows for each screen but instead use the same rendering loop and then only render to the screen (or screens) that the window actually uses.
2021-06-12WindowServer+LibGUI: Make window creation asynchronous :^)Andreas Kling
Let clients manage their own window ID's. If you try to create a new window with an existing ID, WindowServer will simply disconnect you for misbehaving. This removes the need for window creation to be synchronous, which means that most GUI applications can now batch their entire GUI initialization sequence without having to block waiting for responses.
2021-06-09LibGUI/WindowServer: Add set_maximized IPC callMarcus Nilsson
Add an IPC call to enable the client to manually maximize it's own window.
2021-06-07WindowServer+Magnifier: Make Magnifier buttery smooth :^)Andreas Kling
This patch moves the magnifier rect computation over to the server side to ensure that the mouse cursor position and the screen image never get out of sync.
2021-06-06WindowServer: Add a GetDesktopDisplayScale IPC requestEugene Barnett
Tells you which scale factor is configured in window manager.
2021-05-21WindowServer+LibGUI: Add an IPC API to change the current system fontsAndreas Kling
This patch adds a set_system_fonts() IPC API that takes the two main font queries as parameters. We'll probably expand this with additional queries when we figure out what they should be. Note that changing the system fonts on a live system mostly takes effect in newly launched programs. This is because GUI::Widget will currently cache a pointer to the Gfx::FontDatabase::default_font() when first constructed. This is something we'll have to fix somehow. Also note that the settings are not yet persisted.
2021-05-20WindowServer+LibGUI: Make client/server greeting fasterAndreas Kling
Instead of doing a full IPC round-trip for the client and server to greet each other upon connecting, the server now automatically sends a "fast_greet" message when a client connects. The client simply waits for that message to arrive before proceeding. (Waiting is necessary since LibGUI relies on the palette information included in the greeting.)
2021-05-17WindowServer+LibGUI: Make menubar allocation asynchronousAndreas Kling
Same as with menu allocation, move menubar ID management to the client side, removing more IPC stalls during application startup.
2021-05-17WindowServer+LibGUI: Make menu allocation asynchronousAndreas Kling
This was only synchronous since WindowServer managed the ID allocation. Doing this on the client side instead allows us to make create_menu() an asynchronous IPC call, removing a bunch of IPC stalls during application startup.
2021-05-11WindowServer: Add Optional<Gfx::IntRect> argument to get_screen_bitmap()Valtteri Koskivuori
This way, we can optionally specify a region of the display to capture. Defaults to entire screen if no rectangle is given.
2021-05-10WindowServer: Make set_background_color and set_wallpaper_mode asyncAndreas Kling
Both of these were already used asynchonrously by GUI::Desktop.
2021-05-10WindowServer: Make dismiss_menu() an asynchronous IPC callAndreas Kling
This was already being used asynchronously by LibGUI, which meant that WindowServer would generate a response, and the client would ignore it.
2021-05-10WindowServer: Make popup_menu() an asynchronous IPC callAndreas Kling
This was already being used asynchronously by LibGUI, which meant that WindowServer would generate a response, and the client would ignore it. This patch simplifies the WindowServer side so it no longer generates the unnecessary response.
2021-05-10WindowServer+LibGUI: Make "move window to front" asynchronousAndreas Kling
2021-05-10WindowServer+LibGUI: Make menu and menubar teardown asynchronousAndreas Kling
Clients don't need to wait for WindowServer to tear down a menu or menubar before continuing.
2021-05-03WindowServer+LibGUI: Make much of window construction asynchronousAndreas Kling
Most of the IPC that happens between clients and WindowServer when creating and configuring windows can be asynchronous. This further reduces the amount of ping-ponging played during application startup.
2021-05-03WindowServer+LibGUI: Make much of menu construction asynchronousAndreas Kling
Creating a menu/menubar needs to be synchronous because we need the ID from the response, but adding stuff *to* menus (and adding menus to menubars, and menubars to windows) can all be asynchronous. This dramatically reduces the amount of IPC ping-pong played by each GUI application during startup. I measured how long it takes TextEditor to enter the main event loop and it's over 10% faster here. (Down from ~86ms to ~74ms)
2021-05-03Userland: Use snake case names in .ipc filesGunnar Beutner
This updates all .ipc files to have snake case names for IPC methods.
2021-05-03Userland: Update IPC calls to use proxiesGunnar Beutner
This updates all existing code to use the auto-generated client methods instead of post_message/send_sync.
2021-05-02WindowServer+LibGUI+Taskbar: Store window progress as Optional<int>Andreas Kling
We were previously using the magical constant -1 to signify that a window had no progress state. Be more explicit an use an Optional. :^)
2021-05-01WindowServer: Add Window "modified" stateAndreas Kling
This will be used to track which windows contain some kind of unsaved data that the user may want some help remembering to save. :^)
2021-04-25IPCCompiler: Remove hardcoded endpoint magic, attempt deuxsin-ack
This patch removes the IPC endpoint numbers that needed to be specified in the IPC files. Since the string hash is a (hopefully) collision free number that depends on the name of the endpoint, we now use that instead. :^) Additionally, endpoint magic is now treated as a u32, because endpoint numbers were never negative anyway. For cases where the endpoint number does have to be hardcoded (a current case is LookupServer because the endpoint number must be known in LibC), the syntax has been made more explicit to avoid confusing those unfamiliar. To hardcode the endpoint magic, the following syntax is now used: endpoint EndpointName [magic=1234]
2021-04-25Revert "IPCCompiler: Use string hashes for IPC endpoint magic"Andreas Kling
This reverts commit 59218007a3034c7770b7fa5277ce1eae85bb1c07.
2021-04-25IPCCompiler: Use string hashes for IPC endpoint magicsin-ack
This patch removes the IPC endpoint numbers that needed to be specified in the IPC files. Since the string hash is a (hopefully) collision free number that depends on the name of the endpoint, we now use that instead. :^)
2021-04-17LibGUI+WindowServer: Separate window manager IPC from regular IPCsin-ack
With this patch the window manager related functionality is split out onto a new endpoint pair named WindowManagerServer/Client. This allows window manager functionality to be potentially privilege separated in the future. To this end, a new client named WMConnectionClient is used to maintain a window manager connection. When a process connects to the endpoint and greets the WindowServer as a window manager (via Window::make_window_manager(int)), they're subscribed to the events they requested via the WM event mask. This patch also removes the hardcoding of the Taskbar WindowType to receive WM events automatically. However, being a window manager still requires having an active window, at the moment.
2021-04-02WindowServer+MouseSettings: Add ability to configure double-click speed (#5876)Daniël van de Burgt
This adds a double-click speed slider control to the Mouse Settings panel, and value labels for both the movement speed and double-click speed sliders. To allow for updating and persisting the configured double-click speed through the WindowServer, two IPC calls - `SetDoubleClickSpeed` and `GetDoubleClickSpeed` - have been added.
2021-03-30WindowServer+LibGUI: Plumb mouse/enter/leave events to applet windowsAndreas Kling
Since applet windows live in the applet area window, the AppletManager has to keep track of which applet is hovered and send the appropriate enter/leave events to the applet windows. This makes applet tooltips work again. :^)
2021-03-30WindowServer+Taskbar: Show applets in taskbar :^)Andreas Kling
WindowServer now collects applet windows into an "applet area" which is really just a window that a WM (window management) client can position via IPC. This is rather hackish, and I think we should come up with a better architecture eventually, but this brings back the missing applets since the global menu where they used to live is gone.
2021-03-26WindowServer: Add an IPC call for taking a screenshotAndreas Kling
This patch adds Messages::WindowServer::GetScreenBitmap. It returns the currently displayed on-screen bitmap as-is, as a Gfx::ShareableBitmap.
2021-03-25WindowServer: Remove "system menu" concept from WindowServerAndreas Kling
2021-03-25WindowServer: Remove SetApplicationMenubar IPC messageAndreas Kling
2021-03-25WindowServer+LibGfx: Show menus in windows! :^)Andreas Kling
This patch begins the transition away from the global menu towards per-window menus instead. The global menu looks neat, but has always felt clunky, and there are a number of usability problems with it, especially in programs with multiple windows. You can now call GUI::Window::set_menubar() to add a menubar to your window. It will be specific to that one window only.
2021-02-21WindowServer: Allow changing frameless state after a window is createdTom
2021-02-16WindowServer, LibGUI: Variable minimum window sizesNick Vella
Minimum window size can now be customised and set at runtime via the SetWindowMinimumSize WindowServer message and the set_minimum_size LibGUI::Window method. The default minimum size remains at 50x50. Some behind-the-scenes mechanics had to be added to LibGUI::Window to ensure that the minimum size is remembered if set before the window is shown. WindowServer sends a resize event to the client if it requests a size on create that's smaller than it's minimum size.
2021-02-15WindowServer: Add support for alpha channel based hit testingTom
This enables implementing non-rectangular window shapes, including non-rectangular window frames.
2021-02-01LibIPC: Stop sending client ID to clientsAndreas Kling
The client ID is not useful to normal clients anymore, so stop telling everyone what their ID is.
2021-02-01LibGUI+WindowServer: Don't use a WM IPC to initiate own window resizeAndreas Kling
The WM_* IPC messages are intended for "outsider" window management, not for a client's own windows. Make a separate StartWindowResize message for this. This was the only reason that every IPC client had to know its server side client ID.
2021-01-16WindowServer+LibGUI: Pass the system theme using Core::AnonymousBufferAndreas Kling
This was the last remaining user of shbufs in WindowServer, and so WindowServer no longer pledges "shared_buffer" :^)
2021-01-16WindowServer+LibGUI: Send menu item icons as Gfx::ShareableBitmapAndreas Kling
2021-01-16WindowServer+LibGUI: Pass drag&drop bitmaps via Gfx::ShareableBitmapAndreas Kling
This makes them backed by anonymous files instead of shbufs and also simplifies the code significantly on both client and server side.
2021-01-16WindowServer, LibGUI: RefreshSystemTheme implementationNick Vella
Adds a mechanism through which windowing clients can re-request an UpdateSystemTheme message. This is currently used in SystemMenu's ShutdownDialog to refresh it's theme when the dialog is instantiated.
2021-01-15WindowServer: Add a "scale" parameter to the SetResolution message and plumb ↵Nico Weber
it through Now, `chres 640 480 2` can set the UI to HighDPI 640x480 at runtime. A real GUI for changing the display factor will come later. (`chres 640 480 2` followed by `chres 1280 960` is very fast since we don't have to re-allocate the framebuffer since both modes use the exact same number of physical pixels.)
2021-01-15LibGUI+WindowServer: Use anonymous files for window backing stores :^)Andreas Kling
This patch replaces the use of shbufs for GUI::Window backing stores with the new anonymous files mechanism. Backing bitmaps are now built on memory allocated with anon_create(). They are passed across the IPC socket as IPC::File. This means that WindowServer now pledges "recvfd" and graphical clients need to pledge "sendfd" to work. To support the cached bitmap swapping optimization on the WindowServer side, each backing store is assigned an incrementing serial number on the client side. (This allows us to re-use an already mapped file.)
2021-01-12Services: Move to Userland/Services/Andreas Kling