Skip to content

Commit

Permalink
feat: add dde-shell-wraper
Browse files Browse the repository at this point in the history
  dde-shell loads org.deepin.ds.launchpad.
  e.g:
```
export DDE_SHELL_PACKAGE_PATH=/src-path/build/packages
export DDE_SHELL_PLUGIN_PATH=/src-path/build/plugins
dde-shell -p org.deepin.ds.launchpad
```

Issue: linuxdeepin/developer-center#5810
  • Loading branch information
18202781743 committed Apr 3, 2024
1 parent 251714c commit 9e523ce
Show file tree
Hide file tree
Showing 8 changed files with 164 additions and 40 deletions.
4 changes: 4 additions & 0 deletions .reuse/dep5
Original file line number Diff line number Diff line change
Expand Up @@ -43,3 +43,7 @@ Files: *.deepin.dde.*.xml */org.desktopspec.*.xml
Copyright: UnionTech Software Technology Co., Ltd.
License: GPL-3.0-or-later

# package metadata
Files: */metadata.json
Copyright: None
License: CC0-1.0
3 changes: 3 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ set(CMAKE_CXX_STANDARD 17) # blurhash requires 17, otherwish we can still use 14
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON) # ensure adapter class can include launchercontroller.h
set(CMAKE_POSITION_INDEPENDENT_CODE ON)

set(BIN_NAME dde-launchpad)

Expand Down Expand Up @@ -167,3 +168,5 @@ install(
FILES dist/org.deepin.dde.launchpad.appdata.xml
DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/metainfo"
)

include(dde-shell-wrapper/src.cmake)
72 changes: 72 additions & 0 deletions dde-shell-wrapper/main.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
// SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: GPL-3.0-or-later

#include "categorizedsortproxymodel.h"
#include "launchercontroller.h"

#include <QDBusConnection>
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <DGuiApplicationHelper>
#include <DStandardPaths>
#include <DPathBuf>
#include <launcherappiconprovider.h>
#include <launcherfoldericonprovider.h>
#include <blurhashimageprovider.h>

#include "panel.h"
#include "qmlengine.h"
#include "pluginfactory.h"
DS_USE_NAMESPACE

DCORE_USE_NAMESPACE
DGUI_USE_NAMESPACE

// we should wait for dtkgui to have a "proper" loadTranslation() to use.
QStringList translationDir() {
QList<QString> translateDirs;
QString appName{"dde-launchpad"};
//("/home/user/.local/share", "/usr/local/share", "/usr/share")
const QStringList dataDirs(DStandardPaths::standardLocations(QStandardPaths::GenericDataLocation));
for (const auto &path : dataDirs) {
DPathBuf DPathBuf(path);
translateDirs << (DPathBuf / appName / "translations").toString();
}
return translateDirs;
}

class LanchpadPanel : public DPanel
{
Q_OBJECT
public:
explicit LanchpadPanel(QObject *parent)
: DPanel(parent)
{
}
virtual bool load() override
{
DGuiApplicationHelper::loadTranslator(QStringLiteral("dde-launchpad"), translationDir(), { QLocale::system() });

QDBusConnection connection = QDBusConnection::sessionBus();
if (!connection.registerService(QStringLiteral("org.deepin.dde.Launcher1")) ||
!connection.registerObject(QStringLiteral("/org/deepin/dde/Launcher1"), &LauncherController::instance())) {
qWarning() << "register dbus service failed";
return false;
}

CategorizedSortProxyModel::instance().setCategoryType(CategorizedSortProxyModel::Alphabetary);

auto &engine = *DQmlEngine().engine();

engine.addImageProvider(QLatin1String("app-icon"), new LauncherAppIconProvider);
engine.addImageProvider(QLatin1String("folder-icon"), new LauncherFolderIconProvider);
engine.addImageProvider(QLatin1String("blurhash"), new BlurhashImageProvider);

return DPanel::load();
}
};

D_APPLET_CLASS(LanchpadPanel)

#include "main.moc"
14 changes: 14 additions & 0 deletions dde-shell-wrapper/package/main.qml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
// SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: GPL-3.0-or-later

import org.deepin.ds 1.0
import org.deepin.launchpad 1.0

ContainmentItem {
id: root
property point windowedPos: Qt.point(0, 0)
Main {
windowedPos: root.windowedPos
}
}
9 changes: 9 additions & 0 deletions dde-shell-wrapper/package/metadata.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"Plugin": {
"Version": "1.0",
"Id": "org.deepin.ds.launchpad",
"Url": "main.qml",
"ContainmentType": "Panel",
"Category": "DDE"
}
}
50 changes: 50 additions & 0 deletions dde-shell-wrapper/src.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
# SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd.
#
# SPDX-License-Identifier: CC0-1.0

find_package(DDEShell)
if (DDEShell_FOUND)
qt_add_qml_module(ds-launchpad-wrapper
URI org.deepin.launchpad
VERSION 1.0
RESOURCES qml.qrc
RESOURCE_PREFIX
/qt/qml
QML_FILES
${QML_FILES}
SOURCES ${CMAKE_CURRENT_LIST_DIR}/main.cpp
${SOURCE_FILES}
${DBUS_ADAPTER_FILES}
${RESOURCES}
${TRANSLATED_FILES}
)

qt_add_translations(ds-launchpad-wrapper
TS_FILES ${TRANSLATION_FILES}
SOURCES ${QML_FILES} ${SOURCE_FILES} ${PROJECT_SOURCE_DIR}/src/models/appitem.cpp
QM_FILES_OUTPUT_VARIABLE TRANSLATED_FILES
)

target_compile_definitions(ds-launchpad-wrapper
PRIVATE
DDE_LAUNCHPAD_VERSION=${CMAKE_PROJECT_VERSION}
)
target_link_libraries(ds-launchpad-wrapper PRIVATE
Dde::Shell

${DTK_NS}::Core
${DTK_NS}::Gui
Qt::Qml
Qt::Quick
Qt::QuickControls2

launcher-qml-windowed
gio-utils
launcher-utils
launcher-qml-utils
launcher-models
dde-integration-dbus
)

ds_install_package(PACKAGE org.deepin.ds.launchpad TARGET ds-launchpad-wrapper PACKAGE_ROOT_DIR ${CMAKE_CURRENT_LIST_DIR}/package)
endif()
1 change: 1 addition & 0 deletions debian/control
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ Build-Depends:
# v-- provides DHiDPIHelper
libdtk6gui-dev,
libdtk6declarative-dev,
libdde-shell-dev,
libappstreamqt-dev
Standards-Version: 4.6.0
Rules-Requires-Root: no
Expand Down
51 changes: 11 additions & 40 deletions qml/Main.qml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import QtQuick.Layouts 1.15
import QtQuick.Controls 2.15
import QtQuick.Window 2.15
import org.deepin.dtk 1.0
import org.deepin.ds 1.0
import org.deepin.dtk.style 1.0 as DS

import org.deepin.launchpad 1.0
Expand Down Expand Up @@ -91,45 +92,8 @@ QtObject {
if (!LauncherController.visible) return;

if (LauncherController.currentFrame === "WindowedFrame") {
// root.visibility = Window.Windowed

let width = windowedFrameSize.width
let height = windowedFrameSize.height
let x = 0
let y = 0

let dockGeometry = descaledRect(DesktopIntegration.dockGeometry)
if (dockGeometry.width > 0 && dockGeometry.height > 0) {
// console.log(114514, dockGeometry)
switch (DesktopIntegration.dockPosition) {
case Qt.DownArrow:
x = dockGeometry.left
y = (dockGeometry.top >= 0 ? dockGeometry.top : (Screen.height - dockGeometry.height)) - height - DesktopIntegration.dockSpacing
break
case Qt.LeftArrow:
x = dockGeometry.right + DesktopIntegration.dockSpacing
y = (dockGeometry.top >= 0 ? dockGeometry.top : 0)
break
case Qt.UpArrow:
x = dockGeometry.left
y = dockGeometry.bottom + DesktopIntegration.dockSpacing
break
case Qt.RightArrow:
x = (dockGeometry.left >= 0 ? dockGeometry.left : (Screen.width - dockGeometry.width)) - width - DesktopIntegration.dockSpacing
y = dockGeometry.top
break
}
}

windowedFrame.setGeometry(x, y, width, height)
windowedFrame.requestActivate()
} else {
// root.visibility = Window.FullScreen
if (DesktopIntegration.environmentVariable("DDE_CURRENT_COMPOSITOR") !== "TreeLand") {
fullscreenFrame.setGeometry(Screen.virtualX, Screen.virtualY, Screen.width, Screen.height)
} else {
fullscreenFrame.showFullScreen()
}
fullscreenFrame.requestActivate()
}
}
Expand All @@ -147,17 +111,23 @@ QtObject {

readonly property size windowedFrameSize: Qt.size(610, 465)

// update by caller.
property point windowedPos: Qt.point(0, 0)
property var windowedFrame: ApplicationWindow {
id: windowedFrameWindow
objectName: "WindowedFrameApplicationWindow"
title: "Windowed Launchpad"
visible: LauncherController.visible && (LauncherController.currentFrame === "WindowedFrame")

DLayerShellWindow.anchors: DLayerShellWindow.AnchorBottom | DLayerShellWindow.AnchorLeft
DLayerShellWindow.leftMargin: windowedPos.x
DLayerShellWindow.bottomMargin: DesktopIntegration.dockSpacing

width: windowedFrameSize.width
height: windowedFrameSize.height
flags: {
if (DebugHelper.useRegularWindow) return Qt.Window
return (Qt.WindowStaysOnTopHint | Qt.FramelessWindowHint | Qt.Tool)
return ( Qt.FramelessWindowHint | Qt.Tool)
}
StyledBehindWindowBlur {
control: parent
Expand Down Expand Up @@ -235,8 +205,9 @@ QtObject {
title: "Fullscreen Launchpad"
visible: LauncherController.visible && (LauncherController.currentFrame !== "WindowedFrame")

width: Screen.width
height: Screen.height
DLayerShellWindow.anchors: DLayerShellWindow.AnchorBottom | DLayerShellWindow.AnchorTop | DLayerShellWindow.AnchorLeft | DLayerShellWindow.AnchorRight
DLayerShellWindow.layer: DLayerShellWindow.LayerTop

// visibility: Window.FullScreen
flags: {
if (DebugHelper.useRegularWindow) return Qt.Window
Expand Down

0 comments on commit 9e523ce

Please sign in to comment.