diff options
Diffstat (limited to 'src-qt5/core')
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'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'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'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 'try'.</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'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'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'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'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 'try'.</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'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>"transform-move" アイコンを使用する操作</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>なぜ"back"?</translatorcomment> + <translatorcomment>なぜ"back"?</translatorcomment> <translation>ホームディレクトリーに移動する</translation> </message> <message> <location filename="../panel-plugins/userbutton/UserWidget.ui" line="350"/> <source>Open Directory</source> - <translatorcomment>"Browse"ボタンのツールチップ</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'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'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'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 'try'.</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'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 "%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> + <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>"Find"とあるが、ファイル指定ダイアログのタイトル</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 "%1". Please ensure it is installed first.</source> - <translation>"%1" が見つかりませんでした。まずそれがインストールされている事を確認してください。</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 "%1". Please ensure it is installed first.</source> - <translation>Nie można znaleźć "%1". 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"); |