Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package haruna for openSUSE:Factory checked in at 2022-08-25 15:08:59 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/haruna (Old) and /work/SRC/openSUSE:Factory/.haruna.new.2083 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "haruna" Thu Aug 25 15:08:59 2022 rev:14 rq:999104 version:0.9.1 Changes: -------- --- /work/SRC/openSUSE:Factory/haruna/haruna.changes 2022-08-23 14:29:54.275644938 +0200 +++ /work/SRC/openSUSE:Factory/.haruna.new.2083/haruna.changes 2022-08-25 15:09:06.121216102 +0200 @@ -1,0 +2,8 @@ +Wed Aug 24 16:53:39 UTC 2022 - Luigi Baldoni <[email protected]> + +- Update to version 0.9.1 + Bugfixes: + * Fixed two broken actions in the global menu + * Fixed translations + +------------------------------------------------------------------- @@ -5,122 +13,32 @@ - * SubtitlesSettings: set default properties - * improve documentation - * mpvitem: initialize `ytdl-format` property - * PlaybackSettings: refactor `ytdl-format` setting - * SettingsWindow: remove `visible` property - * Settings: make text casing more consistent - * SubtitlesSettings: add settings for subtitle family and size - * use qFatal instead of throw - * build: fix build on bsd - * build: only use QtX11Extras on linux - * mpvcore: remove unused include - * mpvitem: remove unused include and variable - * mpvitem: refactor, code style changes - * AudioMenu: disable tracks menu when there are no tracks - * AudioMenu,SubtitlesMenu: set mpv models directly to the - instantiator - * Settings: remove footer from sidebar - * remove kxmlgui dependency - * mpv: don't set `ytdl-format` before loading a file - * ContextMenu: fix actions name - * Settings: make screenshot template field fill width - * Settings: move volume step option to audio page - * Settings: move seek options to playback page - * add option to restore window size and position - * SVN_SILENT made messages (.desktop file) - always resolve - ours - * GIT_SILENT made messages (after extraction) - * rename remaining actions instances to appActions - * MouseSettings: display action text - * actions: change actions context property name to appActions - * MouseSettings: use proxyActionsModel for the actions list - * SettingsWindow: change page when opening a settings page - through an action - * actions: map proxy row to source model row when saving a - shortcut - * Settings: set General as default window - * remove haction class and qaction includes - * CustomCommandsSettings: small refactoring - * remove ProxyCustomCommandsModel - * actionsmodel: add proxy model name filtering - * actionsmodel: handle shortcut clearing - * customcommandsmodel: update model on shortcut changes - * actionsmodel: add functions to edit and append custom actions - * refactor custom commands actions to use the ActionsModes - * remove ActionsManager class - * refactor actions to not use the KShortcutsDialog from KXmlGui - * main.qml: replace appActions with an alias to the actions - component - * add ListItem component - * PlaylistSettings: remove non-existent property - * ColorPickerButton: add border - * GeneralSettings: fix button bottom border being cut off - * SVN_SILENT made messages (.desktop file) - always resolve - ours - * GIT_SILENT made messages (after extraction) - * mpvrenderer: add display parameters to - mpv_render_context_create - * CustomCommands: show shortcut as buttons text, put shortcut - button in a loader - * add error message component to display errors coming from cpp - * mpvitem: return early with an error message if youtube - playlist is empty - * add option to pass error messages from cpp to qml - * customcommands: rename LoadOnStartup to SetOnStartup - * mpvcore: switch back to using ErrorReturn struct - * mpvcore: print errors instead of returning them - * MpvVideo: don't run timer when no file is loaded - * customcommands: add option to disable the loading of - commands at startup - * mpvitem: don't connect loadTracks to fileLoaded signal - * mpvcore: remove ErrorReturn struct and get_error method - * SVN_SILENT made messages (.desktop file) - always resolve - ours - * GIT_SILENT made messages (after extraction) - * SVN_SILENT made messages (.desktop file) - always resolve - ours - * GIT_SILENT made messages (after extraction) - * refactor(mpv): rename mpvobject to mpvitem - * refactor(mpv): some toUtf8().data() usage improvements - * refactor(mpv): use QMetaObject::invokeMethod with a pointer - to member function - * refactor(mpv): move mpv_set_wakeup_callback to mpvcore - * refactor(mpv): remove dup_qstring method - * chore: remove WTFPL license - * refactor(mpv) remove unnecessary includes - * refactor(mpv): move code from mpvqthelper into mpvcore - * chore: add license to mpvcore.cpp/h - * refactor(mpv): split core functionality from MpvObject into - MpvCore - * fix(mpv): call initProperties() - * refactor(mpv): move property initialization from qml to cpp - * chore: add license - * refactor: move MpvRederer class to own file - * refactor: move mpv files to own folder - * fix: close color picker window when closing the application - * feat: add tooltips to subtitle color picker and reset buttons - * chore: add license header to ColorPickerButton.qml - * feat: add settings to customize the subtitle - * feat(recentfiles): show correct youtube playlist title - * feat: add seek to start, seek to last position, load last - played file to menubar - * feat(recentfiles): add setting to set maximum number of - recent files - * feat(recentfiles): add option to clear recent files list - * fix: apply PlaybackSettings.playOnResume only to videos that - have been played before - * GIT_SILENT made messages (after extraction) - * GIT_SILENT made messages (after extraction) - * Fix minor typo - * fix: restore time position for youtube videos - * feat: add setting to start playback when resuming a file and - some other things - * feat: add mpv context menu - * GIT_SILENT made messages (after extraction) - * Improve hamburger menu - * GIT_SILENT made messages (after extraction) - * fix: more HamburgerMenu changes - * fix: some fixes for the menus - * fix: use KCONFIG_VERSION instead of - KFILEMETADATA_ENABLE_DEPRECATED_SINCE - * fix: save settings after toggling menubar/header - * Add hamburger menu in header + Features: + * Refactored the shortcuts configuration, now it's available + in the settings window with the other settings, instead of + opening another window + * Hamburger menu now only show a few actions, the rest are + available in a submenu + * When menubar is hidden the hamburger menu will be shown in + the header/toolbar and when the header is hidden it's shown + in the footer + * Added a proper context menu for the video + * Added setting to start playback when resuming playback of a + file + * Added setting to set maximum number of recent files + * Added option to clear recent files + * Added setting to restore window size and position + * Added settings to customize the subtitle font family, size, + style (bold, italic), color, shadow color, shadow offset, + border color, border width + * Moved seek settings to playback settings page + * Moved volume step setting to audio settings page + * Custom commands that run on startup can be turned off so + they are not set on next run + * In mouse settings the action text, which is translatable, is + shown instead of it's internal name + Bugfixes: + * Toggling menubar and header/toolbar through actions + remembers the state on next run + * Restore time position for youtube videos + * Improve mpv initialization to allow better hardware decoding + support + * Ytdl-format property can be overwritten by a custom command + action Old: ---- haruna-v0.9.0.tar.gz New: ---- haruna-v0.9.1.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ haruna.spec ++++++ --- /var/tmp/diff_new_pack.ip8cse/_old 2022-08-25 15:09:06.741217411 +0200 +++ /var/tmp/diff_new_pack.ip8cse/_new 2022-08-25 15:09:06.745217420 +0200 @@ -17,7 +17,7 @@ Name: haruna -Version: 0.9.0 +Version: 0.9.1 Release: 0 Summary: Video player built with Qt/QML on top of libmpv License: CC-BY-4.0 AND GPL-3.0-or-later AND WTFPL ++++++ haruna-v0.9.0.tar.gz -> haruna-v0.9.1.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/haruna-v0.9.0/CMakeLists.txt new/haruna-v0.9.1/CMakeLists.txt --- old/haruna-v0.9.0/CMakeLists.txt 2022-08-17 14:15:34.000000000 +0200 +++ new/haruna-v0.9.1/CMakeLists.txt 2022-08-24 18:15:54.000000000 +0200 @@ -7,7 +7,7 @@ cmake_minimum_required(VERSION 3.15) cmake_policy(SET CMP0048 NEW) -project(haruna VERSION 0.9.0 LANGUAGES CXX) +project(haruna VERSION 0.9.1 LANGUAGES CXX) set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_AUTOMOC ON) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/haruna-v0.9.0/data/org.kde.haruna.metainfo.xml new/haruna-v0.9.1/data/org.kde.haruna.metainfo.xml --- old/haruna-v0.9.0/data/org.kde.haruna.metainfo.xml 2022-08-17 14:15:34.000000000 +0200 +++ new/haruna-v0.9.1/data/org.kde.haruna.metainfo.xml 2022-08-24 18:15:54.000000000 +0200 @@ -279,6 +279,15 @@ </ul> </description> <releases> + <release version="0.9.1" date="2022-08-24"> + <description> + <p>Bugfixes:</p> + <ul> + <li>Fixed two broken actions in the global menu</li> + <li>Fixed translations</li> + </ul> + </description> + </release> <release version="0.9.0" date="2022-08-17"> <description> <p>Features:</p> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/haruna-v0.9.0/src/application.cpp new/haruna-v0.9.1/src/application.cpp --- old/haruna-v0.9.0/src/application.cpp 2022-08-17 14:15:34.000000000 +0200 +++ new/haruna-v0.9.1/src/application.cpp 2022-08-24 18:15:54.000000000 +0200 @@ -27,8 +27,6 @@ #include "videosettings.h" #include "worker.h" -#include <clocale> - #include <QApplication> #include <QCommandLineParser> #include <QCoreApplication> @@ -112,10 +110,6 @@ QApplication::setStyle(GeneralSettings::guiStyle()); } - // Qt sets the locale in the QGuiApplication constructor, but libmpv - // requires the LC_NUMERIC category to be set to "C", so change it back. - std::setlocale(LC_NUMERIC, "C"); - setupWorkerThread(); setupAboutData(); setupCommandLineParser(); @@ -202,6 +196,13 @@ qRegisterMetaType<PlayListItem*>(); qRegisterMetaType<TracksModel*>(); qRegisterMetaType<KFileMetaData::PropertyMap>("KFileMetaData::PropertyMap"); + // models + qmlRegisterType<SubtitlesFoldersModel>("org.kde.haruna.models", 1, 0, "SubtitlesFoldersModel"); + qmlRegisterType<ActionsModel>("org.kde.haruna.models", 1, 0, "ActionsModel"); + qmlRegisterType<ProxyActionsModel>("org.kde.haruna.models", 1, 0, "ProxyActionsModel"); + qmlRegisterType<CustomCommandsModel>("org.kde.haruna.models", 1, 0, "CustomCommandsModel"); + qmlRegisterType<RecentFilesModel>("org.kde.haruna.models", 1, 0, "RecentFilesModel"); + } void Application::setupQmlSettingsTypes() @@ -231,36 +232,12 @@ void Application::setupQmlContextProperties() { std::unique_ptr<LockManager> lockManager = std::make_unique<LockManager>(); - std::unique_ptr<SubtitlesFoldersModel> subsFoldersModel = std::make_unique<SubtitlesFoldersModel>(); - - m_engine->rootContext()->setContextProperty(QStringLiteral("app"), this); - qmlRegisterUncreatableType<Application>("Application", 1, 0, "Application", - QStringLiteral("Application should not be created in QML")); - - m_engine->rootContext()->setContextProperty(QStringLiteral("mediaPlayer2Player"), new MediaPlayer2Player(this)); - - m_engine->rootContext()->setContextProperty(QStringLiteral("lockManager"), lockManager.release()); - qmlRegisterUncreatableType<LockManager>("LockManager", 1, 0, "LockManager", - QStringLiteral("LockManager should not be created in QML")); - - m_engine->rootContext()->setContextProperty(QStringLiteral("subsFoldersModel"), subsFoldersModel.release()); - - - auto actionsModel = new ActionsModel(); - m_engine->rootContext()->setContextProperty(QStringLiteral("actionsModel"), actionsModel); - m_engine->rootContext()->setContextProperty(QStringLiteral("appActions"), &actionsModel->propertyMap); - auto proxyActionsModel = new ProxyActionsModel(); - proxyActionsModel->setSourceModel(actionsModel); - m_engine->rootContext()->setContextProperty(QStringLiteral("proxyActionsModel"), proxyActionsModel); - - auto customCommandsModel = new CustomCommandsModel(actionsModel); - m_engine->rootContext()->setContextProperty(QStringLiteral("customCommandsModel"), customCommandsModel); - - auto recentFilesModel = new RecentFilesModel(); - m_engine->rootContext()->setContextProperty(QStringLiteral("recentFilesModel"), recentFilesModel); - + m_engine->rootContext()->setContextProperty("lockManager", lockManager.release()); + m_engine->rootContext()->setContextProperty("app", this); + m_engine->rootContext()->setContextProperty("mediaPlayer2Player", new MediaPlayer2Player(this)); + m_engine->rootContext()->setContextProperty("appActions", new QQmlPropertyMap); m_engine->rootContext()->setContextObject(new KLocalizedContext(this)); - m_engine->rootContext()->setContextProperty(QStringLiteral("harunaAboutData"), + m_engine->rootContext()->setContextProperty("harunaAboutData", QVariant::fromValue(KAboutData::applicationData())); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/haruna-v0.9.0/src/models/customcommandsmodel.cpp new/haruna-v0.9.1/src/models/customcommandsmodel.cpp --- old/haruna-v0.9.0/src/models/customcommandsmodel.cpp 2022-08-17 14:15:34.000000000 +0200 +++ new/haruna-v0.9.1/src/models/customcommandsmodel.cpp 2022-08-24 18:15:54.000000000 +0200 @@ -13,40 +13,6 @@ CustomCommandsModel::CustomCommandsModel(QObject *parent) : QAbstractListModel(parent) { - QString ccConfig = Global::instance()->appConfigFilePath(Global::ConfigFile::CustomCommands); - m_customCommandsConfig = KSharedConfig::openConfig(ccConfig, KConfig::SimpleConfig); - QStringList groups = m_customCommandsConfig->groupList(); - - auto *actionsModel = qobject_cast<ActionsModel*>(parent); - beginInsertRows(QModelIndex(), 0, groups.size()); - for (const QString &groupName : qAsConst((groups))) { - auto configGroup = m_customCommandsConfig->group(groupName); - auto c = new Command(); - c->commandId = groupName; - c->command = configGroup.readEntry("Command", QString()); - c->osdMessage = configGroup.readEntry("OsdMessage", QString()); - c->type = configGroup.readEntry("Type", QString()); - c->shortcut = actionsModel->getShortcut(c->commandId, QString()); - c->order = configGroup.readEntry("Order", 0); - c->setOnStartup = configGroup.readEntry("SetOnStartup", true); - m_customCommands << c; - if (c->type == QStringLiteral("shortcut")) { - Action action; - action.name = c->commandId; - action.text = c->command; - action.description = c->osdMessage; - action.shortcut = c->shortcut; - action.type = QStringLiteral("CustomAction"); - actionsModel->actions().append(action); - } - } - - std::sort(m_customCommands.begin(), m_customCommands.end(), [=](Command *c1, Command *c2) { - return c1->order < c2->order; - }); - - endInsertRows(); - connect(this, &QAbstractListModel::rowsMoved, this, [=]() { for (int i = 0; i < m_customCommands.size(); ++i) { auto configGroup = m_customCommandsConfig->group(m_customCommands[i]->commandId); @@ -54,16 +20,6 @@ configGroup.sync(); } }); - - connect(actionsModel, &ActionsModel::shortcutChanged, this, [=](const QString &name, const QString &shortcut) { - for (int i {0}; i < m_customCommands.count(); ++i) { - if (m_customCommands[i]->commandId == name) { - m_customCommands[i]->shortcut = shortcut; - Q_EMIT dataChanged(index(i, 0), index(i, 0)); - return; - } - } - }); } int CustomCommandsModel::rowCount(const QModelIndex &parent) const @@ -111,6 +67,52 @@ return roles; } +void CustomCommandsModel::init() +{ + connect(appActionsModel(), &ActionsModel::shortcutChanged, this, [=](const QString &name, const QString &shortcut) { + for (int i {0}; i < m_customCommands.count(); ++i) { + if (m_customCommands[i]->commandId == name) { + m_customCommands[i]->shortcut = shortcut; + Q_EMIT dataChanged(index(i, 0), index(i, 0)); + return; + } + } + }); + + QString ccConfig = Global::instance()->appConfigFilePath(Global::ConfigFile::CustomCommands); + m_customCommandsConfig = KSharedConfig::openConfig(ccConfig, KConfig::SimpleConfig); + QStringList groups = m_customCommandsConfig->groupList(); + + beginInsertRows(QModelIndex(), 0, groups.size()); + for (const QString &groupName : qAsConst((groups))) { + auto configGroup = m_customCommandsConfig->group(groupName); + auto c = new Command(); + c->commandId = groupName; + c->command = configGroup.readEntry("Command", QString()); + c->osdMessage = configGroup.readEntry("OsdMessage", QString()); + c->type = configGroup.readEntry("Type", QString()); + c->shortcut = appActionsModel()->getShortcut(c->commandId, QString()); + c->order = configGroup.readEntry("Order", 0); + c->setOnStartup = configGroup.readEntry("SetOnStartup", true); + m_customCommands << c; + if (c->type == QStringLiteral("shortcut")) { + Action action; + action.name = c->commandId; + action.text = c->command; + action.description = c->osdMessage; + action.shortcut = c->shortcut; + action.type = QStringLiteral("CustomAction"); + appActionsModel()->appendCustomAction(action); + } + } + + std::sort(m_customCommands.begin(), m_customCommands.end(), [=](Command *c1, Command *c2) { + return c1->order < c2->order; + }); + + endInsertRows(); +} + void CustomCommandsModel::moveRows(int oldIndex, int newIndex) { if (oldIndex < newIndex) { @@ -150,14 +152,13 @@ endInsertRows(); if (c->type == QStringLiteral("shortcut")) { - auto *actionsModel = qobject_cast<ActionsModel*>(parent()); Action action; action.name = c->commandId; action.text = c->command; action.description = c->osdMessage; - action.shortcut = actionsModel->getShortcut(action.name, QString()); + action.shortcut = appActionsModel()->getShortcut(action.name, QString()); action.type = QStringLiteral("CustomAction"); - actionsModel->appendCustomAction(action); + appActionsModel()->appendCustomAction(action); } } @@ -177,8 +178,7 @@ Q_EMIT dataChanged(index(row, 0), index(row, 0)); if (c->type == QStringLiteral("shortcut")) { - auto *actionsModel = qobject_cast<ActionsModel*>(parent()); - actionsModel->editCustomAction(c->commandId, c->command, c->osdMessage); + appActionsModel()->editCustomAction(c->commandId, c->command, c->osdMessage); } } @@ -209,3 +209,17 @@ config->group("Shortcuts").deleteEntry(groupName); config->sync(); } + +ActionsModel *CustomCommandsModel::appActionsModel() +{ + return m_appActionsModel; +} + +void CustomCommandsModel::setAppActionsModel(ActionsModel *_appActionsModel) +{ + if (m_appActionsModel == _appActionsModel) { + return; + } + m_appActionsModel = _appActionsModel; + emit appActionsModelChanged(); +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/haruna-v0.9.0/src/models/customcommandsmodel.h new/haruna-v0.9.1/src/models/customcommandsmodel.h --- old/haruna-v0.9.0/src/models/customcommandsmodel.h 2022-08-17 14:15:34.000000000 +0200 +++ new/haruna-v0.9.1/src/models/customcommandsmodel.h 2022-08-24 18:15:54.000000000 +0200 @@ -17,6 +17,8 @@ { Q_OBJECT + Q_PROPERTY(ActionsModel* appActionsModel READ appActionsModel WRITE setAppActionsModel NOTIFY appActionsModelChanged) + struct Command { QString commandId; QString command; @@ -45,6 +47,7 @@ QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; QHash<int, QByteArray> roleNames() const override; + Q_INVOKABLE void init(); Q_INVOKABLE void moveRows(int oldIndex, int newIndex); Q_INVOKABLE void saveCustomCommand(const QString &command, const QString &osdMessage, @@ -56,9 +59,16 @@ Q_INVOKABLE void toggleCustomCommand(const QString &groupName, int row, bool setOnStartup); Q_INVOKABLE void deleteCustomCommand(const QString &groupName, int row); + ActionsModel *appActionsModel(); + void setAppActionsModel(ActionsModel *_appActionsModel); + +signals: + void appActionsModelChanged(); + private: KSharedConfig::Ptr m_customCommandsConfig; QList<Command *> m_customCommands; + ActionsModel *m_appActionsModel = nullptr; }; #endif // CUSTOMCOMMANDSMODEL_H diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/haruna-v0.9.0/src/mpv/mpvcore.cpp new/haruna-v0.9.1/src/mpv/mpvcore.cpp --- old/haruna-v0.9.0/src/mpv/mpvcore.cpp 2022-08-17 14:15:34.000000000 +0200 +++ new/haruna-v0.9.1/src/mpv/mpvcore.cpp 2022-08-24 18:15:54.000000000 +0200 @@ -7,9 +7,15 @@ #include "mpvcore.h" #include "mpvrenderer.h" +#include <clocale> + MpvCore::MpvCore(QQuickItem *parent) : QQuickFramebufferObject(parent) { + // Qt sets the locale in the QGuiApplication constructor, but libmpv + // requires the LC_NUMERIC category to be set to "C", so change it back. + std::setlocale(LC_NUMERIC, "C"); + m_mpv = mpv_create(); if (!m_mpv) { qFatal("could not create mpv context"); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/haruna-v0.9.0/src/qml/Actions.qml new/haruna-v0.9.1/src/qml/Actions.qml --- old/haruna-v0.9.0/src/qml/Actions.qml 2022-08-17 14:15:34.000000000 +0200 +++ new/haruna-v0.9.1/src/qml/Actions.qml 2022-08-24 18:15:54.000000000 +0200 @@ -55,7 +55,7 @@ const currentTrackId = mpv.getProperty("aid") if (currentTrackId === false) { - audioCycleUpAction.trigger() + actionsModel.signalEmitter("audioCycleUpAction") return } const track = tracks.find(t => t.type === "audio" && t.id === currentTrackId) @@ -73,7 +73,7 @@ const currentTrackId = mpv.getProperty("aid") if (currentTrackId === false) { - audioCycleDownAction.trigger() + actionsModel.signalEmitter("audioCycleDownAction") return } const track = tracks.find(t => t.type === "audio" && t.id === currentTrackId) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/haruna-v0.9.0/src/qml/Menus/Global/GlobalPlaybackMenu.qml new/haruna-v0.9.1/src/qml/Menus/Global/GlobalPlaybackMenu.qml --- old/haruna-v0.9.0/src/qml/Menus/Global/GlobalPlaybackMenu.qml 2022-08-17 14:15:34.000000000 +0200 +++ new/haruna-v0.9.1/src/qml/Menus/Global/GlobalPlaybackMenu.qml 2022-08-24 18:15:54.000000000 +0200 @@ -115,9 +115,9 @@ } Labs.MenuItem { - icon.name: appActions.seekPrevSubtitleAction.icon.name - text: appActions.seekPrevSubtitleAction.text - onTriggered: appActions.seekPrevSubtitleAction.trigger() + icon.name: appActions.seekPreviousSubtitleAction.icon.name + text: appActions.seekPreviousSubtitleAction.text + onTriggered: appActions.seekPreviousSubtitleAction.trigger() } Labs.MenuSeparator {} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/haruna-v0.9.0/src/qml/main.qml new/haruna-v0.9.1/src/qml/main.qml --- old/haruna-v0.9.0/src/qml/main.qml 2022-08-17 14:15:34.000000000 +0200 +++ new/haruna-v0.9.1/src/qml/main.qml 2022-08-24 18:15:54.000000000 +0200 @@ -14,6 +14,7 @@ import org.kde.kirigami 2.11 as Kirigami import org.kde.haruna 1.0 +import org.kde.haruna.models 1.0 import "Menus" import "Menus/Global" @@ -132,6 +133,31 @@ Actions {} + ActionsModel { + id: actionsModel + } + + ProxyActionsModel { + id: proxyActionsModel + + sourceModel: actionsModel + } + + CustomCommandsModel { + id: customCommandsModel + + appActionsModel: actionsModel + Component.onCompleted: init() + } + + RecentFilesModel { + id: recentFilesModel + } + + SubtitlesFoldersModel { + id: subtitlesFoldersModel + } + RowLayout { width: window.width * 0.8 > Kirigami.Units.gridUnit * 50 ? Kirigami.Units.gridUnit * 50
