diff options
Diffstat (limited to 'src-qt5/core')
266 files changed, 8499 insertions, 8277 deletions
diff --git a/src-qt5/core/README.md b/src-qt5/core/README.md new file mode 100644 index 00000000..6a17d900 --- /dev/null +++ b/src-qt5/core/README.md @@ -0,0 +1,90 @@ +## Core Components of the Lumina Desktop + +It is **strongly-encouraged** that the "core" of Lumina is built and distributed as a single package. Each of the utilities listed here will explicitly require/use each other for essential functionality. + +Binaries: + * `start-lumina-desktop`: (lumina-session directory) Use this to start the desktop session + * `lumina-desktop`: (lumina-desktop directory) Use this to communicate with the currently-running session + * `lumina-open`: (lumina-open directory) Use this to launch external applications. Complement to the `xdg-open` utility. + * `lumina-info`: (lumina-info directory) View basic information about the desktop itself such as version, license, etc. + +Other Files that get installed if "core" is built directly: + * PREFIX/share/icons/material-design-[light/dark]: Basic SVG icon theme. + * PREFIX/share/lumina-desktop/themes: Built-in themes for the Lumina desktop + * PREFIX/share/lumina-desktop/colors: Built-in color schemes for the Lumina desktop + * PREFIX/share/lumina-desktop/menu-scripts: Built-in scripts for creating menu entries on-demand. + * PREFIX/share/lumina-desktop/globs2: Fallback XDG mimetype database (in case the system does not have one available) + +### Library Dependencies + +1. Qt 5.2+ (specific modules listed below) + * concurrent + * core + * gui + * network + * multimedia + * multimediawidgets + * svg + * widgets + * x11extras +2. X11 Libraries + * libXdamage +3. XCB Libraries + * libxcb + * libxcb-ewmh + * libxcb-image + * libxcb-composite + * libxcb-damage + * libxcb-randr + * libxcb-util +4. Other Libraries + * libc + +### Runtime Dependencies (utilities) +1. Required Utilities + * `xinit`: Used by `start-lumina-desktop` for launching an X11 session if needed. + * `fluxbox`: Used for window management within the desktop session + * `xscreensaver`: Screensaver/locker for the desktop session +2. Optional (but recommended) Utilities + * `numlockx`: Used to toggle the numlock key on session start + * `compton` *or* `xcompmgr`: Compositor to provide cross-application transparency effects and graphical smoothing + * `xterm`, `qterminal` or some other graphical terminal: XDG standards require the availability of a graphical terminal to launch particular types of applications. +3. OS-specific utilities (optional, but allow for better OS integration) + 1. FreeBSD/TrueOS + * AppCafe (graphical package manager) + * SysAdm (system control panel) + * `pc-sysconfig`, `intel_backlight`, `xbrightness` : screen brightness control utilities + * `pc-mixer`: graphical front-end to `mixer` + * `pc-sysconfig`: Allow system into be put into suspend mode (if supported by hardware) + 2. DragonFlyBSD + * `xbrightness`: screen brightness control (fake brightness - will not change power consumption) + 3. OpenBSD + * `xbacklight`: screen brightness control + 4. NetBSD + * [No OS Integrations committed yet] + 5. Generic "Linux" + * `xbacklight`: screen brightness control + * `amixer`: Audio mixer control + * `pavucontrol`: Graphical audio mixer utility + * `acpi`: Battery detection/status + 6. Slackware Linux + * `xbacklight`: screen brightness control + * `amixer`: Audio mixer control + * `pavucontrol`: Graphical audio mixer utility + * `acpi`: Battery detection/status + * `dbus-send`: System shutdown/restart + 7. Debian GNU/kFreeBSD + * `xbacklight`: screen brightness control + * `pavucontrol`: Graphical audio mixer utility + 8. Gentoo Linux + * `xbacklight`: screen brightness control + * `amixer`: Audio mixer control + * `pavucontrol`: Graphical audio mixer utility + * `acpi`: Battery detection/status + * `dbus-send`: System shutdown/restart + 9. Debian GNU/Linux + * `xbacklight`: screen brightness control + * `amixer`: Audio mixer control + * `pavucontrol`: Graphical audio mixer utility + * `acpi`: Battery detection/status + * `dbus-send`: System shutdown/restart diff --git a/src-qt5/core/libLumina/DesktopSettings.cpp b/src-qt5/core/libLumina/DesktopSettings.cpp index 30bd5bc2..47dc29de 100644 --- a/src-qt5/core/libLumina/DesktopSettings.cpp +++ b/src-qt5/core/libLumina/DesktopSettings.cpp @@ -9,7 +9,7 @@ #include <QDir> #include <QDebug> -#include <unistd.h> +#include <unistd.h> #include <pwd.h> #include <grp.h> @@ -25,6 +25,16 @@ DesktopSettings::~DesktopSettings(){ if(!files.isEmpty()){ stop(); } } +DesktopSettings* DesktopSettings::instance(){ + static DesktopSettings *set = 0; + if(set==0){ + //First-time init + set = new DesktopSettings(); + set->start(); + } + return set; +} + //Start/stop routines void DesktopSettings::start(){ files.clear(); settings.clear(); //clear the internal hashes (just in case) @@ -35,7 +45,7 @@ void DesktopSettings::start(){ } parseSystemSettings(); //set the runmode appropriately locateFiles(); // - + } void DesktopSettings::stop(){ @@ -111,7 +121,7 @@ void DesktopSettings::parseSystemSettings(){ //Now determine the runmode for this user struct passwd *pw = getpwuid(getuid()); - if(pw!=0){ + if(pw!=0){ QString cuser = QString(pw->pw_name); free(pw); //done with this structure if( settings[path]->value("fulluser_users", QStringList()).toStringList().contains(cuser) ){ runmode = DesktopSettings::UserFull; } @@ -123,10 +133,10 @@ void DesktopSettings::parseSystemSettings(){ gid_t grpList[100]; int grpSize = 100; if( getgrouplist(cuser.toLocal8Bit(), getgid(), grpList, &grpSize) > 0 ){ - QStringList groups; - for(int i=0; i<grpSize; i++){ + QStringList groups; + for(int i=0; i<grpSize; i++){ struct group *g = getgrgid(grpList[i]); - if(g!=0){ + if(g!=0){ groups << QString(g->gr_name); free(g); } @@ -136,18 +146,18 @@ void DesktopSettings::parseSystemSettings(){ if( (fromfile+groups).removeDuplicates() > 0 ){ runmode = DesktopSettings::UserFull; } else{ fromfile = settings[path]->value("fullsystem_groups", QStringList()).toStringList(); - fromfile.removeDuplicates(); + fromfile.removeDuplicates(); if((fromfile+groups).removeDuplicates() > 0 ){ runmode = DesktopSettings::SystemFull; } else{ fromfile = settings[path]->value("staticinterface_groups", QStringList()).toStringList(); - fromfile.removeDuplicates(); + fromfile.removeDuplicates(); if((fromfile+groups).removeDuplicates() > 0 ){ runmode = DesktopSettings::SystemInterface; } } } - } //end group list read + } //end group list read } }else{ - runmode = DesktopSettings::SystemFull; //could not read user name - assume system files only + runmode = DesktopSettings::SystemFull; //could not read user name - assume system files only } break; //found this file - go ahead and stop now (no hierarchy for this special file) @@ -246,7 +256,7 @@ void DesktopSettings::fileChanged(QString file){ QList< DesktopSettings::File > types = files.keys(); for(int i=0; i<types.length(); i++){ if(files[types[i]].contains(file)){ - emit FileModified(types[i]); + emit FileModified(types[i]); break; } } diff --git a/src-qt5/core/libLumina/DesktopSettings.h b/src-qt5/core/libLumina/DesktopSettings.h index 57eede9d..57a85791 100644 --- a/src-qt5/core/libLumina/DesktopSettings.h +++ b/src-qt5/core/libLumina/DesktopSettings.h @@ -30,6 +30,8 @@ public: DesktopSettings(QObject *parent = 0); ~DesktopSettings(); + static DesktopSettings* instance(); + //Start/stop routines void start(); void stop(); diff --git a/src-qt5/core/libLumina/LDesktopUtils.cpp b/src-qt5/core/libLumina/LDesktopUtils.cpp index d76c68e9..4454d29b 100644 --- a/src-qt5/core/libLumina/LDesktopUtils.cpp +++ b/src-qt5/core/libLumina/LDesktopUtils.cpp @@ -15,12 +15,12 @@ static QStringList fav; -QString LDesktopUtils::LuminaDesktopVersion(){ - QString ver = "1.2.2"; +QString LDesktopUtils::LuminaDesktopVersion(){ + QString ver = "1.3.1"; #ifdef GIT_VERSION ver.append( QString(" (Git Revision: %1)").arg(GIT_VERSION) ); #endif - return ver; + return ver; } QString LDesktopUtils::LuminaDesktopBuildDate(){ @@ -88,7 +88,7 @@ QStringList LDesktopUtils::listFavorites(){ fav.removeDuplicates(); lastRead = cur; } - + return fav; } @@ -138,7 +138,7 @@ void LDesktopUtils::removeFavorite(QString path){ void LDesktopUtils::upgradeFavorites(int){ //fromoldversionnumber //NOTE: Version number syntax: <major>*1000000 + <minor>*1000 + <revision> // Example: 1.2.3 -> 1002003 -} +} void LDesktopUtils::LoadSystemDefaults(bool skipOS){ //Will create the Lumina configuration files based on the current system template (if any) @@ -156,15 +156,15 @@ void LDesktopUtils::LoadSystemDefaults(bool skipOS){ QDesktopWidget *desk =QApplication::desktop(); QRect screenGeom; for(int i=0; i<desk->screenCount(); i++){ - if(desk->screenGeometry(i).x()==0){ - screen = QString::number(i); - screenGeom = desk->screenGeometry(i); - break; + if(desk->screenGeometry(i).x()==0){ + screen = QString::number(i); + screenGeom = desk->screenGeometry(i); + break; } } //Now setup the default "desktopsettings.conf" and "sessionsettings.conf" files QStringList deskset, sesset;//, lopenset; - + // -- SESSION SETTINGS -- QStringList tmp = sysDefaults.filter("session_"); if(tmp.isEmpty()){ tmp = sysDefaults.filter("session."); }//for backwards compat @@ -177,36 +177,36 @@ void LDesktopUtils::LoadSystemDefaults(bool skipOS){ if(val.isEmpty()){ continue; } QString istrue = (val.toLower()=="true") ? "true": "false"; //Change in 0.8.5 - use "_" instead of "." within variables names - need backwards compat for a little while - if(var.contains(".")){ var.replace(".","_"); } - //Now parse the variable and put the value in the proper file - + if(var.contains(".")){ var.replace(".","_"); } + //Now parse the variable and put the value in the proper file + if(var.contains("_default_")){ val = LUtils::AppToAbsolute(val); } //got an application/binary //Special handling for values which need to exist first - if(var.endsWith("_ifexists") ){ + if(var.endsWith("_ifexists") ){ var = var.remove("_ifexists"); //remove this flag from the variable //Check if the value exists (absolute path only) if(!QFile::exists(val)){ continue; } //skip this line - value/file does not exist } - + //Parse/save the value QString sset; //temporary strings if(var=="session_enablenumlock"){ sset = "EnableNumlock="+ istrue; } else if(var=="session_playloginaudio"){ sset = "PlayStartupAudio="+istrue; } else if(var=="session_playlogoutaudio"){ sset = "PlayLogoutAudio="+istrue; } - else if(var=="session_default_terminal"){ + else if(var=="session_default_terminal"){ LXDG::setDefaultAppForMime("application/terminal", val); - //sset = "default-terminal="+val; - }else if(var=="session_default_filemanager"){ + //sset = "default-terminal="+val; + }else if(var=="session_default_filemanager"){ LXDG::setDefaultAppForMime("inode/directory", val); //sset = "default-filemanager="+val; - //loset = "directory="+val; - }else if(var=="session_default_webbrowser"){ - //loset = "webbrowser="+val; + //loset = "directory="+val; + }else if(var=="session_default_webbrowser"){ + //loset = "webbrowser="+val; LXDG::setDefaultAppForMime("x-scheme-handler/http", val); LXDG::setDefaultAppForMime("x-scheme-handler/https", val); - }else if(var=="session_default_email"){ + }else if(var=="session_default_email"){ LXDG::setDefaultAppForMime("application/email",val); - //loset = "email="+val; + //loset = "email="+val; } //Put the line into the file (overwriting any previous assignment as necessary) /*if(!loset.isEmpty()){ @@ -218,7 +218,7 @@ void LDesktopUtils::LoadSystemDefaults(bool skipOS){ if(!sset.isEmpty()){ int index = sesset.indexOf(QRegExp(sset.section("=",0,0)+"=*", Qt::CaseSensitive, QRegExp::Wildcard)); if(index<0){ sesset << sset; } //new line - else{ sesset[index] = sset; } //overwrite the other line + else{ sesset[index] = sset; } //overwrite the other line } } //if(!lopenset.isEmpty()){ lopenset.prepend("[default]"); } //the session options exist within this set @@ -232,11 +232,11 @@ void LDesktopUtils::LoadSystemDefaults(bool skipOS){ if(val.isEmpty()){ continue; } QString istrue = (val.toLower()=="true") ? "true": "false"; //Change in 0.8.5 - use "_" instead of "." within variables names - need backwards compat for a little while - if(var.contains(".")){ var.replace(".","_"); } - //Now parse the variable and put the value in the proper file + if(var.contains(".")){ var.replace(".","_"); } + //Now parse the variable and put the value in the proper file val = LUtils::AppToAbsolute(val); //Special handling for values which need to exist first - if(var.endsWith("_ifexists") ){ + if(var.endsWith("_ifexists") ){ var = var.remove("_ifexists"); //remove this flag from the variable //Check if the value exists (absolute path only) if(!QFile::exists(val)){ continue; } //skip this line - value/file does not exist @@ -259,8 +259,8 @@ void LDesktopUtils::LoadSystemDefaults(bool skipOS){ if(val.isEmpty()){ continue; } QString istrue = (val.toLower()=="true") ? "true": "false"; //Change in 0.8.5 - use "_" instead of "." within variables names - need backwards compat for a little while - if(var.contains(".")){ var.replace(".","_"); } - //Now parse the variable and put the value in the proper file + if(var.contains(".")){ var.replace(".","_"); } + //Now parse the variable and put the value in the proper file if(var=="desktop_visiblepanels"){ deskset << "panels="+val; } else if(var=="desktop_backgroundfiles"){ deskset << "background\\filelist="+val; } else if(var=="desktop_backgroundrotateminutes"){ deskset << "background\\minutesToChange="+val; } @@ -282,8 +282,8 @@ void LDesktopUtils::LoadSystemDefaults(bool skipOS){ if(val.isEmpty()){ continue; } QString istrue = (val.toLower()=="true") ? "true": "false"; //Change in 0.8.5 - use "_" instead of "." within variables names - need backwards compat for a little while - if(var.contains(".")){ var.replace(".","_"); } - //Now parse the variable and put the value in the proper file + if(var.contains(".")){ var.replace(".","_"); } + //Now parse the variable and put the value in the proper file if(var==(panvar+"_pixelsize")){ //qDebug() << "Panel Size:" << val; if(val.contains("%")){ @@ -293,7 +293,7 @@ void LDesktopUtils::LoadSystemDefaults(bool skipOS){ else if(last=="w"){ val = QString::number( qRound(screenGeom.width()*val.toDouble())/100 ); }//adjust value to a percentage of the width of the screen } //qDebug() << " -- Adjusted:" << val; - deskset << "height="+val; + deskset << "height="+val; } else if(var==(panvar+"_autohide")){ deskset << "hidepanel="+istrue; } else if(var==(panvar+"_location")){ deskset << "location="+val.toLower(); } @@ -314,8 +314,8 @@ void LDesktopUtils::LoadSystemDefaults(bool skipOS){ QString val = tmp[i].section("=",1,1).section("#",0,0).toLower().simplified(); if(val.isEmpty()){ continue; } //Change in 0.8.5 - use "_" instead of "." within variables names - need backwards compat for a little while - if(var.contains(".")){ var.replace(".","_"); } - //Now parse the variable and put the value in the proper file + if(var.contains(".")){ var.replace(".","_"); } + //Now parse the variable and put the value in the proper file if(var=="menu_plugins"){ deskset << "itemlist="+val; } } if(!tmp.isEmpty()){ deskset << ""; } //space between sections @@ -328,7 +328,7 @@ void LDesktopUtils::LoadSystemDefaults(bool skipOS){ QString var = tmp[i].section("=",0,0).toLower().simplified(); QString val = tmp[i].section("=",1,1).section("#",0,0).simplified(); //Change in 0.8.5 - use "_" instead of "." within variables names - need backwards compat for a little while - if(var.contains(".")){ var.replace(".","_"); } + if(var.contains(".")){ var.replace(".","_"); } //Now parse the variable and put the value in the proper file qDebug() << "Favorite entry:" << var << val; val = LUtils::AppToAbsolute(val); //turn any relative files into absolute @@ -346,19 +346,19 @@ void LDesktopUtils::LoadSystemDefaults(bool skipOS){ QString var = tmp[i].section("=",0,0).toLower().simplified(); QString val = tmp[i].section("=",1,1).section("#",0,0).simplified(); //Change in 0.8.5 - use "_" instead of "." within variables names - need backwards compat for a little while - if(var.contains(".")){ var.replace(".","_"); } + if(var.contains(".")){ var.replace(".","_"); } //Now parse the variable and put the value in the proper file val = LUtils::AppToAbsolute(val); //turn any relative files into absolute if(var=="quicklaunch_add_ifexists" && QFile::exists(val)){ quickL << val; } else if(var=="quicklaunch_add"){ quickL << val; } } - if(!quickL.isEmpty()){ + if(!quickL.isEmpty()){ if(sesset.isEmpty()){ sesset << "[General]"; } //everything is in this section - sesset << "QuicklaunchApps="+quickL.join(", "); + sesset << "QuicklaunchApps="+quickL.join(", "); } //Now do any theme settings - QStringList themesettings = LTHEME::currentSettings(); + QStringList themesettings = LTHEME::currentSettings(); //List: [theme path, colorspath, iconsname, font, fontsize] //qDebug() << "Current Theme Color:" << themesettings[1]; tmp = sysDefaults.filter("theme_"); @@ -370,19 +370,19 @@ void LDesktopUtils::LoadSystemDefaults(bool skipOS){ QString val = tmp[i].section("=",1,1).section("#",0,0).simplified(); if(val.isEmpty()){ continue; } //Change in 0.8.5 - use "_" instead of "." within variables names - need backwards compat for a little while - if(var.contains(".")){ var.replace(".","_"); } - //Now parse the variable and put the value in the proper file + if(var.contains(".")){ var.replace(".","_"); } + //Now parse the variable and put the value in the proper file if(var=="theme_themefile"){ themesettings[0] = val; } else if(var=="theme_colorfile"){ themesettings[1] = val; } else if(var=="theme_iconset"){ themesettings[2] = val; } else if(var=="theme_font"){ themesettings[3] = val; } - else if(var=="theme_fontsize"){ + else if(var=="theme_fontsize"){ if(val.endsWith("%")){ val = QString::number( (screenGeom.height()*val.section("%",0,0).toDouble())/100 )+"px"; } - themesettings[4] = val; + themesettings[4] = val; } } //qDebug() << " - Now Color:" << themesettings[1] << setTheme; - + //Now double check that the custom theme/color files exist and reset it will the full path as necessary if(setTheme){ QStringList systhemes = LTHEME::availableSystemThemes(); @@ -414,15 +414,15 @@ void LDesktopUtils::LoadSystemDefaults(bool skipOS){ //Ensure that the settings directory exists QString setdir = QString(getenv("XDG_CONFIG_HOME"))+"/lumina-desktop"; - if(!QFile::exists(setdir)){ - QDir dir; - dir.mkpath(setdir); + if(!QFile::exists(setdir)){ + QDir dir; + dir.mkpath(setdir); } //Now save the settings files if(setTheme){ LTHEME::setCurrentSettings( themesettings[0], themesettings[1], themesettings[2], themesettings[3], themesettings[4]); } LUtils::writeFile(setdir+"/sessionsettings.conf", sesset, true); LUtils::writeFile(setdir+"/desktopsettings.conf", deskset, true); - + //Now run any extra config scripts or utilities as needed tmp = sysDefaults.filter("usersetup_run"); if(tmp.isEmpty()){ tmp = sysDefaults.filter("usersetup.run"); } @@ -431,25 +431,25 @@ void LDesktopUtils::LoadSystemDefaults(bool skipOS){ QString var = tmp[i].section("=",0,0).toLower().simplified(); QString val = tmp[i].section("=",1,1).section("#",0,0).simplified(); //Change in 0.8.5 - use "_" instead of "." within variables names - need backwards compat for a little while - if(var.contains(".")){ var.replace(".","_"); } + if(var.contains(".")){ var.replace(".","_"); } //Now parse the variable and put the value in the proper file if(var=="usersetup_run"){ qDebug() << "Running user setup command:" << val; QProcess::execute(val); } } - + } bool LDesktopUtils::checkUserFiles(QString lastversion){ - //internal version conversion examples: + //internal version conversion examples: // [1.0.0 -> 1000000], [1.2.3 -> 1002003], [0.6.1 -> 6001] //returns true if something changed int oldversion = LDesktopUtils::VersionStringToNumber(lastversion); int nversion = LDesktopUtils::VersionStringToNumber(QApplication::applicationVersion()); bool newversion = ( oldversion < nversion ); //increasing version number bool newrelease = ( lastversion.contains("-devel", Qt::CaseInsensitive) && QApplication::applicationVersion().contains("-release", Qt::CaseInsensitive) ); //Moving from devel to release - + QString confdir = QString(getenv("XDG_CONFIG_HOME"))+"/lumina-desktop/"; //Check for the desktop settings file QString dset = confdir+"desktopsettings.conf"; @@ -461,7 +461,7 @@ bool LDesktopUtils::checkUserFiles(QString lastversion){ } //Convert the favorites framework as necessary (change occured with 0.8.4) if(newversion || newrelease){ - LDesktopUtils::upgradeFavorites(oldversion); + LDesktopUtils::upgradeFavorites(oldversion); } //Convert from the old desktop numbering system to the new one (change occured with 1.0.1) if(oldversion<=1000001){ @@ -488,7 +488,7 @@ bool LDesktopUtils::checkUserFiles(QString lastversion){ } LUtils::writeFile(dset, DS, true); } - + //Check the fluxbox configuration files dset = QString(getenv("XDG_CONFIG_HOME"))+"/lumina-desktop/"; if(!QFile::exists(dset+"fluxbox-init")){ @@ -517,7 +517,7 @@ bool LDesktopUtils::checkUserFiles(QString lastversion){ int LDesktopUtils::VersionStringToNumber(QString version){ version = version.section("-",0,0); //trim any extra labels off the end int maj, mid, min; //major/middle/minor version numbers (<Major>.<Middle>.<Minor>) - maj = mid = min = 0; + maj = mid = min = 0; bool ok = true; maj = version.section(".",0,0).toInt(&ok); if(ok){ mid = version.section(".",1,1).toInt(&ok); }else{ maj = 0; } diff --git a/src-qt5/core/libLumina/LIconCache.h b/src-qt5/core/libLumina/LIconCache.h index 0344e0f3..f58a5510 100644 --- a/src-qt5/core/libLumina/LIconCache.h +++ b/src-qt5/core/libLumina/LIconCache.h @@ -69,7 +69,7 @@ private: private slots: void IconLoaded(QString id, QDateTime sync, QByteArray *data); - + signals: void InternalIconLoaded(QString, QDateTime, QByteArray*); //INTERNAL SIGNAL - DO NOT USE in other classes/objects void IconAvailable(QString); //way for classes to listen/reload icons as they change diff --git a/src-qt5/core/libLumina/LuminaX11.cpp b/src-qt5/core/libLumina/LuminaX11.cpp index ab6cd880..dd98d12c 100644 --- a/src-qt5/core/libLumina/LuminaX11.cpp +++ b/src-qt5/core/libLumina/LuminaX11.cpp @@ -75,9 +75,6 @@ void LXCB::createWMAtoms(){ i--; } } - - - } // === WindowList() === @@ -91,13 +88,13 @@ QList<WId> LXCB::WindowList(bool rawlist){ if( 1 == xcb_ewmh_get_client_list_reply( &EWMH, cookie, &winlist, NULL) ){ //qDebug() << " - Loop over items"; unsigned int wkspace = CurrentWorkspace(); - for(unsigned int i=0; i<winlist.windows_len; i++){ + for(unsigned int i=0; i<winlist.windows_len; i++){ //Filter out the Lumina Desktop windows if(WindowClass(winlist.windows[i]) == "Lumina Desktop Environment"){ continue; } //Also filter out windows not on the active workspace else if( (WindowWorkspace(winlist.windows[i])!=wkspace) && !rawlist ){ continue; } else{ - output << winlist.windows[i]; + output << winlist.windows[i]; } } } @@ -182,7 +179,7 @@ void LXCB::SetCurrentWorkspace(int number){ event.data.data32[4] = 0; xcb_send_event(QX11Info::connection(), 0, QX11Info::appRootWindow(), XCB_EVENT_MASK_STRUCTURE_NOTIFY | XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT, (const char *) &event); - + //EWMH function (does not seem to be recognized by Fluxbox) xcb_ewmh_request_change_showing_desktop(&EWMH, QX11Info::appScreen(), number); } @@ -193,7 +190,7 @@ QString LXCB::WindowClass(WId win){ QString out; if(win==0){ return ""; } xcb_get_property_cookie_t cookie = xcb_icccm_get_wm_class_unchecked(QX11Info::connection(), win); - if(cookie.sequence == 0){ return out; } + if(cookie.sequence == 0){ return out; } xcb_icccm_get_wm_class_reply_t value; if( 1== xcb_icccm_get_wm_class_reply( QX11Info::connection(), cookie, &value, NULL) ){ out = QString::fromUtf8(value.class_name); @@ -210,7 +207,7 @@ unsigned int LXCB::WindowWorkspace(WId win){ uint32_t wkspace = 0; xcb_get_property_cookie_t scookie = xcb_ewmh_get_wm_state_unchecked(&EWMH, win); xcb_get_property_cookie_t cookie = xcb_ewmh_get_wm_desktop_unchecked(&EWMH, win); - if(cookie.sequence == 0){ return wkspace; } + if(cookie.sequence == 0){ return wkspace; } xcb_ewmh_get_wm_desktop_reply(&EWMH, cookie, &wkspace, NULL); xcb_ewmh_get_atoms_reply_t reply; if(1==xcb_ewmh_get_wm_state_reply(&EWMH,scookie, &reply, NULL)){ @@ -220,7 +217,7 @@ unsigned int LXCB::WindowWorkspace(WId win){ } } //qDebug() << " - done: " << wkspace; - return wkspace; + return wkspace; } // === WindowGeometry() === @@ -500,7 +497,7 @@ QIcon LXCB::WindowIcon(WId win){ uint* dat = iter.data; //dat+=2; //remember the first 2 element offset for(int i=0; i<image.byteCount()/4; ++i, ++dat){ - ((uint*)image.bits())[i] = *dat; + ((uint*)image.bits())[i] = *dat; } icon.addPixmap(QPixmap::fromImage(image)); //layer this pixmap onto the icon //Now see if there are any more icons available @@ -1514,7 +1511,7 @@ void LXCB::WM_Set_Client_List(QList<WId> list, bool stacking){ xcb_ewmh_set_client_list_stacking(&EWMH, QX11Info::appScreen(), list.length(), array); }else{ xcb_ewmh_set_client_list(&EWMH, QX11Info::appScreen(), list.length(), array); - } + } } @@ -1528,7 +1525,7 @@ unsigned int LXCB::WM_Get_Number_Desktops(){ } void LXCB::WM_SetNumber_Desktops(unsigned int number){ - //NOTE: number should be at least 1 + //NOTE: number should be at least 1 xcb_ewmh_set_number_of_desktops(&EWMH, QX11Info::appScreen(), number); } @@ -1555,7 +1552,7 @@ QList<QPoint> LXCB::WM_Get_Desktop_Viewport(){ out << QPoint( reply.desktop_viewport[i].x, reply.desktop_viewport[i].y ); } xcb_ewmh_get_desktop_viewport_reply_wipe(&reply); //clean up the reply structure first - } + } return out; } diff --git a/src-qt5/core/libLumina/LuminaXDG.h b/src-qt5/core/libLumina/LuminaXDG.h index d159ef43..cc250c7e 100644 --- a/src-qt5/core/libLumina/LuminaXDG.h +++ b/src-qt5/core/libLumina/LuminaXDG.h @@ -12,8 +12,6 @@ // *.desktop Exec Compliance Updated: 9/9/2014 // Mime Application Version Compliance: 1.0.1 (11/14/14) (Skips random *.desktop parsing: ~80% compliant) //=========================================== - - #ifndef _LUMINA_LIBRARY_XDG_H #define _LUMINA_LIBRARY_XDG_H @@ -83,7 +81,7 @@ public: bool saveDesktopFile(bool merge = true); //This will use the "filePath" variable for where to save the file - bool setAutoStarted(bool autostart = true); + bool setAutoStarted(bool autostart = true); }; // ======================== @@ -127,29 +125,29 @@ private: XDGDesktop *desk; void loadExtraInfo(); - + public: //Couple overloaded contructors LFileInfo(); LFileInfo(QString filepath); LFileInfo(QFileInfo info); - ~LFileInfo(){ - desk->deleteLater(); + ~LFileInfo(){ + desk->deleteLater(); } - + //Functions for accessing the extra information // -- Return the mimetype for the file QString mimetype(); - + // -- Return the icon file to use for this file QString iconfile(); //Note: This string is auto-formatted for use in the LXDG::findIcon() routine. - + // -- Check if this is an XDG desktop file bool isDesktopFile(); - + // -- Allow access to the internal XDG desktop data structure XDGDesktop* XDG(); - + //Other file type identification routines bool isImage(); //Is a readable image file (for thumbnail support) bool isAVFile(); //Is an audio/video file @@ -165,7 +163,7 @@ public: //static XDGDesktop* loadDesktopFile(QString filepath, bool&ok, QObject *parent = 0); //static bool saveDesktopFile(XDGDesktop *dFile, bool merge = true); //Check a *.desktop file for validity (showAll skips the DE-exclusivity checks) - //static bool checkValidity(XDGDesktop *dFile, bool showAll = true); + //static bool checkValidity(XDGDesktop *dFile, bool showAll = true); //Check for a valid executable static bool checkExec(QString exec); //Get a list of all the directories where *.desktop files exist @@ -210,7 +208,7 @@ public: static QStringList findAVFileExtensions(); //Load all the "globs2" mime database files static QStringList loadMimeFileGlobs2(); - + //Find all the autostart *.desktop files static QList<XDGDesktop*> findAutoStartFiles(bool includeInvalid = false); //static bool setAutoStarted(bool autostart, XDGDesktop *app); diff --git a/src-qt5/core/libLumina/NativeEmbedWidget.cpp b/src-qt5/core/libLumina/NativeEmbedWidget.cpp new file mode 100644 index 00000000..80c843e0 --- /dev/null +++ b/src-qt5/core/libLumina/NativeEmbedWidget.cpp @@ -0,0 +1,208 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2017, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +#include "NativeEmbedWidget.h" + +#include <QPainter> +#include <QX11Info> +#include <QDebug> + +#include <xcb/xproto.h> +#include <xcb/xcb_aux.h> +#include <xcb/xcb_image.h> +#include <xcb/composite.h> +#include <X11/extensions/Xdamage.h> + +#define NORMAL_WIN_EVENT_MASK (XCB_EVENT_MASK_BUTTON_PRESS | \ + XCB_EVENT_MASK_BUTTON_RELEASE | \ + XCB_EVENT_MASK_POINTER_MOTION | \ + XCB_EVENT_MASK_BUTTON_MOTION | \ + XCB_EVENT_MASK_EXPOSURE | \ + XCB_EVENT_MASK_STRUCTURE_NOTIFY | \ + XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT | \ + XCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY | \ + XCB_EVENT_MASK_ENTER_WINDOW| \ + XCB_EVENT_MASK_PROPERTY_CHANGE) + +inline void registerClientEvents(WId id){ + uint32_t value_list[1] = {NORMAL_WIN_EVENT_MASK}; + xcb_change_window_attributes(QX11Info::connection(), id, XCB_CW_EVENT_MASK, value_list); +} + +// ============ +// PRIVATE +// ============ +//Simplification functions for the XCB/XLib interactions +void NativeEmbedWidget::syncWinSize(QSize sz){ + if(WIN==0){ return; } + if(!sz.isValid()){ sz = this->size(); } //use the current widget size + //qDebug() << "Sync Window Size:" << sz; + if(sz == winSize){ return; } //no change + const uint32_t valList[2] = {(uint32_t) sz.width(), (uint32_t) sz.height()}; + const uint32_t mask = XCB_CONFIG_WINDOW_WIDTH | XCB_CONFIG_WINDOW_HEIGHT; + xcb_configure_window(QX11Info::connection(), WIN->id(), mask, valList); + winSize = sz; //save this for checking later +} + +void NativeEmbedWidget::syncWidgetSize(QSize sz){ + //qDebug() << "Sync Widget Size:" << sz; + this->resize(sz); +} + +void NativeEmbedWidget::hideWindow(){ + xcb_unmap_window(QX11Info::connection(), WIN->id()); +} + +void NativeEmbedWidget::showWindow(){ + xcb_map_window(QX11Info::connection(), WIN->id()); +} + +QImage NativeEmbedWidget::windowImage(QRect geom){ + //Pull the XCB pixmap out of the compositing layer + xcb_pixmap_t pix = xcb_generate_id(QX11Info::connection()); + xcb_composite_name_window_pixmap(QX11Info::connection(), WIN->id(), pix); + if(pix==0){ return QImage(); } + + //Convert this pixmap into a QImage + xcb_image_t *ximg = xcb_image_get(QX11Info::connection(), pix, geom.x(), geom.y(), geom.width(), geom.height(), ~0, XCB_IMAGE_FORMAT_Z_PIXMAP); + if(ximg == 0){ return QImage(); } + QImage img(ximg->data, ximg->width, ximg->height, ximg->stride, QImage::Format_ARGB32_Premultiplied); + img = img.copy(); //detach this image from the XCB data structures + xcb_image_destroy(ximg); + + //Cleanup the XCB data structures + xcb_free_pixmap(QX11Info::connection(), pix); + + return img; + +} + +// ============ +// PUBLIC +// ============ +NativeEmbedWidget::NativeEmbedWidget(QWidget *parent) : QWidget(parent){ + WIN = 0; //nothing embedded yet + this->setSizeIncrement(2,2); +} + +bool NativeEmbedWidget::embedWindow(NativeWindow *window){ + WIN = window; + //PIXBACK = xcb_generate_id(QX11Info::connection()); + xcb_reparent_window(QX11Info::connection(), WIN->id(), this->winId(), 0, 0); + //Now send the embed event to the app + //qDebug() << " - send _XEMBED event"; + /*xcb_client_message_event_t event; + event.response_type = XCB_CLIENT_MESSAGE; + event.format = 32; + event.window = WIN->id(); + event.type = obj->ATOMS["_XEMBED"]; //_XEMBED + event.data.data32[0] = XCB_TIME_CURRENT_TIME; //CurrentTime; + event.data.data32[1] = 0; //XEMBED_EMBEDDED_NOTIFY + event.data.data32[2] = 0; + event.data.data32[3] = this->winId(); //WID of the container + event.data.data32[4] = 0; + + xcb_send_event(QX11Info::connection(), 0, WIN->id(), XCB_EVENT_MASK_STRUCTURE_NOTIFY | XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT, (const char *) &event); + */ + //Now setup any redirects and return + xcb_composite_redirect_window(QX11Info::connection(), WIN->id(), XCB_COMPOSITE_REDIRECT_MANUAL); //XCB_COMPOSITE_REDIRECT_[MANUAL/AUTOMATIC]); + xcb_composite_redirect_subwindows(QX11Info::connection(), WIN->id(), XCB_COMPOSITE_REDIRECT_MANUAL); //XCB_COMPOSITE_REDIRECT_[MANUAL/AUTOMATIC]); + + //Now create/register the damage handler + // -- XCB (Note: The XCB damage registration is completely broken at the moment - 9/15/15, Ken Moore) + // -- Retested 6/29/17 (no change) Ken Moore + //xcb_damage_damage_t dmgID = xcb_generate_id(QX11Info::connection()); //This is a typedef for a 32-bit unsigned integer + //xcb_damage_create(QX11Info::connection(), dmgID, WIN->id(), XCB_DAMAGE_REPORT_LEVEL_RAW_RECTANGLES); + // -- XLib (Note: This is only used because the XCB routine above does not work - needs to be fixed upstream in XCB itself). + Damage dmgID = XDamageCreate(QX11Info::display(), WIN->id(), XDamageReportRawRectangles); + + WIN->addDamageID( (uint) dmgID); //save this for later + WIN->addFrameWinID(this->winId()); + connect(WIN, SIGNAL(VisualChanged()), this, SLOT(repaintWindow()) ); //make sure we repaint the widget on visual change + + registerClientEvents(WIN->id()); + registerClientEvents(this->winId()); + return true; +} + +bool NativeEmbedWidget::detachWindow(){ + xcb_reparent_window(QX11Info::connection(), WIN->id(), QX11Info::appRootWindow(), -1, -1); + WIN = 0; + return true; +} + +bool NativeEmbedWidget::isEmbedded(){ + return (WIN!=0); +} + +// ============== +// PUBLIC SLOTS +// ============== +void NativeEmbedWidget::resyncWindow(){ + if(WIN==0){ return; } + return; //skip the stuff below (not working) + QRect geom = WIN->geometry(); + //Send an artificial configureNotify event to the window with the global position/size included + xcb_configure_notify_event_t event; + event.x = geom.x() + this->pos().x(); + event.y = geom.y() + this->pos().y(); + event.width = this->width(); + event.height = this->height(); + event.border_width = 0; + event.above_sibling = XCB_NONE; + event.override_redirect = false; + event.window = WIN->id(); + event.event = WIN->id(); + event.response_type = XCB_CONFIGURE_NOTIFY; + xcb_send_event(QX11Info::connection(), false, WIN->id(), XCB_EVENT_MASK_STRUCTURE_NOTIFY | XCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY, (const char *) &event); + + xcb_flush(QX11Info::connection()); +} + +void NativeEmbedWidget::repaintWindow(){ + this->update(); +} +// ============== +// PROTECTED +// ============== +void NativeEmbedWidget::resizeEvent(QResizeEvent *ev){ + QWidget::resizeEvent(ev); + if(WIN!=0){ + syncWinSize(ev->size()); + } //syncronize the window with the new widget size +} + +void NativeEmbedWidget::showEvent(QShowEvent *ev){ + if(WIN!=0){ showWindow(); } + QWidget::showEvent(ev); +} + +void NativeEmbedWidget::hideEvent(QHideEvent *ev){ + if(WIN!=0){ hideWindow(); } + QWidget::hideEvent(ev); +} + +void NativeEmbedWidget::paintEvent(QPaintEvent *ev){ + //QWidget::paintEvent(ev); //ensure all the Qt-compositing is done first + if(this->size()!=winSize){ return; } //do not paint here - waiting to re-sync the sizes + if(WIN==0){ QWidget::paintEvent(ev); return; } + //Need to paint the image from the window onto the widget as an overlay + QRect geom = QRect(0,0,this->width(), this->height()); //always paint the whole window + //qDebug() << "Get Paint image:" << ev->rect() << geom; + //geom = ev->rect(); //atomic updates + //geom.adjust(-1,-1,1,1); //add an additional pixel in each direction to be painted + //geom = geom.intersected(QRect(0,0,this->width(), this->height())); //ensure intersection with actual window + QImage img = windowImage(geom); + if(!img.isNull()){ + if(img.size() != geom.size()){ return; } + QPainter P(this); + P.drawImage( geom , img, QRect(geom.topLeft(), img.size()), Qt::NoOpaqueDetection); //1-to-1 mapping + //qDebug() << "Painted Rect:" << ev->rect() << this->geometry(); + //Note: Qt::NoOpaqueDetection Speeds up the paint by bypassing the checks to see if there are [semi-]transparent pixels + // Since this is an embedded image - we fully expect there to be transparency most of the time. + } + //qDebug() << "Done Painting"; +} diff --git a/src-qt5/core/libLumina/NativeEmbedWidget.h b/src-qt5/core/libLumina/NativeEmbedWidget.h new file mode 100644 index 00000000..78c11dfc --- /dev/null +++ b/src-qt5/core/libLumina/NativeEmbedWidget.h @@ -0,0 +1,55 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2017, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +// This is a container object for embedding a native window into a QWidget +// and maintaining a 1-to-1 mapping of sizing and other properties +// while also providing compositing effects between the two windows +//=========================================== +#ifndef _LUMINA_NATIVE_EMBED_WIDGET_H +#define _LUMINA_NATIVE_EMBED_WIDGET_H + +#include "NativeWindow.h" +#include <QWidget> +#include <QTimer> +#include <QResizeEvent> +#include <QShowEvent> +#include <QHideEvent> +#include <QPaintEvent> + +class NativeEmbedWidget : public QWidget{ + Q_OBJECT +private: + NativeWindow *WIN; + QSize winSize; + +private slots: + //Simplification functions + void syncWinSize(QSize sz = QSize()); + void syncWidgetSize(QSize sz); + void hideWindow(); + void showWindow(); + QImage windowImage(QRect geom); + + +public: + NativeEmbedWidget(QWidget *parent); + + bool embedWindow(NativeWindow *window); + bool detachWindow(); + bool isEmbedded(); //status of the embed + +public slots: + void resyncWindow(); + void repaintWindow(); + +protected: + void resizeEvent(QResizeEvent *ev); + void showEvent(QShowEvent *ev); + void hideEvent(QHideEvent *ev); + void paintEvent(QPaintEvent *ev); +}; + +#endif diff --git a/src-qt5/core/libLumina/NativeEventFilter.cpp b/src-qt5/core/libLumina/NativeEventFilter.cpp new file mode 100644 index 00000000..d6c2da50 --- /dev/null +++ b/src-qt5/core/libLumina/NativeEventFilter.cpp @@ -0,0 +1,272 @@ +//=========================================== +// Lumina-desktop source code +// Copyright (c) 2015-2017, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +#include "NativeEventFilter.h" +#include <QCoreApplication> +#include <QDebug> + +//#include <xcb/xcb_aux.h> +//#include <xcb/damage.h> + +//================================================== +// NOTE: All the XCB interactions and atoms are accessed via: +// obj->XCB->EWMH.(atom name) +// obj->XCB->(do something) +//================================================== + +/* +List of XCB response types (since almost impossible to find good docs on XCB) +switch (xcb_generic_event_t*->response_type & ~0x80) +case values: +XCB_KEY_[PRESS | RELEASE] +XCB_BUTTON_[PRESS | RELEASE] +XCB_MOTION_NOTIFY +XCB_ENTER_NOTIFY +XCB_LEAVE_NOTIFY +XCB_FOCUS_[IN | OUT] +XCB_KEYMAP_NOTIFY +XCB_EXPOSE +XCB_GRAPHICS_EXPOSURE +XCB_VISIBILITY_NOTIFY +XCB_CREATE_NOTIFY +XCB_DESTROY_NOTIFY +XCB_UNMAP_NOTIFY +XCB_MAP_[NOTIFY | REQUEST] +XCB_REPARENT_NOTIFY +XCB_CONFIGURE_[NOTIFY | REQUEST] +XCB_GRAVITY_NOTIFY +XCB_RESIZE_REQUEST +XCB_CIRCULATE_[NOTIFY | REQUEST] +XCB_PROPERTY_NOTIFY +XCB_SELECTION_[CLEAR | REQUEST | NOTIFY] +XCB_COLORMAP_NOTIFY +XCB_CLIENT_MESSAGE +*/ + +//SYSTEM TRAY STANDARD DEFINITIONS +#define SYSTEM_TRAY_REQUEST_DOCK 0 +#define SYSTEM_TRAY_BEGIN_MESSAGE 1 +#define SYSTEM_TRAY_CANCEL_MESSAGE 2 + +//#include <LuminaX11.h> +#include <QX11Info> +#include <xcb/xcb_ewmh.h> +#include <xcb/xcb_keysyms.h> +#include <xcb/damage.h> + +#define DEBUG 0 + +//Special objects/variables for XCB parsing +static xcb_ewmh_connection_t EWMH; +//static LXCB *XCB = 0; +static xcb_atom_t _NET_SYSTEM_TRAY_OPCODE = 0; + +inline void ParsePropertyEvent(xcb_property_notify_event_t *ev, NativeEventFilter *obj){ + //qDebug() << "Got Property Event:" << ev->window << ev->atom; + NativeWindow::Property prop = NativeWindow::None; + //Now determine which properties are getting changed, and update the native window as appropriate + if(ev->atom == EWMH._NET_WM_NAME){ prop = NativeWindow::Title; } + else if(ev->atom == EWMH._NET_WM_ICON){ prop = NativeWindow::Icon; } + else if(ev->atom == EWMH._NET_WM_ICON_NAME){ prop = NativeWindow::ShortTitle; } + else if(ev->atom == EWMH._NET_WM_DESKTOP){ prop = NativeWindow::Workspace; } + else if(ev->atom == EWMH._NET_WM_WINDOW_TYPE ){ prop = NativeWindow::WinTypes; } + else if( ev->atom == EWMH._NET_WM_STATE){ prop = NativeWindow::States; } + //Send out the signal if necessary + if(prop!=NativeWindow::None){ + if(DEBUG){ qDebug() << "Detected Property Change:" << ev->window << prop; } + obj->emit WindowPropertyChanged(ev->window, prop); + }else{ + //qDebug() << "Unknown Property Change:" << ev->window << ev->atom; + } +} + + +//Constructor for the Event Filter wrapper +NativeEventFilter::NativeEventFilter() : QObject(){ + EF = new EventFilter(this); + if(EWMH.nb_screens <=0){ + xcb_intern_atom_cookie_t *cookie = xcb_ewmh_init_atoms(QX11Info::connection(), &EWMH); + if(!xcb_ewmh_init_atoms_replies(&EWMH, cookie, NULL) ){ + qDebug() << "Error with XCB atom initializations"; + } + } + if(_NET_SYSTEM_TRAY_OPCODE==0){ + //_NET_SYSTEM_TRAY_OPCODE + xcb_intern_atom_cookie_t cookie = xcb_intern_atom(QX11Info::connection(), 0, 23,"_NET_SYSTEM_TRAY_OPCODE"); + xcb_intern_atom_reply_t *r = xcb_intern_atom_reply(QX11Info::connection(), cookie, NULL); + if(r){ + _NET_SYSTEM_TRAY_OPCODE = r->atom; + free(r); + } + } +} + +void NativeEventFilter::start(){ + if(DEBUG){ qDebug() << " - Install event filter..."; } + QCoreApplication::instance()->installNativeEventFilter(EF); + if(DEBUG){ qDebug() << " - Run request check..."; } + +} + +void NativeEventFilter::stop(){ + QCoreApplication::instance()->installNativeEventFilter(0); +} + +//============================= +// EventFilter Class +//============================= + +//Constructor for the XCB event filter +EventFilter::EventFilter(NativeEventFilter *parent) : QAbstractNativeEventFilter(){ + obj = parent; +} + +//This function format taken directly from the Qt5.3 documentation +bool EventFilter::nativeEventFilter(const QByteArray &eventType, void *message, long *){ + //qDebug() << "New Event"; + if(eventType=="xcb_generic_event_t"){ + //Convert to known event type (for X11 systems) + xcb_generic_event_t *ev = static_cast<xcb_generic_event_t *>(message); + //Now parse the event and emit signals as necessary + switch( ev->response_type & ~0x80){ +//============================== +// INTERACTIVITY EVENTS +//============================== + case XCB_KEY_PRESS: + //This is a keyboard key press + //qDebug() << "Key Press Event" + obj->emit KeyPressed( ((xcb_key_press_event_t *) ev)->detail, ((xcb_key_press_event_t *) ev)->root ); + break; + case XCB_KEY_RELEASE: + //This is a keyboard key release + //qDebug() << "Key Release Event"; + obj->emit KeyReleased( ((xcb_key_release_event_t *) ev)->detail, ((xcb_key_release_event_t *) ev)->root ); + break; + case XCB_BUTTON_PRESS: + //This is a mouse button press + //qDebug() << "Button Press Event"; + obj->emit MousePressed( ((xcb_button_press_event_t *) ev)->detail, ((xcb_button_press_event_t *) ev)->root ); + break; + case XCB_BUTTON_RELEASE: + //This is a mouse button release + //qDebug() << "Button Release Event"; + obj->emit MouseReleased( ((xcb_button_release_event_t *) ev)->detail, ((xcb_button_release_event_t *) ev)->root ); + break; + case XCB_MOTION_NOTIFY: + //This is a mouse movement event + if(DEBUG){ qDebug() << "Motion Notify Event"; } + obj->emit MouseMovement(); + break; + case XCB_ENTER_NOTIFY: + //This is a mouse movement event when mouse goes over a new window + //qDebug() << "Enter Notify Event"; + obj->emit MouseEnterWindow( ((xcb_enter_notify_event_t *) ev)->root ); + break; + case XCB_LEAVE_NOTIFY: + //This is a mouse movement event when mouse goes leaves a window + //qDebug() << "Leave Notify Event"; + obj->emit MouseLeaveWindow( ((xcb_leave_notify_event_t *) ev)->root ); + break; +//============================== + case XCB_EXPOSE: + //qDebug() << "Expose Notify Event:"; + //qDebug() << " - Given Window:" << ((xcb_property_notify_event_t*)ev)->window; + break; +//============================== + case XCB_MAP_NOTIFY: + //qDebug() << "Window Map Event:" << ((xcb_map_notify_event_t *)ev)->window; + obj->emit WindowPropertyChanged( ((xcb_map_notify_event_t *)ev)->window, NativeWindow::Visible, true); + break; //This is just a notification that a window was mapped - nothing needs to change here + case XCB_MAP_REQUEST: + //qDebug() << "Window Map Request Event"; + obj->emit WindowCreated( ((xcb_map_request_event_t *) ev)->window ); + break; +//============================== + case XCB_CREATE_NOTIFY: + //qDebug() << "Window Create Event"; + break; +//============================== + case XCB_UNMAP_NOTIFY: + //qDebug() << "Window Unmap Event:" << ((xcb_unmap_notify_event_t *)ev)->window; + obj->emit WindowPropertyChanged( ((xcb_map_notify_event_t *)ev)->window, NativeWindow::Visible, false); + break; +//============================== + case XCB_DESTROY_NOTIFY: + //qDebug() << "Window Closed Event:" << ((xcb_destroy_notify_event_t *)ev)->window; + obj->emit WindowDestroyed( ((xcb_destroy_notify_event_t *) ev)->window ); + break; +//============================== + case XCB_FOCUS_IN: + //qDebug() << "Focus In Event:"; + break; +//============================== + case XCB_FOCUS_OUT: + //qDebug() << "Focus Out Event:"; + break; +//============================== + case XCB_PROPERTY_NOTIFY: + //qDebug() << "Property Notify Event:"; + ParsePropertyEvent((xcb_property_notify_event_t*)ev, obj); + break; +//============================== + case XCB_CLIENT_MESSAGE: + //qDebug() << "Client Message Event"; + //qDebug() << " - Given Window:" << ((xcb_client_message_event_t*)ev)->window; + if( ((xcb_client_message_event_t*)ev)->type == _NET_SYSTEM_TRAY_OPCODE && ((xcb_client_message_event_t*)ev)->format == 32){ + //data32[0] is timestamp, [1] is opcode, [2] is window handle + if(SYSTEM_TRAY_REQUEST_DOCK == ((xcb_client_message_event_t*)ev)->data.data32[1]){ + obj->emit TrayWindowCreated( ((xcb_client_message_event_t*)ev)->data.data32[2] ); + //addTrayApp( ((xcb_client_message_event_t*)ev)->data.data32[2] ); + } + //Ignore the System Tray messages at the moment + } + break; +//============================== + case XCB_CONFIGURE_NOTIFY: + //qDebug() << "Configure Notify Event"; + /*obj->emit WindowPropertiesChanged( ((xcb_configure_notify_event_t*)ev)->window, + QList<NativeWindow::Property>() << NativeWindow::GlobalPos << NativeWindow::Size, + QList<QVariant>() << QPoint(((xcb_configure_notify_event_t*)ev)->x, ((xcb_configure_notify_event_t*)ev)->y) << + QSize(((xcb_configure_notify_event_t*)ev)->width, ((xcb_configure_notify_event_t*)ev)->height) );*/ + obj->emit WindowPropertyChanged( ((xcb_configure_notify_event_t*)ev)->window, NativeWindow::Size, + QSize(((xcb_configure_notify_event_t*)ev)->width, ((xcb_configure_notify_event_t*)ev)->height) ); + break; +//============================== + case XCB_CONFIGURE_REQUEST: + //qDebug() << "Configure Request Event"; + obj->emit RequestWindowPropertiesChange( ((xcb_configure_request_event_t*)ev)->window, + QList<NativeWindow::Property>() << NativeWindow::GlobalPos << NativeWindow::Size, + QList<QVariant>() << QPoint(((xcb_configure_request_event_t*)ev)->x, ((xcb_configure_request_event_t*)ev)->y) << + QSize(((xcb_configure_request_event_t*)ev)->width, ((xcb_configure_request_event_t*)ev)->height) ); + break; +//============================== + case XCB_RESIZE_REQUEST: + //qDebug() << "Resize Request Event"; + obj->emit RequestWindowPropertyChange( ((xcb_resize_request_event_t*)ev)->window, + NativeWindow::Size, QSize(((xcb_resize_request_event_t*)ev)->width, ((xcb_resize_request_event_t*)ev)->height) ); + break; +//============================== + case XCB_SELECTION_CLEAR: + //qDebug() << "Selection Clear Event"; + break; +//============================== + case 85: //not sure what event this is - but it seems to come up very often (just hide the notice) + case 0: + case XCB_GE_GENERIC: + break; //generic event - don't do anything special + default: + //if( (ev->response_type & ~0x80)==TrayDmgID){ + obj->emit PossibleDamageEvent( ((xcb_damage_notify_event_t*)ev)->drawable ); + //checkDamageID( ((xcb_damage_notify_event_t*)ev)->drawable ); + //}else{ + //qDebug() << "Default Event:" << (ev->response_type & ~0x80); + //} +//============================== + } + } + return false; + //never stop event handling (this will not impact the X events themselves - just the internal Qt application) +} diff --git a/src-qt5/core/libLumina/NativeEventFilter.h b/src-qt5/core/libLumina/NativeEventFilter.h new file mode 100644 index 00000000..2b184f99 --- /dev/null +++ b/src-qt5/core/libLumina/NativeEventFilter.h @@ -0,0 +1,70 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2012-2017, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +// This class provides the XCB event handling/registrations that are needed +//=========================================== +#ifndef _LUMINA_DESKTOP_NATIVE_EVENT_FILTER_H +#define _LUMINA_DESKTOP_NATIVE_EVENT_FILTER_H + +#include <QAbstractNativeEventFilter> +#include <QObject> +#include <QByteArray> + +#include "NativeWindow.h" + + +class NativeEventFilter : public QObject{ + Q_OBJECT +private: + QAbstractNativeEventFilter* EF; + WId WMFlag; //used to flag a running WM process + +public: + NativeEventFilter(); + ~NativeEventFilter(){} + + void start(); + void stop(); + +signals: + //Window Signals + void WindowCreated(WId); + void WindowDestroyed(WId); + void WindowPropertyChanged(WId, NativeWindow::Property); + void WindowPropertyChanged(WId, NativeWindow::Property, QVariant); + void WindowPropertiesChanged(WId, QList<NativeWindow::Property>, QList<QVariant>); + void RequestWindowPropertyChange(WId, NativeWindow::Property, QVariant); + void RequestWindowPropertiesChange(WId, QList<NativeWindow::Property>, QList<QVariant>); + + //System Tray Signals + void TrayWindowCreated(WId); + void TrayWindowDestroyed(WId); + + //Miscellaneos Signals + void PossibleDamageEvent(WId); + + //Input Event Signals + void KeyPressed(int, WId); + void KeyReleased(int, WId); + void MousePressed(int, WId); + void MouseReleased(int, WId); + void MouseMovement(); + void MouseEnterWindow(WId); + void MouseLeaveWindow(WId); +}; + +class EventFilter : public QAbstractNativeEventFilter{ +public: + EventFilter(NativeEventFilter *parent); + ~EventFilter(){} + + virtual bool nativeEventFilter(const QByteArray &eventType, void *message, long *); + +private: + NativeEventFilter *obj; +}; + +#endif diff --git a/src-qt5/core/libLumina/NativeKeyToQt.cpp b/src-qt5/core/libLumina/NativeKeyToQt.cpp new file mode 100644 index 00000000..06056be7 --- /dev/null +++ b/src-qt5/core/libLumina/NativeKeyToQt.cpp @@ -0,0 +1,528 @@ + +#include <NativeWindowSystem.h> + +#include <QKeySequence> +#include <QX11Info> + +// XCB/X11 Includes +#define XK_MISCELLANY +#define XK_XKB_KEYS +#define XK_LATIN1 +#define XK_LATIN2 +#define XK_LATIN3 +#define XK_LATIN4 +#define XK_LATIN8 +#define XK_LATIN9 +//NOTE: Look at the keysymdef.h file for additional define/characters which we may need later +#include <X11/keysymdef.h> +#include <xcb/xcb_keysyms.h> + + +//Small simplification functions +Qt::Key NativeWindowSystem::KeycodeToQt(int keycode){ + static xcb_key_symbols_t *SYM = 0; + if(SYM==0){ SYM = xcb_key_symbols_alloc(QX11Info::connection()); } + xcb_keysym_t symbol = xcb_key_symbols_get_keysym(SYM, keycode,0); + //not sure about the "column" input - we want raw keys though so ignore the "modified" key states (columns) for now + //qDebug() << "Try to convert keycode to Qt::Key:" << keycode << symbol; + //Now map this symbol to the appropriate Qt::Key enumeration + switch(symbol){ + //FUNCTION KEYS + case XK_F1: return Qt::Key_F1; + case XK_F2: return Qt::Key_F2; + case XK_F3: return Qt::Key_F3; + case XK_F4: return Qt::Key_F4; + case XK_F5: return Qt::Key_F5; + case XK_F6: return Qt::Key_F6; + case XK_F7: return Qt::Key_F7; + case XK_F8: return Qt::Key_F8; + case XK_F9: return Qt::Key_F9; + case XK_F10: return Qt::Key_F10; + case XK_F11: return Qt::Key_F11; + case XK_F12: return Qt::Key_F12; + case XK_F13: return Qt::Key_F13; + case XK_F14: return Qt::Key_F14; + case XK_F15: return Qt::Key_F15; + case XK_F16: return Qt::Key_F16; + case XK_F17: return Qt::Key_F17; + case XK_F18: return Qt::Key_F18; + case XK_F19: return Qt::Key_F19; + case XK_F20: return Qt::Key_F20; + case XK_F21: return Qt::Key_F21; + case XK_F22: return Qt::Key_F22; + case XK_F23: return Qt::Key_F23; + case XK_F24: return Qt::Key_F24; + case XK_F25: return Qt::Key_F25; + case XK_F26: return Qt::Key_F26; + case XK_F27: return Qt::Key_F27; + case XK_F28: return Qt::Key_F28; + case XK_F29: return Qt::Key_F29; + case XK_F30: return Qt::Key_F30; + case XK_F31: return Qt::Key_F31; + case XK_F32: return Qt::Key_F32; + case XK_F33: return Qt::Key_F33; + case XK_F34: return Qt::Key_F34; + case XK_F35: return Qt::Key_F35; + //Miscellaneous Keys + case XK_BackSpace: return Qt::Key_Backspace; + case XK_Delete: return Qt::Key_Delete; + //case XK_LineFeed: return Qt::Key_Backspace; + case XK_Clear: return Qt::Key_Clear; + case XK_Return: return Qt::Key_Return; + case XK_Pause: return Qt::Key_Pause; + case XK_Scroll_Lock: return Qt::Key_ScrollLock; + case XK_Sys_Req: return Qt::Key_SysReq; + case XK_Escape: return Qt::Key_Escape; + case XK_Select: return Qt::Key_Select; + case XK_Print: return Qt::Key_Print; + //case XK_Execute: return Qt::Key_Execute; + case XK_Insert: return Qt::Key_Insert; + case XK_Undo: return Qt::Key_Undo; + case XK_Redo: return Qt::Key_Redo; + case XK_Menu: return Qt::Key_Menu; + case XK_Find: return Qt::Key_Find; + case XK_Cancel: return Qt::Key_Cancel; + case XK_Help: return Qt::Key_Help; + //case XK_Break: return Qt::Key_Break; + //case XK_Mode_switch: return Qt::Key_Backspace; + //case XK_script_switch: return Qt::Key_Backspace; + case XK_Num_Lock: return Qt::Key_NumLock; + //Cursor Controls + case XK_Home: return Qt::Key_Home; + case XK_Left: return Qt::Key_Left; + case XK_Up: return Qt::Key_Up; + case XK_Right: return Qt::Key_Right; + case XK_Down: return Qt::Key_Down; + //case XK_Prior: return Qt::Key_Backspace; + case XK_Page_Up: return Qt::Key_PageUp; + case XK_Page_Down: return Qt::Key_PageDown; + //case XK_Next: return Qt::Key_Backspace; + case XK_End: return Qt::Key_End; + //case XK_Begin: return Qt::Key_Backspace; + // Keypad Functions and numbers + case XK_KP_Space: return Qt::Key_Space; + case XK_KP_Tab: return Qt::Key_Tab; + case XK_KP_Enter: return Qt::Key_Enter; + case XK_KP_F1: return Qt::Key_F1; + case XK_KP_F2: return Qt::Key_F2; + case XK_KP_F3: return Qt::Key_F3; + case XK_KP_F4: return Qt::Key_F4; + case XK_KP_Home: return Qt::Key_Home; + case XK_KP_Left: return Qt::Key_Left; + case XK_KP_Up: return Qt::Key_Up; + case XK_KP_Right: return Qt::Key_Right; + case XK_KP_Down: return Qt::Key_Down; + //case XK_KP_Prior: return Qt::Key_ + case XK_KP_Page_Up: return Qt::Key_PageUp; + //case XK_KP_Next: return Qt::Key_ + case XK_KP_Page_Down: return Qt::Key_PageDown; + case XK_KP_End: return Qt::Key_End; + //case XK_KP_Begin: return Qt::Key_ + case XK_KP_Insert: return Qt::Key_Insert; + case XK_KP_Delete: return Qt::Key_Delete; + case XK_KP_Equal: return Qt::Key_Equal; + case XK_KP_Multiply: return Qt::Key_Asterisk; + case XK_KP_Add: return Qt::Key_Plus; + case XK_KP_Separator: return Qt::Key_Comma; //X11 definitions say this is often comma + case XK_KP_Subtract: return Qt::Key_Minus; + case XK_KP_Decimal: return Qt::Key_Period; + case XK_KP_Divide: return Qt::Key_Slash; + case XK_KP_0: return Qt::Key_0; + case XK_KP_1: return Qt::Key_1; + case XK_KP_2: return Qt::Key_2; + case XK_KP_3: return Qt::Key_3; + case XK_KP_4: return Qt::Key_4; + case XK_KP_5: return Qt::Key_5; + case XK_KP_6: return Qt::Key_6; + case XK_KP_7: return Qt::Key_7; + case XK_KP_8: return Qt::Key_8; + case XK_KP_9: return Qt::Key_9; + // Modifier Keys + case XK_Shift_L: return Qt::Key_Shift; + case XK_Shift_R: return Qt::Key_Shift; + case XK_Control_L: return Qt::Key_Control; + case XK_Control_R: return Qt::Key_Control; + case XK_Caps_Lock: return Qt::Key_CapsLock; + //case XK_Shift_Lock: return Qt::Key_ShiftLock; + case XK_Meta_L: return Qt::Key_Meta; + case XK_Meta_R: return Qt::Key_Meta; + case XK_Alt_L: return Qt::Key_Alt; + case XK_Alt_R: return Qt::Key_Alt; + case XK_Super_L: return Qt::Key_Super_L; + case XK_Super_R: return Qt::Key_Super_R; + case XK_Hyper_L: return Qt::Key_Hyper_L; + case XK_Hyper_R: return Qt::Key_Hyper_R; + case XK_space: return Qt::Key_Space; + case XK_exclam: return Qt::Key_Exclam; + case XK_quotedbl: return Qt::Key_QuoteDbl; + case XK_numbersign: return Qt::Key_NumberSign; + case XK_dollar: return Qt::Key_Dollar; + case XK_percent: return Qt::Key_Percent; + case XK_ampersand: return Qt::Key_Ampersand; + case XK_apostrophe: return Qt::Key_Apostrophe; + case XK_parenleft: return Qt::Key_ParenLeft; + case XK_parenright: return Qt::Key_ParenRight; + case XK_asterisk: return Qt::Key_Asterisk; + case XK_plus: return Qt::Key_Plus; + case XK_comma: return Qt::Key_Comma; + case XK_minus: return Qt::Key_Minus; + case XK_period: return Qt::Key_Period; + case XK_slash: return Qt::Key_Slash; + case XK_0: return Qt::Key_0; + case XK_1: return Qt::Key_1; + case XK_2: return Qt::Key_2; + case XK_3: return Qt::Key_3; + case XK_4: return Qt::Key_4; + case XK_5: return Qt::Key_5; + case XK_6: return Qt::Key_6; + case XK_7: return Qt::Key_7; + case XK_8: return Qt::Key_8; + case XK_9: return Qt::Key_9; + case XK_colon: return Qt::Key_Colon; + case XK_semicolon: return Qt::Key_Semicolon; + case XK_less: return Qt::Key_Less; + case XK_equal: return Qt::Key_Equal; + case XK_greater: return Qt::Key_Greater; + case XK_question: return Qt::Key_Question; + case XK_at: return Qt::Key_At; + case XK_A: return Qt::Key_A; + case XK_B: return Qt::Key_B; + case XK_C: return Qt::Key_C; + case XK_D: return Qt::Key_D; + case XK_E: return Qt::Key_E; + case XK_F: return Qt::Key_F; + case XK_G: return Qt::Key_G; + case XK_H: return Qt::Key_H; + case XK_I: return Qt::Key_I; + case XK_J: return Qt::Key_J; + case XK_K: return Qt::Key_K; + case XK_L: return Qt::Key_L; + case XK_M: return Qt::Key_M; + case XK_N: return Qt::Key_N; + case XK_O: return Qt::Key_O; + case XK_P: return Qt::Key_P; + case XK_Q: return Qt::Key_Q; + case XK_R: return Qt::Key_R; + case XK_S: return Qt::Key_S; + case XK_T: return Qt::Key_T; + case XK_U: return Qt::Key_U; + case XK_V: return Qt::Key_V; + case XK_W: return Qt::Key_W; + case XK_X: return Qt::Key_X; + case XK_Y : return Qt::Key_Y; + case XK_Z: return Qt::Key_Z; + case XK_bracketleft: return Qt::Key_BracketLeft; + case XK_backslash: return Qt::Key_Backslash; + case XK_bracketright: return Qt::Key_BracketRight; + case XK_asciicircum: return Qt::Key_AsciiCircum; + case XK_underscore: return Qt::Key_Underscore; + case XK_grave: return Qt::Key_Agrave; + case XK_a: return Qt::Key_A; + case XK_b: return Qt::Key_B; + case XK_c: return Qt::Key_C; + case XK_d: return Qt::Key_D; + case XK_e: return Qt::Key_E; + case XK_f : return Qt::Key_F; + case XK_g: return Qt::Key_G; + case XK_h: return Qt::Key_H; + case XK_i: return Qt::Key_I; + case XK_j: return Qt::Key_J; + case XK_k: return Qt::Key_K; + case XK_l: return Qt::Key_L; + case XK_m: return Qt::Key_M; + case XK_n: return Qt::Key_N; + case XK_o: return Qt::Key_O; + case XK_p: return Qt::Key_P; + case XK_q: return Qt::Key_Q; + case XK_r: return Qt::Key_R; + case XK_s: return Qt::Key_S; + case XK_t : return Qt::Key_T; + case XK_u: return Qt::Key_U; + case XK_v: return Qt::Key_V; + case XK_w: return Qt::Key_W; + case XK_x: return Qt::Key_X; + case XK_y: return Qt::Key_Y; + case XK_z: return Qt::Key_Z; + case XK_braceleft: return Qt::Key_BraceLeft; + case XK_bar: return Qt::Key_Bar; + case XK_braceright: return Qt::Key_BraceRight; + case XK_asciitilde: return Qt::Key_AsciiTilde; + + case XK_nobreakspace: return Qt::Key_nobreakspace; + case XK_exclamdown: return Qt::Key_exclamdown; + case XK_cent: return Qt::Key_cent; + case XK_sterling: return Qt::Key_sterling; + case XK_currency: return Qt::Key_currency; + case XK_yen: return Qt::Key_yen; + case XK_brokenbar: return Qt::Key_brokenbar; + case XK_section: return Qt::Key_section; + case XK_diaeresis: return Qt::Key_diaeresis; + case XK_copyright: return Qt::Key_copyright; + case XK_ordfeminine: return Qt::Key_ordfeminine; + case XK_guillemotleft: return Qt::Key_guillemotleft; + case XK_notsign: return Qt::Key_notsign; + case XK_hyphen: return Qt::Key_hyphen; + case XK_registered: return Qt::Key_registered; + case XK_macron: return Qt::Key_macron; + case XK_degree: return Qt::Key_degree; + case XK_plusminus: return Qt::Key_plusminus; + case XK_twosuperior: return Qt::Key_twosuperior; + case XK_threesuperior: return Qt::Key_threesuperior; + case XK_acute: return Qt::Key_acute; + case XK_mu: return Qt::Key_mu; + case XK_paragraph: return Qt::Key_paragraph; + case XK_periodcentered: return Qt::Key_periodcentered; + case XK_cedilla: return Qt::Key_cedilla; + case XK_onesuperior: return Qt::Key_onesuperior; + case XK_masculine: return Qt::Key_masculine; + case XK_guillemotright: return Qt::Key_guillemotright; + case XK_onequarter: return Qt::Key_onequarter; + case XK_onehalf: return Qt::Key_onehalf; + case XK_threequarters: return Qt::Key_threequarters; + case XK_questiondown: return Qt::Key_questiondown; + case XK_Agrave: return Qt::Key_Agrave; + case XK_Aacute: return Qt::Key_Aacute; + case XK_Acircumflex: return Qt::Key_Acircumflex; + case XK_Atilde: return Qt::Key_Atilde; + case XK_Adiaeresis: return Qt::Key_Adiaeresis; + case XK_Aring: return Qt::Key_Aring; + case XK_AE: return Qt::Key_AE; + case XK_Ccedilla: return Qt::Key_Ccedilla; + case XK_Egrave: return Qt::Key_Egrave; + case XK_Eacute: return Qt::Key_Eacute; + case XK_Ecircumflex: return Qt::Key_Ecircumflex; + case XK_Ediaeresis: return Qt::Key_Ediaeresis; + case XK_Igrave: return Qt::Key_Igrave; + case XK_Iacute: return Qt::Key_Iacute; + case XK_Icircumflex: return Qt::Key_Icircumflex; + case XK_Idiaeresis: return Qt::Key_Idiaeresis; + case XK_ETH: return Qt::Key_ETH; + //case XK_Eth: return Qt::Key_Eth; + case XK_Ntilde: return Qt::Key_Ntilde; + case XK_Ograve: return Qt::Key_Ograve; + case XK_Oacute: return Qt::Key_Oacute; + case XK_Ocircumflex: return Qt::Key_Ocircumflex; + case XK_Otilde: return Qt::Key_Otilde; + case XK_Odiaeresis: return Qt::Key_Odiaeresis; + case XK_multiply: return Qt::Key_multiply; + //case XK_Oslash: return Qt::Key_AsciiTilde; + case XK_Ooblique: return Qt::Key_Ooblique; + case XK_Ugrave: return Qt::Key_Ugrave; + case XK_Uacute: return Qt::Key_Uacute; + case XK_Ucircumflex: return Qt::Key_Ucircumflex; + case XK_Udiaeresis: return Qt::Key_Udiaeresis; + case XK_Yacute: return Qt::Key_Yacute; + case XK_THORN: return Qt::Key_THORN; + //case XK_Thorn: return Qt::Key_AsciiTilde; + case XK_ssharp: return Qt::Key_ssharp; + /*case XK_agrave: return Qt::Key_AsciiTilde; + case XK_aacute: return Qt::Key_AsciiTilde; + case XK_acircumflex: return Qt::Key_AsciiTilde; + case XK_atilde: return Qt::Key_AsciiTilde; + case XK_adiaeresis: return Qt::Key_AsciiTilde; + case XK_aring: return Qt::Key_AsciiTilde; + case XK_ae: return Qt::Key_AsciiTilde; + case XK_ccedilla: return Qt::Key_AsciiTilde; + case XK_egrave: return Qt::Key_AsciiTilde; + case XK_eacute: return Qt::Key_AsciiTilde; + case XK_ecircumflex: return Qt::Key_AsciiTilde; + case XK_ediaeresis: return Qt::Key_AsciiTilde; + case XK_igrave: return Qt::Key_AsciiTilde; + case XK_iacute: return Qt::Key_AsciiTilde; + case XK_icircumflex: return Qt::Key_AsciiTilde; + case XK_idiaeresis: return Qt::Key_AsciiTilde; + case XK_eth: return Qt::Key_AsciiTilde; + case XK_ntilde: return Qt::Key_AsciiTilde; + case XK_ograve: return Qt::Key_AsciiTilde; + case XK_oacute: return Qt::Key_AsciiTilde; + case XK_ocircumflex: return Qt::Key_AsciiTilde; + case XK_otilde: return Qt::Key_AsciiTilde; + case XK_odiaeresis: return Qt::Key_AsciiTilde; + case XK_division: return Qt::Key_AsciiTilde; + case XK_oslash: return Qt::Key_AsciiTilde; + case XK_ooblique: return Qt::Key_AsciiTilde; + case XK_ugrave: return Qt::Key_AsciiTilde; + case XK_uacute: return Qt::Key_AsciiTilde; + case XK_ucircumflex: return Qt::Key_AsciiTilde; + case XK_udiaeresis: return Qt::Key_AsciiTilde; + case XK_yacute: return Qt::Key_AsciiTilde; + case XK_thorn: return Qt::Key_AsciiTilde; + case XK_ydiaeresis: return Qt::Key_AsciiTilde; + + case: XK_Agonek: return Qt::Key_AsciiTilde; + case XK_breve: return Qt::Key_AsciiTilde; + case XK_Lstroke: return Qt::Key_AsciiTilde; + case XK_Lcaron: return Qt::Key_AsciiTilde; + case XK_Sacute: return Qt::Key_AsciiTilde; + case XK_Scaron: return Qt::Key_AsciiTilde; + case XK_Scedilla: return Qt::Key_AsciiTilde; + case XK_Tcaron: return Qt::Key_AsciiTilde; + case XK_Zacute: return Qt::Key_AsciiTilde; + case XK_Zcaron: return Qt::Key_AsciiTilde; + case XK_Zabovedot: return Qt::Key_AsciiTilde; + case XK_aogonek: return Qt::Key_AsciiTilde; + case XK_ogonek: return Qt::Key_AsciiTilde; + case XK_lstroke: return Qt::Key_AsciiTilde; + case XK_lcaron: return Qt::Key_AsciiTilde; + case XK_sacute: return Qt::Key_AsciiTilde; + case XK_caron: return Qt::Key_AsciiTilde; + case XK_scaron: return Qt::Key_AsciiTilde; + case XK_scedilla: return Qt::Key_AsciiTilde; + case XK_tcaron: return Qt::Key_AsciiTilde; + case XK_zacute: return Qt::Key_AsciiTilde; + case XK_doubleacute: return Qt::Key_AsciiTilde; + case XK_zcaron: return Qt::Key_AsciiTilde; + case XK_zabovedot: return Qt::Key_AsciiTilde; + case XK_Racute: return Qt::Key_AsciiTilde; + case XK_Abreve: return Qt::Key_AsciiTilde; + case XK_Lacute: return Qt::Key_AsciiTilde; + case XK_Cacute: return Qt::Key_AsciiTilde; + case XK_Ccaron: return Qt::Key_AsciiTilde; + case XK_Eogonek: return Qt::Key_AsciiTilde; + case XK_Ecaron: return Qt::Key_AsciiTilde; + case XK_Dcaron: return Qt::Key_AsciiTilde; + case XK_Dstroke: return Qt::Key_AsciiTilde; + case XK_Nacute: return Qt::Key_AsciiTilde; + case XK_Ncaron: return Qt::Key_AsciiTilde; + case XK_Odoubleacute: return Qt::Key_AsciiTilde; + case XK_Rcaron: return Qt::Key_AsciiTilde; + case XK_Uring: return Qt::Key_AsciiTilde; + case XK_Udoubleacute: return Qt::Key_AsciiTilde; + case XK_Tcedilla: return Qt::Key_AsciiTilde; + case XK_racute: return Qt::Key_AsciiTilde; + case XK_abreve: return Qt::Key_AsciiTilde; + case XK_lacute: return Qt::Key_AsciiTilde; + case XK_cacute: return Qt::Key_AsciiTilde; + case XK_ccaron: return Qt::Key_AsciiTilde; + case XK_eogonek: return Qt::Key_AsciiTilde; + case XK_ecaron: return Qt::Key_AsciiTilde; + case XK_dcaron: return Qt::Key_AsciiTilde; + case XK_dstroke: return Qt::Key_AsciiTilde; + case XK_nacute: return Qt::Key_AsciiTilde; + case XK_ncaron: return Qt::Key_AsciiTilde; + case XK_odoubleacute: return Qt::Key_AsciiTilde; + case XK_rcaron: return Qt::Key_AsciiTilde; + case XK_uring: return Qt::Key_AsciiTilde; + case XK_udoubleacute: return Qt::Key_AsciiTilde; + case XK_tcedilla: return Qt::Key_AsciiTilde; + case XK_abovedot: return Qt::Key_AsciiTilde; + case XK_Hstroke: return Qt::Key_AsciiTilde; + case XK_Hcircumflex: return Qt::Key_AsciiTilde; + case XK_Iabovedot: return Qt::Key_AsciiTilde; + case XK_Gbreve: return Qt::Key_AsciiTilde; + case XK_Jcircumflex: return Qt::Key_AsciiTilde; + case XK_hstroke: return Qt::Key_AsciiTilde; + case XK_hcircumflex: return Qt::Key_AsciiTilde; + case XK_idotless: return Qt::Key_AsciiTilde; + case XK_gbreve: return Qt::Key_AsciiTilde; + case XK_jcircumflex: return Qt::Key_AsciiTilde; + case XK_Cabovedot: return Qt::Key_AsciiTilde; + case XK_Ccircumflex: return Qt::Key_AsciiTilde; + case XK_Gabovedot: return Qt::Key_AsciiTilde; + case XK_Gcircumflex: return Qt::Key_AsciiTilde; + case XK_Ubreve: return Qt::Key_AsciiTilde; + case XK_Scircumflex: return Qt::Key_AsciiTilde; + case XK_cabovedot: return Qt::Key_AsciiTilde; + case XK_ccircumflex: return Qt::Key_AsciiTilde; + case XK_gabovedot: return Qt::Key_AsciiTilde; + case XK_gcircumflex: return Qt::Key_AsciiTilde; + case XK_ubreve: return Qt::Key_AsciiTilde; + case XK_scircumflex: return Qt::Key_AsciiTilde; + case XK_kra: return Qt::Key_AsciiTilde; + case XK_kappa: return Qt::Key_AsciiTilde; + case XK_Rcedilla: return Qt::Key_AsciiTilde; + case XK_Itilde: return Qt::Key_AsciiTilde; + case XK_Lcedilla: return Qt::Key_AsciiTilde; + case XK_Emacron: return Qt::Key_AsciiTilde; + case XK_Gcedilla: return Qt::Key_AsciiTilde; + case XK_Tslash: return Qt::Key_AsciiTilde; + case XK_rcedilla: return Qt::Key_AsciiTilde; + case XK_itilde: return Qt::Key_AsciiTilde; + case XK_lcedilla: return Qt::Key_AsciiTilde; + case XK_emacron: return Qt::Key_AsciiTilde; + case XK_gcedilla: return Qt::Key_AsciiTilde; + case XK_tslash: return Qt::Key_AsciiTilde; + case XK_ENG: return Qt::Key_AsciiTilde; + case XK_eng: return Qt::Key_AsciiTilde; + case XK_Amacron: return Qt::Key_AsciiTilde; + case XK_Iogonek: return Qt::Key_AsciiTilde; + case XK_Eabovedot: return Qt::Key_AsciiTilde; + case XK_Imacron: return Qt::Key_AsciiTilde; + case XK_Ncedilla: return Qt::Key_AsciiTilde; + case XK_Omacron: return Qt::Key_AsciiTilde; + case XK_Kcedilla: return Qt::Key_AsciiTilde; + case XK_Uogonek: return Qt::Key_AsciiTilde; + case XK_Utilde: return Qt::Key_AsciiTilde; + case XK_Umacron: return Qt::Key_AsciiTilde; + case XK_amacron: return Qt::Key_AsciiTilde; + case XK_iogonek: return Qt::Key_AsciiTilde; + case XK_eabovedot: return Qt::Key_AsciiTilde; + case XK_imacron: return Qt::Key_AsciiTilde; + case XK_ncedilla: return Qt::Key_AsciiTilde; + case XK_omacron: return Qt::Key_AsciiTilde; + case XK_kcedilla: return Qt::Key_AsciiTilde; + case XK_uogonek: return Qt::Key_AsciiTilde; + case XK_utilde: return Qt::Key_AsciiTilde; + case XK_umacron: return Qt::Key_AsciiTilde; + case XK_Wcircumflex: return Qt::Key_AsciiTilde; + case XK_wcircumflex: return Qt::Key_AsciiTilde; + case XK_Ycircumflex: return Qt::Key_AsciiTilde; + case XK_ycircumflex: return Qt::Key_AsciiTilde; + case XK_Babovedot: return Qt::Key_AsciiTilde; + case XK_babovedot: return Qt::Key_AsciiTilde; + case XK_Dabovedot: return Qt::Key_AsciiTilde; + case XK_dabovedot: return Qt::Key_AsciiTilde; + case XK_Fabovedot: return Qt::Key_AsciiTilde; + case XK_fabovedot: return Qt::Key_AsciiTilde; + case XK_Mabovedot: return Qt::Key_AsciiTilde; + case XK_mabovedot: return Qt::Key_AsciiTilde; + case XK_Pabovedot: return Qt::Key_AsciiTilde; + case XK_pabovedot: return Qt::Key_AsciiTilde; + case XK_Sabovedot: return Qt::Key_AsciiTilde; + case XK_sabovedot: return Qt::Key_AsciiTilde; + case XK_Tabovedot: return Qt::Key_AsciiTilde; + case XK_tabovedot: return Qt::Key_AsciiTilde; + case XK_Wgrave: return Qt::Key_AsciiTilde; + case XK_wgrave: return Qt::Key_AsciiTilde; + case XK_Wacute: return Qt::Key_AsciiTilde; + case XK_wacute: return Qt::Key_AsciiTilde; + case XK_Wdiaeresis: return Qt::Key_AsciiTilde; + case XK_wdiaeresis: return Qt::Key_AsciiTilde; + case XK_Ygrave: return Qt::Key_AsciiTilde; + case XK_ygrave: return Qt::Key_AsciiTilde; + case XK_OE: return Qt::Key_AsciiTilde; + case XK_oe: return Qt::Key_AsciiTilde; + case XK_Ydiaeresis: return Qt::Key_AsciiTilde;*/ + default: + qDebug() << "Unknown Key"; + } + qDebug() << " -- Simple Qt Map:" << (Qt::Key)(symbol); + qDebug() << " -- Key Sequence Map:" << QKeySequence(symbol); + qDebug() << " - Not implemented yet"; + return Qt::Key_unknown; +} + +NativeWindowSystem::MouseButton NativeWindowSystem::MouseToQt(int keycode){ + switch(keycode){ + case 1: + return NativeWindowSystem::LeftButton; + case 3: + return NativeWindowSystem::RightButton; + case 2: + return NativeWindowSystem::MidButton; + case 4: + return NativeWindowSystem::WheelUp; + case 5: + return NativeWindowSystem::WheelDown; + case 6: + return NativeWindowSystem::WheelLeft; + case 7: + return NativeWindowSystem::WheelRight; + case 8: + return NativeWindowSystem::BackButton; //Not sure if this is correct yet (1/27/17) + case 9: + return NativeWindowSystem::ForwardButton; //Not sure if this is correct yet (1/27/17) + default: + return NativeWindowSystem::NoButton; + } +} diff --git a/src-qt5/core/libLumina/NativeWindow.cpp b/src-qt5/core/libLumina/NativeWindow.cpp index 97131b52..94d39cb7 100644 --- a/src-qt5/core/libLumina/NativeWindow.cpp +++ b/src-qt5/core/libLumina/NativeWindow.cpp @@ -6,59 +6,96 @@ //=========================================== #include "NativeWindow.h" +#include <QDebug> + // === PUBLIC === NativeWindow::NativeWindow(WId id) : QObject(){ winid = id; - WIN = QWindow::fromWinId(winid); + frameid = 0; + dmgID = 0; } NativeWindow::~NativeWindow(){ hash.clear(); - //WIN->deleteLater(); //This class only deals with Native windows which were created outside the app - they need to be cleaned up outside the app too +} + +void NativeWindow::addFrameWinID(WId fid){ + frameid = fid; +} + +void NativeWindow::addDamageID(unsigned int dmg){ + dmgID = dmg; +} + +bool NativeWindow::isRelatedTo(WId tmp){ + return (relatedTo.contains(tmp) || winid == tmp || frameid == tmp); } WId NativeWindow::id(){ return winid; } -QWindow* NativeWindow::window(){ - return WIN; +WId NativeWindow::frameId(){ + return frameid; +} + +unsigned int NativeWindow::damageId(){ + return dmgID; } QVariant NativeWindow::property(NativeWindow::Property prop){ if(hash.contains(prop)){ return hash.value(prop); } + else if(prop == NativeWindow::RelatedWindows){ return QVariant::fromValue(relatedTo); } return QVariant(); //null variant } -void NativeWindow::setProperty(NativeWindow::Property prop, QVariant val){ - if(prop == NativeWindow::None || hash.value(prop)==val){ return; } - hash.insert(prop, val); +void NativeWindow::setProperty(NativeWindow::Property prop, QVariant val, bool force){ + if(prop == NativeWindow::RelatedWindows){ relatedTo = val.value< QList<WId> >(); } + else if(prop == NativeWindow::None || (!force && hash.value(prop)==val)){ return; } + else{ hash.insert(prop, val); } emit PropertiesChanged(QList<NativeWindow::Property>() << prop, QList<QVariant>() << val); } -void NativeWindow::setProperties(QList<NativeWindow::Property> props, QList<QVariant> vals){ +void NativeWindow::setProperties(QList<NativeWindow::Property> props, QList<QVariant> vals, bool force){ for(int i=0; i<props.length(); i++){ - if(i>=vals.length()){ props.removeAt(i); i--; continue; } //no corresponding value for this propertu - if(props[i] == NativeWindow::None || (hash.value(props[i]) == vals[i]) ){ props.removeAt(i); vals.removeAt(i); i--; continue; } //Invalid property or identical value + if(i>=vals.length()){ props.removeAt(i); i--; continue; } //no corresponding value for this property + if(props[i] == NativeWindow::None || (!force && (hash.value(props[i]) == vals[i])) ){ props.removeAt(i); vals.removeAt(i); i--; continue; } //Invalid property or identical value hash.insert(props[i], vals[i]); } emit PropertiesChanged(props, vals); } -void NativeWindow::requestProperty(NativeWindow::Property prop, QVariant val){ - if(prop == NativeWindow::None || hash.value(prop)==val ){ return; } +void NativeWindow::requestProperty(NativeWindow::Property prop, QVariant val, bool force){ + if(prop == NativeWindow::None || prop == NativeWindow::RelatedWindows || (!force && hash.value(prop)==val) ){ return; } emit RequestPropertiesChange(winid, QList<NativeWindow::Property>() << prop, QList<QVariant>() << val); } -void NativeWindow::requestProperties(QList<NativeWindow::Property> props, QList<QVariant> vals){ +void NativeWindow::requestProperties(QList<NativeWindow::Property> props, QList<QVariant> vals, bool force){ //Verify/adjust inputs as needed for(int i=0; i<props.length(); i++){ if(i>=vals.length()){ props.removeAt(i); i--; continue; } //no corresponding value for this property - if(props[i] == NativeWindow::None || hash.value(props[i])==vals[i] ){ props.removeAt(i); vals.removeAt(i); i--; continue; } //Invalid property or identical value + if(props[i] == NativeWindow::None || props[i] == NativeWindow::RelatedWindows || (!force && hash.value(props[i])==vals[i]) ){ props.removeAt(i); vals.removeAt(i); i--; continue; } //Invalid property or identical value + /*if( (props[i] == NativeWindow::Visible || props[i] == NativeWindow::Active) && frameid !=0){ + //These particular properties needs to change the frame - not the window itself + emit RequestPropertiesChange(frameid, QList<NativeWindow::Property>() << props[i], QList<QVariant>() << vals[i]); + props.removeAt(i); vals.removeAt(i); i--; + }*/ } emit RequestPropertiesChange(winid, props, vals); } +QRect NativeWindow::geometry(){ + //Calculate the "full" geometry of the window + frame (if any) + QRect geom( hash.value(NativeWindow::GlobalPos).toPoint(), hash.value(NativeWindow::Size).toSize() ); + //Now adjust the window geom by the frame margins + QList<int> frame = hash.value(NativeWindow::FrameExtents).value< QList<int> >(); //Left,Right,Top,Bottom + qDebug() << "Calculate Geometry:" << geom << frame; + if(frame.length()==4){ + geom = geom.adjusted( -frame[0], -frame[2], frame[1], frame[3] ); + } + qDebug() << " - Total:" << geom; + return geom; +} // ==== PUBLIC SLOTS === void NativeWindow::requestClose(){ emit RequestClose(winid); diff --git a/src-qt5/core/libLumina/NativeWindow.h b/src-qt5/core/libLumina/NativeWindow.h index fbdf9e1b..47359b7d 100644 --- a/src-qt5/core/libLumina/NativeWindow.h +++ b/src-qt5/core/libLumina/NativeWindow.h @@ -5,8 +5,8 @@ // See the LICENSE file for full details //=========================================== // This is a container object for setting/announcing changes -// in a native window's properties. -// The WM will usually run the "setProperty" function on this object, +// in a native window's properties. +// The WM will usually run the "setProperty" function on this object, // and any other classes/widgets which watch this window can act appropriatly after-the-fact // Non-WM classes should use the "Request" signals to ask the WM to do something, and listen for changes later //=========================================== @@ -29,10 +29,10 @@ public: enum Action {A_MOVE, A_RESIZE, A_MINIMIZE, A_SHADE, A_STICK, A_MAX_VERT, A_MAX_HORZ, A_FULLSCREEN, A_CHANGE_DESKTOP, A_CLOSE, A_ABOVE, A_BELOW}; enum Property{ /*QVariant Type*/ - None, /*null*/ - MinSize, /*QSize*/ - MaxSize, /*QSize*/ - Size, /*QSize*/ + None=0, /*null*/ + MinSize, /*QSize*/ + MaxSize, /*QSize*/ + Size, /*QSize*/ GlobalPos, /*QPoint*/ Title, /*QString*/ ShortTitle, /*QString*/ @@ -41,31 +41,41 @@ public: Workspace, /*int*/ States, /*QList<NativeWindow::State> : Current state of the window */ WinTypes, /*QList<NativeWindow::Type> : Current type of window (typically does not change)*/ - WinActions, /*QList<NativeWindow::Action> : Current actions that the window allows (Managed/set by the WM)*/ - FrameExtents, /*QList<int> : [Left, Right, Top, Bottom] in pixels */ + WinActions, /*QList<NativeWindow::Action> : Current actions that the window allows (Managed/set by the WM)*/ + FrameExtents, /*QList<int> : [Left, Right, Top, Bottom] in pixels */ + RelatedWindows, /* QList<WId> - better to use the "isRelatedTo(WId)" function instead of reading this directly*/ Active, /*bool*/ Visible /*bool*/ }; static QList<NativeWindow::Property> allProperties(){ - //Return all the available properties (excluding "None") + //Return all the available properties (excluding "None" and "FrameExtents" (WM control only) ) QList<NativeWindow::Property> props; props << MinSize << MaxSize << Size << GlobalPos << Title << ShortTitle << Icon << Name << Workspace \ - << States << WinTypes << WinActions << Active << Visible; + << States << WinTypes << WinActions << RelatedWindows << Active << Visible; return props; }; NativeWindow(WId id); ~NativeWindow(); + void addFrameWinID(WId); + void addDamageID(unsigned int); + bool isRelatedTo(WId); + WId id(); - QWindow* window(); + WId frameId(); + unsigned int damageId(); + + //QWindow* window(); QVariant property(NativeWindow::Property); - void setProperty(NativeWindow::Property, QVariant); - void setProperties(QList<NativeWindow::Property>, QList<QVariant>); - void requestProperty(NativeWindow::Property, QVariant); - void requestProperties(QList<NativeWindow::Property>, QList<QVariant>); + void setProperty(NativeWindow::Property, QVariant, bool force = false); + void setProperties(QList<NativeWindow::Property>, QList<QVariant>, bool force = false); + void requestProperty(NativeWindow::Property, QVariant, bool force = false); + void requestProperties(QList<NativeWindow::Property>, QList<QVariant>, bool force = false); + + QRect geometry(); //this returns the "full" geometry of the window (window + frame) public slots: void requestClose(); //ask the app to close the window (may/not depending on activity) @@ -74,8 +84,10 @@ public slots: private: QHash <NativeWindow::Property, QVariant> hash; - QWindow *WIN; - WId winid; + //QWindow *WIN; + WId winid, frameid; + QList<WId> relatedTo; + unsigned int dmgID; signals: //General Notifications @@ -83,15 +95,23 @@ signals: void RequestPropertiesChange(WId, QList<NativeWindow::Property>, QList<QVariant>); void WindowClosed(WId); void WindowNotResponding(WId); //will be sent out if a window does not respond to a ping request + void VisualChanged(); //Action Requests (not automatically emitted - typically used to ask the WM to do something) //Note: "WId" should be the NativeWindow id() void RequestClose(WId); //Close the window - void RequestKill(WId); //Kill the window/app (usually from being unresponsive) + void RequestKill(WId); //Kill the window/app (usually from being unresponsive) void RequestPing(WId); //Verify that the window is still active (such as not closing after a request - + void RequestReparent(WId, WId, QPoint); //client window, frame window, relative origin point in frame // System Tray Icon Embed/Unembed Requests //void RequestEmbed(WId, QWidget*); //void RequestUnEmbed(WId, QWidget*); }; + +// Declare the enumerations as Qt MetaTypes +Q_DECLARE_METATYPE(NativeWindow::Type); +Q_DECLARE_METATYPE(NativeWindow::Action); +Q_DECLARE_METATYPE(NativeWindow::State); +Q_DECLARE_METATYPE(NativeWindow::Property); + #endif diff --git a/src-qt5/core/libLumina/NativeWindow.pri b/src-qt5/core/libLumina/NativeWindow.pri index a5715287..c2ac0137 100644 --- a/src-qt5/core/libLumina/NativeWindow.pri +++ b/src-qt5/core/libLumina/NativeWindow.pri @@ -1,12 +1,17 @@ # Files QT *= x11extras -LIBS *= -lc -lxcb -lxcb-ewmh -lxcb-icccm -lxcb-image -lxcb-composite -lxcb-damage -lxcb-util -lXdamage +LIBS *= -lc -lxcb -lxcb-ewmh -lxcb-icccm -lxcb-image -lxcb-composite -lxcb-damage -lxcb-util -lxcb-keysyms -lXdamage SOURCES *= $${PWD}/NativeWindow.cpp \ - $${PWD}/NativeWindowSystem.cpp + $${PWD}/NativeWindowSystem.cpp \ + $${PWD}/NativeKeyToQt.cpp \ + $${PWD}/NativeEventFilter.cpp \ + $${PWD}/NativeEmbedWidget.cpp HEADERS *= $${PWD}/NativeWindow.h \ - $${PWD}/NativeWindowSystem.h + $${PWD}/NativeWindowSystem.h \ + $${PWD}/NativeEventFilter.h \ + $${PWD}/NativeEmbedWidget.h INCLUDEPATH *= $${PWD} diff --git a/src-qt5/core/libLumina/NativeWindowSystem.cpp b/src-qt5/core/libLumina/NativeWindowSystem.cpp index 36a0b7f0..e0f3fe91 100644 --- a/src-qt5/core/libLumina/NativeWindowSystem.cpp +++ b/src-qt5/core/libLumina/NativeWindowSystem.cpp @@ -14,6 +14,10 @@ #include <QDebug> #include <QApplication> #include <QScreen> +#include <QFont> +#include <QFontMetrics> +#include <QKeySequence> + //XCB Library includes #include <xcb/xcb.h> @@ -48,6 +52,22 @@ XCB_EVENT_MASK_FOCUS_CHANGE | \ XCB_EVENT_MASK_ENTER_WINDOW) +#define NORMAL_WIN_EVENT_MASK (XCB_EVENT_MASK_BUTTON_PRESS | \ + XCB_EVENT_MASK_BUTTON_RELEASE | \ + XCB_EVENT_MASK_POINTER_MOTION | \ + XCB_EVENT_MASK_BUTTON_MOTION | \ + XCB_EVENT_MASK_EXPOSURE | \ + XCB_EVENT_MASK_STRUCTURE_NOTIFY | \ + XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT | \ + XCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY | \ + XCB_EVENT_MASK_ENTER_WINDOW| \ + XCB_EVENT_MASK_PROPERTY_CHANGE) + +inline void registerClientEvents(WId id){ + uint32_t value_list[1] = {NORMAL_WIN_EVENT_MASK}; + xcb_change_window_attributes(QX11Info::connection(), id, XCB_CW_EVENT_MASK, value_list); +} + //Internal XCB private objects class class NativeWindowSystem::p_objects{ public: @@ -58,15 +78,21 @@ public: //Functions for setting up these objects as needed bool init_ATOMS(){ + xcb_intern_atom_cookie_t *cookie = xcb_ewmh_init_atoms(QX11Info::connection(), &EWMH); + if(!xcb_ewmh_init_atoms_replies(&EWMH, cookie, NULL) ){ + qDebug() << "Error with XCB atom initializations"; + return false; + } + QStringList atoms; - atoms << "WM_TAKE_FOCUS" << "WM_DELETE_WINDOW" << "WM_PROTOCOLS" - << "WM_CHANGE_STATE" << "_NET_SYSTEM_TRAY_OPCODE" << "_NET_SYSTEM_TRAY_ORIENTATION" + atoms << "WM_TAKE_FOCUS" << "WM_DELETE_WINDOW" << "WM_PROTOCOLS" << "_NET_WM_WINDOW_OPACITY" + << "WM_CHANGE_STATE" << "_NET_SYSTEM_TRAY_OPCODE" << "_NET_SYSTEM_TRAY_ORIENTATION" << "_XEMBED" << "_NET_SYSTEM_TRAY_VISUAL" << QString("_NET_SYSTEM_TRAY_S%1").arg(QString::number(QX11Info::appScreen())); //Create all the requests for the atoms QList<xcb_intern_atom_reply_t*> reply; for(int i=0; i<atoms.length(); i++){ reply << xcb_intern_atom_reply(QX11Info::connection(), \ - xcb_intern_atom(QX11Info::connection(), 0, atoms[i].length(), atoms[i].toLocal8Bit()), NULL); + xcb_intern_atom(QX11Info::connection(), 0, atoms[i].length(), atoms[i].toLocal8Bit()), NULL); } //Now evaluate all the requests and save the atoms for(int i=0; i<reply.length(); i++){ //NOTE: this will always be the same length as the "atoms" list @@ -81,9 +107,19 @@ public: return (ATOMS.keys().length() == atoms.length()); } + WId getTransientFor(WId win){ + xcb_get_property_cookie_t cookie = xcb_icccm_get_wm_transient_for_unchecked(QX11Info::connection(), win); + xcb_window_t trans; + if(1!= xcb_icccm_get_wm_transient_for_reply(QX11Info::connection(), cookie, &trans, NULL) ){ + return win; //error in fetching transient window ID (or none found) + }else{ + return trans; + } +} + bool register_wm(){ uint32_t value_list[1] = {ROOT_WIN_EVENT_MASK}; - xcb_generic_error_t *status = xcb_request_check( QX11Info::connection(), xcb_change_window_attributes_checked(QX11Info::connection(), root_window, XCB_CW_EVENT_MASK, value_list)); + xcb_generic_error_t *status = xcb_request_check( QX11Info::connection(), xcb_change_window_attributes_checked(QX11Info::connection(), root_window, XCB_CW_EVENT_MASK, value_list)); if(status!=0){ return false; } uint32_t params[] = {1}; wm_window = xcb_generate_id(QX11Info::connection()); //need a new ID @@ -97,7 +133,7 @@ public: //Also set this property on the child window (pointing to itself) xcb_ewmh_set_supporting_wm_check(&EWMH, wm_window, wm_window); //Now also setup the root event mask on the wm_window - status = xcb_request_check( QX11Info::connection(), xcb_change_window_attributes_checked(QX11Info::connection(), wm_window, XCB_CW_EVENT_MASK, value_list)); + status = xcb_request_check( QX11Info::connection(), xcb_change_window_attributes_checked(QX11Info::connection(), wm_window, XCB_CW_EVENT_MASK, value_list)); if(status!=0){ return false; } return true; } @@ -144,18 +180,18 @@ public: xcb_visualtype_t *type = xcb_aux_find_visual_by_attrs(root_screen, XCB_VISUAL_CLASS_TRUE_COLOR, 32); if(type!=0){ xcb_change_property(QX11Info::connection(), XCB_PROP_MODE_REPLACE, tray_window, \ - ATOMS.value("_NET_SYSTEM_TRAY_VISUAL"), XCB_ATOM_VISUALID, 32, 1, &type->visual_id); + ATOMS.value("_NET_SYSTEM_TRAY_VISUAL"), XCB_ATOM_VISUALID, 32, 1, &type->visual_id); }else{ qWarning() << " - Could not set TrueColor visual for system tray"; } - + //Finally, send out an X event letting others know that the system tray is up and running xcb_client_message_event_t event; event.response_type = XCB_CLIENT_MESSAGE; event.format = 32; event.window = root_screen->root; event.type = EWMH.MANAGER; //MANAGER atom - event.data.data32[0] = XCB_TIME_CURRENT_TIME; //CurrentTime; + event.data.data32[0] = XCB_TIME_CURRENT_TIME; //CurrentTime; event.data.data32[1] = _NET_SYSTEM_TRAY_S; //_NET_SYSTEM_TRAY_S atom event.data.data32[2] = tray_window; event.data.data32[3] = 0; @@ -175,6 +211,7 @@ public: NativeWindowSystem::NativeWindowSystem() : QObject(){ obj = 0; pingTimer = 0; + screenLocked = false; } NativeWindowSystem::~NativeWindowSystem(){ @@ -200,7 +237,12 @@ bool NativeWindowSystem::start(){ if( !obj->init_ATOMS() ){ return false; } } //Done with private object init bool ok = obj->register_wm(); - if(ok){ ok = obj->start_system_tray(); } + if(ok){ + setRoot_supportedActions(); + ok = obj->start_system_tray(); + }else{ + qWarning() << "Could not register the WM"; + } return ok; } @@ -208,37 +250,30 @@ void NativeWindowSystem::stop(){ } -//Small simplification functions -Qt::Key NativeWindowSystem::KeycodeToQt(int keycode){ - return Qt::Key_unknown; -} - -NativeWindowSystem::MouseButton NativeWindowSystem::MouseToQt(int keycode){ - switch(keycode){ - case 1: - return NativeWindowSystem::LeftButton; - case 3: - return NativeWindowSystem::RightButton; - case 2: - return NativeWindowSystem::MidButton; - case 4: - return NativeWindowSystem::WheelUp; - case 5: - return NativeWindowSystem::WheelDown; - case 6: - return NativeWindowSystem::WheelLeft; - case 7: - return NativeWindowSystem::WheelRight; - case 8: - return NativeWindowSystem::BackButton; //Not sure if this is correct yet (1/27/17) - case 9: - return NativeWindowSystem::ForwardButton; //Not sure if this is correct yet (1/27/17) - default: - return NativeWindowSystem::NoButton; +// === PRIVATE === +NativeWindow* NativeWindowSystem::findWindow(WId id, bool checkRelated){ + //qDebug() << "Find Window:" << id; + for(int i=0; i<NWindows.length(); i++){ + if(id==NWindows[i]->id() || id==NWindows[i]->frameId() ){ return NWindows[i]; } + //if(checkRelated && NWindows[i]->isRelatedTo(id)){ return NWindows[i]; } + //else if(!checkRelated && id==NWindows[i]->id()){ return NWindows[i]; } + } + //Check to see if this is a transient for some other window + if(checkRelated){ + //WId tid = obj->getTransientFor(id); + //if(tid!=id){ return findWindow(tid, checkRelated); } //call it recursively as needed + //qDebug() << " -- Could not find Window!"; } + return 0; +} + +NativeWindow* NativeWindowSystem::findTrayWindow(WId id){ + for(int i=0; i<TWindows.length(); i++){ + if(TWindows[i]->isRelatedTo(id)){ return TWindows[i]; } + } + return 0; } -// === PRIVATE === void NativeWindowSystem::UpdateWindowProperties(NativeWindow* win, QList< NativeWindow::Property > props){ //Put the properties in logical groups as appropriate (some XCB calls return multiple properties) if(props.contains(NativeWindow::Title)){ @@ -255,7 +290,7 @@ void NativeWindowSystem::UpdateWindowProperties(NativeWindow* win, QList< Native if(name.isEmpty()){ //_NET_WM_VISIBLE_NAME xcb_get_property_cookie_t cookie = xcb_ewmh_get_wm_visible_name_unchecked(&obj->EWMH, win->id()); - if(cookie.sequence != 0){ + if(cookie.sequence != 0){ xcb_ewmh_get_utf8_strings_reply_t data; if( 1 == xcb_ewmh_get_wm_visible_name_reply(&obj->EWMH, cookie, &data, NULL) ){ name = QString::fromUtf8(data.strings, data.strings_len); @@ -271,7 +306,7 @@ void NativeWindowSystem::UpdateWindowProperties(NativeWindow* win, QList< Native xcb_icccm_get_text_property_reply_wipe(&reply); } } - win->setProperty(NativeWindow::Name, name); + win->setProperty(NativeWindow::Title, name); } //end TITLE property if(props.contains(NativeWindow::ShortTitle)){ @@ -288,7 +323,7 @@ void NativeWindowSystem::UpdateWindowProperties(NativeWindow* win, QList< Native if(name.isEmpty()){ //_NET_WM_VISIBLE_ICON_NAME xcb_get_property_cookie_t cookie = xcb_ewmh_get_wm_visible_icon_name_unchecked(&obj->EWMH, win->id()); - if(cookie.sequence != 0){ + if(cookie.sequence != 0){ xcb_ewmh_get_utf8_strings_reply_t data; if( 1 == xcb_ewmh_get_wm_visible_icon_name_reply(&obj->EWMH, cookie, &data, NULL) ){ name = QString::fromUtf8(data.strings, data.strings_len); @@ -337,7 +372,7 @@ void NativeWindowSystem::UpdateWindowProperties(NativeWindow* win, QList< Native uint* dat = iter.data; //dat+=2; //remember the first 2 element offset for(int i=0; i<image.byteCount()/4; ++i, ++dat){ - ((uint*)image.bits())[i] = *dat; + ((uint*)image.bits())[i] = *dat; } icon.addPixmap(QPixmap::fromImage(image)); //layer this pixmap onto the icon //Now see if there are any more icons available @@ -350,7 +385,7 @@ void NativeWindowSystem::UpdateWindowProperties(NativeWindow* win, QList< Native win->setProperty(NativeWindow::Icon, icon); } //end ICON property - if(props.contains(NativeWindow::MinSize) || props.contains(NativeWindow::MaxSize) + if(props.contains(NativeWindow::MinSize) || props.contains(NativeWindow::MaxSize) || props.contains(NativeWindow::Size) || props.contains(NativeWindow::GlobalPos) ){ //Try the ICCCM "Normal Hints" structure first (newer spec?) xcb_get_property_cookie_t cookie = xcb_icccm_get_wm_normal_hints_unchecked(QX11Info::connection(), win->id()); @@ -401,41 +436,244 @@ void NativeWindowSystem::UpdateWindowProperties(NativeWindow* win, QList< Native }*/ win->setProperty(NativeWindow::Workspace, wkspace); } + if(props.contains(NativeWindow::FrameExtents)){ + //Just assign default values to this - need to automate it later + //win->setProperty(NativeWindow::FrameExtents, QVariant::fromValue<QList<int> >(QList<int>() << 5 << 5 << 5+QFontMetrics(QFont()).height() << 5) ); + } + if(props.contains(NativeWindow::RelatedWindows)){ + WId orig = win->id(); + WId tid = obj->getTransientFor(orig); + QList<WId> list; + while(tid != orig){ + list << tid; + orig = tid; + tid = obj->getTransientFor(orig); + } + win->setProperty(NativeWindow::RelatedWindows, QVariant::fromValue(list)); + } + if(props.contains(NativeWindow::Visible)){ + xcb_get_window_attributes_reply_t *attr = xcb_get_window_attributes_reply(QX11Info::connection(), xcb_get_window_attributes(QX11Info::connection(), win->id()) , NULL); + if(attr != 0){ + win->setProperty(NativeWindow::Visible, attr->map_state == XCB_MAP_STATE_VIEWABLE); + free(attr); + } + } + if(props.contains(NativeWindow::WinTypes)){ + QList< NativeWindow::Type> types; + types << NativeWindow::T_NORMAL; //make this load appropriately later + win->setProperty(NativeWindow::WinTypes, QVariant::fromValue< QList<NativeWindow::Type> >(types) ); + } } +void NativeWindowSystem::ChangeWindowProperties(NativeWindow* win, QList< NativeWindow::Property > props, QList<QVariant> vals){ + if(props.length() == 0 || vals.length()!=props.length() || win ==0 ){ return; } + //qDebug() << "Change Window Properties:" << props << vals; + if(props.contains(NativeWindow::Title)){ + + } + if(props.contains(NativeWindow::ShortTitle)){ + + } + if(props.contains(NativeWindow::Icon)){ + + } + if(props.contains(NativeWindow::Size) || props.contains(NativeWindow::GlobalPos) ){ + xcb_configure_window_value_list_t valList; + valList.x = 0; //Note that this is the relative position - should always be 0,0 relative to the embed widget + valList.y = 0; + QSize sz = win->property(NativeWindow::Size).toSize(); + if(props.contains(NativeWindow::Size)){ + sz = vals[ props.indexOf(NativeWindow::Size) ] .toSize(); + } + valList.width = sz.width(); + valList.height = sz.height(); + /*if(props.contains(NativeWindow::GlobalPos)){ + QPoint pt = vals[ props.indexOf(NativeWindow::GlobalPos) ] .toPoint(); + valList.x = pt.x(); + valList.y = pt.y(); + }else{ + valList.x = win->property(NativeWindow::GlobalPos).toPoint().x(); + valList.y = win->property(NativeWindow::GlobalPos).toPoint().y(); + }*/ + uint16_t mask = 0; + mask = mask | XCB_CONFIG_WINDOW_WIDTH | XCB_CONFIG_WINDOW_HEIGHT | XCB_CONFIG_WINDOW_X | XCB_CONFIG_WINDOW_Y; + qDebug() << "Configure window Geometry:" << sz; + xcb_configure_window_aux(QX11Info::connection(), win->id(), mask, &valList); + } + if(props.contains(NativeWindow::Name)){ + + } + if(props.contains(NativeWindow::Workspace)){ + int num = vals[ props.indexOf(NativeWindow::Workspace) ].toInt(); + xcb_ewmh_set_wm_desktop(&obj->EWMH, win->id(), (num<0 ? 0xFFFFFFFF : qAbs(num) ) ); + } + if(props.contains(NativeWindow::RelatedWindows)){ + + } + if(props.contains(NativeWindow::Visible)){ + //qDebug() << "Check Window Visibility:" << vals[ props.indexOf(NativeWindow::Visible) ]; + if( vals[ props.indexOf(NativeWindow::Visible) ].toBool() ){ + //qDebug() << " - Map it!"; + xcb_map_window(QX11Info::connection(), win->id()); + }else{ + //qDebug() << " - Unmap it!"; + xcb_unmap_window(QX11Info::connection(), win->id()); + } + } + if(props.contains(NativeWindow::Active)){ + //Only one window can be "Active" at a time - so only do anything if this window wants to be active + if(vals[props.indexOf(NativeWindow::Active)].toBool() ){ + xcb_ewmh_set_active_window(&obj->EWMH, QX11Info::appScreen(), (win->frameId()==0 ?win->id() : win->frameId())); + //Also send the active window a message to take input focus + //Send the window a WM_TAKE_FOCUS message + xcb_client_message_event_t event; + event.response_type = XCB_CLIENT_MESSAGE; + event.format = 32; + event.window = win->id(); + event.type = obj->ATOMS["WM_PROTOCOLS"]; + event.data.data32[0] = obj->ATOMS["WM_TAKE_FOCUS"]; + event.data.data32[1] = XCB_TIME_CURRENT_TIME; //CurrentTime; + event.data.data32[2] = 0; + event.data.data32[3] = 0; + event.data.data32[4] = 0; + + xcb_send_event(QX11Info::connection(), 0, win->id(), XCB_EVENT_MASK_STRUCTURE_NOTIFY | XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT, (const char *) &event); + xcb_flush(QX11Info::connection()); + } + } + +} // === PUBLIC SLOTS === -//These are the slots which are only used by the desktop system itself or the NativeWindowEventFilter -void NativeWindowSystem::RegisterVirtualRoot(WId){ +//These are the slots which are typically only used by the desktop system itself or the NativeEventFilter +void NativeWindowSystem::RegisterVirtualRoot(WId id){ + //Convert to XCB array + xcb_window_t array[1]; + array[0] = id; + //Set the property + xcb_ewmh_set_virtual_roots(&obj->EWMH, QX11Info::appScreen(), 1, array); +} + +void NativeWindowSystem::setRoot_supportedActions(){ +//NET_WM standards (ICCCM implied - no standard way to list those) + xcb_atom_t list[] = {obj->EWMH._NET_WM_NAME, + obj->EWMH._NET_WM_ICON, + obj->EWMH._NET_WM_ICON_NAME, + obj->EWMH._NET_WM_DESKTOP, + obj->ATOMS["_NET_WM_WINDOW_OPACITY"], + /*_NET_WINDOW_TYPE (and all the various types - 15 in total*/ + obj->EWMH._NET_WM_WINDOW_TYPE, obj->EWMH._NET_WM_WINDOW_TYPE_DESKTOP, obj->EWMH._NET_WM_WINDOW_TYPE_DOCK, + obj->EWMH._NET_WM_WINDOW_TYPE_TOOLBAR, obj->EWMH._NET_WM_WINDOW_TYPE_MENU, obj->EWMH._NET_WM_WINDOW_TYPE_UTILITY, + obj->EWMH._NET_WM_WINDOW_TYPE_SPLASH, obj->EWMH._NET_WM_WINDOW_TYPE_DIALOG, obj->EWMH._NET_WM_WINDOW_TYPE_NORMAL, + obj->EWMH._NET_WM_WINDOW_TYPE_DROPDOWN_MENU, obj->EWMH._NET_WM_WINDOW_TYPE_POPUP_MENU, obj->EWMH._NET_WM_WINDOW_TYPE_TOOLTIP, + obj->EWMH._NET_WM_WINDOW_TYPE_NOTIFICATION, obj->EWMH._NET_WM_WINDOW_TYPE_COMBO, obj->EWMH._NET_WM_WINDOW_TYPE_DND, + }; + xcb_ewmh_set_supported(&obj->EWMH, QX11Info::appScreen(), 20,list); +} +void NativeWindowSystem::setRoot_numberOfWorkspaces(QStringList names){ + if(names.isEmpty()){ names << "one"; } + //First set the overall number of workspaces + xcb_ewmh_set_number_of_desktops(&obj->EWMH, QX11Info::appScreen(), names.length()); + //Now set the names for the workspaces + //EWMH LIBRARY BROKEN - appears to be a mismatch in the function header (looking for a single char array, instead of a list of char arrays) + // Ken Moore - 6/27/17 + /* + char *array[ names.length() ]; + for(int i=0; i<names.length(); i++){array[i] = names[i].toUtf8().data(); } //Convert to an array of char arrays + xcb_ewmh_set_desktop_names(&obj->EWMH, QX11Info::appScreen(), names.length(), array); + */ +} + +void NativeWindowSystem::setRoot_currentWorkspace(int num){ + xcb_ewmh_set_current_desktop(&obj->EWMH, QX11Info::appScreen(), num); +} + +void NativeWindowSystem::setRoot_clientList(QList<WId> list, bool stackorder){ + //convert the QList into a generic array + xcb_window_t array[list.length()]; + for(int i=0; i<list.length(); i++){ array[i] = list[i]; } + if(stackorder){ + xcb_ewmh_set_client_list_stacking(&obj->EWMH, QX11Info::appScreen(), list.length(), array); + }else{ + xcb_ewmh_set_client_list(&obj->EWMH, QX11Info::appScreen(), list.length(), array); + } +} + +void NativeWindowSystem::setRoot_desktopGeometry(QRect geom){ + //This one is a combo function + // This will set the "DESKTOP_VIEWPORT" property (point) + // as well as the "DESKTOP_GEOMETRY" property (size) + //Turn the QList into xcb_ewmh_coordinates_t* + xcb_ewmh_coordinates_t array[1]; + array[0].x=geom.x(); array[0].y=geom.y(); + //Now set the property + xcb_ewmh_set_desktop_viewport(&obj->EWMH, QX11Info::appScreen(), 1, array); + xcb_ewmh_set_desktop_geometry(&obj->EWMH, QX11Info::appScreen(), geom.width(), geom.height()); +} + +void NativeWindowSystem::setRoot_desktopWorkarea(QList<QRect> list){ + //Convert to the XCB/EWMH data structures + xcb_ewmh_geometry_t array[list.length()]; + for(int i=0; i<list.length(); i++){ + array[i].x = list[i].x(); array[i].y = list[i].y(); + array[i].width = list[i].width(); array[i].height = list[i].height(); + } + //Now set the property + xcb_ewmh_set_workarea(&obj->EWMH, QX11Info::appScreen(), list.length(), array); +} + +void NativeWindowSystem::setRoot_activeWindow(WId win){ + xcb_ewmh_set_active_window(&obj->EWMH, QX11Info::appScreen(), win); + //Also send the active window a message to take input focus + //Send the window a WM_TAKE_FOCUS message + xcb_client_message_event_t event; + event.response_type = XCB_CLIENT_MESSAGE; + event.format = 32; + event.window = win; + event.type = obj->ATOMS["WM_PROTOCOLS"]; + event.data.data32[0] = obj->ATOMS["WM_TAKE_FOCUS"]; + event.data.data32[1] = XCB_TIME_CURRENT_TIME; //CurrentTime; + event.data.data32[2] = 0; + event.data.data32[3] = 0; + event.data.data32[4] = 0; + + xcb_send_event(QX11Info::connection(), 0, win, XCB_EVENT_MASK_STRUCTURE_NOTIFY | XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT, (const char *) &event); + xcb_flush(QX11Info::connection()); +} + +int NativeWindowSystem::currentWorkspace(){ + xcb_get_property_cookie_t cookie = xcb_ewmh_get_current_desktop_unchecked(&obj->EWMH, QX11Info::appScreen()); + uint32_t num = 0; + if(1==xcb_ewmh_get_current_desktop_reply(&obj->EWMH, cookie, &num, NULL) ){ + return num; + }else{ + return 0; + } } //NativeWindowEventFilter interactions void NativeWindowSystem::NewWindowDetected(WId id){ //Make sure this can be managed first - if(findWindow(id) != 0){ return; } //already managed + if(findWindow(id, false) != 0){ qDebug() << "Window Already Managed!!!!"; findWindow(id,false)->setProperty(NativeWindow::Visible, true, true); return; } //already managed xcb_get_window_attributes_cookie_t cookie = xcb_get_window_attributes(QX11Info::connection(), id); xcb_get_window_attributes_reply_t *attr = xcb_get_window_attributes_reply(QX11Info::connection(), cookie, NULL); if(attr == 0){ return; } //could not get attributes of window if(attr->override_redirect){ free(attr); return; } //window has override redirect set (do not manage) free(attr); - //Register for events from this window - #define NORMAL_WIN_EVENT_MASK (XCB_EVENT_MASK_BUTTON_PRESS | \ - XCB_EVENT_MASK_BUTTON_RELEASE | \ - XCB_EVENT_MASK_POINTER_MOTION | \ - XCB_EVENT_MASK_BUTTON_MOTION | \ - XCB_EVENT_MASK_EXPOSURE | \ - XCB_EVENT_MASK_STRUCTURE_NOTIFY | \ - XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT | \ - XCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY | \ - XCB_EVENT_MASK_ENTER_WINDOW) - - uint32_t value_list[1] = {NORMAL_WIN_EVENT_MASK}; - xcb_change_window_attributes(QX11Info::connection(), id, XCB_CW_EVENT_MASK, value_list); //Now go ahead and create/populate the container for this window NativeWindow *win = new NativeWindow(id); + //Register for events from this window + registerClientEvents(win->id()); NWindows << win; UpdateWindowProperties(win, NativeWindow::allProperties()); + qDebug() << "New Window [& associated ID's]:" << win->id() << win->property(NativeWindow::RelatedWindows); + //Now setup the connections with this window + connect(win, SIGNAL(RequestClose(WId)), this, SLOT(RequestClose(WId)) ); + connect(win, SIGNAL(RequestKill(WId)), this, SLOT(RequestKill(WId)) ); + connect(win, SIGNAL(RequestPing(WId)), this, SLOT(RequestPing(WId)) ); + connect(win, SIGNAL(RequestReparent(WId, WId, QPoint)), this, SLOT(RequestReparent(WId, WId, QPoint)) ); + connect(win, SIGNAL(RequestPropertiesChange(WId, QList<NativeWindow::Property>, QList<QVariant>)), this, SLOT(RequestPropertiesChange(WId, QList<NativeWindow::Property>, QList<QVariant>)) ); emit NewWindowAvailable(win); } @@ -457,7 +695,7 @@ void NativeWindowSystem::NewTrayWindowDetected(WId id){ XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT | \ XCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY | \ XCB_EVENT_MASK_ENTER_WINDOW) - + uint32_t value_list[1] = {TRAY_WIN_EVENT_MASK}; xcb_change_window_attributes(QX11Info::connection(), id, XCB_CW_EVENT_MASK, value_list); //Now go ahead and create/populate the container for this window @@ -468,30 +706,66 @@ void NativeWindowSystem::NewTrayWindowDetected(WId id){ } void NativeWindowSystem::WindowCloseDetected(WId id){ - NativeWindow *win = findWindow(id); + NativeWindow *win = findWindow(id, false); + qDebug() << "Got Window Closed" << id << win; + //qDebug() << "Old Window List:" << NWindows.length(); if(win!=0){ NWindows.removeAll(win); + //RequestReparent(id, QX11Info::appRootWindow(), QPoint(0,0)); win->emit WindowClosed(id); - win->deleteLater(); + qDebug() << "Visible Window Closed!!!"; + //win->deleteLater(); }else{ win = findTrayWindow(id); if(win!=0){ TWindows.removeAll(win); win->emit WindowClosed(id); - win->deleteLater(); + win->deleteLater(); } } + //qDebug() << " - Now:" << NWindows.length(); } void NativeWindowSystem::WindowPropertyChanged(WId id, NativeWindow::Property prop){ - //NOTE: This is triggered by the NativeWindowEventFilter - not by changes to the NativeWindow objects themselves - NativeWindow *win = findWindow(id); + //NOTE: This is triggered by the NativeEventFilter - not by changes to the NativeWindow objects themselves + NativeWindow *win = findWindow(id, prop!=NativeWindow::Visible); if(win==0){ win = findTrayWindow(id); } if(win!=0){ UpdateWindowProperties(win, QList<NativeWindow::Property>() << prop); } } +void NativeWindowSystem::WindowPropertyChanged(WId id, NativeWindow::Property prop, QVariant val){ + NativeWindow *win = findWindow(id,prop!=NativeWindow::Visible); + if(win==0){ win = findTrayWindow(id); } + if(win!=0){ + win->setProperty(prop, val); + } +} + +void NativeWindowSystem::WindowPropertiesChanged(WId id, QList<NativeWindow::Property> props, QList<QVariant> vals){ + NativeWindow *win = findWindow(id); + if(win==0){ win = findTrayWindow(id); } + if(win!=0){ + for(int i=0; i<props.length() && i<vals.length(); i++){ win->setProperty(props[i], vals[i]); } + } +} + +void NativeWindowSystem::RequestPropertyChange(WId id, NativeWindow::Property prop, QVariant val){ + //This is just a simplified version of the multiple-property function + RequestPropertiesChange(id, QList<NativeWindow::Property>() << prop, QList<QVariant>() << val); +} + +void NativeWindowSystem::RequestPropertiesChange(WId win, QList<NativeWindow::Property> props, QList<QVariant> vals){ + //Find the window object associated with this id + bool istraywin = false; //just in case we care later if it is a tray window or a regular window + NativeWindow *WIN = findWindow(win); + if(WIN==0){ istraywin = true; WIN = findTrayWindow(win); } + if(WIN==0){ return; } //invalid window ID - no longer available + //Now make any changes as needed + ChangeWindowProperties(WIN, props, vals); +} + void NativeWindowSystem::GotPong(WId id){ if(waitingForPong.contains(id)){ waitingForPong.remove(id); @@ -499,56 +773,40 @@ void NativeWindowSystem::GotPong(WId id){ if(waitingForPong.isEmpty() && pingTimer!=0){ pingTimer->stop(); } } -/*void NativeWindowSystem::NewKeyPress(int keycode, WId win){ +void NativeWindowSystem::NewKeyPress(int keycode, WId win){ emit NewInputEvent(); + if(screenLocked){ return; } + Qt::Key key = KeycodeToQt(keycode); + if(key!=Qt::Key_unknown){ emit KeyPressDetected(win, key); } } void NativeWindowSystem::NewKeyRelease(int keycode, WId win){ emit NewInputEvent(); - //Convert the native button code into a Qt keycode - //Qt::Key key = keycode; //TODO - //emit KeyReleaseDetected( key, win); + if(screenLocked){ return; } + Qt::Key key = KeycodeToQt(keycode); + if(key!=Qt::Key_unknown){ emit KeyReleaseDetected(win, key); } } void NativeWindowSystem::NewMousePress(int buttoncode, WId win){ emit NewInputEvent(); - //Convert the native button code into a Qt mouse button code - Qt::MouseButton button; - switch(buttoncode){ - case 1: - button = Qt::LeftButton ; break; - case 2: - button = Qt::MiddleButton ; break; - case 3: - button = Qt::RightButton ; break; - case 4: - button = Qt::LeftButton ; break; - default: - return; //Unhandled button - } - emit MousePressDetected(button, win); + if(screenLocked){ return; } + emit MousePressDetected(win, MouseToQt(buttoncode)); } void NativeWindowSystem::NewMouseRelease(int buttoncode, WId win){ emit NewInputEvent(); - //Convert the native button code into a Qt mouse button code - Qt::MouseButton button; - switch(buttoncode){ - case 1: - button = Qt::LeftButton ; break; - case 2: - button = Qt::MiddleButton ; break; - case 3: - button = Qt::RightButton ; break; - case 4: - button = Qt::LeftButton ; break; - default: - return; //Unhandled button - } - emit MouseReleaseDetected(button, win); -}*/ + if(screenLocked){ return; } + emit MouseReleaseDetected(win, MouseToQt(buttoncode)); +} void NativeWindowSystem::CheckDamageID(WId win){ + for(int i=0; i<NWindows.length(); i++){ + if(NWindows[i]->damageId() == win || NWindows[i]->id() == win || NWindows[i]->frameId()==win){ + NWindows[i]->emit VisualChanged(); + //qDebug() << "Got DAMAGE Event"; + return; + } + } NativeWindow *WIN = findTrayWindow(win); if(WIN!=0){ UpdateWindowProperties(WIN, QList<NativeWindow::Property>() << NativeWindow::Icon); @@ -557,15 +815,6 @@ void NativeWindowSystem::CheckDamageID(WId win){ // === PRIVATE SLOTS === //These are the slots which are built-in and automatically connected when a new NativeWindow is created -void NativeWindowSystem::RequestPropertiesChange(WId win, QList<NativeWindow::Property> props, QList<QVariant> vals){ - //Find the window object associated with this id - bool istraywin = false; //just in case we care later if it is a tray window or a regular window - NativeWindow *WIN = findWindow(win); - if(WIN==0){ istraywin = true; WIN = findTrayWindow(win); } - if(WIN==0){ return; } //invalid window ID - no longer available - //Now make any changes as needed - -} void NativeWindowSystem::RequestClose(WId win){ //Send the window a WM_DELETE_WINDOW message @@ -598,3 +847,53 @@ void NativeWindowSystem::RequestPing(WId win){ } pingTimer->start(); } + +void NativeWindowSystem::RequestReparent(WId win, WId container, QPoint relorigin){ + NativeWindow *WIN = findWindow(win); + if(WIN==0){ return; } //could not find corresponding window structure +//Reparent the window into the container + xcb_reparent_window(QX11Info::connection(), win, container, relorigin.x(), relorigin.y()); + //xcb_map_window(QX11Info::connection(), win); + + //Now send the embed event to the app + //qDebug() << " - send _XEMBED event"; + xcb_client_message_event_t event; + event.response_type = XCB_CLIENT_MESSAGE; + event.format = 32; + event.window = win; + event.type = obj->ATOMS["_XEMBED"]; //_XEMBED + event.data.data32[0] = XCB_TIME_CURRENT_TIME; //CurrentTime; + event.data.data32[1] = 0; //XEMBED_EMBEDDED_NOTIFY + event.data.data32[2] = 0; + event.data.data32[3] = container; //WID of the container + event.data.data32[4] = 0; + + xcb_send_event(QX11Info::connection(), 0, win, XCB_EVENT_MASK_STRUCTURE_NOTIFY | XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT, (const char *) &event); + + //Now setup any redirects and return + //this->SelectInput(win, true); //Notify of structure changes + registerClientEvents(win); + //xcb_composite_redirect_window(QX11Info::connection(), win, XCB_COMPOSITE_REDIRECT_MANUAL); //XCB_COMPOSITE_REDIRECT_[MANUAL/AUTOMATIC]); + + //Now map the window (will be a transparent child of the container) + xcb_map_window(QX11Info::connection(), win); + xcb_map_window(QX11Info::connection(), container); + //Now create/register the damage handler + // -- XCB (Note: The XCB damage registration is completely broken at the moment - 9/15/15, Ken Moore) + // -- Retested 6/29/17 (no change) Ken Moore + //xcb_damage_damage_t dmgID = xcb_generate_id(QX11Info::connection()); //This is a typedef for a 32-bit unsigned integer + //xcb_damage_create(QX11Info::connection(), dmgID, win, XCB_DAMAGE_REPORT_LEVEL_RAW_RECTANGLES); + // -- XLib (Note: This is only used because the XCB routine above does not work - needs to be fixed upstream in XCB itself). + Damage dmgID = XDamageCreate(QX11Info::display(), win, XDamageReportRawRectangles); + WIN->addDamageID( (uint) dmgID); //save this for later + //qDebug() << " - Done"; + //return ( (uint) dmgID ); +} +/* + xcb_reparent_window(QX11Info::connection(), client, parent, relorigin.x(), relorigin.y()); + + //Now ensure that we still get event for these windows + registerClientEvents(client); //make sure we re-do this after reparenting + registerClientEvents(parent); + xcb_map_window(QX11Info::connection(), parent); +}*/ diff --git a/src-qt5/core/libLumina/NativeWindowSystem.h b/src-qt5/core/libLumina/NativeWindowSystem.h index 59e54ca4..97208c2f 100644 --- a/src-qt5/core/libLumina/NativeWindowSystem.h +++ b/src-qt5/core/libLumina/NativeWindowSystem.h @@ -14,6 +14,7 @@ #include "NativeWindow.h" #include <QDateTime> #include <QTimer> +#include <QDebug> class NativeWindowSystem : public QObject{ Q_OBJECT @@ -22,21 +23,11 @@ private: QList<NativeWindow*> TWindows; //Simplifications to find an already-created window object - NativeWindow* findWindow(WId id){ - for(int i=0; i<NWindows.length(); i++){ - if(id==NWindows[i]->id()){ return NWindows[i]; } - } - return 0; - } + NativeWindow* findWindow(WId id, bool checkRelated = true); - NativeWindow* findTrayWindow(WId id){ - for(int i=0; i<TWindows.length(); i++){ - if(id==TWindows[i]->id()){ return TWindows[i]; } - } - return 0; - } + NativeWindow* findTrayWindow(WId id); - //Now define a simple private_objects class so that each implementation + //Now define a simple private_objects class so that each implementation // has a storage container for defining/placing private objects as needed class p_objects; p_objects* obj; @@ -58,12 +49,16 @@ private: } } - // Since some properties may be easier to update in bulk + // Since some properties may be easier to update in bulk // let the native system interaction do them in whatever logical groups are best void UpdateWindowProperties(NativeWindow* win, QList< NativeWindow::Property > props); + void ChangeWindowProperties(NativeWindow* win, QList< NativeWindow::Property > props, QList<QVariant> vals); + + //Generic private variables + bool screenLocked; public: - enum Property{ None, CurrentWorkspace, Workspaces, VirtualRoots, WorkAreas }; + //enum Property{ None, CurrentWorkspace, Workspaces, VirtualRoots, WorkAreas }; enum MouseButton{NoButton, LeftButton, RightButton, MidButton, BackButton, ForwardButton, TaskButton, WheelUp, WheelDown, WheelLeft, WheelRight}; NativeWindowSystem(); @@ -84,11 +79,25 @@ public: public slots: //These are the slots which are typically only used by the desktop system itself or the NativeWindowEventFilter - //RootWindow interactions + //This is called by the lock screen to keep the NWS aware of the current status + // it is **NOT** the function to call for the user to actually lock the session (that is in the screensaver/lockscreen class) + void ScreenLockChanged(bool lock){ + screenLocked = lock; + } + + //Root Window property registrations void RegisterVirtualRoot(WId); + void setRoot_supportedActions(); + void setRoot_numberOfWorkspaces(QStringList names); + void setRoot_currentWorkspace(int); + void setRoot_clientList(QList<WId>, bool stackorder = false); + void setRoot_desktopGeometry(QRect); + void setRoot_desktopWorkarea(QList<QRect>); + void setRoot_activeWindow(WId); + + // - Workspaces + int currentWorkspace(); //void GoToWorkspace(int); - //void RegisterWorkspaces(QStringList); //Names of workspaces, in ascending order - //void RegisterKnownInteractions(); //NativeWindowEventFilter interactions @@ -96,29 +105,33 @@ public slots: void NewTrayWindowDetected(WId); //will automatically create the new NativeWindow object void WindowCloseDetected(WId); //will update the lists and make changes if needed void WindowPropertyChanged(WId, NativeWindow::Property); //will rescan the window and update the object as needed + void WindowPropertyChanged(WId, NativeWindow::Property, QVariant); //will save that property/value to the right object + void WindowPropertiesChanged(WId, QList<NativeWindow::Property>, QList<QVariant>); + void RequestPropertyChange(WId, NativeWindow::Property, QVariant); + void RequestPropertiesChange(WId, QList<NativeWindow::Property>, QList<QVariant>); void GotPong(WId); -/* void NewKeyPress(int keycode, WId win = 0); + void NewKeyPress(int keycode, WId win = 0); void NewKeyRelease(int keycode, WId win = 0); void NewMousePress(int buttoncode, WId win = 0); - void NewMouseRelease(int buttoncode, WId win = 0);*/ + void NewMouseRelease(int buttoncode, WId win = 0); void CheckDamageID(WId); private slots: //These are the slots which are built-in and automatically connected when a new NativeWindow is created - void RequestPropertiesChange(WId, QList<NativeWindow::Property>, QList<QVariant>); void RequestClose(WId); void RequestKill(WId); void RequestPing(WId); + void RequestReparent(WId, WId, QPoint); //client, parent, relative origin point in parent signals: void NewWindowAvailable(NativeWindow*); void NewTrayWindowAvailable(NativeWindow*); void NewInputEvent(); //a mouse or keypress was detected (lock-state independent); - void KeyPressDetected(Qt::Key, WId); //only emitted if lockstate = false - void KeyReleaseDetected(Qt::Key, WId); //only emitted if lockstate = false - void MousePressDetected(Qt::MouseButton, WId); //only emitted if lockstate = false - void MouseReleaseDetected(Qt::MouseButton, WId); //only emitted if lockstate = false + void KeyPressDetected(WId, Qt::Key); //only emitted if lockstate = false + void KeyReleaseDetected(WId, Qt::Key); //only emitted if lockstate = false + void MousePressDetected(WId, NativeWindowSystem::MouseButton); //only emitted if lockstate = false + void MouseReleaseDetected(WId, NativeWindowSystem::MouseButton); //only emitted if lockstate = false }; diff --git a/src-qt5/core/libLumina/RootSubWindow.cpp b/src-qt5/core/libLumina/RootSubWindow.cpp index 41c04ee1..9ef6464e 100644 --- a/src-qt5/core/libLumina/RootSubWindow.cpp +++ b/src-qt5/core/libLumina/RootSubWindow.cpp @@ -8,9 +8,12 @@ #include <QDebug> #include <QApplication> #include <QVBoxLayout> -#include <QVBoxLayout> +#include <QHBoxLayout> +#include <QTimer> + +#define WIN_BORDER 5 -#define WIN_BORDER 3 +#include <LIconCache.h> // === PUBLIC === RootSubWindow::RootSubWindow(QWidget *root, NativeWindow *win) : QFrame(root){ @@ -19,15 +22,18 @@ RootSubWindow::RootSubWindow(QWidget *root, NativeWindow *win) : QFrame(root){ //Create the QWindow and QWidget containers for the window WIN = win; closing = false; - WinWidget = QWidget::createWindowContainer( WIN->window(), this); initWindowFrame(); - LoadProperties( NativeWindow::allProperties() ); //Hookup the signals/slots connect(WIN, SIGNAL(PropertiesChanged(QList<NativeWindow::Property>, QList<QVariant>)), this, SLOT(propertiesChanged(QList<NativeWindow::Property>, QList<QVariant>))); + WinWidget->embedWindow(WIN); + //qDebug() << "[NEW WINDOW]" << WIN->id() << WinWidget->winId() << this->winId(); + activeState = RootSubWindow::Normal; + LoadAllProperties(); } RootSubWindow::~RootSubWindow(){ - + //qDebug() << "Visible Window Destroyed"; + WIN->deleteLater(); } WId RootSubWindow::id(){ @@ -41,41 +47,57 @@ RootSubWindow::ModState RootSubWindow::getStateAtPoint(QPoint pt, bool setoffset //above the frame itself - need to figure out which quadrant it is in (8-directions) if(pt.y() < WIN_BORDER){ //One of the top options - if(pt.x() < WIN_BORDER){ + if(pt.x() < this->width()/5){ if(setoffset){ offset.setX(pt.x()); offset.setY(pt.y()); } //difference from top-left corner return ResizeTopLeft; - }else if(pt.x() > (this->width()-WIN_BORDER)){ + }else if(pt.x() > (this->width()*4.0/5.0)){ if(setoffset){ offset.setX(this->width()-pt.x()); offset.setY(pt.y()); } //difference from top-right corner return ResizeTopRight; - }else{ + }else{ if(setoffset){ offset.setX(0); offset.setY(pt.y()); } //difference from top edge (X does not matter) - return ResizeTop; - } + return ResizeTop; + } }else if(pt.y() > (this->height()-WIN_BORDER) ){ //One of the bottom options - if(pt.x() < WIN_BORDER){ + if(pt.x() < this->width()/5){ if(setoffset){ offset.setX(pt.x()); offset.setY(this->height()-pt.y()); } //difference from bottom-left corner return ResizeBottomLeft; - }else if(pt.x() > (this->width()-WIN_BORDER)){ + }else if(pt.x() > (this->width()*4.0/5.0)){ if(setoffset){ offset.setX(this->width()-pt.x()); offset.setY(this->height()-pt.y()); } //difference from bottom-right corner return ResizeBottomRight; - }else{ + }else{ if(setoffset){ offset.setX(0); offset.setY(this->height() - pt.y()); } //difference from bottom edge (X does not matter) - return ResizeBottom; - } - }else{ - //One of the side options - if(pt.x() < WIN_BORDER){ + return ResizeBottom; + } + }else if(pt.x() < WIN_BORDER){ + //Left side options + if(pt.y() < this->height()/5){ + if(setoffset){ offset.setX(pt.x()); offset.setY(pt.y()); } //difference from top-left corner + return ResizeTopLeft; + }else if(pt.y() > (this->height()*4.0/5.0)){ + if(setoffset){ offset.setX(pt.x()); offset.setY(this->height()-pt.y()); } //difference from bottom-left corner + return ResizeBottomLeft; + }else{ if(setoffset){ offset.setX(pt.x()); offset.setY(0); } //difference from left edge (Y does not matter) return ResizeLeft; - }else if(pt.x() > (this->width()-WIN_BORDER) ){ + } + }else if(pt.x() > (this->width()-WIN_BORDER) ){ + //Right side options + if(pt.y() < this->height()/5){ + if(setoffset){ offset.setX(this->width()-pt.x()); offset.setY(pt.y()); } //difference from top-right corner + return ResizeTopRight; + }else if(pt.y() > (this->height()*4.0/5.0)){ + if(setoffset){ offset.setX(this->width()-pt.x()); offset.setY(this->height()-pt.y()); } //difference from bottom-right corner + return ResizeBottomRight; + }else{ if(setoffset){ offset.setX(this->width()-pt.x()); offset.setY(0); } //difference from right edge (Y does not matter) return ResizeRight; - }else{ - return Normal; } + }else{ + return Normal; } } + //if it gets this far just return normal return Normal; } @@ -112,7 +134,7 @@ void RootSubWindow::setMouseCursor(ModState state, bool override){ break; case ResizeTopLeft: shape = Qt::SizeFDiagCursor; - break; + break; } if(override){ QApplication::setOverrideCursor(QCursor(shape)); @@ -123,31 +145,48 @@ void RootSubWindow::setMouseCursor(ModState state, bool override){ } void RootSubWindow::initWindowFrame(){ + //qDebug() << "Create RootSubWindow Frame"; + this->setContentsMargins(0,0,0,0); mainLayout = new QVBoxLayout(this); - titleBar = new QHBoxLayout(this); + mainLayout->setContentsMargins(0,0,0,0); + titleBar = new QWidget(this); + titleBar->setContentsMargins(0,0,0,0); + titleBarL = new QHBoxLayout(titleBar); + titleBarL->setContentsMargins(0,0,0,0); closeB = new QToolButton(this); maxB = new QToolButton(this); minB = new QToolButton(this); otherB = new QToolButton(this); + anim = new QPropertyAnimation(this); + anim->setTargetObject(this); + anim->setDuration(200); //1/5 second (appx) + connect(anim, SIGNAL(finished()), this, SLOT(animFinished()) ); titleLabel = new QLabel(this); titleLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); otherM = new QMenu(this); //menu of other actions otherB->setMenu(otherM); otherB->setPopupMode(QToolButton::InstantPopup); otherB->setAutoRaise(true); + WinWidget = new NativeEmbedWidget(this); connect(closeB, SIGNAL(clicked()), this, SLOT(triggerClose()) ); connect(maxB, SIGNAL(clicked()), this, SLOT(toggleMaximize()) ); connect(minB, SIGNAL(clicked()), this, SLOT(toggleMinimize()) ); //Now assemble the frame layout based on the current settings - this->setLayout(mainLayout); - titleBar->addWidget(otherB); - titleBar->addWidget(titleLabel); - titleBar->addWidget(minB); - titleBar->addWidget(maxB); - titleBar->addWidget(closeB); + titleBarL->addWidget(otherB); + titleBarL->addWidget(titleLabel); + titleBarL->addWidget(minB); + titleBarL->addWidget(maxB); + titleBarL->addWidget(closeB); WinWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); - mainLayout->addLayout(titleBar); + titleBar->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); + mainLayout->addWidget(titleBar); mainLayout->addWidget(WinWidget); + //Setup the cursors for the buttons + closeB->setCursor(Qt::ArrowCursor); + minB->setCursor(Qt::ArrowCursor); + maxB->setCursor(Qt::ArrowCursor); + otherM->setCursor(Qt::ArrowCursor); + titleLabel->setCursor(Qt::ArrowCursor); //Now all the stylesheet options this->setObjectName("WindowFrame"); closeB->setObjectName("Button_Close"); @@ -155,36 +194,82 @@ void RootSubWindow::initWindowFrame(){ maxB->setObjectName("Button_Maximize"); otherM->setObjectName("Menu_Actions"); titleLabel->setObjectName("Label_Title"); - this->setStyleSheet("QWidget#WindowFrame{background-color: darkblue;} QWidget#Label_Title{background-color: transparent; color: white; }"); + this->setStyleSheet("QFrame#WindowFrame{background-color: rgba(0,0,0,125)} QWidget#Label_Title{background-color: transparent; color: white; } QToolButton{background-color: transparent; border: 1px solid transparent; border-radius: 3px; } QToolButton::hover{background-color: rgba(255,255,255,150); } QToolButton::pressed{ background-color: white; } QToolButton::menu-arrow{ image: none; }"); //And adjust the margins - mainLayout->setContentsMargins(WIN_BORDER,WIN_BORDER,WIN_BORDER,WIN_BORDER); mainLayout->setSpacing(0); - titleBar->setSpacing(1); - titleBar->setContentsMargins(0,0,0,0); + titleBarL->setSpacing(1); + this->setFrameStyle(QFrame::NoFrame); + this->setLineWidth(0); + this->setMidLineWidth(0); + this->setFrameRect(QRect(0,0,0,0)); + + //Setup the timer object to syncronize info + moveTimer = new QTimer(this); + moveTimer->setSingleShot(true); + moveTimer->setInterval(100); //1/10 second + connect(moveTimer, SIGNAL(timeout()), WinWidget, SLOT(resyncWindow()) ); + + //Now load the icons for the button + LIconCache::instance()->loadIcon(closeB, "window-close"); + LIconCache::instance()->loadIcon(maxB, "window-maximize"); + LIconCache::instance()->loadIcon(minB, "window-minimize"); + LIconCache::instance()->loadIcon(otherB, "list"); +} + +void RootSubWindow::enableFrame(bool on){ + //Make the individual frame elements visible as needed + if(on){ this->setContentsMargins(WIN_BORDER,WIN_BORDER,WIN_BORDER,WIN_BORDER); }//default border + else{ this->setContentsMargins(0, 0, 0, 0); } + titleBar->setVisible(on); + //And now calculate/save the frame extents + QList<int> extents; extents << 0 << 0 << 0 << 0; //left, right, top, bottom + if(on){ + extents[0] = WIN_BORDER; + extents[1] = WIN_BORDER; + extents[2] = WIN_BORDER + titleBar->height(); + extents[3] = WIN_BORDER; + } + //qDebug() << "SET FRAME EXTENTS:" << extents; + WIN->requestProperty(NativeWindow::FrameExtents, QVariant::fromValue< QList<int> >(extents) ); //save on raw window itself + WIN->setProperty(NativeWindow::FrameExtents, QVariant::fromValue< QList<int> >(extents) ); //save to structure now } void RootSubWindow::LoadProperties( QList< NativeWindow::Property> list){ QList<QVariant> vals; + //Always ensure that visibility changes are evaluated last + bool addvisible = false; for(int i=0; i<list.length(); i++){ + if(list[i] == NativeWindow::Visible){ list.removeAt(i); i--; addvisible = true; continue; } vals << WIN->property(list[i]); } + //if(addvisible){ list << NativeWindow::Visible; vals << WIN->property(NativeWindow::Visible); } propertiesChanged(list, vals); } // === PUBLIC SLOTS === void RootSubWindow::clientClosed(){ - qDebug() << "Client Closed"; + //qDebug() << "Client Closed"; closing = true; - this->close(); + if(anim->state()!=QAbstractAnimation::Running){ this->close(); } +} + +void RootSubWindow::LoadAllProperties(){ + QList< NativeWindow::Property> list; + list << NativeWindow::WinTypes << NativeWindow::WinActions << NativeWindow::States + << NativeWindow::MinSize << NativeWindow::MaxSize << NativeWindow::Title << NativeWindow::ShortTitle + << NativeWindow::Icon << NativeWindow::Size << NativeWindow::GlobalPos << NativeWindow::Visible << NativeWindow::Active; + LoadProperties(list); + WIN->requestProperty(NativeWindow::Visible, true); } //Button Actions - public so they can be tied to key shortcuts and stuff as well void RootSubWindow::toggleMinimize(){ - + WIN->setProperty(NativeWindow::Visible, false); + QTimer::singleShot(2000, this, SLOT(toggleMaximize()) ); } void RootSubWindow::toggleMaximize(){ - + WIN->setProperty(NativeWindow::Visible, true); } void RootSubWindow::triggerClose(){ @@ -219,26 +304,62 @@ void RootSubWindow::startResizing(){ } - - // === PRIVATE SLOTS === void RootSubWindow::propertiesChanged(QList<NativeWindow::Property> props, QList<QVariant> vals){ for(int i=0; i<props.length() && i<vals.length(); i++){ - if(vals[i].isNull()){ return; } //not the same as a default/empty value - the property has just not been set yet - //qDebug() << "Set Window Property:" << props[i] << vals[i]; + if(vals[i].isNull()){ continue; } //not the same as a default/empty value - the property has just not been set yet + //qDebug() << "RootSubWindow: Property Changed:" << props[i] << vals[i]; switch(props[i]){ case NativeWindow::Visible: - if(vals[i].toBool()){ this->show(); } - else{ this->hide(); } + //qDebug() << "Got Visibility Change:" << vals[i] << this->geometry() << WIN->geometry(); + if(vals[i].toBool()){ + if(lastGeom.isNull()){ animResetProp = this->geometry(); } + else{ animResetProp = lastGeom; } + anim->setPropertyName("geometry"); + anim->setStartValue( QRect(animResetProp.toRect().center(), QSize(0,0)) ); + anim->setEndValue(animResetProp); + this->setGeometry( anim->startValue().toRect() ); //ensure the window is the initial geom before it becomes visible + anim->start(); + this->show(); + }else{ + animResetProp = this->geometry(); //hide event - should already be the right geom + lastGeom = this->geometry(); + anim->setPropertyName("geometry"); + anim->setStartValue(this->geometry()); + anim->setEndValue( QRect(this->geometry().center(), QSize(0,0) ) ); + anim->start(); + QTimer::singleShot(anim->duration(), this, SLOT(hide()) ); + } break; case NativeWindow::Title: titleLabel->setText(vals[i].toString()); break; case NativeWindow::Icon: - otherB->setIcon(vals[i].value< QIcon>()); + //qDebug() << "Got Icon Change:" << vals[i]; + if(vals[i].value<QIcon>().isNull() ){ LIconCache::instance()->loadIcon(otherB, "list"); } + else{ otherB->setIcon(vals[i].value<QIcon>()); } + break; + case NativeWindow::GlobalPos: + //qDebug() << "Got Global Pos:" << this->pos() << WinWidget->mapToGlobal(QPoint(0,0)) << WIN->geometry().topLeft() << vals[i].toPoint(); + if(activeState == RootSubWindow::Normal){ + this->move( WIN->geometry().topLeft() ); + } break; case NativeWindow::Size: - WinWidget->resize(vals[i].toSize()); + //qDebug() << " - SIZE CHANGE"; + if(WIN->property(NativeWindow::FrameExtents).isNull() && (i<props.indexOf(NativeWindow::FrameExtents)) ){ + //Frame not loaded yet - push this back until after the frame is set + props << props.takeAt(i); + vals << vals.takeAt(i); + i--; + }else if(anim->state() != QPropertyAnimation::Running ){ + if(vals[i].toSize() != WinWidget->size() && activeState==Normal){ + //qDebug() << "Got Widget Size Change:" << vals[i].toSize() << WinWidget->size(); + WinWidget->resize(vals[i].toSize()); + this->resize( WIN->geometry().size() ); + //qDebug() << " - Size after change:" << WinWidget->size() << this->size() << WIN->geometry(); + } + } break; case NativeWindow::MinSize: WinWidget->setMinimumSize(vals[i].toSize()); @@ -247,19 +368,44 @@ void RootSubWindow::propertiesChanged(QList<NativeWindow::Property> props, QList WinWidget->setMaximumSize(vals[i].toSize()); break; case NativeWindow::Active: - if(vals[i].toBool()){ WinWidget->setFocus(); } + //if(vals[i].toBool()){ WinWidget->setFocus(); } break; - /*case NativeWindow::WindowFlags: - this->setWindowFlags( val.value< Qt::WindowFlags >() ); + /*case NativeWindow::FrameExtents: + qDebug() << " - FRAME CHANGE"; + if(vals[i].isNull()){ + vals[i] = QVariant::fromValue<QList<int> >( QList<int>() << WinWidget->geometry().x() << this->width()-WinWidget->geometry().x()-WinWidget->geometry().width() << WinWidget->y() << this->height() - WinWidget->y() - WinWidget->geometry().height() ); + WIN->setProperty(NativeWindow::FrameExtents, vals[i]); + } + qDebug() << "Setting Frame Extents:" << vals[i].value<QList<int> >(); + mainLayout->setContentsMargins( vals[i].value< QList<int> >().at(0),vals[i].value< QList<int> >().at(2) - titleLabel->height(),vals[i].value< QList<int> >().at(1),vals[i].value< QList<int> >().at(3)); break;*/ + case NativeWindow::WinTypes: + enableFrame(vals[i].value< QList<NativeWindow::Type> >().contains(NativeWindow::T_NORMAL) ); + break; default: qDebug() << "Window Property Unused:" << props[i] << vals[i]; } } } +void RootSubWindow::animFinished(){ + if(closing){ this->close(); return;} + else if(anim->propertyName()=="geometry"){ + if(!animResetProp.isNull()){ + /*qDebug() << "Animation Finished, Reset Geometry:" << animResetProp; + qDebug() << " - Starting Value:" << anim->startValue(); + qDebug() << " - Ending Value:" << anim->endValue(); + qDebug() << " - Current Value:" << this->geometry();*/ + this->setGeometry( animResetProp.toRect() ); + } + } + animResetProp = QVariant(); //clear the variable +} + // === PROTECTED === void RootSubWindow::mousePressEvent(QMouseEvent *ev){ + activate(); + this->raise(); //qDebug() << "Frame Mouse Press Event"; offset.setX(0); offset.setY(0); if(activeState != Normal){ return; } // do nothing - already in a state of grabbed mouse @@ -274,11 +420,11 @@ void RootSubWindow::mousePressEvent(QMouseEvent *ev){ activeState = getStateAtPoint(ev->pos(), true); //also have it set the offset variable } setMouseCursor(activeState, true); //this one is an override cursor - + QFrame::mousePressEvent(ev); } void RootSubWindow::mouseMoveEvent(QMouseEvent *ev){ - ev->accept(); + activate(); //make sure this window is "Active" if(activeState == Normal){ setMouseCursor( getStateAtPoint(ev->pos()) ); //just update the mouse cursor }else{ @@ -352,15 +498,15 @@ void RootSubWindow::mouseMoveEvent(QMouseEvent *ev){ default: break; } - this->setGeometry(geom); } + QFrame::mouseMoveEvent(ev); } void RootSubWindow::mouseReleaseEvent(QMouseEvent *ev){ //Check for a right-click event //qDebug() << "Frame Mouse Release Event"; - ev->accept(); + QFrame::mouseReleaseEvent(ev); if( (activeState==Normal) && (titleBar->geometry().contains(ev->pos())) && (ev->button()==Qt::RightButton) ){ otherM->popup(ev->globalPos()); return; @@ -368,7 +514,7 @@ void RootSubWindow::mouseReleaseEvent(QMouseEvent *ev){ activeState = Normal; QApplication::restoreOverrideCursor(); setMouseCursor( getStateAtPoint(ev->pos()) ); - if(QWidget::mouseGrabber() == this){ this->releaseMouse(); } + if(QFrame::mouseGrabber() == this){ this->releaseMouse(); } } void RootSubWindow::leaveEvent(QEvent *ev){ @@ -377,3 +523,14 @@ void RootSubWindow::leaveEvent(QEvent *ev){ setMouseCursor(Normal); } } + +void RootSubWindow::moveEvent(QMoveEvent *ev){ + //qDebug() << "Got Move Event:" << ev->pos() << WinWidget->geometry(); + QFrame::moveEvent(ev); + if(!closing && anim->state()!=QAbstractAnimation::Running){ + moveTimer->start(); + //WinWidget->resyncWindow(); + //WIN->requestProperty(NativeWindow::GlobalPos, ev->pos() ); + } + +} diff --git a/src-qt5/core/libLumina/RootSubWindow.h b/src-qt5/core/libLumina/RootSubWindow.h index 779f783b..de6aba89 100644 --- a/src-qt5/core/libLumina/RootSubWindow.h +++ b/src-qt5/core/libLumina/RootSubWindow.h @@ -18,8 +18,9 @@ #include <QLabel> #include <QToolButton> #include <QMenu> +#include <QPropertyAnimation> #include <NativeWindow.h> - +#include <NativeEmbedWidget.h> class RootSubWindow : public QFrame{ Q_OBJECT @@ -40,19 +41,28 @@ private: void setMouseCursor(ModState, bool override = false); //Update the mouse cursor based on state //Native window embed objects NativeWindow *WIN; - QWidget *WinWidget; + NativeEmbedWidget *WinWidget; bool closing; //Title bar objects - QBoxLayout *titleBar, *mainLayout; + QBoxLayout *titleBarL, *mainLayout; QToolButton *closeB, *maxB, *minB, *otherB; QLabel *titleLabel; QMenu *otherM; //menu of other actions + QWidget *titleBar; + //Other random objects (animations,etc) + QPropertyAnimation *anim; + QVariant animResetProp; + QTimer *moveTimer; + QRect lastGeom; //frame coordinates + void initWindowFrame(); + void enableFrame(bool); void LoadProperties( QList< NativeWindow::Property> list); public slots: void clientClosed(); + void LoadAllProperties(); //Button Actions - public so they can be tied to key shortcuts and stuff as well void toggleMinimize(); @@ -67,6 +77,7 @@ public slots: private slots: void propertiesChanged(QList<NativeWindow::Property>, QList<QVariant>); + void animFinished(); protected: void mousePressEvent(QMouseEvent*); @@ -74,6 +85,9 @@ protected: void mouseReleaseEvent(QMouseEvent*); void leaveEvent(QEvent *ev); + void moveEvent(QMoveEvent *ev); + + }; #endif diff --git a/src-qt5/core/libLumina/RootWindow.cpp b/src-qt5/core/libLumina/RootWindow.cpp index b1f740d3..31faaf50 100644 --- a/src-qt5/core/libLumina/RootWindow.cpp +++ b/src-qt5/core/libLumina/RootWindow.cpp @@ -14,6 +14,7 @@ RootWindow::RootWindow() : QWidget(0, Qt::Window | Qt::BypassWindowManagerHint | Qt::WindowStaysOnBottomHint){ qRegisterMetaType<WId>("WId"); autoResizeTimer = 0; + this->setMouseTracking(true); } RootWindow::~RootWindow(){ @@ -51,7 +52,7 @@ void RootWindow::updateScreenPixmap(screeninfo *info){ QPixmap raw(info->file); //load the image from file //Now apply the proper aspect ratio as needed if(info->scale == RootWindow::Stretch || info->scale == RootWindow::Full || info->scale == RootWindow::Fit){ - Qt::AspectRatioMode armode = Qt::KeepAspectRatio; + Qt::AspectRatioMode armode = Qt::KeepAspectRatio; if(info->scale == RootWindow::Stretch ){ armode = Qt::IgnoreAspectRatio; } else if(info->scale == RootWindow::Full ){ armode = Qt::KeepAspectRatioByExpanding; } if(raw.height()!=info->area.height() && raw.width() !=info->area.width()){ @@ -60,16 +61,16 @@ void RootWindow::updateScreenPixmap(screeninfo *info){ } //Now calculate offset and draw width/height QRect drawRect(0,0, raw.width(), raw.height()); - if(info->scale == RootWindow::Full ){ + if(info->scale == RootWindow::Full ){ drawRect.moveTo( (info->area.width() - raw.width())/2, (info->area.height() - raw.height())/2 ); }else if(info->scale == RootWindow::Fit ){ - drawRect.moveTo( (info->area.width() - raw.width())/2, (info->area.height() - raw.height())/2 ); + drawRect.moveTo( (info->area.width() - raw.width())/2, (info->area.height() - raw.height())/2 ); }else if(info->scale == RootWindow::Center ){ - drawRect.moveTo( (info->area.width() - raw.width())/2, (info->area.height() - raw.height())/2 ); + drawRect.moveTo( (info->area.width() - raw.width())/2, (info->area.height() - raw.height())/2 ); }else if(info->scale == RootWindow::Tile ){ //Draw the entire area - no offset drawRect.setHeight(info->area.height()); - drawRect.setWidth(info->area.width()); + drawRect.setWidth(info->area.width()); }else if(info->scale == RootWindow::BottomLeft ){ drawRect.moveTo( 0 , info->area.height() - raw.height() ); }else if(info->scale == RootWindow::BottomRight ){ @@ -130,7 +131,7 @@ void RootWindow::ResizeRoot(){ //Trigger a repaint and send out any signals this->setGeometry(fullscreen); this->update(); - emit RootResized(); + emit RootResized(fullscreen); if(!valid.isEmpty()){ emit NewScreens(valid); } if(!invalid.isEmpty()){ emit RemovedScreens(invalid); } } @@ -138,7 +139,7 @@ void RootWindow::ResizeRoot(){ void RootWindow::ChangeWallpaper(QString id, RootWindow::ScaleType scale, QString file){ bool found = false; for(int i=0; i<WALLPAPERS.length() && !found; i++){ - if(WALLPAPERS[i].id == id){ + if(WALLPAPERS[i].id == id){ WALLPAPERS[i].scale = scale; WALLPAPERS[i].file = file; updateScreenPixmap(&WALLPAPERS[i]); @@ -168,20 +169,23 @@ void RootWindow::ChangeWallpaper(QString id, RootWindow::ScaleType scale, QStrin void RootWindow::NewWindow(NativeWindow *win){ RootSubWindow *subwin = 0; + qDebug() << "Got New Window:" << win->property(NativeWindow::Title); for(int i=0; i<WINDOWS.length() && subwin==0; i++){ - if(WINDOWS[i]->id() == win->id()){ subwin = WINDOWS[i]; } + if(WINDOWS[i]->id() == win->id()){ subwin = WINDOWS[i]; } } if(subwin==0){ subwin = new RootSubWindow(this, win); connect(win, SIGNAL(WindowClosed(WId)), this, SLOT(CloseWindow(WId)) ); WINDOWS << subwin; } - //subwin->show(); + //win->setProperty(NativeWindow::Visible, true); + //win->requestProperty( NativeWindow::Active, true); + win->requestProperties(QList<NativeWindow::Property>() << NativeWindow::Visible << NativeWindow::Active, QList<QVariant>() << true << true); } void RootWindow::CloseWindow(WId win){ for(int i=0; i<WINDOWS.length(); i++){ - if(WINDOWS[i]->id() == win){ WINDOWS.takeAt(i)->clientClosed(); break; } + if(WINDOWS[i]->id() == win){ qDebug() << "Remove Window From Root List"; WINDOWS.takeAt(i)->clientClosed(); break; } } } diff --git a/src-qt5/core/libLumina/RootWindow.h b/src-qt5/core/libLumina/RootWindow.h index 0ae248b5..a7792752 100644 --- a/src-qt5/core/libLumina/RootWindow.h +++ b/src-qt5/core/libLumina/RootWindow.h @@ -31,7 +31,7 @@ public: RootWindow(); ~RootWindow(); - + void start(); private: @@ -49,7 +49,7 @@ private: //Window Management QList<RootSubWindow*> WINDOWS; - + public slots: void ResizeRoot(); void ChangeWallpaper(QString id, RootWindow::ScaleType scale, QString file); @@ -65,7 +65,7 @@ protected: signals: void RegisterVirtualRoot(WId); - void RootResized(); + void RootResized(QRect); void NewScreens(QStringList); // [screen_id_1, screen_id_2, etc..] void RemovedScreens(QStringList); // [screen_id_1, screen_id_2, etc..] diff --git a/src-qt5/core/libLumina/RootWindow.pri b/src-qt5/core/libLumina/RootWindow.pri index 35e0e770..e4d5f00b 100644 --- a/src-qt5/core/libLumina/RootWindow.pri +++ b/src-qt5/core/libLumina/RootWindow.pri @@ -10,4 +10,5 @@ INCLUDEPATH *= ${PWD} # include other library dependencies include(LUtils.pri) -include(NativeWindow.pri); +include(NativeWindow.pri) +include(LIconCache.pri) diff --git a/src-qt5/core/lumina-desktop-unified/LSession.cpp b/src-qt5/core/lumina-desktop-unified/LSession.cpp index e511d7ad..0b9a9b35 100644 --- a/src-qt5/core/lumina-desktop-unified/LSession.cpp +++ b/src-qt5/core/lumina-desktop-unified/LSession.cpp @@ -11,13 +11,14 @@ #include "BootSplash.h" #ifndef DEBUG -#define DEBUG 1 +#define DEBUG 0 #endif //Initialize all the global objects to null pointers -EventFilter* Lumina::EFILTER = 0; +NativeWindowSystem* Lumina::NWS = 0; +NativeEventFilter* Lumina::NEF = 0; LScreenSaver* Lumina::SS = 0; -DesktopSettings* Lumina::SETTINGS = 0; +//DesktopSettings* Lumina::SETTINGS = 0; //Lumina::WM = 0; QThread* Lumina::EVThread = 0; RootWindow* Lumina::ROOTWIN = 0; @@ -26,6 +27,10 @@ LShortcutEvents* Lumina::SHORTCUTS = 0; LSession::LSession(int &argc, char ** argv) : LSingleApplication(argc, argv, "lumina-desktop-unified"){ //Initialize the global objects to null pointers + qRegisterMetaType< Qt::Key >("Qt::Key"); + qRegisterMetaType< NativeWindow::Property >("NativeWindow::Property"); + qRegisterMetaType< QList< NativeWindow::Property > >("QList<NativeWindow::Property>"); + mediaObj = 0; //private object used for playing login/logout chimes if(this->isPrimaryProcess()){ //Setup the global registrations @@ -38,42 +43,37 @@ LSession::LSession(int &argc, char ** argv) : LSingleApplication(argc, argv, "lu this->setEffectEnabled( Qt::UI_AnimateMenu, true); this->setEffectEnabled( Qt::UI_AnimateCombo, true); this->setEffectEnabled( Qt::UI_AnimateTooltip, true); - //this->setAttribute(Qt::AA_UseDesktopOpenGL); + 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 (but do not start them yet) - Lumina::EFILTER = new EventFilter(); //Need the XCB Event filter first - Lumina::SETTINGS = new DesktopSettings(); + Lumina::NEF = new NativeEventFilter(); + Lumina::NWS = new NativeWindowSystem(); + //Lumina::SETTINGS = new DesktopSettings(); Lumina::SS = new LScreenSaver(); - //Lumina::WM = new LWindowManager(); - //Now put the Event Filter into it's own thread to keep things snappy + //Now put the Native Window System into it's own thread to keep things snappy Lumina::EVThread = new QThread(); - Lumina::EFILTER->moveToThread(Lumina::EVThread); + Lumina::NWS->moveToThread(Lumina::EVThread); Lumina::EVThread->start(); Lumina::ROOTWIN = new RootWindow(); Lumina::APPLIST = new XDGDesktopList(0, true); //keep this list up to date Lumina::SHORTCUTS = new LShortcutEvents(); //this can be moved to it's own thread eventually as well - //Setup the basic connections between the shortcuts class and the session itself - connect(Lumina::SHORTCUTS, SIGNAL(StartLogout()), this, SLOT(StartLogout()) ); - connect(Lumina::SHORTCUTS, SIGNAL(StartReboot()), this, SLOT(StartReboot()) ); - connect(Lumina::SHORTCUTS, SIGNAL(StartShutdown()), this, SLOT(StartShutdown()) ); - //Setup the various connections between the global classes - // NOTE: Most of these connections will only become "active" as the global objects get started during the setupSession routine - connect(Lumina::ROOTWIN, SIGNAL(RegisterVirtualRoot(WId)), Lumina::EFILTER, SLOT(RegisterVirtualRoot(WId)) ); - connect(Lumina::EFILTER, SIGNAL(WindowCreated(NativeWindow*)), Lumina::ROOTWIN, SLOT(NewWindow(NativeWindow*)) ); - } //end check for primary process + setupGlobalConnections(); + } //end check for primary process } LSession::~LSession(){ //Clean up the global objects as needed - if(Lumina::EFILTER!=0){ Lumina::EFILTER->deleteLater(); } + if(Lumina::NEF!=0){ Lumina::NEF->deleteLater(); } + if(Lumina::NWS!=0){ Lumina::NWS->deleteLater(); } + //if(Lumina::EFILTER!=0){ Lumina::EFILTER->deleteLater(); } if(Lumina::SS!=0){ Lumina::SS->deleteLater(); } if(Lumina::EVThread!=0){ if(Lumina::EVThread->isRunning()){ Lumina::EVThread->quit(); } Lumina::EVThread->deleteLater(); } - if(Lumina::SETTINGS!=0){ Lumina::SETTINGS->deleteLater(); } + if(DesktopSettings::instance()!=0){ DesktopSettings::instance()->deleteLater(); } if(Lumina::ROOTWIN!=0){ Lumina::ROOTWIN->deleteLater(); } if(Lumina::APPLIST!=0){ Lumina::APPLIST->deleteLater(); } } @@ -92,49 +92,40 @@ void LSession::setupSession(){ //Setup the QSettings default paths splash.showScreen("settings"); if(DEBUG){ qDebug() << " - Init QSettings:" << timer->elapsed();} - Lumina::SETTINGS->start(); - /*sessionsettings = new QSettings("lumina-desktop", "sessionsettings"); - DPlugSettings = new QSettings("lumina-desktop","pluginsettings/desktopsettings"); - //Load the proper translation files - if(sessionsettings->value("ForceInitialLocale",false).toBool()){ - //Some system locale override it in place - change the env first - LUtils::setLocaleEnv( sessionsettings->value("InitLocale/LANG","").toString(), \ - sessionsettings->value("InitLocale/LC_MESSAGES","").toString(), \ - sessionsettings->value("InitLocale/LC_TIME","").toString(), \ - sessionsettings->value("InitLocale/LC_NUMERIC","").toString(), \ - sessionsettings->value("InitLocale/LC_MONETARY","").toString(), \ - sessionsettings->value("InitLocale/LC_COLLATE","").toString(), \ - sessionsettings->value("InitLocale/LC_CTYPE","").toString() ); - }*/ - if(DEBUG){ qDebug() << " - Load Localization Files:" << timer->elapsed();} - currTranslator = LUtils::LoadTranslation(this, "lumina-desktop"); + DesktopSettings::instance(); //don't do anything other than init/start the static object here + if(DEBUG){ qDebug() << " - Load Localization Files:" << timer->elapsed();} + currTranslator = LUtils::LoadTranslation(this, "lumina-desktop"); if(DEBUG){ qDebug() << " - Start Event Filter:" << timer->elapsed(); } - Lumina::EFILTER->start(); + Lumina::NEF->start(); + if( !Lumina::NWS->start() ){ + qWarning() << "Could not start the Lumina desktop. Is another desktop or window manager running?"; + this->exit(1); + return; + } //use the system settings //Setup the user's lumina settings directory as necessary splash.showScreen("user"); - if(DEBUG){ qDebug() << " - Init User Files:" << timer->elapsed();} + if(DEBUG){ qDebug() << " - Init User Files:" << timer->elapsed();} //checkUserFiles(); //adds these files to the watcher as well //Initialize the internal variables //DESKTOPS.clear(); - + //Start the background system tray splash.showScreen("systray"); - //Initialize the global menus qDebug() << " - Initialize system menus"; splash.showScreen("apps"); if(DEBUG){ qDebug() << " - Populate App List:" << timer->elapsed();} Lumina::APPLIST->updateList(); //appmenu = new AppMenu(); - + splash.showScreen("menus"); //if(DEBUG){ qDebug() << " - Init SettingsMenu:" << timer->elapsed();} //settingsmenu = new SettingsMenu(); //if(DEBUG){ qDebug() << " - Init SystemWindow:" << timer->elapsed();} //sysWindow = new SystemWindow(); - + //Initialize the desktops splash.showScreen("desktop"); if(DEBUG){ qDebug() << " - Init Desktops:" << timer->elapsed(); } @@ -144,6 +135,9 @@ void LSession::setupSession(){ Lumina::ROOTWIN->ChangeWallpaper(scrns[i]->name(), RootWindow::Stretch, LOS::LuminaShare()+"desktop-background.jpg"); } Lumina::ROOTWIN->start(); + Lumina::NWS->setRoot_numberOfWorkspaces(QStringList() << "one" << "two"); + Lumina::NWS->setRoot_currentWorkspace(0); + DesktopContextMenu *cmenu = new DesktopContextMenu(Lumina::ROOTWIN); connect(cmenu, SIGNAL(showLeaveDialog()), this, SLOT(StartLogout()) ); cmenu->start(); @@ -180,7 +174,7 @@ void LSession::setupSession(){ QTimer::singleShot(500, this, SLOT(launchStartupApps()) ); splash.hide(); LSession::processEvents(); - splash.close(); + splash.close(); LSession::processEvents(); //DEBUG: Wait a bit then close down the session //QTimer::singleShot(15000, this, SLOT(StartLogout()) ); @@ -197,11 +191,11 @@ void LSession::CleanupSession(){ //Create a temporary flag to prevent crash dialogs from opening during cleanup LUtils::writeFile("/tmp/.luminastopping",QStringList() << "yes", true); //Start the logout chimes (if necessary) - LOS::setAudioVolume( LOS::audioVolume() ); //make sure the audio volume is saved in the backend for the next login - bool playaudio = Lumina::SETTINGS->value(DesktopSettings::Session,"PlayLogoutAudio",true).toBool(); + //LOS::setAudioVolume( LOS::audioVolume() ); //make sure the audio volume is saved in the backend for the next login + bool playaudio = DesktopSettings::instance()->value(DesktopSettings::Session,"PlayLogoutAudio",true).toBool(); if( playaudio ){ playAudioFile(LOS::LuminaShare()+"Logout.ogg"); } //Now perform any other cleanup - Lumina::EFILTER->stop(); + //Lumina::NEF->stop(); //Now wait a moment for things to close down before quitting if(playaudio){ //wait a max of 5 seconds for audio to finish @@ -219,10 +213,68 @@ void LSession::CleanupSession(){ if(QFile::exists("/tmp/.luminastopping")){ QFile::remove("/tmp/.luminastopping"); } } +//================= + +void LSession::setupGlobalConnections(){ + //Setup the various connections between the global classes + // NOTE: Most of these connections will only become "active" as the global objects get started during the setupSession routine + + //Setup the basic connections between the shortcuts class and the session itself + connect(Lumina::SHORTCUTS, SIGNAL(StartLogout()), this, SLOT(StartLogout()) ); + connect(Lumina::SHORTCUTS, SIGNAL(StartReboot()), this, SLOT(StartReboot()) ); + connect(Lumina::SHORTCUTS, SIGNAL(StartShutdown()), this, SLOT(StartShutdown()) ); + connect(Lumina::SHORTCUTS, SIGNAL(LaunchApplication(QString)), this, SLOT(LaunchApplication(QString)) ); + connect(Lumina::SHORTCUTS, SIGNAL(LaunchStandardApplication(QString)), this, SLOT(LaunchStandardApplication(QString)) ); + connect(Lumina::SHORTCUTS, SIGNAL(LockSession()), Lumina::SS, SLOT(LockScreenNow()) ); + + //Root window connections + connect(Lumina::ROOTWIN, SIGNAL(RegisterVirtualRoot(WId)), Lumina::NWS, SLOT(RegisterVirtualRoot(WId)) ); + connect(Lumina::ROOTWIN, SIGNAL(RootResized(QRect)), Lumina::NWS, SLOT(setRoot_desktopGeometry(QRect)) ); + + //Native Window Class connections + connect(Lumina::NEF, SIGNAL(WindowCreated(WId)), Lumina::NWS, SLOT(NewWindowDetected(WId))); + connect(Lumina::NEF, SIGNAL(WindowDestroyed(WId)), Lumina::NWS, SLOT(WindowCloseDetected(WId))); + connect(Lumina::NEF, SIGNAL(WindowPropertyChanged(WId, NativeWindow::Property)), Lumina::NWS, SLOT(WindowPropertyChanged(WId, NativeWindow::Property))); + connect(Lumina::NEF, SIGNAL(WindowPropertyChanged(WId, NativeWindow::Property, QVariant)), Lumina::NWS, SLOT(WindowPropertyChanged(WId, NativeWindow::Property, QVariant))); + connect(Lumina::NEF, SIGNAL(WindowPropertiesChanged(WId, QList<NativeWindow::Property>, QList<QVariant>)), Lumina::NWS, SLOT(WindowPropertiesChanged(WId, QList<NativeWindow::Property>, QList<QVariant>)) ); + connect(Lumina::NEF, SIGNAL(RequestWindowPropertyChange(WId, NativeWindow::Property, QVariant)), Lumina::NWS, SLOT(RequestPropertyChange(WId, NativeWindow::Property, QVariant))); + connect(Lumina::NEF, SIGNAL(RequestWindowPropertiesChange(WId, QList<NativeWindow::Property>, QList<QVariant>)), Lumina::NWS, SLOT(RequestPropertiesChange(WId, QList<NativeWindow::Property>, QList<QVariant>))); + connect(Lumina::NEF, SIGNAL(TrayWindowCreated(WId)), Lumina::NWS, SLOT(NewTrayWindowDetected(WId))); + connect(Lumina::NEF, SIGNAL(TrayWindowDestroyed(WId)), Lumina::NWS, SLOT(WindowCloseDetected(WId))); + connect(Lumina::NEF, SIGNAL(PossibleDamageEvent(WId)), Lumina::NWS, SLOT(CheckDamageID(WId))); + connect(Lumina::NEF, SIGNAL(KeyPressed(int, WId)), Lumina::NWS, SLOT(NewKeyPress(int, WId))); + connect(Lumina::NEF, SIGNAL(KeyReleased(int, WId)), Lumina::NWS, SLOT(NewKeyRelease(int, WId))); + connect(Lumina::NEF, SIGNAL(MousePressed(int, WId)), Lumina::NWS, SLOT(NewMousePress(int, WId))); + connect(Lumina::NEF, SIGNAL(MouseReleased(int, WId)), Lumina::NWS, SLOT(NewMouseRelease(int, WId))); + //connect(Lumina::NEF, SIGNAL(MouseMovement(WId)), Lumina::NWS, SLOT()); + //connect(Lumina::NEF, SIGNAL(MouseEnterWindow(WId)), Lumina::NWS, SLOT()); + //connect(Lumina::NEF, SIGNAL(MouseLeaveWindow(WId)), Lumina::NWS, SLOT()); + + //Input Events for ScreenSaver + connect(Lumina::NEF, SIGNAL(KeyPressed(int, WId)), Lumina::SS, SLOT(newInputEvent())); + connect(Lumina::NEF, SIGNAL(KeyReleased(int, WId)), Lumina::SS, SLOT(newInputEvent())); + connect(Lumina::NEF, SIGNAL(MousePressed(int, WId)), Lumina::SS, SLOT(newInputEvent())); + connect(Lumina::NEF, SIGNAL(MouseReleased(int, WId)), Lumina::SS, SLOT(newInputEvent())); + connect(Lumina::NEF, SIGNAL(MouseMovement()), Lumina::SS, SLOT(newInputEvent())); + + connect(Lumina::SS, SIGNAL(LockStatusChanged(bool)), Lumina::NWS, SLOT(ScreenLockChanged(bool)) ); + + //Mouse/Keyboard Shortcut Events (Make sure to connect to the NWS - the raw events need to be ignored sometimes) + connect(Lumina::NWS, SIGNAL(KeyPressDetected(WId, Qt::Key)), Lumina::SHORTCUTS, SLOT(KeyPress(WId, Qt::Key)) ); + connect(Lumina::NWS, SIGNAL(KeyReleaseDetected(WId, Qt::Key)), Lumina::SHORTCUTS, SLOT(KeyRelease(WId, Qt::Key)) ); + connect(Lumina::NWS, SIGNAL(MousePressDetected(WId, NativeWindowSystem::MouseButton)), Lumina::SHORTCUTS, SLOT(MousePress(WId, NativeWindowSystem::MouseButton)) ); + connect(Lumina::NWS, SIGNAL(MouseReleaseDetected(WId, NativeWindowSystem::MouseButton)), Lumina::SHORTCUTS, SLOT(MouseRelease(WId, NativeWindowSystem::MouseButton)) ); + + //NWS Events to the window system + connect(Lumina::NWS, SIGNAL(NewWindowAvailable(NativeWindow*)), Lumina::ROOTWIN, SLOT(NewWindow(NativeWindow*)) ); +} + +//================= + int LSession::VersionStringToNumber(QString version){ version = version.section("-",0,0); //trim any extra labels off the end int maj, mid, min; //major/middle/minor version numbers (<Major>.<Middle>.<Minor>) - maj = mid = min = 0; + maj = mid = min = 0; bool ok = true; maj = version.section(".",0,0).toInt(&ok); if(ok){ mid = version.section(".",1,1).toInt(&ok); }else{ maj = 0; } @@ -233,6 +285,8 @@ int LSession::VersionStringToNumber(QString version){ return (maj*1000000 + mid*1000 + min); } +//================= + //Play System Audio void LSession::playAudioFile(QString filepath){ if( !QFile::exists(filepath) ){ return; } @@ -257,10 +311,10 @@ void LSession::NewCommunication(QStringList list){ for(int i=0; i<list.length(); i++){ if(list[i]=="--logout"){ QTimer::singleShot(0, this, SLOT(StartLogout()) ); - }else if(list[i]=="--lock-session"){ + }else if(list[i]=="--lock-session"){ Lumina::SS->LockScreenNow(); } - } + } } void LSession::launchStartupApps(){ @@ -269,44 +323,44 @@ void LSession::launchStartupApps(){ //Enable Numlock if(LUtils::isValidBinary("numlockx")){ //make sure numlockx is installed - if(Lumina::SETTINGS->value(DesktopSettings::System,"EnableNumlock",false).toBool()){ + if(DesktopSettings::instance()->value(DesktopSettings::System,"EnableNumlock",false).toBool()){ QProcess::startDetached("numlockx on"); }else{ QProcess::startDetached("numlockx off"); } } - int tmp = LOS::ScreenBrightness(); - if(tmp>0){ + /*int tmp = LOS::ScreenBrightness(); + if(tmp>0){ LOS::setScreenBrightness( tmp ); qDebug() << " - - Screen Brightness:" << QString::number(tmp)+"%"; } //ExternalProcess::launch("nice lumina-open -autostart-apps"); - + //Re-load the screen brightness and volume settings from the previous session // Wait until after the XDG-autostart functions, since the audio system might be started that way qDebug() << " - Loading previous settings"; tmp = LOS::audioVolume(); LOS::setAudioVolume(tmp); qDebug() << " - - Audio Volume:" << QString::number(tmp)+"%"; - + */ //Now play the login music since we are finished - if(Lumina::SETTINGS->value(DesktopSettings::System,"PlayStartupAudio",true).toBool()){ + if(DesktopSettings::instance()->value(DesktopSettings::System,"PlayStartupAudio",true).toBool()){ //Make sure to re-set the system volume to the last-used value at outset - int vol = LOS::audioVolume(); - if(vol>=0){ LOS::setAudioVolume(vol); } + /*int vol = LOS::audioVolume(); + if(vol>=0){ LOS::setAudioVolume(vol); }*/ LSession::playAudioFile(LOS::LuminaShare()+"Login.ogg"); } qDebug() << " - Finished with startup routines"; } void LSession::checkUserFiles(){ - //internal version conversion examples: + //internal version conversion examples: // [1.0.0 -> 1000000], [1.2.3 -> 1002003], [0.6.1 -> 6001] - QString OVS = Lumina::SETTINGS->value(DesktopSettings::System,"DesktopVersion","0").toString(); //Old Version String + QString OVS = DesktopSettings::instance()->value(DesktopSettings::System,"DesktopVersion","0").toString(); //Old Version String bool changed = LDesktopUtils::checkUserFiles(OVS); if(changed){ //Save the current version of the session to the settings file (for next time) - Lumina::SETTINGS->setValue(DesktopSettings::System,"DesktopVersion", this->applicationVersion()); + DesktopSettings::instance()->setValue(DesktopSettings::System,"DesktopVersion", this->applicationVersion()); } } @@ -322,26 +376,34 @@ void LSession::StartLogout(){ void LSession::StartShutdown(bool skipupdates){ CleanupSession(); LOS::systemShutdown(skipupdates); - QCoreApplication::exit(0); + QCoreApplication::exit(0); } void LSession::StartReboot(bool skipupdates){ CleanupSession(); LOS::systemRestart(skipupdates); - QCoreApplication::exit(0); + QCoreApplication::exit(0); +} + +void LSession::LaunchApplication(QString app){ + +} + +void LSession::LaunchStandardApplication(QString app){ + } void LSession::reloadIconTheme(){ //Wait a moment for things to settle before sending out the signal to the interfaces QApplication::processEvents(); QApplication::processEvents(); - emit IconThemeChanged(); + emit IconThemeChanged(); } //Temporarily change the session locale (nothing saved between sessions) void LSession::switchLocale(QString localeCode){ - currTranslator = LUtils::LoadTranslation(this, "lumina-desktop", localeCode, currTranslator); - if(currTranslator!=0 || localeCode=="en_US"){ + currTranslator = LUtils::LoadTranslation(this, "lumina-desktop", localeCode, currTranslator); + if(currTranslator!=0 || localeCode=="en_US"){ LUtils::setLocaleEnv(localeCode); //will set everything to this locale (no custom settings) } emit LocaleChanged(); diff --git a/src-qt5/core/lumina-desktop-unified/LSession.h b/src-qt5/core/lumina-desktop-unified/LSession.h index c791c66b..0d666bfa 100644 --- a/src-qt5/core/lumina-desktop-unified/LSession.h +++ b/src-qt5/core/lumina-desktop-unified/LSession.h @@ -17,7 +17,8 @@ public: private: void CleanupSession(); - + void setupGlobalConnections(); + int VersionStringToNumber(QString version); QMediaPlayer *mediaObj; void playAudioFile(QString filepath); @@ -27,9 +28,12 @@ private: public slots: void setupSession(); //called during startup only + //Slots for public access/usage void StartLogout(); void StartShutdown(bool skipupdates = false); void StartReboot(bool skipupdates = false); + void LaunchApplication(QString app); + void LaunchStandardApplication(QString app); void reloadIconTheme(); //will emit the IconThemeChanged signal when ready void switchLocale(QString localeCode); //will emit the LocaleChanged signal when ready @@ -45,7 +49,7 @@ signals: //General Signals void LocaleChanged(); void IconThemeChanged(); - + }; #endif diff --git a/src-qt5/core/lumina-desktop-unified/defaults/desktop/desktop.conf b/src-qt5/core/lumina-desktop-unified/defaults/desktop/desktop.conf new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/src-qt5/core/lumina-desktop-unified/defaults/desktop/desktop.conf diff --git a/src-qt5/core/lumina-desktop-unified/defaults/desktop/environment.conf b/src-qt5/core/lumina-desktop-unified/defaults/desktop/environment.conf new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/src-qt5/core/lumina-desktop-unified/defaults/desktop/environment.conf diff --git a/src-qt5/core/lumina-desktop-unified/defaults/desktop/favorites.conf b/src-qt5/core/lumina-desktop-unified/defaults/desktop/favorites.conf new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/src-qt5/core/lumina-desktop-unified/defaults/desktop/favorites.conf diff --git a/src-qt5/core/lumina-desktop-unified/defaults/desktop/keys.conf b/src-qt5/core/lumina-desktop-unified/defaults/desktop/keys.conf new file mode 100644 index 00000000..c1417b85 --- /dev/null +++ b/src-qt5/core/lumina-desktop-unified/defaults/desktop/keys.conf @@ -0,0 +1,8 @@ +[strict] +Ctrl+Alt+Backspace=Logout +Pause=Lockscreen +Alt+L=Lockscreen + +[desktop] +Alt+F1=Launch: terminal +Print=Launch: screenshot diff --git a/src-qt5/core/lumina-desktop-unified/defaults/desktop/session.conf b/src-qt5/core/lumina-desktop-unified/defaults/desktop/session.conf new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/src-qt5/core/lumina-desktop-unified/defaults/desktop/session.conf diff --git a/src-qt5/core/lumina-desktop-unified/defaults/desktop/theme.conf b/src-qt5/core/lumina-desktop-unified/defaults/desktop/theme.conf new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/src-qt5/core/lumina-desktop-unified/defaults/desktop/theme.conf diff --git a/src-qt5/core/lumina-desktop-unified/global-includes.h b/src-qt5/core/lumina-desktop-unified/global-includes.h index 867076db..1d0ab068 100644 --- a/src-qt5/core/lumina-desktop-unified/global-includes.h +++ b/src-qt5/core/lumina-desktop-unified/global-includes.h @@ -33,6 +33,7 @@ #include <QPropertyAnimation> #include <QAnimationGroup> #include <QParallelAnimationGroup> +#include <QSequentialAnimationGroup> #include <QWindow> #include <QWidget> #include <QWidgetAction> @@ -59,15 +60,13 @@ #include <RootWindow.h> #include <ExternalProcess.h> #include <NativeWindow.h> +#include <NativeWindowSystem.h> +#include <NativeEventFilter.h> // Standard C includes #include <unistd.h> //Setup any global defines (no classes or global objects: use "global-objects.h" for that) -namespace Lumina{ - //Flags/enumerations - enum WindowAction{MoveResize, Show, Hide, TryClose, Closed, WA_NONE}; - enum MouseButton{NoButton, LeftButton, RightButton, MidButton, BackButton, ForwardButton, TaskButton, WheelUp, WheelDown, WheelLeft, WheelRight}; -}; + #endif diff --git a/src-qt5/core/lumina-desktop-unified/global-objects.h b/src-qt5/core/lumina-desktop-unified/global-objects.h index 2f298e27..474412eb 100644 --- a/src-qt5/core/lumina-desktop-unified/global-objects.h +++ b/src-qt5/core/lumina-desktop-unified/global-objects.h @@ -19,7 +19,7 @@ //Load the appropriate "EventFilter" class for the graphics subsystem //#ifndef USE_WAYLAND -#include "src-events/LXcbEventFilter.h" +//#include "src-events/LXcbEventFilter.h" //#endif #include "src-events/LShortcutEvents.h" @@ -30,11 +30,15 @@ #define ANIMTIME 80 //animation time in milliseconds //Global flags/structures -namespace Lumina{ +namespace Lumina{ //Data structures and objects - extern EventFilter *EFILTER; //Native Event Watcher + // -- Native Window System Objects + extern NativeWindowSystem *NWS; + extern NativeEventFilter *NEF; + + //extern EventFilter *EFILTER; //Native Event Watcher extern LShortcutEvents *SHORTCUTS; //Keyboard/mouse shortcut events - extern DesktopSettings *SETTINGS; //All Settings files + //extern DesktopSettings *SETTINGS; //All Settings files //ScreenSaver extern LScreenSaver *SS; //Root Window @@ -43,7 +47,7 @@ namespace Lumina{ //LWindowManager *WM; //Application List extern XDGDesktopList *APPLIST; - + extern 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 1de8308d..defa66f4 100644 --- a/src-qt5/core/lumina-desktop-unified/lumina-desktop.pro +++ b/src-qt5/core/lumina-desktop-unified/lumina-desktop.pro @@ -12,12 +12,13 @@ target.path = $${L_BINDIR} include(../libLumina/ResizeMenu.pri) include(../libLumina/LDesktopUtils.pri) #includes LUtils and LOS include(../libLumina/LuminaXDG.pri) -include(../libLumina/LuminaX11.pri) +#include(../libLumina/LuminaX11.pri) include(../libLumina/LuminaSingleApplication.pri) include(../libLumina/LuminaThemes.pri) include(../libLumina/DesktopSettings.pri) include(../libLumina/RootWindow.pri) include(../libLumina/ExternalProcess.pri) +include(../libLumina/NativeWindow.pri) #include all the main individual source groups include(src-screensaver/screensaver.pri) @@ -43,10 +44,12 @@ FORMS += BootSplash.ui #include(panel-plugins/panel-plugins.pri) #include(desktop-plugins/desktop-plugins.pri) - +# Install all the various files for the desktop itself desktop.path = $${L_SESSDIR} desktop.files = lumina-desktop.desktop +defaults.path = $${L_SHAREDIR}/lumina-desktop +defaults.files = defaults/* TRANSLATIONS = i18n/lumina-desktop_af.ts \ i18n/lumina-desktop_ar.ts \ @@ -114,7 +117,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 +INSTALLS += target desktop defaults WITH_I18N{ INSTALLS += dotrans diff --git a/src-qt5/core/lumina-desktop-unified/main.cpp b/src-qt5/core/lumina-desktop-unified/main.cpp index 6141f1ea..0b67de46 100644 --- a/src-qt5/core/lumina-desktop-unified/main.cpp +++ b/src-qt5/core/lumina-desktop-unified/main.cpp @@ -8,10 +8,11 @@ #include "global-includes.h" #include "LSession.h" -#define DEBUG 0 +#define DEBUG 1 int main(int argc, char ** argv) { + qDebug() << "Starting lumina-desktop-unified..."; if (argc > 1) { if (QString(argv[1]) == QString("--version")){ qDebug() << LDesktopUtils::LuminaDesktopVersion(); @@ -27,8 +28,10 @@ int main(int argc, char ** argv) LXDG::setEnvironmentVars(); setenv("DESKTOP_SESSION","Lumina",1); setenv("XDG_CURRENT_DESKTOP","Lumina",1); + setenv("QT_NO_GLIB", "1", 1); //Disable the glib event loop within Qt at runtime (performance hit + bugs) unsetenv("QT_QPA_PLATFORMTHEME"); //causes issues with Lumina themes - not many people have this by default... //Startup the session + if(DEBUG){ qDebug() << "Starting unified session"; } LSession a(argc, argv); if(!a.isPrimaryProcess()){ return 0; } QTime *timer=0; @@ -41,6 +44,6 @@ int main(int argc, char ** argv) theme.refresh(); if(DEBUG){ qDebug() << "Exec Time:" << timer->elapsed(); delete timer;} int retCode = a.exec(); - qDebug() << "Finished Closing Down Lumina"; + qDebug() << "Finished Closing Down Unified Lumina"; return retCode; } diff --git a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/systemdashboard/LSysDashboard.cpp b/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/systemdashboard/LSysDashboard.cpp index 267a7cb0..b9d70e97 100644 --- a/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/systemdashboard/LSysDashboard.cpp +++ b/src-qt5/core/lumina-desktop-unified/src-DE/panel-plugins/systemdashboard/LSysDashboard.cpp @@ -77,7 +77,7 @@ void LSysDashboard::updateIcon(bool force){ } void LSysDashboard::resetIcon(){ - button->setIcon( LXDG::findIcon("dashboard-show","")); + button->setIcon( LXDG::findIcon("arrow-down-drop-circle","")); } void LSysDashboard::openMenu(){ diff --git a/src-qt5/core/lumina-desktop-unified/src-WM/DEPENDENCIES b/src-qt5/core/lumina-desktop-unified/src-WM/DEPENDENCIES deleted file mode 100644 index fa0ce486..00000000 --- a/src-qt5/core/lumina-desktop-unified/src-WM/DEPENDENCIES +++ /dev/null @@ -1,17 +0,0 @@ -Most dependencies required to build Lumina are listed in the -DEPENDENCIES file in the directory above this one. The following -are dependencies specific to Lumina's window manager. - - -FreeBSD/TrueOS -======================= - - - - -Linux (Debian/Ubuntu) -======================= - -libxcb-screensaver0-dev - - diff --git a/src-qt5/core/lumina-desktop-unified/src-WM/GlobalDefines.h b/src-qt5/core/lumina-desktop-unified/src-WM/GlobalDefines.h deleted file mode 100644 index 3ec278ac..00000000 --- a/src-qt5/core/lumina-desktop-unified/src-WM/GlobalDefines.h +++ /dev/null @@ -1,74 +0,0 @@ -//=========================================== -// Lumina-DE source code -// Copyright (c) 2015, Ken Moore -// Available under the 3-clause BSD license -// See the LICENSE file for full details -//=========================================== -// Global defines and enumerations for the window manager -//=========================================== -#ifndef _LUMINA_WINDOW_MANAGER_GLOBAL_DEFINES_H -#define _LUMINA_WINDOW_MANAGER_GLOBAL_DEFINES_H - -//Qt includes -#include <QObject> -#include <QFrame> -#include <QLabel> -#include <QToolButton> -#include <QMenu> -#include <QHBoxLayout> -#include <QMouseEvent> -#include <QAction> -#include <QPoint> -#include <QFile> -#include <QDir> -#include <QString> -#include <QTextStream> -#include <QUrl> -#include <QDebug> -#include <QStringList> -#include <QAbstractNativeEventFilter> -#include <QList> -#include <QX11Info> -#include <QCoreApplication> -#include <QPropertyAnimation> -#include <QAnimationGroup> -#include <QParallelAnimationGroup> -#include <QWindow> -#include <QWidget> -#include <QBackingStore> -#include <QPaintEvent> -#include <QPainter> -#include <QSettings> -#include <QHostInfo> -#include <QDesktopWidget> -#include <QStyleOption> -#include <QThread> - -// libLumina includes -#include <LuminaX11.h> -#include <LuminaXDG.h> -#include <LuminaOS.h> -#include <LuminaThemes.h> -#include <LuminaUtils.h> -#include <LuminaSingleApplication.h> - -//XCB Includes -#include <xcb/xcb.h> -#include <xcb/xproto.h> -#include <xcb/damage.h> -#include <xcb/xcb_atom.h> -#include <xcb/xcb_aux.h> //included in libxcb-util.so - -#define ANIMTIME 80 //animation time in milliseconds -//Global flags/structures -namespace LWM{ - //Flags/enumerations - enum WindowAction{MoveResize, Show, Hide, TryClose, Closed, WA_NONE}; - - //Data structures - extern LXCB *SYSTEM; -}; - - - -#endif diff --git a/src-qt5/core/lumina-desktop-unified/src-WM/LWindow.cpp b/src-qt5/core/lumina-desktop-unified/src-WM/LWindow.cpp deleted file mode 100644 index 84ff2ffd..00000000 --- a/src-qt5/core/lumina-desktop-unified/src-WM/LWindow.cpp +++ /dev/null @@ -1,474 +0,0 @@ -//=========================================== -// Lumina-DE source code -// Copyright (c) 2015, Ken Moore -// Available under the 3-clause BSD license -// See the LICENSE file for full details -//=========================================== -#include "LWindow.h" - -LWindowFrame::LWindowFrame(WId client, QWidget *parent) : QFrame(parent, Qt::X11BypassWindowManagerHint){ - activeState = LWindowFrame::Normal; - CID = client; - lastAction = LWM::WA_NONE; - Closing = false; - //qDebug() << "New Window:" << CID << "Frame:" << this->winId(); - this->setMouseTracking(true); //need this to determine mouse location when not clicked - this->setObjectName("LWindowFrame"); - this->setStyleSheet("LWindowFrame#LWindowFrame{ border: 2px solid white; border-radius:3px; } QWidget#TitleBar{background: grey; } QLabel{ color: black; }"); - InitWindow(); //initially create all the child widgets - //LWM::SYSTEM->setupEventsForFrame(this->winId()); - updateAppearance(); //this loads the appearance based on window/theme settings - //QApplication::processEvents(); - //Now set the frame size on this window - SyncSize(); - SyncText(); - this->show(); -} - -LWindowFrame::~LWindowFrame(){ -} - -// ================= -// PRIVATE -// ================= -void LWindowFrame::InitWindow(){ - anim = new QPropertyAnimation(this); //For simple window animations - anim->setTargetObject(this); - anim->setDuration(ANIMTIME); //In milliseconds - connect(anim, SIGNAL(finished()), this, SLOT(finishedAnimation()) ); - titleBar = new QLabel(this); //This is the "container" for all the title buttons/widgets - titleBar->setObjectName("TitleBar"); - titleBar->setSizePolicy(QSizePolicy::Minimum,QSizePolicy::Minimum); - titleBar->setFocusPolicy(Qt::NoFocus); - titleBar->setCursor(Qt::ArrowCursor); - title = new QLabel(this); //Shows the window title/text - title->setObjectName("Title"); - title->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); - title->setCursor(Qt::ArrowCursor); - title->setFocusPolicy(Qt::NoFocus); - icon = new QLabel(this); //Contains the window icon - icon->setObjectName("Icon"); - icon->setCursor(Qt::ArrowCursor); - icon->setFocusPolicy(Qt::NoFocus); - minB = new QToolButton(this); //Minimize Button - minB->setObjectName("Minimize"); - minB->setCursor(Qt::ArrowCursor); - minB->setFocusPolicy(Qt::NoFocus); - connect(minB, SIGNAL(clicked()), this, SLOT(minClicked()) ); - maxB = new QToolButton(this); //Maximize Button - maxB->setObjectName("Maximize"); - maxB->setCursor(Qt::ArrowCursor); - maxB->setFocusPolicy(Qt::NoFocus); - connect(maxB, SIGNAL(clicked()), this, SLOT(maxClicked()) ); - closeB = new QToolButton(this); - closeB->setObjectName("Close"); - closeB->setCursor(Qt::ArrowCursor); - closeB->setFocusPolicy(Qt::NoFocus); - connect(closeB, SIGNAL(clicked()), this, SLOT(closeClicked()) ); - otherB = new QToolButton(this); //Button to place any other actions - otherB->setObjectName("Options"); - otherB->setCursor(Qt::ArrowCursor); - otherB->setPopupMode(QToolButton::InstantPopup); - otherB->setStyleSheet("QToolButton::menu-indicator{ image: none; }"); - otherB->setFocusPolicy(Qt::NoFocus); - otherM = new QMenu(this); //menu of "other" actions for the window - otherB->setMenu(otherM); - connect(otherM, SIGNAL(triggered(QAction*)), this, SLOT(otherClicked(QAction*)) ); - //Now assemble the titlebar - QHBoxLayout *HL = new QHBoxLayout(this); - HL->setContentsMargins(0,0,0,0); - HL->addWidget(otherB); - HL->addWidget(icon); - HL->addWidget(title); - HL->addWidget(minB); - HL->addWidget(maxB); - HL->addWidget(closeB); - titleBar->setLayout(HL); - QVBoxLayout *VL = new QVBoxLayout(this); - this->setLayout(VL); - //The WinWidget container appears shifted right/down by 1 pixel for some reason - // Adjust the margins to account for this variation - VL->setContentsMargins(1,1,2,2); - VL->setSpacing(0); - //Have the window take the same initial size of the client window - QRect geom = LWM::SYSTEM->WM_Window_Geom(CID); - qDebug() << " - Load Size Hints" << "initial size:" << geom.size(); - icccm_size_hints SH = LWM::SYSTEM->WM_ICCCM_GetNormalHints(CID); - qDebug() << " - - Got Normal Hints"; - if(!SH.isValid()){ SH = LWM::SYSTEM->WM_ICCCM_GetSizeHints(CID); } - qDebug() << " - - Start resizing..."; - if(SH.base_width>geom.width() && SH.base_height>geom.height()){ this->resize(SH.base_width, SH.base_height); } - else if(SH.min_width>geom.width() && SH.min_height>geom.height()){ this->resize(SH.min_width, SH.min_height); } - else if(SH.width>geom.width() && SH.height>geom.height()){ this->resize(SH.width, SH.height); } - else if(geom.isNull()){ this->resize(100,80); } - else{ this->resize( geom.size() ); } - qDebug() << " - done"; - - //Now embed the native window into the frame - WIN = QWindow::fromWinId(CID); - WinWidget = QWidget::createWindowContainer( WIN, this); - WinWidget->setCursor(Qt::ArrowCursor); //this is just a fallback - the window itself will adjust it - //WINBACK = new QBackingStore(WIN); //create a data backup for the widget - - //Now assemble te initial layout for the window (all while still invisible) - /*VL->addWidget(titleBar); - VL->addWidget(WinWidget); - VL->setStretch(1,1);*/ -} - -LWindowFrame::ModState LWindowFrame::getStateAtPoint(QPoint pt, bool setoffset){ - //Note: pt should be in widget-relative coordinates, not global - if(!this->layout()->geometry().contains(pt)){ - //above the frame itself - need to figure out which quadrant it is in (8-directions) - if(pt.y() < 3){ - //One of the top options - if(pt.x() < 3){ - if(setoffset){ offset.setX(pt.x()); offset.setY(pt.y()); } //difference from top-left corner - return ResizeTopLeft; - }else if(pt.x() > (this->width()-3)){ - if(setoffset){ offset.setX(this->width()-pt.x()); offset.setY(pt.y()); } //difference from top-right corner - return ResizeTopRight; - }else{ - if(setoffset){ offset.setX(0); offset.setY(pt.y()); } //difference from top edge (X does not matter) - return ResizeTop; - } - }else if(pt.y() > (this->height()-3) ){ - //One of the bottom options - if(pt.x() < 3){ - if(setoffset){ offset.setX(pt.x()); offset.setY(this->height()-pt.y()); } //difference from bottom-left corner - return ResizeBottomLeft; - }else if(pt.x() > (this->width()-3)){ - if(setoffset){ offset.setX(this->width()-pt.x()); offset.setY(this->height()-pt.y()); } //difference from bottom-right corner - return ResizeBottomRight; - }else{ - if(setoffset){ offset.setX(0); offset.setY(this->height() - pt.y()); } //difference from bottom edge (X does not matter) - return ResizeBottom; - } - }else{ - //One of the side options - if(pt.x() < 3){ - if(setoffset){ offset.setX(pt.x()); offset.setY(0); } //difference from left edge (Y does not matter) - return ResizeLeft; - }else if(pt.x() > (this->width()-3) ){ - if(setoffset){ offset.setX(this->width()-pt.x()); offset.setY(0); } //difference from right edge (Y does not matter) - return ResizeRight; - }else{ - return Normal; - } - } - } - return Normal; -} - -void LWindowFrame::setMouseCursor(ModState state, bool override){ - Qt::CursorShape shape; - switch(state){ - case Normal: - shape = Qt::ArrowCursor; - break; - case Move: - shape = Qt::SizeAllCursor; - break; - case ResizeTop: - shape = Qt::SizeVerCursor; - break; - case ResizeTopRight: - shape = Qt::SizeBDiagCursor; - break; - case ResizeRight: - shape = Qt::SizeHorCursor; - break; - case ResizeBottomRight: - shape = Qt::SizeFDiagCursor; - break; - case ResizeBottom: - shape = Qt::SizeVerCursor; - break; - case ResizeBottomLeft: - shape = Qt::SizeBDiagCursor; - break; - case ResizeLeft: - shape = Qt::SizeHorCursor; - break; - case ResizeTopLeft: - shape = Qt::SizeFDiagCursor; - break; - } - if(override){ - QApplication::setOverrideCursor(QCursor(shape)); - }else{ - this->setCursor(shape); - } -} - -// ========================== -// WINDOW INTERACTIONS -//========================== -void LWindowFrame::SyncSize(bool fromwin){ - //sync the window/frame geometries (generally only done before embedding the client window) - int frame = this->frameWidth(); - int TH = titleBar->height(); - //Now load the information about the window and adjust the frame to match - if(fromwin){ lastGeom = LWM::SYSTEM->WM_Window_Geom(CID); } - else{ lastGeom = this->geometry(); } - qDebug() << "Initial Size:" << lastGeom << frame << TH; - //Add in the frame size - lastGeom.moveTop(lastGeom.y()-frame-TH); - lastGeom.setHeight(lastGeom.height()+(2*frame)+TH); - lastGeom.moveLeft(lastGeom.x()-frame); - lastGeom.setWidth( lastGeom.width()+(2*frame)); - QList<unsigned int> margins; - margins << frame << frame << frame+TH << frame; //L/R/Top/Bottom - qDebug() << " - With Frame:" << lastGeom; - //Now adjust for a out-of-bounds location - if(lastGeom.x() < 0){ lastGeom.moveLeft(0); } - if(lastGeom.y() < 0){ lastGeom.moveTop(0); } - qDebug() << " - Adjusted:" << lastGeom; - this->setGeometry(lastGeom); - LWM::SYSTEM->WM_Set_Frame_Extents(CID, margins); -} - -void LWindowFrame::SyncText(){ - QString txt = WIN->title(); - if(txt.isEmpty()){ txt = LWM::SYSTEM->WindowName(CID); } - if(txt.isEmpty()){ txt = LWM::SYSTEM->OldWindowName(CID); } - if(txt.isEmpty()){ txt = LWM::SYSTEM->WindowVisibleName(CID); } - if(txt.isEmpty()){ txt = LWM::SYSTEM->WindowIconName(CID); } - if(txt.isEmpty()){ txt = LWM::SYSTEM->WindowVisibleIconName(CID); } - if(txt.isEmpty()){ txt = LWM::SYSTEM->WM_ICCCM_GetClass(CID); } - title->setText(txt); -} - -// SIMPLE ANIMATIONS -void LWindowFrame::showAnimation(LWM::WindowAction act){ - bool useanimation = (act!=lastAction); - if(anim->state()==QAbstractAnimation::Running){ - qDebug() << "New Animation Event:" << act; - return; - } - //Setup the animation routine - if(act==LWM::Show){ - if(useanimation){ - lastGeom = this->geometry(); - //Expand out from center point - anim->setPropertyName("geometry"); - anim->setStartValue( QRect(lastGeom.center(), QSize(0,0) ) ); - anim->setEndValue( this->geometry() ); - //Fade in gradually - //anim->setPropertyName("windowOpacity"); - //anim->setStartValue( 0.0 ); - //anim->setEndValue( 1.0 ); - }else{ - ShowClient(true); - this->raise(); - this->show(); //just show it right away - } - - }else if(act==LWM::Hide){ - if(useanimation){ - //Collapse in on center point - lastGeom = this->geometry(); - anim->setPropertyName("geometry"); - anim->setStartValue( QRect(this->geometry()) ); - anim->setEndValue( QRect(this->geometry().center(), QSize(0,0) ) ); - }else{ - this->hide(); //just hide it right away - } - }else if(act==LWM::Closed){ - //Need to clean up the container widget first to prevent XCB errors - //qDebug() << "Window Closed:" << WIN->winId() << CID; - if(useanimation){ - //Collapse in on center line - lastGeom = this->geometry(); - anim->setPropertyName("geometry"); - anim->setStartValue( QRect(this->geometry()) ); - anim->setEndValue( QRect(this->geometry().x(), this->geometry().center().y(), this->width(), 0 ) ); - }else{ - CloseAll(); //just hide it right away - } - } - if(useanimation){ - ShowClient(false); - this->show(); - qDebug() << " - Starting Animation:" << act; - lastAction = act; - anim->start(); - }; -} - -void LWindowFrame::ShowClient(bool show){ - if(show && this->layout()->indexOf(WinWidget)<0 && !Closing){ - while(this->layout()->count()>0){ this->layout()->removeItem(0); } - this->layout()->addWidget(titleBar); - this->layout()->setAlignment(titleBar, Qt::AlignTop); - this->layout()->addWidget(WinWidget); - static_cast<QVBoxLayout*>(this->layout())->setStretch(1,1); - LWM::SYSTEM->WM_ShowWindow(CID); - }else if( !show && this->layout()->indexOf(WinWidget)>=0){ - LWM::SYSTEM->WM_HideWindow(CID); - this->layout()->removeWidget(WinWidget); - } -} - -void LWindowFrame::finishedAnimation(){ - //Also set any final values - qDebug() << " - Finished Animation:" << lastAction; - switch(lastAction){ - case LWM::Show: - ShowClient(true); - break; - case LWM::Closed: - case LWM::Hide: - this->lower(); - this->hide(); - LWM::SYSTEM->WM_HideWindow(this->winId()); - default: - break; - } - if(Closing){ - qDebug() << "Emitting finished signal"; - emit Finished(); - } -} - -// ================= -// PUBLIC SLOTS -// ================= -void LWindowFrame::updateAppearance(){ - //Reload any button icons and such - minB->setIcon(LXDG::findIcon("window-suppressed","")); - maxB->setIcon(LXDG::findIcon("view-fullscreen","")); - closeB->setIcon(LXDG::findIcon("application-exit","")); - otherB->setIcon(LXDG::findIcon("configure","")); -} - -void LWindowFrame::windowChanged(LWM::WindowAction act){ - //A window property was changed - update accordingly - switch(act){ - case LWM::Closed: - Closing = true; - case LWM::Hide: - case LWM::Show: - showAnimation(act); - break; - case LWM::MoveResize: - //Re-adjust to the new position/size of the window - SyncSize(true); - break; - default: - break; //do nothing - } -} -// ================= -// PRIVATE SLOTS -// ================= -void LWindowFrame::closeClicked(){ - qDebug() << "Closing Window" << LWM::SYSTEM->WM_ICCCM_GetClass(CID); - //First try the close event to let the client app do cleanup/etc - LWM::SYSTEM->WM_CloseWindow(CID); -} - -void LWindowFrame::minClicked(){ - qDebug() << "Minimize Window"; - windowChanged(LWM::Hide); -} - -void LWindowFrame::maxClicked(){ - if(normalGeom.isNull()){ - qDebug() << "Maximize Window"; - normalGeom = this->geometry(); //save for later - this->showMaximized(); - }else{ - qDebug() << "Restore Window"; - this->showNormal(); - this->setGeometry(normalGeom); - normalGeom = QRect(); //clear it - } -} - -void LWindowFrame::otherClicked(QAction* act){ - QString action = act->whatsThis(); -} - -void LWindowFrame::CloseAll(){ - qDebug() << " - Closing Frame"; - this->hide(); - emit Finished(); -} -// ===================== -// PROTECTED -// ===================== -void LWindowFrame::mousePressEvent(QMouseEvent *ev){ - qDebug() << "Frame Mouse Press Event"; - offset.setX(0); offset.setY(0); - if(activeState != Normal){ return; } // do nothing - already in a state of grabbed mouse - this->activateWindow(); - LWM::SYSTEM->WM_Set_Active_Window(CID); - if(this->childAt(ev->pos())!=0){ - //Check for any non-left-click event and skip it - if(ev->button()!=Qt::LeftButton){ return; } - activeState = Move; - offset.setX(ev->pos().x()); offset.setY(ev->pos().y()); - }else{ - //Clicked on the frame somewhere - activeState = getStateAtPoint(ev->pos(), true); //also have it set the offset variable - } - setMouseCursor(activeState, true); //this one is an override cursor - -} - -void LWindowFrame::mouseMoveEvent(QMouseEvent *ev){ - ev->accept(); - if(activeState == Normal){ - setMouseCursor( getStateAtPoint(ev->pos()) ); //just update the mouse cursor - - }else{ - //Currently in a modification state - QRect geom = this->geometry(); - switch(activeState){ - case Move: - geom.moveTopLeft(ev->globalPos()-offset); //will not change size - break; - case ResizeTop: - geom.setTop(ev->globalPos().y()-offset.y()); - break; - case ResizeTopRight: - geom.setTopRight(ev->globalPos()-offset); - break; - case ResizeRight: - geom.setRight(ev->globalPos().x()-offset.x()); - break; - case ResizeBottomRight: - geom.setBottomRight(ev->globalPos()-offset); - break; - case ResizeBottom: - geom.setBottom(ev->globalPos().y()-offset.y()); - break; - case ResizeBottomLeft: - geom.setBottomLeft(ev->globalPos()-offset); - break; - case ResizeLeft: - geom.setLeft(ev->globalPos().x()-offset.x()); - break; - case ResizeTopLeft: - geom.setTopLeft(ev->globalPos()-offset); - break; - default: - break; - } - this->setGeometry(geom); - } -} - -void LWindowFrame::mouseReleaseEvent(QMouseEvent *ev){ - //Check for a right-click event - qDebug() << "Frame Mouse Release Event"; - ev->accept(); - if( (activeState==Normal) && (this->childAt(ev->pos())==titleBar) && (ev->button()==Qt::RightButton) ){ - otherM->popup(ev->globalPos()); - return; - } - activeState = Normal; - QApplication::restoreOverrideCursor(); - setMouseCursor( getStateAtPoint(ev->pos()) ); -} diff --git a/src-qt5/core/lumina-desktop-unified/src-WM/LWindow.h b/src-qt5/core/lumina-desktop-unified/src-WM/LWindow.h deleted file mode 100644 index ceefca83..00000000 --- a/src-qt5/core/lumina-desktop-unified/src-WM/LWindow.h +++ /dev/null @@ -1,114 +0,0 @@ -//=========================================== -// Lumina-DE source code -// Copyright (c) 2015, Ken Moore -// Available under the 3-clause BSD license -// See the LICENSE file for full details -//=========================================== -#ifndef _LUMINA_DESKTOP_WINDOW_FRAME_H -#define _LUMINA_DESKTOP_WINDOW_FRAME_H - -#include "GlobalDefines.h" - -class LWindowFrame : public QFrame{ - Q_OBJECT -public: - LWindowFrame(WId client, QWidget *parent = 0); //MUST have a valid client window - ~LWindowFrame(); - -private: - void InitWindow(); //Initialize all the internal widgets - - //Window status - enum ModState{Normal, Move, ResizeTop, ResizeTopRight, ResizeRight, ResizeBottomRight, ResizeBottom, ResizeBottomLeft, ResizeLeft, ResizeTopLeft}; - ModState activeState; - QPoint offset; //needed for movement calculations (offset from mouse click to movement point) - //Functions for getting/setting state - ModState getStateAtPoint(QPoint pt, bool setoffset = false); //generally used for mouse location detection - void setMouseCursor(ModState, bool override = false); //Update the mouse cursor based on state - - //General Properties/Modifications - WId CID; //Client ID - QWindow *WIN; //Embedded window container - QWidget *WinWidget; - bool Closing; - LWM::WindowAction lastAction; - //QBackingStore *WINBACK; - void SyncSize(bool fromwin = false); //sync the window/frame geometries - void SyncText(); - - //Window Frame Widgets/Items - QLabel *titleBar, *title, *icon; - QToolButton *minB, *maxB, *closeB, *otherB; - QMenu *otherM; //menu of "other" actions for the window - QRect normalGeom; //used for restoring back to original size after maximization/fullscreen - - //Animations - QPropertyAnimation *anim; //used for appear/disappear animations - QRect lastGeom; //used for appear/disappear animations - void showAnimation(LWM::WindowAction); //sets lastAction - void ShowClient(bool show); - -public slots: - //These slots are generally used for the outside event watcher to prod for changes - void updateAppearance(); //reload the theme and change styling as necessary - void windowChanged(LWM::WindowAction); - -private slots: - void finishedAnimation(); //uses lastAction - void closeClicked(); - void minClicked(); - void maxClicked(); - void otherClicked(QAction*); - - void CloseAll(); - -protected: - void mousePressEvent(QMouseEvent*); - void mouseMoveEvent(QMouseEvent*); - void mouseReleaseEvent(QMouseEvent*); - -signals: - void Finished(); //This means the window is completely finished (with animations and such) and should be removed from any lists - -}; - -class LWindow : public QObject{ - Q_OBJECT -signals: - void Finished(WId client); //ready to be removed -private: - WId CID; - LWindowFrame *FID; - bool needsFrame(QList<LXCB::WINDOWTYPE> list){ - if(list.isEmpty()){ return !LWM::SYSTEM->WM_ICCCM_GetClass(CID).contains("Lumina-DE"); } //assume a normal window (fallback) - return !(list.contains(LXCB::T_DESKTOP) || list.contains(LXCB::T_DOCK) || list.contains(LXCB::T_TOOLBAR) \ - || list.contains(LXCB::T_SPLASH) || list.contains(LXCB::T_DROPDOWN_MENU) \ - || list.contains(LXCB::T_TOOLTIP) || list.contains(LXCB::T_POPUP_MENU) || list.contains(LXCB::T_TOOLTIP) \ - || list.contains(LXCB::T_COMBO) || list.contains(LXCB::T_DND) ); - } -private slots: - void frameclosed(){ - qDebug() << " - Window got frame closed signal"; - //FID->close(); - //delete FID; - emit Finished(CID); - } -public: - LWindow(WId client){ - FID= 0; - CID = client; - if( needsFrame(LWM::SYSTEM->WM_Get_Window_Type(CID)) ){ - FID = new LWindowFrame(CID); - connect(FID, SIGNAL(Finished()), this, SLOT(frameclosed()) ); - } - } - ~LWindow(){ - if(FID!=0){delete FID;} - } - - WId clientID(){ return CID; } - bool hasFrame(){ return FID!=0; } - LWindowFrame* frame(){ return FID; } - -}; -#endif diff --git a/src-qt5/core/lumina-desktop-unified/src-WM/LWindowManager.cpp b/src-qt5/core/lumina-desktop-unified/src-WM/LWindowManager.cpp deleted file mode 100644 index 14ce6897..00000000 --- a/src-qt5/core/lumina-desktop-unified/src-WM/LWindowManager.cpp +++ /dev/null @@ -1,186 +0,0 @@ -//=========================================== -// Lumina-DE source code -// Copyright (c) 2015, Ken Moore -// Available under the 3-clause BSD license -// See the LICENSE file for full details -//=========================================== -#include "LWindowManager.h" - -#define DEBUG 1 - -LWindowManager::LWindowManager(){ - -} - -LWindowManager::~LWindowManager(){ - -} - -bool LWindowManager::start(){ - //Setup the initial screen/session values - LWM::SYSTEM->WM_Set_Root_Supported(); - LWM::SYSTEM->WM_SetNumber_Desktops(1); - LWM::SYSTEM->WM_Set_Current_Desktop(0); - LWM::SYSTEM->WM_Set_Desktop_Names(QStringList() << "one"); - QRect totgeom; - QList<QPoint> viewports; - QList<QRect> geoms; - for(int i=0; i<QApplication::desktop()->screenCount(); i++){ - geoms << QApplication::desktop()->screen(i)->geometry(); - viewports << QPoint(0,0); - totgeom = QApplication::desktop()->screen(i)->geometry(); - } - LWM::SYSTEM->WM_Set_Desktop_Geometry(totgeom.size()); - LWM::SYSTEM->WM_Set_Desktop_Viewport(viewports); - LWM::SYSTEM->WM_Set_Workarea(geoms); - //Should probably do a quick loop over any existing windows with the root as parent (just in case) - QList<WId> initial = LWM::SYSTEM->WM_RootWindows(); - for(int i=0; i<initial.length(); i++){ - NewWindow(initial[i], false); //These ones did not explicitly request to be mapped - } - RestackWindows(); - return true; -} - -void LWindowManager::stop(){ - for(int i=0; i<WINS.length(); i++){ - if(WINS[i]->hasFrame()){ - LWM::SYSTEM->UnembedWindow(WINS[i]->clientID()); - WINS[i]->frame()->close(); - } - } -} -//=============== -// PUBLIC SLOTS -//=============== -void LWindowManager::NewWindow(WId win, bool requested){ - //Verify that this window can/should be managed first - //if(DEBUG){ qDebug() << "New Window:" << LWM::SYSTEM->WM_ICCCM_GetClass(win); } - QString wclass = LWM::SYSTEM->WM_ICCCM_GetClass(win); - if( wclass.contains("lumina-wm",Qt::CaseInsensitive) ){ return; } //just in case: prevent recursion - else{ - bool ok = (wclass.isEmpty() ? false : LWM::SYSTEM->WM_ManageWindow(win, requested) ); - if(!ok){ - //See if this window is just a transient pointing to some other window - WId tran = LWM::SYSTEM->WM_ICCCM_GetTransientFor(win); - if(tran!=win && tran!=0){ - win = tran; - ok = LWM::SYSTEM->WM_ManageWindow(win); - } - } - if(!ok){ return; } - } - if(DEBUG){ qDebug() << "New Managed Window:" << LWM::SYSTEM->WM_ICCCM_GetClass(win); } - LWM::SYSTEM->WM_Set_Active_Window(win); - LWindow *lwin = new LWindow(win); - connect(lwin, SIGNAL(Finished(WId)), this, SLOT(FinishedWindow(WId)) ); - WINS << lwin; - if(lwin->hasFrame()){ - lwin->frame()->windowChanged(LWM::Show); //Make sure to show it right away - }else{ - LWM::SYSTEM->WM_ShowWindow(win); //just map the window right now - } -} - -void LWindowManager::ClosedWindow(WId win){ - for(int i=0; i<WINS.length(); i++){ - if(WINS[i]->clientID()==win){ - qDebug() << " - Closed Window"; - if(WINS[i]->hasFrame()){ WINS[i]->frame()->windowChanged(LWM::Closed); } //do any animations/cleanup - else{ FinishedWindow(win); } - break; - } - } -} - -void LWindowManager::ModifyWindow(WId win, LWM::WindowAction act){ - for(int i=0; i<WINS.length(); i++){ - if(WINS[i]->clientID()==win){ - if(WINS[i]->hasFrame()){ WINS[i]->frame()->windowChanged(act); } - return; - } - } - //If it gets this far - it is an unmanaged window - if(act==LWM::Show){ - NewWindow(win); - } - RestackWindows(); -} - -void LWindowManager::RestackWindows(){ - Stack_Desktop.clear(); Stack_Below.clear(); Stack_Normal.clear(); Stack_Above.clear(); Stack_Fullscreen.clear(); - QList<WId> currwins; - int cwork = LWM::SYSTEM->WM_Get_Current_Desktop(); - int winwork = -1; - QList<LXCB::WINDOWSTATE> states; - QList<LXCB::WINDOWTYPE> types; - for(int i=0; i<WINS.length(); i++){ - //Only show windows on the current desktop - winwork = LWM::SYSTEM->WM_Get_Desktop(WINS[i]->clientID()); - states = LWM::SYSTEM->WM_Get_Window_States(WINS[i]->clientID()); - types = LWM::SYSTEM->WM_Get_Window_Type(WINS[i]->clientID()); - WId id = WINS[i]->clientID(); - if(WINS[i]->hasFrame()){ id = WINS[i]->frame()->winId(); } - if(winwork<0 || winwork == cwork || states.contains(LXCB::S_STICKY) ){ - //Now check the state/type and put it in the proper stack - currwins << WINS[i]->clientID(); //add this to the overall "age" list - //Now add it to the proper stack - if(types.contains(LXCB::T_DESKTOP)){ Stack_Desktop << id; } - else if(states.contains(LXCB::S_BELOW)){ Stack_Below << id; } - else if(types.contains(LXCB::T_DOCK) || states.contains(LXCB::S_ABOVE) ){ Stack_Above << id; } - else if(states.contains(LXCB::S_FULLSCREEN)){ Stack_Fullscreen << id; } - else{ Stack_Normal << id; } - } - } - //Active Window management - WId active = LWM::SYSTEM->WM_Get_Active_Window(); - if(Stack_Desktop.contains(active)){ Stack_Desktop.removeAll(active); Stack_Desktop << active; } - else if(Stack_Below.contains(active)){ Stack_Below.removeAll(active); Stack_Below << active; } - else if(Stack_Normal.contains(active)){ Stack_Normal.removeAll(active); Stack_Normal << active; } - else if(Stack_Above.contains(active)){ Stack_Above.removeAll(active); Stack_Above << active; } - else if(Stack_Fullscreen.contains(active)){ Stack_Fullscreen.removeAll(active); Stack_Fullscreen << active; } - - //Now set the root properties for these lists - LWM::SYSTEM->WM_Set_Client_List(currwins, false); //age-ordered version - LWM::SYSTEM->WM_Set_Client_List(QList<WId>() << Stack_Desktop << Stack_Below << Stack_Normal << Stack_Above << Stack_Fullscreen, true); //stacking order version - //Now re-paint (in order) the windows - RepaintWindows(); -} - -void LWindowManager::RepaintWindows(){ - //Go through all the current windows (in stacking order) and re-paint them - for(int i=0; i<Stack_Desktop.length(); i++){ - LWM::SYSTEM->WM_ShowWindow(Stack_Desktop[i]); - } - for(int i=0; i<Stack_Below.length(); i++){ - LWM::SYSTEM->WM_ShowWindow(Stack_Below[i]); - } - for(int i=0; i<Stack_Normal.length(); i++){ - LWM::SYSTEM->WM_ShowWindow(Stack_Normal[i]); - } - for(int i=0; i<Stack_Above.length(); i++){ - LWM::SYSTEM->WM_ShowWindow(Stack_Above[i]); - } - for(int i=0; i<Stack_Fullscreen.length(); i++){ - LWM::SYSTEM->WM_ShowWindow(Stack_Fullscreen[i]); - } -} - -//================= -// PRIVATE SLOTS -//================= -void LWindowManager::FinishedWindow(WId win){ - for(int i=0; i<WINS.length(); i++){ - if(WINS[i]->clientID() == win){ - qDebug() << " - Finished Window"; - if(win == LWM::SYSTEM->WM_Get_Active_Window()){ - if(i==0 && WINS.length()>1){ LWM::SYSTEM->WM_Set_Active_Window(WINS[i+1]->clientID()); } - else if(i>0){ LWM::SYSTEM->WM_Set_Active_Window(WINS[i-1]->clientID()); } - else{ LWM::SYSTEM->WM_Set_Active_Window( QX11Info::appRootWindow()); } - } - delete WINS.takeAt(i); break; - } - } - //Now update the list of clients - RestackWindows(); -} diff --git a/src-qt5/core/lumina-desktop-unified/src-WM/LWindowManager.h b/src-qt5/core/lumina-desktop-unified/src-WM/LWindowManager.h deleted file mode 100644 index 203efa1b..00000000 --- a/src-qt5/core/lumina-desktop-unified/src-WM/LWindowManager.h +++ /dev/null @@ -1,40 +0,0 @@ -//=========================================== -// Lumina-DE source code -// Copyright (c) 2015, Ken Moore -// Available under the 3-clause BSD license -// See the LICENSE file for full details -//=========================================== -#ifndef _LUMINA_DESKTOP_WINDOW_MANAGER_MAIN_CLASS_H -#define _LUMINA_DESKTOP_WINDOW_MANAGER_MAIN_CLASS_H - -#include "GlobalDefines.h" -#include "LWindow.h" - -class LWindowManager : public QObject{ - Q_OBJECT -public: - LWindowManager(); - ~LWindowManager(); - - bool start(); - void stop(); - -private: - QList<LWindow*> WINS; - QList<WId> Stack_Desktop, Stack_Below, Stack_Normal, Stack_Above, Stack_Fullscreen; -public slots: - void NewWindow(WId win, bool requested = true); - void ClosedWindow(WId win); - void ModifyWindow(WId win, LWM::WindowAction act); - - void RestackWindows(); - void RepaintWindows(); - -private slots: - void FinishedWindow(WId win); //This is used for LWindow connections/animations - -signals: - void NewFullScreenWindows(QList<WId>); -}; - -#endif diff --git a/src-qt5/core/lumina-desktop-unified/src-WM/WMSession.cpp b/src-qt5/core/lumina-desktop-unified/src-WM/WMSession.cpp deleted file mode 100644 index 4a7c6e02..00000000 --- a/src-qt5/core/lumina-desktop-unified/src-WM/WMSession.cpp +++ /dev/null @@ -1,62 +0,0 @@ -//=========================================== -// Lumina-DE source code -// Copyright (c) 2015, Ken Moore -// Available under the 3-clause BSD license -// See the LICENSE file for full details -//=========================================== -#include "WMSession.h" - -#define DEBUG 1 -// ========== -// PUBLIC -// ========== -WMSession::WMSession(){ - if(DEBUG){ qDebug() << "Creating Event Filter..."; } - EFILTER = new EventFilter(); - if(DEBUG){ qDebug() << "Creating Screen Saver..."; } - SS = new LScreenSaver(); - if(DEBUG){ qDebug() << "Creating Window Manager..."; } - WM = new LWindowManager(); - EVThread = new QThread(); - EFILTER->moveToThread(EVThread); - //Setup connections - connect(EFILTER, SIGNAL(NewInputEvent()), SS, SLOT(newInputEvent()) ); - connect(EFILTER, SIGNAL(NewManagedWindow(WId)), WM, SLOT(NewWindow(WId)) ); - connect(EFILTER, SIGNAL(WindowClosed(WId)), WM, SLOT(ClosedWindow(WId)) ); - connect(EFILTER, SIGNAL(ModifyWindow(WId, LWM::WindowAction)), WM, SLOT(ModifyWindow(WId,LWM::WindowAction)) ); - connect(SS, SIGNAL(StartingScreenSaver()), EFILTER, SLOT(StartedSS()) ); - connect(SS, SIGNAL(ClosingScreenSaver()), EFILTER, SLOT(StoppedSS()) ); - connect(WM, SIGNAL(NewFullScreenWindows(QList<WId>)), EFILTER, SLOT(FullScreenChanged(QList<WId>)) ); -} - -WMSession::~WMSession(){ -} - -void WMSession::start(bool SSONLY){ - //Get the screensaver initialized/ready - if(DEBUG){ qDebug() << "Starting Screen Saver..."; } - SS->start(); - if(SSONLY){ return; } - //Now start pulling/filtering events - if(DEBUG){ qDebug() << "Starting Window Manager..."; } - WM->start(); - if(DEBUG){ qDebug() << "Starting Event Filter..."; } - EVThread->start(); - EFILTER->start(); - if(DEBUG){ qDebug() << "Done Starting WM session..."; } -} - -// ========== -// Public Slots -// ========== -void WMSession::reloadIcons(){ - -} - -void WMSession::newInputsAvailable(QStringList inputs){ - for(int i=0; i<inputs.length(); i++){ - if(inputs[i]=="--lock-now" || inputs[i]=="--test-ss"){ - QTimer::singleShot(0,SS, SLOT(LockScreenNow()) ); - } - } -} diff --git a/src-qt5/core/lumina-desktop-unified/src-WM/WMSession.h b/src-qt5/core/lumina-desktop-unified/src-WM/WMSession.h deleted file mode 100644 index 5b511326..00000000 --- a/src-qt5/core/lumina-desktop-unified/src-WM/WMSession.h +++ /dev/null @@ -1,42 +0,0 @@ -//=========================================== -// Lumina-DE source code -// Copyright (c) 2015, Ken Moore -// Available under the 3-clause BSD license -// See the LICENSE file for full details -//=========================================== -#ifndef _LUMINA_DESKTOP_WINDOW_MANAGER_SESSION_H -#define _LUMINA_DESKTOP_WINDOW_MANAGER_SESSION_H - -#include "GlobalDefines.h" - -#include "LScreenSaver.h" -#include "LXcbEventFilter.h" -#include "LWindowManager.h" - -class WMSession : public QObject{ - Q_OBJECT -public: - WMSession(); - ~WMSession(); - - void start(bool SSONLY = false); - -private: - //XCB Event Watcher - EventFilter *EFILTER; - //ScreenSaver - LScreenSaver *SS; - //Window Manager - LWindowManager *WM; - - QThread *EVThread; //X Event thread - -public slots: - void reloadIcons(); - void newInputsAvailable(QStringList); - -private slots: - -}; - -#endif
\ No newline at end of file diff --git a/src-qt5/core/lumina-desktop-unified/src-WM/lumina-wm.pro b/src-qt5/core/lumina-desktop-unified/src-WM/lumina-wm.pro deleted file mode 100644 index 928f8744..00000000 --- a/src-qt5/core/lumina-desktop-unified/src-WM/lumina-wm.pro +++ /dev/null @@ -1,107 +0,0 @@ -include("$${PWD}/../../OS-detect.pri") - -QT += core gui network -greaterThan(QT_MAJOR_VERSION, 4): QT += widgets x11extras - -TARGET = lumina-wm -target.path = $${L_BINDIR} - -LIBS += -lLuminaUtils -lxcb -lxcb-damage -lxcb-composite -lxcb-screensaver -lxcb-util - -DEPENDPATH += ../libLumina - -SOURCES += main.cpp \ - WMSession.cpp \ - LScreenSaver.cpp \ - SSBaseWidget.cpp \ - LLockScreen.cpp \ - LXcbEventFilter.cpp \ - LWindow.cpp \ - LWindowManager.cpp - - -HEADERS += GlobalDefines.h \ - WMSession.h \ - LScreenSaver.h \ - SSBaseWidget.h \ - LLockScreen.h \ - LXcbEventFilter.h \ - LWindow.h \ - LWindowManager.h - -FORMS += LLockScreen.ui - -#Now add in all the screensaver animation plugins -include(animations/animations.pri) - -TRANSLATIONS = i18n/lumina-wm_af.ts \ - i18n/lumina-wm_ar.ts \ - i18n/lumina-wm_az.ts \ - i18n/lumina-wm_bg.ts \ - i18n/lumina-wm_bn.ts \ - i18n/lumina-wm_bs.ts \ - i18n/lumina-wm_ca.ts \ - i18n/lumina-wm_cs.ts \ - i18n/lumina-wm_cy.ts \ - i18n/lumina-wm_da.ts \ - i18n/lumina-wm_de.ts \ - i18n/lumina-wm_el.ts \ - i18n/lumina-wm_en_GB.ts \ - i18n/lumina-wm_en_ZA.ts \ - i18n/lumina-wm_es.ts \ - i18n/lumina-wm_et.ts \ - i18n/lumina-wm_eu.ts \ - i18n/lumina-wm_fa.ts \ - i18n/lumina-wm_fi.ts \ - i18n/lumina-wm_fr.ts \ - i18n/lumina-wm_fr_CA.ts \ - i18n/lumina-wm_gl.ts \ - i18n/lumina-wm_he.ts \ - i18n/lumina-wm_hi.ts \ - i18n/lumina-wm_hr.ts \ - i18n/lumina-wm_hu.ts \ - i18n/lumina-wm_id.ts \ - i18n/lumina-wm_is.ts \ - i18n/lumina-wm_it.ts \ - i18n/lumina-wm_ja.ts \ - i18n/lumina-wm_ka.ts \ - i18n/lumina-wm_ko.ts \ - i18n/lumina-wm_lt.ts \ - i18n/lumina-wm_lv.ts \ - i18n/lumina-wm_mk.ts \ - i18n/lumina-wm_mn.ts \ - i18n/lumina-wm_ms.ts \ - i18n/lumina-wm_mt.ts \ - i18n/lumina-wm_nb.ts \ - i18n/lumina-wm_nl.ts \ - i18n/lumina-wm_pa.ts \ - i18n/lumina-wm_pl.ts \ - i18n/lumina-wm_pt.ts \ - i18n/lumina-wm_pt_BR.ts \ - i18n/lumina-wm_ro.ts \ - i18n/lumina-wm_ru.ts \ - i18n/lumina-wm_sk.ts \ - i18n/lumina-wm_sl.ts \ - i18n/lumina-wm_sr.ts \ - i18n/lumina-wm_sv.ts \ - i18n/lumina-wm_sw.ts \ - i18n/lumina-wm_ta.ts \ - i18n/lumina-wm_tg.ts \ - i18n/lumina-wm_th.ts \ - i18n/lumina-wm_tr.ts \ - i18n/lumina-wm_uk.ts \ - i18n/lumina-wm_uz.ts \ - i18n/lumina-wm_vi.ts \ - i18n/lumina-wm_zh_CN.ts \ - i18n/lumina-wm_zh_HK.ts \ - i18n/lumina-wm_zh_TW.ts \ - i18n/lumina-wm_zu.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 - -WITH_I18N{ - INSTALLS += dotrans -} diff --git a/src-qt5/core/lumina-desktop-unified/src-WM/main.cpp b/src-qt5/core/lumina-desktop-unified/src-WM/main.cpp deleted file mode 100644 index 02e48b7b..00000000 --- a/src-qt5/core/lumina-desktop-unified/src-WM/main.cpp +++ /dev/null @@ -1,56 +0,0 @@ -//=========================================== -// Lumina-DE source code -// Copyright (c) 2015, Ken Moore -// Available under the 3-clause BSD license -// See the LICENSE file for full details -//=========================================== - -#include "GlobalDefines.h" -//Initialize any global structures here -LXCB *LWM::SYSTEM = 0; - -//Local includes -#include "WMSession.h" -#include "LWindow.h" -#include <QDialog> - - -//#define DEBUG 0 -int main(int argc, char ** argv) -{ - qDebug() << "Starting lumina-wm..."; - LTHEME::LoadCustomEnvSettings(); - LSingleApplication a(argc, argv, "lumina-wm"); - if(!a.isPrimaryProcess()){ return 0; } //Inputs forwarded on to the primary already - LuminaThemeEngine themes(&a); - - //Setup the global structures - LWM::SYSTEM = new LXCB(); - if( a.inputlist.contains("--test-win") ){ - //Simple override to test out the window class - qDebug() << "Starting window test..."; - QLabel dlg(0, Qt::Window | Qt::BypassWindowManagerHint); //this test should be ignored by the current WM - dlg.setText("Sample Window"); - dlg.setWindowTitle("Test"); - dlg.resize(200,100); - dlg.setStyleSheet("background: rgba(255,255,255,100); color: black;"); - dlg.move(100,100); - dlg.show(); - //dlg.move(100,100); - qDebug() << " - Loading window frame..."; - LWindow win(dlg.winId()); //have it wrap around the dialog - qDebug() << " - Show frame..."; - win.frame()->windowChanged(LWM::Show); - qDebug() << " - Start event loop..."; - a.setQuitOnLastWindowClosed(true); - return a.exec(); - } - WMSession w; - w.start(a.inputlist.contains("--test-ss")); - QObject::connect(&themes, SIGNAL(updateIcons()), &w, SLOT(reloadIcons()) ); - QObject::connect(&a, SIGNAL(InputsAvailable(QStringList)), &w, SLOT(newInputsAvailable(QStringList)) ); - if(!a.inputlist.isEmpty()){ w.newInputsAvailable(a.inputlist); } - int retCode = a.exec(); - - return retCode; -} diff --git a/src-qt5/core/lumina-desktop-unified/src-desktop/ContextMenu.cpp b/src-qt5/core/lumina-desktop-unified/src-desktop/ContextMenu.cpp index e363af01..c3e9a1db 100644 --- a/src-qt5/core/lumina-desktop-unified/src-desktop/ContextMenu.cpp +++ b/src-qt5/core/lumina-desktop-unified/src-desktop/ContextMenu.cpp @@ -13,13 +13,13 @@ void DesktopContextMenu::SettingsChanged(DesktopSettings::File file){ void DesktopContextMenu::UpdateMenu(){ //Put a label at the top - unsigned int num = Lumina::EFILTER->currentWorkspace(); //LX11::GetCurrentDesktop(); + unsigned int num = Lumina::NWS->currentWorkspace(); workspaceLabel->setText( "<b>"+QString(tr("Workspace %1")).arg(QString::number(num+1))+"</b>"); this->clear(); //clear it for refresh this->addAction(wkspaceact); this->addSeparator(); //Now load the user's menu setup and fill the menu - QStringList items = Lumina::SETTINGS->value(DesktopSettings::ContextMenu, "itemlist", QStringList()<< "terminal" << "filemanager" << "line" << "settings" <<"lockdesktop").toStringList(); + QStringList items = DesktopSettings::instance()->value(DesktopSettings::ContextMenu, "itemlist", QStringList()<< "terminal" << "filemanager" << "line" << "settings" <<"lockdesktop").toStringList(); //usewinmenu=false; for(int i=0; i<items.length(); i++){ if(items[i]=="terminal"){ this->addAction(LXDG::findIcon("utilities-terminal",""), tr("Terminal"))->setWhatsThis("lumina-open -terminal"); } @@ -76,7 +76,7 @@ DesktopContextMenu::~DesktopContextMenu(){ } void DesktopContextMenu::start(){ - connect(Lumina::SETTINGS, SIGNAL(FileModified(DesktopSettings::File)), this, SLOT(SettingsChanged(DesktopSettings::File)) ); + connect(DesktopSettings::instance(), SIGNAL(FileModified(DesktopSettings::File)), this, SLOT(SettingsChanged(DesktopSettings::File)) ); connect(this, SIGNAL(LockSession()), Lumina::SS, SLOT(LockScreenNow()) ); //Still need to connect to some "workspaceChanged(int)" signal @@ -85,6 +85,7 @@ void DesktopContextMenu::start(){ // === PRIVATE SLOTS === void DesktopContextMenu::LaunchAction(QAction *act){ + //qDebug() << "Launch Action Triggered:" << act->whatsThis(); if(act->whatsThis().isEmpty() || act->parent()!=this ){ return; } qDebug() << "Launch Menu Action:" << act->whatsThis(); QString cmd = act->whatsThis(); diff --git a/src-qt5/core/lumina-desktop-unified/src-desktop/ContextMenu.h b/src-qt5/core/lumina-desktop-unified/src-desktop/ContextMenu.h index 8b0509fb..1e3165ec 100644 --- a/src-qt5/core/lumina-desktop-unified/src-desktop/ContextMenu.h +++ b/src-qt5/core/lumina-desktop-unified/src-desktop/ContextMenu.h @@ -19,7 +19,7 @@ private: QLabel *workspaceLabel; QWidgetAction *wkspaceact; -public: +public: DesktopContextMenu(QWidget *parent = 0); ~DesktopContextMenu(); diff --git a/src-qt5/core/lumina-desktop-unified/src-events/LShortcutEvents.cpp b/src-qt5/core/lumina-desktop-unified/src-events/LShortcutEvents.cpp index b09a1a5b..3d50112c 100644 --- a/src-qt5/core/lumina-desktop-unified/src-events/LShortcutEvents.cpp +++ b/src-qt5/core/lumina-desktop-unified/src-events/LShortcutEvents.cpp @@ -25,18 +25,9 @@ void LShortcutEvents::start(){ clearTimer->setSingleShot(true); connect(clearTimer, SIGNAL(timeout()), this, SLOT(clearKeys()) ); } - //Now connect this object to the global EFILTER object signals - connect(Lumina::EFILTER, SIGNAL(KeyPressed(WId, int)), this, SLOT(KeyPress(WId, int)) ); - connect(Lumina::EFILTER, SIGNAL(KeyReleased(WId, int)), this, SLOT(KeyRelease(WId, int)) ); - connect(Lumina::EFILTER, SIGNAL(MousePressed(WId, Lumina::MouseButton)), this, SLOT(MousePress(WId, Lumina::MouseButton)) ); - connect(Lumina::EFILTER, SIGNAL(MouseReleased(WId, Lumina::MouseButton)), this, SLOT(MouseRelease(WId, Lumina::MouseButton)) ); } void LShortcutEvents::stop(){ - disconnect(Lumina::EFILTER, SIGNAL(KeyPressed(WId, int)), this, SLOT(KeyPress(WId, int)) ); - disconnect(Lumina::EFILTER, SIGNAL(KeyReleased(WId, int)), this, SLOT(KeyRelease(WId, int)) ); - disconnect(Lumina::EFILTER, SIGNAL(MousePressed(WId, Lumina::MouseButton)), this, SLOT(MousePress(WId, Lumina::MouseButton)) ); - disconnect(Lumina::EFILTER, SIGNAL(MouseReleased(WId, Lumina::MouseButton)), this, SLOT(MouseRelease(WId, Lumina::MouseButton)) ); clearKeys(); } @@ -46,11 +37,11 @@ void LShortcutEvents::CheckKeySequence(WId win){ QString shortcut = keylistToString(); //Now see if there is a match for this shortcut // "strict" actions (operate even if a non-desktop window is active/focused) - QString action = Lumina::SETTINGS->value(DesktopSettings::Keys, "strict/"+shortcut, "").toString(); + QString action = DesktopSettings::instance()->value(DesktopSettings::Keys, "strict/"+shortcut, "").toString(); qDebug() << "Strict Action:" << "strict/"+shortcut << action; if(action.isEmpty() && win==0){ //"loose" actions (operating on the desktop or root window itself) - action = Lumina::SETTINGS->value(DesktopSettings::Keys, "desktop/"+shortcut, "").toString(); + action = DesktopSettings::instance()->value(DesktopSettings::Keys, "desktop/"+shortcut, "").toString(); qDebug() << "Desktop Action:" << "desktop/"+shortcut << action; } if(!action.isEmpty()){ @@ -59,42 +50,42 @@ void LShortcutEvents::CheckKeySequence(WId win){ } } -void LShortcutEvents::CheckMouseSequence(WId win, Lumina::MouseButton button, bool release){ - if(release && (button == Lumina::WheelUp || button == Lumina::WheelDown || button == Lumina::WheelLeft || button == Lumina::WheelRight)){ +void LShortcutEvents::CheckMouseSequence(WId win, NativeWindowSystem::MouseButton button, bool release){ + if(release && (button == NativeWindowSystem::WheelUp || button == NativeWindowSystem::WheelDown || button == NativeWindowSystem::WheelLeft || button == NativeWindowSystem::WheelRight)){ return; //skip mouse release events for wheel actions (always come in pairs of press/release) - }else if(keylist.isEmpty() || button == Lumina::NoButton){ return; } //Never overwrite mouse clicks themselves - just combinations with key presses + }else if(keylist.isEmpty() || button == NativeWindowSystem::NoButton){ return; } //Never overwrite mouse clicks themselves - just combinations with key presses //Get the keyboard modifiers QString shortcut = keylistToString(); //Add the mouse button to the shortcut switch(button){ - case Lumina::LeftButton: + case NativeWindowSystem::LeftButton: shortcut.append("+LeftMouse"); break; - case Lumina::RightButton: + case NativeWindowSystem::RightButton: shortcut.append("+RightMouse"); break; - case Lumina::MidButton: + case NativeWindowSystem::MidButton: shortcut.append("+MiddleMouse"); break; - case Lumina::BackButton: + case NativeWindowSystem::BackButton: shortcut.append("+BackMouse"); break; - case Lumina::ForwardButton: + case NativeWindowSystem::ForwardButton: shortcut.append("+ForwardMouse"); break; - case Lumina::TaskButton: + case NativeWindowSystem::TaskButton: shortcut.append("+TaskMouse"); break; - case Lumina::WheelUp: + case NativeWindowSystem::WheelUp: shortcut.append("+WheelUp"); break; - case Lumina::WheelDown: + case NativeWindowSystem::WheelDown: shortcut.append("+WheelDown"); break; - case Lumina::WheelLeft: + case NativeWindowSystem::WheelLeft: shortcut.append("+WheelLeft"); break; - case Lumina::WheelRight: + case NativeWindowSystem::WheelRight: shortcut.append("+WheelRight"); break; default: @@ -103,10 +94,10 @@ void LShortcutEvents::CheckMouseSequence(WId win, Lumina::MouseButton button, bo if(shortcut.isEmpty()){ return; } //Now see if there is a match for this shortcut // "strict" actions (operate even if a non-desktop window is active/focused) - QString action = Lumina::SETTINGS->value(DesktopSettings::Keys, "strict/"+shortcut, "").toString(); + QString action = DesktopSettings::instance()->value(DesktopSettings::Keys, "strict/"+shortcut, "").toString(); if(action.isEmpty() && win==0){ //"loose" actions (operating on the desktop or root window itself) - action = Lumina::SETTINGS->value(DesktopSettings::Keys, "desktop/"+shortcut, "").toString(); + action = DesktopSettings::instance()->value(DesktopSettings::Keys, "desktop/"+shortcut, "").toString(); } if(!action.isEmpty()){ //Found a valid action - go ahead and evaluate it @@ -115,23 +106,44 @@ void LShortcutEvents::CheckMouseSequence(WId win, Lumina::MouseButton button, bo } QString LShortcutEvents::keylistToString(){ + if(keylist.isEmpty()){ return ""; } QString shortcut; + QList<int> keys; int ckey = 0; for(int i=0; i<keylist.length(); i++){ - if(i>0){ shortcut.append("+"); } - shortcut.append( QString::number(keylist[i]) ); + if(i == keylist.length()-1){ ckey+=keylist[i]; } //always treat the last key as a non-modifier + else if(keylist[i] == Qt::Key_Control){ ckey+=Qt::CTRL; } //use the modifier form of the key + else if(keylist[i] == Qt::Key_Alt){ ckey += Qt::ALT; } + else if(keylist[i] == Qt::Key_Shift){ ckey += Qt::SHIFT; } + else if(keylist[i] == Qt::Key_Meta){ ckey += Qt::META; } + else{ ckey+= keylist[i]; keys << ckey; ckey = 0; } //non-modifier - need to finish current mod+key combo and start a new one + } + if(ckey!=0){ keys << ckey; } //add in the last one as well + if(keys.length() < 1){ return ""; } + QKeySequence seq; + switch(keys.length()){ + case 1: + seq = QKeySequence(keys[0]); break; + case 2: + seq = QKeySequence(keys[0], keys[1]); break; + case 3: + seq = QKeySequence(keys[0], keys[1], keys[2]); break; + default: + seq = QKeySequence(keys[0],keys[1], keys[2], keys[3]); break; } /*qDebug() << "KeyList to String:"; - qDebug() << " keys:" << keylist; - qDebug() << " string:" << shortcut;*/ - return shortcut; + qDebug() << " keys:" << seq; + qDebug() << " string:" << seq.toString();*/ + return seq.toString(); } void LShortcutEvents::evaluateShortcutAction(QString action){ qDebug() << "Found Shortcut Action:" << action; evaluated = true; - if(action.startsWith("Exec=")){ - emit LaunchApplication(action.section("=",1,-1)); + if(action.startsWith("Exec:")){ + emit LaunchApplication(action.section(":",1,-1)); return; + }else if(action.startsWith("Launch:")){ + emit LaunchStandardApplication(action.section(":",1,-1)); } //Specific Internal actions action = action.toLower(); @@ -140,13 +152,14 @@ void LShortcutEvents::evaluateShortcutAction(QString action){ else if(action=="reboot"){ emit StartReboot(); } else if(action=="shutdown"){ emit StartShutdown(); } else if(action=="show_leave_options"){ emit OpenLeaveDialog(); } + else if(action=="lockscreen"){ emit LockSession(); } } // === PUBLIC SLOTS === -void LShortcutEvents::KeyPress(WId window, int key){ +void LShortcutEvents::KeyPress(WId window, Qt::Key key){ if(window!=WIN){ keylist.clear(); WIN = window; } - if(!keylist.contains(key)){ + /*if(!keylist.contains(key)){ //Put it in the list in ascending order bool found = false; for(int i=0; i<keylist.length() && !found; i++){ @@ -154,28 +167,35 @@ void LShortcutEvents::KeyPress(WId window, int key){ } if(!found){ keylist << key; } evaluated = false; + }*/ + if(!keylist.isEmpty()){ + if( keylist.last()!=key ){ keylist << key; } + }else{ + keylist << key; } //Evaluate the key sequence only when the first one is released - clearTimer->start(); //will "restart" if already running + clearTimer->start(); //will "restart" if already running } -void LShortcutEvents::KeyRelease(WId window, int key){ +void LShortcutEvents::KeyRelease(WId window, Qt::Key key){ if(window!=WIN){ keylist.clear(); return; } if(!evaluated){ CheckKeySequence(WIN); } //run this "before" removing the key from the list - keylist.removeAll(key); - clearTimer->start(); //will "restart" if already running + for(int i=keylist.length()-1; i>=0; i--){ + if(keylist[i] == key){ keylist.removeAt(i); break; } + } + clearTimer->start(); //will "restart" if already running } -void LShortcutEvents::MousePress(WId window, Lumina::MouseButton button){ +void LShortcutEvents::MousePress(WId window, NativeWindowSystem::MouseButton button){ //We do not provide shortcuts for combinations of mouse buttons - just mouse+keyboard combinations CheckMouseSequence(window, button, false); - clearTimer->start(); //will "restart" if already running + clearTimer->start(); //will "restart" if already running } -void LShortcutEvents::MouseRelease(WId window, Lumina::MouseButton button){ +void LShortcutEvents::MouseRelease(WId window, NativeWindowSystem::MouseButton button){ //We do not provide shortcuts for combinations of mouse buttons - just mouse+keyboard combinations CheckMouseSequence(window, button, true); - clearTimer->start(); //will "restart" if already running + clearTimer->start(); //will "restart" if already running } void LShortcutEvents::clearKeys(){ diff --git a/src-qt5/core/lumina-desktop-unified/src-events/LShortcutEvents.h b/src-qt5/core/lumina-desktop-unified/src-events/LShortcutEvents.h index d1c3b4e0..4560cb1f 100644 --- a/src-qt5/core/lumina-desktop-unified/src-events/LShortcutEvents.h +++ b/src-qt5/core/lumina-desktop-unified/src-events/LShortcutEvents.h @@ -22,22 +22,22 @@ public: void stop(); private: - QList<int> keylist; //keys currently held down (NOTE: QKeySequence has a max of 4 keys for combinations) + QList< Qt::Key > keylist; //keys currently held down WId WIN; //current window being acted on by the keys QTimer *clearTimer; //used to clear the internal keylist every once in a while if no events come in. bool evaluated; //Actual check functions void CheckKeySequence(WId win); - void CheckMouseSequence(WId win, Lumina::MouseButton, bool release); + void CheckMouseSequence(WId win, NativeWindowSystem::MouseButton, bool release); QString keylistToString(); void evaluateShortcutAction(QString action); public slots: - void KeyPress(WId window, int key); - void KeyRelease(WId window, int key); - void MousePress(WId window, Lumina::MouseButton); - void MouseRelease(WId window, Lumina::MouseButton); + void KeyPress(WId window, Qt::Key key); + void KeyRelease(WId window, Qt::Key key); + void MousePress(WId window, NativeWindowSystem::MouseButton); + void MouseRelease(WId window, NativeWindowSystem::MouseButton); void clearKeys(); signals: @@ -50,7 +50,7 @@ signals: // Session Options void ChangeWorkspace(int); // +/- 1 from current void LockSession(); - + //Active Window Options void ActiveWindowMoveToWorkspace(int); //number of workspace void ActiveWindowTakeToWorkspace(int); //number of workspace @@ -66,6 +66,7 @@ signals: //General Utility Launch void LaunchApplication(QString exec); + void LaunchStandardApplication(QString app); //standard app like "terminal", "browser", "email", "settings", etc.. }; diff --git a/src-qt5/core/lumina-desktop-unified/src-events/LXcbEventFilter.cpp b/src-qt5/core/lumina-desktop-unified/src-events/LXcbEventFilter.cpp deleted file mode 100644 index 7031f3df..00000000 --- a/src-qt5/core/lumina-desktop-unified/src-events/LXcbEventFilter.cpp +++ /dev/null @@ -1,500 +0,0 @@ -//=========================================== -// Lumina-desktop source code -// Copyright (c) 2015-2017, Ken Moore -// Available under the 3-clause BSD license -// See the LICENSE file for full details -//=========================================== -#include "LXcbEventFilter.h" - -#include <xcb/xcb_aux.h> -#include <xcb/damage.h> - -//================================================== -// NOTE: All the XCB interactions and atoms are accessed via: -// obj->XCB->EWMH.(atom name) -// obj->XCB->(do something) -//================================================== -#include "global-objects.h" - -//SYSTEM TRAY STANDARD DEFINITIONS -#define SYSTEM_TRAY_REQUEST_DOCK 0 -#define SYSTEM_TRAY_BEGIN_MESSAGE 1 -#define SYSTEM_TRAY_CANCEL_MESSAGE 2 - -#include <xcb/xcb_keysyms.h> - -#define DEBUG 0 - -// Also keep the root window/screen around for use in the filters -namespace L_XCB{ - xcb_screen_t *root_screen; - xcb_window_t root; -} - -//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; - WMFlag = 0; -} - -void EventFilter::start(){ - if(DEBUG){ qDebug() << " - Install event filter..."; } - QCoreApplication::instance()->installNativeEventFilter(EF); - if(DEBUG){ qDebug() << " - Run request check..."; } - 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 = XCB->WM_CreateWindow(); - XCB->setupEventsForRoot(WMFlag); - XCB->WM_Set_Supporting_WM(WMFlag); - - XCB->WM_Set_Root_Supported(); //announce all the various options that the WM supports - static_cast<XCBEventFilter*>(EF)->startSystemTray(); - - QCoreApplication::instance()->flush(); -} - -void EventFilter::stop(){ - static_cast<XCBEventFilter*>(EF)->stopSystemTray(); -} - -//Session Interaction/Information -QList<WId> EventFilter::currentTrayApps(){ - return static_cast<XCBEventFilter*>(EF)->trayApps(); -} - -unsigned int EventFilter::currentWorkspace(){ -return XCB->CurrentWorkspace(); -} - -QList<NativeWindow*> EventFilter::currentWindows(){ - return static_cast<XCBEventFilter*>(EF)->windowList(); -} - -// === PUBLIC SLOTS === -void EventFilter::RegisterVirtualRoot(WId id){ - XCB->WM_Set_Virtual_Roots( QList<WId>() << id ); -} - -void EventFilter::TryCloseWindow(WId id){ - XCB->WM_CloseWindow(id, false); //do not force close -} - -void EventFilter::TryActivateWindow(WId id){ - XCB->WM_Set_Active_Window(id); -} -//============================= -// 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; - - //_NET_SYSTEM_TRAY_OPCODE - xcb_intern_atom_cookie_t cookie = xcb_intern_atom(QX11Info::connection(), 0, 23,"_NET_SYSTEM_TRAY_OPCODE"); - xcb_intern_atom_reply_t *r = xcb_intern_atom_reply(QX11Info::connection(), cookie, NULL); - if(r){ - _NET_SYSTEM_TRAY_OPCODE = r->atom; - free(r); - } -} - -//This function format taken directly from the Qt5.3 documentation -bool XCBEventFilter::nativeEventFilter(const QByteArray &eventType, void *message, long *){ - //if(stopping){ return false; } //don't do any parsing - //qDebug() << "New Event"; - bool stopevent = false; - if(eventType=="xcb_generic_event_t"){ - //Convert to known event type (for X11 systems) - xcb_generic_event_t *ev = static_cast<xcb_generic_event_t *>(message); - //Now parse the event and emit signals as necessary - switch( ev->response_type & ~0x80){ -//============================== -// INTERACTIVITY EVENTS -//============================== - case XCB_KEY_PRESS: - //This is a keyboard key press - //qDebug() << "Key Press Event"; - stopevent = BlockInputEvent( ((xcb_key_press_event_t *) ev)->root ); //use the main "root" window - not the child widget - if(!stopevent){ obj->emit KeyPressed( InputWindow(((xcb_key_press_event_t *) ev)->root), ((xcb_key_press_event_t *) ev)->detail ); } - break; - case XCB_KEY_RELEASE: - //This is a keyboard key release - //qDebug() << "Key Release Event"; - stopevent = BlockInputEvent( ((xcb_key_release_event_t *) ev)->root ); //use the main "root" window - not the child widget - if(!stopevent){ obj->emit KeyReleased( InputWindow(((xcb_key_release_event_t *) ev)->root), ((xcb_key_release_event_t *) ev)->detail ); } - break; - case XCB_BUTTON_PRESS: - //This is a mouse button press - qDebug() << "Button Press Event"; - 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 - obj->emit MousePressed( InputWindow(((xcb_button_press_event_t *) ev)->root), MouseKey(((xcb_key_press_event_t *) ev)->detail) ); - 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; - case XCB_BUTTON_RELEASE: - //This is a mouse button release - qDebug() << "Button Release Event"; - //xcb_button_release_event_t *tmp = (xcb_button_release_event_t *)ev; - stopevent = BlockInputEvent( ((xcb_button_release_event_t *) ev)->root ); //use the main "root" window - not the child widget - if(!stopevent){ obj->emit MouseReleased( InputWindow(((xcb_button_release_event_t *) ev)->root), MouseKey(((xcb_key_press_event_t *) ev)->detail) ); } - break; - case XCB_MOTION_NOTIFY: - //This is a mouse movement event - //qDebug() << "Motion Notify Event"; - stopevent = BlockInputEvent( ((xcb_motion_notify_event_t *) ev)->root ); //use the main "root" window - not the child widget); - break; - case XCB_ENTER_NOTIFY: - //This is a mouse movement event when mouse goes over a new window - //qDebug() << "Enter Notify Event"; - stopevent = BlockInputEvent( ((xcb_enter_notify_event_t *) ev)->root ); - break; - case XCB_LEAVE_NOTIFY: - //This is a mouse movement event when mouse goes leaves a window - //qDebug() << "Leave Notify Event"; - stopevent = BlockInputEvent(); - break; -//============================== - case XCB_EXPOSE: - //qDebug() << "Expose Notify Event:"; - //qDebug() << " - Given Window:" << ((xcb_property_notify_event_t*)ev)->window; - break; -//============================== - case XCB_MAP_NOTIFY: - //qDebug() << "Window Map Event:" << ((xcb_map_notify_event_t *)ev)->window; - if(Lumina::SS->isLocked()){ waitingToShow << ((xcb_map_notify_event_t *)ev)->window ; } - else{ - for(int i=0; i<windows.length(); i++){ - if(windows[i]->id() == ((xcb_map_notify_event_t *)ev)->window){ windows[i]->setProperty(NativeWindow::Visible, true); break; } - } - } - break; //This is just a notification that a window was mapped - nothing needs to change here - case XCB_MAP_REQUEST: - //qDebug() << "Window Map Request Event"; - SetupNewWindow( ((xcb_map_request_event_t *) ev) ); - break; -//============================== - case XCB_CREATE_NOTIFY: - //qDebug() << "Window Create Event"; - break; -//============================== - case XCB_UNMAP_NOTIFY: - //qDebug() << "Window Unmap Event:" << ((xcb_unmap_notify_event_t *)ev)->window; - if(waitingToShow.contains(((xcb_unmap_notify_event_t *)ev)->window)){ waitingToShow.removeAll(((xcb_unmap_notify_event_t *)ev)->window); } - for(int i=0; i<windows.length(); i++){ - if(windows[i]->id() == ((xcb_unmap_notify_event_t *)ev)->window){ windows[i]->setProperty(NativeWindow::Visible, false); break; } - } - break; -//============================== - case XCB_DESTROY_NOTIFY: - //qDebug() << "Window Closed Event:" << ((xcb_destroy_notify_event_t *)ev)->window; - if( !rmTrayApp( ((xcb_destroy_notify_event_t *) ev)->window ) ){ - //qDebug() <<" - Non-tray window"; - for(int i=0; i<windows.length(); i++){ - if(windows[i]->id() == ((xcb_destroy_notify_event_t *)ev)->window){ - windows[i]->emit WindowClosed(windows[i]->id()); - QTimer::singleShot(500, windows.takeAt(i), SLOT(deleteLater()) ); //give a few moments first, then clean up the object - break; - } - } - } - break; -//============================== - case XCB_FOCUS_IN: - //qDebug() << "Focus In Event:"; - break; -//============================== - case XCB_FOCUS_OUT: - //qDebug() << "Focus Out Event:"; - break; -//============================== - case XCB_PROPERTY_NOTIFY: - //qDebug() << "Property Notify Event:"; - ParsePropertyEvent((xcb_property_notify_event_t*)ev); - break; -//============================== - case XCB_CLIENT_MESSAGE: - //qDebug() << "Client Message Event"; - //qDebug() << " - Given Window:" << ((xcb_client_message_event_t*)ev)->window; - if( ((xcb_client_message_event_t*)ev)->type == _NET_SYSTEM_TRAY_OPCODE && ((xcb_client_message_event_t*)ev)->format == 32){ - //data32[0] is timestamp, [1] is opcode, [2] is window handle - if(SYSTEM_TRAY_REQUEST_DOCK == ((xcb_client_message_event_t*)ev)->data.data32[1]){ - addTrayApp( ((xcb_client_message_event_t*)ev)->data.data32[2] ); - } - //Ignore the System Tray messages at the moment - - } - break; -//============================== - case XCB_CONFIGURE_NOTIFY: - //qDebug() << "Configure Notify Event"; - break; -//============================== - case XCB_CONFIGURE_REQUEST: - //qDebug() << "Configure Request Event"; - break; -//============================== - case XCB_SELECTION_CLEAR: - //qDebug() << "Selection Clear Event"; - break; -//============================== - case 85: //not sure what event this is - but it seems to come up very often (just hide the notice) - case 0: - case XCB_GE_GENERIC: - break; //generic event - don't do anything special - default: - //if( (ev->response_type & ~0x80)==TrayDmgID){ - checkDamageID( ((xcb_damage_notify_event_t*)ev)->drawable ); - //}else{ - qDebug() << "Default Event:" << (ev->response_type & ~0x80); - //} -//============================== - } - } - return false; - //never stop event handling (this will not impact the X events themselves - just the internal 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 true; } //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 true; } //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; - return true; -} - -QList<NativeWindow*> XCBEventFilter::windowList(){ - return windows; -} - -//========= -// PRIVATE -//========= -bool XCBEventFilter::BlockInputEvent(WId){ - //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(Lumina::SS->isLocked()){ qDebug() << "SS Locked"; return true; } - // - Check the state of any fullscreen apps - /*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; -} - -WId XCBEventFilter::InputWindow(WId win){ - //check window and see if it is a desktop/root window (return 0) or an external app window - if(win == L_XCB::root){ return 0; } - QString cl = obj->XCB->WindowClass(win); - qDebug() << "Got Input Event on window:" << cl; - if(cl.toLower()=="lumina-desktop"){ return 0; } - return win; //external app window -} - -Lumina::MouseButton XCBEventFilter::MouseKey(int keycode){ - switch(keycode){ - case 1: - return Lumina::LeftButton; - case 3: - return Lumina::RightButton; - case 2: - return Lumina::MidButton; - case 4: - return Lumina::WheelUp; - case 5: - return Lumina::WheelDown; - case 6: - return Lumina::WheelLeft; - case 7: - return Lumina::WheelRight; - case 8: - return Lumina::BackButton; //Not sure if this is correct yet (1/27/17) - case 9: - return Lumina::ForwardButton; //Not sure if this is correct yet (1/27/17) - default: - return Lumina::NoButton; - } -} - -//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 - } -} - -// WINDOW HANDLING FUNCTIONS -void XCBEventFilter::SetupNewWindow(xcb_map_request_event_t *ev){ - WId win = ev->window; - - bool ok = obj->XCB->WM_ManageWindow(win, true); - //Quick check if this is a transient window if we could not manage it directly - if(!ok){ - WId tran = obj->XCB->WM_ICCCM_GetTransientFor(win); - if(tran!=win && tran!=0){ - win = tran; - ok = obj->XCB->WM_ManageWindow(win); - } - } - qDebug() << "New Window:" << win << obj->XCB->WM_ICCCM_GetClass(win) << " Managed:" << ok; - obj->XCB->WM_Set_Active_Window(win); - //Determing the requested geometry/location/management within the event, - NativeWindow *nwin = new NativeWindow(win); - QObject::connect(nwin, SIGNAL(RequestClose(WId)), obj, SLOT(TryCloseWindow(WId)) ); - QObject::connect(nwin, SIGNAL(RequestActivate(WId)), obj, SLOT(TryActivateWindow(WId)) ); - windows << nwin; - bool show_now = !Lumina::SS->isLocked(); - if(!show_now){ waitingToShow << win; } //add to the list to get set visible later - //populate the native window settings as they are right now - nwin->setProperty(NativeWindow::Active, true); - nwin->setProperty(NativeWindow::Visible, show_now); - nwin->setProperty(NativeWindow::Workspace, obj->XCB->CurrentWorkspace()); - icccm_size_hints hints = obj->XCB->WM_ICCCM_GetNormalHints(win); - if(!hints.isValid()){ hints = obj->XCB->WM_ICCCM_GetSizeHints(win); } - if(hints.validMinSize()){ nwin->setProperty(NativeWindow::MinSize, QSize(hints.min_width,hints.min_height)); } - if(hints.validMaxSize()){ nwin->setProperty(NativeWindow::MaxSize, QSize(hints.max_width,hints.max_height)); } - if(hints.validBaseSize()){ nwin->setProperty(NativeWindow::Size, QSize(hints.base_width,hints.base_height)); } - else if(hints.validSize()){ nwin->setProperty(NativeWindow::Size, QSize(hints.width, hints.height)); } - nwin->setProperty(NativeWindow::Icon, obj->XCB->WM_Get_Icon(win)); - QString title = obj->XCB->WM_Get_Name(win); - if(title.isEmpty()){ title = obj->XCB->WM_Get_Visible_Name(win); } - if(title.isEmpty()){ title = obj->XCB->WM_ICCCM_GetName(win); } - nwin->setProperty(NativeWindow::Title, title); - title = obj->XCB->WM_Get_Icon_Name(win); - if(title.isEmpty()){ title = obj->XCB->WM_Get_Visible_Icon_Name(win); } - if(title.isEmpty()){ title = obj->XCB->WM_ICCCM_GetIconName(win); } - nwin->setProperty(NativeWindow::ShortTitle, title); - - obj->emit WindowCreated(nwin); -} - -void XCBEventFilter::ParsePropertyEvent(xcb_property_notify_event_t *ev){ - //First find the NativeWindow associated with the event - NativeWindow *nwin = 0; - for(int i=0; i<windows.length() && nwin==0; i++){ - if(windows[i]->id() == ev->window){ nwin = windows[i]; } - } - if(nwin==0){ return; } //unmanaged window - ignore this event - qDebug() << "Got Property Event:" << ev->window << ev->atom; - //Now determine which properties are getting changed, and update the native window as appropriate - if(ev->atom == obj->XCB->EWMH._NET_WM_NAME){ - qDebug() << " - Found _NET_WM_NAME atom"; - nwin->setProperty(NativeWindow::Title, obj->XCB->WM_Get_Name(nwin->id())); - }else if(ev->atom == obj->XCB->EWMH._NET_WM_ICON){ - qDebug() << " - Found _NET_WM_ICON atom"; - nwin->setProperty(NativeWindow::Icon, obj->XCB->WM_Get_Icon(nwin->id())); - }else if(ev->atom == obj->XCB->EWMH._NET_WM_ICON_NAME){ - qDebug() << " - Found _NET_WM_ICON_NAME atom"; - nwin->setProperty(NativeWindow::ShortTitle, obj->XCB->WM_Get_Icon_Name(nwin->id())); - }else if(ev->atom == obj->XCB->EWMH._NET_WM_DESKTOP){ - qDebug() << " - Found _NET_WM_DESKTOP atom"; - nwin->setProperty(NativeWindow::Workspace, obj->XCB->WM_Get_Desktop(nwin->id())); - }else if(ev->atom == obj->XCB->EWMH._NET_WM_WINDOW_TYPE ){ - qDebug() << " - Found _NET_WM_WINDOW_TYPE atom"; - - }else if( ev->atom == obj->XCB->EWMH._NET_WM_STATE){ - qDebug() << " - Found _NET_WM_STATE atom"; - - } - -} diff --git a/src-qt5/core/lumina-desktop-unified/src-events/LXcbEventFilter.h b/src-qt5/core/lumina-desktop-unified/src-events/LXcbEventFilter.h deleted file mode 100644 index 9f2530e8..00000000 --- a/src-qt5/core/lumina-desktop-unified/src-events/LXcbEventFilter.h +++ /dev/null @@ -1,151 +0,0 @@ -//=========================================== -// Lumina-DE source code -// Copyright (c) 2012-2017, Ken Moore -// Available under the 3-clause BSD license -// See the LICENSE file for full details -//=========================================== -// This class provides the XCB event handling/registrations that are needed -//=========================================== -#ifndef _LUMINA_DESKTOP_XCB_FILTER_H -#define _LUMINA_DESKTOP_XCB_FILTER_H - -#include "global-includes.h" - - -/* -List of XCB response types (since almost impossible to find good docs on XCB) -switch (xcb_generic_event_t*->response_type & ~0x80) -case values: -XCB_KEY_[PRESS | RELEASE] -XCB_BUTTON_[PRESS | RELEASE] -XCB_MOTION_NOTIFY -XCB_ENTER_NOTIFY -XCB_LEAVE_NOTIFY -XCB_FOCUS_[IN | OUT] -XCB_KEYMAP_NOTIFY -XCB_EXPOSE -XCB_GRAPHICS_EXPOSURE -XCB_VISIBILITY_NOTIFY -XCB_CREATE_NOTIFY -XCB_DESTROY_NOTIFY -XCB_UNMAP_NOTIFY -XCB_MAP_[NOTIFY | REQUEST] -XCB_REPARENT_NOTIFY -XCB_CONFIGURE_[NOTIFY | REQUEST] -XCB_GRAVITY_NOTIFY -XCB_RESIZE_REQUEST -XCB_CIRCULATE_[NOTIFY | REQUEST] -XCB_PROPERTY_NOTIFY -XCB_SELECTION_[CLEAR | REQUEST | NOTIFY] -XCB_COLORMAP_NOTIFY -XCB_CLIENT_MESSAGE -*/ - - -class EventFilter : public QObject{ - Q_OBJECT -private: - QAbstractNativeEventFilter* EF; - WId WMFlag; //used to flag a running WM process - -public: - EventFilter(); - ~EventFilter(){} - - void start(); - void stop(); - - //Public System Tray Functions - QList<WId> currentTrayApps(); - - //Public Session Interaction Functions - unsigned int currentWorkspace(); - - //Public Window Management Lists - QList<NativeWindow*> currentWindows(); //always returned in creation-order (oldest first) - - //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 RegisterVirtualRoot(WId); - void TryCloseWindow(WId); - void TryActivateWindow(WId); - -signals: - void NewInputEvent(); - void WindowCreated(NativeWindow*); - - // Session Signals - void WorkspaceChanged(unsigned int); - - // 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) - // Shortcut Signals - void KeyPressed(WId, int); - void KeyReleased(WId, int); - void MousePressed(WId, Lumina::MouseButton); - void MouseReleased(WId, Lumina::MouseButton); -}; - -class XCBEventFilter : public QAbstractNativeEventFilter{ -public: - XCBEventFilter(EventFilter *parent); - ~XCBEventFilter(){} - - 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(); - - //Window List Functions - QList<NativeWindow*> windowList(); - -private: - EventFilter *obj; - QList<xcb_atom_t> WinNotifyAtoms, SysNotifyAtoms; - xcb_atom_t _NET_SYSTEM_TRAY_OPCODE; - void InitAtoms(); - - bool BlockInputEvent(WId win = 0); //Checks the current state of the system to see if the event should be stopped - WId InputWindow(WId win = 0); //Checks the window ID and determines if this is an external window or returns 0 (for desktop/root windows) - Lumina::MouseButton MouseKey(int keycode); //convert the keycode into the mouse button code - - - //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); - - //Window List Variables - QList<NativeWindow*> windows; - QList<WId> waitingToShow; - - //Longer Event handling functions - void SetupNewWindow(xcb_map_request_event_t *ev); - - //bool ParseKeyPressEvent(); - //bool ParseKeyReleaseEvent(); - //bool ParseButtonPressEvent(); - //bool ParseButtonReleaseEvent(); - //bool ParseMotionEvent(); - void ParsePropertyEvent(xcb_property_notify_event_t *ev); - //bool ParseClientMessageEvent(); - //bool ParseDestroyEvent(); - //bool ParseConfigureEvent(); - //bool ParseKeySelectionClearEvent(); - - - - -}; - -#endif diff --git a/src-qt5/core/lumina-desktop-unified/src-events/events.pri b/src-qt5/core/lumina-desktop-unified/src-events/events.pri index 9eec91ca..48d500ed 100644 --- a/src-qt5/core/lumina-desktop-unified/src-events/events.pri +++ b/src-qt5/core/lumina-desktop-unified/src-events/events.pri @@ -1,6 +1,6 @@ -SOURCES *= $${PWD}/LXcbEventFilter.cpp +#SOURCES *= $${PWD}/LXcbEventFilter.cpp -HEADERS *= $${PWD}/LXcbEventFilter.h +#HEADERS *= $${PWD}/LXcbEventFilter.h #Shortcut event files SOURCES *= $${PWD}/LShortcutEvents.cpp diff --git a/src-qt5/core/lumina-desktop-unified/src-screensaver/LLockScreen.cpp b/src-qt5/core/lumina-desktop-unified/src-screensaver/LLockScreen.cpp index cdcf2434..0ff70142 100644 --- a/src-qt5/core/lumina-desktop-unified/src-screensaver/LLockScreen.cpp +++ b/src-qt5/core/lumina-desktop-unified/src-screensaver/LLockScreen.cpp @@ -10,17 +10,15 @@ #include <unistd.h> #define NUMTRIES 3 -//#define WAITMINS 1 #define DEBUG 1 LLockScreen::LLockScreen(QWidget *parent) : QWidget(parent), ui(new Ui::LLockScreen()){ ui->setupUi(this); waittime = new QTimer(this); - //waittime->setInterval(WAITMINS*60000); //(too many attempts in short time) waittime->setSingleShot(true); refreshtime = new QTimer(this); //timer to update the wait time display refreshtime->setInterval(6000); //6 seconds (1/10 second) - + connect(ui->tool_unlock, SIGNAL(clicked()), this, SLOT(TryUnlock()) ); connect(ui->line_password, SIGNAL(returnPressed()), this, SLOT(TryUnlock()) ); connect(ui->line_password, SIGNAL(textEdited(QString)), this, SIGNAL(InputDetected()) ); @@ -30,7 +28,7 @@ LLockScreen::LLockScreen(QWidget *parent) : QWidget(parent), ui(new Ui::LLockScr } LLockScreen::~LLockScreen(){ - + } void LLockScreen::LoadSystemDetails(){ @@ -47,7 +45,7 @@ void LLockScreen::aboutToHide(){ ui->line_password->clear(); ui->line_password->clearFocus(); if(refreshtime->isActive()){ refreshtime->stop(); } -} +} void LLockScreen::aboutToShow(){ if(!waittime->isActive()){ @@ -61,21 +59,17 @@ void LLockScreen::aboutToShow(){ UpdateLockInfo(); ui->line_password->clear(); ui->line_password->setFocus(); -} +} // ================= // PRIVATE SLOTS // ================= void LLockScreen::UpdateLockInfo(){ QString info; - /*if(triesleft>0 && triesleft<NUMTRIES ){ - if(triesleft==1){info = tr("1 Attempt Left"); } - else{info = QString(tr("%1 Attempts Left")).arg(QString::number(triesleft)); } - }else*/ - if(waittime->isActive()){ + if(waittime->isActive()){ info = tr("Too Many Failures")+"\n"+ QString(tr("Wait %1 Minutes")).arg( QString::number(qRound(waittime->remainingTime()/6000.0)/10.0) ); }else if(attempts>0){ info.append("\n"+QString(tr("Failed Attempts: %1")).arg(QString::number(attempts)) ); } - ui->label_info->setText(info); + ui->label_info->setText(info); } void LLockScreen::TryUnlock(){ @@ -89,11 +83,11 @@ void LLockScreen::TryUnlock(){ this->setEnabled(true); }else{ triesleft--; - if(triesleft>0){ + if(triesleft>0){ this->setEnabled(true); - }else{ + }else{ waittime->setInterval( (attempts/NUMTRIES)*60000); - waittime->start(); + waittime->start(); refreshtime->start(); } ui->line_password->setFocus(); diff --git a/src-qt5/core/lumina-desktop-unified/src-screensaver/LScreenSaver.cpp b/src-qt5/core/lumina-desktop-unified/src-screensaver/LScreenSaver.cpp index 3dcbf85e..bfcfa54d 100644 --- a/src-qt5/core/lumina-desktop-unified/src-screensaver/LScreenSaver.cpp +++ b/src-qt5/core/lumina-desktop-unified/src-screensaver/LScreenSaver.cpp @@ -8,7 +8,7 @@ #include <QScreen> #include <QApplication> -#define DEBUG 1 +#define DEBUG 0 LScreenSaver::LScreenSaver() : QWidget(0,Qt::BypassWindowManagerHint | Qt::WindowStaysOnTopHint){ starttimer = new QTimer(this); @@ -17,7 +17,7 @@ LScreenSaver::LScreenSaver() : QWidget(0,Qt::BypassWindowManagerHint | Qt::Windo locktimer->setSingleShot(true); hidetimer = new QTimer(this); hidetimer->setSingleShot(true); - + LOCKER = new LLockScreen(this); LOCKER->hide(); settings = new QSettings("lumina-desktop","lumina-screensaver",this); @@ -33,7 +33,7 @@ LScreenSaver::LScreenSaver() : QWidget(0,Qt::BypassWindowManagerHint | Qt::Windo } LScreenSaver::~LScreenSaver(){ - + } bool LScreenSaver::isLocked(){ @@ -66,7 +66,7 @@ void LScreenSaver::reloadSettings(){ hidetimer->setInterval( settings->value("hidesecs",15).toInt() * 1000 ); } -void LScreenSaver::newInputEvent(){ +void LScreenSaver::newInputEvent(){ if(updating){ return; } //in the middle of making changes which could cause an event if(DEBUG){ qDebug() << "New Input Event"; } if(SSRunning && SSLocked){ @@ -79,7 +79,6 @@ void LScreenSaver::newInputEvent(){ HideScreenSaver(); } UpdateTimers(); - } void LScreenSaver::LockScreenNow(){ @@ -119,7 +118,7 @@ void LScreenSaver::ShowScreenSaver(){ if(!this->isActiveWindow()){ this->raise(); this->show(); - this->activateWindow(); + this->activateWindow(); } for(int i=0; i<BASES.length(); i++){ BASES[i]->show(); @@ -149,10 +148,11 @@ void LScreenSaver::HideScreenSaver(){ if(!SSLocked){ this->hide(); emit ClosingScreenSaver(); + emit LockStatusChanged(false); } - for(int i=0; i<BASES.length(); i++){ + for(int i=0; i<BASES.length(); i++){ BASES[i]->hide(); - BASES[i]->stopPainting(); + BASES[i]->stopPainting(); } UpdateTimers(); } @@ -171,6 +171,7 @@ void LScreenSaver::LockScreen(){ if(SSLocked){ return; } if(DEBUG){ qDebug() << "Locking Screen:" << QDateTime::currentDateTime().toString(); } SSLocked = true; + emit LockStatusChanged(true); LOCKER->LoadSystemDetails(); UpdateTimers(); } @@ -178,6 +179,7 @@ void LScreenSaver::LockScreen(){ void LScreenSaver::SSFinished(){ if(DEBUG){ qDebug() << "Screensaver Finished:" << QDateTime::currentDateTime().toString(); } SSLocked = false; + emit LockStatusChanged(false); HideLockScreen(); HideScreenSaver(); } diff --git a/src-qt5/core/lumina-desktop-unified/src-screensaver/LScreenSaver.h b/src-qt5/core/lumina-desktop-unified/src-screensaver/LScreenSaver.h index d27db37e..18f12fab 100644 --- a/src-qt5/core/lumina-desktop-unified/src-screensaver/LScreenSaver.h +++ b/src-qt5/core/lumina-desktop-unified/src-screensaver/LScreenSaver.h @@ -19,7 +19,7 @@ public: ~LScreenSaver(); bool isLocked(); - + private: QTimer *starttimer, *locktimer, *hidetimer; QSettings *settings; @@ -48,6 +48,7 @@ private slots: signals: void StartingScreenSaver(); void ClosingScreenSaver(); + void LockStatusChanged(bool locked); protected: void mouseMoveEvent(QMouseEvent*){ diff --git a/src-qt5/core/lumina-desktop-unified/src-screensaver/SSBaseWidget.cpp b/src-qt5/core/lumina-desktop-unified/src-screensaver/SSBaseWidget.cpp index 943fe0a1..b31ef793 100644 --- a/src-qt5/core/lumina-desktop-unified/src-screensaver/SSBaseWidget.cpp +++ b/src-qt5/core/lumina-desktop-unified/src-screensaver/SSBaseWidget.cpp @@ -25,7 +25,7 @@ SSBaseWidget::SSBaseWidget(QWidget *parent, QSettings *set) : QWidget(parent){ SSBaseWidget::~SSBaseWidget(){ if(ANIM!=0){ this->stopPainting(); } } - + void SSBaseWidget::setPlugin(QString plug){ plug = plug.toLower(); if(validPlugs.contains(plug) || plug=="random"){ plugType = plug; } @@ -38,12 +38,12 @@ void SSBaseWidget::setPlugin(QString plug){ void SSBaseWidget::startPainting(){ cplug = plugType; //free up any old animation instance - if(ANIM!=0){ + if(ANIM!=0){ ANIM->stop(); ANIM->clear(); - delete ANIM; ANIM = 0; - } + delete ANIM; ANIM = 0; + } //If a random plugin - grab one of the known plugins - if(cplug=="random"){ + if(cplug=="random"){ QStringList valid = BaseAnimGroup::KnownAnimations(); valid.removeAll("none"); //they want a screensaver - remove the "none" option from the valid list if(valid.isEmpty()){ cplug = "none"; } //no known plugins @@ -67,9 +67,9 @@ void SSBaseWidget::startPainting(){ } //Now start the animation(s) if(ANIM!=0){ - if(ANIM->animationCount()>0){ + if(ANIM->animationCount()>0){ if(DEBUG){ qDebug() << " - Starting SS Plugin:" << cplug << ANIM->animationCount() << ANIM->duration() << ANIM->loopCount(); } - ANIM->start(); + ANIM->start(); } } } diff --git a/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/BaseAnimGroup.cpp b/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/BaseAnimGroup.cpp index 2abd1f90..017eaf9f 100644 --- a/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/BaseAnimGroup.cpp +++ b/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/BaseAnimGroup.cpp @@ -9,6 +9,9 @@ //Include all the known subclasses here, then add a unique ID for it to the functions at the bottom //#include "SampleAnimation.h" #include "Fireflies.h" +#include "Grav.h" +#include "SampleAnimation.h" +#include "Text.h" //============================== // PLUGIN LOADING/LISTING @@ -17,14 +20,16 @@ BaseAnimGroup* BaseAnimGroup::NewAnimation(QString type, QWidget *parent, QSetti //This is where we place all the known plugin ID's, and load the associated subclass if(type=="fireflies"){ return (new FirefliesAnimation(parent,set)); - /*}else if(type == "sample"){ - return (new SampleAnimation(parent, set));*/ - }else{ + }else if(type == "grav") { + return (new GravAnimation(parent, set)); + }else if(type == "text") { + return (new TextAnimation(parent, set)); + }else { //Unknown screensaver, return a blank animation group return (new BaseAnimGroup(parent, set)); } } - + QStringList BaseAnimGroup::KnownAnimations(){ - return (QStringList() << "fireflies" << "none"); + return (QStringList() << "fireflies" << "grav" << "text"); } diff --git a/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/BaseAnimGroup.h b/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/BaseAnimGroup.h index 8798577f..b1324e78 100644 --- a/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/BaseAnimGroup.h +++ b/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/BaseAnimGroup.h @@ -26,13 +26,13 @@ public: canvas->setCursor( QCursor(Qt::BlankCursor) ); } ~BaseAnimGroup(){} - + //============================== // PLUGIN LOADING/LISTING (Change in the .cpp file) //============================== static BaseAnimGroup* NewAnimation(QString type, QWidget *parent, QSettings *set); static QStringList KnownAnimations(); - + }; #endif diff --git a/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/Fireflies.h b/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/Fireflies.h index f1ef5fa3..75dfb1ae 100644 --- a/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/Fireflies.h +++ b/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/Fireflies.h @@ -46,7 +46,7 @@ public: fly = new QWidget(parent); range = parent->size(); maxX = range.width()/4; maxY = range.height()/4; - fly->setStyleSheet("background-color: qradialgradient(spread:pad, cx:0.5, cy:0.5, radius:0.5, fx:0.5, fy:0.5, stop:0 rgba(215, 215, 143, 255), stop:0.83871 rgba(221, 235, 64, 140), stop:1 rgba(0, 0, 0, 255));"); + fly->setStyleSheet("background-color: qradialgradient(spread:pad, cx:0.5, cy:0.5, radius:0.5, fx:0.5, fy:0.5, stop:0 rgba(215, 215, 143, 255), stop:0.83871 rgba(221, 235, 64, 140), stop:0.99 rgba(0, 0, 0, 255), stop:1 transparent);"); //setup the movement animation movement = new QPropertyAnimation(fly); movement->setTargetObject(fly); @@ -79,8 +79,8 @@ private: public: FirefliesAnimation(QWidget *parent, QSettings *set) : BaseAnimGroup(parent, set){} - ~FirefliesAnimation(){ - this->stop(); + ~FirefliesAnimation(){ + this->stop(); //while(fireflies.length()>0){ fireflies.takeAt(0)->deleteLater(); } } diff --git a/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/Grav.h b/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/Grav.h new file mode 100644 index 00000000..ad1b1122 --- /dev/null +++ b/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/Grav.h @@ -0,0 +1,185 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2015, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +#ifndef _LUMINA_DESKTOP_SCREEN_SAVER_GRAV_ANIMATION_H +#define _LUMINA_DESKTOP_SCREEN_SAVER_GRAV_ANIMATION_H + +//PI is equal to 2*pi +#define PI 6.2832 + +#include "global-includes.h" +#include "BaseAnimGroup.h" +#include <QParallelAnimationGroup> +#include <QtMath> + +class Grav: public QParallelAnimationGroup{ + Q_OBJECT +private: + QWidget *planet; + QPropertyAnimation *orbit; + QSize range; + QList<QPoint> path; + double radius; + + void setupLoop(QPoint start, QPoint *ref){ + orbit->setStartValue(start); + + //Used to find overall speed. Distance from the planet to the sun + radius = qSqrt( (qPow(start.x()-ref->x(),2) + qPow(start.y()-ref->y(),2) )); + + //Number of frames in animation. Increase for smother motion + double step = 1000.0; + + //Random values that give the eliptical pattern to the orbit. Between 0.4 and 2.3 + double xrand = (qrand()%20+4)/10.0; + double yrand = (qrand()%20+4)/10.0; + + QPoint firstP = QPoint(ref->x() + xrand*start.x()*(qCos(0/step) -qSin(0/step)), ref->y() + yrand*start.y()*(qCos(0/step) -qSin(0/step))); + QPoint lastP = QPoint(ref->x() + xrand*start.x()*(qCos(PI/step) -qSin(PI/step)), ref->y() + yrand*start.y()*(qCos(PI/step) -qSin(PI/step))); + //orbit->setKeyValueAt(0, firstP); + //orbit->setKeyValueAt(1, lastP); + path.push_back(firstP); + + //Loops through all steps and creates all the points of the orbit + for(int i=1; i<step; i++) { + //Calculates the new point, including gravitational pull and eccentricity. Goes from 0 to 2PI in steps. + double newX = ref->x() + xrand*start.x()*(qCos((PI*i)/step) -qSin((PI*i)/step)); + double newY = ref->y() + yrand*start.y()*(qSin((PI*i)/step) + qCos((PI*i)/step)); + + //Calculates the radius from the sun as the distance between the points + radius = (qSqrt( (qPow(newX-ref->x(),2) + qPow(newY-ref->y(),2) ))); + + //Creates a new point and creates a key as part of the animation + QPoint newLoc = QPoint(newX, newY); + //orbit->setKeyValueAt(i/step, newLoc); + path.push_back(newLoc); + } + + //Sets the time for a full orbit. Increasing makes the orbit slower. + path.push_back(lastP); + } +private slots: + void LoopChanged(int loop){ + //Adjust the orbit animation a bit + if(loop >= 0) { + orbit->setStartValue(orbit->endValue()); //start at the previous end point + orbit->setEndValue(path.at(loop%1000)); + orbit->setDuration(10); + } + } + void stopped(){ qDebug() << "Planet stopped"; planet->hide();} + +public: + Grav(QWidget *parent) : QParallelAnimationGroup(parent){ + planet = new QWidget(parent); + range = parent->size(); + QPoint center = parent->geometry().center(); + + //Creates a random planet size. Between 12 and 45 pixels + double planet_radius = 1.75* ((qrand()%20)+7); + + //Creates a random color in RGB, then creates a circular gradient + QString color = "rgba(" + QString::number(qrand() % 256) + ", " + QString::number(qrand() % 256) + ", " + QString::number(qrand() % 256); + QString style = "background-color: qradialgradient(spread:pad, cx:0.5, cy:0.5, radius:0.5, fx:0.5, fy:0.5, stop:0 " + color+ + ", 255)" + " , stop:0.83871 " + color + ", 140)" + " , stop:0.99 rgba(0, 0, 0, 255), stop:1 transparent);"; + planet->setStyleSheet(style); + + //setup the orbit animation + orbit = new QPropertyAnimation(planet); + orbit->setPropertyName("pos"); + orbit->setTargetObject(planet); + + //Creates the random position of the planet, making sure it isn't too close to the sun + int randwidth = qrand()%(range.width()/2); + if(randwidth < range.width() + 100 and randwidth > range.width() - 100) randwidth = 100; + int randheight= qrand()%(range.height()/2); + if(randheight < range.height() + 100 and randheight > range.height() - 100) randheight = 100; + + //Creates all frames for the animation + setupLoop(QPoint(randwidth, randheight), ¢er); + this->addAnimation(orbit); + planet->show(); + + //Ensures the screensaver will not stop until the user wishes to login or it times out + this->setLoopCount(2000); //number of orbits + orbit->setEndValue(path.at(0)); + LoopChanged(0); //load initial values + + //Sets the initial size and location of the planet + planet->setGeometry(QRect(orbit->startValue().toPoint(), QSize(planet_radius, planet_radius))); + connect(this, SIGNAL(currentLoopChanged(int)), this, SLOT(LoopChanged(int)) ); + connect(this, SIGNAL(finished()), this, SLOT(stopped()) ); + } + ~Grav(){} + +}; + +class GravAnimation : public BaseAnimGroup{ + Q_OBJECT +private: + QList<Grav*> planets; + QWidget *sun; + QPropertyAnimation *wobble; + +private slots: + void checkFinished(){ + int running = 0; + for(int i=0; i<this->animationCount(); i++){ + if(this->animationAt(i)->state()==QAbstractAnimation::Running){ running++; } + } + if(running<=1){ wobble->stop(); emit wobble->finished();} + } + +public: + GravAnimation(QWidget *parent, QSettings *set) : BaseAnimGroup(parent, set){} + ~GravAnimation(){ + //this->stop(); + } + + void LoadAnimations(){ + //Creates the sun, which is a thin shell with a gradient from green to yellow + sun = new QWidget(canvas); + QPoint center = canvas->geometry().center(); + QString sunstyle = QStringLiteral("background-color:qradialgradient(spread:pad, cx:0.5, cy:0.5, radius:0.5, fx:0.5, fy:0.5, ") + + QStringLiteral("stop:0 rgba(0, 0, 0, 0), stop:0.38 rgba(0, 0, 0, 0), stop:0.4 rgba(82, 121, 76, 33), stop:0.5 rgba(159, 235, 148, 64), ") + + QStringLiteral("stop:0.6 rgba(255, 238, 150, 129), stop:0.7 rgba(0, 0, 0, 0));"); + sun->setStyleSheet(sunstyle); + + //Creates the sun's pulsing animation + wobble = new QPropertyAnimation(sun); + wobble->setPropertyName("geometry"); + wobble->setTargetObject(sun); + QRect initgeom = QRect(center-QPoint(12,12), QSize(60, 60)); + wobble->setStartValue(initgeom); + wobble->setKeyValueAt(0, initgeom ); //starting point + wobble->setKeyValueAt(1, initgeom ); //starting point + wobble->setKeyValueAt(0.5, QRect(center-QPoint(18,18), QSize(90, 90))); //starting point + wobble->setDuration(2000); + wobble->setLoopCount(-1); + this->addAnimation(wobble); + sun->show(); + sun->setGeometry(initgeom); + while(planets.length()>0){ planets.takeAt(0)->deleteLater(); } + + //Gives the screensaver a black background + canvas->setStyleSheet("background: black;"); + + //Pulls number of planets from settings, with 10 as default + int number = settings->value("planets/number",10).toInt(); + + //Loops through all planets and sets up the animations, then adds them to the base group and vector, which + for(int i=0; i<number; i++){ + if(planets.length()>number){ continue; } + Grav *tmp = new Grav(canvas); + this->addAnimation(tmp); + connect(tmp, SIGNAL(finished()), this, SLOT(checkFinished())); + planets << tmp; + } + while(planets.length()>number){planets.takeAt(number)->deleteLater(); } + } + +}; +#endif diff --git a/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/SampleAnimation.h b/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/SampleAnimation.h index 972a5109..c2bb0c96 100644 --- a/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/SampleAnimation.h +++ b/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/SampleAnimation.h @@ -20,7 +20,7 @@ private: public: SampleAnimation(QWidget *parent, QSettings *set) : BaseAnimGroup(parent, set){} ~SampleAnimation(){ this->stop(); delete ball; } - + void LoadAnimations(){ //qDebug() << "Loading Sample Animation"; ball = new QWidget(canvas); diff --git a/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/Text.h b/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/Text.h new file mode 100644 index 00000000..a4c49692 --- /dev/null +++ b/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/Text.h @@ -0,0 +1,93 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2015, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +#ifndef _LUMINA_DESKTOP_SCREEN_SAVER_Text_ANIMATION_H +#define _LUMINA_DESKTOP_SCREEN_SAVER_Text_ANIMATION_H + +//PI is equal to 2*pi +#define PI 6.2832 + +#include "global-includes.h" +#include "BaseAnimGroup.h" +#include <QParallelAnimationGroup> +#include <QtMath> + +class Text: public QParallelAnimationGroup{ + Q_OBJECT +private: + QLabel *text; + QPropertyAnimation *movement; + QSize range; + QPoint v; + bool bounce; + +private slots: + void LoopChanged(){ + movement->setStartValue(movement->endValue()); + QPoint currLoc = movement->startValue().toPoint(); + bounce = !(currLoc.y() < 100 or currLoc.y() > range.height()-100 or currLoc.x() > range.width()-100 or currLoc.x() < 100); + if((currLoc.y() < 10 or currLoc.y() > range.height()-40) and !bounce) { + v.setY((v.y() * -1) + (qrand() % 20 - 10)); + }else if((currLoc.x() > range.width()-10 or currLoc.x() < 10) and !bounce) { + v.setX((v.x() * -1) + (qrand() % 20 - 10)); + } + currLoc.setX(currLoc.x() + v.x()); + currLoc.setY(currLoc.y() + v.y()); + movement->setEndValue(currLoc); + } + void stopped(){ qDebug() << "text stopped"; text->hide();} + +public: + Text(QWidget *parent) : QParallelAnimationGroup(parent){ + text = new QLabel(parent); + range = parent->size(); + QPoint center = parent->geometry().center(); + + QString color = "rgba(" + QString::number(qrand() % 206 + 50) + ", " + QString::number(qrand() % 206 + 50) + ", " + QString::number(qrand() % 206 + 50); + text->setStyleSheet("QLabel {background-color: rgba(255, 255, 255, 10); color: " + color + "); }"); + text->setFont(QFont("Courier", 24, QFont::Bold)); + text->setText("test"); + QFontMetrics metrics(text->font()); + text->setMinimumSize(QSize( metrics.width(text->text())+10, metrics.height()*text->text().count("\n") +10)); + + movement = new QPropertyAnimation(text); + movement->setPropertyName("pos"); + movement->setTargetObject(text); + + this->addAnimation(movement); + text->show(); + v.setX((qrand() % 100 + 50) * qPow(-1, qrand() % 2)); + v.setY((qrand() % 100 + 50) * qPow(-1, qrand() % 2)); + movement->setStartValue(center); + //Ensures the screensaver will not stop until the user wishes to login or it times out + this->setLoopCount(2000); //number of movements + movement->setDuration(200); + movement->setEndValue(QPoint(qrand() % (int)range.height(), qrand() % range.width())); + LoopChanged(); //load initial values + + connect(this, SIGNAL(currentLoopChanged(int)), this, SLOT(LoopChanged()) ); + connect(this, SIGNAL(finished()), this, SLOT(stopped()) ); + } + ~Text(){} + +}; + +class TextAnimation : public BaseAnimGroup{ + Q_OBJECT +public: + TextAnimation(QWidget *parent, QSettings *set) : BaseAnimGroup(parent, set){} + ~TextAnimation(){ + this->stop(); + } + + void LoadAnimations(){ + canvas->setStyleSheet("background: black;"); + Text *tmp = new Text(canvas); + this->addAnimation(tmp); + } + +}; +#endif diff --git a/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/animations.pri b/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/animations.pri index 919ec4e0..35141a0e 100644 --- a/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/animations.pri +++ b/src-qt5/core/lumina-desktop-unified/src-screensaver/animations/animations.pri @@ -1,7 +1,8 @@ SOURCES += $$PWD/BaseAnimGroup.cpp HEADERS += $$PWD/BaseAnimGroup.h \ -# $$PWD/SampleAnimation.h \ - $${PWD}/Fireflies.h - + $$PWD/SampleAnimation.h \ + $${PWD}/Fireflies.h \ + $${PWD}/Grav.h \ + $${PWD}/Text.h #FORMS += diff --git a/src-qt5/core/lumina-desktop/LSession.cpp b/src-qt5/core/lumina-desktop/LSession.cpp index ebd40030..93318b0f 100644 --- a/src-qt5/core/lumina-desktop/LSession.cpp +++ b/src-qt5/core/lumina-desktop/LSession.cpp @@ -471,7 +471,7 @@ void LSession::updateDesktops(){ //Make sure all the background windows are registered on the system as virtual roots QTimer::singleShot(100,this, SLOT(registerDesktopWindows())); //Determine if any High-DPI screens are available and enable auto-scaling as needed - for(int i=0; i<scrns.length(); i++){ + /*for(int i=0; i<scrns.length(); i++){ qDebug() << "Check Screen DPI:" << scrns[i]->name(); qDebug() << " -- Physical DPI:" << scrns[i]->physicalDotsPerInchX() << "x" << scrns[i]->physicalDotsPerInchY(); qDebug() << " -- Logical DPI:" << scrns[i]->logicalDotsPerInchX() << "x" << scrns[i]->logicalDotsPerInchY(); @@ -481,7 +481,7 @@ void LSession::updateDesktops(){ }else if(i==(scrns.length()-1)){ unsetenv("QT_AUTO_SCREEN_SCALE_FACTOR"); } - } + }*/ } void LSession::registerDesktopWindows(){ diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_af.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_af.ts index 6a86d9f6..caeb719a 100644 --- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_af.ts +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_af.ts @@ -38,62 +38,62 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="72"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="73"/> <source>Launch %1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="127"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> <source>Open</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="129"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> <source>Open With</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="132"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> <source>View Properties</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="141"/> <source>File Operations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="143"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="146"/> <source>Copy</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="142"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="149"/> <source>Cut</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="144"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="151"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Select Application</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Name:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="291"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="298"/> <source>New Filename</source> <translation type="unfinished"></translation> </message> @@ -851,7 +851,7 @@ <name>LSession</name> <message> <location filename="../LSession.cpp" line="163"/> - <location filename="../LSession.cpp" line="344"/> + <location filename="../LSession.cpp" line="342"/> <source>Desktop</source> <translation type="unfinished"></translation> </message> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ar.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ar.ts index 6a86d9f6..caeb719a 100644 --- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ar.ts +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ar.ts @@ -38,62 +38,62 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="72"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="73"/> <source>Launch %1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="127"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> <source>Open</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="129"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> <source>Open With</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="132"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> <source>View Properties</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="141"/> <source>File Operations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="143"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="146"/> <source>Copy</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="142"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="149"/> <source>Cut</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="144"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="151"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Select Application</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Name:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="291"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="298"/> <source>New Filename</source> <translation type="unfinished"></translation> </message> @@ -851,7 +851,7 @@ <name>LSession</name> <message> <location filename="../LSession.cpp" line="163"/> - <location filename="../LSession.cpp" line="344"/> + <location filename="../LSession.cpp" line="342"/> <source>Desktop</source> <translation type="unfinished"></translation> </message> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_az.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_az.ts index 6a86d9f6..caeb719a 100644 --- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_az.ts +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_az.ts @@ -38,62 +38,62 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="72"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="73"/> <source>Launch %1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="127"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> <source>Open</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="129"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> <source>Open With</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="132"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> <source>View Properties</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="141"/> <source>File Operations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="143"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="146"/> <source>Copy</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="142"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="149"/> <source>Cut</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="144"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="151"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Select Application</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Name:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="291"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="298"/> <source>New Filename</source> <translation type="unfinished"></translation> </message> @@ -851,7 +851,7 @@ <name>LSession</name> <message> <location filename="../LSession.cpp" line="163"/> - <location filename="../LSession.cpp" line="344"/> + <location filename="../LSession.cpp" line="342"/> <source>Desktop</source> <translation type="unfinished"></translation> </message> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_bg.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_bg.ts index 394d0666..2496641f 100644 --- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_bg.ts +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_bg.ts @@ -38,62 +38,62 @@ <translation>Кликнете за задаване</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="72"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="73"/> <source>Launch %1</source> <translation type="unfinished">Стартиране на %1</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="127"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> <source>Open</source> <translation type="unfinished">Отваряне</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="129"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> <source>Open With</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="132"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> <source>View Properties</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="141"/> <source>File Operations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="143"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="146"/> <source>Copy</source> <translation type="unfinished">Копиране</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="142"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="149"/> <source>Cut</source> <translation type="unfinished">Изрязване</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="144"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="151"/> <source>Delete</source> <translation type="unfinished">Изтриване</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Select Application</source> <translation>Избор на програма</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Name:</source> <translation>Име:</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="291"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="298"/> <source>New Filename</source> <translation type="unfinished"></translation> </message> @@ -851,7 +851,7 @@ <name>LSession</name> <message> <location filename="../LSession.cpp" line="163"/> - <location filename="../LSession.cpp" line="344"/> + <location filename="../LSession.cpp" line="342"/> <source>Desktop</source> <translation>Работен плот</translation> </message> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_bn.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_bn.ts index 6a86d9f6..caeb719a 100644 --- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_bn.ts +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_bn.ts @@ -38,62 +38,62 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="72"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="73"/> <source>Launch %1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="127"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> <source>Open</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="129"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> <source>Open With</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="132"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> <source>View Properties</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="141"/> <source>File Operations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="143"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="146"/> <source>Copy</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="142"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="149"/> <source>Cut</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="144"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="151"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Select Application</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Name:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="291"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="298"/> <source>New Filename</source> <translation type="unfinished"></translation> </message> @@ -851,7 +851,7 @@ <name>LSession</name> <message> <location filename="../LSession.cpp" line="163"/> - <location filename="../LSession.cpp" line="344"/> + <location filename="../LSession.cpp" line="342"/> <source>Desktop</source> <translation type="unfinished"></translation> </message> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_bs.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_bs.ts index 6a86d9f6..caeb719a 100644 --- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_bs.ts +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_bs.ts @@ -38,62 +38,62 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="72"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="73"/> <source>Launch %1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="127"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> <source>Open</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="129"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> <source>Open With</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="132"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> <source>View Properties</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="141"/> <source>File Operations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="143"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="146"/> <source>Copy</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="142"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="149"/> <source>Cut</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="144"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="151"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Select Application</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Name:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="291"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="298"/> <source>New Filename</source> <translation type="unfinished"></translation> </message> @@ -851,7 +851,7 @@ <name>LSession</name> <message> <location filename="../LSession.cpp" line="163"/> - <location filename="../LSession.cpp" line="344"/> + <location filename="../LSession.cpp" line="342"/> <source>Desktop</source> <translation type="unfinished"></translation> </message> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ca.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ca.ts index d44936d1..20bf3c1b 100644 --- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ca.ts +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ca.ts @@ -21,7 +21,7 @@ <message> <location filename="../panel-plugins/applauncher/AppLaunchButton.cpp" line="67"/> <source>Select Application</source> - <translation>Seleccioneu l'aplicació</translation> + <translation>Seleccioneu l'aplicació</translation> </message> <message> <location filename="../panel-plugins/applauncher/AppLaunchButton.cpp" line="67"/> @@ -38,62 +38,62 @@ <translation>Cliqueu per establir-ho</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="72"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="73"/> <source>Launch %1</source> <translation>Llança %1</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="127"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> <source>Open</source> <translation>Obre</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="129"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> <source>Open With</source> <translation>Obre amb</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="132"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> <source>View Properties</source> - <translation>Mostra'n les propietats</translation> + <translation>Mostra'n les propietats</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="141"/> <source>File Operations</source> <translation>Operacions de fitxers</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="143"/> <source>Rename</source> - <translation>Canvia'n el nom</translation> + <translation>Canvia'n el nom</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="146"/> <source>Copy</source> <translation>Copia</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="142"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="149"/> <source>Cut</source> <translation>Retalla</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="144"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="151"/> <source>Delete</source> <translation>Suprimeix</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Select Application</source> - <translation>Seleccioneu l'aplicació</translation> + <translation>Seleccioneu l'aplicació</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Name:</source> <translation>Nom:</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="291"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="298"/> <source>New Filename</source> <translation>Nom de fitxer nou</translation> </message> @@ -196,7 +196,7 @@ <message> <location filename="../BootSplash.ui" line="94"/> <source>Starting the Lumina Desktop...</source> - <translation>S'inicia l'escriptori Lumina...</translation> + <translation>S'inicia l'escriptori Lumina...</translation> </message> <message> <location filename="../BootSplash.cpp" line="17"/> @@ -211,22 +211,22 @@ <message> <location filename="../BootSplash.cpp" line="43"/> <source>Keep up with desktop news!</source> - <translation>Mantingueu-vos al dia de les notícies de l'escriptori!</translation> + <translation>Mantingueu-vos al dia de les notícies de l'escriptori!</translation> </message> <message> <location filename="../BootSplash.cpp" line="45"/> <source>There is a full handbook of information about the desktop available online.</source> - <translation>Hi ha un manual ple d'informació de l'escriptori disponible en línia.</translation> + <translation>Hi ha un manual ple d'informació de l'escriptori disponible en línia.</translation> </message> <message> <location filename="../BootSplash.cpp" line="47"/> <source>Want to change the interface? Everything is customizable in the desktop configuration!</source> - <translation>Voleu canviar-ne la interfície? Tot és personalitzable des de la configuració de l'escriptori!</translation> + <translation>Voleu canviar-ne la interfície? Tot és personalitzable des de la configuració de l'escriptori!</translation> </message> <message> <location filename="../BootSplash.cpp" line="49"/> <source>Lumina can easily reproduce the interface from most other desktop environments.</source> - <translation>El Lumina pot reproduir fàcilment la interfície de la majoria d'altres entorns d'escriptori.</translation> + <translation>El Lumina pot reproduir fàcilment la interfície de la majoria d'altres entorns d'escriptori.</translation> </message> <message> <location filename="../BootSplash.cpp" line="51"/> @@ -236,7 +236,7 @@ <message> <location filename="../BootSplash.cpp" line="53"/> <source>I have never been hurt by what I have not said</source> - <translation>Mai no m'ha fet mal el que no he dit.</translation> + <translation>Mai no m'ha fet mal el que no he dit.</translation> </message> <message> <location filename="../BootSplash.cpp" line="55"/> @@ -265,12 +265,12 @@ </message> <message> <location filename="../BootSplash.cpp" line="65"/> - <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>No espereu fer forts els febles enfonsant forts.</translation> </message> <message> <location filename="../BootSplash.cpp" line="67"/> - <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>No es pot saber massa, però es pot dir massa.</translation> </message> <message> @@ -281,7 +281,7 @@ <message> <location filename="../BootSplash.cpp" line="71"/> <source>Any society that would give up a little liberty to gain a little security will deserve neither and lose both.</source> - <translation>Qualsevol societat que deixi de banda una mica de llibertat per guanyar una mica de seguretat no en mereixerà ni una ni l'altra i les perdrà totes dues.</translation> + <translation>Qualsevol societat que deixi de banda una mica de llibertat per guanyar una mica de seguretat no en mereixerà ni una ni l'altra i les perdrà totes dues.</translation> </message> <message> <location filename="../BootSplash.cpp" line="73"/> @@ -341,7 +341,7 @@ <message> <location filename="../BootSplash.cpp" line="95"/> <source>The only way to do great work is to love what you do.</source> - <translation>L'única manera de fer una bona feina és que us agradi el que feu.</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="97"/> @@ -350,8 +350,8 @@ </message> <message> <location filename="../BootSplash.cpp" line="99"/> - <source>Only two things are infinite, the universe and human stupidity, and I'm not sure about the former.</source> - <translation>Només hi ha dues coses infinites: l'univers i l'estupidesa humana, i no estic segur de la primera.</translation> + <source>Only two things are infinite, the universe and human stupidity, and I'm not sure about the former.</source> + <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="101"/> @@ -360,8 +360,8 @@ </message> <message> <location filename="../BootSplash.cpp" line="103"/> - <source>Do, or do not. There is no 'try'.</source> - <translation>Fes-ho o no. No hi ha un "intent".</translation> + <source>Do, or do not. There is no 'try'.</source> + <translation>Fes-ho o no. No hi ha un "intent".</translation> </message> <message> <location filename="../BootSplash.cpp" line="105"/> @@ -371,7 +371,7 @@ <message> <location filename="../BootSplash.cpp" line="107"/> <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>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> + <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="109"/> @@ -380,8 +380,8 @@ </message> <message> <location filename="../BootSplash.cpp" line="111"/> - <source>It's kind of fun to do the impossible.</source> - <translation>És bastant divertit fer l'impossible.</translation> + <source>It's kind of fun to do the impossible.</source> + <translation>És bastant divertit fer l'impossible.</translation> </message> <message> <location filename="../BootSplash.cpp" line="113"/> @@ -396,7 +396,7 @@ <message> <location filename="../BootSplash.cpp" line="117"/> <source>Success usually comes to those who are too busy to be looking for it.</source> - <translation>L'èxit normalment arriba als que estan massa enfeinats per buscar-lo.</translation> + <translation>L'èxit normalment arriba als que estan massa enfeinats per buscar-lo.</translation> </message> <message> <location filename="../BootSplash.cpp" line="119"/> @@ -421,7 +421,7 @@ <message> <location filename="../BootSplash.cpp" line="127"/> <source>Sometimes it is not enough that we do our best; we must do what is required.</source> - <translation>Algunes vegades no n'hi ha prou amb fer-ho el millor que podem, hem de fer el que cal.</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="129"/> @@ -446,7 +446,7 @@ <message> <location filename="../BootSplash.cpp" line="148"/> <source>Loading User Preferences …</source> - <translation>Carregant les preferències de l'usuari…</translation> + <translation>Carregant les preferències de l'usuari…</translation> </message> <message> <location filename="../BootSplash.cpp" line="151"/> @@ -471,7 +471,7 @@ <message> <location filename="../BootSplash.cpp" line="163"/> <source>Preparing Workspace …</source> - <translation>Preparant l'espai de treball…</translation> + <translation>Preparant l'espai de treball…</translation> </message> <message> <location filename="../BootSplash.cpp" line="166"/> @@ -481,7 +481,7 @@ <message> <location filename="../BootSplash.cpp" line="169"/> <source>Starting App: %1</source> - <translation>Iniciant l'aplicació: %1</translation> + <translation>Iniciant l'aplicació: %1</translation> </message> </context> <context> @@ -532,7 +532,7 @@ <message> <location filename="../panel-plugins/systemstart/ItemWidget.cpp" line="190"/> <source>Pin to Desktop</source> - <translation>Enganxa a l'escriptori</translation> + <translation>Enganxa a l'escriptori</translation> </message> <message> <location filename="../panel-plugins/systemstart/ItemWidget.cpp" line="195"/> @@ -560,7 +560,7 @@ <message> <location filename="../JsonMenu.h" line="60"/> <source>Error parsing script output: %1</source> - <translation>Error analitzant la sortida de l'script: %1</translation> + <translation>Error analitzant la sortida de l'script: %1</translation> </message> </context> <context> @@ -684,7 +684,7 @@ <message> <location filename="../panel-plugins/clock/LClock.cpp" line="159"/> <source>Use System Time</source> - <translation>Usa l'hora del sistema</translation> + <translation>Usa l'hora del sistema</translation> </message> </context> <context> @@ -692,17 +692,17 @@ <message> <location filename="../desktop-plugins/LDPlugin.cpp" line="37"/> <source>Modify Item</source> - <translation>Modifica l'ítem</translation> + <translation>Modifica l'ítem</translation> </message> <message> <location filename="../desktop-plugins/LDPlugin.cpp" line="45"/> <source>Start Moving Item</source> - <translation>Inicia el trasllat de l'ítem</translation> + <translation>Inicia el trasllat de l'ítem</translation> </message> <message> <location filename="../desktop-plugins/LDPlugin.cpp" line="46"/> <source>Start Resizing Item</source> - <translation>Inicia el canvi de mida de l'ítem</translation> + <translation>Inicia el canvi de mida de l'ítem</translation> </message> <message> <location filename="../desktop-plugins/LDPlugin.cpp" line="48"/> @@ -717,7 +717,7 @@ <message> <location filename="../desktop-plugins/LDPlugin.cpp" line="51"/> <source>Remove Item</source> - <translation>Elimina l'ítem</translation> + <translation>Elimina l'ítem</translation> </message> </context> <context> @@ -773,7 +773,7 @@ <message> <location filename="../LDesktop.cpp" line="255"/> <source>Desktop Actions</source> - <translation>Accions de l'escriptori</translation> + <translation>Accions de l'escriptori</translation> </message> <message> <location filename="../LDesktop.cpp" line="257"/> @@ -851,7 +851,7 @@ <name>LSession</name> <message> <location filename="../LSession.cpp" line="163"/> - <location filename="../LSession.cpp" line="344"/> + <location filename="../LSession.cpp" line="342"/> <source>Desktop</source> <translation>Escriptori</translation> </message> @@ -879,7 +879,7 @@ <message> <location filename="../panel-plugins/systemdashboard/SysMenuQuick.ui" line="111"/> <source>Launch Audio Mixer</source> - <translation>Obre el Mesclador d'àudio</translation> + <translation>Obre el Mesclador d'àudio</translation> </message> <message> <location filename="../panel-plugins/systemdashboard/SysMenuQuick.ui" line="156"/> @@ -1182,12 +1182,12 @@ <message> <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.ui" line="62"/> <source>View Options</source> - <translation>Mostra'n les opcions</translation> + <translation>Mostra'n les opcions</translation> </message> <message> <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.ui" line="89"/> <source>Open Website</source> - <translation>Obre'n el lloc web</translation> + <translation>Obre'n el lloc web</translation> </message> <message> <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.ui" line="92"/> @@ -1219,7 +1219,7 @@ <message> <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.ui" line="287"/> <source>RSS URL</source> - <translation>URL de l'RSS</translation> + <translation>URL de l'RSS</translation> </message> <message> <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.ui" line="302"/> @@ -1244,7 +1244,7 @@ <message> <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.ui" line="437"/> <source>Some RSS feeds may request custom update intervals instead of using this setting</source> - <translation>Alguns canals RSS poden sol·licitar intervals d'actualització personalitzats en lloc d'utilitzar aquest paràmetre.</translation> + <translation>Alguns canals RSS poden sol·licitar intervals d'actualització personalitzats en lloc d'utilitzar aquest paràmetre.</translation> </message> <message> <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.ui" line="440"/> @@ -1290,7 +1290,7 @@ <message> <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="78"/> <source>Lumina Desktop RSS</source> - <translation>RSS de l'escriptori Lumina</translation> + <translation>RSS de l'escriptori Lumina</translation> </message> <message> <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="143"/> @@ -1315,7 +1315,7 @@ <message> <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/> <source>Last Build Date: %1</source> - <translation>Data de l'última construcció: %1</translation> + <translation>Data de l'última construcció: %1</translation> </message> <message> <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/> @@ -1353,7 +1353,7 @@ <message> <location filename="../SettingsMenu.cpp" line="39"/> <source>All Desktop Settings</source> - <translation>Tots els paràmetres de l'escriptori</translation> + <translation>Tots els paràmetres de l'escriptori</translation> </message> <message> <location filename="../SettingsMenu.cpp" line="54"/> @@ -1411,7 +1411,7 @@ <message> <location filename="../panel-plugins/systemstart/StartMenu.ui" line="488"/> <source>Configure Desktop</source> - <translation>Configureu l'escriptori</translation> + <translation>Configureu l'escriptori</translation> </message> <message> <location filename="../panel-plugins/systemstart/StartMenu.ui" line="924"/> @@ -1557,7 +1557,7 @@ <message> <location filename="../panel-plugins/userbutton/UserWidget.ui" line="14"/> <source>UserWidget</source> - <translation>Giny de l'usuari</translation> + <translation>Giny de l'usuari</translation> </message> <message> <location filename="../panel-plugins/userbutton/UserWidget.ui" line="24"/> @@ -1605,12 +1605,12 @@ <location filename="../panel-plugins/userbutton/UserWidget.ui" line="290"/> <location filename="../panel-plugins/userbutton/UserWidget.cpp" line="330"/> <source>Home</source> - <translation>Carpeta de l'usuari</translation> + <translation>Carpeta de l'usuari</translation> </message> <message> <location filename="../panel-plugins/userbutton/UserWidget.ui" line="293"/> <source>Home Directory</source> - <translation>Directori de l'usuari</translation> + <translation>Directori de l'usuari</translation> </message> <message> <location filename="../panel-plugins/userbutton/UserWidget.ui" line="322"/> @@ -1620,7 +1620,7 @@ <message> <location filename="../panel-plugins/userbutton/UserWidget.ui" line="375"/> <source>Go back to home directory</source> - <translation>Torna al directori de l'usuari</translation> + <translation>Torna al directori de l'usuari</translation> </message> <message> <location filename="../panel-plugins/userbutton/UserWidget.ui" line="350"/> @@ -1635,7 +1635,7 @@ <message> <location filename="../panel-plugins/userbutton/UserWidget.ui" line="461"/> <source>Desktop Preferences</source> - <translation>Preferències de l'escriptori</translation> + <translation>Preferències de l'escriptori</translation> </message> <message> <location filename="../panel-plugins/userbutton/UserWidget.ui" line="473"/> @@ -1645,7 +1645,7 @@ <message> <location filename="../panel-plugins/userbutton/UserWidget.ui" line="495"/> <source>Desktop Appearance/Plugins</source> - <translation>Aparença de l'escriptori / connectors</translation> + <translation>Aparença de l'escriptori / connectors</translation> </message> <message> <location filename="../panel-plugins/userbutton/UserWidget.ui" line="517"/> @@ -1655,12 +1655,12 @@ <message> <location filename="../panel-plugins/userbutton/UserWidget.ui" line="539"/> <source>Screensaver Settings</source> - <translation>Paràmetres de l'estalvi de pantalla</translation> + <translation>Paràmetres de l'estalvi de pantalla</translation> </message> <message> <location filename="../panel-plugins/userbutton/UserWidget.ui" line="581"/> <source>About the Lumina Desktop</source> - <translation>Quant a l'escriptori Lumina</translation> + <translation>Quant a l'escriptori Lumina</translation> </message> <message> <location filename="../panel-plugins/userbutton/UserWidget.cpp" line="289"/> 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 fe0c683b..d700dbbc 100644 --- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_cs.ts +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_cs.ts @@ -6,7 +6,7 @@ <message> <location filename="../panel-plugins/applauncher/AppLaunchButton.cpp" line="37"/> <source>Click to assign an application</source> - <translation>Klepnutím vyberte aplikaci</translation> + <translation>Kliknutím přiřaďte aplikaci</translation> </message> <message> <location filename="../panel-plugins/applauncher/AppLaunchButton.cpp" line="42"/> @@ -26,7 +26,7 @@ <message> <location filename="../panel-plugins/applauncher/AppLaunchButton.cpp" line="67"/> <source>Name:</source> - <translation>Jméno:</translation> + <translation>Název:</translation> </message> </context> <context> @@ -35,67 +35,67 @@ <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="62"/> <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="116"/> <source>Click to Set</source> - <translation>Klepnutím nastavit</translation> + <translation>Nastavte kliknutím</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="72"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="73"/> <source>Launch %1</source> - <translation type="unfinished">Spustit %1</translation> + <translation>Spustit %1</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="127"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> <source>Open</source> - <translation type="unfinished">Otevřít</translation> + <translation>Otevřít</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="129"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> <source>Open With</source> - <translation type="unfinished"></translation> + <translation>Otevřít pomocí</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="132"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> <source>View Properties</source> - <translation type="unfinished"></translation> + <translation>Zobrazit vlastnosti</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="141"/> <source>File Operations</source> - <translation type="unfinished"></translation> + <translation>Operace se souborem</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="143"/> <source>Rename</source> - <translation type="unfinished"></translation> + <translation>Přejmenovat</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="146"/> <source>Copy</source> - <translation type="unfinished">Kopírovat</translation> + <translation>Kopírovat</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="142"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="149"/> <source>Cut</source> - <translation type="unfinished">Vyjmout</translation> + <translation>Vyjmout</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="144"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="151"/> <source>Delete</source> - <translation type="unfinished">Vymazat</translation> + <translation>Vymazat</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Select Application</source> <translation>Vybrat aplikaci</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Name:</source> <translation>Název:</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="291"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="298"/> <source>New Filename</source> - <translation type="unfinished"></translation> + <translation>Nový název souboru</translation> </message> </context> <context> @@ -196,7 +196,7 @@ <message> <location filename="../BootSplash.ui" line="94"/> <source>Starting the Lumina Desktop...</source> - <translation>Spouští se prostředí Lumina...</translation> + <translation>Spouští se prostředí Lumina…</translation> </message> <message> <location filename="../BootSplash.cpp" line="17"/> @@ -206,17 +206,17 @@ <message> <location filename="../BootSplash.cpp" line="41"/> <source>This desktop is powered by coffee, coffee, and more coffee.</source> - <translation>Toto prostředí pohání cukr, káva a další káva.</translation> + <translation>Toto prostředí je poháněno kávou, kávou a ještě další kávou.</translation> </message> <message> <location filename="../BootSplash.cpp" line="43"/> <source>Keep up with desktop news!</source> - <translation>Posílejte nám zprávy o prostředí!</translation> + <translation>Buďte v obraze ohledně novinek v prostředí!</translation> </message> <message> <location filename="../BootSplash.cpp" line="45"/> <source>There is a full handbook of information about the desktop available online.</source> - <translation>Na internetu je úplná příručka se spoustou údajů o prostředí.</translation> + <translation>Na webových stránkách projektu je k dispozici podrobná příručka se spoustou informací o prostředí.</translation> </message> <message> <location filename="../BootSplash.cpp" line="47"/> @@ -226,17 +226,17 @@ <message> <location filename="../BootSplash.cpp" line="49"/> <source>Lumina can easily reproduce the interface from most other desktop environments.</source> - <translation>Lumina lehce dokáže napodobit vzhled rozhraní většiny jiných prostředí pracovní plochy.</translation> + <translation>Lumina lehce dokáže napodobit vzhled rozhraní většiny ostatních pracovních prostředí.</translation> </message> <message> <location filename="../BootSplash.cpp" line="51"/> <source>This desktop is generously sponsored by iXsystems</source> - <translation>Toto prostředí je laskavě podporováno a penězi zaštiťováno podnikem iXsystems</translation> + <translation>Toto prostředí je štědře podporováno společností iXsystems</translation> </message> <message> <location filename="../BootSplash.cpp" line="53"/> <source>I have never been hurt by what I have not said</source> - <translation>Nikdy jsem se netrápil tím, co jsem neřekl</translation> + <translation>Nikdy mi neublížilo to, co jsem nemusel říct</translation> </message> <message> <location filename="../BootSplash.cpp" line="55"/> @@ -246,17 +246,17 @@ <message> <location filename="../BootSplash.cpp" line="57"/> <source>Everything has its beauty but not everyone sees it.</source> - <translation>Vše je dobré, ale ne každý vidí tu krásu.</translation> + <translation>Vše je krásné, ale ne každý to vidí.</translation> </message> <message> <location filename="../BootSplash.cpp" line="59"/> <source>Before God we are all equally wise - and equally foolish.</source> - <translation>Před Bohem jsme všichni rozumní stejně - a stejně nerozumní.</translation> + <translation>Před Bohem jsme všichni stejně moudří – a stejně hloupí.</translation> </message> <message> <location filename="../BootSplash.cpp" line="61"/> <source>We cannot do everything at once, but we can do something at once.</source> - <translation>Nemůžeme všechno udělat zaráz, něco však můžeme provést najednou.</translation> + <translation>Nemůžeme udělat všechno najednou, najednou však můžeme něco udělat.</translation> </message> <message> <location filename="../BootSplash.cpp" line="63"/> @@ -265,13 +265,13 @@ </message> <message> <location filename="../BootSplash.cpp" line="65"/> - <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> + <source>Don't expect to build up the weak by pulling down the strong.</source> + <translation>Neočekávejte že povzbudíte slabé tím že stáhnete dolů silné.</translation> </message> <message> <location filename="../BootSplash.cpp" line="67"/> - <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> + <source>You can't know too much, but you can say too much.</source> + <translation>Nemůžete vědět příliš mnoho, ale můžete toho říct přespříliš.</translation> </message> <message> <location filename="../BootSplash.cpp" line="69"/> @@ -286,27 +286,27 @@ <message> <location filename="../BootSplash.cpp" line="73"/> <source>Never trust a computer you can’t throw out a window.</source> - <translation>Počítačníku, nikdy nevěř počítači, který nemůžeš vyhodit z okna.</translation> + <translation>Nikdy nevěřte počítači, který nemůžete vyhodit z okna.</translation> </message> <message> <location filename="../BootSplash.cpp" line="75"/> <source>Study the past if you would define the future.</source> - <translation>Uč se z minulosti, jestli chceš určit, jak bude vypadat budoucnost.</translation> + <translation>Učte se z minulosti, pokud chcete určovat budoucnost.</translation> </message> <message> <location filename="../BootSplash.cpp" line="77"/> <source>The way to get started is to quit talking and begin doing.</source> - <translation>Cestou, jak začít, je přestat mluvit a začít dělat.</translation> + <translation>Cestou jak začít je přestat mluvit a začít dělat.</translation> </message> <message> <location filename="../BootSplash.cpp" line="79"/> <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>Požádej a bude ti dáno; hledej a nalezneš; klepej a dveře ti budou otevřeny.</translation> + <translation>Požádejte a bude vám dáno; hledejte a naleznete; zaklepej a dveře vám budou otevřeny.</translation> </message> <message> <location filename="../BootSplash.cpp" line="81"/> <source>Start where you are. Use what you have. Do what you can.</source> - <translation>Začni tam, kde jsi. Používej to, co máš. Udělej, co můžeš.</translation> + <translation>Začněte tam, kde jste. Používejte to, co máte. Udělejte, co můžete.</translation> </message> <message> <location filename="../BootSplash.cpp" line="83"/> @@ -316,42 +316,42 @@ <message> <location filename="../BootSplash.cpp" line="85"/> <source>It does not matter how slowly you go as long as you do not stop.</source> - <translation>Nezáleží na tom, jak pomalu jdeš, dokud nezastavíš.</translation> + <translation>Nezáleží na tom jak pomalu jdete – důležité je, že se nezastavíte.</translation> </message> <message> <location filename="../BootSplash.cpp" line="87"/> <source>Do what you can, where you are, with what you have.</source> - <translation>Dělej, co můžeš, tam kde jsi, s tím, co máš.</translation> + <translation>Dělejte, co můžete, tam kde jste, s tím, co máte.</translation> </message> <message> <location filename="../BootSplash.cpp" line="89"/> <source>Remember no one can make you feel inferior without your consent.</source> - <translation>Pamatuj si, že nikomu se nepodaří, aby ses cítil být menším, bez tvého souhlasu.</translation> + <translation>Pamatujte, že se nikomu nepodaří, aby se cítil být menším, bez jeho souhlasu.</translation> </message> <message> <location filename="../BootSplash.cpp" line="91"/> <source>It’s not the years in your life that count. It’s the life in your years.</source> - <translation>Nejsou to roky tvého života, co se počítá. Je to život v tvých letech.</translation> + <translation>V životě nejsou roky to, co se počítá. Počítá se život v rocích.</translation> </message> <message> <location filename="../BootSplash.cpp" line="93"/> <source>Either write something worth reading or do something worth writing.</source> - <translation>Buď napiš něco, co stojí za přečtení, nebo udělej něco, o čem má smysl napsat.</translation> + <translation>Buď napište něco, co stojí za přečtení, nebo udělejte něco, o čem má smysl napsat.</translation> </message> <message> <location filename="../BootSplash.cpp" line="95"/> <source>The only way to do great work is to love what you do.</source> - <translation>Jediným způsobem, jak dělat práci skvěle, je milovat to, co děláš.</translation> + <translation>Jediným způsobem jak odvádět skvělou práci je milovat to, co děláte.</translation> </message> <message> <location filename="../BootSplash.cpp" line="97"/> <source>Political correctness is tyranny with manners.</source> - <translation>Politická správnost je útlak, který si našel své způsoby.</translation> + <translation>Politická korektnost je útlak honosící se vybranými způsoby.</translation> </message> <message> <location filename="../BootSplash.cpp" line="99"/> - <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> + <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. Tím prvním si vlastně nejsem tak úplně jistý.</translation> </message> <message> <location filename="../BootSplash.cpp" line="101"/> @@ -360,8 +360,8 @@ </message> <message> <location filename="../BootSplash.cpp" line="103"/> - <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> + <source>Do, or do not. There is no 'try'.</source> + <translation>Udělejte to, nebo to nedělejte vůbec. Nejde o to to jen zkoušet.</translation> </message> <message> <location filename="../BootSplash.cpp" line="105"/> @@ -371,7 +371,7 @@ <message> <location filename="../BootSplash.cpp" line="107"/> <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>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> + <translation>Dobří lidé nepotřebují zákony k tomu, aby jim říkaly, aby jednali zodpovědně, zatímco špatní lidé si vždy najdou kličku k obejití zákonů.</translation> </message> <message> <location filename="../BootSplash.cpp" line="109"/> @@ -380,13 +380,13 @@ </message> <message> <location filename="../BootSplash.cpp" line="111"/> - <source>It's kind of fun to do the impossible.</source> + <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="113"/> <source>Knowledge speaks, but wisdom listens.</source> - <translation>Vědomost hovoří, ale moudrost poslouchá.</translation> + <translation>Vědomost hovoří, ale moudrost naslouchá.</translation> </message> <message> <location filename="../BootSplash.cpp" line="115"/> @@ -396,7 +396,7 @@ <message> <location filename="../BootSplash.cpp" line="117"/> <source>Success usually comes to those who are too busy to be looking for it.</source> - <translation>Úspěch obyčejně přijde k těm, kdož jsou příliš zaneprázdněni na to, aby jej hledali.</translation> + <translation>Úspěch obyčejně přijde k těm, kteří jsou příliš zaneprázdněni na to, aby ho hledali.</translation> </message> <message> <location filename="../BootSplash.cpp" line="119"/> @@ -406,7 +406,7 @@ <message> <location filename="../BootSplash.cpp" line="121"/> <source>I have never let my schooling interfere with my education.</source> - <translation>Nikdy jsem nenechal vzdělávání plést se do mého vzdělání.</translation> + <translation>Nikdy jsem nenechal školy plést se do mého vzdělání.</translation> </message> <message> <location filename="../BootSplash.cpp" line="123"/> @@ -421,67 +421,67 @@ <message> <location filename="../BootSplash.cpp" line="127"/> <source>Sometimes it is not enough that we do our best; we must do what is required.</source> - <translation>Někdy není dost, že něco uděláme, jak nejlépe umíme. Musíme dělat, co se od nás žádá.</translation> + <translation>Někdy nestačí, že děláme jak nejlépe umíme. Musíme dělat, co se od nás žádá.</translation> </message> <message> <location filename="../BootSplash.cpp" line="129"/> <source>The truth is more important than the facts.</source> - <translation>Pravda je důležitější než skutečnost.</translation> + <translation>Pravda je důležitější než fakta.</translation> </message> <message> <location filename="../BootSplash.cpp" line="131"/> <source>Better to remain silent and be thought a fool than to speak out and remove all doubt.</source> - <translation>Lépe zůstat potichu a být považován za hlupáka, než vyjádřit názor a odstranit veškerou pochybnost.</translation> + <translation>Lépe zůstat zticha a být považován za hlupáka, než promluvit a tím to potvrdit.</translation> </message> <message> <location filename="../BootSplash.cpp" line="142"/> <source>Initializing Session …</source> - <translation>Spouští se sezení…</translation> + <translation>Spouštění sezení…</translation> </message> <message> <location filename="../BootSplash.cpp" line="145"/> <source>Loading System Settings …</source> - <translation>Nahrává se nastavení systému…</translation> + <translation>Načítání nastavení systému…</translation> </message> <message> <location filename="../BootSplash.cpp" line="148"/> <source>Loading User Preferences …</source> - <translation>Nahrává se uživatelské nastavení…</translation> + <translation>Načítání nastavení uživatele…</translation> </message> <message> <location filename="../BootSplash.cpp" line="151"/> <source>Preparing System Tray …</source> - <translation>Připravuje se oznamovací oblast panelu…</translation> + <translation>Příprava oznamovací oblasti systémového panelu…</translation> </message> <message> <location filename="../BootSplash.cpp" line="154"/> <source>Starting Window Manager …</source> - <translation>Spouští se správce oken…</translation> + <translation>Spouštění správce oken…</translation> </message> <message> <location filename="../BootSplash.cpp" line="157"/> <source>Detecting Applications …</source> - <translation>Zjišťují se aplikace…</translation> + <translation>Zjišťování aplikací…</translation> </message> <message> <location filename="../BootSplash.cpp" line="160"/> <source>Preparing Menus …</source> - <translation>Připravují se nabídky…</translation> + <translation>Příprava nabídek…</translation> </message> <message> <location filename="../BootSplash.cpp" line="163"/> <source>Preparing Workspace …</source> - <translation>Připravuje se pracovní plocha…</translation> + <translation>Příprava pracovní plochy…</translation> </message> <message> <location filename="../BootSplash.cpp" line="166"/> <source>Finalizing …</source> - <translation>Dokončuje se…</translation> + <translation>Dokončování…</translation> </message> <message> <location filename="../BootSplash.cpp" line="169"/> <source>Starting App: %1</source> - <translation>Spouští se aplikace: %1</translation> + <translation>Spouštění aplikace: %1</translation> </message> </context> <context> @@ -547,12 +547,12 @@ <message> <location filename="../panel-plugins/systemstart/ItemWidget.cpp" line="204"/> <source>Remove from Quicklaunch</source> - <translation>Odebrat z rychlého spuštění</translation> + <translation>Odebrat z rychlého spouštění</translation> </message> <message> <location filename="../panel-plugins/systemstart/ItemWidget.cpp" line="208"/> <source>Add to Quicklaunch</source> - <translation>Přidat do rychlého spuštění</translation> + <translation>Přidat do rychlého spouštění</translation> </message> </context> <context> @@ -653,7 +653,7 @@ <message> <location filename="../panel-plugins/appmenu/LAppMenuPlugin.cpp" line="102"/> <source>Unsorted</source> - <translation>Neseřazeno</translation> + <translation>Nezařazeno</translation> </message> <message> <location filename="../panel-plugins/appmenu/LAppMenuPlugin.cpp" line="139"/> @@ -692,7 +692,7 @@ <message> <location filename="../desktop-plugins/LDPlugin.cpp" line="37"/> <source>Modify Item</source> - <translation type="unfinished"></translation> + <translation>Upravit položku</translation> </message> <message> <location filename="../desktop-plugins/LDPlugin.cpp" line="45"/> @@ -773,24 +773,24 @@ <message> <location filename="../LDesktop.cpp" line="255"/> <source>Desktop Actions</source> - <translation type="unfinished"></translation> + <translation>Akce desktopu</translation> </message> <message> <location filename="../LDesktop.cpp" line="257"/> <location filename="../LDesktop.cpp" line="608"/> <source>New Folder</source> - <translation type="unfinished"></translation> + <translation>Nová složka</translation> </message> <message> <location filename="../LDesktop.cpp" line="258"/> <location filename="../LDesktop.cpp" line="628"/> <source>New File</source> - <translation type="unfinished"></translation> + <translation>Nový soubor</translation> </message> <message> <location filename="../LDesktop.cpp" line="259"/> <source>Paste</source> - <translation type="unfinished"></translation> + <translation>Vložit</translation> </message> <message> <location filename="../LDesktop.cpp" line="291"/> @@ -827,7 +827,7 @@ <location filename="../LDesktop.cpp" line="634"/> <location filename="../LDesktop.cpp" line="655"/> <source>Desktop</source> - <translation type="unfinished">Plocha</translation> + <translation>Plocha</translation> </message> </context> <context> @@ -844,14 +844,14 @@ <message> <location filename="../panel-plugins/systemstart/LStartButton.h" line="52"/> <source>Remove from Quicklaunch</source> - <translation>Odebrat z rychlého spuštění</translation> + <translation>Odebrat z rychlého spouštění</translation> </message> </context> <context> <name>LSession</name> <message> <location filename="../LSession.cpp" line="163"/> - <location filename="../LSession.cpp" line="344"/> + <location filename="../LSession.cpp" line="342"/> <source>Desktop</source> <translation>Plocha</translation> </message> @@ -861,7 +861,7 @@ <message> <location filename="../panel-plugins/systemdashboard/LSysDashboard.cpp" line="43"/> <source>System Dashboard</source> - <translation>Palubní deska systému</translation> + <translation>Přehled o systému</translation> </message> </context> <context> @@ -874,12 +874,12 @@ <message> <location filename="../panel-plugins/systemdashboard/SysMenuQuick.ui" line="50"/> <source>Volume</source> - <translation type="unfinished"></translation> + <translation>Hlasitost</translation> </message> <message> <location filename="../panel-plugins/systemdashboard/SysMenuQuick.ui" line="111"/> <source>Launch Audio Mixer</source> - <translation>Spustit Audio Mixer</translation> + <translation>Spustit směšovač zvuku</translation> </message> <message> <location filename="../panel-plugins/systemdashboard/SysMenuQuick.ui" line="156"/> @@ -889,7 +889,7 @@ <message> <location filename="../panel-plugins/systemdashboard/SysMenuQuick.ui" line="231"/> <source>Battery Status</source> - <translation>Stav baterie</translation> + <translation>Stav akumulátoru</translation> </message> <message> <location filename="../panel-plugins/systemdashboard/SysMenuQuick.ui" line="296"/> @@ -899,7 +899,7 @@ <message> <location filename="../panel-plugins/systemdashboard/SysMenuQuick.ui" line="344"/> <source>Locale</source> - <translation>Místní nastavení</translation> + <translation>Místní a jazyková nastavení</translation> </message> <message> <location filename="../panel-plugins/systemdashboard/SysMenuQuick.ui" line="378"/> @@ -967,7 +967,7 @@ <message> <location filename="../panel-plugins/userbutton/LUserButton.cpp" line="41"/> <source>Quickly launch applications or open files</source> - <translation>Rychlé spuštění aplikace nebo otevření souboru</translation> + <translation>Rychlé spouštění aplikací nebo otevírání souborů</translation> </message> </context> <context> @@ -985,22 +985,22 @@ <message> <location filename="../desktop-plugins/systemmonitor/MonitorWidget.ui" line="42"/> <source>CPU Temp:</source> - <translation>Teplota CPU:</translation> + <translation>Teplota procesoru:</translation> </message> <message> <location filename="../desktop-plugins/systemmonitor/MonitorWidget.ui" line="56"/> <source>CPU Usage:</source> - <translation>Využití CPU:</translation> + <translation>Využití procesoru:</translation> </message> <message> <location filename="../desktop-plugins/systemmonitor/MonitorWidget.ui" line="70"/> <source>Mem Usage:</source> - <translation>Využití paměti:</translation> + <translation>Využití operační paměti:</translation> </message> <message> <location filename="../desktop-plugins/systemmonitor/MonitorWidget.ui" line="85"/> <source>Disk I/O</source> - <translation>Diskové I/O</translation> + <translation>Vst./výst. datového úložiště</translation> </message> </context> <context> @@ -1023,17 +1023,17 @@ <message> <location filename="../desktop-plugins/notepad/NotepadPlugin.cpp" line="138"/> <source>Name:</source> - <translation>Jméno:</translation> + <translation>Název:</translation> </message> <message> <location filename="../desktop-plugins/notepad/NotepadPlugin.cpp" line="140"/> <source>Invalid Note Name: Try Again</source> - <translation>Neplatný název poznámky: Zkuste znovu</translation> + <translation>Neplatný název poznámky: Zkuste to znovu</translation> </message> <message> <location filename="../desktop-plugins/notepad/NotepadPlugin.cpp" line="141"/> <source>Select a Note Name</source> - <translation>Vyberte jméno poznámky</translation> + <translation>Vyberte název poznámky</translation> </message> <message> <location filename="../desktop-plugins/notepad/NotepadPlugin.cpp" line="168"/> @@ -1081,12 +1081,12 @@ <message> <location filename="../panel-plugins/audioplayer/PPlayerWidget.cpp" line="73"/> <source>Add Directory</source> - <translation>Přidat adresář</translation> + <translation>Přidat složku</translation> </message> <message> <location filename="../panel-plugins/audioplayer/PPlayerWidget.cpp" line="74"/> <source>Add URL</source> - <translation>Přidat adresu (URL)</translation> + <translation>Přidat URL adresu</translation> </message> <message> <location filename="../panel-plugins/audioplayer/PPlayerWidget.cpp" line="102"/> @@ -1096,22 +1096,22 @@ <message> <location filename="../panel-plugins/audioplayer/PPlayerWidget.cpp" line="103"/> <source>Select Multimedia Files</source> - <translation>Vybere multimediální soubory</translation> + <translation>Vyberte multimediální soubory</translation> </message> <message> <location filename="../panel-plugins/audioplayer/PPlayerWidget.cpp" line="130"/> <source>Select Multimedia Directory</source> - <translation>Vyberte adresář s multimediálními soubory</translation> + <translation>Vyberte složku s multimediálními soubory</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>Zadejte platnou adresu (URL) pro multimediální soubor nebo proud:</translation> + <translation>Zadejte platnou URL adresu multimediálního souboru nebo proudu:</translation> </message> <message> <location filename="../panel-plugins/audioplayer/PPlayerWidget.cpp" line="161"/> <source>Multimedia URL</source> - <translation>Adresa (URL) multimédia</translation> + <translation>URL adresa multimédia</translation> </message> </context> <context> @@ -1139,12 +1139,12 @@ <message> <location filename="../desktop-plugins/audioplayer/PlayerWidget.cpp" line="73"/> <source>Add Directory</source> - <translation>Přidat adresář</translation> + <translation>Přidat složku</translation> </message> <message> <location filename="../desktop-plugins/audioplayer/PlayerWidget.cpp" line="74"/> <source>Add URL</source> - <translation>Přidat adresu (URL)</translation> + <translation>Přidat URL adresu</translation> </message> <message> <location filename="../desktop-plugins/audioplayer/PlayerWidget.cpp" line="102"/> @@ -1159,17 +1159,17 @@ <message> <location filename="../desktop-plugins/audioplayer/PlayerWidget.cpp" line="130"/> <source>Select Multimedia Directory</source> - <translation>Zvolte adresář s multimédii</translation> + <translation>Vyberte složku s multimédii</translation> </message> <message> <location filename="../desktop-plugins/audioplayer/PlayerWidget.cpp" line="159"/> <source>Enter a valid URL for a multimedia file or stream:</source> - <translation>Zadejte platnou adresu (URL) pro multimediální soubor nebo proud:</translation> + <translation>Zadejte platnou URL adresu multimediálního souboru nebo proudu:</translation> </message> <message> <location filename="../desktop-plugins/audioplayer/PlayerWidget.cpp" line="161"/> <source>Multimedia URL</source> - <translation>Adresa (URL) multimédia</translation> + <translation>URL adresa multimédia</translation> </message> </context> <context> @@ -1187,7 +1187,7 @@ <message> <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.ui" line="89"/> <source>Open Website</source> - <translation>Otevřít internetovou stránku</translation> + <translation>Otevřít webovou stránku</translation> </message> <message> <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.ui" line="92"/> @@ -1219,12 +1219,12 @@ <message> <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.ui" line="287"/> <source>RSS URL</source> - <translation>Adresa RSS</translation> + <translation>URL adresa RSS kanálu</translation> </message> <message> <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.ui" line="302"/> <source>Load a preset RSS Feed</source> - <translation>Nahrát kanál RSS s přednastavením</translation> + <translation>Načíst přednastavený RSS kanál</translation> </message> <message> <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.ui" line="332"/> @@ -1239,7 +1239,7 @@ <message> <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.ui" line="430"/> <source>Manual Sync Only</source> - <translation>Pouze ruční seřízení</translation> + <translation>Pouze ruční synchronizace</translation> </message> <message> <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.ui" line="437"/> @@ -1249,7 +1249,7 @@ <message> <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.ui" line="440"/> <source>Default Sync Interval</source> - <translation>Výchozí seřizovací interval</translation> + <translation>Výchozí interval synchronizace</translation> </message> <message> <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.ui" line="471"/> @@ -1270,7 +1270,7 @@ <message> <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="70"/> <source>Add RSS Feed</source> - <translation>Přidat kanál RSS</translation> + <translation>Přidat RSS kanál</translation> </message> <message> <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="71"/> @@ -1290,12 +1290,12 @@ <message> <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="78"/> <source>Lumina Desktop RSS</source> - <translation>RSS prostředí Lumina</translation> + <translation>RSS kanál prostředí Lumina</translation> </message> <message> <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="143"/> <source>Feed URL: %1</source> - <translation>Adresa (URL) kanálu: %1</translation> + <translation>URL adresa kanálu: %1</translation> </message> <message> <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="144"/> @@ -1315,17 +1315,17 @@ <message> <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="147"/> <source>Last Build Date: %1</source> - <translation>Poslední datum sestavení: %1</translation> + <translation>Datum minulého sestavení: %1</translation> </message> <message> <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="148"/> <source>Last Sync: %1</source> - <translation>Poslední seřízení: %1</translation> + <translation>Minulá synchronizace: %1</translation> </message> <message> <location filename="../desktop-plugins/rssreader/RSSFeedPlugin.cpp" line="149"/> <source>Next Sync: %1</source> - <translation>Další seřízení: %1</translation> + <translation>Příští synchronizace: %1</translation> </message> </context> <context> @@ -1338,7 +1338,7 @@ <message> <location filename="../SettingsMenu.cpp" line="26"/> <source>Preferences</source> - <translation>Nastavení</translation> + <translation>Předvolby</translation> </message> <message> <location filename="../SettingsMenu.cpp" line="33"/> @@ -1416,22 +1416,22 @@ <message> <location filename="../panel-plugins/systemstart/StartMenu.ui" line="924"/> <source>Suspend</source> - <translation type="unfinished">Uspat do paměti</translation> + <translation>Uspat do paměti</translation> </message> <message> <location filename="../panel-plugins/systemstart/StartMenu.ui" line="989"/> <source>Restart</source> - <translation type="unfinished">Restartovat</translation> + <translation>Restartovat</translation> </message> <message> <location filename="../panel-plugins/systemstart/StartMenu.ui" line="1017"/> <source>Power Off</source> - <translation type="unfinished"></translation> + <translation>Vypnout</translation> </message> <message> <location filename="../panel-plugins/systemstart/StartMenu.ui" line="1065"/> <source>Log Out</source> - <translation type="unfinished">Odhlásit se</translation> + <translation>Odhlásit se</translation> </message> <message> <location filename="../panel-plugins/systemstart/StartMenu.ui" line="262"/> @@ -1441,7 +1441,7 @@ <message> <location filename="../panel-plugins/systemstart/StartMenu.ui" line="1036"/> <source>(System Performing Updates)</source> - <translation>(aktualizace výkonu systému)</translation> + <translation>(systém instaluje aktualizace)</translation> </message> <message> <location filename="../panel-plugins/systemstart/StartMenu.ui" line="1125"/> @@ -1451,12 +1451,12 @@ <message> <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="292"/> <source>Apply Updates?</source> - <translation>Použít aktualizace?</translation> + <translation>Nainstalovat aktualizace?</translation> </message> <message> <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="292"/> <source>You have system updates waiting to be applied! Do you wish to install them now?</source> - <translation>Na použití čekají aktualizace systému! Chcete je nainstalovat nyní?</translation> + <translation>Aktualizace systému čekají na instalaci! Chcete je nainstalovat nyní?</translation> </message> <message> <location filename="../panel-plugins/systemstart/StartMenu.cpp" line="500"/> @@ -1486,7 +1486,7 @@ <message> <location filename="../SystemWindow.ui" line="14"/> <source>System Options</source> - <translation>Možnosti systému</translation> + <translation>Předvolby systému</translation> </message> <message> <location filename="../SystemWindow.ui" line="55"/> @@ -1501,12 +1501,12 @@ <message> <location filename="../SystemWindow.ui" line="87"/> <source>Power Off</source> - <translation type="unfinished"></translation> + <translation>Vypnout</translation> </message> <message> <location filename="../SystemWindow.ui" line="127"/> <source>Cancel</source> - <translation>Zrušit</translation> + <translation>Storno</translation> </message> <message> <location filename="../SystemWindow.ui" line="156"/> @@ -1521,12 +1521,12 @@ <message> <location filename="../SystemWindow.cpp" line="57"/> <source>Apply Updates?</source> - <translation>Použít aktualizace?</translation> + <translation>Nainstalovat aktualizace?</translation> </message> <message> <location filename="../SystemWindow.cpp" line="57"/> <source>You have system updates waiting to be applied! Do you wish to install them now?</source> - <translation>Na použití čekají aktualizace systému! Chcete je nainstalovat nyní?</translation> + <translation>Aktualizace systému čekají na instalaci! Chcete je nainstalovat nyní?</translation> </message> </context> <context> @@ -1539,7 +1539,7 @@ <message> <location filename="../panel-plugins/userbutton/UserItemWidget.cpp" line="134"/> <source>Remove Shortcut</source> - <translation>Odebrat klávesovou zkratku</translation> + <translation>Odebrat zkratku</translation> </message> <message> <location filename="../panel-plugins/userbutton/UserItemWidget.cpp" line="139"/> @@ -1630,7 +1630,7 @@ <message> <location filename="../panel-plugins/userbutton/UserWidget.ui" line="458"/> <source>Config</source> - <translation>Konfigurace</translation> + <translation>Nastavení</translation> </message> <message> <location filename="../panel-plugins/userbutton/UserWidget.ui" line="461"/> @@ -1645,12 +1645,12 @@ <message> <location filename="../panel-plugins/userbutton/UserWidget.ui" line="495"/> <source>Desktop Appearance/Plugins</source> - <translation>Vzhled/Pluginy plochy</translation> + <translation>Vzhled / zásuvné moduly plochy</translation> </message> <message> <location filename="../panel-plugins/userbutton/UserWidget.ui" line="517"/> <source>Screen Configuration</source> - <translation>Konfigurace obrazovky</translation> + <translation>Nastavení obrazovky</translation> </message> <message> <location filename="../panel-plugins/userbutton/UserWidget.ui" line="539"/> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_cy.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_cy.ts index 6a86d9f6..caeb719a 100644 --- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_cy.ts +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_cy.ts @@ -38,62 +38,62 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="72"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="73"/> <source>Launch %1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="127"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> <source>Open</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="129"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> <source>Open With</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="132"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> <source>View Properties</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="141"/> <source>File Operations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="143"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="146"/> <source>Copy</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="142"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="149"/> <source>Cut</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="144"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="151"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Select Application</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Name:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="291"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="298"/> <source>New Filename</source> <translation type="unfinished"></translation> </message> @@ -851,7 +851,7 @@ <name>LSession</name> <message> <location filename="../LSession.cpp" line="163"/> - <location filename="../LSession.cpp" line="344"/> + <location filename="../LSession.cpp" line="342"/> <source>Desktop</source> <translation type="unfinished"></translation> </message> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_da.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_da.ts index d28fbbc4..a9522431 100644 --- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_da.ts +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_da.ts @@ -38,62 +38,62 @@ <translation>Klik for at sætte</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="72"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="73"/> <source>Launch %1</source> <translation>Start %1</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="127"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> <source>Open</source> <translation>Åbn</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="129"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> <source>Open With</source> <translation>Åbn med</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="132"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> <source>View Properties</source> <translation>Vis egenskaber</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="141"/> <source>File Operations</source> <translation>Filhandlinger</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="143"/> <source>Rename</source> <translation>Omdøb</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="146"/> <source>Copy</source> <translation>Kopiér</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="142"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="149"/> <source>Cut</source> <translation>Klip</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="144"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="151"/> <source>Delete</source> <translation>Slet</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Select Application</source> <translation>Vælg program</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Name:</source> <translation>Navn:</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="291"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="298"/> <source>New Filename</source> <translation>Nyt filnavn</translation> </message> @@ -265,12 +265,12 @@ </message> <message> <location filename="../BootSplash.cpp" line="65"/> - <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>Forvent ikke at opbygge det svage ved at nedrive det stærke.</translation> </message> <message> <location filename="../BootSplash.cpp" line="67"/> - <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>Du kan ikke vide for meget, men du kan sige for meget.</translation> </message> <message> @@ -350,7 +350,7 @@ </message> <message> <location filename="../BootSplash.cpp" line="99"/> - <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>Kun to ting er uendelige, universet og menneskelig dumhed, og jeg er ikke sikker på det første.</translation> </message> <message> @@ -360,8 +360,8 @@ </message> <message> <location filename="../BootSplash.cpp" line="103"/> - <source>Do, or do not. There is no 'try'.</source> - <translation>Gør eller lad være. Der er ikke noget "prøv".</translation> + <source>Do, or do not. There is no 'try'.</source> + <translation>Gør eller lad være. Der er ikke noget "prøv".</translation> </message> <message> <location filename="../BootSplash.cpp" line="105"/> @@ -380,7 +380,7 @@ </message> <message> <location filename="../BootSplash.cpp" line="111"/> - <source>It's kind of fun to do the impossible.</source> + <source>It's kind of fun to do the impossible.</source> <translation>Det er egentligt sjovt at gøre det umulige.</translation> </message> <message> @@ -851,7 +851,7 @@ <name>LSession</name> <message> <location filename="../LSession.cpp" line="163"/> - <location filename="../LSession.cpp" line="344"/> + <location filename="../LSession.cpp" line="342"/> <source>Desktop</source> <translation>Skrivebord</translation> </message> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_de.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_de.ts index f4626cee..644524e1 100644 --- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_de.ts +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_de.ts @@ -38,62 +38,62 @@ <translation>Klicken zum Festlegen</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="72"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="73"/> <source>Launch %1</source> <translation>%1 starten</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="127"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> <source>Open</source> <translation>Öffnen</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="129"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> <source>Open With</source> <translation>Öffnen mit</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="132"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> <source>View Properties</source> <translation>Eigenschaften anzeigen</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="141"/> <source>File Operations</source> <translation>Dateioperationen</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="143"/> <source>Rename</source> <translation>Umbenennen</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="146"/> <source>Copy</source> <translation>Kopieren</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="142"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="149"/> <source>Cut</source> <translation>Ausschneiden</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="144"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="151"/> <source>Delete</source> <translation>Löschen</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Select Application</source> <translation>Anwendung auswählen</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Name:</source> <translation>Name:</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="291"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="298"/> <source>New Filename</source> <translation>Neuer Dateiname</translation> </message> @@ -851,7 +851,7 @@ <name>LSession</name> <message> <location filename="../LSession.cpp" line="163"/> - <location filename="../LSession.cpp" line="344"/> + <location filename="../LSession.cpp" line="342"/> <source>Desktop</source> <translation>Arbeitsfläche</translation> </message> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_el.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_el.ts index ef889209..257c2f1d 100644 --- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_el.ts +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_el.ts @@ -38,62 +38,62 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="72"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="73"/> <source>Launch %1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="127"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> <source>Open</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="129"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> <source>Open With</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="132"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> <source>View Properties</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="141"/> <source>File Operations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="143"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="146"/> <source>Copy</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="142"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="149"/> <source>Cut</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="144"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="151"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Select Application</source> <translation>Επιλογή εφαρμογής</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Name:</source> <translation>Όνομα:</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="291"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="298"/> <source>New Filename</source> <translation type="unfinished"></translation> </message> @@ -851,7 +851,7 @@ <name>LSession</name> <message> <location filename="../LSession.cpp" line="163"/> - <location filename="../LSession.cpp" line="344"/> + <location filename="../LSession.cpp" line="342"/> <source>Desktop</source> <translation type="unfinished"></translation> </message> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_en_GB.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_en_GB.ts index c3a92c07..bbc321e2 100644 --- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_en_GB.ts +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_en_GB.ts @@ -38,62 +38,62 @@ <translation>Click to Set</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="72"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="73"/> <source>Launch %1</source> <translation type="unfinished">Starte %1</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="127"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> <source>Open</source> <translation type="unfinished">Open</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="129"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> <source>Open With</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="132"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> <source>View Properties</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="141"/> <source>File Operations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="143"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="146"/> <source>Copy</source> <translation type="unfinished">Copy</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="142"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="149"/> <source>Cut</source> <translation type="unfinished">Cut</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="144"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="151"/> <source>Delete</source> <translation type="unfinished">Delete</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Select Application</source> <translation>Select Application</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Name:</source> <translation>Name:</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="291"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="298"/> <source>New Filename</source> <translation type="unfinished"></translation> </message> @@ -265,12 +265,12 @@ </message> <message> <location filename="../BootSplash.cpp" line="65"/> - <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="67"/> - <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> @@ -350,7 +350,7 @@ </message> <message> <location filename="../BootSplash.cpp" line="99"/> - <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> @@ -360,7 +360,7 @@ </message> <message> <location filename="../BootSplash.cpp" line="103"/> - <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> @@ -380,7 +380,7 @@ </message> <message> <location filename="../BootSplash.cpp" line="111"/> - <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> @@ -436,22 +436,22 @@ <message> <location filename="../BootSplash.cpp" line="142"/> <source>Initializing Session …</source> - <translation>Initialising Session ...</translation> + <translation>Initialising Session …</translation> </message> <message> <location filename="../BootSplash.cpp" line="145"/> <source>Loading System Settings …</source> - <translation>Loading System Settings ...</translation> + <translation>Loading System Settings …</translation> </message> <message> <location filename="../BootSplash.cpp" line="148"/> <source>Loading User Preferences …</source> - <translation>Loading User Preferences ...</translation> + <translation>Loading User Preferences …</translation> </message> <message> <location filename="../BootSplash.cpp" line="151"/> <source>Preparing System Tray …</source> - <translation>Preparing System Tray ...</translation> + <translation>Preparing System Tray …</translation> </message> <message> <location filename="../BootSplash.cpp" line="154"/> @@ -851,7 +851,7 @@ <name>LSession</name> <message> <location filename="../LSession.cpp" line="163"/> - <location filename="../LSession.cpp" line="344"/> + <location filename="../LSession.cpp" line="342"/> <source>Desktop</source> <translation>Desktop</translation> </message> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_en_ZA.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_en_ZA.ts index 6a86d9f6..caeb719a 100644 --- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_en_ZA.ts +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_en_ZA.ts @@ -38,62 +38,62 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="72"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="73"/> <source>Launch %1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="127"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> <source>Open</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="129"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> <source>Open With</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="132"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> <source>View Properties</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="141"/> <source>File Operations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="143"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="146"/> <source>Copy</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="142"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="149"/> <source>Cut</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="144"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="151"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Select Application</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Name:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="291"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="298"/> <source>New Filename</source> <translation type="unfinished"></translation> </message> @@ -851,7 +851,7 @@ <name>LSession</name> <message> <location filename="../LSession.cpp" line="163"/> - <location filename="../LSession.cpp" line="344"/> + <location filename="../LSession.cpp" line="342"/> <source>Desktop</source> <translation type="unfinished"></translation> </message> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_es.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_es.ts index 3a598c96..ad5bcdff 100644 --- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_es.ts +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_es.ts @@ -38,62 +38,62 @@ <translation>Presione para Aplicar</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="72"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="73"/> <source>Launch %1</source> <translation type="unfinished">Lanzar %1</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="127"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> <source>Open</source> - <translation type="unfinished">Abrir</translation> + <translation>Abrir</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="129"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> <source>Open With</source> - <translation type="unfinished"></translation> + <translation>Abrir con</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="132"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> <source>View Properties</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="141"/> <source>File Operations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="143"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="146"/> <source>Copy</source> - <translation type="unfinished">Copiar</translation> + <translation>Copiar</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="142"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="149"/> <source>Cut</source> <translation type="unfinished">Cortar</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="144"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="151"/> <source>Delete</source> - <translation type="unfinished">Borrar</translation> + <translation>Borrar</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Select Application</source> <translation>Seleccionar Aplicación</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Name:</source> <translation>Nombre:</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="291"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="298"/> <source>New Filename</source> <translation type="unfinished"></translation> </message> @@ -265,12 +265,12 @@ </message> <message> <location filename="../BootSplash.cpp" line="65"/> - <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="67"/> - <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">No puedes saber demasiado, pero puedes decir demasiado.</translation> </message> <message> @@ -350,7 +350,7 @@ </message> <message> <location filename="../BootSplash.cpp" line="99"/> - <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> @@ -360,7 +360,7 @@ </message> <message> <location filename="../BootSplash.cpp" line="103"/> - <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> @@ -380,7 +380,7 @@ </message> <message> <location filename="../BootSplash.cpp" line="111"/> - <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> @@ -851,7 +851,7 @@ <name>LSession</name> <message> <location filename="../LSession.cpp" line="163"/> - <location filename="../LSession.cpp" line="344"/> + <location filename="../LSession.cpp" line="342"/> <source>Desktop</source> <translation>Escritorio</translation> </message> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_et.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_et.ts index 4c1fef59..5bf00b5f 100644 --- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_et.ts +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_et.ts @@ -38,62 +38,62 @@ <translation>Klõpsa määramiseks</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="72"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="73"/> <source>Launch %1</source> <translation type="unfinished">Käivita %1</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="127"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> <source>Open</source> <translation type="unfinished">Ava</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="129"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> <source>Open With</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="132"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> <source>View Properties</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="141"/> <source>File Operations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="143"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="146"/> <source>Copy</source> <translation type="unfinished">Kopeeri</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="142"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="149"/> <source>Cut</source> <translation type="unfinished">Lõika</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="144"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="151"/> <source>Delete</source> <translation type="unfinished">Kustuta</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Select Application</source> <translation>Vali rakendus</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Name:</source> <translation>Nimi:</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="291"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="298"/> <source>New Filename</source> <translation type="unfinished"></translation> </message> @@ -851,7 +851,7 @@ <name>LSession</name> <message> <location filename="../LSession.cpp" line="163"/> - <location filename="../LSession.cpp" line="344"/> + <location filename="../LSession.cpp" line="342"/> <source>Desktop</source> <translation type="unfinished">Töölaud</translation> </message> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_eu.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_eu.ts index f2a8c9c3..800eb234 100644 --- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_eu.ts +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_eu.ts @@ -38,62 +38,62 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="72"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="73"/> <source>Launch %1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="127"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> <source>Open</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="129"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> <source>Open With</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="132"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> <source>View Properties</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="141"/> <source>File Operations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="143"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="146"/> <source>Copy</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="142"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="149"/> <source>Cut</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="144"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="151"/> <source>Delete</source> <translation type="unfinished">Ezabatu</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Select Application</source> <translation>Aplikazioa hautatu</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Name:</source> <translation>Izena:</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="291"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="298"/> <source>New Filename</source> <translation type="unfinished"></translation> </message> @@ -851,7 +851,7 @@ <name>LSession</name> <message> <location filename="../LSession.cpp" line="163"/> - <location filename="../LSession.cpp" line="344"/> + <location filename="../LSession.cpp" line="342"/> <source>Desktop</source> <translation type="unfinished"></translation> </message> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fa.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fa.ts index 97e33521..d6469c56 100644 --- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fa.ts +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fa.ts @@ -38,62 +38,62 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="72"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="73"/> <source>Launch %1</source> <translation type="unfinished">%1 را راه بیانداز</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="127"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> <source>Open</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="129"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> <source>Open With</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="132"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> <source>View Properties</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="141"/> <source>File Operations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="143"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="146"/> <source>Copy</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="142"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="149"/> <source>Cut</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="144"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="151"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Select Application</source> <translation type="unfinished">کاربست برگزین</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Name:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="291"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="298"/> <source>New Filename</source> <translation type="unfinished"></translation> </message> @@ -851,7 +851,7 @@ <name>LSession</name> <message> <location filename="../LSession.cpp" line="163"/> - <location filename="../LSession.cpp" line="344"/> + <location filename="../LSession.cpp" line="342"/> <source>Desktop</source> <translation type="unfinished"></translation> </message> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fi.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fi.ts index b1a2ede1..62634130 100644 --- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fi.ts +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fi.ts @@ -38,62 +38,62 @@ <translation>Aseta napsauttamalla</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="72"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="73"/> <source>Launch %1</source> <translation type="unfinished">Käynnistä %1</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="127"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> <source>Open</source> <translation type="unfinished">Avaa</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="129"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> <source>Open With</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="132"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> <source>View Properties</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="141"/> <source>File Operations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="143"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="146"/> <source>Copy</source> <translation type="unfinished">Kopioi</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="142"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="149"/> <source>Cut</source> <translation type="unfinished">Leikkaa</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="144"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="151"/> <source>Delete</source> <translation type="unfinished">Poista</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Select Application</source> <translation>Valitse sovellus</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Name:</source> <translation>Nimi:</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="291"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="298"/> <source>New Filename</source> <translation type="unfinished"></translation> </message> @@ -851,7 +851,7 @@ <name>LSession</name> <message> <location filename="../LSession.cpp" line="163"/> - <location filename="../LSession.cpp" line="344"/> + <location filename="../LSession.cpp" line="342"/> <source>Desktop</source> <translation>Työpöytä</translation> </message> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fr.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fr.ts index ede307cc..53f00a69 100644 --- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fr.ts +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fr.ts @@ -38,62 +38,62 @@ <translation>Cliquer pour Définir</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="72"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="73"/> <source>Launch %1</source> <translation type="unfinished">Lancer %1</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="127"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> <source>Open</source> <translation type="unfinished">Ouvrir</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="129"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> <source>Open With</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="132"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> <source>View Properties</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="141"/> <source>File Operations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="143"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="146"/> <source>Copy</source> <translation type="unfinished">Copier</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="142"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="149"/> <source>Cut</source> <translation type="unfinished">Couper</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="144"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="151"/> <source>Delete</source> <translation type="unfinished">Supprimer</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Select Application</source> <translation>Sélectionner un Programme</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Name:</source> <translation>Nom :</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="291"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="298"/> <source>New Filename</source> <translation type="unfinished"></translation> </message> @@ -851,7 +851,7 @@ <name>LSession</name> <message> <location filename="../LSession.cpp" line="163"/> - <location filename="../LSession.cpp" line="344"/> + <location filename="../LSession.cpp" line="342"/> <source>Desktop</source> <translation>Bureau</translation> </message> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fr_CA.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fr_CA.ts index 6a86d9f6..caeb719a 100644 --- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fr_CA.ts +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fr_CA.ts @@ -38,62 +38,62 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="72"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="73"/> <source>Launch %1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="127"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> <source>Open</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="129"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> <source>Open With</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="132"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> <source>View Properties</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="141"/> <source>File Operations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="143"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="146"/> <source>Copy</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="142"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="149"/> <source>Cut</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="144"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="151"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Select Application</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Name:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="291"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="298"/> <source>New Filename</source> <translation type="unfinished"></translation> </message> @@ -851,7 +851,7 @@ <name>LSession</name> <message> <location filename="../LSession.cpp" line="163"/> - <location filename="../LSession.cpp" line="344"/> + <location filename="../LSession.cpp" line="342"/> <source>Desktop</source> <translation type="unfinished"></translation> </message> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_gl.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_gl.ts index 6a86d9f6..caeb719a 100644 --- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_gl.ts +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_gl.ts @@ -38,62 +38,62 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="72"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="73"/> <source>Launch %1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="127"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> <source>Open</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="129"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> <source>Open With</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="132"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> <source>View Properties</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="141"/> <source>File Operations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="143"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="146"/> <source>Copy</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="142"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="149"/> <source>Cut</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="144"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="151"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Select Application</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Name:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="291"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="298"/> <source>New Filename</source> <translation type="unfinished"></translation> </message> @@ -851,7 +851,7 @@ <name>LSession</name> <message> <location filename="../LSession.cpp" line="163"/> - <location filename="../LSession.cpp" line="344"/> + <location filename="../LSession.cpp" line="342"/> <source>Desktop</source> <translation type="unfinished"></translation> </message> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_he.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_he.ts index 5d7abbd1..9ff16d1d 100644 --- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_he.ts +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_he.ts @@ -38,62 +38,62 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="72"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="73"/> <source>Launch %1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="127"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> <source>Open</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="129"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> <source>Open With</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="132"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> <source>View Properties</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="141"/> <source>File Operations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="143"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="146"/> <source>Copy</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="142"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="149"/> <source>Cut</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="144"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="151"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Select Application</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Name:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="291"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="298"/> <source>New Filename</source> <translation type="unfinished"></translation> </message> @@ -851,7 +851,7 @@ <name>LSession</name> <message> <location filename="../LSession.cpp" line="163"/> - <location filename="../LSession.cpp" line="344"/> + <location filename="../LSession.cpp" line="342"/> <source>Desktop</source> <translation type="unfinished">שולחן עבודה</translation> </message> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_hi.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_hi.ts index d189b796..f1ed8825 100644 --- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_hi.ts +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_hi.ts @@ -38,62 +38,62 @@ <translation>निश्चित करने के लिए क्लिक करे</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="72"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="73"/> <source>Launch %1</source> <translation type="unfinished">प्रारंभ %1</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="127"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> <source>Open</source> <translation type="unfinished">चालू</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="129"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> <source>Open With</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="132"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> <source>View Properties</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="141"/> <source>File Operations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="143"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="146"/> <source>Copy</source> <translation type="unfinished">कॉपी करें</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="142"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="149"/> <source>Cut</source> <translation type="unfinished">काटें</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="144"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="151"/> <source>Delete</source> <translation type="unfinished">नष्ट करें</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Select Application</source> <translation>एप्लीकेशन चुनें</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Name:</source> <translation>नाम</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="291"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="298"/> <source>New Filename</source> <translation type="unfinished"></translation> </message> @@ -851,7 +851,7 @@ <name>LSession</name> <message> <location filename="../LSession.cpp" line="163"/> - <location filename="../LSession.cpp" line="344"/> + <location filename="../LSession.cpp" line="342"/> <source>Desktop</source> <translation type="unfinished">डेस्कटॉप</translation> </message> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_hr.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_hr.ts index 6a86d9f6..caeb719a 100644 --- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_hr.ts +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_hr.ts @@ -38,62 +38,62 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="72"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="73"/> <source>Launch %1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="127"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> <source>Open</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="129"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> <source>Open With</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="132"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> <source>View Properties</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="141"/> <source>File Operations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="143"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="146"/> <source>Copy</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="142"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="149"/> <source>Cut</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="144"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="151"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Select Application</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Name:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="291"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="298"/> <source>New Filename</source> <translation type="unfinished"></translation> </message> @@ -851,7 +851,7 @@ <name>LSession</name> <message> <location filename="../LSession.cpp" line="163"/> - <location filename="../LSession.cpp" line="344"/> + <location filename="../LSession.cpp" line="342"/> <source>Desktop</source> <translation type="unfinished"></translation> </message> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_hu.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_hu.ts index 1dd4b838..abdfc7b4 100644 --- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_hu.ts +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_hu.ts @@ -38,62 +38,62 @@ <translation>Kattintás a beállításhoz</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="72"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="73"/> <source>Launch %1</source> <translation type="unfinished">%1 indítása</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="127"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> <source>Open</source> <translation type="unfinished">Megnyitás</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="129"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> <source>Open With</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="132"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> <source>View Properties</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="141"/> <source>File Operations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="143"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="146"/> <source>Copy</source> <translation type="unfinished">Másolás</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="142"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="149"/> <source>Cut</source> <translation type="unfinished">Kivágás</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="144"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="151"/> <source>Delete</source> <translation type="unfinished">Törlés</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Select Application</source> <translation>Alkalmazás kiválasztása</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Name:</source> <translation>Név:</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="291"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="298"/> <source>New Filename</source> <translation type="unfinished"></translation> </message> @@ -851,7 +851,7 @@ <name>LSession</name> <message> <location filename="../LSession.cpp" line="163"/> - <location filename="../LSession.cpp" line="344"/> + <location filename="../LSession.cpp" line="342"/> <source>Desktop</source> <translation>Asztal</translation> </message> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_id.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_id.ts index 14137dcd..13bba7d0 100644 --- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_id.ts +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_id.ts @@ -38,62 +38,62 @@ <translation>klik untuk mengatur</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="72"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="73"/> <source>Launch %1</source> <translation type="unfinished">Luncurkan %1</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="127"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> <source>Open</source> <translation type="unfinished">Buka</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="129"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> <source>Open With</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="132"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> <source>View Properties</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="141"/> <source>File Operations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="143"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="146"/> <source>Copy</source> <translation type="unfinished">Salin</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="142"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="149"/> <source>Cut</source> <translation type="unfinished">Potong</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="144"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="151"/> <source>Delete</source> <translation type="unfinished">Hapus</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Select Application</source> <translation>Pilih Aplikasi</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Name:</source> <translation>Nama:</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="291"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="298"/> <source>New Filename</source> <translation type="unfinished"></translation> </message> @@ -851,7 +851,7 @@ <name>LSession</name> <message> <location filename="../LSession.cpp" line="163"/> - <location filename="../LSession.cpp" line="344"/> + <location filename="../LSession.cpp" line="342"/> <source>Desktop</source> <translation type="unfinished">Layar Kerja Utama</translation> </message> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_is.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_is.ts index 6a86d9f6..caeb719a 100644 --- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_is.ts +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_is.ts @@ -38,62 +38,62 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="72"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="73"/> <source>Launch %1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="127"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> <source>Open</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="129"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> <source>Open With</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="132"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> <source>View Properties</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="141"/> <source>File Operations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="143"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="146"/> <source>Copy</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="142"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="149"/> <source>Cut</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="144"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="151"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Select Application</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Name:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="291"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="298"/> <source>New Filename</source> <translation type="unfinished"></translation> </message> @@ -851,7 +851,7 @@ <name>LSession</name> <message> <location filename="../LSession.cpp" line="163"/> - <location filename="../LSession.cpp" line="344"/> + <location filename="../LSession.cpp" line="342"/> <source>Desktop</source> <translation type="unfinished"></translation> </message> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_it.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_it.ts index f46b1976..ed420545 100644 --- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_it.ts +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_it.ts @@ -38,62 +38,62 @@ <translation>Clicca per Impostare</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="72"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="73"/> <source>Launch %1</source> <translation type="unfinished">Lancia %1</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="127"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> <source>Open</source> <translation type="unfinished">Apri</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="129"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> <source>Open With</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="132"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> <source>View Properties</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="141"/> <source>File Operations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="143"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="146"/> <source>Copy</source> <translation type="unfinished">Copia</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="142"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="149"/> <source>Cut</source> <translation type="unfinished">Taglia</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="144"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="151"/> <source>Delete</source> <translation type="unfinished">Cancella</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Select Application</source> <translation>Seleziona Applicazione</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Name:</source> <translation>Nome:</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="291"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="298"/> <source>New Filename</source> <translation type="unfinished"></translation> </message> @@ -851,7 +851,7 @@ <name>LSession</name> <message> <location filename="../LSession.cpp" line="163"/> - <location filename="../LSession.cpp" line="344"/> + <location filename="../LSession.cpp" line="342"/> <source>Desktop</source> <translation>Desktop</translation> </message> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ja.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ja.ts index d4dc2e77..55ab6645 100644 --- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ja.ts +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ja.ts @@ -41,62 +41,62 @@ <translation>クリックして設定してください</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="72"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="73"/> <source>Launch %1</source> <translation type="unfinished">%1 を起動</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="127"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> <source>Open</source> <translation type="unfinished">開く</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="129"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> <source>Open With</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="132"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> <source>View Properties</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="141"/> <source>File Operations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="143"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="146"/> <source>Copy</source> <translation type="unfinished">コピー</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="142"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="149"/> <source>Cut</source> <translation type="unfinished">切り取り</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="144"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="151"/> <source>Delete</source> <translation type="unfinished">削除</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Select Application</source> <translation>アプリケーションを選択してください</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Name:</source> <translation>名前:</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="291"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="298"/> <source>New Filename</source> <translation type="unfinished"></translation> </message> @@ -856,7 +856,7 @@ <name>LSession</name> <message> <location filename="../LSession.cpp" line="163"/> - <location filename="../LSession.cpp" line="344"/> + <location filename="../LSession.cpp" line="342"/> <source>Desktop</source> <translatorcomment>これ、ファイルパスなので、「デスクトップ」と訳したらまずい</translatorcomment> <translation>Desktop</translation> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ka.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ka.ts index 6a86d9f6..caeb719a 100644 --- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ka.ts +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ka.ts @@ -38,62 +38,62 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="72"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="73"/> <source>Launch %1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="127"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> <source>Open</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="129"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> <source>Open With</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="132"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> <source>View Properties</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="141"/> <source>File Operations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="143"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="146"/> <source>Copy</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="142"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="149"/> <source>Cut</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="144"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="151"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Select Application</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Name:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="291"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="298"/> <source>New Filename</source> <translation type="unfinished"></translation> </message> @@ -851,7 +851,7 @@ <name>LSession</name> <message> <location filename="../LSession.cpp" line="163"/> - <location filename="../LSession.cpp" line="344"/> + <location filename="../LSession.cpp" line="342"/> <source>Desktop</source> <translation type="unfinished"></translation> </message> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ko.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ko.ts index 836f74da..c47d7279 100644 --- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ko.ts +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ko.ts @@ -38,62 +38,62 @@ <translation>설정하기 위해 누름</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="72"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="73"/> <source>Launch %1</source> <translation type="unfinished">%1 실행</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="127"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> <source>Open</source> <translation type="unfinished">열기</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="129"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> <source>Open With</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="132"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> <source>View Properties</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="141"/> <source>File Operations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="143"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="146"/> <source>Copy</source> <translation type="unfinished">복사</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="142"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="149"/> <source>Cut</source> <translation type="unfinished">잘라내기</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="144"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="151"/> <source>Delete</source> <translation type="unfinished">삭제</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Select Application</source> <translation>프로그램 선택</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Name:</source> <translation>이름:</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="291"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="298"/> <source>New Filename</source> <translation type="unfinished"></translation> </message> @@ -851,7 +851,7 @@ <name>LSession</name> <message> <location filename="../LSession.cpp" line="163"/> - <location filename="../LSession.cpp" line="344"/> + <location filename="../LSession.cpp" line="342"/> <source>Desktop</source> <translation type="unfinished">바탕 화면</translation> </message> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_lt.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_lt.ts index 1869e3e0..34b0a5e6 100644 --- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_lt.ts +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_lt.ts @@ -38,62 +38,62 @@ <translation>Spustelėkite, norėdami nustatyti</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="72"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="73"/> <source>Launch %1</source> <translation>Paleisti %1</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="127"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> <source>Open</source> <translation>Atverti</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="129"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> <source>Open With</source> <translation>Atverti, naudojant</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="132"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> <source>View Properties</source> <translation>Rodyti savybes</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="141"/> <source>File Operations</source> <translation>Failų operacijos</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="143"/> <source>Rename</source> <translation>Pervadinti</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="146"/> <source>Copy</source> <translation>Kopijuoti</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="142"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="149"/> <source>Cut</source> <translation>Iškirpti</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="144"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="151"/> <source>Delete</source> <translation>Ištrinti</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Select Application</source> <translation>Pasirinkti programą</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Name:</source> <translation>Pavadinimas:</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="291"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="298"/> <source>New Filename</source> <translation>Naujas failo pavadinimas</translation> </message> @@ -265,12 +265,12 @@ </message> <message> <location filename="../BootSplash.cpp" line="65"/> - <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>Nesitikėk padrąsinti silpnus, žemindamas stiprius.</translation> </message> <message> <location filename="../BootSplash.cpp" line="67"/> - <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>Negali per daug žinoti, tačiau gali per daug pasakyti.</translation> </message> <message> @@ -350,7 +350,7 @@ </message> <message> <location filename="../BootSplash.cpp" line="99"/> - <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>Tik du dalykai yra beribiai: visata ir žmogaus kvailumas; tačiau dėl visatos aš nesu tikras.</translation> </message> <message> @@ -360,8 +360,8 @@ </message> <message> <location filename="../BootSplash.cpp" line="103"/> - <source>Do, or do not. There is no 'try'.</source> - <translation>Daryti arba nedaryti. Nėra "bandyti".</translation> + <source>Do, or do not. There is no 'try'.</source> + <translation>Daryti arba nedaryti. Nėra "bandyti".</translation> </message> <message> <location filename="../BootSplash.cpp" line="105"/> @@ -380,7 +380,7 @@ </message> <message> <location filename="../BootSplash.cpp" line="111"/> - <source>It's kind of fun to do the impossible.</source> + <source>It's kind of fun to do the impossible.</source> <translation>Smagu yra daryti tai, kas neįmanoma.</translation> </message> <message> @@ -851,7 +851,7 @@ <name>LSession</name> <message> <location filename="../LSession.cpp" line="163"/> - <location filename="../LSession.cpp" line="344"/> + <location filename="../LSession.cpp" line="342"/> <source>Desktop</source> <translation>Darbalaukis</translation> </message> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_lv.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_lv.ts index 070884ed..7cf1b6f3 100644 --- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_lv.ts +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_lv.ts @@ -38,62 +38,62 @@ <translation>Klikšķiniet, lai iestatītu</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="72"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="73"/> <source>Launch %1</source> <translation type="unfinished">Palaist %1</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="127"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> <source>Open</source> <translation type="unfinished">Atvērt</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="129"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> <source>Open With</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="132"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> <source>View Properties</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="141"/> <source>File Operations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="143"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="146"/> <source>Copy</source> <translation type="unfinished">Kopēt</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="142"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="149"/> <source>Cut</source> <translation type="unfinished">Izgriezt</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="144"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="151"/> <source>Delete</source> <translation type="unfinished">Dzēst</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Select Application</source> <translation>Izvēlieties lietotni</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Name:</source> <translation>Nosaukums:</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="291"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="298"/> <source>New Filename</source> <translation type="unfinished"></translation> </message> @@ -851,7 +851,7 @@ <name>LSession</name> <message> <location filename="../LSession.cpp" line="163"/> - <location filename="../LSession.cpp" line="344"/> + <location filename="../LSession.cpp" line="342"/> <source>Desktop</source> <translation>Darbvirsma</translation> </message> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_mk.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_mk.ts index 6a86d9f6..caeb719a 100644 --- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_mk.ts +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_mk.ts @@ -38,62 +38,62 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="72"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="73"/> <source>Launch %1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="127"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> <source>Open</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="129"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> <source>Open With</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="132"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> <source>View Properties</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="141"/> <source>File Operations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="143"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="146"/> <source>Copy</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="142"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="149"/> <source>Cut</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="144"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="151"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Select Application</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Name:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="291"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="298"/> <source>New Filename</source> <translation type="unfinished"></translation> </message> @@ -851,7 +851,7 @@ <name>LSession</name> <message> <location filename="../LSession.cpp" line="163"/> - <location filename="../LSession.cpp" line="344"/> + <location filename="../LSession.cpp" line="342"/> <source>Desktop</source> <translation type="unfinished"></translation> </message> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_mn.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_mn.ts index 6a86d9f6..caeb719a 100644 --- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_mn.ts +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_mn.ts @@ -38,62 +38,62 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="72"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="73"/> <source>Launch %1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="127"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> <source>Open</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="129"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> <source>Open With</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="132"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> <source>View Properties</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="141"/> <source>File Operations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="143"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="146"/> <source>Copy</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="142"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="149"/> <source>Cut</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="144"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="151"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Select Application</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Name:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="291"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="298"/> <source>New Filename</source> <translation type="unfinished"></translation> </message> @@ -851,7 +851,7 @@ <name>LSession</name> <message> <location filename="../LSession.cpp" line="163"/> - <location filename="../LSession.cpp" line="344"/> + <location filename="../LSession.cpp" line="342"/> <source>Desktop</source> <translation type="unfinished"></translation> </message> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ms.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ms.ts index 6a86d9f6..caeb719a 100644 --- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ms.ts +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ms.ts @@ -38,62 +38,62 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="72"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="73"/> <source>Launch %1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="127"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> <source>Open</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="129"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> <source>Open With</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="132"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> <source>View Properties</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="141"/> <source>File Operations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="143"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="146"/> <source>Copy</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="142"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="149"/> <source>Cut</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="144"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="151"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Select Application</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Name:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="291"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="298"/> <source>New Filename</source> <translation type="unfinished"></translation> </message> @@ -851,7 +851,7 @@ <name>LSession</name> <message> <location filename="../LSession.cpp" line="163"/> - <location filename="../LSession.cpp" line="344"/> + <location filename="../LSession.cpp" line="342"/> <source>Desktop</source> <translation type="unfinished"></translation> </message> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_mt.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_mt.ts index 6a86d9f6..caeb719a 100644 --- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_mt.ts +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_mt.ts @@ -38,62 +38,62 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="72"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="73"/> <source>Launch %1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="127"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> <source>Open</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="129"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> <source>Open With</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="132"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> <source>View Properties</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="141"/> <source>File Operations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="143"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="146"/> <source>Copy</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="142"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="149"/> <source>Cut</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="144"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="151"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Select Application</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Name:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="291"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="298"/> <source>New Filename</source> <translation type="unfinished"></translation> </message> @@ -851,7 +851,7 @@ <name>LSession</name> <message> <location filename="../LSession.cpp" line="163"/> - <location filename="../LSession.cpp" line="344"/> + <location filename="../LSession.cpp" line="342"/> <source>Desktop</source> <translation type="unfinished"></translation> </message> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_nb.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_nb.ts index 6a86d9f6..caeb719a 100644 --- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_nb.ts +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_nb.ts @@ -38,62 +38,62 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="72"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="73"/> <source>Launch %1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="127"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> <source>Open</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="129"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> <source>Open With</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="132"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> <source>View Properties</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="141"/> <source>File Operations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="143"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="146"/> <source>Copy</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="142"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="149"/> <source>Cut</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="144"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="151"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Select Application</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Name:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="291"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="298"/> <source>New Filename</source> <translation type="unfinished"></translation> </message> @@ -851,7 +851,7 @@ <name>LSession</name> <message> <location filename="../LSession.cpp" line="163"/> - <location filename="../LSession.cpp" line="344"/> + <location filename="../LSession.cpp" line="342"/> <source>Desktop</source> <translation type="unfinished"></translation> </message> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_nl.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_nl.ts index e39fcf70..9702b408 100644 --- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_nl.ts +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_nl.ts @@ -38,62 +38,62 @@ <translation>Klik om in te stellen</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="72"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="73"/> <source>Launch %1</source> <translation type="unfinished">%1 opstarten</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="127"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> <source>Open</source> <translation type="unfinished">Openen</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="129"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> <source>Open With</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="132"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> <source>View Properties</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="141"/> <source>File Operations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="143"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="146"/> <source>Copy</source> <translation type="unfinished">Plakken</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="142"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="149"/> <source>Cut</source> <translation type="unfinished">Knippen</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="144"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="151"/> <source>Delete</source> <translation type="unfinished">Verwijderen</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Select Application</source> <translation>Applicatie selecteren</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Name:</source> <translation>Naam:</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="291"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="298"/> <source>New Filename</source> <translation type="unfinished"></translation> </message> @@ -851,7 +851,7 @@ <name>LSession</name> <message> <location filename="../LSession.cpp" line="163"/> - <location filename="../LSession.cpp" line="344"/> + <location filename="../LSession.cpp" line="342"/> <source>Desktop</source> <translation>Bureaublad</translation> </message> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pa.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pa.ts index 6a86d9f6..caeb719a 100644 --- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pa.ts +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pa.ts @@ -38,62 +38,62 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="72"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="73"/> <source>Launch %1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="127"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> <source>Open</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="129"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> <source>Open With</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="132"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> <source>View Properties</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="141"/> <source>File Operations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="143"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="146"/> <source>Copy</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="142"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="149"/> <source>Cut</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="144"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="151"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Select Application</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Name:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="291"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="298"/> <source>New Filename</source> <translation type="unfinished"></translation> </message> @@ -851,7 +851,7 @@ <name>LSession</name> <message> <location filename="../LSession.cpp" line="163"/> - <location filename="../LSession.cpp" line="344"/> + <location filename="../LSession.cpp" line="342"/> <source>Desktop</source> <translation type="unfinished"></translation> </message> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pl.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pl.ts index d909cda8..f9c747e9 100644 --- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pl.ts +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pl.ts @@ -38,62 +38,62 @@ <translation>Kliknij by ustawić</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="72"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="73"/> <source>Launch %1</source> <translation type="unfinished">Uruchom %1</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="127"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> <source>Open</source> <translation type="unfinished">Otwórz</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="129"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> <source>Open With</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="132"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> <source>View Properties</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="141"/> <source>File Operations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="143"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="146"/> <source>Copy</source> <translation type="unfinished">Kopiuj</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="142"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="149"/> <source>Cut</source> <translation type="unfinished">Wytnij</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="144"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="151"/> <source>Delete</source> <translation type="unfinished">Usuń</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Select Application</source> <translation>Wybierz aplikację</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Name:</source> <translation>Nazwa:</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="291"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="298"/> <source>New Filename</source> <translation type="unfinished"></translation> </message> @@ -851,7 +851,7 @@ <name>LSession</name> <message> <location filename="../LSession.cpp" line="163"/> - <location filename="../LSession.cpp" line="344"/> + <location filename="../LSession.cpp" line="342"/> <source>Desktop</source> <translation>Pulpit</translation> </message> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pt.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pt.ts index c87ec370..dfe5c837 100644 --- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pt.ts +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pt.ts @@ -38,62 +38,62 @@ <translation>Clique para Definir</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="72"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="73"/> <source>Launch %1</source> <translation type="unfinished">Iniciar %1</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="127"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> <source>Open</source> <translation type="unfinished">Abrir</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="129"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> <source>Open With</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="132"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> <source>View Properties</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="141"/> <source>File Operations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="143"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="146"/> <source>Copy</source> <translation type="unfinished">Copiar</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="142"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="149"/> <source>Cut</source> <translation type="unfinished">Cortar</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="144"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="151"/> <source>Delete</source> <translation type="unfinished">Excluir</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Select Application</source> <translation>Selecionar Aplicativo </translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Name:</source> <translation>Nome:</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="291"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="298"/> <source>New Filename</source> <translation type="unfinished"></translation> </message> @@ -851,7 +851,7 @@ <name>LSession</name> <message> <location filename="../LSession.cpp" line="163"/> - <location filename="../LSession.cpp" line="344"/> + <location filename="../LSession.cpp" line="342"/> <source>Desktop</source> <translation type="unfinished">Área de Trabalho</translation> </message> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pt_BR.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pt_BR.ts index 0a238ed7..08732029 100644 --- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pt_BR.ts +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pt_BR.ts @@ -38,62 +38,62 @@ <translation>Clique para definir</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="72"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="73"/> <source>Launch %1</source> <translation type="unfinished">Lançar %1</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="127"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> <source>Open</source> <translation type="unfinished">Abrir</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="129"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> <source>Open With</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="132"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> <source>View Properties</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="141"/> <source>File Operations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="143"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="146"/> <source>Copy</source> <translation type="unfinished">Copiar</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="142"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="149"/> <source>Cut</source> <translation type="unfinished">Cortar</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="144"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="151"/> <source>Delete</source> <translation type="unfinished">Excluir</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Select Application</source> <translation>Selecionar aplicativo</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Name:</source> <translation>Nome:</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="291"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="298"/> <source>New Filename</source> <translation type="unfinished"></translation> </message> @@ -851,7 +851,7 @@ <name>LSession</name> <message> <location filename="../LSession.cpp" line="163"/> - <location filename="../LSession.cpp" line="344"/> + <location filename="../LSession.cpp" line="342"/> <source>Desktop</source> <translation>Área de trabalho</translation> </message> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ro.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ro.ts index 6a86d9f6..caeb719a 100644 --- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ro.ts +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ro.ts @@ -38,62 +38,62 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="72"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="73"/> <source>Launch %1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="127"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> <source>Open</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="129"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> <source>Open With</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="132"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> <source>View Properties</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="141"/> <source>File Operations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="143"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="146"/> <source>Copy</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="142"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="149"/> <source>Cut</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="144"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="151"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Select Application</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Name:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="291"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="298"/> <source>New Filename</source> <translation type="unfinished"></translation> </message> @@ -851,7 +851,7 @@ <name>LSession</name> <message> <location filename="../LSession.cpp" line="163"/> - <location filename="../LSession.cpp" line="344"/> + <location filename="../LSession.cpp" line="342"/> <source>Desktop</source> <translation type="unfinished"></translation> </message> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ru.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ru.ts index 11bf37d6..a7a78a16 100644 --- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ru.ts +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ru.ts @@ -38,62 +38,62 @@ <translation>Нажмите что бы выбрать</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="72"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="73"/> <source>Launch %1</source> <translation>Запуск %1</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="127"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> <source>Open</source> <translation>Открыть</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="129"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> <source>Open With</source> <translation>Открыть с помощью</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="132"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> <source>View Properties</source> <translation>Посмотреть свойства</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="141"/> <source>File Operations</source> <translation>Операции с файлами</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="143"/> <source>Rename</source> <translation>Переименовать</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="146"/> <source>Copy</source> <translation>Копировать</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="142"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="149"/> <source>Cut</source> <translation>Вырезать</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="144"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="151"/> <source>Delete</source> <translation>Удалить</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Select Application</source> <translation>Выбрать Приложение</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Name:</source> <translation>Название:</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="291"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="298"/> <source>New Filename</source> <translation>Новое имя файла</translation> </message> @@ -265,12 +265,12 @@ </message> <message> <location filename="../BootSplash.cpp" line="65"/> - <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>Не ждите, чтобы создать слабое, потянув вниз сильное.</translation> </message> <message> <location filename="../BootSplash.cpp" line="67"/> - <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>Вы не можете знать слишком много, но вы можете сказать слишком много.</translation> </message> <message> @@ -350,7 +350,7 @@ </message> <message> <location filename="../BootSplash.cpp" line="99"/> - <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>Только две вещи бесконечны, вселенная и человеческая глупость.</translation> </message> <message> @@ -360,7 +360,7 @@ </message> <message> <location filename="../BootSplash.cpp" line="103"/> - <source>Do, or do not. There is no 'try'.</source> + <source>Do, or do not. There is no 'try'.</source> <translation>Делай, или не делай. Не пробуй.</translation> </message> <message> @@ -380,7 +380,7 @@ </message> <message> <location filename="../BootSplash.cpp" line="111"/> - <source>It's kind of fun to do the impossible.</source> + <source>It's kind of fun to do the impossible.</source> <translation>Это своего рода забава - сделать невозможное.</translation> </message> <message> @@ -851,7 +851,7 @@ <name>LSession</name> <message> <location filename="../LSession.cpp" line="163"/> - <location filename="../LSession.cpp" line="344"/> + <location filename="../LSession.cpp" line="342"/> <source>Desktop</source> <translation>Рабочий стол</translation> </message> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sk.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sk.ts index 234c5e0b..c9bfecb1 100644 --- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sk.ts +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sk.ts @@ -38,62 +38,62 @@ <translation>Kliknutím nastaviť </translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="72"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="73"/> <source>Launch %1</source> <translation type="unfinished">Spustiť %1</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="127"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> <source>Open</source> <translation type="unfinished">Otvoriť</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="129"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> <source>Open With</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="132"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> <source>View Properties</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="141"/> <source>File Operations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="143"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="146"/> <source>Copy</source> <translation type="unfinished">Kopírovať</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="142"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="149"/> <source>Cut</source> <translation type="unfinished">Vystrihnúť</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="144"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="151"/> <source>Delete</source> <translation type="unfinished">Vymazať</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Select Application</source> <translation>Výber aplikácie</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Name:</source> <translation>Meno:</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="291"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="298"/> <source>New Filename</source> <translation type="unfinished"></translation> </message> @@ -851,7 +851,7 @@ <name>LSession</name> <message> <location filename="../LSession.cpp" line="163"/> - <location filename="../LSession.cpp" line="344"/> + <location filename="../LSession.cpp" line="342"/> <source>Desktop</source> <translation type="unfinished">Pracovná plocha</translation> </message> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sl.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sl.ts index 1773c5ae..5a4ab343 100644 --- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sl.ts +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sl.ts @@ -38,62 +38,62 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="72"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="73"/> <source>Launch %1</source> <translation type="unfinished">Zaženi %1</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="127"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> <source>Open</source> <translation type="unfinished">Odpri</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="129"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> <source>Open With</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="132"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> <source>View Properties</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="141"/> <source>File Operations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="143"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="146"/> <source>Copy</source> <translation type="unfinished">Kopiraj</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="142"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="149"/> <source>Cut</source> <translation type="unfinished">Izreži</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="144"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="151"/> <source>Delete</source> <translation type="unfinished">Izbriši</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Select Application</source> <translation>Izberi program</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Name:</source> <translation>Ime:</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="291"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="298"/> <source>New Filename</source> <translation type="unfinished"></translation> </message> @@ -851,7 +851,7 @@ <name>LSession</name> <message> <location filename="../LSession.cpp" line="163"/> - <location filename="../LSession.cpp" line="344"/> + <location filename="../LSession.cpp" line="342"/> <source>Desktop</source> <translation type="unfinished"></translation> </message> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sr.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sr.ts index 6a86d9f6..caeb719a 100644 --- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sr.ts +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sr.ts @@ -38,62 +38,62 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="72"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="73"/> <source>Launch %1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="127"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> <source>Open</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="129"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> <source>Open With</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="132"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> <source>View Properties</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="141"/> <source>File Operations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="143"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="146"/> <source>Copy</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="142"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="149"/> <source>Cut</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="144"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="151"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Select Application</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Name:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="291"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="298"/> <source>New Filename</source> <translation type="unfinished"></translation> </message> @@ -851,7 +851,7 @@ <name>LSession</name> <message> <location filename="../LSession.cpp" line="163"/> - <location filename="../LSession.cpp" line="344"/> + <location filename="../LSession.cpp" line="342"/> <source>Desktop</source> <translation type="unfinished"></translation> </message> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sv.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sv.ts index 673a2732..9a5870cd 100644 --- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sv.ts +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sv.ts @@ -38,62 +38,62 @@ <translation>Klicka för att tilldela</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="72"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="73"/> <source>Launch %1</source> <translation type="unfinished">Starta %1</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="127"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> <source>Open</source> <translation type="unfinished">Öppna</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="129"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> <source>Open With</source> <translation>Öppna med</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="132"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> <source>View Properties</source> <translation>Visa egenskaper</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="141"/> <source>File Operations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="143"/> <source>Rename</source> <translation>Döp om</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="146"/> <source>Copy</source> <translation type="unfinished">Kopiera</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="142"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="149"/> <source>Cut</source> <translation type="unfinished">Klipp ut</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="144"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="151"/> <source>Delete</source> <translation type="unfinished">Ta bort</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Select Application</source> <translation>Välj program</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Name:</source> <translation>Namn:</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="291"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="298"/> <source>New Filename</source> <translation>Nytt filnamn</translation> </message> @@ -851,7 +851,7 @@ <name>LSession</name> <message> <location filename="../LSession.cpp" line="163"/> - <location filename="../LSession.cpp" line="344"/> + <location filename="../LSession.cpp" line="342"/> <source>Desktop</source> <translation>Skrivbord</translation> </message> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sw.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sw.ts index 6a86d9f6..caeb719a 100644 --- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sw.ts +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sw.ts @@ -38,62 +38,62 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="72"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="73"/> <source>Launch %1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="127"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> <source>Open</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="129"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> <source>Open With</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="132"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> <source>View Properties</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="141"/> <source>File Operations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="143"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="146"/> <source>Copy</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="142"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="149"/> <source>Cut</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="144"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="151"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Select Application</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Name:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="291"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="298"/> <source>New Filename</source> <translation type="unfinished"></translation> </message> @@ -851,7 +851,7 @@ <name>LSession</name> <message> <location filename="../LSession.cpp" line="163"/> - <location filename="../LSession.cpp" line="344"/> + <location filename="../LSession.cpp" line="342"/> <source>Desktop</source> <translation type="unfinished"></translation> </message> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ta.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ta.ts index 6a86d9f6..caeb719a 100644 --- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ta.ts +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ta.ts @@ -38,62 +38,62 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="72"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="73"/> <source>Launch %1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="127"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> <source>Open</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="129"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> <source>Open With</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="132"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> <source>View Properties</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="141"/> <source>File Operations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="143"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="146"/> <source>Copy</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="142"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="149"/> <source>Cut</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="144"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="151"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Select Application</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Name:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="291"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="298"/> <source>New Filename</source> <translation type="unfinished"></translation> </message> @@ -851,7 +851,7 @@ <name>LSession</name> <message> <location filename="../LSession.cpp" line="163"/> - <location filename="../LSession.cpp" line="344"/> + <location filename="../LSession.cpp" line="342"/> <source>Desktop</source> <translation type="unfinished"></translation> </message> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_tg.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_tg.ts index 6a86d9f6..caeb719a 100644 --- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_tg.ts +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_tg.ts @@ -38,62 +38,62 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="72"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="73"/> <source>Launch %1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="127"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> <source>Open</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="129"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> <source>Open With</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="132"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> <source>View Properties</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="141"/> <source>File Operations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="143"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="146"/> <source>Copy</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="142"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="149"/> <source>Cut</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="144"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="151"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Select Application</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Name:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="291"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="298"/> <source>New Filename</source> <translation type="unfinished"></translation> </message> @@ -851,7 +851,7 @@ <name>LSession</name> <message> <location filename="../LSession.cpp" line="163"/> - <location filename="../LSession.cpp" line="344"/> + <location filename="../LSession.cpp" line="342"/> <source>Desktop</source> <translation type="unfinished"></translation> </message> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_th.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_th.ts index 6a86d9f6..caeb719a 100644 --- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_th.ts +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_th.ts @@ -38,62 +38,62 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="72"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="73"/> <source>Launch %1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="127"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> <source>Open</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="129"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> <source>Open With</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="132"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> <source>View Properties</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="141"/> <source>File Operations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="143"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="146"/> <source>Copy</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="142"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="149"/> <source>Cut</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="144"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="151"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Select Application</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Name:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="291"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="298"/> <source>New Filename</source> <translation type="unfinished"></translation> </message> @@ -851,7 +851,7 @@ <name>LSession</name> <message> <location filename="../LSession.cpp" line="163"/> - <location filename="../LSession.cpp" line="344"/> + <location filename="../LSession.cpp" line="342"/> <source>Desktop</source> <translation type="unfinished"></translation> </message> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_tr.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_tr.ts index e04cdaac..02e7e914 100644 --- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_tr.ts +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_tr.ts @@ -38,62 +38,62 @@ <translation>Ayarlamak için Tıkla</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="72"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="73"/> <source>Launch %1</source> <translation type="unfinished">%1 öğesini başlat</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="127"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> <source>Open</source> <translation type="unfinished">Aç</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="129"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> <source>Open With</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="132"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> <source>View Properties</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="141"/> <source>File Operations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="143"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="146"/> <source>Copy</source> <translation type="unfinished">Kopyala</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="142"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="149"/> <source>Cut</source> <translation type="unfinished">Kes</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="144"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="151"/> <source>Delete</source> <translation type="unfinished">Sil</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Select Application</source> <translation>Uygulama Seç</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Name:</source> <translation>Ad:</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="291"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="298"/> <source>New Filename</source> <translation type="unfinished"></translation> </message> @@ -851,7 +851,7 @@ <name>LSession</name> <message> <location filename="../LSession.cpp" line="163"/> - <location filename="../LSession.cpp" line="344"/> + <location filename="../LSession.cpp" line="342"/> <source>Desktop</source> <translation>Masaüstü</translation> </message> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_uk.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_uk.ts index eab60624..eef5d753 100644 --- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_uk.ts +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_uk.ts @@ -38,62 +38,62 @@ <translation>Натисніть щоб встановити</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="72"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="73"/> <source>Launch %1</source> <translation type="unfinished">Запуск %1</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="127"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> <source>Open</source> <translation type="unfinished">Відкрити</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="129"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> <source>Open With</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="132"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> <source>View Properties</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="141"/> <source>File Operations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="143"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="146"/> <source>Copy</source> <translation type="unfinished">Копіювати</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="142"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="149"/> <source>Cut</source> <translation type="unfinished">Вирізати</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="144"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="151"/> <source>Delete</source> <translation type="unfinished">Видалити</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Select Application</source> <translation>Оберіть додаток</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Name:</source> <translation>Ім'я:</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="291"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="298"/> <source>New Filename</source> <translation type="unfinished"></translation> </message> @@ -851,7 +851,7 @@ <name>LSession</name> <message> <location filename="../LSession.cpp" line="163"/> - <location filename="../LSession.cpp" line="344"/> + <location filename="../LSession.cpp" line="342"/> <source>Desktop</source> <translation>Робочий стіл</translation> </message> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_uz.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_uz.ts index 6a86d9f6..caeb719a 100644 --- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_uz.ts +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_uz.ts @@ -38,62 +38,62 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="72"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="73"/> <source>Launch %1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="127"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> <source>Open</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="129"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> <source>Open With</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="132"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> <source>View Properties</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="141"/> <source>File Operations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="143"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="146"/> <source>Copy</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="142"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="149"/> <source>Cut</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="144"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="151"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Select Application</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Name:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="291"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="298"/> <source>New Filename</source> <translation type="unfinished"></translation> </message> @@ -851,7 +851,7 @@ <name>LSession</name> <message> <location filename="../LSession.cpp" line="163"/> - <location filename="../LSession.cpp" line="344"/> + <location filename="../LSession.cpp" line="342"/> <source>Desktop</source> <translation type="unfinished"></translation> </message> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_vi.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_vi.ts index 6a86d9f6..caeb719a 100644 --- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_vi.ts +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_vi.ts @@ -38,62 +38,62 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="72"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="73"/> <source>Launch %1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="127"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> <source>Open</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="129"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> <source>Open With</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="132"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> <source>View Properties</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="141"/> <source>File Operations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="143"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="146"/> <source>Copy</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="142"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="149"/> <source>Cut</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="144"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="151"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Select Application</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Name:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="291"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="298"/> <source>New Filename</source> <translation type="unfinished"></translation> </message> @@ -851,7 +851,7 @@ <name>LSession</name> <message> <location filename="../LSession.cpp" line="163"/> - <location filename="../LSession.cpp" line="344"/> + <location filename="../LSession.cpp" line="342"/> <source>Desktop</source> <translation type="unfinished"></translation> </message> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_zh_CN.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_zh_CN.ts index 818cd2a6..17149435 100644 --- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_zh_CN.ts +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_zh_CN.ts @@ -38,62 +38,62 @@ <translation>单击以设定</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="72"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="73"/> <source>Launch %1</source> <translation>启动 %1</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="127"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> <source>Open</source> <translation>打开</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="129"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> <source>Open With</source> <translation>打开用</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="132"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> <source>View Properties</source> <translation>查看属性</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="141"/> <source>File Operations</source> <translation>文件操作</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="143"/> <source>Rename</source> <translation>重命名</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="146"/> <source>Copy</source> <translation>复制</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="142"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="149"/> <source>Cut</source> <translation>剪切</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="144"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="151"/> <source>Delete</source> <translation>删除</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Select Application</source> <translation>选择程序</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Name:</source> <translation>名称:</translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="291"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="298"/> <source>New Filename</source> <translation>新文件名</translation> </message> @@ -851,7 +851,7 @@ <name>LSession</name> <message> <location filename="../LSession.cpp" line="163"/> - <location filename="../LSession.cpp" line="344"/> + <location filename="../LSession.cpp" line="342"/> <source>Desktop</source> <translation>桌面</translation> </message> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_zh_HK.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_zh_HK.ts index 6a86d9f6..caeb719a 100644 --- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_zh_HK.ts +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_zh_HK.ts @@ -38,62 +38,62 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="72"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="73"/> <source>Launch %1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="127"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> <source>Open</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="129"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> <source>Open With</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="132"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> <source>View Properties</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="141"/> <source>File Operations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="143"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="146"/> <source>Copy</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="142"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="149"/> <source>Cut</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="144"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="151"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Select Application</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Name:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="291"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="298"/> <source>New Filename</source> <translation type="unfinished"></translation> </message> @@ -851,7 +851,7 @@ <name>LSession</name> <message> <location filename="../LSession.cpp" line="163"/> - <location filename="../LSession.cpp" line="344"/> + <location filename="../LSession.cpp" line="342"/> <source>Desktop</source> <translation type="unfinished"></translation> </message> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_zh_TW.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_zh_TW.ts index 6a86d9f6..caeb719a 100644 --- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_zh_TW.ts +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_zh_TW.ts @@ -38,62 +38,62 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="72"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="73"/> <source>Launch %1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="127"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> <source>Open</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="129"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> <source>Open With</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="132"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> <source>View Properties</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="141"/> <source>File Operations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="143"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="146"/> <source>Copy</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="142"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="149"/> <source>Cut</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="144"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="151"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Select Application</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Name:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="291"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="298"/> <source>New Filename</source> <translation type="unfinished"></translation> </message> @@ -851,7 +851,7 @@ <name>LSession</name> <message> <location filename="../LSession.cpp" line="163"/> - <location filename="../LSession.cpp" line="344"/> + <location filename="../LSession.cpp" line="342"/> <source>Desktop</source> <translation type="unfinished"></translation> </message> diff --git a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_zu.ts b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_zu.ts index 6a86d9f6..caeb719a 100644 --- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_zu.ts +++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_zu.ts @@ -38,62 +38,62 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="72"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="73"/> <source>Launch %1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="127"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> <source>Open</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="129"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> <source>Open With</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="132"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> <source>View Properties</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="134"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="141"/> <source>File Operations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="136"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="143"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="139"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="146"/> <source>Copy</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="142"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="149"/> <source>Cut</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="144"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="151"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Select Application</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="205"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="212"/> <source>Name:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="291"/> + <location filename="../desktop-plugins/applauncher/AppLauncherPlugin.cpp" line="298"/> <source>New Filename</source> <translation type="unfinished"></translation> </message> @@ -851,7 +851,7 @@ <name>LSession</name> <message> <location filename="../LSession.cpp" line="163"/> - <location filename="../LSession.cpp" line="344"/> + <location filename="../LSession.cpp" line="342"/> <source>Desktop</source> <translation type="unfinished"></translation> </message> diff --git a/src-qt5/core/lumina-desktop/panel-plugins/systemdashboard/LSysDashboard.cpp b/src-qt5/core/lumina-desktop/panel-plugins/systemdashboard/LSysDashboard.cpp index 267a7cb0..b9d70e97 100644 --- a/src-qt5/core/lumina-desktop/panel-plugins/systemdashboard/LSysDashboard.cpp +++ b/src-qt5/core/lumina-desktop/panel-plugins/systemdashboard/LSysDashboard.cpp @@ -77,7 +77,7 @@ void LSysDashboard::updateIcon(bool force){ } void LSysDashboard::resetIcon(){ - button->setIcon( LXDG::findIcon("dashboard-show","")); + button->setIcon( LXDG::findIcon("arrow-down-drop-circle","")); } void LSysDashboard::openMenu(){ diff --git a/src-qt5/core/lumina-desktop/panel-plugins/systemdashboard/SysMenuQuick.cpp b/src-qt5/core/lumina-desktop/panel-plugins/systemdashboard/SysMenuQuick.cpp index 1d699ea9..e6602dd6 100644 --- a/src-qt5/core/lumina-desktop/panel-plugins/systemdashboard/SysMenuQuick.cpp +++ b/src-qt5/core/lumina-desktop/panel-plugins/systemdashboard/SysMenuQuick.cpp @@ -29,7 +29,7 @@ LSysMenuQuick::LSysMenuQuick(QWidget *parent) : QWidget(parent), ui(new Ui::LSys connect(brighttimer, SIGNAL(timeout()), this, SLOT(setCurrentBrightness()) ); connect(ui->combo_locale, SIGNAL(currentIndexChanged(int)), this, SLOT(changeLocale()) ); //And setup the default icons - ui->label_bright_icon->setPixmap( LXDG::findIcon("preferences-system-power-management","").pixmap(ui->label_bright_icon->maximumSize()) ); + ui->label_bright_icon->setPixmap( LXDG::findIcon("preferences-desktop-brightness","").pixmap(ui->label_bright_icon->maximumSize()) ); ui->tool_wk_prev->setIcon( LXDG::findIcon("go-previous-view","")); ui->tool_wk_next->setIcon( LXDG::findIcon("go-next-view","") ); ui->tool_logout->setIcon( LXDG::findIcon("system-log-out","") ); @@ -208,4 +208,4 @@ void LSysMenuQuick::changeLocale(){ QString locale = ui->combo_locale->currentData().toString(); emit CloseMenu(); LSession::handle()->switchLocale(locale); -}
\ No newline at end of file +} diff --git a/src-qt5/core/lumina-desktop/panel-plugins/systemstart/StartMenu.cpp b/src-qt5/core/lumina-desktop/panel-plugins/systemstart/StartMenu.cpp index 4e6055d6..6557dbee 100644 --- a/src-qt5/core/lumina-desktop/panel-plugins/systemstart/StartMenu.cpp +++ b/src-qt5/core/lumina-desktop/panel-plugins/systemstart/StartMenu.cpp @@ -57,7 +57,7 @@ void StartMenu::UpdateAll(){ ui->tool_launch_deskinfo->setIcon(LXDG::findIcon("system-help","")); ui->tool_launch_mixer->setIcon( LXDG::findIcon("preferences-desktop-sound","") ); - ui->label_bright_icon->setPixmap( LXDG::findIcon("preferences-system-power-management","").pixmap(ui->tool_goto_apps->iconSize()) ); + ui->label_bright_icon->setPixmap( LXDG::findIcon("preferences-desktop-brightness","").pixmap(ui->tool_goto_apps->iconSize()) ); ui->label_locale_icon->setPixmap( LXDG::findIcon("preferences-desktop-locale","").pixmap(ui->tool_goto_apps->iconSize()) ); ui->tool_set_nextwkspace->setIcon(LXDG::findIcon("go-next-view","")); ui->tool_set_prevwkspace->setIcon(LXDG::findIcon("go-previous-view","")); diff --git a/src-qt5/core/lumina-info/i18n/lumina-info_cs.ts b/src-qt5/core/lumina-info/i18n/lumina-info_cs.ts index 8153cee7..923e27a1 100644 --- a/src-qt5/core/lumina-info/i18n/lumina-info_cs.ts +++ b/src-qt5/core/lumina-info/i18n/lumina-info_cs.ts @@ -16,12 +16,12 @@ <message> <location filename="../MainUI.ui" line="89"/> <source>Source Repository</source> - <translation>Zdrojový repozitář</translation> + <translation>Repozitář se zdrojovými kódy</translation> </message> <message> <location filename="../MainUI.ui" line="124"/> <source>Lumina Website</source> - <translation>Stránky Lumina</translation> + <translation>Webové stránky projektu Lumina</translation> </message> <message> <location filename="../MainUI.ui" line="152"/> @@ -36,17 +36,17 @@ <message> <location filename="../MainUI.ui" line="202"/> <source>OS Build:</source> - <translation>Sestavení OS:</translation> + <translation>Sestavení operačního systému:</translation> </message> <message> <location filename="../MainUI.ui" line="218"/> <source>Qt Version:</source> - <translation>Verze Qt:</translation> + <translation>Verze Qt knihoven:</translation> </message> <message> <location filename="../MainUI.ui" line="276"/> <source>Ask the Community</source> - <translation>Zeptat se společenství</translation> + <translation>Zeptat se ostatních</translation> </message> <message> <location filename="../MainUI.ui" line="233"/> @@ -70,8 +70,8 @@ </message> <message> <location filename="../MainUI.ui" line="340"/> - <source><a href="https://github.com/beanpole135">Ken Moore</a></source> - <translation><a href="https://github.com/beanpole135">Ken Moore</a></translation> + <source><a href="https://github.com/beanpole135">Ken Moore</a></source> + <translation><a href="https://github.com/beanpole135">Ken Moore</a></translation> </message> <message> <location filename="../MainUI.ui" line="353"/> @@ -85,8 +85,8 @@ </message> <message> <location filename="../MainUI.ui" line="428"/> - <source><a href="https://github.com/pcbsd/lumina/graphs/contributors">Open in web browser<a></source> - <translation><a href="https://github.com/pcbsd/lumina/graphs/contributors">Otevřít v prohlížeči<a></translation> + <source><a href="https://github.com/pcbsd/lumina/graphs/contributors">Open in web browser<a></source> + <translation><a href="https://github.com/pcbsd/lumina/graphs/contributors">Otevřít v prohlížeči<a></translation> </message> <message> <location filename="../MainUI.ui" line="454"/> 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 a08b5965..6a32e742 100644 --- a/src-qt5/core/lumina-open/i18n/lumina-open_cs.ts +++ b/src-qt5/core/lumina-open/i18n/lumina-open_cs.ts @@ -6,12 +6,12 @@ <message> <location filename="../LFileDialog.ui" line="14"/> <source>Open With...</source> - <translation>Otevřít pomocí...</translation> + <translation>Otevřít pomocí…</translation> </message> <message> <location filename="../LFileDialog.ui" line="68"/> <source>Preferred</source> - <translation>Preferované</translation> + <translation>Upřednostňované</translation> </message> <message> <location filename="../LFileDialog.ui" line="75"/> @@ -26,7 +26,7 @@ <message> <location filename="../LFileDialog.ui" line="131"/> <source>Binary Location</source> - <translation>Místo v binárním kódu</translation> + <translation>Umístění spustitelného souboru</translation> </message> <message> <location filename="../LFileDialog.ui" line="138"/> @@ -46,12 +46,12 @@ <message> <location filename="../LFileDialog.ui" line="235"/> <source>Cancel</source> - <translation>Zrušit</translation> + <translation>Storno</translation> </message> <message> <location filename="../LFileDialog.cpp" line="40"/> <source>(Email Link)</source> - <translation>(Odkaz na e-mail)</translation> + <translation>(Poslat odkaz e-mailem)</translation> </message> <message> <location filename="../LFileDialog.cpp" line="41"/> @@ -121,7 +121,7 @@ <message> <location filename="../LFileDialog.cpp" line="126"/> <source>Utilities</source> - <translation>Pomůcky</translation> + <translation>Nástroje</translation> </message> <message> <location filename="../LFileDialog.cpp" line="127"/> @@ -136,7 +136,7 @@ <message> <location filename="../LFileDialog.cpp" line="278"/> <source>Find Application Binary</source> - <translation>Najít soubor aplikace</translation> + <translation>Najít spustitelný soubor aplikace</translation> </message> </context> <context> @@ -161,27 +161,27 @@ <message> <location filename="../main.cpp" line="246"/> <source>Invalid file or URL: %1</source> - <translation>Neplatný soubor nebo URL: %1</translation> + <translation>Neplatný soubor nebo URL adresa: %1</translation> </message> <message> <location filename="../main.cpp" line="267"/> <source>Application entry is invalid: %1</source> - <translation>Záznam programu je neplatný: %1</translation> + <translation>Záznam pro aplikaci není platný: %1</translation> </message> <message> <location filename="../main.cpp" line="278"/> <source>Application shortcut is missing the launching information (malformed shortcut): %1</source> - <translation>Zástupci aplikace chybí informace o zahájení (chybné zkratky):% 1</translation> + <translation>V zástupci aplikace chybí informace pro spouštění (chybná zkratka):% 1</translation> </message> <message> <location filename="../main.cpp" line="291"/> <source>URL shortcut is missing the URL: %1</source> - <translation>URL zástupci chybí URL: %1</translation> + <translation>V zástupci URL adresy chybí URL: %1</translation> </message> <message> <location filename="../main.cpp" line="302"/> <source>Directory shortcut is missing the path to the directory: %1</source> - <translation>Zástupci složky chybí cesta do adresáře: %1</translation> + <translation>V zástupci složky chybí popis jejího umístění: %1</translation> </message> <message> <location filename="../main.cpp" line="307"/> @@ -195,8 +195,8 @@ </message> <message> <location filename="../main.cpp" line="370"/> - <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 zajistěte, aby bylo nainstalované.</translation> </message> <message> <location filename="../main.cpp" line="421"/> @@ -206,7 +206,7 @@ <message> <location filename="../main.cpp" line="421"/> <source>The following application experienced an error and needed to close:</source> - <translation>Následující aplikace ohlašují chybu a musí být ukončeny:</translation> + <translation>V následující aplikaci došlo k chyba a bude proto ukončena:</translation> </message> </context> </TS> diff --git a/src-qt5/core/lumina-session/session.cpp b/src-qt5/core/lumina-session/session.cpp index 1aa86720..de9b86ee 100644 --- a/src-qt5/core/lumina-session/session.cpp +++ b/src-qt5/core/lumina-session/session.cpp @@ -92,7 +92,7 @@ void LSession::start(bool unified){ 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"; + 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); } diff --git a/src-qt5/core/lumina-theme-engine/LICENSE b/src-qt5/core/lumina-theme-engine/LICENSE new file mode 100644 index 00000000..2179b01c --- /dev/null +++ b/src-qt5/core/lumina-theme-engine/LICENSE @@ -0,0 +1,38 @@ +Copyright for original source of project (prior to commit a852d14 of: +https://github.com/trueos/lumina/tree/master/src-qt5/core/lumina-theme-engine +held by Ilya Kotov <forkotov02@hotmail.ru> https://sourceforge.net/projects/qt5ct/ +under an MIT License. +Original AUTHORS : https://sourceforge.net/p/qt5ct/code/HEAD/tree/trunk/qt5ct/AUTHORS + +All further commits are Copyright of q5sys under MIT License. + + +Original Project Copyright: + + +Copyright (c) 2014-2017, Ilya Kotov <forkotov02@hotmail.ru> +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/src-qt5/core/lumina-theme-engine/README.md b/src-qt5/core/lumina-theme-engine/README.md new file mode 100644 index 00000000..d46797b1 --- /dev/null +++ b/src-qt5/core/lumina-theme-engine/README.md @@ -0,0 +1,14 @@ +## Lumina Theme Engine + +This is a theme engine for the Lumina Desktop + +### Dependencies + +1. Qt 5.4+ + - qtbase >= 5.4.0 + - qtsvg >= 5.4.0 + - qttools >= 5.4.0 + +2. Lumina Desktop + +Environment Variable QT_QPA_PLATFORMTHEME=lthemeengine needs to be set diff --git a/src-qt5/core/lumina-theme-engine/lthemeengine.pri b/src-qt5/core/lumina-theme-engine/lthemeengine.pri new file mode 100644 index 00000000..be67734b --- /dev/null +++ b/src-qt5/core/lumina-theme-engine/lthemeengine.pri @@ -0,0 +1,32 @@ +#Some conf to redirect intermediate stuff in separate dirs +UI_DIR=./.build/ui/ +MOC_DIR=./.build/moc/ +OBJECTS_DIR=./.build/obj +RCC_DIR=./.build/rcc + +QMAKE_DISTCLEAN += -r .build + +CONFIG += c++11 + +!isEqual (QT_MAJOR_VERSION, 5) { + error("Use Qt 5.4.0 or higher.") +} + +!greaterThan(QT_MINOR_VERSION, 3) { + error("Use Qt 5.4.0 or higher.") +} + +#Install paths +unix { + isEmpty(PREFIX) { + PREFIX = /usr + } + isEmpty(PLUGINDIR) { + PLUGINDIR = $$[QT_INSTALL_PLUGINS] + } + + BINDIR = $$PREFIX/bin + DATADIR = $$PREFIX/share + + DEFINES += LTHEMEENGINE_DATADIR=\\\"$$DATADIR\\\" +} diff --git a/src-qt5/core/lumina-theme-engine/lthemeengine.pro b/src-qt5/core/lumina-theme-engine/lthemeengine.pro new file mode 100644 index 00000000..d8ba709e --- /dev/null +++ b/src-qt5/core/lumina-theme-engine/lthemeengine.pro @@ -0,0 +1,57 @@ +QT += core gui +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets x11extras network + +QMAKE_DISTCLEAN += -r .build + +CONFIG += c++11 + +desktop.files=src/lthemeengine/ltheme.desktop +desktop.path=$${L_SHAREDIR}/applications/ + +#Install paths +unix { + isEmpty(PREFIX) { + PREFIX = /usr + } + isEmpty(PLUGINDIR) { + PLUGINDIR = $$[QT_INSTALL_PLUGINS] + } + + BINDIR = $$PREFIX/bin + DATADIR = $$PREFIX/share + + DEFINES += LTHEMEENGINE_DATADIR=\\\"$$DATADIR\\\" +} + +TEMPLATE = subdirs + +SUBDIRS += src/lthemeengine-qtplugin src/lthemeengine-style src/lthemeengine + +unix:exists($$[QT_INSTALL_BINS]/lrelease){ +LRELEASE_EXECUTABLE = $$[QT_INSTALL_BINS]/lrelease +} + +unix:exists($$[QT_INSTALL_BINS]/lrelease-qt5){ +LRELEASE_EXECUTABLE = $$[QT_INSTALL_BINS]/lrelease-qt5 +} + + +isEmpty(LRELEASE_EXECUTABLE){ +error(Could not find lrelease executable) +} +else { +message(Found lrelease executable: $$LRELEASE_EXECUTABLE) +} + +message (PREFIX=$$PREFIX) +message (BINDIR=$$BINDIR) +message (DATADIR=$$DATADIR) +message (PLUGINDIR=$$PLUGINDIR) +equals (DISABLE_WIDGETS,1):message ("QtWidgets are disabled!") + +#Some conf to redirect intermediate stuff in separate dirs +UI_DIR=./.build/ui/ +MOC_DIR=./.build/moc/ +OBJECTS_DIR=./.build/obj +RCC_DIR=./.build/rcc + diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine-qtplugin/lthemeengine-qtplugin.pro b/src-qt5/core/lumina-theme-engine/src/lthemeengine-qtplugin/lthemeengine-qtplugin.pro new file mode 100644 index 00000000..064c7642 --- /dev/null +++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine-qtplugin/lthemeengine-qtplugin.pro @@ -0,0 +1,35 @@ +include(../../lthemeengine.pri) + +TEMPLATE = lib +TARGET = lthemeengine +CONFIG += plugin + +greaterThan(QT_MINOR_VERSION, 7) { + QT += gui-private theme_support-private +} else { + QT += gui-private platformsupport-private +} + +!contains(DEFINES, QT_NO_DBUS):greaterThan(QT_MINOR_VERSION, 5) { + QT += dbus +} + +SOURCES += \ + main.cpp \ + lthemeengineplatformtheme.cpp \ + ../lthemeengine/lthemeengine.cpp + +!equals (DISABLE_WIDGETS,1) { + QT += widgets +} + +OTHER_FILES += lthemeengine.json + +INCLUDEPATH += ../ + +HEADERS += \ + lthemeengineplatformtheme.h \ + ../lthemeengine/lthemeengine.h + +target.path = $$PLUGINDIR/platformthemes +INSTALLS += target diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine-qtplugin/lthemeengine.json b/src-qt5/core/lumina-theme-engine/src/lthemeengine-qtplugin/lthemeengine.json new file mode 100644 index 00000000..433d4a88 --- /dev/null +++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine-qtplugin/lthemeengine.json @@ -0,0 +1,3 @@ +{ + "Keys": [ "lthemeengine" ] +} diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine-qtplugin/lthemeengineplatformtheme.cpp b/src-qt5/core/lumina-theme-engine/src/lthemeengine-qtplugin/lthemeengineplatformtheme.cpp new file mode 100644 index 00000000..02f6a10f --- /dev/null +++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine-qtplugin/lthemeengineplatformtheme.cpp @@ -0,0 +1,366 @@ +/* + * Copyright (c) 2014-2017, Ilya Kotov <forkotov02@hotmail.ru> + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include <QVariant> +#include <QSettings> +#include <QGuiApplication> +#include <QScreen> +#include <QFont> +#include <QPalette> +#include <QTimer> +#include <QIcon> +#include <QRegExp> +#ifdef QT_WIDGETS_LIB +#include <QStyle> +#include <QStyleFactory> +#include <QApplication> +#include <QWidget> +#endif +#include <QFile> +#include <QFileSystemWatcher> + +#include <lthemeengine/lthemeengine.h> +#include "lthemeengineplatformtheme.h" +#if (QT_VERSION >= QT_VERSION_CHECK(5, 7, 0)) && !defined(QT_NO_DBUS) +#include <private/qdbusmenubar_p.h> +#endif +#if !defined(QT_NO_DBUS) && !defined(QT_NO_SYSTEMTRAYICON) +#include <QDBusArgument> +#include <private/qdbustrayicon_p.h> +#endif + + + +Q_LOGGING_CATEGORY(llthemeengine, "lthemeengine") + +//QT_QPA_PLATFORMTHEME=lthemeengine + +lthemeenginePlatformTheme::lthemeenginePlatformTheme() +{ + if(QGuiApplication::desktopSettingsAware()) + { + readSettings(); + QMetaObject::invokeMethod(this, "applySettings", Qt::QueuedConnection); +#ifdef QT_WIDGETS_LIB + QMetaObject::invokeMethod(this, "createFSWatcher", Qt::QueuedConnection); +#endif + QGuiApplication::setFont(m_generalFont); + } + qCDebug(llthemeengine) << "using lthemeengine plugin"; +#ifdef QT_WIDGETS_LIB + if(!QStyleFactory::keys().contains("lthemeengine-style")) + qCCritical(llthemeengine) << "unable to find lthemeengine proxy style"; +#endif +} + +lthemeenginePlatformTheme::~lthemeenginePlatformTheme() +{ + if(m_customPalette) + delete m_customPalette; +} + +#if (QT_VERSION >= QT_VERSION_CHECK(5, 7, 0)) && !defined(QT_NO_DBUS) +QPlatformMenuBar *lthemeenginePlatformTheme::createPlatformMenuBar() const +{ + if(m_checkDBusGlobalMenu) + { + QDBusConnection conn = QDBusConnection::sessionBus(); + m_dbusGlobalMenuAvailable = conn.interface()->isServiceRegistered("com.canonical.AppMenu.Registrar"); + qCDebug(llthemeengine) << "D-Bus global menu:" << (m_dbusGlobalMenuAvailable ? "yes" : "no"); + } + return (m_dbusGlobalMenuAvailable ? new QDBusMenuBar() : nullptr); +} +#endif + +#if !defined(QT_NO_DBUS) && !defined(QT_NO_SYSTEMTRAYICON) +QPlatformSystemTrayIcon *lthemeenginePlatformTheme::createPlatformSystemTrayIcon() const +{ + if(m_checkDBusTray) + { + QDBusMenuConnection conn; + m_dbusTrayAvailable = conn.isStatusNotifierHostRegistered(); + m_checkDBusTray = false; + qCDebug(llthemeengine) << "D-Bus system tray:" << (m_dbusTrayAvailable ? "yes" : "no"); + } + return (m_dbusTrayAvailable ? new QDBusTrayIcon() : nullptr); +} +#endif + +const QPalette *lthemeenginePlatformTheme::palette(QPlatformTheme::Palette type) const +{ + Q_UNUSED(type); + return (m_usePalette ? m_customPalette : nullptr); +} + +const QFont *lthemeenginePlatformTheme::font(QPlatformTheme::Font type) const +{ + if(type == QPlatformTheme::FixedFont) + return &m_fixedFont; + return &m_generalFont; +} + +QVariant lthemeenginePlatformTheme::themeHint(QPlatformTheme::ThemeHint hint) const +{ + switch (hint) + { + case QPlatformTheme::CursorFlashTime: + return m_cursorFlashTime; + case MouseDoubleClickInterval: + return m_doubleClickInterval; + case QPlatformTheme::ToolButtonStyle: + return m_toolButtonStyle; + case QPlatformTheme::SystemIconThemeName: + return m_iconTheme; + case QPlatformTheme::StyleNames: + return QStringList() << "lthemeengine-style"; + case QPlatformTheme::IconThemeSearchPaths: + return lthemeengine::iconPaths(); + case DialogButtonBoxLayout: + return m_buttonBoxLayout; + case QPlatformTheme::UiEffects: + return m_uiEffects; +#if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)) + case QPlatformTheme::WheelScrollLines: + return m_wheelScrollLines; +#endif + default: + return QPlatformTheme::themeHint(hint); + } +} + +void lthemeenginePlatformTheme::applySettings() +{ + if(!QGuiApplication::desktopSettingsAware()) + return; + +#if (QT_VERSION >= QT_VERSION_CHECK(5, 5, 0)) + if(!m_update) + { + //do not override application palette + if(QCoreApplication::testAttribute(Qt::AA_SetPalette)) + { + m_usePalette = false; + qCDebug(llthemeengine) << "palette support is disabled"; + } + } +#endif + +#ifdef QT_WIDGETS_LIB + if(hasWidgets()) + { + qApp->setFont(m_generalFont); + + //Qt 5.6 or higher should be use themeHint function on application startup. + //So, there is no need to call this function first time. +#if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)) + if(m_update) + qApp->setWheelScrollLines(m_wheelScrollLines); +#else + qApp->setWheelScrollLines(m_wheelScrollLines); +#endif + + if(m_update && qApp->style()->objectName() == "lthemeengine-style") //ignore application style + qApp->setStyle("lthemeengine-style"); //recreate style object + + if(m_update && m_usePalette) + { + if(m_customPalette) + qApp->setPalette(*m_customPalette); + else + qApp->setPalette(qApp->style()->standardPalette()); + } + + //do not override application style + if(m_prevStyleSheet == qApp->styleSheet()) + qApp->setStyleSheet(m_userStyleSheet); + else + qCDebug(llthemeengine) << "custom style sheet is disabled"; + m_prevStyleSheet = m_userStyleSheet; + } +#endif + QGuiApplication::setFont(m_generalFont); //apply font + QIcon::setThemeName(m_iconTheme); //apply icons + if(m_customPalette && m_usePalette) + QGuiApplication::setPalette(*m_customPalette); //apply palette + +#ifdef QT_WIDGETS_LIB + if(hasWidgets()) + { + foreach (QWidget *w, qApp->allWidgets()) + { + QEvent e(QEvent::ThemeChange); + QApplication::sendEvent(w, &e); + } + } +#endif + + if(!m_update) + m_update = true; +} + +#ifdef QT_WIDGETS_LIB +void lthemeenginePlatformTheme::createFSWatcher() +{ + QFileSystemWatcher *watcher = new QFileSystemWatcher(this); + watcher->addPath(lthemeengine::configPath()); + + QTimer *timer = new QTimer(this); + timer->setSingleShot(true); + timer->setInterval(3000); + connect(watcher, SIGNAL(directoryChanged(QString)), timer, SLOT(start())); + connect(timer, SIGNAL(timeout()), SLOT(updateSettings())); +} + +void lthemeenginePlatformTheme::updateSettings() +{ + qCDebug(llthemeengine) << "updating settings.."; + readSettings(); + applySettings(); +} +#endif + +void lthemeenginePlatformTheme::readSettings() +{ + if(m_customPalette) + { + delete m_customPalette; + m_customPalette = 0; + } + + QSettings settings(lthemeengine::configFile(), QSettings::IniFormat); + + settings.beginGroup("Appearance"); + m_style = settings.value("style", "Fusion").toString(); + if(settings.value("custom_palette", false).toBool()) + { + QString schemePath = settings.value("color_scheme_path").toString(); + m_customPalette = new QPalette(loadColorScheme(schemePath)); + } + m_iconTheme = settings.value("icon_theme").toString(); + settings.endGroup(); + + settings.beginGroup("Fonts"); + m_generalFont = settings.value("general", QPlatformTheme::font(QPlatformTheme::SystemFont)).value<QFont>(); + m_fixedFont = settings.value("fixed", QPlatformTheme::font(QPlatformTheme::FixedFont)).value<QFont>(); + settings.endGroup(); + + settings.beginGroup("Interface"); + m_doubleClickInterval = QPlatformTheme::themeHint(QPlatformTheme::MouseDoubleClickInterval).toInt(); + m_doubleClickInterval = settings.value("double_click_interval", m_doubleClickInterval).toInt(); + m_cursorFlashTime = QPlatformTheme::themeHint(QPlatformTheme::CursorFlashTime).toInt(); + m_cursorFlashTime = settings.value("cursor_flash_time", m_cursorFlashTime).toInt(); + m_buttonBoxLayout = QPlatformTheme::themeHint(QPlatformTheme::DialogButtonBoxLayout).toInt(); + m_buttonBoxLayout = settings.value("buttonbox_layout", m_buttonBoxLayout).toInt(); + QCoreApplication::setAttribute(Qt::AA_DontShowIconsInMenus, !settings.value("menus_have_icons", true).toBool()); + m_toolButtonStyle = settings.value("toolbutton_style", Qt::ToolButtonFollowStyle).toInt(); + m_wheelScrollLines = settings.value("wheel_scroll_lines", 3).toInt(); + + //load effects + m_uiEffects = QPlatformTheme::themeHint(QPlatformTheme::UiEffects).toInt(); + if(settings.childKeys().contains("gui_effects")) + { + QStringList effectList = settings.value("gui_effects").toStringList(); + m_uiEffects = 0; + if(effectList.contains("General")) + m_uiEffects |= QPlatformTheme::GeneralUiEffect; + if(effectList.contains("AnimateMenu")) + m_uiEffects |= QPlatformTheme::AnimateMenuUiEffect; + if(effectList.contains("FadeMenu")) + m_uiEffects |= QPlatformTheme::FadeMenuUiEffect; + if(effectList.contains("AnimateCombo")) + m_uiEffects |= QPlatformTheme::AnimateComboUiEffect; + if(effectList.contains("AnimateTooltip")) + m_uiEffects |= QPlatformTheme::AnimateTooltipUiEffect; + if(effectList.contains("FadeTooltip")) + m_uiEffects |= QPlatformTheme::FadeTooltipUiEffect; + if(effectList.contains("AnimateToolBox")) + m_uiEffects |= QPlatformTheme::AnimateToolBoxUiEffect; + } + + //load style sheets +#ifdef QT_WIDGETS_LIB + QStringList qssPaths = settings.value("stylesheets").toStringList(); + m_userStyleSheet = loadStyleSheets(qssPaths); +#endif + settings.endGroup(); +} + +#ifdef QT_WIDGETS_LIB +bool lthemeenginePlatformTheme::hasWidgets() +{ + return qobject_cast<QApplication *> (qApp) != nullptr; +} +#endif + +QString lthemeenginePlatformTheme::loadStyleSheets(const QStringList &paths) +{ + QString content; + foreach (QString path, paths) + { + if(!QFile::exists(path)) + continue; + + QFile file(path); + file.open(QIODevice::ReadOnly); + content.append(file.readAll()); + } + QRegExp regExp("//.*(\\n|$)"); + regExp.setMinimal(true); + content.remove(regExp); + return content; +} + +QPalette lthemeenginePlatformTheme::loadColorScheme(const QString &filePath) +{ + QPalette customPalette; + QSettings settings(filePath, QSettings::IniFormat); + settings.beginGroup("ColorScheme"); + QStringList activeColors = settings.value("active_colors").toStringList(); + QStringList inactiveColors = settings.value("inactive_colors").toStringList(); + QStringList disabledColors = settings.value("disabled_colors").toStringList(); + settings.endGroup(); + + if(activeColors.count() == QPalette::NColorRoles && + inactiveColors.count() == QPalette::NColorRoles && + disabledColors.count() == QPalette::NColorRoles) + { + for (int i = 0; i < QPalette::NColorRoles; i++) + { + QPalette::ColorRole role = QPalette::ColorRole(i); + customPalette.setColor(QPalette::Active, role, QColor(activeColors.at(i))); + customPalette.setColor(QPalette::Inactive, role, QColor(inactiveColors.at(i))); + customPalette.setColor(QPalette::Disabled, role, QColor(disabledColors.at(i))); + } + } + else + { + customPalette = *QPlatformTheme::palette(SystemPalette); //load fallback palette + } + + return customPalette; +} diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine-qtplugin/lthemeengineplatformtheme.h b/src-qt5/core/lumina-theme-engine/src/lthemeengine-qtplugin/lthemeengineplatformtheme.h new file mode 100644 index 00000000..3996b451 --- /dev/null +++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine-qtplugin/lthemeengineplatformtheme.h @@ -0,0 +1,122 @@ +/* + * Copyright (c) 2014-2017, Ilya Kotov <forkotov02@hotmail.ru> + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef LTHEMEENGINEPLATFORMTHEME_H +#define LTHEMEENGINEPLATFORMTHEME_H + +#include <qpa/qplatformtheme.h> +#include <QObject> +#include <QFont> +#include <QPalette> +#include <QLoggingCategory> + +#if (QT_VERSION < QT_VERSION_CHECK(5, 5, 0)) +#ifndef QT_NO_SYSTEMTRAYICON +#define QT_NO_SYSTEMTRAYICON +#endif +#endif + +class QPalette; +#if !defined(QT_NO_DBUS) && !defined(QT_NO_SYSTEMTRAYICON) +class QPlatformSystemTrayIcon; +#endif + +#if (QT_VERSION >= QT_VERSION_CHECK(5, 7, 0)) && !defined(QT_NO_DBUS) +class QPlatformMenuBar; +#endif + +class lthemeenginePlatformTheme : public QObject, public QPlatformTheme +{ + Q_OBJECT +public: + lthemeenginePlatformTheme(); + + virtual ~lthemeenginePlatformTheme(); + + + //virtual QPlatformMenuItem* createPlatformMenuItem() const; + //virtual QPlatformMenu* createPlatformMenu() const; +#if (QT_VERSION >= QT_VERSION_CHECK(5, 7, 0)) && !defined(QT_NO_DBUS) + virtual QPlatformMenuBar* createPlatformMenuBar() const; +#endif + //virtual void showPlatformMenuBar() {} + //virtual bool usePlatformNativeDialog(DialogType type) const; + //virtual QPlatformDialogHelper *createPlatformDialogHelper(DialogType type) const; +#if !defined(QT_NO_DBUS) && !defined(QT_NO_SYSTEMTRAYICON) + virtual QPlatformSystemTrayIcon *createPlatformSystemTrayIcon() const; +#endif + virtual const QPalette *palette(Palette type = SystemPalette) const; + virtual const QFont *font(Font type = SystemFont) const; + virtual QVariant themeHint(ThemeHint hint) const; + //virtual QPixmap standardPixmap(StandardPixmap sp, const QSizeF &size) const; + //virtual QPixmap fileIconPixmap(const QFileInfo &fileInfo, const QSizeF &size, + // QPlatformTheme::IconOptions iconOptions = 0) const; + + //virtual QIconEngine *createIconEngine(const QString &iconName) const; + //virtual QList<QKeySequence> keyBindings(QKeySequence::StandardKey key) const; + //virtual QString standardButtonText(int button) const; + +private slots: + void applySettings(); +#ifdef QT_WIDGETS_LIB + void createFSWatcher(); + void updateSettings(); +#endif + +private: + void readSettings(); +#ifdef QT_WIDGETS_LIB + bool hasWidgets(); +#endif + QString loadStyleSheets(const QStringList &paths); + QPalette loadColorScheme(const QString &filePath); + QString m_style, m_iconTheme, m_userStyleSheet, m_prevStyleSheet; + QPalette *m_customPalette = nullptr; + QFont m_generalFont, m_fixedFont; + int m_doubleClickInterval; + int m_cursorFlashTime; + int m_uiEffects; + int m_buttonBoxLayout; + bool m_update = false; + bool m_usePalette = true; + int m_toolButtonStyle = Qt::ToolButtonFollowStyle; + int m_wheelScrollLines = 3; +#if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)) && !defined(QT_NO_DBUS) + mutable bool m_dbusGlobalMenuAvailable = false; + mutable bool m_checkDBusGlobalMenu = true; +#endif +#if !defined(QT_NO_DBUS) && !defined(QT_NO_SYSTEMTRAYICON) + mutable bool m_dbusTrayAvailable = false; + mutable bool m_checkDBusTray = true; +#endif + +}; + +Q_DECLARE_LOGGING_CATEGORY(llthemeengine) + +#endif // LTHEMEENGINEPLATFORMTHEME_H diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine-qtplugin/main.cpp b/src-qt5/core/lumina-theme-engine/src/lthemeengine-qtplugin/main.cpp new file mode 100644 index 00000000..37798f70 --- /dev/null +++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine-qtplugin/main.cpp @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2014-2017, Ilya Kotov <forkotov02@hotmail.ru> + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include <qpa/qplatformthemeplugin.h> +#include "lthemeengineplatformtheme.h" + +QT_BEGIN_NAMESPACE + +class lthemeenginePlatformThemePlugin: public QPlatformThemePlugin +{ + Q_OBJECT + Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QPA.QPlatformThemeFactoryInterface.5.1" FILE "lthemeengine.json") +public: + QPlatformTheme *create(const QString &key, const QStringList ¶ms); +}; + +QPlatformTheme *lthemeenginePlatformThemePlugin::create(const QString &key, const QStringList ¶ms) +{ + Q_UNUSED(params); + if (key.toLower() == "lthemeengine") + return new lthemeenginePlatformTheme(); + return NULL; +} + +QT_END_NAMESPACE + +#include "main.moc" diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine-style/lthemeengine-style.pro b/src-qt5/core/lumina-theme-engine/src/lthemeengine-style/lthemeengine-style.pro new file mode 100644 index 00000000..0b40de64 --- /dev/null +++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine-style/lthemeengine-style.pro @@ -0,0 +1,26 @@ +include(../../lthemeengine.pri) + +TEMPLATE = lib +TARGET = lthemeengine-style +QT += widgets + +# Input + +CONFIG += plugin + +target.path = $$PLUGINDIR/styles +INSTALLS += target + +INCLUDEPATH += ../ + +HEADERS += \ + lthemeengineproxystyle.h \ + ../lthemeengine/lthemeengine.h + +SOURCES += \ + plugin.cpp \ + lthemeengineproxystyle.cpp \ + ../lthemeengine/lthemeengine.cpp + +OTHER_FILES += \ + lthemeengine.json diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine-style/lthemeengine.json b/src-qt5/core/lumina-theme-engine/src/lthemeengine-style/lthemeengine.json new file mode 100644 index 00000000..e8aae055 --- /dev/null +++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine-style/lthemeengine.json @@ -0,0 +1,3 @@ +{ + "Keys": [ "lthemeengine-style" ] +} diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine-style/lthemeengineproxystyle.cpp b/src-qt5/core/lumina-theme-engine/src/lthemeengine-style/lthemeengineproxystyle.cpp new file mode 100644 index 00000000..c9833a30 --- /dev/null +++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine-style/lthemeengineproxystyle.cpp @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2014-2017, Ilya Kotov <forkotov02@hotmail.ru> + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include <QSettings> +#include <lthemeengine/lthemeengine.h> +#include "lthemeengineproxystyle.h" + +lthemeengineProxyStyle::lthemeengineProxyStyle(const QString &key) : + QProxyStyle(key) +{ + QSettings settings(lthemeengine::configFile(), QSettings::IniFormat); + m_dialogButtonsHaveIcons = settings.value("Interface/dialog_buttons_have_icons", Qt::PartiallyChecked).toInt(); + m_activateItemOnSingleClick = settings.value("Interface/activate_item_on_single_click", Qt::PartiallyChecked).toInt(); +} + +lthemeengineProxyStyle::~lthemeengineProxyStyle() +{ + //qDebug("%s", Q_FUNC_INFO); +} + +int lthemeengineProxyStyle::styleHint(QStyle::StyleHint hint, const QStyleOption *option, const QWidget *widget, QStyleHintReturn *returnData) const +{ + if(hint == QStyle::SH_DialogButtonBox_ButtonsHaveIcons) + { + if(m_dialogButtonsHaveIcons == Qt::Unchecked) + return 0; + else if(m_dialogButtonsHaveIcons == Qt::Checked) + return 1; + } + else if(hint == QStyle::QStyle::SH_ItemView_ActivateItemOnSingleClick) + { + if(m_activateItemOnSingleClick == Qt::Unchecked) + return 0; + else if(m_activateItemOnSingleClick == Qt::Checked) + return 1; + } + return QProxyStyle::styleHint(hint, option, widget, returnData); +} diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine-style/lthemeengineproxystyle.h b/src-qt5/core/lumina-theme-engine/src/lthemeengine-style/lthemeengineproxystyle.h new file mode 100644 index 00000000..47a18099 --- /dev/null +++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine-style/lthemeengineproxystyle.h @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2014-2017, Ilya Kotov <forkotov02@hotmail.ru> + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef LTHEMEENGINEPROXYSTYLE_H +#define LTHEMEENGINEPROXYSTYLE_H + +#include <QProxyStyle> + +class lthemeengineProxyStyle : public QProxyStyle +{ + Q_OBJECT +public: + explicit lthemeengineProxyStyle(const QString &key); + + virtual ~lthemeengineProxyStyle(); + + int styleHint(StyleHint hint, const QStyleOption *option, const QWidget *widget, QStyleHintReturn *returnData) const; + +private: + int m_dialogButtonsHaveIcons; + int m_activateItemOnSingleClick; + +}; + +#endif // LTHEMEENGINEPROXYSTYLE_H diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine-style/plugin.cpp b/src-qt5/core/lumina-theme-engine/src/lthemeengine-style/plugin.cpp new file mode 100644 index 00000000..9d63093e --- /dev/null +++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine-style/plugin.cpp @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2014-2017, Ilya Kotov <forkotov02@hotmail.ru> + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include <QStylePlugin> +#include <QSettings> +#include <QStyleFactory> +#include <lthemeengine/lthemeengine.h> +#include "lthemeengineproxystyle.h" + +class lthemeengineStylePlugin : public QStylePlugin +{ + Q_OBJECT + Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QStyleFactoryInterface" FILE "lthemeengine.json") + +public: + QStyle *create(const QString &key); +}; + +QStyle *lthemeengineStylePlugin::create(const QString &key) +{ + if (key == "lthemeengine-style") + { + QSettings settings(lthemeengine::configFile(), QSettings::IniFormat); + QString style = settings.value("Appearance/style", "Fusion").toString(); + if(key == style || !QStyleFactory::keys().contains(style)) + style = "Fusion"; + return new lthemeengineProxyStyle(style); + } + return 0; +} + +#include "plugin.moc" diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine/appearancepage.cpp b/src-qt5/core/lumina-theme-engine/src/lthemeengine/appearancepage.cpp new file mode 100644 index 00000000..b9175d6e --- /dev/null +++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine/appearancepage.cpp @@ -0,0 +1,418 @@ +/* + * Copyright (c) 2014-2017, Ilya Kotov <forkotov02@hotmail.ru> + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include <QStyleFactory> +#include <QMdiSubWindow> +#include <QSettings> +#include <QDir> +#include <QInputDialog> +#include <QMessageBox> +#include <QMenu> +#include <QIcon> +#include "lthemeengine.h" +#include "appearancepage.h" +#include "paletteeditdialog.h" +#include "ui_appearancepage.h" +#include "ui_previewform.h" + +AppearancePage::AppearancePage(QWidget *parent) : + TabPage(parent), + m_ui(new Ui::AppearancePage) +{ + m_ui->setupUi(this); + QStringList keys = QStyleFactory::keys(); + keys.removeAll("lthemeengine-style"); //hide lthemeengine proxy style + m_ui->styleComboBox->addItems(keys); + + connect(m_ui->paletteComboBox, SIGNAL(activated(int)), SLOT(updatePalette())); + connect(m_ui->customPaletteButton, SIGNAL(clicked()), SLOT(updatePalette())); + connect(m_ui->defaultPaletteButton, SIGNAL(clicked()), SLOT(updatePalette())); + + m_previewWidget = new QWidget(this); + m_previewUi = new Ui::PreviewForm(); + m_previewUi->setupUi(m_previewWidget); + QMdiSubWindow *w = m_ui->mdiArea->addSubWindow(m_previewWidget, Qt::CustomizeWindowHint + | Qt::WindowMinMaxButtonsHint + | Qt::WindowTitleHint); + w->move(10, 10); + + QMenu *menu = new QMenu(this); + menu->addAction(QIcon::fromTheme("list-add"), tr("Create"), this, SLOT(createColorScheme())); + m_changeColorSchemeAction = menu->addAction(tr("Edit"), this, SLOT(changeColorScheme())); + menu->addAction(tr("Create a Copy"), this, SLOT(copyColorScheme())); + m_renameColorSchemeAction = menu->addAction(tr("Rename"), this, SLOT(renameColorScheme())); + menu->addSeparator(); + m_removeColorSchemeAction = menu->addAction(tr("Remove"), this, SLOT(removeColorScheme())); + m_ui->colorSchemeButton->setMenu(menu); + + m_changeColorSchemeAction->setIcon(QIcon::fromTheme("accessories-text-editor")); + m_removeColorSchemeAction->setIcon(QIcon::fromTheme("list-remove")); + connect(menu, SIGNAL(aboutToShow()), SLOT(updateActions())); + + readSettings(); +} + +AppearancePage::~AppearancePage() +{ + if(m_selectedStyle) + delete m_selectedStyle; + delete m_ui; + delete m_previewUi; +} + +void AppearancePage::writeSettings() +{ + QSettings settings(lthemeengine::configFile(), QSettings::IniFormat); + settings.beginGroup("Appearance"); + settings.setValue("style", m_ui->styleComboBox->currentText()); + settings.setValue("custom_palette", m_ui->customPaletteButton->isChecked()); + settings.setValue("color_scheme_path", m_ui->colorSchemeComboBox->currentData().toString()); + settings.endGroup(); +} + +void AppearancePage::on_styleComboBox_activated(const QString &text) +{ + QStyle *style = QStyleFactory::create(text); + if(!style) + return; + setStyle(m_previewWidget, style); + + if(m_selectedStyle) + delete m_selectedStyle; + m_selectedStyle = style; + + updatePalette(); +} + +void AppearancePage::on_colorSchemeComboBox_activated(int) +{ + m_customPalette = loadColorScheme(m_ui->colorSchemeComboBox->currentData().toString()); + updatePalette(); +} + +void AppearancePage::createColorScheme() +{ + QString name = QInputDialog::getText(this, tr("Enter Color Scheme Name"), tr("File name:")); + if(name.isEmpty()) + return; + + if(!name.endsWith(".conf", Qt::CaseInsensitive)) + name.append(".conf"); + + if(m_ui->colorSchemeComboBox->findText(name.section('.',0,0)) != -1) + { + QMessageBox::warning(this, tr("Error"), tr("The color scheme \"%1\" already exists") + .arg(name.section('.',0,0))); + return; + } + + QString schemePath = lthemeengine::userColorSchemePath() + "/" + name; + + createColorScheme(schemePath, palette()); + m_ui->colorSchemeComboBox->addItem(name.section('.',0,0), schemePath); +} + +void AppearancePage::changeColorScheme() +{ + if(m_ui->colorSchemeComboBox->currentIndex() < 0) + return; + + if(!QFileInfo(m_ui->colorSchemeComboBox->currentData().toString()).isWritable()) + { + QMessageBox::information(this, tr("Warning"), tr("The color scheme \"%1\" is read only") + .arg(m_ui->colorSchemeComboBox->currentText())); + return; + } + + PaletteEditDialog d(m_customPalette, m_selectedStyle, this); + connect(&d, SIGNAL(paletteChanged(QPalette)), SLOT(setPreviewPalette(QPalette))); + if(d.exec() == QDialog::Accepted) + { + m_customPalette = d.selectedPalette(); + createColorScheme(m_ui->colorSchemeComboBox->currentData().toString(), m_customPalette); + } + updatePalette(); +} + +void AppearancePage::removeColorScheme() +{ + int index = m_ui->colorSchemeComboBox->currentIndex(); + if(index < 0 || m_ui->colorSchemeComboBox->count() <= 1) + return; + + if(!QFileInfo(m_ui->colorSchemeComboBox->currentData().toString()).isWritable()) + { + QMessageBox::information(this, tr("Warning"), tr("The color scheme \"%1\" is read only") + .arg(m_ui->colorSchemeComboBox->currentText())); + return; + } + + int button = QMessageBox::question(this, tr("Confirm Remove"), + tr("Are you sure you want to remove color scheme \"%1\"?") + .arg(m_ui->colorSchemeComboBox->currentText()), + QMessageBox::Yes | QMessageBox::No); + if(button != QMessageBox::Yes) + return; + + if(QFile::remove(m_ui->colorSchemeComboBox->currentData().toString())) + { + m_ui->colorSchemeComboBox->removeItem(index); + on_colorSchemeComboBox_activated(0); + } +} + +void AppearancePage::copyColorScheme() +{ + if(m_ui->colorSchemeComboBox->currentIndex() < 0) + return; + + QString name = QInputDialog::getText(this, tr("Enter Color Scheme Name"), tr("File name:"), + QLineEdit::Normal, + tr("%1 (copy)").arg(m_ui->colorSchemeComboBox->currentText())); + if(name.isEmpty() || name == m_ui->colorSchemeComboBox->currentText()) + return; + + if(!name.endsWith(".conf", Qt::CaseInsensitive)) + name.append(".conf"); + + if(m_ui->colorSchemeComboBox->findText(name.section('.',0,0)) != -1) + { + QMessageBox::warning(this, tr("Error"), tr("The color scheme \"%1\" already exists") + .arg(name.section('.',0,0))); + return; + } + + QString newPath = lthemeengine::userColorSchemePath() + "/" + name; + QFile::copy(m_ui->colorSchemeComboBox->currentData().toString(), newPath); + m_ui->colorSchemeComboBox->addItem(name.section('.',0,0), newPath); +} + +void AppearancePage::renameColorScheme() +{ + int index = m_ui->colorSchemeComboBox->currentIndex(); + + if(index < 0) + return; + + if(!QFileInfo(m_ui->colorSchemeComboBox->currentData().toString()).isWritable()) + { + QMessageBox::information(this, tr("Warning"), tr("The color scheme \"%1\" is read only") + .arg(m_ui->colorSchemeComboBox->currentText())); + return; + } + + QString name = QInputDialog::getText(this, tr("Enter Color Scheme Name"), tr("File name:"), + QLineEdit::Normal, m_ui->colorSchemeComboBox->currentText()); + if(name.isEmpty() || name == m_ui->colorSchemeComboBox->currentText()) + return; + + if(!name.endsWith(".conf", Qt::CaseInsensitive)) + name.append(".conf"); + + if(m_ui->colorSchemeComboBox->findText(name.section('.',0,0)) != -1) + { + QMessageBox::warning(this, tr("Error"), tr("The color scheme \"%1\" already exists") + .arg(name.section('.',0,0))); + return; + } + + QString newPath = lthemeengine::userColorSchemePath() + "/" + name; + QFile::rename(m_ui->colorSchemeComboBox->currentData().toString(), newPath); + m_ui->colorSchemeComboBox->setItemText(index, name.section('.',0,0)); + m_ui->colorSchemeComboBox->setItemData(index, newPath); +} + +void AppearancePage::updatePalette() +{ + if(!m_selectedStyle) + return; + + setPreviewPalette(m_ui->customPaletteButton->isChecked() ? + m_customPalette : m_selectedStyle->standardPalette()); +} + +void AppearancePage::setPreviewPalette(const QPalette &p) +{ + QPalette previewPalette = palette(); + + QPalette::ColorGroup colorGroup = QPalette::Disabled; + + if(m_ui->paletteComboBox->currentIndex() == 0) + { + colorGroup = QPalette::Active; + } + else if(m_ui->paletteComboBox->currentIndex() == 1) + { + colorGroup = QPalette::Inactive; + } + + for (int i = 0; i < QPalette::NColorRoles; i++) + { + QPalette::ColorRole role = QPalette::ColorRole(i); + previewPalette.setColor(QPalette::Active, role, p.color(colorGroup, role)); + previewPalette.setColor(QPalette::Inactive, role, p.color(colorGroup, role)); + } + + setPalette(m_ui->mdiArea, previewPalette); +} + +void AppearancePage::updateActions() +{ + if(m_ui->colorSchemeComboBox->count() == 0 || + !QFileInfo(m_ui->colorSchemeComboBox->currentData().toString()).isWritable()) + { + m_changeColorSchemeAction->setVisible(false); + m_renameColorSchemeAction->setVisible(false); + m_removeColorSchemeAction->setVisible(false); + } + else + { + m_changeColorSchemeAction->setVisible(true); + m_renameColorSchemeAction->setVisible(true); + m_removeColorSchemeAction->setVisible(m_ui->colorSchemeComboBox->count() > 1); + } +} + +void AppearancePage::readSettings() +{ + QSettings settings(lthemeengine::configFile(), QSettings::IniFormat); + settings.beginGroup("Appearance"); + QString style = settings.value("style", "Fusion").toString(); + m_ui->styleComboBox->setCurrentText(style); + + m_ui->customPaletteButton->setChecked(settings.value("custom_palette", false).toBool()); + QString colorSchemePath = settings.value("color_scheme_path").toString(); + + QDir("/").mkpath(lthemeengine::userColorSchemePath()); + findColorSchemes(lthemeengine::userColorSchemePath()); + findColorSchemes(lthemeengine::sharedColorSchemePath().join(", ")); + + if(m_ui->colorSchemeComboBox->count() == 0) + { + m_customPalette = palette(); //load fallback palette + } + else + { + int index = m_ui->colorSchemeComboBox->findData(colorSchemePath); + if(index >= 0) + m_ui->colorSchemeComboBox->setCurrentIndex(index); + m_customPalette = loadColorScheme(m_ui->colorSchemeComboBox->currentData().toString()); + } + + on_styleComboBox_activated(m_ui->styleComboBox->currentText()); + + settings.endGroup(); +} + +void AppearancePage::setStyle(QWidget *w, QStyle *s) +{ + foreach (QObject *o, w->children()) + { + if(o->isWidgetType()) + { + setStyle(qobject_cast<QWidget *>(o), s); + } + } + w->setStyle(s); +} + +void AppearancePage::setPalette(QWidget *w, QPalette p) +{ + foreach (QObject *o, w->children()) + { + if(o->isWidgetType()) + { + setPalette(qobject_cast<QWidget *>(o), p); + } + } + w->setPalette(p); +} + +void AppearancePage::findColorSchemes(const QString &path) +{ + QDir dir(path); + dir.setFilter(QDir::Files); + dir.setNameFilters(QStringList() << "*.conf"); + + foreach (QFileInfo info, dir.entryInfoList()) + { + m_ui->colorSchemeComboBox->addItem(info.baseName(), info.filePath()); + } +} + +QPalette AppearancePage::loadColorScheme(const QString &filePath) +{ + QPalette customPalette; + QSettings settings(filePath, QSettings::IniFormat); + settings.beginGroup("ColorScheme"); + QStringList activeColors = settings.value("active_colors").toStringList(); + QStringList inactiveColors = settings.value("inactive_colors").toStringList(); + QStringList disabledColors = settings.value("disabled_colors").toStringList(); + settings.endGroup(); + + if(activeColors.count() == QPalette::NColorRoles && + inactiveColors.count() == QPalette::NColorRoles && + disabledColors.count() == QPalette::NColorRoles) + { + for (int i = 0; i < QPalette::NColorRoles; i++) + { + QPalette::ColorRole role = QPalette::ColorRole(i); + customPalette.setColor(QPalette::Active, role, QColor(activeColors.at(i))); + customPalette.setColor(QPalette::Inactive, role, QColor(inactiveColors.at(i))); + customPalette.setColor(QPalette::Disabled, role, QColor(disabledColors.at(i))); + } + } + else + { + customPalette = palette(); //load fallback palette + } + + return customPalette; +} + +void AppearancePage::createColorScheme(const QString &name, const QPalette &palette) +{ + QSettings settings(name, QSettings::IniFormat); + settings.beginGroup("ColorScheme"); + + QStringList activeColors, inactiveColors, disabledColors; + for (int i = 0; i < QPalette::NColorRoles; i++) + { + QPalette::ColorRole role = QPalette::ColorRole(i); + activeColors << palette.color(QPalette::Active, role).name(); + inactiveColors << palette.color(QPalette::Inactive, role).name(); + disabledColors << palette.color(QPalette::Disabled, role).name(); + } + + settings.setValue("active_colors",activeColors); + settings.setValue("inactive_colors",inactiveColors); + settings.setValue("disabled_colors",disabledColors); + + settings.endGroup(); + +} diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine/appearancepage.h b/src-qt5/core/lumina-theme-engine/src/lthemeengine/appearancepage.h new file mode 100644 index 00000000..3a7752c7 --- /dev/null +++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine/appearancepage.h @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2014-2017, Ilya Kotov <forkotov02@hotmail.ru> + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef APPEARANCEPAGE_H +#define APPEARANCEPAGE_H + +#include "tabpage.h" + +namespace Ui { +class AppearancePage; +class PreviewForm; +} + +class QStyle; +class QAction; + +class AppearancePage : public TabPage +{ + Q_OBJECT + +public: + explicit AppearancePage(QWidget *parent = 0); + ~AppearancePage(); + + void writeSettings(); + +private slots: + void on_styleComboBox_activated(const QString &text); + void on_colorSchemeComboBox_activated(int); + void createColorScheme(); + void changeColorScheme(); + void removeColorScheme(); + void copyColorScheme(); + void renameColorScheme(); + void updatePalette(); + void setPreviewPalette(const QPalette &p); + void updateActions(); + +private: + void readSettings(); + void setStyle(QWidget *w, QStyle *s); + void setPalette(QWidget *w, QPalette p); + void findColorSchemes(const QString &path); + QPalette loadColorScheme(const QString &filePath); + void createColorScheme(const QString &name, const QPalette &palette); + Ui::AppearancePage *m_ui; + QStyle *m_selectedStyle = nullptr; + QPalette m_customPalette; + QWidget *m_previewWidget; + QAction *m_changeColorSchemeAction, *m_renameColorSchemeAction, *m_removeColorSchemeAction; + Ui::PreviewForm *m_previewUi; +}; + +#endif // APPEARANCEPAGE_H diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine/appearancepage.ui b/src-qt5/core/lumina-theme-engine/src/lthemeengine/appearancepage.ui new file mode 100644 index 00000000..cd442930 --- /dev/null +++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine/appearancepage.ui @@ -0,0 +1,243 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>AppearancePage</class> + <widget class="QWidget" name="AppearancePage"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>596</width> + <height>470</height> + </rect> + </property> + <property name="windowTitle"> + <string notr="true">Form</string> + </property> + <layout class="QGridLayout" name="gridLayout_4"> + <item row="0" column="0"> + <widget class="QLabel" name="label"> + <property name="text"> + <string>Style:</string> + </property> + </widget> + </item> + <item row="3" column="0" colspan="3"> + <widget class="QGroupBox" name="groupBox"> + <property name="title"> + <string>Preview</string> + </property> + <layout class="QGridLayout" name="gridLayout"> + <item row="0" column="0"> + <widget class="QComboBox" name="paletteComboBox"> + <item> + <property name="text"> + <string>Active palette</string> + </property> + </item> + <item> + <property name="text"> + <string>Inactive palette</string> + </property> + </item> + <item> + <property name="text"> + <string>Disabled palette</string> + </property> + </item> + </widget> + </item> + <item row="0" column="1"> + <spacer name="horizontalSpacer_2"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>82</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item row="1" column="0" colspan="2"> + <widget class="QMdiArea" name="mdiArea"> + <property name="tabsMovable"> + <bool>false</bool> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item row="0" column="1"> + <widget class="QComboBox" name="styleComboBox"/> + </item> + <item row="0" column="2"> + <spacer name="horizontalSpacer"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item row="2" column="0" colspan="3"> + <widget class="QGroupBox" name="paletteGroupBox"> + <property name="title"> + <string>Palette</string> + </property> + <layout class="QVBoxLayout" name="_2"> + <item> + <layout class="QHBoxLayout" name="horizontalLayout"> + <property name="spacing"> + <number>6</number> + </property> + <item> + <widget class="QRadioButton" name="defaultPaletteButton"> + <property name="text"> + <string>Default</string> + </property> + <property name="checked"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QRadioButton" name="customPaletteButton"> + <property name="text"> + <string>Custom</string> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer_3"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>230</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_2"> + <item> + <widget class="QLabel" name="colorScheeLabel"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="text"> + <string>Color scheme:</string> + </property> + </widget> + </item> + <item> + <widget class="QComboBox" name="colorSchemeComboBox"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="minimumSize"> + <size> + <width>150</width> + <height>0</height> + </size> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="colorSchemeButton"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="text"> + <string>...</string> + </property> + <property name="popupMode"> + <enum>QToolButton::InstantPopup</enum> + </property> + <property name="arrowType"> + <enum>Qt::NoArrow</enum> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer_4"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> + </item> + </layout> + </widget> + </item> + </layout> + </widget> + <resources/> + <connections> + <connection> + <sender>customPaletteButton</sender> + <signal>toggled(bool)</signal> + <receiver>colorScheeLabel</receiver> + <slot>setEnabled(bool)</slot> + <hints> + <hint type="sourcelabel"> + <x>160</x> + <y>79</y> + </hint> + <hint type="destinationlabel"> + <x>77</x> + <y>104</y> + </hint> + </hints> + </connection> + <connection> + <sender>customPaletteButton</sender> + <signal>toggled(bool)</signal> + <receiver>colorSchemeComboBox</receiver> + <slot>setEnabled(bool)</slot> + <hints> + <hint type="sourcelabel"> + <x>144</x> + <y>75</y> + </hint> + <hint type="destinationlabel"> + <x>146</x> + <y>100</y> + </hint> + </hints> + </connection> + <connection> + <sender>customPaletteButton</sender> + <signal>toggled(bool)</signal> + <receiver>colorSchemeButton</receiver> + <slot>setEnabled(bool)</slot> + <hints> + <hint type="sourcelabel"> + <x>177</x> + <y>78</y> + </hint> + <hint type="destinationlabel"> + <x>288</x> + <y>116</y> + </hint> + </hints> + </connection> + </connections> +</ui> diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine/fontconfigdialog.cpp b/src-qt5/core/lumina-theme-engine/src/lthemeengine/fontconfigdialog.cpp new file mode 100644 index 00000000..398a2436 --- /dev/null +++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine/fontconfigdialog.cpp @@ -0,0 +1,138 @@ +/* + * Copyright (c) 2014-2017, Ilya Kotov <forkotov02@hotmail.ru> + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include <QXmlStreamWriter> +#include <QFile> +#include <QDir> +#include <QMessageBox> +#include "fontconfigdialog.h" +#include "ui_fontconfigdialog.h" + +FontConfigDialog::FontConfigDialog(QWidget *parent) : + QDialog(parent), + m_ui(new Ui::FontConfigDialog) +{ + m_ui->setupUi(this); + + m_ui->hintingStyleComboBox->addItem(tr("None"), "hintnone"); + m_ui->hintingStyleComboBox->addItem(tr("Slight"), "hintslight"); + m_ui->hintingStyleComboBox->addItem(tr("Medium"), "hintmedium"); + m_ui->hintingStyleComboBox->addItem(tr("Full"), "hintfull"); + + m_ui->rgbaComboBox->addItem(tr("None"), "none"); + m_ui->rgbaComboBox->addItem("rgb", "rgb"); + m_ui->rgbaComboBox->addItem("bgr", "bgr"); + m_ui->rgbaComboBox->addItem("vrgb", "vrgb"); + m_ui->rgbaComboBox->addItem("vbgr", "vbgr"); + + m_ui->lcdFilterComboBox->addItem("lcdnone"); + m_ui->lcdFilterComboBox->addItem("lcddefault"); + m_ui->lcdFilterComboBox->addItem("lcdlight"); + m_ui->lcdFilterComboBox->addItem("lcdlegacy"); +} + +FontConfigDialog::~FontConfigDialog() +{ + delete m_ui; +} + +void FontConfigDialog::accept() +{ + QDir::home().mkpath(".config/fontconfig/"); + QString path = QDir::homePath() + "/.config/fontconfig/fonts.conf"; + qDebug("FontConfigDialog: fontconfig path: %s", qPrintable(path)); + + + if(QFile::exists(path)) + { + if(QMessageBox::question(this, tr("Font Configuration"), + tr("<i>%1</i> already exists. Do you want to replace it?").arg(path), + QMessageBox::Yes | QMessageBox::No) == QMessageBox::No) + { + QDialog::reject(); + return; + } + + QFile::remove(path + ".back"); + QFile::copy(path, path + ".back"); + } + + QFile file(path); + if(!file.open(QIODevice::WriteOnly)) + { + qWarning("FontConfigDialog: unable to open file: %s", qPrintable(file.errorString())); + return; + } + + QXmlStreamWriter stream(&file); + stream.setAutoFormatting(true); + + stream.writeStartDocument(); + stream.writeDTD("<!DOCTYPE fontconfig SYSTEM \"fonts.dtd\">"); + stream.writeStartElement("fontconfig"); + + stream.writeStartElement("match"); + stream.writeAttribute("target", "font"); + writeOption(&stream, "antialias", "bool", m_ui->antialisingCheckBox->isChecked() ? "true" : "false"); + writeOption(&stream, "hinting", "bool", m_ui->hintingCheckBox->isChecked() ? "true" : "false"); + writeOption(&stream, "hintstyle", "const", m_ui->hintingStyleComboBox->currentData().toString()); + writeOption(&stream, "rgba", "const", m_ui->rgbaComboBox->currentData().toString()); + writeOption(&stream, "autohint", "bool", m_ui->autohinterCheckBox->isChecked() ? "true" : "false"); + writeOption(&stream, "lcdfilter", "const", m_ui->lcdFilterComboBox->currentText()); + writeOption(&stream, "dpi", "double", QString::number(m_ui->dpiSpinBox->value())); + stream.writeEndElement(); + + if(m_ui->disableBoldAutohintCheckBox->isChecked()) + { + stream.writeStartElement("match"); + stream.writeAttribute("target", "font"); + + stream.writeStartElement("test"); + stream.writeAttribute("name", "weight"); + stream.writeAttribute("compare", "more"); + stream.writeTextElement("const", "medium"); + stream.writeEndElement(); + + writeOption(&stream, "autohint", "bool", m_ui->autohinterCheckBox->isChecked() ? "true" : "false"); + + stream.writeEndElement(); + } + stream.writeEndElement(); + stream.writeEndDocument(); + + QDialog::accept(); +} + +void FontConfigDialog::writeOption(QXmlStreamWriter *stream, const QString &name, const QString &type, const QString &value) +{ + stream->writeStartElement("edit"); + stream->writeAttribute("name", name); + stream->writeAttribute("mode", "assign"); + stream->writeTextElement(type, value); + stream->writeEndElement(); +} diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine/fontconfigdialog.h b/src-qt5/core/lumina-theme-engine/src/lthemeengine/fontconfigdialog.h new file mode 100644 index 00000000..5b7e31a5 --- /dev/null +++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine/fontconfigdialog.h @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2014-2017, Ilya Kotov <forkotov02@hotmail.ru> + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef FONTCONFIGDIALOG_H +#define FONTCONFIGDIALOG_H + +#include <QDialog> + +namespace Ui { +class FontConfigDialog; +} + +class QXmlStreamWriter; + +class FontConfigDialog : public QDialog +{ + Q_OBJECT + +public: + explicit FontConfigDialog(QWidget *parent = 0); + ~FontConfigDialog(); + +public slots: + void accept(); + void writeOption(QXmlStreamWriter *stream, const QString &name, const QString &type, const QString &value); + +private: + Ui::FontConfigDialog *m_ui; +}; + +#endif // FONTCONFIGDIALOG_H diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine/fontconfigdialog.ui b/src-qt5/core/lumina-theme-engine/src/lthemeengine/fontconfigdialog.ui new file mode 100644 index 00000000..a557695f --- /dev/null +++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine/fontconfigdialog.ui @@ -0,0 +1,160 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>FontConfigDialog</class> + <widget class="QDialog" name="FontConfigDialog"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>349</width> + <height>286</height> + </rect> + </property> + <property name="windowTitle"> + <string>Font Configuration</string> + </property> + <layout class="QGridLayout" name="gridLayout"> + <property name="leftMargin"> + <number>6</number> + </property> + <property name="rightMargin"> + <number>6</number> + </property> + <property name="bottomMargin"> + <number>6</number> + </property> + <item row="5" column="0" colspan="2"> + <widget class="QCheckBox" name="disableBoldAutohintCheckBox"> + <property name="text"> + <string>Disable automatic hinting for bold fonts</string> + </property> + </widget> + </item> + <item row="6" column="0"> + <widget class="QLabel" name="label_3"> + <property name="text"> + <string>LCD filter:</string> + </property> + </widget> + </item> + <item row="4" column="0" colspan="2"> + <widget class="QCheckBox" name="autohinterCheckBox"> + <property name="text"> + <string>Automatic hinting</string> + </property> + </widget> + </item> + <item row="1" column="0" colspan="2"> + <widget class="QCheckBox" name="hintingCheckBox"> + <property name="text"> + <string>Hinting</string> + </property> + </widget> + </item> + <item row="8" column="0" colspan="2"> + <widget class="QDialogButtonBox" name="buttonBox"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="standardButtons"> + <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> + </property> + </widget> + </item> + <item row="7" column="0"> + <widget class="QLabel" name="label_4"> + <property name="text"> + <string>Font resolution:</string> + </property> + </widget> + </item> + <item row="6" column="1"> + <widget class="QComboBox" name="lcdFilterComboBox"/> + </item> + <item row="3" column="1"> + <widget class="QComboBox" name="rgbaComboBox"/> + </item> + <item row="2" column="1"> + <widget class="QComboBox" name="hintingStyleComboBox"/> + </item> + <item row="3" column="0"> + <widget class="QLabel" name="label_2"> + <property name="text"> + <string>Subpixel geometry:</string> + </property> + </widget> + </item> + <item row="0" column="0" colspan="2"> + <widget class="QCheckBox" name="antialisingCheckBox"> + <property name="text"> + <string>Antialiasing</string> + </property> + </widget> + </item> + <item row="2" column="0"> + <widget class="QLabel" name="label"> + <property name="text"> + <string>Hinting style:</string> + </property> + </widget> + </item> + <item row="7" column="1"> + <widget class="QSpinBox" name="dpiSpinBox"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="suffix"> + <string> dpi</string> + </property> + <property name="minimum"> + <number>80</number> + </property> + <property name="maximum"> + <number>180</number> + </property> + <property name="value"> + <number>102</number> + </property> + </widget> + </item> + </layout> + </widget> + <resources/> + <connections> + <connection> + <sender>buttonBox</sender> + <signal>accepted()</signal> + <receiver>FontConfigDialog</receiver> + <slot>accept()</slot> + <hints> + <hint type="sourcelabel"> + <x>248</x> + <y>254</y> + </hint> + <hint type="destinationlabel"> + <x>157</x> + <y>274</y> + </hint> + </hints> + </connection> + <connection> + <sender>buttonBox</sender> + <signal>rejected()</signal> + <receiver>FontConfigDialog</receiver> + <slot>reject()</slot> + <hints> + <hint type="sourcelabel"> + <x>316</x> + <y>260</y> + </hint> + <hint type="destinationlabel"> + <x>286</x> + <y>274</y> + </hint> + </hints> + </connection> + </connections> +</ui> diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine/fontspage.cpp b/src-qt5/core/lumina-theme-engine/src/lthemeengine/fontspage.cpp new file mode 100644 index 00000000..db48a3cc --- /dev/null +++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine/fontspage.cpp @@ -0,0 +1,126 @@ +/* + * Copyright (c) 2014-2017, Ilya Kotov <forkotov02@hotmail.ru> + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include <QSignalMapper> +#include <QMessageBox> +#include <QSettings> +#include <QApplication> +#include <QFontDialog> +#include <QDir> +#include <QFile> +#include "lthemeengine.h" +#include "fontspage.h" +#include "fontconfigdialog.h" +#include "ui_fontspage.h" + +FontsPage::FontsPage(QWidget *parent) : + TabPage(parent), + m_ui(new Ui::FontsPage) +{ + m_ui->setupUi(this); + + QSignalMapper *mapper = new QSignalMapper(this); + mapper->setMapping(m_ui->changeGeneralFontButton, m_ui->generalFontLabel); + mapper->setMapping(m_ui->changeFixedWidthFontButton, m_ui->fixedFontLabel); + connect(m_ui->changeGeneralFontButton, SIGNAL(clicked()), mapper, SLOT(map())); + connect(m_ui->changeFixedWidthFontButton, SIGNAL(clicked()), mapper, SLOT(map())); + connect(mapper, SIGNAL(mapped(QWidget*)), SLOT(onFontChangeRequested(QWidget*))); + + readSettings(); + + //icons + m_ui->createFontsConfButton->setIcon(QIcon::fromTheme("document-new")); + m_ui->removeFontsConfButton->setIcon(QIcon::fromTheme("edit-delete")); +} + +FontsPage::~FontsPage() +{ + delete m_ui; +} + +void FontsPage::writeSettings() +{ + QSettings settings(lthemeengine::configFile(), QSettings::IniFormat); + settings.beginGroup("Fonts"); + settings.setValue("general", m_ui->generalFontLabel->font()); + settings.setValue("fixed", m_ui->fixedFontLabel->font()); + settings.endGroup(); +} + +void FontsPage::onFontChangeRequested(QWidget *widget) +{ + bool ok = false; + QFont font = QFontDialog::getFont (&ok, widget->font(), this); + if(ok) + { + widget->setFont(font); + qobject_cast<QLabel*>(widget)->setText(font.family () + " " + QString::number(font.pointSize ())); + } +} + +void FontsPage::readSettings() +{ + QSettings settings(lthemeengine::configFile(), QSettings::IniFormat); + settings.beginGroup("Fonts"); + loadFont(&settings, m_ui->generalFontLabel, "general"); + loadFont(&settings, m_ui->fixedFontLabel, "fixed"); + settings.endGroup(); +} + +void FontsPage::loadFont(QSettings *settings, QLabel *label, const QString &key) +{ + QFont font = settings->value(key, QApplication::font()).value<QFont>(); + label->setText(font.family () + " " + QString::number(font.pointSize ())); + label->setFont(font); +} + +void FontsPage::on_createFontsConfButton_clicked() +{ + FontConfigDialog d(this); + d.exec(); +} + +void FontsPage::on_removeFontsConfButton_clicked() +{ + QString path = QDir::homePath() + "/.config/fontconfig/fonts.conf"; + + + if(QFile::exists(path)) + { + if(QMessageBox::question(this, tr("Remove Font Configuration"), + tr("Are you sure you want to delete <i>%1</i>?").arg(path), + QMessageBox::Yes | QMessageBox::No) == QMessageBox::No) + { + return; + } + + QFile::remove(path + ".back"); + QFile::copy(path, path + ".back"); + QFile::remove(path); + } +} diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine/fontspage.h b/src-qt5/core/lumina-theme-engine/src/lthemeengine/fontspage.h new file mode 100644 index 00000000..a9c5f1f6 --- /dev/null +++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine/fontspage.h @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2014-2017, Ilya Kotov <forkotov02@hotmail.ru> + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef FONTSPAGE_H +#define FONTSPAGE_H + +#include "tabpage.h" + +namespace Ui { +class FontsPage; +} + +class QLabel; +class QSettings; + +class FontsPage : public TabPage +{ + Q_OBJECT + +public: + explicit FontsPage(QWidget *parent = 0); + ~FontsPage(); + + void writeSettings(); + +private slots: + void onFontChangeRequested(QWidget *widget); + void on_createFontsConfButton_clicked(); + void on_removeFontsConfButton_clicked(); + +private: + void readSettings(); + void loadFont(QSettings *settings, QLabel *label, const QString &key); + Ui::FontsPage *m_ui; +}; + +#endif // FONTSPAGE_H diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine/fontspage.ui b/src-qt5/core/lumina-theme-engine/src/lthemeengine/fontspage.ui new file mode 100644 index 00000000..b03b5fc0 --- /dev/null +++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine/fontspage.ui @@ -0,0 +1,134 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>FontsPage</class> + <widget class="QWidget" name="FontsPage"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>517</width> + <height>320</height> + </rect> + </property> + <property name="windowTitle"> + <string notr="true">Form</string> + </property> + <layout class="QGridLayout" name="gridLayout_2"> + <item row="1" column="2"> + <spacer name="horizontalSpacer"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>342</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item row="0" column="0" colspan="3"> + <layout class="QGridLayout" name="gridLayout"> + <item row="0" column="1"> + <widget class="QLabel" name="generalFontLabel"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="frameShape"> + <enum>QFrame::StyledPanel</enum> + </property> + <property name="text"> + <string>...</string> + </property> + </widget> + </item> + <item row="0" column="0"> + <widget class="QLabel" name="label_2"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>General:</string> + </property> + </widget> + </item> + <item row="0" column="2"> + <widget class="QToolButton" name="changeGeneralFontButton"> + <property name="text"> + <string>...</string> + </property> + </widget> + </item> + <item row="1" column="1"> + <widget class="QLabel" name="fixedFontLabel"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="frameShape"> + <enum>QFrame::StyledPanel</enum> + </property> + <property name="text"> + <string>...</string> + </property> + </widget> + </item> + <item row="1" column="2"> + <widget class="QToolButton" name="changeFixedWidthFontButton"> + <property name="text"> + <string>...</string> + </property> + </widget> + </item> + <item row="1" column="0"> + <widget class="QLabel" name="label_5"> + <property name="text"> + <string>Fixed width:</string> + </property> + </widget> + </item> + </layout> + </item> + <item row="2" column="0" colspan="3"> + <spacer name="verticalSpacer"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeType"> + <enum>QSizePolicy::Expanding</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>0</width> + <height>280</height> + </size> + </property> + </spacer> + </item> + <item row="1" column="0"> + <widget class="QPushButton" name="createFontsConfButton"> + <property name="text"> + <string>Create fonts.conf</string> + </property> + </widget> + </item> + <item row="1" column="1"> + <widget class="QPushButton" name="removeFontsConfButton"> + <property name="text"> + <string>Remove fonts.conf</string> + </property> + </widget> + </item> + </layout> + </widget> + <resources/> + <connections/> +</ui> diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine/iconthemepage.cpp b/src-qt5/core/lumina-theme-engine/src/lthemeengine/iconthemepage.cpp new file mode 100644 index 00000000..ca9a3388 --- /dev/null +++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine/iconthemepage.cpp @@ -0,0 +1,214 @@ +/* + * Copyright (c) 2014-2017, Ilya Kotov <forkotov02@hotmail.ru> + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include <QSettings> +#include <QFileInfo> +#include <QFileInfoList> +#include <QDir> +#include <QTreeWidgetItem> +#include <QImageReader> +#include <QLocale> +#include "lthemeengine.h" +#include "iconthemepage.h" +#include "ui_iconthemepage.h" + +IconThemePage::IconThemePage(QWidget *parent) : + TabPage(parent), + m_ui(new Ui::IconThemePage) +{ + m_ui->setupUi(this); + loadThemes(); + readSettings(); +} + +IconThemePage::~IconThemePage() +{ + delete m_ui; +} + +void IconThemePage::writeSettings() +{ + QSettings settings(lthemeengine::configFile(), QSettings::IniFormat); + QTreeWidgetItem *item = m_ui->treeWidget->currentItem(); + if(item) + settings.setValue("Appearance/icon_theme", item->data(3, Qt::UserRole)); +} + +void IconThemePage::readSettings() +{ + QSettings settings(lthemeengine::configFile(), QSettings::IniFormat); + QString name = settings.value("Appearance/icon_theme").toString(); + + if(name.isEmpty()) + return; + + for(int i = 0; i < m_ui->treeWidget->topLevelItemCount(); ++i) + { + QTreeWidgetItem *item = m_ui->treeWidget->topLevelItem(i); + if(item->data(3, Qt::UserRole).toString() == name) + { + m_ui->treeWidget->setCurrentItem(item); + break; + } + } +} + +void IconThemePage::loadThemes() +{ + QFileInfoList themeFileList; + foreach(QString path, lthemeengine::iconPaths()) + { + QDir dir(path); + dir.setFilter(QDir::Dirs | QDir::NoDotDot | QDir::NoDot); + foreach (QFileInfo info, dir.entryInfoList()) + { + QDir themeDir(info.absoluteFilePath()); + themeDir.setFilter(QDir::Files); + themeFileList << themeDir.entryInfoList(QStringList() << "index.theme"); + } + } + + foreach(QFileInfo info, themeFileList) + { + loadTheme(info.canonicalFilePath()); + } +} + +void IconThemePage::loadTheme(const QString &path) +{ + QSettings config(path, QSettings::IniFormat); + config.setIniCodec("UTF-8"); + + config.beginGroup("Icon Theme"); + QStringList dirs = config.value("Directories").toStringList(); + if(dirs.isEmpty() || config.value("Hidden", false).toBool()) + return; + + QString name, comment; + QString lang = QLocale::system().name(); + + name = config.value(QString("Name[%1]").arg(lang)).toString(); + comment = config.value(QString("Comment[%1]").arg(lang)).toString(); + + if(lang.contains("_")) + lang = lang.split("_").first(); + + if(name.isEmpty()) + name = config.value(QString("Name[%1]").arg(lang)).toString(); + + if(comment.isEmpty()) + comment = config.value(QString("Comment[%1]").arg(lang)).toString(); + + if(name.isEmpty()) + name = config.value("Name").toString(); + + if(comment.isEmpty()) + comment = config.value("Comment").toString(); + + config.endGroup(); + + QIcon icon1 = findIcon(path, 24, "document-save"); + QIcon icon2 = findIcon(path, 24, "document-print"); + QIcon icon3 = findIcon(path, 24, "media-playback-stop"); + + QTreeWidgetItem *item = new QTreeWidgetItem(); + item->setIcon(0, icon1); + item->setIcon(1, icon2); + item->setIcon(2, icon3); + item->setText(3, name); + item->setData(3, Qt::UserRole, QFileInfo(path).path().section("/", -1)); + item->setToolTip(3, comment); + item->setSizeHint(0, QSize(24,24)); + m_ui->treeWidget->addTopLevelItem(item); + + m_ui->treeWidget->resizeColumnToContents(0); + m_ui->treeWidget->resizeColumnToContents(1); + m_ui->treeWidget->resizeColumnToContents(2); + m_ui->treeWidget->resizeColumnToContents(3); +} + +QIcon IconThemePage::findIcon(const QString &themePath, int size, const QString &name) +{ + QSettings config(themePath, QSettings::IniFormat); + config.beginGroup("Icon Theme"); + QStringList dirs = config.value("Directories").toStringList(); + QStringList parents = config.value("Inherits").toStringList(); + bool haveInherits = config.contains("Inherits"); + config.endGroup(); + + foreach (QString dir, dirs) + { + config.beginGroup(dir); + if(config.value("Size").toInt() == size) + { + QDir iconDir = QFileInfo(themePath).path() + "/" + dir; + iconDir.setFilter(QDir::Files); + iconDir.setNameFilters(QStringList () << name + ".*"); + if(iconDir.entryInfoList().isEmpty()) + continue; + return QIcon(iconDir.entryInfoList().first().absoluteFilePath()); + } + config.endGroup(); + } + + foreach (QString dir, dirs) + { + config.beginGroup(dir); + if(abs(config.value("Size").toInt() - size) < 4) + { + QDir iconDir = QFileInfo(themePath).path() + "/" + dir; + iconDir.setFilter(QDir::Files); + iconDir.setNameFilters(QStringList () << name + ".*"); + if(iconDir.entryInfoList().isEmpty()) + continue; + return QIcon(iconDir.entryInfoList().first().absoluteFilePath()); + } + config.endGroup(); + } + + if (!haveInherits) + return QIcon(); + + parents.append("hicolor"); //add fallback themes + parents.append("gnome"); + parents.removeDuplicates(); + + foreach (QString parent, parents) + { + QString parentThemePath = QDir(QFileInfo(themePath).path() + "/../" + parent).canonicalPath() + "/index.theme"; + + if(!QFile::exists(parentThemePath) || parentThemePath == themePath) + continue; + + QIcon icon = findIcon(parentThemePath, size, name); + if(!icon.isNull()) + return icon; + } + + return QIcon(); +} diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine/iconthemepage.h b/src-qt5/core/lumina-theme-engine/src/lthemeengine/iconthemepage.h new file mode 100644 index 00000000..0ccd64e0 --- /dev/null +++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine/iconthemepage.h @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2014-2017, Ilya Kotov <forkotov02@hotmail.ru> + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef ICONTHEMEPAGE_H +#define ICONTHEMEPAGE_H + +#include <QIcon> +#include "tabpage.h" + +namespace Ui { +class IconThemePage; +} + +class IconThemePage : public TabPage +{ + Q_OBJECT + +public: + explicit IconThemePage(QWidget *parent = 0); + ~IconThemePage(); + + void writeSettings(); + +private: + void readSettings(); + void loadThemes(); + void loadTheme(const QString &path); + QIcon findIcon(const QString &themePath, int size, const QString &name); + Ui::IconThemePage *m_ui; +}; + +#endif // ICONTHEMEPAGE_H diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine/iconthemepage.ui b/src-qt5/core/lumina-theme-engine/src/lthemeengine/iconthemepage.ui new file mode 100644 index 00000000..a6385041 --- /dev/null +++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine/iconthemepage.ui @@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>IconThemePage</class> + <widget class="QWidget" name="IconThemePage"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>400</width> + <height>300</height> + </rect> + </property> + <property name="windowTitle"> + <string notr="true">Form</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <widget class="QTreeWidget" name="treeWidget"> + <property name="columnCount"> + <number>4</number> + </property> + <attribute name="headerVisible"> + <bool>false</bool> + </attribute> + <column> + <property name="text"> + <string notr="true">1</string> + </property> + </column> + <column> + <property name="text"> + <string notr="true">2</string> + </property> + </column> + <column> + <property name="text"> + <string notr="true">3</string> + </property> + </column> + <column> + <property name="text"> + <string notr="true">4</string> + </property> + </column> + </widget> + </item> + </layout> + </widget> + <resources/> + <connections/> +</ui> diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine/interfacepage.cpp b/src-qt5/core/lumina-theme-engine/src/lthemeengine/interfacepage.cpp new file mode 100644 index 00000000..a9f40080 --- /dev/null +++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine/interfacepage.cpp @@ -0,0 +1,140 @@ +/* + * Copyright (c) 2014-2017, Ilya Kotov <forkotov02@hotmail.ru> + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include <QSettings> +#include <QApplication> +#include <QDialogButtonBox> +#include "lthemeengine.h" +#include "interfacepage.h" +#include "ui_interfacepage.h" + +InterfacePage::InterfacePage(QWidget *parent) : + TabPage(parent), + m_ui(new Ui::InterfacePage) +{ + m_ui->setupUi(this); + + m_ui->buttonLayoutComboBox->addItem("Windows", QDialogButtonBox::WinLayout); + m_ui->buttonLayoutComboBox->addItem("Mac OS X", QDialogButtonBox::MacLayout); + m_ui->buttonLayoutComboBox->addItem("KDE", QDialogButtonBox::KdeLayout); + m_ui->buttonLayoutComboBox->addItem("GNOME", QDialogButtonBox::GnomeLayout); + + m_ui->toolButtonStyleComboBox->addItem(tr("Only display the icon"), Qt::ToolButtonIconOnly); + m_ui->toolButtonStyleComboBox->addItem(tr("Only display the text"), Qt::ToolButtonTextOnly); + m_ui->toolButtonStyleComboBox->addItem(tr("The text appears beside the icon"), Qt::ToolButtonTextBesideIcon); + m_ui->toolButtonStyleComboBox->addItem(tr("The text appears under the icon"), Qt::ToolButtonTextUnderIcon); + m_ui->toolButtonStyleComboBox->addItem(tr("Follow the application style"), Qt::ToolButtonFollowStyle); + + readSettings(); +} + +InterfacePage::~InterfacePage() +{ + delete m_ui; +} + +void InterfacePage::writeSettings() +{ + QSettings settings(lthemeengine::configFile(), QSettings::IniFormat); + settings.beginGroup("Interface"); + settings.setValue("double_click_interval", m_ui->doubleClickIntervalSpinBox->value()); + settings.setValue("cursor_flash_time", m_ui->cursorFlashTimeSpinBox->value()); + settings.setValue("buttonbox_layout", m_ui->buttonLayoutComboBox->currentData()); + settings.setValue("menus_have_icons", m_ui->menuIconsCheckBox->isChecked()); + settings.setValue("activate_item_on_single_click", m_ui->singleClickCheckBox->checkState()); + settings.setValue("dialog_buttons_have_icons", m_ui->dialogIconsCheckBox->checkState()); + settings.setValue("toolbutton_style", m_ui->toolButtonStyleComboBox->currentData()); + settings.setValue("wheel_scroll_lines", m_ui->wheelScrollLinesSpinBox->value()); + + QStringList effects; + if(m_ui->guiEffectsCheckBox->isChecked()) + effects << "General"; + + if(m_ui->menuEffectComboBox->currentIndex() == 1) + effects << "AnimateMenu"; + else if(m_ui->menuEffectComboBox->currentIndex() == 2) + effects << "FadeMenu"; + + if(m_ui->comboBoxEffectComboBox->currentIndex() == 1) + effects << "AnimateCombo"; + + if(m_ui->toolTipEffectComboBox->currentIndex() == 1) + effects << "AnimateTooltip"; + else if(m_ui->toolTipEffectComboBox->currentIndex() == 2) + effects << "FadeTooltip"; + + if(m_ui->toolBoxEffectComboBox->currentIndex() == 1) + effects << "AnimateToolBox"; + + settings.setValue("gui_effects", effects); + settings.endGroup(); +} + +void InterfacePage::readSettings() +{ + QSettings settings(lthemeengine::configFile(), QSettings::IniFormat); + settings.beginGroup("Interface"); + m_ui->doubleClickIntervalSpinBox->setValue(qApp->doubleClickInterval()); + m_ui->cursorFlashTimeSpinBox->setValue(qApp->cursorFlashTime()); + + m_ui->guiEffectsCheckBox->setChecked(qApp->isEffectEnabled(Qt::UI_General)); + + int layout = settings.value("buttonbox_layout", style()->styleHint(QStyle::SH_DialogButtonLayout)).toInt(); + int index = m_ui->buttonLayoutComboBox->findData(layout); + if(index >= 0) + m_ui->buttonLayoutComboBox->setCurrentIndex(index); + + if(qApp->isEffectEnabled(Qt::UI_AnimateMenu)) + m_ui->menuEffectComboBox->setCurrentIndex(1); + else if(qApp->isEffectEnabled(Qt::UI_FadeMenu)) + m_ui->menuEffectComboBox->setCurrentIndex(2); + + if(qApp->isEffectEnabled(Qt::UI_AnimateCombo)) + m_ui->comboBoxEffectComboBox->setCurrentIndex(1); + + if(qApp->isEffectEnabled(Qt::UI_AnimateTooltip)) + m_ui->toolTipEffectComboBox->setCurrentIndex(1); + else if(qApp->isEffectEnabled(Qt::UI_FadeTooltip)) + m_ui->toolTipEffectComboBox->setCurrentIndex(2); + + if(qApp->isEffectEnabled(Qt::UI_AnimateToolBox)) + m_ui->toolBoxEffectComboBox->setCurrentIndex(1); + + m_ui->singleClickCheckBox->setCheckState((Qt::CheckState)settings.value("activate_item_on_single_click", Qt::PartiallyChecked).toInt()); + m_ui->dialogIconsCheckBox->setCheckState((Qt::CheckState)settings.value("dialog_buttons_have_icons", Qt::PartiallyChecked).toInt()); + m_ui->menuIconsCheckBox->setChecked(!qApp->testAttribute(Qt::AA_DontShowIconsInMenus)); + + int toolbarStyle = settings.value("toolbutton_style", Qt::ToolButtonFollowStyle).toInt(); + index = m_ui->toolButtonStyleComboBox->findData(toolbarStyle); + if(index >= 0) + m_ui->toolButtonStyleComboBox->setCurrentIndex(index); + + m_ui->wheelScrollLinesSpinBox->setValue(settings.value("wheel_scroll_lines", 3).toInt()); + + settings.endGroup(); +} diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine/interfacepage.h b/src-qt5/core/lumina-theme-engine/src/lthemeengine/interfacepage.h new file mode 100644 index 00000000..637b6bf1 --- /dev/null +++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine/interfacepage.h @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2014-2017, Ilya Kotov <forkotov02@hotmail.ru> + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef INTERFACEPAGE_H +#define INTERFACEPAGE_H + +#include "tabpage.h" + +namespace Ui { +class InterfacePage; +} + +class InterfacePage : public TabPage +{ + Q_OBJECT + +public: + explicit InterfacePage(QWidget *parent = 0); + ~InterfacePage(); + + void writeSettings(); + +private: + void readSettings(); + + Ui::InterfacePage *m_ui; +}; + +#endif // INTERFACEPAGE_H diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine/interfacepage.ui b/src-qt5/core/lumina-theme-engine/src/lthemeengine/interfacepage.ui new file mode 100644 index 00000000..ca9d0291 --- /dev/null +++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine/interfacepage.ui @@ -0,0 +1,327 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>InterfacePage</class> + <widget class="QWidget" name="InterfacePage"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>498</width> + <height>449</height> + </rect> + </property> + <property name="windowTitle"> + <string notr="true">Form</string> + </property> + <layout class="QGridLayout" name="gridLayout"> + <item row="2" column="0"> + <spacer name="verticalSpacer"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>259</height> + </size> + </property> + </spacer> + </item> + <item row="0" column="0"> + <layout class="QFormLayout" name="formLayout"> + <item row="0" column="0"> + <widget class="QLabel" name="label"> + <property name="text"> + <string>Double click interval:</string> + </property> + </widget> + </item> + <item row="1" column="0"> + <widget class="QLabel" name="label_2"> + <property name="text"> + <string>Cursor flash time:</string> + </property> + </widget> + </item> + <item row="5" column="0"> + <widget class="QLabel" name="label_3"> + <property name="text"> + <string>ComboBox effect:</string> + </property> + </widget> + </item> + <item row="6" column="0"> + <widget class="QLabel" name="label_4"> + <property name="text"> + <string>ToolTip effect:</string> + </property> + </widget> + </item> + <item row="7" column="0"> + <widget class="QLabel" name="label_5"> + <property name="text"> + <string>ToolBox effect:</string> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="QSpinBox" name="doubleClickIntervalSpinBox"> + <property name="suffix"> + <string> ms</string> + </property> + <property name="maximum"> + <number>2000</number> + </property> + </widget> + </item> + <item row="1" column="1"> + <widget class="QSpinBox" name="cursorFlashTimeSpinBox"> + <property name="suffix"> + <string> ms</string> + </property> + <property name="maximum"> + <number>4000</number> + </property> + </widget> + </item> + <item row="5" column="1"> + <widget class="QComboBox" name="comboBoxEffectComboBox"> + <property name="enabled"> + <bool>false</bool> + </property> + <item> + <property name="text"> + <string>Disable</string> + </property> + </item> + <item> + <property name="text"> + <string>Animate</string> + </property> + </item> + </widget> + </item> + <item row="6" column="1"> + <widget class="QComboBox" name="toolTipEffectComboBox"> + <property name="enabled"> + <bool>false</bool> + </property> + <item> + <property name="text"> + <string>Disable</string> + </property> + </item> + <item> + <property name="text"> + <string>Animate</string> + </property> + </item> + <item> + <property name="text"> + <string>Fade</string> + </property> + </item> + </widget> + </item> + <item row="7" column="1"> + <widget class="QComboBox" name="toolBoxEffectComboBox"> + <property name="enabled"> + <bool>false</bool> + </property> + <item> + <property name="text"> + <string>Disable</string> + </property> + </item> + <item> + <property name="text"> + <string>Animate</string> + </property> + </item> + </widget> + </item> + <item row="4" column="0"> + <widget class="QLabel" name="label_6"> + <property name="text"> + <string>Menu effect:</string> + </property> + </widget> + </item> + <item row="4" column="1"> + <widget class="QComboBox" name="menuEffectComboBox"> + <property name="enabled"> + <bool>false</bool> + </property> + <item> + <property name="text"> + <string>Disable</string> + </property> + </item> + <item> + <property name="text"> + <string>Animate</string> + </property> + </item> + <item> + <property name="text"> + <string>Fade</string> + </property> + </item> + </widget> + </item> + <item row="3" column="0" colspan="2"> + <widget class="QCheckBox" name="guiEffectsCheckBox"> + <property name="text"> + <string>Enable gui effects</string> + </property> + </widget> + </item> + <item row="8" column="0"> + <widget class="QLabel" name="label_7"> + <property name="text"> + <string>Dialog buttons layout:</string> + </property> + </widget> + </item> + <item row="8" column="1"> + <widget class="QComboBox" name="buttonLayoutComboBox"/> + </item> + <item row="10" column="0" colspan="2"> + <widget class="QCheckBox" name="menuIconsCheckBox"> + <property name="text"> + <string>Menus have icons</string> + </property> + </widget> + </item> + <item row="9" column="0" colspan="2"> + <widget class="QCheckBox" name="dialogIconsCheckBox"> + <property name="text"> + <string>Dialog buttons have icons</string> + </property> + <property name="tristate"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="2" column="0" colspan="2"> + <widget class="QCheckBox" name="singleClickCheckBox"> + <property name="text"> + <string>Activate item on single-click</string> + </property> + <property name="tristate"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="11" column="0"> + <widget class="QLabel" name="label_8"> + <property name="text"> + <string>Toolbar button style:</string> + </property> + </widget> + </item> + <item row="11" column="1"> + <widget class="QComboBox" name="toolButtonStyleComboBox"/> + </item> + <item row="12" column="0"> + <widget class="QLabel" name="label_9"> + <property name="text"> + <string>Mouse wheel scroll lines:</string> + </property> + </widget> + </item> + <item row="12" column="1"> + <widget class="QSpinBox" name="wheelScrollLinesSpinBox"> + <property name="minimum"> + <number>1</number> + </property> + <property name="maximum"> + <number>20</number> + </property> + </widget> + </item> + </layout> + </item> + <item row="0" column="1"> + <spacer name="horizontalSpacer"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>238</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> + <resources/> + <connections> + <connection> + <sender>guiEffectsCheckBox</sender> + <signal>toggled(bool)</signal> + <receiver>menuEffectComboBox</receiver> + <slot>setEnabled(bool)</slot> + <hints> + <hint type="sourcelabel"> + <x>126</x> + <y>86</y> + </hint> + <hint type="destinationlabel"> + <x>201</x> + <y>114</y> + </hint> + </hints> + </connection> + <connection> + <sender>guiEffectsCheckBox</sender> + <signal>toggled(bool)</signal> + <receiver>comboBoxEffectComboBox</receiver> + <slot>setEnabled(bool)</slot> + <hints> + <hint type="sourcelabel"> + <x>75</x> + <y>84</y> + </hint> + <hint type="destinationlabel"> + <x>160</x> + <y>153</y> + </hint> + </hints> + </connection> + <connection> + <sender>guiEffectsCheckBox</sender> + <signal>toggled(bool)</signal> + <receiver>toolTipEffectComboBox</receiver> + <slot>setEnabled(bool)</slot> + <hints> + <hint type="sourcelabel"> + <x>54</x> + <y>84</y> + </hint> + <hint type="destinationlabel"> + <x>155</x> + <y>184</y> + </hint> + </hints> + </connection> + <connection> + <sender>guiEffectsCheckBox</sender> + <signal>toggled(bool)</signal> + <receiver>toolBoxEffectComboBox</receiver> + <slot>setEnabled(bool)</slot> + <hints> + <hint type="sourcelabel"> + <x>36</x> + <y>91</y> + </hint> + <hint type="destinationlabel"> + <x>156</x> + <y>216</y> + </hint> + </hints> + </connection> + </connections> +</ui> diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine/lthemeengine.cpp b/src-qt5/core/lumina-theme-engine/src/lthemeengine/lthemeengine.cpp new file mode 100644 index 00000000..65328963 --- /dev/null +++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine/lthemeengine.cpp @@ -0,0 +1,132 @@ +/* + * Copyright (c) 2014-2017, Ilya Kotov <forkotov02@hotmail.ru> + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include <QDir> +#include <QLocale> +#include "lthemeengine.h" + +#ifndef LTHEMEENGINE_DATADIR +#define LTHEMEENGINE_DATADIR "/usr/local/share" +#endif + + +QString lthemeengine::configPath() +{ + return QDir::homePath() + "/.config/lthemeengine/"; +} + +QString lthemeengine::configFile() +{ + return configPath() + "lthemeengine.conf"; +} + +QStringList lthemeengine::iconPaths() +{ + QString xdgDataDirs = qgetenv("XDG_DATA_DIRS"); + QString xdgDataHome = qgetenv("XDG_DATA_HOME"); + + QStringList paths; + paths << QDir::homePath() + "/.icons/"; + + if(xdgDataDirs.isEmpty()) + { + paths << "/usr/share/icons"; + paths << "/usr/local/share/icons"; + } + else + { + foreach (QString p, xdgDataDirs.split(":")) + paths << QDir(p + "/icons/").absolutePath(); + } + + if(xdgDataHome.isEmpty()) + xdgDataHome = QDir::homePath() + "/.local/share"; + + paths << "/usr/share/pixmaps"; + paths << xdgDataHome + "/icons"; + paths.removeDuplicates(); + + //remove invalid + foreach (QString p, paths) + { + if(!QDir(p).exists()) + paths.removeAll(p); + } + return paths; +} + +QString lthemeengine::userStyleSheetPath() +{ + return configPath() + "qss/"; +} + +QStringList lthemeengine::sharedStyleSheetPath() + { + QStringList dirs; + dirs << QString(getenv("XDG_CONFIG_HOME")); + dirs << QString(getenv("XDG_CONFIG_DIRS")).split(":"); + for(int i=0; i<dirs.length(); i++){ + dirs[i].append("/lthemeengine/colors/"); + } + if(dirs.isEmpty()){ + dirs << LTHEMEENGINE_DATADIR"/lthemeengine/qss/"; //no XDG settings - use the hardcoded path + } + return dirs; + } + + QString lthemeengine::userColorSchemePath(){ + return configPath() + "colors/"; + } + +QStringList lthemeengine::sharedColorSchemePath() + { + QStringList dirs; + dirs << QString(getenv("XDG_CONFIG_HOME")); + dirs << QString(getenv("XDG_CONFIG_DIRS")).split(":"); + for(int i=0; i<dirs.length(); i++){ + dirs[i].append("/lthemeengine/colors/"); + } + if(dirs.isEmpty()){ + dirs << LTHEMEENGINE_DATADIR"/lthemeengine/colors/"; //no XDG settings - use the hardcoded path + } + return dirs; + } + +QString lthemeengine::systemLanguageID() +{ +#ifdef Q_OS_UNIX + QByteArray v = qgetenv ("LC_ALL"); + if (v.isEmpty()) + v = qgetenv ("LC_MESSAGES"); + if (v.isEmpty()) + v = qgetenv ("LANG"); + if (!v.isEmpty()) + return QLocale (v).name(); +#endif + return QLocale::system().name(); +} diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine/lthemeengine.desktop b/src-qt5/core/lumina-theme-engine/src/lthemeengine/lthemeengine.desktop new file mode 100644 index 00000000..7eb91bee --- /dev/null +++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine/lthemeengine.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +X-Desktop-File-Install-Version=0.11 +Name=Lumine Theme Engine +Comment=Lumina Theme Engine +Exec=lthemeengine +Icon=preferences-desktop-theme +Terminal=false +Type=Application +Categories=Settings;DesktopSettings;Qt; diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine/lthemeengine.h b/src-qt5/core/lumina-theme-engine/src/lthemeengine/lthemeengine.h new file mode 100644 index 00000000..171f720a --- /dev/null +++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine/lthemeengine.h @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2014-2017, Ilya Kotov <forkotov02@hotmail.ru> + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef LTHEMEENGINE_H +#define LTHEMEENGINE_H + +#define LTHEMEENGINE_VERSION_MAJOR 0 +#define LTHEMEENGINE_VERSION_MINOR 33 + +#define LTHEMEENGINE_TOSTRING(s) #s +#define LTHEMEENGINE_STRINGIFY(s) LTHEMEENGINE_TOSTRING(s) + +#define LTHEMEENGINE_VERSION_INT (LTHEMEENGINE_VERSION_MAJOR<<8 | LTHEMEENGINE_VERSION_MINOR) +#define LTHEMEENGINE_VERSION_STR LTHEMEENGINE_STRINGIFY(LTHEMEENGINE_VERSION_MAJOR.QT5CT_VERSION_MINOR) + +#include <QString> +#include <QStringList> + +class lthemeengine +{ +public: + static QString configPath(); + static QString configFile(); + static QStringList iconPaths(); + static QString userStyleSheetPath(); + static QStringList sharedStyleSheetPath(); + static QString userColorSchemePath(); + static QStringList sharedColorSchemePath(); + static QString systemLanguageID(); + +private: + lthemeengine() {} +}; + +#endif // LTHEMEENGINE_H diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine/lthemeengine.pro b/src-qt5/core/lumina-theme-engine/src/lthemeengine/lthemeengine.pro new file mode 100644 index 00000000..cc36ee5b --- /dev/null +++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine/lthemeengine.pro @@ -0,0 +1,55 @@ +include(../../lthemeengine.pri) + +TEMPLATE = app + +QT += widgets + +SOURCES += \ + main.cpp \ + mainwindow.cpp \ + tabpage.cpp \ + appearancepage.cpp \ + fontspage.cpp \ + lthemeengine.cpp \ + paletteeditdialog.cpp \ + iconthemepage.cpp \ + interfacepage.cpp \ + fontconfigdialog.cpp \ + qsspage.cpp \ + qsseditordialog.cpp + +FORMS += \ + mainwindow.ui \ + appearancepage.ui \ + fontspage.ui \ + paletteeditdialog.ui \ + iconthemepage.ui \ + interfacepage.ui \ + fontconfigdialog.ui \ + previewform.ui \ + qsspage.ui \ + qsseditordialog.ui + +HEADERS += \ + mainwindow.h \ + tabpage.h \ + appearancepage.h \ + fontspage.h \ + lthemeengine.h \ + paletteeditdialog.h \ + iconthemepage.h \ + interfacepage.h \ + fontconfigdialog.h \ + qsspage.h \ + qsseditordialog.h + +!equals (DISABLE_WIDGETS,1) { + DEFINES += USE_WIDGETS +} + +target.path = $$BINDIR + +desktop.files = lthemeengine.desktop +desktop.path = $$DATADIR/applications + +INSTALLS += target desktop diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine/main.cpp b/src-qt5/core/lumina-theme-engine/src/lthemeengine/main.cpp new file mode 100644 index 00000000..1961d17d --- /dev/null +++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine/main.cpp @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2014-2017, Ilya Kotov <forkotov02@hotmail.ru> + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include <QApplication> +#include <QLibraryInfo> +#include <QLocale> +#include "lthemeengine.h" +#include <QTranslator> +#include <QMessageBox> +#include <QProcessEnvironment> +#include <QStyleFactory> +#include "mainwindow.h" + +int main(int argc, char **argv) +{ + QApplication app(argc, argv); + QTranslator translator; + QString locale = lthemeengine::systemLanguageID(); + translator.load(QString(":/lthemeengine_") + locale); + app.installTranslator(&translator); + + QTranslator qt_translator; + qt_translator.load(QLibraryInfo::location (QLibraryInfo::TranslationsPath) + "/qtbase_" + locale); + app.installTranslator(&qt_translator); + + qDebug("Configuration path: %s", qPrintable(lthemeengine::configPath())); + qDebug("Shared QSS path: %s", qPrintable(lthemeengine::sharedStyleSheetPath().join(", "))); + + //checking environment + QStringList errorMessages; + QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); + + if(env.contains("QT_STYLE_OVERRIDE")) + { + errorMessages << app.translate("main", "Please remove the <b>QT_STYLE_OVERRIDE</b> environment variable"); + } + + if(env.value("QT_QPA_PLATFORMTHEME") != "lthemeengine") + { + errorMessages << app.translate("main", "The <b>QT_QPA_PLATFORMTHEME</b> environment " + "variable is not set correctly"); + } + + if(!QStyleFactory::keys().contains("lthemeengine-style")) + { + errorMessages << app.translate("main", "Unable to find <b>liblthemeengine-style.so</b>"); + } + + if(!errorMessages.isEmpty()) + { + QMessageBox::critical(0, app.translate("main", "Error"), errorMessages.join("<br><br>")); + return 0; + } + + MainWindow w; + w.show(); + + return app.exec(); +} diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine/mainwindow.cpp b/src-qt5/core/lumina-theme-engine/src/lthemeengine/mainwindow.cpp new file mode 100644 index 00000000..ed658e2e --- /dev/null +++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine/mainwindow.cpp @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2014-2017, Ilya Kotov <forkotov02@hotmail.ru> + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include <QApplication> +#include <QSettings> +#include "lthemeengine.h" +#include "mainwindow.h" +#include "appearancepage.h" +#include "fontspage.h" +#include "iconthemepage.h" +#include "interfacepage.h" +#include "qsspage.h" +#include "ui_mainwindow.h" + +MainWindow::MainWindow(QWidget *parent) : + QWidget(parent), + m_ui(new Ui::MainWindow) +{ + m_ui->setupUi(this); + m_ui->tabWidget->addTab(new AppearancePage(this), tr("Appearance")); + m_ui->tabWidget->addTab(new FontsPage(this), tr("Fonts")); + m_ui->tabWidget->addTab(new IconThemePage(this), tr("Icon Theme")); + m_ui->tabWidget->addTab(new InterfacePage(this), tr("Interface")); +#ifdef USE_WIDGETS + m_ui->tabWidget->addTab(new QSSPage(this), tr("Style Sheets")); +#endif + + QSettings settings(lthemeengine::configFile(), QSettings::IniFormat); + restoreGeometry(settings.value("SettingsWindow/geometry").toByteArray()); + + setWindowIcon(QIcon::fromTheme("preferences-desktop-theme")); + + m_ui->versionLabel->setText(tr("Version: %1").arg(LTHEMEENGINE_VERSION_STR)); +} + +MainWindow::~MainWindow() +{ + delete m_ui; +} + +void MainWindow::closeEvent(QCloseEvent *) +{ + QSettings settings(lthemeengine::configFile(), QSettings::IniFormat); + settings.setValue("SettingsWindow/geometry", saveGeometry()); +} + +void MainWindow::on_buttonBox_clicked(QAbstractButton *button) +{ + int id = m_ui->buttonBox->standardButton(button); + if(id == QDialogButtonBox::Ok || id == QDialogButtonBox::Apply) + { + for(int i = 0; i < m_ui->tabWidget->count(); ++i) + { + TabPage *p = qobject_cast<TabPage*>(m_ui->tabWidget->widget(i)); + if(p) + p->writeSettings(); + } + } + + if(id == QDialogButtonBox::Ok || id == QDialogButtonBox::Cancel) + { + close(); + qApp->quit(); + } +} diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine/mainwindow.h b/src-qt5/core/lumina-theme-engine/src/lthemeengine/mainwindow.h new file mode 100644 index 00000000..f532141c --- /dev/null +++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine/mainwindow.h @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2014-2017, Ilya Kotov <forkotov02@hotmail.ru> + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include <QWidget> + +class QAbstractButton; + +namespace Ui { +class MainWindow; +} + +class MainWindow : public QWidget +{ + Q_OBJECT + +public: + explicit MainWindow(QWidget *parent = 0); + ~MainWindow(); + +private slots: + void on_buttonBox_clicked(QAbstractButton *button); + +private: + void closeEvent(QCloseEvent *); + + Ui::MainWindow *m_ui; +}; + +#endif // MAINWINDOW_H diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine/mainwindow.ui b/src-qt5/core/lumina-theme-engine/src/lthemeengine/mainwindow.ui new file mode 100644 index 00000000..5bdab6d7 --- /dev/null +++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine/mainwindow.ui @@ -0,0 +1,47 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>MainWindow</class> + <widget class="QWidget" name="MainWindow"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>438</width> + <height>374</height> + </rect> + </property> + <property name="windowTitle"> + <string>Qt5 Configuration Tool</string> + </property> + <layout class="QGridLayout" name="gridLayout"> + <property name="leftMargin"> + <number>6</number> + </property> + <property name="rightMargin"> + <number>6</number> + </property> + <property name="bottomMargin"> + <number>6</number> + </property> + <item row="0" column="0" colspan="2"> + <widget class="QTabWidget" name="tabWidget"/> + </item> + <item row="1" column="0"> + <widget class="QLabel" name="versionLabel"> + <property name="text"> + <string notr="true">...</string> + </property> + </widget> + </item> + <item row="1" column="1"> + <widget class="QDialogButtonBox" name="buttonBox"> + <property name="standardButtons"> + <set>QDialogButtonBox::Apply|QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> + </property> + </widget> + </item> + </layout> + </widget> + <resources/> + <connections/> +</ui> diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine/paletteeditdialog.cpp b/src-qt5/core/lumina-theme-engine/src/lthemeengine/paletteeditdialog.cpp new file mode 100644 index 00000000..0f8fcf66 --- /dev/null +++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine/paletteeditdialog.cpp @@ -0,0 +1,146 @@ +/* + * Copyright (c) 2014-2017, Ilya Kotov <forkotov02@hotmail.ru> + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include <QPalette> +#include <QColorDialog> +#include <QSettings> +#include "lthemeengine.h" +#include "paletteeditdialog.h" +#include "ui_paletteeditdialog.h" + +PaletteEditDialog::PaletteEditDialog(const QPalette &palette, QStyle *currentStyle, QWidget *parent) : + QDialog(parent), + m_ui(new Ui::PaletteEditDialog) +{ + m_currentStyle = currentStyle; + m_ui->setupUi(this); + m_ui->tableWidget->setColumnCount(3); + m_ui->tableWidget->setRowCount(QPalette::NColorRoles); + m_ui->tableWidget->verticalHeader()->setDefaultSectionSize(fontMetrics().lineSpacing() + 10); + m_ui->tableWidget->verticalHeader()->setSectionResizeMode(QHeaderView::Fixed); + m_ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); + + QStringList labels; + labels << tr("Active") << tr("Inactive") << tr("Disabled"); + m_ui->tableWidget->setHorizontalHeaderLabels(labels); + setPalette(palette); + + QSettings settings(lthemeengine::configFile(), QSettings::IniFormat); + restoreGeometry(settings.value("PaletteEditor/geometry").toByteArray()); +} + +PaletteEditDialog::~PaletteEditDialog() +{ + delete m_ui; +} + +QPalette PaletteEditDialog::selectedPalette() const +{ + QPalette palette; + for(int i = 0; i < QPalette::NColorRoles; i++) + { + palette.setBrush(QPalette::Active, QPalette::ColorRole(i), m_ui->tableWidget->item(i,0)->backgroundColor()); + palette.setBrush(QPalette::Inactive, QPalette::ColorRole(i), m_ui->tableWidget->item(i,1)->backgroundColor()); + palette.setBrush(QPalette::Disabled, QPalette::ColorRole(i), m_ui->tableWidget->item(i,2)->backgroundColor()); + } + return palette; +} + +void PaletteEditDialog::setPalette(const QPalette &palette) +{ + for(int i = 0; i < QPalette::NColorRoles; i++) + { + if(!m_ui->tableWidget->item(i,0)) + m_ui->tableWidget->setItem(i, 0, new QTableWidgetItem()); + if(!m_ui->tableWidget->item(i,1)) + m_ui->tableWidget->setItem(i, 1, new QTableWidgetItem()); + if(!m_ui->tableWidget->item(i,2)) + m_ui->tableWidget->setItem(i, 2, new QTableWidgetItem()); + + m_ui->tableWidget->item(i,0)->setBackgroundColor(palette.color(QPalette::Active, QPalette::ColorRole(i))); + m_ui->tableWidget->item(i,1)->setBackgroundColor(palette.color(QPalette::Inactive, QPalette::ColorRole(i))); + m_ui->tableWidget->item(i,2)->setBackgroundColor(palette.color(QPalette::Disabled, QPalette::ColorRole(i))); + } + + QStringList labels; + labels << tr("Window text") << tr("Button background") << tr("Bright") << tr("Less bright") << tr("Dark") << tr("Less dark") + << tr("Normal text") << tr("Bright text") << tr("Button text") << tr("Normal background") << tr("Window") << tr("Shadow") + << tr("Highlight") << tr("Highlighted text") << tr("Link") << tr("Visited link") + << tr("Alternate background") << tr("Default") << tr("Tooltip background") << tr("Tooltip text"); + m_ui->tableWidget->setVerticalHeaderLabels(labels); +} + +void PaletteEditDialog::hideEvent(QHideEvent *) +{ + QSettings settings(lthemeengine::configFile(), QSettings::IniFormat); + settings.setValue("PaletteEditor/geometry", saveGeometry()); +} + +void PaletteEditDialog::on_tableWidget_itemClicked(QTableWidgetItem *item) +{ + QColor color = QColorDialog::getColor(item->backgroundColor(), this, tr("Select Color")); + if(color.isValid()) + { + item->setBackgroundColor(color); + emit paletteChanged(selectedPalette()); + } +} + +void PaletteEditDialog::on_resetPaletteButton_clicked() +{ + setPalette(m_currentStyle->standardPalette()); + emit paletteChanged(selectedPalette()); +} + +void PaletteEditDialog::on_buildInactiveButton_clicked() +{ + QPalette palette = selectedPalette(); + for(int i = 0; i < QPalette::NColorRoles; i++) + { + palette.setColor(QPalette::Inactive, QPalette::ColorRole(i), + palette.color(QPalette::Active, QPalette::ColorRole(i))); + } + setPalette(palette); + emit paletteChanged(selectedPalette()); +} + +void PaletteEditDialog::on_buildDisabledButton_clicked() +{ + QPalette palette = selectedPalette(); + for(int i = 0; i < QPalette::NColorRoles; i++) + { + palette.setColor(QPalette::Disabled, QPalette::ColorRole(i), + palette.color(QPalette::Active, QPalette::ColorRole(i))); + } + palette.setColor(QPalette::Disabled, QPalette::ButtonText, Qt::darkGray); + palette.setColor(QPalette::Disabled, QPalette::WindowText, Qt::darkGray); + palette.setColor(QPalette::Disabled, QPalette::Text, Qt::darkGray); + palette.setColor(QPalette::Disabled, QPalette::HighlightedText, Qt::darkGray); + setPalette(palette); + emit paletteChanged(selectedPalette()); +} diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine/paletteeditdialog.h b/src-qt5/core/lumina-theme-engine/src/lthemeengine/paletteeditdialog.h new file mode 100644 index 00000000..c8691a3c --- /dev/null +++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine/paletteeditdialog.h @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2014-2017, Ilya Kotov <forkotov02@hotmail.ru> + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef PALETTEEDITDIALOG_H +#define PALETTEEDITDIALOG_H + +#include <QDialog> +#include <QPalette> + +class QTableWidgetItem; +class QStyle; + +namespace Ui { +class PaletteEditDialog; +} + +class PaletteEditDialog : public QDialog +{ + Q_OBJECT + +public: + explicit PaletteEditDialog(const QPalette &palette, QStyle *currentStyle, QWidget *parent = 0); + ~PaletteEditDialog(); + + QPalette selectedPalette() const; + +signals: + void paletteChanged(const QPalette &p); + +private slots: + void on_tableWidget_itemClicked(QTableWidgetItem *item); + void on_resetPaletteButton_clicked(); + void on_buildInactiveButton_clicked(); + void on_buildDisabledButton_clicked(); + +private: + void setPalette(const QPalette &palette); + void hideEvent(QHideEvent *); + Ui::PaletteEditDialog *m_ui; + QStyle *m_currentStyle; +}; + +#endif // PALETTEEDITDIALOG_H diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine/paletteeditdialog.ui b/src-qt5/core/lumina-theme-engine/src/lthemeengine/paletteeditdialog.ui new file mode 100644 index 00000000..6ca6350f --- /dev/null +++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine/paletteeditdialog.ui @@ -0,0 +1,120 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>PaletteEditDialog</class> + <widget class="QDialog" name="PaletteEditDialog"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>631</width> + <height>529</height> + </rect> + </property> + <property name="windowTitle"> + <string>Palette Editor</string> + </property> + <layout class="QGridLayout" name="gridLayout"> + <property name="leftMargin"> + <number>6</number> + </property> + <property name="rightMargin"> + <number>6</number> + </property> + <property name="bottomMargin"> + <number>6</number> + </property> + <item row="3" column="0"> + <widget class="QPushButton" name="buildInactiveButton"> + <property name="text"> + <string>Build inactive palette</string> + </property> + </widget> + </item> + <item row="3" column="1"> + <widget class="QPushButton" name="buildDisabledButton"> + <property name="text"> + <string>Build disabled palette</string> + </property> + </widget> + </item> + <item row="3" column="3"> + <spacer name="horizontalSpacer"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>117</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item row="9" column="0" colspan="5"> + <widget class="QDialogButtonBox" name="buttonBox"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="standardButtons"> + <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> + </property> + </widget> + </item> + <item row="0" column="0" colspan="5"> + <widget class="QTableWidget" name="tableWidget"> + <property name="editTriggers"> + <set>QAbstractItemView::NoEditTriggers</set> + </property> + <property name="selectionMode"> + <enum>QAbstractItemView::NoSelection</enum> + </property> + <property name="columnCount"> + <number>0</number> + </property> + </widget> + </item> + <item row="3" column="2"> + <widget class="QPushButton" name="resetPaletteButton"> + <property name="text"> + <string>Reset palette</string> + </property> + </widget> + </item> + </layout> + </widget> + <resources/> + <connections> + <connection> + <sender>buttonBox</sender> + <signal>accepted()</signal> + <receiver>PaletteEditDialog</receiver> + <slot>accept()</slot> + <hints> + <hint type="sourcelabel"> + <x>248</x> + <y>254</y> + </hint> + <hint type="destinationlabel"> + <x>157</x> + <y>274</y> + </hint> + </hints> + </connection> + <connection> + <sender>buttonBox</sender> + <signal>rejected()</signal> + <receiver>PaletteEditDialog</receiver> + <slot>reject()</slot> + <hints> + <hint type="sourcelabel"> + <x>316</x> + <y>260</y> + </hint> + <hint type="destinationlabel"> + <x>286</x> + <y>274</y> + </hint> + </hints> + </connection> + </connections> +</ui> diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine/previewform.ui b/src-qt5/core/lumina-theme-engine/src/lthemeengine/previewform.ui new file mode 100644 index 00000000..508201db --- /dev/null +++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine/previewform.ui @@ -0,0 +1,76 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>PreviewForm</class> + <widget class="QWidget" name="PreviewForm"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>281</width> + <height>130</height> + </rect> + </property> + <property name="windowTitle"> + <string>Preview Window</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <widget class="QTabWidget" name="tabWidget"> + <property name="currentIndex"> + <number>0</number> + </property> + <widget class="QWidget" name="tab_3"> + <attribute name="title"> + <string>Tab 1</string> + </attribute> + <layout class="QGridLayout" name="gridLayout_4"> + <item row="1" column="0"> + <widget class="QPushButton" name="pushButton_3"> + <property name="text"> + <string>PushButton</string> + </property> + </widget> + </item> + <item row="1" column="1" colspan="2"> + <widget class="QProgressBar" name="progressBar_2"> + <property name="value"> + <number>24</number> + </property> + </widget> + </item> + <item row="0" column="0"> + <widget class="QLineEdit" name="lineEdit_2"/> + </item> + <item row="0" column="1" colspan="2"> + <widget class="QSpinBox" name="spinBox_2"/> + </item> + </layout> + </widget> + <widget class="QWidget" name="tab_4"> + <attribute name="title"> + <string>Tab 2</string> + </attribute> + <layout class="QVBoxLayout" name="verticalLayout_3"> + <item> + <widget class="QRadioButton" name="radioButton_7"> + <property name="text"> + <string>RadioButton</string> + </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="checkBox_2"> + <property name="text"> + <string>CheckBox</string> + </property> + </widget> + </item> + </layout> + </widget> + </widget> + </item> + </layout> + </widget> + <resources/> + <connections/> +</ui> diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine/qsseditordialog.cpp b/src-qt5/core/lumina-theme-engine/src/lthemeengine/qsseditordialog.cpp new file mode 100644 index 00000000..b92b5619 --- /dev/null +++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine/qsseditordialog.cpp @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2014-2017, Ilya Kotov <forkotov02@hotmail.ru> + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include <QFile> +#include <QSettings> +#include "lthemeengine.h" +#include "qsseditordialog.h" +#include "ui_qsseditordialog.h" + +QSSEditorDialog::QSSEditorDialog(const QString &filePath, QWidget *parent) : + QDialog(parent), + m_ui(new Ui::QSSEditorDialog) +{ + m_ui->setupUi(this); + m_filePath = filePath; + + QFile file(filePath); + file.open(QIODevice::ReadOnly); + m_ui->textEdit->setPlainText(QString::fromUtf8(file.readAll())); + setWindowTitle(tr("%1 - Style Sheet Editor").arg(file.fileName())); + + QSettings settings(lthemeengine::configFile(), QSettings::IniFormat); + restoreGeometry(settings.value("QSSEditor/geometry").toByteArray()); +} + +QSSEditorDialog::~QSSEditorDialog() +{ + delete m_ui; +} + +void QSSEditorDialog::save() +{ + QFile file(m_filePath); + file.open(QIODevice::WriteOnly); + file.write(m_ui->textEdit->toPlainText().toUtf8()); +} + +void QSSEditorDialog::hideEvent(QHideEvent *) +{ + QSettings settings(lthemeengine::configFile(), QSettings::IniFormat); + settings.setValue("QSSEditor/geometry", saveGeometry()); +} + +void QSSEditorDialog::on_buttonBox_clicked(QAbstractButton *button) +{ + QDialogButtonBox::StandardButton id = m_ui->buttonBox->standardButton(button); + if(id == QDialogButtonBox::Ok) + { + save(); + accept(); + } + else if(id == QDialogButtonBox::Save) + { + save(); + } + else + { + reject(); + } +} diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine/qsseditordialog.h b/src-qt5/core/lumina-theme-engine/src/lthemeengine/qsseditordialog.h new file mode 100644 index 00000000..e2a6c773 --- /dev/null +++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine/qsseditordialog.h @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2014-2017, Ilya Kotov <forkotov02@hotmail.ru> + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef QSSEDITORDIALOG_H +#define QSSEDITORDIALOG_H + +#include <QDialog> +#include <QString> + +namespace Ui { +class QSSEditorDialog; +} + +class QAbstractButton; + +class QSSEditorDialog : public QDialog +{ + Q_OBJECT + +public: + explicit QSSEditorDialog(const QString &filePath, QWidget *parent = 0); + ~QSSEditorDialog(); + +private slots: + void on_buttonBox_clicked(QAbstractButton *button); + +private: + void save(); + void hideEvent(QHideEvent *); + Ui::QSSEditorDialog *m_ui; + QString m_filePath; +}; + +#endif // QSSEDITORDIALOG_H diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine/qsseditordialog.ui b/src-qt5/core/lumina-theme-engine/src/lthemeengine/qsseditordialog.ui new file mode 100644 index 00000000..7627b4d4 --- /dev/null +++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine/qsseditordialog.ui @@ -0,0 +1,47 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>QSSEditorDialog</class> + <widget class="QDialog" name="QSSEditorDialog"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>643</width> + <height>499</height> + </rect> + </property> + <property name="windowTitle"> + <string>Style Sheet Editor</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <property name="leftMargin"> + <number>6</number> + </property> + <property name="rightMargin"> + <number>6</number> + </property> + <property name="bottomMargin"> + <number>6</number> + </property> + <item> + <widget class="QTextEdit" name="textEdit"> + <property name="acceptRichText"> + <bool>false</bool> + </property> + </widget> + </item> + <item> + <widget class="QDialogButtonBox" name="buttonBox"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="standardButtons"> + <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok|QDialogButtonBox::Save</set> + </property> + </widget> + </item> + </layout> + </widget> + <resources/> + <connections/> +</ui> diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine/qsspage.cpp b/src-qt5/core/lumina-theme-engine/src/lthemeengine/qsspage.cpp new file mode 100644 index 00000000..10f21f48 --- /dev/null +++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine/qsspage.cpp @@ -0,0 +1,232 @@ +/* + * Copyright (c) 2014-2017, Ilya Kotov <forkotov02@hotmail.ru> + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include <QSettings> +#include <QDir> +#include <QInputDialog> +#include <QMessageBox> +#include <QFile> +#include <QMenu> +#include "lthemeengine.h" +#include "qsseditordialog.h" +#include "qsspage.h" +#include "ui_qsspage.h" + +#define QSS_FULL_PATH_ROLE (Qt::ItemDataRole(Qt::UserRole)) +#define QSS_WRITABLE_ROLE (Qt::ItemDataRole(Qt::UserRole + 1)) + +QSSPage::QSSPage(QWidget *parent) : + TabPage(parent), + m_ui(new Ui::QSSPage) +{ + m_ui->setupUi(this); + QDir("/").mkpath(lthemeengine::userStyleSheetPath()); + + m_menu = new QMenu(this); + m_menu->addAction(QIcon::fromTheme("accessories-text-editor"), tr("Edit"), this, SLOT(on_editButton_clicked())); + m_menu->addAction(tr("Rename"), this, SLOT(on_renameButton_clicked())); + m_menu->addSeparator(); + m_menu->addAction(QIcon::fromTheme("edit-delete"), tr("Remove"), this, SLOT(on_removeButton_clicked())); + + readSettings(); + + //icons + m_ui->createButton->setIcon(QIcon::fromTheme("document-new")); + m_ui->editButton->setIcon(QIcon::fromTheme("accessories-text-editor")); + m_ui->removeButton->setIcon(QIcon::fromTheme("edit-delete")); +} + +QSSPage::~QSSPage() +{ + delete m_ui; +} + +void QSSPage::writeSettings() +{ + QStringList styleSheets; + QSettings settings(lthemeengine::configFile(), QSettings::IniFormat); + + for(int i = 0; i < m_ui->qssListWidget->count(); ++i) + { + QListWidgetItem *item = m_ui->qssListWidget->item(i); + if(item->checkState() == Qt::Checked) + styleSheets << item->data(QSS_FULL_PATH_ROLE).toString(); + } + + settings.setValue("Interface/stylesheets", styleSheets); +} + +void QSSPage::on_qssListWidget_currentItemChanged(QListWidgetItem *current, QListWidgetItem *) +{ + if(current) + { + m_ui->editButton->setEnabled(current->data(QSS_WRITABLE_ROLE).toBool()); + m_ui->removeButton->setEnabled(current->data(QSS_WRITABLE_ROLE).toBool()); + m_ui->renameButton->setEnabled(current->data(QSS_WRITABLE_ROLE).toBool()); + } + else + { + m_ui->editButton->setEnabled(false); + m_ui->removeButton->setEnabled(false); + m_ui->renameButton->setEnabled(false); + } +} + +void QSSPage::on_createButton_clicked() +{ + QString name = QInputDialog::getText(this, tr("Enter Style Sheet Name"), tr("File name:")); + if(name.isEmpty()) + return; + + if(!name.endsWith(".qss", Qt::CaseInsensitive)) + name.append(".qss"); + + QString filePath = lthemeengine::userStyleSheetPath() + name; + + if(QFile::exists(filePath)) + { + QMessageBox::warning(this, tr("Error"), tr("The file \"%1\" already exists").arg(filePath)); + return; + } + + //creating empty file + QFile file(filePath); + file.open(QIODevice::WriteOnly); + file.close(); + + //creating item + QFileInfo info(filePath); + QListWidgetItem *item = new QListWidgetItem(info.fileName(), m_ui->qssListWidget); + item->setToolTip(info.filePath()); + item->setData(QSS_FULL_PATH_ROLE, info.filePath()); + item->setData(QSS_WRITABLE_ROLE, info.isWritable()); + item->setCheckState(Qt::Unchecked); +} + +void QSSPage::on_editButton_clicked() +{ + QListWidgetItem *item = m_ui->qssListWidget->currentItem(); + if(item) + { + QSSEditorDialog dialog(item->data(QSS_FULL_PATH_ROLE).toString(), this); + dialog.exec(); + } +} + +void QSSPage::on_removeButton_clicked() +{ + QListWidgetItem *item = m_ui->qssListWidget->currentItem(); + if(!item) + return; + + int button = QMessageBox::question(this, tr("Confirm Remove"), + tr("Are you sure you want to remove style sheet \"%1\"?") + .arg(item->text()), + QMessageBox::Yes | QMessageBox::No); + if(button == QMessageBox::Yes) + { + QFile::remove(item->data(QSS_FULL_PATH_ROLE).toString()); + delete item; + } +} + +void QSSPage::readSettings() +{ + //load stylesheets + m_ui->qssListWidget->clear(); + findStyleSheets(lthemeengine::userStyleSheetPath()); + findStyleSheets(lthemeengine::sharedStyleSheetPath().join(", ")); + + QSettings settings(lthemeengine::configFile(), QSettings::IniFormat); + QStringList styleSheets = settings.value("Interface/stylesheets").toStringList(); + for(int i = 0; i < m_ui->qssListWidget->count(); ++i) + { + QListWidgetItem *item = m_ui->qssListWidget->item(i); + if(styleSheets.contains(item->data(QSS_FULL_PATH_ROLE).toString())) + item->setCheckState(Qt::Checked); + else + item->setCheckState(Qt::Unchecked); + } +} + +void QSSPage::findStyleSheets(const QString &path) +{ + QDir dir(path); + dir.setFilter(QDir::Files); + dir.setNameFilters(QStringList() << "*.qss"); + + foreach (QFileInfo info, dir.entryInfoList()) + { + QListWidgetItem *item = new QListWidgetItem(info.fileName(), m_ui->qssListWidget); + item->setToolTip(info.filePath()); + item->setData(QSS_FULL_PATH_ROLE, info.filePath()); + item->setData(QSS_WRITABLE_ROLE, info.isWritable()); + } +} + +void QSSPage::on_renameButton_clicked() +{ + QListWidgetItem *item = m_ui->qssListWidget->currentItem(); + if(!item) + return; + + QString name = QInputDialog::getText(this, tr("Rename Style Sheet"), tr("Style sheet name:"), + QLineEdit::Normal, item->text(), 0); + if(name.isEmpty()) + return; + + if(!m_ui->qssListWidget->findItems(name, Qt::MatchExactly).isEmpty()) + { + QMessageBox::warning(this, tr("Error"), tr("The style sheet \"%1\" already exists").arg(name)); + return; + } + + if(!name.endsWith(".qss", Qt::CaseInsensitive)) + name.append(".qss"); + + QString newPath = lthemeengine::userStyleSheetPath() + name; + + if(!QFile::rename(item->data(QSS_FULL_PATH_ROLE).toString(), newPath)) + { + QMessageBox::warning(this, tr("Error"), tr("Unable to rename file")); + return; + } + + item->setText(name); + item->setData(QSS_FULL_PATH_ROLE, newPath); + item->setToolTip(newPath); +} + +void QSSPage::on_qssListWidget_customContextMenuRequested(const QPoint &pos) +{ + QListWidgetItem *item = m_ui->qssListWidget->currentItem(); + if(item && item->data(QSS_WRITABLE_ROLE).toBool()) + { + m_menu->exec(m_ui->qssListWidget->viewport()->mapToGlobal(pos)); + } +} diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine/qsspage.h b/src-qt5/core/lumina-theme-engine/src/lthemeengine/qsspage.h new file mode 100644 index 00000000..665f68c0 --- /dev/null +++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine/qsspage.h @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2014-2017, Ilya Kotov <forkotov02@hotmail.ru> + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef QSSPAGE_H +#define QSSPAGE_H + +#include "tabpage.h" + +namespace Ui { +class QSSPage; +} + +class QListWidgetItem; +class QMenu; + +class QSSPage : public TabPage +{ + Q_OBJECT + +public: + explicit QSSPage(QWidget *parent = 0); + ~QSSPage(); + + void writeSettings(); + +private slots: + void on_qssListWidget_currentItemChanged(QListWidgetItem *current, QListWidgetItem *); + void on_createButton_clicked(); + void on_editButton_clicked(); + void on_removeButton_clicked(); + void on_renameButton_clicked(); + void on_qssListWidget_customContextMenuRequested(const QPoint &pos); + +private: + void readSettings(); + void findStyleSheets(const QString &path); + Ui::QSSPage *m_ui; + QMenu *m_menu; +}; + +#endif // QSSPAGE_H diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine/qsspage.ui b/src-qt5/core/lumina-theme-engine/src/lthemeengine/qsspage.ui new file mode 100644 index 00000000..124b4dc6 --- /dev/null +++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine/qsspage.ui @@ -0,0 +1,84 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>QSSPage</class> + <widget class="QWidget" name="QSSPage"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>483</width> + <height>320</height> + </rect> + </property> + <property name="windowTitle"> + <string notr="true">Style Sheet Editor</string> + </property> + <layout class="QGridLayout" name="gridLayout"> + <item row="1" column="0"> + <widget class="QPushButton" name="createButton"> + <property name="enabled"> + <bool>true</bool> + </property> + <property name="text"> + <string>Create</string> + </property> + </widget> + </item> + <item row="1" column="3"> + <widget class="QPushButton" name="removeButton"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="text"> + <string>Remove</string> + </property> + </widget> + </item> + <item row="1" column="5"> + <spacer name="horizontalSpacer"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>189</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item row="0" column="0" colspan="6"> + <widget class="QListWidget" name="qssListWidget"> + <property name="contextMenuPolicy"> + <enum>Qt::CustomContextMenu</enum> + </property> + <property name="alternatingRowColors"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="1" column="1"> + <widget class="QPushButton" name="editButton"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="text"> + <string>Edit</string> + </property> + </widget> + </item> + <item row="1" column="2"> + <widget class="QPushButton" name="renameButton"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="text"> + <string>Rename</string> + </property> + </widget> + </item> + </layout> + </widget> + <resources/> + <connections/> +</ui> diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine/tabpage.cpp b/src-qt5/core/lumina-theme-engine/src/lthemeengine/tabpage.cpp new file mode 100644 index 00000000..251ce024 --- /dev/null +++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine/tabpage.cpp @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2014-2017, Ilya Kotov <forkotov02@hotmail.ru> + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "tabpage.h" + +TabPage::TabPage(QWidget *parent) : QWidget(parent) +{ +} diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine/tabpage.h b/src-qt5/core/lumina-theme-engine/src/lthemeengine/tabpage.h new file mode 100644 index 00000000..ac285054 --- /dev/null +++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine/tabpage.h @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2014-2017, Ilya Kotov <forkotov02@hotmail.ru> + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef TABPAGE_H +#define TABPAGE_H + +#include <QWidget> + +class TabPage : public QWidget +{ + Q_OBJECT +public: + explicit TabPage(QWidget *parent = 0); + + virtual void writeSettings() = 0; +}; + +#endif // TABPAGE_H diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/DEPENDENCIES b/src-qt5/core/lumina-wm-INCOMPLETE/DEPENDENCIES deleted file mode 100644 index fa0ce486..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/DEPENDENCIES +++ /dev/null @@ -1,17 +0,0 @@ -Most dependencies required to build Lumina are listed in the -DEPENDENCIES file in the directory above this one. The following -are dependencies specific to Lumina's window manager. - - -FreeBSD/TrueOS -======================= - - - - -Linux (Debian/Ubuntu) -======================= - -libxcb-screensaver0-dev - - diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/GlobalDefines.h b/src-qt5/core/lumina-wm-INCOMPLETE/GlobalDefines.h deleted file mode 100644 index 3ec278ac..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/GlobalDefines.h +++ /dev/null @@ -1,74 +0,0 @@ -//=========================================== -// Lumina-DE source code -// Copyright (c) 2015, Ken Moore -// Available under the 3-clause BSD license -// See the LICENSE file for full details -//=========================================== -// Global defines and enumerations for the window manager -//=========================================== -#ifndef _LUMINA_WINDOW_MANAGER_GLOBAL_DEFINES_H -#define _LUMINA_WINDOW_MANAGER_GLOBAL_DEFINES_H - -//Qt includes -#include <QObject> -#include <QFrame> -#include <QLabel> -#include <QToolButton> -#include <QMenu> -#include <QHBoxLayout> -#include <QMouseEvent> -#include <QAction> -#include <QPoint> -#include <QFile> -#include <QDir> -#include <QString> -#include <QTextStream> -#include <QUrl> -#include <QDebug> -#include <QStringList> -#include <QAbstractNativeEventFilter> -#include <QList> -#include <QX11Info> -#include <QCoreApplication> -#include <QPropertyAnimation> -#include <QAnimationGroup> -#include <QParallelAnimationGroup> -#include <QWindow> -#include <QWidget> -#include <QBackingStore> -#include <QPaintEvent> -#include <QPainter> -#include <QSettings> -#include <QHostInfo> -#include <QDesktopWidget> -#include <QStyleOption> -#include <QThread> - -// libLumina includes -#include <LuminaX11.h> -#include <LuminaXDG.h> -#include <LuminaOS.h> -#include <LuminaThemes.h> -#include <LuminaUtils.h> -#include <LuminaSingleApplication.h> - -//XCB Includes -#include <xcb/xcb.h> -#include <xcb/xproto.h> -#include <xcb/damage.h> -#include <xcb/xcb_atom.h> -#include <xcb/xcb_aux.h> //included in libxcb-util.so - -#define ANIMTIME 80 //animation time in milliseconds -//Global flags/structures -namespace LWM{ - //Flags/enumerations - enum WindowAction{MoveResize, Show, Hide, TryClose, Closed, WA_NONE}; - - //Data structures - extern LXCB *SYSTEM; -}; - - - -#endif diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/LLockScreen.cpp b/src-qt5/core/lumina-wm-INCOMPLETE/LLockScreen.cpp deleted file mode 100644 index 4cc6d68b..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/LLockScreen.cpp +++ /dev/null @@ -1,102 +0,0 @@ -//=========================================== -// Lumina-DE source code -// Copyright (c) 2015, Ken Moore -// Available under the 3-clause BSD license -// See the LICENSE file for full details -//=========================================== -#include "LLockScreen.h" -#include "ui_LLockScreen.h" - -#include <unistd.h> - -#define NUMTRIES 3 -#define WAITMINS 1 -#define DEBUG 1 - -LLockScreen::LLockScreen(QWidget *parent) : QWidget(parent), ui(new Ui::LLockScreen()){ - ui->setupUi(this); - waittime = new QTimer(this); - waittime->setInterval(WAITMINS*60000); //(too many attempts in short time) - waittime->setSingleShot(true); - refreshtime = new QTimer(this); //timer to update the wait time display - refreshtime->setInterval(6000); //6 seconds (1/10 second) - - connect(ui->tool_unlock, SIGNAL(clicked()), this, SLOT(TryUnlock()) ); - connect(ui->line_password, SIGNAL(returnPressed()), this, SLOT(TryUnlock()) ); - connect(ui->line_password, SIGNAL(textEdited(QString)), this, SIGNAL(InputDetected()) ); - connect(ui->line_password, SIGNAL(cursorPositionChanged(int,int)), this, SIGNAL(InputDetected()) ); - connect(waittime, SIGNAL(timeout()), this, SLOT(aboutToShow()) ); - connect(refreshtime, SIGNAL(timeout()), this, SLOT(UpdateLockInfo()) ); -} - -LLockScreen::~LLockScreen(){ - -} - -void LLockScreen::LoadSystemDetails(){ - //Run every time the screen is initially locked - QString user = QString(getlogin()); - ui->label_username->setText( QString(tr("Locked by: %1")).arg(user) ); - ui->label_hostname->setText( QHostInfo::localHostName() ); - ui->tool_unlock->setIcon( LXDG::findIcon("document-decrypt","") ); - attempts = 0; -} - -void LLockScreen::aboutToHide(){ - //auto-hide timeout - clear display - ui->line_password->clear(); - ui->line_password->clearFocus(); - if(refreshtime->isActive()){ refreshtime->stop(); } -} - -void LLockScreen::aboutToShow(){ - if(!waittime->isActive()){ - ui->label_info->clear(); - this->setEnabled(true); - triesleft = NUMTRIES; //back to initial number of tries - if(refreshtime->isActive()){ refreshtime->stop(); } - }else{ - if(!refreshtime->isActive()){ refreshtime->start(); } - } - UpdateLockInfo(); - ui->line_password->clear(); - ui->line_password->setFocus(); -} - -// ================= -// PRIVATE SLOTS -// ================= -void LLockScreen::UpdateLockInfo(){ - QString info; - /*if(triesleft>0 && triesleft<NUMTRIES ){ - if(triesleft==1){info = tr("1 Attempt Left"); } - else{info = QString(tr("%1 Attempts Left")).arg(QString::number(triesleft)); } - }else*/ - if(waittime->isActive()){ - info = tr("Too Many Failures")+"\n"+ QString(tr("Wait %1 Minutes")).arg( QString::number(qRound(waittime->remainingTime()/6000.0)/10.0) ); - }else if(attempts>0){ info.append("\n"+QString(tr("Failed Attempts: %1")).arg(QString::number(attempts)) ); } - ui->label_info->setText(info); -} - -void LLockScreen::TryUnlock(){ - attempts++; - this->setEnabled(false); - QString pass = ui->line_password->text(); - ui->line_password->clear(); - bool ok = (LUtils::runCmd("lumina-checkpass", QStringList() << pass) == 0); - if(ok){ - emit ScreenUnlocked(); - this->setEnabled(true); - }else{ - triesleft--; - if(triesleft>0){ - this->setEnabled(true); - }else{ - waittime->start(); - refreshtime->start(); - } - ui->line_password->setFocus(); - } - UpdateLockInfo(); - -} diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/LLockScreen.h b/src-qt5/core/lumina-wm-INCOMPLETE/LLockScreen.h deleted file mode 100644 index 040499c1..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/LLockScreen.h +++ /dev/null @@ -1,42 +0,0 @@ -//=========================================== -// Lumina-DE source code -// Copyright (c) 2015, Ken Moore -// Available under the 3-clause BSD license -// See the LICENSE file for full details -//=========================================== -#ifndef _LUMINA_DESKTOP_LOCK_SCREEN_WIDGET_H -#define _LUMINA_DESKTOP_LOCK_SCREEN_WIDGET_H - -#include "GlobalDefines.h" - -namespace Ui{ - class LLockScreen; -}; - -class LLockScreen : public QWidget{ - Q_OBJECT -public: - LLockScreen(QWidget *parent = 0); - ~LLockScreen(); - - void LoadSystemDetails(); //Run right after the screen is initially locked - -public slots: - void aboutToHide(); //auto-hide timeout (can happen multiple times per lock) - void aboutToShow(); //about to be re-shown (can happen multiple times per lock) - -private: - Ui::LLockScreen *ui; - int triesleft, attempts; - QTimer *waittime; - QTimer *refreshtime; - -private slots: - void UpdateLockInfo(); - void TryUnlock(); - -signals: - void ScreenUnlocked(); - void InputDetected(); -}; -#endif diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/LLockScreen.ui b/src-qt5/core/lumina-wm-INCOMPLETE/LLockScreen.ui deleted file mode 100644 index 7f0b45b8..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/LLockScreen.ui +++ /dev/null @@ -1,144 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<ui version="4.0"> - <class>LLockScreen</class> - <widget class="QWidget" name="LLockScreen"> - <property name="geometry"> - <rect> - <x>0</x> - <y>0</y> - <width>289</width> - <height>188</height> - </rect> - </property> - <property name="windowTitle"> - <string>Form</string> - </property> - <layout class="QVBoxLayout" name="verticalLayout_2"> - <property name="spacing"> - <number>0</number> - </property> - <property name="leftMargin"> - <number>0</number> - </property> - <property name="topMargin"> - <number>0</number> - </property> - <property name="rightMargin"> - <number>0</number> - </property> - <property name="bottomMargin"> - <number>0</number> - </property> - <item> - <widget class="QFrame" name="frame_unlock"> - <property name="frameShape"> - <enum>QFrame::NoFrame</enum> - </property> - <property name="frameShadow"> - <enum>QFrame::Raised</enum> - </property> - <layout class="QVBoxLayout" name="verticalLayout"> - <item> - <widget class="QLabel" name="label_hostname"> - <property name="font"> - <font> - <weight>50</weight> - <italic>true</italic> - <bold>false</bold> - <underline>true</underline> - </font> - </property> - <property name="text"> - <string notr="true">hostname</string> - </property> - <property name="alignment"> - <set>Qt::AlignCenter</set> - </property> - </widget> - </item> - <item> - <widget class="QLabel" name="label_username"> - <property name="text"> - <string notr="true">Locked by username</string> - </property> - <property name="alignment"> - <set>Qt::AlignCenter</set> - </property> - </widget> - </item> - <item> - <spacer name="verticalSpacer_3"> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>20</width> - <height>20</height> - </size> - </property> - </spacer> - </item> - <item> - <widget class="QLabel" name="label_info"> - <property name="font"> - <font> - <italic>true</italic> - </font> - </property> - <property name="text"> - <string notr="true"/> - </property> - <property name="alignment"> - <set>Qt::AlignCenter</set> - </property> - <property name="wordWrap"> - <bool>true</bool> - </property> - </widget> - </item> - <item> - <layout class="QVBoxLayout" name="verticalLayout_3"> - <item> - <widget class="QLineEdit" name="line_password"> - <property name="inputMask"> - <string notr="true"/> - </property> - <property name="echoMode"> - <enum>QLineEdit::Password</enum> - </property> - <property name="alignment"> - <set>Qt::AlignCenter</set> - </property> - <property name="placeholderText"> - <string>Password</string> - </property> - </widget> - </item> - <item> - <layout class="QHBoxLayout" name="horizontalLayout"> - <item> - <widget class="QToolButton" name="tool_unlock"> - <property name="focusPolicy"> - <enum>Qt::NoFocus</enum> - </property> - <property name="text"> - <string>Unlock Session</string> - </property> - <property name="toolButtonStyle"> - <enum>Qt::ToolButtonTextBesideIcon</enum> - </property> - </widget> - </item> - </layout> - </item> - </layout> - </item> - </layout> - </widget> - </item> - </layout> - </widget> - <resources/> - <connections/> -</ui> diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/LScreenSaver.cpp b/src-qt5/core/lumina-wm-INCOMPLETE/LScreenSaver.cpp deleted file mode 100644 index 0c92784e..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/LScreenSaver.cpp +++ /dev/null @@ -1,181 +0,0 @@ -//=========================================== -// Lumina-DE source code -// Copyright (c) 2015, Ken Moore -// Available under the 3-clause BSD license -// See the LICENSE file for full details -//=========================================== -#include "LScreenSaver.h" -#include <QScreen> -#include <QApplication> - -#define DEBUG 1 - -LScreenSaver::LScreenSaver() : QWidget(0,Qt::BypassWindowManagerHint | Qt::WindowStaysOnTopHint){ - starttimer = new QTimer(this); - starttimer->setSingleShot(true); - locktimer = new QTimer(this); - locktimer->setSingleShot(true); - hidetimer = new QTimer(this); - hidetimer->setSingleShot(true); - - LOCKER = new LLockScreen(this); - LOCKER->hide(); - settings = new QSettings("lumina-desktop","lumina-screensaver",this); - SSRunning = SSLocked = updating = false; - this->setObjectName("LSCREENSAVERBASE"); - this->setStyleSheet("LScreenSaver#LSCREENSAVERBASE{ background: grey; }"); - this->setMouseTracking(true); - connect(starttimer, SIGNAL(timeout()), this, SLOT(ShowScreenSaver()) ); - connect(locktimer, SIGNAL(timeout()), this, SLOT(LockScreen()) ); - connect(hidetimer, SIGNAL(timeout()), this, SLOT(HideLockScreen()) ); - connect(LOCKER, SIGNAL(ScreenUnlocked()), this, SLOT(SSFinished()) ); - connect(LOCKER, SIGNAL(InputDetected()), this, SLOT(newInputEvent()) ); -} - -LScreenSaver::~LScreenSaver(){ - -} - -bool LScreenSaver::isLocked(){ - return SSLocked; -} - -void LScreenSaver::UpdateTimers(){ - //This is generally used for programmatic changes - if(starttimer->isActive()){ starttimer->stop();} - if(locktimer->isActive()){ locktimer->stop(); } - if(hidetimer->isActive()){ hidetimer->stop(); } - - if(!SSRunning && !SSLocked && (starttimer->interval() > 1000) ){ starttimer->start(); } //time to SS start - else if( SSRunning && !SSLocked && (locktimer->interval() > 1000 ) ){ locktimer->start(); } //time to lock - else if( !SSRunning && SSLocked ){ hidetimer->start(); } //time to hide lock screen -} - -// =========== -// PUBLIC SLOTS -// =========== -void LScreenSaver::start(){ - reloadSettings(); //setup all the initial time frames - starttimer->start(); -} - -void LScreenSaver::reloadSettings(){ - settings->sync(); - starttimer->setInterval( settings->value("timedelaymin",10).toInt() * 60000 ); - locktimer->setInterval( settings->value("lockdelaymin",1).toInt() * 60000 ); - hidetimer->setInterval( settings->value("hidesecs",15).toInt() * 1000 ); -} - -void LScreenSaver::newInputEvent(){ - if(updating){ return; } //in the middle of making changes which could cause an event - if(DEBUG){ qDebug() << "New Input Event"; } - if(SSRunning && SSLocked){ - //Running and locked - // Hide the running setting, and display the lock screen - HideScreenSaver(); - ShowLockScreen(); - }else if(SSRunning){ - //Only running, not locked - HideScreenSaver(); - } - UpdateTimers(); - -} - -void LScreenSaver::LockScreenNow(){ - ShowScreenSaver(); - LockScreen(); -} - -// =========== -// PRIVATE SLOTS -// =========== -void LScreenSaver::ShowScreenSaver(){ - if(DEBUG){ qDebug() << "Showing Screen Saver:" << QDateTime::currentDateTime().toString(); } - SSRunning = true; - updating = true; - //Now remove any current Base widgets (prevent any lingering painting between sessions) - for(int i=0; i<BASES.length(); i++){ - if(DEBUG){ qDebug() << " - Removing SS Base"; } - delete BASES.takeAt(i); i--; - } - //Now go through and create/show all the various widgets - QList<QScreen*> SCREENS = QApplication::screens(); - QRect bounds; - cBright = LOS::ScreenBrightness(); - if(cBright>0){ LOS::setScreenBrightness(cBright/2); } //cut to half while the screensaver is active - for(int i=0; i<SCREENS.length(); i++){ - bounds = bounds.united(SCREENS[i]->geometry()); - if(DEBUG){ qDebug() << " - New SS Base:" << i; } - BASES << new SSBaseWidget(this, settings); - connect(BASES[i], SIGNAL(InputDetected()), this, SLOT(newInputEvent()) ); - //Setup the geometry of the base to match the screen - BASES[i]->setGeometry(SCREENS[i]->geometry()); //match this screen geometry - BASES[i]->setPlugin(settings->value("screenplugin"+QString::number(i+1), settings->value("defaultscreenplugin","random").toString() ).toString() ); - } - //Now set the overall parent widget geometry and show everything - this->setGeometry(bounds); //overall background widget - if(!this->isActiveWindow()){ - this->raise(); - this->show(); - this->activateWindow(); - } - for(int i=0; i<BASES.length(); i++){ - BASES[i]->show(); - BASES[i]->startPainting(); - } - updating = false; - UpdateTimers(); -} - -void LScreenSaver::ShowLockScreen(){ - if(DEBUG){ qDebug() << "Showing Lock Screen:" << QDateTime::currentDateTime().toString(); } - LOCKER->aboutToShow(); - //Move the screen locker to the appropriate spot - QPoint ctr = QApplication::desktop()->screenGeometry(QCursor::pos()).center(); - LOCKER->resize(LOCKER->sizeHint()); - LOCKER->move(ctr - QPoint(LOCKER->width()/2, LOCKER->height()/2) ); - LOCKER->show(); - //Start the timer for hiding the lock screen due to inactivity - UpdateTimers(); -} - -void LScreenSaver::HideScreenSaver(){ - if(DEBUG){ qDebug() << "Hiding Screen Saver:" << QDateTime::currentDateTime().toString(); } - SSRunning = false; - if(cBright>0){ LOS::setScreenBrightness(cBright); } //return to current brightness - if(!SSLocked){ - this->hide(); - emit ClosingScreenSaver(); - } - for(int i=0; i<BASES.length(); i++){ - BASES[i]->hide(); - BASES[i]->stopPainting(); - } - UpdateTimers(); -} - -void LScreenSaver::HideLockScreen(){ - if(DEBUG){ qDebug() << "Hiding Lock Screen:" << QDateTime::currentDateTime().toString(); } - //Leave the Locked flag set (still locked, just not visible) - LOCKER->aboutToHide(); - LOCKER->hide(); - this->repaint(); - if(SSLocked){ ShowScreenSaver(); } - UpdateTimers(); -} - -void LScreenSaver::LockScreen(){ - if(SSLocked){ return; } - if(DEBUG){ qDebug() << "Locking Screen:" << QDateTime::currentDateTime().toString(); } - SSLocked = true; - LOCKER->LoadSystemDetails(); - UpdateTimers(); -} - -void LScreenSaver::SSFinished(){ - if(DEBUG){ qDebug() << "Screensaver Finished:" << QDateTime::currentDateTime().toString(); } - SSLocked = false; - HideLockScreen(); - HideScreenSaver(); -} diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/LScreenSaver.h b/src-qt5/core/lumina-wm-INCOMPLETE/LScreenSaver.h deleted file mode 100644 index 5119d8b1..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/LScreenSaver.h +++ /dev/null @@ -1,59 +0,0 @@ -//=========================================== -// Lumina-DE source code -// Copyright (c) 2015, Ken Moore -// Available under the 3-clause BSD license -// See the LICENSE file for full details -//=========================================== -#ifndef _LUMINA_DESKTOP_SCREEN_SAVER_H -#define _LUMINA_DESKTOP_SCREEN_SAVER_H - -#include "GlobalDefines.h" - -#include "SSBaseWidget.h" -#include "LLockScreen.h" - -class LScreenSaver : public QWidget{ - Q_OBJECT -public: - LScreenSaver(); - ~LScreenSaver(); - - bool isLocked(); - -private: - QTimer *starttimer, *locktimer, *hidetimer; - QSettings *settings; - QList<SSBaseWidget*> BASES; - LLockScreen *LOCKER; - int cBright; - bool SSRunning, SSLocked, updating; - - void UpdateTimers(); - -public slots: - void start(); - void reloadSettings(); - void newInputEvent(); - void LockScreenNow(); - -private slots: - void ShowScreenSaver(); - void ShowLockScreen(); - void HideScreenSaver(); - void HideLockScreen(); - - void LockScreen(); - void SSFinished(); - -signals: - void StartingScreenSaver(); - void ClosingScreenSaver(); - -protected: - void mouseMoveEvent(QMouseEvent*){ - QTimer::singleShot(0,this, SLOT(newInputEvent())); - } - -}; - -#endif
\ No newline at end of file diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/LWindow.cpp b/src-qt5/core/lumina-wm-INCOMPLETE/LWindow.cpp deleted file mode 100644 index 84ff2ffd..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/LWindow.cpp +++ /dev/null @@ -1,474 +0,0 @@ -//=========================================== -// Lumina-DE source code -// Copyright (c) 2015, Ken Moore -// Available under the 3-clause BSD license -// See the LICENSE file for full details -//=========================================== -#include "LWindow.h" - -LWindowFrame::LWindowFrame(WId client, QWidget *parent) : QFrame(parent, Qt::X11BypassWindowManagerHint){ - activeState = LWindowFrame::Normal; - CID = client; - lastAction = LWM::WA_NONE; - Closing = false; - //qDebug() << "New Window:" << CID << "Frame:" << this->winId(); - this->setMouseTracking(true); //need this to determine mouse location when not clicked - this->setObjectName("LWindowFrame"); - this->setStyleSheet("LWindowFrame#LWindowFrame{ border: 2px solid white; border-radius:3px; } QWidget#TitleBar{background: grey; } QLabel{ color: black; }"); - InitWindow(); //initially create all the child widgets - //LWM::SYSTEM->setupEventsForFrame(this->winId()); - updateAppearance(); //this loads the appearance based on window/theme settings - //QApplication::processEvents(); - //Now set the frame size on this window - SyncSize(); - SyncText(); - this->show(); -} - -LWindowFrame::~LWindowFrame(){ -} - -// ================= -// PRIVATE -// ================= -void LWindowFrame::InitWindow(){ - anim = new QPropertyAnimation(this); //For simple window animations - anim->setTargetObject(this); - anim->setDuration(ANIMTIME); //In milliseconds - connect(anim, SIGNAL(finished()), this, SLOT(finishedAnimation()) ); - titleBar = new QLabel(this); //This is the "container" for all the title buttons/widgets - titleBar->setObjectName("TitleBar"); - titleBar->setSizePolicy(QSizePolicy::Minimum,QSizePolicy::Minimum); - titleBar->setFocusPolicy(Qt::NoFocus); - titleBar->setCursor(Qt::ArrowCursor); - title = new QLabel(this); //Shows the window title/text - title->setObjectName("Title"); - title->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); - title->setCursor(Qt::ArrowCursor); - title->setFocusPolicy(Qt::NoFocus); - icon = new QLabel(this); //Contains the window icon - icon->setObjectName("Icon"); - icon->setCursor(Qt::ArrowCursor); - icon->setFocusPolicy(Qt::NoFocus); - minB = new QToolButton(this); //Minimize Button - minB->setObjectName("Minimize"); - minB->setCursor(Qt::ArrowCursor); - minB->setFocusPolicy(Qt::NoFocus); - connect(minB, SIGNAL(clicked()), this, SLOT(minClicked()) ); - maxB = new QToolButton(this); //Maximize Button - maxB->setObjectName("Maximize"); - maxB->setCursor(Qt::ArrowCursor); - maxB->setFocusPolicy(Qt::NoFocus); - connect(maxB, SIGNAL(clicked()), this, SLOT(maxClicked()) ); - closeB = new QToolButton(this); - closeB->setObjectName("Close"); - closeB->setCursor(Qt::ArrowCursor); - closeB->setFocusPolicy(Qt::NoFocus); - connect(closeB, SIGNAL(clicked()), this, SLOT(closeClicked()) ); - otherB = new QToolButton(this); //Button to place any other actions - otherB->setObjectName("Options"); - otherB->setCursor(Qt::ArrowCursor); - otherB->setPopupMode(QToolButton::InstantPopup); - otherB->setStyleSheet("QToolButton::menu-indicator{ image: none; }"); - otherB->setFocusPolicy(Qt::NoFocus); - otherM = new QMenu(this); //menu of "other" actions for the window - otherB->setMenu(otherM); - connect(otherM, SIGNAL(triggered(QAction*)), this, SLOT(otherClicked(QAction*)) ); - //Now assemble the titlebar - QHBoxLayout *HL = new QHBoxLayout(this); - HL->setContentsMargins(0,0,0,0); - HL->addWidget(otherB); - HL->addWidget(icon); - HL->addWidget(title); - HL->addWidget(minB); - HL->addWidget(maxB); - HL->addWidget(closeB); - titleBar->setLayout(HL); - QVBoxLayout *VL = new QVBoxLayout(this); - this->setLayout(VL); - //The WinWidget container appears shifted right/down by 1 pixel for some reason - // Adjust the margins to account for this variation - VL->setContentsMargins(1,1,2,2); - VL->setSpacing(0); - //Have the window take the same initial size of the client window - QRect geom = LWM::SYSTEM->WM_Window_Geom(CID); - qDebug() << " - Load Size Hints" << "initial size:" << geom.size(); - icccm_size_hints SH = LWM::SYSTEM->WM_ICCCM_GetNormalHints(CID); - qDebug() << " - - Got Normal Hints"; - if(!SH.isValid()){ SH = LWM::SYSTEM->WM_ICCCM_GetSizeHints(CID); } - qDebug() << " - - Start resizing..."; - if(SH.base_width>geom.width() && SH.base_height>geom.height()){ this->resize(SH.base_width, SH.base_height); } - else if(SH.min_width>geom.width() && SH.min_height>geom.height()){ this->resize(SH.min_width, SH.min_height); } - else if(SH.width>geom.width() && SH.height>geom.height()){ this->resize(SH.width, SH.height); } - else if(geom.isNull()){ this->resize(100,80); } - else{ this->resize( geom.size() ); } - qDebug() << " - done"; - - //Now embed the native window into the frame - WIN = QWindow::fromWinId(CID); - WinWidget = QWidget::createWindowContainer( WIN, this); - WinWidget->setCursor(Qt::ArrowCursor); //this is just a fallback - the window itself will adjust it - //WINBACK = new QBackingStore(WIN); //create a data backup for the widget - - //Now assemble te initial layout for the window (all while still invisible) - /*VL->addWidget(titleBar); - VL->addWidget(WinWidget); - VL->setStretch(1,1);*/ -} - -LWindowFrame::ModState LWindowFrame::getStateAtPoint(QPoint pt, bool setoffset){ - //Note: pt should be in widget-relative coordinates, not global - if(!this->layout()->geometry().contains(pt)){ - //above the frame itself - need to figure out which quadrant it is in (8-directions) - if(pt.y() < 3){ - //One of the top options - if(pt.x() < 3){ - if(setoffset){ offset.setX(pt.x()); offset.setY(pt.y()); } //difference from top-left corner - return ResizeTopLeft; - }else if(pt.x() > (this->width()-3)){ - if(setoffset){ offset.setX(this->width()-pt.x()); offset.setY(pt.y()); } //difference from top-right corner - return ResizeTopRight; - }else{ - if(setoffset){ offset.setX(0); offset.setY(pt.y()); } //difference from top edge (X does not matter) - return ResizeTop; - } - }else if(pt.y() > (this->height()-3) ){ - //One of the bottom options - if(pt.x() < 3){ - if(setoffset){ offset.setX(pt.x()); offset.setY(this->height()-pt.y()); } //difference from bottom-left corner - return ResizeBottomLeft; - }else if(pt.x() > (this->width()-3)){ - if(setoffset){ offset.setX(this->width()-pt.x()); offset.setY(this->height()-pt.y()); } //difference from bottom-right corner - return ResizeBottomRight; - }else{ - if(setoffset){ offset.setX(0); offset.setY(this->height() - pt.y()); } //difference from bottom edge (X does not matter) - return ResizeBottom; - } - }else{ - //One of the side options - if(pt.x() < 3){ - if(setoffset){ offset.setX(pt.x()); offset.setY(0); } //difference from left edge (Y does not matter) - return ResizeLeft; - }else if(pt.x() > (this->width()-3) ){ - if(setoffset){ offset.setX(this->width()-pt.x()); offset.setY(0); } //difference from right edge (Y does not matter) - return ResizeRight; - }else{ - return Normal; - } - } - } - return Normal; -} - -void LWindowFrame::setMouseCursor(ModState state, bool override){ - Qt::CursorShape shape; - switch(state){ - case Normal: - shape = Qt::ArrowCursor; - break; - case Move: - shape = Qt::SizeAllCursor; - break; - case ResizeTop: - shape = Qt::SizeVerCursor; - break; - case ResizeTopRight: - shape = Qt::SizeBDiagCursor; - break; - case ResizeRight: - shape = Qt::SizeHorCursor; - break; - case ResizeBottomRight: - shape = Qt::SizeFDiagCursor; - break; - case ResizeBottom: - shape = Qt::SizeVerCursor; - break; - case ResizeBottomLeft: - shape = Qt::SizeBDiagCursor; - break; - case ResizeLeft: - shape = Qt::SizeHorCursor; - break; - case ResizeTopLeft: - shape = Qt::SizeFDiagCursor; - break; - } - if(override){ - QApplication::setOverrideCursor(QCursor(shape)); - }else{ - this->setCursor(shape); - } -} - -// ========================== -// WINDOW INTERACTIONS -//========================== -void LWindowFrame::SyncSize(bool fromwin){ - //sync the window/frame geometries (generally only done before embedding the client window) - int frame = this->frameWidth(); - int TH = titleBar->height(); - //Now load the information about the window and adjust the frame to match - if(fromwin){ lastGeom = LWM::SYSTEM->WM_Window_Geom(CID); } - else{ lastGeom = this->geometry(); } - qDebug() << "Initial Size:" << lastGeom << frame << TH; - //Add in the frame size - lastGeom.moveTop(lastGeom.y()-frame-TH); - lastGeom.setHeight(lastGeom.height()+(2*frame)+TH); - lastGeom.moveLeft(lastGeom.x()-frame); - lastGeom.setWidth( lastGeom.width()+(2*frame)); - QList<unsigned int> margins; - margins << frame << frame << frame+TH << frame; //L/R/Top/Bottom - qDebug() << " - With Frame:" << lastGeom; - //Now adjust for a out-of-bounds location - if(lastGeom.x() < 0){ lastGeom.moveLeft(0); } - if(lastGeom.y() < 0){ lastGeom.moveTop(0); } - qDebug() << " - Adjusted:" << lastGeom; - this->setGeometry(lastGeom); - LWM::SYSTEM->WM_Set_Frame_Extents(CID, margins); -} - -void LWindowFrame::SyncText(){ - QString txt = WIN->title(); - if(txt.isEmpty()){ txt = LWM::SYSTEM->WindowName(CID); } - if(txt.isEmpty()){ txt = LWM::SYSTEM->OldWindowName(CID); } - if(txt.isEmpty()){ txt = LWM::SYSTEM->WindowVisibleName(CID); } - if(txt.isEmpty()){ txt = LWM::SYSTEM->WindowIconName(CID); } - if(txt.isEmpty()){ txt = LWM::SYSTEM->WindowVisibleIconName(CID); } - if(txt.isEmpty()){ txt = LWM::SYSTEM->WM_ICCCM_GetClass(CID); } - title->setText(txt); -} - -// SIMPLE ANIMATIONS -void LWindowFrame::showAnimation(LWM::WindowAction act){ - bool useanimation = (act!=lastAction); - if(anim->state()==QAbstractAnimation::Running){ - qDebug() << "New Animation Event:" << act; - return; - } - //Setup the animation routine - if(act==LWM::Show){ - if(useanimation){ - lastGeom = this->geometry(); - //Expand out from center point - anim->setPropertyName("geometry"); - anim->setStartValue( QRect(lastGeom.center(), QSize(0,0) ) ); - anim->setEndValue( this->geometry() ); - //Fade in gradually - //anim->setPropertyName("windowOpacity"); - //anim->setStartValue( 0.0 ); - //anim->setEndValue( 1.0 ); - }else{ - ShowClient(true); - this->raise(); - this->show(); //just show it right away - } - - }else if(act==LWM::Hide){ - if(useanimation){ - //Collapse in on center point - lastGeom = this->geometry(); - anim->setPropertyName("geometry"); - anim->setStartValue( QRect(this->geometry()) ); - anim->setEndValue( QRect(this->geometry().center(), QSize(0,0) ) ); - }else{ - this->hide(); //just hide it right away - } - }else if(act==LWM::Closed){ - //Need to clean up the container widget first to prevent XCB errors - //qDebug() << "Window Closed:" << WIN->winId() << CID; - if(useanimation){ - //Collapse in on center line - lastGeom = this->geometry(); - anim->setPropertyName("geometry"); - anim->setStartValue( QRect(this->geometry()) ); - anim->setEndValue( QRect(this->geometry().x(), this->geometry().center().y(), this->width(), 0 ) ); - }else{ - CloseAll(); //just hide it right away - } - } - if(useanimation){ - ShowClient(false); - this->show(); - qDebug() << " - Starting Animation:" << act; - lastAction = act; - anim->start(); - }; -} - -void LWindowFrame::ShowClient(bool show){ - if(show && this->layout()->indexOf(WinWidget)<0 && !Closing){ - while(this->layout()->count()>0){ this->layout()->removeItem(0); } - this->layout()->addWidget(titleBar); - this->layout()->setAlignment(titleBar, Qt::AlignTop); - this->layout()->addWidget(WinWidget); - static_cast<QVBoxLayout*>(this->layout())->setStretch(1,1); - LWM::SYSTEM->WM_ShowWindow(CID); - }else if( !show && this->layout()->indexOf(WinWidget)>=0){ - LWM::SYSTEM->WM_HideWindow(CID); - this->layout()->removeWidget(WinWidget); - } -} - -void LWindowFrame::finishedAnimation(){ - //Also set any final values - qDebug() << " - Finished Animation:" << lastAction; - switch(lastAction){ - case LWM::Show: - ShowClient(true); - break; - case LWM::Closed: - case LWM::Hide: - this->lower(); - this->hide(); - LWM::SYSTEM->WM_HideWindow(this->winId()); - default: - break; - } - if(Closing){ - qDebug() << "Emitting finished signal"; - emit Finished(); - } -} - -// ================= -// PUBLIC SLOTS -// ================= -void LWindowFrame::updateAppearance(){ - //Reload any button icons and such - minB->setIcon(LXDG::findIcon("window-suppressed","")); - maxB->setIcon(LXDG::findIcon("view-fullscreen","")); - closeB->setIcon(LXDG::findIcon("application-exit","")); - otherB->setIcon(LXDG::findIcon("configure","")); -} - -void LWindowFrame::windowChanged(LWM::WindowAction act){ - //A window property was changed - update accordingly - switch(act){ - case LWM::Closed: - Closing = true; - case LWM::Hide: - case LWM::Show: - showAnimation(act); - break; - case LWM::MoveResize: - //Re-adjust to the new position/size of the window - SyncSize(true); - break; - default: - break; //do nothing - } -} -// ================= -// PRIVATE SLOTS -// ================= -void LWindowFrame::closeClicked(){ - qDebug() << "Closing Window" << LWM::SYSTEM->WM_ICCCM_GetClass(CID); - //First try the close event to let the client app do cleanup/etc - LWM::SYSTEM->WM_CloseWindow(CID); -} - -void LWindowFrame::minClicked(){ - qDebug() << "Minimize Window"; - windowChanged(LWM::Hide); -} - -void LWindowFrame::maxClicked(){ - if(normalGeom.isNull()){ - qDebug() << "Maximize Window"; - normalGeom = this->geometry(); //save for later - this->showMaximized(); - }else{ - qDebug() << "Restore Window"; - this->showNormal(); - this->setGeometry(normalGeom); - normalGeom = QRect(); //clear it - } -} - -void LWindowFrame::otherClicked(QAction* act){ - QString action = act->whatsThis(); -} - -void LWindowFrame::CloseAll(){ - qDebug() << " - Closing Frame"; - this->hide(); - emit Finished(); -} -// ===================== -// PROTECTED -// ===================== -void LWindowFrame::mousePressEvent(QMouseEvent *ev){ - qDebug() << "Frame Mouse Press Event"; - offset.setX(0); offset.setY(0); - if(activeState != Normal){ return; } // do nothing - already in a state of grabbed mouse - this->activateWindow(); - LWM::SYSTEM->WM_Set_Active_Window(CID); - if(this->childAt(ev->pos())!=0){ - //Check for any non-left-click event and skip it - if(ev->button()!=Qt::LeftButton){ return; } - activeState = Move; - offset.setX(ev->pos().x()); offset.setY(ev->pos().y()); - }else{ - //Clicked on the frame somewhere - activeState = getStateAtPoint(ev->pos(), true); //also have it set the offset variable - } - setMouseCursor(activeState, true); //this one is an override cursor - -} - -void LWindowFrame::mouseMoveEvent(QMouseEvent *ev){ - ev->accept(); - if(activeState == Normal){ - setMouseCursor( getStateAtPoint(ev->pos()) ); //just update the mouse cursor - - }else{ - //Currently in a modification state - QRect geom = this->geometry(); - switch(activeState){ - case Move: - geom.moveTopLeft(ev->globalPos()-offset); //will not change size - break; - case ResizeTop: - geom.setTop(ev->globalPos().y()-offset.y()); - break; - case ResizeTopRight: - geom.setTopRight(ev->globalPos()-offset); - break; - case ResizeRight: - geom.setRight(ev->globalPos().x()-offset.x()); - break; - case ResizeBottomRight: - geom.setBottomRight(ev->globalPos()-offset); - break; - case ResizeBottom: - geom.setBottom(ev->globalPos().y()-offset.y()); - break; - case ResizeBottomLeft: - geom.setBottomLeft(ev->globalPos()-offset); - break; - case ResizeLeft: - geom.setLeft(ev->globalPos().x()-offset.x()); - break; - case ResizeTopLeft: - geom.setTopLeft(ev->globalPos()-offset); - break; - default: - break; - } - this->setGeometry(geom); - } -} - -void LWindowFrame::mouseReleaseEvent(QMouseEvent *ev){ - //Check for a right-click event - qDebug() << "Frame Mouse Release Event"; - ev->accept(); - if( (activeState==Normal) && (this->childAt(ev->pos())==titleBar) && (ev->button()==Qt::RightButton) ){ - otherM->popup(ev->globalPos()); - return; - } - activeState = Normal; - QApplication::restoreOverrideCursor(); - setMouseCursor( getStateAtPoint(ev->pos()) ); -} diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/LWindow.h b/src-qt5/core/lumina-wm-INCOMPLETE/LWindow.h deleted file mode 100644 index ceefca83..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/LWindow.h +++ /dev/null @@ -1,114 +0,0 @@ -//=========================================== -// Lumina-DE source code -// Copyright (c) 2015, Ken Moore -// Available under the 3-clause BSD license -// See the LICENSE file for full details -//=========================================== -#ifndef _LUMINA_DESKTOP_WINDOW_FRAME_H -#define _LUMINA_DESKTOP_WINDOW_FRAME_H - -#include "GlobalDefines.h" - -class LWindowFrame : public QFrame{ - Q_OBJECT -public: - LWindowFrame(WId client, QWidget *parent = 0); //MUST have a valid client window - ~LWindowFrame(); - -private: - void InitWindow(); //Initialize all the internal widgets - - //Window status - enum ModState{Normal, Move, ResizeTop, ResizeTopRight, ResizeRight, ResizeBottomRight, ResizeBottom, ResizeBottomLeft, ResizeLeft, ResizeTopLeft}; - ModState activeState; - QPoint offset; //needed for movement calculations (offset from mouse click to movement point) - //Functions for getting/setting state - ModState getStateAtPoint(QPoint pt, bool setoffset = false); //generally used for mouse location detection - void setMouseCursor(ModState, bool override = false); //Update the mouse cursor based on state - - //General Properties/Modifications - WId CID; //Client ID - QWindow *WIN; //Embedded window container - QWidget *WinWidget; - bool Closing; - LWM::WindowAction lastAction; - //QBackingStore *WINBACK; - void SyncSize(bool fromwin = false); //sync the window/frame geometries - void SyncText(); - - //Window Frame Widgets/Items - QLabel *titleBar, *title, *icon; - QToolButton *minB, *maxB, *closeB, *otherB; - QMenu *otherM; //menu of "other" actions for the window - QRect normalGeom; //used for restoring back to original size after maximization/fullscreen - - //Animations - QPropertyAnimation *anim; //used for appear/disappear animations - QRect lastGeom; //used for appear/disappear animations - void showAnimation(LWM::WindowAction); //sets lastAction - void ShowClient(bool show); - -public slots: - //These slots are generally used for the outside event watcher to prod for changes - void updateAppearance(); //reload the theme and change styling as necessary - void windowChanged(LWM::WindowAction); - -private slots: - void finishedAnimation(); //uses lastAction - void closeClicked(); - void minClicked(); - void maxClicked(); - void otherClicked(QAction*); - - void CloseAll(); - -protected: - void mousePressEvent(QMouseEvent*); - void mouseMoveEvent(QMouseEvent*); - void mouseReleaseEvent(QMouseEvent*); - -signals: - void Finished(); //This means the window is completely finished (with animations and such) and should be removed from any lists - -}; - -class LWindow : public QObject{ - Q_OBJECT -signals: - void Finished(WId client); //ready to be removed -private: - WId CID; - LWindowFrame *FID; - bool needsFrame(QList<LXCB::WINDOWTYPE> list){ - if(list.isEmpty()){ return !LWM::SYSTEM->WM_ICCCM_GetClass(CID).contains("Lumina-DE"); } //assume a normal window (fallback) - return !(list.contains(LXCB::T_DESKTOP) || list.contains(LXCB::T_DOCK) || list.contains(LXCB::T_TOOLBAR) \ - || list.contains(LXCB::T_SPLASH) || list.contains(LXCB::T_DROPDOWN_MENU) \ - || list.contains(LXCB::T_TOOLTIP) || list.contains(LXCB::T_POPUP_MENU) || list.contains(LXCB::T_TOOLTIP) \ - || list.contains(LXCB::T_COMBO) || list.contains(LXCB::T_DND) ); - } -private slots: - void frameclosed(){ - qDebug() << " - Window got frame closed signal"; - //FID->close(); - //delete FID; - emit Finished(CID); - } -public: - LWindow(WId client){ - FID= 0; - CID = client; - if( needsFrame(LWM::SYSTEM->WM_Get_Window_Type(CID)) ){ - FID = new LWindowFrame(CID); - connect(FID, SIGNAL(Finished()), this, SLOT(frameclosed()) ); - } - } - ~LWindow(){ - if(FID!=0){delete FID;} - } - - WId clientID(){ return CID; } - bool hasFrame(){ return FID!=0; } - LWindowFrame* frame(){ return FID; } - -}; -#endif diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/LWindowManager.cpp b/src-qt5/core/lumina-wm-INCOMPLETE/LWindowManager.cpp deleted file mode 100644 index 14ce6897..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/LWindowManager.cpp +++ /dev/null @@ -1,186 +0,0 @@ -//=========================================== -// Lumina-DE source code -// Copyright (c) 2015, Ken Moore -// Available under the 3-clause BSD license -// See the LICENSE file for full details -//=========================================== -#include "LWindowManager.h" - -#define DEBUG 1 - -LWindowManager::LWindowManager(){ - -} - -LWindowManager::~LWindowManager(){ - -} - -bool LWindowManager::start(){ - //Setup the initial screen/session values - LWM::SYSTEM->WM_Set_Root_Supported(); - LWM::SYSTEM->WM_SetNumber_Desktops(1); - LWM::SYSTEM->WM_Set_Current_Desktop(0); - LWM::SYSTEM->WM_Set_Desktop_Names(QStringList() << "one"); - QRect totgeom; - QList<QPoint> viewports; - QList<QRect> geoms; - for(int i=0; i<QApplication::desktop()->screenCount(); i++){ - geoms << QApplication::desktop()->screen(i)->geometry(); - viewports << QPoint(0,0); - totgeom = QApplication::desktop()->screen(i)->geometry(); - } - LWM::SYSTEM->WM_Set_Desktop_Geometry(totgeom.size()); - LWM::SYSTEM->WM_Set_Desktop_Viewport(viewports); - LWM::SYSTEM->WM_Set_Workarea(geoms); - //Should probably do a quick loop over any existing windows with the root as parent (just in case) - QList<WId> initial = LWM::SYSTEM->WM_RootWindows(); - for(int i=0; i<initial.length(); i++){ - NewWindow(initial[i], false); //These ones did not explicitly request to be mapped - } - RestackWindows(); - return true; -} - -void LWindowManager::stop(){ - for(int i=0; i<WINS.length(); i++){ - if(WINS[i]->hasFrame()){ - LWM::SYSTEM->UnembedWindow(WINS[i]->clientID()); - WINS[i]->frame()->close(); - } - } -} -//=============== -// PUBLIC SLOTS -//=============== -void LWindowManager::NewWindow(WId win, bool requested){ - //Verify that this window can/should be managed first - //if(DEBUG){ qDebug() << "New Window:" << LWM::SYSTEM->WM_ICCCM_GetClass(win); } - QString wclass = LWM::SYSTEM->WM_ICCCM_GetClass(win); - if( wclass.contains("lumina-wm",Qt::CaseInsensitive) ){ return; } //just in case: prevent recursion - else{ - bool ok = (wclass.isEmpty() ? false : LWM::SYSTEM->WM_ManageWindow(win, requested) ); - if(!ok){ - //See if this window is just a transient pointing to some other window - WId tran = LWM::SYSTEM->WM_ICCCM_GetTransientFor(win); - if(tran!=win && tran!=0){ - win = tran; - ok = LWM::SYSTEM->WM_ManageWindow(win); - } - } - if(!ok){ return; } - } - if(DEBUG){ qDebug() << "New Managed Window:" << LWM::SYSTEM->WM_ICCCM_GetClass(win); } - LWM::SYSTEM->WM_Set_Active_Window(win); - LWindow *lwin = new LWindow(win); - connect(lwin, SIGNAL(Finished(WId)), this, SLOT(FinishedWindow(WId)) ); - WINS << lwin; - if(lwin->hasFrame()){ - lwin->frame()->windowChanged(LWM::Show); //Make sure to show it right away - }else{ - LWM::SYSTEM->WM_ShowWindow(win); //just map the window right now - } -} - -void LWindowManager::ClosedWindow(WId win){ - for(int i=0; i<WINS.length(); i++){ - if(WINS[i]->clientID()==win){ - qDebug() << " - Closed Window"; - if(WINS[i]->hasFrame()){ WINS[i]->frame()->windowChanged(LWM::Closed); } //do any animations/cleanup - else{ FinishedWindow(win); } - break; - } - } -} - -void LWindowManager::ModifyWindow(WId win, LWM::WindowAction act){ - for(int i=0; i<WINS.length(); i++){ - if(WINS[i]->clientID()==win){ - if(WINS[i]->hasFrame()){ WINS[i]->frame()->windowChanged(act); } - return; - } - } - //If it gets this far - it is an unmanaged window - if(act==LWM::Show){ - NewWindow(win); - } - RestackWindows(); -} - -void LWindowManager::RestackWindows(){ - Stack_Desktop.clear(); Stack_Below.clear(); Stack_Normal.clear(); Stack_Above.clear(); Stack_Fullscreen.clear(); - QList<WId> currwins; - int cwork = LWM::SYSTEM->WM_Get_Current_Desktop(); - int winwork = -1; - QList<LXCB::WINDOWSTATE> states; - QList<LXCB::WINDOWTYPE> types; - for(int i=0; i<WINS.length(); i++){ - //Only show windows on the current desktop - winwork = LWM::SYSTEM->WM_Get_Desktop(WINS[i]->clientID()); - states = LWM::SYSTEM->WM_Get_Window_States(WINS[i]->clientID()); - types = LWM::SYSTEM->WM_Get_Window_Type(WINS[i]->clientID()); - WId id = WINS[i]->clientID(); - if(WINS[i]->hasFrame()){ id = WINS[i]->frame()->winId(); } - if(winwork<0 || winwork == cwork || states.contains(LXCB::S_STICKY) ){ - //Now check the state/type and put it in the proper stack - currwins << WINS[i]->clientID(); //add this to the overall "age" list - //Now add it to the proper stack - if(types.contains(LXCB::T_DESKTOP)){ Stack_Desktop << id; } - else if(states.contains(LXCB::S_BELOW)){ Stack_Below << id; } - else if(types.contains(LXCB::T_DOCK) || states.contains(LXCB::S_ABOVE) ){ Stack_Above << id; } - else if(states.contains(LXCB::S_FULLSCREEN)){ Stack_Fullscreen << id; } - else{ Stack_Normal << id; } - } - } - //Active Window management - WId active = LWM::SYSTEM->WM_Get_Active_Window(); - if(Stack_Desktop.contains(active)){ Stack_Desktop.removeAll(active); Stack_Desktop << active; } - else if(Stack_Below.contains(active)){ Stack_Below.removeAll(active); Stack_Below << active; } - else if(Stack_Normal.contains(active)){ Stack_Normal.removeAll(active); Stack_Normal << active; } - else if(Stack_Above.contains(active)){ Stack_Above.removeAll(active); Stack_Above << active; } - else if(Stack_Fullscreen.contains(active)){ Stack_Fullscreen.removeAll(active); Stack_Fullscreen << active; } - - //Now set the root properties for these lists - LWM::SYSTEM->WM_Set_Client_List(currwins, false); //age-ordered version - LWM::SYSTEM->WM_Set_Client_List(QList<WId>() << Stack_Desktop << Stack_Below << Stack_Normal << Stack_Above << Stack_Fullscreen, true); //stacking order version - //Now re-paint (in order) the windows - RepaintWindows(); -} - -void LWindowManager::RepaintWindows(){ - //Go through all the current windows (in stacking order) and re-paint them - for(int i=0; i<Stack_Desktop.length(); i++){ - LWM::SYSTEM->WM_ShowWindow(Stack_Desktop[i]); - } - for(int i=0; i<Stack_Below.length(); i++){ - LWM::SYSTEM->WM_ShowWindow(Stack_Below[i]); - } - for(int i=0; i<Stack_Normal.length(); i++){ - LWM::SYSTEM->WM_ShowWindow(Stack_Normal[i]); - } - for(int i=0; i<Stack_Above.length(); i++){ - LWM::SYSTEM->WM_ShowWindow(Stack_Above[i]); - } - for(int i=0; i<Stack_Fullscreen.length(); i++){ - LWM::SYSTEM->WM_ShowWindow(Stack_Fullscreen[i]); - } -} - -//================= -// PRIVATE SLOTS -//================= -void LWindowManager::FinishedWindow(WId win){ - for(int i=0; i<WINS.length(); i++){ - if(WINS[i]->clientID() == win){ - qDebug() << " - Finished Window"; - if(win == LWM::SYSTEM->WM_Get_Active_Window()){ - if(i==0 && WINS.length()>1){ LWM::SYSTEM->WM_Set_Active_Window(WINS[i+1]->clientID()); } - else if(i>0){ LWM::SYSTEM->WM_Set_Active_Window(WINS[i-1]->clientID()); } - else{ LWM::SYSTEM->WM_Set_Active_Window( QX11Info::appRootWindow()); } - } - delete WINS.takeAt(i); break; - } - } - //Now update the list of clients - RestackWindows(); -} diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/LWindowManager.h b/src-qt5/core/lumina-wm-INCOMPLETE/LWindowManager.h deleted file mode 100644 index 203efa1b..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/LWindowManager.h +++ /dev/null @@ -1,40 +0,0 @@ -//=========================================== -// Lumina-DE source code -// Copyright (c) 2015, Ken Moore -// Available under the 3-clause BSD license -// See the LICENSE file for full details -//=========================================== -#ifndef _LUMINA_DESKTOP_WINDOW_MANAGER_MAIN_CLASS_H -#define _LUMINA_DESKTOP_WINDOW_MANAGER_MAIN_CLASS_H - -#include "GlobalDefines.h" -#include "LWindow.h" - -class LWindowManager : public QObject{ - Q_OBJECT -public: - LWindowManager(); - ~LWindowManager(); - - bool start(); - void stop(); - -private: - QList<LWindow*> WINS; - QList<WId> Stack_Desktop, Stack_Below, Stack_Normal, Stack_Above, Stack_Fullscreen; -public slots: - void NewWindow(WId win, bool requested = true); - void ClosedWindow(WId win); - void ModifyWindow(WId win, LWM::WindowAction act); - - void RestackWindows(); - void RepaintWindows(); - -private slots: - void FinishedWindow(WId win); //This is used for LWindow connections/animations - -signals: - void NewFullScreenWindows(QList<WId>); -}; - -#endif diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/LXcbEventFilter.cpp b/src-qt5/core/lumina-wm-INCOMPLETE/LXcbEventFilter.cpp deleted file mode 100644 index abbe5a5a..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/LXcbEventFilter.cpp +++ /dev/null @@ -1,204 +0,0 @@ -//=========================================== -// Lumina-DE source code -// Copyright (c) 2015, Ken Moore -// Available under the 3-clause BSD license -// See the LICENSE file for full details -//=========================================== -#include "LXcbEventFilter.h" - -//================================================== -// 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) -//================================================== - -#include <LuminaX11.h> -#include <QDebug> - -//#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; - xcb_window_t root; -} - -//Constructor for the Event Filter wrapper -EventFilter::EventFilter() : QObject(){ - 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; -} - -void EventFilter::start(){ - if(DEBUG){ qDebug() << " - Install event filter..."; } - QCoreApplication::instance()->installNativeEventFilter(EF); - if(DEBUG){ qDebug() << " - Run request check..."; } - if(!LWM::SYSTEM->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); - QCoreApplication::instance()->flush(); -} - -//Constructor for the XCB event filter -XCBEventFilter::XCBEventFilter(EventFilter *parent) : QAbstractNativeEventFilter(){ - obj = parent; - InitAtoms(); -} - -//This function format taken directly from the Qt5.3 documentation -bool XCBEventFilter::nativeEventFilter(const QByteArray &eventType, void *message, long *) Q_DECL_OVERRIDE -{ - //if(stopping){ return false; } //don't do any parsing - //qDebug() << "New Event"; - bool stopevent = false; - if(eventType=="xcb_generic_event_t"){ - //Convert to known event type (for X11 systems) - xcb_generic_event_t *ev = static_cast<xcb_generic_event_t *>(message); - //Now parse the event and emit signals as necessary - switch( ev->response_type & ~0x80){ -//============================== -// INTERACTIVITY EVENTS -//============================== - case XCB_KEY_PRESS: - //This is a keyboard key press - //qDebug() << "Key Press Event"; - obj->emit NewInputEvent(); - stopevent = BlockInputEvent( ((xcb_key_press_event_t *) ev)->root ); //use the main "root" window - not the child widget - break; - case XCB_KEY_RELEASE: - //This is a keyboard key release - //qDebug() << "Key Release Event"; - obj->emit NewInputEvent(); - stopevent = BlockInputEvent( ((xcb_key_release_event_t *) ev)->root ); //use the main "root" window - not the child widget - break; - case XCB_BUTTON_PRESS: - //This is a mouse button press - //qDebug() << "Button Press Event"; - obj->emit NewInputEvent(); - 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); - } - } - break; - case XCB_BUTTON_RELEASE: - //This is a mouse button release - //qDebug() << "Button Release Event"; - //xcb_button_release_event_t *tmp = (xcb_button_release_event_t *)ev; - stopevent = BlockInputEvent( ((xcb_button_release_event_t *) ev)->root ); //use the main "root" window - not the child widget - break; - case XCB_MOTION_NOTIFY: - //This is a mouse movement event - //qDebug() << "Motion Notify Event"; - obj->emit NewInputEvent(); - stopevent = BlockInputEvent( ((xcb_motion_notify_event_t *) ev)->root ); //use the main "root" window - not the child widget); - break; - case XCB_ENTER_NOTIFY: - //This is a mouse movement event when mouse goes over a new window - //qDebug() << "Enter Notify Event"; - obj->emit NewInputEvent(); - stopevent = BlockInputEvent( ((xcb_enter_notify_event_t *) ev)->root ); - break; - case XCB_LEAVE_NOTIFY: - //This is a mouse movement event when mouse goes leaves a window - //qDebug() << "Leave Notify Event"; - obj->emit NewInputEvent(); - stopevent = BlockInputEvent(); - break; -//============================== - case XCB_EXPOSE: - //qDebug() << "Expose Notify Event:"; - //qDebug() << " - Given Window:" << ((xcb_property_notify_event_t*)ev)->window; - break; -//============================== - case XCB_MAP_NOTIFY: - break; //This is just a notification that a window was mapped - nothing needs to change here - case XCB_MAP_REQUEST: - qDebug() << "Window Map Request Event"; - obj->emit ModifyWindow( ((xcb_map_request_event_t *) ev)->window, LWM::Show); - break; -//============================== - case XCB_CREATE_NOTIFY: - qDebug() << "Window Create Event"; - break; -//============================== - case XCB_UNMAP_NOTIFY: - qDebug() << "Window Unmap Event"; - obj->emit ModifyWindow( ((xcb_unmap_notify_event_t *)ev)->window, LWM::Hide); - break; -//============================== - case XCB_DESTROY_NOTIFY: - qDebug() << "Window Closed Event"; - obj->emit WindowClosed( ((xcb_destroy_notify_event_t *) ev)->window ); - break; -//============================== - case XCB_FOCUS_IN: - //qDebug() << "Focus In Event:"; - break; -//============================== - case XCB_FOCUS_OUT: - //qDebug() << "Focus Out Event:"; - break; -//============================== - case XCB_PROPERTY_NOTIFY: - //qDebug() << "Property Notify Event:"; - //qDebug() << " - Given Window:" << ((xcb_property_notify_event_t*)ev)->window; - break; -//============================== - case XCB_CLIENT_MESSAGE: - //qDebug() << "Client Message Event"; - //qDebug() << " - Given Window:" << ((xcb_client_message_event_t*)ev)->window; - break; -//============================== - case XCB_CONFIGURE_NOTIFY: - //qDebug() << "Configure Notify Event"; - break; -//============================== - case XCB_CONFIGURE_REQUEST: - //qDebug() << "Configure Request Event"; - break; -//============================== - case XCB_SELECTION_CLEAR: - //qDebug() << "Selection Clear Event"; - break; -//============================== - case 85: //not sure what event this is - but it seems to come up very often (just hide the notice) - case 0: - case XCB_GE_GENERIC: - break; //generic event - don't do anything special - default: - qDebug() << "Default Event:" << (ev->response_type & ~0x80); -//============================== - } - } - return false; - //never stop event handling (this will not impact the X events themselves - just the internal screensaver/WM/widgets) -} - -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; } - // - Check the state of any fullscreen apps - 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; -} diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/LXcbEventFilter.h b/src-qt5/core/lumina-wm-INCOMPLETE/LXcbEventFilter.h deleted file mode 100644 index b68eedf5..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/LXcbEventFilter.h +++ /dev/null @@ -1,130 +0,0 @@ -//=========================================== -// Lumina-DE source code -// Copyright (c) 2012, 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 -//=========================================== -#ifndef _LUMINA_DESKTOP_XCB_FILTER_H -#define _LUMINA_DESKTOP_XCB_FILTER_H - -#include "GlobalDefines.h" - - -/* -List of XCB response types (since almost impossible to find good docs on XCB) -switch (xcb_generic_event_t*->response_type & ~0x80) -case values: -XCB_KEY_[PRESS | RELEASE] -XCB_BUTTON_[PRESS | RELEASE] -XCB_MOTION_NOTIFY -XCB_ENTER_NOTIFY -XCB_LEAVE_NOTIFY -XCB_FOCUS_[IN | OUT] -XCB_KEYMAP_NOTIFY -XCB_EXPOSE -XCB_GRAPHICS_EXPOSURE -XCB_VISIBILITY_NOTIFY -XCB_CREATE_NOTIFY -XCB_DESTROY_NOTIFY -XCB_UNMAP_NOTIFY -XCB_MAP_[NOTIFY | REQUEST] -XCB_REPARENT_NOTIFY -XCB_CONFIGURE_[NOTIFY | REQUEST] -XCB_GRAVITY_NOTIFY -XCB_RESIZE_REQUEST -XCB_CIRCULATE_[NOTIFY | REQUEST] -XCB_PROPERTY_NOTIFY -XCB_SELECTION_[CLEAR | REQUEST | NOTIFY] -XCB_COLORMAP_NOTIFY -XCB_CLIENT_MESSAGE -*/ - -//SYSTEM TRAY STANDARD DEFINITIONS -//#define SYSTEM_TRAY_REQUEST_DOCK 0 -//#define SYSTEM_TRAY_BEGIN_MESSAGE 1 -//#define SYSTEM_TRAY_CANCEL_MESSAGE 2 - - -class EventFilter : public QObject{ - Q_OBJECT -private: - QAbstractNativeEventFilter* EF; - WId WMFlag; //used to flag a running WM process - -public: - EventFilter(); - ~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; - -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); -}; - -class XCBEventFilter : public QAbstractNativeEventFilter{ -public: - XCBEventFilter(EventFilter *parent); - ~XCBEventFilter(){} - - virtual bool nativeEventFilter(const QByteArray &eventType, void *message, long *); - -private: - EventFilter *obj; - QList<xcb_atom_t> WinNotifyAtoms, SysNotifyAtoms; - - 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(); - //bool ParseButtonPressEvent(); - //bool ParseButtonReleaseEvent(); - //bool ParseMotionEvent(); - //bool ParsePropertyEvent(); - //bool ParseClientMessageEvent(); - //bool ParseDestroyEvent(); - //bool ParseConfigureEvent(); - //bool ParseKeySelectionClearEvent(); - - - - -}; - -#endif diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/SSBaseWidget.cpp b/src-qt5/core/lumina-wm-INCOMPLETE/SSBaseWidget.cpp deleted file mode 100644 index 83b82ff8..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/SSBaseWidget.cpp +++ /dev/null @@ -1,83 +0,0 @@ -//=========================================== -// Lumina-DE source code -// Copyright (c) 2015, Ken Moore -// Available under the 3-clause BSD license -// See the LICENSE file for full details -//=========================================== - -#include "SSBaseWidget.h" - -#define DEBUG 1 - -static QStringList validPlugs; -// ======== -// PUBLIC -// ======== -SSBaseWidget::SSBaseWidget(QWidget *parent, QSettings *set) : QWidget(parent){ - if(validPlugs.isEmpty()){ validPlugs << "none"; } //add more later - settings = set; //needed to pass along for plugins to read any special options/settings - this->setObjectName("LuminaBaseSSWidget"); - ANIM = 0; - this->setMouseTracking(true); -} - -SSBaseWidget::~SSBaseWidget(){ - if(ANIM!=0){ this->stopPainting(); } -} - -void SSBaseWidget::setPlugin(QString plug){ - plug = plug.toLower(); - if(validPlugs.contains(plug) || plug=="random"){ plugType = plug; } - else{ plugType = "none"; } -} - -// ============= -// PUBLIC SLOTS -// ============= -void SSBaseWidget::startPainting(){ - cplug = plugType; - //free up any old animation instance - if(ANIM!=0){ - ANIM->stop(); ANIM->clear(); - delete ANIM; ANIM = 0; - } - //If a random plugin - grab one of the known plugins - if(cplug=="random"){ - QStringList valid = BaseAnimGroup::KnownAnimations(); - if(valid.isEmpty()){ cplug = "none"; } //no known plugins - else{ cplug = valid[ qrand()%valid.length() ]; } //grab a random plugin - } - if(DEBUG){ qDebug() << " - Screen Saver:" << cplug; } - //Now list all the various plugins and start them appropriately - QString style; - if(cplug=="none"){ - style = "background: transparent;"; //show the underlying black parent widget - }else{ - style = "background: black;"; - } - this->setStyleSheet("QWidget#LuminaBaseSSWidget{ "+style+"}"); - this->repaint(); - //If not a stylesheet-based plugin - set it here - if(cplug!="none"){ - ANIM = BaseAnimGroup::NewAnimation(cplug, this, settings); - connect(ANIM, SIGNAL(finished()), this, SLOT(startPainting()) ); //repeat the plugin as needed - ANIM->LoadAnimations(); - } - //Now start the animation(s) - if(ANIM!=0){ - //if(DEBUG){ qDebug() << " - Starting SS Plugin:" << cplug << ANIM->animationCount() << ANIM->duration() << ANIM->loopCount(); } - if(ANIM->animationCount()>0){ - if(DEBUG){ qDebug() << " - Starting SS Plugin:" << cplug << ANIM->animationCount() << ANIM->duration() << ANIM->loopCount(); } - ANIM->start(); - } - } -} - -void SSBaseWidget::stopPainting(){ - if(ANIM!=0){ - ANIM->stop(); - ANIM->clear(); - delete ANIM; - ANIM = 0; - } -} diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/SSBaseWidget.h b/src-qt5/core/lumina-wm-INCOMPLETE/SSBaseWidget.h deleted file mode 100644 index a6574679..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/SSBaseWidget.h +++ /dev/null @@ -1,55 +0,0 @@ -//=========================================== -// Lumina-DE source code -// Copyright (c) 2015, Ken Moore -// Available under the 3-clause BSD license -// See the LICENSE file for full details -//=========================================== -// This class is the widget which provides the screensaver painting/plugin functionality -//=========================================== -#ifndef _LUMINA_DESKTOP_SCREEN_SAVER_BASE_WIDGET_H -#define _LUMINA_DESKTOP_SCREEN_SAVER_BASE_WIDGET_H - -#include "GlobalDefines.h" -#include "animations/BaseAnimGroup.h" - -class SSBaseWidget : public QWidget{ - Q_OBJECT -public: - SSBaseWidget(QWidget *parent, QSettings *set); - ~SSBaseWidget(); - - void setPlugin(QString); - -public slots: - void startPainting(); - void stopPainting(); - -private: - QString plugType, cplug; //type of custom painting to do - BaseAnimGroup *ANIM; - QSettings *settings; - -private slots: - -signals: - void InputDetected(); //just in case no event handling setup at the WM level - -protected: - void mouseMoveEvent(QMouseEvent *ev){ - ev->accept(); - emit InputDetected(); - } - void keyPressEvent(QKeyEvent *ev){ - ev->accept(); - emit InputDetected(); - } - void paintEvent(QPaintEvent*){ - QStyleOption opt; - opt.init(this); - QPainter p(this); - style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this); - } - -}; - -#endif diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/WMSession.cpp b/src-qt5/core/lumina-wm-INCOMPLETE/WMSession.cpp deleted file mode 100644 index 4a7c6e02..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/WMSession.cpp +++ /dev/null @@ -1,62 +0,0 @@ -//=========================================== -// Lumina-DE source code -// Copyright (c) 2015, Ken Moore -// Available under the 3-clause BSD license -// See the LICENSE file for full details -//=========================================== -#include "WMSession.h" - -#define DEBUG 1 -// ========== -// PUBLIC -// ========== -WMSession::WMSession(){ - if(DEBUG){ qDebug() << "Creating Event Filter..."; } - EFILTER = new EventFilter(); - if(DEBUG){ qDebug() << "Creating Screen Saver..."; } - SS = new LScreenSaver(); - if(DEBUG){ qDebug() << "Creating Window Manager..."; } - WM = new LWindowManager(); - EVThread = new QThread(); - EFILTER->moveToThread(EVThread); - //Setup connections - connect(EFILTER, SIGNAL(NewInputEvent()), SS, SLOT(newInputEvent()) ); - connect(EFILTER, SIGNAL(NewManagedWindow(WId)), WM, SLOT(NewWindow(WId)) ); - connect(EFILTER, SIGNAL(WindowClosed(WId)), WM, SLOT(ClosedWindow(WId)) ); - connect(EFILTER, SIGNAL(ModifyWindow(WId, LWM::WindowAction)), WM, SLOT(ModifyWindow(WId,LWM::WindowAction)) ); - connect(SS, SIGNAL(StartingScreenSaver()), EFILTER, SLOT(StartedSS()) ); - connect(SS, SIGNAL(ClosingScreenSaver()), EFILTER, SLOT(StoppedSS()) ); - connect(WM, SIGNAL(NewFullScreenWindows(QList<WId>)), EFILTER, SLOT(FullScreenChanged(QList<WId>)) ); -} - -WMSession::~WMSession(){ -} - -void WMSession::start(bool SSONLY){ - //Get the screensaver initialized/ready - if(DEBUG){ qDebug() << "Starting Screen Saver..."; } - SS->start(); - if(SSONLY){ return; } - //Now start pulling/filtering events - if(DEBUG){ qDebug() << "Starting Window Manager..."; } - WM->start(); - if(DEBUG){ qDebug() << "Starting Event Filter..."; } - EVThread->start(); - EFILTER->start(); - if(DEBUG){ qDebug() << "Done Starting WM session..."; } -} - -// ========== -// Public Slots -// ========== -void WMSession::reloadIcons(){ - -} - -void WMSession::newInputsAvailable(QStringList inputs){ - for(int i=0; i<inputs.length(); i++){ - if(inputs[i]=="--lock-now" || inputs[i]=="--test-ss"){ - QTimer::singleShot(0,SS, SLOT(LockScreenNow()) ); - } - } -} diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/WMSession.h b/src-qt5/core/lumina-wm-INCOMPLETE/WMSession.h deleted file mode 100644 index 5b511326..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/WMSession.h +++ /dev/null @@ -1,42 +0,0 @@ -//=========================================== -// Lumina-DE source code -// Copyright (c) 2015, Ken Moore -// Available under the 3-clause BSD license -// See the LICENSE file for full details -//=========================================== -#ifndef _LUMINA_DESKTOP_WINDOW_MANAGER_SESSION_H -#define _LUMINA_DESKTOP_WINDOW_MANAGER_SESSION_H - -#include "GlobalDefines.h" - -#include "LScreenSaver.h" -#include "LXcbEventFilter.h" -#include "LWindowManager.h" - -class WMSession : public QObject{ - Q_OBJECT -public: - WMSession(); - ~WMSession(); - - void start(bool SSONLY = false); - -private: - //XCB Event Watcher - EventFilter *EFILTER; - //ScreenSaver - LScreenSaver *SS; - //Window Manager - LWindowManager *WM; - - QThread *EVThread; //X Event thread - -public slots: - void reloadIcons(); - void newInputsAvailable(QStringList); - -private slots: - -}; - -#endif
\ No newline at end of file diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/animations/BaseAnimGroup.cpp b/src-qt5/core/lumina-wm-INCOMPLETE/animations/BaseAnimGroup.cpp deleted file mode 100644 index 1e55dc76..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/animations/BaseAnimGroup.cpp +++ /dev/null @@ -1,27 +0,0 @@ -//=========================================== -// Lumina-DE source code -// Copyright (c) 2015, Ken Moore -// Available under the 3-clause BSD license -// See the LICENSE file for full details -//=========================================== -#include "BaseAnimGroup.h" - -//Include all the known subclasses here, then add a unique ID for it to the functions at the bottom -#include "SampleAnimation.h" - -//============================== -// PLUGIN LOADING/LISTING -//============================== -BaseAnimGroup* BaseAnimGroup::NewAnimation(QString type, QWidget *parent, QSettings *set){ - //This is where we place all the known plugin ID's, and load the associated subclass - if(type == "sample"){ - return (new SampleAnimation(parent, set)); - }else{ - //Unknown screensaver, return a blank animation group - return (new BaseAnimGroup(parent, set)); - } -} - -QStringList BaseAnimGroup::KnownAnimations(){ - return (QStringList() << "sample"); -}
\ No newline at end of file diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/animations/BaseAnimGroup.h b/src-qt5/core/lumina-wm-INCOMPLETE/animations/BaseAnimGroup.h deleted file mode 100644 index dd7269d4..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/animations/BaseAnimGroup.h +++ /dev/null @@ -1,37 +0,0 @@ -//=========================================== -// Lumina-DE source code -// Copyright (c) 2015, Ken Moore -// Available under the 3-clause BSD license -// See the LICENSE file for full details -//=========================================== -// This class is the container which provides the screensaver animations -// and should be subclassed for each of the various animation types -//=========================================== -#ifndef _LUMINA_DESKTOP_SCREEN_SAVER_BASE_ANIMATION_GROUP_H -#define _LUMINA_DESKTOP_SCREEN_SAVER_BASE_ANIMATION_GROUP_H - -#include "GlobalDefines.h" - -class BaseAnimGroup : public QParallelAnimationGroup{ - Q_OBJECT -public: - QWidget *canvas; - QSettings *settings; - - virtual void LoadAnimations(){} //This is the main function which needs to be subclassed - - BaseAnimGroup(QWidget *parent, QSettings *set){ - canvas = parent; - settings = set; - } - ~BaseAnimGroup(){} - - //============================== - // PLUGIN LOADING/LISTING (Change in the .cpp file) - //============================== - static BaseAnimGroup* NewAnimation(QString type, QWidget *parent, QSettings *set); - static QStringList KnownAnimations(); - -}; - -#endif
\ No newline at end of file diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/animations/SampleAnimation.h b/src-qt5/core/lumina-wm-INCOMPLETE/animations/SampleAnimation.h deleted file mode 100644 index e0f11ba5..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/animations/SampleAnimation.h +++ /dev/null @@ -1,45 +0,0 @@ -//=========================================== -// Lumina-DE source code -// Copyright (c) 2015, Ken Moore -// Available under the 3-clause BSD license -// See the LICENSE file for full details -//=========================================== -// This class is the sample plugin for a ScreenSaver animation -//=========================================== -#ifndef _LUMINA_DESKTOP_SCREEN_SAVER_SAMPLE_ANIMATION_H -#define _LUMINA_DESKTOP_SCREEN_SAVER_SAMPLE_ANIMATION_H - -#include "GlobalDefines.h" -#include "BaseAnimGroup.h" - -class SampleAnimation : public BaseAnimGroup{ - Q_OBJECT -private: - QWidget *ball; - -public: - SampleAnimation(QWidget *parent, QSettings *set) : BaseAnimGroup(parent, set){} - ~SampleAnimation(){ this->stop(); delete ball; } - - void LoadAnimations(){ - //qDebug() << "Loading Sample Animation"; - ball = new QWidget(canvas); - //This creates a red "ball" on the widget which is going to expand/contract in the center of the screen - ball->setStyleSheet("background: qradialgradient(spread:pad, cx:0.5, cy:0.5, radius:0.5, fx:0.341, fy:0.796, stop:0.00531915 rgba(107, 10, 10, 255), stop:0.521277 rgba(170, 10, 10, 255), stop:0.957447 rgba(200, 0, 0, 255), stop:0.994681 rgba(0, 0, 0, 225), stop:1 rgba(255, 255, 255, 0));"); - //Now setup the movements - QPropertyAnimation *move = new QPropertyAnimation(ball,"geometry"); - QPoint ctr(canvas->width()/2, canvas->height()/2); - QRect initgeom(ctr-QPoint(12,12), QSize(24,24) ); - move->setKeyValueAt(0, initgeom ); //starting point - move->setKeyValueAt(1, initgeom ); //ending point (same as start for continuity) - int size = canvas->width(); - if(size > canvas->height()){ size = canvas->height(); } - move->setKeyValueAt(0.5, QRect(ctr-QPoint(size/2, size/2), QSize(size,size))); //touch the edge of the screen - move->setDuration(10000); //10 seconds - this->addAnimation(move); - this->setLoopCount(10); //repeat 10 times - ball->show(); - } - -}; -#endif diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/animations/animations.pri b/src-qt5/core/lumina-wm-INCOMPLETE/animations/animations.pri deleted file mode 100644 index 5473d4e1..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/animations/animations.pri +++ /dev/null @@ -1,6 +0,0 @@ -SOURCES += $$PWD/BaseAnimGroup.cpp - -HEADERS += $$PWD/BaseAnimGroup.h \ - $$PWD/SampleAnimation.h - -FORMS +=
\ No newline at end of file diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_af.ts b/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_af.ts deleted file mode 100644 index 94fa7f9d..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_af.ts +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.1" language="af_ZA"> -<context> - <name>LLockScreen</name> - <message> - <location filename="../LLockScreen.ui" line="14"/> - <source>Form</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="114"/> - <source>Password</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="126"/> - <source>Unlock Session</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="39"/> - <source>Locked by: %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Too Many Failures</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Wait %1 Minutes</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="77"/> - <source>Failed Attempts: %1</source> - <translation type="unfinished"></translation> - </message> -</context> -</TS> diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_ar.ts b/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_ar.ts deleted file mode 100644 index c1a77f55..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_ar.ts +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.1" language="ar_EG"> -<context> - <name>LLockScreen</name> - <message> - <location filename="../LLockScreen.ui" line="14"/> - <source>Form</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="114"/> - <source>Password</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="126"/> - <source>Unlock Session</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="39"/> - <source>Locked by: %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Too Many Failures</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Wait %1 Minutes</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="77"/> - <source>Failed Attempts: %1</source> - <translation type="unfinished"></translation> - </message> -</context> -</TS> diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_az.ts b/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_az.ts deleted file mode 100644 index 7f25a0f6..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_az.ts +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.1" language="az_AZ"> -<context> - <name>LLockScreen</name> - <message> - <location filename="../LLockScreen.ui" line="14"/> - <source>Form</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="114"/> - <source>Password</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="126"/> - <source>Unlock Session</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="39"/> - <source>Locked by: %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Too Many Failures</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Wait %1 Minutes</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="77"/> - <source>Failed Attempts: %1</source> - <translation type="unfinished"></translation> - </message> -</context> -</TS> diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_bg.ts b/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_bg.ts deleted file mode 100644 index bc409571..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_bg.ts +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.1" language="bg_BG"> -<context> - <name>LLockScreen</name> - <message> - <location filename="../LLockScreen.ui" line="14"/> - <source>Form</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="114"/> - <source>Password</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="126"/> - <source>Unlock Session</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="39"/> - <source>Locked by: %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Too Many Failures</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Wait %1 Minutes</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="77"/> - <source>Failed Attempts: %1</source> - <translation type="unfinished"></translation> - </message> -</context> -</TS> diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_bn.ts b/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_bn.ts deleted file mode 100644 index 9ed8452e..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_bn.ts +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.1" language="bn_BD"> -<context> - <name>LLockScreen</name> - <message> - <location filename="../LLockScreen.ui" line="14"/> - <source>Form</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="114"/> - <source>Password</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="126"/> - <source>Unlock Session</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="39"/> - <source>Locked by: %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Too Many Failures</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Wait %1 Minutes</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="77"/> - <source>Failed Attempts: %1</source> - <translation type="unfinished"></translation> - </message> -</context> -</TS> diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_bs.ts b/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_bs.ts deleted file mode 100644 index a6b8877f..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_bs.ts +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.1" language="bs_BA"> -<context> - <name>LLockScreen</name> - <message> - <location filename="../LLockScreen.ui" line="14"/> - <source>Form</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="114"/> - <source>Password</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="126"/> - <source>Unlock Session</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="39"/> - <source>Locked by: %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Too Many Failures</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Wait %1 Minutes</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="77"/> - <source>Failed Attempts: %1</source> - <translation type="unfinished"></translation> - </message> -</context> -</TS> diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_ca.ts b/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_ca.ts deleted file mode 100644 index 106fcc87..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_ca.ts +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.1" language="ca_ES"> -<context> - <name>LLockScreen</name> - <message> - <location filename="../LLockScreen.ui" line="14"/> - <source>Form</source> - <translation>Formulari</translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="114"/> - <source>Password</source> - <translation>Contrasenya</translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="126"/> - <source>Unlock Session</source> - <translation>Desbloqueja la sessió</translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="39"/> - <source>Locked by: %1</source> - <translation>Bloquejat per %1</translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Too Many Failures</source> - <translation>Massa fallades</translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Wait %1 Minutes</source> - <translation>Espereu %1 minuts</translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="77"/> - <source>Failed Attempts: %1</source> - <translation>Intents fallits: %1</translation> - </message> -</context> -</TS> diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_cs.ts b/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_cs.ts deleted file mode 100644 index 8d58b752..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_cs.ts +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.1" language="cs_CZ"> -<context> - <name>LLockScreen</name> - <message> - <location filename="../LLockScreen.ui" line="14"/> - <source>Form</source> - <translation>Formulář</translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="114"/> - <source>Password</source> - <translation>Heslo</translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="126"/> - <source>Unlock Session</source> - <translation>Odemknout sezení</translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="39"/> - <source>Locked by: %1</source> - <translation>Zamknuto: %1</translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Too Many Failures</source> - <translation>Příliš mnoho selhání</translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Wait %1 Minutes</source> - <translation>Počkat %1 minut</translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="77"/> - <source>Failed Attempts: %1</source> - <translation>Nepodařených pokusů: %1</translation> - </message> -</context> -</TS> diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_cy.ts b/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_cy.ts deleted file mode 100644 index 9f19c204..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_cy.ts +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.1" language="cy_GB"> -<context> - <name>LLockScreen</name> - <message> - <location filename="../LLockScreen.ui" line="14"/> - <source>Form</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="114"/> - <source>Password</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="126"/> - <source>Unlock Session</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="39"/> - <source>Locked by: %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Too Many Failures</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Wait %1 Minutes</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="77"/> - <source>Failed Attempts: %1</source> - <translation type="unfinished"></translation> - </message> -</context> -</TS> diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_da.ts b/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_da.ts deleted file mode 100644 index 0ead248b..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_da.ts +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.1" language="da"> -<context> - <name>LLockScreen</name> - <message> - <location filename="../LLockScreen.ui" line="14"/> - <source>Form</source> - <translation>Formular</translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="114"/> - <source>Password</source> - <translation>Adgangskode</translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="126"/> - <source>Unlock Session</source> - <translation>Lås session op</translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="39"/> - <source>Locked by: %1</source> - <translation>Låst af: %1</translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Too Many Failures</source> - <translation>For mange mislykkede forsøg</translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Wait %1 Minutes</source> - <translation>Vent %1 minutter</translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="77"/> - <source>Failed Attempts: %1</source> - <translation>Mislykkede forsøg: %1</translation> - </message> -</context> -</TS> diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_de.ts b/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_de.ts deleted file mode 100644 index 9dac4498..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_de.ts +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.1" language="de_DE"> -<context> - <name>LLockScreen</name> - <message> - <location filename="../LLockScreen.ui" line="14"/> - <source>Form</source> - <translation>Fenster</translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="114"/> - <source>Password</source> - <translation>Kennwort</translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="126"/> - <source>Unlock Session</source> - <translation>Sitzung entsperren</translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="39"/> - <source>Locked by: %1</source> - <translation>Gesperrt durch: %1</translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Too Many Failures</source> - <translation>Zu viele Fehlversuche</translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Wait %1 Minutes</source> - <translation>%1 Minuten warten</translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="77"/> - <source>Failed Attempts: %1</source> - <translation>Fehlgeschlagene Versuche: %1</translation> - </message> -</context> -</TS> diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_el.ts b/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_el.ts deleted file mode 100644 index 492b417b..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_el.ts +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.1" language="el_GR"> -<context> - <name>LLockScreen</name> - <message> - <location filename="../LLockScreen.ui" line="14"/> - <source>Form</source> - <translation>Μορφή</translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="114"/> - <source>Password</source> - <translation>Κωδικός</translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="126"/> - <source>Unlock Session</source> - <translation>Ξεκλείδωμα Συνεδρίας</translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="39"/> - <source>Locked by: %1</source> - <translation>Κλειδώθηκε απο: %1</translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Too Many Failures</source> - <translation>Πάρα Πολλές Αποτυχίες</translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Wait %1 Minutes</source> - <translation>Περιμένετε %1 Λεπτά</translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="77"/> - <source>Failed Attempts: %1</source> - <translation>Αποτυχημένες προσπάθειες: %1</translation> - </message> -</context> -</TS> diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_en_GB.ts b/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_en_GB.ts deleted file mode 100644 index 78e3a18f..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_en_GB.ts +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.1" language="en_GB"> -<context> - <name>LLockScreen</name> - <message> - <location filename="../LLockScreen.ui" line="14"/> - <source>Form</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="114"/> - <source>Password</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="126"/> - <source>Unlock Session</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="39"/> - <source>Locked by: %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Too Many Failures</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Wait %1 Minutes</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="77"/> - <source>Failed Attempts: %1</source> - <translation type="unfinished"></translation> - </message> -</context> -</TS> diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_en_ZA.ts b/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_en_ZA.ts deleted file mode 100644 index 50272a77..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_en_ZA.ts +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.1" language="en_ZA"> -<context> - <name>LLockScreen</name> - <message> - <location filename="../LLockScreen.ui" line="14"/> - <source>Form</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="114"/> - <source>Password</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="126"/> - <source>Unlock Session</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="39"/> - <source>Locked by: %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Too Many Failures</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Wait %1 Minutes</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="77"/> - <source>Failed Attempts: %1</source> - <translation type="unfinished"></translation> - </message> -</context> -</TS> diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_es.ts b/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_es.ts deleted file mode 100644 index b70e5640..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_es.ts +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.1" language="es_ES"> -<context> - <name>LLockScreen</name> - <message> - <location filename="../LLockScreen.ui" line="14"/> - <source>Form</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="114"/> - <source>Password</source> - <translation>Contraseña</translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="126"/> - <source>Unlock Session</source> - <translation>Desbloquear Sesion</translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="39"/> - <source>Locked by: %1</source> - <translation>Bloqueado por:%1</translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Too Many Failures</source> - <translation>Demasiadas Fallas</translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Wait %1 Minutes</source> - <translation>Espera %1 Minutos</translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="77"/> - <source>Failed Attempts: %1</source> - <translation>Intentos Fallidos: %1</translation> - </message> -</context> -</TS> diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_et.ts b/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_et.ts deleted file mode 100644 index 3dd232ba..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_et.ts +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.1" language="et_EE"> -<context> - <name>LLockScreen</name> - <message> - <location filename="../LLockScreen.ui" line="14"/> - <source>Form</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="114"/> - <source>Password</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="126"/> - <source>Unlock Session</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="39"/> - <source>Locked by: %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Too Many Failures</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Wait %1 Minutes</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="77"/> - <source>Failed Attempts: %1</source> - <translation type="unfinished"></translation> - </message> -</context> -</TS> diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_eu.ts b/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_eu.ts deleted file mode 100644 index 64b6c785..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_eu.ts +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.1" language="eu_ES"> -<context> - <name>LLockScreen</name> - <message> - <location filename="../LLockScreen.ui" line="14"/> - <source>Form</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="114"/> - <source>Password</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="126"/> - <source>Unlock Session</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="39"/> - <source>Locked by: %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Too Many Failures</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Wait %1 Minutes</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="77"/> - <source>Failed Attempts: %1</source> - <translation type="unfinished"></translation> - </message> -</context> -</TS> diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_fa.ts b/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_fa.ts deleted file mode 100644 index f4441b5f..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_fa.ts +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.1" language="fa_IR"> -<context> - <name>LLockScreen</name> - <message> - <location filename="../LLockScreen.ui" line="14"/> - <source>Form</source> - <translation>از</translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="114"/> - <source>Password</source> - <translation>گذرواژه</translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="126"/> - <source>Unlock Session</source> - <translation>نشست را باز کن</translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="39"/> - <source>Locked by: %1</source> - <translation>بسته شده بدست: %1</translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Too Many Failures</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Wait %1 Minutes</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="77"/> - <source>Failed Attempts: %1</source> - <translation type="unfinished"></translation> - </message> -</context> -</TS> diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_fi.ts b/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_fi.ts deleted file mode 100644 index a9ecb8f8..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_fi.ts +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.1" language="fi_FI"> -<context> - <name>LLockScreen</name> - <message> - <location filename="../LLockScreen.ui" line="14"/> - <source>Form</source> - <translation>Lomake</translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="114"/> - <source>Password</source> - <translation>Salasana</translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="126"/> - <source>Unlock Session</source> - <translation>Poista istunnon lukitus</translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="39"/> - <source>Locked by: %1</source> - <translation>Lukinnut: %1</translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Too Many Failures</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Wait %1 Minutes</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="77"/> - <source>Failed Attempts: %1</source> - <translation type="unfinished"></translation> - </message> -</context> -</TS> diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_fr.ts b/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_fr.ts deleted file mode 100644 index d53f60e3..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_fr.ts +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.1" language="fr_FR"> -<context> - <name>LLockScreen</name> - <message> - <location filename="../LLockScreen.ui" line="14"/> - <source>Form</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="114"/> - <source>Password</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="126"/> - <source>Unlock Session</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="39"/> - <source>Locked by: %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Too Many Failures</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Wait %1 Minutes</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="77"/> - <source>Failed Attempts: %1</source> - <translation type="unfinished"></translation> - </message> -</context> -</TS> diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_fr_CA.ts b/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_fr_CA.ts deleted file mode 100644 index 704ad70f..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_fr_CA.ts +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.1" language="fr_CA"> -<context> - <name>LLockScreen</name> - <message> - <location filename="../LLockScreen.ui" line="14"/> - <source>Form</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="114"/> - <source>Password</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="126"/> - <source>Unlock Session</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="39"/> - <source>Locked by: %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Too Many Failures</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Wait %1 Minutes</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="77"/> - <source>Failed Attempts: %1</source> - <translation type="unfinished"></translation> - </message> -</context> -</TS> diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_gl.ts b/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_gl.ts deleted file mode 100644 index 3ae52d22..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_gl.ts +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.1" language="gl_ES"> -<context> - <name>LLockScreen</name> - <message> - <location filename="../LLockScreen.ui" line="14"/> - <source>Form</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="114"/> - <source>Password</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="126"/> - <source>Unlock Session</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="39"/> - <source>Locked by: %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Too Many Failures</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Wait %1 Minutes</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="77"/> - <source>Failed Attempts: %1</source> - <translation type="unfinished"></translation> - </message> -</context> -</TS> diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_he.ts b/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_he.ts deleted file mode 100644 index 42c618f6..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_he.ts +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.1" language="he_IL"> -<context> - <name>LLockScreen</name> - <message> - <location filename="../LLockScreen.ui" line="14"/> - <source>Form</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="114"/> - <source>Password</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="126"/> - <source>Unlock Session</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="39"/> - <source>Locked by: %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Too Many Failures</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Wait %1 Minutes</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="77"/> - <source>Failed Attempts: %1</source> - <translation type="unfinished"></translation> - </message> -</context> -</TS> diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_hi.ts b/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_hi.ts deleted file mode 100644 index b1e3b837..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_hi.ts +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.1" language="hi_IN"> -<context> - <name>LLockScreen</name> - <message> - <location filename="../LLockScreen.ui" line="14"/> - <source>Form</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="114"/> - <source>Password</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="126"/> - <source>Unlock Session</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="39"/> - <source>Locked by: %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Too Many Failures</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Wait %1 Minutes</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="77"/> - <source>Failed Attempts: %1</source> - <translation type="unfinished"></translation> - </message> -</context> -</TS> diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_hr.ts b/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_hr.ts deleted file mode 100644 index 6e365d53..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_hr.ts +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.1" language="hr_HR"> -<context> - <name>LLockScreen</name> - <message> - <location filename="../LLockScreen.ui" line="14"/> - <source>Form</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="114"/> - <source>Password</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="126"/> - <source>Unlock Session</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="39"/> - <source>Locked by: %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Too Many Failures</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Wait %1 Minutes</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="77"/> - <source>Failed Attempts: %1</source> - <translation type="unfinished"></translation> - </message> -</context> -</TS> diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_hu.ts b/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_hu.ts deleted file mode 100644 index 201e8871..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_hu.ts +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.1" language="hu_HU"> -<context> - <name>LLockScreen</name> - <message> - <location filename="../LLockScreen.ui" line="14"/> - <source>Form</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="114"/> - <source>Password</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="126"/> - <source>Unlock Session</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="39"/> - <source>Locked by: %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Too Many Failures</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Wait %1 Minutes</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="77"/> - <source>Failed Attempts: %1</source> - <translation type="unfinished"></translation> - </message> -</context> -</TS> diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_id.ts b/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_id.ts deleted file mode 100644 index babeef2f..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_id.ts +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.1" language="id_ID"> -<context> - <name>LLockScreen</name> - <message> - <location filename="../LLockScreen.ui" line="14"/> - <source>Form</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="114"/> - <source>Password</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="126"/> - <source>Unlock Session</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="39"/> - <source>Locked by: %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Too Many Failures</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Wait %1 Minutes</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="77"/> - <source>Failed Attempts: %1</source> - <translation type="unfinished"></translation> - </message> -</context> -</TS> diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_is.ts b/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_is.ts deleted file mode 100644 index 6eec6ff3..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_is.ts +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.1" language="is_IS"> -<context> - <name>LLockScreen</name> - <message> - <location filename="../LLockScreen.ui" line="14"/> - <source>Form</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="114"/> - <source>Password</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="126"/> - <source>Unlock Session</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="39"/> - <source>Locked by: %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Too Many Failures</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Wait %1 Minutes</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="77"/> - <source>Failed Attempts: %1</source> - <translation type="unfinished"></translation> - </message> -</context> -</TS> diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_it.ts b/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_it.ts deleted file mode 100644 index ff630fb3..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_it.ts +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.1" language="it_IT"> -<context> - <name>LLockScreen</name> - <message> - <location filename="../LLockScreen.ui" line="14"/> - <source>Form</source> - <translation>Modulo</translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="114"/> - <source>Password</source> - <translation>Parola chiave</translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="126"/> - <source>Unlock Session</source> - <translation>Sessione sbloccata</translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="39"/> - <source>Locked by: %1</source> - <translation>Bloccato da: %1</translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Too Many Failures</source> - <translation>Troppi errori</translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Wait %1 Minutes</source> - <translation>Aspetta %1 minuti</translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="77"/> - <source>Failed Attempts: %1</source> - <translation>Tentativi non riusciti: %1</translation> - </message> -</context> -</TS> diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_ja.ts b/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_ja.ts deleted file mode 100644 index 52c9b6ae..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_ja.ts +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.1" language="ja_JP"> -<context> - <name>LLockScreen</name> - <message> - <location filename="../LLockScreen.ui" line="14"/> - <source>Form</source> - <translation>Form</translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="114"/> - <source>Password</source> - <translation>パスワード</translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="126"/> - <source>Unlock Session</source> - <translation>セッションのロックを解除</translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="39"/> - <source>Locked by: %1</source> - <translation>%1 によってロックされました</translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Too Many Failures</source> - <translation>認証に続けて失敗しました</translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Wait %1 Minutes</source> - <translation>%1 分お待ちください</translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="77"/> - <source>Failed Attempts: %1</source> - <translation>失敗した回数: %1</translation> - </message> -</context> -</TS> diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_ka.ts b/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_ka.ts deleted file mode 100644 index 86508f3a..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_ka.ts +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.1" language="ka_GE"> -<context> - <name>LLockScreen</name> - <message> - <location filename="../LLockScreen.ui" line="14"/> - <source>Form</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="114"/> - <source>Password</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="126"/> - <source>Unlock Session</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="39"/> - <source>Locked by: %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Too Many Failures</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Wait %1 Minutes</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="77"/> - <source>Failed Attempts: %1</source> - <translation type="unfinished"></translation> - </message> -</context> -</TS> diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_ko.ts b/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_ko.ts deleted file mode 100644 index c1898e09..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_ko.ts +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.1" language="ko_KR"> -<context> - <name>LLockScreen</name> - <message> - <location filename="../LLockScreen.ui" line="14"/> - <source>Form</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="114"/> - <source>Password</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="126"/> - <source>Unlock Session</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="39"/> - <source>Locked by: %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Too Many Failures</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Wait %1 Minutes</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="77"/> - <source>Failed Attempts: %1</source> - <translation type="unfinished"></translation> - </message> -</context> -</TS> diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_lt.ts b/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_lt.ts deleted file mode 100644 index e98e4f5e..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_lt.ts +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.1" language="lt_LT"> -<context> - <name>LLockScreen</name> - <message> - <location filename="../LLockScreen.ui" line="14"/> - <source>Form</source> - <translation>Forma</translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="114"/> - <source>Password</source> - <translation>Slaptažodis</translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="126"/> - <source>Unlock Session</source> - <translation>Atrakinti seansą</translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="39"/> - <source>Locked by: %1</source> - <translation>Užrakino: %1</translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Too Many Failures</source> - <translation>Per daug nesėkmių</translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Wait %1 Minutes</source> - <translation>Palaukite %1 minutes</translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="77"/> - <source>Failed Attempts: %1</source> - <translation>Nepavykusių bandymų: %1</translation> - </message> -</context> -</TS> diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_lv.ts b/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_lv.ts deleted file mode 100644 index 1a4139fe..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_lv.ts +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.1" language="lv_LV"> -<context> - <name>LLockScreen</name> - <message> - <location filename="../LLockScreen.ui" line="14"/> - <source>Form</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="114"/> - <source>Password</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="126"/> - <source>Unlock Session</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="39"/> - <source>Locked by: %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Too Many Failures</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Wait %1 Minutes</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="77"/> - <source>Failed Attempts: %1</source> - <translation type="unfinished"></translation> - </message> -</context> -</TS> diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_mk.ts b/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_mk.ts deleted file mode 100644 index 595a844c..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_mk.ts +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.1" language="mk_MK"> -<context> - <name>LLockScreen</name> - <message> - <location filename="../LLockScreen.ui" line="14"/> - <source>Form</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="114"/> - <source>Password</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="126"/> - <source>Unlock Session</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="39"/> - <source>Locked by: %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Too Many Failures</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Wait %1 Minutes</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="77"/> - <source>Failed Attempts: %1</source> - <translation type="unfinished"></translation> - </message> -</context> -</TS> diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_mn.ts b/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_mn.ts deleted file mode 100644 index 0bcaaad2..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_mn.ts +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.1" language="mn_MN"> -<context> - <name>LLockScreen</name> - <message> - <location filename="../LLockScreen.ui" line="14"/> - <source>Form</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="114"/> - <source>Password</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="126"/> - <source>Unlock Session</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="39"/> - <source>Locked by: %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Too Many Failures</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Wait %1 Minutes</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="77"/> - <source>Failed Attempts: %1</source> - <translation type="unfinished"></translation> - </message> -</context> -</TS> diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_ms.ts b/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_ms.ts deleted file mode 100644 index b583bf67..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_ms.ts +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.1" language="ms_MY"> -<context> - <name>LLockScreen</name> - <message> - <location filename="../LLockScreen.ui" line="14"/> - <source>Form</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="114"/> - <source>Password</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="126"/> - <source>Unlock Session</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="39"/> - <source>Locked by: %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Too Many Failures</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Wait %1 Minutes</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="77"/> - <source>Failed Attempts: %1</source> - <translation type="unfinished"></translation> - </message> -</context> -</TS> diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_mt.ts b/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_mt.ts deleted file mode 100644 index 11b14d02..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_mt.ts +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.1" language="mt_MT"> -<context> - <name>LLockScreen</name> - <message> - <location filename="../LLockScreen.ui" line="14"/> - <source>Form</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="114"/> - <source>Password</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="126"/> - <source>Unlock Session</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="39"/> - <source>Locked by: %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Too Many Failures</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Wait %1 Minutes</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="77"/> - <source>Failed Attempts: %1</source> - <translation type="unfinished"></translation> - </message> -</context> -</TS> diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_nb.ts b/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_nb.ts deleted file mode 100644 index 8c484832..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_nb.ts +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.1" language="nb_NO"> -<context> - <name>LLockScreen</name> - <message> - <location filename="../LLockScreen.ui" line="14"/> - <source>Form</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="114"/> - <source>Password</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="126"/> - <source>Unlock Session</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="39"/> - <source>Locked by: %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Too Many Failures</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Wait %1 Minutes</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="77"/> - <source>Failed Attempts: %1</source> - <translation type="unfinished"></translation> - </message> -</context> -</TS> diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_nl.ts b/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_nl.ts deleted file mode 100644 index b164c911..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_nl.ts +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.1" language="nl_NL"> -<context> - <name>LLockScreen</name> - <message> - <location filename="../LLockScreen.ui" line="14"/> - <source>Form</source> - <translation>Formulier</translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="114"/> - <source>Password</source> - <translation>Wachtwoord</translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="126"/> - <source>Unlock Session</source> - <translation>Ontgrendel sessie</translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="39"/> - <source>Locked by: %1</source> - <translation>Vergrendeld door: %1</translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Too Many Failures</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Wait %1 Minutes</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="77"/> - <source>Failed Attempts: %1</source> - <translation type="unfinished"></translation> - </message> -</context> -</TS> diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_pa.ts b/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_pa.ts deleted file mode 100644 index d4af901e..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_pa.ts +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.1" language="pa_IN"> -<context> - <name>LLockScreen</name> - <message> - <location filename="../LLockScreen.ui" line="14"/> - <source>Form</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="114"/> - <source>Password</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="126"/> - <source>Unlock Session</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="39"/> - <source>Locked by: %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Too Many Failures</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Wait %1 Minutes</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="77"/> - <source>Failed Attempts: %1</source> - <translation type="unfinished"></translation> - </message> -</context> -</TS> diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_pl.ts b/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_pl.ts deleted file mode 100644 index 6be95399..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_pl.ts +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.1" language="pl_PL"> -<context> - <name>LLockScreen</name> - <message> - <location filename="../LLockScreen.ui" line="14"/> - <source>Form</source> - <translation type="unfinished">Formularz</translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="114"/> - <source>Password</source> - <translation>Hasło</translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="126"/> - <source>Unlock Session</source> - <translation>Odblokuj Sesję</translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="39"/> - <source>Locked by: %1</source> - <translation>Zablokowane przez: %1</translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Too Many Failures</source> - <translation>Za Dużo Błędów</translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Wait %1 Minutes</source> - <translation type="unfinished">Zaczekaj %1 Minut</translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="77"/> - <source>Failed Attempts: %1</source> - <translation>Nieudanych Prób: %1</translation> - </message> -</context> -</TS> diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_pt.ts b/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_pt.ts deleted file mode 100644 index c2aafc06..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_pt.ts +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.1" language="pt_BR"> -<context> - <name>LLockScreen</name> - <message> - <location filename="../LLockScreen.ui" line="14"/> - <source>Form</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="114"/> - <source>Password</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="126"/> - <source>Unlock Session</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="39"/> - <source>Locked by: %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Too Many Failures</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Wait %1 Minutes</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="77"/> - <source>Failed Attempts: %1</source> - <translation type="unfinished"></translation> - </message> -</context> -</TS> diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_pt_BR.ts b/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_pt_BR.ts deleted file mode 100644 index c0a0387a..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_pt_BR.ts +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.1" language="pt_BR"> -<context> - <name>LLockScreen</name> - <message> - <location filename="../LLockScreen.ui" line="14"/> - <source>Form</source> - <translation>Formulário</translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="114"/> - <source>Password</source> - <translation>Senha</translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="126"/> - <source>Unlock Session</source> - <translation>Desbloquear Sessão</translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="39"/> - <source>Locked by: %1</source> - <translation>Bloqueado por: %1</translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Too Many Failures</source> - <translation>Muitas Falhas</translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Wait %1 Minutes</source> - <translation>Aguarde %1 Minutos</translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="77"/> - <source>Failed Attempts: %1</source> - <translation>Tentativas com Falhas: %1</translation> - </message> -</context> -</TS> diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_ro.ts b/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_ro.ts deleted file mode 100644 index 0b9f7367..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_ro.ts +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.1" language="ro_RO"> -<context> - <name>LLockScreen</name> - <message> - <location filename="../LLockScreen.ui" line="14"/> - <source>Form</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="114"/> - <source>Password</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="126"/> - <source>Unlock Session</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="39"/> - <source>Locked by: %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Too Many Failures</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Wait %1 Minutes</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="77"/> - <source>Failed Attempts: %1</source> - <translation type="unfinished"></translation> - </message> -</context> -</TS> diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_ru.ts b/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_ru.ts deleted file mode 100644 index 659116b8..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_ru.ts +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.1" language="ru_RU"> -<context> - <name>LLockScreen</name> - <message> - <location filename="../LLockScreen.ui" line="14"/> - <source>Form</source> - <translation>Экран блокировки</translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="114"/> - <source>Password</source> - <translation>Пароль</translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="126"/> - <source>Unlock Session</source> - <translation>Разблокировать сессию</translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="39"/> - <source>Locked by: %1</source> - <translation>Заблокировано: %1</translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Too Many Failures</source> - <translation>Слишком много неудач</translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Wait %1 Minutes</source> - <translation>Подождите %1 минут(ы)</translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="77"/> - <source>Failed Attempts: %1</source> - <translation>Неудачные попытки: %1</translation> - </message> -</context> -</TS> diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_sk.ts b/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_sk.ts deleted file mode 100644 index dab370e5..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_sk.ts +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.1" language="sk_SK"> -<context> - <name>LLockScreen</name> - <message> - <location filename="../LLockScreen.ui" line="14"/> - <source>Form</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="114"/> - <source>Password</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="126"/> - <source>Unlock Session</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="39"/> - <source>Locked by: %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Too Many Failures</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Wait %1 Minutes</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="77"/> - <source>Failed Attempts: %1</source> - <translation type="unfinished"></translation> - </message> -</context> -</TS> diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_sl.ts b/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_sl.ts deleted file mode 100644 index 69d4fc96..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_sl.ts +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.1" language="sl_SI"> -<context> - <name>LLockScreen</name> - <message> - <location filename="../LLockScreen.ui" line="14"/> - <source>Form</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="114"/> - <source>Password</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="126"/> - <source>Unlock Session</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="39"/> - <source>Locked by: %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Too Many Failures</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Wait %1 Minutes</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="77"/> - <source>Failed Attempts: %1</source> - <translation type="unfinished"></translation> - </message> -</context> -</TS> diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_sr.ts b/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_sr.ts deleted file mode 100644 index 1f825101..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_sr.ts +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.1" language="sr_RS"> -<context> - <name>LLockScreen</name> - <message> - <location filename="../LLockScreen.ui" line="14"/> - <source>Form</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="114"/> - <source>Password</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="126"/> - <source>Unlock Session</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="39"/> - <source>Locked by: %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Too Many Failures</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Wait %1 Minutes</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="77"/> - <source>Failed Attempts: %1</source> - <translation type="unfinished"></translation> - </message> -</context> -</TS> diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_sv.ts b/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_sv.ts deleted file mode 100644 index f9df7d49..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_sv.ts +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.1" language="sv_SE"> -<context> - <name>LLockScreen</name> - <message> - <location filename="../LLockScreen.ui" line="14"/> - <source>Form</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="114"/> - <source>Password</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="126"/> - <source>Unlock Session</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="39"/> - <source>Locked by: %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Too Many Failures</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Wait %1 Minutes</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="77"/> - <source>Failed Attempts: %1</source> - <translation type="unfinished"></translation> - </message> -</context> -</TS> diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_sw.ts b/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_sw.ts deleted file mode 100644 index ee493a36..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_sw.ts +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.1" language="sw_TZ"> -<context> - <name>LLockScreen</name> - <message> - <location filename="../LLockScreen.ui" line="14"/> - <source>Form</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="114"/> - <source>Password</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="126"/> - <source>Unlock Session</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="39"/> - <source>Locked by: %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Too Many Failures</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Wait %1 Minutes</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="77"/> - <source>Failed Attempts: %1</source> - <translation type="unfinished"></translation> - </message> -</context> -</TS> diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_ta.ts b/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_ta.ts deleted file mode 100644 index c998a8c9..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_ta.ts +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.1" language="ta_IN"> -<context> - <name>LLockScreen</name> - <message> - <location filename="../LLockScreen.ui" line="14"/> - <source>Form</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="114"/> - <source>Password</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="126"/> - <source>Unlock Session</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="39"/> - <source>Locked by: %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Too Many Failures</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Wait %1 Minutes</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="77"/> - <source>Failed Attempts: %1</source> - <translation type="unfinished"></translation> - </message> -</context> -</TS> diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_tg.ts b/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_tg.ts deleted file mode 100644 index f2847d66..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_tg.ts +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.1" language="tg_TJ"> -<context> - <name>LLockScreen</name> - <message> - <location filename="../LLockScreen.ui" line="14"/> - <source>Form</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="114"/> - <source>Password</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="126"/> - <source>Unlock Session</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="39"/> - <source>Locked by: %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Too Many Failures</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Wait %1 Minutes</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="77"/> - <source>Failed Attempts: %1</source> - <translation type="unfinished"></translation> - </message> -</context> -</TS> diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_th.ts b/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_th.ts deleted file mode 100644 index 3d34afe7..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_th.ts +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.1" language="th_TH"> -<context> - <name>LLockScreen</name> - <message> - <location filename="../LLockScreen.ui" line="14"/> - <source>Form</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="114"/> - <source>Password</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="126"/> - <source>Unlock Session</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="39"/> - <source>Locked by: %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Too Many Failures</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Wait %1 Minutes</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="77"/> - <source>Failed Attempts: %1</source> - <translation type="unfinished"></translation> - </message> -</context> -</TS> diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_tr.ts b/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_tr.ts deleted file mode 100644 index deb5397b..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_tr.ts +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.1" language="tr_TR"> -<context> - <name>LLockScreen</name> - <message> - <location filename="../LLockScreen.ui" line="14"/> - <source>Form</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="114"/> - <source>Password</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="126"/> - <source>Unlock Session</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="39"/> - <source>Locked by: %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Too Many Failures</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Wait %1 Minutes</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="77"/> - <source>Failed Attempts: %1</source> - <translation type="unfinished"></translation> - </message> -</context> -</TS> diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_uk.ts b/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_uk.ts deleted file mode 100644 index c74b1ec6..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_uk.ts +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.1" language="uk_UA"> -<context> - <name>LLockScreen</name> - <message> - <location filename="../LLockScreen.ui" line="14"/> - <source>Form</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="114"/> - <source>Password</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="126"/> - <source>Unlock Session</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="39"/> - <source>Locked by: %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Too Many Failures</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Wait %1 Minutes</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="77"/> - <source>Failed Attempts: %1</source> - <translation type="unfinished"></translation> - </message> -</context> -</TS> diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_uz.ts b/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_uz.ts deleted file mode 100644 index 506e2eb9..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_uz.ts +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.1" language="uz_UZ"> -<context> - <name>LLockScreen</name> - <message> - <location filename="../LLockScreen.ui" line="14"/> - <source>Form</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="114"/> - <source>Password</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="126"/> - <source>Unlock Session</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="39"/> - <source>Locked by: %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Too Many Failures</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Wait %1 Minutes</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="77"/> - <source>Failed Attempts: %1</source> - <translation type="unfinished"></translation> - </message> -</context> -</TS> diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_vi.ts b/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_vi.ts deleted file mode 100644 index 67f9b9b0..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_vi.ts +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.1" language="vi_VN"> -<context> - <name>LLockScreen</name> - <message> - <location filename="../LLockScreen.ui" line="14"/> - <source>Form</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="114"/> - <source>Password</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="126"/> - <source>Unlock Session</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="39"/> - <source>Locked by: %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Too Many Failures</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Wait %1 Minutes</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="77"/> - <source>Failed Attempts: %1</source> - <translation type="unfinished"></translation> - </message> -</context> -</TS> diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_zh_CN.ts b/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_zh_CN.ts deleted file mode 100644 index b6e21f5e..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_zh_CN.ts +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.1" language="zh_CN"> -<context> - <name>LLockScreen</name> - <message> - <location filename="../LLockScreen.ui" line="14"/> - <source>Form</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="114"/> - <source>Password</source> - <translation>密码</translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="126"/> - <source>Unlock Session</source> - <translation>解除会话锁定</translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="39"/> - <source>Locked by: %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Too Many Failures</source> - <translation>失败次数过多</translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Wait %1 Minutes</source> - <translation>等待 %1 分钟</translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="77"/> - <source>Failed Attempts: %1</source> - <translation type="unfinished">失败尝试: %1</translation> - </message> -</context> -</TS> diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_zh_HK.ts b/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_zh_HK.ts deleted file mode 100644 index 8457ef3d..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_zh_HK.ts +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.1" language="zh_HK"> -<context> - <name>LLockScreen</name> - <message> - <location filename="../LLockScreen.ui" line="14"/> - <source>Form</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="114"/> - <source>Password</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="126"/> - <source>Unlock Session</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="39"/> - <source>Locked by: %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Too Many Failures</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Wait %1 Minutes</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="77"/> - <source>Failed Attempts: %1</source> - <translation type="unfinished"></translation> - </message> -</context> -</TS> diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_zh_TW.ts b/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_zh_TW.ts deleted file mode 100644 index d1b834bc..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_zh_TW.ts +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.1" language="zh_TW"> -<context> - <name>LLockScreen</name> - <message> - <location filename="../LLockScreen.ui" line="14"/> - <source>Form</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="114"/> - <source>Password</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="126"/> - <source>Unlock Session</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="39"/> - <source>Locked by: %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Too Many Failures</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Wait %1 Minutes</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="77"/> - <source>Failed Attempts: %1</source> - <translation type="unfinished"></translation> - </message> -</context> -</TS> diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_zu.ts b/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_zu.ts deleted file mode 100644 index eebadac5..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/i18n/lumina-wm_zu.ts +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.1" language="zu_ZA"> -<context> - <name>LLockScreen</name> - <message> - <location filename="../LLockScreen.ui" line="14"/> - <source>Form</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="114"/> - <source>Password</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.ui" line="126"/> - <source>Unlock Session</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="39"/> - <source>Locked by: %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Too Many Failures</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="76"/> - <source>Wait %1 Minutes</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../LLockScreen.cpp" line="77"/> - <source>Failed Attempts: %1</source> - <translation type="unfinished"></translation> - </message> -</context> -</TS> diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/lumina-wm.pro b/src-qt5/core/lumina-wm-INCOMPLETE/lumina-wm.pro deleted file mode 100644 index 928f8744..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/lumina-wm.pro +++ /dev/null @@ -1,107 +0,0 @@ -include("$${PWD}/../../OS-detect.pri") - -QT += core gui network -greaterThan(QT_MAJOR_VERSION, 4): QT += widgets x11extras - -TARGET = lumina-wm -target.path = $${L_BINDIR} - -LIBS += -lLuminaUtils -lxcb -lxcb-damage -lxcb-composite -lxcb-screensaver -lxcb-util - -DEPENDPATH += ../libLumina - -SOURCES += main.cpp \ - WMSession.cpp \ - LScreenSaver.cpp \ - SSBaseWidget.cpp \ - LLockScreen.cpp \ - LXcbEventFilter.cpp \ - LWindow.cpp \ - LWindowManager.cpp - - -HEADERS += GlobalDefines.h \ - WMSession.h \ - LScreenSaver.h \ - SSBaseWidget.h \ - LLockScreen.h \ - LXcbEventFilter.h \ - LWindow.h \ - LWindowManager.h - -FORMS += LLockScreen.ui - -#Now add in all the screensaver animation plugins -include(animations/animations.pri) - -TRANSLATIONS = i18n/lumina-wm_af.ts \ - i18n/lumina-wm_ar.ts \ - i18n/lumina-wm_az.ts \ - i18n/lumina-wm_bg.ts \ - i18n/lumina-wm_bn.ts \ - i18n/lumina-wm_bs.ts \ - i18n/lumina-wm_ca.ts \ - i18n/lumina-wm_cs.ts \ - i18n/lumina-wm_cy.ts \ - i18n/lumina-wm_da.ts \ - i18n/lumina-wm_de.ts \ - i18n/lumina-wm_el.ts \ - i18n/lumina-wm_en_GB.ts \ - i18n/lumina-wm_en_ZA.ts \ - i18n/lumina-wm_es.ts \ - i18n/lumina-wm_et.ts \ - i18n/lumina-wm_eu.ts \ - i18n/lumina-wm_fa.ts \ - i18n/lumina-wm_fi.ts \ - i18n/lumina-wm_fr.ts \ - i18n/lumina-wm_fr_CA.ts \ - i18n/lumina-wm_gl.ts \ - i18n/lumina-wm_he.ts \ - i18n/lumina-wm_hi.ts \ - i18n/lumina-wm_hr.ts \ - i18n/lumina-wm_hu.ts \ - i18n/lumina-wm_id.ts \ - i18n/lumina-wm_is.ts \ - i18n/lumina-wm_it.ts \ - i18n/lumina-wm_ja.ts \ - i18n/lumina-wm_ka.ts \ - i18n/lumina-wm_ko.ts \ - i18n/lumina-wm_lt.ts \ - i18n/lumina-wm_lv.ts \ - i18n/lumina-wm_mk.ts \ - i18n/lumina-wm_mn.ts \ - i18n/lumina-wm_ms.ts \ - i18n/lumina-wm_mt.ts \ - i18n/lumina-wm_nb.ts \ - i18n/lumina-wm_nl.ts \ - i18n/lumina-wm_pa.ts \ - i18n/lumina-wm_pl.ts \ - i18n/lumina-wm_pt.ts \ - i18n/lumina-wm_pt_BR.ts \ - i18n/lumina-wm_ro.ts \ - i18n/lumina-wm_ru.ts \ - i18n/lumina-wm_sk.ts \ - i18n/lumina-wm_sl.ts \ - i18n/lumina-wm_sr.ts \ - i18n/lumina-wm_sv.ts \ - i18n/lumina-wm_sw.ts \ - i18n/lumina-wm_ta.ts \ - i18n/lumina-wm_tg.ts \ - i18n/lumina-wm_th.ts \ - i18n/lumina-wm_tr.ts \ - i18n/lumina-wm_uk.ts \ - i18n/lumina-wm_uz.ts \ - i18n/lumina-wm_vi.ts \ - i18n/lumina-wm_zh_CN.ts \ - i18n/lumina-wm_zh_HK.ts \ - i18n/lumina-wm_zh_TW.ts \ - i18n/lumina-wm_zu.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 - -WITH_I18N{ - INSTALLS += dotrans -} diff --git a/src-qt5/core/lumina-wm-INCOMPLETE/main.cpp b/src-qt5/core/lumina-wm-INCOMPLETE/main.cpp deleted file mode 100644 index 02e48b7b..00000000 --- a/src-qt5/core/lumina-wm-INCOMPLETE/main.cpp +++ /dev/null @@ -1,56 +0,0 @@ -//=========================================== -// Lumina-DE source code -// Copyright (c) 2015, Ken Moore -// Available under the 3-clause BSD license -// See the LICENSE file for full details -//=========================================== - -#include "GlobalDefines.h" -//Initialize any global structures here -LXCB *LWM::SYSTEM = 0; - -//Local includes -#include "WMSession.h" -#include "LWindow.h" -#include <QDialog> - - -//#define DEBUG 0 -int main(int argc, char ** argv) -{ - qDebug() << "Starting lumina-wm..."; - LTHEME::LoadCustomEnvSettings(); - LSingleApplication a(argc, argv, "lumina-wm"); - if(!a.isPrimaryProcess()){ return 0; } //Inputs forwarded on to the primary already - LuminaThemeEngine themes(&a); - - //Setup the global structures - LWM::SYSTEM = new LXCB(); - if( a.inputlist.contains("--test-win") ){ - //Simple override to test out the window class - qDebug() << "Starting window test..."; - QLabel dlg(0, Qt::Window | Qt::BypassWindowManagerHint); //this test should be ignored by the current WM - dlg.setText("Sample Window"); - dlg.setWindowTitle("Test"); - dlg.resize(200,100); - dlg.setStyleSheet("background: rgba(255,255,255,100); color: black;"); - dlg.move(100,100); - dlg.show(); - //dlg.move(100,100); - qDebug() << " - Loading window frame..."; - LWindow win(dlg.winId()); //have it wrap around the dialog - qDebug() << " - Show frame..."; - win.frame()->windowChanged(LWM::Show); - qDebug() << " - Start event loop..."; - a.setQuitOnLastWindowClosed(true); - return a.exec(); - } - WMSession w; - w.start(a.inputlist.contains("--test-ss")); - QObject::connect(&themes, SIGNAL(updateIcons()), &w, SLOT(reloadIcons()) ); - QObject::connect(&a, SIGNAL(InputsAvailable(QStringList)), &w, SLOT(newInputsAvailable(QStringList)) ); - if(!a.inputlist.isEmpty()){ w.newInputsAvailable(a.inputlist); } - int retCode = a.exec(); - - return retCode; -} |