aboutsummaryrefslogtreecommitdiff
path: root/src-qt5/core
diff options
context:
space:
mode:
Diffstat (limited to 'src-qt5/core')
-rw-r--r--src-qt5/core/libLumina/DesktopSettings.cpp3
-rw-r--r--src-qt5/core/libLumina/LDesktopUtils.cpp2
-rw-r--r--src-qt5/core/libLumina/LIconCache.h5
-rw-r--r--src-qt5/core/libLumina/LUtils.cpp6
-rw-r--r--src-qt5/core/libLumina/LuminaSingleApplication.cpp5
-rw-r--r--src-qt5/core/libLumina/LuminaXDG.cpp7
-rw-r--r--src-qt5/core/lumina-desktop-unified/LSession.cpp83
-rw-r--r--src-qt5/core/lumina-desktop-unified/LSession.h3
-rw-r--r--src-qt5/core/lumina-desktop-unified/defaults/desktop/panels.conf22
-rw-r--r--src-qt5/core/lumina-desktop-unified/defaults/desktop/screensaver.conf1
-rw-r--r--src-qt5/core/lumina-desktop-unified/extrafiles/screensavers/Matrix.json25
-rw-r--r--src-qt5/core/lumina-desktop-unified/extrafiles/screensavers/qml_scripts/Matrix.qml71
-rw-r--r--src-qt5/core/lumina-desktop-unified/global-includes.h7
-rw-r--r--src-qt5/core/lumina-desktop-unified/global-objects.h15
-rw-r--r--src-qt5/core/lumina-desktop-unified/lumina-desktop-unified.desktop7
-rw-r--r--src-qt5/core/lumina-desktop-unified/lumina-desktop.pro24
-rw-r--r--src-qt5/core/lumina-desktop-unified/main.cpp6
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-desktop/DesktopManager.cpp213
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-desktop/DesktopManager.h50
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-desktop/QMLImageProvider.cpp65
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-desktop/QMLImageProvider.h26
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-desktop/RootWindow-QML.cpp (renamed from src-qt5/core/lumina-desktop-unified/src-desktop/RootWindow.cpp)19
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-desktop/RootWindow-Widgets.cpp53
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-desktop/RootWindow.h6
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-desktop/desktop.pri33
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/NativeWindowObject.cpp330
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/NativeWindowObject.h178
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/PanelObject.cpp76
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/PanelObject.h8
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/RootDesktopObject.cpp174
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/RootDesktopObject.h52
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/ScreenObject.cpp34
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/ScreenObject.h9
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/src-cpp.pri6
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/ContextMenu.qml24
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/NativeWindow.qml223
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/Panel.qml35
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/RootDesktop.qml29
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/Screen.qml14
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/plugins/Clock_Digital.qml23
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/plugins/Spacer.qml15
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/plugins/StatusTray.qml94
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/plugins/plugins.pri11
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/plugins/status_tray/BatteryButton.qml20
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/plugins/status_tray/NetworkButton.qml23
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/plugins/status_tray/TrayIcon.qml34
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/plugins/status_tray/UpdateButton.qml24
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/plugins/status_tray/VolumeButton.qml25
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/src-qml.pri4
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/src-qml.qrc9
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-desktop/src-widgets/ContextMenu.cpp (renamed from src-qt5/core/lumina-desktop-unified/src-desktop/ContextMenu.cpp)19
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-desktop/src-widgets/ContextMenu.h (renamed from src-qt5/core/lumina-desktop-unified/src-desktop/ContextMenu.h)2
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-desktop/src-widgets/NativeWindow.cpp48
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-desktop/src-widgets/NativeWindow.h34
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-desktop/src-widgets/RootDesktop.cpp120
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-desktop/src-widgets/RootDesktop.h44
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-desktop/src-widgets/src-widgets.pri8
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-events/LShortcutEvents.h3
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-events/NativeEventFilter.cpp303
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-events/NativeEventFilter.h71
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-events/NativeKeyToQt.cpp528
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-events/NativeWindowSystem.cpp1076
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-events/NativeWindowSystem.h156
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-events/Window-mgmt.cpp (renamed from src-qt5/core/libLumina/obsolete/RootWindow-mgmt.cpp)50
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-events/events.pri19
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-screensaver/LScreenSaver.cpp12
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-screensaver/LScreenSaver.h4
-rw-r--r--src-qt5/core/lumina-desktop/LSession.cpp5
-rw-r--r--src-qt5/core/lumina-desktop/desktop-plugins/applauncher/AppLauncherPlugin.cpp16
-rw-r--r--src-qt5/core/lumina-desktop/desktop-plugins/applauncher/AppLauncherPlugin.h52
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_af.ts38
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_ar.ts38
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_az.ts38
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_bg.ts38
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_bn.ts38
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_bs.ts38
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_ca.ts38
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_cs.ts38
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_cy.ts38
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_da.ts38
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_de.ts38
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_el.ts38
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_en_AU.ts38
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_en_GB.ts38
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_en_ZA.ts38
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_es.ts38
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_et.ts38
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_eu.ts38
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_fa.ts38
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_fi.ts38
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_fr.ts38
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_fr_CA.ts38
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_gl.ts38
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_he.ts38
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_hi.ts38
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_hr.ts38
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_hu.ts38
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_id.ts38
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_is.ts38
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_it.ts38
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_ja.ts38
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_ka.ts38
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_ko.ts38
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_lt.ts38
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_lv.ts38
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_mk.ts38
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_mn.ts38
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_ms.ts38
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_mt.ts38
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_nb.ts38
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_nl.ts38
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_pa.ts38
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_pl.ts38
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_pt.ts38
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_pt_BR.ts38
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_ro.ts38
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_ru.ts38
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_sk.ts38
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_sl.ts38
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_sr.ts38
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_sv.ts38
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_sw.ts38
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_ta.ts38
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_tg.ts38
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_th.ts38
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_tr.ts38
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_uk.ts38
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_uz.ts38
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_vi.ts38
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_zh_CN.ts38
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_zh_HK.ts38
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_zh_TW.ts38
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_zu.ts38
-rw-r--r--src-qt5/core/lumina-desktop/panel-plugins/battery/LBattery.cpp21
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_af.ts26
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_ar.ts26
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_az.ts26
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_bg.ts26
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_bn.ts26
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_bs.ts26
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_ca.ts26
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_cs.ts26
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_cy.ts26
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_da.ts26
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_de.ts26
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_el.ts26
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_en_AU.ts26
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_en_GB.ts26
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_en_ZA.ts26
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_es.ts26
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_et.ts26
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_eu.ts26
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_fa.ts26
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_fi.ts26
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_fr.ts26
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_fr_CA.ts26
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_gl.ts26
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_he.ts26
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_hi.ts26
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_hr.ts26
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_hu.ts26
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_id.ts26
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_is.ts26
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_it.ts26
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_ja.ts26
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_ka.ts26
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_ko.ts26
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_lt.ts26
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_lv.ts26
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_mk.ts26
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_mn.ts26
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_ms.ts26
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_mt.ts26
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_nb.ts26
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_nl.ts26
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_pa.ts26
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_pl.ts26
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_pt.ts26
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_pt_BR.ts26
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_ro.ts26
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_ru.ts26
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_sk.ts26
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_sl.ts26
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_sr.ts26
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_sv.ts26
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_sw.ts26
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_ta.ts26
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_tg.ts26
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_th.ts26
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_tr.ts26
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_uk.ts26
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_uz.ts26
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_vi.ts26
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_zh_CN.ts26
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_zh_HK.ts26
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_zh_TW.ts26
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_zu.ts26
-rw-r--r--src-qt5/core/lumina-open/main.cpp36
-rw-r--r--src-qt5/core/lumina-theme-engine/src/lthemeengine-qtplugin/lthemeengine-qtplugin.pro3
-rw-r--r--src-qt5/core/lumina-theme-engine/src/lthemeengine-qtplugin/lthemeengineplatformtheme.cpp88
-rw-r--r--src-qt5/core/lumina-theme-engine/src/lthemeengine-qtplugin/lthemeengineplatformtheme.h4
201 files changed, 6774 insertions, 2211 deletions
diff --git a/src-qt5/core/libLumina/DesktopSettings.cpp b/src-qt5/core/libLumina/DesktopSettings.cpp
index f1c74bc5..509afa83 100644
--- a/src-qt5/core/libLumina/DesktopSettings.cpp
+++ b/src-qt5/core/libLumina/DesktopSettings.cpp
@@ -17,6 +17,7 @@
// === PUBLIC ===
DesktopSettings::DesktopSettings(QObject *parent) : QObject(parent){
+ qRegisterMetaType< DesktopSettings::File >("DesktopSettings::File");
watcher = 0;
runmode = DesktopSettings::UserFull;
}
@@ -275,6 +276,7 @@ QString DesktopSettings::rel_path(DesktopSettings::File file){
//=== PRIVATE SLOTS ===
void DesktopSettings::fileChanged(QString file){
+ //qDebug() << "Got File Changed:" << file;
//QFileSystemWatcher change detected
if(!watcher->files().contains(file)){
//Make sure this file stays watched for changes
@@ -287,6 +289,7 @@ void DesktopSettings::fileChanged(QString file){
QList< DesktopSettings::File > types = files.keys();
for(int i=0; i<types.length(); i++){
if(files[types[i]].contains(file)){
+ //qDebug() << "Emit File Type Changed:" << types[i];
emit FileModified(types[i]);
break;
}
diff --git a/src-qt5/core/libLumina/LDesktopUtils.cpp b/src-qt5/core/libLumina/LDesktopUtils.cpp
index 5595532a..fb44531a 100644
--- a/src-qt5/core/libLumina/LDesktopUtils.cpp
+++ b/src-qt5/core/libLumina/LDesktopUtils.cpp
@@ -14,7 +14,7 @@
#include "LuminaThemes.h"
QString LDesktopUtils::LuminaDesktopVersion(){
- QString ver = "1.4.1";
+ QString ver = "1.4.2";
#ifdef GIT_VERSION
ver.append( QString(" (Git Revision: %1)").arg(GIT_VERSION) );
#endif
diff --git a/src-qt5/core/libLumina/LIconCache.h b/src-qt5/core/libLumina/LIconCache.h
index 691d328c..6fc693d6 100644
--- a/src-qt5/core/libLumina/LIconCache.h
+++ b/src-qt5/core/libLumina/LIconCache.h
@@ -7,6 +7,9 @@
// This is a simple class for loading/serving icon files
// from the icon theme or local filesystem
//===========================================
+#ifndef _LUMINA_LIBRARY_ICON_CACHE_H
+#define _LUMINA_LIBRARY_ICON_CACHE_H
+
#include <QHash>
#include <QIcon>
#include <QPixmap>
@@ -79,3 +82,5 @@ signals:
void InternalIconLoaded(QString, QDateTime, QByteArray*); //INTERNAL SIGNAL - DO NOT USE in other classes/objects
void IconAvailable(QString); //way for classes to listen/reload icons as they change
};
+
+#endif
diff --git a/src-qt5/core/libLumina/LUtils.cpp b/src-qt5/core/libLumina/LUtils.cpp
index 3d3c878a..6ca8b679 100644
--- a/src-qt5/core/libLumina/LUtils.cpp
+++ b/src-qt5/core/libLumina/LUtils.cpp
@@ -273,13 +273,15 @@ QStringList LUtils::videoExtensions() {
QStringList LUtils::imageExtensions(bool wildcards){
//Note that all the image extensions are lowercase!!
static QStringList imgExtensions;
+ static QStringList imgExtensionsWC;
if(imgExtensions.isEmpty()){
QList<QByteArray> fmt = QImageReader::supportedImageFormats();
for(int i=0; i<fmt.length(); i++){
- if(wildcards){ imgExtensions << "*."+QString::fromLocal8Bit(fmt[i]); }
- else{ imgExtensions << QString::fromLocal8Bit(fmt[i]); }
+ imgExtensionsWC << "*."+QString::fromLocal8Bit(fmt[i]);
+ imgExtensions << QString::fromLocal8Bit(fmt[i]);
}
}
+ if(wildcards){ return imgExtensionsWC; }
return imgExtensions;
}
diff --git a/src-qt5/core/libLumina/LuminaSingleApplication.cpp b/src-qt5/core/libLumina/LuminaSingleApplication.cpp
index 6107aff8..379ac02d 100644
--- a/src-qt5/core/libLumina/LuminaSingleApplication.cpp
+++ b/src-qt5/core/libLumina/LuminaSingleApplication.cpp
@@ -22,7 +22,10 @@ LSingleApplication::LSingleApplication(int &argc, char **argv, QString appname)
QString username = QString::number(getuid());
//For locking the process use the official process name - not the user input (no masking)
appname = this->applicationName();
- cfile = cfile.arg( username, appname, QString::number(QX11Info::appScreen()) );
+ QString display = QString(getenv("DISPLAY"));
+ if(display.startsWith(":")){ display.remove(0,1); }
+ display = display.section(".",0,0);
+ cfile = cfile.arg( username, appname, display );
lockfile = new QLockFile(cfile+"-lock");
lockfile->setStaleLockTime(0); //long-lived processes
for(int i=1; i<argc; i++){
diff --git a/src-qt5/core/libLumina/LuminaXDG.cpp b/src-qt5/core/libLumina/LuminaXDG.cpp
index e1c582d9..95585f1e 100644
--- a/src-qt5/core/libLumina/LuminaXDG.cpp
+++ b/src-qt5/core/libLumina/LuminaXDG.cpp
@@ -853,9 +853,12 @@ QIcon LXDG::findIcon(QString iconName, QString fallback){
QIcon tmp;
if(!iconName.contains("libreoffice")){ //libreoffice is stupid - their svg icons are un-renderable with Qt
tmp = QIcon::fromTheme(iconName);
+ /*if(iconName.contains("start-here")){
+ qDebug() << "[ICON]" << iconName << "found:" << !tmp.isNull() << tmp.name();
+ }*/
//if(tmp.isNull()){ tmp = QIcon::fromTheme(fallback); }
}
- if(!tmp.isNull()){ return tmp; } //found one in the theme
+ if(!tmp.isNull() && tmp.name()==iconName){ return tmp; } //found this in the theme
//NOTE: This was re-written on 11/10/15 to avoid using the QIcon::fromTheme() framework
@@ -964,6 +967,8 @@ QIcon LXDG::findIcon(QString iconName, QString fallback){
else if(iconName.contains("-x-") && !iconName.endsWith("-x-generic")){
//mimetype - try to use the generic type icon
ico = LXDG::findIcon(iconName.section("-x-",0,0)+"-x-generic", "");
+ }else if(iconName.contains("-")){
+ ico = LXDG::findIcon(iconName.section("-",0,-2), ""); //chop the last modifier off the end and try again
}
}
if(ico.isNull()){
diff --git a/src-qt5/core/lumina-desktop-unified/LSession.cpp b/src-qt5/core/lumina-desktop-unified/LSession.cpp
index e1251c01..1c103fab 100644
--- a/src-qt5/core/lumina-desktop-unified/LSession.cpp
+++ b/src-qt5/core/lumina-desktop-unified/LSession.cpp
@@ -7,9 +7,8 @@
#include "LSession.h"
#include "global-objects.h"
-#include "src-desktop/ContextMenu.h"
-
#include "BootSplash.h"
+
#ifndef DEBUG
#define DEBUG 1
#endif
@@ -22,12 +21,13 @@ QThread* Lumina::EVThread = 0;
RootWindow* Lumina::ROOTWIN = 0;
XDGDesktopList* Lumina::APPLIST = 0;
LShortcutEvents* Lumina::SHORTCUTS = 0;
+DesktopManager* Lumina::DESKMAN = 0;
LSession::LSession(int &argc, char ** argv) : LSingleApplication(argc, argv, "lumina-desktop-unified"){
//Initialize the global objects to null pointers
qRegisterMetaType< Qt::Key >("Qt::Key");
- qRegisterMetaType< NativeWindow::Property >("NativeWindow::Property");
- qRegisterMetaType< QList< NativeWindow::Property > >("QList<NativeWindow::Property>");
+ qRegisterMetaType< NativeWindowObject::Property >("NativeWindowObject::Property");
+ qRegisterMetaType< QList< NativeWindowObject::Property > >("QList<NativeWindowObject::Property>");
qRegisterMetaType< NativeWindowSystem::MouseButton >("NativeWindowSystem::MouseButton");
mediaObj = 0; //private object used for playing login/logout chimes
@@ -49,14 +49,14 @@ LSession::LSession(int &argc, char ** argv) : LSingleApplication(argc, argv, "lu
Lumina::NEF = new NativeEventFilter();
Lumina::NWS = new NativeWindowSystem();
Lumina::SS = new LScreenSaver();
+ Lumina::DESKMAN = new DesktopManager();
//Now put the Native Window System into it's own thread to keep things snappy
Lumina::EVThread = new QThread();
- //Lumina::NWS->moveToThread(Lumina::EVThread);
- //Lumina::EVThread->start();
+ Lumina::DESKMAN->moveToThread(Lumina::EVThread);
+ Lumina::EVThread->start();
Lumina::APPLIST = XDGDesktopList::instance();
Lumina::ROOTWIN = new RootWindow();
Lumina::SHORTCUTS = new LShortcutEvents(); //this can be moved to it's own thread eventually as well
-
setupGlobalConnections();
} //end check for primary process
}
@@ -73,6 +73,9 @@ LSession::~LSession(){
if(DesktopSettings::instance()!=0){ DesktopSettings::instance()->deleteLater(); }
if(Lumina::ROOTWIN!=0){ Lumina::ROOTWIN->deleteLater(); }
if(Lumina::APPLIST!=0){ Lumina::APPLIST->deleteLater(); }
+ if(Lumina::DESKMAN!=0){ Lumina::DESKMAN->deleteLater(); }
+ if(OSInterface::instance()->isRunning()){ OSInterface::instance()->stop(); }
+ OSInterface::instance()->deleteLater();
}
void LSession::setupSession(){
@@ -104,9 +107,14 @@ void LSession::setupSession(){
splash.showScreen("user");
if(DEBUG){ qDebug() << " - Init User Files:" << timer->elapsed();}
//checkUserFiles(); //adds these files to the watcher as well
+ Lumina::NWS->setRoot_numberOfWorkspaces(QStringList() << "one" << "two");
+ Lumina::NWS->setRoot_currentWorkspace(0);
+ OSInterface::instance()->start();
+
+ Lumina::DESKMAN->start();
Lumina::ROOTWIN->start();
//Initialize the internal variables
- //DESKTOPS.clear();
+
//Start the background system tray
splash.showScreen("systray");
@@ -115,52 +123,18 @@ void LSession::setupSession(){
splash.showScreen("apps");
if(DEBUG){ qDebug() << " - Populate App List:" << timer->elapsed();}
Lumina::APPLIST->updateList();
- //appmenu = new AppMenu();
+
splash.showScreen("menus");
- //if(DEBUG){ qDebug() << " - Init SettingsMenu:" << timer->elapsed();}
- //settingsmenu = new SettingsMenu();
- //if(DEBUG){ qDebug() << " - Init SystemWindow:" << timer->elapsed();}
- //sysWindow = new SystemWindow();
+
//Initialize the desktops
splash.showScreen("desktop");
- if(DEBUG){ qDebug() << " - Init Desktops:" << timer->elapsed(); }
- QList<QScreen*> scrns= QApplication::screens();
- for(int i=0; i<scrns.length(); i++){
- qDebug() << " --- Load Wallpaper for Screen:" << scrns[i]->name();
- RootDesktopObject::instance()->ChangeWallpaper(scrns[i]->name(),QUrl::fromLocalFile(LOS::LuminaShare()+"desktop-background.jpg").toString() );
- }
- Lumina::NWS->setRoot_numberOfWorkspaces(QStringList() << "one" << "two");
- Lumina::NWS->setRoot_currentWorkspace(0);
- if(DEBUG){ qDebug() << " - Create Desktop Context Menu"; }
-
- /*DesktopContextMenu *cmenu = new DesktopContextMenu(Lumina::ROOTWIN);
- connect(cmenu, SIGNAL(showLeaveDialog()), this, SLOT(StartLogout()) );
- cmenu->start();*/
-
- //desktopFiles = QDir(QDir::homePath()+"/Desktop").entryInfoList(QDir::NoDotAndDotDot | QDir::Files | QDir::Dirs, QDir::Name | QDir::IgnoreCase | QDir::DirsFirst);
- //updateDesktops();
//for(int i=0; i<6; i++){ LSession::processEvents(); } //Run through this a few times so the interface systems get up and running
//Now setup the system watcher for changes
splash.showScreen("final");
- //if(DEBUG){ qDebug() << " - Init QFileSystemWatcher:" << timer->elapsed();}
- /*watcher = new QFileSystemWatcher(this);
- QString confdir = sessionsettings->fileName().section("/",0,-2);
- watcherChange(sessionsettings->fileName() );
- watcherChange( confdir+"/desktopsettings.conf" );
- watcherChange( confdir+"/fluxbox-init" );
- watcherChange( confdir+"/fluxbox-keys" );
- watcherChange( confdir+"/favorites.list" );
- //Try to watch the localized desktop folder too
- if(QFile::exists(QDir::homePath()+"/"+tr("Desktop"))){ watcherChange( QDir::homePath()+"/"+tr("Desktop") ); }
- watcherChange( QDir::homePath()+"/Desktop" );*/
-
- //connect internal signals/slots
- //connect(watcher, SIGNAL(directoryChanged(QString)), this, SLOT(watcherChange(QString)) );
- //connect(watcher, SIGNAL(fileChanged(QString)), this, SLOT(watcherChange(QString)) );
- //connect(this, SIGNAL(aboutToQuit()), this, SLOT(SessionEnding()) );
+
if(DEBUG){ qDebug() << " - Start Screen Saver:" << timer->elapsed();}
Lumina::SS->start();
@@ -231,16 +205,17 @@ void LSession::setupGlobalConnections(){
connect(RootDesktopObject::instance(), SIGNAL(mouseMoved()), Lumina::SS, SLOT(newInputEvent()) );
connect(RootDesktopObject::instance(), SIGNAL(startLogout()), this, SLOT(StartLogout()) );
connect(RootDesktopObject::instance(), SIGNAL(lockScreen()), Lumina::SS, SLOT(LockScreenNow()) );
+ connect(RootDesktopObject::instance(), SIGNAL(launchApplication(QString)), this, SLOT(LaunchStandardApplication(QString)) );
//Native Window Class connections
connect(Lumina::NEF, SIGNAL(WindowCreated(WId)), Lumina::NWS, SLOT(NewWindowDetected(WId)));
connect(Lumina::NEF, SIGNAL(WindowDestroyed(WId)), Lumina::NWS, SLOT(WindowCloseDetected(WId)));
- connect(Lumina::NEF, SIGNAL(WindowPropertyChanged(WId, NativeWindow::Property)), Lumina::NWS, SLOT(WindowPropertyChanged(WId, NativeWindow::Property)));
- connect(Lumina::NEF, SIGNAL(WindowPropertiesChanged(WId, QList<NativeWindow::Property>)), Lumina::NWS, SLOT(WindowPropertiesChanged(WId, QList<NativeWindow::Property>)) );
- connect(Lumina::NEF, SIGNAL(WindowPropertyChanged(WId, NativeWindow::Property, QVariant)), Lumina::NWS, SLOT(WindowPropertyChanged(WId, NativeWindow::Property, QVariant)));
- connect(Lumina::NEF, SIGNAL(WindowPropertiesChanged(WId, QList<NativeWindow::Property>, QList<QVariant>)), Lumina::NWS, SLOT(WindowPropertiesChanged(WId, QList<NativeWindow::Property>, QList<QVariant>)) );
- connect(Lumina::NEF, SIGNAL(RequestWindowPropertyChange(WId, NativeWindow::Property, QVariant)), Lumina::NWS, SLOT(RequestPropertyChange(WId, NativeWindow::Property, QVariant)));
- connect(Lumina::NEF, SIGNAL(RequestWindowPropertiesChange(WId, QList<NativeWindow::Property>, QList<QVariant>)), Lumina::NWS, SLOT(RequestPropertiesChange(WId, QList<NativeWindow::Property>, QList<QVariant>)));
+ connect(Lumina::NEF, SIGNAL(WindowPropertyChanged(WId, NativeWindowObject::Property)), Lumina::NWS, SLOT(WindowPropertyChanged(WId, NativeWindowObject::Property)));
+ connect(Lumina::NEF, SIGNAL(WindowPropertiesChanged(WId, QList<NativeWindowObject::Property>)), Lumina::NWS, SLOT(WindowPropertiesChanged(WId, QList<NativeWindowObject::Property>)) );
+ connect(Lumina::NEF, SIGNAL(WindowPropertyChanged(WId, NativeWindowObject::Property, QVariant)), Lumina::NWS, SLOT(WindowPropertyChanged(WId, NativeWindowObject::Property, QVariant)));
+ connect(Lumina::NEF, SIGNAL(WindowPropertiesChanged(WId, QList<NativeWindowObject::Property>, QList<QVariant>)), Lumina::NWS, SLOT(WindowPropertiesChanged(WId, QList<NativeWindowObject::Property>, QList<QVariant>)) );
+ connect(Lumina::NEF, SIGNAL(RequestWindowPropertyChange(WId, NativeWindowObject::Property, QVariant)), Lumina::NWS, SLOT(RequestPropertyChange(WId, NativeWindowObject::Property, QVariant)));
+ connect(Lumina::NEF, SIGNAL(RequestWindowPropertiesChange(WId, QList<NativeWindowObject::Property>, QList<QVariant>)), Lumina::NWS, SLOT(RequestPropertiesChange(WId, QList<NativeWindowObject::Property>, QList<QVariant>)));
connect(Lumina::NEF, SIGNAL(TrayWindowCreated(WId)), Lumina::NWS, SLOT(NewTrayWindowDetected(WId)));
connect(Lumina::NEF, SIGNAL(TrayWindowDestroyed(WId)), Lumina::NWS, SLOT(WindowCloseDetected(WId)));
connect(Lumina::NEF, SIGNAL(PossibleDamageEvent(WId)), Lumina::NWS, SLOT(CheckDamageID(WId)));
@@ -268,7 +243,11 @@ void LSession::setupGlobalConnections(){
connect(Lumina::NWS, SIGNAL(MouseReleaseDetected(WId, NativeWindowSystem::MouseButton)), Lumina::SHORTCUTS, SLOT(MouseRelease(WId, NativeWindowSystem::MouseButton)) );
//NWS Events to the window system
- connect(Lumina::NWS, SIGNAL(NewWindowAvailable(NativeWindow*)), Lumina::ROOTWIN, SLOT(NewWindow(NativeWindow*)) );
+ connect(Lumina::NWS, SIGNAL(NewWindowAvailable(NativeWindowObject*)), Lumina::DESKMAN, SLOT(NewWindowAvailable(NativeWindowObject*)) );
+ connect(Lumina::NWS, SIGNAL(WindowClosed()), Lumina::DESKMAN, SLOT(syncWindowList()) );
+ connect(Lumina::NWS, SIGNAL(NewTrayWindowAvailable(NativeWindowObject*)), Lumina::DESKMAN, SLOT(NewTrayWindowAvailable(NativeWindowObject*)) );
+ connect(Lumina::NWS, SIGNAL(TrayWindowClosed()), Lumina::DESKMAN, SLOT(syncTrayWindowList()) );
+
}
//=================
diff --git a/src-qt5/core/lumina-desktop-unified/LSession.h b/src-qt5/core/lumina-desktop-unified/LSession.h
index 61da559b..fb4bf29f 100644
--- a/src-qt5/core/lumina-desktop-unified/LSession.h
+++ b/src-qt5/core/lumina-desktop-unified/LSession.h
@@ -28,6 +28,9 @@ private:
QTranslator *currTranslator;
+ //Extra background threads for individual objects
+
+
public slots:
void setupSession(); //called during startup only
diff --git a/src-qt5/core/lumina-desktop-unified/defaults/desktop/panels.conf b/src-qt5/core/lumina-desktop-unified/defaults/desktop/panels.conf
new file mode 100644
index 00000000..f0cdc5a4
--- /dev/null
+++ b/src-qt5/core/lumina-desktop-unified/defaults/desktop/panels.conf
@@ -0,0 +1,22 @@
+[General]
+
+[templates]
+windows/anchor="bottom"
+windows/align="center"
+windows/length_percent=100
+windows/width_percent=3
+windows/plugins=""
+windows/background="#1A000000"
+
+[default]
+active_ids="initial"
+
+[session]
+
+[initial]
+anchor="bottom"
+align="center"
+length_percent=100
+width_percent=2.1
+plugins=""
+background="#33000000"
diff --git a/src-qt5/core/lumina-desktop-unified/defaults/desktop/screensaver.conf b/src-qt5/core/lumina-desktop-unified/defaults/desktop/screensaver.conf
index b4bfec59..98e6f20a 100644
--- a/src-qt5/core/lumina-desktop-unified/defaults/desktop/screensaver.conf
+++ b/src-qt5/core/lumina-desktop-unified/defaults/desktop/screensaver.conf
@@ -1,3 +1,2 @@
[General]
default_plugin="random"
-plugin_VGA-0="random"
diff --git a/src-qt5/core/lumina-desktop-unified/extrafiles/screensavers/Matrix.json b/src-qt5/core/lumina-desktop-unified/extrafiles/screensavers/Matrix.json
new file mode 100644
index 00000000..52cd16ee
--- /dev/null
+++ b/src-qt5/core/lumina-desktop-unified/extrafiles/screensavers/Matrix.json
@@ -0,0 +1,25 @@
+{
+ "name" : {
+ "default" : "Matrix"
+ },
+ "description" : {
+ "default" : "Erratic falling columns of various characters with a set color"
+ },
+ "author" : {
+ "name" : "Zackary Welch",
+ "email" : "zwelch@ixsystems.com",
+ "website" : "https://github.com/ZackaryWelch",
+ "company" : "iXsystems",
+ "company_website" : "http://ixsystems.com"
+ },
+ "meta" : {
+ "license" : "3-clause BSD",
+ "license_url" : "https://github.com/trueos/lumina/blob/master/LICENSE",
+ "copyright" : "Copyright (c) 2017, Ken Moore (ken@ixsystems.com)",
+ "date_created" : "20180103",
+ "version" : "1.0"
+ },
+ "qml" : {
+ "exec" : "qml_scripts/Matrix.qml"
+ }
+}
diff --git a/src-qt5/core/lumina-desktop-unified/extrafiles/screensavers/qml_scripts/Matrix.qml b/src-qt5/core/lumina-desktop-unified/extrafiles/screensavers/qml_scripts/Matrix.qml
new file mode 100644
index 00000000..d4031201
--- /dev/null
+++ b/src-qt5/core/lumina-desktop-unified/extrafiles/screensavers/qml_scripts/Matrix.qml
@@ -0,0 +1,71 @@
+import QtQuick 2.0
+import QtMultimedia 5.7
+import QtQuick.Window 2.2
+
+Rectangle {
+ width: Window.width
+ height: Window.height
+ color: "black"
+
+ Row{
+ id: masterRow
+ anchors.left: parent.left
+ anchors.horizontalCenter: parent.horizontalCenter
+ width: parent.width
+ spacing: 5
+ Repeater {
+ id: cR
+ model: Window.width / 15 + 1
+ Column {
+ id: masterColumn
+ width: 10
+ Text {
+ id: column
+ color: "#ff4d4d"
+ font.pixelSize: 10
+ transform: Rotation { origin.x: 0; origin.y: 0; angle: 90 }
+ Timer {
+ interval: 50
+ repeat: true
+ running: true
+ onTriggered: {
+ if(Math.random() < 0.95) {
+ var bottom = column.text.charAt(column.text.length-1)
+ var newString = bottom+column.text.substring(0, column.text.length-1)
+ column.text = newString
+ interval = 50
+ }else{
+ interval = 1000
+ }
+ }
+ }
+ Component.onCompleted: {
+ var str = " "
+ var numberChar = Math.random() * 100 + (Window.height * 0.1);
+ if(Math.random() < 0.80) {
+ while(str.length < numberChar) {
+ if(Math.random() < 0.5) {
+ var charCount = Math.random() * 8 + 10
+ var segStr = ""
+ while(segStr.length < charCount) {
+ var randChar = String.fromCharCode(0x30A0 + Math.random() * (0x30FF-0x30A0+1));
+ segStr += randChar
+ }
+ str += segStr
+ }else{
+ var charCount = Math.random() * 6 + 14
+ var segStr = ""
+ while(segStr.length < charCount) {
+ segStr += " "
+ }
+ str += segStr
+ }
+ }
+ }
+ column.text = str
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/src-qt5/core/lumina-desktop-unified/global-includes.h b/src-qt5/core/lumina-desktop-unified/global-includes.h
index fbc3c4f7..69f1a3b0 100644
--- a/src-qt5/core/lumina-desktop-unified/global-includes.h
+++ b/src-qt5/core/lumina-desktop-unified/global-includes.h
@@ -58,6 +58,7 @@
#include <QQmlContext>
#include <QQmlEngine>
#include <QQuickImageProvider>
+#include <QtConcurrent>
// libLumina includes
#include <LuminaX11.h>
@@ -69,15 +70,13 @@
#include <LuminaSingleApplication.h>
#include <DesktopSettings.h>
#include <ExternalProcess.h>
-#include <NativeWindow.h>
-#include <NativeWindowSystem.h>
-#include <NativeEventFilter.h>
#include <XDGMime.h>
#include <LIconCache.h>
#include <LFileInfo.h>
+#include <framework-OSInterface.h>
// C++ Backend classes for QML interface
-#include <RootDesktopObject.h>
+#include <NativeWindowObject.h>
#include <ScreenObject.h>
//Setup any global defines (no classes or global objects: use "global-objects.h" for that)
diff --git a/src-qt5/core/lumina-desktop-unified/global-objects.h b/src-qt5/core/lumina-desktop-unified/global-objects.h
index c204587f..bba55b84 100644
--- a/src-qt5/core/lumina-desktop-unified/global-objects.h
+++ b/src-qt5/core/lumina-desktop-unified/global-objects.h
@@ -21,10 +21,15 @@
//#ifndef USE_WAYLAND
//#include "src-events/LXcbEventFilter.h"
//#endif
-#include "src-events/LShortcutEvents.h"
+#include "src-events/NativeWindowSystem.h"
+#include "src-events/NativeEventFilter.h"
+#include "src-desktop/src-cpp/RootDesktopObject.h"
+
+#include "src-events/LShortcutEvents.h"
+#include "src-desktop/DesktopManager.h"
#include "src-screensaver/LScreenSaver.h"
-//#include "src-WM/LWindowManager.h"
+
#include <RootWindow.h>
#include "LSession.h"
@@ -43,13 +48,13 @@ namespace Lumina{
//extern EventFilter *EFILTER; //Native Event Watcher
extern LShortcutEvents *SHORTCUTS; //Keyboard/mouse shortcut events
- //extern DesktopSettings *SETTINGS; //All Settings files
+
//ScreenSaver
extern LScreenSaver *SS;
//Root Window
extern RootWindow *ROOTWIN;
- //Window Manager
- //LWindowManager *WM;
+ //Desktop Manager
+ extern DesktopManager *DESKMAN;
//Application List
extern XDGDesktopList *APPLIST;
diff --git a/src-qt5/core/lumina-desktop-unified/lumina-desktop-unified.desktop b/src-qt5/core/lumina-desktop-unified/lumina-desktop-unified.desktop
new file mode 100644
index 00000000..9f082647
--- /dev/null
+++ b/src-qt5/core/lumina-desktop-unified/lumina-desktop-unified.desktop
@@ -0,0 +1,7 @@
+[Desktop Entry]
+Exec=start-lumina-desktop --unified
+TryExec=lumina-desktop-unified
+Icon=Lumina-DE
+Type=Application
+Name=Lumina 2
+Comment=Illuminating the desktop
diff --git a/src-qt5/core/lumina-desktop-unified/lumina-desktop.pro b/src-qt5/core/lumina-desktop-unified/lumina-desktop.pro
index bb987e25..e601bb09 100644
--- a/src-qt5/core/lumina-desktop-unified/lumina-desktop.pro
+++ b/src-qt5/core/lumina-desktop-unified/lumina-desktop.pro
@@ -1,16 +1,16 @@
include($${PWD}/../../OS-detect.pri)
lessThan(QT_MAJOR_VERSION, 5) {
- message("[ERROR] Qt 5.4+ is required to use the Lumina Desktop!")
+ message("[ERROR] Qt 5.7+ is required to use the Lumina Desktop!")
exit
}
-lessThan(QT_MINOR_VERSION, 4){
- message("[ERROR] Qt 5.4+ is required to use the Lumina Desktop!")
+lessThan(QT_MINOR_VERSION, 7){
+ message("[ERROR] Qt 5.7+ is required to use the Lumina Desktop!")
exit
}
QT *= core gui network widgets x11extras multimedia multimediawidgets concurrent svg quick qml
-
+CONFIG += c++11
TARGET = lumina-desktop-unified
target.path = $${L_BINDIR}
@@ -21,14 +21,15 @@ include(../libLumina/LuminaXDG.pri)
include(../libLumina/LuminaSingleApplication.pri)
include(../libLumina/DesktopSettings.pri)
include(../libLumina/ExternalProcess.pri)
-include(../../src-cpp/NativeWindow.pri)
include(../libLumina/XDGMime.pri)
+include(../libLumina/LIconCache.pri)
include(../../src-cpp/plugins-base.pri)
+include(../../src-cpp/framework-OSInterface.pri)
#include all the main individual source groups
-include(src-screensaver/screensaver.pri)
include(src-events/events.pri)
+include(src-screensaver/screensaver.pri)
include(src-desktop/desktop.pri)
TEMPLATE = app
@@ -40,19 +41,14 @@ SOURCES += main.cpp \
HEADERS += global-includes.h \
global-objects.h \
LSession.h \
- BootSplash.h
+ BootSplash.h \
+ JsonMenu.h
FORMS += BootSplash.ui
-
-
-#Now include all the files for the various plugins
-#include(panel-plugins/panel-plugins.pri)
-#include(desktop-plugins/desktop-plugins.pri)
-
# Install all the various files for the desktop itself
desktop.path = $${L_SESSDIR}
-desktop.files = lumina-desktop.desktop
+desktop.files = lumina-desktop-unified.desktop
defaults.path = $${L_SHAREDIR}/lumina-desktop
defaults.files = defaults/*
diff --git a/src-qt5/core/lumina-desktop-unified/main.cpp b/src-qt5/core/lumina-desktop-unified/main.cpp
index ed2b9b4c..3cf35e50 100644
--- a/src-qt5/core/lumina-desktop-unified/main.cpp
+++ b/src-qt5/core/lumina-desktop-unified/main.cpp
@@ -39,11 +39,11 @@ int main(int argc, char ** argv)
QTime *timer=0;
if(DEBUG){ timer = new QTime(); timer->start(); }
if(DEBUG){ qDebug() << "Theme Init:" << timer->elapsed(); }
- LuminaThemeEngine theme(&a);
- QObject::connect(&theme, SIGNAL(updateIcons()), &a, SLOT(reloadIconTheme()) );
+ /*LuminaThemeEngine theme(&a);
+ QObject::connect(&theme, SIGNAL(updateIcons()), &a, SLOT(reloadIconTheme()) );*/
if(DEBUG){ qDebug() << "Session Setup:" << timer->elapsed(); }
QTimer::singleShot(0, &a, SLOT(setupSession()) );
- theme.refresh();
+ //theme.refresh();
if(DEBUG){ qDebug() << "Exec Time:" << timer->elapsed(); delete timer;}
int retCode = a.exec();
qDebug() << "Finished Closing Down Unified Lumina";
diff --git a/src-qt5/core/lumina-desktop-unified/src-desktop/DesktopManager.cpp b/src-qt5/core/lumina-desktop-unified/src-desktop/DesktopManager.cpp
new file mode 100644
index 00000000..b94a241d
--- /dev/null
+++ b/src-qt5/core/lumina-desktop-unified/src-desktop/DesktopManager.cpp
@@ -0,0 +1,213 @@
+//===========================================
+// Lumina-desktop source code
+// Copyright (c) 2017-2018, Ken Moore
+// Available under the 3-clause BSD license
+// See the LICENSE file for full details
+//===========================================
+#include "DesktopManager.h"
+
+#include "global-objects.h"
+
+// === PUBLIC ===
+DesktopManager::DesktopManager(){
+
+}
+
+DesktopManager::~DesktopManager(){
+
+}
+
+void DesktopManager::start(){
+ connect(DesktopSettings::instance(), SIGNAL(FileModified(DesktopSettings::File)), this, SLOT(settingsChanged(DesktopSettings::File)) );
+ //Perform the initial load of the settings files
+ QTimer::singleShot(0, this, SLOT(updateSessionSettings()) );
+ QTimer::singleShot(0, this, SLOT(updateDesktopSettings()) );
+ QTimer::singleShot(0, this, SLOT(updatePanelSettings()) );
+ QTimer::singleShot(0, this, SLOT(updatePluginSettings()) );
+ QTimer::singleShot(0, this, SLOT(updateMenuSettings()) );
+ QTimer::singleShot(0, this, SLOT(updateAnimationSettings()) );
+}
+
+void DesktopManager::stop(){
+ disconnect(DesktopSettings::instance(), SIGNAL(FileModified(DesktopSettings::File)), this, SLOT(settingsChanged(DesktopSettings::File)) );
+}
+
+// === PRIVATE ===
+void DesktopManager::updateWallpaper(QString screen_id, int wkspace){
+ QString current = RootDesktopObject::instance()->CurrentWallpaper(screen_id);
+ if(!current.isEmpty()){ current = QUrl(current).toLocalFile(); } //convert it back to the normal file syntax
+ //First find the list of options from the settings
+ //First look for a list that matches this exact screen/workspace combo
+ QStringList wpaperList = DesktopSettings::instance()->value(DesktopSettings::Desktop, "wallpapers/"+screen_id+"_wk_"+QString::number(wkspace), QStringList()).toStringList();
+ //Next look for a list that matches this exact workspace
+ if(wpaperList.isEmpty()){ wpaperList= DesktopSettings::instance()->value(DesktopSettings::Desktop, "wallpapers/default_wk_"+QString::number(wkspace), QStringList()).toStringList(); }
+ wpaperList.removeAll("");
+ //Next look for a list that matches this exact screen
+ if(wpaperList.isEmpty()){ wpaperList= DesktopSettings::instance()->value(DesktopSettings::Desktop, "wallpapers/"+screen_id, QStringList()).toStringList(); }
+ wpaperList.removeAll("");
+ //Now look for a list that matches any screen/workspace
+ if(wpaperList.isEmpty()){ wpaperList= DesktopSettings::instance()->value(DesktopSettings::Desktop, "wallpapers/default", QStringList()).toStringList(); }
+ wpaperList.removeAll("");
+ //Now use the failover wallpaper directory
+ if(wpaperList.isEmpty()){
+ QString def = LOS::LuminaShare().section("/",0,-3)+"/wallpapers/lumina-nature"; //Note: LuminaShare() ends with an extra "/"
+ //qDebug() << "Default Wallpaper:" << def;
+ if(QFile::exists(def)){ wpaperList << def; }
+ }
+ //qDebug() << "Got wallpaper list:" << screen_id << wkspace << wpaperList;
+ //Wallpaper selection/randomization
+ if(wpaperList.count()==1 && wpaperList.first()==current){ return; } //nothing to do - just the same image
+ QString wpaper;
+ QStringList bgL = wpaperList; //need a copy at the moment - could change the entire list in a second (opening a dir for instance)
+ while(wpaper.isEmpty() || QFileInfo(wpaper).isDir()){
+ QString prefix;
+ if(!wpaper.isEmpty()){
+ //Got a directory - update the list of files and re-randomize the selection
+ QStringList imgs = LUtils::imageExtensions(true);
+ //qDebug() << " - Got Dir: " << imgs;
+ QDir tdir(wpaper);
+ prefix=wpaper+"/";
+ bgL = tdir.entryList(imgs, QDir::Files | QDir::NoDotAndDotDot, QDir::Name);
+ //If directory no longer has any valid images - remove it from list and try again
+ if(bgL.isEmpty()){
+ wpaperList.removeAll(wpaper); //invalid directory - remove it from the list for the moment
+ bgL = wpaperList; //reset the list back to the original list (not within a directory)
+ }
+ }
+ //Verify that there are files in the list - otherwise use the default
+ if(bgL.isEmpty()){ wpaper.clear(); break; }
+ int index = ( qrand() % bgL.length() );
+ if(index== bgL.indexOf(current)){ //if the current wallpaper was selected by the randomization again
+ //Go to the next in the list
+ if(index < 0 || index >= bgL.length()-1){ index = 0; } //if invalid or last item in the list - go to first
+ else{ index++; } //go to next
+ }
+ wpaper = prefix+bgL[index];
+ }
+ //Now go ahead and set the wallpaper in the screen object
+ if(wpaper.isEmpty() || wpaper=="default"){ wpaper = LOS::LuminaShare()+"/desktop-background.jpg"; } //failover image
+ //qDebug() << "Updating Wallpaper:" << screen_id << wpaper;
+ RootDesktopObject::instance()->ChangeWallpaper(screen_id,QUrl::fromLocalFile(wpaper).toString() );
+}
+
+void DesktopManager::updatePlugins(QString plugin_id){
+
+}
+
+// === PUBLIC SLOTS ===
+void DesktopManager::workspaceChanged(int wknum){
+ //qDebug() << "Got Workspace Changed:" << wknum;
+ syncWindowList();
+}
+
+void DesktopManager::settingsChanged(DesktopSettings::File type){
+ switch(type){
+ case DesktopSettings::Session:
+ QTimer::singleShot(0, this, SLOT(updateSessionSettings()) );
+ case DesktopSettings::Desktop:
+ QTimer::singleShot(1, this, SLOT(updateDesktopSettings()) );
+ case DesktopSettings::Panels:
+ QTimer::singleShot(2, this, SLOT(updatePanelSettings()) );
+ case DesktopSettings::Plugins:
+ QTimer::singleShot(3, this, SLOT(updatePluginSettings()) );
+ case DesktopSettings::ContextMenu:
+ QTimer::singleShot(4, this, SLOT(updateMenuSettings()) );
+ case DesktopSettings::Animation:
+ QTimer::singleShot(5, this, SLOT(updateAnimationSettings()) );
+ default:
+ break;
+ //Do nothing - not a settings change we care about here
+ }
+}
+
+void DesktopManager::NewWindowAvailable(NativeWindowObject* win){
+ //connect(win, SIGNAL(WindowClosed(WId)), this, SLOT(syncWindowList()) );
+#ifdef USE_WIDGETS
+ qDebug() << "Got New Widget Window:" << win->name();
+#endif
+ syncWindowList();
+}
+
+void DesktopManager::NewTrayWindowAvailable(NativeWindowObject* win){
+ //connect(win, SIGNAL(WindowClosed(WId)), this, SLOT(syncTrayWindowList()) );
+ syncTrayWindowList();
+}
+
+void DesktopManager::syncWindowList(){
+ QList<NativeWindowObject*> allWins = Lumina::NWS->currentWindows();
+ //Filter out all the windows not in the current workspace
+ QList<NativeWindowObject*> current;
+ QList<NativeWindowObject*> currentStacked;
+ int wkspace = Lumina::NWS->currentWorkspace();
+ for(int i=0; i<allWins.length(); i++){
+ if(allWins[i]->isSticky() || (allWins[i]->workspace() == wkspace)){
+ current << allWins[i];
+ }
+ }
+ //qDebug() << "Synced Window List:" << current.length();
+ RootDesktopObject::instance()->setWindows(current);
+}
+
+void DesktopManager::syncTrayWindowList(){
+ QList<NativeWindowObject*> allWins = Lumina::NWS->currentTrayWindows();
+ //qDebug() << "Synced Tray Window List:" << allWins.length();
+ RootDesktopObject::instance()->setTrayWindows(allWins);
+}
+
+// === PRIVATE SLOTS ===
+void DesktopManager::updateSessionSettings(){
+ //qDebug() << "Update Session Settings...";
+
+ RootDesktopObject::instance()->updateCurrentTimeFormat(DesktopSettings::instance()->value(DesktopSettings::Session, "datetime_format", "").toString());
+}
+
+void DesktopManager::updateDesktopSettings(){
+ //qDebug() << "Update Desktop Settings...";
+ QList<QScreen*> scrns = QGuiApplication::screens();
+ int wkspace = Lumina::NWS->currentWorkspace();
+ for(int i=0; i<scrns.length(); i++){ updateWallpaper(scrns[i]->name(), wkspace); }
+
+}
+
+void DesktopManager::updatePanelSettings(){
+ QList<QScreen*> scrns = QGuiApplication::screens();
+ int primary = QApplication::desktop()->primaryScreen();
+ //qDebug() << "Panel Settings Changed:" << primary << scrns.length();
+ QStringList total_ids;
+ for(int i=0; i<scrns.length(); i++){
+ //qDebug() << " - Check Screen Name:" << scrns[i]->name();
+ ScreenObject *sObj = RootDesktopObject::instance()->screen(scrns[i]->name());
+ if(sObj == 0){ continue; } //screen is not managed directly - skip it
+ QStringList ids = DesktopSettings::instance()->value(DesktopSettings::Panels, scrns[i]->name().replace("-","_")+"/active_ids", QStringList()).toStringList();
+ if(ids.isEmpty() && (scrns.length()==1 || i==primary)){
+ //qDebug() << " -- PRIMARY";
+ //Also look for the "default" panel id's for the primary/default screen
+ ids = DesktopSettings::instance()->value(DesktopSettings::Panels, "default/active_ids", QStringList()).toStringList();
+ }
+ ids.removeAll("");
+ //qDebug() << " -- settings:" << ids;
+ for(int j=0; j<ids.length(); j++){
+ total_ids << scrns[i]->name()+"/"+ids[j];
+ }
+ }
+ //Now do the global-session panels
+ QStringList ids = DesktopSettings::instance()->value(DesktopSettings::Panels, "session/active_ids", QStringList()).toStringList();
+ ids.removeAll("");
+ for(int i=0; i<ids.length(); i++){
+ total_ids << "session/"+ids[i];
+ }
+ //qDebug() << "Panel Settings Changed:" << total_ids;
+ RootDesktopObject::instance()->setPanels(total_ids); //put the new ones in place
+}
+
+void DesktopManager::updatePluginSettings(){
+
+}
+
+void DesktopManager::updateMenuSettings(){
+
+}
+
+void DesktopManager::updateAnimationSettings(){
+
+}
diff --git a/src-qt5/core/lumina-desktop-unified/src-desktop/DesktopManager.h b/src-qt5/core/lumina-desktop-unified/src-desktop/DesktopManager.h
new file mode 100644
index 00000000..b3511318
--- /dev/null
+++ b/src-qt5/core/lumina-desktop-unified/src-desktop/DesktopManager.h
@@ -0,0 +1,50 @@
+//===========================================
+// Lumina-desktop source code
+// Copyright (c) 2017-2018, Ken Moore
+// Available under the 3-clause BSD license
+// See the LICENSE file for full details
+//===========================================
+// This is the main class that updates the interface objects
+// on-demand as settings files and other stuff changes
+//===========================================
+#ifndef _LUMINA_DESKTOP_OBJECT_MANAGER_H
+#define _LUMINA_DESKTOP_OBJECT_MANAGER_H
+
+#include <global-includes.h>
+
+class DesktopManager : public QObject {
+ Q_OBJECT
+public:
+ DesktopManager();
+ ~DesktopManager();
+
+ void start();
+ void stop();
+
+private:
+ void updateWallpaper(QString screen_id, int wkspace);
+ void updatePlugins(QString plugin_id);
+
+public slots:
+ void workspaceChanged(int);
+ void settingsChanged(DesktopSettings::File);
+
+ void NewWindowAvailable(NativeWindowObject*);
+ void NewTrayWindowAvailable(NativeWindowObject*);
+
+ void syncWindowList();
+ void syncTrayWindowList();
+
+private slots:
+ void updateSessionSettings();
+ void updateDesktopSettings();
+ void updatePanelSettings();
+ void updatePluginSettings();
+ void updateMenuSettings();
+ void updateAnimationSettings();
+
+signals:
+ void PanelLocationsChanged(); //reserved screen space changed
+};
+
+#endif
diff --git a/src-qt5/core/lumina-desktop-unified/src-desktop/QMLImageProvider.cpp b/src-qt5/core/lumina-desktop-unified/src-desktop/QMLImageProvider.cpp
new file mode 100644
index 00000000..a74d2585
--- /dev/null
+++ b/src-qt5/core/lumina-desktop-unified/src-desktop/QMLImageProvider.cpp
@@ -0,0 +1,65 @@
+//===========================================
+// Lumina-desktop source code
+// Copyright (c) 2018, Ken Moore
+// Available under the 3-clause BSD license
+// See the LICENSE file for full details
+//===========================================
+#include <global-objects.h>
+#include "QMLImageProvider.h"
+
+QMLImageProvider::QMLImageProvider(QQmlImageProviderBase::ImageType type) : QQuickImageProvider(type, 0){
+
+}
+
+QMLImageProvider::~QMLImageProvider(){
+
+}
+
+/*QMLImageProvider* QMLImageProvider::instance(){
+ static QMLImageProvider *_prov = 0;
+ if(_prov==0){ _prov = new QMLImageProvider(); }
+ return _prov;
+}*/
+
+QImage QMLImageProvider::requestImage(const QString &id, QSize *size, const QSize &requestedSize){
+ NativeWindowObject *win = Lumina::NWS->findWindow( id.section(":",1,1).toInt(), false);
+ if(win==0){ win = Lumina::NWS->findTrayWindow(id.section(":",1,1).toInt()); }
+
+ if(!id.startsWith("image:")){ qDebug() << "Request Image:" << id << win << requestedSize; }
+
+ QImage img(requestedSize,QImage::Format_RGB32);
+ if(win==0){ img.fill("black"); } //invalid window ID (should never happen)
+ else if(id.startsWith("image:")){ img = Lumina::NWS->GetWindowImage(win); }
+ else if(id.startsWith("icon:")){
+ QIcon ico = win->property(NativeWindowObject::Icon).value<QIcon>();
+ QList<QSize> sizes = ico.availableSizes();
+ QSize sz(0,0);
+ //Just grab the largest size currently available
+ for(int i=0; i<sizes.length(); i++){
+ if(sz.width()<sizes[i].width() && sz.height()<sizes[i].height()){ sz = sizes[i]; }
+ }
+ qDebug() << "Icon Sizes:" <<sizes;
+ img = ico.pixmap(sz).toImage();
+ }
+ //qDebug() << "Got Window Image:" << img.size();
+ if(img.size().isNull()){
+ if(requestedSize.isValid()){ img = QImage(requestedSize,QImage::Format_RGB32); }
+ else{ img = QImage(QSize(64,64), QImage::Format_RGB32); }
+ img.fill("black");
+ }
+ //qDebug() << "Final Window Image:" << img.size();
+ if(size!=0){
+ size->setHeight(img.height());
+ size->setWidth( img.width() );
+ }
+ if(requestedSize.isValid() && !requestedSize.isNull() && img.size()!=requestedSize){
+ img = img.scaled(requestedSize, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
+ }
+ return img;
+}
+
+QPixmap QMLImageProvider::requestPixmap(const QString &id, QSize *size, const QSize &requestedSize){
+ qDebug() << "Pixmap Requested:" << id;
+ QImage img = requestImage(id, size, requestedSize);
+ return QPixmap::fromImage(img);
+}
diff --git a/src-qt5/core/lumina-desktop-unified/src-desktop/QMLImageProvider.h b/src-qt5/core/lumina-desktop-unified/src-desktop/QMLImageProvider.h
new file mode 100644
index 00000000..8719176e
--- /dev/null
+++ b/src-qt5/core/lumina-desktop-unified/src-desktop/QMLImageProvider.h
@@ -0,0 +1,26 @@
+//===========================================
+// Lumina-desktop source code
+// Copyright (c) 2018, Ken Moore
+// Available under the 3-clause BSD license
+// See the LICENSE file for full details
+//===========================================
+#ifndef _LUMINA_DESKTOP_QML_IMAGE_PROVIDER_H
+#define _LUMINA_DESKTOP_QML_IMAGE_PROVIDER_H
+
+#include <QQuickImageProvider>
+#include <QImage>
+#include <QPixmap>
+#include <QSize>
+
+class QMLImageProvider : public QQuickImageProvider{
+public:
+ QMLImageProvider(QQmlImageProviderBase::ImageType);
+ ~QMLImageProvider();
+
+ //static QMLImageProvider* instance();
+
+ virtual QImage requestImage(const QString &id, QSize *size, const QSize &requestedSize);
+ virtual QPixmap requestPixmap(const QString &id, QSize *size, const QSize &requestedSize);
+};
+
+#endif
diff --git a/src-qt5/core/lumina-desktop-unified/src-desktop/RootWindow.cpp b/src-qt5/core/lumina-desktop-unified/src-desktop/RootWindow-QML.cpp
index 0cfa4e6b..8619544b 100644
--- a/src-qt5/core/lumina-desktop-unified/src-desktop/RootWindow.cpp
+++ b/src-qt5/core/lumina-desktop-unified/src-desktop/RootWindow-QML.cpp
@@ -1,14 +1,18 @@
//===========================================
// Lumina-desktop source code
-// Copyright (c) 2017, Ken Moore
+// Copyright (c) 2017-2018, Ken Moore
// Available under the 3-clause BSD license
// See the LICENSE file for full details
//===========================================
#include "RootWindow.h"
+#include "QMLImageProvider.h"
+#include <QQmlImageProviderBase>
+
+QQuickView *root_view;
RootWindow::RootWindow() : QObject(){
- root_win = QWindow::fromWinId( QX11Info::appRootWindow() ); //
- root_view = new QQuickView(root_win); //make it a child of the root window
+ root_win = QWindow::fromWinId( QX11Info::appRootWindow() );
+ root_view = new QQuickView(); //make it a child of the root window
root_obj = RootDesktopObject::instance();
syncRootSize();
connect(root_win, SIGNAL(widthChanged(int)), this, SLOT(syncRootSize()) );
@@ -16,6 +20,8 @@ RootWindow::RootWindow() : QObject(){
//Now setup the QQuickView
root_view->setResizeMode(QQuickView::SizeRootObjectToView);
root_view->engine()->rootContext()->setContextProperty("RootObject", root_obj);
+ root_view->engine()->addImageProvider("native_window", new QMLImageProvider(QQmlImageProviderBase::Image) );
+ //root_view->engine()->addImageProvider("native_window_icon", new QMLImageProvider(QQmlImageProviderBase::Pixmap) );
RootDesktopObject::RegisterType(); //make sure object classes are registered with the QML subsystems
}
@@ -27,15 +33,22 @@ RootWindow::~RootWindow(){
void RootWindow::start(){
root_view->setSource(QUrl("qrc:///qml/RootDesktop.qml"));
root_win->show();
+ if(root_view->parent()!=0){ root_view->parent()->show(); }
root_view->show();
}
+WId RootWindow::viewID(){
+ if(root_view->parent()!=0){ return root_view->parent()->winId(); }
+ return root_view->winId();
+}
+
void RootWindow::syncRootSize(){
//qDebug() << "Sync Root Size:" << root_win->width() << root_win->height() << root_view->geometry();
QList<QScreen*> screens = QApplication::screens();
QRect unif;
for(int i=0; i<screens.length(); i++){ unif = unif.united(screens[i]->geometry()); }
if(unif.width() != root_view->width() || unif.height() != root_view->height()){
+ if(root_view->parent()!=0){ root_view->parent()->setGeometry(0,0,unif.width(), unif.height()); }
root_view->setGeometry(0, 0, unif.width(), unif.height() );
emit RootResized(root_view->geometry());
}
diff --git a/src-qt5/core/lumina-desktop-unified/src-desktop/RootWindow-Widgets.cpp b/src-qt5/core/lumina-desktop-unified/src-desktop/RootWindow-Widgets.cpp
new file mode 100644
index 00000000..6a4c4cb0
--- /dev/null
+++ b/src-qt5/core/lumina-desktop-unified/src-desktop/RootWindow-Widgets.cpp
@@ -0,0 +1,53 @@
+//===========================================
+// Lumina-desktop source code
+// Copyright (c) 2017-2018, Ken Moore
+// Available under the 3-clause BSD license
+// See the LICENSE file for full details
+//===========================================
+#include "RootWindow.h"
+
+//include the Widgets-based classes we need
+#include "RootDesktop.h"
+
+RootDesktop *root_view;
+
+RootWindow::RootWindow() : QObject(){
+ root_win = QWindow::fromWinId( QX11Info::appRootWindow() );
+ root_view = new RootDesktop(root_win); //make it a child of the root window
+ root_obj = RootDesktopObject::instance();
+ syncRootSize();
+ connect(root_win, SIGNAL(widthChanged(int)), this, SLOT(syncRootSize()) );
+ connect(root_win, SIGNAL(heightChanged(int)),this, SLOT(syncRootSize()) );
+}
+
+RootWindow::~RootWindow(){
+ root_view->deleteLater();
+ root_obj->deleteLater();
+}
+
+void RootWindow::start(){
+ root_win->show();
+ //if(root_view->parent()!=0){ root_view->parent()->show(); }
+ root_view->show();
+ root_view->start();
+ QTimer::singleShot(1000, this, SLOT(syncRootSize()) ); //just in case something changed during init routines
+}
+
+WId RootWindow::viewID(){
+ //if(root_view->parent()!=0){ return root_view->parent()->winId(); }
+ return root_view->winId();
+}
+
+void RootWindow::syncRootSize(){
+ //qDebug() << "Sync Root Size:" << root_win->width() << root_win->height() << root_view->geometry();
+ QList<QScreen*> screens = QApplication::screens();
+ QRect unif;
+ for(int i=0; i<screens.length(); i++){ unif = unif.united(screens[i]->geometry()); }
+ if(unif.width() != root_view->width() || unif.height() != root_view->height()){
+ //if(root_view->parent()!=0){ root_view->parent()->setGeometry(0,0,unif.width(), unif.height()); }
+ root_view->setGeometry(0, 0, unif.width(), unif.height() );
+ emit RootResized(root_view->geometry());
+ }
+ root_obj->updateScreens();
+ //qDebug() << " - after:" << root_view->geometry();
+}
diff --git a/src-qt5/core/lumina-desktop-unified/src-desktop/RootWindow.h b/src-qt5/core/lumina-desktop-unified/src-desktop/RootWindow.h
index ba489465..3c7414f2 100644
--- a/src-qt5/core/lumina-desktop-unified/src-desktop/RootWindow.h
+++ b/src-qt5/core/lumina-desktop-unified/src-desktop/RootWindow.h
@@ -1,18 +1,18 @@
//===========================================
// Lumina-desktop source code
-// Copyright (c) 2017, Ken Moore
+// Copyright (c) 2017-2018, Ken Moore
// Available under the 3-clause BSD license
// See the LICENSE file for full details
//===========================================
#ifndef _LUMINA_DESKTOP_ROOT_WINDOW_H
#define _LUMINA_DESKTOP_ROOT_WINDOW_H
#include <global-includes.h>
+#include "src-cpp/RootDesktopObject.h"
class RootWindow : public QObject{
Q_OBJECT
private:
QWindow *root_win;
- QQuickView *root_view;
RootDesktopObject *root_obj;
public:
@@ -21,6 +21,8 @@ public:
void start();
+ WId viewID();
+
public slots:
void syncRootSize();
diff --git a/src-qt5/core/lumina-desktop-unified/src-desktop/desktop.pri b/src-qt5/core/lumina-desktop-unified/src-desktop/desktop.pri
index e4c4faeb..89542e23 100644
--- a/src-qt5/core/lumina-desktop-unified/src-desktop/desktop.pri
+++ b/src-qt5/core/lumina-desktop-unified/src-desktop/desktop.pri
@@ -1,11 +1,32 @@
-QT *= gui widgets qml quick
-
-SOURCES *= $${PWD}/RootWindow.cpp
-
-HEADERS *= $${PWD}/RootWindow.h
+QT *= gui widgets
#update the includepath so we can just #include as needed without paths
INCLUDEPATH *= $${PWD}
+SOURCES *= $${PWD}/Desktopmanager.cpp \
+ $${PWD}/QMLImageProvider.cpp
+
+HEADERS *= $${PWD}/RootWindow.h \
+ $${PWD}/DesktopManager.h
+
+#include the base objects
include($${PWD}/src-cpp/src-cpp.pri)
-include($${PWD}/src-qml/src-qml.pri)
+
+#Now do the QML/Widgets interface switch
+isEmpty(USE_QML){
+ #Widgets-based interface
+ DEFINES += USE_WIDGETS="true"
+
+ SOURCES *= $${PWD}/RootWindow-Widgets.cpp
+
+ include($${PWD}/src-widgets/src-widgets.pri)
+
+}else{
+ #QML-based interface
+ QT *= qml quick
+ DEFINES += USE_QML="true"
+ SOURCES *= $${PWD}/RootWindow-QML.cpp
+ HEADERS *= $${PWD}/QMLImageProvider.h
+
+ include($${PWD}/src-qml/src-qml.pri)
+}
diff --git a/src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/NativeWindowObject.cpp b/src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/NativeWindowObject.cpp
new file mode 100644
index 00000000..e2cac852
--- /dev/null
+++ b/src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/NativeWindowObject.cpp
@@ -0,0 +1,330 @@
+//===========================================
+// Lumina-DE source code
+// Copyright (c) 2017-2018, Ken Moore
+// Available under the 3-clause BSD license
+// See the LICENSE file for full details
+//===========================================
+#include "NativeWindowObject.h"
+#include <QQmlEngine>
+#include <QDebug>
+#include <QBuffer>
+
+// == QML Type Registration ==
+void NativeWindowObject::RegisterType(){
+ static bool done = false;
+ if(done){ return; }
+ done=true;
+ qmlRegisterType<NativeWindowObject>("Lumina.Backend.NativeWindowObject",2,0, "NativeWindowObject");
+}
+
+// === PUBLIC ===
+NativeWindowObject::NativeWindowObject(WId id) : QObject(){
+ winid = id;
+ frameid = 0;
+ dmgID = dmg = 0;
+ geomTimer = new QTimer(this);
+ geomTimer->setSingleShot(true);
+ geomTimer->setInterval(50); //1/20 second
+ connect(geomTimer, SIGNAL(timeout()), this, SLOT(sendNewGeom()) );
+}
+
+NativeWindowObject::~NativeWindowObject(){
+ hash.clear();
+}
+
+void NativeWindowObject::addFrameWinID(WId fid){
+ frameid = fid;
+}
+
+void NativeWindowObject::addDamageID(unsigned int dmg){
+ dmgID = dmg;
+}
+
+bool NativeWindowObject::isRelatedTo(WId tmp){
+ return (relatedTo.contains(tmp) || winid == tmp || frameid == tmp);
+}
+
+WId NativeWindowObject::id(){
+ return winid;
+}
+
+WId NativeWindowObject::frameId(){
+ return frameid;
+}
+
+unsigned int NativeWindowObject::damageId(){
+ return dmgID;
+}
+
+QVariant NativeWindowObject::property(NativeWindowObject::Property prop){
+ if(hash.contains(prop)){ return hash.value(prop); }
+ else if(prop == NativeWindowObject::RelatedWindows){ return QVariant::fromValue(relatedTo); }
+ return QVariant(); //null variant
+}
+
+void NativeWindowObject::setProperty(NativeWindowObject::Property prop, QVariant val, bool force){
+ if(prop == NativeWindowObject::RelatedWindows){ relatedTo = val.value< QList<WId> >(); }
+ else if(prop == NativeWindowObject::None || (!force && hash.value(prop)==val)){ return; }
+ else if(prop == NativeWindowObject::WinImage){
+ //special case - This should never be actually set in the property hash
+ // it is loaded dynamically by the QMLImageProvider instead (prevent flickering/caching image)
+ } else{ hash.insert(prop, val); }
+ emitSinglePropChanged(prop);
+ emit PropertiesChanged(QList<NativeWindowObject::Property>() << prop, QList<QVariant>() << val);
+}
+
+void NativeWindowObject::setProperties(QList<NativeWindowObject::Property> props, QList<QVariant> vals, bool force){
+ for(int i=0; i<props.length(); i++){
+ if(i>=vals.length()){ props.removeAt(i); i--; continue; } //no corresponding value for this property
+ if(props[i] == NativeWindowObject::None || (!force && (hash.value(props[i]) == vals[i])) ){
+ props.removeAt(i); vals.removeAt(i); i--; continue; //Invalid property or identical value
+ }else if(props[i] == NativeWindowObject::WinImage){
+ //special case - This should never be actually set in the property hash
+ // it is loaded dynamically by the QMLImageProvider instead (prevent flickering/caching image)
+ }else{
+ hash.insert(props[i], vals[i]);
+ }
+ emitSinglePropChanged(props[i]);
+ }
+ emit PropertiesChanged(props, vals);
+}
+
+void NativeWindowObject::requestProperty(NativeWindowObject::Property prop, QVariant val, bool force){
+ if(prop == NativeWindowObject::None || prop == NativeWindowObject::RelatedWindows || (!force && hash.value(prop)==val) ){ return; }
+ emit RequestPropertiesChange(winid, QList<NativeWindowObject::Property>() << prop, QList<QVariant>() << val);
+}
+
+void NativeWindowObject::requestProperties(QList<NativeWindowObject::Property> props, QList<QVariant> vals, bool force){
+ //Verify/adjust inputs as needed
+ for(int i=0; i<props.length(); i++){
+ if(i>=vals.length()){ props.removeAt(i); i--; continue; } //no corresponding value for this property
+ if(props[i] == NativeWindowObject::None || props[i] == NativeWindowObject::RelatedWindows || (!force && hash.value(props[i])==vals[i]) ){ props.removeAt(i); vals.removeAt(i); i--; continue; } //Invalid property or identical value
+ /*if( (props[i] == NativeWindowObject::Visible || props[i] == NativeWindowObject::Active) && frameid !=0){
+ //These particular properties needs to change the frame - not the window itself
+ emit RequestPropertiesChange(frameid, QList<NativeWindowObject::Property>() << props[i], QList<QVariant>() << vals[i]);
+ props.removeAt(i); vals.removeAt(i); i--;
+ }*/
+ }
+ emit RequestPropertiesChange(winid, props, vals);
+}
+
+QRect NativeWindowObject::geometry(){
+ //Calculate the "full" geometry of the window + frame (if any)
+ //Check that the size is between the min/max limitations
+ QSize size = hash.value(NativeWindowObject::Size).toSize();
+ QSize min = hash.value(NativeWindowObject::MinSize).toSize();
+ QSize max = hash.value(NativeWindowObject::MaxSize).toSize();
+ if(min.isValid() && min.width() > size.width() ){ size.setWidth(min.width()); }
+ if(min.isValid() && min.height() > size.height()){ size.setHeight(min.height()); }
+ if(max.isValid() && max.width() < size.width() && max.width()>min.width()){ size.setWidth(max.width()); }
+ if(max.isValid() && max.height() < size.height() && max.height()>min.height()){ size.setHeight(max.height()); }
+ //Assemble the full geometry
+ QRect geom( hash.value(NativeWindowObject::GlobalPos).toPoint(), size );
+ //Now adjust the window geom by the frame margins
+ QList<int> frame = hash.value(NativeWindowObject::FrameExtents).value< QList<int> >(); //Left,Right,Top,Bottom
+ //qDebug() << "Calculate Geometry:" << geom << frame;
+ if(frame.length()==4){
+ geom = geom.adjusted( -frame[0], -frame[2], frame[1], frame[3] );
+ }
+ //qDebug() << " - Total:" << geom;
+ return geom;
+}
+
+void NativeWindowObject::setGeometryNow(QRect geom){
+ updateGeometry(geom.x(), geom.y(), geom.width(), geom.height(), true);
+}
+
+// QML ACCESS FUNCTIONS (shortcuts for particular properties in a format QML can use)
+QString NativeWindowObject::winImage(){
+ //Need to alternate something on the end to ensure that QML knows to fetch the new image (non-cached only)
+ if(dmg==0){ dmg = 1; }
+ else{ dmg = 0; }
+ return "image://native_window/image:"+QString::number(winid)+":"+QString::number(dmg);
+}
+
+QString NativeWindowObject::name(){
+ return this->property(NativeWindowObject::Name).toString();
+}
+
+QString NativeWindowObject::title(){
+ return this->property(NativeWindowObject::Title).toString();
+}
+
+QString NativeWindowObject::shortTitle(){
+ QString tmp = this->property(NativeWindowObject::ShortTitle).toString();
+ if(tmp.isEmpty()){ tmp = title(); }
+ if(tmp.isEmpty()){ tmp = name(); }
+ return tmp;
+}
+
+QString NativeWindowObject::icon(){
+ if(icodmg==0){ icodmg=1; }
+ else{ icodmg = 0; }
+ qDebug() << "Window Icon:" << icodmg << this->property(NativeWindowObject::Icon).value<QIcon>().availableSizes();
+ return "image://native_window/icon:"+QString::number(winid)+":"+QString::number(icodmg);
+}
+
+//QML Button states
+bool NativeWindowObject::showCloseButton(){
+ QList<NativeWindowObject::Type> types = this->property(NativeWindowObject::WinTypes).value<QList < NativeWindowObject::Type> >();
+ QList<NativeWindowObject::Type> badtypes;
+ badtypes << NativeWindowObject::T_DESKTOP << NativeWindowObject::T_TOOLBAR << NativeWindowObject::T_MENU \
+ << NativeWindowObject::T_SPLASH << NativeWindowObject::T_DROPDOWN_MENU << NativeWindowObject::T_POPUP_MENU \
+ << NativeWindowObject::T_NOTIFICATION << NativeWindowObject::T_COMBO << NativeWindowObject::T_DND;
+ for(int i=0; i<types.length(); i++){
+ if(badtypes.contains(types[i])){ return false; }
+ }
+ return true;
+}
+
+bool NativeWindowObject::showMaxButton(){
+ QList<NativeWindowObject::Type> types = this->property(NativeWindowObject::WinTypes).value<QList < NativeWindowObject::Type> >();
+ QList<NativeWindowObject::Type> badtypes;
+ badtypes << NativeWindowObject::T_DESKTOP << NativeWindowObject::T_TOOLBAR << NativeWindowObject::T_MENU \
+ << NativeWindowObject::T_SPLASH << NativeWindowObject::T_DROPDOWN_MENU << NativeWindowObject::T_POPUP_MENU \
+ << NativeWindowObject::T_NOTIFICATION << NativeWindowObject::T_COMBO << NativeWindowObject::T_DND;
+ for(int i=0; i<types.length(); i++){
+ if(badtypes.contains(types[i])){ return false; }
+ }
+ return true;
+}
+
+bool NativeWindowObject::showMinButton(){
+ QList<NativeWindowObject::Type> types = this->property(NativeWindowObject::WinTypes).value<QList < NativeWindowObject::Type> >();
+ QList<NativeWindowObject::Type> badtypes;
+ badtypes << NativeWindowObject::T_DESKTOP << NativeWindowObject::T_TOOLBAR << NativeWindowObject::T_MENU \
+ << NativeWindowObject::T_SPLASH << NativeWindowObject::T_DROPDOWN_MENU << NativeWindowObject::T_POPUP_MENU \
+ << NativeWindowObject::T_NOTIFICATION << NativeWindowObject::T_COMBO << NativeWindowObject::T_DND << NativeWindowObject::T_DIALOG;
+ for(int i=0; i<types.length(); i++){
+ if(badtypes.contains(types[i])){ return false; }
+ }
+ return true;
+}
+
+bool NativeWindowObject::showTitlebar(){
+ QList<NativeWindowObject::Type> types = this->property(NativeWindowObject::WinTypes).value<QList < NativeWindowObject::Type> >();
+ QList<NativeWindowObject::Type> badtypes;
+ badtypes << NativeWindowObject::T_DESKTOP << NativeWindowObject::T_TOOLBAR << NativeWindowObject::T_MENU \
+ << NativeWindowObject::T_SPLASH << NativeWindowObject::T_DROPDOWN_MENU << NativeWindowObject::T_POPUP_MENU \
+ << NativeWindowObject::T_NOTIFICATION << NativeWindowObject::T_COMBO << NativeWindowObject::T_DND;
+ for(int i=0; i<types.length(); i++){
+ if(badtypes.contains(types[i])){ return false; }
+ }
+ return true;
+}
+
+bool NativeWindowObject::showGenericButton(){
+ QList<NativeWindowObject::Type> types = this->property(NativeWindowObject::WinTypes).value<QList < NativeWindowObject::Type> >();
+ QList<NativeWindowObject::Type> badtypes;
+ badtypes << NativeWindowObject::T_DESKTOP << NativeWindowObject::T_TOOLBAR << NativeWindowObject::T_MENU \
+ << NativeWindowObject::T_SPLASH << NativeWindowObject::T_DROPDOWN_MENU << NativeWindowObject::T_POPUP_MENU \
+ << NativeWindowObject::T_NOTIFICATION << NativeWindowObject::T_COMBO << NativeWindowObject::T_DND;
+ for(int i=0; i<types.length(); i++){
+ if(badtypes.contains(types[i])){ return false; }
+ }
+ return true;
+}
+
+bool NativeWindowObject::showWindowFrame(){
+ QList<NativeWindowObject::Type> types = this->property(NativeWindowObject::WinTypes).value<QList < NativeWindowObject::Type> >();
+ QList<NativeWindowObject::Type> badtypes;
+ badtypes << NativeWindowObject::T_DESKTOP << NativeWindowObject::T_TOOLBAR << NativeWindowObject::T_MENU \
+ << NativeWindowObject::T_SPLASH << NativeWindowObject::T_DROPDOWN_MENU << NativeWindowObject::T_POPUP_MENU \
+ << NativeWindowObject::T_NOTIFICATION << NativeWindowObject::T_COMBO << NativeWindowObject::T_DND;
+ for(int i=0; i<types.length(); i++){
+ if(badtypes.contains(types[i])){ return false; }
+ }
+ return true;
+}
+
+//QML Window States
+bool NativeWindowObject::isSticky(){
+ return (this->property(NativeWindowObject::Workspace).toInt()<0 || this->property(NativeWindowObject::States).value<QList<NativeWindowObject::State> >().contains(NativeWindowObject::S_STICKY) );
+}
+
+bool NativeWindowObject::isVisible(){
+ return (this->property(NativeWindowObject::Visible).toBool() );
+}
+
+int NativeWindowObject::workspace(){
+ return this->property(NativeWindowObject::Workspace).toInt();
+}
+
+//QML Geometry reporting
+QRect NativeWindowObject::frameGeometry(){
+ return geometry();
+}
+
+QRect NativeWindowObject::imageGeometry(){
+ QRect geom( this->property(NativeWindowObject::GlobalPos).toPoint(), this->property(NativeWindowObject::Size).toSize() );
+ return geom;
+}
+
+void NativeWindowObject::updateGeometry(int x, int y, int width, int height, bool now){
+ // Full frame+window geometry - go ahead and pull it apart and only update the interior window geom
+ QList<int> fgeom = this->property(NativeWindowObject::FrameExtents).value<QList<int> >();
+ if(fgeom.isEmpty()){ fgeom << 0<<0<<0<<0; } //just in case (left/right/top/bottom)
+ QPoint pos(x+fgeom[0], y+fgeom[2]);
+ QSize sz(width-fgeom[0]-fgeom[1], height-fgeom[2]-fgeom[3]);
+ newgeom = QRect(pos, sz);
+ if(!now){
+ //qDebug() << "Update Geometry:" << fgeom << QRect(x,y,width,height) << pos << sz;
+ //requestProperties(QList<NativeWindowObject::Property>() << NativeWindowObject::GlobalPos << NativeWindowObject::Size, QList<QVariant>() << pos << sz);
+ if(!geomTimer->isActive()){ geomTimer->start(); }
+ }else{
+ sendNewGeom();
+ }
+}
+
+// ==== PUBLIC SLOTS ===
+void NativeWindowObject::toggleVisibility(){
+ setProperty(NativeWindowObject::Visible, !property(NativeWindowObject::Visible).toBool() );
+}
+
+void NativeWindowObject::requestClose(){
+ emit RequestClose(winid);
+}
+
+void NativeWindowObject::requestKill(){
+ emit RequestKill(winid);
+}
+
+void NativeWindowObject::requestPing(){
+ emit RequestPing(winid);
+}
+
+// ==== PRIVATE ====
+void NativeWindowObject::emitSinglePropChanged(NativeWindowObject::Property prop){
+ //Simple switch to emit the QML-usable signals as properties are changed
+ switch(prop){
+ case NativeWindowObject::Name:
+ emit nameChanged(); break;
+ case NativeWindowObject::Title:
+ emit titleChanged();
+ if(this->property(NativeWindowObject::ShortTitle).toString().isEmpty()){ emit shortTitleChanged(); }
+ break;
+ case NativeWindowObject::ShortTitle:
+ emit shortTitleChanged(); break;
+ case NativeWindowObject::Icon:
+ emit iconChanged(); break;
+ case NativeWindowObject::Workspace:
+ case NativeWindowObject::States:
+ emit stickyChanged(); break;
+ case NativeWindowObject::WinImage:
+ emit winImageChanged(); break;
+ case NativeWindowObject::WinTypes:
+ emit winTypeChanged(); break;
+ case NativeWindowObject::Visible:
+ emit visibilityChanged(); break;
+ default:
+ break; //do nothing otherwise
+ }
+}
+
+void NativeWindowObject::sendNewGeom(){
+ QList<NativeWindowObject::Property> props; props << NativeWindowObject::GlobalPos << NativeWindowObject::Size;
+ QList<QVariant> vals; vals << newgeom.topLeft() << newgeom.size();
+ requestProperties(props, vals);
+ setProperties(props,vals);
+ emit VerifyNewGeometry(winid);
+}
diff --git a/src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/NativeWindowObject.h b/src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/NativeWindowObject.h
new file mode 100644
index 00000000..87df1f10
--- /dev/null
+++ b/src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/NativeWindowObject.h
@@ -0,0 +1,178 @@
+//===========================================
+// Lumina-DE source code
+// Copyright (c) 2017-2018, Ken Moore
+// Available under the 3-clause BSD license
+// See the LICENSE file for full details
+//===========================================
+// This is a container object for setting/announcing changes
+// in a native window's properties.
+// The WM will usually run the "setProperty" function on this object,
+// and any other classes/widgets which watch this window can act appropriatly after-the-fact
+// Non-WM classes should use the "Request" signals to ask the WM to do something, and listen for changes later
+//===========================================
+#ifndef _LUMINA_SOURCES_NATIVE_WINDOW_OBJECT_H
+#define _LUMINA_SOURCES_NATIVE_WINDOW_OBJECT_H
+#include "global-includes.h"
+
+class NativeWindowObject : public QObject{
+ Q_OBJECT
+ // QML-ACCESSIBLE PROPERTIES
+ Q_PROPERTY( QString winImage READ winImage NOTIFY winImageChanged)
+ Q_PROPERTY( QString name READ name NOTIFY nameChanged)
+ Q_PROPERTY( QString title READ title NOTIFY titleChanged)
+ Q_PROPERTY( QString shortTitle READ shortTitle NOTIFY shortTitleChanged)
+ Q_PROPERTY( QString icon READ icon NOTIFY iconChanged)
+ Q_PROPERTY( bool sticky READ isSticky NOTIFY stickyChanged)
+ Q_PROPERTY(bool isVisible READ isVisible NOTIFY visibilityChanged)
+ //Button/Titlebar visibility
+ Q_PROPERTY( bool showCloseButton READ showCloseButton NOTIFY winTypeChanged)
+ Q_PROPERTY( bool showMinButton READ showMinButton NOTIFY winTypeChanged)
+ Q_PROPERTY( bool showMaxButton READ showMaxButton NOTIFY winTypeChanged)
+ Q_PROPERTY( bool showTitlebar READ showTitlebar NOTIFY winTypeChanged)
+ Q_PROPERTY( bool showGenericButton READ showGenericButton NOTIFY winTypeChanged)
+ Q_PROPERTY( bool showWindowFrame READ showWindowFrame NOTIFY winTypeChanged)
+ //Geometry information
+ Q_PROPERTY( QRect frameGeometry READ frameGeometry NOTIFY geomChanged)
+ Q_PROPERTY( QRect imageGeometry READ imageGeometry NOTIFY geomChanged)
+
+public:
+ enum State{ S_MODAL, S_STICKY, S_MAX_VERT, S_MAX_HORZ, S_SHADED, S_SKIP_TASKBAR, S_SKIP_PAGER, S_HIDDEN, S_FULLSCREEN, S_ABOVE, S_BELOW, S_ATTENTION };
+ enum Type{T_DESKTOP, T_DOCK, T_TOOLBAR, T_MENU, T_UTILITY, T_SPLASH, T_DIALOG, T_DROPDOWN_MENU, T_POPUP_MENU, T_TOOLTIP, T_NOTIFICATION, T_COMBO, T_DND, T_NORMAL };
+ enum Action {A_MOVE, A_RESIZE, A_MINIMIZE, A_SHADE, A_STICK, A_MAX_VERT, A_MAX_HORZ, A_FULLSCREEN, A_CHANGE_DESKTOP, A_CLOSE, A_ABOVE, A_BELOW};
+ enum Location { TOP_LEFT, TOP, TOP_RIGHT, RIGHT, BOTTOM_RIGHT, BOTTOM, BOTTOM_LEFT, LEFT };
+ Q_ENUM(Location)
+
+ enum Property{ /*QVariant Type*/
+ None=0, /*null*/
+ MinSize=1, /*QSize*/
+ MaxSize=2, /*QSize*/
+ Size=3, /*QSize*/
+ GlobalPos=4, /*QPoint*/
+ Title=5, /*QString*/
+ ShortTitle=6, /*QString*/
+ Icon=7, /*QIcon*/
+ Name=8, /*QString*/
+ Workspace=9, /*int*/
+ States=10, /*QList<NativeWindowObject::State> : Current state of the window */
+ WinTypes=11, /*QList<NativeWindowObject::Type> : Current type of window (typically does not change)*/
+ WinActions=12, /*QList<NativeWindowObject::Action> : Current actions that the window allows (Managed/set by the WM)*/
+ FrameExtents=13, /*QList<int> : [Left, Right, Top, Bottom] in pixels */
+ RelatedWindows=14, /* QList<WId> - better to use the "isRelatedTo(WId)" function instead of reading this directly*/
+ Active=15, /*bool*/
+ Visible=16, /*bool*/
+ WinImage=17 /*QImage*/
+ };
+
+ static QList<NativeWindowObject::Property> allProperties(){
+ //Return all the available properties (excluding "None" and "FrameExtents" (WM control only) )
+ QList<NativeWindowObject::Property> props;
+ props << MinSize << MaxSize << Size << GlobalPos << Title << ShortTitle << Icon << Name << Workspace \
+ << States << WinTypes << WinActions << RelatedWindows << Active << Visible;
+ return props;
+ };
+
+ static void RegisterType();
+
+ NativeWindowObject(WId id = 0);
+ ~NativeWindowObject();
+
+ void addFrameWinID(WId);
+ void addDamageID(unsigned int);
+ bool isRelatedTo(WId);
+
+ WId id();
+ WId frameId();
+ unsigned int damageId();
+
+ //QWindow* window();
+
+ QVariant property(NativeWindowObject::Property);
+ void setProperty(NativeWindowObject::Property, QVariant, bool force = false);
+ void setProperties(QList<NativeWindowObject::Property>, QList<QVariant>, bool force = false);
+ void requestProperty(NativeWindowObject::Property, QVariant, bool force = false);
+ void requestProperties(QList<NativeWindowObject::Property>, QList<QVariant>, bool force = false);
+
+ Q_INVOKABLE QRect geometry(); //this returns the "full" geometry of the window (window + frame)
+ void setGeometryNow(QRect geom);
+
+ // QML ACCESS FUNCTIONS (shortcuts for particular properties in a format QML can use)
+ Q_INVOKABLE QString winImage();
+ Q_INVOKABLE QString name();
+ Q_INVOKABLE QString title();
+ Q_INVOKABLE QString shortTitle();
+ Q_INVOKABLE QString icon();
+ //QML Button states
+ Q_INVOKABLE bool showCloseButton();
+ Q_INVOKABLE bool showMaxButton();
+ Q_INVOKABLE bool showMinButton();
+ Q_INVOKABLE bool showTitlebar();
+ Q_INVOKABLE bool showGenericButton();
+ Q_INVOKABLE bool showWindowFrame();
+ //QML Window States
+ Q_INVOKABLE bool isSticky();
+ Q_INVOKABLE bool isVisible();
+ Q_INVOKABLE int workspace();
+
+ //QML Geometry reporting
+ Q_INVOKABLE QRect frameGeometry();
+ Q_INVOKABLE QRect imageGeometry();
+ Q_INVOKABLE void updateGeometry(int x, int y, int width, int height, bool now = false); //For QML to change the current window position
+
+public slots:
+ Q_INVOKABLE void toggleVisibility();
+ Q_INVOKABLE void requestClose(); //ask the app to close the window (may/not depending on activity)
+ Q_INVOKABLE void requestKill(); //ask the WM to kill the app associated with this window (harsh - only use if not responding)
+ Q_INVOKABLE void requestPing(); //ask the app if it is still active (a WindowNotResponding signal will get sent out if there is no reply);
+
+private:
+ QHash <NativeWindowObject::Property, QVariant> hash;
+ //QWindow *WIN;
+ WId winid, frameid;
+ QList<WId> relatedTo;
+ unsigned int dmgID, dmg, icodmg;
+ //Collation/Delay for window resize events
+ QTimer *geomTimer;
+ QRect newgeom;
+
+ void emitSinglePropChanged(NativeWindowObject::Property);
+
+private slots:
+ void sendNewGeom();
+
+signals:
+ //General Notifications
+ void PropertiesChanged(QList<NativeWindowObject::Property>, QList<QVariant>);
+ void RequestPropertiesChange(WId, QList<NativeWindowObject::Property>, QList<QVariant>);
+ void WindowClosed(WId);
+ void WindowNotResponding(WId); //will be sent out if a window does not respond to a ping request
+
+ //Action Requests (not automatically emitted - typically used to ask the WM to do something)
+ //Note: "WId" should be the NativeWindowObject id()
+ void RequestClose(WId); //Close the window
+ void RequestKill(WId); //Kill the window/app (usually from being unresponsive)
+ void RequestPing(WId); //Verify that the window is still active (such as not closing after a request
+ void RequestReparent(WId, WId, QPoint); //client window, frame window, relative origin point in frame
+ void VerifyNewGeometry(WId);
+ // System Tray Icon Embed/Unembed Requests
+ //void RequestEmbed(WId, QWidget*);
+ //void RequestUnEmbed(WId, QWidget*);
+
+ // QML update signals
+ void winImageChanged();
+ void nameChanged();
+ void titleChanged();
+ void shortTitleChanged();
+ void iconChanged();
+ void stickyChanged();
+ void winTypeChanged();
+ void geomChanged();
+ void visibilityChanged();
+};
+
+// Declare the enumerations as Qt MetaTypes
+Q_DECLARE_METATYPE(NativeWindowObject::Type);
+Q_DECLARE_METATYPE(NativeWindowObject::Action);
+Q_DECLARE_METATYPE(NativeWindowObject::State);
+Q_DECLARE_METATYPE(NativeWindowObject::Property);
+
+#endif
diff --git a/src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/PanelObject.cpp b/src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/PanelObject.cpp
index 471da58f..e8830bde 100644
--- a/src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/PanelObject.cpp
+++ b/src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/PanelObject.cpp
@@ -5,6 +5,8 @@
// See the LICENSE file for full details
//===========================================
#include "PanelObject.h"
+#include <global-objects.h>
+
#include <QQmlEngine>
#include <QDebug>
@@ -28,6 +30,13 @@ int PanelObject::x(){ return geom.x(); }
int PanelObject::y(){ return geom.y(); }
int PanelObject::width(){ return geom.width(); }
int PanelObject::height(){ return geom.height(); }
+bool PanelObject::isVertical(){
+ return ( geom.width() < geom.height() );
+}
+
+QStringList PanelObject::plugins(){
+ return panel_plugins;
+}
void PanelObject::setBackground(QString fileOrColor){
if(bg!=fileOrColor){
@@ -42,3 +51,70 @@ void PanelObject::setGeometry( QRect newgeom ){
emit geomChanged();
}
}
+
+void PanelObject::setPlugins( QStringList plist){
+ //Iterate through the list and find the URL's for the files
+ QStringList dirs; dirs << ":/qml/plugins/"; //add local directories here
+ for(int i=0; i<plist.length(); i++){
+ bool found = false;
+ for(int j=0; j<dirs.length() && !found; j++){
+ if(QFile::exists(dirs[j]+plist[i]+".qml")){
+ plist[i] = QUrl::fromLocalFile(dirs[j]+plist[i]+".qml").url();
+ found = true;
+ }
+ }
+ if(!found){
+ qWarning() << "Could not find panel plugin on system:" << plist[i];
+ plist.removeAt(i);
+ i--;
+ }
+ }
+ //Now update the internal list if it has changed
+ if(panel_plugins != plist){
+ panel_plugins = plist;
+ this->emit pluginsChanged();
+ }
+}
+
+void PanelObject::syncWithSettings(QRect parent_geom){
+ //Read off all the settings
+ QString id = panel_id.section("/",-1); //last section (allow for prefixes to distinguish multiple monitors with the same profile but different screens)
+ //qDebug() << "Sync Panel Settings:" << panel_id << id << parent_geom;
+ QString anchor = DesktopSettings::instance()->value(DesktopSettings::Panels, id+"/anchor", "bottom").toString().toLower();
+ QString align = DesktopSettings::instance()->value(DesktopSettings::Panels, id+"/align", "center").toString().toLower();
+ double length = DesktopSettings::instance()->value(DesktopSettings::Panels, id+"/length_percent", 100).toDouble()/100.0;
+ double width = DesktopSettings::instance()->value(DesktopSettings::Panels, id+"/width_font_percent", 2.1).toDouble();
+ width = qRound(width * QApplication::fontMetrics().height() );
+ this->setBackground( DesktopSettings::instance()->value(DesktopSettings::Panels, id+"/background", "rgba(0,0,0,120)").toString() );
+ // qDebug() << "Update Panel:" << panel_id << id << anchor+"/"+align << length << width;
+ //Now calculate the geometry of the panel
+ QRect newgeom;
+ //Figure out the size of the panel
+ if(anchor=="top" || anchor=="bottom"){ newgeom.setWidth( parent_geom.width()*length ); newgeom.setHeight(width); }
+ else{ newgeom.setWidth(width); newgeom.setHeight(parent_geom.height()*length); }
+ //qDebug() << " - Size:" << newgeom;
+ //Now figure out the location of the panel
+ if(align=="left" || align=="top"){
+ if(anchor=="top" || anchor=="left"){ newgeom.moveTopLeft(QPoint(0,0)); }
+ else if(anchor=="right"){ newgeom.moveTopRight(QPoint(parent_geom.width(), 0)); }
+ else{ newgeom.moveBottomLeft(QPoint(0, parent_geom.height()) ); } //bottom by default
+
+ }else if(align=="right" || align=="bottom"){
+ if(anchor=="top"){ newgeom.moveTopRight(QPoint(parent_geom.width(),0)); }
+ else if(anchor=="left"){ newgeom.moveBottomLeft(QPoint(0, parent_geom.height())); }
+ else if(anchor=="right"){ newgeom.moveBottomRight(QPoint(parent_geom.width(), parent_geom.height())); }
+ else{ newgeom.moveBottomRight(QPoint(parent_geom.width(), parent_geom.height()) ); }
+
+ }else{ //center
+ if(anchor=="top"){ newgeom.moveTopLeft(QPoint( (parent_geom.width()-newgeom.width())/2,0)); }
+ else if(anchor=="left"){ newgeom.moveTopLeft(QPoint(0, (parent_geom.height()-newgeom.height())/2 )); }
+ else if(anchor=="right"){ newgeom.moveTopRight(QPoint(parent_geom.width(), (parent_geom.height()-newgeom.height())/2 )); }
+ else{ newgeom.moveBottomLeft(QPoint( (parent_geom.width()-newgeom.width())/2, parent_geom.height()) ); }
+ }
+ //qDebug() << " - Calculated Geometry (relative to parent):" << newgeom;
+ //Note: newgeom is currently in parent-relative coordinates (not global)
+ newgeom.translate(parent_geom.x(), parent_geom.y());
+ //qDebug() << " - Calculated Geometry (global):" << newgeom;
+ this->setGeometry(newgeom); //shift to global coordinates
+ this->setPlugins( DesktopSettings::instance()->value(DesktopSettings::Panels, id+"/plugins", QStringList()).toStringList() );
+}
diff --git a/src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/PanelObject.h b/src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/PanelObject.h
index a788fa07..945deec0 100644
--- a/src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/PanelObject.h
+++ b/src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/PanelObject.h
@@ -20,10 +20,13 @@ class PanelObject : public QObject {
Q_PROPERTY( int y READ y NOTIFY geomChanged)
Q_PROPERTY( int width READ width NOTIFY geomChanged)
Q_PROPERTY( int height READ height NOTIFY geomChanged)
+ Q_PROPERTY( bool isVertical READ isVertical NOTIFY geomChanged)
+ Q_PROPERTY( QStringList plugins READ plugins NOTIFY pluginsChanged)
private:
QString panel_id, bg;
QRect geom;
+ QStringList panel_plugins;
public:
PanelObject(QString id = "", QObject *parent = 0);
@@ -36,14 +39,19 @@ public:
Q_INVOKABLE int y();
Q_INVOKABLE int width();
Q_INVOKABLE int height();
+ Q_INVOKABLE bool isVertical();
+ Q_INVOKABLE QStringList plugins();
public slots:
void setBackground(QString fileOrColor);
void setGeometry(QRect newgeom);
+ void syncWithSettings(QRect parent_geom);
+ void setPlugins(QStringList plist);
signals:
void backgroundChanged();
void geomChanged();
+ void pluginsChanged();
};
#endif
diff --git a/src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/RootDesktopObject.cpp b/src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/RootDesktopObject.cpp
index 5750ac2d..d9a81f54 100644
--- a/src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/RootDesktopObject.cpp
+++ b/src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/RootDesktopObject.cpp
@@ -8,12 +8,16 @@
#include <QQmlEngine>
#include <QApplication>
#include <QScreen>
-
+#include <global-objects.h>
#include <QDebug>
// === PUBLIC ===
RootDesktopObject::RootDesktopObject(QObject *parent) : QObject(parent){
+ last_window_up = 0;
updateScreens(); //make sure the internal list is updated right away
+ connect(this, SIGNAL(changePanels(QStringList)), this, SLOT(setPanels(QStringList)) );
+ currentTimeTimer = new QTimer(this);
+ connect(currentTimeTimer, SIGNAL(timeout()), this, SLOT(updateCurrentTime()) );
}
RootDesktopObject::~RootDesktopObject(){
@@ -27,6 +31,8 @@ void RootDesktopObject::RegisterType(){
qmlRegisterType<RootDesktopObject>("Lumina.Backend.RootDesktopObject", 2, 0, "RootDesktopObject");
//Also register any types that are needed by this class
ScreenObject::RegisterType();
+ NativeWindowObject::RegisterType();
+ OSInterface::RegisterType();
}
RootDesktopObject* RootDesktopObject::instance(){
@@ -36,14 +42,14 @@ RootDesktopObject* RootDesktopObject::instance(){
//QML Read Functions
QStringList RootDesktopObject::screens(){
- qDebug() << "Request Screens:" << s_objects.length();
+ //qDebug() << "Request Screens:" << s_objects.length();
QStringList names;
for(int i=0; i<s_objects.length(); i++){ names << s_objects[i]->name(); }
return names;
}
ScreenObject* RootDesktopObject::screen(QString id){
- qDebug() << "Got Screen Request:" << id;
+ //qDebug() << "Got Screen Request:" << id;
for(int i=0; i<s_objects.length(); i++){
if(s_objects[i]->name()==id){ return s_objects[i]; }
}
@@ -72,7 +78,7 @@ QStringList RootDesktopObject::windows(){
return names;
}
-NativeWindow* RootDesktopObject::window(QString id){
+NativeWindowObject* RootDesktopObject::window(QString id){
//qDebug() << "Got Panel Request:" << id;
WId chk = id.toInt(); //numerical ID's in this case
for(int i=0; i<window_objects.length(); i++){
@@ -81,26 +87,159 @@ NativeWindow* RootDesktopObject::window(QString id){
return 0;
}
+QStringList RootDesktopObject::trayWindows(){
+ //qDebug() << "Request Panels:" << panel_objects.length();
+ QStringList names;
+ for(int i=0; i<tray_window_objects.length(); i++){ names << QString::number(tray_window_objects[i]->id()); }
+ return names;
+}
+
+NativeWindowObject* RootDesktopObject::trayWindow(QString id){
+ //qDebug() << "Got Panel Request:" << id;
+ WId chk = id.toInt(); //numerical ID's in this case
+ for(int i=0; i<tray_window_objects.length(); i++){
+ if(tray_window_objects[i]->id()==chk){ return tray_window_objects[i]; }
+ }
+ return 0;
+}
+
+bool RootDesktopObject::hasTrayWindows(){
+ return !tray_window_objects.isEmpty();
+}
+
+QString RootDesktopObject::currentTime(){
+ return currentTimeString;
+}
+
+QDateTime RootDesktopObject::currentDateTime(){
+ return currentDateTimeStruct;
+}
+
+OSInterface* RootDesktopObject::os_interface(){
+ return OSInterface::instance();
+}
+
void RootDesktopObject::setPanels(QList<PanelObject*> list){
panel_objects = list;
emit panelsChanged();
}
-void RootDesktopObject::setWindows(QList<NativeWindow*> list){
+void RootDesktopObject::setPanels(QStringList ids){
+ //Make this thread-safe for object creation
+ if(this->thread() != QThread::currentThread()){
+ //use internal signal/slot combo to change threads
+ this->emit changePanels(ids);
+ return;
+ }
+ //qDebug() << "GOT PANEL CHANGE:" << ids;
+ //Get the current bounding rectangle for the session
+ QRect total;
+ bool change = false;
+ for(int i=0; i<=s_objects.length(); i++){
+ QRect geom;
+ QString prefix;
+ if(i==s_objects.length()){
+ geom = total; //session geometry
+ prefix="session/";
+ }else{
+ geom = s_objects[i]->geometry();
+ total = total.united(geom);
+ prefix=s_objects[i]->name()+"/";
+ }
+ QStringList newids = ids.filter(prefix);
+ //qDebug() << " Check Panel IDs:" << prefix << newids << ids;
+ //First update/remove any current panel objects
+ for(int i=0; i<panel_objects.length(); i++){
+ if(newids.contains(panel_objects[i]->name()) ){
+ //qDebug() << " - Update Existing Panel:" << panel_objects[i]->name();
+ newids.removeAll(panel_objects[i]->name()); //already handled
+ panel_objects[i]->syncWithSettings(geom);
+ }else if(panel_objects[i]->name().startsWith(prefix) ){
+ //qDebug() << " - Remove Existing Panel:" << panel_objects[i]->name();
+ panel_objects.takeAt(i)->deleteLater();
+ i--;
+ change = true; //list changed
+ }
+ }
+ //Now create any new panel objects as needed
+ for(int i=0; i<newids.length(); i++){
+ //qDebug() << " - Create Panel:" << newids[i];
+ PanelObject *tmp = new PanelObject(newids[i], this);
+ tmp->syncWithSettings(geom);
+ panel_objects << tmp;
+ change = true; //list changed
+ }
+ } //end loop over screens+session
+ if(change){ emit panelsChanged(); }
+}
+
+void RootDesktopObject::setWindows(QList<NativeWindowObject*> list){
window_objects = list;
emit windowsChanged();
+ mousePositionChanged(true);
+}
+
+void RootDesktopObject::setTrayWindows(QList<NativeWindowObject*> list){
+ tray_window_objects = list;
+ emit trayWindowsChanged();
+ mousePositionChanged(true);
+}
+
+void RootDesktopObject::updateCurrentTimeFormat(QString fmt){
+ //sanitize the time format as needed
+ if(fmt.contains("z")){ fmt.replace("z",""); } //do not allow millisecond updates - too fast for the desktop
+ fmt = fmt.simplified();
+ //Verify that anything has changed first
+ if(currentTimeFormat == fmt && currentTimeTimer->isActive()){ return; } //nothing changed
+ if(currentTimeTimer->isActive()){ currentTimeTimer->stop(); } //make sure this does not trigger during the changeover
+ currentTimeFormat = fmt;
+ int interval = 1000; //default to 1 second intervals
+ //Adjust the refresh time for the clock based on the smallest unit requested
+ if(fmt.contains("s")){ interval=500; } //1/2 second pings for 1-second displays
+ else if(fmt.contains("m") || currentTimeFormat.isEmpty()){ interval = 5000; } //5 second pings for 1-minute displays
+ else if(fmt.contains("h")){ interval = 30000; } //30 second pings for 1-hour displays
+ currentTimeTimer->setInterval(interval);
+ updateCurrentTime(); //refresh the currently-available time
+ QTimer::singleShot(0,currentTimeTimer, SLOT(start()) );//start the update timer
}
void RootDesktopObject::logout(){
- emit startLogout();
+ //Emit the logout signal in a few ms (let the display close/sync first)
+ QTimer::singleShot(50, this, SIGNAL(startLogout()));
}
void RootDesktopObject::lockscreen(){
emit lockScreen();
}
-void RootDesktopObject::mousePositionChanged(){
+void RootDesktopObject::mousePositionChanged(bool lowerall){
emit mouseMoved();
+ // Go through the transparent windows (in order of high->low in stack)
+ // and raise/lower the transparent overlays as needed
+ QPoint pos = QCursor::pos();
+ for(int i=window_objects.length()-1; i>=0; i--){
+ if(window_objects[i]->geometry().contains(pos) ){
+ if(last_window_up!= window_objects[i]){
+ if(last_window_up!=0){ Lumina::NWS->lowerWindow(last_window_up); }
+ Lumina::NWS->raiseWindow(window_objects[i]);
+ last_window_up = window_objects[i];
+ }
+ if(!lowerall){ return; } //found the currently-hovered window
+ }else if(lowerall){
+ Lumina::NWS->lowerWindow(window_objects[i]);
+ }
+ }
+ //failover for when no window has the mouse over it (lower all of them)
+ if(last_window_up!=0 && !lowerall){ Lumina::NWS->lowerWindow(last_window_up); }
+}
+
+void RootDesktopObject::launchApp(QString appOrPath){
+ emit launchApplication(appOrPath);
+}
+
+//C++ Access Functions (simplifications for the QML ones)
+QList<NativeWindowObject*> RootDesktopObject::windowObjects(){
+ return window_objects;
}
// === PUBLIC SLOTS ===
@@ -129,5 +268,26 @@ void RootDesktopObject::ChangeWallpaper(QString screen, QString value){
}
}
+QString RootDesktopObject::CurrentWallpaper(QString screen){
+ for(int i=0; i<s_objects.length(); i++){
+ if(s_objects[i]->name()==screen){ return s_objects[i]->background();}
+ }
+ return ""; //unknown
+}
+
+
// === PRIVATE ===
+
+// === PRIVATE SLOTS ===
+void RootDesktopObject::updateCurrentTime(){
+ QDateTime DT = QDateTime::currentDateTime();
+ QString tmp;
+ if(currentTimeFormat.isEmpty()){ tmp = DT.toString(Qt::DefaultLocaleShortDate); }
+ else{ tmp = DT.toString(currentTimeFormat); }
+ if(tmp!=currentTimeString){ //prevent sending signals to update the interface if nothing changed
+ currentDateTimeStruct = DT;
+ currentTimeString = tmp;
+ emit currentTimeChanged();
+ }
+}
diff --git a/src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/RootDesktopObject.h b/src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/RootDesktopObject.h
index 838b5f7d..3c525848 100644
--- a/src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/RootDesktopObject.h
+++ b/src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/RootDesktopObject.h
@@ -8,18 +8,20 @@
//===========================================
#ifndef _LUMINA_DESKTOP_QML_BACKEND_ROOT_DESKTOP_OBJECT_H
#define _LUMINA_DESKTOP_QML_BACKEND_ROOT_DESKTOP_OBJECT_H
-#include <QObject>
-#include <QList>
#include <global-includes.h>
-
-#include "ScreenObject.h"
+#include <ScreenObject.h>
+#include <QThread>
class RootDesktopObject : public QObject{
Q_OBJECT
//Define all the QML Properties here (interface between QML and the C++ methods below)
Q_PROPERTY( QStringList screens READ screens NOTIFY screensChanged)
Q_PROPERTY( QStringList panels READ panels NOTIFY panelsChanged)
- Q_PROPERTY( QStringList windows READ windows NOTIFY windowsChanged);
+ Q_PROPERTY( QStringList windows READ windows NOTIFY windowsChanged)
+ Q_PROPERTY( QStringList trayWindows READ trayWindows NOTIFY trayWindowsChanged)
+ Q_PROPERTY( bool hasTrayWindows READ hasTrayWindows NOTIFY trayWindowsChanged)
+ Q_PROPERTY( QString currentTime READ currentTime NOTIFY currentTimeChanged);
+ Q_PROPERTY( QDateTime currentDateTime READ currentDateTime NOTIFY currentTimeChanged);
public:
//main contructor/destructor
@@ -37,35 +39,65 @@ public:
Q_INVOKABLE QStringList panels();
Q_INVOKABLE PanelObject* panel(QString id);
Q_INVOKABLE QStringList windows();
- Q_INVOKABLE NativeWindow* window(QString id);
+ Q_INVOKABLE NativeWindowObject* window(QString id);
+ Q_INVOKABLE QStringList trayWindows();
+ Q_INVOKABLE NativeWindowObject* trayWindow(QString id);
+ Q_INVOKABLE bool hasTrayWindows();
+ Q_INVOKABLE QString currentTime();
+ Q_INVOKABLE QDateTime currentDateTime();
- void setPanels(QList<PanelObject*> list);
- void setWindows(QList<NativeWindow*> list);
+ //QML Globals Access
+ Q_INVOKABLE OSInterface* os_interface();
//QML Access Functions
Q_INVOKABLE void logout();
Q_INVOKABLE void lockscreen();
- Q_INVOKABLE void mousePositionChanged();
+ Q_INVOKABLE void mousePositionChanged(bool lowerall = false);
+ Q_INVOKABLE void launchApp(QString appOrPath);
+
+ //C++ Access Functions (simplifications for the QML ones)
+ QList<NativeWindowObject*> windowObjects();
private:
QList<ScreenObject*> s_objects;
QList<PanelObject*> panel_objects;
- QList<NativeWindow*> window_objects;
+ QList<NativeWindowObject*> window_objects;
+ QList<NativeWindowObject*> tray_window_objects;
+ QPointer<NativeWindowObject> last_window_up;
+ QTimer *currentTimeTimer;
+ QString currentTimeFormat, currentTimeString;
+ QDateTime currentDateTimeStruct;
public slots:
void updateScreens(); //rescan/update screen objects
void ChangeWallpaper(QString screen, QString);
+ QString CurrentWallpaper(QString screen);
+
+ void setPanels(QList<PanelObject*> list);
+ void setPanels(QStringList ids);
+ QList<PanelObject*> panelObjectList(){ return panel_objects; }
+
+ void setWindows(QList<NativeWindowObject*> list);
+ void setTrayWindows(QList<NativeWindowObject*> list);
+
+ void updateCurrentTimeFormat(QString);
private slots:
+ void updateCurrentTime();
signals:
void screensChanged();
void panelsChanged();
void windowsChanged();
+ void trayWindowsChanged();
+ void currentTimeChanged();
void startLogout();
void mouseMoved();
void lockScreen();
+ void launchApplication(QString);
+ //Internal signals for thread-safety
+ void changePanels(QStringList);
};
#endif
diff --git a/src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/ScreenObject.cpp b/src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/ScreenObject.cpp
index 82622403..c754906d 100644
--- a/src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/ScreenObject.cpp
+++ b/src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/ScreenObject.cpp
@@ -10,6 +10,7 @@
ScreenObject::ScreenObject(QScreen *scrn, QObject *parent) : QObject(parent){
bg_screen = scrn;
+ connect(this, SIGNAL(changePanels(QStringList)), this, SLOT(setPanels(QStringList)) );
}
void ScreenObject::RegisterType(){
@@ -22,7 +23,7 @@ void ScreenObject::RegisterType(){
}
QString ScreenObject::name(){ return bg_screen->name(); }
-QString ScreenObject::background(){ qDebug() << "Got Background:" << bg_screen->name() << bg << bg_screen->geometry(); return bg; }
+QString ScreenObject::background(){ return bg; }
int ScreenObject::x(){ return bg_screen->geometry().x(); }
int ScreenObject::y(){ return bg_screen->geometry().y(); }
int ScreenObject::width(){ return bg_screen->geometry().width(); }
@@ -40,6 +41,37 @@ void ScreenObject::setPanels(QList<PanelObject*> list){
emit panelsChanged();
}
+void ScreenObject::setPanels(QStringList ids){
+ //Make this thread-safe for object creation
+ if(this->thread() != QThread::currentThread()){
+ //use internal signal/slot combo to change threads
+ this->emit changePanels(ids);
+ return;
+ }
+
+ //First update/remove any current panel objects
+ bool change = false;
+ for(int i=0; i<panel_objects.length(); i++){
+ if(ids.contains(panel_objects[i]->name()) ){
+ ids.removeAll(panel_objects[i]->name()); //already handled
+ panel_objects[i]->syncWithSettings(bg_screen->geometry());
+ }else{
+ panel_objects.takeAt(i)->deleteLater();
+ i--;
+ change = true; //list changed
+ }
+ }
+ //Now create any new panel objects as needed
+ for(int i=0; i<ids.length(); i++){
+ PanelObject *tmp = new PanelObject(ids[i], this);
+ tmp->syncWithSettings(bg_screen->geometry());
+ panel_objects << tmp;
+ change = true; //list changed
+ }
+ if(change){ emit panelsChanged(); }
+}
+
+
//QML Read Functions
QStringList ScreenObject::panels(){
//qDebug() << "Request Panels:" << panel_objects.length();
diff --git a/src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/ScreenObject.h b/src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/ScreenObject.h
index 1afff6d2..250c9403 100644
--- a/src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/ScreenObject.h
+++ b/src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/ScreenObject.h
@@ -11,6 +11,7 @@
#include <QObject>
#include <QString>
#include <QScreen>
+#include <QThread>
#include "PanelObject.h"
@@ -42,16 +43,24 @@ public:
Q_INVOKABLE int height();
Q_INVOKABLE QStringList panels();
Q_INVOKABLE PanelObject* panel(QString id);
+ Q_INVOKABLE QRect geometry(){ return bg_screen->geometry(); }
void setPanels(QList<PanelObject*> list);
+ QList<PanelObject*> panelObjectList(){ return panel_objects; }
+
public slots:
+ void setPanels(QStringList ids);
void setBackground(QString fileOrColor);
signals:
void backgroundChanged();
void geomChanged();
void panelsChanged();
+
+ //Internal signals for thread-safety
+ void changePanels(QStringList);
+
};
#endif
diff --git a/src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/src-cpp.pri b/src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/src-cpp.pri
index 899f4968..25bdc019 100644
--- a/src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/src-cpp.pri
+++ b/src-qt5/core/lumina-desktop-unified/src-desktop/src-cpp/src-cpp.pri
@@ -1,9 +1,11 @@
SOURCES *= $${PWD}/RootDesktopObject.cpp \
$${PWD}/ScreenObject.cpp \
- $${PWD}/PanelObject.cpp
+ $${PWD}/PanelObject.cpp \
+ $${PWD}/NativeWindowObject.cpp
HEADERS *= $${PWD}/RootDesktopObject.h \
$${PWD}/ScreenObject.h \
- $${PWD}/PanelObject.h
+ $${PWD}/PanelObject.h \
+ $${PWD}/NativeWindowObject.h
INCLUDEPATH *= $${PWD}
diff --git a/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/ContextMenu.qml b/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/ContextMenu.qml
index 4ab8e156..ee98a8db 100644
--- a/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/ContextMenu.qml
+++ b/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/ContextMenu.qml
@@ -6,15 +6,33 @@
//===========================================
import QtQuick 2.2
import QtQuick.Window 2.2
-import QtQuick.Controls 1
+import QtQuick.Controls 2
import Lumina.Backend.RootDesktopObject 2.0
+
+
Menu {
id: contextMenu
+
+ MenuItem {
+ text: "Launch Terminal"
+ //iconName: "utilities-terminal"
+ onTriggered: {
+ RootObject.launchApp("application/terminal")
+ }
+ }
+ MenuItem {
+ text: "Launch File Browser"
+ //iconName: "user-home"
+ onTriggered: {
+ RootObject.launchApp("inode/directory")
+ }
+ }
+
MenuItem {
text: "Lock Screen"
- iconName: "system-lock-screen"
+ //iconName: "system-lock-screen"
onTriggered: {
RootObject.lockscreen()
}
@@ -22,7 +40,7 @@ Menu {
MenuItem {
text: "Logout"
- iconName: "system-log-out"
+ //iconName: "system-log-out"
onTriggered: {
RootObject.logout()
}
diff --git a/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/NativeWindow.qml b/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/NativeWindow.qml
new file mode 100644
index 00000000..d75f2898
--- /dev/null
+++ b/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/NativeWindow.qml
@@ -0,0 +1,223 @@
+// vi: ft=qml
+import QtQuick 2.0
+import QtQuick.Window 2.2
+import QtQuick.Controls 1.4
+import QtQuick.Layouts 1.3
+
+import Lumina.Backend.NativeWindowObject 2.0
+import Lumina.Backend.RootDesktopObject 2.0
+
+Rectangle {
+ property NativeWindowObject object
+ property string window_id
+
+ SystemPalette { id:palette }
+
+ id: windowFrame
+ visible: object.isVisible
+ border.width: 5
+ border.color: palette.highlight
+ radius: 5
+ color: palette.window //"transparent"
+ x: object.frameGeometry.x
+ y: object.frameGeometry.y
+ width: object.frameGeometry.width
+ height: object.frameGeometry.height
+
+ onXChanged: {
+ windowFrame.object.updateGeometry(windowFrame.x, windowFrame.y, windowFrame.width, windowFrame.height)
+ }
+ onYChanged: {
+ windowFrame.object.updateGeometry(windowFrame.x, windowFrame.y, windowFrame.width, windowFrame.height)
+ }
+
+ MouseArea {
+ id: resizeArea
+ anchors.fill: parent
+ drag.target: undefined
+ property int resizeDirection: NativeWindowObject.TOP_LEFT
+ property int positionX: -1
+ property int positionY: -1
+
+ onPressed: {
+ //NOTE: This is only triggered for resize events
+ var globalP = windowFrame.mapToItem(rootCanvas, mouse.x, mouse.y)
+ positionX = globalP.x
+ positionY = globalP.y
+ if(positionY <= windowFrame.y + 10 ) {
+ if(positionX <= windowFrame.x + 10)
+ resizeDirection = NativeWindowObject.TOP_LEFT
+ else if(positionX >= windowFrame.x + windowFrame.width - 10)
+ resizeDirection = NativeWindowObject.TOP_RIGHT
+ else
+ resizeDirection = NativeWindowObject.TOP
+ }else if(positionY >= windowFrame.y + windowFrame.height - 10) {
+ if(positionX <= windowFrame.x + 10)
+ resizeDirection = NativeWindowObject.BOTTOM_LEFT
+ else if(positionX >= windowFrame.x + windowFrame.width - 10)
+ resizeDirection = NativeWindowObject.BOTTOM_RIGHT
+ else
+ resizeDirection = NativeWindowObject.BOTTOM
+ }else if(positionX <= windowFrame.x + 10) {
+ resizeDirection = NativeWindowObject.LEFT
+ }else if(positionX >= windowFrame.x + windowFrame.width - 10) {
+ resizeDirection = NativeWindowObject.RIGHT
+ }
+ //console.log("Initial X: ", positionX, "Initial Y: ", positionY);
+ //console.log("Initial X Frame: ", windowFrame.x, "Initial Y Frame: ", windowFrame.y);
+ }
+
+ onReleased: {
+ positionX = -1
+ positionY = -1
+ //windowFrame.object.updateGeometry(windowFrame.x, windowFrame.y, windowFrame.width, windowFrame.height)
+ }
+
+ onPositionChanged: {
+ //NOTE: This is only triggered for resize events
+ if(positionX != -1 && positionY != -1) {
+ var globalP = windowFrame.mapToItem(rootCanvas, mouse.x, mouse.y)
+ /*console.log("Global P: ", globalP);
+ console.log("Position X: ", positionX, "Position Y: ", positionY)
+ console.log("Old Position : ", windowFrame.x, " , ", windowFrame.y)
+ console.log(resizeDirection);*/
+ if(resizeDirection == NativeWindowObject.TOP_LEFT) {
+ windowFrame.height -= globalP.y - positionY
+ windowFrame.width -= globalP.x - positionX
+ windowFrame.y = globalP.y
+ windowFrame.x = globalP.x
+ }else if(resizeDirection == NativeWindowObject.TOP_RIGHT) {
+ //console.log("TOP RIGHT Old Height: ", windowFrame.height, "Old Width: ", windowFrame.width)
+ windowFrame.height -= globalP.y - positionY
+ windowFrame.width += globalP.x - positionX
+ //console.log("New Height: ", windowFrame.height, "New Width: ", windowFrame.width)
+ windowFrame.y = globalP.y
+ //console.log("New Position : ", windowFrame.x, " , ", windowFrame.y)
+ }else if(resizeDirection == NativeWindowObject.TOP) {
+ windowFrame.height -= globalP.y - positionY
+ windowFrame.y = globalP.y
+ } else if(resizeDirection == NativeWindowObject.RIGHT) {
+ windowFrame.width += globalP.x - positionX
+ } else if(resizeDirection == NativeWindowObject.BOTTOM_RIGHT) {
+ windowFrame.height += globalP.y - positionY
+ windowFrame.width += globalP.x - positionX
+ } else if(resizeDirection == NativeWindowObject.BOTTOM) {
+ windowFrame.height += globalP.y - positionY
+ } else if(resizeDirection == NativeWindowObject.BOTTOM_LEFT) {
+ windowFrame.width -= globalP.x - positionX
+ windowFrame.height += globalP.y - positionY
+ windowFrame.x = globalP.x
+ } else if(resizeDirection == NativeWindowObject.LEFT) {
+ windowFrame.width -= globalP.x - positionX
+ windowFrame.x = globalP.x
+ }
+ //Set a miniumum width and height as 80x50
+ if(windowFrame.width < 80) {
+ windowFrame.width = 80
+ }
+ if(windowFrame.height < 50) {
+ windowFrame.height = 50
+ }
+ positionY = globalP.y
+ positionX = globalP.x
+ }
+ windowFrame.object.updateGeometry(windowFrame.x, windowFrame.y, windowFrame.width, windowFrame.height)
+ }
+ }
+
+ Rectangle {
+ id: titleBar
+ border.width: 0
+ color: palette.window
+ height: 25
+ anchors.top: windowFrame.top
+ anchors.right: windowFrame.right
+ anchors.left: windowFrame.left
+ anchors.margins: windowFrame.border.width
+ width: parent.width
+
+ MouseArea {
+ id: dragArea
+ anchors.fill: parent
+ drag.target: windowFrame
+ drag.axis: Drag.XAndYAxis
+ //acceptedButtons: Qt.RightButton
+ //onClicked: contextMenu.open()
+ //released: { function(); }
+ }
+
+ ToolButton {
+ id: otherButton
+ anchors.left: parent.left
+ height: parent.height
+ iconSource: windowFrame.object.icon
+ }
+
+ Text {
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.verticalCenter: parent.verticalCenter
+ color: palette.windowText
+ text: windowFrame.object.shortTitle
+ fontSizeMode: Text.Fit
+ }
+
+ RowLayout {
+ spacing: 0
+ anchors.right: parent.right
+ height: parent.height
+
+ ToolButton {
+ id: minButton
+ Layout.fillHeight: true
+ iconName: "window-minimize"
+ onClicked: { windowFrame.object.toggleVisibility() }
+ }
+
+ ToolButton {
+ id: maxButton
+ Layout.fillHeight: true
+ iconName: "window-maximize"
+ //onClicked: { windowFrame.object.toggleMaximize() }
+ }
+
+ ToolButton {
+ id: closeButton
+ Layout.fillHeight: true
+ iconName: "document-close"
+ onClicked: { windowFrame.object.requestClose() }
+ }
+ }
+ }
+
+ Image {
+ id: frameContents
+ cache: false
+ source: windowFrame.object.winImage
+ anchors.top: titleBar.bottom
+ anchors.bottom: parent.bottom
+ anchors.left: windowFrame.left
+ anchors.right: windowFrame.right
+ anchors.leftMargin: windowFrame.border.width
+ anchors.rightMargin: windowFrame.border.width
+ anchors.bottomMargin: windowFrame.border.width
+ width: parent.width
+ height: parent.height
+ //color: palette.window
+
+ //Image {
+ //anchors.fill: frameContents
+ //cache: false
+ //source: windowFrame.object.winImage
+ //}
+
+ MouseArea {
+ width: parent.width
+ height: parent.height
+ anchors.fill: frameContents
+ onClicked: { console.log(parent.mapToGlobal(mouse.x, mouse.y)); }
+ onPositionChanged: {
+ RootObject.mousePositionChanged()
+ }
+ }
+ }
+}
diff --git a/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/Panel.qml b/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/Panel.qml
index 846b5b55..65c8a0eb 100644
--- a/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/Panel.qml
+++ b/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/Panel.qml
@@ -7,20 +7,43 @@
import QtQuick 2.2
import QtQuick.Window 2.2
import QtQuick.Controls 1
+import QtQuick.Layouts 1.3
import Lumina.Backend.PanelObject 2.0
-AnimatedImage {
+Rectangle {
//C++ backend object
- property string screen_id
+ property string panel_id
property PanelObject object
+ id: panel
//Normal geometries/placements
- asynchronous: true
- clip: true
- source: object.background
+ color: object.background
x: object.x
y: object.y
width: object.width
height: object.height
- }
+
+ GridLayout{
+ id: layout
+ anchors.fill: parent
+ //columns: parent.object.isVertical ? 1 : -1
+ //rows: parent.object.isVertical ? -1 : 1
+ flow: parent.isVertical ? GridLayout.TopToBottom : GridLayout.LeftToRight
+ //horizontalItemAlignment: parent.object.isVertical ? Grid.AlignHCenter : Qt.AlignLeft
+ //verticalItemAlignment: parent.object.isVertical ? Grid.AlignTop : Qt.AlignVCenter
+ Repeater {
+ model: panel.object.plugins
+ Loader{
+ asynchronous: true
+ property bool vertical : layout.parent.object.isVertical
+ property bool isspacer : modelData.endsWith("/Spacer.qml");
+ source: modelData
+ Layout.fillWidth : (vertical || isspacer) ? true : false
+ Layout.fillHeight : (vertical && ! isspacer) ? false : true
+ Layout.alignment : Qt.AlignVCenter | Qt.AlignHCenter
+ }
+
+ }
+ } //end of grid layout
+}
diff --git a/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/RootDesktop.qml b/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/RootDesktop.qml
index c564ee42..7310fd50 100644
--- a/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/RootDesktop.qml
+++ b/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/RootDesktop.qml
@@ -17,12 +17,13 @@
//===========================================
import QtQuick 2.2
import QtQuick.Window 2.2
-import QtQuick.Controls 1
+import QtQuick.Controls 2
import "." as QML
import Lumina.Backend.RootDesktopObject 2.0
import Lumina.Backend.ScreenObject 2.0
+import Lumina.Backend.NativeWindowObject 2.0
Rectangle {
id: rootCanvas
@@ -33,10 +34,10 @@ Rectangle {
anchors.fill: rootCanvas
acceptedButtons: Qt.RightButton
onClicked: {
- /*contextMenu.x = mouseX
+ contextMenu.x = mouseX
contextMenu.y = mouseY
- contextMenu.open() */
- contextMenu.popup()
+ contextMenu.open()
+ //contextMenu.popup()
}
onPositionChanged: {
RootObject.mousePositionChanged()
@@ -55,4 +56,24 @@ Rectangle {
z: 0+index
}
}
+
+ //Setup the windows
+ Repeater{
+ model: RootObject.windows
+ QML.NativeWindow{
+ window_id: modelData
+ object: RootObject.window(modelData)
+ z: 100+index
+ }
+ }
+
+ //Setup the Panels
+ Repeater{
+ model: RootObject.panels
+ QML.Panel{
+ panel_id: modelData
+ object: RootObject.panel(panel_id)
+ z: 10100+index
+ }
+ }
}
diff --git a/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/Screen.qml b/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/Screen.qml
index 3b83653a..82e7c89d 100644
--- a/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/Screen.qml
+++ b/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/Screen.qml
@@ -9,6 +9,9 @@ import QtQuick.Window 2.2
import QtQuick.Controls 1
import Lumina.Backend.ScreenObject 2.0
+import Lumina.Backend.PanelObject 2.0
+
+import "." as QML
AnimatedImage {
//C++ backend object
@@ -23,4 +26,15 @@ AnimatedImage {
y: object.y
width: object.width
height: object.height
+
+ //Setup the Panels
+ Repeater{
+ model: object.panels
+ QML.Panel{
+ panel_id: modelData
+ object: parent.object.panel(panel_id)
+ z: 10000+index
+ }
+ }
+
}
diff --git a/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/plugins/Clock_Digital.qml b/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/plugins/Clock_Digital.qml
new file mode 100644
index 00000000..e68788f6
--- /dev/null
+++ b/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/plugins/Clock_Digital.qml
@@ -0,0 +1,23 @@
+//===========================================
+// Lumina-desktop source code
+// Copyright (c) 2018, Ken Moore
+// Available under the 3-clause BSD license
+// See the LICENSE file for full details
+//===========================================
+// This is the QML plugin that displays the OS status/system tray
+//===========================================
+import QtQuick 2.2
+import QtQuick.Layouts 1.3
+import QtQuick.Controls 1
+
+import Lumina.Backend.RootDesktopObject 2.0
+
+Label{
+ anchors.fill: parent
+ text: RootObject.currentTime
+ wrapMode: Text.WordWrap
+ verticalAlignment: Text.AlignVCenter
+ horizontalAlignment: Text.AlignHCenter
+ rotation: parent.vertical ? 90 : 0
+ transformOrigin: Item.Center
+}
diff --git a/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/plugins/Spacer.qml b/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/plugins/Spacer.qml
new file mode 100644
index 00000000..93556790
--- /dev/null
+++ b/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/plugins/Spacer.qml
@@ -0,0 +1,15 @@
+//===========================================
+// Lumina-desktop source code
+// Copyright (c) 2018, Ken Moore
+// Available under the 3-clause BSD license
+// See the LICENSE file for full details
+//===========================================
+// This is a tiny QML plugin for a basic Item which can be set to grow
+//===========================================
+import QtQuick 2.2
+import QtQuick.Layouts 1.3
+
+
+Item{
+ anchors.fill: parent
+}
diff --git a/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/plugins/StatusTray.qml b/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/plugins/StatusTray.qml
new file mode 100644
index 00000000..f4063ed9
--- /dev/null
+++ b/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/plugins/StatusTray.qml
@@ -0,0 +1,94 @@
+//===========================================
+// Lumina-desktop source code
+// Copyright (c) 2018, Ken Moore
+// Available under the 3-clause BSD license
+// See the LICENSE file for full details
+//===========================================
+// This is the QML plugin that displays the OS status/system tray
+//===========================================
+import QtQuick 2.2
+import QtQuick.Layouts 1.3
+import QtQuick.Controls 1
+
+import Lumina.Backend.RootDesktopObject 2.0
+import Lumina.Backend.NativeWindowObject 2.0
+
+import "./status_tray" as QML
+
+
+Item {
+ property int prefsize: parent.vertical ? parent.width : parent.height
+ id: "status_tray"
+ anchors.fill: parent
+
+ GridLayout{
+ anchors.fill: parent
+ flow: status_tray.parent.vertical ? GridLayout.TopToBottom : GridLayout.LeftToRight
+ //columns: vertical ? 1 : -1
+ //rows: vertical ? -1 : 1
+ columnSpacing: 2
+ rowSpacing: 2
+
+ //Volume Status
+ QML.VolumeButton{
+ //Layout.preferredHeight: status_tray.prefsize
+ //Layout.preferredWidth: status_tray.prefsize
+ Layout.alignment: Qt.AlignVCenter | Qt.AlignHCenter
+ }
+ //Network Status
+ QML.NetworkButton{
+ //Layout.preferredHeight: status_tray.prefsize
+ //Layout.preferredWidth: status_tray.prefsize
+ Layout.alignment: Qt.AlignVCenter | Qt.AlignHCenter
+ }
+ //Battery Status
+ QML.BatteryButton{
+ //Layout.preferredHeight: status_tray.prefsize
+ //Layout.preferredWidth: status_tray.prefsize
+ Layout.alignment: Qt.AlignVCenter | Qt.AlignHCenter
+ }
+ //Update Status
+ QML.UpdateButton{
+ //Layout.preferredHeight: status_tray.prefsize
+ //Layout.preferredWidth: status_tray.prefsize
+ Layout.alignment: Qt.AlignVCenter | Qt.AlignHCenter
+ }
+ //System Tray Menu Button
+ ToolButton{
+ id: "trayButton"
+ text: "Tray"
+ Layout.alignment: Qt.AlignVCenter | Qt.AlignHCenter
+ //iconName: "view-more-vertical"
+ visible: RootObject.hasTrayWindows
+ onClicked: trayMenu.open()
+ menu: Menu{
+ id: "trayMenu"
+ //MenuItem{ text: "sample" }
+ //MenuItem{ text: "sample2" }
+ Rectangle{ color: "blue"; width: 48; height: 48 }
+ GridLayout{
+ columns: 4
+ Repeater{
+ model: RootObject.trayWindows
+ QML.TrayIcon{
+
+ winObj: RootObject.trayWindow(modelData)
+ parent: trayMenu
+ Layout.preferredWidth: 48
+ Layout.preferredHeight: 48
+ }
+ }
+ }
+ }
+ } //end of system tray menu button
+ /*Repeater{
+ model: RootObject.trayWindows
+ QML.TrayIcon{
+ winObj: RootObject.trayWindow(modelData)
+ Layout.preferredHeight: status_tray.prefsize
+ Layout.preferredWidth: status_tray.prefsize
+ }
+ }*/
+ } //end of layout
+
+}
diff --git a/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/plugins/plugins.pri b/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/plugins/plugins.pri
new file mode 100644
index 00000000..d1939616
--- /dev/null
+++ b/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/plugins/plugins.pri
@@ -0,0 +1,11 @@
+#Show the QML files to lupdate for translation purposes - not for the actual build
+lupdate_only{
+ SOURCES *= $${PWD}/StatusTray.qml \
+ $${PWD}/status_tray/TrayIcon.qml \
+ $${PWD}/status_tray/VolumeButton.qml \
+ $${PWD}/status_tray/NetworkButton.qml \
+ $${PWD}/status_tray/BatteryButton.qml \
+ $${PWD}/status_tray/UpdateButton.qml \
+ $${PWD}/Clock_Digital.qml \
+ $${PWD}/Spacer.qml
+}
diff --git a/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/plugins/status_tray/BatteryButton.qml b/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/plugins/status_tray/BatteryButton.qml
new file mode 100644
index 00000000..bc8ba68a
--- /dev/null
+++ b/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/plugins/status_tray/BatteryButton.qml
@@ -0,0 +1,20 @@
+//===========================================
+// Lumina-desktop source code
+// Copyright (c) 2018, Ken Moore
+// Available under the 3-clause BSD license
+// See the LICENSE file for full details
+//===========================================
+import QtQuick 2.2
+import QtQuick.Controls 1
+
+import Lumina.Backend.RootDesktopObject 2.0
+import Lumina.Backend.OSInterface 2.0
+
+ToolButton{
+ property OSInterface os: RootObject.os_interface()
+ id: "batButton"
+ iconName: os.batteryIcon
+ tooltip: os.batteryStatus
+ visible: os.batteryAvailable()
+ //enabled: false
+}
diff --git a/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/plugins/status_tray/NetworkButton.qml b/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/plugins/status_tray/NetworkButton.qml
new file mode 100644
index 00000000..387c130b
--- /dev/null
+++ b/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/plugins/status_tray/NetworkButton.qml
@@ -0,0 +1,23 @@
+//===========================================
+// Lumina-desktop source code
+// Copyright (c) 2018, Ken Moore
+// Available under the 3-clause BSD license
+// See the LICENSE file for full details
+//===========================================
+import QtQuick 2.2
+import QtQuick.Controls 1
+
+import Lumina.Backend.RootDesktopObject 2.0
+import Lumina.Backend.OSInterface 2.0
+
+ToolButton{
+ id: "netButton"
+ property OSInterface os: RootObject.os_interface()
+ iconName: os.networkIcon
+ tooltip: os.networkStatus
+ visible: os.networkAvailable
+ enabled: os.hasNetworkManager()
+ onClicked: {
+ RootObject.launchApplication(os.networkManagerUtility())
+ }
+}
diff --git a/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/plugins/status_tray/TrayIcon.qml b/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/plugins/status_tray/TrayIcon.qml
new file mode 100644
index 00000000..6012ba5d
--- /dev/null
+++ b/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/plugins/status_tray/TrayIcon.qml
@@ -0,0 +1,34 @@
+//===========================================
+// Lumina-desktop source code
+// Copyright (c) 2018, Ken Moore
+// Available under the 3-clause BSD license
+// See the LICENSE file for full details
+//===========================================
+import QtQuick 2.2
+import QtQuick.Controls 2
+
+import Lumina.Backend.NativeWindowObject 2.0
+
+Image{
+ property NativeWindowObject winObj
+ source: winObj.icon
+ id: "trayIcon"
+ fillMode: Qt.PreserveAspectFit
+ smooth: true
+ cache: false
+ asynchronous: false
+ //text: winObj.name
+
+ onXChanged: { }
+
+ MouseArea{
+ //property point globalPos
+ anchors.fill: parent
+ acceptedButtons: Qt.NoButton
+ onEntered: {
+ //Need to ensure the invisible native window is over this place right now
+ console.log("Enter Tray Icon:", parent.mapToGlobal(0,0));
+ winObj.updateGeometry( parent.mapToGlobal(0,0).x, parent.mapToGlobal(0,0).y, parent.width(), parent.height(), true)
+ }
+ }
+}
diff --git a/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/plugins/status_tray/UpdateButton.qml b/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/plugins/status_tray/UpdateButton.qml
new file mode 100644
index 00000000..9ba824ae
--- /dev/null
+++ b/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/plugins/status_tray/UpdateButton.qml
@@ -0,0 +1,24 @@
+//===========================================
+// Lumina-desktop source code
+// Copyright (c) 2018, Ken Moore
+// Available under the 3-clause BSD license
+// See the LICENSE file for full details
+//===========================================
+import QtQuick 2.2
+import QtQuick.Controls 1
+
+import Lumina.Backend.RootDesktopObject 2.0
+import Lumina.Backend.OSInterface 2.0
+
+ToolButton{
+ id: "updateButton"
+ property OSInterface os: RootObject.os_interface()
+ iconName: os.updateIcon
+ tooltip: os.updateStatus
+ visible: os.updateInfoAvailable
+ /*enabled: os.hasUpdateManager()
+ onClicked: {
+ RootObject.launchApplication(os.updateManagerUtility())
+ }*/
+ //TODO - add a menu with update manager and start/view updates options
+}
diff --git a/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/plugins/status_tray/VolumeButton.qml b/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/plugins/status_tray/VolumeButton.qml
new file mode 100644
index 00000000..e98a2603
--- /dev/null
+++ b/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/plugins/status_tray/VolumeButton.qml
@@ -0,0 +1,25 @@
+//===========================================
+// Lumina-desktop source code
+// Copyright (c) 2018, Ken Moore
+// Available under the 3-clause BSD license
+// See the LICENSE file for full details
+//===========================================
+import QtQuick 2.2
+import QtQuick.Controls 1
+
+import Lumina.Backend.RootDesktopObject 2.0
+import Lumina.Backend.OSInterface 2.0
+
+ToolButton{
+ property OSInterface os: RootObject.os_interface()
+ id: "volButton"
+ iconName: os.volumeIcon
+ tooltip: os.volume+"%"
+ visible: os.volumeSupported()
+ enabled: os.hasAudioMixer()
+ //Simple launch of mixer at the moment - make this popup a menu later
+ onClicked: {
+ RootObject.launchApplication( os.audioMixerShortcut() )
+ }
+
+}
diff --git a/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/src-qml.pri b/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/src-qml.pri
index ad07902a..fa29aa96 100644
--- a/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/src-qml.pri
+++ b/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/src-qml.pri
@@ -3,7 +3,9 @@ lupdate_only{
SOURCES *= $${PWD}/RootDesktop.qml \
$${PWD}/ContextMenu.qml \
$${PWD}/Screen.qml \
- $${PWD}/Panel.qml
+ $${PWD}/Panel.qml \
+ $${PWD}/NativeWindow.qml
}
+include(plugins/plugins.pri)
RESOURCES *= $${PWD}/src-qml.qrc
diff --git a/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/src-qml.qrc b/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/src-qml.qrc
index b0c66e20..0513e467 100644
--- a/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/src-qml.qrc
+++ b/src-qt5/core/lumina-desktop-unified/src-desktop/src-qml/src-qml.qrc
@@ -4,5 +4,14 @@
<file>ContextMenu.qml</file>
<file>Screen.qml</file>
<file>Panel.qml</file>
+ <file>NativeWindow.qml</file>
+ <file>plugins/StatusTray.qml</file>
+ <file>plugins/status_tray/TrayIcon.qml</file>
+ <file>plugins/status_tray/VolumeButton.qml</file>
+ <file>plugins/status_tray/NetworkButton.qml</file>
+ <file>plugins/status_tray/BatteryButton.qml</file>
+ <file>plugins/status_tray/UpdateButton.qml</file>
+ <file>plugins/Clock_Digital.qml</file>
+ <file>plugins/Spacer.qml</file>
</qresource>
</RCC>
diff --git a/src-qt5/core/lumina-desktop-unified/src-desktop/ContextMenu.cpp b/src-qt5/core/lumina-desktop-unified/src-desktop/src-widgets/ContextMenu.cpp
index 47f0e3d7..139eee89 100644
--- a/src-qt5/core/lumina-desktop-unified/src-desktop/ContextMenu.cpp
+++ b/src-qt5/core/lumina-desktop-unified/src-desktop/src-widgets/ContextMenu.cpp
@@ -7,6 +7,7 @@
#include "ContextMenu.h"
#include <global-objects.h>
#include <JsonMenu.h>
+#include <LIconCache.h>
void DesktopContextMenu::SettingsChanged(DesktopSettings::File file){
if(file == DesktopSettings::ContextMenu){ UpdateMenu(false); }
@@ -78,11 +79,11 @@ void DesktopContextMenu::UpdateMenu(bool fast){
}
// === PRIVATE ===
-void DesktopContextMenu::AddWindowToMenu(NativeWindow *win){
- QString label = win->property(NativeWindow::ShortTitle).toString();
- if(label.isEmpty()){ label = win->property(NativeWindow::Title).toString(); }
- if(label.isEmpty()){ label = win->property(NativeWindow::Name).toString(); }
- QAction *tmp = winMenu->addAction( win->property(NativeWindow::Icon).value<QIcon>(), label, win, SLOT(toggleVisibility()) );
+void DesktopContextMenu::AddWindowToMenu(NativeWindowObject *win){
+ QString label = win->property(NativeWindowObject::ShortTitle).toString();
+ if(label.isEmpty()){ label = win->property(NativeWindowObject::Title).toString(); }
+ if(label.isEmpty()){ label = win->property(NativeWindowObject::Name).toString(); }
+ QAction *tmp = winMenu->addAction( win->property(NativeWindowObject::Icon).value<QIcon>(), label, win, SLOT(toggleVisibility()) );
//Need to change the visual somehow to indicate whether it is visible or not
//bool visible = win->property(NativeWindow::Visible).toBool();
// TODO
@@ -176,14 +177,8 @@ void DesktopContextMenu::updateWinMenu(){
LIconCache::instance()->loadIcon( winMenu, "preferences-system-windows");
}
winMenu->clear();
- QList<NativeWindow*> wins = Lumina::NWS->currentWindows();
- unsigned int wkspace = Lumina::NWS->currentWorkspace();
+ QList<NativeWindowObject*> wins = RootDesktopObject::instance()->windowObjects();
for(int i=0; i<wins.length(); i++){
- //First check if this window is in the current workspace (or is "sticky")
- if(wins.at(i)->property(NativeWindow::Workspace).toUInt() != wkspace
- && wins.at(i)->property(NativeWindow::States).value< QList<NativeWindow::State> >().contains(NativeWindow::S_STICKY) ){
- continue;
- }
AddWindowToMenu(wins.at(i));
}
}
diff --git a/src-qt5/core/lumina-desktop-unified/src-desktop/ContextMenu.h b/src-qt5/core/lumina-desktop-unified/src-desktop/src-widgets/ContextMenu.h
index 78756e8c..b20087ef 100644
--- a/src-qt5/core/lumina-desktop-unified/src-desktop/ContextMenu.h
+++ b/src-qt5/core/lumina-desktop-unified/src-desktop/src-widgets/ContextMenu.h
@@ -21,7 +21,7 @@ private:
QMenu *appMenu, *winMenu;
bool usewinmenu;
- void AddWindowToMenu(NativeWindow*);
+ void AddWindowToMenu(NativeWindowObject*);
public:
DesktopContextMenu(QWidget *parent = 0);
diff --git a/src-qt5/core/lumina-desktop-unified/src-desktop/src-widgets/NativeWindow.cpp b/src-qt5/core/lumina-desktop-unified/src-desktop/src-widgets/NativeWindow.cpp
new file mode 100644
index 00000000..24ad3fda
--- /dev/null
+++ b/src-qt5/core/lumina-desktop-unified/src-desktop/src-widgets/NativeWindow.cpp
@@ -0,0 +1,48 @@
+//===========================================
+// Lumina-desktop source code
+// Copyright (c) 2018, Ken Moore
+// Available under the 3-clause BSD license
+// See the LICENSE file for full details
+//===========================================
+#include "NativeWindow.h"
+
+// === PUBLIC ===
+NativeWindow::NativeWindow( NativeWindowObject *obj ) : QFrame(0, Qt::Window | Qt::FramelessWindowHint){
+ WIN = obj;
+ createFrame();
+}
+
+NativeWindow::~NativeWindow(){
+
+}
+
+// === PRIVATE ===
+void NativeWindow::createFrame(){
+ //Initialize the widgets
+ closeB = new QToolButton(this);
+ closeB->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
+ minB = new QToolButton(this);
+ minB->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
+ maxB = new QToolButton(this);
+ maxB->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
+ otherB = new QToolButton(this);
+ otherB->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
+ toolbarL = new QHBoxLayout(this);
+ vlayout = new QVBoxLayout(this);
+ vlayout.align
+ titleLabel = new QLabel(this);
+ titleLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
+ //Now put the widgets in the right places
+ toolbarL->addWidget(otherB);
+ toolbarL->addWidget(titleLabel);
+ toolbarL->addWidget(minB);
+ toolbarL->addWidget(maxB);
+ toolbarL->addWidget(closeB);
+ vlayout->addLayout(toolbarL);
+ vlayout->addStretch();
+ this->setLayout(vlayout);
+
+ //
+}
+
+// === PRIVATE SLOTS ===
diff --git a/src-qt5/core/lumina-desktop-unified/src-desktop/src-widgets/NativeWindow.h b/src-qt5/core/lumina-desktop-unified/src-desktop/src-widgets/NativeWindow.h
new file mode 100644
index 00000000..ffdb364a
--- /dev/null
+++ b/src-qt5/core/lumina-desktop-unified/src-desktop/src-widgets/NativeWindow.h
@@ -0,0 +1,34 @@
+//===========================================
+// Lumina-desktop source code
+// Copyright (c) 2018, Ken Moore
+// Available under the 3-clause BSD license
+// See the LICENSE file for full details
+//===========================================
+#ifndef _LUMINA_DESKTOP_NATIVE_WINDOW_WIDGET_H
+#define _LUMINA_DESKTOP_NATIVE_WINDOW_WIDGET_H
+
+#include <global-includes.h>
+
+class NativeWindow : public QFrame{
+ Q_OBJECT
+public:
+ NativeWindow(NativeWindowObject *obj);
+ ~NativeWindow();
+
+private:
+ //Core object
+ NativeWindowObject *WIN;
+ // Interface items
+ void createFrame();
+ QToolButton *closeB, *minB, *maxB, *otherB;
+ QHBoxLayout *toolbarL;
+ QVBoxLayout *vlayout;
+ QLabel *titleLabel;
+ // Info cache variables
+ QRect oldgeom;
+
+private slots:
+
+};
+
+#endif
diff --git a/src-qt5/core/lumina-desktop-unified/src-desktop/src-widgets/RootDesktop.cpp b/src-qt5/core/lumina-desktop-unified/src-desktop/src-widgets/RootDesktop.cpp
new file mode 100644
index 00000000..9e22a143
--- /dev/null
+++ b/src-qt5/core/lumina-desktop-unified/src-desktop/src-widgets/RootDesktop.cpp
@@ -0,0 +1,120 @@
+//===========================================
+// Lumina-desktop source code
+// Copyright (c) 2018, Ken Moore
+// Available under the 3-clause BSD license
+// See the LICENSE file for full details
+//===========================================
+#include <global-objects.h>
+#include "RootDesktop.h"
+
+// === PUBLIC ===
+RootDesktop::RootDesktop(QWindow *) : QWidget(0, Qt::Widget | Qt::FramelessWindowHint | Qt::WindowStaysOnBottomHint){
+
+}
+
+RootDesktop::~RootDesktop(){
+
+}
+
+void RootDesktop::start(){
+ //qDebug() << "Starting RootDesktop" << this->geometry() << this->isVisible();
+ bgTimer = new QTimer(this);
+ bgTimer->setInterval(50);
+ bgTimer->setSingleShot(true);
+ connect(bgTimer, SIGNAL(timeout()), this, SLOT(bgTimerUpdate()) );
+
+ cmenu = new DesktopContextMenu(this);
+
+ //Setup the connections to the main objects
+ connect(RootDesktopObject::instance(), SIGNAL(screensChanged()), this, SLOT(on_screensChanged()) );
+ connect(RootDesktopObject::instance(), SIGNAL(panelsChanged()), this, SLOT(on_panelsChanged()) );
+ connect(RootDesktopObject::instance(), SIGNAL(windowsChanged()), this, SLOT(on_windowsChanged()) );
+ connect(RootDesktopObject::instance(), SIGNAL(trayWindowsChanged()), this, SLOT(on_trayWindowsChanged()) );
+
+ connect(cmenu, SIGNAL(LockSession()), RootDesktopObject::instance(), SIGNAL(lockScreen()) );
+ connect(cmenu, SIGNAL(showLeaveDialog()), RootDesktopObject::instance(), SIGNAL(startLogout()) );
+ connect(cmenu, SIGNAL(LaunchStandardApplication(QString)), RootDesktopObject::instance(), SIGNAL(launchApplication(QString)) );
+ connect(cmenu, SIGNAL(LaunchApplication(QString)), RootDesktopObject::instance(), SIGNAL(launchApplication(QString)) );
+
+ on_screensChanged(); //make sure this is setup right away (sets up connections
+ QTimer::singleShot(0, this, SLOT(on_panelsChanged()) );
+ QTimer::singleShot(2, this, SLOT(on_windowsChanged()) );
+ QTimer::singleShot(4, this, SLOT(on_trayWindowsChanged()) );
+
+ //Now start the first-run of the background change system
+ cmenu->start();
+ bgTimer->start();
+ this->show();
+}
+
+// === PRIVATE ===
+//QImage bgimage;
+
+
+// === PRIVATE SLOTS ===
+//RootDesktopObject connections
+void RootDesktop::on_screensChanged(){
+ QStringList screens = RootDesktopObject::instance()->screens();
+ //qDebug() << "Screens Changed:" << lastscreens << screens;
+ for(int i=0; i<screens.length(); i++){
+ if(!lastscreens.contains(screens[i])){
+ connect(RootDesktopObject::instance()->screen(screens[i]), SIGNAL(backgroundChanged()), this, SLOT(on_screen_bg_changed()) );
+ }
+ }
+ on_screen_bg_changed(); //start the timer to update the backgrounds now
+ lastscreens = screens; //save this for later
+}
+
+void RootDesktop::on_panelsChanged(){
+
+}
+
+void RootDesktop::on_windowsChanged(){
+
+}
+
+void RootDesktop::on_trayWindowsChanged(){
+
+}
+
+void RootDesktop::on_screen_bg_changed(){
+ if(!bgTimer->isActive()){ bgTimer->start(); }
+}
+
+//Internal use
+void RootDesktop::bgTimerUpdate(){
+ //qDebug() << "bgTimerUpdate";
+ //QtConcurrent::run(this, &RootDesktop::updateBG, this);
+ updateBG(this);
+}
+
+void RootDesktop::updateBG(RootDesktop* obj){
+
+ QImage tmp(obj->size(), QImage::Format_ARGB32_Premultiplied);
+ QStringList scr = RootDesktopObject::instance()->screens();
+ //qDebug() << "updateBG" << scr << tmp.size() << obj->geometry();
+ QPainter imgpaint(&tmp);
+ for(int i=0; i<scr.length(); i++){
+ ScreenObject * screen = RootDesktopObject::instance()->screen(scr[i]);
+ QString file = screen->background(); //in URL format
+ //qDebug() << "Got BG File:" << file << QUrl(file).toLocalFile();
+ QImage img(QUrl(file).toLocalFile());
+ //qDebug() << " - BG File is null:" << img.isNull();
+ imgpaint.drawImage(screen->geometry(), img, QRect(0,0,img.width(), img.height()) );
+ }
+ bgimage = tmp;
+ //QTimer::singleShot(0, obj, SLOT(update()) );
+ obj->update();
+}
+
+// === PROTECTED ===
+void RootDesktop::paintEvent(QPaintEvent *ev){
+ //qDebug() << "Paint Event:" << bgimage.isNull();
+ if (!bgimage.isNull()) {
+ //qDebug() << "Wallpaper paint Event:" << ev->rect();
+ QPainter painter(this);
+ painter.drawImage(ev->rect(), bgimage, ev->rect());
+ }else{
+ QWidget::paintEvent(ev);
+ }
+}
diff --git a/src-qt5/core/lumina-desktop-unified/src-desktop/src-widgets/RootDesktop.h b/src-qt5/core/lumina-desktop-unified/src-desktop/src-widgets/RootDesktop.h
new file mode 100644
index 00000000..16ce0e47
--- /dev/null
+++ b/src-qt5/core/lumina-desktop-unified/src-desktop/src-widgets/RootDesktop.h
@@ -0,0 +1,44 @@
+//===========================================
+// Lumina-desktop source code
+// Copyright (c) 2018, Ken Moore
+// Available under the 3-clause BSD license
+// See the LICENSE file for full details
+//===========================================
+#ifndef _LUMINA_DESKTOP_WIDGETS_ROOT_DESKTOP_H
+#define _LUMINA_DESKTOP_WIDGETS_ROOT_DESKTOP_H
+
+#include <global-includes.h>
+#include "ContextMenu.h"
+
+class RootDesktop : public QWidget{
+ Q_OBJECT
+public:
+ RootDesktop(QWindow *root);
+ ~RootDesktop();
+
+ void start();
+
+private:
+ QImage bgimage;
+ QStringList lastscreens;
+ QTimer *bgTimer;
+ DesktopContextMenu *cmenu;
+
+private slots:
+ //RootDesktopObject connections
+ void on_screensChanged();
+ void on_panelsChanged();
+ void on_windowsChanged();
+ void on_trayWindowsChanged();
+ void on_screen_bg_changed();
+
+ //Internal use
+ void bgTimerUpdate();
+ void updateBG(RootDesktop* obj); //designed to be run in a background thread
+
+protected:
+ virtual void paintEvent(QPaintEvent *ev);
+
+};
+
+#endif
diff --git a/src-qt5/core/lumina-desktop-unified/src-desktop/src-widgets/src-widgets.pri b/src-qt5/core/lumina-desktop-unified/src-desktop/src-widgets/src-widgets.pri
new file mode 100644
index 00000000..7994bb93
--- /dev/null
+++ b/src-qt5/core/lumina-desktop-unified/src-desktop/src-widgets/src-widgets.pri
@@ -0,0 +1,8 @@
+#update the includepath so we can just #include as needed without paths
+INCLUDEPATH *= $${PWD}
+
+SOURCES *= $${PWD}/RootDesktop.cpp \
+ $${PWD}/ContextMenu.cpp
+
+HEADERS *= $${PWD}/RootDesktop.h \
+ $${PWD}/ContextMenu.h
diff --git a/src-qt5/core/lumina-desktop-unified/src-events/LShortcutEvents.h b/src-qt5/core/lumina-desktop-unified/src-events/LShortcutEvents.h
index 4560cb1f..8017060f 100644
--- a/src-qt5/core/lumina-desktop-unified/src-events/LShortcutEvents.h
+++ b/src-qt5/core/lumina-desktop-unified/src-events/LShortcutEvents.h
@@ -10,7 +10,8 @@
#ifndef _LUMINA_KEY_SEQUENCE_DETECTION_H
#define _LUMINA_KEY_SEQUENCE_DETECTION_H
-#include "../global-includes.h"
+#include <global-includes.h>
+#include "NativeWindowSystem.h"
class LShortcutEvents : public QObject{
Q_OBJECT
diff --git a/src-qt5/core/lumina-desktop-unified/src-events/NativeEventFilter.cpp b/src-qt5/core/lumina-desktop-unified/src-events/NativeEventFilter.cpp
new file mode 100644
index 00000000..507bcb9a
--- /dev/null
+++ b/src-qt5/core/lumina-desktop-unified/src-events/NativeEventFilter.cpp
@@ -0,0 +1,303 @@
+//===========================================
+// Lumina-desktop source code
+// Copyright (c) 2015-2017, Ken Moore
+// Available under the 3-clause BSD license
+// See the LICENSE file for full details
+//===========================================
+#include "NativeEventFilter.h"
+#include <QCoreApplication>
+#include <QDebug>
+
+//#include <xcb/xcb_aux.h>
+//#include <xcb/damage.h>
+
+//==================================================
+// NOTE: All the XCB interactions and atoms are accessed via:
+// obj->XCB->EWMH.(atom name)
+// obj->XCB->(do something)
+//==================================================
+
+/*
+List of XCB response types (since almost impossible to find good docs on XCB)
+switch (xcb_generic_event_t*->response_type & ~0x80)
+case values:
+XCB_KEY_[PRESS | RELEASE]
+XCB_BUTTON_[PRESS | RELEASE]
+XCB_MOTION_NOTIFY
+XCB_ENTER_NOTIFY
+XCB_LEAVE_NOTIFY
+XCB_FOCUS_[IN | OUT]
+XCB_KEYMAP_NOTIFY
+XCB_EXPOSE
+XCB_GRAPHICS_EXPOSURE
+XCB_VISIBILITY_NOTIFY
+XCB_CREATE_NOTIFY
+XCB_DESTROY_NOTIFY
+XCB_UNMAP_NOTIFY
+XCB_MAP_[NOTIFY | REQUEST]
+XCB_REPARENT_NOTIFY
+XCB_CONFIGURE_[NOTIFY | REQUEST]
+XCB_GRAVITY_NOTIFY
+XCB_RESIZE_REQUEST
+XCB_CIRCULATE_[NOTIFY | REQUEST]
+XCB_PROPERTY_NOTIFY
+XCB_SELECTION_[CLEAR | REQUEST | NOTIFY]
+XCB_COLORMAP_NOTIFY
+XCB_CLIENT_MESSAGE
+*/
+
+//SYSTEM TRAY STANDARD DEFINITIONS
+#define SYSTEM_TRAY_REQUEST_DOCK 0
+#define SYSTEM_TRAY_BEGIN_MESSAGE 1
+#define SYSTEM_TRAY_CANCEL_MESSAGE 2
+
+//#include <LuminaX11.h>
+#include <QX11Info>
+#include <xcb/xcb_ewmh.h>
+#include <xcb/xcb_keysyms.h>
+#include <xcb/damage.h>
+
+#define DEBUG 0
+
+//Special objects/variables for XCB parsing
+static xcb_ewmh_connection_t EWMH;
+//static LXCB *XCB = 0;
+static xcb_atom_t _NET_SYSTEM_TRAY_OPCODE = 0;
+
+inline void ParsePropertyEvent(xcb_property_notify_event_t *ev, NativeEventFilter *obj){
+ //qDebug() << "Got Property Event:" << ev->window << ev->atom;
+ NativeWindowObject::Property prop = NativeWindowObject::None;
+ //Now determine which properties are getting changed, and update the native window as appropriate
+ if(ev->atom == EWMH._NET_WM_NAME){ prop = NativeWindowObject::Title; }
+ else if(ev->atom == EWMH._NET_WM_ICON){ prop = NativeWindowObject::Icon; }
+ else if(ev->atom == EWMH._NET_WM_ICON_NAME){ prop = NativeWindowObject::ShortTitle; }
+ else if(ev->atom == EWMH._NET_WM_DESKTOP){ prop = NativeWindowObject::Workspace; }
+ else if(ev->atom == EWMH._NET_WM_WINDOW_TYPE ){ prop = NativeWindowObject::WinTypes; }
+ else if( ev->atom == EWMH._NET_WM_STATE){ prop = NativeWindowObject::States; }
+ //Send out the signal if necessary
+ if(prop!=NativeWindowObject::None){
+ //if(DEBUG){
+ //qDebug() << "Detected Property Change:" << ev->window << prop;
+ //}
+ obj->emit WindowPropertyChanged(ev->window, prop);
+ }else{
+ //Quick re-check of the simple properties (nothing like the icon or other graphics)
+ obj->emit WindowPropertiesChanged(ev->window, QList<NativeWindowObject::Property>() << NativeWindowObject::Title
+ << NativeWindowObject::ShortTitle << NativeWindowObject::Workspace );
+ //qDebug() << "Unknown Property Change:" << ev->window << ev->atom;
+ }
+}
+
+inline void ParseClientMessageEvent(xcb_client_message_event_t *ev, NativeEventFilter *obj){
+ NativeWindowObject::Property prop = NativeWindowObject::None;
+ QVariant val;
+ if(ev->type==EWMH._NET_WM_NAME){ prop = NativeWindowObject::Title; }
+ else if(ev->type==EWMH._NET_WM_ICON){ prop = NativeWindowObject::Icon; }
+ else if(ev->type==EWMH._NET_WM_ICON_NAME){ prop = NativeWindowObject::ShortTitle; }
+ else if(ev->type==EWMH._NET_WM_DESKTOP){
+ prop = NativeWindowObject::Workspace;
+ val = QVariant( (int) ev->data.data32[0] );
+ }else if(ev->type==EWMH._NET_WM_WINDOW_TYPE){ prop = NativeWindowObject::WinTypes; }
+ else if(ev->type==EWMH._NET_WM_STATE){ prop = NativeWindowObject::States; }
+
+ if(prop!=NativeWindowObject::None){
+ if(DEBUG){ qDebug() << "Detected Property Change Request:" << ev->window << prop << val; }
+ if(val.isNull()){ obj->emit WindowPropertyChanged(ev->window, prop); }
+ else{ obj->emit RequestWindowPropertyChange(ev->window, prop, val); }
+ }else{
+ //Quick re-check of the simple properties (nothing like the icon or other graphics)
+ obj->emit WindowPropertiesChanged(ev->window, QList<NativeWindowObject::Property>() << NativeWindowObject::Title
+ << NativeWindowObject::ShortTitle << NativeWindowObject::Workspace );
+ }
+
+}
+
+
+//Constructor for the Event Filter wrapper
+NativeEventFilter::NativeEventFilter() : QObject(){
+ EF = new EventFilter(this);
+ if(EWMH.nb_screens <=0){
+ xcb_intern_atom_cookie_t *cookie = xcb_ewmh_init_atoms(QX11Info::connection(), &EWMH);
+ if(!xcb_ewmh_init_atoms_replies(&EWMH, cookie, NULL) ){
+ qDebug() << "Error with XCB atom initializations";
+ }
+ }
+ if(_NET_SYSTEM_TRAY_OPCODE==0){
+ //_NET_SYSTEM_TRAY_OPCODE
+ xcb_intern_atom_cookie_t cookie = xcb_intern_atom(QX11Info::connection(), 0, 23,"_NET_SYSTEM_TRAY_OPCODE");
+ xcb_intern_atom_reply_t *r = xcb_intern_atom_reply(QX11Info::connection(), cookie, NULL);
+ if(r){
+ _NET_SYSTEM_TRAY_OPCODE = r->atom;
+ free(r);
+ }
+ }
+}
+
+void NativeEventFilter::start(){
+ if(DEBUG){ qDebug() << " - Install event filter..."; }
+ QCoreApplication::instance()->installNativeEventFilter(EF);
+ if(DEBUG){ qDebug() << " - Run request check..."; }
+
+}
+
+void NativeEventFilter::stop(){
+ QCoreApplication::instance()->installNativeEventFilter(0);
+}
+
+//=============================
+// EventFilter Class
+//=============================
+
+//Constructor for the XCB event filter
+EventFilter::EventFilter(NativeEventFilter *parent) : QAbstractNativeEventFilter(){
+ obj = parent;
+}
+
+//This function format taken directly from the Qt5.3 documentation
+bool EventFilter::nativeEventFilter(const QByteArray &eventType, void *message, long *){
+ //qDebug() << "New Event";
+ if(eventType=="xcb_generic_event_t"){
+ //Convert to known event type (for X11 systems)
+ xcb_generic_event_t *ev = static_cast<xcb_generic_event_t *>(message);
+ //Now parse the event and emit signals as necessary
+ switch( ev->response_type & ~0x80){
+//==============================
+// INTERACTIVITY EVENTS
+//==============================
+ case XCB_KEY_PRESS:
+ //This is a keyboard key press
+ //qDebug() << "Key Press Event"
+ obj->emit KeyPressed( ((xcb_key_press_event_t *) ev)->detail, ((xcb_key_press_event_t *) ev)->root );
+ break;
+ case XCB_KEY_RELEASE:
+ //This is a keyboard key release
+ //qDebug() << "Key Release Event";
+ obj->emit KeyReleased( ((xcb_key_release_event_t *) ev)->detail, ((xcb_key_release_event_t *) ev)->root );
+ break;
+ case XCB_BUTTON_PRESS:
+ //This is a mouse button press
+ //qDebug() << "Button Press Event";
+ obj->emit MousePressed( ((xcb_button_press_event_t *) ev)->detail, ((xcb_button_press_event_t *) ev)->root );
+ break;
+ case XCB_BUTTON_RELEASE:
+ //This is a mouse button release
+ //qDebug() << "Button Release Event";
+ obj->emit MouseReleased( ((xcb_button_release_event_t *) ev)->detail, ((xcb_button_release_event_t *) ev)->root );
+ break;
+ case XCB_MOTION_NOTIFY:
+ //This is a mouse movement event
+ if(DEBUG){ qDebug() << "Motion Notify Event"; }
+ obj->emit MouseMovement();
+ break;
+ case XCB_ENTER_NOTIFY:
+ //This is a mouse movement event when mouse goes over a new window
+ //qDebug() << "Enter Notify Event";
+ obj->emit MouseEnterWindow( ((xcb_enter_notify_event_t *) ev)->root );
+ break;
+ case XCB_LEAVE_NOTIFY:
+ //This is a mouse movement event when mouse goes leaves a window
+ //qDebug() << "Leave Notify Event";
+ obj->emit MouseLeaveWindow( ((xcb_leave_notify_event_t *) ev)->root );
+ break;
+//==============================
+ case XCB_EXPOSE:
+ //qDebug() << "Expose Notify Event:";
+ //qDebug() << " - Given Window:" << ((xcb_property_notify_event_t*)ev)->window;
+ break;
+//==============================
+ case XCB_MAP_NOTIFY:
+ //qDebug() << "Window Map Event:" << ((xcb_map_notify_event_t *)ev)->window;
+ obj->emit WindowPropertyChanged( ((xcb_map_notify_event_t *)ev)->window, NativeWindowObject::Visible, true);
+ break; //This is just a notification that a window was mapped - nothing needs to change here
+ case XCB_MAP_REQUEST:
+ //qDebug() << "Window Map Request Event";
+ obj->emit WindowCreated( ((xcb_map_request_event_t *) ev)->window );
+ break;
+//==============================
+ case XCB_CREATE_NOTIFY:
+ //qDebug() << "Window Create Event";
+ break;
+//==============================
+ case XCB_UNMAP_NOTIFY:
+ //qDebug() << "Window Unmap Event:" << ((xcb_unmap_notify_event_t *)ev)->window;
+ obj->emit WindowPropertyChanged( ((xcb_map_notify_event_t *)ev)->window, NativeWindowObject::Visible, false);
+ break;
+//==============================
+ case XCB_DESTROY_NOTIFY:
+ //qDebug() << "Window Closed Event:" << ((xcb_destroy_notify_event_t *)ev)->window;
+ obj->emit WindowDestroyed( ((xcb_destroy_notify_event_t *) ev)->window );
+ break;
+//==============================
+ case XCB_FOCUS_IN:
+ //qDebug() << "Focus In Event:";
+ break;
+//==============================
+ case XCB_FOCUS_OUT:
+ //qDebug() << "Focus Out Event:";
+ break;
+//==============================
+ case XCB_PROPERTY_NOTIFY:
+ //qDebug() << "Property Notify Event:";
+ ParsePropertyEvent((xcb_property_notify_event_t*)ev, obj);
+ break;
+//==============================
+ case XCB_CLIENT_MESSAGE:
+ //qDebug() << "Client Message Event";
+ //qDebug() << " - Given Window:" << ((xcb_client_message_event_t*)ev)->window;
+ if( ((xcb_client_message_event_t*)ev)->type == _NET_SYSTEM_TRAY_OPCODE && ((xcb_client_message_event_t*)ev)->format == 32){
+ //data32[0] is timestamp, [1] is opcode, [2] is window handle
+ if(SYSTEM_TRAY_REQUEST_DOCK == ((xcb_client_message_event_t*)ev)->data.data32[1]){
+ obj->emit TrayWindowCreated( ((xcb_client_message_event_t*)ev)->data.data32[2] );
+ //addTrayApp( ((xcb_client_message_event_t*)ev)->data.data32[2] );
+ }
+ //Ignore the System Tray messages at the moment
+ }else if(((xcb_client_message_event_t*)ev)->window != QX11Info::appRootWindow()){
+ ParseClientMessageEvent((xcb_client_message_event_t*)ev, obj);
+ }
+ break;
+//==============================
+ case XCB_CONFIGURE_NOTIFY:
+ //qDebug() << "Configure Notify Event";
+ /*obj->emit WindowPropertiesChanged( ((xcb_configure_notify_event_t*)ev)->window,
+ QList<NativeWindowObject::Property>() << NativeWindowObject::GlobalPos << NativeWindowObject::Size,
+ QList<QVariant>() << QPoint(((xcb_configure_notify_event_t*)ev)->x, ((xcb_configure_notify_event_t*)ev)->y) <<
+ QSize(((xcb_configure_notify_event_t*)ev)->width, ((xcb_configure_notify_event_t*)ev)->height) );*/
+ obj->emit WindowPropertyChanged( ((xcb_configure_notify_event_t*)ev)->window, NativeWindowObject::Size,
+ QSize(((xcb_configure_notify_event_t*)ev)->width, ((xcb_configure_notify_event_t*)ev)->height) );
+ break;
+//==============================
+ case XCB_CONFIGURE_REQUEST:
+ //qDebug() << "Configure Request Event";
+ obj->emit RequestWindowPropertiesChange( ((xcb_configure_request_event_t*)ev)->window,
+ QList<NativeWindowObject::Property>() << NativeWindowObject::GlobalPos << NativeWindowObject::Size,
+ QList<QVariant>() << QPoint(((xcb_configure_request_event_t*)ev)->x, ((xcb_configure_request_event_t*)ev)->y) <<
+ QSize(((xcb_configure_request_event_t*)ev)->width, ((xcb_configure_request_event_t*)ev)->height) );
+ break;
+//==============================
+ case XCB_RESIZE_REQUEST:
+ //qDebug() << "Resize Request Event";
+ obj->emit RequestWindowPropertyChange( ((xcb_resize_request_event_t*)ev)->window,
+ NativeWindowObject::Size, QSize(((xcb_resize_request_event_t*)ev)->width, ((xcb_resize_request_event_t*)ev)->height) );
+ break;
+//==============================
+ case XCB_SELECTION_CLEAR:
+ //qDebug() << "Selection Clear Event";
+ break;
+//==============================
+ case 85: //not sure what event this is - but it seems to come up very often (just hide the notice)
+ case 0:
+ case XCB_GE_GENERIC:
+ break; //generic event - don't do anything special
+ default:
+ //if( (ev->response_type & ~0x80)==TrayDmgID){
+ obj->emit PossibleDamageEvent( ((xcb_damage_notify_event_t*)ev)->drawable );
+ //checkDamageID( ((xcb_damage_notify_event_t*)ev)->drawable );
+ //}else{
+ //qDebug() << "Default Event:" << (ev->response_type & ~0x80);
+ //}
+//==============================
+ }
+ }
+ return false;
+ //never stop event handling (this will not impact the X events themselves - just the internal Qt application)
+}
diff --git a/src-qt5/core/lumina-desktop-unified/src-events/NativeEventFilter.h b/src-qt5/core/lumina-desktop-unified/src-events/NativeEventFilter.h
new file mode 100644
index 00000000..e4500cac
--- /dev/null
+++ b/src-qt5/core/lumina-desktop-unified/src-events/NativeEventFilter.h
@@ -0,0 +1,71 @@
+//===========================================
+// Lumina-DE source code
+// Copyright (c) 2012-2017, Ken Moore
+// Available under the 3-clause BSD license
+// See the LICENSE file for full details
+//===========================================
+// This class provides the XCB event handling/registrations that are needed
+//===========================================
+#ifndef _LUMINA_DESKTOP_NATIVE_EVENT_FILTER_H
+#define _LUMINA_DESKTOP_NATIVE_EVENT_FILTER_H
+
+#include <QAbstractNativeEventFilter>
+#include <QObject>
+#include <QByteArray>
+
+#include <NativeWindowObject.h>
+
+
+class NativeEventFilter : public QObject{
+ Q_OBJECT
+private:
+ QAbstractNativeEventFilter* EF;
+ WId WMFlag; //used to flag a running WM process
+
+public:
+ NativeEventFilter();
+ ~NativeEventFilter(){}
+
+ void start();
+ void stop();
+
+signals:
+ //Window Signals
+ void WindowCreated(WId);
+ void WindowDestroyed(WId);
+ void WindowPropertyChanged(WId, NativeWindowObject::Property);
+ void WindowPropertiesChanged(WId, QList<NativeWindowObject::Property>);
+ void WindowPropertyChanged(WId, NativeWindowObject::Property, QVariant);
+ void WindowPropertiesChanged(WId, QList<NativeWindowObject::Property>, QList<QVariant>);
+ void RequestWindowPropertyChange(WId, NativeWindowObject::Property, QVariant);
+ void RequestWindowPropertiesChange(WId, QList<NativeWindowObject::Property>, QList<QVariant>);
+
+ //System Tray Signals
+ void TrayWindowCreated(WId);
+ void TrayWindowDestroyed(WId);
+
+ //Miscellaneos Signals
+ void PossibleDamageEvent(WId);
+
+ //Input Event Signals
+ void KeyPressed(int, WId);
+ void KeyReleased(int, WId);
+ void MousePressed(int, WId);
+ void MouseReleased(int, WId);
+ void MouseMovement();
+ void MouseEnterWindow(WId);
+ void MouseLeaveWindow(WId);
+};
+
+class EventFilter : public QAbstractNativeEventFilter{
+public:
+ EventFilter(NativeEventFilter *parent);
+ ~EventFilter(){}
+
+ virtual bool nativeEventFilter(const QByteArray &eventType, void *message, long *);
+
+private:
+ NativeEventFilter *obj;
+};
+
+#endif
diff --git a/src-qt5/core/lumina-desktop-unified/src-events/NativeKeyToQt.cpp b/src-qt5/core/lumina-desktop-unified/src-events/NativeKeyToQt.cpp
new file mode 100644
index 00000000..9b639496
--- /dev/null
+++ b/src-qt5/core/lumina-desktop-unified/src-events/NativeKeyToQt.cpp
@@ -0,0 +1,528 @@
+
+#include "NativeWindowSystem.h"
+
+#include <QKeySequence>
+#include <QX11Info>
+
+// XCB/X11 Includes
+#define XK_MISCELLANY
+#define XK_XKB_KEYS
+#define XK_LATIN1
+#define XK_LATIN2
+#define XK_LATIN3
+#define XK_LATIN4
+#define XK_LATIN8
+#define XK_LATIN9
+//NOTE: Look at the keysymdef.h file for additional define/characters which we may need later
+#include <X11/keysymdef.h>
+#include <xcb/xcb_keysyms.h>
+
+
+//Small simplification functions
+Qt::Key NativeWindowSystem::KeycodeToQt(int keycode){
+ static xcb_key_symbols_t *SYM = 0;
+ if(SYM==0){ SYM = xcb_key_symbols_alloc(QX11Info::connection()); }
+ xcb_keysym_t symbol = xcb_key_symbols_get_keysym(SYM, keycode,0);
+ //not sure about the "column" input - we want raw keys though so ignore the "modified" key states (columns) for now
+ //qDebug() << "Try to convert keycode to Qt::Key:" << keycode << symbol;
+ //Now map this symbol to the appropriate Qt::Key enumeration
+ switch(symbol){
+ //FUNCTION KEYS
+ case XK_F1: return Qt::Key_F1;
+ case XK_F2: return Qt::Key_F2;
+ case XK_F3: return Qt::Key_F3;
+ case XK_F4: return Qt::Key_F4;
+ case XK_F5: return Qt::Key_F5;
+ case XK_F6: return Qt::Key_F6;
+ case XK_F7: return Qt::Key_F7;
+ case XK_F8: return Qt::Key_F8;
+ case XK_F9: return Qt::Key_F9;
+ case XK_F10: return Qt::Key_F10;
+ case XK_F11: return Qt::Key_F11;
+ case XK_F12: return Qt::Key_F12;
+ case XK_F13: return Qt::Key_F13;
+ case XK_F14: return Qt::Key_F14;
+ case XK_F15: return Qt::Key_F15;
+ case XK_F16: return Qt::Key_F16;
+ case XK_F17: return Qt::Key_F17;
+ case XK_F18: return Qt::Key_F18;
+ case XK_F19: return Qt::Key_F19;
+ case XK_F20: return Qt::Key_F20;
+ case XK_F21: return Qt::Key_F21;
+ case XK_F22: return Qt::Key_F22;
+ case XK_F23: return Qt::Key_F23;
+ case XK_F24: return Qt::Key_F24;
+ case XK_F25: return Qt::Key_F25;
+ case XK_F26: return Qt::Key_F26;
+ case XK_F27: return Qt::Key_F27;
+ case XK_F28: return Qt::Key_F28;
+ case XK_F29: return Qt::Key_F29;
+ case XK_F30: return Qt::Key_F30;
+ case XK_F31: return Qt::Key_F31;
+ case XK_F32: return Qt::Key_F32;
+ case XK_F33: return Qt::Key_F33;
+ case XK_F34: return Qt::Key_F34;
+ case XK_F35: return Qt::Key_F35;
+ //Miscellaneous Keys
+ case XK_BackSpace: return Qt::Key_Backspace;
+ case XK_Delete: return Qt::Key_Delete;
+ //case XK_LineFeed: return Qt::Key_Backspace;
+ case XK_Clear: return Qt::Key_Clear;
+ case XK_Return: return Qt::Key_Return;
+ case XK_Pause: return Qt::Key_Pause;
+ case XK_Scroll_Lock: return Qt::Key_ScrollLock;
+ case XK_Sys_Req: return Qt::Key_SysReq;
+ case XK_Escape: return Qt::Key_Escape;
+ case XK_Select: return Qt::Key_Select;
+ case XK_Print: return Qt::Key_Print;
+ //case XK_Execute: return Qt::Key_Execute;
+ case XK_Insert: return Qt::Key_Insert;
+ case XK_Undo: return Qt::Key_Undo;
+ case XK_Redo: return Qt::Key_Redo;
+ case XK_Menu: return Qt::Key_Menu;
+ case XK_Find: return Qt::Key_Find;
+ case XK_Cancel: return Qt::Key_Cancel;
+ case XK_Help: return Qt::Key_Help;
+ //case XK_Break: return Qt::Key_Break;
+ //case XK_Mode_switch: return Qt::Key_Backspace;
+ //case XK_script_switch: return Qt::Key_Backspace;
+ case XK_Num_Lock: return Qt::Key_NumLock;
+ //Cursor Controls
+ case XK_Home: return Qt::Key_Home;
+ case XK_Left: return Qt::Key_Left;
+ case XK_Up: return Qt::Key_Up;
+ case XK_Right: return Qt::Key_Right;
+ case XK_Down: return Qt::Key_Down;
+ //case XK_Prior: return Qt::Key_Backspace;
+ case XK_Page_Up: return Qt::Key_PageUp;
+ case XK_Page_Down: return Qt::Key_PageDown;
+ //case XK_Next: return Qt::Key_Backspace;
+ case XK_End: return Qt::Key_End;
+ //case XK_Begin: return Qt::Key_Backspace;
+ // Keypad Functions and numbers
+ case XK_KP_Space: return Qt::Key_Space;
+ case XK_KP_Tab: return Qt::Key_Tab;
+ case XK_KP_Enter: return Qt::Key_Enter;
+ case XK_KP_F1: return Qt::Key_F1;
+ case XK_KP_F2: return Qt::Key_F2;
+ case XK_KP_F3: return Qt::Key_F3;
+ case XK_KP_F4: return Qt::Key_F4;
+ case XK_KP_Home: return Qt::Key_Home;
+ case XK_KP_Left: return Qt::Key_Left;
+ case XK_KP_Up: return Qt::Key_Up;
+ case XK_KP_Right: return Qt::Key_Right;
+ case XK_KP_Down: return Qt::Key_Down;
+ //case XK_KP_Prior: return Qt::Key_
+ case XK_KP_Page_Up: return Qt::Key_PageUp;
+ //case XK_KP_Next: return Qt::Key_
+ case XK_KP_Page_Down: return Qt::Key_PageDown;
+ case XK_KP_End: return Qt::Key_End;
+ //case XK_KP_Begin: return Qt::Key_
+ case XK_KP_Insert: return Qt::Key_Insert;
+ case XK_KP_Delete: return Qt::Key_Delete;
+ case XK_KP_Equal: return Qt::Key_Equal;
+ case XK_KP_Multiply: return Qt::Key_Asterisk;
+ case XK_KP_Add: return Qt::Key_Plus;
+ case XK_KP_Separator: return Qt::Key_Comma; //X11 definitions say this is often comma
+ case XK_KP_Subtract: return Qt::Key_Minus;
+ case XK_KP_Decimal: return Qt::Key_Period;
+ case XK_KP_Divide: return Qt::Key_Slash;
+ case XK_KP_0: return Qt::Key_0;
+ case XK_KP_1: return Qt::Key_1;
+ case XK_KP_2: return Qt::Key_2;
+ case XK_KP_3: return Qt::Key_3;
+ case XK_KP_4: return Qt::Key_4;
+ case XK_KP_5: return Qt::Key_5;
+ case XK_KP_6: return Qt::Key_6;
+ case XK_KP_7: return Qt::Key_7;
+ case XK_KP_8: return Qt::Key_8;
+ case XK_KP_9: return Qt::Key_9;
+ // Modifier Keys
+ case XK_Shift_L: return Qt::Key_Shift;
+ case XK_Shift_R: return Qt::Key_Shift;
+ case XK_Control_L: return Qt::Key_Control;
+ case XK_Control_R: return Qt::Key_Control;
+ case XK_Caps_Lock: return Qt::Key_CapsLock;
+ //case XK_Shift_Lock: return Qt::Key_ShiftLock;
+ case XK_Meta_L: return Qt::Key_Meta;
+ case XK_Meta_R: return Qt::Key_Meta;
+ case XK_Alt_L: return Qt::Key_Alt;
+ case XK_Alt_R: return Qt::Key_Alt;
+ case XK_Super_L: return Qt::Key_Super_L;
+ case XK_Super_R: return Qt::Key_Super_R;
+ case XK_Hyper_L: return Qt::Key_Hyper_L;
+ case XK_Hyper_R: return Qt::Key_Hyper_R;
+ case XK_space: return Qt::Key_Space;
+ case XK_exclam: return Qt::Key_Exclam;
+ case XK_quotedbl: return Qt::Key_QuoteDbl;
+ case XK_numbersign: return Qt::Key_NumberSign;
+ case XK_dollar: return Qt::Key_Dollar;
+ case XK_percent: return Qt::Key_Percent;
+ case XK_ampersand: return Qt::Key_Ampersand;
+ case XK_apostrophe: return Qt::Key_Apostrophe;
+ case XK_parenleft: return Qt::Key_ParenLeft;
+ case XK_parenright: return Qt::Key_ParenRight;
+ case XK_asterisk: return Qt::Key_Asterisk;
+ case XK_plus: return Qt::Key_Plus;
+ case XK_comma: return Qt::Key_Comma;
+ case XK_minus: return Qt::Key_Minus;
+ case XK_period: return Qt::Key_Period;
+ case XK_slash: return Qt::Key_Slash;
+ case XK_0: return Qt::Key_0;
+ case XK_1: return Qt::Key_1;
+ case XK_2: return Qt::Key_2;
+ case XK_3: return Qt::Key_3;
+ case XK_4: return Qt::Key_4;
+ case XK_5: return Qt::Key_5;
+ case XK_6: return Qt::Key_6;
+ case XK_7: return Qt::Key_7;
+ case XK_8: return Qt::Key_8;
+ case XK_9: return Qt::Key_9;
+ case XK_colon: return Qt::Key_Colon;
+ case XK_semicolon: return Qt::Key_Semicolon;
+ case XK_less: return Qt::Key_Less;
+ case XK_equal: return Qt::Key_Equal;
+ case XK_greater: return Qt::Key_Greater;
+ case XK_question: return Qt::Key_Question;
+ case XK_at: return Qt::Key_At;
+ case XK_A: return Qt::Key_A;
+ case XK_B: return Qt::Key_B;
+ case XK_C: return Qt::Key_C;
+ case XK_D: return Qt::Key_D;
+ case XK_E: return Qt::Key_E;
+ case XK_F: return Qt::Key_F;
+ case XK_G: return Qt::Key_G;
+ case XK_H: return Qt::Key_H;
+ case XK_I: return Qt::Key_I;
+ case XK_J: return Qt::Key_J;
+ case XK_K: return Qt::Key_K;
+ case XK_L: return Qt::Key_L;
+ case XK_M: return Qt::Key_M;
+ case XK_N: return Qt::Key_N;
+ case XK_O: return Qt::Key_O;
+ case XK_P: return Qt::Key_P;
+ case XK_Q: return Qt::Key_Q;
+ case XK_R: return Qt::Key_R;
+ case XK_S: return Qt::Key_S;
+ case XK_T: return Qt::Key_T;
+ case XK_U: return Qt::Key_U;
+ case XK_V: return Qt::Key_V;
+ case XK_W: return Qt::Key_W;
+ case XK_X: return Qt::Key_X;
+ case XK_Y : return Qt::Key_Y;
+ case XK_Z: return Qt::Key_Z;
+ case XK_bracketleft: return Qt::Key_BracketLeft;
+ case XK_backslash: return Qt::Key_Backslash;
+ case XK_bracketright: return Qt::Key_BracketRight;
+ case XK_asciicircum: return Qt::Key_AsciiCircum;
+ case XK_underscore: return Qt::Key_Underscore;
+ case XK_grave: return Qt::Key_Agrave;
+ case XK_a: return Qt::Key_A;
+ case XK_b: return Qt::Key_B;
+ case XK_c: return Qt::Key_C;
+ case XK_d: return Qt::Key_D;
+ case XK_e: return Qt::Key_E;
+ case XK_f : return Qt::Key_F;
+ case XK_g: return Qt::Key_G;
+ case XK_h: return Qt::Key_H;
+ case XK_i: return Qt::Key_I;
+ case XK_j: return Qt::Key_J;
+ case XK_k: return Qt::Key_K;
+ case XK_l: return Qt::Key_L;
+ case XK_m: return Qt::Key_M;
+ case XK_n: return Qt::Key_N;
+ case XK_o: return Qt::Key_O;
+ case XK_p: return Qt::Key_P;
+ case XK_q: return Qt::Key_Q;
+ case XK_r: return Qt::Key_R;
+ case XK_s: return Qt::Key_S;
+ case XK_t : return Qt::Key_T;
+ case XK_u: return Qt::Key_U;
+ case XK_v: return Qt::Key_V;
+ case XK_w: return Qt::Key_W;
+ case XK_x: return Qt::Key_X;
+ case XK_y: return Qt::Key_Y;
+ case XK_z: return Qt::Key_Z;
+ case XK_braceleft: return Qt::Key_BraceLeft;
+ case XK_bar: return Qt::Key_Bar;
+ case XK_braceright: return Qt::Key_BraceRight;
+ case XK_asciitilde: return Qt::Key_AsciiTilde;
+
+ case XK_nobreakspace: return Qt::Key_nobreakspace;
+ case XK_exclamdown: return Qt::Key_exclamdown;
+ case XK_cent: return Qt::Key_cent;
+ case XK_sterling: return Qt::Key_sterling;
+ case XK_currency: return Qt::Key_currency;
+ case XK_yen: return Qt::Key_yen;
+ case XK_brokenbar: return Qt::Key_brokenbar;
+ case XK_section: return Qt::Key_section;
+ case XK_diaeresis: return Qt::Key_diaeresis;
+ case XK_copyright: return Qt::Key_copyright;
+ case XK_ordfeminine: return Qt::Key_ordfeminine;
+ case XK_guillemotleft: return Qt::Key_guillemotleft;
+ case XK_notsign: return Qt::Key_notsign;
+ case XK_hyphen: return Qt::Key_hyphen;
+ case XK_registered: return Qt::Key_registered;
+ case XK_macron: return Qt::Key_macron;
+ case XK_degree: return Qt::Key_degree;
+ case XK_plusminus: return Qt::Key_plusminus;
+ case XK_twosuperior: return Qt::Key_twosuperior;
+ case XK_threesuperior: return Qt::Key_threesuperior;
+ case XK_acute: return Qt::Key_acute;
+ case XK_mu: return Qt::Key_mu;
+ case XK_paragraph: return Qt::Key_paragraph;
+ case XK_periodcentered: return Qt::Key_periodcentered;
+ case XK_cedilla: return Qt::Key_cedilla;
+ case XK_onesuperior: return Qt::Key_onesuperior;
+ case XK_masculine: return Qt::Key_masculine;
+ case XK_guillemotright: return Qt::Key_guillemotright;
+ case XK_onequarter: return Qt::Key_onequarter;
+ case XK_onehalf: return Qt::Key_onehalf;
+ case XK_threequarters: return Qt::Key_threequarters;
+ case XK_questiondown: return Qt::Key_questiondown;
+ case XK_Agrave: return Qt::Key_Agrave;
+ case XK_Aacute: return Qt::Key_Aacute;
+ case XK_Acircumflex: return Qt::Key_Acircumflex;
+ case XK_Atilde: return Qt::Key_Atilde;
+ case XK_Adiaeresis: return Qt::Key_Adiaeresis;
+ case XK_Aring: return Qt::Key_Aring;
+ case XK_AE: return Qt::Key_AE;
+ case XK_Ccedilla: return Qt::Key_Ccedilla;
+ case XK_Egrave: return Qt::Key_Egrave;
+ case XK_Eacute: return Qt::Key_Eacute;
+ case XK_Ecircumflex: return Qt::Key_Ecircumflex;
+ case XK_Ediaeresis: return Qt::Key_Ediaeresis;
+ case XK_Igrave: return Qt::Key_Igrave;
+ case XK_Iacute: return Qt::Key_Iacute;
+ case XK_Icircumflex: return Qt::Key_Icircumflex;
+ case XK_Idiaeresis: return Qt::Key_Idiaeresis;
+ case XK_ETH: return Qt::Key_ETH;
+ //case XK_Eth: return Qt::Key_Eth;
+ case XK_Ntilde: return Qt::Key_Ntilde;
+ case XK_Ograve: return Qt::Key_Ograve;
+ case XK_Oacute: return Qt::Key_Oacute;
+ case XK_Ocircumflex: return Qt::Key_Ocircumflex;
+ case XK_Otilde: return Qt::Key_Otilde;
+ case XK_Odiaeresis: return Qt::Key_Odiaeresis;
+ case XK_multiply: return Qt::Key_multiply;
+ //case XK_Oslash: return Qt::Key_AsciiTilde;
+ case XK_Ooblique: return Qt::Key_Ooblique;
+ case XK_Ugrave: return Qt::Key_Ugrave;
+ case XK_Uacute: return Qt::Key_Uacute;
+ case XK_Ucircumflex: return Qt::Key_Ucircumflex;
+ case XK_Udiaeresis: return Qt::Key_Udiaeresis;
+ case XK_Yacute: return Qt::Key_Yacute;
+ case XK_THORN: return Qt::Key_THORN;
+ //case XK_Thorn: return Qt::Key_AsciiTilde;
+ case XK_ssharp: return Qt::Key_ssharp;
+ /*case XK_agrave: return Qt::Key_AsciiTilde;
+ case XK_aacute: return Qt::Key_AsciiTilde;
+ case XK_acircumflex: return Qt::Key_AsciiTilde;
+ case XK_atilde: return Qt::Key_AsciiTilde;
+ case XK_adiaeresis: return Qt::Key_AsciiTilde;
+ case XK_aring: return Qt::Key_AsciiTilde;
+ case XK_ae: return Qt::Key_AsciiTilde;
+ case XK_ccedilla: return Qt::Key_AsciiTilde;
+ case XK_egrave: return Qt::Key_AsciiTilde;
+ case XK_eacute: return Qt::Key_AsciiTilde;
+ case XK_ecircumflex: return Qt::Key_AsciiTilde;
+ case XK_ediaeresis: return Qt::Key_AsciiTilde;
+ case XK_igrave: return Qt::Key_AsciiTilde;
+ case XK_iacute: return Qt::Key_AsciiTilde;
+ case XK_icircumflex: return Qt::Key_AsciiTilde;
+ case XK_idiaeresis: return Qt::Key_AsciiTilde;
+ case XK_eth: return Qt::Key_AsciiTilde;
+ case XK_ntilde: return Qt::Key_AsciiTilde;
+ case XK_ograve: return Qt::Key_AsciiTilde;
+ case XK_oacute: return Qt::Key_AsciiTilde;
+ case XK_ocircumflex: return Qt::Key_AsciiTilde;
+ case XK_otilde: return Qt::Key_AsciiTilde;
+ case XK_odiaeresis: return Qt::Key_AsciiTilde;
+ case XK_division: return Qt::Key_AsciiTilde;
+ case XK_oslash: return Qt::Key_AsciiTilde;
+ case XK_ooblique: return Qt::Key_AsciiTilde;
+ case XK_ugrave: return Qt::Key_AsciiTilde;
+ case XK_uacute: return Qt::Key_AsciiTilde;
+ case XK_ucircumflex: return Qt::Key_AsciiTilde;
+ case XK_udiaeresis: return Qt::Key_AsciiTilde;
+ case XK_yacute: return Qt::Key_AsciiTilde;
+ case XK_thorn: return Qt::Key_AsciiTilde;
+ case XK_ydiaeresis: return Qt::Key_AsciiTilde;
+
+ case: XK_Agonek: return Qt::Key_AsciiTilde;
+ case XK_breve: return Qt::Key_AsciiTilde;
+ case XK_Lstroke: return Qt::Key_AsciiTilde;
+ case XK_Lcaron: return Qt::Key_AsciiTilde;
+ case XK_Sacute: return Qt::Key_AsciiTilde;
+ case XK_Scaron: return Qt::Key_AsciiTilde;
+ case XK_Scedilla: return Qt::Key_AsciiTilde;
+ case XK_Tcaron: return Qt::Key_AsciiTilde;
+ case XK_Zacute: return Qt::Key_AsciiTilde;
+ case XK_Zcaron: return Qt::Key_AsciiTilde;
+ case XK_Zabovedot: return Qt::Key_AsciiTilde;
+ case XK_aogonek: return Qt::Key_AsciiTilde;
+ case XK_ogonek: return Qt::Key_AsciiTilde;
+ case XK_lstroke: return Qt::Key_AsciiTilde;
+ case XK_lcaron: return Qt::Key_AsciiTilde;
+ case XK_sacute: return Qt::Key_AsciiTilde;
+ case XK_caron: return Qt::Key_AsciiTilde;
+ case XK_scaron: return Qt::Key_AsciiTilde;
+ case XK_scedilla: return Qt::Key_AsciiTilde;
+ case XK_tcaron: return Qt::Key_AsciiTilde;
+ case XK_zacute: return Qt::Key_AsciiTilde;
+ case XK_doubleacute: return Qt::Key_AsciiTilde;
+ case XK_zcaron: return Qt::Key_AsciiTilde;
+ case XK_zabovedot: return Qt::Key_AsciiTilde;
+ case XK_Racute: return Qt::Key_AsciiTilde;
+ case XK_Abreve: return Qt::Key_AsciiTilde;
+ case XK_Lacute: return Qt::Key_AsciiTilde;
+ case XK_Cacute: return Qt::Key_AsciiTilde;
+ case XK_Ccaron: return Qt::Key_AsciiTilde;
+ case XK_Eogonek: return Qt::Key_AsciiTilde;
+ case XK_Ecaron: return Qt::Key_AsciiTilde;
+ case XK_Dcaron: return Qt::Key_AsciiTilde;
+ case XK_Dstroke: return Qt::Key_AsciiTilde;
+ case XK_Nacute: return Qt::Key_AsciiTilde;
+ case XK_Ncaron: return Qt::Key_AsciiTilde;
+ case XK_Odoubleacute: return Qt::Key_AsciiTilde;
+ case XK_Rcaron: return Qt::Key_AsciiTilde;
+ case XK_Uring: return Qt::Key_AsciiTilde;
+ case XK_Udoubleacute: return Qt::Key_AsciiTilde;
+ case XK_Tcedilla: return Qt::Key_AsciiTilde;
+ case XK_racute: return Qt::Key_AsciiTilde;
+ case XK_abreve: return Qt::Key_AsciiTilde;
+ case XK_lacute: return Qt::Key_AsciiTilde;
+ case XK_cacute: return Qt::Key_AsciiTilde;
+ case XK_ccaron: return Qt::Key_AsciiTilde;
+ case XK_eogonek: return Qt::Key_AsciiTilde;
+ case XK_ecaron: return Qt::Key_AsciiTilde;
+ case XK_dcaron: return Qt::Key_AsciiTilde;
+ case XK_dstroke: return Qt::Key_AsciiTilde;
+ case XK_nacute: return Qt::Key_AsciiTilde;
+ case XK_ncaron: return Qt::Key_AsciiTilde;
+ case XK_odoubleacute: return Qt::Key_AsciiTilde;
+ case XK_rcaron: return Qt::Key_AsciiTilde;
+ case XK_uring: return Qt::Key_AsciiTilde;
+ case XK_udoubleacute: return Qt::Key_AsciiTilde;
+ case XK_tcedilla: return Qt::Key_AsciiTilde;
+ case XK_abovedot: return Qt::Key_AsciiTilde;
+ case XK_Hstroke: return Qt::Key_AsciiTilde;
+ case XK_Hcircumflex: return Qt::Key_AsciiTilde;
+ case XK_Iabovedot: return Qt::Key_AsciiTilde;
+ case XK_Gbreve: return Qt::Key_AsciiTilde;
+ case XK_Jcircumflex: return Qt::Key_AsciiTilde;
+ case XK_hstroke: return Qt::Key_AsciiTilde;
+ case XK_hcircumflex: return Qt::Key_AsciiTilde;
+ case XK_idotless: return Qt::Key_AsciiTilde;
+ case XK_gbreve: return Qt::Key_AsciiTilde;
+ case XK_jcircumflex: return Qt::Key_AsciiTilde;
+ case XK_Cabovedot: return Qt::Key_AsciiTilde;
+ case XK_Ccircumflex: return Qt::Key_AsciiTilde;
+ case XK_Gabovedot: return Qt::Key_AsciiTilde;
+ case XK_Gcircumflex: return Qt::Key_AsciiTilde;
+ case XK_Ubreve: return Qt::Key_AsciiTilde;
+ case XK_Scircumflex: return Qt::Key_AsciiTilde;
+ case XK_cabovedot: return Qt::Key_AsciiTilde;
+ case XK_ccircumflex: return Qt::Key_AsciiTilde;
+ case XK_gabovedot: return Qt::Key_AsciiTilde;
+ case XK_gcircumflex: return Qt::Key_AsciiTilde;
+ case XK_ubreve: return Qt::Key_AsciiTilde;
+ case XK_scircumflex: return Qt::Key_AsciiTilde;
+ case XK_kra: return Qt::Key_AsciiTilde;
+ case XK_kappa: return Qt::Key_AsciiTilde;
+ case XK_Rcedilla: return Qt::Key_AsciiTilde;
+ case XK_Itilde: return Qt::Key_AsciiTilde;
+ case XK_Lcedilla: return Qt::Key_AsciiTilde;
+ case XK_Emacron: return Qt::Key_AsciiTilde;
+ case XK_Gcedilla: return Qt::Key_AsciiTilde;
+ case XK_Tslash: return Qt::Key_AsciiTilde;
+ case XK_rcedilla: return Qt::Key_AsciiTilde;
+ case XK_itilde: return Qt::Key_AsciiTilde;
+ case XK_lcedilla: return Qt::Key_AsciiTilde;
+ case XK_emacron: return Qt::Key_AsciiTilde;
+ case XK_gcedilla: return Qt::Key_AsciiTilde;
+ case XK_tslash: return Qt::Key_AsciiTilde;
+ case XK_ENG: return Qt::Key_AsciiTilde;
+ case XK_eng: return Qt::Key_AsciiTilde;
+ case XK_Amacron: return Qt::Key_AsciiTilde;
+ case XK_Iogonek: return Qt::Key_AsciiTilde;
+ case XK_Eabovedot: return Qt::Key_AsciiTilde;
+ case XK_Imacron: return Qt::Key_AsciiTilde;
+ case XK_Ncedilla: return Qt::Key_AsciiTilde;
+ case XK_Omacron: return Qt::Key_AsciiTilde;
+ case XK_Kcedilla: return Qt::Key_AsciiTilde;
+ case XK_Uogonek: return Qt::Key_AsciiTilde;
+ case XK_Utilde: return Qt::Key_AsciiTilde;
+ case XK_Umacron: return Qt::Key_AsciiTilde;
+ case XK_amacron: return Qt::Key_AsciiTilde;
+ case XK_iogonek: return Qt::Key_AsciiTilde;
+ case XK_eabovedot: return Qt::Key_AsciiTilde;
+ case XK_imacron: return Qt::Key_AsciiTilde;
+ case XK_ncedilla: return Qt::Key_AsciiTilde;
+ case XK_omacron: return Qt::Key_AsciiTilde;
+ case XK_kcedilla: return Qt::Key_AsciiTilde;
+ case XK_uogonek: return Qt::Key_AsciiTilde;
+ case XK_utilde: return Qt::Key_AsciiTilde;
+ case XK_umacron: return Qt::Key_AsciiTilde;
+ case XK_Wcircumflex: return Qt::Key_AsciiTilde;
+ case XK_wcircumflex: return Qt::Key_AsciiTilde;
+ case XK_Ycircumflex: return Qt::Key_AsciiTilde;
+ case XK_ycircumflex: return Qt::Key_AsciiTilde;
+ case XK_Babovedot: return Qt::Key_AsciiTilde;
+ case XK_babovedot: return Qt::Key_AsciiTilde;
+ case XK_Dabovedot: return Qt::Key_AsciiTilde;
+ case XK_dabovedot: return Qt::Key_AsciiTilde;
+ case XK_Fabovedot: return Qt::Key_AsciiTilde;
+ case XK_fabovedot: return Qt::Key_AsciiTilde;
+ case XK_Mabovedot: return Qt::Key_AsciiTilde;
+ case XK_mabovedot: return Qt::Key_AsciiTilde;
+ case XK_Pabovedot: return Qt::Key_AsciiTilde;
+ case XK_pabovedot: return Qt::Key_AsciiTilde;
+ case XK_Sabovedot: return Qt::Key_AsciiTilde;
+ case XK_sabovedot: return Qt::Key_AsciiTilde;
+ case XK_Tabovedot: return Qt::Key_AsciiTilde;
+ case XK_tabovedot: return Qt::Key_AsciiTilde;
+ case XK_Wgrave: return Qt::Key_AsciiTilde;
+ case XK_wgrave: return Qt::Key_AsciiTilde;
+ case XK_Wacute: return Qt::Key_AsciiTilde;
+ case XK_wacute: return Qt::Key_AsciiTilde;
+ case XK_Wdiaeresis: return Qt::Key_AsciiTilde;
+ case XK_wdiaeresis: return Qt::Key_AsciiTilde;
+ case XK_Ygrave: return Qt::Key_AsciiTilde;
+ case XK_ygrave: return Qt::Key_AsciiTilde;
+ case XK_OE: return Qt::Key_AsciiTilde;
+ case XK_oe: return Qt::Key_AsciiTilde;
+ case XK_Ydiaeresis: return Qt::Key_AsciiTilde;*/
+ default:
+ qDebug() << "Unknown Key";
+ }
+ qDebug() << " -- Simple Qt Map:" << (Qt::Key)(symbol);
+ qDebug() << " -- Key Sequence Map:" << QKeySequence(symbol);
+ qDebug() << " - Not implemented yet";
+ return Qt::Key_unknown;
+}
+
+NativeWindowSystem::MouseButton NativeWindowSystem::MouseToQt(int keycode){
+ switch(keycode){
+ case 1:
+ return NativeWindowSystem::LeftButton;
+ case 3:
+ return NativeWindowSystem::RightButton;
+ case 2:
+ return NativeWindowSystem::MidButton;
+ case 4:
+ return NativeWindowSystem::WheelUp;
+ case 5:
+ return NativeWindowSystem::WheelDown;
+ case 6:
+ return NativeWindowSystem::WheelLeft;
+ case 7:
+ return NativeWindowSystem::WheelRight;
+ case 8:
+ return NativeWindowSystem::BackButton; //Not sure if this is correct yet (1/27/17)
+ case 9:
+ return NativeWindowSystem::ForwardButton; //Not sure if this is correct yet (1/27/17)
+ default:
+ return NativeWindowSystem::NoButton;
+ }
+}
diff --git a/src-qt5/core/lumina-desktop-unified/src-events/NativeWindowSystem.cpp b/src-qt5/core/lumina-desktop-unified/src-events/NativeWindowSystem.cpp
new file mode 100644
index 00000000..b9c1b6ef
--- /dev/null
+++ b/src-qt5/core/lumina-desktop-unified/src-events/NativeWindowSystem.cpp
@@ -0,0 +1,1076 @@
+//===========================================
+// Lumina-DE source code
+// Copyright (c) 2017, Ken Moore
+// Available under the 3-clause BSD license
+// See the LICENSE file for full details
+//===========================================
+// This is the XCB version of the NativeWindowSystem class,
+// used for interacting with the X11 display system on BSD/Linux/Unix systems
+//===========================================
+#include "NativeWindowSystem.h"
+#include <global-objects.h>
+
+#define DISABLE_COMPOSITING 0
+
+//XCB Library includes
+#include <xcb/xcb.h>
+#include <xcb/xcb_atom.h>
+#include <xcb/xproto.h>
+#include <xcb/xcb_ewmh.h>
+#include <xcb/xcb_icccm.h>
+#include <xcb/xcb_image.h>
+#include <xcb/xcb_aux.h>
+#include <xcb/composite.h>
+#include <xcb/damage.h>
+
+//XLib includes (XCB Damage lib does not appear to register for damage events properly)
+#include <X11/extensions/Xdamage.h>
+
+//SYSTEM TRAY STANDARD DEFINITIONS
+#define _NET_SYSTEM_TRAY_ORIENTATION_HORZ 0
+#define _NET_SYSTEM_TRAY_ORIENTATION_VERT 1
+#define SYSTEM_TRAY_REQUEST_DOCK 0
+#define SYSTEM_TRAY_BEGIN_MESSAGE 1
+#define SYSTEM_TRAY_CANCEL_MESSAGE 2
+
+#define URGENCYHINT (1L << 8) //For window urgency detection
+
+#define ROOT_WIN_EVENT_MASK (XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT | \
+ XCB_EVENT_MASK_BUTTON_PRESS | \
+ XCB_EVENT_MASK_STRUCTURE_NOTIFY | \
+ XCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY | \
+ XCB_EVENT_MASK_POINTER_MOTION | \
+ XCB_EVENT_MASK_PROPERTY_CHANGE | \
+ XCB_EVENT_MASK_FOCUS_CHANGE | \
+ XCB_EVENT_MASK_ENTER_WINDOW)
+
+#define NORMAL_WIN_EVENT_MASK (XCB_EVENT_MASK_BUTTON_PRESS | \
+ XCB_EVENT_MASK_BUTTON_RELEASE | \
+ XCB_EVENT_MASK_POINTER_MOTION | \
+ XCB_EVENT_MASK_BUTTON_MOTION | \
+ XCB_EVENT_MASK_EXPOSURE | \
+ XCB_EVENT_MASK_STRUCTURE_NOTIFY | \
+ XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT | \
+ XCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY | \
+ XCB_EVENT_MASK_ENTER_WINDOW | \
+ XCB_EVENT_MASK_PROPERTY_CHANGE | \
+ XCB_EVENT_MASK_FOCUS_CHANGE)
+
+#define CLIENT_EVENT_MASK (XCB_EVENT_MASK_PROPERTY_CHANGE | \
+ XCB_EVENT_MASK_STRUCTURE_NOTIFY | \
+ XCB_EVENT_MASK_FOCUS_CHANGE | \
+ XCB_EVENT_MASK_POINTER_MOTION)
+
+#define FRAME_EVENT_MASK (XCB_EVENT_MASK_BUTTON_PRESS | \
+ XCB_EVENT_MASK_BUTTON_RELEASE | \
+ XCB_EVENT_MASK_POINTER_MOTION | \
+ XCB_EVENT_MASK_EXPOSURE | \
+ XCB_EVENT_MASK_STRUCTURE_NOTIFY | \
+ XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT | \
+ XCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY | \
+ XCB_EVENT_MASK_ENTER_WINDOW)
+
+inline void registerClientEvents(WId id, bool client = true){
+ uint32_t values[] = {XCB_NONE};
+ values[0] = client ? CLIENT_EVENT_MASK : FRAME_EVENT_MASK ;
+ /*{ (XCB_EVENT_MASK_PROPERTY_CHANGE
+ | XCB_EVENT_MASK_BUTTON_PRESS
+ | XCB_EVENT_MASK_BUTTON_RELEASE
+ | XCB_EVENT_MASK_POINTER_MOTION
+ | XCB_EVENT_MASK_BUTTON_MOTION
+ | XCB_EVENT_MASK_EXPOSURE
+ | XCB_EVENT_MASK_STRUCTURE_NOTIFY
+ | XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT
+ | XCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY
+ | XCB_EVENT_MASK_ENTER_WINDOW)
+ };*/
+ xcb_change_window_attributes(QX11Info::connection(), id, XCB_CW_EVENT_MASK, values);
+}
+
+/*inline void registerClientEvents(WId id){
+ uint32_t value_list[1] = {NORMAL_WIN_EVENT_MASK};
+ xcb_change_window_attributes(QX11Info::connection(), id, XCB_CW_EVENT_MASK, value_list);
+}*/
+
+//Internal XCB private objects class
+class NativeWindowSystem::p_objects{
+public:
+ xcb_ewmh_connection_t EWMH; //This is where all the screen info and atoms are located
+ QHash<QString, xcb_atom_t> ATOMS;
+ xcb_screen_t *root_screen;
+ xcb_window_t root_window, wm_window, tray_window;
+
+ //Functions for setting up these objects as needed
+ bool init_ATOMS(){
+ xcb_intern_atom_cookie_t *cookie = xcb_ewmh_init_atoms(QX11Info::connection(), &EWMH);
+ if(!xcb_ewmh_init_atoms_replies(&EWMH, cookie, NULL) ){
+ qDebug() << "Error with XCB atom initializations";
+ return false;
+ }
+
+ QStringList atoms;
+ atoms << "WM_TAKE_FOCUS" << "WM_DELETE_WINDOW" << "WM_PROTOCOLS" << "_NET_WM_WINDOW_OPACITY"
+ << "WM_CHANGE_STATE" << "_NET_SYSTEM_TRAY_OPCODE" << "_NET_SYSTEM_TRAY_ORIENTATION" << "_XEMBED"
+ << "_NET_SYSTEM_TRAY_VISUAL" << QString("_NET_SYSTEM_TRAY_S%1").arg(QString::number(QX11Info::appScreen()));
+ //Create all the requests for the atoms
+ QList<xcb_intern_atom_reply_t*> reply;
+ for(int i=0; i<atoms.length(); i++){
+ reply << xcb_intern_atom_reply(QX11Info::connection(), \
+ xcb_intern_atom(QX11Info::connection(), 0, atoms[i].length(), atoms[i].toLocal8Bit()), NULL);
+ }
+ //Now evaluate all the requests and save the atoms
+ for(int i=0; i<reply.length(); i++){ //NOTE: this will always be the same length as the "atoms" list
+ if(reply[i]!=0){
+ ATOMS.insert(atoms[i], reply[i]->atom);
+ free(reply[i]); //done with this reply
+ }else{
+ //Invalid atom - could not be created
+ qDebug() << "Could not initialize XCB atom:" << atoms[i];
+ }
+ } //loop over reply
+ return (ATOMS.keys().length() == atoms.length());
+ }
+
+ WId getTransientFor(WId win){
+ xcb_get_property_cookie_t cookie = xcb_icccm_get_wm_transient_for_unchecked(QX11Info::connection(), win);
+ xcb_window_t trans;
+ if(1!= xcb_icccm_get_wm_transient_for_reply(QX11Info::connection(), cookie, &trans, NULL) ){
+ return win; //error in fetching transient window ID (or none found)
+ }else{
+ return trans;
+ }
+}
+
+ bool register_wm(){
+ uint32_t value_list[1] = {ROOT_WIN_EVENT_MASK};
+ xcb_generic_error_t *status = xcb_request_check( QX11Info::connection(), xcb_change_window_attributes_checked(QX11Info::connection(), root_window, XCB_CW_EVENT_MASK, value_list));
+ if(status!=0){ return false; }
+ uint32_t params[] = {1};
+ wm_window = xcb_generate_id(QX11Info::connection()); //need a new ID
+ xcb_create_window(QX11Info::connection(), root_screen->root_depth, \
+ wm_window, root_window, -1, -1, 1, 1, 0, \
+ XCB_WINDOW_CLASS_INPUT_OUTPUT, root_screen->root_visual, \
+ XCB_CW_OVERRIDE_REDIRECT, params);
+ if(wm_window==0){ return false; }
+ //Set the _NET_SUPPORTING_WM property on the root window first
+ xcb_ewmh_set_supporting_wm_check(&EWMH, root_window, wm_window);
+ //Also set this property on the child window (pointing to itself)
+ xcb_ewmh_set_supporting_wm_check(&EWMH, wm_window, wm_window);
+ //Now also setup the root event mask on the wm_window
+ status = xcb_request_check( QX11Info::connection(), xcb_change_window_attributes_checked(QX11Info::connection(), wm_window, XCB_CW_EVENT_MASK, value_list));
+ if(status!=0){ return false; }
+ return true;
+ }
+
+ bool start_system_tray(){
+ xcb_atom_t _NET_SYSTEM_TRAY_S = ATOMS.value( QString("_NET_SYSTEM_TRAY_S%1").arg(QString::number(QX11Info::appScreen())) );
+ //Make sure that there is no other system tray running
+ xcb_get_selection_owner_reply_t *ownreply = xcb_get_selection_owner_reply(QX11Info::connection(), \
+ xcb_get_selection_owner_unchecked(QX11Info::connection(), _NET_SYSTEM_TRAY_S), NULL);
+ if(ownreply == 0){
+ qWarning() << " - Could not get owner selection reply";
+ return false;
+ }else if(ownreply->owner != 0){
+ free(ownreply);
+ qWarning() << " - An alternate system tray is currently in use";
+ return false;
+ }
+ free(ownreply);
+ //Now create the window to use (just offscreen)
+ tray_window = xcb_generate_id(QX11Info::connection()); //need a new ID
+ uint32_t params[] = {1};
+ xcb_create_window(QX11Info::connection(), root_screen->root_depth, \
+ tray_window, root_screen->root, -1, -1, 1, 1, 0, \
+ XCB_WINDOW_CLASS_INPUT_OUTPUT, root_screen->root_visual, \
+ XCB_CW_OVERRIDE_REDIRECT, params);
+ //Now register this widget as the system tray
+ xcb_set_selection_owner(QX11Info::connection(), tray_window, _NET_SYSTEM_TRAY_S, XCB_CURRENT_TIME);
+ //Make sure that it was registered properly
+ ownreply = xcb_get_selection_owner_reply(QX11Info::connection(), \
+ xcb_get_selection_owner_unchecked(QX11Info::connection(), _NET_SYSTEM_TRAY_S), NULL);
+ if(ownreply==0 || ownreply->owner != tray_window){
+ if(ownreply!=0){ free(ownreply); }
+ qWarning() << " - Could not register the system tray";
+ xcb_destroy_window(QX11Info::connection(), tray_window);
+ return false;
+ }
+ free(ownreply); //done with structure
+ //Now register the orientation of the system tray
+ uint32_t orient = _NET_SYSTEM_TRAY_ORIENTATION_HORZ;
+ xcb_change_property(QX11Info::connection(), XCB_PROP_MODE_REPLACE, tray_window, \
+ ATOMS.value("_NET_SYSTEM_TRAY_ORIENTATION"), XCB_ATOM_CARDINAL, 32, 1, &orient);
+
+ //Now set the visual ID for the system tray (same as the root window, but TrueColor)
+ xcb_visualtype_t *type = xcb_aux_find_visual_by_attrs(root_screen, XCB_VISUAL_CLASS_TRUE_COLOR, 32);
+ if(type!=0){
+ xcb_change_property(QX11Info::connection(), XCB_PROP_MODE_REPLACE, tray_window, \
+ ATOMS.value("_NET_SYSTEM_TRAY_VISUAL"), XCB_ATOM_VISUALID, 32, 1, &type->visual_id);
+ }else{
+ qWarning() << " - Could not set TrueColor visual for system tray";
+ }
+
+ //Finally, send out an X event letting others know that the system tray is up and running
+ xcb_client_message_event_t event;
+ event.response_type = XCB_CLIENT_MESSAGE;
+ event.format = 32;
+ event.window = root_screen->root;
+ event.type = EWMH.MANAGER; //MANAGER atom
+ event.data.data32[0] = XCB_TIME_CURRENT_TIME; //CurrentTime;
+ event.data.data32[1] = _NET_SYSTEM_TRAY_S; //_NET_SYSTEM_TRAY_S atom
+ event.data.data32[2] = tray_window;
+ event.data.data32[3] = 0;
+ event.data.data32[4] = 0;
+
+ xcb_send_event(QX11Info::connection(), 0, root_screen->root, XCB_EVENT_MASK_STRUCTURE_NOTIFY | XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT, (const char *) &event);
+ return true;
+ }
+
+}; //end private objects class
+
+
+//inline functions for setting up the internal objects
+
+
+// === PUBLIC ===
+NativeWindowSystem::NativeWindowSystem() : QObject(){
+ obj = 0;
+ pingTimer = 0;
+ screenLocked = false;
+}
+
+NativeWindowSystem::~NativeWindowSystem(){
+ xcb_ewmh_connection_wipe(&(obj->EWMH));
+ free(obj);
+}
+
+//Overarching start/stop functions
+bool NativeWindowSystem::start(){
+ //Initialize the XCB/EWMH objects
+ if(obj==0){
+ obj = new p_objects(); //instantiate the private objects
+ obj->wm_window = 0;
+ obj->tray_window = 0;
+ xcb_intern_atom_cookie_t *cookie = xcb_ewmh_init_atoms(QX11Info::connection(), &obj->EWMH);
+ if(!xcb_ewmh_init_atoms_replies(&obj->EWMH, cookie, NULL) ){
+ qDebug() << "Error with XCB atom initializations";
+ return false;
+ }
+ obj->root_screen = xcb_aux_get_screen(QX11Info::connection(), QX11Info::appScreen());
+ obj->root_window = obj->root_screen->root; //simplification for later - minor duplication of memory (unsigned int)
+ //Initialize all the extra atoms that the EWMH object does not have
+ if( !obj->init_ATOMS() ){ return false; }
+ } //Done with private object init
+ bool ok = obj->register_wm();
+ if(ok){
+ setRoot_supportedActions();
+ ok = obj->start_system_tray();
+ }else{
+ qWarning() << "Could not register the WM";
+ }
+ return ok;
+}
+
+void NativeWindowSystem::stop(){
+
+}
+
+void NativeWindowSystem::RegisterEventShortcut(Qt::Key key, bool set){
+//RegisterEventShortcut( , set);
+}
+
+void NativeWindowSystem::RegisterEventShortcut(int keycode, bool set){
+ //xcb_input_grab_device_button_checked
+ //xcb_input_xi_passive_grab_device_unchecked
+}
+
+// === PRIVATE ===
+NativeWindowObject* NativeWindowSystem::findWindow(WId id, bool checkRelated){
+ //qDebug() << "Find Window:" << id;
+ for(int i=0; i<NWindows.length(); i++){
+ if(id==NWindows[i]->id() ){ return NWindows[i]; }
+ else if(id==NWindows[i]->frameId() ){ return NWindows[i]; }
+ //if(checkRelated && NWindows[i]->isRelatedTo(id)){ return NWindows[i]; }
+ //else if(!checkRelated && id==NWindows[i]->id()){ return NWindows[i]; }
+ }
+ //Check to see if this is a transient for some other window
+ if(checkRelated){
+ //WId tid = obj->getTransientFor(id);
+ //if(tid!=id){ return findWindow(tid, checkRelated); } //call it recursively as needed
+ //qDebug() << " -- Could not find Window!";
+ }
+ return 0;
+}
+
+NativeWindowObject* NativeWindowSystem::findTrayWindow(WId id){
+ for(int i=0; i<TWindows.length(); i++){
+ if(TWindows[i]->id()==id){ return TWindows[i]; }
+ else if(TWindows[i]->isRelatedTo(id)){ return TWindows[i]; }
+ }
+ return 0;
+}
+
+void NativeWindowSystem::UpdateWindowProperties(NativeWindowObject* win, QList< NativeWindowObject::Property > props){
+ //Put the properties in logical groups as appropriate (some XCB calls return multiple properties)
+ if(props.contains(NativeWindowObject::Title)){
+ //Try the EWMH standards first
+ // _NET_WM_NAME
+ QString name;
+ xcb_get_property_cookie_t cookie = xcb_ewmh_get_wm_name_unchecked(&obj->EWMH, win->id());
+ if(cookie.sequence != 0){
+ xcb_ewmh_get_utf8_strings_reply_t data;
+ if( 1 == xcb_ewmh_get_wm_name_reply(&obj->EWMH, cookie, &data, NULL) ){
+ name = QString::fromUtf8(data.strings, data.strings_len);
+ }
+ }
+ if(name.isEmpty()){
+ //_NET_WM_VISIBLE_NAME
+ xcb_get_property_cookie_t cookie = xcb_ewmh_get_wm_visible_name_unchecked(&obj->EWMH, win->id());
+ if(cookie.sequence != 0){
+ xcb_ewmh_get_utf8_strings_reply_t data;
+ if( 1 == xcb_ewmh_get_wm_visible_name_reply(&obj->EWMH, cookie, &data, NULL) ){
+ name = QString::fromUtf8(data.strings, data.strings_len);
+ }
+ }
+ }
+ if(name.isEmpty()){
+ //Now try the ICCCM standard
+ xcb_get_property_cookie_t cookie = xcb_icccm_get_wm_name_unchecked(QX11Info::connection(), win->id());
+ xcb_icccm_get_text_property_reply_t reply;
+ if(1 == xcb_icccm_get_wm_name_reply(QX11Info::connection(), cookie, &reply, NULL) ){
+ name = QString::fromLocal8Bit(reply.name, reply.name_len);
+ xcb_icccm_get_text_property_reply_wipe(&reply);
+ }
+ }
+ win->setProperty(NativeWindowObject::Title, name);
+ } //end TITLE property
+
+ if(props.contains(NativeWindowObject::ShortTitle)){
+ //Try the EWMH standards first
+ // _NET_WM_ICON_NAME
+ QString name;
+ xcb_get_property_cookie_t cookie = xcb_ewmh_get_wm_icon_name_unchecked(&obj->EWMH, win->id());
+ if(cookie.sequence != 0){
+ xcb_ewmh_get_utf8_strings_reply_t data;
+ if( 1 == xcb_ewmh_get_wm_icon_name_reply(&obj->EWMH, cookie, &data, NULL) ){
+ name = QString::fromUtf8(data.strings, data.strings_len);
+ }
+ }
+ if(name.isEmpty()){
+ //_NET_WM_VISIBLE_ICON_NAME
+ xcb_get_property_cookie_t cookie = xcb_ewmh_get_wm_visible_icon_name_unchecked(&obj->EWMH, win->id());
+ if(cookie.sequence != 0){
+ xcb_ewmh_get_utf8_strings_reply_t data;
+ if( 1 == xcb_ewmh_get_wm_visible_icon_name_reply(&obj->EWMH, cookie, &data, NULL) ){
+ name = QString::fromUtf8(data.strings, data.strings_len);
+ }
+ }
+ }
+ if(name.isEmpty()){
+ //Now try the ICCCM standard
+ xcb_get_property_cookie_t cookie = xcb_icccm_get_wm_icon_name_unchecked(QX11Info::connection(), win->id());
+ xcb_icccm_get_text_property_reply_t reply;
+ if(1 == xcb_icccm_get_wm_icon_name_reply(QX11Info::connection(), cookie, &reply, NULL) ){
+ name = QString::fromLocal8Bit(reply.name, reply.name_len);
+ xcb_icccm_get_text_property_reply_wipe(&reply);
+ }
+ }
+ win->setProperty(NativeWindowObject::ShortTitle, name);
+ } //end SHORTTITLE property
+
+ if(props.contains(NativeWindowObject::Icon)){
+ //See if this is a tray icon first (different routine - entire app window is the icon)
+ QIcon icon;
+ if(win == findTrayWindow(win->id())){
+ //Tray Icon Window
+ QPixmap pix;
+ //Get the current QScreen (for XCB->Qt conversion)
+ QList<QScreen*> scrnlist = QApplication::screens();
+ //Try to grab the given window directly with Qt
+ for(int i=0; i<scrnlist.length() && pix.isNull(); i++){
+ pix = scrnlist[i]->grabWindow(win->id());
+ }
+ icon.addPixmap(pix);
+ }else{
+ //Standard window
+ //Fetch the _NET_WM_ICON for the window and return it as a QIcon
+ xcb_get_property_cookie_t cookie = xcb_ewmh_get_wm_icon_unchecked(&obj->EWMH, win->id());
+ xcb_ewmh_get_wm_icon_reply_t reply;
+ if(1 == xcb_ewmh_get_wm_icon_reply(&obj->EWMH, cookie, &reply, NULL)){
+ xcb_ewmh_wm_icon_iterator_t iter = xcb_ewmh_get_wm_icon_iterator(&reply);
+ //Just use the first
+ bool done =false;
+ while(!done){
+ //Now convert the current data into a Qt image
+ // - first 2 elements are width and height (removed via XCB functions)
+ // - data in rows from left to right and top to bottom
+ QImage image(iter.width, iter.height, QImage::Format_ARGB32); //initial setup
+ uint* dat = iter.data;
+ //dat+=2; //remember the first 2 element offset
+ for(int i=0; i<image.byteCount()/4; ++i, ++dat){
+ ((uint*)image.bits())[i] = *dat;
+ }
+ icon.addPixmap(QPixmap::fromImage(image)); //layer this pixmap onto the icon
+ //Now see if there are any more icons available
+ done = (iter.rem<1); //number of icons remaining
+ if(!done){ xcb_ewmh_get_wm_icon_next(&iter); } //get the next icon data
+ }
+ xcb_ewmh_get_wm_icon_reply_wipe(&reply);
+ }
+ } //end type of window
+ win->setProperty(NativeWindowObject::Icon, icon);
+ } //end ICON property
+
+ if(props.contains(NativeWindowObject::MinSize) || props.contains(NativeWindowObject::MaxSize)
+ || props.contains(NativeWindowObject::Size) || props.contains(NativeWindowObject::GlobalPos) ){
+ //Try the ICCCM "Normal Hints" structure first (newer spec?)
+ xcb_get_property_cookie_t cookie = xcb_icccm_get_wm_normal_hints_unchecked(QX11Info::connection(), win->id());
+ xcb_size_hints_t reply;
+ bool ok = false;
+ if(1==xcb_icccm_get_wm_normal_hints_reply(QX11Info::connection(), cookie, &reply, NULL) ){ ok = true; }
+ else{
+ //Could not find normal hints, try the older "size hints" instead
+ cookie = xcb_icccm_get_wm_size_hints_unchecked(QX11Info::connection(), win->id(), XCB_ATOM_WM_SIZE_HINTS);
+ if(1==xcb_icccm_get_wm_size_hints_reply(QX11Info::connection(), cookie, &reply, NULL) ){ ok = true; }
+ }
+ if(ok){
+ bool initsize = win->property(NativeWindowObject::Size).isNull(); //initial window size
+ if( (reply.flags&XCB_ICCCM_SIZE_HINT_US_POSITION)==XCB_ICCCM_SIZE_HINT_US_POSITION ){ win->setProperty(NativeWindowObject::GlobalPos, QPoint(reply.x,reply.y)); }
+ if( (reply.flags&XCB_ICCCM_SIZE_HINT_US_SIZE)==XCB_ICCCM_SIZE_HINT_US_SIZE ){ win->setProperty(NativeWindowObject::Size, QSize(reply.width, reply.height)); }
+ if( (reply.flags&XCB_ICCCM_SIZE_HINT_P_POSITION)==XCB_ICCCM_SIZE_HINT_P_POSITION ){ win->setProperty(NativeWindowObject::GlobalPos, QPoint(reply.x,reply.y)); }
+ if( (reply.flags&XCB_ICCCM_SIZE_HINT_P_SIZE)==XCB_ICCCM_SIZE_HINT_P_SIZE ){ win->setProperty(NativeWindowObject::Size, QSize(reply.width, reply.height)); }
+ if( (reply.flags&XCB_ICCCM_SIZE_HINT_P_MIN_SIZE)==XCB_ICCCM_SIZE_HINT_P_MIN_SIZE ){ win->setProperty(NativeWindowObject::MinSize, QSize(reply.min_width, reply.min_height)); }
+ if( (reply.flags&XCB_ICCCM_SIZE_HINT_P_MAX_SIZE)==XCB_ICCCM_SIZE_HINT_P_MAX_SIZE ){ win->setProperty(NativeWindowObject::MaxSize, QSize(reply.max_width, reply.max_height)); }
+ if( (reply.flags&XCB_ICCCM_SIZE_HINT_BASE_SIZE)==XCB_ICCCM_SIZE_HINT_BASE_SIZE && initsize ){ win->setProperty(NativeWindowObject::Size, QSize(reply.base_width, reply.base_height)); }
+ //if( (reply.flags&XCB_ICCCM_SIZE_HINT_P_RESIZE_INC)==XCB_ICCCM_SIZE_HINT_P_RESIZE_INC ){ hints.width_inc=reply.width_inc; hints.height_inc=reply.height_inc; }
+ //if( (reply.flags&XCB_ICCCM_SIZE_HINT_P_ASPECT)==XCB_ICCCM_SIZE_HINT_P_ASPECT ){ hints.min_aspect_num=reply.min_aspect_num; hints.min_aspect_den=reply.min_aspect_den; hints.max_aspect_num=reply.max_aspect_num; hints.max_aspect_den=reply.max_aspect_den;}
+ //if( (reply.flags&XCB_ICCCM_SIZE_HINT_P_WIN_GRAVITY)==XCB_ICCCM_SIZE_HINT_P_WIN_GRAVITY ){ hints.win_gravity=reply.win_gravity; }
+ }
+ } //end of geometry properties
+
+ if(props.contains(NativeWindowObject::Name)){
+ //Put the app/class name here (much more static than the "Title" properties
+ xcb_get_property_cookie_t cookie = xcb_icccm_get_wm_class_unchecked(QX11Info::connection(), win->id());
+ xcb_icccm_get_wm_class_reply_t reply;
+ if(1 == xcb_icccm_get_wm_class_reply(QX11Info::connection(), cookie, &reply, NULL) ){
+ //Returns: "<instance name>::::<class name>"
+ win->setProperty(NativeWindowObject::Name, ( QString::fromLocal8Bit(reply.instance_name)+"::::"+QString::fromLocal8Bit(reply.class_name) ));
+ xcb_icccm_get_wm_class_reply_wipe(&reply);
+ }
+ } //end NAME property
+
+ if(props.contains(NativeWindowObject::Workspace)){
+ xcb_get_property_cookie_t cookie = xcb_ewmh_get_wm_desktop_unchecked(&obj->EWMH, win->id());
+ uint32_t num = 0;
+ int wkspace = -1;
+ if(1==xcb_ewmh_get_wm_desktop_reply(&obj->EWMH, cookie, &num, NULL) ){
+ if(num!=0xFFFFFFFF){ wkspace = num; }
+ }/*else{
+ //Error in fetching property (not set?)
+ // - put it on the current screen
+ out = WM_Get_Current_Desktop();
+ }*/
+ win->setProperty(NativeWindowObject::Workspace, wkspace);
+ }
+ if(props.contains(NativeWindowObject::FrameExtents)){
+ //Just assign default values to this - need to automate it later
+ //win->setProperty(NativeWindowObject::FrameExtents, QVariant::fromValue<QList<int> >(QList<int>() << 5 << 5 << 5+QFontMetrics(QFont()).height() << 5) );
+ }
+ if(props.contains(NativeWindowObject::RelatedWindows)){
+ WId orig = win->id();
+ WId tid = obj->getTransientFor(orig);
+ QList<WId> list;
+ while(tid != orig){
+ list << tid;
+ orig = tid;
+ tid = obj->getTransientFor(orig);
+ }
+ win->setProperty(NativeWindowObject::RelatedWindows, QVariant::fromValue(list));
+ }
+ if(props.contains(NativeWindowObject::Visible)){
+ xcb_get_window_attributes_reply_t *attr = xcb_get_window_attributes_reply(QX11Info::connection(), xcb_get_window_attributes(QX11Info::connection(), win->id()) , NULL);
+ if(attr != 0){
+ win->setProperty(NativeWindowObject::Visible, attr->map_state == XCB_MAP_STATE_VIEWABLE);
+ free(attr);
+ }
+ }
+ if(props.contains(NativeWindowObject::WinTypes)){
+ QList< NativeWindowObject::Type> types;
+ xcb_get_property_cookie_t cookie = xcb_ewmh_get_wm_window_type_unchecked(&obj->EWMH, win->id());
+ xcb_ewmh_get_atoms_reply_t reply;
+ if(1==xcb_ewmh_get_wm_window_type_reply(&obj->EWMH, cookie, &reply, NULL) ){
+ for(unsigned int i=0; i<reply.atoms_len; i++){
+ if(reply.atoms[i]==obj->EWMH._NET_WM_WINDOW_TYPE_DESKTOP){ types << NativeWindowObject::T_DESKTOP; }
+ else if(reply.atoms[i]==obj->EWMH._NET_WM_WINDOW_TYPE_DOCK){ types << NativeWindowObject::T_DOCK; }
+ else if(reply.atoms[i]==obj->EWMH._NET_WM_WINDOW_TYPE_TOOLBAR){ types << NativeWindowObject::T_TOOLBAR; }
+ else if(reply.atoms[i]==obj->EWMH._NET_WM_WINDOW_TYPE_MENU){ types << NativeWindowObject::T_MENU; }
+ else if(reply.atoms[i]==obj->EWMH._NET_WM_WINDOW_TYPE_UTILITY){ types << NativeWindowObject::T_UTILITY; }
+ else if(reply.atoms[i]==obj->EWMH._NET_WM_WINDOW_TYPE_SPLASH){ types << NativeWindowObject::T_SPLASH; }
+ else if(reply.atoms[i]==obj->EWMH._NET_WM_WINDOW_TYPE_DIALOG){ types << NativeWindowObject::T_DIALOG; }
+ else if(reply.atoms[i]==obj->EWMH._NET_WM_WINDOW_TYPE_DROPDOWN_MENU){ types << NativeWindowObject::T_DROPDOWN_MENU; }
+ else if(reply.atoms[i]==obj->EWMH._NET_WM_WINDOW_TYPE_POPUP_MENU){ types << NativeWindowObject::T_POPUP_MENU; }
+ else if(reply.atoms[i]==obj->EWMH._NET_WM_WINDOW_TYPE_TOOLTIP){ types << NativeWindowObject::T_TOOLTIP; }
+ else if(reply.atoms[i]==obj->EWMH._NET_WM_WINDOW_TYPE_NOTIFICATION){ types << NativeWindowObject::T_NOTIFICATION; }
+ else if(reply.atoms[i]==obj->EWMH._NET_WM_WINDOW_TYPE_COMBO){ types << NativeWindowObject::T_COMBO; }
+ else if(reply.atoms[i]==obj->EWMH._NET_WM_WINDOW_TYPE_DND){ types << NativeWindowObject::T_DND; }
+ else if(reply.atoms[i]==obj->EWMH._NET_WM_WINDOW_TYPE_NORMAL){ types << NativeWindowObject::T_NORMAL; }
+ }
+ }
+ if(types.isEmpty()){ types << NativeWindowObject::T_NORMAL; }
+ win->setProperty(NativeWindowObject::WinTypes, QVariant::fromValue< QList<NativeWindowObject::Type> >(types) );
+ }
+}
+
+void NativeWindowSystem::ChangeWindowProperties(NativeWindowObject* win, QList< NativeWindowObject::Property > props, QList<QVariant> vals){
+ if(props.length() == 0 || vals.length()!=props.length() || win ==0 ){ return; }
+ //qDebug() << "Change Window Properties:" << props << vals;
+ if(props.contains(NativeWindowObject::Title)){
+
+ }
+ if(props.contains(NativeWindowObject::ShortTitle)){
+
+ }
+ if(props.contains(NativeWindowObject::Icon)){
+
+ }
+ if(props.contains(NativeWindowObject::Size) || props.contains(NativeWindowObject::GlobalPos) ){
+ xcb_configure_window_value_list_t valList;
+ //valList.x = 0; //Note that this is the relative position - should always be 0,0 relative to the embed widget
+ //valList.y = 0;
+ QSize sz = win->property(NativeWindowObject::Size).toSize();
+ if(props.contains(NativeWindowObject::Size)){
+ sz = vals[ props.indexOf(NativeWindowObject::Size) ] .toSize();
+ }
+ valList.width = sz.width();
+ valList.height = sz.height();
+ if(props.contains(NativeWindowObject::GlobalPos)){
+ QPoint pt = vals[ props.indexOf(NativeWindowObject::GlobalPos) ] .toPoint();
+ valList.x = pt.x();
+ valList.y = pt.y();
+ }else{
+ valList.x = win->property(NativeWindowObject::GlobalPos).toPoint().x();
+ valList.y = win->property(NativeWindowObject::GlobalPos).toPoint().y();
+ }
+ uint16_t mask = 0;
+ mask = mask | XCB_CONFIG_WINDOW_WIDTH | XCB_CONFIG_WINDOW_HEIGHT | XCB_CONFIG_WINDOW_X | XCB_CONFIG_WINDOW_Y;
+ //qDebug() << "Configure window Geometry:" << sz;
+ xcb_configure_window_aux(QX11Info::connection(), win->id(), mask, &valList);
+ }
+ if(props.contains(NativeWindowObject::Name)){
+
+ }
+ if(props.contains(NativeWindowObject::Workspace)){
+ int num = vals[ props.indexOf(NativeWindowObject::Workspace) ].toInt();
+ xcb_ewmh_set_wm_desktop(&obj->EWMH, win->id(), (num<0 ? 0xFFFFFFFF : qAbs(num) ) );
+ }
+ if(props.contains(NativeWindowObject::RelatedWindows)){
+
+ }
+ if(props.contains(NativeWindowObject::Visible)){
+ qDebug() << "Check Window Visibility:" << vals[ props.indexOf(NativeWindowObject::Visible) ];
+ if( vals[ props.indexOf(NativeWindowObject::Visible) ].toBool() ){
+ qDebug() << " - Map it!";
+ xcb_map_window(QX11Info::connection(), win->id());
+ }else{
+ qDebug() << " - Unmap it!";
+ xcb_unmap_window(QX11Info::connection(), win->id());
+ }
+ }
+ if(props.contains(NativeWindowObject::Active)){
+ //Only one window can be "Active" at a time - so only do anything if this window wants to be active
+ if(vals[props.indexOf(NativeWindowObject::Active)].toBool() ){
+ //Lower the currently active window (invisible window) to the bottom of the stack
+ xcb_window_t cactive;
+ if( 1 == xcb_ewmh_get_active_window_reply( &obj->EWMH,
+ xcb_ewmh_get_active_window_unchecked(&obj->EWMH, QX11Info::appScreen()),
+ &cactive, NULL) ){
+ uint32_t val = XCB_STACK_MODE_BELOW;
+ xcb_configure_window(QX11Info::connection(), cactive, XCB_CONFIG_WINDOW_STACK_MODE, &val);
+ }
+
+ xcb_ewmh_set_active_window(&obj->EWMH, QX11Info::appScreen(), win->id() );
+ //Also send the active window a message to take input focus
+ xcb_set_input_focus(QX11Info::connection(), XCB_INPUT_FOCUS_PARENT, win->id(), XCB_CURRENT_TIME);
+ //Send the window a WM_TAKE_FOCUS message
+/* xcb_client_message_event_t event;
+ event.response_type = XCB_CLIENT_MESSAGE;
+ event.format = 32;
+ event.window = win->id();
+ event.type = obj->ATOMS["WM_PROTOCOLS"];
+ event.data.data32[0] = obj->ATOMS["WM_TAKE_FOCUS"];
+ event.data.data32[1] = XCB_TIME_CURRENT_TIME; //CurrentTime;
+ event.data.data32[2] = 0;
+ event.data.data32[3] = 0;
+ event.data.data32[4] = 0;
+
+ xcb_send_event(QX11Info::connection(), 0, win->id(), XCB_EVENT_MASK_STRUCTURE_NOTIFY | XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT, (const char *) &event);
+ xcb_flush(QX11Info::connection());
+*/
+ }
+ }
+
+}
+
+void NativeWindowSystem::SetupNewWindow(NativeWindowObject *win){
+ if(!DISABLE_COMPOSITING){
+ xcb_composite_redirect_window(QX11Info::connection(), win->id(), XCB_COMPOSITE_REDIRECT_MANUAL); //XCB_COMPOSITE_REDIRECT_[MANUAL/AUTOMATIC]);
+ xcb_composite_redirect_subwindows(QX11Info::connection(), win->id(), XCB_COMPOSITE_REDIRECT_MANUAL); //AUTOMATIC); //XCB_COMPOSITE_REDIRECT_[MANUAL/AUTOMATIC]);
+
+ //Now create/register the damage handler
+ // -- XCB (Note: The XCB damage registration is completely broken at the moment - 9/15/15, Ken Moore)
+ // -- Retested 6/29/17 (no change) Ken Moore
+ //xcb_damage_damage_t dmgID = xcb_generate_id(QX11Info::connection()); //This is a typedef for a 32-bit unsigned integer
+ //xcb_damage_create(QX11Info::connection(), dmgID, win->id(), XCB_DAMAGE_REPORT_LEVEL_RAW_RECTANGLES);
+ // -- XLib (Note: This is only used because the XCB routine above does not work - needs to be fixed upstream in XCB itself).
+ Damage dmgID = XDamageCreate(QX11Info::display(), win->id(), XDamageReportRawRectangles);
+
+ win->addDamageID( (uint) dmgID); //save this for later
+ }else{
+ //xcb_reparent_window(QX11Info::connection(), win->id(), this->winId(), 0, 0);
+ //Also use a partial-composite here - make sure the window pixmap is available even when the window is obscured
+ xcb_composite_redirect_window(QX11Info::connection(), win->id(), XCB_COMPOSITE_REDIRECT_AUTOMATIC);
+ //xcb_composite_redirect_subwindows(QX11Info::connection(), win->id(), XCB_COMPOSITE_REDIRECT_MANUAL);
+ //Also alert us when the window visual changes
+ Damage dmgID = XDamageCreate(QX11Info::display(), win->id(), XDamageReportRawRectangles);
+
+ win->addDamageID( (uint) dmgID); //save this for later
+ }
+ //win->addFrameWinID(this->winId());
+ registerClientEvents(win->id());
+}
+
+QImage NativeWindowSystem::GetWindowImage(NativeWindowObject* win){
+ //qDebug() << "Update Window Image:" << win->name();
+ QRect geom(QPoint(0,0), win->property(NativeWindowObject::Size).toSize());
+ QImage img; //(geom.width(), geom.height(), QImage::Format_ARGB32);
+ //img.fill(QGuiApplication::palette().window());
+ if(DISABLE_COMPOSITING){
+ QList<QScreen*> screens = static_cast<QApplication*>( QApplication::instance() )->screens();
+ if(!screens.isEmpty()){
+ img = screens[0]->grabWindow(win->id(), geom.x(), geom.y(), geom.width(), geom.height()).toImage();
+ }
+ }else{
+ //Pull the XCB pixmap out of the compositing layer
+ xcb_pixmap_t pix = xcb_generate_id(QX11Info::connection());
+ xcb_composite_name_window_pixmap(QX11Info::connection(), win->id(), pix);
+ if(pix==0){ return QImage(); }
+
+ //Convert this pixmap into a QImage
+ //xcb_image_t *ximg = xcb_image_get(QX11Info::connection(), pix, 0, 0, this->width(), this->height(), ~0, XCB_IMAGE_FORMAT_Z_PIXMAP);
+ xcb_image_t *ximg = xcb_image_get(QX11Info::connection(), pix, geom.x(), geom.y(), geom.width(), geom.height(), ~0, XCB_IMAGE_FORMAT_Z_PIXMAP);
+ if(ximg == 0){ return QImage(); }
+ QImage tmp(ximg->data, ximg->width, ximg->height, ximg->stride, QImage::Format_ARGB32_Premultiplied);
+ img = tmp.copy(); //detach this image from the XCB data structures before we clean them up, otherwise the QImage will try to clean it up a second time on window close and crash
+ xcb_image_destroy(ximg);
+
+ //Cleanup the XCB data structures
+ xcb_free_pixmap(QX11Info::connection(), pix);
+ }
+ return img;
+ //win->setProperty(NativeWindowObject::WinImage, QVariant::fromValue<QImage>(img) );
+}
+
+// === PUBLIC SLOTS ===
+//These are the slots which are typically only used by the desktop system itself or the NativeEventFilter
+void NativeWindowSystem::RegisterVirtualRoot(WId id){
+ //Convert to XCB array
+ xcb_window_t array[1];
+ array[0] = id;
+ //Set the property
+ xcb_ewmh_set_virtual_roots(&obj->EWMH, QX11Info::appScreen(), 1, array);
+ //Now also enable automatic compositing for children of this window
+ //xcb_composite_redirect_window(QX11Info::connection(), id, XCB_COMPOSITE_REDIRECT_AUTOMATIC);
+ //xcb_composite_redirect_subwindows(QX11Info::connection(), id, XCB_COMPOSITE_REDIRECT_AUTOMATIC);
+}
+
+void NativeWindowSystem::setRoot_supportedActions(){
+//NET_WM standards (ICCCM implied - no standard way to list those)
+ xcb_atom_t list[] = {obj->EWMH._NET_WM_NAME,
+ obj->EWMH._NET_WM_ICON,
+ obj->EWMH._NET_WM_ICON_NAME,
+ obj->EWMH._NET_WM_DESKTOP,
+ /*obj->ATOMS["_NET_WM_WINDOW_OPACITY"],*/
+ /*_NET_WINDOW_TYPE (and all the various types - 15 in total*/
+ obj->EWMH._NET_WM_WINDOW_TYPE, obj->EWMH._NET_WM_WINDOW_TYPE_DESKTOP, obj->EWMH._NET_WM_WINDOW_TYPE_DOCK,
+ obj->EWMH._NET_WM_WINDOW_TYPE_TOOLBAR, obj->EWMH._NET_WM_WINDOW_TYPE_MENU, obj->EWMH._NET_WM_WINDOW_TYPE_UTILITY,
+ obj->EWMH._NET_WM_WINDOW_TYPE_SPLASH, obj->EWMH._NET_WM_WINDOW_TYPE_DIALOG, obj->EWMH._NET_WM_WINDOW_TYPE_NORMAL,
+ obj->EWMH._NET_WM_WINDOW_TYPE_DROPDOWN_MENU, obj->EWMH._NET_WM_WINDOW_TYPE_POPUP_MENU, obj->EWMH._NET_WM_WINDOW_TYPE_TOOLTIP,
+ obj->EWMH._NET_WM_WINDOW_TYPE_NOTIFICATION, obj->EWMH._NET_WM_WINDOW_TYPE_COMBO, obj->EWMH._NET_WM_WINDOW_TYPE_DND,
+ };
+ xcb_ewmh_set_supported(&obj->EWMH, QX11Info::appScreen(), 20,list);
+}
+
+void NativeWindowSystem::setRoot_numberOfWorkspaces(QStringList names){
+ if(names.isEmpty()){ names << "one"; }
+ //First set the overall number of workspaces
+ xcb_ewmh_set_number_of_desktops(&obj->EWMH, QX11Info::appScreen(), names.length());
+ //Now set the names for the workspaces
+ //EWMH LIBRARY BROKEN - appears to be a mismatch in the function header (looking for a single char array, instead of a list of char arrays)
+ // Ken Moore - 6/27/17
+ /*
+ char *array[ names.length() ];
+ for(int i=0; i<names.length(); i++){array[i] = names[i].toUtf8().data(); } //Convert to an array of char arrays
+ xcb_ewmh_set_desktop_names(&obj->EWMH, QX11Info::appScreen(), names.length(), array);
+ */
+}
+
+void NativeWindowSystem::setRoot_currentWorkspace(int num){
+ xcb_ewmh_set_current_desktop(&obj->EWMH, QX11Info::appScreen(), num);
+}
+
+void NativeWindowSystem::setRoot_clientList(QList<WId> list, bool stackorder){
+ //convert the QList into a generic array
+ xcb_window_t array[list.length()];
+ for(int i=0; i<list.length(); i++){ array[i] = list[i]; }
+ if(stackorder){
+ xcb_ewmh_set_client_list_stacking(&obj->EWMH, QX11Info::appScreen(), list.length(), array);
+ }else{
+ xcb_ewmh_set_client_list(&obj->EWMH, QX11Info::appScreen(), list.length(), array);
+ }
+}
+
+void NativeWindowSystem::setRoot_desktopGeometry(QRect geom){
+ //This one is a combo function
+ // This will set the "DESKTOP_VIEWPORT" property (point)
+ // as well as the "DESKTOP_GEOMETRY" property (size)
+ //Turn the QList into xcb_ewmh_coordinates_t*
+ xcb_ewmh_coordinates_t array[1];
+ array[0].x=geom.x(); array[0].y=geom.y();
+ //Now set the property
+ xcb_ewmh_set_desktop_viewport(&obj->EWMH, QX11Info::appScreen(), 1, array);
+ xcb_ewmh_set_desktop_geometry(&obj->EWMH, QX11Info::appScreen(), geom.width(), geom.height());
+}
+
+void NativeWindowSystem::setRoot_desktopWorkarea(QList<QRect> list){
+ //Convert to the XCB/EWMH data structures
+ xcb_ewmh_geometry_t array[list.length()];
+ for(int i=0; i<list.length(); i++){
+ array[i].x = list[i].x(); array[i].y = list[i].y();
+ array[i].width = list[i].width(); array[i].height = list[i].height();
+ }
+ //Now set the property
+ xcb_ewmh_set_workarea(&obj->EWMH, QX11Info::appScreen(), list.length(), array);
+}
+
+void NativeWindowSystem::setRoot_activeWindow(WId win){
+ /*xcb_ewmh_set_active_window(&obj->EWMH, QX11Info::appScreen(), win);
+ //Also send the active window a message to take input focus
+ //Send the window a WM_TAKE_FOCUS message
+ xcb_client_message_event_t event;
+ event.response_type = XCB_CLIENT_MESSAGE;
+ event.format = 32;
+ event.window = win;
+ event.type = obj->ATOMS["WM_PROTOCOLS"];
+ event.data.data32[0] = obj->ATOMS["WM_TAKE_FOCUS"];
+ event.data.data32[1] = XCB_TIME_CURRENT_TIME; //CurrentTime;
+ event.data.data32[2] = 0;
+ event.data.data32[3] = 0;
+ event.data.data32[4] = 0;
+
+ xcb_send_event(QX11Info::connection(), 0, win, XCB_EVENT_MASK_STRUCTURE_NOTIFY | XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT, (const char *) &event);
+ xcb_flush(QX11Info::connection());*/
+}
+
+int NativeWindowSystem::currentWorkspace(){
+ xcb_get_property_cookie_t cookie = xcb_ewmh_get_current_desktop_unchecked(&obj->EWMH, QX11Info::appScreen());
+ uint32_t num = 0;
+ if(1==xcb_ewmh_get_current_desktop_reply(&obj->EWMH, cookie, &num, NULL) ){
+ return num;
+ }else{
+ return 0;
+ }
+}
+
+//NativeWindowEventFilter interactions
+void NativeWindowSystem::NewWindowDetected(WId id){
+ //Make sure this can be managed first
+ if(findWindow(id, false) != 0){ findWindow(id,false)->setProperty(NativeWindowObject::Visible, true, true); return; } //already managed
+ xcb_get_window_attributes_cookie_t cookie = xcb_get_window_attributes(QX11Info::connection(), id);
+ xcb_get_window_attributes_reply_t *attr = xcb_get_window_attributes_reply(QX11Info::connection(), cookie, NULL);
+ if(attr == 0){ return; } //could not get attributes of window
+ if(attr->override_redirect){ free(attr); return; } //window has override redirect set (do not manage)
+ free(attr);
+ xcb_reparent_window(QX11Info::connection(), id, QX11Info::appRootWindow(), 0, 0);
+ //Now go ahead and create/populate the container for this window
+ NativeWindowObject *win = new NativeWindowObject(id);
+
+ //Register for events from this window
+ registerClientEvents(win->id());
+ NWindows << win;
+ UpdateWindowProperties(win, NativeWindowObject::allProperties());
+ if(win->showWindowFrame()){
+ win->setProperty(NativeWindowObject::FrameExtents, QVariant::fromValue<QList<int> >( QList<int>() << 5 << 5 << 30 << 5 ));
+ }
+ qDebug() << "New Window [& associated ID's]:" << win->id() << win->property(NativeWindowObject::Name).toString();
+ //Now setup the connections with this window
+ connect(win, SIGNAL(RequestClose(WId)), this, SLOT(RequestClose(WId)) );
+ connect(win, SIGNAL(RequestKill(WId)), this, SLOT(RequestKill(WId)) );
+ connect(win, SIGNAL(RequestPing(WId)), this, SLOT(RequestPing(WId)) );
+ connect(win, SIGNAL(RequestReparent(WId, WId, QPoint)), this, SLOT(RequestReparent(WId, WId, QPoint)) );
+ connect(win, SIGNAL(RequestPropertiesChange(WId, QList<NativeWindowObject::Property>, QList<QVariant>)), this, SLOT(RequestPropertiesChange(WId, QList<NativeWindowObject::Property>, QList<QVariant>)) );
+ connect(win, SIGNAL(VerifyNewGeometry(WId)), this, SLOT(CheckWindowPosition(WId)) );
+ SetupNewWindow(win);
+ CheckWindowPosition(id, true); //first time placement
+ xcb_map_window(QX11Info::connection(), win->id());
+ emit NewWindowAvailable(win);
+}
+
+void NativeWindowSystem::NewTrayWindowDetected(WId id){
+ //Make sure this can be managed first
+ qDebug() << "New Tray Window Detected:" << id;
+ if(findTrayWindow(id) != 0){ return; } //already managed
+ qDebug() << " - Setup new tray window";
+ /*xcb_get_window_attributes_cookie_t cookie = xcb_get_window_attributes(QX11Info::connection(), id);
+ xcb_get_window_attributes_reply_t *attr = xcb_get_window_attributes_reply(QX11Info::connection(), cookie, NULL);
+ if(attr == 0){ qDebug() << " - [WARN] No tray window attributes"; return; } //could not get attributes of window
+ if(attr->override_redirect){ qDebug() << " - [WARN] Override Redirect"; free(attr); return; } //window has override redirect set (do not manage)
+ qDebug() << " - free attr";
+ free(attr);*/
+ //Register for events from this window
+ #define TRAY_WIN_EVENT_MASK (XCB_EVENT_MASK_EXPOSURE | \
+ XCB_EVENT_MASK_STRUCTURE_NOTIFY | \
+ XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT | \
+ XCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY | \
+ XCB_EVENT_MASK_ENTER_WINDOW)
+
+ uint32_t value_list[1] = {TRAY_WIN_EVENT_MASK};
+ qDebug() << " - change tray window attributes";
+ xcb_change_window_attributes(QX11Info::connection(), id, XCB_CW_EVENT_MASK, value_list);
+ //Now go ahead and create/populate the container for this window
+ NativeWindowObject *win = new NativeWindowObject(id);
+ TWindows << win;
+ qDebug() << " - update tray window properties";
+ UpdateWindowProperties(win, NativeWindowObject::allProperties());
+ qDebug() << " - emit new tray window signal";
+ emit NewTrayWindowAvailable(win);
+}
+
+void NativeWindowSystem::WindowCloseDetected(WId id){
+ NativeWindowObject *win = findWindow(id, false);
+ if(win==0){ win = findWindow(id, true); }
+ //qDebug() << "Got Window Closed" << id << win;
+ //qDebug() << "Old Window List:" << NWindows.length();
+ if(win!=0){
+ NWindows.removeAll(win);
+ win->emit WindowClosed(id);
+ //qDebug() << "Visible Window Closed!!!";
+ emit WindowClosed();
+ win->deleteLater();
+ }else{
+ win = findTrayWindow(id);
+ if(win!=0){
+ TWindows.removeAll(win);
+ win->emit WindowClosed(id);
+ emit TrayWindowClosed();
+ win->deleteLater();
+ }
+ }
+ //qDebug() << " - Now:" << NWindows.length();
+}
+
+void NativeWindowSystem::WindowPropertyChanged(WId id, NativeWindowObject::Property prop){
+ //NOTE: This is triggered by the NativeEventFilter - not by changes to the NativeWindow objects themselves
+ NativeWindowObject *win = findWindow(id, prop!=NativeWindowObject::Visible);
+ if(win==0){ win = findTrayWindow(id); }
+ if(win!=0){
+ UpdateWindowProperties(win, QList<NativeWindowObject::Property>() << prop);
+ }else if(prop != 0){
+ //Could not find the window for a specific property with an undefined value
+ // - update this property for all the windows just in case
+ for(int i=0; i<NWindows.length(); i++){
+ UpdateWindowProperties( NWindows[i], QList<NativeWindowObject::Property>() << prop);
+ }
+ }
+}
+
+void NativeWindowSystem::WindowPropertiesChanged(WId id, QList<NativeWindowObject::Property> props){
+ //NOTE: This is triggered by the NativeEventFilter - not by changes to the NativeWindow objects themselves
+ NativeWindowObject *win = findWindow(id);
+ if(win==0){ win = findTrayWindow(id); }
+ if(win!=0){
+ UpdateWindowProperties(win, props);
+ }else{
+ //Could not find the window for a specific property with an undefined value
+ // - update this property for all the windows just in case
+ for(int i=0; i<NWindows.length(); i++){
+ UpdateWindowProperties( NWindows[i], props);
+ }
+ }
+}
+
+void NativeWindowSystem::WindowPropertyChanged(WId id, NativeWindowObject::Property prop, QVariant val){
+ NativeWindowObject *win = findWindow(id,prop!=NativeWindowObject::Visible);
+ if(win==0){ win = findTrayWindow(id); }
+ if(win!=0){
+ win->setProperty(prop, val);
+ }
+}
+
+void NativeWindowSystem::WindowPropertiesChanged(WId id, QList<NativeWindowObject::Property> props, QList<QVariant> vals){
+ NativeWindowObject *win = findWindow(id);
+ if(win==0){ win = findTrayWindow(id); }
+ if(win!=0){
+ for(int i=0; i<props.length() && i<vals.length(); i++){ win->setProperty(props[i], vals[i]); }
+ }
+}
+
+void NativeWindowSystem::RequestPropertyChange(WId id, NativeWindowObject::Property prop, QVariant val){
+ //This is just a simplified version of the multiple-property function
+ RequestPropertiesChange(id, QList<NativeWindowObject::Property>() << prop, QList<QVariant>() << val);
+}
+
+void NativeWindowSystem::RequestPropertiesChange(WId win, QList<NativeWindowObject::Property> props, QList<QVariant> vals){
+ //Find the window object associated with this id
+ bool istraywin = false; //just in case we care later if it is a tray window or a regular window
+ NativeWindowObject *WIN = findWindow(win);
+ if(WIN==0){ istraywin = true; WIN = findTrayWindow(win); }
+ if(WIN==0){ return; } //invalid window ID - no longer available
+ //Now make any changes as needed
+ ChangeWindowProperties(WIN, props, vals);
+}
+
+void NativeWindowSystem::GotPong(WId id){
+ if(waitingForPong.contains(id)){
+ waitingForPong.remove(id);
+ }
+ if(waitingForPong.isEmpty() && pingTimer!=0){ pingTimer->stop(); }
+}
+
+void NativeWindowSystem::NewKeyPress(int keycode, WId win){
+ emit NewInputEvent();
+ if(screenLocked){ return; }
+ Qt::Key key = KeycodeToQt(keycode);
+ if(key!=Qt::Key_unknown){ emit KeyPressDetected(win, key); }
+}
+
+void NativeWindowSystem::NewKeyRelease(int keycode, WId win){
+ emit NewInputEvent();
+ if(screenLocked){ return; }
+ Qt::Key key = KeycodeToQt(keycode);
+ if(key!=Qt::Key_unknown){ emit KeyReleaseDetected(win, key); }
+}
+
+void NativeWindowSystem::NewMousePress(int buttoncode, WId win){
+ emit NewInputEvent();
+ if(screenLocked){ return; }
+ emit MousePressDetected(win, MouseToQt(buttoncode));
+}
+
+void NativeWindowSystem::NewMouseRelease(int buttoncode, WId win){
+ emit NewInputEvent();
+ if(screenLocked){ return; }
+ emit MouseReleaseDetected(win, MouseToQt(buttoncode));
+}
+
+void NativeWindowSystem::CheckDamageID(WId win){
+ //qDebug() << "Got Damage Event:" << win;
+ for(int i=0; i<NWindows.length(); i++){
+ if(NWindows[i]->damageId() == win || NWindows[i]->id() == win || NWindows[i]->frameId()==win){
+ //qDebug() << " - Found window";
+ //UpdateWindowImage(NWindows[i]);
+ NWindows[i]->emit winImageChanged();
+ return;
+ }
+ }
+ NativeWindowObject *WIN = findTrayWindow(win);
+ if(WIN!=0){
+ UpdateWindowProperties(WIN, QList<NativeWindowObject::Property>() << NativeWindowObject::Icon);
+ }
+}
+
+void NativeWindowSystem::raiseWindow(NativeWindowObject *win){
+ qDebug() << "Raise Window:" << win->name() << win->id();
+ //Note: Always ensure the desktop canvas is right under the main window that is raised
+ xcb_circulate_window(QX11Info::connection(), XCB_CIRCULATE_RAISE_LOWEST, Lumina::ROOTWIN->viewID());
+ xcb_circulate_window(QX11Info::connection(), XCB_CIRCULATE_RAISE_LOWEST ,win->id());
+}
+
+
+void NativeWindowSystem::lowerWindow(NativeWindowObject *win){
+ qDebug() << "Lower Window:" << win->name() << win->id();
+ xcb_circulate_window(QX11Info::connection(), XCB_CIRCULATE_LOWER_HIGHEST ,win->id());
+}
+
+// === PRIVATE SLOTS ===
+//These are the slots which are built-in and automatically connected when a new NativeWindow is created
+
+void NativeWindowSystem::RequestClose(WId win){
+ //Send the window a WM_DELETE_WINDOW message
+ xcb_client_message_event_t event;
+ event.response_type = XCB_CLIENT_MESSAGE;
+ event.format = 32;
+ event.window = win;
+ event.type = obj->ATOMS.value("WM_PROTOCOLS");
+ event.data.data32[0] = obj->ATOMS.value("WM_DELETE_WINDOW");
+ event.data.data32[1] = XCB_TIME_CURRENT_TIME; //CurrentTime;
+ event.data.data32[2] = 0;
+ event.data.data32[3] = 0;
+ event.data.data32[4] = 0;
+
+ xcb_send_event(QX11Info::connection(), 0, win, XCB_EVENT_MASK_STRUCTURE_NOTIFY | XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT, (const char *) &event);
+ xcb_flush(QX11Info::connection());
+}
+
+void NativeWindowSystem::RequestKill(WId win){
+ xcb_kill_client(QX11Info::connection(), win);
+}
+
+void NativeWindowSystem::RequestPing(WId win){
+ waitingForPong.insert(win, QDateTime::currentDateTime().addSecs(5) );
+ xcb_ewmh_send_wm_ping(&obj->EWMH, win, XCB_CURRENT_TIME);
+ if(pingTimer==0){
+ pingTimer = new QTimer(this);
+ pingTimer->setInterval(2000); //2seconds
+ connect(pingTimer, SIGNAL(timeout()), this, SLOT(checkPings()) );
+ }
+ pingTimer->start();
+}
+
+void NativeWindowSystem::RequestReparent(WId win, WId container, QPoint relorigin){
+ NativeWindowObject *WIN = findWindow(win);
+ if(WIN==0){ return; } //could not find corresponding window structure
+//Reparent the window into the container
+ xcb_reparent_window(QX11Info::connection(), win, container, relorigin.x(), relorigin.y());
+ //xcb_map_window(QX11Info::connection(), win);
+
+ //Now send the embed event to the app
+ //qDebug() << " - send _XEMBED event";
+ xcb_client_message_event_t event;
+ event.response_type = XCB_CLIENT_MESSAGE;
+ event.format = 32;
+ event.window = win;
+ event.type = obj->ATOMS["_XEMBED"]; //_XEMBED
+ event.data.data32[0] = XCB_TIME_CURRENT_TIME; //CurrentTime;
+ event.data.data32[1] = 0; //XEMBED_EMBEDDED_NOTIFY
+ event.data.data32[2] = 0;
+ event.data.data32[3] = container; //WID of the container
+ event.data.data32[4] = 0;
+
+ xcb_send_event(QX11Info::connection(), 0, win, XCB_EVENT_MASK_STRUCTURE_NOTIFY | XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT, (const char *) &event);
+
+ //Now setup any redirects and return
+ //this->SelectInput(win, true); //Notify of structure changes
+ registerClientEvents(win);
+ //xcb_composite_redirect_window(QX11Info::connection(), win, XCB_COMPOSITE_REDIRECT_MANUAL); //XCB_COMPOSITE_REDIRECT_[MANUAL/AUTOMATIC]);
+
+ //Now map the window (will be a transparent child of the container)
+ xcb_map_window(QX11Info::connection(), win);
+ xcb_map_window(QX11Info::connection(), container);
+ //Now create/register the damage handler
+ // -- XCB (Note: The XCB damage registration is completely broken at the moment - 9/15/15, Ken Moore)
+ // -- Retested 6/29/17 (no change) Ken Moore
+ //xcb_damage_damage_t dmgID = xcb_generate_id(QX11Info::connection()); //This is a typedef for a 32-bit unsigned integer
+ //xcb_damage_create(QX11Info::connection(), dmgID, win, XCB_DAMAGE_REPORT_LEVEL_RAW_RECTANGLES);
+ // -- XLib (Note: This is only used because the XCB routine above does not work - needs to be fixed upstream in XCB itself).
+ Damage dmgID = XDamageCreate(QX11Info::display(), win, XDamageReportRawRectangles);
+ WIN->addDamageID( (uint) dmgID); //save this for later
+ //qDebug() << " - Done";
+ //return ( (uint) dmgID );
+}
+/*
+ xcb_reparent_window(QX11Info::connection(), client, parent, relorigin.x(), relorigin.y());
+
+ //Now ensure that we still get event for these windows
+ registerClientEvents(client); //make sure we re-do this after reparenting
+ registerClientEvents(parent);
+ xcb_map_window(QX11Info::connection(), parent);
+}*/
diff --git a/src-qt5/core/lumina-desktop-unified/src-events/NativeWindowSystem.h b/src-qt5/core/lumina-desktop-unified/src-events/NativeWindowSystem.h
new file mode 100644
index 00000000..0b6cd67e
--- /dev/null
+++ b/src-qt5/core/lumina-desktop-unified/src-events/NativeWindowSystem.h
@@ -0,0 +1,156 @@
+//===========================================
+// Lumina-DE source code
+// Copyright (c) 2017-2018, Ken Moore
+// Available under the 3-clause BSD license
+// See the LICENSE file for full details
+//===========================================
+// This is a Qt5/Lumina wrapper around native graphics system calls
+// It is primarily designed around the creation/modification of instances of
+// the "NativeWindowObject" class for passing information around
+//===========================================
+#ifndef _LUMINA_DESKTOP_NATIVE_WINDOW_SYSTEM_H
+#define _LUMINA_DESKTOP_NATIVE_WINDOW_SYSTEM_H
+
+#include <NativeWindowObject.h>
+#include <QObject>
+#include <QHash>
+#include <QTimer>
+
+
+class NativeWindowSystem : public QObject{
+ Q_OBJECT
+private:
+ QList<NativeWindowObject*> NWindows;
+ QList<NativeWindowObject*> TWindows;
+
+ //Now define a simple private_objects class so that each implementation
+ // has a storage container for defining/placing private objects as needed
+ class p_objects;
+ p_objects* obj;
+
+ //Internal timers/variables for managing pings
+ QTimer *pingTimer;
+ QHash<WId, QDateTime> waitingForPong;
+
+ void checkPings(){
+ QDateTime cur = QDateTime::currentDateTime();
+ QList<WId> waiting = waitingForPong.keys();
+ for(int i=0; i<waiting.length(); i++){
+ if(waitingForPong.value(waiting[i]) < cur){
+ waitingForPong.remove(waiting[i]); //Timeout on this window
+ if(waitingForPong.isEmpty() && pingTimer!=0){ pingTimer->stop(); }
+ NativeWindowObject *win = findWindow(waiting[i]);
+ if(win==0){ win = findTrayWindow(waiting[i]); }
+ if(win!=0){ win->emit WindowNotResponding(waiting[i]); }
+ }
+ }
+ }
+
+ //Generic private variables
+ bool screenLocked;
+
+public:
+ //enum Property{ None, CurrentWorkspace, Workspaces, VirtualRoots, WorkAreas };
+ enum MouseButton{NoButton, LeftButton, RightButton, MidButton, BackButton, ForwardButton, TaskButton, WheelUp, WheelDown, WheelLeft, WheelRight};
+
+ //Simplifications to find an already-created window object
+ NativeWindowObject* findWindow(WId id, bool checkRelated = true);
+
+ NativeWindowObject* findTrayWindow(WId id);
+ // Since some properties may be easier to update in bulk
+ // let the native system interaction do them in whatever logical groups are best
+ void UpdateWindowProperties(NativeWindowObject* win, QList< NativeWindowObject::Property > props);
+ void ChangeWindowProperties(NativeWindowObject* win, QList< NativeWindowObject::Property > props, QList<QVariant> vals);
+
+ void SetupNewWindow(NativeWindowObject *win);
+ QImage GetWindowImage(NativeWindowObject *win);
+
+ NativeWindowSystem();
+ ~NativeWindowSystem();
+
+ //Overarching start/stop functions
+ bool start();
+ void stop();
+
+ //General-purpose listing functions
+ QList<NativeWindowObject*> currentWindows(){ return NWindows; }
+ QList<NativeWindowObject*> currentTrayWindows(){ return TWindows; }
+
+ //Small simplification functions
+ static Qt::Key KeycodeToQt(int keycode);
+ static NativeWindowSystem::MouseButton MouseToQt(int button);
+ void RegisterEventShortcut(Qt::Key key, bool set);
+ void RegisterEventShortcut(int keycode, bool set);
+
+ void raiseWindow(NativeWindowObject *win);
+ void lowerWindow(NativeWindowObject *win);
+
+public slots:
+ //These are the slots which are typically only used by the desktop system itself or the NativeWindowEventFilter
+
+ //This is called by the lock screen to keep the NWS aware of the current status
+ // it is **NOT** the function to call for the user to actually lock the session (that is in the screensaver/lockscreen class)
+ void ScreenLockChanged(bool lock){
+ screenLocked = lock;
+ }
+
+ //Root Window property registrations
+ void RegisterVirtualRoot(WId);
+ void setRoot_supportedActions();
+ void setRoot_numberOfWorkspaces(QStringList names);
+ void setRoot_currentWorkspace(int);
+ void setRoot_clientList(QList<WId>, bool stackorder = false);
+ void setRoot_desktopGeometry(QRect);
+ void setRoot_desktopWorkarea(QList<QRect>);
+ void setRoot_activeWindow(WId);
+
+ // - Workspaces
+ int currentWorkspace();
+ //void GoToWorkspace(int);
+
+
+ //NativeWindowEventFilter interactions
+ void NewWindowDetected(WId); //will automatically create the new NativeWindow object
+ void NewTrayWindowDetected(WId); //will automatically create the new NativeWindow object
+ void WindowCloseDetected(WId); //will update the lists and make changes if needed
+ void WindowPropertyChanged(WId, NativeWindowObject::Property); //will rescan the window and update the object as needed
+ void WindowPropertiesChanged(WId, QList<NativeWindowObject::Property>);
+ void WindowPropertyChanged(WId, NativeWindowObject::Property, QVariant); //will save that property/value to the right object
+ void WindowPropertiesChanged(WId, QList<NativeWindowObject::Property>, QList<QVariant>);
+ void RequestPropertyChange(WId, NativeWindowObject::Property, QVariant);
+ void RequestPropertiesChange(WId, QList<NativeWindowObject::Property>, QList<QVariant>);
+ void GotPong(WId);
+
+ void NewKeyPress(int keycode, WId win = 0);
+ void NewKeyRelease(int keycode, WId win = 0);
+ void NewMousePress(int buttoncode, WId win = 0);
+ void NewMouseRelease(int buttoncode, WId win = 0);
+ void CheckDamageID(WId);
+
+private slots:
+ //These are the slots which are built-in and automatically connected when a new NativeWindow is created
+ void RequestClose(WId);
+ void RequestKill(WId);
+ void RequestPing(WId);
+ void RequestReparent(WId, WId, QPoint); //client, parent, relative origin point in parent
+
+ //Window-mgmt functions (see Window-mgmt.cpp for details)
+ void ArrangeWindows(WId primary, QString type);
+ void TileWindows(WId primary, QString type);
+ void CheckWindowPosition(WId id, bool newwindow = false);
+ void arrangeWindows(NativeWindowObject *primary, QString type, bool primaryonly = false);
+
+signals:
+ void NewWindowAvailable(NativeWindowObject*);
+ void WindowClosed();
+ void NewTrayWindowAvailable(NativeWindowObject*);
+ void TrayWindowClosed();
+ void NewInputEvent(); //a mouse or keypress was detected (lock-state independent);
+ void KeyPressDetected(WId, Qt::Key); //only emitted if lockstate = false
+ void KeyReleaseDetected(WId, Qt::Key); //only emitted if lockstate = false
+ void MousePressDetected(WId, NativeWindowSystem::MouseButton); //only emitted if lockstate = false
+ void MouseReleaseDetected(WId, NativeWindowSystem::MouseButton); //only emitted if lockstate = false
+
+};
+
+#endif
diff --git a/src-qt5/core/libLumina/obsolete/RootWindow-mgmt.cpp b/src-qt5/core/lumina-desktop-unified/src-events/Window-mgmt.cpp
index 24ea639b..0b45c208 100644
--- a/src-qt5/core/libLumina/obsolete/RootWindow-mgmt.cpp
+++ b/src-qt5/core/lumina-desktop-unified/src-events/Window-mgmt.cpp
@@ -4,28 +4,38 @@
// Available under the 3-clause BSD license
// See the LICENSE file for full details
//===========================================
-#include "RootWindow.h"
+#include "NativeWindowSystem.h"
+inline QScreen* screenUnderMouse(){
+ QPoint pos = QCursor::pos();
+ QList<QScreen*> scrns = QGuiApplication::screens();
+ for(int i=0; i<scrns.length(); i++){
+ if(scrns[i]->geometry().contains(pos)){ return scrns[i]; }
+ }
+ return 0;
+}
+
//Primary/private function
-void RootWindow::arrangeWindows(RootSubWindow *primary, QString type, bool primaryonly){
+void NativeWindowSystem::arrangeWindows(NativeWindowObject *primary, QString type, bool primaryonly){
if(type.isEmpty()){ type = "center"; }
if(primary==0){
//Get the currently active window and treat that as the primary
- for(int i=0; i<WINDOWS.length(); i++){
- if(WINDOWS[i]->nativeWindow()->property(NativeWindow::Active).toBool()){ primary = WINDOWS[i]; }
+ for(int i=0; i<NWindows.length(); i++){
+ if(NWindows[i]->property(NativeWindowObject::Active).toBool()){ primary = NWindows[i]; }
}
- if(primary==0 && !WINDOWS.isEmpty()){ primary = WINDOWS[0]; } //just use the first one in the list
+ if(primary==0 && !NWindows.isEmpty()){ primary = NWindows[0]; } //just use the first one in the list
}
//Now get the current screen that the mouse cursor is over (and valid area)
QScreen *screen = screenUnderMouse();
+ if(screen==0){ return; } //should never happen (theoretically)
QRect desktopArea = screen->availableGeometry();
//qDebug() << "Arrange Windows:" << primary->geometry() << type << primaryonly << desktopArea;
//Now start filtering out all the windows that need to be ignored
- int wkspace = primary->nativeWindow()->property(NativeWindow::Workspace).toInt();
- QList<RootSubWindow*> winlist = WINDOWS;
+ int wkspace = primary->property(NativeWindowObject::Workspace).toInt();
+ QList<NativeWindowObject*> winlist = NWindows;
for(int i=0; i<winlist.length(); i++){
- if(winlist[i]->nativeWindow()->property(NativeWindow::Workspace).toInt()!=wkspace
- || !winlist[i]->nativeWindow()->property(NativeWindow::Visible).toBool()
+ if(winlist[i]->property(NativeWindowObject::Workspace).toInt()!=wkspace
+ || !winlist[i]->property(NativeWindowObject::Visible).toBool()
|| desktopArea.intersected(winlist[i]->geometry()).isNull() ){
//window is outside of the desired area or invisible - ignore it
winlist.removeAt(i);
@@ -45,17 +55,17 @@ void RootWindow::arrangeWindows(RootSubWindow *primary, QString type, bool prima
//Now apply the proper placement routine
if(type=="center"){
QPoint ct = desktopArea.center();
- winlist[i]->setGeometry( ct.x()-(geom.width()/2), ct.y()-(geom.height()/2), geom.width(), geom.height());
+ winlist[i]->setGeometryNow( QRect( ct.x()-(geom.width()/2), ct.y()-(geom.height()/2), geom.width(), geom.height()) );
}else if(type=="snap"){
}else if(type=="single_max"){
- winlist[i]->setGeometry( desktopArea.x(), desktopArea.y(), desktopArea.width(), desktopArea.height());
+ winlist[i]->setGeometryNow( QRect( desktopArea.x(), desktopArea.y(), desktopArea.width(), desktopArea.height()) );
}else if(type=="under-mouse"){
QPoint ct = QCursor::pos();
geom = QRect(ct.x()-(geom.width()/2), ct.y()-(geom.height()/2), geom.width(), geom.height() );
//Now verify that the top of the window is still contained within the desktop area
if(geom.y() < desktopArea.y() ){ geom.moveTop(desktopArea.y()); }
- winlist[i]->setGeometry(geom);
+ winlist[i]->setGeometryNow(geom);
}
//qDebug() << " - New Geometry:" << winlist[i]->geometry();
@@ -65,31 +75,31 @@ void RootWindow::arrangeWindows(RootSubWindow *primary, QString type, bool prima
// ================
// Public slots for starting the arrangement routine(s) above
// ================
-void RootWindow::ArrangeWindows(WId primary, QString type){
- RootSubWindow* win = windowForId(primary);
+void NativeWindowSystem::ArrangeWindows(WId primary, QString type){
+ NativeWindowObject* win = findWindow(primary);
if(type.isEmpty()){ type = "center"; } //grab the default arrangement format
arrangeWindows(win, type);
}
-void RootWindow::TileWindows(WId primary, QString type){
- RootSubWindow* win = windowForId(primary);
+void NativeWindowSystem::TileWindows(WId primary, QString type){
+ NativeWindowObject* win = findWindow(primary);
if(type.isEmpty()){ type = "single_max"; } //grab the default arrangement format for tiling
arrangeWindows(win, type);
}
-void RootWindow::CheckWindowPosition(WId id, bool newwindow){
+void NativeWindowSystem::CheckWindowPosition(WId id, bool newwindow){
//used after a "drop" to validate/snap/re-arrange window(s) as needed
// if "newwindow" is true, then this is the first-placement routine for a window before it initially appears
- RootSubWindow* win = windowForId(id);
+ NativeWindowObject* win = findWindow(id);
if(win==0){ return; } //invalid window
- QRect geom = win->nativeWindow()->geometry();
+ QRect geom = win->geometry();
bool changed = false;
//Make sure it is on the screen (quick check)
if(geom.x() < 0){ changed = true; geom.moveLeft(0); }
if(geom.y() < 0){ changed = true; geom.moveTop(0); }
if(geom.width() < 20){ changed = true; geom.setWidth(100); }
if(geom.height() < 20){ changed = true; geom.setHeight(100); }
- if(changed){ win->setGeometry(geom); }
+ if(changed){ win->setGeometryNow(geom); }
//Now run it through the window arrangement routine
arrangeWindows(win, newwindow ?"center" : "snap", true);
}
diff --git a/src-qt5/core/lumina-desktop-unified/src-events/events.pri b/src-qt5/core/lumina-desktop-unified/src-events/events.pri
index 48d500ed..3f586e8b 100644
--- a/src-qt5/core/lumina-desktop-unified/src-events/events.pri
+++ b/src-qt5/core/lumina-desktop-unified/src-events/events.pri
@@ -1,10 +1,17 @@
-#SOURCES *= $${PWD}/LXcbEventFilter.cpp
+# Files
+QT *= x11extras
+LIBS *= -lc -lxcb -lxcb-ewmh -lxcb-icccm -lxcb-image -lxcb-composite -lxcb-damage -lxcb-util -lxcb-keysyms -lXdamage
-#HEADERS *= $${PWD}/LXcbEventFilter.h
+SOURCES *= $${PWD}/LShortcutEvents.cpp \
+ $${PWD}/NativeEventFilter.cpp \
+ $${PWD}/NativeKeyToQt.cpp \
+ $${PWD}/NativeWindowSystem.cpp \
+ $${PWD}/Window-mgmt.cpp
-#Shortcut event files
-SOURCES *= $${PWD}/LShortcutEvents.cpp
-HEADERS *= $${PWD}/LShortcutEvents.h
-#update the includepath so we can just (#include <LXcbEventFilter.h>) as needed without paths
+HEADERS *= $${PWD}/LShortcutEvents.h \
+ $${PWD}/NativeEventFilter.h \
+ $${PWD}/NativeWindowSystem.h
+
+#update the includepath so we can just (#include <NativeEventFilter.h>) as needed without paths
INCLUDEPATH *= ${PWD}
diff --git a/src-qt5/core/lumina-desktop-unified/src-screensaver/LScreenSaver.cpp b/src-qt5/core/lumina-desktop-unified/src-screensaver/LScreenSaver.cpp
index a0edde9f..bd812744 100644
--- a/src-qt5/core/lumina-desktop-unified/src-screensaver/LScreenSaver.cpp
+++ b/src-qt5/core/lumina-desktop-unified/src-screensaver/LScreenSaver.cpp
@@ -17,6 +17,8 @@ LScreenSaver::LScreenSaver() : QWidget(0,Qt::BypassWindowManagerHint | Qt::Windo
locktimer->setSingleShot(true);
hidetimer = new QTimer(this);
hidetimer->setSingleShot(true);
+ mouseCheckTimer = new QTimer(this);
+ mouseCheckTimer->setInterval(10000); //10 seconds - fallback timer for mouse movement detection
LOCKER = new LLockScreen(this);
LOCKER->hide();
@@ -27,6 +29,7 @@ LScreenSaver::LScreenSaver() : QWidget(0,Qt::BypassWindowManagerHint | Qt::Windo
connect(starttimer, SIGNAL(timeout()), this, SLOT(ShowScreenSaver()) );
connect(locktimer, SIGNAL(timeout()), this, SLOT(LockScreen()) );
connect(hidetimer, SIGNAL(timeout()), this, SLOT(HideLockScreen()) );
+ connect(mouseCheckTimer, SIGNAL(timeout()), this, SLOT(checkMousePosition()) );
connect(LOCKER, SIGNAL(ScreenUnlocked()), this, SLOT(SSFinished()) );
connect(LOCKER, SIGNAL(InputDetected()), this, SLOT(newInputEvent()) );
}
@@ -56,6 +59,7 @@ void LScreenSaver::UpdateTimers(){
void LScreenSaver::start(){
reloadSettings(); //setup all the initial time frames
starttimer->start();
+ mouseCheckTimer->start();
}
void LScreenSaver::reloadSettings(){
@@ -76,6 +80,7 @@ void LScreenSaver::newInputEvent(){
//Only running, not locked
HideScreenSaver();
}
+ lastMousePos = QCursor::pos(); //update the internal point
UpdateTimers();
}
@@ -87,6 +92,13 @@ void LScreenSaver::LockScreenNow(){
// ===========
// PRIVATE SLOTS
// ===========
+void LScreenSaver::checkMousePosition(){
+ QPoint pos = QCursor::pos();
+ if(pos != lastMousePos){
+ newInputEvent(); //this will update the internal position automatically
+ }
+}
+
void LScreenSaver::ShowScreenSaver(){
if(DEBUG){ qDebug() << "Showing Screen Saver:" << QDateTime::currentDateTime().toString(); }
//QApplication::setOverrideCursor(QCursor::BlankCursor);
diff --git a/src-qt5/core/lumina-desktop-unified/src-screensaver/LScreenSaver.h b/src-qt5/core/lumina-desktop-unified/src-screensaver/LScreenSaver.h
index 2276fb6d..eec42481 100644
--- a/src-qt5/core/lumina-desktop-unified/src-screensaver/LScreenSaver.h
+++ b/src-qt5/core/lumina-desktop-unified/src-screensaver/LScreenSaver.h
@@ -21,9 +21,10 @@ public:
bool isLocked();
private:
- QTimer *starttimer, *locktimer, *hidetimer;
+ QTimer *starttimer, *locktimer, *hidetimer, *mouseCheckTimer;
QList<SSBaseWidget*> BASES;
LLockScreen *LOCKER;
+ QPoint lastMousePos;
int cBright;
bool SSRunning, SSLocked, updating;
@@ -36,6 +37,7 @@ public slots:
void LockScreenNow();
private slots:
+ void checkMousePosition();
void ShowScreenSaver();
void ShowLockScreen();
void HideScreenSaver();
diff --git a/src-qt5/core/lumina-desktop/LSession.cpp b/src-qt5/core/lumina-desktop/LSession.cpp
index dab30f01..c1f49fc3 100644
--- a/src-qt5/core/lumina-desktop/LSession.cpp
+++ b/src-qt5/core/lumina-desktop/LSession.cpp
@@ -29,6 +29,7 @@ XCBEventFilter *evFilter = 0;
LIconCache *ICONS = 0;
LSession::LSession(int &argc, char ** argv) : LSingleApplication(argc, argv, "lumina-desktop"){
+ xchange = false;
if(this->isPrimaryProcess()){
connect(this, SIGNAL(InputsAvailable(QStringList)), this, SLOT(NewCommunication(QStringList)) );
this->setApplicationName("Lumina Desktop Environment");
@@ -272,7 +273,7 @@ void LSession::NewCommunication(QStringList list){
screensChanged();
}else if(list[i]=="--show-start"){
emit StartButtonActivated();
- }
+ }else if(list[i]=="--logout"){ QTimer::singleShot(1000, this, SLOT(StartLogout()));}
}
}
@@ -346,6 +347,8 @@ void LSession::watcherChange(QString changed){
//qDebug() << "Set Qt5 theme engine: " << engine;
if(engine.isEmpty()){ unsetenv("QT_QPA_PLATFORMTHEME"); }
else{ setenv("QT_QPA_PLATFORMTHEME", engine.toUtf8().data(),1); }
+ }else{
+ setenv("QT_QPA_PLATFORMTHEME", "lthemeengine",1); //ensure the lumina theme engine is always enabled
}
emit SessionConfigChanged();
}else if(changed.endsWith("desktopsettings.conf") ){ emit DesktopConfigChanged(); }
diff --git a/src-qt5/core/lumina-desktop/desktop-plugins/applauncher/AppLauncherPlugin.cpp b/src-qt5/core/lumina-desktop/desktop-plugins/applauncher/AppLauncherPlugin.cpp
index 0bf087c1..837e3268 100644
--- a/src-qt5/core/lumina-desktop/desktop-plugins/applauncher/AppLauncherPlugin.cpp
+++ b/src-qt5/core/lumina-desktop/desktop-plugins/applauncher/AppLauncherPlugin.cpp
@@ -47,6 +47,7 @@ void AppLauncherPlugin::loadButton(){
bool ok = info.canonicalPath().startsWith("/net/");
if(!ok){ ok = QFile::exists(path); } //do it this way to ensure the file existance check never runs for /net/ files
if(!ok){ emit RemovePlugin(this->ID()); return;}
+ this->setAcceptDrops( info.isDir() );
icosize = this->height()-4 - 2.2*button->fontMetrics().height();
button->setFixedSize( this->width()-4, this->height()-4);
button->setIconSize( QSize(icosize,icosize) );
@@ -316,3 +317,18 @@ void AppLauncherPlugin::renameFinished(int result){
qDebug() << " - SUCCESS";
}
}
+
+void AppLauncherPlugin::fileDrop(bool copy, QList<QUrl> urls){
+ for(int i=0; i<urls.length(); i++){
+ QString oldpath = urls[i].toLocalFile();
+ if(!QFile::exists(oldpath)){ continue; } //not a local file?
+ QString filename = oldpath.section("/",-1);
+ if(copy){
+ qDebug() << "Copying File:" << oldpath << "->" << button->whatsThis()+"/"+filename;
+ QFile::copy(oldpath, button->whatsThis()+"/"+filename);
+ }else{
+ qDebug() << "Moving File:" << oldpath << "->" << button->whatsThis()+"/"+filename;
+ QFile::rename(oldpath, button->whatsThis()+"/"+filename);
+ }
+ }
+}
diff --git a/src-qt5/core/lumina-desktop/desktop-plugins/applauncher/AppLauncherPlugin.h b/src-qt5/core/lumina-desktop/desktop-plugins/applauncher/AppLauncherPlugin.h
index c8e3a475..6cff4bf7 100644
--- a/src-qt5/core/lumina-desktop/desktop-plugins/applauncher/AppLauncherPlugin.h
+++ b/src-qt5/core/lumina-desktop/desktop-plugins/applauncher/AppLauncherPlugin.h
@@ -18,6 +18,9 @@
#include <QTimer>
#include <QMenu>
#include <QCursor>
+#include <QDrag>
+#include <QMimeData>
+#include <QtConcurrent>
#include "../LDPlugin.h"
@@ -38,6 +41,7 @@ private:
QInputDialog *inputDLG;
QString iconID;
int icosize;
+ QPoint dragstartpos;
private slots:
void loadButton();
@@ -59,6 +63,8 @@ private slots:
void fileRename();
void renameFinished(int result);
+ void fileDrop(bool copy, QList<QUrl> urls);
+
public slots:
void LocaleChange(){
loadButton(); //force reload
@@ -74,5 +80,51 @@ protected:
QEvent::Type tmp = ev->type();
if(tmp == QEvent::StyleChange || tmp==QEvent::ThemeChange || tmp==QEvent::LanguageChange || tmp==QEvent::LocaleChange){ loadButton(); }
}
+
+ void mousePressEvent(QMouseEvent *ev){
+ if(ev->button()==Qt::LeftButton){
+ dragstartpos = ev->pos();
+ }
+ }
+
+ void mouseMoveEvent(QMouseEvent *ev){
+ if( (ev->buttons() & Qt::LeftButton) ){
+ if((ev->pos() - dragstartpos).manhattanLength() > (this->width()/4) ){
+ //Start the drag event for this file
+ QDrag *drag = new QDrag(this);
+ QMimeData *md = new QMimeData;
+ md->setUrls( QList<QUrl>() << QUrl::fromLocalFile(button->whatsThis()) );
+ drag->setMimeData(md);
+ //Now perform the drag and react appropriately
+ Qt::DropAction dropAction = drag->exec(Qt::CopyAction | Qt::MoveAction);
+ if(dropAction == Qt::MoveAction){
+ // File Moved, remove it from here
+ //qDebug() << "File Moved:" << button->whatsThis();
+ //DO NOT DELETE FILES - return code often is wrong (browser drops for instance)
+ }
+ }
+ }else{
+ LDPlugin::mouseMoveEvent(ev);
+ }
+ }
+
+ void dragEnterEvent(QDragEnterEvent *ev){
+ if(ev->mimeData()->hasUrls() && this->acceptDrops()){ ev->acceptProposedAction(); }
+ }
+
+ void dropEvent(QDropEvent *ev){
+ QList<QUrl> urls = ev->mimeData()->urls();
+ bool ok = !urls.isEmpty() && this->acceptDrops();
+ if(ok){
+ if(ev->proposedAction() == Qt::MoveAction){
+ ev->setDropAction(Qt::MoveAction);
+ QtConcurrent::run(this, &AppLauncherPlugin::fileDrop, false, urls);
+ }else if(ev->proposedAction() == Qt::CopyAction){
+ ev->setDropAction(Qt::CopyAction);
+ QtConcurrent::run(this, &AppLauncherPlugin::fileDrop, true, urls);
+ }else{ ok = false; }
+ }
+ if(ok){ ev->acceptProposedAction(); }
+ }
};
#endif
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_af.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_af.ts
index 2f9340c6..b7440a58 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_af.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_af.ts
@@ -664,12 +664,12 @@
<context>
<name>LBattery</name>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="96"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="98"/>
<source>%1 % (Charging)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="97"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="99"/>
<source>%1 % (%2 Remaining)</source>
<translation type="unfinished"></translation>
</message>
@@ -855,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="165"/>
- <location filename="../LSession.cpp" line="352"/>
+ <location filename="../LSession.cpp" line="166"/>
+ <location filename="../LSession.cpp" line="355"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
@@ -1301,37 +1301,37 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="143"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
<source>Feed URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="144"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
<source>Title: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
<source>Description: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
<source>Website: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
<source>Last Build Date: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="150"/>
<source>Last Sync: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="151"/>
<source>Next Sync: %1</source>
<translation type="unfinished"></translation>
</message>
@@ -1517,43 +1517,43 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="55"/>
+ <location filename="../SystemWindow.ui" line="68"/>
<source>Log Out</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="71"/>
+ <location filename="../SystemWindow.ui" line="84"/>
<source>Restart</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="87"/>
+ <location filename="../SystemWindow.ui" line="100"/>
<source>Power Off</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="132"/>
+ <location filename="../SystemWindow.ui" line="145"/>
<source>Update Now</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="154"/>
+ <location filename="../SystemWindow.ui" line="167"/>
<source>Updates ready to install</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="192"/>
+ <location filename="../SystemWindow.ui" line="205"/>
<location filename="../SystemWindow.cpp" line="63"/>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="221"/>
+ <location filename="../SystemWindow.ui" line="234"/>
<source>Lock</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="237"/>
+ <location filename="../SystemWindow.ui" line="250"/>
<source>Suspend</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ar.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ar.ts
index 2f9340c6..b7440a58 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ar.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ar.ts
@@ -664,12 +664,12 @@
<context>
<name>LBattery</name>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="96"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="98"/>
<source>%1 % (Charging)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="97"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="99"/>
<source>%1 % (%2 Remaining)</source>
<translation type="unfinished"></translation>
</message>
@@ -855,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="165"/>
- <location filename="../LSession.cpp" line="352"/>
+ <location filename="../LSession.cpp" line="166"/>
+ <location filename="../LSession.cpp" line="355"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
@@ -1301,37 +1301,37 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="143"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
<source>Feed URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="144"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
<source>Title: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
<source>Description: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
<source>Website: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
<source>Last Build Date: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="150"/>
<source>Last Sync: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="151"/>
<source>Next Sync: %1</source>
<translation type="unfinished"></translation>
</message>
@@ -1517,43 +1517,43 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="55"/>
+ <location filename="../SystemWindow.ui" line="68"/>
<source>Log Out</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="71"/>
+ <location filename="../SystemWindow.ui" line="84"/>
<source>Restart</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="87"/>
+ <location filename="../SystemWindow.ui" line="100"/>
<source>Power Off</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="132"/>
+ <location filename="../SystemWindow.ui" line="145"/>
<source>Update Now</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="154"/>
+ <location filename="../SystemWindow.ui" line="167"/>
<source>Updates ready to install</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="192"/>
+ <location filename="../SystemWindow.ui" line="205"/>
<location filename="../SystemWindow.cpp" line="63"/>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="221"/>
+ <location filename="../SystemWindow.ui" line="234"/>
<source>Lock</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="237"/>
+ <location filename="../SystemWindow.ui" line="250"/>
<source>Suspend</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_az.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_az.ts
index 2f9340c6..b7440a58 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_az.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_az.ts
@@ -664,12 +664,12 @@
<context>
<name>LBattery</name>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="96"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="98"/>
<source>%1 % (Charging)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="97"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="99"/>
<source>%1 % (%2 Remaining)</source>
<translation type="unfinished"></translation>
</message>
@@ -855,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="165"/>
- <location filename="../LSession.cpp" line="352"/>
+ <location filename="../LSession.cpp" line="166"/>
+ <location filename="../LSession.cpp" line="355"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
@@ -1301,37 +1301,37 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="143"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
<source>Feed URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="144"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
<source>Title: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
<source>Description: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
<source>Website: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
<source>Last Build Date: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="150"/>
<source>Last Sync: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="151"/>
<source>Next Sync: %1</source>
<translation type="unfinished"></translation>
</message>
@@ -1517,43 +1517,43 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="55"/>
+ <location filename="../SystemWindow.ui" line="68"/>
<source>Log Out</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="71"/>
+ <location filename="../SystemWindow.ui" line="84"/>
<source>Restart</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="87"/>
+ <location filename="../SystemWindow.ui" line="100"/>
<source>Power Off</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="132"/>
+ <location filename="../SystemWindow.ui" line="145"/>
<source>Update Now</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="154"/>
+ <location filename="../SystemWindow.ui" line="167"/>
<source>Updates ready to install</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="192"/>
+ <location filename="../SystemWindow.ui" line="205"/>
<location filename="../SystemWindow.cpp" line="63"/>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="221"/>
+ <location filename="../SystemWindow.ui" line="234"/>
<source>Lock</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="237"/>
+ <location filename="../SystemWindow.ui" line="250"/>
<source>Suspend</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_bg.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_bg.ts
index d17703bb..e491dbee 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_bg.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_bg.ts
@@ -664,12 +664,12 @@
<context>
<name>LBattery</name>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="96"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="98"/>
<source>%1 % (Charging)</source>
<translation>%1 % (зарежда се)</translation>
</message>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="97"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="99"/>
<source>%1 % (%2 Remaining)</source>
<translation>%1 % (%2 оставащи)</translation>
</message>
@@ -855,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="165"/>
- <location filename="../LSession.cpp" line="352"/>
+ <location filename="../LSession.cpp" line="166"/>
+ <location filename="../LSession.cpp" line="355"/>
<source>Desktop</source>
<translation>Работен плот</translation>
</message>
@@ -1301,37 +1301,37 @@
<translation>Lumina Desktop RSS</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="143"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
<source>Feed URL: %1</source>
<translation>Адрес на източника: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="144"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
<source>Title: %1</source>
<translation>Заглавие: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
<source>Description: %1</source>
<translation>Описание: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
<source>Website: %1</source>
<translation>Уеб сайт: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
<source>Last Build Date: %1</source>
<translation>Последно обновен: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="150"/>
<source>Last Sync: %1</source>
<translation>Последно синхронизиран: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="151"/>
<source>Next Sync: %1</source>
<translation>Следваща синхронизация: %1</translation>
</message>
@@ -1517,43 +1517,43 @@
<translation>Настройки на системата</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="55"/>
+ <location filename="../SystemWindow.ui" line="68"/>
<source>Log Out</source>
<translation>Отписване</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="71"/>
+ <location filename="../SystemWindow.ui" line="84"/>
<source>Restart</source>
<translation>Рестартиране</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="87"/>
+ <location filename="../SystemWindow.ui" line="100"/>
<source>Power Off</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="132"/>
+ <location filename="../SystemWindow.ui" line="145"/>
<source>Update Now</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="154"/>
+ <location filename="../SystemWindow.ui" line="167"/>
<source>Updates ready to install</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="192"/>
+ <location filename="../SystemWindow.ui" line="205"/>
<location filename="../SystemWindow.cpp" line="63"/>
<source>Cancel</source>
<translation>Отказ</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="221"/>
+ <location filename="../SystemWindow.ui" line="234"/>
<source>Lock</source>
<translation>Заключване</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="237"/>
+ <location filename="../SystemWindow.ui" line="250"/>
<source>Suspend</source>
<translation>Изключване</translation>
</message>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_bn.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_bn.ts
index 2f9340c6..b7440a58 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_bn.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_bn.ts
@@ -664,12 +664,12 @@
<context>
<name>LBattery</name>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="96"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="98"/>
<source>%1 % (Charging)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="97"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="99"/>
<source>%1 % (%2 Remaining)</source>
<translation type="unfinished"></translation>
</message>
@@ -855,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="165"/>
- <location filename="../LSession.cpp" line="352"/>
+ <location filename="../LSession.cpp" line="166"/>
+ <location filename="../LSession.cpp" line="355"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
@@ -1301,37 +1301,37 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="143"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
<source>Feed URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="144"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
<source>Title: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
<source>Description: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
<source>Website: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
<source>Last Build Date: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="150"/>
<source>Last Sync: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="151"/>
<source>Next Sync: %1</source>
<translation type="unfinished"></translation>
</message>
@@ -1517,43 +1517,43 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="55"/>
+ <location filename="../SystemWindow.ui" line="68"/>
<source>Log Out</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="71"/>
+ <location filename="../SystemWindow.ui" line="84"/>
<source>Restart</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="87"/>
+ <location filename="../SystemWindow.ui" line="100"/>
<source>Power Off</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="132"/>
+ <location filename="../SystemWindow.ui" line="145"/>
<source>Update Now</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="154"/>
+ <location filename="../SystemWindow.ui" line="167"/>
<source>Updates ready to install</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="192"/>
+ <location filename="../SystemWindow.ui" line="205"/>
<location filename="../SystemWindow.cpp" line="63"/>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="221"/>
+ <location filename="../SystemWindow.ui" line="234"/>
<source>Lock</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="237"/>
+ <location filename="../SystemWindow.ui" line="250"/>
<source>Suspend</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_bs.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_bs.ts
index 2f9340c6..b7440a58 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_bs.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_bs.ts
@@ -664,12 +664,12 @@
<context>
<name>LBattery</name>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="96"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="98"/>
<source>%1 % (Charging)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="97"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="99"/>
<source>%1 % (%2 Remaining)</source>
<translation type="unfinished"></translation>
</message>
@@ -855,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="165"/>
- <location filename="../LSession.cpp" line="352"/>
+ <location filename="../LSession.cpp" line="166"/>
+ <location filename="../LSession.cpp" line="355"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
@@ -1301,37 +1301,37 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="143"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
<source>Feed URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="144"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
<source>Title: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
<source>Description: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
<source>Website: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
<source>Last Build Date: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="150"/>
<source>Last Sync: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="151"/>
<source>Next Sync: %1</source>
<translation type="unfinished"></translation>
</message>
@@ -1517,43 +1517,43 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="55"/>
+ <location filename="../SystemWindow.ui" line="68"/>
<source>Log Out</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="71"/>
+ <location filename="../SystemWindow.ui" line="84"/>
<source>Restart</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="87"/>
+ <location filename="../SystemWindow.ui" line="100"/>
<source>Power Off</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="132"/>
+ <location filename="../SystemWindow.ui" line="145"/>
<source>Update Now</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="154"/>
+ <location filename="../SystemWindow.ui" line="167"/>
<source>Updates ready to install</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="192"/>
+ <location filename="../SystemWindow.ui" line="205"/>
<location filename="../SystemWindow.cpp" line="63"/>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="221"/>
+ <location filename="../SystemWindow.ui" line="234"/>
<source>Lock</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="237"/>
+ <location filename="../SystemWindow.ui" line="250"/>
<source>Suspend</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ca.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ca.ts
index 4a65596e..c0183f05 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ca.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ca.ts
@@ -664,12 +664,12 @@
<context>
<name>LBattery</name>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="96"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="98"/>
<source>%1 % (Charging)</source>
<translation>%1 % (Carregant)</translation>
</message>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="97"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="99"/>
<source>%1 % (%2 Remaining)</source>
<translation>%1 % (resten %2)</translation>
</message>
@@ -855,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="165"/>
- <location filename="../LSession.cpp" line="352"/>
+ <location filename="../LSession.cpp" line="166"/>
+ <location filename="../LSession.cpp" line="355"/>
<source>Desktop</source>
<translation>Escriptori</translation>
</message>
@@ -1301,37 +1301,37 @@
<translation>RSS de l&apos;escriptori Lumina</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="143"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
<source>Feed URL: %1</source>
<translation>URL del canal: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="144"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
<source>Title: %1</source>
<translation>Títol: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
<source>Description: %1</source>
<translation>Descripció: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
<source>Website: %1</source>
<translation>Lloc web: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
<source>Last Build Date: %1</source>
<translation>Data de l&apos;última construcció: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="150"/>
<source>Last Sync: %1</source>
<translation>Última sincronització: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="151"/>
<source>Next Sync: %1</source>
<translation>Propera sincronització: %1</translation>
</message>
@@ -1517,43 +1517,43 @@
<translation>Opcions del sistema</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="55"/>
+ <location filename="../SystemWindow.ui" line="68"/>
<source>Log Out</source>
<translation>Surt</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="71"/>
+ <location filename="../SystemWindow.ui" line="84"/>
<source>Restart</source>
<translation>Reinicia</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="87"/>
+ <location filename="../SystemWindow.ui" line="100"/>
<source>Power Off</source>
<translation>Atura</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="132"/>
+ <location filename="../SystemWindow.ui" line="145"/>
<source>Update Now</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="154"/>
+ <location filename="../SystemWindow.ui" line="167"/>
<source>Updates ready to install</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="192"/>
+ <location filename="../SystemWindow.ui" line="205"/>
<location filename="../SystemWindow.cpp" line="63"/>
<source>Cancel</source>
<translation>Cancel·la</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="221"/>
+ <location filename="../SystemWindow.ui" line="234"/>
<source>Lock</source>
<translation>Bloqueja</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="237"/>
+ <location filename="../SystemWindow.ui" line="250"/>
<source>Suspend</source>
<translation>Atura temporalment</translation>
</message>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_cs.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_cs.ts
index eab383cb..0cca1e1b 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_cs.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_cs.ts
@@ -664,12 +664,12 @@
<context>
<name>LBattery</name>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="96"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="98"/>
<source>%1 % (Charging)</source>
<translation>%1 % (Nabíjení)</translation>
</message>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="97"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="99"/>
<source>%1 % (%2 Remaining)</source>
<translation>%1 % (%2 Zbývá)</translation>
</message>
@@ -855,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="165"/>
- <location filename="../LSession.cpp" line="352"/>
+ <location filename="../LSession.cpp" line="166"/>
+ <location filename="../LSession.cpp" line="355"/>
<source>Desktop</source>
<translation>Plocha</translation>
</message>
@@ -1301,37 +1301,37 @@
<translation>RSS kanál prostředí Lumina</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="143"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
<source>Feed URL: %1</source>
<translation>URL adresa kanálu: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="144"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
<source>Title: %1</source>
<translation>Název: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
<source>Description: %1</source>
<translation>Popis: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
<source>Website: %1</source>
<translation>Webová stránka: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
<source>Last Build Date: %1</source>
<translation>Datum minulého sestavení: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="150"/>
<source>Last Sync: %1</source>
<translation>Minulá synchronizace: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="151"/>
<source>Next Sync: %1</source>
<translation>Příští synchronizace: %1</translation>
</message>
@@ -1517,43 +1517,43 @@
<translation>Předvolby systému</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="55"/>
+ <location filename="../SystemWindow.ui" line="68"/>
<source>Log Out</source>
<translation>Odhlásit se</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="71"/>
+ <location filename="../SystemWindow.ui" line="84"/>
<source>Restart</source>
<translation>Restartovat</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="87"/>
+ <location filename="../SystemWindow.ui" line="100"/>
<source>Power Off</source>
<translation>Vypnout</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="132"/>
+ <location filename="../SystemWindow.ui" line="145"/>
<source>Update Now</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="154"/>
+ <location filename="../SystemWindow.ui" line="167"/>
<source>Updates ready to install</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="192"/>
+ <location filename="../SystemWindow.ui" line="205"/>
<location filename="../SystemWindow.cpp" line="63"/>
<source>Cancel</source>
<translation>Storno</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="221"/>
+ <location filename="../SystemWindow.ui" line="234"/>
<source>Lock</source>
<translation>Zamknout</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="237"/>
+ <location filename="../SystemWindow.ui" line="250"/>
<source>Suspend</source>
<translation>Uspat do paměti</translation>
</message>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_cy.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_cy.ts
index 2f9340c6..b7440a58 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_cy.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_cy.ts
@@ -664,12 +664,12 @@
<context>
<name>LBattery</name>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="96"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="98"/>
<source>%1 % (Charging)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="97"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="99"/>
<source>%1 % (%2 Remaining)</source>
<translation type="unfinished"></translation>
</message>
@@ -855,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="165"/>
- <location filename="../LSession.cpp" line="352"/>
+ <location filename="../LSession.cpp" line="166"/>
+ <location filename="../LSession.cpp" line="355"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
@@ -1301,37 +1301,37 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="143"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
<source>Feed URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="144"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
<source>Title: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
<source>Description: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
<source>Website: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
<source>Last Build Date: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="150"/>
<source>Last Sync: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="151"/>
<source>Next Sync: %1</source>
<translation type="unfinished"></translation>
</message>
@@ -1517,43 +1517,43 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="55"/>
+ <location filename="../SystemWindow.ui" line="68"/>
<source>Log Out</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="71"/>
+ <location filename="../SystemWindow.ui" line="84"/>
<source>Restart</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="87"/>
+ <location filename="../SystemWindow.ui" line="100"/>
<source>Power Off</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="132"/>
+ <location filename="../SystemWindow.ui" line="145"/>
<source>Update Now</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="154"/>
+ <location filename="../SystemWindow.ui" line="167"/>
<source>Updates ready to install</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="192"/>
+ <location filename="../SystemWindow.ui" line="205"/>
<location filename="../SystemWindow.cpp" line="63"/>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="221"/>
+ <location filename="../SystemWindow.ui" line="234"/>
<source>Lock</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="237"/>
+ <location filename="../SystemWindow.ui" line="250"/>
<source>Suspend</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_da.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_da.ts
index 2507a671..629f85ef 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_da.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_da.ts
@@ -664,12 +664,12 @@
<context>
<name>LBattery</name>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="96"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="98"/>
<source>%1 % (Charging)</source>
<translation>%1 % (lader)</translation>
</message>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="97"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="99"/>
<source>%1 % (%2 Remaining)</source>
<translation>%1 % (%2 tilbage)</translation>
</message>
@@ -855,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="165"/>
- <location filename="../LSession.cpp" line="352"/>
+ <location filename="../LSession.cpp" line="166"/>
+ <location filename="../LSession.cpp" line="355"/>
<source>Desktop</source>
<translation>Skrivebord</translation>
</message>
@@ -1301,37 +1301,37 @@
<translation>Lumina-skrivebordets RSS-læser</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="143"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
<source>Feed URL: %1</source>
<translation>Feed-URL: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="144"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
<source>Title: %1</source>
<translation>Titel: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
<source>Description: %1</source>
<translation>Beskrivelse: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
<source>Website: %1</source>
<translation>Hjemmeside: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
<source>Last Build Date: %1</source>
<translation>Seneste byggedato: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="150"/>
<source>Last Sync: %1</source>
<translation>Seneste synkronisering: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="151"/>
<source>Next Sync: %1</source>
<translation>Næste synkronisering: %1</translation>
</message>
@@ -1517,43 +1517,43 @@
<translation>Systemvalgmuligheder</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="55"/>
+ <location filename="../SystemWindow.ui" line="68"/>
<source>Log Out</source>
<translation>Log ud</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="71"/>
+ <location filename="../SystemWindow.ui" line="84"/>
<source>Restart</source>
<translation>Genstart</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="87"/>
+ <location filename="../SystemWindow.ui" line="100"/>
<source>Power Off</source>
<translation>Sluk</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="132"/>
+ <location filename="../SystemWindow.ui" line="145"/>
<source>Update Now</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="154"/>
+ <location filename="../SystemWindow.ui" line="167"/>
<source>Updates ready to install</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="192"/>
+ <location filename="../SystemWindow.ui" line="205"/>
<location filename="../SystemWindow.cpp" line="63"/>
<source>Cancel</source>
<translation>Annuller</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="221"/>
+ <location filename="../SystemWindow.ui" line="234"/>
<source>Lock</source>
<translation>Lås</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="237"/>
+ <location filename="../SystemWindow.ui" line="250"/>
<source>Suspend</source>
<translation>Dvale</translation>
</message>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_de.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_de.ts
index 65b16cdd..8aab1f1d 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_de.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_de.ts
@@ -664,12 +664,12 @@
<context>
<name>LBattery</name>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="96"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="98"/>
<source>%1 % (Charging)</source>
<translation>%1 % (Aufladen)</translation>
</message>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="97"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="99"/>
<source>%1 % (%2 Remaining)</source>
<translation>%1 % (%2 verbleibend)</translation>
</message>
@@ -855,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="165"/>
- <location filename="../LSession.cpp" line="352"/>
+ <location filename="../LSession.cpp" line="166"/>
+ <location filename="../LSession.cpp" line="355"/>
<source>Desktop</source>
<translation>Arbeitsfläche</translation>
</message>
@@ -1301,37 +1301,37 @@
<translation type="unfinished">Lumina Desktop RSS</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="143"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
<source>Feed URL: %1</source>
<translation>Feed-URL: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="144"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
<source>Title: %1</source>
<translation>Titel: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
<source>Description: %1</source>
<translation>Beschreibung: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
<source>Website: %1</source>
<translation>Internet-Seite: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
<source>Last Build Date: %1</source>
<translation>Letzte Erstellung: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="150"/>
<source>Last Sync: %1</source>
<translation>Letzter Abgleich: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="151"/>
<source>Next Sync: %1</source>
<translation>Nächster Abgleich: %1</translation>
</message>
@@ -1517,43 +1517,43 @@
<translation>Systemoptionen</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="55"/>
+ <location filename="../SystemWindow.ui" line="68"/>
<source>Log Out</source>
<translation>Abmelden</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="71"/>
+ <location filename="../SystemWindow.ui" line="84"/>
<source>Restart</source>
<translation>Neustart</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="87"/>
+ <location filename="../SystemWindow.ui" line="100"/>
<source>Power Off</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="132"/>
+ <location filename="../SystemWindow.ui" line="145"/>
<source>Update Now</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="154"/>
+ <location filename="../SystemWindow.ui" line="167"/>
<source>Updates ready to install</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="192"/>
+ <location filename="../SystemWindow.ui" line="205"/>
<location filename="../SystemWindow.cpp" line="63"/>
<source>Cancel</source>
<translation>Abbrechen</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="221"/>
+ <location filename="../SystemWindow.ui" line="234"/>
<source>Lock</source>
<translation>Sperren</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="237"/>
+ <location filename="../SystemWindow.ui" line="250"/>
<source>Suspend</source>
<translation>In Bereitschaft versetzen</translation>
</message>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_el.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_el.ts
index 341f847d..d0e3142f 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_el.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_el.ts
@@ -664,12 +664,12 @@
<context>
<name>LBattery</name>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="96"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="98"/>
<source>%1 % (Charging)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="97"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="99"/>
<source>%1 % (%2 Remaining)</source>
<translation type="unfinished"></translation>
</message>
@@ -855,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="165"/>
- <location filename="../LSession.cpp" line="352"/>
+ <location filename="../LSession.cpp" line="166"/>
+ <location filename="../LSession.cpp" line="355"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
@@ -1301,37 +1301,37 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="143"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
<source>Feed URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="144"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
<source>Title: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
<source>Description: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
<source>Website: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
<source>Last Build Date: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="150"/>
<source>Last Sync: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="151"/>
<source>Next Sync: %1</source>
<translation type="unfinished"></translation>
</message>
@@ -1517,43 +1517,43 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="55"/>
+ <location filename="../SystemWindow.ui" line="68"/>
<source>Log Out</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="71"/>
+ <location filename="../SystemWindow.ui" line="84"/>
<source>Restart</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="87"/>
+ <location filename="../SystemWindow.ui" line="100"/>
<source>Power Off</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="132"/>
+ <location filename="../SystemWindow.ui" line="145"/>
<source>Update Now</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="154"/>
+ <location filename="../SystemWindow.ui" line="167"/>
<source>Updates ready to install</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="192"/>
+ <location filename="../SystemWindow.ui" line="205"/>
<location filename="../SystemWindow.cpp" line="63"/>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="221"/>
+ <location filename="../SystemWindow.ui" line="234"/>
<source>Lock</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="237"/>
+ <location filename="../SystemWindow.ui" line="250"/>
<source>Suspend</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_en_AU.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_en_AU.ts
index 52d0e88f..30e03f6d 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_en_AU.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_en_AU.ts
@@ -664,12 +664,12 @@
<context>
<name>LBattery</name>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="96"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="98"/>
<source>%1 % (Charging)</source>
<translation>%1 % (Charging)</translation>
</message>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="97"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="99"/>
<source>%1 % (%2 Remaining)</source>
<translation>%1 % (%2 Remaining)</translation>
</message>
@@ -855,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="165"/>
- <location filename="../LSession.cpp" line="352"/>
+ <location filename="../LSession.cpp" line="166"/>
+ <location filename="../LSession.cpp" line="355"/>
<source>Desktop</source>
<translation>Desktop</translation>
</message>
@@ -1301,37 +1301,37 @@
<translation>Lumina Desktop RSS</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="143"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
<source>Feed URL: %1</source>
<translation>Feed URL: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="144"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
<source>Title: %1</source>
<translation>Title: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
<source>Description: %1</source>
<translation>Description: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
<source>Website: %1</source>
<translation>Website: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
<source>Last Build Date: %1</source>
<translation>Last Build Date: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="150"/>
<source>Last Sync: %1</source>
<translation>Last Sync: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="151"/>
<source>Next Sync: %1</source>
<translation>Next Sync: %1</translation>
</message>
@@ -1517,43 +1517,43 @@
<translation>System Options</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="55"/>
+ <location filename="../SystemWindow.ui" line="68"/>
<source>Log Out</source>
<translation>Log Out</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="71"/>
+ <location filename="../SystemWindow.ui" line="84"/>
<source>Restart</source>
<translation>Restart</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="87"/>
+ <location filename="../SystemWindow.ui" line="100"/>
<source>Power Off</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="132"/>
+ <location filename="../SystemWindow.ui" line="145"/>
<source>Update Now</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="154"/>
+ <location filename="../SystemWindow.ui" line="167"/>
<source>Updates ready to install</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="192"/>
+ <location filename="../SystemWindow.ui" line="205"/>
<location filename="../SystemWindow.cpp" line="63"/>
<source>Cancel</source>
<translation>Cancel</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="221"/>
+ <location filename="../SystemWindow.ui" line="234"/>
<source>Lock</source>
<translation>Lock</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="237"/>
+ <location filename="../SystemWindow.ui" line="250"/>
<source>Suspend</source>
<translation>Suspend</translation>
</message>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_en_GB.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_en_GB.ts
index ad847d47..36bfd83c 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_en_GB.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_en_GB.ts
@@ -664,12 +664,12 @@
<context>
<name>LBattery</name>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="96"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="98"/>
<source>%1 % (Charging)</source>
<translation>%1 % (Charging)</translation>
</message>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="97"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="99"/>
<source>%1 % (%2 Remaining)</source>
<translation>%1 % (%2 Remaining)</translation>
</message>
@@ -855,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="165"/>
- <location filename="../LSession.cpp" line="352"/>
+ <location filename="../LSession.cpp" line="166"/>
+ <location filename="../LSession.cpp" line="355"/>
<source>Desktop</source>
<translation>Desktop</translation>
</message>
@@ -1301,37 +1301,37 @@
<translation>Lumina Desktop RSS</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="143"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
<source>Feed URL: %1</source>
<translation>Feed URL: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="144"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
<source>Title: %1</source>
<translation>Title: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
<source>Description: %1</source>
<translation>Description: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
<source>Website: %1</source>
<translation>Website: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
<source>Last Build Date: %1</source>
<translation>Last Build Date: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="150"/>
<source>Last Sync: %1</source>
<translation>Last Sync: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="151"/>
<source>Next Sync: %1</source>
<translation>Next Sync: %1</translation>
</message>
@@ -1517,43 +1517,43 @@
<translation>System Options</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="55"/>
+ <location filename="../SystemWindow.ui" line="68"/>
<source>Log Out</source>
<translation>Log Out</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="71"/>
+ <location filename="../SystemWindow.ui" line="84"/>
<source>Restart</source>
<translation>Restart</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="87"/>
+ <location filename="../SystemWindow.ui" line="100"/>
<source>Power Off</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="132"/>
+ <location filename="../SystemWindow.ui" line="145"/>
<source>Update Now</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="154"/>
+ <location filename="../SystemWindow.ui" line="167"/>
<source>Updates ready to install</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="192"/>
+ <location filename="../SystemWindow.ui" line="205"/>
<location filename="../SystemWindow.cpp" line="63"/>
<source>Cancel</source>
<translation>Cancel</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="221"/>
+ <location filename="../SystemWindow.ui" line="234"/>
<source>Lock</source>
<translation>Lock</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="237"/>
+ <location filename="../SystemWindow.ui" line="250"/>
<source>Suspend</source>
<translation>Suspend</translation>
</message>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_en_ZA.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_en_ZA.ts
index 2f9340c6..b7440a58 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_en_ZA.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_en_ZA.ts
@@ -664,12 +664,12 @@
<context>
<name>LBattery</name>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="96"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="98"/>
<source>%1 % (Charging)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="97"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="99"/>
<source>%1 % (%2 Remaining)</source>
<translation type="unfinished"></translation>
</message>
@@ -855,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="165"/>
- <location filename="../LSession.cpp" line="352"/>
+ <location filename="../LSession.cpp" line="166"/>
+ <location filename="../LSession.cpp" line="355"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
@@ -1301,37 +1301,37 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="143"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
<source>Feed URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="144"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
<source>Title: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
<source>Description: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
<source>Website: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
<source>Last Build Date: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="150"/>
<source>Last Sync: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="151"/>
<source>Next Sync: %1</source>
<translation type="unfinished"></translation>
</message>
@@ -1517,43 +1517,43 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="55"/>
+ <location filename="../SystemWindow.ui" line="68"/>
<source>Log Out</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="71"/>
+ <location filename="../SystemWindow.ui" line="84"/>
<source>Restart</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="87"/>
+ <location filename="../SystemWindow.ui" line="100"/>
<source>Power Off</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="132"/>
+ <location filename="../SystemWindow.ui" line="145"/>
<source>Update Now</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="154"/>
+ <location filename="../SystemWindow.ui" line="167"/>
<source>Updates ready to install</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="192"/>
+ <location filename="../SystemWindow.ui" line="205"/>
<location filename="../SystemWindow.cpp" line="63"/>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="221"/>
+ <location filename="../SystemWindow.ui" line="234"/>
<source>Lock</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="237"/>
+ <location filename="../SystemWindow.ui" line="250"/>
<source>Suspend</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_es.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_es.ts
index 60c6c305..a0403866 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_es.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_es.ts
@@ -664,12 +664,12 @@
<context>
<name>LBattery</name>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="96"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="98"/>
<source>%1 % (Charging)</source>
<translation>%1 % (Cargando)</translation>
</message>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="97"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="99"/>
<source>%1 % (%2 Remaining)</source>
<translation>%1 % (%2 Restante)</translation>
</message>
@@ -855,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="165"/>
- <location filename="../LSession.cpp" line="352"/>
+ <location filename="../LSession.cpp" line="166"/>
+ <location filename="../LSession.cpp" line="355"/>
<source>Desktop</source>
<translation>Escritorio</translation>
</message>
@@ -1301,37 +1301,37 @@
<translation>RSS del Escritorio Lumina</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="143"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
<source>Feed URL: %1</source>
<translation>URL del Feed: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="144"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
<source>Title: %1</source>
<translation>Título: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
<source>Description: %1</source>
<translation>Descripción: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
<source>Website: %1</source>
<translation>Sitio Web: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
<source>Last Build Date: %1</source>
<translation>Última Actualización: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="150"/>
<source>Last Sync: %1</source>
<translation>Última Sincronización: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="151"/>
<source>Next Sync: %1</source>
<translation>Siguiente Sincronización: %1</translation>
</message>
@@ -1517,43 +1517,43 @@
<translation>Opciones del Sistema</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="55"/>
+ <location filename="../SystemWindow.ui" line="68"/>
<source>Log Out</source>
<translation>Cerrar Sesión</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="71"/>
+ <location filename="../SystemWindow.ui" line="84"/>
<source>Restart</source>
<translation>Reiniciar</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="87"/>
+ <location filename="../SystemWindow.ui" line="100"/>
<source>Power Off</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="132"/>
+ <location filename="../SystemWindow.ui" line="145"/>
<source>Update Now</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="154"/>
+ <location filename="../SystemWindow.ui" line="167"/>
<source>Updates ready to install</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="192"/>
+ <location filename="../SystemWindow.ui" line="205"/>
<location filename="../SystemWindow.cpp" line="63"/>
<source>Cancel</source>
<translation>Cancelar</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="221"/>
+ <location filename="../SystemWindow.ui" line="234"/>
<source>Lock</source>
<translation>Bloquear</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="237"/>
+ <location filename="../SystemWindow.ui" line="250"/>
<source>Suspend</source>
<translation>Suspender</translation>
</message>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_et.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_et.ts
index e1b60acb..09a5ab40 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_et.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_et.ts
@@ -664,12 +664,12 @@
<context>
<name>LBattery</name>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="96"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="98"/>
<source>%1 % (Charging)</source>
<translation>%1% (laeb)</translation>
</message>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="97"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="99"/>
<source>%1 % (%2 Remaining)</source>
<translation>%1% (%2 jäänud)</translation>
</message>
@@ -855,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="165"/>
- <location filename="../LSession.cpp" line="352"/>
+ <location filename="../LSession.cpp" line="166"/>
+ <location filename="../LSession.cpp" line="355"/>
<source>Desktop</source>
<translation>Töölaud</translation>
</message>
@@ -1301,37 +1301,37 @@
<translation>Lumina Töölaua RSS</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="143"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
<source>Feed URL: %1</source>
<translation>Uudisvoo URL: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="144"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
<source>Title: %1</source>
<translation>Pealkiri: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
<source>Description: %1</source>
<translation>Kirjeldus: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
<source>Website: %1</source>
<translation>Veebileht: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
<source>Last Build Date: %1</source>
<translation>Viimane koostamise aeg: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="150"/>
<source>Last Sync: %1</source>
<translation>Viimane sünkr.: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="151"/>
<source>Next Sync: %1</source>
<translation>Järgmine sünkr.: %1</translation>
</message>
@@ -1517,43 +1517,43 @@
<translation>Süsteemi valikud</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="55"/>
+ <location filename="../SystemWindow.ui" line="68"/>
<source>Log Out</source>
<translation>Logi välja</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="71"/>
+ <location filename="../SystemWindow.ui" line="84"/>
<source>Restart</source>
<translation>Taaskäivita</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="87"/>
+ <location filename="../SystemWindow.ui" line="100"/>
<source>Power Off</source>
<translation>Lülita välja</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="132"/>
+ <location filename="../SystemWindow.ui" line="145"/>
<source>Update Now</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="154"/>
+ <location filename="../SystemWindow.ui" line="167"/>
<source>Updates ready to install</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="192"/>
+ <location filename="../SystemWindow.ui" line="205"/>
<location filename="../SystemWindow.cpp" line="63"/>
<source>Cancel</source>
<translation>Loobu</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="221"/>
+ <location filename="../SystemWindow.ui" line="234"/>
<source>Lock</source>
<translation>Lukusta</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="237"/>
+ <location filename="../SystemWindow.ui" line="250"/>
<source>Suspend</source>
<translation>Arvuti peatamine</translation>
</message>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_eu.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_eu.ts
index be61c50d..9316f8df 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_eu.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_eu.ts
@@ -664,12 +664,12 @@
<context>
<name>LBattery</name>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="96"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="98"/>
<source>%1 % (Charging)</source>
<translation>%1 % (Kargatzen)</translation>
</message>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="97"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="99"/>
<source>%1 % (%2 Remaining)</source>
<translation>%1 % (%2 Faltan)</translation>
</message>
@@ -855,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="165"/>
- <location filename="../LSession.cpp" line="352"/>
+ <location filename="../LSession.cpp" line="166"/>
+ <location filename="../LSession.cpp" line="355"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
@@ -1301,37 +1301,37 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="143"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
<source>Feed URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="144"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
<source>Title: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
<source>Description: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
<source>Website: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
<source>Last Build Date: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="150"/>
<source>Last Sync: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="151"/>
<source>Next Sync: %1</source>
<translation type="unfinished"></translation>
</message>
@@ -1517,43 +1517,43 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="55"/>
+ <location filename="../SystemWindow.ui" line="68"/>
<source>Log Out</source>
<translation type="unfinished">Saioa amaitu</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="71"/>
+ <location filename="../SystemWindow.ui" line="84"/>
<source>Restart</source>
<translation>Berrabiarazi</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="87"/>
+ <location filename="../SystemWindow.ui" line="100"/>
<source>Power Off</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="132"/>
+ <location filename="../SystemWindow.ui" line="145"/>
<source>Update Now</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="154"/>
+ <location filename="../SystemWindow.ui" line="167"/>
<source>Updates ready to install</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="192"/>
+ <location filename="../SystemWindow.ui" line="205"/>
<location filename="../SystemWindow.cpp" line="63"/>
<source>Cancel</source>
<translation>Utzi</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="221"/>
+ <location filename="../SystemWindow.ui" line="234"/>
<source>Lock</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="237"/>
+ <location filename="../SystemWindow.ui" line="250"/>
<source>Suspend</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fa.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fa.ts
index c066d6b2..c852493b 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fa.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fa.ts
@@ -664,12 +664,12 @@
<context>
<name>LBattery</name>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="96"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="98"/>
<source>%1 % (Charging)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="97"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="99"/>
<source>%1 % (%2 Remaining)</source>
<translation type="unfinished"></translation>
</message>
@@ -855,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="165"/>
- <location filename="../LSession.cpp" line="352"/>
+ <location filename="../LSession.cpp" line="166"/>
+ <location filename="../LSession.cpp" line="355"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
@@ -1301,37 +1301,37 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="143"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
<source>Feed URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="144"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
<source>Title: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
<source>Description: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
<source>Website: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
<source>Last Build Date: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="150"/>
<source>Last Sync: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="151"/>
<source>Next Sync: %1</source>
<translation type="unfinished"></translation>
</message>
@@ -1517,43 +1517,43 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="55"/>
+ <location filename="../SystemWindow.ui" line="68"/>
<source>Log Out</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="71"/>
+ <location filename="../SystemWindow.ui" line="84"/>
<source>Restart</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="87"/>
+ <location filename="../SystemWindow.ui" line="100"/>
<source>Power Off</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="132"/>
+ <location filename="../SystemWindow.ui" line="145"/>
<source>Update Now</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="154"/>
+ <location filename="../SystemWindow.ui" line="167"/>
<source>Updates ready to install</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="192"/>
+ <location filename="../SystemWindow.ui" line="205"/>
<location filename="../SystemWindow.cpp" line="63"/>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="221"/>
+ <location filename="../SystemWindow.ui" line="234"/>
<source>Lock</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="237"/>
+ <location filename="../SystemWindow.ui" line="250"/>
<source>Suspend</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fi.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fi.ts
index 73bdf6d8..c66d6ae1 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fi.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fi.ts
@@ -664,12 +664,12 @@
<context>
<name>LBattery</name>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="96"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="98"/>
<source>%1 % (Charging)</source>
<translation>%1 % (lataa)</translation>
</message>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="97"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="99"/>
<source>%1 % (%2 Remaining)</source>
<translation>%1 % (%2 jäljellä)</translation>
</message>
@@ -855,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="165"/>
- <location filename="../LSession.cpp" line="352"/>
+ <location filename="../LSession.cpp" line="166"/>
+ <location filename="../LSession.cpp" line="355"/>
<source>Desktop</source>
<translation>Työpöytä</translation>
</message>
@@ -1301,37 +1301,37 @@
<translation>Lumina-työpöydän RSS</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="143"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
<source>Feed URL: %1</source>
<translation>Syötteen verkko-osoite: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="144"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
<source>Title: %1</source>
<translation>Otsikko: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
<source>Description: %1</source>
<translation>Kuvaus: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
<source>Website: %1</source>
<translation>Sivusto: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
<source>Last Build Date: %1</source>
<translation>Viimeisin koostamispäivä: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="150"/>
<source>Last Sync: %1</source>
<translation>Viimeisin tahdistus: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="151"/>
<source>Next Sync: %1</source>
<translation>Seuraava tahdistus: %1</translation>
</message>
@@ -1517,43 +1517,43 @@
<translation>Järjestelmäasetukset</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="55"/>
+ <location filename="../SystemWindow.ui" line="68"/>
<source>Log Out</source>
<translation>Kirjaudu ulos</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="71"/>
+ <location filename="../SystemWindow.ui" line="84"/>
<source>Restart</source>
<translation>Käynnistä uudelleen</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="87"/>
+ <location filename="../SystemWindow.ui" line="100"/>
<source>Power Off</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="132"/>
+ <location filename="../SystemWindow.ui" line="145"/>
<source>Update Now</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="154"/>
+ <location filename="../SystemWindow.ui" line="167"/>
<source>Updates ready to install</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="192"/>
+ <location filename="../SystemWindow.ui" line="205"/>
<location filename="../SystemWindow.cpp" line="63"/>
<source>Cancel</source>
<translation>Peru</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="221"/>
+ <location filename="../SystemWindow.ui" line="234"/>
<source>Lock</source>
<translation>Lukitse</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="237"/>
+ <location filename="../SystemWindow.ui" line="250"/>
<source>Suspend</source>
<translation>Valmiustila</translation>
</message>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fr.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fr.ts
index c0217392..197143cc 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fr.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fr.ts
@@ -664,12 +664,12 @@
<context>
<name>LBattery</name>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="96"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="98"/>
<source>%1 % (Charging)</source>
<translation>%1 % (Chargement)</translation>
</message>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="97"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="99"/>
<source>%1 % (%2 Remaining)</source>
<translation>%1 % (%2 Restant)</translation>
</message>
@@ -855,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="165"/>
- <location filename="../LSession.cpp" line="352"/>
+ <location filename="../LSession.cpp" line="166"/>
+ <location filename="../LSession.cpp" line="355"/>
<source>Desktop</source>
<translation>Bureau</translation>
</message>
@@ -1301,37 +1301,37 @@
<translation>Lecteur de RSS de Lumina</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="143"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
<source>Feed URL: %1</source>
<translation>URL du Flux : %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="144"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
<source>Title: %1</source>
<translation>Titre : %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
<source>Description: %1</source>
<translation>Description : %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
<source>Website: %1</source>
<translation>Site Web : %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
<source>Last Build Date: %1</source>
<translation>Dernière Modification : %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="150"/>
<source>Last Sync: %1</source>
<translation>Dernière Synchro. : %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="151"/>
<source>Next Sync: %1</source>
<translation>Prochaine Synchro. : %1</translation>
</message>
@@ -1517,43 +1517,43 @@
<translation>Options Système</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="55"/>
+ <location filename="../SystemWindow.ui" line="68"/>
<source>Log Out</source>
<translation>Se Déconnecter</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="71"/>
+ <location filename="../SystemWindow.ui" line="84"/>
<source>Restart</source>
<translation>Redémarrer</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="87"/>
+ <location filename="../SystemWindow.ui" line="100"/>
<source>Power Off</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="132"/>
+ <location filename="../SystemWindow.ui" line="145"/>
<source>Update Now</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="154"/>
+ <location filename="../SystemWindow.ui" line="167"/>
<source>Updates ready to install</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="192"/>
+ <location filename="../SystemWindow.ui" line="205"/>
<location filename="../SystemWindow.cpp" line="63"/>
<source>Cancel</source>
<translation>Annuler</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="221"/>
+ <location filename="../SystemWindow.ui" line="234"/>
<source>Lock</source>
<translation>Verrouiller</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="237"/>
+ <location filename="../SystemWindow.ui" line="250"/>
<source>Suspend</source>
<translation>Mettre en Veille</translation>
</message>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fr_CA.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fr_CA.ts
index 2f9340c6..b7440a58 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fr_CA.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fr_CA.ts
@@ -664,12 +664,12 @@
<context>
<name>LBattery</name>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="96"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="98"/>
<source>%1 % (Charging)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="97"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="99"/>
<source>%1 % (%2 Remaining)</source>
<translation type="unfinished"></translation>
</message>
@@ -855,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="165"/>
- <location filename="../LSession.cpp" line="352"/>
+ <location filename="../LSession.cpp" line="166"/>
+ <location filename="../LSession.cpp" line="355"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
@@ -1301,37 +1301,37 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="143"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
<source>Feed URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="144"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
<source>Title: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
<source>Description: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
<source>Website: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
<source>Last Build Date: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="150"/>
<source>Last Sync: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="151"/>
<source>Next Sync: %1</source>
<translation type="unfinished"></translation>
</message>
@@ -1517,43 +1517,43 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="55"/>
+ <location filename="../SystemWindow.ui" line="68"/>
<source>Log Out</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="71"/>
+ <location filename="../SystemWindow.ui" line="84"/>
<source>Restart</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="87"/>
+ <location filename="../SystemWindow.ui" line="100"/>
<source>Power Off</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="132"/>
+ <location filename="../SystemWindow.ui" line="145"/>
<source>Update Now</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="154"/>
+ <location filename="../SystemWindow.ui" line="167"/>
<source>Updates ready to install</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="192"/>
+ <location filename="../SystemWindow.ui" line="205"/>
<location filename="../SystemWindow.cpp" line="63"/>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="221"/>
+ <location filename="../SystemWindow.ui" line="234"/>
<source>Lock</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="237"/>
+ <location filename="../SystemWindow.ui" line="250"/>
<source>Suspend</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_gl.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_gl.ts
index 2f9340c6..b7440a58 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_gl.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_gl.ts
@@ -664,12 +664,12 @@
<context>
<name>LBattery</name>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="96"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="98"/>
<source>%1 % (Charging)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="97"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="99"/>
<source>%1 % (%2 Remaining)</source>
<translation type="unfinished"></translation>
</message>
@@ -855,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="165"/>
- <location filename="../LSession.cpp" line="352"/>
+ <location filename="../LSession.cpp" line="166"/>
+ <location filename="../LSession.cpp" line="355"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
@@ -1301,37 +1301,37 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="143"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
<source>Feed URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="144"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
<source>Title: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
<source>Description: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
<source>Website: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
<source>Last Build Date: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="150"/>
<source>Last Sync: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="151"/>
<source>Next Sync: %1</source>
<translation type="unfinished"></translation>
</message>
@@ -1517,43 +1517,43 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="55"/>
+ <location filename="../SystemWindow.ui" line="68"/>
<source>Log Out</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="71"/>
+ <location filename="../SystemWindow.ui" line="84"/>
<source>Restart</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="87"/>
+ <location filename="../SystemWindow.ui" line="100"/>
<source>Power Off</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="132"/>
+ <location filename="../SystemWindow.ui" line="145"/>
<source>Update Now</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="154"/>
+ <location filename="../SystemWindow.ui" line="167"/>
<source>Updates ready to install</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="192"/>
+ <location filename="../SystemWindow.ui" line="205"/>
<location filename="../SystemWindow.cpp" line="63"/>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="221"/>
+ <location filename="../SystemWindow.ui" line="234"/>
<source>Lock</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="237"/>
+ <location filename="../SystemWindow.ui" line="250"/>
<source>Suspend</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_he.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_he.ts
index b494b2cb..f0aced27 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_he.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_he.ts
@@ -664,12 +664,12 @@
<context>
<name>LBattery</name>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="96"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="98"/>
<source>%1 % (Charging)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="97"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="99"/>
<source>%1 % (%2 Remaining)</source>
<translation type="unfinished"></translation>
</message>
@@ -855,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="165"/>
- <location filename="../LSession.cpp" line="352"/>
+ <location filename="../LSession.cpp" line="166"/>
+ <location filename="../LSession.cpp" line="355"/>
<source>Desktop</source>
<translation type="unfinished">שולחן עבודה</translation>
</message>
@@ -1301,37 +1301,37 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="143"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
<source>Feed URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="144"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
<source>Title: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
<source>Description: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
<source>Website: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
<source>Last Build Date: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="150"/>
<source>Last Sync: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="151"/>
<source>Next Sync: %1</source>
<translation type="unfinished"></translation>
</message>
@@ -1517,43 +1517,43 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="55"/>
+ <location filename="../SystemWindow.ui" line="68"/>
<source>Log Out</source>
<translation type="unfinished">התנתק</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="71"/>
+ <location filename="../SystemWindow.ui" line="84"/>
<source>Restart</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="87"/>
+ <location filename="../SystemWindow.ui" line="100"/>
<source>Power Off</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="132"/>
+ <location filename="../SystemWindow.ui" line="145"/>
<source>Update Now</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="154"/>
+ <location filename="../SystemWindow.ui" line="167"/>
<source>Updates ready to install</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="192"/>
+ <location filename="../SystemWindow.ui" line="205"/>
<location filename="../SystemWindow.cpp" line="63"/>
<source>Cancel</source>
<translation>ביטול</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="221"/>
+ <location filename="../SystemWindow.ui" line="234"/>
<source>Lock</source>
<translation>נעל</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="237"/>
+ <location filename="../SystemWindow.ui" line="250"/>
<source>Suspend</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_hi.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_hi.ts
index cee9a94d..a13425bf 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_hi.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_hi.ts
@@ -664,12 +664,12 @@
<context>
<name>LBattery</name>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="96"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="98"/>
<source>%1 % (Charging)</source>
<translation>%1 %(चार्ज हो रहा है)</translation>
</message>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="97"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="99"/>
<source>%1 % (%2 Remaining)</source>
<translation>%1 %(%2 बचा है)</translation>
</message>
@@ -855,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="165"/>
- <location filename="../LSession.cpp" line="352"/>
+ <location filename="../LSession.cpp" line="166"/>
+ <location filename="../LSession.cpp" line="355"/>
<source>Desktop</source>
<translation type="unfinished">डेस्कटॉप</translation>
</message>
@@ -1301,37 +1301,37 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="143"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
<source>Feed URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="144"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
<source>Title: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
<source>Description: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
<source>Website: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
<source>Last Build Date: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="150"/>
<source>Last Sync: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="151"/>
<source>Next Sync: %1</source>
<translation type="unfinished"></translation>
</message>
@@ -1517,43 +1517,43 @@
<translation>उपकरण विकल्प</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="55"/>
+ <location filename="../SystemWindow.ui" line="68"/>
<source>Log Out</source>
<translation>लॉगआउट</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="71"/>
+ <location filename="../SystemWindow.ui" line="84"/>
<source>Restart</source>
<translation>दोबारा चालू</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="87"/>
+ <location filename="../SystemWindow.ui" line="100"/>
<source>Power Off</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="132"/>
+ <location filename="../SystemWindow.ui" line="145"/>
<source>Update Now</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="154"/>
+ <location filename="../SystemWindow.ui" line="167"/>
<source>Updates ready to install</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="192"/>
+ <location filename="../SystemWindow.ui" line="205"/>
<location filename="../SystemWindow.cpp" line="63"/>
<source>Cancel</source>
<translation>रद्द</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="221"/>
+ <location filename="../SystemWindow.ui" line="234"/>
<source>Lock</source>
<translation>लॉक</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="237"/>
+ <location filename="../SystemWindow.ui" line="250"/>
<source>Suspend</source>
<translation>रोकें</translation>
</message>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_hr.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_hr.ts
index 2f9340c6..b7440a58 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_hr.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_hr.ts
@@ -664,12 +664,12 @@
<context>
<name>LBattery</name>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="96"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="98"/>
<source>%1 % (Charging)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="97"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="99"/>
<source>%1 % (%2 Remaining)</source>
<translation type="unfinished"></translation>
</message>
@@ -855,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="165"/>
- <location filename="../LSession.cpp" line="352"/>
+ <location filename="../LSession.cpp" line="166"/>
+ <location filename="../LSession.cpp" line="355"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
@@ -1301,37 +1301,37 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="143"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
<source>Feed URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="144"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
<source>Title: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
<source>Description: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
<source>Website: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
<source>Last Build Date: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="150"/>
<source>Last Sync: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="151"/>
<source>Next Sync: %1</source>
<translation type="unfinished"></translation>
</message>
@@ -1517,43 +1517,43 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="55"/>
+ <location filename="../SystemWindow.ui" line="68"/>
<source>Log Out</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="71"/>
+ <location filename="../SystemWindow.ui" line="84"/>
<source>Restart</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="87"/>
+ <location filename="../SystemWindow.ui" line="100"/>
<source>Power Off</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="132"/>
+ <location filename="../SystemWindow.ui" line="145"/>
<source>Update Now</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="154"/>
+ <location filename="../SystemWindow.ui" line="167"/>
<source>Updates ready to install</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="192"/>
+ <location filename="../SystemWindow.ui" line="205"/>
<location filename="../SystemWindow.cpp" line="63"/>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="221"/>
+ <location filename="../SystemWindow.ui" line="234"/>
<source>Lock</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="237"/>
+ <location filename="../SystemWindow.ui" line="250"/>
<source>Suspend</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_hu.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_hu.ts
index 88455320..8ee910a6 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_hu.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_hu.ts
@@ -664,12 +664,12 @@
<context>
<name>LBattery</name>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="96"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="98"/>
<source>%1 % (Charging)</source>
<translation>%1 % (Töltés)</translation>
</message>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="97"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="99"/>
<source>%1 % (%2 Remaining)</source>
<translation>%1 % (%2 hátralévő)</translation>
</message>
@@ -855,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="165"/>
- <location filename="../LSession.cpp" line="352"/>
+ <location filename="../LSession.cpp" line="166"/>
+ <location filename="../LSession.cpp" line="355"/>
<source>Desktop</source>
<translation>Asztal</translation>
</message>
@@ -1301,37 +1301,37 @@
<translation>Lumina Desktop RSS</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="143"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
<source>Feed URL: %1</source>
<translation>Hírcsatorna URL: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="144"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
<source>Title: %1</source>
<translation>Cím: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
<source>Description: %1</source>
<translation>Leírás: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
<source>Website: %1</source>
<translation>Weboldal: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
<source>Last Build Date: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="150"/>
<source>Last Sync: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="151"/>
<source>Next Sync: %1</source>
<translation>Következő frissítés: %1</translation>
</message>
@@ -1517,43 +1517,43 @@
<translation>Rendszer opciók</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="55"/>
+ <location filename="../SystemWindow.ui" line="68"/>
<source>Log Out</source>
<translation>Kijelentkezés</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="71"/>
+ <location filename="../SystemWindow.ui" line="84"/>
<source>Restart</source>
<translation>Újraindítás</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="87"/>
+ <location filename="../SystemWindow.ui" line="100"/>
<source>Power Off</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="132"/>
+ <location filename="../SystemWindow.ui" line="145"/>
<source>Update Now</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="154"/>
+ <location filename="../SystemWindow.ui" line="167"/>
<source>Updates ready to install</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="192"/>
+ <location filename="../SystemWindow.ui" line="205"/>
<location filename="../SystemWindow.cpp" line="63"/>
<source>Cancel</source>
<translation>Mégsem</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="221"/>
+ <location filename="../SystemWindow.ui" line="234"/>
<source>Lock</source>
<translation>Zárolás</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="237"/>
+ <location filename="../SystemWindow.ui" line="250"/>
<source>Suspend</source>
<translation>Felfüggesztés</translation>
</message>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_id.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_id.ts
index 2f3db87c..8786204e 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_id.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_id.ts
@@ -664,12 +664,12 @@
<context>
<name>LBattery</name>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="96"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="98"/>
<source>%1 % (Charging)</source>
<translation>%1 % (pengisian baterai)</translation>
</message>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="97"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="99"/>
<source>%1 % (%2 Remaining)</source>
<translation>%1 % (%2 sisa)</translation>
</message>
@@ -855,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="165"/>
- <location filename="../LSession.cpp" line="352"/>
+ <location filename="../LSession.cpp" line="166"/>
+ <location filename="../LSession.cpp" line="355"/>
<source>Desktop</source>
<translation type="unfinished">Layar Kerja Utama</translation>
</message>
@@ -1301,37 +1301,37 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="143"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
<source>Feed URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="144"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
<source>Title: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
<source>Description: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
<source>Website: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
<source>Last Build Date: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="150"/>
<source>Last Sync: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="151"/>
<source>Next Sync: %1</source>
<translation type="unfinished"></translation>
</message>
@@ -1517,43 +1517,43 @@
<translation>Opsi Sistem</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="55"/>
+ <location filename="../SystemWindow.ui" line="68"/>
<source>Log Out</source>
<translation>Log Keluar</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="71"/>
+ <location filename="../SystemWindow.ui" line="84"/>
<source>Restart</source>
<translation>mulai ulang</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="87"/>
+ <location filename="../SystemWindow.ui" line="100"/>
<source>Power Off</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="132"/>
+ <location filename="../SystemWindow.ui" line="145"/>
<source>Update Now</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="154"/>
+ <location filename="../SystemWindow.ui" line="167"/>
<source>Updates ready to install</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="192"/>
+ <location filename="../SystemWindow.ui" line="205"/>
<location filename="../SystemWindow.cpp" line="63"/>
<source>Cancel</source>
<translation>Batalkan</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="221"/>
+ <location filename="../SystemWindow.ui" line="234"/>
<source>Lock</source>
<translation>Kunci</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="237"/>
+ <location filename="../SystemWindow.ui" line="250"/>
<source>Suspend</source>
<translation>Suspensi</translation>
</message>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_is.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_is.ts
index 2f9340c6..b7440a58 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_is.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_is.ts
@@ -664,12 +664,12 @@
<context>
<name>LBattery</name>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="96"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="98"/>
<source>%1 % (Charging)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="97"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="99"/>
<source>%1 % (%2 Remaining)</source>
<translation type="unfinished"></translation>
</message>
@@ -855,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="165"/>
- <location filename="../LSession.cpp" line="352"/>
+ <location filename="../LSession.cpp" line="166"/>
+ <location filename="../LSession.cpp" line="355"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
@@ -1301,37 +1301,37 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="143"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
<source>Feed URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="144"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
<source>Title: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
<source>Description: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
<source>Website: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
<source>Last Build Date: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="150"/>
<source>Last Sync: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="151"/>
<source>Next Sync: %1</source>
<translation type="unfinished"></translation>
</message>
@@ -1517,43 +1517,43 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="55"/>
+ <location filename="../SystemWindow.ui" line="68"/>
<source>Log Out</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="71"/>
+ <location filename="../SystemWindow.ui" line="84"/>
<source>Restart</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="87"/>
+ <location filename="../SystemWindow.ui" line="100"/>
<source>Power Off</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="132"/>
+ <location filename="../SystemWindow.ui" line="145"/>
<source>Update Now</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="154"/>
+ <location filename="../SystemWindow.ui" line="167"/>
<source>Updates ready to install</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="192"/>
+ <location filename="../SystemWindow.ui" line="205"/>
<location filename="../SystemWindow.cpp" line="63"/>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="221"/>
+ <location filename="../SystemWindow.ui" line="234"/>
<source>Lock</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="237"/>
+ <location filename="../SystemWindow.ui" line="250"/>
<source>Suspend</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_it.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_it.ts
index 1cd93f4d..e7cfed3d 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_it.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_it.ts
@@ -664,12 +664,12 @@
<context>
<name>LBattery</name>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="96"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="98"/>
<source>%1 % (Charging)</source>
<translation>%1 % (In Carica)</translation>
</message>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="97"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="99"/>
<source>%1 % (%2 Remaining)</source>
<translation>%1 % (%2 Rimanente)</translation>
</message>
@@ -855,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="165"/>
- <location filename="../LSession.cpp" line="352"/>
+ <location filename="../LSession.cpp" line="166"/>
+ <location filename="../LSession.cpp" line="355"/>
<source>Desktop</source>
<translation>Desktop</translation>
</message>
@@ -1301,37 +1301,37 @@
<translation>RSS del desktop Lumina</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="143"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
<source>Feed URL: %1</source>
<translation>URL del feed: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="144"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
<source>Title: %1</source>
<translation>Titolo: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
<source>Description: %1</source>
<translation>Descrizione: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
<source>Website: %1</source>
<translation>Sito web: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
<source>Last Build Date: %1</source>
<translation>Ultima data di versione: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="150"/>
<source>Last Sync: %1</source>
<translation>Ultimo aggiornamento: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="151"/>
<source>Next Sync: %1</source>
<translation>Prossimo aggiornamento: %1</translation>
</message>
@@ -1517,43 +1517,43 @@
<translation>Opzioni di Sistema</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="55"/>
+ <location filename="../SystemWindow.ui" line="68"/>
<source>Log Out</source>
<translation>Esci</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="71"/>
+ <location filename="../SystemWindow.ui" line="84"/>
<source>Restart</source>
<translation>Riavvia</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="87"/>
+ <location filename="../SystemWindow.ui" line="100"/>
<source>Power Off</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="132"/>
+ <location filename="../SystemWindow.ui" line="145"/>
<source>Update Now</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="154"/>
+ <location filename="../SystemWindow.ui" line="167"/>
<source>Updates ready to install</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="192"/>
+ <location filename="../SystemWindow.ui" line="205"/>
<location filename="../SystemWindow.cpp" line="63"/>
<source>Cancel</source>
<translation>Cancella</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="221"/>
+ <location filename="../SystemWindow.ui" line="234"/>
<source>Lock</source>
<translation>Blocca</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="237"/>
+ <location filename="../SystemWindow.ui" line="250"/>
<source>Suspend</source>
<translation>Sospendi</translation>
</message>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ja.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ja.ts
index 15c0f6c7..1f08a1e7 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ja.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ja.ts
@@ -668,12 +668,12 @@
<context>
<name>LBattery</name>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="96"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="98"/>
<source>%1 % (Charging)</source>
<translation>%1 % (充電中)</translation>
</message>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="97"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="99"/>
<source>%1 % (%2 Remaining)</source>
<translation>%1 % (残り %2 %)</translation>
</message>
@@ -860,8 +860,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="165"/>
- <location filename="../LSession.cpp" line="352"/>
+ <location filename="../LSession.cpp" line="166"/>
+ <location filename="../LSession.cpp" line="355"/>
<source>Desktop</source>
<translatorcomment>これ、ファイルパスなので、「デスクトップ」と訳したらまずい</translatorcomment>
<translation>Desktop</translation>
@@ -1315,37 +1315,37 @@
<translation>Lumina デスクトップ RSS</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="143"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
<source>Feed URL: %1</source>
<translation>フィードの URL: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="144"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
<source>Title: %1</source>
<translation>タイトル: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
<source>Description: %1</source>
<translation>説明: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
<source>Website: %1</source>
<translation>Web サイト: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
<source>Last Build Date: %1</source>
<translation>最終更新日時: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="150"/>
<source>Last Sync: %1</source>
<translation>最終同期日時: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="151"/>
<source>Next Sync: %1</source>
<translation>次回同期日時: %1</translation>
</message>
@@ -1534,43 +1534,43 @@
<translation>システムのオプション</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="55"/>
+ <location filename="../SystemWindow.ui" line="68"/>
<source>Log Out</source>
<translation>ログアウト</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="71"/>
+ <location filename="../SystemWindow.ui" line="84"/>
<source>Restart</source>
<translation>再起動</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="87"/>
+ <location filename="../SystemWindow.ui" line="100"/>
<source>Power Off</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="132"/>
+ <location filename="../SystemWindow.ui" line="145"/>
<source>Update Now</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="154"/>
+ <location filename="../SystemWindow.ui" line="167"/>
<source>Updates ready to install</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="192"/>
+ <location filename="../SystemWindow.ui" line="205"/>
<location filename="../SystemWindow.cpp" line="63"/>
<source>Cancel</source>
<translation>キャンセル</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="221"/>
+ <location filename="../SystemWindow.ui" line="234"/>
<source>Lock</source>
<translation>ロック</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="237"/>
+ <location filename="../SystemWindow.ui" line="250"/>
<source>Suspend</source>
<translation>サスペンド</translation>
</message>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ka.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ka.ts
index 2f9340c6..b7440a58 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ka.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ka.ts
@@ -664,12 +664,12 @@
<context>
<name>LBattery</name>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="96"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="98"/>
<source>%1 % (Charging)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="97"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="99"/>
<source>%1 % (%2 Remaining)</source>
<translation type="unfinished"></translation>
</message>
@@ -855,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="165"/>
- <location filename="../LSession.cpp" line="352"/>
+ <location filename="../LSession.cpp" line="166"/>
+ <location filename="../LSession.cpp" line="355"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
@@ -1301,37 +1301,37 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="143"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
<source>Feed URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="144"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
<source>Title: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
<source>Description: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
<source>Website: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
<source>Last Build Date: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="150"/>
<source>Last Sync: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="151"/>
<source>Next Sync: %1</source>
<translation type="unfinished"></translation>
</message>
@@ -1517,43 +1517,43 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="55"/>
+ <location filename="../SystemWindow.ui" line="68"/>
<source>Log Out</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="71"/>
+ <location filename="../SystemWindow.ui" line="84"/>
<source>Restart</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="87"/>
+ <location filename="../SystemWindow.ui" line="100"/>
<source>Power Off</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="132"/>
+ <location filename="../SystemWindow.ui" line="145"/>
<source>Update Now</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="154"/>
+ <location filename="../SystemWindow.ui" line="167"/>
<source>Updates ready to install</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="192"/>
+ <location filename="../SystemWindow.ui" line="205"/>
<location filename="../SystemWindow.cpp" line="63"/>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="221"/>
+ <location filename="../SystemWindow.ui" line="234"/>
<source>Lock</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="237"/>
+ <location filename="../SystemWindow.ui" line="250"/>
<source>Suspend</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ko.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ko.ts
index 0d69f01f..850e8ea7 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ko.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ko.ts
@@ -664,12 +664,12 @@
<context>
<name>LBattery</name>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="96"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="98"/>
<source>%1 % (Charging)</source>
<translation>%1 % (충전중)</translation>
</message>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="97"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="99"/>
<source>%1 % (%2 Remaining)</source>
<translation>%1 % (%2 남음)</translation>
</message>
@@ -855,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="165"/>
- <location filename="../LSession.cpp" line="352"/>
+ <location filename="../LSession.cpp" line="166"/>
+ <location filename="../LSession.cpp" line="355"/>
<source>Desktop</source>
<translation type="unfinished">바탕 화면</translation>
</message>
@@ -1301,37 +1301,37 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="143"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
<source>Feed URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="144"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
<source>Title: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
<source>Description: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
<source>Website: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
<source>Last Build Date: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="150"/>
<source>Last Sync: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="151"/>
<source>Next Sync: %1</source>
<translation type="unfinished"></translation>
</message>
@@ -1517,43 +1517,43 @@
<translation>시스템 설정</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="55"/>
+ <location filename="../SystemWindow.ui" line="68"/>
<source>Log Out</source>
<translation>로그 아웃</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="71"/>
+ <location filename="../SystemWindow.ui" line="84"/>
<source>Restart</source>
<translation>재시동</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="87"/>
+ <location filename="../SystemWindow.ui" line="100"/>
<source>Power Off</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="132"/>
+ <location filename="../SystemWindow.ui" line="145"/>
<source>Update Now</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="154"/>
+ <location filename="../SystemWindow.ui" line="167"/>
<source>Updates ready to install</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="192"/>
+ <location filename="../SystemWindow.ui" line="205"/>
<location filename="../SystemWindow.cpp" line="63"/>
<source>Cancel</source>
<translation>취소</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="221"/>
+ <location filename="../SystemWindow.ui" line="234"/>
<source>Lock</source>
<translation>잠그기</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="237"/>
+ <location filename="../SystemWindow.ui" line="250"/>
<source>Suspend</source>
<translation>절전</translation>
</message>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_lt.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_lt.ts
index c6f635aa..c4020611 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_lt.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_lt.ts
@@ -664,12 +664,12 @@
<context>
<name>LBattery</name>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="96"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="98"/>
<source>%1 % (Charging)</source>
<translation>%1 % (Kraunama)</translation>
</message>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="97"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="99"/>
<source>%1 % (%2 Remaining)</source>
<translation>%1 % (Liko %2)</translation>
</message>
@@ -855,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="165"/>
- <location filename="../LSession.cpp" line="352"/>
+ <location filename="../LSession.cpp" line="166"/>
+ <location filename="../LSession.cpp" line="355"/>
<source>Desktop</source>
<translation>Darbalaukis</translation>
</message>
@@ -1301,37 +1301,37 @@
<translation>Lumina darbalaukio RSS</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="143"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
<source>Feed URL: %1</source>
<translation>Kanalo URL: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="144"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
<source>Title: %1</source>
<translation>Pavadinimas: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
<source>Description: %1</source>
<translation>Aprašas: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
<source>Website: %1</source>
<translation>Svetainė: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
<source>Last Build Date: %1</source>
<translation>Paskutinio darinio data: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="150"/>
<source>Last Sync: %1</source>
<translation>Paskutinis sinchronizavimas: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="151"/>
<source>Next Sync: %1</source>
<translation>Kitas sinchronizavimas: %1</translation>
</message>
@@ -1517,43 +1517,43 @@
<translation>Sistemos parinktys</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="55"/>
+ <location filename="../SystemWindow.ui" line="68"/>
<source>Log Out</source>
<translation>Atsijungti</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="71"/>
+ <location filename="../SystemWindow.ui" line="84"/>
<source>Restart</source>
<translation>Paleisti iš naujo</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="87"/>
+ <location filename="../SystemWindow.ui" line="100"/>
<source>Power Off</source>
<translation>Išjungti</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="132"/>
+ <location filename="../SystemWindow.ui" line="145"/>
<source>Update Now</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="154"/>
+ <location filename="../SystemWindow.ui" line="167"/>
<source>Updates ready to install</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="192"/>
+ <location filename="../SystemWindow.ui" line="205"/>
<location filename="../SystemWindow.cpp" line="63"/>
<source>Cancel</source>
<translation>Atsisakyti</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="221"/>
+ <location filename="../SystemWindow.ui" line="234"/>
<source>Lock</source>
<translation>Užrakinti</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="237"/>
+ <location filename="../SystemWindow.ui" line="250"/>
<source>Suspend</source>
<translation>Pristabdyti</translation>
</message>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_lv.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_lv.ts
index 3cb0b2b0..5cdbd8fb 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_lv.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_lv.ts
@@ -664,12 +664,12 @@
<context>
<name>LBattery</name>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="96"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="98"/>
<source>%1 % (Charging)</source>
<translation>%1 % (uzlādējas)</translation>
</message>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="97"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="99"/>
<source>%1 % (%2 Remaining)</source>
<translation>%1 % (%2 atlicis)</translation>
</message>
@@ -855,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="165"/>
- <location filename="../LSession.cpp" line="352"/>
+ <location filename="../LSession.cpp" line="166"/>
+ <location filename="../LSession.cpp" line="355"/>
<source>Desktop</source>
<translation>Darbvirsma</translation>
</message>
@@ -1301,37 +1301,37 @@
<translation>Lumina darbvirsmas RSS</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="143"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
<source>Feed URL: %1</source>
<translation>Plūsmas URL: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="144"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
<source>Title: %1</source>
<translation>Virsraksts: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
<source>Description: %1</source>
<translation>Apraksts: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
<source>Website: %1</source>
<translation>Tīmekļa vietne: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
<source>Last Build Date: %1</source>
<translation>Pēdējā būvējuma datums: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="150"/>
<source>Last Sync: %1</source>
<translation>Pēdējā sinhronizācija: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="151"/>
<source>Next Sync: %1</source>
<translation>Nākamā sinhronizēšana: %1</translation>
</message>
@@ -1517,43 +1517,43 @@
<translation>Sistēmas opcijas</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="55"/>
+ <location filename="../SystemWindow.ui" line="68"/>
<source>Log Out</source>
<translation>Izrakstīties</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="71"/>
+ <location filename="../SystemWindow.ui" line="84"/>
<source>Restart</source>
<translation>Restartēt</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="87"/>
+ <location filename="../SystemWindow.ui" line="100"/>
<source>Power Off</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="132"/>
+ <location filename="../SystemWindow.ui" line="145"/>
<source>Update Now</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="154"/>
+ <location filename="../SystemWindow.ui" line="167"/>
<source>Updates ready to install</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="192"/>
+ <location filename="../SystemWindow.ui" line="205"/>
<location filename="../SystemWindow.cpp" line="63"/>
<source>Cancel</source>
<translation>Atcelt</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="221"/>
+ <location filename="../SystemWindow.ui" line="234"/>
<source>Lock</source>
<translation>Slēgt</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="237"/>
+ <location filename="../SystemWindow.ui" line="250"/>
<source>Suspend</source>
<translation>Iemidzināt</translation>
</message>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_mk.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_mk.ts
index 2f9340c6..b7440a58 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_mk.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_mk.ts
@@ -664,12 +664,12 @@
<context>
<name>LBattery</name>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="96"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="98"/>
<source>%1 % (Charging)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="97"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="99"/>
<source>%1 % (%2 Remaining)</source>
<translation type="unfinished"></translation>
</message>
@@ -855,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="165"/>
- <location filename="../LSession.cpp" line="352"/>
+ <location filename="../LSession.cpp" line="166"/>
+ <location filename="../LSession.cpp" line="355"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
@@ -1301,37 +1301,37 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="143"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
<source>Feed URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="144"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
<source>Title: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
<source>Description: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
<source>Website: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
<source>Last Build Date: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="150"/>
<source>Last Sync: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="151"/>
<source>Next Sync: %1</source>
<translation type="unfinished"></translation>
</message>
@@ -1517,43 +1517,43 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="55"/>
+ <location filename="../SystemWindow.ui" line="68"/>
<source>Log Out</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="71"/>
+ <location filename="../SystemWindow.ui" line="84"/>
<source>Restart</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="87"/>
+ <location filename="../SystemWindow.ui" line="100"/>
<source>Power Off</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="132"/>
+ <location filename="../SystemWindow.ui" line="145"/>
<source>Update Now</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="154"/>
+ <location filename="../SystemWindow.ui" line="167"/>
<source>Updates ready to install</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="192"/>
+ <location filename="../SystemWindow.ui" line="205"/>
<location filename="../SystemWindow.cpp" line="63"/>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="221"/>
+ <location filename="../SystemWindow.ui" line="234"/>
<source>Lock</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="237"/>
+ <location filename="../SystemWindow.ui" line="250"/>
<source>Suspend</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_mn.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_mn.ts
index 2f9340c6..b7440a58 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_mn.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_mn.ts
@@ -664,12 +664,12 @@
<context>
<name>LBattery</name>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="96"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="98"/>
<source>%1 % (Charging)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="97"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="99"/>
<source>%1 % (%2 Remaining)</source>
<translation type="unfinished"></translation>
</message>
@@ -855,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="165"/>
- <location filename="../LSession.cpp" line="352"/>
+ <location filename="../LSession.cpp" line="166"/>
+ <location filename="../LSession.cpp" line="355"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
@@ -1301,37 +1301,37 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="143"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
<source>Feed URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="144"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
<source>Title: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
<source>Description: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
<source>Website: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
<source>Last Build Date: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="150"/>
<source>Last Sync: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="151"/>
<source>Next Sync: %1</source>
<translation type="unfinished"></translation>
</message>
@@ -1517,43 +1517,43 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="55"/>
+ <location filename="../SystemWindow.ui" line="68"/>
<source>Log Out</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="71"/>
+ <location filename="../SystemWindow.ui" line="84"/>
<source>Restart</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="87"/>
+ <location filename="../SystemWindow.ui" line="100"/>
<source>Power Off</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="132"/>
+ <location filename="../SystemWindow.ui" line="145"/>
<source>Update Now</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="154"/>
+ <location filename="../SystemWindow.ui" line="167"/>
<source>Updates ready to install</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="192"/>
+ <location filename="../SystemWindow.ui" line="205"/>
<location filename="../SystemWindow.cpp" line="63"/>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="221"/>
+ <location filename="../SystemWindow.ui" line="234"/>
<source>Lock</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="237"/>
+ <location filename="../SystemWindow.ui" line="250"/>
<source>Suspend</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ms.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ms.ts
index 2f9340c6..b7440a58 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ms.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ms.ts
@@ -664,12 +664,12 @@
<context>
<name>LBattery</name>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="96"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="98"/>
<source>%1 % (Charging)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="97"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="99"/>
<source>%1 % (%2 Remaining)</source>
<translation type="unfinished"></translation>
</message>
@@ -855,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="165"/>
- <location filename="../LSession.cpp" line="352"/>
+ <location filename="../LSession.cpp" line="166"/>
+ <location filename="../LSession.cpp" line="355"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
@@ -1301,37 +1301,37 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="143"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
<source>Feed URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="144"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
<source>Title: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
<source>Description: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
<source>Website: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
<source>Last Build Date: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="150"/>
<source>Last Sync: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="151"/>
<source>Next Sync: %1</source>
<translation type="unfinished"></translation>
</message>
@@ -1517,43 +1517,43 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="55"/>
+ <location filename="../SystemWindow.ui" line="68"/>
<source>Log Out</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="71"/>
+ <location filename="../SystemWindow.ui" line="84"/>
<source>Restart</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="87"/>
+ <location filename="../SystemWindow.ui" line="100"/>
<source>Power Off</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="132"/>
+ <location filename="../SystemWindow.ui" line="145"/>
<source>Update Now</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="154"/>
+ <location filename="../SystemWindow.ui" line="167"/>
<source>Updates ready to install</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="192"/>
+ <location filename="../SystemWindow.ui" line="205"/>
<location filename="../SystemWindow.cpp" line="63"/>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="221"/>
+ <location filename="../SystemWindow.ui" line="234"/>
<source>Lock</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="237"/>
+ <location filename="../SystemWindow.ui" line="250"/>
<source>Suspend</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_mt.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_mt.ts
index 2f9340c6..b7440a58 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_mt.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_mt.ts
@@ -664,12 +664,12 @@
<context>
<name>LBattery</name>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="96"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="98"/>
<source>%1 % (Charging)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="97"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="99"/>
<source>%1 % (%2 Remaining)</source>
<translation type="unfinished"></translation>
</message>
@@ -855,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="165"/>
- <location filename="../LSession.cpp" line="352"/>
+ <location filename="../LSession.cpp" line="166"/>
+ <location filename="../LSession.cpp" line="355"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
@@ -1301,37 +1301,37 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="143"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
<source>Feed URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="144"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
<source>Title: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
<source>Description: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
<source>Website: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
<source>Last Build Date: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="150"/>
<source>Last Sync: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="151"/>
<source>Next Sync: %1</source>
<translation type="unfinished"></translation>
</message>
@@ -1517,43 +1517,43 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="55"/>
+ <location filename="../SystemWindow.ui" line="68"/>
<source>Log Out</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="71"/>
+ <location filename="../SystemWindow.ui" line="84"/>
<source>Restart</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="87"/>
+ <location filename="../SystemWindow.ui" line="100"/>
<source>Power Off</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="132"/>
+ <location filename="../SystemWindow.ui" line="145"/>
<source>Update Now</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="154"/>
+ <location filename="../SystemWindow.ui" line="167"/>
<source>Updates ready to install</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="192"/>
+ <location filename="../SystemWindow.ui" line="205"/>
<location filename="../SystemWindow.cpp" line="63"/>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="221"/>
+ <location filename="../SystemWindow.ui" line="234"/>
<source>Lock</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="237"/>
+ <location filename="../SystemWindow.ui" line="250"/>
<source>Suspend</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_nb.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_nb.ts
index 2f9340c6..b7440a58 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_nb.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_nb.ts
@@ -664,12 +664,12 @@
<context>
<name>LBattery</name>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="96"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="98"/>
<source>%1 % (Charging)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="97"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="99"/>
<source>%1 % (%2 Remaining)</source>
<translation type="unfinished"></translation>
</message>
@@ -855,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="165"/>
- <location filename="../LSession.cpp" line="352"/>
+ <location filename="../LSession.cpp" line="166"/>
+ <location filename="../LSession.cpp" line="355"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
@@ -1301,37 +1301,37 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="143"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
<source>Feed URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="144"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
<source>Title: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
<source>Description: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
<source>Website: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
<source>Last Build Date: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="150"/>
<source>Last Sync: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="151"/>
<source>Next Sync: %1</source>
<translation type="unfinished"></translation>
</message>
@@ -1517,43 +1517,43 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="55"/>
+ <location filename="../SystemWindow.ui" line="68"/>
<source>Log Out</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="71"/>
+ <location filename="../SystemWindow.ui" line="84"/>
<source>Restart</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="87"/>
+ <location filename="../SystemWindow.ui" line="100"/>
<source>Power Off</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="132"/>
+ <location filename="../SystemWindow.ui" line="145"/>
<source>Update Now</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="154"/>
+ <location filename="../SystemWindow.ui" line="167"/>
<source>Updates ready to install</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="192"/>
+ <location filename="../SystemWindow.ui" line="205"/>
<location filename="../SystemWindow.cpp" line="63"/>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="221"/>
+ <location filename="../SystemWindow.ui" line="234"/>
<source>Lock</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="237"/>
+ <location filename="../SystemWindow.ui" line="250"/>
<source>Suspend</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_nl.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_nl.ts
index 2b2f15a4..b07292d8 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_nl.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_nl.ts
@@ -664,12 +664,12 @@
<context>
<name>LBattery</name>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="96"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="98"/>
<source>%1 % (Charging)</source>
<translation>%1 % (Bezig met opladen)</translation>
</message>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="97"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="99"/>
<source>%1 % (%2 Remaining)</source>
<translation>%1 % (%2 resterend)</translation>
</message>
@@ -855,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="165"/>
- <location filename="../LSession.cpp" line="352"/>
+ <location filename="../LSession.cpp" line="166"/>
+ <location filename="../LSession.cpp" line="355"/>
<source>Desktop</source>
<translation>Bureaublad</translation>
</message>
@@ -1301,37 +1301,37 @@
<translation>Lumina-bureaublad RSS</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="143"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
<source>Feed URL: %1</source>
<translation>Feed-URL: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="144"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
<source>Title: %1</source>
<translation>Titel: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
<source>Description: %1</source>
<translation>Omschrijving: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
<source>Website: %1</source>
<translation>Website: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
<source>Last Build Date: %1</source>
<translation>Laaste bouwdatum: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="150"/>
<source>Last Sync: %1</source>
<translation>Laatste synchronisatie: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="151"/>
<source>Next Sync: %1</source>
<translation>Volgende synchronisatie: %1</translation>
</message>
@@ -1517,43 +1517,43 @@
<translation>Systeemopties</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="55"/>
+ <location filename="../SystemWindow.ui" line="68"/>
<source>Log Out</source>
<translation>Uitloggen</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="71"/>
+ <location filename="../SystemWindow.ui" line="84"/>
<source>Restart</source>
<translation>Herstarten</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="87"/>
+ <location filename="../SystemWindow.ui" line="100"/>
<source>Power Off</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="132"/>
+ <location filename="../SystemWindow.ui" line="145"/>
<source>Update Now</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="154"/>
+ <location filename="../SystemWindow.ui" line="167"/>
<source>Updates ready to install</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="192"/>
+ <location filename="../SystemWindow.ui" line="205"/>
<location filename="../SystemWindow.cpp" line="63"/>
<source>Cancel</source>
<translation>Annuleren</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="221"/>
+ <location filename="../SystemWindow.ui" line="234"/>
<source>Lock</source>
<translation>Vergrendelen</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="237"/>
+ <location filename="../SystemWindow.ui" line="250"/>
<source>Suspend</source>
<translation>Pauzestand</translation>
</message>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pa.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pa.ts
index 2f9340c6..b7440a58 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pa.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pa.ts
@@ -664,12 +664,12 @@
<context>
<name>LBattery</name>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="96"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="98"/>
<source>%1 % (Charging)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="97"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="99"/>
<source>%1 % (%2 Remaining)</source>
<translation type="unfinished"></translation>
</message>
@@ -855,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="165"/>
- <location filename="../LSession.cpp" line="352"/>
+ <location filename="../LSession.cpp" line="166"/>
+ <location filename="../LSession.cpp" line="355"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
@@ -1301,37 +1301,37 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="143"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
<source>Feed URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="144"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
<source>Title: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
<source>Description: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
<source>Website: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
<source>Last Build Date: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="150"/>
<source>Last Sync: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="151"/>
<source>Next Sync: %1</source>
<translation type="unfinished"></translation>
</message>
@@ -1517,43 +1517,43 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="55"/>
+ <location filename="../SystemWindow.ui" line="68"/>
<source>Log Out</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="71"/>
+ <location filename="../SystemWindow.ui" line="84"/>
<source>Restart</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="87"/>
+ <location filename="../SystemWindow.ui" line="100"/>
<source>Power Off</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="132"/>
+ <location filename="../SystemWindow.ui" line="145"/>
<source>Update Now</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="154"/>
+ <location filename="../SystemWindow.ui" line="167"/>
<source>Updates ready to install</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="192"/>
+ <location filename="../SystemWindow.ui" line="205"/>
<location filename="../SystemWindow.cpp" line="63"/>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="221"/>
+ <location filename="../SystemWindow.ui" line="234"/>
<source>Lock</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="237"/>
+ <location filename="../SystemWindow.ui" line="250"/>
<source>Suspend</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pl.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pl.ts
index 5ff8b01f..af9e65ba 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pl.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pl.ts
@@ -664,12 +664,12 @@
<context>
<name>LBattery</name>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="96"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="98"/>
<source>%1 % (Charging)</source>
<translation>%1 % (Ładowanie)</translation>
</message>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="97"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="99"/>
<source>%1 % (%2 Remaining)</source>
<translation>%1 % (%2 pozostało)</translation>
</message>
@@ -855,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="165"/>
- <location filename="../LSession.cpp" line="352"/>
+ <location filename="../LSession.cpp" line="166"/>
+ <location filename="../LSession.cpp" line="355"/>
<source>Desktop</source>
<translation>Pulpit</translation>
</message>
@@ -1301,37 +1301,37 @@
<translation>Pulpit Lumina RSS</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="143"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
<source>Feed URL: %1</source>
<translation>URL kanału: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="144"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
<source>Title: %1</source>
<translation>Tytuł: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
<source>Description: %1</source>
<translation>Opis: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
<source>Website: %1</source>
<translation>Witryna: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
<source>Last Build Date: %1</source>
<translation>Data utworzenia: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="150"/>
<source>Last Sync: %1</source>
<translation>Ostatnia synchronizacja %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="151"/>
<source>Next Sync: %1</source>
<translation>Następna synchronizacja: %1</translation>
</message>
@@ -1517,43 +1517,43 @@
<translation>Opcje Systemu</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="55"/>
+ <location filename="../SystemWindow.ui" line="68"/>
<source>Log Out</source>
<translation>Wyloguj</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="71"/>
+ <location filename="../SystemWindow.ui" line="84"/>
<source>Restart</source>
<translation>Uruchom ponownie</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="87"/>
+ <location filename="../SystemWindow.ui" line="100"/>
<source>Power Off</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="132"/>
+ <location filename="../SystemWindow.ui" line="145"/>
<source>Update Now</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="154"/>
+ <location filename="../SystemWindow.ui" line="167"/>
<source>Updates ready to install</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="192"/>
+ <location filename="../SystemWindow.ui" line="205"/>
<location filename="../SystemWindow.cpp" line="63"/>
<source>Cancel</source>
<translation>Zaniechaj</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="221"/>
+ <location filename="../SystemWindow.ui" line="234"/>
<source>Lock</source>
<translation>Zablokuj</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="237"/>
+ <location filename="../SystemWindow.ui" line="250"/>
<source>Suspend</source>
<translation>Wstrzymanie</translation>
</message>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pt.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pt.ts
index 82881d5b..21bbdb65 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pt.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pt.ts
@@ -664,12 +664,12 @@
<context>
<name>LBattery</name>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="96"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="98"/>
<source>%1 % (Charging)</source>
<translation>%1 % (Carregando)</translation>
</message>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="97"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="99"/>
<source>%1 % (%2 Remaining)</source>
<translation>%1 % (%2 Restantes)</translation>
</message>
@@ -855,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="165"/>
- <location filename="../LSession.cpp" line="352"/>
+ <location filename="../LSession.cpp" line="166"/>
+ <location filename="../LSession.cpp" line="355"/>
<source>Desktop</source>
<translation type="unfinished">Área de Trabalho</translation>
</message>
@@ -1301,37 +1301,37 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="143"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
<source>Feed URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="144"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
<source>Title: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
<source>Description: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
<source>Website: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
<source>Last Build Date: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="150"/>
<source>Last Sync: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="151"/>
<source>Next Sync: %1</source>
<translation type="unfinished"></translation>
</message>
@@ -1517,43 +1517,43 @@
<translation>Opções do Sistema</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="55"/>
+ <location filename="../SystemWindow.ui" line="68"/>
<source>Log Out</source>
<translation>Sair</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="71"/>
+ <location filename="../SystemWindow.ui" line="84"/>
<source>Restart</source>
<translation>Reiniciar</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="87"/>
+ <location filename="../SystemWindow.ui" line="100"/>
<source>Power Off</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="132"/>
+ <location filename="../SystemWindow.ui" line="145"/>
<source>Update Now</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="154"/>
+ <location filename="../SystemWindow.ui" line="167"/>
<source>Updates ready to install</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="192"/>
+ <location filename="../SystemWindow.ui" line="205"/>
<location filename="../SystemWindow.cpp" line="63"/>
<source>Cancel</source>
<translation>Cancelar</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="221"/>
+ <location filename="../SystemWindow.ui" line="234"/>
<source>Lock</source>
<translation>Bloquear</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="237"/>
+ <location filename="../SystemWindow.ui" line="250"/>
<source>Suspend</source>
<translation>Suspender</translation>
</message>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pt_BR.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pt_BR.ts
index ec71e2ac..ca5b75cf 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pt_BR.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pt_BR.ts
@@ -664,12 +664,12 @@
<context>
<name>LBattery</name>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="96"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="98"/>
<source>%1 % (Charging)</source>
<translation>%1 % (carregando)</translation>
</message>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="97"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="99"/>
<source>%1 % (%2 Remaining)</source>
<translation>%1 % (%2 restantes)</translation>
</message>
@@ -855,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="165"/>
- <location filename="../LSession.cpp" line="352"/>
+ <location filename="../LSession.cpp" line="166"/>
+ <location filename="../LSession.cpp" line="355"/>
<source>Desktop</source>
<translation>Área de trabalho</translation>
</message>
@@ -1301,37 +1301,37 @@
<translation>Lumina Desktop RSS</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="143"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
<source>Feed URL: %1</source>
<translation>URL da postagem: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="144"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
<source>Title: %1</source>
<translation>Título: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
<source>Description: %1</source>
<translation>Descrição: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
<source>Website: %1</source>
<translation>Site: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
<source>Last Build Date: %1</source>
<translation>Última data da compilação: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="150"/>
<source>Last Sync: %1</source>
<translation>Última sincronização: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="151"/>
<source>Next Sync: %1</source>
<translation>Próxima sincronização: %1</translation>
</message>
@@ -1517,43 +1517,43 @@
<translation>Opções do sistema</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="55"/>
+ <location filename="../SystemWindow.ui" line="68"/>
<source>Log Out</source>
<translation>Encerrar sessão</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="71"/>
+ <location filename="../SystemWindow.ui" line="84"/>
<source>Restart</source>
<translation>Reiniciar</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="87"/>
+ <location filename="../SystemWindow.ui" line="100"/>
<source>Power Off</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="132"/>
+ <location filename="../SystemWindow.ui" line="145"/>
<source>Update Now</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="154"/>
+ <location filename="../SystemWindow.ui" line="167"/>
<source>Updates ready to install</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="192"/>
+ <location filename="../SystemWindow.ui" line="205"/>
<location filename="../SystemWindow.cpp" line="63"/>
<source>Cancel</source>
<translation>Cancelar</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="221"/>
+ <location filename="../SystemWindow.ui" line="234"/>
<source>Lock</source>
<translation>Bloquear</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="237"/>
+ <location filename="../SystemWindow.ui" line="250"/>
<source>Suspend</source>
<translation>Suspender</translation>
</message>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ro.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ro.ts
index 2f9340c6..b7440a58 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ro.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ro.ts
@@ -664,12 +664,12 @@
<context>
<name>LBattery</name>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="96"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="98"/>
<source>%1 % (Charging)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="97"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="99"/>
<source>%1 % (%2 Remaining)</source>
<translation type="unfinished"></translation>
</message>
@@ -855,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="165"/>
- <location filename="../LSession.cpp" line="352"/>
+ <location filename="../LSession.cpp" line="166"/>
+ <location filename="../LSession.cpp" line="355"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
@@ -1301,37 +1301,37 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="143"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
<source>Feed URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="144"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
<source>Title: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
<source>Description: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
<source>Website: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
<source>Last Build Date: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="150"/>
<source>Last Sync: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="151"/>
<source>Next Sync: %1</source>
<translation type="unfinished"></translation>
</message>
@@ -1517,43 +1517,43 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="55"/>
+ <location filename="../SystemWindow.ui" line="68"/>
<source>Log Out</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="71"/>
+ <location filename="../SystemWindow.ui" line="84"/>
<source>Restart</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="87"/>
+ <location filename="../SystemWindow.ui" line="100"/>
<source>Power Off</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="132"/>
+ <location filename="../SystemWindow.ui" line="145"/>
<source>Update Now</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="154"/>
+ <location filename="../SystemWindow.ui" line="167"/>
<source>Updates ready to install</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="192"/>
+ <location filename="../SystemWindow.ui" line="205"/>
<location filename="../SystemWindow.cpp" line="63"/>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="221"/>
+ <location filename="../SystemWindow.ui" line="234"/>
<source>Lock</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="237"/>
+ <location filename="../SystemWindow.ui" line="250"/>
<source>Suspend</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ru.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ru.ts
index 0e54c34a..84e6a815 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ru.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ru.ts
@@ -664,12 +664,12 @@
<context>
<name>LBattery</name>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="96"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="98"/>
<source>%1 % (Charging)</source>
<translation>%1 % (Заряжается)</translation>
</message>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="97"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="99"/>
<source>%1 % (%2 Remaining)</source>
<translation>%1 % (Осталось %2 )</translation>
</message>
@@ -855,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="165"/>
- <location filename="../LSession.cpp" line="352"/>
+ <location filename="../LSession.cpp" line="166"/>
+ <location filename="../LSession.cpp" line="355"/>
<source>Desktop</source>
<translation>Рабочий стол</translation>
</message>
@@ -1301,37 +1301,37 @@
<translation>RSS рабочего стола Lumina</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="143"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
<source>Feed URL: %1</source>
<translation>URL потока: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="144"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
<source>Title: %1</source>
<translation>Заголовок: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
<source>Description: %1</source>
<translation>Описание: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
<source>Website: %1</source>
<translation>Вэбсайт: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
<source>Last Build Date: %1</source>
<translation>Дата последней сборки: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="150"/>
<source>Last Sync: %1</source>
<translation>Последняя синхронизация: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="151"/>
<source>Next Sync: %1</source>
<translation>Следущая синхронизация: %1</translation>
</message>
@@ -1517,43 +1517,43 @@
<translation>Параметры Системы</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="55"/>
+ <location filename="../SystemWindow.ui" line="68"/>
<source>Log Out</source>
<translation>Завершить Сеанс</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="71"/>
+ <location filename="../SystemWindow.ui" line="84"/>
<source>Restart</source>
<translation>Перезагрузить</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="87"/>
+ <location filename="../SystemWindow.ui" line="100"/>
<source>Power Off</source>
<translation>Выключить питание</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="132"/>
+ <location filename="../SystemWindow.ui" line="145"/>
<source>Update Now</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="154"/>
+ <location filename="../SystemWindow.ui" line="167"/>
<source>Updates ready to install</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="192"/>
+ <location filename="../SystemWindow.ui" line="205"/>
<location filename="../SystemWindow.cpp" line="63"/>
<source>Cancel</source>
<translation>Отмена</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="221"/>
+ <location filename="../SystemWindow.ui" line="234"/>
<source>Lock</source>
<translation>Замок</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="237"/>
+ <location filename="../SystemWindow.ui" line="250"/>
<source>Suspend</source>
<translation>Отложить</translation>
</message>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sk.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sk.ts
index 13e6c9a6..b19ee78c 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sk.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sk.ts
@@ -664,12 +664,12 @@
<context>
<name>LBattery</name>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="96"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="98"/>
<source>%1 % (Charging)</source>
<translation>%1 % (Nabíjania)</translation>
</message>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="97"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="99"/>
<source>%1 % (%2 Remaining)</source>
<translation>%1 % (%2 zostáva)</translation>
</message>
@@ -855,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="165"/>
- <location filename="../LSession.cpp" line="352"/>
+ <location filename="../LSession.cpp" line="166"/>
+ <location filename="../LSession.cpp" line="355"/>
<source>Desktop</source>
<translation type="unfinished">Pracovná plocha</translation>
</message>
@@ -1301,37 +1301,37 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="143"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
<source>Feed URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="144"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
<source>Title: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
<source>Description: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
<source>Website: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
<source>Last Build Date: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="150"/>
<source>Last Sync: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="151"/>
<source>Next Sync: %1</source>
<translation type="unfinished"></translation>
</message>
@@ -1517,43 +1517,43 @@
<translation>Systémové možnosti</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="55"/>
+ <location filename="../SystemWindow.ui" line="68"/>
<source>Log Out</source>
<translation>Odhlásiť sa</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="71"/>
+ <location filename="../SystemWindow.ui" line="84"/>
<source>Restart</source>
<translation>Reštartovať</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="87"/>
+ <location filename="../SystemWindow.ui" line="100"/>
<source>Power Off</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="132"/>
+ <location filename="../SystemWindow.ui" line="145"/>
<source>Update Now</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="154"/>
+ <location filename="../SystemWindow.ui" line="167"/>
<source>Updates ready to install</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="192"/>
+ <location filename="../SystemWindow.ui" line="205"/>
<location filename="../SystemWindow.cpp" line="63"/>
<source>Cancel</source>
<translation>Zrušiť</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="221"/>
+ <location filename="../SystemWindow.ui" line="234"/>
<source>Lock</source>
<translation>Uzamknúť</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="237"/>
+ <location filename="../SystemWindow.ui" line="250"/>
<source>Suspend</source>
<translation>Uspať</translation>
</message>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sl.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sl.ts
index ee11f368..4f250f1d 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sl.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sl.ts
@@ -664,12 +664,12 @@
<context>
<name>LBattery</name>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="96"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="98"/>
<source>%1 % (Charging)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="97"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="99"/>
<source>%1 % (%2 Remaining)</source>
<translation type="unfinished"></translation>
</message>
@@ -855,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="165"/>
- <location filename="../LSession.cpp" line="352"/>
+ <location filename="../LSession.cpp" line="166"/>
+ <location filename="../LSession.cpp" line="355"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
@@ -1301,37 +1301,37 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="143"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
<source>Feed URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="144"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
<source>Title: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
<source>Description: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
<source>Website: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
<source>Last Build Date: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="150"/>
<source>Last Sync: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="151"/>
<source>Next Sync: %1</source>
<translation type="unfinished"></translation>
</message>
@@ -1517,43 +1517,43 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="55"/>
+ <location filename="../SystemWindow.ui" line="68"/>
<source>Log Out</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="71"/>
+ <location filename="../SystemWindow.ui" line="84"/>
<source>Restart</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="87"/>
+ <location filename="../SystemWindow.ui" line="100"/>
<source>Power Off</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="132"/>
+ <location filename="../SystemWindow.ui" line="145"/>
<source>Update Now</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="154"/>
+ <location filename="../SystemWindow.ui" line="167"/>
<source>Updates ready to install</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="192"/>
+ <location filename="../SystemWindow.ui" line="205"/>
<location filename="../SystemWindow.cpp" line="63"/>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="221"/>
+ <location filename="../SystemWindow.ui" line="234"/>
<source>Lock</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="237"/>
+ <location filename="../SystemWindow.ui" line="250"/>
<source>Suspend</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sr.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sr.ts
index 2f9340c6..b7440a58 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sr.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sr.ts
@@ -664,12 +664,12 @@
<context>
<name>LBattery</name>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="96"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="98"/>
<source>%1 % (Charging)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="97"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="99"/>
<source>%1 % (%2 Remaining)</source>
<translation type="unfinished"></translation>
</message>
@@ -855,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="165"/>
- <location filename="../LSession.cpp" line="352"/>
+ <location filename="../LSession.cpp" line="166"/>
+ <location filename="../LSession.cpp" line="355"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
@@ -1301,37 +1301,37 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="143"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
<source>Feed URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="144"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
<source>Title: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
<source>Description: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
<source>Website: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
<source>Last Build Date: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="150"/>
<source>Last Sync: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="151"/>
<source>Next Sync: %1</source>
<translation type="unfinished"></translation>
</message>
@@ -1517,43 +1517,43 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="55"/>
+ <location filename="../SystemWindow.ui" line="68"/>
<source>Log Out</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="71"/>
+ <location filename="../SystemWindow.ui" line="84"/>
<source>Restart</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="87"/>
+ <location filename="../SystemWindow.ui" line="100"/>
<source>Power Off</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="132"/>
+ <location filename="../SystemWindow.ui" line="145"/>
<source>Update Now</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="154"/>
+ <location filename="../SystemWindow.ui" line="167"/>
<source>Updates ready to install</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="192"/>
+ <location filename="../SystemWindow.ui" line="205"/>
<location filename="../SystemWindow.cpp" line="63"/>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="221"/>
+ <location filename="../SystemWindow.ui" line="234"/>
<source>Lock</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="237"/>
+ <location filename="../SystemWindow.ui" line="250"/>
<source>Suspend</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sv.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sv.ts
index e22270c5..f606b4e0 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sv.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sv.ts
@@ -664,12 +664,12 @@
<context>
<name>LBattery</name>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="96"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="98"/>
<source>%1 % (Charging)</source>
<translation>%1 % (Laddar)</translation>
</message>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="97"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="99"/>
<source>%1 % (%2 Remaining)</source>
<translation>%1 % (%2 Återstår)</translation>
</message>
@@ -855,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="165"/>
- <location filename="../LSession.cpp" line="352"/>
+ <location filename="../LSession.cpp" line="166"/>
+ <location filename="../LSession.cpp" line="355"/>
<source>Desktop</source>
<translation>Skrivbord</translation>
</message>
@@ -1301,37 +1301,37 @@
<translation>Lumina Skrivbordets RSS läsare </translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="143"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
<source>Feed URL: %1</source>
<translation>RSS-Flödes URL: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="144"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
<source>Title: %1</source>
<translation>Titel: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
<source>Description: %1</source>
<translation>Beskrivning: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
<source>Website: %1</source>
<translation>Webbplats: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
<source>Last Build Date: %1</source>
<translation>Senaste bygg datum: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="150"/>
<source>Last Sync: %1</source>
<translation>Senaste synkronisering: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="151"/>
<source>Next Sync: %1</source>
<translation>Nästa synkronisering: %1</translation>
</message>
@@ -1517,43 +1517,43 @@
<translation>Systemalternativ</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="55"/>
+ <location filename="../SystemWindow.ui" line="68"/>
<source>Log Out</source>
<translation>Logga ut</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="71"/>
+ <location filename="../SystemWindow.ui" line="84"/>
<source>Restart</source>
<translation>Starta om</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="87"/>
+ <location filename="../SystemWindow.ui" line="100"/>
<source>Power Off</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="132"/>
+ <location filename="../SystemWindow.ui" line="145"/>
<source>Update Now</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="154"/>
+ <location filename="../SystemWindow.ui" line="167"/>
<source>Updates ready to install</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="192"/>
+ <location filename="../SystemWindow.ui" line="205"/>
<location filename="../SystemWindow.cpp" line="63"/>
<source>Cancel</source>
<translation>Avbryt</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="221"/>
+ <location filename="../SystemWindow.ui" line="234"/>
<source>Lock</source>
<translation>Lås</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="237"/>
+ <location filename="../SystemWindow.ui" line="250"/>
<source>Suspend</source>
<translation>Vänteläge</translation>
</message>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sw.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sw.ts
index 2f9340c6..b7440a58 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sw.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sw.ts
@@ -664,12 +664,12 @@
<context>
<name>LBattery</name>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="96"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="98"/>
<source>%1 % (Charging)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="97"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="99"/>
<source>%1 % (%2 Remaining)</source>
<translation type="unfinished"></translation>
</message>
@@ -855,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="165"/>
- <location filename="../LSession.cpp" line="352"/>
+ <location filename="../LSession.cpp" line="166"/>
+ <location filename="../LSession.cpp" line="355"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
@@ -1301,37 +1301,37 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="143"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
<source>Feed URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="144"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
<source>Title: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
<source>Description: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
<source>Website: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
<source>Last Build Date: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="150"/>
<source>Last Sync: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="151"/>
<source>Next Sync: %1</source>
<translation type="unfinished"></translation>
</message>
@@ -1517,43 +1517,43 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="55"/>
+ <location filename="../SystemWindow.ui" line="68"/>
<source>Log Out</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="71"/>
+ <location filename="../SystemWindow.ui" line="84"/>
<source>Restart</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="87"/>
+ <location filename="../SystemWindow.ui" line="100"/>
<source>Power Off</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="132"/>
+ <location filename="../SystemWindow.ui" line="145"/>
<source>Update Now</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="154"/>
+ <location filename="../SystemWindow.ui" line="167"/>
<source>Updates ready to install</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="192"/>
+ <location filename="../SystemWindow.ui" line="205"/>
<location filename="../SystemWindow.cpp" line="63"/>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="221"/>
+ <location filename="../SystemWindow.ui" line="234"/>
<source>Lock</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="237"/>
+ <location filename="../SystemWindow.ui" line="250"/>
<source>Suspend</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ta.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ta.ts
index 2f9340c6..b7440a58 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ta.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ta.ts
@@ -664,12 +664,12 @@
<context>
<name>LBattery</name>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="96"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="98"/>
<source>%1 % (Charging)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="97"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="99"/>
<source>%1 % (%2 Remaining)</source>
<translation type="unfinished"></translation>
</message>
@@ -855,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="165"/>
- <location filename="../LSession.cpp" line="352"/>
+ <location filename="../LSession.cpp" line="166"/>
+ <location filename="../LSession.cpp" line="355"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
@@ -1301,37 +1301,37 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="143"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
<source>Feed URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="144"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
<source>Title: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
<source>Description: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
<source>Website: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
<source>Last Build Date: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="150"/>
<source>Last Sync: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="151"/>
<source>Next Sync: %1</source>
<translation type="unfinished"></translation>
</message>
@@ -1517,43 +1517,43 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="55"/>
+ <location filename="../SystemWindow.ui" line="68"/>
<source>Log Out</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="71"/>
+ <location filename="../SystemWindow.ui" line="84"/>
<source>Restart</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="87"/>
+ <location filename="../SystemWindow.ui" line="100"/>
<source>Power Off</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="132"/>
+ <location filename="../SystemWindow.ui" line="145"/>
<source>Update Now</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="154"/>
+ <location filename="../SystemWindow.ui" line="167"/>
<source>Updates ready to install</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="192"/>
+ <location filename="../SystemWindow.ui" line="205"/>
<location filename="../SystemWindow.cpp" line="63"/>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="221"/>
+ <location filename="../SystemWindow.ui" line="234"/>
<source>Lock</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="237"/>
+ <location filename="../SystemWindow.ui" line="250"/>
<source>Suspend</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_tg.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_tg.ts
index 2f9340c6..b7440a58 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_tg.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_tg.ts
@@ -664,12 +664,12 @@
<context>
<name>LBattery</name>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="96"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="98"/>
<source>%1 % (Charging)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="97"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="99"/>
<source>%1 % (%2 Remaining)</source>
<translation type="unfinished"></translation>
</message>
@@ -855,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="165"/>
- <location filename="../LSession.cpp" line="352"/>
+ <location filename="../LSession.cpp" line="166"/>
+ <location filename="../LSession.cpp" line="355"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
@@ -1301,37 +1301,37 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="143"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
<source>Feed URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="144"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
<source>Title: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
<source>Description: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
<source>Website: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
<source>Last Build Date: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="150"/>
<source>Last Sync: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="151"/>
<source>Next Sync: %1</source>
<translation type="unfinished"></translation>
</message>
@@ -1517,43 +1517,43 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="55"/>
+ <location filename="../SystemWindow.ui" line="68"/>
<source>Log Out</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="71"/>
+ <location filename="../SystemWindow.ui" line="84"/>
<source>Restart</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="87"/>
+ <location filename="../SystemWindow.ui" line="100"/>
<source>Power Off</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="132"/>
+ <location filename="../SystemWindow.ui" line="145"/>
<source>Update Now</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="154"/>
+ <location filename="../SystemWindow.ui" line="167"/>
<source>Updates ready to install</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="192"/>
+ <location filename="../SystemWindow.ui" line="205"/>
<location filename="../SystemWindow.cpp" line="63"/>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="221"/>
+ <location filename="../SystemWindow.ui" line="234"/>
<source>Lock</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="237"/>
+ <location filename="../SystemWindow.ui" line="250"/>
<source>Suspend</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_th.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_th.ts
index 2f9340c6..b7440a58 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_th.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_th.ts
@@ -664,12 +664,12 @@
<context>
<name>LBattery</name>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="96"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="98"/>
<source>%1 % (Charging)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="97"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="99"/>
<source>%1 % (%2 Remaining)</source>
<translation type="unfinished"></translation>
</message>
@@ -855,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="165"/>
- <location filename="../LSession.cpp" line="352"/>
+ <location filename="../LSession.cpp" line="166"/>
+ <location filename="../LSession.cpp" line="355"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
@@ -1301,37 +1301,37 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="143"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
<source>Feed URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="144"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
<source>Title: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
<source>Description: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
<source>Website: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
<source>Last Build Date: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="150"/>
<source>Last Sync: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="151"/>
<source>Next Sync: %1</source>
<translation type="unfinished"></translation>
</message>
@@ -1517,43 +1517,43 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="55"/>
+ <location filename="../SystemWindow.ui" line="68"/>
<source>Log Out</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="71"/>
+ <location filename="../SystemWindow.ui" line="84"/>
<source>Restart</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="87"/>
+ <location filename="../SystemWindow.ui" line="100"/>
<source>Power Off</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="132"/>
+ <location filename="../SystemWindow.ui" line="145"/>
<source>Update Now</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="154"/>
+ <location filename="../SystemWindow.ui" line="167"/>
<source>Updates ready to install</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="192"/>
+ <location filename="../SystemWindow.ui" line="205"/>
<location filename="../SystemWindow.cpp" line="63"/>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="221"/>
+ <location filename="../SystemWindow.ui" line="234"/>
<source>Lock</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="237"/>
+ <location filename="../SystemWindow.ui" line="250"/>
<source>Suspend</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_tr.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_tr.ts
index 704e1491..8ff02ed3 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_tr.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_tr.ts
@@ -664,12 +664,12 @@
<context>
<name>LBattery</name>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="96"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="98"/>
<source>%1 % (Charging)</source>
<translation>% %1 (Doluyor)</translation>
</message>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="97"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="99"/>
<source>%1 % (%2 Remaining)</source>
<translation>% %1 (Kalan %2)</translation>
</message>
@@ -855,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="165"/>
- <location filename="../LSession.cpp" line="352"/>
+ <location filename="../LSession.cpp" line="166"/>
+ <location filename="../LSession.cpp" line="355"/>
<source>Desktop</source>
<translation>Masaüstü</translation>
</message>
@@ -1301,37 +1301,37 @@
<translation>Lumina Masaüstü RSS</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="143"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
<source>Feed URL: %1</source>
<translation>Akış URL: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="144"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
<source>Title: %1</source>
<translation>Başlık: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
<source>Description: %1</source>
<translation>Açıklama: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
<source>Website: %1</source>
<translation>Web sitesi: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
<source>Last Build Date: %1</source>
<translation>Son Oluşturma Tarihi: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="150"/>
<source>Last Sync: %1</source>
<translation>Son Eşitleme: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="151"/>
<source>Next Sync: %1</source>
<translation>Sonraki Eşitleme: %1</translation>
</message>
@@ -1517,43 +1517,43 @@
<translation>Sistem Seçenekleri</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="55"/>
+ <location filename="../SystemWindow.ui" line="68"/>
<source>Log Out</source>
<translation>Oturumu Kapat</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="71"/>
+ <location filename="../SystemWindow.ui" line="84"/>
<source>Restart</source>
<translation>Yeniden başlat</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="87"/>
+ <location filename="../SystemWindow.ui" line="100"/>
<source>Power Off</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="132"/>
+ <location filename="../SystemWindow.ui" line="145"/>
<source>Update Now</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="154"/>
+ <location filename="../SystemWindow.ui" line="167"/>
<source>Updates ready to install</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="192"/>
+ <location filename="../SystemWindow.ui" line="205"/>
<location filename="../SystemWindow.cpp" line="63"/>
<source>Cancel</source>
<translation>İptal</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="221"/>
+ <location filename="../SystemWindow.ui" line="234"/>
<source>Lock</source>
<translation>Kilitle</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="237"/>
+ <location filename="../SystemWindow.ui" line="250"/>
<source>Suspend</source>
<translation>Beklet</translation>
</message>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_uk.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_uk.ts
index ec972577..cf287d79 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_uk.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_uk.ts
@@ -664,12 +664,12 @@
<context>
<name>LBattery</name>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="96"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="98"/>
<source>%1 % (Charging)</source>
<translation>%1 % (Заряд)</translation>
</message>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="97"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="99"/>
<source>%1 % (%2 Remaining)</source>
<translation>%1 (залишилося %2)</translation>
</message>
@@ -855,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="165"/>
- <location filename="../LSession.cpp" line="352"/>
+ <location filename="../LSession.cpp" line="166"/>
+ <location filename="../LSession.cpp" line="355"/>
<source>Desktop</source>
<translation>Робочий стіл</translation>
</message>
@@ -1301,37 +1301,37 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="143"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
<source>Feed URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="144"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
<source>Title: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
<source>Description: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
<source>Website: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
<source>Last Build Date: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="150"/>
<source>Last Sync: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="151"/>
<source>Next Sync: %1</source>
<translation type="unfinished"></translation>
</message>
@@ -1517,43 +1517,43 @@
<translation>Параметри системи</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="55"/>
+ <location filename="../SystemWindow.ui" line="68"/>
<source>Log Out</source>
<translation>Завершити сеанс</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="71"/>
+ <location filename="../SystemWindow.ui" line="84"/>
<source>Restart</source>
<translation>Перезапустити</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="87"/>
+ <location filename="../SystemWindow.ui" line="100"/>
<source>Power Off</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="132"/>
+ <location filename="../SystemWindow.ui" line="145"/>
<source>Update Now</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="154"/>
+ <location filename="../SystemWindow.ui" line="167"/>
<source>Updates ready to install</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="192"/>
+ <location filename="../SystemWindow.ui" line="205"/>
<location filename="../SystemWindow.cpp" line="63"/>
<source>Cancel</source>
<translation>Скасувати</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="221"/>
+ <location filename="../SystemWindow.ui" line="234"/>
<source>Lock</source>
<translation>Заблокувати</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="237"/>
+ <location filename="../SystemWindow.ui" line="250"/>
<source>Suspend</source>
<translation>Призупинити</translation>
</message>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_uz.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_uz.ts
index 2f9340c6..b7440a58 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_uz.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_uz.ts
@@ -664,12 +664,12 @@
<context>
<name>LBattery</name>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="96"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="98"/>
<source>%1 % (Charging)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="97"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="99"/>
<source>%1 % (%2 Remaining)</source>
<translation type="unfinished"></translation>
</message>
@@ -855,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="165"/>
- <location filename="../LSession.cpp" line="352"/>
+ <location filename="../LSession.cpp" line="166"/>
+ <location filename="../LSession.cpp" line="355"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
@@ -1301,37 +1301,37 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="143"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
<source>Feed URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="144"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
<source>Title: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
<source>Description: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
<source>Website: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
<source>Last Build Date: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="150"/>
<source>Last Sync: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="151"/>
<source>Next Sync: %1</source>
<translation type="unfinished"></translation>
</message>
@@ -1517,43 +1517,43 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="55"/>
+ <location filename="../SystemWindow.ui" line="68"/>
<source>Log Out</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="71"/>
+ <location filename="../SystemWindow.ui" line="84"/>
<source>Restart</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="87"/>
+ <location filename="../SystemWindow.ui" line="100"/>
<source>Power Off</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="132"/>
+ <location filename="../SystemWindow.ui" line="145"/>
<source>Update Now</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="154"/>
+ <location filename="../SystemWindow.ui" line="167"/>
<source>Updates ready to install</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="192"/>
+ <location filename="../SystemWindow.ui" line="205"/>
<location filename="../SystemWindow.cpp" line="63"/>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="221"/>
+ <location filename="../SystemWindow.ui" line="234"/>
<source>Lock</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="237"/>
+ <location filename="../SystemWindow.ui" line="250"/>
<source>Suspend</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_vi.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_vi.ts
index 2f9340c6..b7440a58 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_vi.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_vi.ts
@@ -664,12 +664,12 @@
<context>
<name>LBattery</name>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="96"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="98"/>
<source>%1 % (Charging)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="97"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="99"/>
<source>%1 % (%2 Remaining)</source>
<translation type="unfinished"></translation>
</message>
@@ -855,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="165"/>
- <location filename="../LSession.cpp" line="352"/>
+ <location filename="../LSession.cpp" line="166"/>
+ <location filename="../LSession.cpp" line="355"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
@@ -1301,37 +1301,37 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="143"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
<source>Feed URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="144"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
<source>Title: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
<source>Description: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
<source>Website: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
<source>Last Build Date: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="150"/>
<source>Last Sync: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="151"/>
<source>Next Sync: %1</source>
<translation type="unfinished"></translation>
</message>
@@ -1517,43 +1517,43 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="55"/>
+ <location filename="../SystemWindow.ui" line="68"/>
<source>Log Out</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="71"/>
+ <location filename="../SystemWindow.ui" line="84"/>
<source>Restart</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="87"/>
+ <location filename="../SystemWindow.ui" line="100"/>
<source>Power Off</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="132"/>
+ <location filename="../SystemWindow.ui" line="145"/>
<source>Update Now</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="154"/>
+ <location filename="../SystemWindow.ui" line="167"/>
<source>Updates ready to install</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="192"/>
+ <location filename="../SystemWindow.ui" line="205"/>
<location filename="../SystemWindow.cpp" line="63"/>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="221"/>
+ <location filename="../SystemWindow.ui" line="234"/>
<source>Lock</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="237"/>
+ <location filename="../SystemWindow.ui" line="250"/>
<source>Suspend</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_zh_CN.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_zh_CN.ts
index 8d7ea859..226730b6 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_zh_CN.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_zh_CN.ts
@@ -664,12 +664,12 @@
<context>
<name>LBattery</name>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="96"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="98"/>
<source>%1 % (Charging)</source>
<translation>%1 %(充电)</translation>
</message>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="97"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="99"/>
<source>%1 % (%2 Remaining)</source>
<translation>%1 (%2 剩余)</translation>
</message>
@@ -855,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="165"/>
- <location filename="../LSession.cpp" line="352"/>
+ <location filename="../LSession.cpp" line="166"/>
+ <location filename="../LSession.cpp" line="355"/>
<source>Desktop</source>
<translation>桌面</translation>
</message>
@@ -1301,37 +1301,37 @@
<translation>Lumina 桌面 RSS</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="143"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
<source>Feed URL: %1</source>
<translation>订阅地址: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="144"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
<source>Title: %1</source>
<translation>标题: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
<source>Description: %1</source>
<translation>描述: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
<source>Website: %1</source>
<translation>网站: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
<source>Last Build Date: %1</source>
<translation>最后构建日期: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="150"/>
<source>Last Sync: %1</source>
<translation>最后更新于: %1</translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="151"/>
<source>Next Sync: %1</source>
<translation>下次更新: %1</translation>
</message>
@@ -1517,43 +1517,43 @@
<translation>系统选项</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="55"/>
+ <location filename="../SystemWindow.ui" line="68"/>
<source>Log Out</source>
<translation>注销</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="71"/>
+ <location filename="../SystemWindow.ui" line="84"/>
<source>Restart</source>
<translation>重启</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="87"/>
+ <location filename="../SystemWindow.ui" line="100"/>
<source>Power Off</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="132"/>
+ <location filename="../SystemWindow.ui" line="145"/>
<source>Update Now</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="154"/>
+ <location filename="../SystemWindow.ui" line="167"/>
<source>Updates ready to install</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="192"/>
+ <location filename="../SystemWindow.ui" line="205"/>
<location filename="../SystemWindow.cpp" line="63"/>
<source>Cancel</source>
<translation>取消</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="221"/>
+ <location filename="../SystemWindow.ui" line="234"/>
<source>Lock</source>
<translation>锁定</translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="237"/>
+ <location filename="../SystemWindow.ui" line="250"/>
<source>Suspend</source>
<translation>休眠</translation>
</message>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_zh_HK.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_zh_HK.ts
index 2f9340c6..b7440a58 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_zh_HK.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_zh_HK.ts
@@ -664,12 +664,12 @@
<context>
<name>LBattery</name>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="96"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="98"/>
<source>%1 % (Charging)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="97"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="99"/>
<source>%1 % (%2 Remaining)</source>
<translation type="unfinished"></translation>
</message>
@@ -855,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="165"/>
- <location filename="../LSession.cpp" line="352"/>
+ <location filename="../LSession.cpp" line="166"/>
+ <location filename="../LSession.cpp" line="355"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
@@ -1301,37 +1301,37 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="143"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
<source>Feed URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="144"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
<source>Title: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
<source>Description: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
<source>Website: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
<source>Last Build Date: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="150"/>
<source>Last Sync: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="151"/>
<source>Next Sync: %1</source>
<translation type="unfinished"></translation>
</message>
@@ -1517,43 +1517,43 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="55"/>
+ <location filename="../SystemWindow.ui" line="68"/>
<source>Log Out</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="71"/>
+ <location filename="../SystemWindow.ui" line="84"/>
<source>Restart</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="87"/>
+ <location filename="../SystemWindow.ui" line="100"/>
<source>Power Off</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="132"/>
+ <location filename="../SystemWindow.ui" line="145"/>
<source>Update Now</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="154"/>
+ <location filename="../SystemWindow.ui" line="167"/>
<source>Updates ready to install</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="192"/>
+ <location filename="../SystemWindow.ui" line="205"/>
<location filename="../SystemWindow.cpp" line="63"/>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="221"/>
+ <location filename="../SystemWindow.ui" line="234"/>
<source>Lock</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="237"/>
+ <location filename="../SystemWindow.ui" line="250"/>
<source>Suspend</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_zh_TW.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_zh_TW.ts
index 2f9340c6..b7440a58 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_zh_TW.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_zh_TW.ts
@@ -664,12 +664,12 @@
<context>
<name>LBattery</name>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="96"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="98"/>
<source>%1 % (Charging)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="97"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="99"/>
<source>%1 % (%2 Remaining)</source>
<translation type="unfinished"></translation>
</message>
@@ -855,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="165"/>
- <location filename="../LSession.cpp" line="352"/>
+ <location filename="../LSession.cpp" line="166"/>
+ <location filename="../LSession.cpp" line="355"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
@@ -1301,37 +1301,37 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="143"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
<source>Feed URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="144"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
<source>Title: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
<source>Description: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
<source>Website: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
<source>Last Build Date: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="150"/>
<source>Last Sync: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="151"/>
<source>Next Sync: %1</source>
<translation type="unfinished"></translation>
</message>
@@ -1517,43 +1517,43 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="55"/>
+ <location filename="../SystemWindow.ui" line="68"/>
<source>Log Out</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="71"/>
+ <location filename="../SystemWindow.ui" line="84"/>
<source>Restart</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="87"/>
+ <location filename="../SystemWindow.ui" line="100"/>
<source>Power Off</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="132"/>
+ <location filename="../SystemWindow.ui" line="145"/>
<source>Update Now</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="154"/>
+ <location filename="../SystemWindow.ui" line="167"/>
<source>Updates ready to install</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="192"/>
+ <location filename="../SystemWindow.ui" line="205"/>
<location filename="../SystemWindow.cpp" line="63"/>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="221"/>
+ <location filename="../SystemWindow.ui" line="234"/>
<source>Lock</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="237"/>
+ <location filename="../SystemWindow.ui" line="250"/>
<source>Suspend</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_zu.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_zu.ts
index 2f9340c6..b7440a58 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_zu.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_zu.ts
@@ -664,12 +664,12 @@
<context>
<name>LBattery</name>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="96"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="98"/>
<source>%1 % (Charging)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../panel-plugins/battery/LBattery.cpp" line="97"/>
+ <location filename="../panel-plugins/battery/LBattery.cpp" line="99"/>
<source>%1 % (%2 Remaining)</source>
<translation type="unfinished"></translation>
</message>
@@ -855,8 +855,8 @@
<context>
<name>LSession</name>
<message>
- <location filename="../LSession.cpp" line="165"/>
- <location filename="../LSession.cpp" line="352"/>
+ <location filename="../LSession.cpp" line="166"/>
+ <location filename="../LSession.cpp" line="355"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
@@ -1301,37 +1301,37 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="143"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
<source>Feed URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="144"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
<source>Title: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="145"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
<source>Description: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="146"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
<source>Website: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
<source>Last Build Date: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="150"/>
<source>Last Sync: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/>
+ <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="151"/>
<source>Next Sync: %1</source>
<translation type="unfinished"></translation>
</message>
@@ -1517,43 +1517,43 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="55"/>
+ <location filename="../SystemWindow.ui" line="68"/>
<source>Log Out</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="71"/>
+ <location filename="../SystemWindow.ui" line="84"/>
<source>Restart</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="87"/>
+ <location filename="../SystemWindow.ui" line="100"/>
<source>Power Off</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="132"/>
+ <location filename="../SystemWindow.ui" line="145"/>
<source>Update Now</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="154"/>
+ <location filename="../SystemWindow.ui" line="167"/>
<source>Updates ready to install</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="192"/>
+ <location filename="../SystemWindow.ui" line="205"/>
<location filename="../SystemWindow.cpp" line="63"/>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="221"/>
+ <location filename="../SystemWindow.ui" line="234"/>
<source>Lock</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../SystemWindow.ui" line="237"/>
+ <location filename="../SystemWindow.ui" line="250"/>
<source>Suspend</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src-qt5/core/lumina-desktop/panel-plugins/battery/LBattery.cpp b/src-qt5/core/lumina-desktop/panel-plugins/battery/LBattery.cpp
index 69ea5faa..1870eefb 100644
--- a/src-qt5/core/lumina-desktop/panel-plugins/battery/LBattery.cpp
+++ b/src-qt5/core/lumina-desktop/panel-plugins/battery/LBattery.cpp
@@ -78,19 +78,20 @@ void LBattery::updateBattery(bool force){
break;
}
}
- if(icon<iconOld && icon==0){
- //Play some audio warning chime when
- bool playaudio = sessionsettings->value("PlayBatteryLowAudio",true).toBool();
- if( playaudio ){ QString sfile = LSession::handle()->sessionSettings()->value("audiofiles/batterylow", LOS::LuminaShare()+"low-battery.ogg").toString();
+ if(icon<iconOld && icon==0){
+ //Play some audio warning chime when
+ bool playaudio = sessionsettings->value("PlayBatteryLowAudio",true).toBool();
+ if( playaudio ){
+ QString sfile = LSession::handle()->sessionSettings()->value("audiofiles/batterylow", LOS::LuminaShare()+"low-battery.ogg").toString();
LSession::handle()->playAudioFile(sfile);
- }
+ }
+ }
- if(icon==0){ label->setStyleSheet("QLabel{ background: red;}"); }
- else if(icon==14 && charge>98){ label->setStyleSheet("QLabel{ background: green;}"); }
- else{ label->setStyleSheet("QLabel{ background: transparent;}"); }
- iconOld = icon;
+ if(icon==0){ label->setStyleSheet("QLabel{ background: red;}"); }
+ else if(icon==14 && charge>98){ label->setStyleSheet("QLabel{ background: green;}"); }
+ else{ label->setStyleSheet("QLabel{ background: transparent;}"); }
+ iconOld = icon;
- }
//Now update the display
QString tt;
//Make sure the tooltip can be properly translated as necessary (Ken Moore 5/9/14)
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_af.ts b/src-qt5/core/lumina-open/i18n/lumina-open_af.ts
index 607f911f..514c2cc0 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_af.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_af.ts
@@ -147,59 +147,59 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="191"/>
- <location filename="../main.cpp" line="197"/>
+ <location filename="../main.cpp" line="199"/>
+ <location filename="../main.cpp" line="213"/>
<source>Audio Volume %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="205"/>
- <location filename="../main.cpp" line="214"/>
+ <location filename="../main.cpp" line="221"/>
+ <location filename="../main.cpp" line="230"/>
<source>Screen Brightness %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="246"/>
+ <location filename="../main.cpp" line="262"/>
<source>Invalid file or URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="267"/>
+ <location filename="../main.cpp" line="283"/>
<source>Application entry is invalid: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="278"/>
+ <location filename="../main.cpp" line="294"/>
<source>Application shortcut is missing the launching information (malformed shortcut): %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="291"/>
+ <location filename="../main.cpp" line="307"/>
<source>URL shortcut is missing the URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="302"/>
+ <location filename="../main.cpp" line="318"/>
<source>Directory shortcut is missing the path to the directory: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="307"/>
+ <location filename="../main.cpp" line="323"/>
<source>Unknown type of shortcut : %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="370"/>
+ <location filename="../main.cpp" line="386"/>
<source>Could not find &quot;%1&quot;. Please ensure it is installed first.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>Application Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>The following application experienced an error and needed to close:</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_ar.ts b/src-qt5/core/lumina-open/i18n/lumina-open_ar.ts
index 607f911f..514c2cc0 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_ar.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_ar.ts
@@ -147,59 +147,59 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="191"/>
- <location filename="../main.cpp" line="197"/>
+ <location filename="../main.cpp" line="199"/>
+ <location filename="../main.cpp" line="213"/>
<source>Audio Volume %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="205"/>
- <location filename="../main.cpp" line="214"/>
+ <location filename="../main.cpp" line="221"/>
+ <location filename="../main.cpp" line="230"/>
<source>Screen Brightness %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="246"/>
+ <location filename="../main.cpp" line="262"/>
<source>Invalid file or URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="267"/>
+ <location filename="../main.cpp" line="283"/>
<source>Application entry is invalid: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="278"/>
+ <location filename="../main.cpp" line="294"/>
<source>Application shortcut is missing the launching information (malformed shortcut): %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="291"/>
+ <location filename="../main.cpp" line="307"/>
<source>URL shortcut is missing the URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="302"/>
+ <location filename="../main.cpp" line="318"/>
<source>Directory shortcut is missing the path to the directory: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="307"/>
+ <location filename="../main.cpp" line="323"/>
<source>Unknown type of shortcut : %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="370"/>
+ <location filename="../main.cpp" line="386"/>
<source>Could not find &quot;%1&quot;. Please ensure it is installed first.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>Application Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>The following application experienced an error and needed to close:</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_az.ts b/src-qt5/core/lumina-open/i18n/lumina-open_az.ts
index 607f911f..514c2cc0 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_az.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_az.ts
@@ -147,59 +147,59 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="191"/>
- <location filename="../main.cpp" line="197"/>
+ <location filename="../main.cpp" line="199"/>
+ <location filename="../main.cpp" line="213"/>
<source>Audio Volume %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="205"/>
- <location filename="../main.cpp" line="214"/>
+ <location filename="../main.cpp" line="221"/>
+ <location filename="../main.cpp" line="230"/>
<source>Screen Brightness %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="246"/>
+ <location filename="../main.cpp" line="262"/>
<source>Invalid file or URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="267"/>
+ <location filename="../main.cpp" line="283"/>
<source>Application entry is invalid: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="278"/>
+ <location filename="../main.cpp" line="294"/>
<source>Application shortcut is missing the launching information (malformed shortcut): %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="291"/>
+ <location filename="../main.cpp" line="307"/>
<source>URL shortcut is missing the URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="302"/>
+ <location filename="../main.cpp" line="318"/>
<source>Directory shortcut is missing the path to the directory: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="307"/>
+ <location filename="../main.cpp" line="323"/>
<source>Unknown type of shortcut : %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="370"/>
+ <location filename="../main.cpp" line="386"/>
<source>Could not find &quot;%1&quot;. Please ensure it is installed first.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>Application Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>The following application experienced an error and needed to close:</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_bg.ts b/src-qt5/core/lumina-open/i18n/lumina-open_bg.ts
index e2f19d0a..d6c2c195 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_bg.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_bg.ts
@@ -147,59 +147,59 @@
<translation>Грешка във файла</translation>
</message>
<message>
- <location filename="../main.cpp" line="191"/>
- <location filename="../main.cpp" line="197"/>
+ <location filename="../main.cpp" line="199"/>
+ <location filename="../main.cpp" line="213"/>
<source>Audio Volume %1%</source>
<translation>Сила на звука %1%</translation>
</message>
<message>
- <location filename="../main.cpp" line="205"/>
- <location filename="../main.cpp" line="214"/>
+ <location filename="../main.cpp" line="221"/>
+ <location filename="../main.cpp" line="230"/>
<source>Screen Brightness %1%</source>
<translation>Яркост на екрана %1%</translation>
</message>
<message>
- <location filename="../main.cpp" line="246"/>
+ <location filename="../main.cpp" line="262"/>
<source>Invalid file or URL: %1</source>
<translation>Невалиден файл или адрес: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="267"/>
+ <location filename="../main.cpp" line="283"/>
<source>Application entry is invalid: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="278"/>
+ <location filename="../main.cpp" line="294"/>
<source>Application shortcut is missing the launching information (malformed shortcut): %1</source>
<translation>Информацията за стартиране липсва от прекия път (повреден пряк път): %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="291"/>
+ <location filename="../main.cpp" line="307"/>
<source>URL shortcut is missing the URL: %1</source>
<translation>Адресът липсва от прекия път към отдалечен адрес: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="302"/>
+ <location filename="../main.cpp" line="318"/>
<source>Directory shortcut is missing the path to the directory: %1</source>
<translation>Пътят към директорията липсва от прекия път към директорията: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="307"/>
+ <location filename="../main.cpp" line="323"/>
<source>Unknown type of shortcut : %1</source>
<translation>Непознат тип пряк път : %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="370"/>
+ <location filename="../main.cpp" line="386"/>
<source>Could not find &quot;%1&quot;. Please ensure it is installed first.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>Application Error</source>
<translation>Грешка в програмата</translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>The following application experienced an error and needed to close:</source>
<translation>Възникна грешка в програмата и трябваше да бъде затворена:</translation>
</message>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_bn.ts b/src-qt5/core/lumina-open/i18n/lumina-open_bn.ts
index 607f911f..514c2cc0 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_bn.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_bn.ts
@@ -147,59 +147,59 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="191"/>
- <location filename="../main.cpp" line="197"/>
+ <location filename="../main.cpp" line="199"/>
+ <location filename="../main.cpp" line="213"/>
<source>Audio Volume %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="205"/>
- <location filename="../main.cpp" line="214"/>
+ <location filename="../main.cpp" line="221"/>
+ <location filename="../main.cpp" line="230"/>
<source>Screen Brightness %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="246"/>
+ <location filename="../main.cpp" line="262"/>
<source>Invalid file or URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="267"/>
+ <location filename="../main.cpp" line="283"/>
<source>Application entry is invalid: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="278"/>
+ <location filename="../main.cpp" line="294"/>
<source>Application shortcut is missing the launching information (malformed shortcut): %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="291"/>
+ <location filename="../main.cpp" line="307"/>
<source>URL shortcut is missing the URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="302"/>
+ <location filename="../main.cpp" line="318"/>
<source>Directory shortcut is missing the path to the directory: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="307"/>
+ <location filename="../main.cpp" line="323"/>
<source>Unknown type of shortcut : %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="370"/>
+ <location filename="../main.cpp" line="386"/>
<source>Could not find &quot;%1&quot;. Please ensure it is installed first.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>Application Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>The following application experienced an error and needed to close:</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_bs.ts b/src-qt5/core/lumina-open/i18n/lumina-open_bs.ts
index 607f911f..514c2cc0 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_bs.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_bs.ts
@@ -147,59 +147,59 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="191"/>
- <location filename="../main.cpp" line="197"/>
+ <location filename="../main.cpp" line="199"/>
+ <location filename="../main.cpp" line="213"/>
<source>Audio Volume %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="205"/>
- <location filename="../main.cpp" line="214"/>
+ <location filename="../main.cpp" line="221"/>
+ <location filename="../main.cpp" line="230"/>
<source>Screen Brightness %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="246"/>
+ <location filename="../main.cpp" line="262"/>
<source>Invalid file or URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="267"/>
+ <location filename="../main.cpp" line="283"/>
<source>Application entry is invalid: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="278"/>
+ <location filename="../main.cpp" line="294"/>
<source>Application shortcut is missing the launching information (malformed shortcut): %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="291"/>
+ <location filename="../main.cpp" line="307"/>
<source>URL shortcut is missing the URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="302"/>
+ <location filename="../main.cpp" line="318"/>
<source>Directory shortcut is missing the path to the directory: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="307"/>
+ <location filename="../main.cpp" line="323"/>
<source>Unknown type of shortcut : %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="370"/>
+ <location filename="../main.cpp" line="386"/>
<source>Could not find &quot;%1&quot;. Please ensure it is installed first.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>Application Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>The following application experienced an error and needed to close:</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_ca.ts b/src-qt5/core/lumina-open/i18n/lumina-open_ca.ts
index ff2c550b..ac403ed0 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_ca.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_ca.ts
@@ -147,59 +147,59 @@
<translation>Error del fitxer</translation>
</message>
<message>
- <location filename="../main.cpp" line="191"/>
- <location filename="../main.cpp" line="197"/>
+ <location filename="../main.cpp" line="199"/>
+ <location filename="../main.cpp" line="213"/>
<source>Audio Volume %1%</source>
<translation>Volum de l&apos;àudio: %1%</translation>
</message>
<message>
- <location filename="../main.cpp" line="205"/>
- <location filename="../main.cpp" line="214"/>
+ <location filename="../main.cpp" line="221"/>
+ <location filename="../main.cpp" line="230"/>
<source>Screen Brightness %1%</source>
<translation>Brillantor de la pantalla: %1%</translation>
</message>
<message>
- <location filename="../main.cpp" line="246"/>
+ <location filename="../main.cpp" line="262"/>
<source>Invalid file or URL: %1</source>
<translation>Fitxer o URL no vàlids: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="267"/>
+ <location filename="../main.cpp" line="283"/>
<source>Application entry is invalid: %1</source>
<translation>L&apos;entrada de l&apos;aplicació no és vàlida: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="278"/>
+ <location filename="../main.cpp" line="294"/>
<source>Application shortcut is missing the launching information (malformed shortcut): %1</source>
<translation>La drecera de l&apos;aplicació no té la informació de llançament (drecera malformada): %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="291"/>
+ <location filename="../main.cpp" line="307"/>
<source>URL shortcut is missing the URL: %1</source>
<translation>La drecera de l&apos;URL no té l&apos;URL: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="302"/>
+ <location filename="../main.cpp" line="318"/>
<source>Directory shortcut is missing the path to the directory: %1</source>
<translation>La drecera del directori no té el camí cap al directori: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="307"/>
+ <location filename="../main.cpp" line="323"/>
<source>Unknown type of shortcut : %1</source>
<translation>Tipus de drecera desconegut: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="370"/>
+ <location filename="../main.cpp" line="386"/>
<source>Could not find &quot;%1&quot;. Please ensure it is installed first.</source>
<translation>No s&apos;ha pogut trobar &quot;%1&quot;. Si us plau, assegureu-vos que estigui instal·lat.</translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>Application Error</source>
<translation>Error de l&apos;aplicació</translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>The following application experienced an error and needed to close:</source>
<translation>L&apos;aplicació següent ha tingut un error i s&apos;ha hagut de tancar:</translation>
</message>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_cs.ts b/src-qt5/core/lumina-open/i18n/lumina-open_cs.ts
index fd7ed2cf..f038a5ed 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_cs.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_cs.ts
@@ -147,59 +147,59 @@
<translation>Chyba souboru</translation>
</message>
<message>
- <location filename="../main.cpp" line="191"/>
- <location filename="../main.cpp" line="197"/>
+ <location filename="../main.cpp" line="199"/>
+ <location filename="../main.cpp" line="213"/>
<source>Audio Volume %1%</source>
<translation>Hlasitost zvuku %1%</translation>
</message>
<message>
- <location filename="../main.cpp" line="205"/>
- <location filename="../main.cpp" line="214"/>
+ <location filename="../main.cpp" line="221"/>
+ <location filename="../main.cpp" line="230"/>
<source>Screen Brightness %1%</source>
<translation>Jas obrazovky %1%</translation>
</message>
<message>
- <location filename="../main.cpp" line="246"/>
+ <location filename="../main.cpp" line="262"/>
<source>Invalid file or URL: %1</source>
<translation>Neplatný soubor nebo URL adresa: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="267"/>
+ <location filename="../main.cpp" line="283"/>
<source>Application entry is invalid: %1</source>
<translation>Záznam pro aplikaci není platný: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="278"/>
+ <location filename="../main.cpp" line="294"/>
<source>Application shortcut is missing the launching information (malformed shortcut): %1</source>
<translation>V zástupci aplikace chybí informace pro spouštění (chybná zkratka):% 1</translation>
</message>
<message>
- <location filename="../main.cpp" line="291"/>
+ <location filename="../main.cpp" line="307"/>
<source>URL shortcut is missing the URL: %1</source>
<translation>V zástupci URL adresy chybí URL: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="302"/>
+ <location filename="../main.cpp" line="318"/>
<source>Directory shortcut is missing the path to the directory: %1</source>
<translation>V zástupci složky chybí popis jejího umístění: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="307"/>
+ <location filename="../main.cpp" line="323"/>
<source>Unknown type of shortcut : %1</source>
<translation>Neznámý typ zkratky: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="370"/>
+ <location filename="../main.cpp" line="386"/>
<source>Could not find &quot;%1&quot;. Please ensure it is installed first.</source>
<translation>Nepodařilo se najít „%1“. Nejprve zajistěte, aby bylo nainstalované.</translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>Application Error</source>
<translation>Chyba aplikace</translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>The following application experienced an error and needed to close:</source>
<translation>V následující aplikaci došlo k chyba a bude proto ukončena:</translation>
</message>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_cy.ts b/src-qt5/core/lumina-open/i18n/lumina-open_cy.ts
index 607f911f..514c2cc0 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_cy.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_cy.ts
@@ -147,59 +147,59 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="191"/>
- <location filename="../main.cpp" line="197"/>
+ <location filename="../main.cpp" line="199"/>
+ <location filename="../main.cpp" line="213"/>
<source>Audio Volume %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="205"/>
- <location filename="../main.cpp" line="214"/>
+ <location filename="../main.cpp" line="221"/>
+ <location filename="../main.cpp" line="230"/>
<source>Screen Brightness %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="246"/>
+ <location filename="../main.cpp" line="262"/>
<source>Invalid file or URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="267"/>
+ <location filename="../main.cpp" line="283"/>
<source>Application entry is invalid: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="278"/>
+ <location filename="../main.cpp" line="294"/>
<source>Application shortcut is missing the launching information (malformed shortcut): %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="291"/>
+ <location filename="../main.cpp" line="307"/>
<source>URL shortcut is missing the URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="302"/>
+ <location filename="../main.cpp" line="318"/>
<source>Directory shortcut is missing the path to the directory: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="307"/>
+ <location filename="../main.cpp" line="323"/>
<source>Unknown type of shortcut : %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="370"/>
+ <location filename="../main.cpp" line="386"/>
<source>Could not find &quot;%1&quot;. Please ensure it is installed first.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>Application Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>The following application experienced an error and needed to close:</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_da.ts b/src-qt5/core/lumina-open/i18n/lumina-open_da.ts
index 770e717e..3e00f1b5 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_da.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_da.ts
@@ -147,59 +147,59 @@
<translation>Filfejl</translation>
</message>
<message>
- <location filename="../main.cpp" line="191"/>
- <location filename="../main.cpp" line="197"/>
+ <location filename="../main.cpp" line="199"/>
+ <location filename="../main.cpp" line="213"/>
<source>Audio Volume %1%</source>
<translation>Lydstyrke %1%</translation>
</message>
<message>
- <location filename="../main.cpp" line="205"/>
- <location filename="../main.cpp" line="214"/>
+ <location filename="../main.cpp" line="221"/>
+ <location filename="../main.cpp" line="230"/>
<source>Screen Brightness %1%</source>
<translation>Skærmlysstyrke %1%</translation>
</message>
<message>
- <location filename="../main.cpp" line="246"/>
+ <location filename="../main.cpp" line="262"/>
<source>Invalid file or URL: %1</source>
<translation>Ugyldig fil eller URL: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="267"/>
+ <location filename="../main.cpp" line="283"/>
<source>Application entry is invalid: %1</source>
<translation>Programpost er ugyldig: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="278"/>
+ <location filename="../main.cpp" line="294"/>
<source>Application shortcut is missing the launching information (malformed shortcut): %1</source>
<translation>Programgenvejen mangler korrekt opstartsinformation (forkert udformet genvej): %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="291"/>
+ <location filename="../main.cpp" line="307"/>
<source>URL shortcut is missing the URL: %1</source>
<translation>URL-genvejen mangler URL&apos;en: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="302"/>
+ <location filename="../main.cpp" line="318"/>
<source>Directory shortcut is missing the path to the directory: %1</source>
<translation>Mappegenvejen mangler stien til mappen: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="307"/>
+ <location filename="../main.cpp" line="323"/>
<source>Unknown type of shortcut : %1</source>
<translation>Ukendt type genvej : %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="370"/>
+ <location filename="../main.cpp" line="386"/>
<source>Could not find &quot;%1&quot;. Please ensure it is installed first.</source>
<translation>Kunne ikke finde &quot;%1&quot;. Sørg for at programmet er installeret først.</translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>Application Error</source>
<translation>Programfejl</translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>The following application experienced an error and needed to close:</source>
<translation>Det følgende program oplevede en fejl og blev nødt til at afslutte:</translation>
</message>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_de.ts b/src-qt5/core/lumina-open/i18n/lumina-open_de.ts
index f1b09042..591f1398 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_de.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_de.ts
@@ -147,59 +147,59 @@
<translation>Dateifehler</translation>
</message>
<message>
- <location filename="../main.cpp" line="191"/>
- <location filename="../main.cpp" line="197"/>
+ <location filename="../main.cpp" line="199"/>
+ <location filename="../main.cpp" line="213"/>
<source>Audio Volume %1%</source>
<translation>Lautstärke %1%</translation>
</message>
<message>
- <location filename="../main.cpp" line="205"/>
- <location filename="../main.cpp" line="214"/>
+ <location filename="../main.cpp" line="221"/>
+ <location filename="../main.cpp" line="230"/>
<source>Screen Brightness %1%</source>
<translation>Bildschirmhelligkeit %1%</translation>
</message>
<message>
- <location filename="../main.cpp" line="246"/>
+ <location filename="../main.cpp" line="262"/>
<source>Invalid file or URL: %1</source>
<translation>Ungültige Datei oder URL: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="267"/>
+ <location filename="../main.cpp" line="283"/>
<source>Application entry is invalid: %1</source>
<translation>Anwendungseintrag ist ungültig: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="278"/>
+ <location filename="../main.cpp" line="294"/>
<source>Application shortcut is missing the launching information (malformed shortcut): %1</source>
<translation>Fehlende Startup-Informationen für Programm-Verknüpfung (deformierte Verknüpfung): %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="291"/>
+ <location filename="../main.cpp" line="307"/>
<source>URL shortcut is missing the URL: %1</source>
<translation>URL-Verknüpfung fehlt die URL: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="302"/>
+ <location filename="../main.cpp" line="318"/>
<source>Directory shortcut is missing the path to the directory: %1</source>
<translation>Verzeichnisverknüpfung fehlt der Pfad zum Verzeichnis: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="307"/>
+ <location filename="../main.cpp" line="323"/>
<source>Unknown type of shortcut : %1</source>
<translation>Unbekannter Typ für Vernüpfung: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="370"/>
+ <location filename="../main.cpp" line="386"/>
<source>Could not find &quot;%1&quot;. Please ensure it is installed first.</source>
<translation>Konnte &quot;%1&quot; nicht finden. Bitte stellen Sie zuerst sicher, dass es installiert ist.</translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>Application Error</source>
<translation>Anwendungsfehler</translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>The following application experienced an error and needed to close:</source>
<translation>Bei folgender Anwendung ist ein Fehler aufgetreten und sie wurde beendet:</translation>
</message>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_el.ts b/src-qt5/core/lumina-open/i18n/lumina-open_el.ts
index 1cf5cbb8..9fc46d41 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_el.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_el.ts
@@ -147,59 +147,59 @@
<translation>Σφάλμα Αρχείου</translation>
</message>
<message>
- <location filename="../main.cpp" line="191"/>
- <location filename="../main.cpp" line="197"/>
+ <location filename="../main.cpp" line="199"/>
+ <location filename="../main.cpp" line="213"/>
<source>Audio Volume %1%</source>
<translation>Ένταση ήχου %1%</translation>
</message>
<message>
- <location filename="../main.cpp" line="205"/>
- <location filename="../main.cpp" line="214"/>
+ <location filename="../main.cpp" line="221"/>
+ <location filename="../main.cpp" line="230"/>
<source>Screen Brightness %1%</source>
<translation>Φωτεινότητα οθόνης %1%</translation>
</message>
<message>
- <location filename="../main.cpp" line="246"/>
+ <location filename="../main.cpp" line="262"/>
<source>Invalid file or URL: %1</source>
<translation>Μη έγκυρο αρχείο ή URL: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="267"/>
+ <location filename="../main.cpp" line="283"/>
<source>Application entry is invalid: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="278"/>
+ <location filename="../main.cpp" line="294"/>
<source>Application shortcut is missing the launching information (malformed shortcut): %1</source>
<translation>Οι πληροφορίες εκτέλεσης λείπουν απο την συντόμευση της εφαρμογής (Δυσλειτουργία συντόμευσης): %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="291"/>
+ <location filename="../main.cpp" line="307"/>
<source>URL shortcut is missing the URL: %1</source>
<translation>Απο την URL συντόμευση λείπει το URL: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="302"/>
+ <location filename="../main.cpp" line="318"/>
<source>Directory shortcut is missing the path to the directory: %1</source>
<translation>Απο την συντόμευση του καταλόγου λείπει η διαδρομή προς τον κατάλογο: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="307"/>
+ <location filename="../main.cpp" line="323"/>
<source>Unknown type of shortcut : %1</source>
<translation>Άγνωστος τύπος συντόμευσης: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="370"/>
+ <location filename="../main.cpp" line="386"/>
<source>Could not find &quot;%1&quot;. Please ensure it is installed first.</source>
<translation>Αδυναμία έυρεσης &quot;%1&quot;. Παρακαλώ βεβαιωθείτε ότι έχει ήδη εγκατασταθεί.</translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>Application Error</source>
<translation>Πρόβλημα Εφαρμογής</translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>The following application experienced an error and needed to close:</source>
<translation>Η παρακάτω εφαρμογή αντιμετώπισε ένα σφάλμα και πρέπει να τερματιστεί:</translation>
</message>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_en_AU.ts b/src-qt5/core/lumina-open/i18n/lumina-open_en_AU.ts
index dbca5225..b64ca952 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_en_AU.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_en_AU.ts
@@ -147,59 +147,59 @@
<translation>File Error</translation>
</message>
<message>
- <location filename="../main.cpp" line="191"/>
- <location filename="../main.cpp" line="197"/>
+ <location filename="../main.cpp" line="199"/>
+ <location filename="../main.cpp" line="213"/>
<source>Audio Volume %1%</source>
<translation>Audio Volume %1%</translation>
</message>
<message>
- <location filename="../main.cpp" line="205"/>
- <location filename="../main.cpp" line="214"/>
+ <location filename="../main.cpp" line="221"/>
+ <location filename="../main.cpp" line="230"/>
<source>Screen Brightness %1%</source>
<translation>Screen Brightness %1%</translation>
</message>
<message>
- <location filename="../main.cpp" line="246"/>
+ <location filename="../main.cpp" line="262"/>
<source>Invalid file or URL: %1</source>
<translation>Invalid file or URL: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="267"/>
+ <location filename="../main.cpp" line="283"/>
<source>Application entry is invalid: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="278"/>
+ <location filename="../main.cpp" line="294"/>
<source>Application shortcut is missing the launching information (malformed shortcut): %1</source>
<translation>Application shortcut is missing the launch information (malformed shortcut): %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="291"/>
+ <location filename="../main.cpp" line="307"/>
<source>URL shortcut is missing the URL: %1</source>
<translation>URL shortcut is missing the URL: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="302"/>
+ <location filename="../main.cpp" line="318"/>
<source>Directory shortcut is missing the path to the directory: %1</source>
<translation>Directory shortcut is missing the path to the directory: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="307"/>
+ <location filename="../main.cpp" line="323"/>
<source>Unknown type of shortcut : %1</source>
<translation>Unknown type of shortcut: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="370"/>
+ <location filename="../main.cpp" line="386"/>
<source>Could not find &quot;%1&quot;. Please ensure it is installed first.</source>
<translation>Could not find &quot;%1&quot;. Please ensure it is installed first.</translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>Application Error</source>
<translation>Application Error</translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>The following application experienced an error and needed to close:</source>
<translation>The following application experienced an error and needed to close:</translation>
</message>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_en_GB.ts b/src-qt5/core/lumina-open/i18n/lumina-open_en_GB.ts
index afa92889..00ca4e0d 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_en_GB.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_en_GB.ts
@@ -147,59 +147,59 @@
<translation>File Error</translation>
</message>
<message>
- <location filename="../main.cpp" line="191"/>
- <location filename="../main.cpp" line="197"/>
+ <location filename="../main.cpp" line="199"/>
+ <location filename="../main.cpp" line="213"/>
<source>Audio Volume %1%</source>
<translation>Audio Volume %1%</translation>
</message>
<message>
- <location filename="../main.cpp" line="205"/>
- <location filename="../main.cpp" line="214"/>
+ <location filename="../main.cpp" line="221"/>
+ <location filename="../main.cpp" line="230"/>
<source>Screen Brightness %1%</source>
<translation>Screen Brightness %1%</translation>
</message>
<message>
- <location filename="../main.cpp" line="246"/>
+ <location filename="../main.cpp" line="262"/>
<source>Invalid file or URL: %1</source>
<translation>Invalid file or URL: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="267"/>
+ <location filename="../main.cpp" line="283"/>
<source>Application entry is invalid: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="278"/>
+ <location filename="../main.cpp" line="294"/>
<source>Application shortcut is missing the launching information (malformed shortcut): %1</source>
<translation>Application shortcut is missing the launch information (malformed shortcut): %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="291"/>
+ <location filename="../main.cpp" line="307"/>
<source>URL shortcut is missing the URL: %1</source>
<translation>URL shortcut is missing the URL: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="302"/>
+ <location filename="../main.cpp" line="318"/>
<source>Directory shortcut is missing the path to the directory: %1</source>
<translation>Directory shortcut is missing the path to the directory: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="307"/>
+ <location filename="../main.cpp" line="323"/>
<source>Unknown type of shortcut : %1</source>
<translation>Unknown type of shortcut: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="370"/>
+ <location filename="../main.cpp" line="386"/>
<source>Could not find &quot;%1&quot;. Please ensure it is installed first.</source>
<translation>Could not find &quot;%1&quot;. Please ensure it is installed first.</translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>Application Error</source>
<translation>Application Error</translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>The following application experienced an error and needed to close:</source>
<translation>The following application experienced an error and needed to close:</translation>
</message>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_en_ZA.ts b/src-qt5/core/lumina-open/i18n/lumina-open_en_ZA.ts
index 607f911f..514c2cc0 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_en_ZA.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_en_ZA.ts
@@ -147,59 +147,59 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="191"/>
- <location filename="../main.cpp" line="197"/>
+ <location filename="../main.cpp" line="199"/>
+ <location filename="../main.cpp" line="213"/>
<source>Audio Volume %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="205"/>
- <location filename="../main.cpp" line="214"/>
+ <location filename="../main.cpp" line="221"/>
+ <location filename="../main.cpp" line="230"/>
<source>Screen Brightness %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="246"/>
+ <location filename="../main.cpp" line="262"/>
<source>Invalid file or URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="267"/>
+ <location filename="../main.cpp" line="283"/>
<source>Application entry is invalid: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="278"/>
+ <location filename="../main.cpp" line="294"/>
<source>Application shortcut is missing the launching information (malformed shortcut): %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="291"/>
+ <location filename="../main.cpp" line="307"/>
<source>URL shortcut is missing the URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="302"/>
+ <location filename="../main.cpp" line="318"/>
<source>Directory shortcut is missing the path to the directory: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="307"/>
+ <location filename="../main.cpp" line="323"/>
<source>Unknown type of shortcut : %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="370"/>
+ <location filename="../main.cpp" line="386"/>
<source>Could not find &quot;%1&quot;. Please ensure it is installed first.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>Application Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>The following application experienced an error and needed to close:</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_es.ts b/src-qt5/core/lumina-open/i18n/lumina-open_es.ts
index abfe4962..6c3c5d51 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_es.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_es.ts
@@ -147,59 +147,59 @@
<translation>Error de Archivo</translation>
</message>
<message>
- <location filename="../main.cpp" line="191"/>
- <location filename="../main.cpp" line="197"/>
+ <location filename="../main.cpp" line="199"/>
+ <location filename="../main.cpp" line="213"/>
<source>Audio Volume %1%</source>
<translation>Volúmen del Sonido %1%</translation>
</message>
<message>
- <location filename="../main.cpp" line="205"/>
- <location filename="../main.cpp" line="214"/>
+ <location filename="../main.cpp" line="221"/>
+ <location filename="../main.cpp" line="230"/>
<source>Screen Brightness %1%</source>
<translation>Brillo de Pantalla %1%</translation>
</message>
<message>
- <location filename="../main.cpp" line="246"/>
+ <location filename="../main.cpp" line="262"/>
<source>Invalid file or URL: %1</source>
<translation>Archivo o URL no válido(a): %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="267"/>
+ <location filename="../main.cpp" line="283"/>
<source>Application entry is invalid: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="278"/>
+ <location filename="../main.cpp" line="294"/>
<source>Application shortcut is missing the launching information (malformed shortcut): %1</source>
<translation>El acceso directo a la aplicación no contiene la información para la ejecución (acceso directo defectuoso): %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="291"/>
+ <location filename="../main.cpp" line="307"/>
<source>URL shortcut is missing the URL: %1</source>
<translation>El acceso directo a la URL no contiene la URL: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="302"/>
+ <location filename="../main.cpp" line="318"/>
<source>Directory shortcut is missing the path to the directory: %1</source>
<translation>El acceso directo al directorio no contiene la dirección al directorio: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="307"/>
+ <location filename="../main.cpp" line="323"/>
<source>Unknown type of shortcut : %1</source>
<translation>Tipo de acceso directo desconocido: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="370"/>
+ <location filename="../main.cpp" line="386"/>
<source>Could not find &quot;%1&quot;. Please ensure it is installed first.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>Application Error</source>
<translation>Error en la Aplicación</translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>The following application experienced an error and needed to close:</source>
<translation>La siguiente aplicación presentó un error y necesita cerrarse:</translation>
</message>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_et.ts b/src-qt5/core/lumina-open/i18n/lumina-open_et.ts
index fa069632..ee3b4351 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_et.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_et.ts
@@ -147,59 +147,59 @@
<translation>Faili viga</translation>
</message>
<message>
- <location filename="../main.cpp" line="191"/>
- <location filename="../main.cpp" line="197"/>
+ <location filename="../main.cpp" line="199"/>
+ <location filename="../main.cpp" line="213"/>
<source>Audio Volume %1%</source>
<translation>Helitugevus %1%</translation>
</message>
<message>
- <location filename="../main.cpp" line="205"/>
- <location filename="../main.cpp" line="214"/>
+ <location filename="../main.cpp" line="221"/>
+ <location filename="../main.cpp" line="230"/>
<source>Screen Brightness %1%</source>
<translation>Ekraani heledus %1%</translation>
</message>
<message>
- <location filename="../main.cpp" line="246"/>
+ <location filename="../main.cpp" line="262"/>
<source>Invalid file or URL: %1</source>
<translation>Vigane fail või aadress: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="267"/>
+ <location filename="../main.cpp" line="283"/>
<source>Application entry is invalid: %1</source>
<translation>Rakenduse %1 kirje on vigane.</translation>
</message>
<message>
- <location filename="../main.cpp" line="278"/>
+ <location filename="../main.cpp" line="294"/>
<source>Application shortcut is missing the launching information (malformed shortcut): %1</source>
<translation>Rakenduse otseteel puudub käivitamise info (vigane otsetee): %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="291"/>
+ <location filename="../main.cpp" line="307"/>
<source>URL shortcut is missing the URL: %1</source>
<translation>Aadressi otseteel puudub aadress: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="302"/>
+ <location filename="../main.cpp" line="318"/>
<source>Directory shortcut is missing the path to the directory: %1</source>
<translation>Kausta otseteel puudub kausta rada: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="307"/>
+ <location filename="../main.cpp" line="323"/>
<source>Unknown type of shortcut : %1</source>
<translation>Teadmata tüüpi otsetee: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="370"/>
+ <location filename="../main.cpp" line="386"/>
<source>Could not find &quot;%1&quot;. Please ensure it is installed first.</source>
<translation>Ei leidnud &quot;%1&quot; . Palun veendu et see on paigaldatud.</translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>Application Error</source>
<translation>Programmi viga</translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>The following application experienced an error and needed to close:</source>
<translation>See rakendus sulgus, kuna esines viga:</translation>
</message>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_eu.ts b/src-qt5/core/lumina-open/i18n/lumina-open_eu.ts
index 6a8f257b..cf77faf1 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_eu.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_eu.ts
@@ -147,59 +147,59 @@
<translation>Fitxategiko akatsa</translation>
</message>
<message>
- <location filename="../main.cpp" line="191"/>
- <location filename="../main.cpp" line="197"/>
+ <location filename="../main.cpp" line="199"/>
+ <location filename="../main.cpp" line="213"/>
<source>Audio Volume %1%</source>
<translation>Audioaren bolumena %1%</translation>
</message>
<message>
- <location filename="../main.cpp" line="205"/>
- <location filename="../main.cpp" line="214"/>
+ <location filename="../main.cpp" line="221"/>
+ <location filename="../main.cpp" line="230"/>
<source>Screen Brightness %1%</source>
<translation>Pantailaren distira %1%</translation>
</message>
<message>
- <location filename="../main.cpp" line="246"/>
+ <location filename="../main.cpp" line="262"/>
<source>Invalid file or URL: %1</source>
<translation>Fitxategi edo URL okerra: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="267"/>
+ <location filename="../main.cpp" line="283"/>
<source>Application entry is invalid: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="278"/>
+ <location filename="../main.cpp" line="294"/>
<source>Application shortcut is missing the launching information (malformed shortcut): %1</source>
<translation>Aplikazioko lasterbideak ez dauka abiarazteko informazioa (lasterbide okerra): %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="291"/>
+ <location filename="../main.cpp" line="307"/>
<source>URL shortcut is missing the URL: %1</source>
<translation>URLko lasterbideak ez dauka URLa: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="302"/>
+ <location filename="../main.cpp" line="318"/>
<source>Directory shortcut is missing the path to the directory: %1</source>
<translation>Direktorioko lasterbideak ez dauka direktorioroko bide izena: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="307"/>
+ <location filename="../main.cpp" line="323"/>
<source>Unknown type of shortcut : %1</source>
<translation>Lasterbide mota ezezaguna: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="370"/>
+ <location filename="../main.cpp" line="386"/>
<source>Could not find &quot;%1&quot;. Please ensure it is installed first.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>Application Error</source>
<translation>Aplikazioko akatsa</translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>The following application experienced an error and needed to close:</source>
<translation>Hurrengo aplikazioak akats bat izan du eta itxi behar da:</translation>
</message>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_fa.ts b/src-qt5/core/lumina-open/i18n/lumina-open_fa.ts
index 607f911f..514c2cc0 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_fa.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_fa.ts
@@ -147,59 +147,59 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="191"/>
- <location filename="../main.cpp" line="197"/>
+ <location filename="../main.cpp" line="199"/>
+ <location filename="../main.cpp" line="213"/>
<source>Audio Volume %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="205"/>
- <location filename="../main.cpp" line="214"/>
+ <location filename="../main.cpp" line="221"/>
+ <location filename="../main.cpp" line="230"/>
<source>Screen Brightness %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="246"/>
+ <location filename="../main.cpp" line="262"/>
<source>Invalid file or URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="267"/>
+ <location filename="../main.cpp" line="283"/>
<source>Application entry is invalid: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="278"/>
+ <location filename="../main.cpp" line="294"/>
<source>Application shortcut is missing the launching information (malformed shortcut): %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="291"/>
+ <location filename="../main.cpp" line="307"/>
<source>URL shortcut is missing the URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="302"/>
+ <location filename="../main.cpp" line="318"/>
<source>Directory shortcut is missing the path to the directory: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="307"/>
+ <location filename="../main.cpp" line="323"/>
<source>Unknown type of shortcut : %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="370"/>
+ <location filename="../main.cpp" line="386"/>
<source>Could not find &quot;%1&quot;. Please ensure it is installed first.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>Application Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>The following application experienced an error and needed to close:</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_fi.ts b/src-qt5/core/lumina-open/i18n/lumina-open_fi.ts
index 403651fe..b3441d40 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_fi.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_fi.ts
@@ -147,59 +147,59 @@
<translation>Tiedostovirhe</translation>
</message>
<message>
- <location filename="../main.cpp" line="191"/>
- <location filename="../main.cpp" line="197"/>
+ <location filename="../main.cpp" line="199"/>
+ <location filename="../main.cpp" line="213"/>
<source>Audio Volume %1%</source>
<translation>Äänenvoimakkuus %1 %</translation>
</message>
<message>
- <location filename="../main.cpp" line="205"/>
- <location filename="../main.cpp" line="214"/>
+ <location filename="../main.cpp" line="221"/>
+ <location filename="../main.cpp" line="230"/>
<source>Screen Brightness %1%</source>
<translation>Näytön kirkkaus %1 %</translation>
</message>
<message>
- <location filename="../main.cpp" line="246"/>
+ <location filename="../main.cpp" line="262"/>
<source>Invalid file or URL: %1</source>
<translation>Virheellinen tiedosto tai verkko-osoite: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="267"/>
+ <location filename="../main.cpp" line="283"/>
<source>Application entry is invalid: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="278"/>
+ <location filename="../main.cpp" line="294"/>
<source>Application shortcut is missing the launching information (malformed shortcut): %1</source>
<translation>Sovelluksen pikakuvakkeesta puuttuvat käynnistystiedot (virheellinen pikakuvake): %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="291"/>
+ <location filename="../main.cpp" line="307"/>
<source>URL shortcut is missing the URL: %1</source>
<translation>Verkko-osoitteen pikakuvakkeesta puuttuu verkko-osoite: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="302"/>
+ <location filename="../main.cpp" line="318"/>
<source>Directory shortcut is missing the path to the directory: %1</source>
<translation>Kansion pikakuvakkeesta puuttuu kansion sijainti: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="307"/>
+ <location filename="../main.cpp" line="323"/>
<source>Unknown type of shortcut : %1</source>
<translation>Tuntematon pikakuvaketyyppi: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="370"/>
+ <location filename="../main.cpp" line="386"/>
<source>Could not find &quot;%1&quot;. Please ensure it is installed first.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>Application Error</source>
<translation>Sovellusvirhe</translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>The following application experienced an error and needed to close:</source>
<translation>Seuraavat sovellukset kohtasivat virheen ja ne täytyy sulkea:</translation>
</message>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_fr.ts b/src-qt5/core/lumina-open/i18n/lumina-open_fr.ts
index 567fcf63..4b73891b 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_fr.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_fr.ts
@@ -147,59 +147,59 @@
<translation>Erreur de fichier</translation>
</message>
<message>
- <location filename="../main.cpp" line="191"/>
- <location filename="../main.cpp" line="197"/>
+ <location filename="../main.cpp" line="199"/>
+ <location filename="../main.cpp" line="213"/>
<source>Audio Volume %1%</source>
<translation>Volume Audio %1%</translation>
</message>
<message>
- <location filename="../main.cpp" line="205"/>
- <location filename="../main.cpp" line="214"/>
+ <location filename="../main.cpp" line="221"/>
+ <location filename="../main.cpp" line="230"/>
<source>Screen Brightness %1%</source>
<translation>Luminosité de l&apos;Écran %1%</translation>
</message>
<message>
- <location filename="../main.cpp" line="246"/>
+ <location filename="../main.cpp" line="262"/>
<source>Invalid file or URL: %1</source>
<translation>Fichier ou URL invalide : %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="267"/>
+ <location filename="../main.cpp" line="283"/>
<source>Application entry is invalid: %1</source>
<translation>Programme invalide : %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="278"/>
+ <location filename="../main.cpp" line="294"/>
<source>Application shortcut is missing the launching information (malformed shortcut): %1</source>
<translation>Informations de lancement manquantes dans le raccourci du programme (raccourci invalide) : %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="291"/>
+ <location filename="../main.cpp" line="307"/>
<source>URL shortcut is missing the URL: %1</source>
<translation>L&apos;adresse est introuvable dans le raccourci URL : %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="302"/>
+ <location filename="../main.cpp" line="318"/>
<source>Directory shortcut is missing the path to the directory: %1</source>
<translation>Le chemin du dossier est vide dans le raccourci du dossier : %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="307"/>
+ <location filename="../main.cpp" line="323"/>
<source>Unknown type of shortcut : %1</source>
<translation>Type du raccourci inconnu : %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="370"/>
+ <location filename="../main.cpp" line="386"/>
<source>Could not find &quot;%1&quot;. Please ensure it is installed first.</source>
<translation>&quot;%1&quot; non trouvé. Vérifiez qu&apos;il soit bien installé.</translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>Application Error</source>
<translation>Erreur du Programme</translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>The following application experienced an error and needed to close:</source>
<translation>Le programme suivant a provoqué une erreur et a dû être fermé :</translation>
</message>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_fr_CA.ts b/src-qt5/core/lumina-open/i18n/lumina-open_fr_CA.ts
index 607f911f..514c2cc0 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_fr_CA.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_fr_CA.ts
@@ -147,59 +147,59 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="191"/>
- <location filename="../main.cpp" line="197"/>
+ <location filename="../main.cpp" line="199"/>
+ <location filename="../main.cpp" line="213"/>
<source>Audio Volume %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="205"/>
- <location filename="../main.cpp" line="214"/>
+ <location filename="../main.cpp" line="221"/>
+ <location filename="../main.cpp" line="230"/>
<source>Screen Brightness %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="246"/>
+ <location filename="../main.cpp" line="262"/>
<source>Invalid file or URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="267"/>
+ <location filename="../main.cpp" line="283"/>
<source>Application entry is invalid: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="278"/>
+ <location filename="../main.cpp" line="294"/>
<source>Application shortcut is missing the launching information (malformed shortcut): %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="291"/>
+ <location filename="../main.cpp" line="307"/>
<source>URL shortcut is missing the URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="302"/>
+ <location filename="../main.cpp" line="318"/>
<source>Directory shortcut is missing the path to the directory: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="307"/>
+ <location filename="../main.cpp" line="323"/>
<source>Unknown type of shortcut : %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="370"/>
+ <location filename="../main.cpp" line="386"/>
<source>Could not find &quot;%1&quot;. Please ensure it is installed first.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>Application Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>The following application experienced an error and needed to close:</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_gl.ts b/src-qt5/core/lumina-open/i18n/lumina-open_gl.ts
index 607f911f..514c2cc0 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_gl.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_gl.ts
@@ -147,59 +147,59 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="191"/>
- <location filename="../main.cpp" line="197"/>
+ <location filename="../main.cpp" line="199"/>
+ <location filename="../main.cpp" line="213"/>
<source>Audio Volume %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="205"/>
- <location filename="../main.cpp" line="214"/>
+ <location filename="../main.cpp" line="221"/>
+ <location filename="../main.cpp" line="230"/>
<source>Screen Brightness %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="246"/>
+ <location filename="../main.cpp" line="262"/>
<source>Invalid file or URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="267"/>
+ <location filename="../main.cpp" line="283"/>
<source>Application entry is invalid: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="278"/>
+ <location filename="../main.cpp" line="294"/>
<source>Application shortcut is missing the launching information (malformed shortcut): %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="291"/>
+ <location filename="../main.cpp" line="307"/>
<source>URL shortcut is missing the URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="302"/>
+ <location filename="../main.cpp" line="318"/>
<source>Directory shortcut is missing the path to the directory: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="307"/>
+ <location filename="../main.cpp" line="323"/>
<source>Unknown type of shortcut : %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="370"/>
+ <location filename="../main.cpp" line="386"/>
<source>Could not find &quot;%1&quot;. Please ensure it is installed first.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>Application Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>The following application experienced an error and needed to close:</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_he.ts b/src-qt5/core/lumina-open/i18n/lumina-open_he.ts
index 607f911f..514c2cc0 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_he.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_he.ts
@@ -147,59 +147,59 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="191"/>
- <location filename="../main.cpp" line="197"/>
+ <location filename="../main.cpp" line="199"/>
+ <location filename="../main.cpp" line="213"/>
<source>Audio Volume %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="205"/>
- <location filename="../main.cpp" line="214"/>
+ <location filename="../main.cpp" line="221"/>
+ <location filename="../main.cpp" line="230"/>
<source>Screen Brightness %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="246"/>
+ <location filename="../main.cpp" line="262"/>
<source>Invalid file or URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="267"/>
+ <location filename="../main.cpp" line="283"/>
<source>Application entry is invalid: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="278"/>
+ <location filename="../main.cpp" line="294"/>
<source>Application shortcut is missing the launching information (malformed shortcut): %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="291"/>
+ <location filename="../main.cpp" line="307"/>
<source>URL shortcut is missing the URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="302"/>
+ <location filename="../main.cpp" line="318"/>
<source>Directory shortcut is missing the path to the directory: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="307"/>
+ <location filename="../main.cpp" line="323"/>
<source>Unknown type of shortcut : %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="370"/>
+ <location filename="../main.cpp" line="386"/>
<source>Could not find &quot;%1&quot;. Please ensure it is installed first.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>Application Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>The following application experienced an error and needed to close:</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_hi.ts b/src-qt5/core/lumina-open/i18n/lumina-open_hi.ts
index 1b33caf3..4df6a468 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_hi.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_hi.ts
@@ -147,59 +147,59 @@
<translation>फाइल त्रुटि</translation>
</message>
<message>
- <location filename="../main.cpp" line="191"/>
- <location filename="../main.cpp" line="197"/>
+ <location filename="../main.cpp" line="199"/>
+ <location filename="../main.cpp" line="213"/>
<source>Audio Volume %1%</source>
<translation>ऑडियो ध्वनि %1%</translation>
</message>
<message>
- <location filename="../main.cpp" line="205"/>
- <location filename="../main.cpp" line="214"/>
+ <location filename="../main.cpp" line="221"/>
+ <location filename="../main.cpp" line="230"/>
<source>Screen Brightness %1%</source>
<translation>स्क्रीन चमक %1%</translation>
</message>
<message>
- <location filename="../main.cpp" line="246"/>
+ <location filename="../main.cpp" line="262"/>
<source>Invalid file or URL: %1</source>
<translation>अवैध फाइल या यूआरएल:%1</translation>
</message>
<message>
- <location filename="../main.cpp" line="267"/>
+ <location filename="../main.cpp" line="283"/>
<source>Application entry is invalid: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="278"/>
+ <location filename="../main.cpp" line="294"/>
<source>Application shortcut is missing the launching information (malformed shortcut): %1</source>
<translation>एप्लीकेशन शॉर्टकट में चालू करने सम्बन्धी जानकारी नहीं है( अपूर्ण शॉर्टकट):%1</translation>
</message>
<message>
- <location filename="../main.cpp" line="291"/>
+ <location filename="../main.cpp" line="307"/>
<source>URL shortcut is missing the URL: %1</source>
<translation>यूआरएल के शॉर्टकट में यूआरएल नहीं है:%1</translation>
</message>
<message>
- <location filename="../main.cpp" line="302"/>
+ <location filename="../main.cpp" line="318"/>
<source>Directory shortcut is missing the path to the directory: %1</source>
<translation>डायरेक्टरी के शॉर्टकट में डायरेक्टरी का पथ नहीं है:%1</translation>
</message>
<message>
- <location filename="../main.cpp" line="307"/>
+ <location filename="../main.cpp" line="323"/>
<source>Unknown type of shortcut : %1</source>
<translation>अनजान प्रकार का शॉर्टकट:%1</translation>
</message>
<message>
- <location filename="../main.cpp" line="370"/>
+ <location filename="../main.cpp" line="386"/>
<source>Could not find &quot;%1&quot;. Please ensure it is installed first.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>Application Error</source>
<translation>एप्लीकेशन त्रुटि</translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>The following application experienced an error and needed to close:</source>
<translation>इस एप्लीकेशन में त्रुटि है और इसे बंद करने की आवश्यकता है:</translation>
</message>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_hr.ts b/src-qt5/core/lumina-open/i18n/lumina-open_hr.ts
index 607f911f..514c2cc0 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_hr.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_hr.ts
@@ -147,59 +147,59 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="191"/>
- <location filename="../main.cpp" line="197"/>
+ <location filename="../main.cpp" line="199"/>
+ <location filename="../main.cpp" line="213"/>
<source>Audio Volume %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="205"/>
- <location filename="../main.cpp" line="214"/>
+ <location filename="../main.cpp" line="221"/>
+ <location filename="../main.cpp" line="230"/>
<source>Screen Brightness %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="246"/>
+ <location filename="../main.cpp" line="262"/>
<source>Invalid file or URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="267"/>
+ <location filename="../main.cpp" line="283"/>
<source>Application entry is invalid: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="278"/>
+ <location filename="../main.cpp" line="294"/>
<source>Application shortcut is missing the launching information (malformed shortcut): %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="291"/>
+ <location filename="../main.cpp" line="307"/>
<source>URL shortcut is missing the URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="302"/>
+ <location filename="../main.cpp" line="318"/>
<source>Directory shortcut is missing the path to the directory: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="307"/>
+ <location filename="../main.cpp" line="323"/>
<source>Unknown type of shortcut : %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="370"/>
+ <location filename="../main.cpp" line="386"/>
<source>Could not find &quot;%1&quot;. Please ensure it is installed first.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>Application Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>The following application experienced an error and needed to close:</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_hu.ts b/src-qt5/core/lumina-open/i18n/lumina-open_hu.ts
index 2356b492..a75ae74e 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_hu.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_hu.ts
@@ -147,59 +147,59 @@
<translation>Fájl hiba</translation>
</message>
<message>
- <location filename="../main.cpp" line="191"/>
- <location filename="../main.cpp" line="197"/>
+ <location filename="../main.cpp" line="199"/>
+ <location filename="../main.cpp" line="213"/>
<source>Audio Volume %1%</source>
<translation>Hangerő: %1%</translation>
</message>
<message>
- <location filename="../main.cpp" line="205"/>
- <location filename="../main.cpp" line="214"/>
+ <location filename="../main.cpp" line="221"/>
+ <location filename="../main.cpp" line="230"/>
<source>Screen Brightness %1%</source>
<translation>Képernyő fényessége: %1%</translation>
</message>
<message>
- <location filename="../main.cpp" line="246"/>
+ <location filename="../main.cpp" line="262"/>
<source>Invalid file or URL: %1</source>
<translation>Érvénytelen fájl vagy URL: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="267"/>
+ <location filename="../main.cpp" line="283"/>
<source>Application entry is invalid: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="278"/>
+ <location filename="../main.cpp" line="294"/>
<source>Application shortcut is missing the launching information (malformed shortcut): %1</source>
<translation>a program hivatkozásában hiányosak az indítási adatok : %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="291"/>
+ <location filename="../main.cpp" line="307"/>
<source>URL shortcut is missing the URL: %1</source>
<translation>URL hivatkozás hiányos ebben: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="302"/>
+ <location filename="../main.cpp" line="318"/>
<source>Directory shortcut is missing the path to the directory: %1</source>
<translation>Könyvtár hivatkozás hiányos ebben az útvonalban: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="307"/>
+ <location filename="../main.cpp" line="323"/>
<source>Unknown type of shortcut : %1</source>
<translation>Ismeretlen hivatkozás: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="370"/>
+ <location filename="../main.cpp" line="386"/>
<source>Could not find &quot;%1&quot;. Please ensure it is installed first.</source>
<translation>Nem találom: &quot;%1&quot;. Először győződj meg hogy telepítve van.</translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>Application Error</source>
<translation>Alkalmazás hiba</translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>The following application experienced an error and needed to close:</source>
<translation>Az alkalmazás hibát észlelt, és bezárandó:</translation>
</message>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_id.ts b/src-qt5/core/lumina-open/i18n/lumina-open_id.ts
index ee46566b..e099e24c 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_id.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_id.ts
@@ -147,59 +147,59 @@
<translation>berkas error</translation>
</message>
<message>
- <location filename="../main.cpp" line="191"/>
- <location filename="../main.cpp" line="197"/>
+ <location filename="../main.cpp" line="199"/>
+ <location filename="../main.cpp" line="213"/>
<source>Audio Volume %1%</source>
<translation>Audio Volume %1%</translation>
</message>
<message>
- <location filename="../main.cpp" line="205"/>
- <location filename="../main.cpp" line="214"/>
+ <location filename="../main.cpp" line="221"/>
+ <location filename="../main.cpp" line="230"/>
<source>Screen Brightness %1%</source>
<translation>kecerahan layar %1%</translation>
</message>
<message>
- <location filename="../main.cpp" line="246"/>
+ <location filename="../main.cpp" line="262"/>
<source>Invalid file or URL: %1</source>
<translation>file yang tidak valid atau URL: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="267"/>
+ <location filename="../main.cpp" line="283"/>
<source>Application entry is invalid: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="278"/>
+ <location filename="../main.cpp" line="294"/>
<source>Application shortcut is missing the launching information (malformed shortcut): %1</source>
<translation>Aplikasi shortcut yang hilang informasi meluncurkan (jelek cacat): %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="291"/>
+ <location filename="../main.cpp" line="307"/>
<source>URL shortcut is missing the URL: %1</source>
<translation>URL shortcut hilang URL: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="302"/>
+ <location filename="../main.cpp" line="318"/>
<source>Directory shortcut is missing the path to the directory: %1</source>
<translation type="unfinished">Direktori shortcut yang hilang path ke direktori: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="307"/>
+ <location filename="../main.cpp" line="323"/>
<source>Unknown type of shortcut : %1</source>
<translation>Jenis diketahui shortcut: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="370"/>
+ <location filename="../main.cpp" line="386"/>
<source>Could not find &quot;%1&quot;. Please ensure it is installed first.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>Application Error</source>
<translation>aplikasi error</translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>The following application experienced an error and needed to close:</source>
<translation type="unfinished">Aplikasi berikut mengalami kesalahan dan diperlukan untuk menutup:</translation>
</message>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_is.ts b/src-qt5/core/lumina-open/i18n/lumina-open_is.ts
index 607f911f..514c2cc0 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_is.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_is.ts
@@ -147,59 +147,59 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="191"/>
- <location filename="../main.cpp" line="197"/>
+ <location filename="../main.cpp" line="199"/>
+ <location filename="../main.cpp" line="213"/>
<source>Audio Volume %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="205"/>
- <location filename="../main.cpp" line="214"/>
+ <location filename="../main.cpp" line="221"/>
+ <location filename="../main.cpp" line="230"/>
<source>Screen Brightness %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="246"/>
+ <location filename="../main.cpp" line="262"/>
<source>Invalid file or URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="267"/>
+ <location filename="../main.cpp" line="283"/>
<source>Application entry is invalid: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="278"/>
+ <location filename="../main.cpp" line="294"/>
<source>Application shortcut is missing the launching information (malformed shortcut): %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="291"/>
+ <location filename="../main.cpp" line="307"/>
<source>URL shortcut is missing the URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="302"/>
+ <location filename="../main.cpp" line="318"/>
<source>Directory shortcut is missing the path to the directory: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="307"/>
+ <location filename="../main.cpp" line="323"/>
<source>Unknown type of shortcut : %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="370"/>
+ <location filename="../main.cpp" line="386"/>
<source>Could not find &quot;%1&quot;. Please ensure it is installed first.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>Application Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>The following application experienced an error and needed to close:</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_it.ts b/src-qt5/core/lumina-open/i18n/lumina-open_it.ts
index 3189ccfa..ada557e8 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_it.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_it.ts
@@ -147,59 +147,59 @@
<translation>Errore File</translation>
</message>
<message>
- <location filename="../main.cpp" line="191"/>
- <location filename="../main.cpp" line="197"/>
+ <location filename="../main.cpp" line="199"/>
+ <location filename="../main.cpp" line="213"/>
<source>Audio Volume %1%</source>
<translation>Volume Suono %1%</translation>
</message>
<message>
- <location filename="../main.cpp" line="205"/>
- <location filename="../main.cpp" line="214"/>
+ <location filename="../main.cpp" line="221"/>
+ <location filename="../main.cpp" line="230"/>
<source>Screen Brightness %1%</source>
<translation>luminosità dello Schermo %1%</translation>
</message>
<message>
- <location filename="../main.cpp" line="246"/>
+ <location filename="../main.cpp" line="262"/>
<source>Invalid file or URL: %1</source>
<translation>File o URL Invalido: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="267"/>
+ <location filename="../main.cpp" line="283"/>
<source>Application entry is invalid: %1</source>
<translation>Applicazione principale non valida: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="278"/>
+ <location filename="../main.cpp" line="294"/>
<source>Application shortcut is missing the launching information (malformed shortcut): %1</source>
<translation>Collegamento all&apos;applicazione senzai informazioni di lancio (scorciatoia malformata):: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="291"/>
+ <location filename="../main.cpp" line="307"/>
<source>URL shortcut is missing the URL: %1</source>
<translation>Collegamento URL senza l&apos;URL: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="302"/>
+ <location filename="../main.cpp" line="318"/>
<source>Directory shortcut is missing the path to the directory: %1</source>
<translation>Collegamento Directory senza il percorso della directory: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="307"/>
+ <location filename="../main.cpp" line="323"/>
<source>Unknown type of shortcut : %1</source>
<translation type="unfinished">Tipo di abbreviazione sconosciuto : %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="370"/>
+ <location filename="../main.cpp" line="386"/>
<source>Could not find &quot;%1&quot;. Please ensure it is installed first.</source>
<translation>Impossibile trovare &quot;% 1&quot;. Assicurarsi che sia installato per primo.</translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>Application Error</source>
<translation>Errore Applicazione</translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>The following application experienced an error and needed to close:</source>
<translation>La seguente applicazione ha avuto un errore e deve chiudere:</translation>
</message>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_ja.ts b/src-qt5/core/lumina-open/i18n/lumina-open_ja.ts
index 9eb3e794..4cc2bf0e 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_ja.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_ja.ts
@@ -148,59 +148,59 @@
<translation>ファイルエラー</translation>
</message>
<message>
- <location filename="../main.cpp" line="191"/>
- <location filename="../main.cpp" line="197"/>
+ <location filename="../main.cpp" line="199"/>
+ <location filename="../main.cpp" line="213"/>
<source>Audio Volume %1%</source>
<translation>音声ボリューム %1%</translation>
</message>
<message>
- <location filename="../main.cpp" line="205"/>
- <location filename="../main.cpp" line="214"/>
+ <location filename="../main.cpp" line="221"/>
+ <location filename="../main.cpp" line="230"/>
<source>Screen Brightness %1%</source>
<translation>画面の明るさ %1%</translation>
</message>
<message>
- <location filename="../main.cpp" line="246"/>
+ <location filename="../main.cpp" line="262"/>
<source>Invalid file or URL: %1</source>
<translation>無効なファイルまたはURL: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="267"/>
+ <location filename="../main.cpp" line="283"/>
<source>Application entry is invalid: %1</source>
<translation>アプリケーションエントリーが不正です: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="278"/>
+ <location filename="../main.cpp" line="294"/>
<source>Application shortcut is missing the launching information (malformed shortcut): %1</source>
<translation>アプリケーションショートカットの起動情報が失われています(無効なショートカット): %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="291"/>
+ <location filename="../main.cpp" line="307"/>
<source>URL shortcut is missing the URL: %1</source>
<translation>URL ショートカットの URL が失われています: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="302"/>
+ <location filename="../main.cpp" line="318"/>
<source>Directory shortcut is missing the path to the directory: %1</source>
<translation>ディレクトリーショートカットのパス情報が失われています: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="307"/>
+ <location filename="../main.cpp" line="323"/>
<source>Unknown type of shortcut : %1</source>
<translation>種類が不明なショートカットです: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="370"/>
+ <location filename="../main.cpp" line="386"/>
<source>Could not find &quot;%1&quot;. Please ensure it is installed first.</source>
<translation>&quot;%1&quot; が見つかりませんでした。まずそれがインストールされている事を確認してください。</translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>Application Error</source>
<translation>アプリケーションエラー</translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>The following application experienced an error and needed to close:</source>
<translation>このアプリケーションでエラーが発生したため、閉じる必要があります:</translation>
</message>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_ka.ts b/src-qt5/core/lumina-open/i18n/lumina-open_ka.ts
index 607f911f..514c2cc0 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_ka.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_ka.ts
@@ -147,59 +147,59 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="191"/>
- <location filename="../main.cpp" line="197"/>
+ <location filename="../main.cpp" line="199"/>
+ <location filename="../main.cpp" line="213"/>
<source>Audio Volume %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="205"/>
- <location filename="../main.cpp" line="214"/>
+ <location filename="../main.cpp" line="221"/>
+ <location filename="../main.cpp" line="230"/>
<source>Screen Brightness %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="246"/>
+ <location filename="../main.cpp" line="262"/>
<source>Invalid file or URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="267"/>
+ <location filename="../main.cpp" line="283"/>
<source>Application entry is invalid: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="278"/>
+ <location filename="../main.cpp" line="294"/>
<source>Application shortcut is missing the launching information (malformed shortcut): %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="291"/>
+ <location filename="../main.cpp" line="307"/>
<source>URL shortcut is missing the URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="302"/>
+ <location filename="../main.cpp" line="318"/>
<source>Directory shortcut is missing the path to the directory: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="307"/>
+ <location filename="../main.cpp" line="323"/>
<source>Unknown type of shortcut : %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="370"/>
+ <location filename="../main.cpp" line="386"/>
<source>Could not find &quot;%1&quot;. Please ensure it is installed first.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>Application Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>The following application experienced an error and needed to close:</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_ko.ts b/src-qt5/core/lumina-open/i18n/lumina-open_ko.ts
index bcee9b12..255b8336 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_ko.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_ko.ts
@@ -147,59 +147,59 @@
<translation>파일 오류</translation>
</message>
<message>
- <location filename="../main.cpp" line="191"/>
- <location filename="../main.cpp" line="197"/>
+ <location filename="../main.cpp" line="199"/>
+ <location filename="../main.cpp" line="213"/>
<source>Audio Volume %1%</source>
<translation>오디오 볼륨 %1%</translation>
</message>
<message>
- <location filename="../main.cpp" line="205"/>
- <location filename="../main.cpp" line="214"/>
+ <location filename="../main.cpp" line="221"/>
+ <location filename="../main.cpp" line="230"/>
<source>Screen Brightness %1%</source>
<translation>화면 밝기 %1%</translation>
</message>
<message>
- <location filename="../main.cpp" line="246"/>
+ <location filename="../main.cpp" line="262"/>
<source>Invalid file or URL: %1</source>
<translation>잘못된 파일이나 URL: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="267"/>
+ <location filename="../main.cpp" line="283"/>
<source>Application entry is invalid: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="278"/>
+ <location filename="../main.cpp" line="294"/>
<source>Application shortcut is missing the launching information (malformed shortcut): %1</source>
<translation>프로그램 바로 가기에 실행 정보가 없습니다 (잘못된 바로 가기): %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="291"/>
+ <location filename="../main.cpp" line="307"/>
<source>URL shortcut is missing the URL: %1</source>
<translation>URL 바로 가기에 URL이 없습니다: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="302"/>
+ <location filename="../main.cpp" line="318"/>
<source>Directory shortcut is missing the path to the directory: %1</source>
<translation>디렉터리 바로 가기에 디렉터리 경로가 없습니다: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="307"/>
+ <location filename="../main.cpp" line="323"/>
<source>Unknown type of shortcut : %1</source>
<translation>알 수 없는 종류의 바로 가기: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="370"/>
+ <location filename="../main.cpp" line="386"/>
<source>Could not find &quot;%1&quot;. Please ensure it is installed first.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>Application Error</source>
<translation>프로그램 오류</translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>The following application experienced an error and needed to close:</source>
<translation>다음의 프로그램에 오류가 발생하여 종료하였습니다:</translation>
</message>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_lt.ts b/src-qt5/core/lumina-open/i18n/lumina-open_lt.ts
index e348dfba..a271c104 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_lt.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_lt.ts
@@ -147,59 +147,59 @@
<translation>Failo klaida</translation>
</message>
<message>
- <location filename="../main.cpp" line="191"/>
- <location filename="../main.cpp" line="197"/>
+ <location filename="../main.cpp" line="199"/>
+ <location filename="../main.cpp" line="213"/>
<source>Audio Volume %1%</source>
<translation>Garso garsis %1%</translation>
</message>
<message>
- <location filename="../main.cpp" line="205"/>
- <location filename="../main.cpp" line="214"/>
+ <location filename="../main.cpp" line="221"/>
+ <location filename="../main.cpp" line="230"/>
<source>Screen Brightness %1%</source>
<translation>Ekrano ryškumas %1%</translation>
</message>
<message>
- <location filename="../main.cpp" line="246"/>
+ <location filename="../main.cpp" line="262"/>
<source>Invalid file or URL: %1</source>
<translation>Netinkamas failas ar URL: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="267"/>
+ <location filename="../main.cpp" line="283"/>
<source>Application entry is invalid: %1</source>
<translation>Programos įrašas yra neteisingas: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="278"/>
+ <location filename="../main.cpp" line="294"/>
<source>Application shortcut is missing the launching information (malformed shortcut): %1</source>
<translation>Programos šaukinyje trūksta paleidimo informacijos (netaisyklingas šaukinys): %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="291"/>
+ <location filename="../main.cpp" line="307"/>
<source>URL shortcut is missing the URL: %1</source>
<translation>URL šaukinyje trūksta URL: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="302"/>
+ <location filename="../main.cpp" line="318"/>
<source>Directory shortcut is missing the path to the directory: %1</source>
<translation>Katalogo šaukinyje trūksta kelio į katalogą: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="307"/>
+ <location filename="../main.cpp" line="323"/>
<source>Unknown type of shortcut : %1</source>
<translation>Nežinomas šaukinio tipas : %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="370"/>
+ <location filename="../main.cpp" line="386"/>
<source>Could not find &quot;%1&quot;. Please ensure it is installed first.</source>
<translation>Nepavyko rasti &quot;%1&quot;. Iš pradžių, įsitikinkite ar ji įdiegta.</translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>Application Error</source>
<translation>Programos klaida</translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>The following application experienced an error and needed to close:</source>
<translation>Ši programa susidūrė su klaida ir turėjo būti užverta:</translation>
</message>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_lv.ts b/src-qt5/core/lumina-open/i18n/lumina-open_lv.ts
index 8a818aa0..04fd8239 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_lv.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_lv.ts
@@ -147,59 +147,59 @@
<translation>Faila kļūda</translation>
</message>
<message>
- <location filename="../main.cpp" line="191"/>
- <location filename="../main.cpp" line="197"/>
+ <location filename="../main.cpp" line="199"/>
+ <location filename="../main.cpp" line="213"/>
<source>Audio Volume %1%</source>
<translation>Audio skaļums %1%</translation>
</message>
<message>
- <location filename="../main.cpp" line="205"/>
- <location filename="../main.cpp" line="214"/>
+ <location filename="../main.cpp" line="221"/>
+ <location filename="../main.cpp" line="230"/>
<source>Screen Brightness %1%</source>
<translation>Ekrāna spilgtums %1%</translation>
</message>
<message>
- <location filename="../main.cpp" line="246"/>
+ <location filename="../main.cpp" line="262"/>
<source>Invalid file or URL: %1</source>
<translation>Nederīgs fails vai URL: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="267"/>
+ <location filename="../main.cpp" line="283"/>
<source>Application entry is invalid: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="278"/>
+ <location filename="../main.cpp" line="294"/>
<source>Application shortcut is missing the launching information (malformed shortcut): %1</source>
<translation>Lietotnes saīsnei trūkst palaišanas informācijas (nepareizi veidota saīsne): %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="291"/>
+ <location filename="../main.cpp" line="307"/>
<source>URL shortcut is missing the URL: %1</source>
<translation>URL saīsnei trūkst URL: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="302"/>
+ <location filename="../main.cpp" line="318"/>
<source>Directory shortcut is missing the path to the directory: %1</source>
<translation>Kataloga saīsnei trūkst ceļš uz katalogu: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="307"/>
+ <location filename="../main.cpp" line="323"/>
<source>Unknown type of shortcut : %1</source>
<translation>Nezināma tipa saīsne : %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="370"/>
+ <location filename="../main.cpp" line="386"/>
<source>Could not find &quot;%1&quot;. Please ensure it is installed first.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>Application Error</source>
<translation>Lietotnes kļūda</translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>The following application experienced an error and needed to close:</source>
<translation>Šai lietotnei radās kļūda un bija nepieciešams to aizvērt:</translation>
</message>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_mk.ts b/src-qt5/core/lumina-open/i18n/lumina-open_mk.ts
index 607f911f..514c2cc0 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_mk.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_mk.ts
@@ -147,59 +147,59 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="191"/>
- <location filename="../main.cpp" line="197"/>
+ <location filename="../main.cpp" line="199"/>
+ <location filename="../main.cpp" line="213"/>
<source>Audio Volume %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="205"/>
- <location filename="../main.cpp" line="214"/>
+ <location filename="../main.cpp" line="221"/>
+ <location filename="../main.cpp" line="230"/>
<source>Screen Brightness %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="246"/>
+ <location filename="../main.cpp" line="262"/>
<source>Invalid file or URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="267"/>
+ <location filename="../main.cpp" line="283"/>
<source>Application entry is invalid: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="278"/>
+ <location filename="../main.cpp" line="294"/>
<source>Application shortcut is missing the launching information (malformed shortcut): %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="291"/>
+ <location filename="../main.cpp" line="307"/>
<source>URL shortcut is missing the URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="302"/>
+ <location filename="../main.cpp" line="318"/>
<source>Directory shortcut is missing the path to the directory: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="307"/>
+ <location filename="../main.cpp" line="323"/>
<source>Unknown type of shortcut : %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="370"/>
+ <location filename="../main.cpp" line="386"/>
<source>Could not find &quot;%1&quot;. Please ensure it is installed first.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>Application Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>The following application experienced an error and needed to close:</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_mn.ts b/src-qt5/core/lumina-open/i18n/lumina-open_mn.ts
index 607f911f..514c2cc0 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_mn.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_mn.ts
@@ -147,59 +147,59 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="191"/>
- <location filename="../main.cpp" line="197"/>
+ <location filename="../main.cpp" line="199"/>
+ <location filename="../main.cpp" line="213"/>
<source>Audio Volume %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="205"/>
- <location filename="../main.cpp" line="214"/>
+ <location filename="../main.cpp" line="221"/>
+ <location filename="../main.cpp" line="230"/>
<source>Screen Brightness %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="246"/>
+ <location filename="../main.cpp" line="262"/>
<source>Invalid file or URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="267"/>
+ <location filename="../main.cpp" line="283"/>
<source>Application entry is invalid: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="278"/>
+ <location filename="../main.cpp" line="294"/>
<source>Application shortcut is missing the launching information (malformed shortcut): %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="291"/>
+ <location filename="../main.cpp" line="307"/>
<source>URL shortcut is missing the URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="302"/>
+ <location filename="../main.cpp" line="318"/>
<source>Directory shortcut is missing the path to the directory: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="307"/>
+ <location filename="../main.cpp" line="323"/>
<source>Unknown type of shortcut : %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="370"/>
+ <location filename="../main.cpp" line="386"/>
<source>Could not find &quot;%1&quot;. Please ensure it is installed first.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>Application Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>The following application experienced an error and needed to close:</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_ms.ts b/src-qt5/core/lumina-open/i18n/lumina-open_ms.ts
index 607f911f..514c2cc0 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_ms.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_ms.ts
@@ -147,59 +147,59 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="191"/>
- <location filename="../main.cpp" line="197"/>
+ <location filename="../main.cpp" line="199"/>
+ <location filename="../main.cpp" line="213"/>
<source>Audio Volume %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="205"/>
- <location filename="../main.cpp" line="214"/>
+ <location filename="../main.cpp" line="221"/>
+ <location filename="../main.cpp" line="230"/>
<source>Screen Brightness %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="246"/>
+ <location filename="../main.cpp" line="262"/>
<source>Invalid file or URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="267"/>
+ <location filename="../main.cpp" line="283"/>
<source>Application entry is invalid: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="278"/>
+ <location filename="../main.cpp" line="294"/>
<source>Application shortcut is missing the launching information (malformed shortcut): %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="291"/>
+ <location filename="../main.cpp" line="307"/>
<source>URL shortcut is missing the URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="302"/>
+ <location filename="../main.cpp" line="318"/>
<source>Directory shortcut is missing the path to the directory: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="307"/>
+ <location filename="../main.cpp" line="323"/>
<source>Unknown type of shortcut : %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="370"/>
+ <location filename="../main.cpp" line="386"/>
<source>Could not find &quot;%1&quot;. Please ensure it is installed first.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>Application Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>The following application experienced an error and needed to close:</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_mt.ts b/src-qt5/core/lumina-open/i18n/lumina-open_mt.ts
index 607f911f..514c2cc0 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_mt.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_mt.ts
@@ -147,59 +147,59 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="191"/>
- <location filename="../main.cpp" line="197"/>
+ <location filename="../main.cpp" line="199"/>
+ <location filename="../main.cpp" line="213"/>
<source>Audio Volume %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="205"/>
- <location filename="../main.cpp" line="214"/>
+ <location filename="../main.cpp" line="221"/>
+ <location filename="../main.cpp" line="230"/>
<source>Screen Brightness %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="246"/>
+ <location filename="../main.cpp" line="262"/>
<source>Invalid file or URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="267"/>
+ <location filename="../main.cpp" line="283"/>
<source>Application entry is invalid: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="278"/>
+ <location filename="../main.cpp" line="294"/>
<source>Application shortcut is missing the launching information (malformed shortcut): %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="291"/>
+ <location filename="../main.cpp" line="307"/>
<source>URL shortcut is missing the URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="302"/>
+ <location filename="../main.cpp" line="318"/>
<source>Directory shortcut is missing the path to the directory: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="307"/>
+ <location filename="../main.cpp" line="323"/>
<source>Unknown type of shortcut : %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="370"/>
+ <location filename="../main.cpp" line="386"/>
<source>Could not find &quot;%1&quot;. Please ensure it is installed first.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>Application Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>The following application experienced an error and needed to close:</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_nb.ts b/src-qt5/core/lumina-open/i18n/lumina-open_nb.ts
index 607f911f..514c2cc0 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_nb.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_nb.ts
@@ -147,59 +147,59 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="191"/>
- <location filename="../main.cpp" line="197"/>
+ <location filename="../main.cpp" line="199"/>
+ <location filename="../main.cpp" line="213"/>
<source>Audio Volume %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="205"/>
- <location filename="../main.cpp" line="214"/>
+ <location filename="../main.cpp" line="221"/>
+ <location filename="../main.cpp" line="230"/>
<source>Screen Brightness %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="246"/>
+ <location filename="../main.cpp" line="262"/>
<source>Invalid file or URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="267"/>
+ <location filename="../main.cpp" line="283"/>
<source>Application entry is invalid: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="278"/>
+ <location filename="../main.cpp" line="294"/>
<source>Application shortcut is missing the launching information (malformed shortcut): %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="291"/>
+ <location filename="../main.cpp" line="307"/>
<source>URL shortcut is missing the URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="302"/>
+ <location filename="../main.cpp" line="318"/>
<source>Directory shortcut is missing the path to the directory: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="307"/>
+ <location filename="../main.cpp" line="323"/>
<source>Unknown type of shortcut : %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="370"/>
+ <location filename="../main.cpp" line="386"/>
<source>Could not find &quot;%1&quot;. Please ensure it is installed first.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>Application Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>The following application experienced an error and needed to close:</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_nl.ts b/src-qt5/core/lumina-open/i18n/lumina-open_nl.ts
index 61b2a7c8..fe2794dd 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_nl.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_nl.ts
@@ -147,59 +147,59 @@
<translation>Bestandsfout</translation>
</message>
<message>
- <location filename="../main.cpp" line="191"/>
- <location filename="../main.cpp" line="197"/>
+ <location filename="../main.cpp" line="199"/>
+ <location filename="../main.cpp" line="213"/>
<source>Audio Volume %1%</source>
<translation>Audiovolume %1%</translation>
</message>
<message>
- <location filename="../main.cpp" line="205"/>
- <location filename="../main.cpp" line="214"/>
+ <location filename="../main.cpp" line="221"/>
+ <location filename="../main.cpp" line="230"/>
<source>Screen Brightness %1%</source>
<translation>Schermhelderheid %1%</translation>
</message>
<message>
- <location filename="../main.cpp" line="246"/>
+ <location filename="../main.cpp" line="262"/>
<source>Invalid file or URL: %1</source>
<translation>Ongeldig bestand of URL: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="267"/>
+ <location filename="../main.cpp" line="283"/>
<source>Application entry is invalid: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="278"/>
+ <location filename="../main.cpp" line="294"/>
<source>Application shortcut is missing the launching information (malformed shortcut): %1</source>
<translation>De opstartinformatie van de applicatie-snelkoppeling ontbreekt (ongeldige snelkoppeling): %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="291"/>
+ <location filename="../main.cpp" line="307"/>
<source>URL shortcut is missing the URL: %1</source>
<translation>De URL in de URL-snelkoppeling ontbreekt: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="302"/>
+ <location filename="../main.cpp" line="318"/>
<source>Directory shortcut is missing the path to the directory: %1</source>
<translation>Het mappad in de mapsnelkoppeling ontbreekt: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="307"/>
+ <location filename="../main.cpp" line="323"/>
<source>Unknown type of shortcut : %1</source>
<translation>Onbekend soort snelkoppeling: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="370"/>
+ <location filename="../main.cpp" line="386"/>
<source>Could not find &quot;%1&quot;. Please ensure it is installed first.</source>
<translation>&quot;%1&quot; kan niet worden gevonden. Zorg ervoor dat het geïnstalleerd is.</translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>Application Error</source>
<translation>Applicatiefout</translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>The following application experienced an error and needed to close:</source>
<translation>Er is een fout opgetreden in de volgende applicatie en moet daarom worden gesloten:</translation>
</message>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_pa.ts b/src-qt5/core/lumina-open/i18n/lumina-open_pa.ts
index 607f911f..514c2cc0 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_pa.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_pa.ts
@@ -147,59 +147,59 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="191"/>
- <location filename="../main.cpp" line="197"/>
+ <location filename="../main.cpp" line="199"/>
+ <location filename="../main.cpp" line="213"/>
<source>Audio Volume %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="205"/>
- <location filename="../main.cpp" line="214"/>
+ <location filename="../main.cpp" line="221"/>
+ <location filename="../main.cpp" line="230"/>
<source>Screen Brightness %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="246"/>
+ <location filename="../main.cpp" line="262"/>
<source>Invalid file or URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="267"/>
+ <location filename="../main.cpp" line="283"/>
<source>Application entry is invalid: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="278"/>
+ <location filename="../main.cpp" line="294"/>
<source>Application shortcut is missing the launching information (malformed shortcut): %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="291"/>
+ <location filename="../main.cpp" line="307"/>
<source>URL shortcut is missing the URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="302"/>
+ <location filename="../main.cpp" line="318"/>
<source>Directory shortcut is missing the path to the directory: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="307"/>
+ <location filename="../main.cpp" line="323"/>
<source>Unknown type of shortcut : %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="370"/>
+ <location filename="../main.cpp" line="386"/>
<source>Could not find &quot;%1&quot;. Please ensure it is installed first.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>Application Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>The following application experienced an error and needed to close:</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_pl.ts b/src-qt5/core/lumina-open/i18n/lumina-open_pl.ts
index 81dc5121..fbfa6016 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_pl.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_pl.ts
@@ -147,59 +147,59 @@
<translation>Błąd pliku</translation>
</message>
<message>
- <location filename="../main.cpp" line="191"/>
- <location filename="../main.cpp" line="197"/>
+ <location filename="../main.cpp" line="199"/>
+ <location filename="../main.cpp" line="213"/>
<source>Audio Volume %1%</source>
<translation>Głośność dźwięku %1%</translation>
</message>
<message>
- <location filename="../main.cpp" line="205"/>
- <location filename="../main.cpp" line="214"/>
+ <location filename="../main.cpp" line="221"/>
+ <location filename="../main.cpp" line="230"/>
<source>Screen Brightness %1%</source>
<translation>Jasność ekranu %1%</translation>
</message>
<message>
- <location filename="../main.cpp" line="246"/>
+ <location filename="../main.cpp" line="262"/>
<source>Invalid file or URL: %1</source>
<translation>Nieprawidłowy plik lub URL: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="267"/>
+ <location filename="../main.cpp" line="283"/>
<source>Application entry is invalid: %1</source>
<translation>Ścieżka aplikacji jest błędna: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="278"/>
+ <location filename="../main.cpp" line="294"/>
<source>Application shortcut is missing the launching information (malformed shortcut): %1</source>
<translation>Skrót do aplikacji nie posiada odpowiednich informacji do uruchomienia (niewłaściwy skrót): %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="291"/>
+ <location filename="../main.cpp" line="307"/>
<source>URL shortcut is missing the URL: %1</source>
<translation>W skrócie URL brak adresu URL: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="302"/>
+ <location filename="../main.cpp" line="318"/>
<source>Directory shortcut is missing the path to the directory: %1</source>
<translation>W skrócie do folderu brak ścieżki do folderu: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="307"/>
+ <location filename="../main.cpp" line="323"/>
<source>Unknown type of shortcut : %1</source>
<translation>Nieznany błąd skrótu: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="370"/>
+ <location filename="../main.cpp" line="386"/>
<source>Could not find &quot;%1&quot;. Please ensure it is installed first.</source>
<translation>Nie można znaleźć &quot;%1&quot;. Upewnij się, że jest zainstalowany.</translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>Application Error</source>
<translation>Błąd aplikacji</translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>The following application experienced an error and needed to close:</source>
<translation>Aplikacja napotkała błąd i musi zostać zamknięta:</translation>
</message>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_pt.ts b/src-qt5/core/lumina-open/i18n/lumina-open_pt.ts
index bf7c5214..c22093c7 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_pt.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_pt.ts
@@ -147,59 +147,59 @@
<translation>Erro no Arquivo</translation>
</message>
<message>
- <location filename="../main.cpp" line="191"/>
- <location filename="../main.cpp" line="197"/>
+ <location filename="../main.cpp" line="199"/>
+ <location filename="../main.cpp" line="213"/>
<source>Audio Volume %1%</source>
<translation>Volume do Som %1%</translation>
</message>
<message>
- <location filename="../main.cpp" line="205"/>
- <location filename="../main.cpp" line="214"/>
+ <location filename="../main.cpp" line="221"/>
+ <location filename="../main.cpp" line="230"/>
<source>Screen Brightness %1%</source>
<translation>Brilho da Tela %1%</translation>
</message>
<message>
- <location filename="../main.cpp" line="246"/>
+ <location filename="../main.cpp" line="262"/>
<source>Invalid file or URL: %1</source>
<translation>Arquivo ou URL Inválidos: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="267"/>
+ <location filename="../main.cpp" line="283"/>
<source>Application entry is invalid: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="278"/>
+ <location filename="../main.cpp" line="294"/>
<source>Application shortcut is missing the launching information (malformed shortcut): %1</source>
<translation>Está faltando a informação do lançamento do atalho do aplicativo (atalho mal informado): 1%</translation>
</message>
<message>
- <location filename="../main.cpp" line="291"/>
+ <location filename="../main.cpp" line="307"/>
<source>URL shortcut is missing the URL: %1</source>
<translation>Está faltando a URL do atalhos da URL: %1 </translation>
</message>
<message>
- <location filename="../main.cpp" line="302"/>
+ <location filename="../main.cpp" line="318"/>
<source>Directory shortcut is missing the path to the directory: %1</source>
<translation>Está faltando o caminho para o diretório do atalho do diretório&quot; %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="307"/>
+ <location filename="../main.cpp" line="323"/>
<source>Unknown type of shortcut : %1</source>
<translation>Tipo de atalho desconhecido: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="370"/>
+ <location filename="../main.cpp" line="386"/>
<source>Could not find &quot;%1&quot;. Please ensure it is installed first.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>Application Error</source>
<translation>Erro no Aplicativo</translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>The following application experienced an error and needed to close:</source>
<translation>O seguinte aplicativo encontrou um erro e teve que ser fechado:</translation>
</message>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_pt_BR.ts b/src-qt5/core/lumina-open/i18n/lumina-open_pt_BR.ts
index 01c4ffa9..542e135d 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_pt_BR.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_pt_BR.ts
@@ -147,59 +147,59 @@
<translation>Erro de arquivo</translation>
</message>
<message>
- <location filename="../main.cpp" line="191"/>
- <location filename="../main.cpp" line="197"/>
+ <location filename="../main.cpp" line="199"/>
+ <location filename="../main.cpp" line="213"/>
<source>Audio Volume %1%</source>
<translation>Volume do som %1%</translation>
</message>
<message>
- <location filename="../main.cpp" line="205"/>
- <location filename="../main.cpp" line="214"/>
+ <location filename="../main.cpp" line="221"/>
+ <location filename="../main.cpp" line="230"/>
<source>Screen Brightness %1%</source>
<translation>Brilho da tela %1%</translation>
</message>
<message>
- <location filename="../main.cpp" line="246"/>
+ <location filename="../main.cpp" line="262"/>
<source>Invalid file or URL: %1</source>
<translation>Arquivo ou URL inválido: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="267"/>
+ <location filename="../main.cpp" line="283"/>
<source>Application entry is invalid: %1</source>
<translation>A entrada do aplicativo é inválida: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="278"/>
+ <location filename="../main.cpp" line="294"/>
<source>Application shortcut is missing the launching information (malformed shortcut): %1</source>
<translation>O atalho do aplicativo não tem a informação de lançamento (atalho malformado): %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="291"/>
+ <location filename="../main.cpp" line="307"/>
<source>URL shortcut is missing the URL: %1</source>
<translation>Está faltando o URL no atalho: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="302"/>
+ <location filename="../main.cpp" line="318"/>
<source>Directory shortcut is missing the path to the directory: %1</source>
<translation>Está faltando o caminho para o diretório no atalho: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="307"/>
+ <location filename="../main.cpp" line="323"/>
<source>Unknown type of shortcut : %1</source>
<translation>Tipo de atalho desconhecido: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="370"/>
+ <location filename="../main.cpp" line="386"/>
<source>Could not find &quot;%1&quot;. Please ensure it is installed first.</source>
<translation>&quot;%1&quot; não pode ser localizado. Por favor, verifique se está instalado.</translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>Application Error</source>
<translation>Erro do aplicativo</translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>The following application experienced an error and needed to close:</source>
<translation>O seguinte aplicativo encontrou um erro e precisa ser fechado:</translation>
</message>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_ro.ts b/src-qt5/core/lumina-open/i18n/lumina-open_ro.ts
index 607f911f..514c2cc0 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_ro.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_ro.ts
@@ -147,59 +147,59 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="191"/>
- <location filename="../main.cpp" line="197"/>
+ <location filename="../main.cpp" line="199"/>
+ <location filename="../main.cpp" line="213"/>
<source>Audio Volume %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="205"/>
- <location filename="../main.cpp" line="214"/>
+ <location filename="../main.cpp" line="221"/>
+ <location filename="../main.cpp" line="230"/>
<source>Screen Brightness %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="246"/>
+ <location filename="../main.cpp" line="262"/>
<source>Invalid file or URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="267"/>
+ <location filename="../main.cpp" line="283"/>
<source>Application entry is invalid: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="278"/>
+ <location filename="../main.cpp" line="294"/>
<source>Application shortcut is missing the launching information (malformed shortcut): %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="291"/>
+ <location filename="../main.cpp" line="307"/>
<source>URL shortcut is missing the URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="302"/>
+ <location filename="../main.cpp" line="318"/>
<source>Directory shortcut is missing the path to the directory: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="307"/>
+ <location filename="../main.cpp" line="323"/>
<source>Unknown type of shortcut : %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="370"/>
+ <location filename="../main.cpp" line="386"/>
<source>Could not find &quot;%1&quot;. Please ensure it is installed first.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>Application Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>The following application experienced an error and needed to close:</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_ru.ts b/src-qt5/core/lumina-open/i18n/lumina-open_ru.ts
index 3762faca..7a502cbe 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_ru.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_ru.ts
@@ -147,59 +147,59 @@
<translation>Ошибка Файла</translation>
</message>
<message>
- <location filename="../main.cpp" line="191"/>
- <location filename="../main.cpp" line="197"/>
+ <location filename="../main.cpp" line="199"/>
+ <location filename="../main.cpp" line="213"/>
<source>Audio Volume %1%</source>
<translation>Громкость %1%</translation>
</message>
<message>
- <location filename="../main.cpp" line="205"/>
- <location filename="../main.cpp" line="214"/>
+ <location filename="../main.cpp" line="221"/>
+ <location filename="../main.cpp" line="230"/>
<source>Screen Brightness %1%</source>
<translation>Яркость Экрана %1%</translation>
</message>
<message>
- <location filename="../main.cpp" line="246"/>
+ <location filename="../main.cpp" line="262"/>
<source>Invalid file or URL: %1</source>
<translation>Неверный файл или URL-адрес: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="267"/>
+ <location filename="../main.cpp" line="283"/>
<source>Application entry is invalid: %1</source>
<translation>Приложение вывело ошибку: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="278"/>
+ <location filename="../main.cpp" line="294"/>
<source>Application shortcut is missing the launching information (malformed shortcut): %1</source>
<translation>В ярлыке приложения отсутствует информация для запуска (неверный формат ярлыка): %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="291"/>
+ <location filename="../main.cpp" line="307"/>
<source>URL shortcut is missing the URL: %1</source>
<translation>В ярлыке отсутствует URL-адрес: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="302"/>
+ <location filename="../main.cpp" line="318"/>
<source>Directory shortcut is missing the path to the directory: %1</source>
<translation>В ярлыке отсутствует путь к папке: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="307"/>
+ <location filename="../main.cpp" line="323"/>
<source>Unknown type of shortcut : %1</source>
<translation>Неизвестный тип ярлыка: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="370"/>
+ <location filename="../main.cpp" line="386"/>
<source>Could not find &quot;%1&quot;. Please ensure it is installed first.</source>
<translation>Не найден &quot;%1&quot;. Пожалуйста, убедитесь, что он установлен в первую очередь.</translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>Application Error</source>
<translation>Ошибка Приложения</translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>The following application experienced an error and needed to close:</source>
<translation>Следующее приложение вызвало ошибку и должно быть закрыто:</translation>
</message>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_sk.ts b/src-qt5/core/lumina-open/i18n/lumina-open_sk.ts
index 153fbcf6..18932a98 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_sk.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_sk.ts
@@ -147,59 +147,59 @@
<translation>Chyba súboru</translation>
</message>
<message>
- <location filename="../main.cpp" line="191"/>
- <location filename="../main.cpp" line="197"/>
+ <location filename="../main.cpp" line="199"/>
+ <location filename="../main.cpp" line="213"/>
<source>Audio Volume %1%</source>
<translation>Hlasitosť zvuku %1%</translation>
</message>
<message>
- <location filename="../main.cpp" line="205"/>
- <location filename="../main.cpp" line="214"/>
+ <location filename="../main.cpp" line="221"/>
+ <location filename="../main.cpp" line="230"/>
<source>Screen Brightness %1%</source>
<translation>Jas obrazovky %1%</translation>
</message>
<message>
- <location filename="../main.cpp" line="246"/>
+ <location filename="../main.cpp" line="262"/>
<source>Invalid file or URL: %1</source>
<translation>Neplatný súbor alebo URL %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="267"/>
+ <location filename="../main.cpp" line="283"/>
<source>Application entry is invalid: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="278"/>
+ <location filename="../main.cpp" line="294"/>
<source>Application shortcut is missing the launching information (malformed shortcut): %1</source>
<translation>Zástupca aplikácie - chýbajúce informácie: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="291"/>
+ <location filename="../main.cpp" line="307"/>
<source>URL shortcut is missing the URL: %1</source>
<translation>chýba URL:%1</translation>
</message>
<message>
- <location filename="../main.cpp" line="302"/>
+ <location filename="../main.cpp" line="318"/>
<source>Directory shortcut is missing the path to the directory: %1</source>
<translation>chýba cesta adresára: %1 </translation>
</message>
<message>
- <location filename="../main.cpp" line="307"/>
+ <location filename="../main.cpp" line="323"/>
<source>Unknown type of shortcut : %1</source>
<translation>Neznámy typ skratky: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="370"/>
+ <location filename="../main.cpp" line="386"/>
<source>Could not find &quot;%1&quot;. Please ensure it is installed first.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>Application Error</source>
<translation>Chyba aplikácie </translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>The following application experienced an error and needed to close:</source>
<translation>Nasledujúca aplikácia hlási chybu a musí byť ukončená: </translation>
</message>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_sl.ts b/src-qt5/core/lumina-open/i18n/lumina-open_sl.ts
index 607f911f..514c2cc0 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_sl.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_sl.ts
@@ -147,59 +147,59 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="191"/>
- <location filename="../main.cpp" line="197"/>
+ <location filename="../main.cpp" line="199"/>
+ <location filename="../main.cpp" line="213"/>
<source>Audio Volume %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="205"/>
- <location filename="../main.cpp" line="214"/>
+ <location filename="../main.cpp" line="221"/>
+ <location filename="../main.cpp" line="230"/>
<source>Screen Brightness %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="246"/>
+ <location filename="../main.cpp" line="262"/>
<source>Invalid file or URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="267"/>
+ <location filename="../main.cpp" line="283"/>
<source>Application entry is invalid: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="278"/>
+ <location filename="../main.cpp" line="294"/>
<source>Application shortcut is missing the launching information (malformed shortcut): %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="291"/>
+ <location filename="../main.cpp" line="307"/>
<source>URL shortcut is missing the URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="302"/>
+ <location filename="../main.cpp" line="318"/>
<source>Directory shortcut is missing the path to the directory: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="307"/>
+ <location filename="../main.cpp" line="323"/>
<source>Unknown type of shortcut : %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="370"/>
+ <location filename="../main.cpp" line="386"/>
<source>Could not find &quot;%1&quot;. Please ensure it is installed first.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>Application Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>The following application experienced an error and needed to close:</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_sr.ts b/src-qt5/core/lumina-open/i18n/lumina-open_sr.ts
index 607f911f..514c2cc0 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_sr.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_sr.ts
@@ -147,59 +147,59 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="191"/>
- <location filename="../main.cpp" line="197"/>
+ <location filename="../main.cpp" line="199"/>
+ <location filename="../main.cpp" line="213"/>
<source>Audio Volume %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="205"/>
- <location filename="../main.cpp" line="214"/>
+ <location filename="../main.cpp" line="221"/>
+ <location filename="../main.cpp" line="230"/>
<source>Screen Brightness %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="246"/>
+ <location filename="../main.cpp" line="262"/>
<source>Invalid file or URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="267"/>
+ <location filename="../main.cpp" line="283"/>
<source>Application entry is invalid: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="278"/>
+ <location filename="../main.cpp" line="294"/>
<source>Application shortcut is missing the launching information (malformed shortcut): %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="291"/>
+ <location filename="../main.cpp" line="307"/>
<source>URL shortcut is missing the URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="302"/>
+ <location filename="../main.cpp" line="318"/>
<source>Directory shortcut is missing the path to the directory: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="307"/>
+ <location filename="../main.cpp" line="323"/>
<source>Unknown type of shortcut : %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="370"/>
+ <location filename="../main.cpp" line="386"/>
<source>Could not find &quot;%1&quot;. Please ensure it is installed first.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>Application Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>The following application experienced an error and needed to close:</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_sv.ts b/src-qt5/core/lumina-open/i18n/lumina-open_sv.ts
index 7745b210..e04e433e 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_sv.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_sv.ts
@@ -147,59 +147,59 @@
<translation>Filfel</translation>
</message>
<message>
- <location filename="../main.cpp" line="191"/>
- <location filename="../main.cpp" line="197"/>
+ <location filename="../main.cpp" line="199"/>
+ <location filename="../main.cpp" line="213"/>
<source>Audio Volume %1%</source>
<translation>Ljudvolym %1%</translation>
</message>
<message>
- <location filename="../main.cpp" line="205"/>
- <location filename="../main.cpp" line="214"/>
+ <location filename="../main.cpp" line="221"/>
+ <location filename="../main.cpp" line="230"/>
<source>Screen Brightness %1%</source>
<translation>Skärmljusstyrka %1%</translation>
</message>
<message>
- <location filename="../main.cpp" line="246"/>
+ <location filename="../main.cpp" line="262"/>
<source>Invalid file or URL: %1</source>
<translation>Ogiltig fil eller URL %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="267"/>
+ <location filename="../main.cpp" line="283"/>
<source>Application entry is invalid: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="278"/>
+ <location filename="../main.cpp" line="294"/>
<source>Application shortcut is missing the launching information (malformed shortcut): %1</source>
<translation>Programgenväg saknar startinformation (missbildad genväg): %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="291"/>
+ <location filename="../main.cpp" line="307"/>
<source>URL shortcut is missing the URL: %1</source>
<translation>URL-genvägen saknar URL: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="302"/>
+ <location filename="../main.cpp" line="318"/>
<source>Directory shortcut is missing the path to the directory: %1</source>
<translation>Genvägen till katalogen saknar sökvägen till katalogen :%1</translation>
</message>
<message>
- <location filename="../main.cpp" line="307"/>
+ <location filename="../main.cpp" line="323"/>
<source>Unknown type of shortcut : %1</source>
<translation>Okänd typ av genväg: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="370"/>
+ <location filename="../main.cpp" line="386"/>
<source>Could not find &quot;%1&quot;. Please ensure it is installed first.</source>
<translation>Kunde inte hitta &quot;%1&quot;. Se till att du har detta programmet installerat först.</translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>Application Error</source>
<translation>Programfel</translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>The following application experienced an error and needed to close:</source>
<translation>Följande program upplevde ett fel och behövde stängas:</translation>
</message>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_sw.ts b/src-qt5/core/lumina-open/i18n/lumina-open_sw.ts
index 607f911f..514c2cc0 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_sw.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_sw.ts
@@ -147,59 +147,59 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="191"/>
- <location filename="../main.cpp" line="197"/>
+ <location filename="../main.cpp" line="199"/>
+ <location filename="../main.cpp" line="213"/>
<source>Audio Volume %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="205"/>
- <location filename="../main.cpp" line="214"/>
+ <location filename="../main.cpp" line="221"/>
+ <location filename="../main.cpp" line="230"/>
<source>Screen Brightness %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="246"/>
+ <location filename="../main.cpp" line="262"/>
<source>Invalid file or URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="267"/>
+ <location filename="../main.cpp" line="283"/>
<source>Application entry is invalid: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="278"/>
+ <location filename="../main.cpp" line="294"/>
<source>Application shortcut is missing the launching information (malformed shortcut): %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="291"/>
+ <location filename="../main.cpp" line="307"/>
<source>URL shortcut is missing the URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="302"/>
+ <location filename="../main.cpp" line="318"/>
<source>Directory shortcut is missing the path to the directory: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="307"/>
+ <location filename="../main.cpp" line="323"/>
<source>Unknown type of shortcut : %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="370"/>
+ <location filename="../main.cpp" line="386"/>
<source>Could not find &quot;%1&quot;. Please ensure it is installed first.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>Application Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>The following application experienced an error and needed to close:</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_ta.ts b/src-qt5/core/lumina-open/i18n/lumina-open_ta.ts
index 607f911f..514c2cc0 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_ta.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_ta.ts
@@ -147,59 +147,59 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="191"/>
- <location filename="../main.cpp" line="197"/>
+ <location filename="../main.cpp" line="199"/>
+ <location filename="../main.cpp" line="213"/>
<source>Audio Volume %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="205"/>
- <location filename="../main.cpp" line="214"/>
+ <location filename="../main.cpp" line="221"/>
+ <location filename="../main.cpp" line="230"/>
<source>Screen Brightness %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="246"/>
+ <location filename="../main.cpp" line="262"/>
<source>Invalid file or URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="267"/>
+ <location filename="../main.cpp" line="283"/>
<source>Application entry is invalid: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="278"/>
+ <location filename="../main.cpp" line="294"/>
<source>Application shortcut is missing the launching information (malformed shortcut): %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="291"/>
+ <location filename="../main.cpp" line="307"/>
<source>URL shortcut is missing the URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="302"/>
+ <location filename="../main.cpp" line="318"/>
<source>Directory shortcut is missing the path to the directory: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="307"/>
+ <location filename="../main.cpp" line="323"/>
<source>Unknown type of shortcut : %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="370"/>
+ <location filename="../main.cpp" line="386"/>
<source>Could not find &quot;%1&quot;. Please ensure it is installed first.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>Application Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>The following application experienced an error and needed to close:</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_tg.ts b/src-qt5/core/lumina-open/i18n/lumina-open_tg.ts
index 607f911f..514c2cc0 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_tg.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_tg.ts
@@ -147,59 +147,59 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="191"/>
- <location filename="../main.cpp" line="197"/>
+ <location filename="../main.cpp" line="199"/>
+ <location filename="../main.cpp" line="213"/>
<source>Audio Volume %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="205"/>
- <location filename="../main.cpp" line="214"/>
+ <location filename="../main.cpp" line="221"/>
+ <location filename="../main.cpp" line="230"/>
<source>Screen Brightness %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="246"/>
+ <location filename="../main.cpp" line="262"/>
<source>Invalid file or URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="267"/>
+ <location filename="../main.cpp" line="283"/>
<source>Application entry is invalid: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="278"/>
+ <location filename="../main.cpp" line="294"/>
<source>Application shortcut is missing the launching information (malformed shortcut): %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="291"/>
+ <location filename="../main.cpp" line="307"/>
<source>URL shortcut is missing the URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="302"/>
+ <location filename="../main.cpp" line="318"/>
<source>Directory shortcut is missing the path to the directory: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="307"/>
+ <location filename="../main.cpp" line="323"/>
<source>Unknown type of shortcut : %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="370"/>
+ <location filename="../main.cpp" line="386"/>
<source>Could not find &quot;%1&quot;. Please ensure it is installed first.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>Application Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>The following application experienced an error and needed to close:</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_th.ts b/src-qt5/core/lumina-open/i18n/lumina-open_th.ts
index 607f911f..514c2cc0 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_th.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_th.ts
@@ -147,59 +147,59 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="191"/>
- <location filename="../main.cpp" line="197"/>
+ <location filename="../main.cpp" line="199"/>
+ <location filename="../main.cpp" line="213"/>
<source>Audio Volume %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="205"/>
- <location filename="../main.cpp" line="214"/>
+ <location filename="../main.cpp" line="221"/>
+ <location filename="../main.cpp" line="230"/>
<source>Screen Brightness %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="246"/>
+ <location filename="../main.cpp" line="262"/>
<source>Invalid file or URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="267"/>
+ <location filename="../main.cpp" line="283"/>
<source>Application entry is invalid: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="278"/>
+ <location filename="../main.cpp" line="294"/>
<source>Application shortcut is missing the launching information (malformed shortcut): %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="291"/>
+ <location filename="../main.cpp" line="307"/>
<source>URL shortcut is missing the URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="302"/>
+ <location filename="../main.cpp" line="318"/>
<source>Directory shortcut is missing the path to the directory: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="307"/>
+ <location filename="../main.cpp" line="323"/>
<source>Unknown type of shortcut : %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="370"/>
+ <location filename="../main.cpp" line="386"/>
<source>Could not find &quot;%1&quot;. Please ensure it is installed first.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>Application Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>The following application experienced an error and needed to close:</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_tr.ts b/src-qt5/core/lumina-open/i18n/lumina-open_tr.ts
index 06f75ad1..9e73a2b5 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_tr.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_tr.ts
@@ -147,59 +147,59 @@
<translation>Dosya Hatası</translation>
</message>
<message>
- <location filename="../main.cpp" line="191"/>
- <location filename="../main.cpp" line="197"/>
+ <location filename="../main.cpp" line="199"/>
+ <location filename="../main.cpp" line="213"/>
<source>Audio Volume %1%</source>
<translation>Ses Düzeyi %1%</translation>
</message>
<message>
- <location filename="../main.cpp" line="205"/>
- <location filename="../main.cpp" line="214"/>
+ <location filename="../main.cpp" line="221"/>
+ <location filename="../main.cpp" line="230"/>
<source>Screen Brightness %1%</source>
<translation>Ekran Parlaklığı %1%</translation>
</message>
<message>
- <location filename="../main.cpp" line="246"/>
+ <location filename="../main.cpp" line="262"/>
<source>Invalid file or URL: %1</source>
<translation>Geçersiz Dosya ya da URL: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="267"/>
+ <location filename="../main.cpp" line="283"/>
<source>Application entry is invalid: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="278"/>
+ <location filename="../main.cpp" line="294"/>
<source>Application shortcut is missing the launching information (malformed shortcut): %1</source>
<translation>Uygulama kısayolunda başlatma bilgisi eksik (hatalı kısayol): %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="291"/>
+ <location filename="../main.cpp" line="307"/>
<source>URL shortcut is missing the URL: %1</source>
<translation>URL kısayolunda URL eksik: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="302"/>
+ <location filename="../main.cpp" line="318"/>
<source>Directory shortcut is missing the path to the directory: %1</source>
<translation>Dizin kısayolunda dizin yolu eksik: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="307"/>
+ <location filename="../main.cpp" line="323"/>
<source>Unknown type of shortcut : %1</source>
<translation>Bilinmeyen kısayol türü: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="370"/>
+ <location filename="../main.cpp" line="386"/>
<source>Could not find &quot;%1&quot;. Please ensure it is installed first.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>Application Error</source>
<translation>Uygulama Hatası</translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>The following application experienced an error and needed to close:</source>
<translation>İzleyen uygulama bir hatayla karşılaştı ve kapatılması gerekti:</translation>
</message>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_uk.ts b/src-qt5/core/lumina-open/i18n/lumina-open_uk.ts
index 8d8a2e09..a984132b 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_uk.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_uk.ts
@@ -147,59 +147,59 @@
<translation>Помилка файлу</translation>
</message>
<message>
- <location filename="../main.cpp" line="191"/>
- <location filename="../main.cpp" line="197"/>
+ <location filename="../main.cpp" line="199"/>
+ <location filename="../main.cpp" line="213"/>
<source>Audio Volume %1%</source>
<translation>Гучність звуку %1%</translation>
</message>
<message>
- <location filename="../main.cpp" line="205"/>
- <location filename="../main.cpp" line="214"/>
+ <location filename="../main.cpp" line="221"/>
+ <location filename="../main.cpp" line="230"/>
<source>Screen Brightness %1%</source>
<translation>Яскравість екрану %1%</translation>
</message>
<message>
- <location filename="../main.cpp" line="246"/>
+ <location filename="../main.cpp" line="262"/>
<source>Invalid file or URL: %1</source>
<translation>Невірний файл або URL-адреса: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="267"/>
+ <location filename="../main.cpp" line="283"/>
<source>Application entry is invalid: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="278"/>
+ <location filename="../main.cpp" line="294"/>
<source>Application shortcut is missing the launching information (malformed shortcut): %1</source>
<translation>В ярлику програми відсутня інформація для запуску (невірний формат ярлика): %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="291"/>
+ <location filename="../main.cpp" line="307"/>
<source>URL shortcut is missing the URL: %1</source>
<translation>В ярлику URL-адреса відсутня: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="302"/>
+ <location filename="../main.cpp" line="318"/>
<source>Directory shortcut is missing the path to the directory: %1</source>
<translation>В ярлику відсутній шлях до папки: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="307"/>
+ <location filename="../main.cpp" line="323"/>
<source>Unknown type of shortcut : %1</source>
<translation>Невідомий тип ярлику : %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="370"/>
+ <location filename="../main.cpp" line="386"/>
<source>Could not find &quot;%1&quot;. Please ensure it is installed first.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>Application Error</source>
<translation>Помилка програми</translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>The following application experienced an error and needed to close:</source>
<translation>Наступна програма викликало помилку и має бути закрита:</translation>
</message>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_uz.ts b/src-qt5/core/lumina-open/i18n/lumina-open_uz.ts
index 607f911f..514c2cc0 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_uz.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_uz.ts
@@ -147,59 +147,59 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="191"/>
- <location filename="../main.cpp" line="197"/>
+ <location filename="../main.cpp" line="199"/>
+ <location filename="../main.cpp" line="213"/>
<source>Audio Volume %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="205"/>
- <location filename="../main.cpp" line="214"/>
+ <location filename="../main.cpp" line="221"/>
+ <location filename="../main.cpp" line="230"/>
<source>Screen Brightness %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="246"/>
+ <location filename="../main.cpp" line="262"/>
<source>Invalid file or URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="267"/>
+ <location filename="../main.cpp" line="283"/>
<source>Application entry is invalid: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="278"/>
+ <location filename="../main.cpp" line="294"/>
<source>Application shortcut is missing the launching information (malformed shortcut): %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="291"/>
+ <location filename="../main.cpp" line="307"/>
<source>URL shortcut is missing the URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="302"/>
+ <location filename="../main.cpp" line="318"/>
<source>Directory shortcut is missing the path to the directory: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="307"/>
+ <location filename="../main.cpp" line="323"/>
<source>Unknown type of shortcut : %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="370"/>
+ <location filename="../main.cpp" line="386"/>
<source>Could not find &quot;%1&quot;. Please ensure it is installed first.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>Application Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>The following application experienced an error and needed to close:</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_vi.ts b/src-qt5/core/lumina-open/i18n/lumina-open_vi.ts
index 607f911f..514c2cc0 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_vi.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_vi.ts
@@ -147,59 +147,59 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="191"/>
- <location filename="../main.cpp" line="197"/>
+ <location filename="../main.cpp" line="199"/>
+ <location filename="../main.cpp" line="213"/>
<source>Audio Volume %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="205"/>
- <location filename="../main.cpp" line="214"/>
+ <location filename="../main.cpp" line="221"/>
+ <location filename="../main.cpp" line="230"/>
<source>Screen Brightness %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="246"/>
+ <location filename="../main.cpp" line="262"/>
<source>Invalid file or URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="267"/>
+ <location filename="../main.cpp" line="283"/>
<source>Application entry is invalid: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="278"/>
+ <location filename="../main.cpp" line="294"/>
<source>Application shortcut is missing the launching information (malformed shortcut): %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="291"/>
+ <location filename="../main.cpp" line="307"/>
<source>URL shortcut is missing the URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="302"/>
+ <location filename="../main.cpp" line="318"/>
<source>Directory shortcut is missing the path to the directory: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="307"/>
+ <location filename="../main.cpp" line="323"/>
<source>Unknown type of shortcut : %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="370"/>
+ <location filename="../main.cpp" line="386"/>
<source>Could not find &quot;%1&quot;. Please ensure it is installed first.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>Application Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>The following application experienced an error and needed to close:</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_zh_CN.ts b/src-qt5/core/lumina-open/i18n/lumina-open_zh_CN.ts
index ffa75bdd..f937d362 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_zh_CN.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_zh_CN.ts
@@ -147,59 +147,59 @@
<translation>文件错误</translation>
</message>
<message>
- <location filename="../main.cpp" line="191"/>
- <location filename="../main.cpp" line="197"/>
+ <location filename="../main.cpp" line="199"/>
+ <location filename="../main.cpp" line="213"/>
<source>Audio Volume %1%</source>
<translation>音频音量 %1%</translation>
</message>
<message>
- <location filename="../main.cpp" line="205"/>
- <location filename="../main.cpp" line="214"/>
+ <location filename="../main.cpp" line="221"/>
+ <location filename="../main.cpp" line="230"/>
<source>Screen Brightness %1%</source>
<translation>屏幕亮度 %1%</translation>
</message>
<message>
- <location filename="../main.cpp" line="246"/>
+ <location filename="../main.cpp" line="262"/>
<source>Invalid file or URL: %1</source>
<translation>无效的文件或网址:%1%</translation>
</message>
<message>
- <location filename="../main.cpp" line="267"/>
+ <location filename="../main.cpp" line="283"/>
<source>Application entry is invalid: %1</source>
<translation>应用程序输入无效: %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="278"/>
+ <location filename="../main.cpp" line="294"/>
<source>Application shortcut is missing the launching information (malformed shortcut): %1</source>
<translation>应用程序快捷方式缺少启动信息(错误的快捷方式):%1</translation>
</message>
<message>
- <location filename="../main.cpp" line="291"/>
+ <location filename="../main.cpp" line="307"/>
<source>URL shortcut is missing the URL: %1</source>
<translation>网址快捷方式缺少网址 : %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="302"/>
+ <location filename="../main.cpp" line="318"/>
<source>Directory shortcut is missing the path to the directory: %1</source>
<translation>目录的快捷方式是丢失目录的路径 : %1</translation>
</message>
<message>
- <location filename="../main.cpp" line="307"/>
+ <location filename="../main.cpp" line="323"/>
<source>Unknown type of shortcut : %1</source>
<translation>未知类型的快捷方式:%1</translation>
</message>
<message>
- <location filename="../main.cpp" line="370"/>
+ <location filename="../main.cpp" line="386"/>
<source>Could not find &quot;%1&quot;. Please ensure it is installed first.</source>
<translation>无法找到 “%1”。请确认它已被安装。</translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>Application Error</source>
<translation>应用程序出错</translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>The following application experienced an error and needed to close:</source>
<translation>下面的应用程序遇到错误,需要关闭:</translation>
</message>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_zh_HK.ts b/src-qt5/core/lumina-open/i18n/lumina-open_zh_HK.ts
index 607f911f..514c2cc0 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_zh_HK.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_zh_HK.ts
@@ -147,59 +147,59 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="191"/>
- <location filename="../main.cpp" line="197"/>
+ <location filename="../main.cpp" line="199"/>
+ <location filename="../main.cpp" line="213"/>
<source>Audio Volume %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="205"/>
- <location filename="../main.cpp" line="214"/>
+ <location filename="../main.cpp" line="221"/>
+ <location filename="../main.cpp" line="230"/>
<source>Screen Brightness %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="246"/>
+ <location filename="../main.cpp" line="262"/>
<source>Invalid file or URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="267"/>
+ <location filename="../main.cpp" line="283"/>
<source>Application entry is invalid: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="278"/>
+ <location filename="../main.cpp" line="294"/>
<source>Application shortcut is missing the launching information (malformed shortcut): %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="291"/>
+ <location filename="../main.cpp" line="307"/>
<source>URL shortcut is missing the URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="302"/>
+ <location filename="../main.cpp" line="318"/>
<source>Directory shortcut is missing the path to the directory: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="307"/>
+ <location filename="../main.cpp" line="323"/>
<source>Unknown type of shortcut : %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="370"/>
+ <location filename="../main.cpp" line="386"/>
<source>Could not find &quot;%1&quot;. Please ensure it is installed first.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>Application Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>The following application experienced an error and needed to close:</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_zh_TW.ts b/src-qt5/core/lumina-open/i18n/lumina-open_zh_TW.ts
index 607f911f..514c2cc0 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_zh_TW.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_zh_TW.ts
@@ -147,59 +147,59 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="191"/>
- <location filename="../main.cpp" line="197"/>
+ <location filename="../main.cpp" line="199"/>
+ <location filename="../main.cpp" line="213"/>
<source>Audio Volume %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="205"/>
- <location filename="../main.cpp" line="214"/>
+ <location filename="../main.cpp" line="221"/>
+ <location filename="../main.cpp" line="230"/>
<source>Screen Brightness %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="246"/>
+ <location filename="../main.cpp" line="262"/>
<source>Invalid file or URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="267"/>
+ <location filename="../main.cpp" line="283"/>
<source>Application entry is invalid: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="278"/>
+ <location filename="../main.cpp" line="294"/>
<source>Application shortcut is missing the launching information (malformed shortcut): %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="291"/>
+ <location filename="../main.cpp" line="307"/>
<source>URL shortcut is missing the URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="302"/>
+ <location filename="../main.cpp" line="318"/>
<source>Directory shortcut is missing the path to the directory: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="307"/>
+ <location filename="../main.cpp" line="323"/>
<source>Unknown type of shortcut : %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="370"/>
+ <location filename="../main.cpp" line="386"/>
<source>Could not find &quot;%1&quot;. Please ensure it is installed first.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>Application Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>The following application experienced an error and needed to close:</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src-qt5/core/lumina-open/i18n/lumina-open_zu.ts b/src-qt5/core/lumina-open/i18n/lumina-open_zu.ts
index 607f911f..514c2cc0 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_zu.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_zu.ts
@@ -147,59 +147,59 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="191"/>
- <location filename="../main.cpp" line="197"/>
+ <location filename="../main.cpp" line="199"/>
+ <location filename="../main.cpp" line="213"/>
<source>Audio Volume %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="205"/>
- <location filename="../main.cpp" line="214"/>
+ <location filename="../main.cpp" line="221"/>
+ <location filename="../main.cpp" line="230"/>
<source>Screen Brightness %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="246"/>
+ <location filename="../main.cpp" line="262"/>
<source>Invalid file or URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="267"/>
+ <location filename="../main.cpp" line="283"/>
<source>Application entry is invalid: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="278"/>
+ <location filename="../main.cpp" line="294"/>
<source>Application shortcut is missing the launching information (malformed shortcut): %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="291"/>
+ <location filename="../main.cpp" line="307"/>
<source>URL shortcut is missing the URL: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="302"/>
+ <location filename="../main.cpp" line="318"/>
<source>Directory shortcut is missing the path to the directory: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="307"/>
+ <location filename="../main.cpp" line="323"/>
<source>Unknown type of shortcut : %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="370"/>
+ <location filename="../main.cpp" line="386"/>
<source>Could not find &quot;%1&quot;. Please ensure it is installed first.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>Application Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../main.cpp" line="419"/>
+ <location filename="../main.cpp" line="435"/>
<source>The following application experienced an error and needed to close:</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src-qt5/core/lumina-open/main.cpp b/src-qt5/core/lumina-open/main.cpp
index 2b9e9184..e53181f9 100644
--- a/src-qt5/core/lumina-open/main.cpp
+++ b/src-qt5/core/lumina-open/main.cpp
@@ -185,17 +185,33 @@ return;
LaunchAutoStart();
return;
}else if(QString(argv[i]).simplified() == "-volumeup"){
-int vol = LOS::audioVolume()+5; //increase 5%
-if(vol>100){ vol=100; }
-LOS::setAudioVolume(vol);
-showOSD(argc,argv, QString(QObject::tr("Audio Volume %1%")).arg(QString::number(vol)) );
-return;
+ bool isInt = false;
+ int volupVal = 5;
+ if(argc > i){
+ int parse = QString(argv[i+1]).toInt(&isInt,10);
+ if(isInt && 0 < parse && parse <= 20){
+ volupVal = parse;
+ }
+ }
+ int vol = LOS::audioVolume()+volupVal;
+ if(vol>100){ vol=100; }
+ LOS::setAudioVolume(vol);
+ showOSD(argc,argv, QString(QObject::tr("Audio Volume %1%")).arg(QString::number(vol)) );
+ return;
}else if(QString(argv[i]).simplified() == "-volumedown"){
-int vol = LOS::audioVolume()-5; //decrease 5%
-if(vol<0){ vol=0; }
-LOS::setAudioVolume(vol);
-showOSD(argc,argv, QString(QObject::tr("Audio Volume %1%")).arg(QString::number(vol)) );
-return;
+ bool isInt = false;
+ int voldownVal = 5;
+ if(argc > i){
+ int parse = QString(argv[i+1]).toInt(&isInt,10);
+ if(isInt && 0 < parse && parse <= 20){
+ voldownVal = parse;
+ }
+ }
+ int vol = LOS::audioVolume()-voldownVal; //decrease 5%
+ if(vol<0){ vol=0; }
+ LOS::setAudioVolume(vol);
+ showOSD(argc,argv, QString(QObject::tr("Audio Volume %1%")).arg(QString::number(vol)) );
+ return;
}else if(QString(argv[i]).simplified() == "-brightnessup"){
int bright = LOS::ScreenBrightness();
if(bright > 0){ //brightness control available
diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine-qtplugin/lthemeengine-qtplugin.pro b/src-qt5/core/lumina-theme-engine/src/lthemeengine-qtplugin/lthemeengine-qtplugin.pro
index 3dca4fd1..227a196e 100644
--- a/src-qt5/core/lumina-theme-engine/src/lthemeengine-qtplugin/lthemeengine-qtplugin.pro
+++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine-qtplugin/lthemeengine-qtplugin.pro
@@ -21,6 +21,9 @@ SOURCES += \
OTHER_FILES += lthemeengine.json
+LIBS += -lXcursor
+QT += x11extras
+
INCLUDEPATH += ../
HEADERS += \
diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine-qtplugin/lthemeengineplatformtheme.cpp b/src-qt5/core/lumina-theme-engine/src/lthemeengine-qtplugin/lthemeengineplatformtheme.cpp
index e581b016..789b3990 100644
--- a/src-qt5/core/lumina-theme-engine/src/lthemeengine-qtplugin/lthemeengineplatformtheme.cpp
+++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine-qtplugin/lthemeengineplatformtheme.cpp
@@ -7,14 +7,18 @@
#include <QTimer>
#include <QIcon>
#include <QRegExp>
+
#ifdef QT_WIDGETS_LIB
#include <QStyle>
#include <QStyleFactory>
#include <QApplication>
#include <QWidget>
#endif
+
#include <QFile>
#include <QFileSystemWatcher>
+#include <QDir>
+#include <QTextStream>
#include <stdlib.h>
@@ -28,7 +32,11 @@
#include <private/qdbustrayicon_p.h>
#endif
-
+#include <QX11Info>
+#include <QCursor>
+//Need access to the private QCursor header so we can refresh the mouse cursor cache
+//#include <private/qcursor_p.h> //Does not work - looks like we need to use X11 stuff instead
+#include <X11/Xcursor/Xcursor.h>
Q_LOGGING_CATEGORY(llthemeengine, "lthemeengine")
@@ -37,10 +45,11 @@ Q_LOGGING_CATEGORY(llthemeengine, "lthemeengine")
lthemeenginePlatformTheme::lthemeenginePlatformTheme(){
if(QGuiApplication::desktopSettingsAware()){
readSettings();
- QMetaObject::invokeMethod(this, "applySettings", Qt::QueuedConnection);
#ifdef QT_WIDGETS_LIB
QMetaObject::invokeMethod(this, "createFSWatcher", Qt::QueuedConnection);
#endif
+ QMetaObject::invokeMethod(this, "applySettings", Qt::QueuedConnection);
+
QGuiApplication::setFont(m_generalFont);
}
//qCDebug(llthemeengine) << "using lthemeengine plugin";
@@ -168,16 +177,26 @@ void lthemeenginePlatformTheme::applySettings(){
}
#endif
if(!m_update){ m_update = true; }
+
+ //Mouse Cursor syncronization
+ QString mthemefile = QDir::homePath()+"/.icons/default/index.theme";
+ if(!watcher->files().contains(mthemefile) && QFile::exists(mthemefile)){
+ watcher->addPath(mthemefile); //X11 mouse cursor theme file
+ //qDebug() << "Add Mouse Cursor File to Watcher";
+ syncMouseCursorTheme(mthemefile);
+ }
}
#ifdef QT_WIDGETS_LIB
void lthemeenginePlatformTheme::createFSWatcher(){
- QFileSystemWatcher *watcher = new QFileSystemWatcher(this);
- watcher->addPath(lthemeengine::configPath());
+ watcher = new QFileSystemWatcher(this);
+ watcher->addPath(lthemeengine::configPath()); //theme engine settings directory
+ watcher->addPath(QDir::homePath()+"/.icons/default/index.theme"); //X11 mouse cursor theme file
QTimer *timer = new QTimer(this);
timer->setSingleShot(true);
timer->setInterval(500);
connect(watcher, SIGNAL(directoryChanged(QString)), timer, SLOT(start()));
+ connect(watcher, SIGNAL(fileChanged(QString)), this, SLOT(fileChanged(QString)) );
connect(timer, SIGNAL(timeout()), SLOT(updateSettings()));
}
@@ -188,6 +207,13 @@ void lthemeenginePlatformTheme::updateSettings(){
}
#endif
+void lthemeenginePlatformTheme::fileChanged(QString path){
+ if(path.endsWith("default/index.theme")){
+ //qDebug() << "Mouse Cursor File Changed";
+ syncMouseCursorTheme(path);
+ }
+}
+
void lthemeenginePlatformTheme::readSettings(){
if(m_customPalette){
delete m_customPalette;
@@ -294,3 +320,57 @@ QPalette lthemeenginePlatformTheme::loadColorScheme(QString filePath){
else{ customPalette = *QPlatformTheme::palette(SystemPalette); } //load fallback palette
return customPalette;
}
+
+void lthemeenginePlatformTheme::syncMouseCursorTheme(QString indexfile){
+ //Read the index file and pull out the theme name
+ QFile file(indexfile);
+ QString newtheme;
+ if(file.open(QIODevice::ReadOnly)){
+ QTextStream stream(&file);
+ QString tmp;
+ while(!stream.atEnd()){
+ tmp = stream.readLine().simplified();
+ if(tmp.startsWith("Inherits=")){ newtheme = tmp.section("=",1,-1).simplified(); break; }
+ }
+ file.close();
+ }
+ if(newtheme.isEmpty()){ return; } //nothing to do
+ QString curtheme = QString(XcursorGetTheme(QX11Info::display()) ); //currently-used theme
+ //qDebug() << "Sync Mouse Cursur Theme:" << curtheme << newtheme;
+ if(curtheme!=newtheme){
+ qDebug() << " - Setting new cursor theme:" << newtheme;
+ XcursorSetTheme(QX11Info::display(), newtheme.toLocal8Bit().data()); //save the new theme name
+ }else{
+ return;
+ }
+ //qDebug() << "Qt Stats:";
+ //qDebug() << " TopLevelWindows:" << QGuiApplication::topLevelWindows().length();
+ //qDebug() << " AllWindows:" << QGuiApplication::allWindows().length();
+ //qDebug() << " AllWidgets:" << QApplication::allWidgets().length();
+
+ //XcursorSetThemeCore( QX11Info::display(), XcursorGetThemeCore(QX11Info::display()) ); //reset the theme core
+ //Load the cursors from the new theme
+ int defsize = XcursorGetDefaultSize(QX11Info::display());
+ //qDebug() << "Default cursor size:" << defsize;
+ XcursorImages *imgs = XcursorLibraryLoadImages("left_ptr", NULL, defsize);
+ //qDebug() << "imgs:" << imgs << imgs->nimage;
+ XcursorCursors *curs = XcursorImagesLoadCursors(QX11Info::display(), imgs);
+ if(curs==0){ return; } //not found
+ //qDebug() << "Got Cursors:" << curs->ncursor;
+ //Now re-set the cursors for the current top-level X windows
+ QWindowList wins = QGuiApplication::allWindows(); //QGuiApplication::topLevelWindows();
+ //qDebug() << "Got Windows:" << wins.length();
+ for(int i=0; i<curs->ncursor; i++){
+ for(int w=0; w<wins.length(); w++){
+ XDefineCursor(curs->dpy, wins[w]->winId(), curs->cursors[i]);
+ }
+ }
+ XcursorCursorsDestroy(curs); //finished with this temporary structure
+
+ /*QWidgetList wlist = QApplication::allWidgets();
+ qDebug() << "Widget List:" << wlist.length();
+ for(int i=0; i<wlist.length(); i++){
+ QCursor cur(wlist[i]->cursor().shape());
+ wlist[i]->cursor().swap( cur );
+ }*/
+}
diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine-qtplugin/lthemeengineplatformtheme.h b/src-qt5/core/lumina-theme-engine/src/lthemeengine-qtplugin/lthemeengineplatformtheme.h
index f521d457..359236b7 100644
--- a/src-qt5/core/lumina-theme-engine/src/lthemeengine-qtplugin/lthemeengineplatformtheme.h
+++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine-qtplugin/lthemeengineplatformtheme.h
@@ -6,6 +6,7 @@
#include <QFont>
#include <QPalette>
#include <QLoggingCategory>
+#include <QFileSystemWatcher>
#if (QT_VERSION < QT_VERSION_CHECK(5, 5, 0))
#ifndef QT_NO_SYSTEMTRAYICON
@@ -58,6 +59,7 @@ private slots:
void createFSWatcher();
void updateSettings();
#endif
+ void fileChanged(QString);
private:
void readSettings();
@@ -77,6 +79,7 @@ private:
bool m_usePalette = true;
int m_toolButtonStyle = Qt::ToolButtonFollowStyle;
int m_wheelScrollLines = 3;
+ QFileSystemWatcher *watcher;
#if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)) && !defined(QT_NO_DBUS)
mutable bool m_dbusGlobalMenuAvailable = false;
mutable bool m_checkDBusGlobalMenu = true;
@@ -86,6 +89,7 @@ private:
mutable bool m_checkDBusTray = true;
#endif
+ void syncMouseCursorTheme(QString indexfile);
};
Q_DECLARE_LOGGING_CATEGORY(llthemeengine)
bgstack15