Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Wayland taskbar support v2 #2043

Open
wants to merge 15 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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]
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I get always 2 panels now after login as there is also the lxqt-panel.desktop from regular installation in autostart - in some way it ends up also in /etc/xdg/autostart/ with the _wayland name, didn't have time to investigate.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's here, it installs any *.desktop file:

file(GLOB DESKTOP_FILES_IN *.desktop.in)

Copy link
Member

@stefonarch stefonarch Mar 28, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

IMO panel_wayland.conf.in could be panel_kwin.conf.in and be inside the plasma backend folder, as it's not generic for wayland but compositor-specific.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it's better to install a single .desktop file (plus another or symlink inside autostart folder)
This is because KWin might get confused about which file the panel belongs and it needs to check the one with absolute path and KDE specific entries.
In the meantime we discuss this issue, I will solve the double install problem

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It has the /usr/local/bin path again now:

screen_area_gio_16:10:14_

Because it's not named lxqt-panel.wayland.desktop.in it doesn't get configured I guess.

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