Add desktop file interface
This commit is contained in:
parent
b0864bff80
commit
943a02d3e9
7 changed files with 88 additions and 1 deletions
|
@ -38,7 +38,12 @@ set(RESOURCES
|
||||||
resources.qrc
|
resources.qrc
|
||||||
)
|
)
|
||||||
|
|
||||||
add_executable(${PROJECT_NAME} ${SRCS} ${DBUS_SRCS} ${RESOURCES})
|
qt5_add_dbus_adaptor(DBUS_SOURCES
|
||||||
|
src/org.Cutefish.Dock.xml
|
||||||
|
src/mainwindow.h MainWindow)
|
||||||
|
set_source_files_properties(${DBUS_SOURCES} PROPERTIES SKIP_AUTOGEN ON)
|
||||||
|
|
||||||
|
add_executable(${PROJECT_NAME} ${SRCS} ${DBUS_SOURCES} ${RESOURCES})
|
||||||
target_link_libraries(${PROJECT_NAME} PRIVATE
|
target_link_libraries(${PROJECT_NAME} PRIVATE
|
||||||
Qt5::Core
|
Qt5::Core
|
||||||
Qt5::Widgets
|
Qt5::Widgets
|
||||||
|
|
|
@ -88,6 +88,43 @@ QVariant ApplicationModel::data(const QModelIndex &index, int role) const
|
||||||
return QVariant();
|
return QVariant();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ApplicationModel::addItem(const QString &desktopFile)
|
||||||
|
{
|
||||||
|
if (findItemByDesktop(desktopFile))
|
||||||
|
return;
|
||||||
|
|
||||||
|
beginInsertRows(QModelIndex(), rowCount(), rowCount());
|
||||||
|
ApplicationItem *item = new ApplicationItem;
|
||||||
|
QMap<QString, QString> desktopInfo = Utils::instance()->readInfoFromDesktop(desktopFile);
|
||||||
|
item->iconName = desktopInfo.value("Icon");
|
||||||
|
item->visibleName = desktopInfo.value("Name");
|
||||||
|
item->exec = desktopInfo.value("Exec");
|
||||||
|
item->desktopPath = desktopFile;
|
||||||
|
m_appItems << item;
|
||||||
|
endInsertRows();
|
||||||
|
|
||||||
|
savePinAndUnPinList();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ApplicationModel::removeItem(const QString &desktopFile)
|
||||||
|
{
|
||||||
|
ApplicationItem *item = findItemByDesktop(desktopFile);
|
||||||
|
|
||||||
|
if (item) {
|
||||||
|
int index = indexOf(item->id);
|
||||||
|
|
||||||
|
if (index != -1) {
|
||||||
|
beginRemoveRows(QModelIndex(), index, index);
|
||||||
|
m_appItems.removeAll(item);
|
||||||
|
endRemoveRows();
|
||||||
|
savePinAndUnPinList();
|
||||||
|
|
||||||
|
emit itemRemoved();
|
||||||
|
emit countChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void ApplicationModel::clicked(const QString &id)
|
void ApplicationModel::clicked(const QString &id)
|
||||||
{
|
{
|
||||||
ApplicationItem *item = findItemById(id);
|
ApplicationItem *item = findItemById(id);
|
||||||
|
@ -252,6 +289,16 @@ ApplicationItem *ApplicationModel::findItemById(const QString &id)
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ApplicationItem *ApplicationModel::findItemByDesktop(const QString &desktop)
|
||||||
|
{
|
||||||
|
for (ApplicationItem *item : m_appItems) {
|
||||||
|
if (item->desktopPath == desktop)
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
bool ApplicationModel::contains(const QString &id)
|
bool ApplicationModel::contains(const QString &id)
|
||||||
{
|
{
|
||||||
for (ApplicationItem *item : qAsConst(m_appItems)) {
|
for (ApplicationItem *item : qAsConst(m_appItems)) {
|
||||||
|
|
|
@ -47,6 +47,9 @@ public:
|
||||||
QHash<int, QByteArray> roleNames() const override;
|
QHash<int, QByteArray> roleNames() const override;
|
||||||
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
|
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
|
||||||
|
|
||||||
|
void addItem(const QString &desktopFile);
|
||||||
|
void removeItem(const QString &desktopFile);
|
||||||
|
|
||||||
Q_INVOKABLE void save() { savePinAndUnPinList(); }
|
Q_INVOKABLE void save() { savePinAndUnPinList(); }
|
||||||
|
|
||||||
Q_INVOKABLE void clicked(const QString &id);
|
Q_INVOKABLE void clicked(const QString &id);
|
||||||
|
@ -70,6 +73,8 @@ signals:
|
||||||
private:
|
private:
|
||||||
ApplicationItem *findItemByWId(quint64 wid);
|
ApplicationItem *findItemByWId(quint64 wid);
|
||||||
ApplicationItem *findItemById(const QString &id);
|
ApplicationItem *findItemById(const QString &id);
|
||||||
|
ApplicationItem *findItemByDesktop(const QString &desktop);
|
||||||
|
|
||||||
bool contains(const QString &id);
|
bool contains(const QString &id);
|
||||||
int indexOf(const QString &id);
|
int indexOf(const QString &id);
|
||||||
void initPinnedApplications();
|
void initPinnedApplications();
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
#include <QQuickView>
|
#include <QQuickView>
|
||||||
#include <QTranslator>
|
#include <QTranslator>
|
||||||
#include <QLocale>
|
#include <QLocale>
|
||||||
|
#include <QDBusConnection>
|
||||||
|
|
||||||
#include "applicationmodel.h"
|
#include "applicationmodel.h"
|
||||||
#include "dockbackground.h"
|
#include "dockbackground.h"
|
||||||
|
@ -33,6 +34,11 @@ int main(int argc, char *argv[])
|
||||||
QCoreApplication::setAttribute(Qt::AA_UseHighDpiPixmaps, true);
|
QCoreApplication::setAttribute(Qt::AA_UseHighDpiPixmaps, true);
|
||||||
QApplication app(argc, argv);
|
QApplication app(argc, argv);
|
||||||
|
|
||||||
|
if (!QDBusConnection::sessionBus().registerService("org.cutefish.Dock")) {
|
||||||
|
app.exit();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
qmlRegisterType<DockSettings>("Cutefish.Dock", 1, 0, "DockSettings");
|
qmlRegisterType<DockSettings>("Cutefish.Dock", 1, 0, "DockSettings");
|
||||||
qmlRegisterType<DockBackground>("Cutefish.Dock", 1, 0, "DockBackground");
|
qmlRegisterType<DockBackground>("Cutefish.Dock", 1, 0, "DockBackground");
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
|
|
||||||
#include "mainwindow.h"
|
#include "mainwindow.h"
|
||||||
#include "processprovider.h"
|
#include "processprovider.h"
|
||||||
|
#include "dockadaptor.h"
|
||||||
|
|
||||||
#include <QGuiApplication>
|
#include <QGuiApplication>
|
||||||
#include <QScreen>
|
#include <QScreen>
|
||||||
|
@ -44,6 +45,9 @@ MainWindow::MainWindow(QQuickView *parent)
|
||||||
, m_showTimer(new QTimer(this))
|
, m_showTimer(new QTimer(this))
|
||||||
, m_hideTimer(new QTimer(this))
|
, m_hideTimer(new QTimer(this))
|
||||||
{
|
{
|
||||||
|
new DockAdaptor(this);
|
||||||
|
QDBusConnection::sessionBus().registerObject(QStringLiteral("/Dock"), this);
|
||||||
|
|
||||||
setDefaultAlphaBuffer(false);
|
setDefaultAlphaBuffer(false);
|
||||||
setColor(Qt::transparent);
|
setColor(Qt::transparent);
|
||||||
|
|
||||||
|
@ -91,6 +95,16 @@ MainWindow::~MainWindow()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MainWindow::add(const QString &desktop)
|
||||||
|
{
|
||||||
|
m_appModel->addItem(desktop);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::remove(const QString &desktop)
|
||||||
|
{
|
||||||
|
m_appModel->removeItem(desktop);
|
||||||
|
}
|
||||||
|
|
||||||
void MainWindow::updateSize()
|
void MainWindow::updateSize()
|
||||||
{
|
{
|
||||||
resizeWindow();
|
resizeWindow();
|
||||||
|
|
|
@ -37,6 +37,9 @@ public:
|
||||||
explicit MainWindow(QQuickView *parent = nullptr);
|
explicit MainWindow(QQuickView *parent = nullptr);
|
||||||
~MainWindow();
|
~MainWindow();
|
||||||
|
|
||||||
|
void add(const QString &desktop);
|
||||||
|
void remove(const QString &desktop);
|
||||||
|
|
||||||
Q_INVOKABLE void updateSize();
|
Q_INVOKABLE void updateSize();
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
|
|
7
src/org.Cutefish.Dock.xml
Normal file
7
src/org.Cutefish.Dock.xml
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
|
||||||
|
<node>
|
||||||
|
<interface name="org.cutefish.Dock">
|
||||||
|
<method name="add"><arg name="desktopFile" type="s" direction="in"/></method>
|
||||||
|
<method name="remove"><arg name="desktopFile" type="s" direction="in"/></method>
|
||||||
|
</interface>
|
||||||
|
</node>
|
Loading…
Reference in a new issue