 I am back! Did you miss me? I know you missed me. As you know, I am a big kitty fanboy, and that should come as a no surprise. However, I did use GNOME in the past even for months, and there are so many good things that they have that we don't. If you scroll through my videos, you'll see one where I recap what I do and what I don't like of that desktop environment. And there is one thing in particular that I praise a lot, and it's a great overview with great one-to-one gestures. If you swipe up, you zoom out from your desktops and all your windows move into a grid. And if you yet again swipe up, you get to see all of your desktops with all of your apps and all of your applications. It's lovely because it's so intuitive. Opening the overview is like taking a step back, and Daplist is taking one further step back. And this is so intuitively expressed by Justus, and by the double-click meta key to directly switch to the app views concept. I love the GNOME overview. Kedi does have an overview to be clear. It looks like this, which is great to be clear. It looks a bit like Chrome OS, and it's mostly fine, but it does have some significant issues. Firstly, it only displays a rose of virtual desktops on the top, even if you have a vertical set of desktops, or even if you use a desktop grid. This to me renders that bar basically useless because my desktops look like this, not like this. You must like to think of things through spatial reasoning, and if we have a desktop grid, it has to be a desktop grid. Even worse, this is what happens when you switch between desktops whilst being in the overview. I mean, I guess it works, but again, this really destroys our special recognition of desktops. We can't have windows appear and vanish into thin air. And if you try to switch to another desktop by clicking on that bar, this happens, which feels terribly, terribly wrong. I don't even know how to explain this. So this is the situation. GNOME's overview beats us easily in my humble opinion. So last week I started discussing with other developers how the situation could improve. And my pitch was, what if we combine the overview and the desktop grid in such a way that if you toggle the overview one time you see your desktop and your open windows, and if you press it again, you see the grid. From a special point of view, it makes sense. You press it one time, and it's like taking a small step back to see the current desktop. You press it again, and it's taking yet another step back to see all of your desktops. And if you click on another desktop, you can take a step towards that one and see all the open apps in there. So I started implementing it. The first thing I changed is the animation when you open the overview. Previously it just faded to white with some blur, which is okay, but again I do want to go with this special reasoning idea that GNOME uses, so I copied them. And I made the animation simply this zoom the desktop. All other components, like the search and the desktop bar, will simply be shown when the desktop becomes smaller. This has the side effect that now the title of the application is super hard to read, so I quickly edited the text to have a strong shadow like desktop files so that it's still readable. There is a little issue. In the current overview, you can search for stuff and the windows will disappear to make space for the search results. However, I cannot display the results on the desktop, and that's completely unreadable. So what I do is simply make the whole desktop disappear to leave space to the search results. I'm not completely solved on this behavior, but I couldn't find an easy way to solve it, so it is what it is. Maybe I should put like a white transparent blue rectangle on top of the desktop? I don't know. Next up is the desktop bar. Now, that bar completely makes sense if you have a horizontal set of desktops. It does not. However, if you have a desktop grid, so I decided to just hide it if that's the case. There is no way we can fit an entire grid in that little space. However, if you have a vertical set of desktops, I can simply move the desktop bar from top to the left. So I did that. And honestly, wow, that looks so cool. So now we have a better animation and a better desktop bar. I would say this is already a very nice step up from the current overview, but it's nowhere near enough. Now, we need the core stuff, which is the grid view if you again trigger the overview, like through the shortcut. Here's the big issue of this whole thing. There's an element called the window heap that shows the various windows you have on your desktop. It also handles the transition from the normal window positions to the one in the overview. However, I cannot in any circumstance move this element around. If I ever change the x or y or width or height properties, that's going to break the animations and the windows are going to animate to the incorrect places when you close the overview. Normally, that's not an issue because you never actually move the window heap around. Just position it in the target position and the little thing is going to handle the animations. However, if I want to switch from the desktop to the grid view, I do have to move the windows heap of all desktops around. And that's an issue. I lost some good hours on this, but the solution is actually quite elegant. You set the windows heap to be fullscreen always and you never actually move it through x, y and such. Instead, we can use transforms, such as translate and scale. These make the window heap believe it's still in the same position, but they allow me to actually move the heaps around after they have been drawn. This fixes the animation, and I gotta say it makes the code actually much more readable because normally it would be x coordinate is this if you're into the grid, is this if you're normal or view, is this if you're not. And then you have to interpolate within those values to do the animations. It's messy. Instead, I can just have one translation and scale for each position and everything is gonna work out mathematically. So now we are able to zoom out and, well, that looks good. Like really good. So right now we're able to use the shortcut meta w to switch between the three modes. However, we would like, obviously, to also support touchpad and touchscreen gestures. So let's talk gestures. The overview can ask for a certain gesture, such as four fingers up. Then I get a value from 0 to 1, depending on how much of the gesture the user did, 0, 1. And I can set a custom behavior when the gesture has been completed. The first part then is pretty obvious. I have my translation that moves the desktop by a certain amount, x and y, and I just multiply those values by the gesture value, which is going to give me the animation 0, 1. If the gesture is completed, I check if the value is more than 0.5, and if so, I just switch to the next state, from nothing to the overview, from the overview to the grid view, and from the grid view to nothing. Simple enough. Now, obviously, I would also like to be able to go back if I do the opposite gesture. This means that four fingers up goes to the overview in grid, and four fingers down goes back, or it allows you to directly access the grid view. This is pretty easy to do, right? I can just register both a four fingers up gesture and a four fingers down, and then I have one value for the four fingers up scroll, and one value for the fingers down scroll. Now, here I actually run into some significant problem, which again took hours to debug. Basically what happens if you start doing an up gesture and then slightly go down, you will end up having both an up gesture and a down gesture running at the same time. So the solution was simply to write down somewhere which gesture started first, and only consider that one. This way I was able to make up, zoom out the desktops, and four fingers down zoom in the desktops. And I mean, look at this, I can zoom out, I can zoom back in, it's so freaking beautiful. Next up is touch screen gestures, which luckily enough work in the same way as touchpad ones, so I just had to kindly ask Ewing to give me both three fingers up and three fingers down, and I could just reuse the same code I had for touchpad gestures. This means that you will be able to switch desktops left and right, but also toggle overview and grid screen with a three finger gesture anywhere on the screen. I think this is working great, and I'm super proud of it. There was a small hiccup, you could say, but not really, like basically the same day I implemented all of this, another developer not at the sprint worked on an improvement on one to one gesture. That basically said, instead of having both overview and the desktop grid manage the gestures themselves, let's make a K-Win API that manages them and improve that API significantly. And to be clear, it's a clear step up from what we had, since it supports stuff like three fingers up to open and three fingers down to close. However, this is a pretty big, however, it's entirely implemented around the idea of switching between Tuesdays, whereas I've done all of the work around the idea of having three. And my work and the work of that merge request are completely incompatible with each other. So I'm not exactly sure how that will be resolved, especially considering that their work is ready, whereas mine isn't. But yeah, we'll see. Now we still have a small issue, if you switch from one desktop to another whilst in the overview by, as an example, doing a three fingers swipe on the touchpad, it will switch to the next desktop immediately with no sort of transition whatsoever. This is the code that was remaining from the whole overview and I really didn't like it, as I wanted some transition to happen. Now here's the issue. Ideally, it would be really easy to have just a normal transition when a switch from one desktop to another, I just have to animate the position of the desktops. This would work just fine for users switching between virtual desktops using the shortcut. However, it's going to be completely broken as soon as you try to switch with a touchpad, because animation would only happen as soon as you hand the gesture and it wouldn't have any sort of one-to-one feedback that you instead do have when the overview is not active. A third, there's only one solution. I have to incorporate this light effect inside the overview as well. That way I would have one queen effect to manage the overview, the desktop grid and also the sliding between desktops. However, this would effectively means, because of technical reasons, completely getting rid of any other desktop grid transition, such as fade or the desktop cube in case anybody brought it back. Not amazing. Luckily for us, the sprints are a great way to bring lots of minds together, so after a quick call with Vlad, a queuing maintainer and a talk with other developers here, I found that a one-to-one virtual desktop gesture is not actually managed by the slide effect as a third, but by queuing itself. And only then, it is queuing that tells the slide effect, hey, there's the one-to-one gesture value. So what I can do as the overview effect is to also read that one-to-one value and just draw the one-to-one gesture animation as well. That's it. This meant that now, not only you can open the overview with a swipe of your fingers, but you can also directly switch between workspaces and that action will still follow your fingers, just like a gnome. Which to be fully honest, that was my reference implementation of a great overview. At this point in time, I was quite tired of working on the overview, but nonetheless I went to Nate and Marcon and asked, hey, is there anything else we'd like to see the overview do before I stop working on it? And there was just one thing left, a pretty obvious one. The behavior of clicking on the desktoper. When you do that, again, instead of switching to that desktop, you just zoom in, which looks again wrong to me. Likely enough, it was really easy to just say, hey, when you click to a virtual desktop, yes, you should switch to that desktop, but no, you shouldn't close the overview and you shouldn't make any kind of zooming in animation. Don't do that, please. Boom, done. And since I was there, I decided to make corners a bit more rounded, because why not? Okay, almost done. All the features are there, we're just missing a lot of polish, namely stuff like being able to drag and drop windows between desktops when you are in the desktop grid view and being able to drag and drop entire desktops and keyboard shortcut support as soon as that is done, we're basically ready to go. And luckily that part is significantly harder than it might look. So what I decided to do is just literally copy paste all of the code from the existing desktop grid. And of course, it didn't work out of the box, but with a bit of a more effort, I managed to get a dragon dropping windows from one desktop to another working. It really helped that the functionality is basically provided out of the box by the window head that I talked about. However, this is where I just burned out picture me working on the overview for three days straight, going to sleep at 3 a.m. Just to finish off stuff and arriving late at the sprint to get some sleep. In my defense, I just cannot sleep when I'm working on something I like. My mind just doesn't stop thinking about all the implementation stuff. So the new effect is basically done. I'm just missing a few things that I'm like too tired to implement right now. So with that, I will say A, if I was able to attend the sprint, it's thanks to Katie, who actually covered the traveling and hotel costs. Otherwise, no way I could have gone there and paid for an hotel and everything. This is why it's so important to donate to Katie. The money actually goes into hiring developers and supporting volunteers. B, if I was able to attend the sprint, it's thanks to Tuxedo, who actually hosted it. They gave us their office rooms for free, which is super nice from them. And if I was able to attend the sprint, it's thanks to all of you and Malibu for sponsoring the channel. Otherwise, I wouldn't be able to keep up with all of this and even make videos about it. So if you're able to donate to Katie, that helps Katie a lot. If you're able to donate to me, Patreon, Libra, pay people, Ko-fi, anything that also helps a lot. And I do give some perks, such as a sort of daily podcast. And I am also holding you hostage. I have done the code, but almost only almost. I need to finish it, and I will not finish it unless you all become Patreons. See, you're my hostage now. If you want a new overview, you have to donate to my channel. It's the only way. And I'm just kidding. I'm going to finish regardless, but thanks, everybody.