diff options
author | Ken Moore <ken@ixsystems.com> | 2017-09-26 13:43:14 -0400 |
---|---|---|
committer | Ken Moore <ken@ixsystems.com> | 2017-09-26 13:43:14 -0400 |
commit | 5020077eb17db2dac399b539ee451d3e5fe97a39 (patch) | |
tree | 28e215eddd84f7677cbb5df63957e14cf5f8c824 | |
parent | Add a bunch of new files specifically for providing a new OpenGL-backed basis... (diff) | |
parent | oops hadn't saved all my changes yet (diff) | |
download | lumina-5020077eb17db2dac399b539ee451d3e5fe97a39.tar.gz lumina-5020077eb17db2dac399b539ee451d3e5fe97a39.tar.bz2 lumina-5020077eb17db2dac399b539ee451d3e5fe97a39.zip |
Merge branch 'master' of github.com:trueos/lumina
29 files changed, 458 insertions, 275 deletions
diff --git a/port-files/FreeBSD/x11/lumina-core/pkg-plist b/port-files/FreeBSD/x11/lumina-core/pkg-plist index 174f3c92..d95c8baf 100644 --- a/port-files/FreeBSD/x11/lumina-core/pkg-plist +++ b/port-files/FreeBSD/x11/lumina-core/pkg-plist @@ -1646,6 +1646,9 @@ share/lthemeengine/colors/dusk.conf share/lthemeengine/colors/sand.conf share/lthemeengine/colors/simple.conf share/lthemeengine/colors/waves.conf +share/lthemeengine/desktop_qss/DarkGlass.qss +share/lthemeengine/desktop_qss/Glass.qss +share/lthemeengine/qss/scrollbar-simple.qss share/lumina-desktop/Login.ogg share/lumina-desktop/Logout.ogg share/lumina-desktop/colors/Black.qss.colors diff --git a/src-qt5/core-utils/lumina-xconfig/ScreenSettings.cpp b/src-qt5/core-utils/lumina-xconfig/ScreenSettings.cpp index 3c0edc76..a9d40554 100644 --- a/src-qt5/core-utils/lumina-xconfig/ScreenSettings.cpp +++ b/src-qt5/core-utils/lumina-xconfig/ScreenSettings.cpp @@ -13,6 +13,7 @@ void RRSettings::ApplyPrevious(){ QList<ScreenInfo> screens; QSettings set("lumina-desktop","lumina-xconfig"); + if(set.allKeys().isEmpty()){ return; } QString profile = set.value("default_profile","").toString(); if(profile.isEmpty() || !savedProfiles().contains(profile) ){ screens = PreviousSettings(); } else{ screens = PreviousSettings(profile); } @@ -167,6 +168,13 @@ bool RRSettings::SaveScreens(QList<ScreenInfo> screens, QString profile){ //Apply screen configuration void RRSettings::Apply(QList<ScreenInfo> screens){ + //Verify that there is at least 1 active/enabled monitor first + bool foundactive = false; + for(int i=0; i<screens.length() && !foundactive; i++){ + if(screens[i].isactive){ foundactive = (screens[i].applyChange!=1); } //make sure we are not turning it off + else{ foundactive = (screens[i].applyChange==2); } + } + if(!foundactive){ return; } //never disable all screens //Read all the settings and create the xrandr options to maintain these settings QStringList opts; //qDebug() << "Apply:" << screens.length(); diff --git a/src-qt5/core/libLumina/LDesktopUtils.cpp b/src-qt5/core/libLumina/LDesktopUtils.cpp index 54e660e6..fb13a2a3 100644 --- a/src-qt5/core/libLumina/LDesktopUtils.cpp +++ b/src-qt5/core/libLumina/LDesktopUtils.cpp @@ -155,8 +155,8 @@ void LDesktopUtils::LoadSystemDefaults(bool skipOS){ if(sysDefaults.isEmpty()){ sysDefaults = LUtils::readFile(LOS::LuminaShare()+"luminaDesktop.conf"); } //Find the number of the left-most desktop screen QString screen = "0"; - QDesktopWidget *desk =QApplication::desktop(); QRect screenGeom; + QDesktopWidget *desk =QApplication::desktop(); for(int i=0; i<desk->screenCount(); i++){ if(desk->screenGeometry(i).x()==0){ screen = QString::number(i); @@ -401,7 +401,7 @@ void LDesktopUtils::LoadSystemDefaults(bool skipOS){ QStringList syscolors = LTHEME::availableSystemColors(); //theme file //qDebug() << "Detected Themes/colors:" << systhemes << syscolors; - if( !themesettings[0].startsWith("/") || !QFile::exists(themesettings[0]) || !themesettings[0].endsWith(".qss.template")){ + if( !themesettings[0].startsWith("/") || !QFile::exists(themesettings[0]) || !themesettings[0].endsWith(".qss")){ themesettings[0] = themesettings[0].section(".qss",0,0).simplified(); for(int i=0; i<systhemes.length(); i++){ if(systhemes[i].startsWith(themesettings[0]+"::::",Qt::CaseInsensitive)){ @@ -411,9 +411,9 @@ void LDesktopUtils::LoadSystemDefaults(bool skipOS){ } } //color file - if( !themesettings[1].startsWith("/") || !QFile::exists(themesettings[1]) || !themesettings[1].endsWith(".qss.colors") ){ + if( !themesettings[1].startsWith("/") || !QFile::exists(themesettings[1]) || !themesettings[1].endsWith(".conf") ){ //Remove any extra/invalid extension - themesettings[1] = themesettings[1].section(".qss",0,0).simplified(); + themesettings[1] = themesettings[1].section(".conf",0,0).simplified(); for(int i=0; i<syscolors.length(); i++){ if(syscolors[i].startsWith(themesettings[1]+"::::",Qt::CaseInsensitive)){ themesettings[1] = syscolors[i].section("::::",1,1); //Replace with the full path @@ -434,13 +434,6 @@ void LDesktopUtils::LoadSystemDefaults(bool skipOS){ //Now save the settings files if(setTheme){ LTHEME::setCurrentSettings( themesettings[0], themesettings[1], themesettings[2], themesettings[3], themesettings[4]); - QSettings themeset("lthemeengine","lthemeengine"); - themeset.setValue("Appearance/icon_theme",themesettings[2]); - //Quick hack for a "dark" theme/color to be uniform across the desktop/applications - if(themesettings[0].contains("DarkGlass") || themesettings[1].contains("Black")){ - themeset.setValue("Appearance/custom_palette", true); - themeset.setValue("Appearance/color_scheme_path", LOS::LuminaShare().section("/",0,-3)+"/lthemeengine/colors/darker.conf"); - } } LUtils::writeFile(setdir+"/sessionsettings.conf", sesset, true); LUtils::writeFile(setdir+"/desktopsettings.conf", deskset, true); @@ -463,12 +456,14 @@ void LDesktopUtils::LoadSystemDefaults(bool skipOS){ } -bool LDesktopUtils::checkUserFiles(QString lastversion){ +bool LDesktopUtils::checkUserFiles(QString lastversion, QString currentversion){ + //WARNING: Make sure you create a QApplication instance before calling this function!!! + //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()); + int nversion = LDesktopUtils::VersionStringToNumber(currentversion); 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 @@ -488,7 +483,10 @@ bool LDesktopUtils::checkUserFiles(QString lastversion){ //Convert from the old desktop numbering system to the new one (change occured with 1.0.1) if(oldversion<=1000001){ QStringList DS = LUtils::readFile(dset); - QList<QScreen*> screens = QApplication::screens(); + char *tmp; + int tmpN = 0; + QApplication A(tmpN, &tmp); + QList<QScreen*> screens = A.screens(); for(int i=0; i<DS.length(); i++){ if(!DS[i].startsWith("[")){ continue; } if(DS[i].startsWith("[desktop-")){ diff --git a/src-qt5/core/libLumina/LDesktopUtils.h b/src-qt5/core/libLumina/LDesktopUtils.h index a9b44c67..b0ce6ba5 100644 --- a/src-qt5/core/libLumina/LDesktopUtils.h +++ b/src-qt5/core/libLumina/LDesktopUtils.h @@ -43,7 +43,7 @@ public: //Load the default setup for the system static void LoadSystemDefaults(bool skipOS = false); - static bool checkUserFiles(QString lastversion); //returns true if something changed + static bool checkUserFiles(QString lastversion, QString currentversion); //returns true if something changed static int VersionStringToNumber(QString version); //convert the lumina version string to a number for comparisons //Migrating desktop settings from one ID to another diff --git a/src-qt5/core/libLumina/LuminaThemes.cpp b/src-qt5/core/libLumina/LuminaThemes.cpp index ddbc7b37..f6868651 100644 --- a/src-qt5/core/libLumina/LuminaThemes.cpp +++ b/src-qt5/core/libLumina/LuminaThemes.cpp @@ -25,42 +25,42 @@ QStringList LTHEME::availableSystemThemes(){ //returns: [name::::path] for each item - QDir dir(LOS::LuminaShare()+"themes"); - QStringList list = dir.entryList(QStringList() <<"*.qss.template", QDir::Files, QDir::Name); + QDir dir(LOS::LuminaShare()+"../lthemeengine/desktop_qss"); + QStringList list = dir.entryList(QStringList() <<"*.qss", QDir::Files, QDir::Name); for(int i=0; i<list.length(); i++){ //Format the output entry [<name>::::<fullpath>] - list[i] = list[i].section(".qss.",0,0)+"::::"+dir.absoluteFilePath(list[i]); + list[i] = list[i].section(".qss",0,0)+"::::"+dir.absoluteFilePath(list[i]); } return list; } QStringList LTHEME::availableLocalThemes(){ //returns: [name::::path] for each item - QDir dir( QString(getenv("XDG_CONFIG_HOME"))+"/lumina-desktop/themes"); - QStringList list = dir.entryList(QStringList() <<"*.qss.template", QDir::Files, QDir::Name); + QDir dir( QString(getenv("XDG_CONFIG_HOME"))+"/lthemeengine/desktop_qss"); + QStringList list = dir.entryList(QStringList() <<"*.qss", QDir::Files, QDir::Name); for(int i=0; i<list.length(); i++){ //Format the output entry [<name>::::<fullpath>] - list[i] = list[i].section(".qss.",0,0)+"::::"+dir.absoluteFilePath(list[i]); + list[i] = list[i].section(".qss",0,0)+"::::"+dir.absoluteFilePath(list[i]); } return list; } QStringList LTHEME::availableSystemColors(){ //returns: [name::::path] for each item //returns: [name::::path] for each item - QDir dir(LOS::LuminaShare()+"colors"); - QStringList list = dir.entryList(QStringList() <<"*.qss.colors", QDir::Files, QDir::Name); + QDir dir(LOS::LuminaShare()+"../lthemeengine/colors"); + QStringList list = dir.entryList(QStringList() <<"*.conf", QDir::Files, QDir::Name); for(int i=0; i<list.length(); i++){ //Format the output entry [<name>::::<fullpath>] - list[i] = list[i].section(".qss.",0,0)+"::::"+dir.absoluteFilePath(list[i]); + list[i] = list[i].section(".conf",0,0)+"::::"+dir.absoluteFilePath(list[i]); } return list; } QStringList LTHEME::availableLocalColors(){ //returns: [name::::path] for each item - QDir dir(QString(getenv("XDG_CONFIG_HOME"))+"/lumina-desktop/colors"); - QStringList list = dir.entryList(QStringList() <<"*.qss.colors", QDir::Files, QDir::Name); + QDir dir(QString(getenv("XDG_CONFIG_HOME"))+"/lthemeengine/colors"); + QStringList list = dir.entryList(QStringList() <<"*.conf", QDir::Files, QDir::Name); for(int i=0; i<list.length(); i++){ //Format the output entry [<name>::::<fullpath>] - list[i] = list[i].section(".qss.",0,0)+"::::"+dir.absoluteFilePath(list[i]); + list[i] = list[i].section(".conf",0,0)+"::::"+dir.absoluteFilePath(list[i]); } return list; } @@ -122,15 +122,17 @@ QStringList LTHEME::availableSystemCursors(){ //returns: [name] for each item //Save a new theme/color file bool LTHEME::saveLocalTheme(QString name, QStringList contents){ - QString localdir = QString(getenv("XDG_CONFIG_HOME"))+"/lumina-desktop/themes/"; - if(!QFile::exists(localdir)){ QDir dir; dir.mkpath(localdir); } - return LUtils::writeFile(localdir+name+".qss.template", contents, true); + return false; //old format - do not use!! + //QString localdir = QString(getenv("XDG_CONFIG_HOME"))+"/lumina-desktop/themes/"; + //if(!QFile::exists(localdir)){ QDir dir; dir.mkpath(localdir); } + //return LUtils::writeFile(localdir+name+".qss.template", contents, true); } bool LTHEME::saveLocalColors(QString name, QStringList contents){ - QString localdir = QString(getenv("XDG_CONFIG_HOME"))+"/lumina-desktop/colors/"; - if(!QFile::exists(localdir)){ QDir dir; dir.mkpath(localdir); } - return LUtils::writeFile(localdir+name+".qss.colors", contents, true); + return false; //old format - do not use!! + // QString localdir = QString(getenv("XDG_CONFIG_HOME"))+"/lumina-desktop/colors/"; + //if(!QFile::exists(localdir)){ QDir dir; dir.mkpath(localdir); } + //return LUtils::writeFile(localdir+name+".qss.colors", contents, true); } //Return the currently selected Theme/Colors/Icons @@ -181,22 +183,22 @@ QString LTHEME::currentCursor(){ //Change the current Theme/Colors/Icons bool LTHEME::setCurrentSettings(QString themepath, QString colorpath, QString iconname, QString font, QString fontsize){ //QIcon::setThemeName(iconname); + //Save these settings into the theme engine settings QSettings engineset("lthemeengine","lthemeengine"); engineset.setValue("Appearance/icon_theme", iconname); - //engineset.setValue("Appearance/color_scheme_path", colorpath); //re-enable this once the color scheme has been synced with lthemeengine - //Need to add theme path saving here too later - - + engineset.setValue("Appearance/custom_palette", QFile::exists(colorpath) ); + engineset.setValue("Appearance/color_scheme_path", colorpath); + engineset.setValue("Interface/desktop_stylesheets", QStringList() << themepath); + return true; //Now save the theme settings file - QStringList contents; + /*QStringList contents; contents << "THEMEFILE="+themepath; contents << "COLORFILE="+colorpath; contents << "ICONTHEME="+iconname; contents << "FONTFAMILY="+font; contents << "FONTSIZE="+fontsize; bool ok = LUtils::writeFile(QString(getenv("XDG_CONFIG_HOME"))+"/lumina-desktop/themesettings.cfg", contents, true); - - return ok; + return ok;*/ } //Change the current Cursor Theme @@ -299,13 +301,13 @@ QStringList LTHEME::cursorInformation(QString name){ } } return out; -} +} QStringList LTHEME::CustomEnvSettings(bool useronly){ //view all the key=value settings QStringList newinfo; if(!useronly){ QStringList sysfiles; sysfiles << L_ETCDIR+"/lumina_environment.conf" << LOS::LuminaShare()+"lumina_environment.conf"; - for(int i=0; i<sysfiles.length() && newinfo.isEmpty(); i++){ + for(int i=0; i<sysfiles.length() && newinfo.isEmpty(); i++){ newinfo << LUtils::readFile(sysfiles[i]); } } diff --git a/src-qt5/core/libLumina/LuminaThemes.h b/src-qt5/core/libLumina/LuminaThemes.h index 39602f58..ca79e0bd 100644 --- a/src-qt5/core/libLumina/LuminaThemes.h +++ b/src-qt5/core/libLumina/LuminaThemes.h @@ -34,7 +34,7 @@ public: //Save a new theme/color file static bool saveLocalTheme(QString name, QStringList contents); static bool saveLocalColors(QString name, QStringList contents); - + //Return the currently selected Theme/Colors/Icons static QStringList currentSettings(); //returns [theme path, colorspath, iconsname, font, fontsize] static QString currentCursor(); //returns: current cursor theme name @@ -45,16 +45,16 @@ public: //Return the complete stylesheet for a given theme/colors static QString assembleStyleSheet(QString themepath, QString colorpath, QString font, QString fontsize); - + //Additional info for a cursor theme static QStringList cursorInformation(QString name); //returns: [Name, Comment, Sample Image File] - + //Environment settings static QStringList CustomEnvSettings(bool useronly = false); //view all the key=value settings static void LoadCustomEnvSettings(); //will push the custom settings into the environment (recommended before loading the initial QApplication) static bool setCustomEnvSetting(QString var, QString val); //variable/value pair (use an empty val to clear it) static QString readCustomEnvSetting(QString var); - + }; // Qt Style override to allow custom themeing/colors diff --git a/src-qt5/core/libLumina/NativeEmbedWidget.cpp b/src-qt5/core/libLumina/NativeEmbedWidget.cpp index 876c701d..57b6edde 100644 --- a/src-qt5/core/libLumina/NativeEmbedWidget.cpp +++ b/src-qt5/core/libLumina/NativeEmbedWidget.cpp @@ -116,7 +116,8 @@ void NativeEmbedWidget::showWindow(){ } QImage NativeEmbedWidget::windowImage(QRect geom){ - if(DISABLE_COMPOSITING){ + //if(DISABLE_COMPOSITING){ + if(!this->isVisible()){ return QImage(); } //nothing to grab yet QList<QScreen*> screens = static_cast<QApplication*>( QApplication::instance() )->screens(); //for(int i=0; i<screens.length(); i++){ //if(screens[i]->contains(this)){ @@ -126,7 +127,7 @@ QImage NativeEmbedWidget::windowImage(QRect geom){ //} //} return QImage(); - }else{ + /*}else{ //Pull the XCB pixmap out of the compositing layer xcb_pixmap_t pix = xcb_generate_id(QX11Info::connection()); xcb_composite_name_window_pixmap(QX11Info::connection(), WIN->id(), pix); @@ -144,7 +145,7 @@ QImage NativeEmbedWidget::windowImage(QRect geom){ xcb_free_pixmap(QX11Info::connection(), pix); return img; - } + }*/ } void NativeEmbedWidget::setWinUnpaused(){ paused = false; @@ -154,6 +155,7 @@ void NativeEmbedWidget::setWinUnpaused(){ }else if(this->isVisible()){ showWindow(); } + resyncWindow(); //make sure the window knows about the new location } // ============ // PUBLIC @@ -203,6 +205,7 @@ bool NativeEmbedWidget::embedWindow(NativeWindow *window){ registerClientEvents(this->winId()); //child events get forwarded through the frame - watch this for changes too //Also use a partial-composite here - make sure the window pixmap is available even when the window is obscured xcb_composite_redirect_window(QX11Info::connection(), WIN->id(), XCB_COMPOSITE_REDIRECT_AUTOMATIC); + //xcb_composite_redirect_subwindows(QX11Info::connection(), WIN->id(), XCB_COMPOSITE_REDIRECT_MANUAL); //Also alert us when the window visual changes Damage dmgID = XDamageCreate(QX11Info::display(), WIN->id(), XDamageReportRawRectangles); @@ -264,10 +267,10 @@ void NativeEmbedWidget::resume(){ void NativeEmbedWidget::resyncWindow(){ if(WIN==0){ return; } - syncWinSize(); - if(DISABLE_COMPOSITING){ + //syncWinSize(); + //if(DISABLE_COMPOSITING){ // Specs say to send an artificial configure event to the window if the window was reparented into the frame - QPoint loc = this->mapToGlobal( QPoint(0,0)); + QPoint loc = this->mapToGlobal( QPoint(0,0) ); //Send an artificial configureNotify event to the window with the global position/size included xcb_configure_notify_event_t *event = (xcb_configure_notify_event_t*) calloc(32,1); //always 32-byes long, even if we don't need all of it event->x = loc.x(); @@ -283,12 +286,12 @@ void NativeEmbedWidget::resyncWindow(){ xcb_send_event(QX11Info::connection(), false, WIN->id(), XCB_EVENT_MASK_STRUCTURE_NOTIFY | XCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY, (char *) event); xcb_flush(QX11Info::connection()); free(event); - }else{ + /*}else{ //Window is floating invisibly - make sure it is in the right place //Make sure the window size is syncronized and visual up to date //syncWinSize(); QTimer::singleShot(10, this, SLOT(repaintWindow()) ); - } + }*/ } @@ -328,11 +331,13 @@ void NativeEmbedWidget::hideEvent(QHideEvent *ev){ } void NativeEmbedWidget::paintEvent(QPaintEvent *ev){ + QPainter P(this); + P.setClipping(true); + P.setClipRect(0,0,this->width(), this->height()); + P.fillRect(ev->rect(), Qt::transparent); if(WIN==0){ return; } QRect geom = ev->rect(); //atomic updates //qDebug() << "Paint Rect:" << geom; - //geom.adjust(-10,-10,10,10); //add an additional few pixels in each direction to be painted - //geom = geom.intersected(QRect(0,0,this->width(), this->height())); //ensure intersection with actual window QImage img; if(!paused){ img = windowImage(geom); } else if(!winImage.isNull()){ @@ -340,23 +345,8 @@ void NativeEmbedWidget::paintEvent(QPaintEvent *ev){ else{ img = winImage.scaled(geom.size()); } //this is a fast transformation - might be slightly distorted } //Need to paint the image from the window onto the widget as an overlay + P.drawImage( geom , img, QRect(QPoint(0,0), img.size()), Qt::NoOpaqueDetection); //1-to-1 mapping - QPainter P(this); - P.setClipping(true); - P.setClipRect(0,0,this->width(), this->height()); - if(DISABLE_COMPOSITING){ P.fillRect(geom, Qt::black); } //get weird effects when partial-compositing is enabled if you layer transparent window frames above other windows - //qDebug() << "Paint Embed Window:" << geom << winImage.size(); - //if(winImage.size() == this->size()){ - P.drawImage( geom , img, QRect(QPoint(0,0), img.size()), Qt::NoOpaqueDetection); //1-to-1 mapping - //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 all/most of the time. - // }else{ - //P.drawImage( geom , winImage); //auto-scale it to fit (transforming a static image while paused?) - // } - //else{ QImage scaled = winImage.scaled(geom.size()); P.drawImage(geom, scaled); } - //P.drawImage( geom , winImage, geom, Qt::NoOpaqueDetection); //1-to-1 mapping - //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 all/most of the time. } diff --git a/src-qt5/core/libLumina/NativeWindowSystem.cpp b/src-qt5/core/libLumina/NativeWindowSystem.cpp index 0ee65929..e8e9655a 100644 --- a/src-qt5/core/libLumina/NativeWindowSystem.cpp +++ b/src-qt5/core/libLumina/NativeWindowSystem.cpp @@ -492,7 +492,27 @@ void NativeWindowSystem::UpdateWindowProperties(NativeWindow* win, QList< Native } if(props.contains(NativeWindow::WinTypes)){ QList< NativeWindow::Type> types; - types << NativeWindow::T_NORMAL; //make this load appropriately later + xcb_get_property_cookie_t cookie = xcb_ewmh_get_wm_window_type_unchecked(&obj->EWMH, win->id()); + xcb_ewmh_get_atoms_reply_t reply; + if(1==xcb_ewmh_get_wm_window_type_reply(&obj->EWMH, cookie, &reply, NULL) ){ + for(unsigned int i=0; i<reply.atoms_len; i++){ + if(reply.atoms[i]==obj->EWMH._NET_WM_WINDOW_TYPE_DESKTOP){ types << NativeWindow::T_DESKTOP; } + else if(reply.atoms[i]==obj->EWMH._NET_WM_WINDOW_TYPE_DOCK){ types << NativeWindow::T_DOCK; } + else if(reply.atoms[i]==obj->EWMH._NET_WM_WINDOW_TYPE_TOOLBAR){ types << NativeWindow::T_TOOLBAR; } + else if(reply.atoms[i]==obj->EWMH._NET_WM_WINDOW_TYPE_MENU){ types << NativeWindow::T_MENU; } + else if(reply.atoms[i]==obj->EWMH._NET_WM_WINDOW_TYPE_UTILITY){ types << NativeWindow::T_UTILITY; } + else if(reply.atoms[i]==obj->EWMH._NET_WM_WINDOW_TYPE_SPLASH){ types << NativeWindow::T_SPLASH; } + else if(reply.atoms[i]==obj->EWMH._NET_WM_WINDOW_TYPE_DIALOG){ types << NativeWindow::T_DIALOG; } + else if(reply.atoms[i]==obj->EWMH._NET_WM_WINDOW_TYPE_DROPDOWN_MENU){ types << NativeWindow::T_DROPDOWN_MENU; } + else if(reply.atoms[i]==obj->EWMH._NET_WM_WINDOW_TYPE_POPUP_MENU){ types << NativeWindow::T_POPUP_MENU; } + else if(reply.atoms[i]==obj->EWMH._NET_WM_WINDOW_TYPE_TOOLTIP){ types << NativeWindow::T_TOOLTIP; } + else if(reply.atoms[i]==obj->EWMH._NET_WM_WINDOW_TYPE_NOTIFICATION){ types << NativeWindow::T_NOTIFICATION; } + else if(reply.atoms[i]==obj->EWMH._NET_WM_WINDOW_TYPE_COMBO){ types << NativeWindow::T_COMBO; } + else if(reply.atoms[i]==obj->EWMH._NET_WM_WINDOW_TYPE_DND){ types << NativeWindow::T_DND; } + else if(reply.atoms[i]==obj->EWMH._NET_WM_WINDOW_TYPE_NORMAL){ types << NativeWindow::T_NORMAL; } + } + } + if(types.isEmpty()){ types << NativeWindow::T_NORMAL; } win->setProperty(NativeWindow::WinTypes, QVariant::fromValue< QList<NativeWindow::Type> >(types) ); } } diff --git a/src-qt5/core/libLumina/RootSubWindow.cpp b/src-qt5/core/libLumina/RootSubWindow.cpp index 5fb8ece4..5040f2f9 100644 --- a/src-qt5/core/libLumina/RootSubWindow.cpp +++ b/src-qt5/core/libLumina/RootSubWindow.cpp @@ -242,6 +242,16 @@ void RootSubWindow::enableFrame(bool on){ WIN->setProperty(NativeWindow::FrameExtents, QVariant::fromValue< QList<int> >(extents) ); //save to structure now } +void RootSubWindow::enableFrame(QList<NativeWindow::Type> types){ + static QList<NativeWindow::Type> noframe; + if(noframe.isEmpty()){ noframe << NativeWindow::T_DESKTOP << NativeWindow::T_DOCK << NativeWindow::T_TOOLBAR << NativeWindow::T_MENU << NativeWindow::T_SPLASH << NativeWindow::T_DROPDOWN_MENU << NativeWindow::T_POPUP_MENU << NativeWindow::T_TOOLTIP << NativeWindow::T_NOTIFICATION << NativeWindow::T_COMBO << NativeWindow::T_DND; } + for(int i=0; i<types.length(); i++){ + if(noframe.contains(types[i])){ enableFrame(false); return; } + } + enableFrame(true); + //Now make buttons visible as appropriate for the type + //NativeWindow::T_UTILITY, NativeWindow::T_DIALOG, , NativeWindow::T_NORMAL +} void RootSubWindow::LoadProperties( QList< NativeWindow::Property> list){ QList<QVariant> vals; //Always ensure that visibility changes are evaluated last @@ -370,7 +380,7 @@ void RootSubWindow::propertiesChanged(QList<NativeWindow::Property> props, QList switch(props[i]){ case NativeWindow::Visible: if(!WinWidget->isPaused() && (this->isVisible()!=vals[i].toBool()) && activeState==Normal ){ - qDebug() << "Got Visibility Change:" << vals[i] << this->geometry() << WIN->geometry(); + //qDebug() << "Got Visibility Change:" << vals[i] << this->geometry() << WIN->geometry(); if(vals[i].toBool()){ loadAnimation( DesktopSettings::instance()->value(DesktopSettings::Animation, "window/appear", "random").toString(), NativeWindow::Visible, vals[i]); } else{ loadAnimation( DesktopSettings::instance()->value(DesktopSettings::Animation, "window/disappear", "random").toString(), NativeWindow::Visible, vals[i]); } } @@ -397,7 +407,7 @@ void RootSubWindow::propertiesChanged(QList<NativeWindow::Property> props, QList i--; }else if(!WinWidget->isPaused() && activeState==Normal){ if(WIN->property(NativeWindow::Size).toSize() != WinWidget->size()){ - qDebug() << "Got Direct Geometry Change:" << WIN->geometry(); + //qDebug() << "Got Direct Geometry Change:" << WIN->geometry(); this->setGeometry( QRect(this->geometry().topLeft(), WIN->geometry().size()) ); WinWidget->resyncWindow(); } @@ -434,8 +444,8 @@ void RootSubWindow::propertiesChanged(QList<NativeWindow::Property> props, QList 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: - qDebug() << "Got Window Types:" << vals[i].value< QList<NativeWindow::Type> >(); - enableFrame(vals[i].value< QList<NativeWindow::Type> >().contains(NativeWindow::T_NORMAL) ); + //qDebug() << "Got Window Types:" << vals[i].value< QList<NativeWindow::Type> >(); + enableFrame(vals[i].value< QList<NativeWindow::Type> >() ); break; default: qDebug() << "Window Property Unused:" << props[i] << vals[i]; diff --git a/src-qt5/core/libLumina/RootSubWindow.h b/src-qt5/core/libLumina/RootSubWindow.h index c1964724..598298e2 100644 --- a/src-qt5/core/libLumina/RootSubWindow.h +++ b/src-qt5/core/libLumina/RootSubWindow.h @@ -59,12 +59,14 @@ private: void initWindowFrame(); void enableFrame(bool); + void enableFrame(QList<NativeWindow::Type> types); void LoadProperties( QList< NativeWindow::Property> list); static QStringList validAnimations(NativeWindow::Property); public slots: + void ensureVisible(){ WIN->setProperty(NativeWindow::Visible, true); } void giveMouseFocus(){ WinWidget->raiseWindow(); } void removeMouseFocus(){ WinWidget->lowerWindow(); } void giveKeyboardFocus(){ WIN->requestProperty(NativeWindow::Active, true, true); } diff --git a/src-qt5/core/libLumina/RootWindow.cpp b/src-qt5/core/libLumina/RootWindow.cpp index fdbc1eb8..705297be 100644 --- a/src-qt5/core/libLumina/RootWindow.cpp +++ b/src-qt5/core/libLumina/RootWindow.cpp @@ -239,7 +239,9 @@ void RootWindow::NewWindow(NativeWindow *win){ connect(subwin, SIGNAL(windowAnimFinished()), this, SLOT(checkMouseFocus()) ); WINDOWS << subwin; } + //QApplication::processEvents(); CheckWindowPosition(win->id(), true); //first-time run + //QTimer::singleShot(300, subwin, SLOT(ensureVisible())); win->setProperty(NativeWindow::Visible, true); //win->requestProperty( NativeWindow::Active, true); //win->requestProperties(QList<NativeWindow::Property>() << NativeWindow::Visible << NativeWindow::Active, QList<QVariant>() << true << true, true); diff --git a/src-qt5/core/lumina-desktop/LSession.cpp b/src-qt5/core/lumina-desktop/LSession.cpp index 2a1ec783..d1d6588e 100644 --- a/src-qt5/core/lumina-desktop/LSession.cpp +++ b/src-qt5/core/lumina-desktop/LSession.cpp @@ -120,7 +120,7 @@ void LSession::setupSession(){ //Setup the user's lumina settings directory as necessary splash.showScreen("user"); if(DEBUG){ qDebug() << " - Init User Files:" << timer->elapsed();} - checkUserFiles(); //adds these files to the watcher as well + //checkUserFiles(); //adds these files to the watcher as well //Initialize the internal variables DESKTOPS.clear(); @@ -387,11 +387,15 @@ void LSession::checkWindowGeoms(){ void LSession::checkUserFiles(){ //internal version conversion examples: // [1.0.0 -> 1000000], [1.2.3 -> 1002003], [0.6.1 -> 6001] - QString OVS = sessionsettings->value("DesktopVersion","0").toString(); //Old Version String - bool changed = LDesktopUtils::checkUserFiles(OVS); + QSettings sset("lumina-desktop", "sessionsettings"); + QString OVS = sset.value("DesktopVersion","0").toString(); //Old Version String + char *tmp; + int tmpN = 0; + QApplication A(tmpN, &tmp); + bool changed = LDesktopUtils::checkUserFiles(OVS, LDesktopUtils::LuminaDesktopVersion()); if(changed){ //Save the current version of the session to the settings file (for next time) - sessionsettings->setValue("DesktopVersion", this->applicationVersion()); + sset.setValue("DesktopVersion", LDesktopUtils::LuminaDesktopVersion()); } } diff --git a/src-qt5/core/lumina-desktop/LSession.h b/src-qt5/core/lumina-desktop/LSession.h index 0d69df84..43cddac7 100644 --- a/src-qt5/core/lumina-desktop/LSession.h +++ b/src-qt5/core/lumina-desktop/LSession.h @@ -39,7 +39,7 @@ #define SYSTEM_TRAY_CANCEL_MESSAGE 2 /*class MenuProxyStyle : public QProxyStyle{ -public: +public: int pixelMetric(PixelMetric metric, const QStyleOption *option=0, const QWidget *widget=0) const{ if(metric==PM_SmallIconSize){ return 22; } //override QMenu icon size (make it larger) else{ return QProxyStyle::pixelMetric(metric, option, widget); } //use the current style for everything else @@ -51,6 +51,8 @@ class LSession : public LSingleApplication{ public: LSession(int &argc, char **argv); ~LSession(); + + static void checkUserFiles(); //Functions to be called during startup void setupSession(); @@ -63,7 +65,7 @@ public: bool registerStartButton(QString ID); void unregisterStartButton(QString ID); - //Special functions for XCB event filter parsing only + //Special functions for XCB event filter parsing only // (DO NOT USE MANUALLY) void RootSizeChange(); void WindowPropertyEvent(); @@ -73,37 +75,37 @@ public: void WindowConfigureEvent(WId); void WindowDamageEvent(WId); void WindowSelectionClearEvent(WId); - + //System Access //Return a pointer to the current session static LSession* handle(){ return static_cast<LSession*>(LSession::instance()); } - + static void LaunchApplication(QString cmd); QFileInfoList DesktopFiles(); - + QRect screenGeom(int num); - + AppMenu* applicationMenu(); void systemWindow(); SettingsMenu* settingsMenu(); LXCB *XCB; //class for XCB usage - + QSettings* sessionSettings(); QSettings* DesktopPluginSettings(); - + //Keep track of which non-desktop window should be treated as active WId activeWindow(); //This will return the last active window if a desktop element is currently active - + //Temporarily change the session locale (nothing saved between sessions) void switchLocale(QString localeCode); - + //Play System Audio void playAudioFile(QString filepath); //Window Adjustment Routine (due to Fluxbox not respecting _NET_WM_STRUT) void adjustWindowGeom(WId win, bool maximize = false); - + private: //WMProcess *WM; QList<LDesktop*> DESKTOPS; @@ -136,9 +138,9 @@ private: QFileInfoList desktopFiles; void CleanupSession(); - + int VersionStringToNumber(QString version); - + public slots: void StartLogout(); void StartShutdown(bool skipupdates = false); @@ -161,7 +163,6 @@ private slots: void removeTrayWindow(WId); //Internal simplification functions - void checkUserFiles(); void refreshWindowManager(); void updateDesktops(); void registerDesktopWindows(); @@ -189,7 +190,7 @@ signals: void DesktopFilesChanged(); void MediaFilesChanged(); void WorkspaceChanged(); - + }; #endif diff --git a/src-qt5/core/lumina-desktop/defaults/luminaDesktop-TrueOS.conf b/src-qt5/core/lumina-desktop/defaults/luminaDesktop-TrueOS.conf index e453c0b8..e9520a3c 100644 --- a/src-qt5/core/lumina-desktop/defaults/luminaDesktop-TrueOS.conf +++ b/src-qt5/core/lumina-desktop/defaults/luminaDesktop-TrueOS.conf @@ -53,7 +53,7 @@ mime_default_application/x-tar_ifexists=lumina-archiver.desktop #THEME SETTINGS theme_themefile=DarkGlass #Name of the theme to use (disable for Lumina-Default) -theme_colorfile=Black #Name of the color spec file to use for theming +theme_colorfile=darker #Name of the color spec file to use for theming theme_iconset=material-design-dark #Name of the icon theme to use theme_font=Noto Sans #Name of the font family to use theme_fontsize=10pt #Default size of the fonts to use on the desktop (can also use a percentage of the screen height (<number>%) ) diff --git a/src-qt5/core/lumina-desktop/defaults/luminaDesktop.conf b/src-qt5/core/lumina-desktop/defaults/luminaDesktop.conf index 1327f148..40ece4f0 100644 --- a/src-qt5/core/lumina-desktop/defaults/luminaDesktop.conf +++ b/src-qt5/core/lumina-desktop/defaults/luminaDesktop.conf @@ -51,7 +51,7 @@ mime_default_application/x-shellscript=lumina-textedit.desktop #THEME SETTINGS theme_themefile=DarkGlass #Name of the theme to use (disable for Lumina-Default) -theme_colorfile=Black #Name of the color spec file to use for theming +theme_colorfile=darker #Name of the color spec file to use for theming theme_iconset=material-design-dark #Name of the icon theme to use theme_font=Arial #Name of the font family to use theme_fontsize=10pt #Default size of the fonts to use on the desktop (can also use a percentage of the screen height (<number>%) ) diff --git a/src-qt5/core/lumina-desktop/main.cpp b/src-qt5/core/lumina-desktop/main.cpp index b2bfa9be..c272f263 100644 --- a/src-qt5/core/lumina-desktop/main.cpp +++ b/src-qt5/core/lumina-desktop/main.cpp @@ -76,6 +76,7 @@ int main(int argc, char ** argv) setenv("QT_QPA_PLATFORMTHEME", "lthemeengine", 1); unsetenv("QT_AUTO_SCREEN_SCALE_FACTOR"); //causes pixel-specific scaling issues with the desktop - turn this on after-the-fact for other apps //Startup the session + LSession::checkUserFiles(); //make sure to create any config files before creating the QApplication LSession a(argc, argv); if(!a.isPrimaryProcess()){ return 0; } //Setup the log file diff --git a/src-qt5/desktop-utils/lumina-archiver/i18n/l-archiver_ca.ts b/src-qt5/desktop-utils/lumina-archiver/i18n/l-archiver_ca.ts index 98930879..9e347a2a 100644 --- a/src-qt5/desktop-utils/lumina-archiver/i18n/l-archiver_ca.ts +++ b/src-qt5/desktop-utils/lumina-archiver/i18n/l-archiver_ca.ts @@ -6,7 +6,7 @@ <message> <location filename="../TarBackend.cpp" line="229"/> <source>Could not read archive</source> - <translation>No s'ha pogut llegir l'arxiu</translation> + <translation>No s'ha pogut llegir l'arxiu</translation> </message> <message> <location filename="../TarBackend.cpp" line="231"/> @@ -81,7 +81,7 @@ <message> <location filename="../MainUI.ui" line="202"/> <source>Add files to archive</source> - <translation>Afegiu fitxers a l'arxiu</translation> + <translation>Afegiu fitxers a l'arxiu</translation> </message> <message> <location filename="../MainUI.ui" line="207"/> @@ -91,7 +91,7 @@ <message> <location filename="../MainUI.ui" line="210"/> <source>Remove selection from archive</source> - <translation>Elimina la selecció de l'arxiu</translation> + <translation>Elimina la selecció de l'arxiu</translation> </message> <message> <location filename="../MainUI.ui" line="215"/> @@ -101,7 +101,7 @@ <message> <location filename="../MainUI.ui" line="218"/> <source>Extract archive into a directory</source> - <translation>Extreu l'arxiu en un directori</translation> + <translation>Extreu l'arxiu en un directori</translation> </message> <message> <location filename="../MainUI.ui" line="223"/> @@ -111,7 +111,7 @@ <message> <location filename="../MainUI.ui" line="226"/> <source>Add directory to archive</source> - <translation>Afegeix un directori a l'arxiu</translation> + <translation>Afegeix un directori a l'arxiu</translation> </message> <message> <location filename="../MainUI.ui" line="231"/> @@ -131,17 +131,17 @@ <message> <location filename="../MainUI.ui" line="242"/> <source>Copy an IMG to a USB device (may require admin permission)</source> - <translation>Copia una IMG en un dispositiu USB (pot caldre permís d'administrador)</translation> + <translation>Copia una IMG en un dispositiu USB (pot caldre permís d'administrador)</translation> </message> <message> <location filename="../MainUI.cpp" line="24"/> <source>Archive Manager</source> - <translation>Gestor d'arxius</translation> + <translation>Gestor d'arxius</translation> </message> <message> <location filename="../MainUI.cpp" line="25"/> <source>Admin Mode</source> - <translation>Mode d'administrador</translation> + <translation>Mode d'administrador</translation> </message> <message> <location filename="../MainUI.cpp" line="51"/> @@ -179,7 +179,7 @@ <location filename="../MainUI.cpp" line="81"/> <location filename="../MainUI.cpp" line="220"/> <source>Opening Archive...</source> - <translation>S'obre l'arxiu...</translation> + <translation>S'obre l'arxiu...</translation> </message> <message> <location filename="../MainUI.cpp" line="164"/> @@ -301,7 +301,7 @@ <message> <location filename="../MainUI.cpp" line="210"/> <source>Could not overwrite file:</source> - <translation>No s'ha pogut sobreescriure el fitxer:</translation> + <translation>No s'ha pogut sobreescriure el fitxer:</translation> </message> <message> <location filename="../MainUI.cpp" line="218"/> @@ -312,18 +312,18 @@ <location filename="../MainUI.cpp" line="226"/> <location filename="../MainUI.cpp" line="233"/> <source>Add to Archive</source> - <translation>Afegeix a l'arxiu</translation> + <translation>Afegeix a l'arxiu</translation> </message> <message> <location filename="../MainUI.cpp" line="228"/> <location filename="../MainUI.cpp" line="235"/> <source>Adding Items...</source> - <translation>S'afegeixen elements...</translation> + <translation>S'afegeixen elements...</translation> </message> <message> <location filename="../MainUI.cpp" line="246"/> <source>Removing Items...</source> - <translation>S'eliminen elements...</translation> + <translation>S'eliminen elements...</translation> </message> <message> <location filename="../MainUI.cpp" line="251"/> @@ -337,7 +337,7 @@ <location filename="../MainUI.cpp" line="278"/> <location filename="../MainUI.cpp" line="290"/> <source>Extracting...</source> - <translation>S'extreu...</translation> + <translation>S'extreu...</translation> </message> <message> <location filename="../MainUI.cpp" line="310"/> @@ -350,67 +350,67 @@ <message> <location filename="../../../core/libLumina/LuminaXDG.cpp" line="603"/> <source>Multimedia</source> - <translation type="unfinished"></translation> + <translation>Multimèdia</translation> </message> <message> <location filename="../../../core/libLumina/LuminaXDG.cpp" line="604"/> <source>Development</source> - <translation type="unfinished"></translation> + <translation>Desenvolupament</translation> </message> <message> <location filename="../../../core/libLumina/LuminaXDG.cpp" line="605"/> <source>Education</source> - <translation type="unfinished"></translation> + <translation>Educació</translation> </message> <message> <location filename="../../../core/libLumina/LuminaXDG.cpp" line="606"/> <source>Games</source> - <translation type="unfinished"></translation> + <translation>Jocs</translation> </message> <message> <location filename="../../../core/libLumina/LuminaXDG.cpp" line="607"/> <source>Graphics</source> - <translation type="unfinished"></translation> + <translation>Gràfics</translation> </message> <message> <location filename="../../../core/libLumina/LuminaXDG.cpp" line="608"/> <source>Network</source> - <translation type="unfinished"></translation> + <translation>Xarxa</translation> </message> <message> <location filename="../../../core/libLumina/LuminaXDG.cpp" line="609"/> <source>Office</source> - <translation type="unfinished"></translation> + <translation>Oficina</translation> </message> <message> <location filename="../../../core/libLumina/LuminaXDG.cpp" line="610"/> <source>Science</source> - <translation type="unfinished"></translation> + <translation>Ciència</translation> </message> <message> <location filename="../../../core/libLumina/LuminaXDG.cpp" line="611"/> <source>Settings</source> - <translation type="unfinished"></translation> + <translation>Paràmetres</translation> </message> <message> <location filename="../../../core/libLumina/LuminaXDG.cpp" line="612"/> <source>System</source> - <translation type="unfinished"></translation> + <translation>Sistema</translation> </message> <message> <location filename="../../../core/libLumina/LuminaXDG.cpp" line="613"/> <source>Utility</source> - <translation type="unfinished"></translation> + <translation>Utilitat</translation> </message> <message> <location filename="../../../core/libLumina/LuminaXDG.cpp" line="614"/> <source>Wine</source> - <translation type="unfinished"></translation> + <translation>Wine</translation> </message> <message> <location filename="../../../core/libLumina/LuminaXDG.cpp" line="615"/> <source>Unsorted</source> - <translation type="unfinished"></translation> + <translation>Sense classificar</translation> </message> </context> <context> @@ -443,7 +443,7 @@ <message> <location filename="../imgDialog.ui" line="108"/> <source>Wipe all extra space on device (conv = sync)</source> - <translation>Neteja tot l'espai extra al dispositiu (conv = sync)</translation> + <translation>Neteja tot l'espai extra al dispositiu (conv = sync)</translation> </message> <message> <location filename="../imgDialog.ui" line="132"/> @@ -473,7 +473,7 @@ <message> <location filename="../imgDialog.cpp" line="22"/> <source>Admin Mode</source> - <translation>Mode d'administrador</translation> + <translation>Mode d'administrador</translation> </message> <message> <location filename="../imgDialog.cpp" line="36"/> @@ -508,12 +508,12 @@ <message> <location filename="../imgDialog.cpp" line="170"/> <source>Administrator Permissions Needed</source> - <translation>Calen permisos d'administrador</translation> + <translation>Calen permisos d'administrador</translation> </message> <message> <location filename="../imgDialog.cpp" line="170"/> <source>This operation requires administrator priviledges.</source> - <translation>Aquesta operació requereix privilegis d'administrador.</translation> + <translation>Aquesta operació requereix privilegis d'administrador.</translation> </message> <message> <location filename="../imgDialog.cpp" line="170"/> @@ -528,7 +528,7 @@ <message> <location filename="../imgDialog.cpp" line="175"/> <source>The process could not be completed:</source> - <translation>El procés no s'ha pogut completar:</translation> + <translation>El procés no s'ha pogut completar:</translation> </message> <message> <location filename="../imgDialog.cpp" line="178"/> @@ -538,7 +538,7 @@ <message> <location filename="../imgDialog.cpp" line="178"/> <source>The image was successfully burned to the USB device</source> - <translation>La imatge s'ha gravat correctament al dispositiu USB.</translation> + <translation>La imatge s'ha gravat correctament al dispositiu USB.</translation> </message> </context> </TS> diff --git a/src-qt5/desktop-utils/lumina-archiver/i18n/l-archiver_da.ts b/src-qt5/desktop-utils/lumina-archiver/i18n/l-archiver_da.ts index de00be03..ad4de0bd 100644 --- a/src-qt5/desktop-utils/lumina-archiver/i18n/l-archiver_da.ts +++ b/src-qt5/desktop-utils/lumina-archiver/i18n/l-archiver_da.ts @@ -350,67 +350,67 @@ <message> <location filename="../../../core/libLumina/LuminaXDG.cpp" line="603"/> <source>Multimedia</source> - <translation type="unfinished"></translation> + <translation>Multimedie</translation> </message> <message> <location filename="../../../core/libLumina/LuminaXDG.cpp" line="604"/> <source>Development</source> - <translation type="unfinished"></translation> + <translation>Udvikling</translation> </message> <message> <location filename="../../../core/libLumina/LuminaXDG.cpp" line="605"/> <source>Education</source> - <translation type="unfinished"></translation> + <translation>Uddannelse</translation> </message> <message> <location filename="../../../core/libLumina/LuminaXDG.cpp" line="606"/> <source>Games</source> - <translation type="unfinished"></translation> + <translation>Spil</translation> </message> <message> <location filename="../../../core/libLumina/LuminaXDG.cpp" line="607"/> <source>Graphics</source> - <translation type="unfinished"></translation> + <translation>Grafik</translation> </message> <message> <location filename="../../../core/libLumina/LuminaXDG.cpp" line="608"/> <source>Network</source> - <translation type="unfinished"></translation> + <translation>Netværk</translation> </message> <message> <location filename="../../../core/libLumina/LuminaXDG.cpp" line="609"/> <source>Office</source> - <translation type="unfinished"></translation> + <translation>Kontor</translation> </message> <message> <location filename="../../../core/libLumina/LuminaXDG.cpp" line="610"/> <source>Science</source> - <translation type="unfinished"></translation> + <translation>Videnskab</translation> </message> <message> <location filename="../../../core/libLumina/LuminaXDG.cpp" line="611"/> <source>Settings</source> - <translation type="unfinished"></translation> + <translation>Indstillinger</translation> </message> <message> <location filename="../../../core/libLumina/LuminaXDG.cpp" line="612"/> <source>System</source> - <translation type="unfinished"></translation> + <translation>System</translation> </message> <message> <location filename="../../../core/libLumina/LuminaXDG.cpp" line="613"/> <source>Utility</source> - <translation type="unfinished"></translation> + <translation>Hjælpeværktøj</translation> </message> <message> <location filename="../../../core/libLumina/LuminaXDG.cpp" line="614"/> <source>Wine</source> - <translation type="unfinished"></translation> + <translation>Wine</translation> </message> <message> <location filename="../../../core/libLumina/LuminaXDG.cpp" line="615"/> <source>Unsorted</source> - <translation type="unfinished"></translation> + <translation>Usorteret</translation> </message> </context> <context> diff --git a/src-qt5/desktop-utils/lumina-archiver/i18n/l-archiver_fi.ts b/src-qt5/desktop-utils/lumina-archiver/i18n/l-archiver_fi.ts index 5b1d98dc..4525f584 100644 --- a/src-qt5/desktop-utils/lumina-archiver/i18n/l-archiver_fi.ts +++ b/src-qt5/desktop-utils/lumina-archiver/i18n/l-archiver_fi.ts @@ -6,22 +6,22 @@ <message> <location filename="../TarBackend.cpp" line="229"/> <source>Could not read archive</source> - <translation type="unfinished"></translation> + <translation>Arkistoa ei voitu lukea</translation> </message> <message> <location filename="../TarBackend.cpp" line="231"/> <source>Archive Loaded</source> - <translation type="unfinished"></translation> + <translation>Arkisto ladattu</translation> </message> <message> <location filename="../TarBackend.cpp" line="264"/> <source>Extraction Finished</source> - <translation type="unfinished"></translation> + <translation>Purku valmis</translation> </message> <message> <location filename="../TarBackend.cpp" line="266"/> <source>Modification Finished</source> - <translation type="unfinished"></translation> + <translation>Muutos valmis</translation> </message> </context> <context> @@ -29,307 +29,307 @@ <message> <location filename="../MainUI.ui" line="35"/> <source>Archive:</source> - <translation type="unfinished"></translation> + <translation>Arkisto:</translation> </message> <message> <location filename="../MainUI.ui" line="125"/> <location filename="../MainUI.cpp" line="65"/> <location filename="../MainUI.cpp" line="296"/> <source>File</source> - <translation type="unfinished"></translation> + <translation>Tiedosto</translation> </message> <message> <location filename="../MainUI.ui" line="134"/> <source>Edit</source> - <translation type="unfinished"></translation> + <translation>Muokkaa</translation> </message> <message> <location filename="../MainUI.ui" line="145"/> <source>Burn to Disk</source> - <translation type="unfinished"></translation> + <translation>Polta levylle</translation> </message> <message> <location filename="../MainUI.ui" line="178"/> <source>&Open Archive</source> - <translation type="unfinished"></translation> + <translation>&Avaa arkisto</translation> </message> <message> <location filename="../MainUI.ui" line="181"/> <source>Open archive</source> - <translation type="unfinished"></translation> + <translation>Avaa arkisto</translation> </message> <message> <location filename="../MainUI.ui" line="186"/> <source>&New Archive</source> - <translation type="unfinished"></translation> + <translation>&Uusi arkisto</translation> </message> <message> <location filename="../MainUI.ui" line="189"/> <source>New archive</source> - <translation type="unfinished"></translation> + <translation>Uusi arkisto</translation> </message> <message> <location filename="../MainUI.ui" line="194"/> <source>&Quit</source> - <translation type="unfinished"></translation> + <translation>&Lopeta</translation> </message> <message> <location filename="../MainUI.ui" line="199"/> <source>Add File(s)</source> - <translation type="unfinished"></translation> + <translation>Lisää tiedostoja</translation> </message> <message> <location filename="../MainUI.ui" line="202"/> <source>Add files to archive</source> - <translation type="unfinished"></translation> + <translation>Lisää arkistoon tiedostoja</translation> </message> <message> <location filename="../MainUI.ui" line="207"/> <source>Remove File(s)</source> - <translation type="unfinished"></translation> + <translation>Poista tiedostoja</translation> </message> <message> <location filename="../MainUI.ui" line="210"/> <source>Remove selection from archive</source> - <translation type="unfinished"></translation> + <translation>Poista arkistosta tiedostoja</translation> </message> <message> <location filename="../MainUI.ui" line="215"/> <source>Extract All</source> - <translation type="unfinished"></translation> + <translation>Pura kaikki</translation> </message> <message> <location filename="../MainUI.ui" line="218"/> <source>Extract archive into a directory</source> - <translation type="unfinished"></translation> + <translation>Pura arkisto kansioon</translation> </message> <message> <location filename="../MainUI.ui" line="223"/> <source>Add Directory</source> - <translation type="unfinished"></translation> + <translation>Lisää kansio</translation> </message> <message> <location filename="../MainUI.ui" line="226"/> <source>Add directory to archive</source> - <translation type="unfinished"></translation> + <translation>Lisää arkistoon kansio</translation> </message> <message> <location filename="../MainUI.ui" line="231"/> <source>Extract Selection</source> - <translation type="unfinished"></translation> + <translation>Pura valinta</translation> </message> <message> <location filename="../MainUI.ui" line="234"/> <source>Extract Selected Items</source> - <translation type="unfinished"></translation> + <translation>Pura valitut kohteet</translation> </message> <message> <location filename="../MainUI.ui" line="239"/> <source>USB Image</source> - <translation type="unfinished"></translation> + <translation>USB-levykuva</translation> </message> <message> <location filename="../MainUI.ui" line="242"/> <source>Copy an IMG to a USB device (may require admin permission)</source> - <translation type="unfinished"></translation> + <translation>Kopioi IMG-levykuva USB-laitteeseen (voi vaatia ylläpitäjän oikeuksia)</translation> </message> <message> <location filename="../MainUI.cpp" line="24"/> <source>Archive Manager</source> - <translation type="unfinished"></translation> + <translation>Arkistonhallinta</translation> </message> <message> <location filename="../MainUI.cpp" line="25"/> <source>Admin Mode</source> - <translation type="unfinished"></translation> + <translation>Ylläpitäjän tila</translation> </message> <message> <location filename="../MainUI.cpp" line="51"/> <source>CTRL+N</source> - <translation type="unfinished"></translation> + <translation>Ctrl+N</translation> </message> <message> <location filename="../MainUI.cpp" line="52"/> <source>CTRL+O</source> - <translation type="unfinished"></translation> + <translation>Ctrl+O</translation> </message> <message> <location filename="../MainUI.cpp" line="53"/> <source>CTRL+Q</source> - <translation type="unfinished"></translation> + <translation>Ctrl+Q</translation> </message> <message> <location filename="../MainUI.cpp" line="54"/> <source>CTRL+E</source> - <translation type="unfinished"></translation> + <translation>Ctrl+E</translation> </message> <message> <location filename="../MainUI.cpp" line="65"/> <location filename="../MainUI.cpp" line="296"/> <source>MimeType</source> - <translation type="unfinished"></translation> + <translation>MIME-tyyppi</translation> </message> <message> <location filename="../MainUI.cpp" line="65"/> <location filename="../MainUI.cpp" line="296"/> <source>Size</source> - <translation type="unfinished"></translation> + <translation>Koko</translation> </message> <message> <location filename="../MainUI.cpp" line="81"/> <location filename="../MainUI.cpp" line="220"/> <source>Opening Archive...</source> - <translation type="unfinished"></translation> + <translation>Avataan arkistoa...</translation> </message> <message> <location filename="../MainUI.cpp" line="164"/> <source>All Types %1</source> - <translation type="unfinished"></translation> + <translation>Kaikki tyypit %1</translation> </message> <message> <location filename="../MainUI.cpp" line="165"/> <location filename="../MainUI.cpp" line="183"/> <source>Uncompressed Archive (*.tar)</source> - <translation type="unfinished"></translation> + <translation>Pakkaamaton arkisto (*.tar)</translation> </message> <message> <location filename="../MainUI.cpp" line="166"/> <location filename="../MainUI.cpp" line="184"/> <source>GZip Compressed Archive (*.tar.gz *.tgz)</source> - <translation type="unfinished"></translation> + <translation>GZip-pakattu arkisto (*.tar.gz *.tgz)</translation> </message> <message> <location filename="../MainUI.cpp" line="167"/> <location filename="../MainUI.cpp" line="185"/> <source>BZip Compressed Archive (*.tar.bz *.tbz)</source> - <translation type="unfinished"></translation> + <translation>BZip-pakattu arkisto (*.tar.bz *.tbz)</translation> </message> <message> <location filename="../MainUI.cpp" line="168"/> <location filename="../MainUI.cpp" line="186"/> <source>BZip2 Compressed Archive (*.tar.bz2 *.tbz2)</source> - <translation type="unfinished"></translation> + <translation>BZip2-pakattu arkisto (*.tar.bz2 *.tbz2)</translation> </message> <message> <location filename="../MainUI.cpp" line="169"/> <location filename="../MainUI.cpp" line="188"/> <source>LMZA Compressed Archive (*.tar.lzma *.tlz)</source> - <translation type="unfinished"></translation> + <translation>LMZA-pakattu arkisto (*.tar.lzma *.tlz)</translation> </message> <message> <location filename="../MainUI.cpp" line="170"/> <location filename="../MainUI.cpp" line="187"/> <source>XZ Compressed Archive (*.tar.xz *.txz)</source> - <translation type="unfinished"></translation> + <translation>XZ-pakattu arkisto (*.tar.xz *.txz)</translation> </message> <message> <location filename="../MainUI.cpp" line="171"/> <location filename="../MainUI.cpp" line="189"/> <source>CPIO Archive (*.cpio)</source> - <translation type="unfinished"></translation> + <translation>CPIO-arkisto (*.cpio)</translation> </message> <message> <location filename="../MainUI.cpp" line="172"/> <location filename="../MainUI.cpp" line="190"/> <source>PAX Archive (*.pax)</source> - <translation type="unfinished"></translation> + <translation>PAX-arkisto (*.pax)</translation> </message> <message> <location filename="../MainUI.cpp" line="173"/> <location filename="../MainUI.cpp" line="191"/> <source>AR Archive (*.ar)</source> - <translation type="unfinished"></translation> + <translation>AR-arkisto (*.ar)</translation> </message> <message> <location filename="../MainUI.cpp" line="174"/> <location filename="../MainUI.cpp" line="192"/> <source>SHAR Archive (*.shar)</source> - <translation type="unfinished"></translation> + <translation>SHAR-arkisto (*.shar)</translation> </message> <message> <location filename="../MainUI.cpp" line="175"/> <location filename="../MainUI.cpp" line="193"/> <source>Zip Archive (*.zip)</source> - <translation type="unfinished"></translation> + <translation>Zip-arkisto (*.zip)</translation> </message> <message> <location filename="../MainUI.cpp" line="176"/> <location filename="../MainUI.cpp" line="194"/> <source>7-Zip Archive (*.7z)</source> - <translation type="unfinished"></translation> + <translation>7-Zip-arkisto (*.7z)</translation> </message> <message> <location filename="../MainUI.cpp" line="182"/> <source>All Known Types %1</source> - <translation type="unfinished"></translation> + <translation>Kaikki tunnetut tyypit %1</translation> </message> <message> <location filename="../MainUI.cpp" line="195"/> <source>READ-ONLY: ISO image (*.iso *.img)</source> - <translation type="unfinished"></translation> + <translation>VAIN LUKU: ISO-levykuva (*.iso *.img)</translation> </message> <message> <location filename="../MainUI.cpp" line="196"/> <source>READ-ONLY: XAR archive (*.xar)</source> - <translation type="unfinished"></translation> + <translation>VAIN LUKU: XAR-arkisto (*.xar)</translation> </message> <message> <location filename="../MainUI.cpp" line="197"/> <source>READ-ONLY: Java archive (*.jar)</source> - <translation type="unfinished"></translation> + <translation>VAIN LUKU: Java-arkisto (*.jar)</translation> </message> <message> <location filename="../MainUI.cpp" line="198"/> <source>READ-ONLY: RedHat Package (*.rpm)</source> - <translation type="unfinished"></translation> + <translation>VAIN LUKU: RedHat-paketti (*.rpm)</translation> </message> <message> <location filename="../MainUI.cpp" line="199"/> <source>Show All Files (*)</source> - <translation type="unfinished"></translation> + <translation>Näytä kaikki tiedostot (*)</translation> </message> <message> <location filename="../MainUI.cpp" line="207"/> <source>Create Archive</source> - <translation type="unfinished"></translation> + <translation>Luo arkisto</translation> </message> <message> <location filename="../MainUI.cpp" line="210"/> <source>Error</source> - <translation type="unfinished"></translation> + <translation>Virhe</translation> </message> <message> <location filename="../MainUI.cpp" line="210"/> <source>Could not overwrite file:</source> - <translation type="unfinished"></translation> + <translation>Ei voitu korvata tiedostoa:</translation> </message> <message> <location filename="../MainUI.cpp" line="218"/> <source>Open Archive</source> - <translation type="unfinished"></translation> + <translation>Avaa arkisto</translation> </message> <message> <location filename="../MainUI.cpp" line="226"/> <location filename="../MainUI.cpp" line="233"/> <source>Add to Archive</source> - <translation type="unfinished"></translation> + <translation>Lisää arkistoon</translation> </message> <message> <location filename="../MainUI.cpp" line="228"/> <location filename="../MainUI.cpp" line="235"/> <source>Adding Items...</source> - <translation type="unfinished"></translation> + <translation>Lisätään kohteita...</translation> </message> <message> <location filename="../MainUI.cpp" line="246"/> <source>Removing Items...</source> - <translation type="unfinished"></translation> + <translation>Poistetaan kohteita...</translation> </message> <message> <location filename="../MainUI.cpp" line="251"/> <location filename="../MainUI.cpp" line="276"/> <source>Extract Into Directory</source> - <translation type="unfinished"></translation> + <translation>Pura kansioon</translation> </message> <message> <location filename="../MainUI.cpp" line="253"/> @@ -337,12 +337,12 @@ <location filename="../MainUI.cpp" line="278"/> <location filename="../MainUI.cpp" line="290"/> <source>Extracting...</source> - <translation type="unfinished"></translation> + <translation>Puretaan...</translation> </message> <message> <location filename="../MainUI.cpp" line="310"/> <source>Link To: %1</source> - <translation type="unfinished"></translation> + <translation>Linkki kohteeseen: %1</translation> </message> </context> <context> @@ -418,127 +418,127 @@ <message> <location filename="../imgDialog.ui" line="14"/> <source>Burn IMG to device</source> - <translation type="unfinished"></translation> + <translation>Polta IMG-levykuva laitteelle</translation> </message> <message> <location filename="../imgDialog.ui" line="29"/> <source>IMG File</source> - <translation type="unfinished"></translation> + <translation>IMG-tiedosto</translation> </message> <message> <location filename="../imgDialog.ui" line="54"/> <source>Block Size</source> - <translation type="unfinished"></translation> + <translation>Lohkokoko</translation> </message> <message> <location filename="../imgDialog.ui" line="84"/> <source>USB Device</source> - <translation type="unfinished"></translation> + <translation>USB-laite</translation> </message> <message> <location filename="../imgDialog.ui" line="96"/> <source>Refresh Device List</source> - <translation type="unfinished"></translation> + <translation>Virkistä laiteluettelo</translation> </message> <message> <location filename="../imgDialog.ui" line="108"/> <source>Wipe all extra space on device (conv = sync)</source> - <translation type="unfinished"></translation> + <translation>Pyyhi laitteen kaikki ylimääräinen tila (conv=sync)</translation> </message> <message> <location filename="../imgDialog.ui" line="132"/> <source>Burning to USB:</source> - <translation type="unfinished"></translation> + <translation>Poltetaan USB:lle:</translation> </message> <message> <location filename="../imgDialog.ui" line="166"/> <source>Time Elapsed:</source> - <translation type="unfinished"></translation> + <translation>Aikaa kulunut:</translation> </message> <message> <location filename="../imgDialog.ui" line="222"/> <source>Cancel</source> - <translation type="unfinished"></translation> + <translation>Peru</translation> </message> <message> <location filename="../imgDialog.ui" line="229"/> <source>Start</source> - <translation type="unfinished"></translation> + <translation>Käynnistä</translation> </message> <message> <location filename="../imgDialog.cpp" line="21"/> <source>Burn IMG to Device</source> - <translation type="unfinished"></translation> + <translation>Polta IMG-levykuva laitteelle</translation> </message> <message> <location filename="../imgDialog.cpp" line="22"/> <source>Admin Mode</source> - <translation type="unfinished"></translation> + <translation>Ylläpitäjän tila</translation> </message> <message> <location filename="../imgDialog.cpp" line="36"/> <source>Kilobyte(s)</source> - <translation type="unfinished"></translation> + <translation>kilotavu(a)</translation> </message> <message> <location filename="../imgDialog.cpp" line="37"/> <source>Megabyte(s)</source> - <translation type="unfinished"></translation> + <translation>megatavu(a)</translation> </message> <message> <location filename="../imgDialog.cpp" line="38"/> <source>Gigabyte(s)</source> - <translation type="unfinished"></translation> + <translation>gigatavu(a)</translation> </message> <message> <location filename="../imgDialog.cpp" line="110"/> <source>Cancel Image Burn?</source> - <translation type="unfinished"></translation> + <translation>Perutaanko levykuvan poltto?</translation> </message> <message> <location filename="../imgDialog.cpp" line="110"/> <source>Do you wish to stop the current IMG burn process?</source> - <translation type="unfinished"></translation> + <translation>Haluatko pysäyttää käynnissä olevan IMG-levykuvan polton?</translation> </message> <message> <location filename="../imgDialog.cpp" line="110"/> <source>Warning: This will leave the USB device in an inconsistent state</source> - <translation type="unfinished"></translation> + <translation>Varoitus: Tämä jättää USB-laitteesi epävakaaseen tilaan</translation> </message> <message> <location filename="../imgDialog.cpp" line="170"/> <source>Administrator Permissions Needed</source> - <translation type="unfinished"></translation> + <translation>Ylläpitäjäoikeudet vaaditaan</translation> </message> <message> <location filename="../imgDialog.cpp" line="170"/> <source>This operation requires administrator priviledges.</source> - <translation type="unfinished"></translation> + <translation>Tämä toiminto vaatii ylläpitäjän oikeuksia.</translation> </message> <message> <location filename="../imgDialog.cpp" line="170"/> <source>Would you like to enable these priviledges?</source> - <translation type="unfinished"></translation> + <translation>Haluatko ottaa nämä oikeudet käyttöön?</translation> </message> <message> <location filename="../imgDialog.cpp" line="175"/> <source>ERROR</source> - <translation type="unfinished"></translation> + <translation>VIRHE</translation> </message> <message> <location filename="../imgDialog.cpp" line="175"/> <source>The process could not be completed:</source> - <translation type="unfinished"></translation> + <translation>Toimenpidettä ei saatu loppuun:</translation> </message> <message> <location filename="../imgDialog.cpp" line="178"/> <source>SUCCESS</source> - <translation type="unfinished"></translation> + <translation>ONNISTUI</translation> </message> <message> <location filename="../imgDialog.cpp" line="178"/> <source>The image was successfully burned to the USB device</source> - <translation type="unfinished"></translation> + <translation>Levykuva poltettiin ongelmitta USB-laitteelle</translation> </message> </context> </TS> diff --git a/src-qt5/desktop-utils/lumina-archiver/i18n/l-archiver_lt.ts b/src-qt5/desktop-utils/lumina-archiver/i18n/l-archiver_lt.ts index 1c53233d..121263bb 100644 --- a/src-qt5/desktop-utils/lumina-archiver/i18n/l-archiver_lt.ts +++ b/src-qt5/desktop-utils/lumina-archiver/i18n/l-archiver_lt.ts @@ -513,12 +513,12 @@ <message> <location filename="../imgDialog.cpp" line="170"/> <source>This operation requires administrator priviledges.</source> - <translation type="unfinished"></translation> + <translation>Ši operacija reikalauja administratoriaus teisių.</translation> </message> <message> <location filename="../imgDialog.cpp" line="170"/> <source>Would you like to enable these priviledges?</source> - <translation type="unfinished"></translation> + <translation>Ar norėtumėte leisti šias teises?</translation> </message> <message> <location filename="../imgDialog.cpp" line="175"/> diff --git a/src-qt5/desktop-utils/lumina-calculator/i18n/l-calc_fi.ts b/src-qt5/desktop-utils/lumina-calculator/i18n/l-calc_fi.ts index 0116a041..0d4a273d 100644 --- a/src-qt5/desktop-utils/lumina-calculator/i18n/l-calc_fi.ts +++ b/src-qt5/desktop-utils/lumina-calculator/i18n/l-calc_fi.ts @@ -6,67 +6,67 @@ <message> <location filename="../../../core/libLumina/LuminaXDG.cpp" line="603"/> <source>Multimedia</source> - <translation type="unfinished"></translation> + <translation>Multimedia</translation> </message> <message> <location filename="../../../core/libLumina/LuminaXDG.cpp" line="604"/> <source>Development</source> - <translation type="unfinished"></translation> + <translation>Kehitys</translation> </message> <message> <location filename="../../../core/libLumina/LuminaXDG.cpp" line="605"/> <source>Education</source> - <translation type="unfinished"></translation> + <translation>Kasvatus</translation> </message> <message> <location filename="../../../core/libLumina/LuminaXDG.cpp" line="606"/> <source>Games</source> - <translation type="unfinished"></translation> + <translation>Pelit</translation> </message> <message> <location filename="../../../core/libLumina/LuminaXDG.cpp" line="607"/> <source>Graphics</source> - <translation type="unfinished"></translation> + <translation>Grafiikka</translation> </message> <message> <location filename="../../../core/libLumina/LuminaXDG.cpp" line="608"/> <source>Network</source> - <translation type="unfinished"></translation> + <translation>Verkko</translation> </message> <message> <location filename="../../../core/libLumina/LuminaXDG.cpp" line="609"/> <source>Office</source> - <translation type="unfinished"></translation> + <translation>Toimisto</translation> </message> <message> <location filename="../../../core/libLumina/LuminaXDG.cpp" line="610"/> <source>Science</source> - <translation type="unfinished"></translation> + <translation>Tiede</translation> </message> <message> <location filename="../../../core/libLumina/LuminaXDG.cpp" line="611"/> <source>Settings</source> - <translation type="unfinished"></translation> + <translation>Asetukset</translation> </message> <message> <location filename="../../../core/libLumina/LuminaXDG.cpp" line="612"/> <source>System</source> - <translation type="unfinished"></translation> + <translation>Järjestelmä</translation> </message> <message> <location filename="../../../core/libLumina/LuminaXDG.cpp" line="613"/> <source>Utility</source> - <translation type="unfinished"></translation> + <translation>Työkalut</translation> </message> <message> <location filename="../../../core/libLumina/LuminaXDG.cpp" line="614"/> <source>Wine</source> - <translation type="unfinished"></translation> + <translation>Wine</translation> </message> <message> <location filename="../../../core/libLumina/LuminaXDG.cpp" line="615"/> <source>Unsorted</source> - <translation type="unfinished"></translation> + <translation>Lajittelematta</translation> </message> </context> <context> @@ -75,102 +75,102 @@ <location filename="../mainUI.ui" line="14"/> <location filename="../mainUI.cpp" line="53"/> <source>Calculator</source> - <translation type="unfinished"></translation> + <translation>Laskin</translation> </message> <message> <location filename="../mainUI.ui" line="657"/> <source>Advanced Operations</source> - <translation type="unfinished"></translation> + <translation>Lisätoiminnot</translation> </message> <message> <location filename="../mainUI.cpp" line="83"/> <source>Percentage %1</source> - <translation type="unfinished"></translation> + <translation>Osuus %1</translation> </message> <message> <location filename="../mainUI.cpp" line="85"/> <source>Power %1</source> - <translation type="unfinished"></translation> + <translation>Potenssi %1</translation> </message> <message> <location filename="../mainUI.cpp" line="87"/> <source>Base-10 Exponential %1</source> - <translation type="unfinished"></translation> + <translation>10-kantainen eksponentti %1</translation> </message> <message> <location filename="../mainUI.cpp" line="89"/> <source>Exponential %1</source> - <translation type="unfinished"></translation> + <translation>Eksponentti %1</translation> </message> <message> <location filename="../mainUI.cpp" line="91"/> <source>Constant Pi %1</source> - <translation type="unfinished"></translation> + <translation>Vakio pii %1</translation> </message> <message> <location filename="../mainUI.cpp" line="94"/> <source>Square Root %1</source> - <translation type="unfinished"></translation> + <translation>Neliöjuuri %1</translation> </message> <message> <location filename="../mainUI.cpp" line="96"/> <source>Logarithm %1</source> - <translation type="unfinished"></translation> + <translation>Logaritmi %1</translation> </message> <message> <location filename="../mainUI.cpp" line="98"/> <source>Natural Log %1</source> - <translation type="unfinished"></translation> + <translation>Luonnollinen logaritmi %1</translation> </message> <message> <location filename="../mainUI.cpp" line="101"/> <source>Sine %1</source> - <translation type="unfinished"></translation> + <translation>Sini %1</translation> </message> <message> <location filename="../mainUI.cpp" line="103"/> <source>Cosine %1</source> - <translation type="unfinished"></translation> + <translation>Kosini %1</translation> </message> <message> <location filename="../mainUI.cpp" line="105"/> <source>Tangent %1</source> - <translation type="unfinished"></translation> + <translation>Tangentti %1</translation> </message> <message> <location filename="../mainUI.cpp" line="108"/> <source>Arc Sine %1</source> - <translation type="unfinished"></translation> + <translation>Arkussini %1</translation> </message> <message> <location filename="../mainUI.cpp" line="110"/> <source>Arc Cosine %1</source> - <translation type="unfinished"></translation> + <translation>Arkuskosini %1</translation> </message> <message> <location filename="../mainUI.cpp" line="112"/> <source>Arc Tangent %1</source> - <translation type="unfinished"></translation> + <translation>Arkustangentti %1</translation> </message> <message> <location filename="../mainUI.cpp" line="115"/> <source>Hyperbolic Sine %1</source> - <translation type="unfinished"></translation> + <translation>Hyperbolinen sini %1</translation> </message> <message> <location filename="../mainUI.cpp" line="117"/> <source>Hyperbolic Cosine %1</source> - <translation type="unfinished"></translation> + <translation>Hyperbolinen kosini %1</translation> </message> <message> <location filename="../mainUI.cpp" line="119"/> <source>Hyperbolic Tangent %1</source> - <translation type="unfinished"></translation> + <translation>Hyperbolinen tangentti %1</translation> </message> <message> <location filename="../mainUI.cpp" line="182"/> <source>Save Calculator History</source> - <translation type="unfinished"></translation> + <translation>Tallenna laskimen historia</translation> </message> </context> </TS> diff --git a/src-qt5/desktop-utils/lumina-fm-dev/main.cpp b/src-qt5/desktop-utils/lumina-fm-dev/main.cpp index 61d2dc95..a4a6244e 100644 --- a/src-qt5/desktop-utils/lumina-fm-dev/main.cpp +++ b/src-qt5/desktop-utils/lumina-fm-dev/main.cpp @@ -2,6 +2,7 @@ #include <QDebug> #include <QFile> #include <QStringList> +#include <QElapsedTimer> #include "MainUI.h" #include <LuminaOS.h> @@ -10,6 +11,7 @@ #include <LuminaSingleApplication.h> #include "BrowserWidget.h" +QElapsedTimer* timer = 0; int main(int argc, char ** argv) { @@ -27,6 +29,7 @@ int main(int argc, char ** argv) MainUI w; QObject::connect(&a, SIGNAL(InputsAvailable(QStringList)), &w, SLOT(slotSingleInstance(QStringList)) ); //QObject::connect(&themes, SIGNAL(updateIcons()), &w, SLOT(setupIcons()) ); + timer = new QElapsedTimer(); timer->start(); qDebug() << " - Init:" << timer->elapsed(); w.OpenDirs(in); w.show(); diff --git a/src-qt5/desktop-utils/lumina-fm-dev/widgets/DirWidget2.cpp b/src-qt5/desktop-utils/lumina-fm-dev/widgets/DirWidget2.cpp index 3790d145..2e837cfd 100644 --- a/src-qt5/desktop-utils/lumina-fm-dev/widgets/DirWidget2.cpp +++ b/src-qt5/desktop-utils/lumina-fm-dev/widgets/DirWidget2.cpp @@ -28,6 +28,8 @@ #define DEBUG 0 +extern QElapsedTimer* timer; + DirWidget::DirWidget(QString objID, QWidget *parent) : QWidget(parent), ui(new Ui::DirWidget){ ui->setupUi(this); //load the designer file ID = objID; @@ -90,6 +92,8 @@ DirWidget::DirWidget(QString objID, QWidget *parent) : QWidget(parent), ui(new U createShortcuts(); createMenus(); line_dir->setCompleter(new QCompleter(dirtreeModel, this)); + qDebug() << " - Fini:" << timer->elapsed(); + } DirWidget::~DirWidget(){ diff --git a/src-qt5/desktop-utils/lumina-fm/widgets/fmwebdav.cpp b/src-qt5/desktop-utils/lumina-fm/widgets/fmwebdav.cpp new file mode 100644 index 00000000..6e65ebaf --- /dev/null +++ b/src-qt5/desktop-utils/lumina-fm/widgets/fmwebdav.cpp @@ -0,0 +1,36 @@ +#include "fmwebdav.h" + +fmwebdav::fmwebdav(QObject *parent) : QNetworkAccessManager(parent) ,wdRootPath(), wdUsername(), wdUassword(), wdBaseUrl(), wdCurrentConnectionType(QWebdav::HTTP){ +// typical Qnetwork connection stuff goes here +// probably ssl parts too +} + +fmwebdav::~fmwebdav(){ +} + +QString fmwebdav::hostname() const{ return wdBaseUrl.host(); } + +int fmwebdav::port() const{ return wdBaseUrl.port(); } + +QString fmwebdav::rootPath() const{ return wdRootPath;} + +QString fmwebdav::username() const{ return wdUsername; } + +QString fmwebdav::password() const{ return wdPassword; } + +fmwebdav::QWebdavConnectionType : fmwebdav::connectionType() const{ return wdCurrentConnectionType; } + +bool fmwebdav::isSSL() const{ return (wdCurrentConnectionType==QWebdav::HTTPS); } + +void QWebdav::setConnectionSettings(const QWebdavConnectionType connectionType, const QString *hostname, const QString *rootPath, const QString *username, const QString *password, int *port){ + wdRootPath = rootPath; + if ((wdRootPath.endsWith("/")){ wdRootPath.chop(1); } + wdCurrentConnectionType = connectionType; + wdBaseUrl.setScheme(); + wdBaseUrl.setHost(hostname); + wdBaseUrl.setPath(rootPath); + if (port != 0) { // use user-defined port number if not 80 or 443 + if ( ! ( ( (port == 80) && (wdCurrentConnectionType==QWebdav::HTTP) ) || ( (port == 443) && (wdCurrentConnectionType==QWebdav::HTTPS) ) ) ){ wdBaseUrl.setPort(port); } + wdUsername = username; + wdPassword = password; +} diff --git a/src-qt5/desktop-utils/lumina-fm/widgets/fmwebdav.h b/src-qt5/desktop-utils/lumina-fm/widgets/fmwebdav.h new file mode 100644 index 00000000..04d29e3b --- /dev/null +++ b/src-qt5/desktop-utils/lumina-fm/widgets/fmwebdav.h @@ -0,0 +1,36 @@ +#ifndef FMWEBDAV_H +#define FMWEBDAV_H + +#include <QtCore> +#include <QtNetwork> +#include <QNetworkAccessManager> + +public: + + enum QWebdavConnectionType {HTTP = 1, HTTPS}; + + QString hostname() const; + int port() const; + QString rootPath() const; + QString username() const; + QString password() const; + QWebdavConnectionType connectionType() const; + bool isSSL() const; + + void setConnectionSettings( const QWebdavConnectionType connectionType, const QString *hostname, const QString *rootPath = "/", const QString *username = "", const QString *password = "", int *port = 0; + + +private: + + QString wdRootPath; + QString wdUsername; + QString wdPassword; + QUrl wdBaseUrl; + QWebdavConnectionType wdCurrentConnectionType; + + + + + + +#endif // FMWEBDAV diff --git a/src-qt5/desktop-utils/lumina-fm/widgets/vidnail.cpp b/src-qt5/desktop-utils/lumina-fm/widgets/vidnail.cpp new file mode 100644 index 00000000..ee7fb9e3 --- /dev/null +++ b/src-qt5/desktop-utils/lumina-fm/widgets/vidnail.cpp @@ -0,0 +1,33 @@ +#include "vidnail.h" +vidnail::vidnail(QWidget *parent) : QMainWindow(parent), mplayer(parent, QMediaPlayer::VideoSurface){ //there is no UI, so not sure how to alter the constructor +} + +vidnail::~vidnail() +{ + +vidnail::grabvideothumbnail(){ + vsurface = new QAbstractVideoSurface(); + mplayer.setVideoOutput(vsurface); + mplayer.setMedia($file); // video file to get thumbnail of + imageCaptured = QPixmap(); + mplayer.setPosition(2000); // time in milliseconds + mplayer.setMuted(true); // just to make sure no sound is emited + mplayer.play(); + + currentFrame = frame; + const QImage::Format imageFormat = QVideoFrame::imageFormatFromPixelFormat(format.pixelFormat()); + const QSize size = format.frameSize(); + + this->imageFormat = imageFormat; + QAbstractVideoSurface::start(format); + QImage image( currentFrame.bits(), currentFrame.width(), currentFrame.height(), currentFrame.bytesPerLine(), imageFormat); + imageCaptured = QPixmap::fromImage(image.copy(image.rect())); + +// Now do scaling with regular thumbnail process to make proper size + + mplayer.stop(); + vsurface.stop(); +} + + + diff --git a/src-qt5/desktop-utils/lumina-fm/widgets/vidnail.h b/src-qt5/desktop-utils/lumina-fm/widgets/vidnail.h new file mode 100644 index 00000000..ad565749 --- /dev/null +++ b/src-qt5/desktop-utils/lumina-fm/widgets/vidnail.h @@ -0,0 +1,25 @@ +#ifndef VIDNAIL_H +#define VIDNAIL_H + +#include <QMediaPlayer> +#include <QtMultimediaWidgets> +#include "videowidgetsurface.h" +#include <QPixmap> +#include <QAbstractVideoSurface> +#include <QImage> +#include <QRect> +#include <QVideoFrame> + +public: + + void grabvideothumbnail(); + +private: + + QAbstractVideoSurface *vsurface; + QImage::Format imageFormat; + QPixmap imageCaptured; + + +#endif // VIDNAIL_H + diff --git a/src-qt5/desktop-utils/lumina-textedit/MainUI.cpp b/src-qt5/desktop-utils/lumina-textedit/MainUI.cpp index 52a29c01..4c2ce0bd 100644 --- a/src-qt5/desktop-utils/lumina-textedit/MainUI.cpp +++ b/src-qt5/desktop-utils/lumina-textedit/MainUI.cpp @@ -496,11 +496,11 @@ void MainUI::closeEvent(QCloseEvent *ev){ unsaved << tmp->currentFile(); } } - bool quitnow = unsaved.isEmpty(); - if(!quitnow && !ui->actionShow_Popups->isChecked()){ quitnow = true; } - if(!quitnow){ - quitnow = (QMessageBox::Yes == QMessageBox::question(this, tr("Lose Unsaved Changes?"), QString(tr("There are unsaved changes.\nDo you want to close the editor anyway?\n\n%1")).arg(unsaved.join("\n")), QMessageBox::Yes | QMessageBox::No, QMessageBox::No) ); - } - if(quitnow){ QMainWindow::closeEvent(ev); } - else{ ev->ignore(); } + bool savenow = unsaved.isEmpty(); + if(!savenow && !ui->actionShow_Popups->isChecked()){ savenow = true; } + if(!savenow){ + savenow = (QMessageBox::Yes == QMessageBox::question(this, tr("Save Changes before closing?"), QString(tr("There are unsaved changes.\nDo you want save them before you close the editor?\n\n%1")).arg(unsaved.join("\n")), QMessageBox::Yes | QMessageBox::No, QMessageBox::No) ); + } + if(!savenow){ QMainWindow::closeEvent(ev); } + else{ ev->ignore(); SaveFile(); } } diff --git a/src-qt5/desktop-utils/lumina-textedit/MainUI.ui b/src-qt5/desktop-utils/lumina-textedit/MainUI.ui index de5c1ee1..fec94a21 100644 --- a/src-qt5/desktop-utils/lumina-textedit/MainUI.ui +++ b/src-qt5/desktop-utils/lumina-textedit/MainUI.ui @@ -182,7 +182,7 @@ <x>0</x> <y>0</y> <width>505</width> - <height>21</height> + <height>28</height> </rect> </property> <property name="contextMenuPolicy"> @@ -437,6 +437,11 @@ </property> </action> </widget> + <tabstops> + <tabstop>line_find</tabstop> + <tabstop>line_replace</tabstop> + <tabstop>tool_hideReplaceGroup</tabstop> + </tabstops> <resources/> <connections/> </ui> |