aboutsummaryrefslogtreecommitdiff
path: root/src-qt5/core
diff options
context:
space:
mode:
authorKen Moore <ken@ixsystems.com>2017-01-09 14:41:30 -0500
committerKen Moore <ken@ixsystems.com>2017-01-09 14:41:30 -0500
commitd1750c349cf59bce56569e5be74886edc97ba967 (patch)
tree48a28f398286f721c8272c85017aa8bbf3b83228 /src-qt5/core
parentFlip the location of the +/- buttons on the panel config widget to match the ... (diff)
parentMerge remote-tracking branch 'origin/master' (diff)
downloadlumina-d1750c349cf59bce56569e5be74886edc97ba967.tar.gz
lumina-d1750c349cf59bce56569e5be74886edc97ba967.tar.bz2
lumina-d1750c349cf59bce56569e5be74886edc97ba967.zip
Merge branch 'master' of github.com:trueos/lumina
Diffstat (limited to 'src-qt5/core')
-rw-r--r--src-qt5/core/lumina-desktop-unified/LSession.cpp16
-rw-r--r--src-qt5/core/lumina-desktop-unified/global-objects.h28
-rw-r--r--src-qt5/core/lumina-desktop-unified/lumina-desktop.pro106
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-events/LXcbEventFilter.cpp (renamed from src-qt5/core/lumina-desktop-unified/src-WM/LXcbEventFilter.cpp)181
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-events/LXcbEventFilter.h (renamed from src-qt5/core/lumina-desktop-unified/src-WM/LXcbEventFilter.h)73
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-events/events.pri6
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-screensaver/LLockScreen.cpp (renamed from src-qt5/core/lumina-desktop-unified/src-WM/LLockScreen.cpp)0
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-screensaver/LLockScreen.h (renamed from src-qt5/core/lumina-desktop-unified/src-WM/LLockScreen.h)0
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-screensaver/LLockScreen.ui (renamed from src-qt5/core/lumina-desktop-unified/src-WM/LLockScreen.ui)0
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-screensaver/LScreenSaver.cpp (renamed from src-qt5/core/lumina-desktop-unified/src-WM/LScreenSaver.cpp)0
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-screensaver/LScreenSaver.h (renamed from src-qt5/core/lumina-desktop-unified/src-WM/LScreenSaver.h)0
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-screensaver/SSBaseWidget.cpp (renamed from src-qt5/core/lumina-desktop-unified/src-WM/SSBaseWidget.cpp)0
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-screensaver/SSBaseWidget.h (renamed from src-qt5/core/lumina-desktop-unified/src-WM/SSBaseWidget.h)0
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-screensaver/animations/BaseAnimGroup.cpp (renamed from src-qt5/core/lumina-desktop-unified/src-WM/animations/BaseAnimGroup.cpp)0
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-screensaver/animations/BaseAnimGroup.h (renamed from src-qt5/core/lumina-desktop-unified/src-WM/animations/BaseAnimGroup.h)0
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-screensaver/animations/SampleAnimation.h (renamed from src-qt5/core/lumina-desktop-unified/src-WM/animations/SampleAnimation.h)0
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-screensaver/animations/animations.pri (renamed from src-qt5/core/lumina-desktop-unified/src-WM/animations/animations.pri)2
-rw-r--r--src-qt5/core/lumina-desktop-unified/src-screensaver/screensaver.pri15
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_ca.ts76
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_cs.ts92
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_ja.ts66
-rw-r--r--src-qt5/core/lumina-desktop/i18n/lumina-desktop_pl.ts44
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_cs.ts6
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_ja.ts8
-rw-r--r--src-qt5/core/lumina-open/i18n/lumina-open_pl.ts8
-rw-r--r--src-qt5/core/lumina-session/session.cpp119
26 files changed, 482 insertions, 364 deletions
diff --git a/src-qt5/core/lumina-desktop-unified/LSession.cpp b/src-qt5/core/lumina-desktop-unified/LSession.cpp
index 482b33ea..a8839cee 100644
--- a/src-qt5/core/lumina-desktop-unified/LSession.cpp
+++ b/src-qt5/core/lumina-desktop-unified/LSession.cpp
@@ -17,6 +17,11 @@ LSession::LSession(int &argc, char ** argv) : LSingleApplication(argc, argv, "lu
//Initialize the global objects to null pointers
mediaObj = 0; //private object used for playing login/logout chimes
Lumina::SYSTEM = 0;
+ Lumina::EFILTER = 0;
+ Lumina::SS = 0;
+ Lumina::WM = 0;
+ Lumina::EVThread = 0;
+
if(this->isPrimaryProcess()){
//Setup the global registrations
this->setApplicationName("Lumina Desktop Environment");
@@ -30,11 +35,16 @@ LSession::LSession(int &argc, char ** argv) : LSingleApplication(argc, argv, "lu
//this->setAttribute(Qt::AA_UseDesktopOpenGL);
//this->setAttribute(Qt::AA_UseHighDpiPixmaps); //allow pixmaps to be scaled up as well as down
- //Now initialize the global objects which need instant usage/access
+ //Now initialize the global objects (but do not start them yet)
Lumina::SYSTEM = new LXCB(); //need access to XCB data/functions right away
+ Lumina::EFILTER = new EventFilter(); //Need the XCB Event filter
+ Lumina::SS = new LScreenSaver();
+ Lumina::WM = new LWindowManager();
+ //Now put the Event Filter into it's own thread to keep things snappy
+ Lumina::EVThread = new QThread();
+ Lumina::EFILTER->moveToThread(Lumina::EVThread);
+
- //Setup the event filter for Qt5
- //this->installNativeEventFilter( new XCBEventFilter(this) );
} //end check for primary process
}
diff --git a/src-qt5/core/lumina-desktop-unified/global-objects.h b/src-qt5/core/lumina-desktop-unified/global-objects.h
index d712c32b..043bc46c 100644
--- a/src-qt5/core/lumina-desktop-unified/global-objects.h
+++ b/src-qt5/core/lumina-desktop-unified/global-objects.h
@@ -1,15 +1,29 @@
//===========================================
// Lumina-desktop source code
-// Copyright (c) 2015-2016, Ken Moore
+// Copyright (c) 2015-2017, Ken Moore
// Available under the 3-clause BSD license
// See the LICENSE file for full details
//===========================================
-// Global defines and enumerations for external includes
+// Global defines and enumerations for internal includes
//===========================================
+
+//====WARNING=====
+// ONLY #include this file within *.cpp files
+// Use "global-includes.h" for the generic includes in *.h files
+//=================
+
#ifndef _LUMINA_INTERNAL_GLOBAL_OBJECTS_H
#define _LUMINA_INTERNAL_GLOBAL_OBJECTS_H
-#include "Global-includes.h"
+#include "global-includes.h"
+
+//Load the appropriate "EventFilter" class for the graphics subsystem
+//#ifndef USE_WAYLAND
+#include <LXcbEventFilter.h>
+//#endif
+
+#include "<LScreenSaver.h>"
+#include "src-WM/LWindowManager.h"
//Any special defines for settings/testing
#define ANIMTIME 80 //animation time in milliseconds
@@ -20,7 +34,13 @@ namespace Lumina{
enum WindowAction{MoveResize, Show, Hide, TryClose, Closed, WA_NONE};
//Data structures and objects
- extern LXCB *SYSTEM;
+ extern EventFilter *EFILTER; //Native Event Watcher
+ //ScreenSaver
+ extern LScreenSaver *SS;
+ //Window Manager
+ //LWindowManager *WM;
+
+ QThread *EVThread; //X Event thread
};
diff --git a/src-qt5/core/lumina-desktop-unified/lumina-desktop.pro b/src-qt5/core/lumina-desktop-unified/lumina-desktop.pro
index 4b725288..8c72541c 100644
--- a/src-qt5/core/lumina-desktop-unified/lumina-desktop.pro
+++ b/src-qt5/core/lumina-desktop-unified/lumina-desktop.pro
@@ -5,7 +5,7 @@ greaterThan(QT_MAJOR_VERSION, 4): QT += widgets x11extras multimedia concurrent
-TARGET = lumina-desktop
+TARGET = lumina-desktop-unified
target.path = $${L_BINDIR}
#include all the special classes from the Lumina tree
@@ -16,106 +16,30 @@ include(../libLumina/LuminaX11.pri)
include(../libLumina/LuminaSingleApplication.pri)
include(../libLumina/LuminaThemes.pri)
-#LIBS += -lLuminaUtils -lxcb -lxcb-damage
-#DEPENDPATH += ../libLumina
-
TEMPLATE = app
SOURCES += main.cpp \
- WMProcess.cpp \
- LXcbEventFilter.cpp \
LSession.cpp \
- LDesktop.cpp \
- LDesktopBackground.cpp \
- LDesktopPluginSpace.cpp \
- LPanel.cpp \
- LWinInfo.cpp \
- AppMenu.cpp \
- SettingsMenu.cpp \
- SystemWindow.cpp \
- BootSplash.cpp \
- desktop-plugins/LDPlugin.cpp
-
-
-HEADERS += Globals.h \
- WMProcess.h \
- LXcbEventFilter.h \
+ BootSplash.cpp
+
+HEADERS += global-includes.h \
+ global-objects.h \
LSession.h \
- LDesktop.h \
- LDesktopBackground.h \
- LDesktopPluginSpace.h \
- LPanel.h \
- LWinInfo.h \
- AppMenu.h \
- SettingsMenu.h \
- SystemWindow.h \
- BootSplash.h \
- panel-plugins/LPPlugin.h \
- panel-plugins/NewPP.h \
- panel-plugins/LTBWidget.h \
- desktop-plugins/LDPlugin.h \
- desktop-plugins/NewDP.h \
- JsonMenu.h
-
-FORMS += SystemWindow.ui \
- BootSplash.ui
+ BootSplash.h
+
+FORMS += BootSplash.ui
+
+include(src-screensaver/screensaver.pri)
#Now include all the files for the various plugins
-include(panel-plugins/panel-plugins.pri)
-include(desktop-plugins/desktop-plugins.pri)
+#include(panel-plugins/panel-plugins.pri)
+#include(desktop-plugins/desktop-plugins.pri)
-RESOURCES+= Lumina-DE.qrc
desktop.path = $${L_SESSDIR}
-desktop.files = Lumina-DE.desktop
-
-icons.files = Lumina-DE.png \
- Insight-FileManager.png
-icons.path = $${L_SHAREDIR}/pixmaps
-
-fluxconf.files = fluxboxconf/fluxbox-init-rc \
- fluxboxconf/fluxbox-keys
-fluxconf.path = $${L_SHAREDIR}/lumina-desktop/
-
-wallpapers.files = wallpapers/Lumina_Wispy_gold.jpg \
- wallpapers/Lumina_Wispy_green.jpg \
- wallpapers/Lumina_Wispy_purple.jpg \
- wallpapers/Lumina_Wispy_red.jpg \
- wallpapers/Lumina_Wispy_blue-grey.jpg \
- wallpapers/Lumina_Wispy_blue-grey-zoom.jpg \
- wallpapers/Lumina_Wispy_grey-blue.jpg \
- wallpapers/Lumina_Wispy_grey-blue-zoom.jpg
-wallpapers.path = $${L_SHAREDIR}/wallpapers/Lumina-DE
-
-
-defaults.files = defaults/luminaDesktop.conf \
- defaults/compton.conf \
- audiofiles/Logout.ogg \
- audiofiles/Login.ogg \
- audiofiles/low-battery.ogg
-defaults.path = $${L_SHAREDIR}/lumina-desktop/
-
-conf.path = $${L_ETCDIR}
-
-#Now do any OS-specific defaults (if available)
-#First see if there is a known OS override first
-!isEmpty(DEFAULT_SETTINGS){
- message("Installing defaults settings for OS: $${DEFAULT_SETTINGS}")
- OS=$${DEFAULT_SETTINGS}
-}
-exists("defaults/luminaDesktop-$${OS}.conf"){
- message(" -- Found OS-specific system config file: $${OS}");
- conf.extra = cp defaults/luminaDesktop-$${OS}.conf $(INSTALL_ROOT)$${L_ETCDIR}/luminaDesktop.conf.dist
-}else{
- conf.extra = cp defaults/luminaDesktop.conf $(INSTALL_ROOT)$${L_ETCDIR}/luminaDesktop.conf.dist
-}
-exists("defaults/desktop-background-$${OS}.jpg"){
- message(" -- Found OS-specific background image: $${OS}");
- defaults.extra = cp defaults/desktop-background-$${OS}.jpg $(INSTALL_ROOT)$${L_SHAREDIR}/lumina-desktop/desktop-background.jpg
-}else{
- defaults.extra = cp defaults/desktop-background.jpg $(INSTALL_ROOT)$${L_SHAREDIR}/lumina-desktop/desktop-background.jpg
-}
+desktop.files = lumina-desktop.desktop
+
TRANSLATIONS = i18n/lumina-desktop_af.ts \
i18n/lumina-desktop_ar.ts \
@@ -183,7 +107,7 @@ TRANSLATIONS = i18n/lumina-desktop_af.ts \
dotrans.path=$${L_SHAREDIR}/lumina-desktop/i18n/
dotrans.extra=cd i18n && $${LRELEASE} -nounfinished *.ts && cp *.qm $(INSTALL_ROOT)$${L_SHAREDIR}/lumina-desktop/i18n/
-INSTALLS += target desktop icons wallpapers defaults conf fluxconf
+INSTALLS += target desktop
WITH_I18N{
INSTALLS += dotrans
diff --git a/src-qt5/core/lumina-desktop-unified/src-WM/LXcbEventFilter.cpp b/src-qt5/core/lumina-desktop-unified/src-events/LXcbEventFilter.cpp
index abbe5a5a..e2b1cb2c 100644
--- a/src-qt5/core/lumina-desktop-unified/src-WM/LXcbEventFilter.cpp
+++ b/src-qt5/core/lumina-desktop-unified/src-events/LXcbEventFilter.cpp
@@ -1,6 +1,6 @@
//===========================================
-// Lumina-DE source code
-// Copyright (c) 2015, Ken Moore
+// Lumina-desktop source code
+// Copyright (c) 2015-2017, Ken Moore
// Available under the 3-clause BSD license
// See the LICENSE file for full details
//===========================================
@@ -8,17 +8,19 @@
//==================================================
// NOTE: All the XCB interactions and atoms are accessed via:
-// LWM::SYSTEM->EWMH.(atom name)
-// LWM::SYSTEM->(do something)
-// (LWM::SYSTEM is the global XCB structure)
+// obj->XCB->EWMH.(atom name)
+// obj->XCB->(do something)
//==================================================
+#include "global-objects.h"
-#include <LuminaX11.h>
-#include <QDebug>
+//SYSTEM TRAY STANDARD DEFINITIONS
+#define SYSTEM_TRAY_REQUEST_DOCK 0
+#define SYSTEM_TRAY_BEGIN_MESSAGE 1
+#define SYSTEM_TRAY_CANCEL_MESSAGE 2
-//#include <xcb/screensaver.h>
#define DEBUG 1
+
// Also keep the root window/screen around for use in the filters
namespace L_XCB{
xcb_screen_t *root_screen;
@@ -27,10 +29,10 @@ namespace L_XCB{
//Constructor for the Event Filter wrapper
EventFilter::EventFilter() : QObject(){
+ XCB = new LXCB();
EF = new XCBEventFilter(this);
L_XCB::root_screen = xcb_aux_get_screen(QX11Info::connection(), QX11Info::appScreen());
L_XCB::root = L_XCB::root_screen->root;
- SSLocked = false;
WMFlag = 0;
}
@@ -38,23 +40,69 @@ void EventFilter::start(){
if(DEBUG){ qDebug() << " - Install event filter..."; }
QCoreApplication::instance()->installNativeEventFilter(EF);
if(DEBUG){ qDebug() << " - Run request check..."; }
- if(!LWM::SYSTEM->setupEventsForRoot()){
+ if(!XCB->setupEventsForRoot()){
qCritical() << "[ERROR] Unable to setup WM event retrieval. Is another WM running?";
exit(1);
}
if(DEBUG){ qDebug() << " - Create WM ID Window"; }
- WMFlag = LWM::SYSTEM->WM_CreateWindow();
- LWM::SYSTEM->setupEventsForRoot(WMFlag);
- LWM::SYSTEM->WM_Set_Supporting_WM(WMFlag);
+ WMFlag = XCB->WM_CreateWindow();
+ XCB->setupEventsForRoot(WMFlag);
+ XCB->WM_Set_Supporting_WM(WMFlag);
+
+ EF->startSystemTray();
+
QCoreApplication::instance()->flush();
}
-
+
+void EventFilter::stop(){
+ EF->stopSystemTray();
+}
+
+QList<WId> EventFilter::currentTrayApps(){
+ return EF->trayApps();
+}
+
+//=============================
+// XCBEventFilter Class
+//=============================
+
//Constructor for the XCB event filter
XCBEventFilter::XCBEventFilter(EventFilter *parent) : QAbstractNativeEventFilter(){
obj = parent;
+ SystemTrayID = 0;
+ TrayDmgID = 0;
InitAtoms();
}
+void XCBEventFilter::InitAtoms(){
+ //Initialize any special atoms that we need to save/use regularly
+ //NOTE: All the EWMH atoms are already saved globally in obj->XCB->EWMH
+ WinNotifyAtoms.clear();
+ WinNotifyAtoms << obj->XCB->EWMH._NET_WM_NAME \
+ << obj->XCB->EWMH._NET_WM_VISIBLE_NAME \
+ << obj->XCB->EWMH._NET_WM_ICON_NAME \
+ << obj->XCB->EWMH._NET_WM_VISIBLE_ICON_NAME \
+ << obj->XCB->EWMH._NET_WM_ICON \
+ << obj->XCB->EWMH._NET_WM_ICON_GEOMETRY;
+
+ SysNotifyAtoms.clear();
+ SysNotifyAtoms << obj->XCB->EWMH._NET_CLIENT_LIST \
+ << obj->XCB->EWMH._NET_CLIENT_LIST_STACKING \
+ << obj->XCB->EWMH._NET_CURRENT_DESKTOP \
+ << obj->XCB->EWMH._NET_WM_STATE \
+ << obj->XCB->EWMH._NET_ACTIVE_WINDOW \
+ << obj->XCB->EWMH._NET_WM_ICON \
+ << obj->XCB->EWMH._NET_WM_ICON_GEOMETRY;
+}
+
+bool XCBEventFilter::startSystemTray(){
+
+}
+
+bool XCBEventFilter::stopSystemTray(){
+
+}
+
//This function format taken directly from the Qt5.3 documentation
bool XCBEventFilter::nativeEventFilter(const QByteArray &eventType, void *message, long *) Q_DECL_OVERRIDE
{
@@ -88,8 +136,8 @@ bool XCBEventFilter::nativeEventFilter(const QByteArray &eventType, void *messag
stopevent = BlockInputEvent( ((xcb_button_press_event_t *) ev)->root ); //use the main "root" window - not the child widget
if(!stopevent){
//Activate the window right now if needed
- if(LWM::SYSTEM->WM_Get_Active_Window()!=((xcb_button_press_event_t *) ev)->root){
- LWM::SYSTEM->WM_Set_Active_Window( ((xcb_button_press_event_t *) ev)->root);
+ if(obj->XCB->WM_Get_Active_Window()!=((xcb_button_press_event_t *) ev)->root){
+ obj->XCB->WM_Set_Active_Window( ((xcb_button_press_event_t *) ev)->root);
}
}
break;
@@ -141,7 +189,9 @@ bool XCBEventFilter::nativeEventFilter(const QByteArray &eventType, void *messag
//==============================
case XCB_DESTROY_NOTIFY:
qDebug() << "Window Closed Event";
- obj->emit WindowClosed( ((xcb_destroy_notify_event_t *) ev)->window );
+ if( !rmTrayApp( ((xcb_destroy_notify_event_t *) ev)->window ) ){
+ obj->emit WindowClosed( ((xcb_destroy_notify_event_t *) ev)->window );
+ }
break;
//==============================
case XCB_FOCUS_IN:
@@ -160,6 +210,14 @@ bool XCBEventFilter::nativeEventFilter(const QByteArray &eventType, void *messag
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]){
+ addTrayApp( ((xcb_client_message_event_t*)ev)->data.data32[2] );
+ }
+ //Ignore the System Tray messages at the moment
+
+ }
break;
//==============================
case XCB_CONFIGURE_NOTIFY:
@@ -179,7 +237,11 @@ bool XCBEventFilter::nativeEventFilter(const QByteArray &eventType, void *messag
case XCB_GE_GENERIC:
break; //generic event - don't do anything special
default:
- qDebug() << "Default Event:" << (ev->response_type & ~0x80);
+ //if( (ev->response_type & ~0x80)==TrayDmgID){
+ checkDamageID( ((xcb_damage_notify_event_t*)ev)->drawable );
+ //}else{
+ qDebug() << "Default Event:" << (ev->response_type & ~0x80);
+ //}
//==============================
}
}
@@ -187,18 +249,97 @@ bool XCBEventFilter::nativeEventFilter(const QByteArray &eventType, void *messag
//never stop event handling (this will not impact the X events themselves - just the internal screensaver/WM/widgets)
}
+//System Tray Functions
+QList<WId> XCBEventFilter::trayApps(){
+ //return the list of all current tray apps
+ //Check the validity of all the current tray apps (make sure nothing closed erratically)
+ for(int i=0; i<RunningTrayApps.length(); i++){
+ if(obj->XCB->WindowClass(RunningTrayApps[i]).isEmpty()){
+ obj->emit Tray_AppClosed(RunningTrayApps.takeAt(i) );
+ i--;
+ }
+ }
+ return RunningTrayApps;
+}
+
+bool XCBEventFilter::startSystemTray(){
+ if(SystemTrayID != 0){ return; } //already started
+ RunningTrayApps.clear(); //nothing running yet
+ SystemTrayID = obj->XCB->startSystemTray(0);
+ if(SystemTrayID!=0){
+ obj->XCB->SelectInput(SystemTrayID); //make sure TrayID events get forwarded here
+ TrayDmgID = obj->XCB->GenerateDamageID(SystemTrayID);
+ qDebug() << "System Tray Started Successfully";
+ if(DEBUG){ qDebug() << " - System Tray Flags:" << TrayDmgID; }
+ }
+ return (SystemTrayID!=0);
+}
+
+bool XCBEventFilter::stopSystemTray(){
+ if(SystemTrayID==0){ return; } //already stopped
+ qDebug() << "Stopping system tray...";
+ //Close all the running Tray Apps
+ QList<WId> tmpApps = RunningTrayApps;
+ //RunningTrayApps.clear(); //clear this ahead of time so tray's do not attempt to re-access the apps
+ //Close all the running tray apps
+ for(int i=0; i<tmpApps.length(); i++){
+ qDebug() << " - Stopping tray app:" << obj->XCB->WindowClass(tmpApps[i]);
+ //Tray apps are special and closing the window does not close the app
+ obj->XCB->KillClient(tmpApps[i]);
+ }
+ //Now close down the tray backend
+ obj->XCB->closeSystemTray(SystemTrayID);
+ SystemTrayID = 0;
+ TrayDmgID = 0;
+}
+
+//=========
+// PRIVATE
+//=========
bool XCBEventFilter::BlockInputEvent(WId win){
//Checks the current state of the WM and sets the stop flag as needed
// - Always let the screensaver know about the event first (need to reset timers and such)
obj->emit NewInputEvent();
// - Check the state of the screensaver
- if(obj->SSLocked){ qDebug() << "SS Locked"; return true; }
+ if(SS->isLocked()){ qDebug() << "SS Locked"; return true; }
// - Check the state of any fullscreen apps
- else if( win!=0 && !obj->FS_WINS.isEmpty()){
+ /*else if( win!=0 && !obj->FS_WINS.isEmpty()){
if(!obj->FS_WINS.contains(win) ){
//If this event is for an app underneath a fullscreen window - stop it
if(obj->FS_WINS.length() == QApplication::desktop()->screenCount()){ qDebug() << "Screens Covered"; return true; } //all screens covered right now
}
+ }*/
+ return false;
+}
+
+//System Tray functions
+void XCBEventFilter::addTrayApp(WId win){
+ if(SystemTrayID==0){ return; }
+ if(RunningTrayApps.contains(win)){ return; } //already managed
+ qDebug() << "Session Tray: Window Added" << obj->XCB->windowClass(win);
+ RunningTrayApps << win;
+ if(DEBUG){ qDebug() << "Tray List Changed"; }
+ obj->emit Tray_AppAdded(win);
+}
+
+bool XCBEventFilter::rmTrayApp(WId win){
+ //returns "true" if the tray app was found and removed
+ if(SystemTrayID==0){ return false; }
+ for(int i=0; i<RunningTrayApps.length(); i++){
+ if(win==RunningTrayApps[i]){
+ qDebug() << "Session Tray: Window Removed";
+ RunningTrayApps.removeAt(i);
+ obj->emit Tray_AppClosed(win);
+ return true;
+ }
}
return false;
}
+
+void XCBEventFilter::checkDamageID(WId id){
+ if(runningTrayApps.contains(id)){
+ obj->emit Tray_AppUpdated(id);
+ }else{
+ //Could check for window damage ID's - but we should not need this
+ }
+}
diff --git a/src-qt5/core/lumina-desktop-unified/src-WM/LXcbEventFilter.h b/src-qt5/core/lumina-desktop-unified/src-events/LXcbEventFilter.h
index b68eedf5..6726ef8b 100644
--- a/src-qt5/core/lumina-desktop-unified/src-WM/LXcbEventFilter.h
+++ b/src-qt5/core/lumina-desktop-unified/src-events/LXcbEventFilter.h
@@ -1,10 +1,10 @@
//===========================================
// Lumina-DE source code
-// Copyright (c) 2012, Ken Moore
+// 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 ->Xlib conversion necessary for Qt5 usage
+// This class provides the XCB event handling/registrations that are needed
//===========================================
#ifndef _LUMINA_DESKTOP_XCB_FILTER_H
#define _LUMINA_DESKTOP_XCB_FILTER_H
@@ -41,12 +41,7 @@ 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
-
-
+
class EventFilter : public QObject{
Q_OBJECT
private:
@@ -58,21 +53,26 @@ public:
~EventFilter(){}
void start();
-
- //Public variables for the event filter to use/check
- QList<WId> FS_WINS; //Full-screen windows (1 per monitor) - used for hiding non-app events as needed
- bool SSLocked;
-
+ void stop();
+
+ //Public System Tray Functions
+ QList<WId> currentTrayApps();
+
+ //Variables/Functions needed by the XCBEventFilter class only (not really needed by anything else)
+ LXCB *XCB; //used to interact with the X11 graphics subsystem
+
public slots:
- void StartedSS(){ SSLocked = true; }
- void StoppedSS(){ SSLocked = false; }
- void FullScreenChanged(QList<WId> fslist){ FS_WINS = fslist; }
signals:
void NewInputEvent();
void NewManagedWindow(WId);
void WindowClosed(WId);
void ModifyWindow(WId win, LWM::WindowAction);
+
+ //System Tray Signals
+ void Tray_AppAdded(WId); //new tray app registered
+ void Tray_AppClosed(WId); //tray app de-registered
+ void Tray_AppUpdated(WId); //tray app appearance changed (damage event)
};
class XCBEventFilter : public QAbstractNativeEventFilter{
@@ -82,34 +82,27 @@ public:
virtual bool nativeEventFilter(const QByteArray &eventType, void *message, long *);
+ //System Tray Functions
+ QList<WId> trayApps(); //return the list of all current tray apps
+ bool startSystemTray();
+ bool stopSystemTray();
+
private:
EventFilter *obj;
QList<xcb_atom_t> WinNotifyAtoms, SysNotifyAtoms;
+ void InitAtoms();
+
+ bool BlockInputEvent(WId win = 0); //Checks the current state of the system to see if the event should be stopped
+
+ //System Tray Variables
+ WId SystemTrayID;
+ int TrayDmgID;
+ QList<WId> RunningTrayApps;
+ //System Tray functions
+ void addTrayApp(WId);
+ bool rmTrayApp(WId); //returns "true" if the tray app was found and removed
+ void checkDamageID(WId);
- void InitAtoms(){
- //Initialize any special atoms that we need to save/use regularly
- //NOTE: All the EWMH atoms are already saved globally in LWM::SYSTEM->EWMH
- WinNotifyAtoms.clear();
- WinNotifyAtoms << LWM::SYSTEM->EWMH._NET_WM_NAME \
- << LWM::SYSTEM->EWMH._NET_WM_VISIBLE_NAME \
- << LWM::SYSTEM->EWMH._NET_WM_ICON_NAME \
- << LWM::SYSTEM->EWMH._NET_WM_VISIBLE_ICON_NAME \
- << LWM::SYSTEM->EWMH._NET_WM_ICON \
- << LWM::SYSTEM->EWMH._NET_WM_ICON_GEOMETRY;
-
- SysNotifyAtoms.clear();
- SysNotifyAtoms << LWM::SYSTEM->EWMH._NET_CLIENT_LIST \
- << LWM::SYSTEM->EWMH._NET_CLIENT_LIST_STACKING \
- << LWM::SYSTEM->EWMH._NET_CURRENT_DESKTOP \
- << LWM::SYSTEM->EWMH._NET_WM_STATE \
- << LWM::SYSTEM->EWMH._NET_ACTIVE_WINDOW \
- << LWM::SYSTEM->EWMH._NET_WM_ICON \
- << LWM::SYSTEM->EWMH._NET_WM_ICON_GEOMETRY;
-
- }
-
- bool BlockInputEvent(WId win = 0); //Checks the current state of the WM and sets the stop flag as needed
-
//Longer Event handling functions
//bool ParseKeyPressEvent();
//bool ParseKeyReleaseEvent();
diff --git a/src-qt5/core/lumina-desktop-unified/src-events/events.pri b/src-qt5/core/lumina-desktop-unified/src-events/events.pri
new file mode 100644
index 00000000..38225d7f
--- /dev/null
+++ b/src-qt5/core/lumina-desktop-unified/src-events/events.pri
@@ -0,0 +1,6 @@
+SOURCES *= $${PWD}/LXCBEventFilter.cpp
+
+HEADERS *= $${PWD}/LXCBEventFilter.h
+
+#update the includepath so we can just (#include <LXCBEventFilter.h>) as needed without paths
+INCLUDEPATH *= ${PWD}
diff --git a/src-qt5/core/lumina-desktop-unified/src-WM/LLockScreen.cpp b/src-qt5/core/lumina-desktop-unified/src-screensaver/LLockScreen.cpp
index 4cc6d68b..4cc6d68b 100644
--- a/src-qt5/core/lumina-desktop-unified/src-WM/LLockScreen.cpp
+++ b/src-qt5/core/lumina-desktop-unified/src-screensaver/LLockScreen.cpp
diff --git a/src-qt5/core/lumina-desktop-unified/src-WM/LLockScreen.h b/src-qt5/core/lumina-desktop-unified/src-screensaver/LLockScreen.h
index 040499c1..040499c1 100644
--- a/src-qt5/core/lumina-desktop-unified/src-WM/LLockScreen.h
+++ b/src-qt5/core/lumina-desktop-unified/src-screensaver/LLockScreen.h
diff --git a/src-qt5/core/lumina-desktop-unified/src-WM/LLockScreen.ui b/src-qt5/core/lumina-desktop-unified/src-screensaver/LLockScreen.ui
index 7f0b45b8..7f0b45b8 100644
--- a/src-qt5/core/lumina-desktop-unified/src-WM/LLockScreen.ui
+++ b/src-qt5/core/lumina-desktop-unified/src-screensaver/LLockScreen.ui
diff --git a/src-qt5/core/lumina-desktop-unified/src-WM/LScreenSaver.cpp b/src-qt5/core/lumina-desktop-unified/src-screensaver/LScreenSaver.cpp
index 0c92784e..0c92784e 100644
--- a/src-qt5/core/lumina-desktop-unified/src-WM/LScreenSaver.cpp
+++ b/src-qt5/core/lumina-desktop-unified/src-screensaver/LScreenSaver.cpp
diff --git a/src-qt5/core/lumina-desktop-unified/src-WM/LScreenSaver.h b/src-qt5/core/lumina-desktop-unified/src-screensaver/LScreenSaver.h
index 5119d8b1..5119d8b1 100644
--- a/src-qt5/core/lumina-desktop-unified/src-WM/LScreenSaver.h
+++ b/src-qt5/core/lumina-desktop-unified/src-screensaver/LScreenSaver.h
diff --git a/src-qt5/core/lumina-desktop-unified/src-WM/SSBaseWidget.cpp b/src-qt5/core/lumina-desktop-unified/src-screensaver/SSBaseWidget.cpp
index 83b82ff8..83b82ff8 100644
--- a/src-qt5/core/lumina-desktop-unified/src-WM/SSBaseWidget.cpp
+++ b/src-qt5/core/lumina-desktop-unified/src-screensaver/SSBaseWidget.cpp
diff --git a/src-qt5/core/lumina-desktop-unified/src-WM/SSBaseWidget.h b/src-qt5/core/lumina-desktop-unified/src-screensaver/SSBaseWidget.h
index a6574679..a6574679 100644
--- a/src-qt5/core/lumina-desktop-unified/src-WM/SSBaseWidget.h
+++ b/src-qt5/core/lumina-desktop-unified/src-screensaver/SSBaseWidget.h
diff --git a/src-qt5/core/lumina-desktop-unified/src-WM/animations/BaseAnimGroup.cpp b/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/BaseAnimGroup.cpp
index 1e55dc76..1e55dc76 100644
--- a/src-qt5/core/lumina-desktop-unified/src-WM/animations/BaseAnimGroup.cpp
+++ b/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/BaseAnimGroup.cpp
diff --git a/src-qt5/core/lumina-desktop-unified/src-WM/animations/BaseAnimGroup.h b/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/BaseAnimGroup.h
index dd7269d4..dd7269d4 100644
--- a/src-qt5/core/lumina-desktop-unified/src-WM/animations/BaseAnimGroup.h
+++ b/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/BaseAnimGroup.h
diff --git a/src-qt5/core/lumina-desktop-unified/src-WM/animations/SampleAnimation.h b/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/SampleAnimation.h
index e0f11ba5..e0f11ba5 100644
--- a/src-qt5/core/lumina-desktop-unified/src-WM/animations/SampleAnimation.h
+++ b/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/SampleAnimation.h
diff --git a/src-qt5/core/lumina-desktop-unified/src-WM/animations/animations.pri b/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/animations.pri
index 5473d4e1..adb1ed6c 100644
--- a/src-qt5/core/lumina-desktop-unified/src-WM/animations/animations.pri
+++ b/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/animations.pri
@@ -3,4 +3,4 @@ SOURCES += $$PWD/BaseAnimGroup.cpp
HEADERS += $$PWD/BaseAnimGroup.h \
$$PWD/SampleAnimation.h
-FORMS += \ No newline at end of file
+#FORMS +=
diff --git a/src-qt5/core/lumina-desktop-unified/src-screensaver/screensaver.pri b/src-qt5/core/lumina-desktop-unified/src-screensaver/screensaver.pri
new file mode 100644
index 00000000..f95891c1
--- /dev/null
+++ b/src-qt5/core/lumina-desktop-unified/src-screensaver/screensaver.pri
@@ -0,0 +1,15 @@
+SOURCES *= $${PWD}/LLockScreen.cpp \
+ $${PWD}/LScreenSaver.cpp \
+ $${PWD}/SSBaseWidget.cpp
+
+HEADERS *= $${PWD}/LLockScreen.h \
+ $${PWD}/LScreenSaver.h \
+ $${PWD}/SSBaseWidget.h
+
+FORMS *= $${PWD}/LLockScreen.ui
+
+#update the includepath so we can just (#include <LScreenSaver.h>) as needed without paths
+INCLUDEPATH *= ${PWD}
+
+#Now include all the screensaver animations/options
+include(animations/animations.pri)
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 194109e6..ba9c5848 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ca.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ca.ts
@@ -266,122 +266,122 @@
<message>
<location filename="../BootSplash.cpp" line="83"/>
<source>It does not matter how slowly you go as long as you do not stop.</source>
- <translation type="unfinished"></translation>
+ <translation>No importa la lentitud amb què aneu, sempre que no us atureu.</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="85"/>
<source>Do what you can, where you are, with what you have.</source>
- <translation type="unfinished"></translation>
+ <translation>Feu el que pugueu, on sigueu, amb el que tingueu.</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="87"/>
<source>Remember no one can make you feel inferior without your consent.</source>
- <translation type="unfinished"></translation>
+ <translation>Recordeu que ningú us pot fer sentir inferiors sense el vostre consentiment.</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="89"/>
<source>It’s not the years in your life that count. It’s the life in your years.</source>
- <translation type="unfinished"></translation>
+ <translation>No són els anys de la vostra vida que compten, és la vida als vostres anys.</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="91"/>
<source>Either write something worth reading or do something worth writing.</source>
- <translation type="unfinished"></translation>
+ <translation>O bé feu alguna cosa que pagui la pena de llegir o bé feu alguna cosa que pagui la pena escriure.</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="93"/>
<source>The only way to do great work is to love what you do.</source>
- <translation type="unfinished"></translation>
+ <translation>L'única manera de fer una bona feina és que us agradi el que feu.</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="95"/>
<source>Political correctness is tyranny with manners.</source>
- <translation type="unfinished"></translation>
+ <translation>La correcció política és tirania amb educació.</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="97"/>
<source>Only two things are infinite, the universe and human stupidity, and I'm not sure about the former.</source>
- <translation type="unfinished"></translation>
+ <translation>Només hi ha dues coses infinites: l'univers i l'estupidesa humana, i no estic segur de la primera.</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="99"/>
<source>I find that the harder I work, the more luck I seem to have.</source>
- <translation type="unfinished"></translation>
+ <translation>Trobo que com més durament treballo, més sort sembla que tinc.</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="101"/>
<source>Do, or do not. There is no 'try'.</source>
- <translation type="unfinished"></translation>
+ <translation>Fes-ho o no. No hi ha un "intent".</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="103"/>
<source>A mathematician is a device for turning coffee into theorems.</source>
- <translation type="unfinished"></translation>
+ <translation>Un matemàtic és un dispositiu per convertir cafè en teoremes.</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="105"/>
<source>Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws.</source>
- <translation type="unfinished"></translation>
+ <translation>La gent bona no necessita lleis que els diguin d'actuar responsablement, mentre que la mala gent trobarà una manera d'evitar les lleis.</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="107"/>
<source>Black holes are where God divided by zero.</source>
- <translation type="unfinished"></translation>
+ <translation>Els forats negres són el lloc on déu va dividir per zero.</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="109"/>
<source>It's kind of fun to do the impossible.</source>
- <translation type="unfinished"></translation>
+ <translation>És bastant divertit fer l'impossible.</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="111"/>
<source>Knowledge speaks, but wisdom listens.</source>
- <translation type="unfinished"></translation>
+ <translation>El coneixement parla, però la saviesa escolta.</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="113"/>
<source>A witty saying proves nothing.</source>
- <translation type="unfinished"></translation>
+ <translation>Una dita enginyosa no prova res.</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="115"/>
<source>Success usually comes to those who are too busy to be looking for it.</source>
- <translation type="unfinished"></translation>
+ <translation>L'èxit normalment arriba als que estan massa enfeinats per buscar-lo.</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="117"/>
<source>Well-timed silence hath more eloquence than speech.</source>
- <translation type="unfinished"></translation>
+ <translation>Un silenci al moment oportú té més eloqüència que un discurs.</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="119"/>
<source>I have never let my schooling interfere with my education.</source>
- <translation type="unfinished"></translation>
+ <translation>Mai he deixat que els meus estudis interfereixin en la meva educació.</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="121"/>
<source>The best way to predict the future is to invent it.</source>
- <translation type="unfinished"></translation>
+ <translation>La millor manera de predir el futur és inventar-lo.</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="123"/>
<source>Well done is better than well said.</source>
- <translation type="unfinished"></translation>
+ <translation>Ben fet és millor que ben dit.</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="125"/>
<source>Sometimes it is not enough that we do our best; we must do what is required.</source>
- <translation type="unfinished"></translation>
+ <translation>Algunes vegades no n'hi ha prou amb fer-ho el millor que podem, hem de fer el que cal.</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="127"/>
<source>The truth is more important than the facts.</source>
- <translation type="unfinished"></translation>
+ <translation>La veritat és més important que els fets.</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="129"/>
<source>Better to remain silent and be thought a fool than to speak out and remove all doubt.</source>
- <translation type="unfinished"></translation>
+ <translation>És millor romandre en silenci i ser pres per ximple que parlar i eliminar-ne tots els dubtes.</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="140"/>
@@ -738,7 +738,7 @@
<message>
<location filename="../LDesktop.cpp" line="292"/>
<source>Lock Session</source>
- <translation type="unfinished"></translation>
+ <translation>Bloqueja la sessió</translation>
</message>
<message>
<location filename="../LDesktop.cpp" line="293"/>
@@ -982,57 +982,57 @@
<message>
<location filename="../panel-plugins/audioplayer/PPlayerWidget.ui" line="14"/>
<source>Form</source>
- <translation type="unfinished">Formulari</translation>
+ <translation>Formulari</translation>
</message>
<message>
<location filename="../panel-plugins/audioplayer/PPlayerWidget.cpp" line="69"/>
<source>Clear Playlist</source>
- <translation type="unfinished">Neteja la llista de reproducció</translation>
+ <translation>Neteja la llista de reproducció</translation>
</message>
<message>
<location filename="../panel-plugins/audioplayer/PPlayerWidget.cpp" line="70"/>
<source>Shuffle Playlist</source>
- <translation type="unfinished">Ordena aleatòriament la llista de reproducció</translation>
+ <translation>Llista de reproducció aleatòria</translation>
</message>
<message>
<location filename="../panel-plugins/audioplayer/PPlayerWidget.cpp" line="72"/>
<source>Add Files</source>
- <translation type="unfinished">Afegeix fitxers</translation>
+ <translation>Afegeix fitxers</translation>
</message>
<message>
<location filename="../panel-plugins/audioplayer/PPlayerWidget.cpp" line="73"/>
<source>Add Directory</source>
- <translation type="unfinished">Afegeix un directori</translation>
+ <translation>Afegeix un directori</translation>
</message>
<message>
<location filename="../panel-plugins/audioplayer/PPlayerWidget.cpp" line="74"/>
<source>Add URL</source>
- <translation type="unfinished">Afegeix URL</translation>
+ <translation>Afegeix un URL</translation>
</message>
<message>
<location filename="../panel-plugins/audioplayer/PPlayerWidget.cpp" line="102"/>
<source>Multimedia Files</source>
- <translation type="unfinished">Fitxers multimèdia</translation>
+ <translation>Fitxers multimèdia</translation>
</message>
<message>
<location filename="../panel-plugins/audioplayer/PPlayerWidget.cpp" line="103"/>
<source>Select Multimedia Files</source>
- <translation type="unfinished">Seleccioneu fitxers multimèdia</translation>
+ <translation>Seleccioneu fitxers multimèdia</translation>
</message>
<message>
<location filename="../panel-plugins/audioplayer/PPlayerWidget.cpp" line="130"/>
<source>Select Multimedia Directory</source>
- <translation type="unfinished">Selecció del directori multimèdia</translation>
+ <translation>Seleccioneu un directori multimèdia</translation>
</message>
<message>
<location filename="../panel-plugins/audioplayer/PPlayerWidget.cpp" line="159"/>
<source>Enter a valid URL for a multimedia file or stream:</source>
- <translation type="unfinished">Introduïu un URL vàlid per a un fitxer multimèdia o reproducció en línia:</translation>
+ <translation>Escriviu un URL vàlid per a un fitxer multimèdia o reproducció en línia:</translation>
</message>
<message>
<location filename="../panel-plugins/audioplayer/PPlayerWidget.cpp" line="161"/>
<source>Multimedia URL</source>
- <translation type="unfinished">URL multimèdia</translation>
+ <translation>URL multimèdia</translation>
</message>
</context>
<context>
@@ -1264,7 +1264,7 @@
<message>
<location filename="../SettingsMenu.cpp" line="33"/>
<source>Wallpaper</source>
- <translation type="unfinished"></translation>
+ <translation>Fons de pantalla</translation>
</message>
<message>
<location filename="../SettingsMenu.cpp" line="36"/>
@@ -1274,7 +1274,7 @@
<message>
<location filename="../SettingsMenu.cpp" line="39"/>
<source>All Desktop Settings</source>
- <translation type="unfinished"></translation>
+ <translation>Tots els paràmetres de l'escriptori</translation>
</message>
<message>
<location filename="../SettingsMenu.cpp" line="54"/>
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 3436167d..0d2872b2 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_cs.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_cs.ts
@@ -146,207 +146,207 @@
<message>
<location filename="../BootSplash.ui" line="94"/>
<source>Starting the Lumina Desktop...</source>
- <translation type="unfinished"></translation>
+ <translation>Spouští se prostředí Lumina...</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="15"/>
<source>Version %1</source>
- <translation type="unfinished"></translation>
+ <translation>Verze %1</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="39"/>
<source>This desktop is powered by coffee, coffee, and more coffee.</source>
- <translation type="unfinished"></translation>
+ <translation>Toto prostředí pohání cukr, káva a další káva.</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="41"/>
<source>Keep up with desktop news!</source>
- <translation type="unfinished"></translation>
+ <translation>Posílejte nám zprávy o prostředí!</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="43"/>
<source>There is a full handbook of information about the desktop available online.</source>
- <translation type="unfinished"></translation>
+ <translation>Na internetu je úplná příručka se spoustou údajů o prostředí.</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="45"/>
<source>Want to change the interface? Everything is customizable in the desktop configuration!</source>
- <translation type="unfinished"></translation>
+ <translation>Chcete změnit rozhraní? Všechno se dá přizpůsobit v nastavení prostředí!</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="47"/>
<source>Lumina can easily reproduce the interface from most other desktop environments.</source>
- <translation type="unfinished"></translation>
+ <translation>Lumina lehce dokáže napodobit vzhled rozhraní většiny jiných prostředí pracovní plochy.</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="49"/>
<source>This desktop is generously sponsored by iXsystems</source>
- <translation type="unfinished"></translation>
+ <translation>Toto prostředí je laskavě podporováno a penězi zaštiťováno podnikem iXsystems</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="51"/>
<source>I have never been hurt by what I have not said</source>
- <translation type="unfinished"></translation>
+ <translation>Nikdy jsem se netrápil tím, co jsem neřekl</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="53"/>
<source>Gotta have more cowbell!</source>
- <translation type="unfinished"></translation>
+ <translation>Musím si pořídit více zvonečků!</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="55"/>
<source>Everything has its beauty but not everyone sees it.</source>
- <translation type="unfinished"></translation>
+ <translation>Vše je dobré, ale ne každý vidí tu krásu.</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="57"/>
<source>Before God we are all equally wise - and equally foolish.</source>
- <translation type="unfinished"></translation>
+ <translation>Před Bohem jsme všichni rozumní stejně - a stejně nerozumní.</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="59"/>
<source>We cannot do everything at once, but we can do something at once.</source>
- <translation type="unfinished"></translation>
+ <translation>Nemůžeme všechno udělat zaráz, něco však můžeme provést najednou.</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="61"/>
<source>One with the law is a majority.</source>
- <translation type="unfinished"></translation>
+ <translation>Zákony vytváří většina.</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="63"/>
- <source>Don&apos;t expect to build up the weak by pulling down the strong.</source>
- <translation type="unfinished"></translation>
+ <source>Don't expect to build up the weak by pulling down the strong.</source>
+ <translation>Neočekávej, že povzbudíš slabé, tím že dolů stáhneš silné.</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="65"/>
- <source>You can&apos;t know too much, but you can say too much.</source>
- <translation type="unfinished"></translation>
+ <source>You can't know too much, but you can say too much.</source>
+ <translation>Nemůžeš vědět příliš mnoho, ale můžeš toho říct přespříliš.</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="67"/>
<source>Duty is not collective; it is personal.</source>
- <translation type="unfinished"></translation>
+ <translation>Povinnost není společná, je osobní.</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="69"/>
<source>Any society that would give up a little liberty to gain a little security will deserve neither and lose both.</source>
- <translation type="unfinished"></translation>
+ <translation>Jakákoli společnost, která se vzdá kousku svobody, aby získala trošku bezpečnosti, si nezaslouží ani jedno a ztratí obojí.</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="71"/>
<source>Never trust a computer you can’t throw out a window.</source>
- <translation type="unfinished"></translation>
+ <translation>Počítačníku, nikdy nevěř počítači, který nemůžeš vyhodit z okna.</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="73"/>
<source>Study the past if you would define the future.</source>
- <translation type="unfinished"></translation>
+ <translation>Uč se z minulosti, jestli chceš určit, jak bude vypadat budoucnost.</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="75"/>
<source>The way to get started is to quit talking and begin doing.</source>
- <translation type="unfinished"></translation>
+ <translation>Cestou, jak začít, je přestat mluvit a začít dělat.</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="77"/>
<source>Ask and it will be given to you; search, and you will find; knock and the door will be opened for you.</source>
- <translation type="unfinished"></translation>
+ <translation>Požádej a bude ti dáno; hledej a nalezneš; klepej a dveře ti budou otevřeny.</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="79"/>
<source>Start where you are. Use what you have. Do what you can.</source>
- <translation type="unfinished"></translation>
+ <translation>Začni tam, kde jsi. Používej to, co máš. Udělej, co můžeš.</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="81"/>
<source>A person who never made a mistake never tried anything new.</source>
- <translation type="unfinished"></translation>
+ <translation>Osoba, která se nikdy nezmýlila, nikdy nezkusila něco nového.</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="83"/>
<source>It does not matter how slowly you go as long as you do not stop.</source>
- <translation type="unfinished"></translation>
+ <translation>Nezáleží na tom, jak pomalu jdeš, dokud nezastavíš.</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="85"/>
<source>Do what you can, where you are, with what you have.</source>
- <translation type="unfinished"></translation>
+ <translation>Dělej, co můžeš, tam kde jsi, s tím, co máš.</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="87"/>
<source>Remember no one can make you feel inferior without your consent.</source>
- <translation type="unfinished"></translation>
+ <translation>Pamatuj si, že nikomu se nepodaří, aby ses cítil být menším, bez tvého souhlasu.</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="89"/>
<source>It’s not the years in your life that count. It’s the life in your years.</source>
- <translation type="unfinished"></translation>
+ <translation>Nejsou to roky tvého života, co se počítá. Je to život v tvých letech.</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="91"/>
<source>Either write something worth reading or do something worth writing.</source>
- <translation type="unfinished"></translation>
+ <translation>Buď napiš něco, co stojí za přečtení, nebo udělej něco, o čem má smysl napsat.</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="93"/>
<source>The only way to do great work is to love what you do.</source>
- <translation type="unfinished"></translation>
+ <translation>Jediným způsobem, jak dělat práci skvěle, je milovat to, co děláš.</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="95"/>
<source>Political correctness is tyranny with manners.</source>
- <translation type="unfinished"></translation>
+ <translation>Politická správnost je útlak, který si našel své způsoby.</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="97"/>
- <source>Only two things are infinite, the universe and human stupidity, and I&apos;m not sure about the former.</source>
- <translation type="unfinished"></translation>
+ <source>Only two things are infinite, the universe and human stupidity, and I'm not sure about the former.</source>
+ <translation>Jen dvě věci jsou nekonečné, vesmír a lidská hloupost. A nejsem si jist, jak si mám vykládat to první.</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="99"/>
<source>I find that the harder I work, the more luck I seem to have.</source>
- <translation type="unfinished"></translation>
+ <translation>Zjistil jsem, že čím jsem pilnější, tím více mám štěstí.</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="101"/>
- <source>Do, or do not. There is no &apos;try&apos;.</source>
- <translation type="unfinished"></translation>
+ <source>Do, or do not. There is no 'try'.</source>
+ <translation>Udělej to, nebo to nedělej vůbec. Nejde o to to jen zkoušet.</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="103"/>
<source>A mathematician is a device for turning coffee into theorems.</source>
- <translation type="unfinished"></translation>
+ <translation>Matematik je prostředek, kterým se proměňuje káva na poučky.</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="105"/>
<source>Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws.</source>
- <translation type="unfinished"></translation>
+ <translation>Dobří lidé nepotřebují zákony k tomu, aby jim říkaly, aby jednali zodpovědně, zatímco špatní lidé si najdou cestičku okolo zákonů.</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="107"/>
<source>Black holes are where God divided by zero.</source>
- <translation type="unfinished"></translation>
+ <translation>Černé díry jsou prý místem, kde Bůh dělil nulou.</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="109"/>
- <source>It&apos;s kind of fun to do the impossible.</source>
- <translation type="unfinished"></translation>
+ <source>It's kind of fun to do the impossible.</source>
+ <translation>Dělat nemožné je zábava.</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="111"/>
<source>Knowledge speaks, but wisdom listens.</source>
- <translation type="unfinished"></translation>
+ <translation>Vědomost hovoří, ale moudrost poslouchá.</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="113"/>
<source>A witty saying proves nothing.</source>
- <translation type="unfinished"></translation>
+ <translation>Vtipné pořekadlo ještě nic nedokazuje.</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="115"/>
<source>Success usually comes to those who are too busy to be looking for it.</source>
- <translation type="unfinished"></translation>
+ <translation>Úspěch obyčejně přijde k těm, kdož jsou příliš zaneprázdněni na to, aby jej hledali.</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="117"/>
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 66257f7b..be1bb754 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ja.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ja.ts
@@ -149,52 +149,52 @@
<message>
<location filename="../BootSplash.ui" line="94"/>
<source>Starting the Lumina Desktop...</source>
- <translation type="unfinished"></translation>
+ <translation>Lumina デスクトップを起動しています...</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="15"/>
<source>Version %1</source>
- <translation type="unfinished"></translation>
+ <translation>バージョン %1</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="39"/>
<source>This desktop is powered by coffee, coffee, and more coffee.</source>
- <translation type="unfinished"></translation>
+ <translation>このデスクトップはコーヒーとコーヒーともう一杯のコーヒーで動いています。</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="41"/>
<source>Keep up with desktop news!</source>
- <translation type="unfinished"></translation>
+ <translation>デスクトップのニュースをチェックしよう!</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="43"/>
<source>There is a full handbook of information about the desktop available online.</source>
- <translation type="unfinished"></translation>
+ <translation>デスクトップの情報はオンラインのハンドブックにあります。</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="45"/>
<source>Want to change the interface? Everything is customizable in the desktop configuration!</source>
- <translation type="unfinished"></translation>
+ <translation>インターフェイスを変更したいですか? デスクトップ設定でいろいろ変更できます!</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="47"/>
<source>Lumina can easily reproduce the interface from most other desktop environments.</source>
- <translation type="unfinished"></translation>
+ <translation>Lumina は他のデスクトップ環境の設定を簡単に再現できます。</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="49"/>
<source>This desktop is generously sponsored by iXsystems</source>
- <translation type="unfinished"></translation>
+ <translation>このデスクトップは寛大なる iXsystems に支援されています</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="51"/>
<source>I have never been hurt by what I have not said</source>
- <translation type="unfinished"></translation>
+ <translation>私が何も言わなければ誰かを傷つけることはない</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="53"/>
<source>Gotta have more cowbell!</source>
- <translation type="unfinished"></translation>
+ <translation>Gotta have more cowbell!</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="55"/>
@@ -204,7 +204,7 @@
<message>
<location filename="../BootSplash.cpp" line="57"/>
<source>Before God we are all equally wise - and equally foolish.</source>
- <translation type="unfinished"></translation>
+ <translation>神の前では我々は等しく賢く――等しく愚かでもある。</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="59"/>
@@ -218,12 +218,12 @@
</message>
<message>
<location filename="../BootSplash.cpp" line="63"/>
- <source>Don&apos;t expect to build up the weak by pulling down the strong.</source>
+ <source>Don't expect to build up the weak by pulling down the strong.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="65"/>
- <source>You can&apos;t know too much, but you can say too much.</source>
+ <source>You can't know too much, but you can say too much.</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -303,7 +303,7 @@
</message>
<message>
<location filename="../BootSplash.cpp" line="97"/>
- <source>Only two things are infinite, the universe and human stupidity, and I&apos;m not sure about the former.</source>
+ <source>Only two things are infinite, the universe and human stupidity, and I'm not sure about the former.</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -313,7 +313,7 @@
</message>
<message>
<location filename="../BootSplash.cpp" line="101"/>
- <source>Do, or do not. There is no &apos;try&apos;.</source>
+ <source>Do, or do not. There is no 'try'.</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -333,7 +333,7 @@
</message>
<message>
<location filename="../BootSplash.cpp" line="109"/>
- <source>It&apos;s kind of fun to do the impossible.</source>
+ <source>It's kind of fun to do the impossible.</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -646,12 +646,12 @@
<message>
<location filename="../desktop-plugins/LDPlugin.cpp" line="38"/>
<source>Launch Item</source>
- <translation type="unfinished"></translation>
+ <translation>アイテムを起動</translation>
</message>
<message>
<location filename="../desktop-plugins/LDPlugin.cpp" line="42"/>
<source>Start Moving Item</source>
- <translatorcomment>&quot;transform-move&quot; アイコンを使用する操作</translatorcomment>
+ <translatorcomment>"transform-move" アイコンを使用する操作</translatorcomment>
<translation>アイテムの移動を開始</translation>
</message>
<message>
@@ -743,7 +743,7 @@
<message>
<location filename="../LDesktop.cpp" line="292"/>
<source>Lock Session</source>
- <translation type="unfinished"></translation>
+ <translation>画面セッションをロック</translation>
</message>
<message>
<location filename="../LDesktop.cpp" line="293"/>
@@ -997,52 +997,52 @@
<message>
<location filename="../panel-plugins/audioplayer/PPlayerWidget.cpp" line="69"/>
<source>Clear Playlist</source>
- <translation type="unfinished">プレイリストを消去する</translation>
+ <translation>プレイリストを消去する</translation>
</message>
<message>
<location filename="../panel-plugins/audioplayer/PPlayerWidget.cpp" line="70"/>
<source>Shuffle Playlist</source>
- <translation type="unfinished">プレイリストをシャッフルする</translation>
+ <translation>プレイリストをシャッフルする</translation>
</message>
<message>
<location filename="../panel-plugins/audioplayer/PPlayerWidget.cpp" line="72"/>
<source>Add Files</source>
- <translation type="unfinished">ファイルを追加</translation>
+ <translation>ファイルを追加</translation>
</message>
<message>
<location filename="../panel-plugins/audioplayer/PPlayerWidget.cpp" line="73"/>
<source>Add Directory</source>
- <translation type="unfinished">ディレクトリーを追加</translation>
+ <translation>ディレクトリーを追加</translation>
</message>
<message>
<location filename="../panel-plugins/audioplayer/PPlayerWidget.cpp" line="74"/>
<source>Add URL</source>
- <translation type="unfinished">URL を追加</translation>
+ <translation>URL を追加</translation>
</message>
<message>
<location filename="../panel-plugins/audioplayer/PPlayerWidget.cpp" line="102"/>
<source>Multimedia Files</source>
- <translation type="unfinished">マルチメディアファイル</translation>
+ <translation>マルチメディアファイル</translation>
</message>
<message>
<location filename="../panel-plugins/audioplayer/PPlayerWidget.cpp" line="103"/>
<source>Select Multimedia Files</source>
- <translation type="unfinished">マルチメディアファイルを選択</translation>
+ <translation>マルチメディアファイルを選択</translation>
</message>
<message>
<location filename="../panel-plugins/audioplayer/PPlayerWidget.cpp" line="130"/>
<source>Select Multimedia Directory</source>
- <translation type="unfinished">マルチメディアディレクトリーを選択</translation>
+ <translation>マルチメディアディレクトリーを選択</translation>
</message>
<message>
<location filename="../panel-plugins/audioplayer/PPlayerWidget.cpp" line="159"/>
<source>Enter a valid URL for a multimedia file or stream:</source>
- <translation type="unfinished">有効なマルチメディアファイルまたはストリームの URL を入力:</translation>
+ <translation>有効なマルチメディアファイルまたはストリームの URL を入力:</translation>
</message>
<message>
<location filename="../panel-plugins/audioplayer/PPlayerWidget.cpp" line="161"/>
<source>Multimedia URL</source>
- <translation type="unfinished">マルチメディア URL</translation>
+ <translation>マルチメディア URL</translation>
</message>
</context>
<context>
@@ -1278,7 +1278,7 @@
<message>
<location filename="../SettingsMenu.cpp" line="33"/>
<source>Wallpaper</source>
- <translation type="unfinished"></translation>
+ <translation>壁紙</translation>
</message>
<message>
<location filename="../SettingsMenu.cpp" line="36"/>
@@ -1288,7 +1288,7 @@
<message>
<location filename="../SettingsMenu.cpp" line="39"/>
<source>All Desktop Settings</source>
- <translation type="unfinished"></translation>
+ <translation>すべてのデスクトップ設定</translation>
</message>
<message>
<location filename="../SettingsMenu.cpp" line="54"/>
@@ -1563,13 +1563,13 @@
<message>
<location filename="../panel-plugins/userbutton/UserWidget.ui" line="375"/>
<source>Go back to home directory</source>
- <translatorcomment>なぜ&quot;back&quot;?</translatorcomment>
+ <translatorcomment>なぜ"back"?</translatorcomment>
<translation>ホームディレクトリーに移動する</translation>
</message>
<message>
<location filename="../panel-plugins/userbutton/UserWidget.ui" line="350"/>
<source>Open Directory</source>
- <translatorcomment>&quot;Browse&quot;ボタンのツールチップ</translatorcomment>
+ <translatorcomment>"Browse"ボタンのツールチップ</translatorcomment>
<translation>ディレクトリーを開く</translation>
</message>
<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 0c1e41d6..8ce06739 100644
--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pl.ts
+++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pl.ts
@@ -146,87 +146,87 @@
<message>
<location filename="../BootSplash.ui" line="94"/>
<source>Starting the Lumina Desktop...</source>
- <translation type="unfinished"></translation>
+ <translation>Uruchamianie pulpitu Lumina...</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="15"/>
<source>Version %1</source>
- <translation type="unfinished"></translation>
+ <translation>Wersja %1</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="39"/>
<source>This desktop is powered by coffee, coffee, and more coffee.</source>
- <translation type="unfinished"></translation>
+ <translation>Ten pulpit zasilany jest przez kawę , kawę, i jeszcze raz kawę.</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="41"/>
<source>Keep up with desktop news!</source>
- <translation type="unfinished"></translation>
+ <translation>Bądź na bieżącą z wiadomościami!</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="43"/>
<source>There is a full handbook of information about the desktop available online.</source>
- <translation type="unfinished"></translation>
+ <translation>Podręcznik użytkownika pulpitu jest dostępny online.</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="45"/>
<source>Want to change the interface? Everything is customizable in the desktop configuration!</source>
- <translation type="unfinished"></translation>
+ <translation>Chcesz zmienić interfejs? Wszystkie konfigurowalne elementy znajdują się w konfiguracji pulpitu!</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="47"/>
<source>Lumina can easily reproduce the interface from most other desktop environments.</source>
- <translation type="unfinished"></translation>
+ <translation>Lumina potrafi w łatwy sposób odtworzyć interfejsy innych środowisk graficznych.</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="49"/>
<source>This desktop is generously sponsored by iXsystems</source>
- <translation type="unfinished"></translation>
+ <translation>Ten pulpit jest szczodrze sponsorowany przez iXsystems</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="51"/>
<source>I have never been hurt by what I have not said</source>
- <translation type="unfinished"></translation>
+ <translation>Nigdy nie zostałem zraniony przez to, czego nie wypowiedziałem</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="53"/>
<source>Gotta have more cowbell!</source>
- <translation type="unfinished"></translation>
+ <translation>Gotta have more cowbell!</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="55"/>
<source>Everything has its beauty but not everyone sees it.</source>
- <translation type="unfinished"></translation>
+ <translation>Wszystko ma swoje piękno, ale nie każdy jest w stanie to piękno dostrzec.</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="57"/>
<source>Before God we are all equally wise - and equally foolish.</source>
- <translation type="unfinished"></translation>
+ <translation>Przed Bogiem wszyscy jesteśmy równie mądrzy, co równie głupi.</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="59"/>
<source>We cannot do everything at once, but we can do something at once.</source>
- <translation type="unfinished"></translation>
+ <translation>Nie możemy robić wszystkiego naraz, ale możemy robić coś na raz.</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="61"/>
<source>One with the law is a majority.</source>
- <translation type="unfinished"></translation>
+ <translation>Ten po którego stronie stoi prawo, ten jest większością.</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="63"/>
- <source>Don&apos;t expect to build up the weak by pulling down the strong.</source>
- <translation type="unfinished"></translation>
+ <source>Don't expect to build up the weak by pulling down the strong.</source>
+ <translation>Nie oczekuje wzmacniania słabych osłabianiem silnych.</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="65"/>
- <source>You can&apos;t know too much, but you can say too much.</source>
- <translation type="unfinished"></translation>
+ <source>You can't know too much, but you can say too much.</source>
+ <translation>Nie możesz wiedzieć za dużo, ale możesz powiedzieć za dużo.</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="67"/>
<source>Duty is not collective; it is personal.</source>
- <translation type="unfinished"></translation>
+ <translation>Obowiązek to nie kolektyw, to sprawa osobista.</translation>
</message>
<message>
<location filename="../BootSplash.cpp" line="69"/>
@@ -300,7 +300,7 @@
</message>
<message>
<location filename="../BootSplash.cpp" line="97"/>
- <source>Only two things are infinite, the universe and human stupidity, and I&apos;m not sure about the former.</source>
+ <source>Only two things are infinite, the universe and human stupidity, and I'm not sure about the former.</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -310,7 +310,7 @@
</message>
<message>
<location filename="../BootSplash.cpp" line="101"/>
- <source>Do, or do not. There is no &apos;try&apos;.</source>
+ <source>Do, or do not. There is no 'try'.</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -330,7 +330,7 @@
</message>
<message>
<location filename="../BootSplash.cpp" line="109"/>
- <source>It&apos;s kind of fun to do the impossible.</source>
+ <source>It's kind of fun to do the impossible.</source>
<translation type="unfinished"></translation>
</message>
<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 3240a733..99816ed5 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_cs.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_cs.ts
@@ -161,7 +161,7 @@
<message>
<location filename="../main.cpp" line="264"/>
<source>Application entry is invalid: %1</source>
- <translation type="unfinished"></translation>
+ <translation>Záznam programu je neplatný: %1</translation>
</message>
<message>
<location filename="../main.cpp" line="273"/>
@@ -190,8 +190,8 @@
</message>
<message>
<location filename="../main.cpp" line="363"/>
- <source>Could not find &quot;%1&quot;. Please ensure it is installed first.</source>
- <translation>Nepodařilo se najít &quot;%1&quot;. Nejprve, prosím, zajistěte, aby byl nainstalován.</translation>
+ <source>Could not find "%1". Please ensure it is installed first.</source>
+ <translation>Nepodařilo se najít "%1". Nejprve, prosím, zajistěte, aby byl nainstalován.</translation>
</message>
<message>
<location filename="../main.cpp" line="413"/>
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 51f4ea9c..f136b8fe 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_ja.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_ja.ts
@@ -131,7 +131,7 @@
<message>
<location filename="../LFileDialog.cpp" line="274"/>
<source>Find Application Binary</source>
- <translatorcomment>&quot;Find&quot;とあるが、ファイル指定ダイアログのタイトル</translatorcomment>
+ <translatorcomment>"Find"とあるが、ファイル指定ダイアログのタイトル</translatorcomment>
<translation>アプリケーションのバイナリーを指定</translation>
</message>
</context>
@@ -162,7 +162,7 @@
<message>
<location filename="../main.cpp" line="264"/>
<source>Application entry is invalid: %1</source>
- <translation type="unfinished"></translation>
+ <translation>アプリケーションエントリーが不正です: %1</translation>
</message>
<message>
<location filename="../main.cpp" line="273"/>
@@ -191,8 +191,8 @@
</message>
<message>
<location filename="../main.cpp" line="363"/>
- <source>Could not find &quot;%1&quot;. Please ensure it is installed first.</source>
- <translation>&quot;%1&quot; が見つかりませんでした。まずそれがインストールされている事を確認してください。</translation>
+ <source>Could not find "%1". Please ensure it is installed first.</source>
+ <translation>"%1" が見つかりませんでした。まずそれがインストールされている事を確認してください。</translation>
</message>
<message>
<location filename="../main.cpp" line="413"/>
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 ffa08d9c..ab23731d 100644
--- a/src-qt5/core/lumina-open/i18n/lumina-open_pl.ts
+++ b/src-qt5/core/lumina-open/i18n/lumina-open_pl.ts
@@ -161,7 +161,7 @@
<message>
<location filename="../main.cpp" line="264"/>
<source>Application entry is invalid: %1</source>
- <translation type="unfinished"></translation>
+ <translation>Ścieżka aplikacji jest błędna: %1</translation>
</message>
<message>
<location filename="../main.cpp" line="273"/>
@@ -186,12 +186,12 @@
<message>
<location filename="../main.cpp" line="363"/>
<source>Binary Missing</source>
- <translation type="unfinished"></translation>
+ <translation>Brak pliku binarnego</translation>
</message>
<message>
<location filename="../main.cpp" line="363"/>
- <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>
+ <source>Could not find "%1". Please ensure it is installed first.</source>
+ <translation>Nie można znaleźć "%1". Upewnij się, że jest zainstalowany.</translation>
</message>
<message>
<location filename="../main.cpp" line="413"/>
diff --git a/src-qt5/core/lumina-session/session.cpp b/src-qt5/core/lumina-session/session.cpp
index 19acdb1c..67d0e317 100644
--- a/src-qt5/core/lumina-session/session.cpp
+++ b/src-qt5/core/lumina-session/session.cpp
@@ -79,64 +79,73 @@ void LSession::startProcess(QString ID, QString command, QStringList watchfiles)
void LSession::start(){
//First check for a valid installation
- if( !LUtils::isValidBinary("fluxbox") || !LUtils::isValidBinary("lumina-desktop") ){
+ if(!LUtils::isValidBinary("lumina-desktop") ){
exit(1);
}
+ QSettings sessionsettings("lumina-desktop","sessionsettings");
+ QString WM = sessionsettings.value("WindowManager", "fluxbox").toString();
//Window Manager First
- // FLUXBOX BUG BYPASS: if the ~/.fluxbox dir does not exist, it will ignore the given config file
- if( !LUtils::isValidBinary("fluxbox") ){
- qDebug() << "[INCOMPLETE LUMINA INSTALLATION] fluxbox binary is missing - cannot continue";
- }else{
- QString confDir = QString( getenv("XDG_CONFIG_HOME"))+"/lumina-desktop";
- if(!QFile::exists(confDir)){ QDir dir(confDir); dir.mkpath(confDir); }
- if(!QFile::exists(confDir+"/fluxbox-init")){
- QStringList keys = LUtils::readFile(LOS::LuminaShare()+"/fluxbox-init-rc");
- keys = keys.replaceInStrings("${XDG_CONFIG_HOME}", QString( getenv("XDG_CONFIG_HOME")));
- LUtils::writeFile(confDir+"/fluxbox-init", keys, true);
- QFile::setPermissions(confDir+"/fluxbox-init", QFile::ReadOwner | QFile::WriteOwner | QFile::ReadUser | QFile::ReadOther | QFile::ReadGroup);
- }
- if(!QFile::exists(confDir+"/fluxbox-keys")){
- QStringList keys = LUtils::readFile(LOS::LuminaShare()+"/fluxbox-keys");
- keys = keys.replaceInStrings("${XDG_CONFIG_HOME}", QString( getenv("XDG_CONFIG_HOME")));
- LUtils::writeFile(confDir+"/fluxbox-keys", keys, true);
- QFile::setPermissions(confDir+"/fluxbox-keys", QFile::ReadOwner | QFile::WriteOwner | QFile::ReadUser | QFile::ReadOther | QFile::ReadGroup);
- }
- // FLUXBOX BUG BYPASS: if the ~/.fluxbox dir does not exist, it will ignore the given config file
- if(!QFile::exists(QDir::homePath()+"/.fluxbox")){
- QDir dir; dir.mkpath(QDir::homePath()+"/.fluxbox");
- }
- QString cmd = "fluxbox -rc "+confDir+"/fluxbox-init -no-slit -no-toolbar";
- startProcess("wm", cmd, QStringList() << confDir+"/fluxbox-init" << confDir+"/fluxbox-keys");
- }
- //Compositing manager
- QSettings settings("lumina-desktop","sessionsettings");
- if(settings.value("enableCompositing",true).toBool()){
- if(LUtils::isValidBinary("compton")){
- QString set = QString(getenv("XDG_CONFIG_HOME"))+"/lumina-desktop/compton.conf";
- if(!QFile::exists(set)){
- if(QFile::exists(LOS::LuminaShare()+"/compton.conf")){
- QFile::copy(LOS::LuminaShare()+"/compton.conf", set);
- }
- }
- if(!QFile::exists(set)){
- qDebug() << "Using default compton settings";
- startProcess("compositing","compton");
- }else{
- //Auto-detect if GLX is available on the system and turn it on/off as needed
- bool startcompton = true;
- if(LUtils::isValidBinary("glxinfo")){
- bool hasAccel =! LUtils::getCmdOutput("glxinfo -B").filter("direct rendering:").filter("Yes").isEmpty();
- qDebug() << "Detected GPU Acceleration:" << hasAccel;
- QStringList info = LUtils::readFile(set);
- for(int i=0; i<info.length(); i++){
- if(info[i].section("=",0,0).simplified()=="backend"){ info[i] = QString("backend = \"")+ (hasAccel ? "glx" : "xrender")+"\""; break; } //replace this line
- }
- LUtils::writeFile(set, info, true);
- if( !hasAccel && settings.value("compositingWithGpuAccelOnly",true).toBool() ){ startcompton = false; }
- }
- if(startcompton){ startProcess("compositing","compton --config \""+set+"\"", QStringList() << set); }
- }
- }else if(LUtils::isValidBinary("xcompmgr") && !settings.value("compositingWithGpuAccelOnly",true).toBool() ){ startProcess("compositing","xcompmgr"); }
+ if(WM=="fluxbox"){
+ // FLUXBOX BUG BYPASS: if the ~/.fluxbox dir does not exist, it will ignore the given config file
+ if( !LUtils::isValidBinary("fluxbox") ){
+ qDebug() << "[INCOMPLETE LUMINA INSTALLATION] fluxbox binary is missing - cannot continue";
+ }else{
+ QString confDir = QString( getenv("XDG_CONFIG_HOME"))+"/lumina-desktop";
+ if(!QFile::exists(confDir)){ QDir dir(confDir); dir.mkpath(confDir); }
+ if(!QFile::exists(confDir+"/fluxbox-init")){
+ QStringList keys = LUtils::readFile(LOS::LuminaShare()+"/fluxbox-init-rc");
+ keys = keys.replaceInStrings("${XDG_CONFIG_HOME}", QString( getenv("XDG_CONFIG_HOME")));
+ LUtils::writeFile(confDir+"/fluxbox-init", keys, true);
+ QFile::setPermissions(confDir+"/fluxbox-init", QFile::ReadOwner | QFile::WriteOwner | QFile::ReadUser | QFile::ReadOther | QFile::ReadGroup);
+ }
+ if(!QFile::exists(confDir+"/fluxbox-keys")){
+ QStringList keys = LUtils::readFile(LOS::LuminaShare()+"/fluxbox-keys");
+ keys = keys.replaceInStrings("${XDG_CONFIG_HOME}", QString( getenv("XDG_CONFIG_HOME")));
+ LUtils::writeFile(confDir+"/fluxbox-keys", keys, true);
+ QFile::setPermissions(confDir+"/fluxbox-keys", QFile::ReadOwner | QFile::WriteOwner | QFile::ReadUser | QFile::ReadOther | QFile::ReadGroup);
+ }
+ // FLUXBOX BUG BYPASS: if the ~/.fluxbox dir does not exist, it will ignore the given config file
+ if(!QFile::exists(QDir::homePath()+"/.fluxbox")){
+ QDir dir; dir.mkpath(QDir::homePath()+"/.fluxbox");
+ }
+ QString cmd = "fluxbox -rc "+confDir+"/fluxbox-init -no-slit -no-toolbar";
+ startProcess("wm", cmd, QStringList() << confDir+"/fluxbox-init" << confDir+"/fluxbox-keys");
+ }
+ //Compositing manager
+ QSettings settings("lumina-desktop","sessionsettings");
+ if(settings.value("enableCompositing",true).toBool()){
+ if(LUtils::isValidBinary("compton")){
+ QString set = QString(getenv("XDG_CONFIG_HOME"))+"/lumina-desktop/compton.conf";
+ if(!QFile::exists(set)){
+ if(QFile::exists(LOS::LuminaShare()+"/compton.conf")){
+ QFile::copy(LOS::LuminaShare()+"/compton.conf", set);
+ }
+ }
+ if(!QFile::exists(set)){
+ qDebug() << "Using default compton settings";
+ startProcess("compositing","compton");
+ }else{
+ //Auto-detect if GLX is available on the system and turn it on/off as needed
+ bool startcompton = true;
+ if(LUtils::isValidBinary("glxinfo")){
+ bool hasAccel =! LUtils::getCmdOutput("glxinfo -B").filter("direct rendering:").filter("Yes").isEmpty();
+ qDebug() << "Detected GPU Acceleration:" << hasAccel;
+ QStringList info = LUtils::readFile(set);
+ for(int i=0; i<info.length(); i++){
+ if(info[i].section("=",0,0).simplified()=="backend"){ info[i] = QString("backend = \"")+ (hasAccel ? "glx" : "xrender")+"\""; break; } //replace this line
+ }
+ LUtils::writeFile(set, info, true);
+ if( !hasAccel && settings.value("compositingWithGpuAccelOnly",true).toBool() ){ startcompton = false; }
+ }
+ if(startcompton){ startProcess("compositing","compton --config \""+set+"\"", QStringList() << set); }
+ }
+ }else if(LUtils::isValidBinary("xcompmgr") && !settings.value("compositingWithGpuAccelOnly",true).toBool() ){ startProcess("compositing","xcompmgr"); }
+ }
+ } else {
+ if(!LUtils::isValidBinary(WM)){
+ exit(1);
+ }
+ startProcess("wm", WM);
}
//Desktop Next
startProcess("runtime","lumina-desktop");
bgstack15