summaryrefslogtreecommitdiff
path: root/Servers/WindowServer
AgeCommit message (Collapse)Author
2020-02-06LibCore: Remove leading C from filenamesAndreas Kling
2020-02-06LibIPC: Remove leading I from filenamesAndreas Kling
2020-02-06LibGfx: Prefer using Gfx::Bitmap::load_from_file instead of load_png()Andreas Kling
Code that just wants to open a Gfx::Bitmap from a file should not be calling the PNG codec directly.
2020-02-06LibGfx: Unpublish Gfx::Size from the global namespaceAndreas Kling
2020-02-06LibGfx: Unpublish Gfx::Point from global namespaceAndreas Kling
2020-02-06LibGfx: Unpublish Gfx::Rect from global namespaceAndreas Kling
2020-02-06LibGfx: Rename GraphicsBitmap.{cpp,h} => Bitmap.{cpp,h}Andreas Kling
2020-02-06LibGfx: Rename from LibDraw :^)Andreas Kling
2020-02-06LibDraw: Put all classes in the Gfx namespaceAndreas Kling
I started adding things to a Draw namespace, but it somehow felt really wrong seeing Draw::Rect and Draw::Bitmap, etc. So instead, let's rename the library to LibGfx. :^)
2020-02-05LibIPC: Put all classes in the IPC namespace and remove the leading IAndreas Kling
2020-02-05WindowServer: Remove unused s_checkbox_or_icon_paddingjoshua stein
2020-02-04WindowServer: Fix the drain mouse mechanismLiav A
Now we actually check if the Mouse packet relative flag is enabled or not. In addition to that, we have debug messages for mouse point changes.
2020-02-04WindowServer: Preliminary absolute mouse positioning supportSergey Bugaev
2020-02-02LibCore: Put all classes in the Core namespace and remove the leading CAndreas Kling
I've been wanting to do this for a long time. It's time we start being consistent about how this stuff works. The new convention is: - "LibFoo" is a userspace library that provides the "Foo" namespace. That's it :^) This was pretty tedious to convert and I didn't even start on LibGUI yet. But it's coming up next.
2020-02-02WindowServer: Fix for Changing Screen Resolution Resets.Hüseyin ASLITÜRK
Fixes #816.
2020-02-01WindowServer: make menus wrap verticallyOliver Kraitschy
This commit adds vertical wrap to menus. The first item is focused if Key_Down is pressed on the last item and the last item is focused if Key_up is pressed on the first item.
2020-01-25WindowServer: Don't allow minimize/maximize of windows while modal upAndreas Kling
While one window is blocked by another modal one, just ignore events on the window frame, and also ignore set_minimized() and set_maximized(). The only thing you're allowed to do with a blocked window is moving it. Fixes #1111.
2020-01-25WindowServer: Robustify WSWindow<->WSClientConnection link a bitAndreas Kling
WSWindow now detaches from WSClientConnection when being destroyed. Because of this, we can no longer rely on WSWindow::client() to tell us whether a window is internal to WindowServer or not. So instead we now have WSWindow::is_internal() which checks for client_id == -1. Note that WSWindow now also gets a copy of its client_id when constructed, since we can no longer rely on client() being valid after destruction has started. This allows various automatic mechanisms (e.g what happens in response to window removal) to skip over windows that are being destroyed. Fixes #387.
2020-01-25WindowServer: Tear down WSClientConnection asynchronouslyAndreas Kling
If something goes wrong when trying to message a windowing client, we now tear it down *on next event loop* instead of immediately. This avoids having to deal with disconnected windows suddenly disappearing from window lists while looping over them.
2020-01-21WindowServer: unveil("/bin", "x") so we can start applicationsAndreas Kling
Without this, we can't start programs via the system menu. This begs the question: should WindowServer really be allowed to fork and exec in the first place?
2020-01-20WindowServer: Use unveil()Andreas Kling
WindowServer needs persistent access to a few things: - /res (for themes, fonts, cursors, apps, wallpapers, etc.) - /etc/passwd (for username lookup, not sure this is actually needed..) - /home/anon/WindowManager.ini (FIXME: this should not be hard-coded..) These things are unveiled temporarily, and then dropped: - /tmp (for setting up sockets) - /dev (for opening input and framebuffer devices) This leaves WindowServer running with a very limited view of the file system, how neat is that!
2020-01-20WindowServer: Simplify WSMenu MouseWheel eventShannon Booth
A mouse move event needs to do a bit more work than what a mouse wheel event does. Mouse wheel just needs to update the hovered item, and update for a new hovered item. This also stops us from calling redraw() twice on a wheel event.
2020-01-20WindowServer: Stop infinite menu movement cycleShannon Booth
While I really enjoyed having an infinite cycle when I implemented menu keys (and seeing it wizz around and around :D), menu key movement should be consistent between menus - and an inifinite cycle does not make much sense for a scrollable menu.
2020-01-19WindowServer: Allow scrolling of menus that don't fit on screenAndreas Kling
Menus now have a scroll offset (index based, not pixel based) which is controlled either with the mouse wheel or with the up/down arrow keys. This finally allows us to browse all of the fonts that @xTibor has made avilable through his serenity-fontdev project: https://github.com/xTibor/serenity-fontdev I'm not completely sure about the up/down arrows. They feel like maybe they occupy a bit too much vertical space. Also FIXME: this mechanism probably won't look completely right for menus that have separators in them. Fixes #1043.
2020-01-19WindowServer: More natural mouse menu navigationShannon Booth
Use an imaginary triangle between the top and bottom of the submenu of a hovered item to determine whether the mouse is moving towards the submenu. If it is, we do not update the hovered item. This allows the submenu to stay open, making for much easier menu navigation. Closes #1094
2020-01-18WindowServer: Print the error when failing to open /dev/fb0Sergey Bugaev
2020-01-18Meta: Add license header to source filesAndreas Kling
As suggested by Joshua, this commit adds the 2-clause BSD license as a comment block to the top of every source file. For the first pass, I've just added myself for simplicity. I encourage everyone to add themselves as copyright holders of any file they've added or modified in some significant way. If I've added myself in error somewhere, feel free to replace it with the appropriate copyright holder instead. Going forward, all new source files should include a license header.
2020-01-18WindowServer: Stop tracking hovered menu independently from the index (#1093)shannonbooth
Tracking the hovered menu item independently from the index of the currently hovered item is error prone and bad code. Simplify WSMenu by only tracking the index of the currently hovered item. Fixes #1092
2020-01-18WindowServer: Fix windowswitcher not closing, make system menu a toggleShannon Booth
We were swallowing the keyevent on a Logo key down even if we were not opening the logo. This is incorrect, and was preventing the windowswitcher from closing. We also make the logo button toggle the system menu, as this behaviour is closer to how you would normally expect this button to work. Closes #1090
2020-01-18WindowServer: Add toggle_menu helper functionShannon Booth
2020-01-17Kernel: Add "accept" pledge promise for accepting incoming connectionsAndreas Kling
This patch adds a new "accept" promise that allows you to call accept() on an already listening socket. This lets programs set up a socket for for listening and then dropping "inet" and/or "unix" so that only incoming (and existing) connections are allowed from that point on. No new outgoing connections or listening server sockets can be created. In addition to accept() it also allows getsockopt() with SOL_SOCKET and SO_PEERCRED, which is used to find the PID/UID/GID of the socket peer. This is used by our IPC library when creating shared buffers that should only be accessible to a specific peer process. This allows us to drop "unix" in WindowServer and LookupServer. :^) It also makes the debugging/introspection RPC sockets in CEventLoop based programs work again.
2020-01-15WindowServer: Do not open system menu after window tilingShannon Booth
2020-01-13WindowServer: Add "thread" pledge since we need it for wallpapersAndreas Kling
Longer-term we should come up with a design where WindowServer doesn't have to decode untrusted image files.
2020-01-12WindowServer: Send key events to menu manager is there is a current menuShannon Booth
If there is a current menu, we now redirect all key events from window manager to the menu manager. This allows us to properly navigate a menu even when there is a current menu open. Menu key navigation is now a lot more pleasant to use :^) The action of pressing escape to close a menu has also been moved to its proper home in menu manager in this commit.
2020-01-12WindowServer: Fix non-submenus being closed when set as current menuShannon Booth
set_current_menu() was indiscriminately closing all menus when the current menu is not a submenu. We should only close menus not in lineage to the one being closed.
2020-01-12WindowServer: Fix incorrect current menu when switching to new itemShannon Booth
We were forgetting to update the current menu when switching to a new item. We also rename the function from implying that only a redraw is happening, as is actually not the case. It is now more correctly named: update_for_new_hovered_item()
2020-01-12WindowServer: Actually don't bring up system menu during move/resizeAndreas Kling
It was still possible to pop up the system menu by letting go of the mouse button before letting go of the Logo key. This patch fixes that.
2020-01-12Kernel: Add "video" pledge for accessing framebuffer devicesAndreas Kling
WindowServer becomes the only user.
2020-01-12WindowServer: Don't show system menu on Logo KeyUp during move/resizeAndreas Kling
2020-01-11Kernel: fork()ed children should inherit pledge promises :^)Andreas Kling
Update various places that now need wider promises as they are not reset by fork() anymore.
2020-01-11WindowServer: Use pledge()Andreas Kling
2020-01-11WSWindowManager: Improve opening and closing the system menuShannon Booth
The system menu can now be opened by pressing the window key even while in a focused window. The current menu can also now be closed by pressing escape. We still cannot navigate a menu using arrow keys while there is an active window, but this is another step towards that.
2020-01-11WSMenuManager: Fix set_current_menu() not setting the current menuShannon Booth
m_current_menu was being set and then immediately cleared by close_everyone(). Furthermore, since the menu being set can be a nullptr, we now also make sure to handle that. Finally, the logic can be simplified. close on the current menu is not required, as that is also done by close_everyone().
2020-01-11WindowServer: If a menu can't fit on screen, at least put it at y=0Andreas Kling
We're gonna need to handle overflow better than this, but at least this way we can see the top of the menu, even if we can't scroll down to see the rest of it. For #1043.
2020-01-08WindowServer+LibGUI: Paint exclusive actions as radio buttons in menusAndreas Kling
Actions that are checkable and members of a GActionGroup will now be painted with a radio button appearance in menus.
2020-01-08WindowServer: Detach WSMenuManager from WSWindowManagerAndreas Kling
You can now get to the WSMenuManager via WSMenuManager::the(). Also note that it's initialized after WSWindowManager.
2020-01-08Revert "WSWindowServer: Remove uneccessary special casing"Andreas Kling
This reverts commit 0c1bc91e8832bca4fe6563ba77f9986be6164841. It turns out this is what made it possible to hover "between" different menus after opening one of them with a click.
2020-01-08WSWindowServer: Only close menubar on a mouse downShannon Booth
This allows you to click on the menu, then use the menu keys to browse the menu. Beforehand, you would click the window, release the button, and the menu would close :(
2020-01-08WSWindowManager: Use early return to limit nestingShannon Booth
Let's be a little nicer on the eyes :^)
2020-01-08WSMenu: Support menu navigation through key pressesShannon Booth
Add event handling for key presses for navigating a menu. The currently hovered menu item is tracked through an index which is either incremented or decremented on up or down arrow key presses, changing the hovered item. Whenever there is a mouse move event, we ensure that the current index matches the currently hovered item so that the mouse and keyboard do not get out of sync. If the right key is pressed, and we are on a submenu menu item, we 'enter' that submenu. While we are currently in a submenu, we forward all keypress events to that submenu for handling. This allows us to traverse the heirachy of a menu. While in a submenu, if the left key is pressed, we leave that submenu and start handling the keypresses ourselves again. There is currently a small issue where the mouse hover and key hover can get out of sync. The mouse can be traversing a submenu, but the parent menu has no idea that the mouse has 'entered' a submenu, so will handle the key presses itself, instead of forwarding them to the submenu. One potential fix for this is for a menu to tell its menu parent that the submenu is being traversed.