Skip to content

Commit

Permalink
Wlroots backend (#2088)
Browse files Browse the repository at this point in the history
* Initial backend plugin infrastructure

* Update licenses

* lxqttaskbartypes.h: fix ShowOnAll desktops flag value

* Fix backend load logic: do not load zero score backends

- Fix X11 backend to return zero score on non-X11 platforms

* LXQtPanelApplication: always find best backend at startup

If preferred backend is set try it first.
Do not set preferred backend automatically. It must be user choice.

* Panel backends: pass string argument for score calculation

- Split XDG_CURRENT_DESKTOP
- Skip LXQTPANEL_PLUGIN_PATH if empty

* Backends: change name scheme

libwmbackend_<platform>.so

* LXQtPanelApplication: only consider plugins with valid names

* LXQtPanelApplication: fix empty backend message

* TaskBar: add experimental KWin Wayland backend

NOTE: works only on KWin

- Choose backend at runtime
- Windows filter logic is re-evaluated on window property changes

LXQtTaskBarPlasmaWindowManagment: implement showDesktop()

LXQtTaskbarWaylandBackend: do not show transient windows

LXQtTaskBarPlasmaWindowManagment: fix destructor TODO

TODO: is this correct?
Seems to call wl_proxy_destroy underneath

LXQtPanel: basic virtual desktop support on Plasma Wayland

Add desktop file to be recognized by KWin Wayland

NOTE: absolute path is needed inside .desktop file for this to work
      use CMake to get it.

- Prevent double dekstop file installed in autostart

LXQtTaskbarWaylandBackend: return only accepted windows

- reloadWindows() force removal and readding of windows

This fixes changing windows grouping settings and adding taskbar plugin
AFTER panel is started.
Both situations resulted in empty taskbar previously

LXQtTaskbarWaylandBackend: fix workspace logic

LXQtTaskbarWaylandBackend: fix workspace removal logic

LXQtTaskbarWaylandBackend: implement moving window to virtual desktop
workspace

LXQtPlasmaWaylandWorkspaceInfo: fix signedness comparison

CMake: move panel WM backends to separate libraries

LXQtTaskbarWaylandBackend: possibly fix crash on showDesktop for non-
KWin

Update license headers

LXQtTaskbarWaylandBackend: add dummy setDesktopLayout()

Implement LXQtWMBackendKWinWaylandLibrary

- Add Desktop Environment detection

* LXQtPanel: workaround KAcceleratorManager changing button text FIXME TODO

TODO: is this correct approach?

* ColorPicker: use XDG Desktop Portal on Wayland TODO

TODO: show error message when not supported

* Hide lxqt-panel application from applications menu

- Add NoDisplay=true to .desktop file

CMake: rename autostart desktop variable

* LXQtWMBackend_KWinWayland: announce DesktopSwitch support

* LXQtWMBackend_KWinWayland: fix minimize on click not working

* Backend detection and Wlroots backend

* Fix autodetection on user choice failure

* wmbackend_kwin_wayland: Compare against kwin_wayland.

* Iterate through all parts of the XDG_CURRENT_DESKTOP. Add river to wlroots

* Set size policy in plugin-backlight and plugin-colorpicker (#2049)

Fixes an inconsistency in themes when they expect an expanding size policy,
which is what most plugins have set. Some themes that do this: KDE-Plasma,
Ambiance, Kvantum. Further stylesheet changes in some themes will be needed
to match themes exactly.

* Weblate commit (#2085)

Translate-URL: https://translate.lxqt-project.org/projects/lxqt-panel/plugin-fancymenu/da/
Translate-URL: https://translate.lxqt-project.org/projects/lxqt-panel/plugin-kbindindicator/ko/
Translation: LXQt Panel/plugin-fancymenu
Translation: LXQt Panel/plugin-kbindicator

Co-authored-by: Peter  Jespersen <[email protected]>
Co-authored-by: 이정희 <[email protected]>

* Initial backend plugin infrastructure

* Update licenses

* lxqttaskbartypes.h: fix ShowOnAll desktops flag value

* Fix backend load logic: do not load zero score backends

- Fix X11 backend to return zero score on non-X11 platforms

* LXQtPanelApplication: always find best backend at startup

If preferred backend is set try it first.
Do not set preferred backend automatically. It must be user choice.

* Panel backends: pass string argument for score calculation

- Split XDG_CURRENT_DESKTOP
- Skip LXQTPANEL_PLUGIN_PATH if empty

* Backends: change name scheme

libwmbackend_<platform>.so

* LXQtPanelApplication: only consider plugins with valid names

* LXQtPanelApplication: fix empty backend message

* TaskBar: add experimental KWin Wayland backend

NOTE: works only on KWin

- Choose backend at runtime
- Windows filter logic is re-evaluated on window property changes

LXQtTaskBarPlasmaWindowManagment: implement showDesktop()

LXQtTaskbarWaylandBackend: do not show transient windows

LXQtTaskBarPlasmaWindowManagment: fix destructor TODO

TODO: is this correct?
Seems to call wl_proxy_destroy underneath

LXQtPanel: basic virtual desktop support on Plasma Wayland

Add desktop file to be recognized by KWin Wayland

NOTE: absolute path is needed inside .desktop file for this to work
      use CMake to get it.

- Prevent double dekstop file installed in autostart

LXQtTaskbarWaylandBackend: return only accepted windows

- reloadWindows() force removal and readding of windows

This fixes changing windows grouping settings and adding taskbar plugin
AFTER panel is started.
Both situations resulted in empty taskbar previously

LXQtTaskbarWaylandBackend: fix workspace logic

LXQtTaskbarWaylandBackend: fix workspace removal logic

LXQtTaskbarWaylandBackend: implement moving window to virtual desktop
workspace

LXQtPlasmaWaylandWorkspaceInfo: fix signedness comparison

CMake: move panel WM backends to separate libraries

LXQtTaskbarWaylandBackend: possibly fix crash on showDesktop for non-
KWin

Update license headers

LXQtTaskbarWaylandBackend: add dummy setDesktopLayout()

Implement LXQtWMBackendKWinWaylandLibrary

- Add Desktop Environment detection

* LXQtPanel: workaround KAcceleratorManager changing button text FIXME TODO

TODO: is this correct approach?

* ColorPicker: use XDG Desktop Portal on Wayland TODO

TODO: show error message when not supported

* Hide lxqt-panel application from applications menu

- Add NoDisplay=true to .desktop file

CMake: rename autostart desktop variable

* LXQtWMBackend_KWinWayland: announce DesktopSwitch support

* LXQtWMBackend_KWinWayland: fix minimize on click not working

* Backend detection and Wlroots backend

* Fix autodetection on user choice failure

* wmbackend_kwin_wayland: Compare against kwin_wayland.

* Iterate through all parts of the XDG_CURRENT_DESKTOP. Add river to wlroots

* Rever changes to color-picker

* Revert changes to color-picker, attempt 2

---------

Co-authored-by: Filippo Gentile <[email protected]>
Co-authored-by: isf63 <[email protected]>
Co-authored-by: LXQtBot <[email protected]>
Co-authored-by: Peter  Jespersen <[email protected]>
Co-authored-by: 이정희 <[email protected]>
  • Loading branch information
6 people authored Aug 27, 2024
1 parent 9bd9b5f commit 246b33f
Show file tree
Hide file tree
Showing 49 changed files with 5,402 additions and 357 deletions.
13 changes: 11 additions & 2 deletions autostart/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
file(GLOB DESKTOP_FILES_IN *.desktop.in)
set(AUTOSTART_DESKTOP_FILES_IN lxqt-panel.desktop.in)

# Translations **********************************
lxqt_translate_desktop(DESKTOP_FILES
SOURCES
${DESKTOP_FILES_IN}
${AUTOSTART_DESKTOP_FILES_IN}
USE_YAML
)
add_custom_target(lxqt_panel_autostart_desktop_files ALL DEPENDS ${DESKTOP_FILES})
Expand All @@ -14,3 +14,12 @@ install(FILES
DESTINATION "${LXQT_ETC_XDG_DIR}/autostart"
COMPONENT Runtime
)

configure_file(lxqt-panel_wayland.desktop.in lxqt-panel_wayland.desktop @ONLY)

install(FILES
"${CMAKE_CURRENT_BINARY_DIR}/lxqt-panel_wayland.desktop"
DESTINATION "/usr/share/applications"
RENAME "lxqt-panel.desktop"
COMPONENT Runtime
)
14 changes: 14 additions & 0 deletions autostart/lxqt-panel_wayland.desktop.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
[Desktop Entry]
Type=Application
TryExec=lxqt-panel
NoDisplay=true

# NOTE: KWin wants absolute path here, get it from CMake install path
Exec=@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_BINDIR@/lxqt-panel

# NOTE: adding KDE to make it work under Plasma Wayland session
OnlyShowIn=LXQt;KDE
X-LXQt-Module=true

# Make KWin recognize us as priviledged client
X-KDE-Wayland-Interfaces=org_kde_plasma_window_management
17 changes: 2 additions & 15 deletions panel/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
set(PROJECT lxqt-panel)

# TODO
# Window Manager backends
add_subdirectory(backends)

set(PRIV_HEADERS
Expand All @@ -21,12 +21,6 @@ set(PRIV_HEADERS
config/configstyling.h
config/configpluginswidget.h
config/addplugindialog.h

backends/ilxqttaskbarabstractbackend.h
backends/lxqttaskbartypes.h

backends/lxqttaskbardummybackend.h
backends/xcb/lxqttaskbarbackend_x11.h
)

# using LXQt namespace in the public headers.
Expand All @@ -35,9 +29,6 @@ set(PUB_HEADERS
pluginsettings.h
ilxqtpanelplugin.h
ilxqtpanel.h

backends/ilxqttaskbarabstractbackend.h
backends/lxqttaskbartypes.h
)

set(SOURCES
Expand All @@ -57,11 +48,6 @@ set(SOURCES
config/configstyling.cpp
config/configpluginswidget.cpp
config/addplugindialog.cpp

backends/ilxqttaskbarabstractbackend.cpp

backends/lxqttaskbardummybackend.cpp
backends/xcb/lxqttaskbarbackend_x11.cpp
)

set(UI
Expand Down Expand Up @@ -122,6 +108,7 @@ target_link_libraries(${PROJECT}
KF6::WindowSystem
LayerShellQt::Interface
${STATIC_PLUGINS}
lxqt-panel-backend-common
)

set_property(TARGET ${PROJECT} PROPERTY ENABLE_EXPORTS TRUE)
Expand Down
18 changes: 18 additions & 0 deletions panel/backends/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1 +1,19 @@
# Common interface for Window Manager abstraction backend
# This also contains dummy backend

add_library(lxqt-panel-backend-common STATIC

lxqttaskbartypes.h
ilxqtabstractwmiface.h
ilxqtabstractwmiface.cpp

lxqtdummywmbackend.h
lxqtdummywmbackend.cpp
)

target_link_libraries(lxqt-panel-backend-common
Qt6::Gui
)

add_subdirectory(wayland)
add_subdirectory(xcb)
52 changes: 52 additions & 0 deletions panel/backends/ilxqtabstractwmiface.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
/* BEGIN_COMMON_COPYRIGHT_HEADER
* (c)LGPL2+
*
* LXQt - a lightweight, Qt based, desktop toolset
* https://lxqt.org
*
* Copyright: 2023 LXQt team
* Authors:
* Filippo Gentile <[email protected]>
*
* This program or library is free software; you can redistribute it
* and/or modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General
* Public License along with this library; if not, write to the
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA
*
* END_COMMON_COPYRIGHT_HEADER */


#include "ilxqtabstractwmiface.h"

ILXQtAbstractWMInterface::ILXQtAbstractWMInterface(QObject *parent)
: QObject(parent)
{

}

void ILXQtAbstractWMInterface::moveApplicationToPrevNextDesktop(WId windowId, bool next)
{
int count = getWorkspacesCount();
if (count <= 1)
return;

int targetWorkspace = getWindowWorkspace(windowId) + (next ? 1 : -1);

// Wrap around
if (targetWorkspace > count)
targetWorkspace = 1; //Ids are 1-based
else if (targetWorkspace < 1)
targetWorkspace = count;

setWindowOnWorkspace(windowId, targetWorkspace);
}
Original file line number Diff line number Diff line change
@@ -1,19 +1,48 @@
#ifndef ILXQTTASKBARABSTRACTBACKEND_H
#define ILXQTTASKBARABSTRACTBACKEND_H
/* BEGIN_COMMON_COPYRIGHT_HEADER
* (c)LGPL2+
*
* LXQt - a lightweight, Qt based, desktop toolset
* https://lxqt.org
*
* Copyright: 2023 LXQt team
* Authors:
* Filippo Gentile <[email protected]>
*
* This program or library is free software; you can redistribute it
* and/or modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General
* Public License along with this library; if not, write to the
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA
*
* END_COMMON_COPYRIGHT_HEADER */


#ifndef ILXQT_ABSTRACT_WM_INTERFACE_H
#define ILXQT_ABSTRACT_WM_INTERFACE_H

#include <QObject>

#include "../lxqtpanelglobals.h"
#include "lxqttaskbartypes.h"

class QIcon;
class QScreen;

class ILXQtTaskbarAbstractBackend : public QObject
class LXQT_PANEL_API ILXQtAbstractWMInterface : public QObject
{
Q_OBJECT

public:
explicit ILXQtTaskbarAbstractBackend(QObject *parent = nullptr);
explicit ILXQtAbstractWMInterface(QObject *parent = nullptr);

// Backend
virtual bool supportsAction(WId windowId, LXQtTaskBarBackendAction action) const = 0;
Expand Down Expand Up @@ -96,4 +125,28 @@ class ILXQtTaskbarAbstractBackend : public QObject
void activeWindowChanged(WId windowId);
};

#endif // ILXQTTASKBARABSTRACTBACKEND_H
class LXQT_PANEL_API ILXQtWMBackendLibrary
{
public:
/**
Destroys the ILXQtWMBackendLibrary object.
**/
virtual ~ILXQtWMBackendLibrary() {}

/**
Returns the score of this backend for current detected environment.
This is used to select correct backend at runtime
**/
virtual int getBackendScore(const QString& key) const = 0;

/**
Returns the root component object of the backend. When the library is finally unloaded, the root component will automatically be deleted.
**/
virtual ILXQtAbstractWMInterface* instance() const = 0;
};


Q_DECLARE_INTERFACE(ILXQtWMBackendLibrary,
"lxqt.org/Panel/WMInterface/1.0")

#endif // ILXQT_ABSTRACT_WM_INTERFACE_H
25 changes: 0 additions & 25 deletions panel/backends/ilxqttaskbarabstractbackend.cpp

This file was deleted.

Loading

0 comments on commit 246b33f

Please sign in to comment.