- Nov 28, 2020
-
-
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> xfce/xfwm4#445 xfce/xfwm4#427
-
Olivier Fourdan authored
Signed-off-by Olivier Fourdan <fourdan@xfce.org> xfce/xfwm4#444 xfce/xfwm4#436 xfce/xfwm4#433 xfce/xfwm4#405
-
Olivier Fourdan authored
When the compositor is disabled on a given screen, there is no point in looking for XID in the hash table. That fixes errors like: g_hash_table_lookup: assertion 'hash_table != NULL' failed When the compositor is disabled. Signed-off-by:
Olivier Fourdan <fourdan@xfce.org>
-
- Sep 19, 2020
-
-
Olivier Fourdan authored
Previously we would leak error traps in free_win_data() causing slowdowns overtime as the list of requests grows. While fixing the leak is crucial, it also unveiled several places where actual error traps are missing, causing xfwm4 to abort more often. Based on XErrors reported, the issue is triggered when freeing pixmaps or render pictures. Add more XErrors traps to catch those errors. Signed-off-by:
Olivier Fourdan <fourdan@xfce.org> xfce/xfwm4#433 xfce/xfwm4#435 xfce/xfwm4#436
-
- Sep 16, 2020
-
-
On my system when the window manager is mostly idling (0-12 tiny updates per second), about half the CPU time in xfwm4 is spent in find_cwindow_in_screen, iterating the linked list looking for a matching Window id. Instead, this patch adds a GHashTable to map Window ids to CWindows, completely eliminating that cost in my profiles, resulting in a 0.3-1.0% of a core total CPU reduction for this workload. Signed-off-by:
Michael Banack <bob5972@banack.net>
-
The call to g_timeout_add in add_repair seems to be mixing up priority and callback interval. Instead, let's call g_timeout_add_full to make it clear there are two separate fields, and add an appropriate define for the callback interval, setting it to the same 1ms value it was currently using. Signed-off-by:
Michael Banack <bob5972@banack.net>
-
- Aug 08, 2020
-
-
On my system, 2-4% of the CPU time in xfwm4 is being spend in find_cwindow_in_screeni() pulling in entries from the linked list on a lightly updating desktop. After this change, 25-50% of that CPU is gone, presumably because the slice allocators have better locality of the list-entries. Closes: #416
-
The function free_win_data() may generate X11 errors as the client window may already be gone. To avoid those, the entire function code is supposed to be enclosed within an error trap/push. A typo in the code would however push twice instead of a balanced push/pop which causes the list of event sequences in GDK to grow indefinitely, leading to slowdowns as the list grows over time. Fix the leak by balancing the error push with an error pop at the end of the function. xfce/xfwm4#351
-
Olivier Fourdan authored
The function compositorCheckCMSelection() would use the atom index in our table of atoms, instead of the actual atom, so this is unlikely to work as expected. Fix the code to use the appropriate atom as it should. Signed-off-by:
Olivier Fourdan <fourdan@xfce.org>
-
Olivier Fourdan authored
Prefer using memory allocation functions which initialize the memory with 0's to be on the safe side. No functional change. Signed-off-by:
Olivier Fourdan <fourdan@xfce.org>
-
- Jul 27, 2020
-
-
Olivier Fourdan authored
A pid is not necessarily a long on all systems, so casting the value of NET_WM_PID directly into a GPid may cause a stack overflow. Fixes: 49c1a33a Closes: #411 Signed-off-by:
Olivier Fourdan <fourdan@xfce.org>
-