- Dec 01, 2020
-
-
The function prototypes are already a GSourceFunc, no need to cast the pointer. Remove a gpointer casts. Signed-off-by:
Olaf Hering <olaf@aepfle.de>
-
- Nov 29, 2020
-
-
Olivier Fourdan authored
Older epoxy versions may not provide all GL functions, causing the build to fail. Make sure to check for function availability. Signed-off-by:
Olivier Fourdan <fourdan@xfce.org>
-
Note: This cannot work with CSD (client-side decoration), as double- click is handled by the client and not by the window manager with CSD. Closes: #1
-
- Nov 28, 2020
-
-
Olivier Fourdan authored
XFixesSetPictureClipRegion() with the region from the client window can cause a RenderBadPicture error. Make sure to include it within the XError trap. Signed-off-by:
Olivier Fourdan <fourdan@xfce.org> #460
-
Olivier Fourdan authored
When using GLX, xfwm4 relies on glXSwapBuffers() for vblank. Normally, glXSwapBuffers() is non blocking, unless the previous call is still pending. That means that if xfwm4 queues glXSwapBuffers() faster than the refresh rate, the following calls will be blocking, stalling the window manager completely, which is bad for obvious reasons. To avoid queuing a new glXSwapBuffers() before the previous one is complete, use a GL sync mechanism. Typically, we insert a GL Sync object just after the glXSwapBuffers() command, and check if the GL Sync is triggered before redrawing again, just like we do with Xpresent. Signed-off-by:
Olivier Fourdan <fourdan@xfce.org>
-
Olivier Fourdan authored
Just a small code rework, no functional change. This is a preparation work for GL Sync which will do something similar for the GLX backend. Signed-off-by:
Olivier Fourdan <fourdan@xfce.org>
-
Olivier Fourdan authored
Debug mode means compiling with "-Werror", clean up various leftovers breaking the build in debug. Signed-off-by:
Olivier Fourdan <fourdan@xfce.org>
-
Olivier Fourdan authored
The Xpresent header check for PRESENT_FUTURE_VERSION but it's not set anywhere. Just set it to avoid a compilation issue with WError. Signed-off-by:
Olivier Fourdan <fourdan@xfce.org>
-
Olivier Fourdan authored
For debugging purpose, log the time spent waiting on the fence sync and the redrawing time, including the time spent in glXSwapBuffers(). Signed-off-by:
Olivier Fourdan <fourdan@xfce.org>
-
Olivier Fourdan authored
Just a small code rework, no functional change. Signed-off-by:
Olivier Fourdan <fourdan@xfce.org>
-
Olivier Fourdan authored
Just a small code rework, no functional change. Signed-off-by:
Olivier Fourdan <fourdan@xfce.org>
-
Olivier Fourdan authored
If either the GLX_MESA_swap_control or the GLX_EXT_swap_control extension is available, use it to set the swap interval to 1. Signed-off-by:
Olivier Fourdan <fourdan@xfce.org>
-
Olivier Fourdan authored
When using multiple buffers, no need to set all possible buffers, just set the right number of buffers actually used per vblank backend. Signed-off-by:
Olivier Fourdan <fourdan@xfce.org>
-
Olivier Fourdan authored
If GLX was configured (at build time) to use multiple buffers, we would still use a single GLX drawable. Assign a GLX drawable per buffer instead - Note that this doesn't make any difference in the default case, as GLX uses a single buffer anyway. Signed-off-by:
Olivier Fourdan <fourdan@xfce.org>
-
- Nov 22, 2020
-
-
Olivier Fourdan authored
We would not allow transients for group to be minimized as long as a parent is still visible. Be more lenient with those, allow those to be minimized independently of their parents. Signed-off-by:
Olivier Fourdan <fourdan@xfce.org> Closes: #349
-
- Nov 21, 2020
-
-
Olivier Fourdan authored
The window menu entries would check for valid transients or modal dialog window to enable or disable the above/below entries. Yet the actual above/below function would simply check for any transient or modal dialog, hence denying the request for fake dialogs without an actual parent window. Fix the logic to remain consistent, and allows fake dialogs to be placed above or below other windows. Signed-off-by:
Olivier Fourdan <fourdan@xfce.org> Closes:#458
-
Olivier Fourdan authored
When an offscreen window is damaged, there is no need to repaint any screen region. Limit damage to the screen region only. Signed-off-by:
Olivier Fourdan <fourdan@xfce.org>
-
Olivier Fourdan authored
When using no vblank, with a single buffer, no need to render the entire screen. Optimize rendering by limiting the repaint to the damage region. Signed-off-by:
Olivier Fourdan <fourdan@xfce.org>
-
Olivier Fourdan authored
When using Xpresent, the compositor maintains multiple pixmap buffers and therefore needs to accumulate damages for those multiple buffers. However, when using GLX or no vblank method at all, there is only one buffer pixmap and there is no need to accumulate damage between buffers. Currently, the compositor would accumulate damage indefinitely when using GLX or no vblank, hence damaging way more than actually necessary. Fix this by accumulating damages only when there is more than one buffer. Signed-off-by:
Olivier Fourdan <fourdan@xfce.org>
-
Olivier Fourdan authored
By definition, the content of the back buffer is undefined, therefore we need to copy the entire content on flip with GLX. Signed-off-by:
Olivier Fourdan <fourdan@xfce.org>
-
Olivier Fourdan authored
XSync can fail, handle the XError gracefully. Signed-off-by:
Olivier Fourdan <fourdan@xfce.org> Closes: #448
-
- Nov 15, 2020
-
-
Olivier Fourdan authored
Typically, the opaque region applies to the client window. When shaded, the client window is unmapped and the frame shrunk to its minimum height. When shaded, the opaque regio nshould simply be ignored as the client window is no longer visible. Signed-off-by:
Olivier Fourdan <fourdan@xfce.org> Closes: #452
-
Olivier Fourdan authored
The opaque region was clipped against the compositor window extents, which might be larger than the window as it can also include the drop shadows of the server-side decorations. Clip the opaque region against the border size and the client size if available instead. Signed-off-by:
Olivier Fourdan <fourdan@xfce.org>
-
- Nov 14, 2020
-
-
Olivier Fourdan authored
The client might be gone, and trying to kill the X11 client might cause an unhandled XError. Make sure to protect XKillClient against XError. Signed-off-by:
Olivier Fourdan <fourdan@xfce.org> Closes: #453
-
Olivier Fourdan authored
If the opaque region is correctly translated and intersect with the actual window extents, there should be no need to generate additional damages when the opaque region is updated. Signed-off-by:
Olivier Fourdan <fourdan@xfce.org>
-
Olivier Fourdan authored
The opaque region is set by the client, and applies to the client window. Therefore the opaque region should be translated to match the actual client window, not the composited windows which may be the window manager frame window. Signed-off-by:
Olivier Fourdan <fourdan@xfce.org> Closes: #452
-
Olivier Fourdan authored
Small optimization, the clientSize represents the actual client region, there is no need to recompute that each time when painting. Signed-off-by:
Olivier Fourdan <fourdan@xfce.org>
-
Olivier Fourdan authored
We now store the current tile mode along with the client, that makes it possible to toggle back and forth between tile modes and back to the initial position/location. Signed-off-by:
Olivier Fourdan <fourdan@xfce.org>
-
Olivier Fourdan authored
No need to preset the size when re-computing the tile size. Signed-off-by:
Olivier Fourdan <fourdan@xfce.org>
-
- Nov 11, 2020
-
-
Olivier Fourdan authored
Tiling works by moving and resizing windows to a specific location on screen. GTK clients using client-side decorations (aka CSD) draw the drop shadow themselves and use the property _GTK_FRAME_EXTENTS to let the window manager or compositor know about the actual relative frame size and location. GTK automatically removes the drop shadow on some specific window states, such as fullscreen or maximized, and restores the drop shadow when the window returns to a normal state. If that update occurs after the tiled size was computed, the drop shadow is not accounted for and the window will appear smaller than the actual expected tiled size. To avoid that issue, the window manager should recompute the tiled size whenever the _GTK_FRAME_EXTENTS is updated. Store the tiled mode and recompute the tiled size/location of windows when the frame extents or the screen size change. Signed-off-by:
Olivier Fourdan <fourdan@xfce.org> Closes: #450
-
Olivier Fourdan authored
Right now, resizing a window would immediately update the compositor representation of that window. The compositor, however, is able to catch the changes on configure notify, so there is no need to force that update early. Remove the resize of the compositor window on each configure requests. Signed-off-by:
Olivier Fourdan <fourdan@xfce.org>
-
Olivier Fourdan authored
The opaque region is set and updated by the client, which may lag when the window is resized. That may leave unpainted areas when resizing a window as the opaque region set by the client could be actually larger than the window itself and hence prevent areas to be updated while they should, causing artifacts on screen. Make sure to limit the clipping of the opaque region by the window extents to avoid the issue. Signed-off-by:
Olivier Fourdan <fourdan@xfce.org>
-
Olivier Fourdan authored
If a client updates the opaque region of its window, regions previously opaque may become transparent, meaning that they would need to be repainted to let other windows underneath see through. The compositor already computes that and adds damage for the relevant regions. Make sure to do that only for visible and redirected windows, other windows shouldn't trigger that though. Signed-off-by:
Olivier Fourdan <fourdan@xfce.org>
-
- Nov 04, 2020
-
-
Olivier Fourdan authored
xfwm4 sends a synthetic configure event when required as per the ICCCM specification, but a force redraw as when maximizing a window while moving generates a fake move, which defats the logic. Make sure to send a synthetic configure event on force redraw, that fixes an issue with VTE terminals (like xfce4-terminal) which do not resize correctly if maximized while pushing toward the top of the screen. Signed-off-by:
Olivier Fourdan <fourdan@xfce.org>
-
- Nov 01, 2020
-
-
Olivier Fourdan authored
If the window has no opaque region, no point in trying to clip it out and return immediately. No functional change. Signed-off-by:
Olivier Fourdan <fourdan@xfce.org>
-
Olivier Fourdan authored
When using multi buffers (Present, GLX), if the client updates its opaque region in between (e.g. when resizing the window) we may cull out regions on screen that won't get updated, leaving trails of unpainted areas. To avoid that, make sure we add damage for the delta in opaque region. Signed-off-by:
Olivier Fourdan <fourdan@xfce.org>
-
- Oct 31, 2020
-
-
Olivier Fourdan authored
Opaque region is a hint set by the clients via the _NET_WM_OPAQUE_REGION property to indicate the compositor which regions of an ARGB window are considered opaque and therefore can be culled out during repaint. While this is of little use with regular RGB windows, with the planned move to client-side decorations in xfce, we'll have more and more ARGB windows, making such an optimization a beneficial improvement. Signed-off-by:
Olivier Fourdan <fourdan@xfce.org>
-
Olivier Fourdan authored
Xfwm4 4.14 made the cursor zoom along with the desktop. While this sounds like a sensible thing to do, it's not necessarily an improvement for accessibility, because an enlarged cursor also hides what's being zoomed underneath. Add a new option to control whether the pointer is zoomed along with the rest of the desktop. Signed-off-by:
Olivier Fourdan <fourdan@xfce.org> Closes: xfce/xfwm4#439
-
- Oct 30, 2020
-
-
- Oct 27, 2020
-
-
Olivier Fourdan authored
Make Xi2 support selectable at configure time and disable it by default. Xi2 in the window manager causes some very subtile bugs with legacy applications using the core X11 protocol. Signed-off-by:
Olivier Fourdan <fourdan@xfce.org> #445 #427
-