summaryrefslogtreecommitdiff
path: root/Servers/WindowServer/WSEvent.h
AgeCommit message (Collapse)Author
2020-01-02WindowServer: Remove unused WSEvent::WM_DeferredComposeAndreas Kling
This was an old event type in the early days of userspace WindowServer.
2020-01-02WindowServer+LibGUI: Taskbar should show all windows from each processAndreas Kling
We were not sending the ID of the window that was listening for window management (WM) events along with the WM messages. They only included the "target" window's ID. Since the taskbar's single window had the first window ID for its own connection to the WindowServer, it meant that it would only receive WM events for the first window ID in other processes as well. This broke when I ported WindowServer to LibIPC. Fix this by including the WM listener ID in all WM messages, and since we're here anyway, get rid of a bunch of unnecessary indirection where we were passing WM events through the WindowServer event loop before sending them to the listener.
2019-12-02WindowServer: Port to the new IPC systemAndreas Kling
This patch introduces code generation for the WindowServer IPC with its clients. The client/server endpoints are defined by the two .ipc files in Servers/WindowServer/: WindowServer.ipc and WindowClient.ipc It now becomes significantly easier to add features and capabilities to WindowServer since you don't have to know nearly as much about all the intricate paths that IPC messages take between LibGUI and WSWindow. The new system also uses significantly less IPC bandwidth since we're now doing packed serialization instead of passing fixed-sized structs of ~600 bytes for each message. Some repaint coalescing optimizations are lost in this conversion and we'll need to look at how to implement those in the new world. The old CoreIPC::Client::Connection and CoreIPC::Server::Connection classes are removed by this patch and replaced by use of ConnectionNG, which will be renamed eventually. Goodbye, old WindowServer IPC. You served us well :^)
2019-12-01WindowServer: Remove unused GetWindowBackingStore IPC requestAndreas Kling
2019-09-16WindowServer+LibGUI: Allow switching windows in/out of fullscreen modeAndreas Kling
You can now call GWindow::set_fullscreen(bool) and it will go in or out of fullscreen mode. WindowServer will also remember the previous window rect when switching to fullscreen, and restore it when switching back. :^)
2019-09-14WindowServer+LibGUI: Store a "data type" with the clipboard contentAndreas Kling
This will allow us to distinguish between different types of data stored on the clipboard.
2019-09-07Applications: Create a display properties managerJesse Buhagiar
An interactive application to modify the current display settings, such as the current wallpaper as well as the screen resolution. Currently we're adding the resolutions ourselves, because there's currently no way to detect was resolutions the current display adapter supports (or at least I can't see one... Maybe VBE does and I'm stupid). It even comes with a very nice template'd `ItemList` that can support a vector of any type, which makes life much simpler.
2019-09-06AK: Rename <AK/AKString.h> to <AK/String.h>Andreas Kling
This was a workaround to be able to build on case-insensitive file systems where it might get confused about <string.h> vs <String.h>. Let's just not support building that way, so String.h can have an objectively nicer name. :^)
2019-08-29WindowServer+LibGUI: Add support for nested menusAndreas Kling
It's now possible to add a GMenu as a submenu of another GMenu. Simply use the GMenu::add_submenu(NonnullOwnPtr<GMenu>) API :^) The WindowServer now keeps track of a stack of open menus rather than just one "current menu". This code needs a bit more work, but the basic functionality is now here!
2019-08-26WindowServer+LibGUI: Show action icons in the menus when possibleAndreas Kling
Any GAction that has an icon assigned will now show up with that icon when added to a menu as well. I made the menu items 2px taller to accomodate the icons. I think this turned out quite nice as well :^)
2019-07-28WindowServer+LibGUI: Remove old "icon path" way of doing things.Andreas Kling
Now that we can set icons directly "by bitmap", there's no need for passing around the icon paths anymore, so get rid of all the IPC and API related to that. :^)
2019-07-28WindowServer+LibGUI: Pass window icons as shared buffers rather than paths.Andreas Kling
Now that we support more than 2 clients per shared buffer, we can use them for window icons. I didn't do that previously since it would have made the Taskbar process unable to access the icons. This opens up some nice possibilities for programmatically generated icons.
2019-07-18LibDraw: Introduce (formerly known as SharedGraphics.)Andreas Kling
Instead of LibGUI and WindowServer building their own copies of the drawing and graphics code, let's it in a separate LibDraw library. This avoids building the code twice, and will encourage better separation of concerns. :^)
2019-07-17Port WSClientConnection to CIPCServerSideClientRobin Burchell
2019-07-03AK: Rename the common integer typedefs to make it obvious what they are.Andreas Kling
These types can be picked up by including <AK/Types.h>: * u8, u16, u32, u64 (unsigned) * i8, i16, i32, i64 (signed)
2019-06-21WindowServer+Taskbar: Let WindowServer manage the "window menus".Andreas Kling
Taskbar now simply asks the WindowServer to popup a window menu when right clicking on a taskbar button. This patch also implements the "close" menu item, and furthermore makes the window menu show up when you left-click a window's titlebar icon. :^)
2019-06-07Meta: Tweak .clang-format to not wrap braces after enums.Andreas Kling
2019-06-01WindowServer+LibGUI: Add a way to bring a window to the front.Andreas Kling
GWindow::move_to_front() can now be used to move a window to the top of the window stack. We use this in Terminal to bring the settings window to the front if it already exists when it's requested, in case it's hiding behind something.
2019-05-28Add clang-format fileRobin Burchell
Also run it across the whole tree to get everything using the One True Style. We don't yet run this in an automated fashion as it's a little slow, but there is a snippet to do so in makeall.sh.
2019-05-24WindowServer: Make it possible to turn off window title bars (#88)Christopher Dumas
Also, Launcher now does not use titlebars. Only check if titlebar should be shown if the window type works with that.
2019-05-17WindowServer: Add support for fullscreen windows.Andreas Kling
Fullscreen windows are rendered alone and above everything else when they are active, and as part of the regular window stack order when something else is active. Currently windows cannot be made fullscreen after-the-fact, but must have the fullscreen flag included in their CreateWindow message. It should not possible to interact with the menu, taskbar or window frame while the active window is fullscreened. :^)
2019-05-16WindowServer/GMenu: Adjust the popup position to fit the window inside the ↵Robin Burchell
screen Rather than passing a "top_anchored" bool. Fixes #22.
2019-05-15Move double click events from LibGUI to the window serverRobin Burchell
2019-05-13WindowServer+LibGUI: Handle mouse wheel deltas in the mouse event stream.Andreas Kling
The wheel events will end up in GWidget::mousewheel_event(GMouseEvent&) on the client-side. This patch also implements basic wheel scrolling in GScrollableWidget via this mechanism. :^)
2019-05-12Change String&& arguments to const String& in a couple of places.Andreas Kling
String&& is more nuisance than anything, and the codegen improvement is basically negligible since the underlying type is already retainable.
2019-05-03WindowServer+LibGUI: Allow changing whether windows have alpha channels.Andreas Kling
Use this in Terminal to tell the window server to not bother with the alpha channel in the backing store if we're running without transparency. Semi-transparent terminals look neat but they slow everything down, so this keeps things fast while making it easy to switch to the flashy mode. :^)
2019-05-03LibGUI+WindowServer: Add a GResizeCorner widget.Andreas Kling
This widget is automatically included in GStatusBar, but can be added in any other place, too. When clicked (with the left button), it initiates a window resize (using a WM request.) In this patch I also fixed up some issues with override cursors being cleared after the WindowServer finishes a drag or resize.
2019-04-26LibGUI+WindowServer: Make it possible to have checkable GActions.Andreas Kling
They show up as checkable GButtons in GToolBar, and with (or without) check marks in menus. There are a bunch of places to make use of this. This patch only takes advantage of it in the FileManager for the view type actions.
2019-04-23WindowServer+TaskBar: Add a taskbar window button popup menu.Andreas Kling
This patch only hooks up the minimize and unminimize actions.
2019-04-20WindowServer+LibGUI: Coalesce multiple client paints into GMultiPaintEvents.Andreas Kling
This allows GWindow to paint up to 32 separate rects before telling the WindowServer to flip the buffers. Quite a bit smoother. :^)
2019-04-20WindowSerer+LibGUI: Send multiple rects in invalidation/flush messages.Andreas Kling
This patch moves to sending up to 32 rects at a time when coordinating the painting between WindowServer and its clients. Rects are also merged into a minimal DisjointRectSet on the server side before painting. Interactive resize looks a lot better after this change, since we can usually do all the repainting needed in one go.
2019-04-20WindowServer: Introduce a WM event mask so Taskbar can ignore window rects.Andreas Kling
Taskbar was waking up to do nothing every time a window rect changed.
2019-04-18WindowServer: Generate a separate WM event for window icon changes.Andreas Kling
2019-04-14WindowServer: Rename WSMessage* => WSEvent*.Andreas Kling
Since I'm on a roll here, I'll just rename WSMessageFoo to WSEventFoo now that these inherit from CEventFoo anyway.