Closed gfgit closed 6 months ago
This is amazing! Where did you learn all this coding?
Hi! Thanks. Well it does not work yet, I need more time to properly fix compile errors. Anyway it's not that difficult, I've just read Qt online documentation and made some experiments on small test programs until I get the results I want. The key for me is having fun while coding, otherwise is not worth it.
Looks like only fancymenu and few other plugins build atm. Made a list here.
Hi, thanks for testing. I've worked on a second version of the patch plus some code style fixes detected by Clazy. I will force push soon. All plugin are working except sysstat because library is not ported yet.
XCB not found it's because CMake components are uppercase and without xcb-
prefix. I wonder why it worked until now...
Also there are some issues:
Ldd does not find liblxqt.so.2 so it refuses to launch panel. I had to LD_PRELOAD
it.
I don't yet understand how this works, library is in correct path just like Qt6Xdg.so and also listed in ldconfig -p
.
Running sudo ldconfig
seems to rebuild the cache and fix the issue.
Another issue is panel configuration not getting installed, resulting in an empty transparent panel. Need to investigate. For now I've manually copied it from repository to home folder
All plugin are working except sysstat because library is not ported yet.
That's nice to hear :)
I didn't need QTextCodec from Qt5Compat module. When I'll push, plaese check again if it's needed
I didn't need QTextCodec from Qt5Compat module.
Just as a general note, and not a review:
Forget about Qt5Compat everywhere. Legacy encodings aren't supported by Qt6, and so, we don't have a reason to support them by force.
NOTE: it needs recent changes from lxqt-globalkeys#278 branch which I've just pushed.
I needed first https://github.com/lxqt/libsysstat/pull/47 and change dbusmenu-qt6 → dbusmenu-lxqt to start compilation ~but I'm stuck atm at fatal error: lxqt-globalkeys.h: No such file or directory
for several plugins.
When I change it to
#include <lxqt-globalkeys/lxqt-globalkeys.h>
it goes to LXQtGlobalKeys: no such file or...
and when I include that again not found, but it's all present in /usr/local/include
.~
EDIT: Turns out this was caused by my removing of lxqt2
everywhere somehow, plain PR builds fine.
Systat-plugin has to be disabled as it needs porting to QRegularExpression
and I ran into the same ldconfig issue but it prevented installing (sudo ldconfig
didn't help):
[ 99%] Linking CXX executable lxqt-panel
/usr/bin/ld: CMakeFiles/lxqt-panel.dir/lxqt-panel_autogen/mocs_compilation.cpp.o: in function `QtPrivate::QDebugStreamOperatorForType<LXQt::PluginInfo, true>::debugStream(QtPrivate::QMetaTypeInterface const*, QDebug&, void const*)':
mocs_compilation.cpp:(.text._ZN9QtPrivate27QDebugStreamOperatorForTypeIN4LXQt10PluginInfoELb1EE11debugStreamEPKNS_18QMetaTypeInterfaceER6QDebugPKv[_ZN9QtPrivate27QDebugStreamOperatorForTypeIN4LXQt10PluginInfoELb1EE11debugStreamEPKNS_18QMetaTypeInterfaceER6QDebugPKv]+0x36): undefined reference to `operator<<(QDebug, LXQt::PluginInfo const&)'
collect2: error: ld returned 1 exit status
Ah yes, this is because QDebug operators are not exported. I've fixed it but forgot to push
@stefonarch I've pushed fix in liblxqt#337
Ah yes, this is because QDebug operators are not exported. I've fixed it but forgot to push
Another issue is panel configuration not getting installed, resulting in an empty transparent panel. Need to investigate. For now I've manually copied it from repository to home folder
I think this is because I'm installing to /usr/local
The file is there but panel does not consider this path
Compiles perfectly fine now without any warning, except that I had to disable statusnotifier plugin as I didn't manage to include dbusmenu-lxqt
anymore, not sure if I changed something as I hit a git stash
by mistake.
Panel conf is installed but not loaded at first run, don't remember how this is supposed to wirk
-- Installing: /usr/local/bin/lxqt-panel
-- Set non-toolchain portion of runtime path of "/usr/local/bin/lxqt-panel" to ""
-- Installing: /usr/local/share/lxqt/panel.conf
-- Installing: /usr/local/include/lxqt/lxqtpanelglobals.h
What's the difference between dbusmenu-qt
and dbusmenu-lxqt
?
I can build it with neon package for dbusmenu qt6 dev
First, libdbusmenu-qt6
couldn't be compiled anymore. Second, it didn't exist in all distros (Arch used a self-made patch). So, we got rid of all problems by forking it (as KDE did years ago). In this way, we could fix its probable bugs too.
The Qt6 brannch of lxqt-qtplugin
already depends on libdbusmenu-lxqt
.
Found my error, forgot the second part here #include <dbusmenu-lxqt/dbusmenuimporter.h>
.
So only sysstat plugin is missing.
Just found out in a nested labwc window that the qt6-panel won't work on wayland:
Just found out in a nested labwc window that the qt6-panel won't work on wayland:
Well of course KX11Extras does not work on wayland and we use this library. As a workaround force it to use xwayland. Taskbar will be empty
Haven't we already disabled X11-dependent plugins under Wayland? If not, we should do it.
Well of course KX11Extras does not work on wayland and we use this library. As a workaround force it to use xwayland. Taskbar will be empty
Haven't we already disabled X11-dependent plugins under Wayland? If not, we should do it.
Only the desktopswitch is disabled as it will crash the panel, the others can be added but do nothing. Now it's about the panel itself too.
I use without issues the qt5 version natively, so something has changed there in KF6 now.
all files which use it, at least lxqtpanel.cpp
and plugin.cpp
would be needed for now.
If KF6 doesn't exclude them, we could do it. Not a theoretical hassle; just a boring job.
Well I have added some assert on X11 connection somwhere. It was just for testing but it's also correct because we should exclude X11 specific parts on Wayland
I may be wrong (being busy with other codes), but I think KF5 did it for its methods.
Looking at KX11Extras it looks (for the panel) some functions on wayland should use foreing-toplevel-protocol, like static QList<WId> windows();
and others, if I got it right. Other functions (number of desktops and related) are just not available as protocol yet.
Running the panel in xwayland mode is nice to see and working fine now on labwc, but all apps launched by the menu inherit xwayland too.
Rechecked for good and saw that the panel opens, so those are just warnings not blockers. Looks like I had to stop the panel in the openbox session first.
After recent updates of KF6 I had to recompile it. I see (also before) this:
$ lxqt-panel
starting
WinIdChange 1600009 handle QWidgetWindow(0x56007fda3e90, name="LXQtPanel panel1Window") QScreen(0x56007fa91b30, name="Virtual1")
StatusNotifierProxy, services: QList()
Manager selection claimed
trying to dock window 18874385
adding damage watch for 18874385
Error on DBus request(:1.71,/StatusNotifierItem): QDBusError(org.freedesktop.DBus.Error.UnknownProperty, Property org.kde.StatusNotifierItem.Menu was not found in object /StatusNotifierItem)
Error on DBus request(:1.71,/StatusNotifierItem): QDBusError(org.freedesktop.DBus.Error.UnknownProperty, Property org.kde.StatusNotifierItem.IconThemePath was not found in object /StatusNotifierItem)
Error on DBus request(:1.71,/StatusNotifierItem): QDBusError(org.freedesktop.DBus.Error.UnknownProperty, Property org.kde.StatusNotifierItem.ToolTip was not found in object /StatusNotifierItem)
Error on DBus request(:1.71,/StatusNotifierItem): QDBusError(org.freedesktop.DBus.Error.UnknownProperty, Property org.kde.StatusNotifierItem.OverlayIconName was not found in object /StatusNotifierItem)
Error on DBus request(:1.71,/StatusNotifierItem): QDBusError(org.freedesktop.DBus.Error.UnknownProperty, Property org.kde.StatusNotifierItem.IconName was not found in object /StatusNotifierItem)
Error on DBus request(:1.71,/StatusNotifierItem): QDBusError(org.freedesktop.DBus.Error.UnknownProperty, Property org.kde.StatusNotifierItem.AttentionIconName was not found in object /StatusNotifierItem)
Error on DBus request(:1.71,/StatusNotifierItem): QDBusError(org.freedesktop.DBus.Error.UnknownProperty, Property org.kde.StatusNotifierItem.IconThemePath was not found in object /StatusNotifierItem)
Error on DBus request(:1.71,/StatusNotifierItem): QDBusError(org.freedesktop.DBus.Error.UnknownProperty, Property org.kde.StatusNotifierItem.ToolTip was not found in object /StatusNotifierItem)
Error on DBus request(:1.71,/StatusNotifierItem): QDBusError(org.freedesktop.DBus.Error.UnknownProperty, Property org.kde.StatusNotifierItem.OverlayIconPixmap was not found in object /StatusNotifierItem)
Error on DBus request(:1.71,/StatusNotifierItem): QDBusError(org.freedesktop.DBus.Error.UnknownProperty, Property org.kde.StatusNotifierItem.AttentionIconPixmap was not found in object /StatusNotifierItem)
Error on DBus request(:1.71,/StatusNotifierItem): QDBusError(org.freedesktop.DBus.Error.UnknownProperty, Property org.kde.StatusNotifierItem.IconName was not found in object /StatusNotifierItem)
Error on DBus request(:1.71,/StatusNotifierItem): QDBusError(org.freedesktop.DBus.Error.UnknownProperty, Property org.kde.StatusNotifierItem.IconThemePath was not found in object /StatusNotifierItem)
Error on DBus request(:1.71,/StatusNotifierItem): QDBusError(org.freedesktop.DBus.Error.UnknownProperty, Property org.kde.StatusNotifierItem.ToolTip was not found in object /StatusNotifierItem)
Error on DBus request(:1.71,/StatusNotifierItem): QDBusError(org.freedesktop.DBus.Error.UnknownProperty, Property org.kde.StatusNotifierItem.IconName was not found in object /StatusNotifierItem)
damage watch looks interesting: https://wayland-book.com/surfaces-in-depth/damaging-surfaces.html
Ops, sorry I edited your post instead of replying. I had those same DBus errors in Qt5 branch
I had those same DBus errors in Qt5 branch
Strange, here I've only some things about icons from one app:
$ lxqt-panel
WinIdChange 1 handle QWidgetWindow(0x64309003bd20, name="LXQtPanel panel1Window") QScreen(0x64308fe9fd60, name="eDP-1")
WinIdChange 2 handle QWidgetWindow(0x6430904091b0, name="LXQtPanel panel_{2aaae4ef-94e6-450c-a8d6-7f862d156da2}Window") QScreen(0x64308fe9fd60, name="eDP-1")
StatusNotifierProxy, services: ()
Error on DBus request(:1.132,/StatusNotifierItem): QDBusError(org.freedesktop.DBus.Error.Failed, error occurred in Get)
Error on DBus request(:1.132,/StatusNotifierItem): QDBusError(org.freedesktop.DBus.Error.Failed, error occurred in Get)
Error on DBus request(:1.94,/org/ayatana/NotificationItem:gammastep): QDBusError(org.freedesktop.DBus.Error.InvalidArgs, Proprietà «ToolTip» inesistente)
Error on DBus request(:1.94,/org/ayatana/NotificationItem/gammastep): QDBusError(org.freedesktop.DBus.Error.InvalidArgs, Proprietà «OverlayIconName» inesistente)
Error on DBus request(:1.94,/org/ayatana/NotificationItem/gammastep): QDBusError(org.freedesktop.DBus.Error.InvalidArgs, Proprietà «OverlayIconPixmap» inesistente)
Error on DBus request(:1.94,/org/ayatana/NotificationItem/gammastep): QDBusError(org.freedesktop.DBus.Error.InvalidArgs, Proprietà «AttentionIconPixmap» inesistente)
EDIT: it was all about qlipper I see, removing it all errors gone.
In the meantime I went ahead a bit :)
Rullo di tamburi...
So this is LXQt Panel running natively on KDE Plasma Wayland session!
How to achieve this:
LayerShellQt
integration for placing panel on bottom part of screenorg_kde_plasma_window_management
protocol to manage windows on KWinAs you can see LXQt panel (on bottom) is not yet reserving screen area while Plasma panel (on top) does reserve it.
Some black magic of course
I like it so much when you do your black magic. Well done!
Wow, senza parole :)
LayerShellQt integration for placing panel on bottom part of screen
Which version? No fullscreen popups ?
My long term idea is:
On Wayland there isn't yet a standard, so the backend would have sub-backends which are using some specific protocol or even using DBus (example for Sway). Waybar is a good example: it supports various compositors and chooses the correct communication protocol by probing at start.
For now I've added support for KWin using KDE's in-house protocol. I think this is the first non-KDE software using their window managment protocol. I've copied and slightly adapted some code from libtaskmanager/waylandtasksmodel.cpp from Plasma Workspace repository
At some point, you'll set up a LabWC environment and see how comfortably you could work there.
Anyway, with your works, I'm not worried about the future of LXQt+Wayland anymore :)
Quick update: Now reserving screen area works and also placing panel on top/bottom. Right/Left is a bit awkward because it does not count Plasma panel occupied area so the panel is too tall and gets cut. But this would not happen in a LXQt session without other programs claiming screen edges with layer shell. Still it could be improved if possible.
LayerShellQt is at version 6.0.80 which allows popups to be normal XDG Popup windows, if that was your question.
You can see LXQt Panel and Plasma panels both at top edge and maximized Qt Creator window correctly spanning up until panel bottom border. Plus you can see TaskBar plugin's context menu
LayerShellQt is at version 6.0.80 which allows popups to be normal XDG Popup windows, if that was your question.
Thanks, I don't have it yet in Neon.
FYI: start scripts for kwin_wayland, labwc ecc: https://github.com/stefonarch/LXQt-Wayland-files/tree/main/start_scripts
Now also plugin-sysstat
is ported to Qt6!
lxqt-panel: error while loading shared libraries: libdbusmenu-lxqt.so.0: cannot open shared object file: No such file or directory
Similar LDD issue fixed by running sudo ldconfig
Not a review yet (no stable KF6 here), but, in general:
When porting components to Qt6, it's preferable to change QVector
to QList
everywhere because the former is just an alias for the latter.
I think I've done so in my Qt6 branches; if not, please tell me.
@tsujan I've ported away from QVector
and QScopedPointer
, commit about chrono
is removed, will put it in a future PR
Basically here can be seen 2 issues:
Worldclock issue: beside the non localized month/day names in the widget I noticed also that timezones can't be set anymore.
Worldclock issue: beside the non localized month/day names in the widget I noticed also that timezones can't be set anymore.
Found the cause of the first, which is most probably the cause of the second. It isn't about a bug in the PR but a change of behavior in Qt6. Will make a PR after merging Qt6 PRs because it deserves a separate PR.
@gfgit, if you make the requested changes, I could do the merging today.
I suggest this time to NOT squash the commit before merging. It would result in an commit too big too be read. I've carefully divided commits to make changes easily understandable and this could be useful as a reference for other people wanting to port their software to Qt 6. Some commits have "TODO" in their messages, this of course will be removed if changes. Too reduce the number of commits some of them can be grouped based on topic.
CI doesn't find Qt6 dependencies
I suggest this time to NOT squash the commit before merging.
OK.
CI doesn't find Qt6 dependencies
No worries; we've got used to CI's temporary issues and tolerate them.
Will merge all Qt6-related PRs in the proper order tomorrow.
@tsujan It's quite difficult to understand changes from the squashed single commit
PRs should be squashed before being merged. A clean history is a must. I just agreed that you don't do it yourself.
As for code readers, it's impossible to make everything straightforward for them; they need to delve into codes.
Depends on: