Skip to content

Commit

Permalink
feat: add dde-shell-wrapper
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 Mar 29, 2024
1 parent 56480c3 commit 017c36d
Show file tree
Hide file tree
Showing 8 changed files with 514 additions and 43 deletions.
10 changes: 10 additions & 0 deletions .reuse/dep5
Original file line number Diff line number Diff line change
Expand Up @@ -43,3 +43,13 @@ Files: *.deepin.dde.*.xml */org.desktopspec.*.xml
Copyright: UnionTech Software Technology Co., Ltd.
License: GPL-3.0-or-later

# vendored from KItemModels
Files: src/quick/ksortfilterproxymodel.cpp src/quick/ksortfilterproxymodel.h
Copyright: 2010, Marco Martin <[email protected]>
2019, David Edmundson <[email protected]>
License: LGPL-2.0-or-later

# package metadata
Files: */metadata.json
Copyright: None
License: CC0-1.0
70 changes: 39 additions & 31 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -55,24 +55,29 @@ if(BUILD_TEST)
endif()

set(SOURCE_FILES
main.cpp
desktopintegration.cpp desktopintegration.h
launchercontroller.cpp launchercontroller.h
debughelper.cpp debughelper.h
)

set(QML_FILES
qml/Helper.qml
qml/Main.qml
qml/FullscreenFrame.qml
qml/AppItemMenu.qml
qml/GridViewContainer.qml
qml/DrawerFolder.qml
qml/IconItemDelegate.qml
qml/DebugDialog.qml
qml/DebugBounding.qml
qml/FolderGridViewPopup.qml
${PROJECT_SOURCE_DIR}/qml/Helper.qml
${PROJECT_SOURCE_DIR}/qml/Main.qml
${PROJECT_SOURCE_DIR}/qml/FullscreenFrame.qml
${PROJECT_SOURCE_DIR}/qml/AppItemMenu.qml
${PROJECT_SOURCE_DIR}/qml/GridViewContainer.qml
${PROJECT_SOURCE_DIR}/qml/DrawerFolder.qml
${PROJECT_SOURCE_DIR}/qml/IconItemDelegate.qml
${PROJECT_SOURCE_DIR}/qml/DebugDialog.qml
${PROJECT_SOURCE_DIR}/qml/DebugBounding.qml
${PROJECT_SOURCE_DIR}/qml/FolderGridViewPopup.qml
)
foreach(QML_FILE ${QML_FILES})
get_filename_component(file_name ${QML_FILE} NAME)
set_source_files_properties(${QML_FILE}
PROPERTIES QT_RESOURCE_ALIAS ${file_name}
)
endforeach()

get_target_property(WINDOWED_QML_FILES launcher-qml-windowed QT_QML_MODULE_QML_FILES)
# TODO: switch to the new qt_add_translations usage introduced in Qt 6.7
Expand All @@ -83,36 +88,37 @@ set(QML_FILES_NEED_TRANSLATION
${WINDOWED_QML_FILES}
)

set_source_files_properties(qml/Helper.qml
set_source_files_properties(${PROJECT_SOURCE_DIR}/qml/Helper.qml
PROPERTIES
QT_QML_SINGLETON_TYPE TRUE
)

set(TRANSLATION_FILES
translations/dde-launchpad.ts
translations/dde-launchpad_az.ts
translations/dde-launchpad_bo.ts
translations/dde-launchpad_ca.ts
translations/dde-launchpad_es.ts
translations/dde-launchpad_fi.ts
translations/dde-launchpad_fr.ts
translations/dde-launchpad_hu.ts
translations/dde-launchpad_it.ts
translations/dde-launchpad_ja.ts
translations/dde-launchpad_ko.ts
translations/dde-launchpad_nb_NO.ts
translations/dde-launchpad_pl.ts
translations/dde-launchpad_pt_BR.ts
translations/dde-launchpad_ru.ts
translations/dde-launchpad_uk.ts
translations/dde-launchpad_zh_CN.ts
translations/dde-launchpad_zh_HK.ts
translations/dde-launchpad_zh_TW.ts
${PROJECT_SOURCE_DIR}/translations/dde-launchpad.ts
${PROJECT_SOURCE_DIR}/translations/dde-launchpad_az.ts
${PROJECT_SOURCE_DIR}/translations/dde-launchpad_bo.ts
${PROJECT_SOURCE_DIR}/translations/dde-launchpad_ca.ts
${PROJECT_SOURCE_DIR}/translations/dde-launchpad_es.ts
${PROJECT_SOURCE_DIR}/translations/dde-launchpad_fi.ts
${PROJECT_SOURCE_DIR}/translations/dde-launchpad_fr.ts
${PROJECT_SOURCE_DIR}/translations/dde-launchpad_hu.ts
${PROJECT_SOURCE_DIR}/translations/dde-launchpad_it.ts
${PROJECT_SOURCE_DIR}/translations/dde-launchpad_ja.ts
${PROJECT_SOURCE_DIR}/translations/dde-launchpad_ko.ts
${PROJECT_SOURCE_DIR}/translations/dde-launchpad_nb_NO.ts
${PROJECT_SOURCE_DIR}/translations/dde-launchpad_pl.ts
${PROJECT_SOURCE_DIR}/translations/dde-launchpad_pt_BR.ts
${PROJECT_SOURCE_DIR}/translations/dde-launchpad_ru.ts
${PROJECT_SOURCE_DIR}/translations/dde-launchpad_uk.ts
${PROJECT_SOURCE_DIR}/translations/dde-launchpad_zh_CN.ts
${PROJECT_SOURCE_DIR}/translations/dde-launchpad_zh_HK.ts
${PROJECT_SOURCE_DIR}/translations/dde-launchpad_zh_TW.ts
)

qt_add_dbus_adaptor(DBUS_ADAPTER_FILES dbus/org.deepin.dde.Launcher1.xml launchercontroller.h LauncherController)

qt_add_executable(${BIN_NAME}
main.cpp
${SOURCE_FILES}
${DBUS_ADAPTER_FILES}
${RESOURCES}
Expand Down Expand Up @@ -161,3 +167,5 @@ install(
FILES dist/org.deepin.dde.launchpad.appdata.xml
DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/metainfo"
)

include(dde-shell-wrapper/src.cmake)
304 changes: 304 additions & 0 deletions LICENSES/LGPL-3.0-or-later.txt

Large diffs are not rendered by default.

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

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

#include <QDBusConnection>
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQmlContext>
#include <QQuickStyle>
#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:
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";
}

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();
}
virtual bool init() override
{
return DPanel::init();
}
};

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: 2023 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: LGPL-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"
}
}
51 changes: 51 additions & 0 deletions dde-shell-wrapper/src.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
# SPDX-FileCopyrightText: 2023 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()
21 changes: 9 additions & 12 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 @@ -87,14 +88,15 @@ QtObject {
return Qt.rect(rect.left / ratio, rect.top / ratio, rect.width / ratio, rect.height / ratio)
}

property point windowedPos: Qt.point(0, 0)
function updateWindowVisibilityAndPosition() {
if (!LauncherController.visible) return;

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

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

Expand All @@ -103,8 +105,8 @@ QtObject {
// 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
x = windowedPos.x
y = windowedPos.y - height - DesktopIntegration.dockSpacing
break
case Qt.LeftArrow:
x = dockGeometry.right + DesktopIntegration.dockSpacing
Expand All @@ -124,12 +126,6 @@ QtObject {
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 Down Expand Up @@ -235,8 +231,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 017c36d

Please sign in to comment.