astatide / kwinOverview

In progress KWin script for emulating GNOME/macOS style activity switchers.
68 stars 3 forks source link

Is there any interest in revitalizing this project? #17

Open MichaelTunnell opened 4 years ago

MichaelTunnell commented 4 years ago

I was hoping that this project would be something to use because I think one of the biggest missing pieces to Plasma is a solid Overview/Dashboard. I really hope you continue to work on this.

I recently discussed this project on the latest episode of Destination Linux 160 so I hope you see some more interest showing up here for that.

Here is the discussion that initiated me talking about this project. https://youtu.be/ur52WIug85k?t=2310

If people came here from DL160 and want to show support for the project, be sure to click the :+1: button below this comment. :sunglasses:

astatide commented 4 years ago

I'm certainly interested in continuing it, but unfortunately there are a few problems keeping me from moving forward on it.

  1. Time, as I'm trying to finish graduate school (and working).
  2. The code isn't in a great state. This is really my first time working with JS and QML, and unfortunately there isn't a lot of up to date documentation available for how to interact with KWin via the scripting layer. There are a lot of things that scripts aren't able to touch, as well. It's a lot of poking at the C code and seeing what's actually been extended.
  3. They've changed how to grab the Window IDs, so the preview capability as implemented is broken. The KWin commit that changed it suggested that anyone doing what this script is doing was doing it incorrectly didn't wasn't particularly helpful, as I didn't see anything at the time that suggested another option was available through the script API.
  4. QML is not as performant as one would like, and we have limited control over how rendering is done (for instance, one can change the rescaling options on a global level but not per rendered item unless you're coding a plugin). For example, forcing software rendering of QT greatly increases the speed of the plugin on one of my older test systems as we're effectively doubling the number of windows we need to render, and so taking the QML render logic out of the GPU loop seemed to speed things up there.

I have an older code base that modifies the Desktop Grid effect into something similar to this, but it's using an older version of the KWin code and also does a lot of the calculations by hand (I didn't really know C/C++ as well at the time). That's more promising but getting to feature parity (and getting it to compile outside of the main code base) is likely gonna take a little work.

koma111 commented 4 years ago

I would be interested in working with you on this project since I am a huge fan of it. Currently I don’t have much time either, but in the summer, maybe I can help. I am planning to learn QML anyway, so why not learn doing something useful? If there is anything I can help with, tell me and we can arrange a more direct way to communicate.

Btw, have you considered asking for help in KDE Community formus or on Phabrictor? I bet the KDE guys could help with the API-related issues.

anesuc commented 4 years ago

I would like to add this feature to eXtern OS (my OS project I have been working on) which also (currently {{long story}}) uses kWin for the window manager. This would be pretty cool to add and have been slowly waiting for progress on this since it broke. I haven't worked with qml before but if needed I can always try to figure it out. Would you be able to quickly point out the commit that changed this ID situation btw?

astatide commented 4 years ago

For those interested, I put up some very very old but up-to-date code if the approach I would like to use.

https://github.com/astatide/kwin/tree/overview

This is basically a hack of desktopgrid that I did roughly two years ago (back before I'd ever worked with Qt/QML or even a lot of C++), so if you're interested in running it you'll have to build all of Kwin then run your compiled binary. It's pretty hackish and not using any of the fancy QT features, but I think it might be a better place to start. It basically creates a very different grid (use the 'automatic' layout to see it in action) and then paints each window twice; one in the horizontal bar, and one in the main desktop region. Saying it has rough edges is an understatement.

I'll start putting up issues there, but the biggest things necessary are:

  1. separate it out from kwin and compile as a standalone (even possible?) (change name, etc)
  2. Remove unused features/code
  3. Begin converting user interface elements to Qt objects where appropriate (grids and flippable/flingable/scrollable surfaces would be nice here)
  4. Animations
  5. Features, such as activities support.
astatide commented 4 years ago

Actually, looks like a pandemic is good for making time for projects.

I managed to hunt down how the previews should be done, given the changes made to KWin, so I have previews working again. I'm trying to clean up and simplify the code but hopefully should have a version working shortly.

anesuc commented 4 years ago

Ok this is exciting! Keep up the good work!

anesuc commented 4 years ago

Hi astatide!

Would you have an estimation of when you will have it ready? Not rushing you or anything just want to have an estimation as I plan to use it in one of my projects!

MichaelTunnell commented 4 years ago

This is great news!

Edit: I recently found these other related projects that I thought you might be able to find some use from whether thats code or whatnot.

Parachute = https://github.com/tcorreabr/Parachute QOverview = https://gitlab.com/bharadwaj-raju/qOverview

anesuc commented 4 years ago

This is great news!

Edit: I recently found these other related projects that I thought you might be able to find some use from whether thats code or whatnot.

Parachute = https://github.com/tcorreabr/Parachute QOverview = https://gitlab.com/bharadwaj-raju/qOverview

Parachute looks very similar to this actually. Doesn't work on my end though. Probably a similar issue with this one.

Edit: Nevermind, was on 5.17 instead of 5.18 lol