diff --git a/CMakeLists.txt b/CMakeLists.txt index 91ade0a16..1a465bf3f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,229 +1,229 @@ cmake_minimum_required(VERSION 3.5) set(KF5_VERSION "5.54.0") # handled by release scripts set(KF5_DEP_VERSION "5.54.0") # handled by release scripts project(Plasma VERSION ${KF5_VERSION}) # ECM setup include(FeatureSummary) find_package(ECM 5.54.0 NO_MODULE) set_package_properties(ECM PROPERTIES TYPE REQUIRED DESCRIPTION "Extra CMake Modules." URL "https://projects.kde.org/projects/kdesupport/extra-cmake-modules") feature_summary(WHAT REQUIRED_PACKAGES_NOT_FOUND FATAL_ON_MISSING_REQUIRED_PACKAGES) set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH}) include(GenerateExportHeader) include(ECMGenerateHeaders) include(KDEInstallDirs) include(KDECMakeSettings) include(CMakePackageConfigHelpers) include(ECMSetupVersion) include(KDEFrameworkCompilerSettings NO_POLICY_SCOPE) include(ECMQtDeclareLoggingCategory) include(ECMAddQch) include(KDEPackageAppTemplates) include(ECMGenerateQmlTypes) include(ECMSetupQtPluginMacroNames) option(BUILD_QCH "Build API documentation in QCH format (for e.g. Qt Assistant, Qt Creator & KDevelop)" OFF) add_feature_info(QCH ${BUILD_QCH} "API documentation in QCH format (for e.g. Qt Assistant, Qt Creator & KDevelop)") ecm_setup_version(PROJECT VARIABLE_PREFIX PLASMA VERSION_HEADER "${CMAKE_CURRENT_BINARY_DIR}/plasma_version.h" PACKAGE_VERSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/KF5PlasmaConfigVersion.cmake" SOVERSION 5) if(KDE_PLATFORM_FEATURE_DISABLE_DEPRECATED) set(KDE_NO_DEPRECATED TRUE) set(CMAKE_AUTOMOC_MOC_OPTIONS "-DKDE_NO_DEPRECATED") endif() ################# now find all used packages ################# set (REQUIRED_QT_VERSION 5.10.0) find_package(Qt5 ${REQUIRED_QT_VERSION} REQUIRED NO_MODULE COMPONENTS Quick Gui Sql Qml Svg QuickControls2) find_package(KF5 ${KF5_DEP_VERSION} REQUIRED COMPONENTS Activities Archive Config ConfigWidgets CoreAddons DBusAddons Declarative GlobalAccel GuiAddons I18n IconThemes KIO Service WindowSystem XmlGui Notifications Package Kirigami2 OPTIONAL_COMPONENTS Wayland DocTools ) set_package_properties(KF5Wayland PROPERTIES DESCRIPTION "Integration with the Wayland compositor" TYPE OPTIONAL ) if(KF5Wayland_FOUND) set(HAVE_KWAYLAND 1) endif() set_package_properties(KF5DocTools PROPERTIES DESCRIPTION "Tools to generate documentation" TYPE OPTIONAL ) #optional features find_package(X11 MODULE) set_package_properties(X11 PROPERTIES DESCRIPTION "X11 libraries" - URL "http://www.x.org" + URL "https://www.x.org/" TYPE OPTIONAL ) find_package(XCB MODULE COMPONENTS XCB COMPOSITE DAMAGE SHAPE XFIXES RENDER) set_package_properties(XCB PROPERTIES DESCRIPTION "X protocol C-language Binding" - URL "http://xcb.freedesktop.org" + URL "https://xcb.freedesktop.org/" TYPE OPTIONAL ) if(X11_FOUND AND XCB_XCB_FOUND) set(HAVE_X11 1) find_package(Qt5 REQUIRED NO_MODULE COMPONENTS X11Extras) #X11_Xrender discovery is done by FindX11 #add_feature_info("X Rendering Extension (libXrender)" X11_Xrender_FOUND "Support for compositing, rendering operations, and alpha-blending. STRONGLY RECOMMENDED") endif() find_package(OpenGL) set_package_properties(OpenGL PROPERTIES DESCRIPTION "The OpenGL libraries" - URL "http://www.opengl.org" + URL "https://www.opengl.org/" TYPE OPTIONAL ) find_package(EGL) set_package_properties(EGL PROPERTIES PURPOSE "Support for Window Thumbnail on EGL platform" TYPE OPTIONAL ) set(HAVE_EGL ${EGL_FOUND}) if(OPENGL_FOUND AND (${Qt5Gui_OPENGL_IMPLEMENTATION} STREQUAL "GL")) set(HAVE_GLX ${HAVE_X11}) else() set(HAVE_GLX 0) endif() ######################################################################### ecm_setup_qtplugin_macro_names( JSON_NONE "K_EXPORT_PLASMA_SERVICE" "K_EXPORT_PLASMA_APPLET" "K_EXPORT_PLASMA_PACKAGE" "K_EXPORT_PLASMA_APPLETSCRIPTENGINE" "K_EXPORT_PLASMA_DATAENGINESCRIPTENGINE" "K_EXPORT_PLASMA_DATAENGINE" JSON_ARG2 "K_EXPORT_PLASMA_PACKAGE_WITH_JSON" JSON_ARG3 "K_EXPORT_PLASMA_SERVICE_WITH_JSON" "K_EXPORT_PLASMA_APPLET_WITH_JSON" "K_EXPORT_PLASMA_APPLETSCRIPTENGINE_WITH_JSON" "K_EXPORT_PLASMA_DATAENGINESCRIPTENGINE_WITH_JSON" "K_EXPORT_PLASMA_CONTAINMENTACTIONS_WITH_JSON" "K_EXPORT_PLASMA_DATAENGINE_WITH_JSON" CONFIG_CODE_VARIABLE PACKAGE_SETUP_AUTOMOC_VARIABLES ) add_definitions(-DQT_DISABLE_DEPRECATED_BEFORE=0) #add_definitions(-Wno-deprecated) add_definitions(-DQT_USE_QSTRINGBUILDER) add_definitions(-DQT_NO_URL_CAST_FROM_STRING) include(KF5PlasmaMacros.cmake) ######################################################################### option(BUILD_EXAMPLES "Build and install Plasma examples." OFF) option(BUILD_COVERAGE "Build Plasma Frameworks with gcov support" OFF) if(BUILD_COVERAGE) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lgcov") endif() # make plasma_version.h available include_directories(${CMAKE_CURRENT_BINARY_DIR}) ################# list the subdirectories ################# if (KF5DocTools_FOUND) add_subdirectory(docs) endif() add_definitions(-DTRANSLATION_DOMAIN=\"libplasma5\") if (IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/po") ki18n_install(po) if (KF5DocTools_FOUND) kdoctools_install(po) endif() endif() add_subdirectory(src) if (BUILD_EXAMPLES) add_subdirectory(examples) endif() if (BUILD_TESTING) add_subdirectory(autotests) add_subdirectory(tests) endif() add_subdirectory(templates) ################ create PlasmaConfig.cmake and install it ########################### # create a Config.cmake and a ConfigVersion.cmake file and install them set(CMAKECONFIG_INSTALL_DIR "${KDE_INSTALL_CMAKEPACKAGEDIR}/KF5Plasma") if (BUILD_QCH) ecm_install_qch_export( TARGETS KF5Plasma_QCH FILE KF5PlasmaQchTargets.cmake DESTINATION "${CMAKECONFIG_INSTALL_DIR}" COMPONENT Devel ) set(PACKAGE_INCLUDE_QCHTARGETS "include(\"\${CMAKE_CURRENT_LIST_DIR}/KF5PlasmaQchTargets.cmake\")") endif() configure_package_config_file( "${CMAKE_CURRENT_SOURCE_DIR}/KF5PlasmaConfig.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/KF5PlasmaConfig.cmake" INSTALL_DESTINATION ${CMAKECONFIG_INSTALL_DIR} PATH_VARS KF5_INCLUDE_INSTALL_DIR CMAKE_INSTALL_PREFIX ) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/KF5PlasmaConfig.cmake" "${CMAKE_CURRENT_BINARY_DIR}/KF5PlasmaConfigVersion.cmake" "${CMAKE_CURRENT_SOURCE_DIR}/KF5PlasmaMacros.cmake" DESTINATION "${CMAKECONFIG_INSTALL_DIR}" COMPONENT Devel ) install(EXPORT KF5PlasmaTargets DESTINATION "${CMAKECONFIG_INSTALL_DIR}" FILE KF5PlasmaTargets.cmake NAMESPACE KF5:: COMPONENT Devel) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/plasma_version.h DESTINATION ${KDE_INSTALL_INCLUDEDIR_KF5} COMPONENT Devel ) feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES) diff --git a/autotests/data/plasma/desktoptheme/testtheme/metadata.desktop b/autotests/data/plasma/desktoptheme/testtheme/metadata.desktop index 18936e6eb..3de26dbcc 100644 --- a/autotests/data/plasma/desktoptheme/testtheme/metadata.desktop +++ b/autotests/data/plasma/desktoptheme/testtheme/metadata.desktop @@ -1,20 +1,20 @@ [Desktop Entry] Name=Plasma test theme X-KDE-PluginInfo-Author=KDE Visual Design Group X-KDE-PluginInfo-Email=kde-artists@kde.org X-KDE-PluginInfo-Name=default X-KDE-PluginInfo-Version=5.20 -X-KDE-PluginInfo-Website=http://plasma.kde.org +X-KDE-PluginInfo-Website=https://plasma.kde.org X-KDE-PluginInfo-Category= X-KDE-PluginInfo-Depends= X-KDE-PluginInfo-License=LGPL X-KDE-PluginInfo-EnabledByDefault=true X-Plasma-API=5.0 [ContrastEffect] enabled=true contrast=0.2 intensity=2.0 saturation=1.7 diff --git a/autotests/data/signedPackage/contents/code/main.js b/autotests/data/signedPackage/contents/code/main.js index 50a8f62c9..554d5defe 100644 --- a/autotests/data/signedPackage/contents/code/main.js +++ b/autotests/data/signedPackage/contents/code/main.js @@ -1,45 +1,45 @@ // because we put the following line in the metadata.desktop file, we have access // to the HTTP extension in this Plasmoid. // // X-Plasma-RequiredExtensions=http // // More documentation can be found here: // -// http://techbase.kde.org/Development/Tutorials/Plasma/JavaScript/API#Extensions +// https://techbase.kde.org/Development/Tutorials/Plasma/JavaScript/API#Extensions output = new TextEdit output.readOnly = true layout = new LinearLayout layout.orientation = QtVertical layout.addItem(output) // in case our request for HTTP urls in the metadata.desktop was rejected (e.g. due // to security restrictions) we won't have a plasmoid.get, so let's check for it // before using it! if (plasmoid.getUrl) { - var getJob = plasmoid.getUrl("http://dot.kde.org/rss.xml"); + var getJob = plasmoid.getUrl("https://dot.kde.org/rss.xml"); function recv(job, data) { if (job == getJob) { print("we have our job") if (data.length) { output.append(data.toUtf8()) } } } function fini(job) { if (job == getJob) { print("our job is finished") } else { print("some other job is finished?") } } getJob.data.connect(recv) getJob.finished.connect(fini) } else { output.text = i18n("HTTP access denied!") } diff --git a/autotests/packagemetadatatest.desktop b/autotests/packagemetadatatest.desktop index aa240eea1..18b3abd14 100644 --- a/autotests/packagemetadatatest.desktop +++ b/autotests/packagemetadatatest.desktop @@ -1,103 +1,103 @@ [Desktop Entry] Name=Package metadata test file Name[ar]=ملف اختبار بيانات الحزمة الوصفية Name[bs]=Test datoteka paketa metapodataka Name[ca]=Fitxer de proves per a les metadades del paquet Name[ca@valencia]=Fitxer de proves per a les metadades del paquet Name[cs]=Testovací soubor metadat balíčku Name[da]=Testfil med pakkemetadata Name[de]=Testdatei für Paket-Metadaten Name[en_GB]=Package metadata test file Name[es]=Archivo de pruebas de metadatos de paquete Name[fi]=Pakettimetatietojen testitiedosto Name[fr]=Fichier de test de métadonnées de paquets Name[gd]=Faidhle deuchainneach e pacaid mheata-dàta Name[gl]=Ficheiro de proba de metadatos de paquete Name[hu]=Tesztfájl csomagok metaadatához Name[ia]=File de prova del pacchetto metadata Name[it]=File di prova metadati pacchetto Name[ko]=패키지 메타데이터 테스트 파일 Name[lt]=Paketo metaduomenų bandomasis failas Name[mr]=पॅकेज मेटाडेटा चाचणी फाईल Name[nb]=Testfil for Package metadata Name[nds]=Paketmetadaten-Testdatei Name[nl]=Testbestand voor pakketmetadata Name[nn]=Testfil for pakkemetadata Name[pa]=ਪੈਕੇਜ ਮੇਟਾਡਾਟਾ ਟੈਸਟ ਫਾਈਲ Name[pl]=Plik próbny pakietu metadanych Name[pt]=Ficheiro de testes de meta-dados dos pacotes Name[pt_BR]=Arquivo de teste dos metadados do pacote Name[ru]=Тестовый файл метаданных пакета Name[sk]=Testovací súbor metadát balíčku Name[sl]=Preizkusna datoteka metapodatkov paketa Name[sr]=Пробни фајл метаподатака пакета Name[sr@ijekavian]=Пробни фајл метаподатака пакета Name[sr@ijekavianlatin]=Probni fajl metapodataka paketa Name[sr@latin]=Probni fajl metapodataka paketa Name[sv]=Testfil för paketmetadata Name[tr]=Paket metadata test dosyası Name[ug]=بوغچا مېتا سانلىق-مەلۇمات سىناق ھۆججەت Name[uk]=Файл перевірки метаданих пакунка Name[x-test]=xxPackage metadata test filexx Name[zh_CN]=工具包元数据测试文件 Name[zh_TW]=套件中繼資料測試檔 Comment=A test desktop file to test the PackageMetaData class. Comment[ar]=ملف سطح مكتب اختباري لاختبار صنف بيانات الحزمة الوصفية (PackageMetaData). Comment[bs]=Probna .desktop datoteka za klasu PackageMetaData. Comment[ca]=Un fitxer d'escriptori de proves per provar la classe «PackageMetaData». Comment[ca@valencia]=Un fitxer d'escriptori de proves per provar la classe «PackageMetaData». Comment[cs]=Testovací soubor plochy pro otestování třídy PackageMetaData. Comment[da]=En test-desktop-fil til at teste PackageMetaData-klassen. Comment[de]=Eine Test-Desktop-Datei zum Testen der Klasse „PackageMetaData“. Comment[en_GB]=A test desktop file to test the PackageMetaData class. Comment[es]=Un archivo de escritorio para probar la clase PackageMetaData. Comment[fi]=Kokeellinen desktop-tiedosto PackageMetaData-luokan testaamiseen. Comment[fr]=Un fichier « desktop » de test pour tester la classe PackageMetaData. Comment[gd]=Faidhle desktop deuchainneach gus deuchainn a dhèanamh air a' chlas PackageMetaData. Comment[gl]=Un ficheiro de escritorio de proba para probar a clase PackageMetaData. Comment[hu]=Teszt .desktop fájl a PackageMetaData osztály teszteléséhez. Comment[ia]=Un file de prova del scriptorio pro provar le classe PackageMetaData. Comment[it]=Un file desktop di test per provare la classe PackageMetaData. Comment[ko]=PackageMetaData 클래스를 테스트하는 데스크톱 파일입니다. Comment[lt]=Bandomasis desktop failas skirtas PackageMetaData klasei. Comment[mr]=पॅकेज मेटाडेटा वर्ग चाचणीसाठी चाचणी डेस्कटॉप फाईल. Comment[nb]=En skrivebordsfil med testdata for klassen PackageMetaData. Comment[nds]=En Test-Schriefdischdatei för't Utproberen vun de Klass „PackageMetaData“. Comment[nl]=Een desktop-bestand voor het testen van de PackageMetaData-klasse. Comment[nn]=Ei .desktop-fil for testing av PackageMetaData-klassen. Comment[pa]=PackageMetaData ਕਲਾਸ ਟੈਸਟ ਕਰਨ ਲਈ ਟੈਸਟ ਡੈਸਕਟਾਪ ਫਾਈਲ Comment[pl]=Plik próbny desktop do wypróbowania klasy PackageMetaData. Comment[pt]=Um ficheiro 'desktop' de testes da classe PackageMetaData. Comment[pt_BR]=Um arquivo desktop de testes para a classe PackageMetaData. Comment[ru]=Тестовый файл .desktop для проверки класса PackageMetaData. Comment[sk]=Testovací súbor plochy na testovanie triedy PackageMetaData. Comment[sl]=Preizkusna namizna datoteka za preizkus razreda PackageMetaData. Comment[sr]=Пробни .десктоп фајл за класу PackageMetaData. Comment[sr@ijekavian]=Пробни .десктоп фајл за класу PackageMetaData. Comment[sr@ijekavianlatin]=Probni .desktop fajl za klasu PackageMetaData. Comment[sr@latin]=Probni .desktop fajl za klasu PackageMetaData. Comment[sv]=En skrivbordsfil för att testa klassen PackageMetaData. Comment[tr]=PackageMetaData sınıfını test etmek için bir desktop dosyası. Comment[ug]=PackageMetaData خىلىدىكى سىناشقا ئىشلىتىدىغان desktop تىپىدىكى ھۆججەت. Comment[uk]=Тестовий стільничний файл для перевірки класу PackageMetaData. Comment[x-test]=xxA test desktop file to test the PackageMetaData class.xx Comment[zh_CN]=用于测试 PackageMetaData 类的 desktop 类型文件。 Comment[zh_TW]=測試 PackageMetaData 類別的桌面檔 Icon=test Type=Service X-KDE-ServiceTypes=Plasma/Applet X-KDE-Screenshot=a_not_default_file.svg X-KDE-Library=some_test_library X-KDE-PluginInfo-Author=Bertjan Broeksema X-KDE-PluginInfo-Email=b.broeksema@kdemail.net X-KDE-PluginInfo-Name=test X-KDE-PluginInfo-Version=pre0.1 -X-KDE-PluginInfo-Website=http://plasma.kde.org/ +X-KDE-PluginInfo-Website=https://plasma.kde.org/ X-KDE-PluginInfo-Category=System test X-KDE-PluginInfo-Depends=some_test_dep X-KDE-PluginInfo-License=GPL X-KDE-PluginInfo-EnabledByDefault=true X-KDE-ParentApp=A Test name diff --git a/examples/applets/bugreport/metadata.desktop b/examples/applets/bugreport/metadata.desktop index 4472bf030..2845fa937 100644 --- a/examples/applets/bugreport/metadata.desktop +++ b/examples/applets/bugreport/metadata.desktop @@ -1,137 +1,137 @@ [Desktop Entry] Comment=Report a bug in Plasma Comment[ar]=أبلغ عن علّة في «بلازما» Comment[ca]=Informa d'un error en el Plasma Comment[ca@valencia]=Informa d'un error en el Plasma Comment[cs]=Nahlásit chybu v Plasmě Comment[da]=Rapportér en fejl i Plasma Comment[de]=Einen Fehler in Plasma berichten Comment[en_GB]=Report a bug in Plasma Comment[es]=Informar de un fallo en Plasma Comment[et]=Plasma veast teatamine Comment[eu]=Bidali Plasmako akats baten berri Comment[fi]=Ilmoita viasta Plasmassa Comment[fr]=Rapporter un bogue dans Plasma Comment[gd]=Innis dhuinn mu bhuga ann am Plasma Comment[gl]=Informar dun fallo en Plasma Comment[hu]=Hiba jelentése a Plasmában Comment[ia]=Reporta un bug in Plasma Comment[id]=Laporkan bug di Plasma Comment[it]=Segnala un bug in Plasma Comment[ko]=Plasma 버그 보고 Comment[lt]=Pranešti apie Plasma klaidą Comment[nb]=Rapporter feil i Plasma Comment[nds]=En Fehler binnen Plasma künnig maken Comment[nl]=Een bug in Plasma rapporteren Comment[nn]=Meld frå om feil i Plasma Comment[pa]=ਪਲਾਜ਼ਮਾ ਵਿੱਚ ਬੱਗ ਦੀ ਜਾਣਕਾਰੀ ਦਿਓ Comment[pl]=Zgłoś błąd w Plazmie Comment[pt]=Comunicar um erro no Plasma Comment[pt_BR]=Comunicar um erro no Plasma Comment[ru]=Отчёт об ошибке в Plasma Comment[sk]=Oznámiť chybu v Plasma Comment[sl]=Poročaj o hrošču v Plasmi Comment[sr]=Пријавите грешку у Плазми Comment[sr@ijekavian]=Пријавите грешку у Плазми Comment[sr@ijekavianlatin]=Prijavite grešku u Plasmi Comment[sr@latin]=Prijavite grešku u Plasmi Comment[sv]=Rapportera ett fel i Plasma Comment[tr]=Plasma'da hata raporla Comment[uk]=Повідомити про ваду у Плазмі Comment[x-test]=xxReport a bug in Plasmaxx Comment[zh_CN]=报告 Plasma 的错误 Comment[zh_TW]=在 Plasma 中回報問題 Keywords=plasma;bugzilla;bug;development;support; Keywords[ca]=plasma;bugzilla;error;desenvolupament;suport; Keywords[ca@valencia]=plasma;bugzilla;error;desenvolupament;suport; Keywords[da]=plasma;bugzilla;bug;udvikling;støtte; Keywords[de]=plasma;bugzilla;Fehler;Entwicklung;Unterstützung; Keywords[en_GB]=plasma;bugzilla;bug;development;support; Keywords[es]=plasma;bugzilla;fallo;desarrollo;soporte; Keywords[et]=plasma;bugzilla;viga;arendus;toetus;veateade;vearaport; Keywords[eu]=plasma;bugzilla;akatsa;bug;garapena;euskarria; Keywords[fi]=plasma;bugzilla;bug;bugi;vika;virhe;development;kehitys;kehittäminen;support;tuki; Keywords[fr]=plasma;bugzilla;bug;développement;gestion; Keywords[gd]=plasma;bugzilla;bug;development;support;buga;leasachadh;taic;cobhair; Keywords[gl]=plasma;bugzilla;bug;erro;fallo;desenvolvemento;support;soporte;asistencia;asistencia técnica;axuda; Keywords[hu]=plasma;bugzilla;hiba;fejlesztés;támogatás; Keywords[ia]=plasma;bugzilla;bug;development;support; Keywords[id]=plasma;bugzilla;bug;development;support; Keywords[it]=plasma;bugzilla;bug;sviluppo;supporto; Keywords[ko]=plasma;bugzilla;bug;development;support;버그;개발;지원; Keywords[lt]=plasma;bugzilla;klaida;kūrimas;palaikymas; Keywords[nb]=plasma;bugzilla;feil;utvikling;støtte; Keywords[nl]=plasma;bugzilla;bug;ontwikkeling;ondersteuning; Keywords[nn]=plasma;bugzilla;feil;utvikling;støtte; Keywords[pl]=plazma;bugzilla;błąd;rozwój;programowanie;wsparcie;obsługa; Keywords[pt]=plasma;bugzilla;erro;desenvolvimento;suporte; Keywords[pt_BR]=plasma;bugzilla;erro;bug;desenvolvimento;suporte; Keywords[ru]=plasma;bugzilla;bug;development;support;ошибка;сбой;поддержка;разработка; Keywords[sk]=plasma;bugzilla;chyba;vývoj;podpora; Keywords[sl]=plasma;bugzilla;hrošč;napaka;razvoj;podpora; Keywords[sr]=plasma;bugzilla;bug;development;support;Плазма;Бубаждаја;грешка;развој;подршка; Keywords[sr@ijekavian]=plasma;bugzilla;bug;development;support;Плазма;Бубаждаја;грешка;развој;подршка; Keywords[sr@ijekavianlatin]=plasma;bugzilla;bug;development;support;Plasma;Bubaždaja;greška;razvoj;podrška; Keywords[sr@latin]=plasma;bugzilla;bug;development;support;Plasma;Bubaždaja;greška;razvoj;podrška; Keywords[sv]=plasma;bugzilla;fel;utveckling;support; Keywords[tr]=plazma;bugzilla;hata;geliştirme;destek;plasma; Keywords[uk]=plasma;bugzilla;bug;development;support;плазма;багзілла;вада;баг;розробка;підтримка;супровід;помилка; Keywords[x-test]=xxplasmaxx;xxbugzillaxx;xxbugxx;xxdevelopmentxx;xxsupportxx; Keywords[zh_CN]=plasma;bugzilla;bug;development;support;错误;开发;支持; Keywords[zh_TW]=plasma;bugzilla;bug;development;support; Name=Bug Name[ar]=علّة Name[ca]=Error Name[ca@valencia]=Error Name[cs]=Chyba Name[da]=Programfejl Name[de]=Fehler Name[en_GB]=Bug Name[es]=Fallo Name[et]=Viga Name[eu]=Akatsa Name[fi]=Vika Name[fr]=Bogue Name[gd]=Buga Name[gl]=Fallo Name[hu]=Hiba Name[ia]=Bug Name[id]=Bug Name[it]=Bug Name[ko]=버그 Name[lt]=Vabalas Name[nb]=Feil Name[nds]=Fehler Name[nl]=Bug Name[nn]=Feil Name[pa]=ਬੱਗ Name[pl]=Błąd Name[pt]=Insecto Name[pt_BR]=Erro Name[ru]=Ошибка Name[sk]=Chyba Name[sl]=Hrošč Name[sr]=Грешка Name[sr@ijekavian]=Грешка Name[sr@ijekavianlatin]=Greška Name[sr@latin]=Greška Name[sv]=Fel Name[tr]=Hata Name[uk]=Вада Name[x-test]=xxBugxx Name[zh_CN]=臭虫 Name[zh_TW]=錯誤 Type=Service Icon=kbugbuster X-KDE-PluginInfo-Author=Sebastian Kügler X-KDE-PluginInfo-Category=Development X-KDE-PluginInfo-Email=sebas@kde.org X-KDE-PluginInfo-License=GPL X-KDE-PluginInfo-Name=org.kde.example.bugreport X-KDE-PluginInfo-Version= -X-KDE-PluginInfo-Website=http://bugs.kde.org +X-KDE-PluginInfo-Website=https://bugs.kde.org X-KDE-ServiceTypes=Plasma/Applet X-Plasma-API=declarativeappletscript X-Plasma-MainScript=ui/main.qml diff --git a/examples/applets/nowplaying/metadata.desktop b/examples/applets/nowplaying/metadata.desktop index 3a5b1e1fe..e65ac8570 100644 --- a/examples/applets/nowplaying/metadata.desktop +++ b/examples/applets/nowplaying/metadata.desktop @@ -1,96 +1,96 @@ [Desktop Entry] Name=Now playing (QML) Name[ar]=يشغّل الآن (QML) Name[bs]=Sada svira (QML) Name[ca]=Ara està en reproducció (QML) Name[ca@valencia]=Ara està en reproducció (QML) Name[da]=Afspiller nu (QML) Name[de]=Musiktitel-Anzeige (QML) Name[en_GB]=Now playing (QML) Name[es]=Reproduciendo (QML) Name[et]=Praegu mängitakse (QML) Name[eu]=Orain jotzen (QML) Name[fi]=Nyt soi (QML) Name[fr]=Lecture en cours (QML) Name[gd]='Ga chluich an-dràsta (QML) Name[gl]=Estase a reproducir (QML) Name[hu]=Most játszott (QML) Name[ia]=Ora reproducente (QML) Name[id]=Sekarang memainkan (QML) Name[it]=In riproduzione (QML) Name[ko]=지금 재생 중(QML) Name[lt]=Dabar grojama (QML) Name[nb]=Spiller nå (QML) Name[nds]=Lopen Stück (QML) Name[nl]=Speelt nu (QML) Name[nn]=Spelar no (QML) Name[pl]=Teraz odtwarzane (QML) Name[pt]=Agora a tocar (QML) Name[pt_BR]=Reproduzindo (QML) Name[ru]=Сейчас играет (QML) Name[sk]=Práve hrám (QML) Name[sl]=Trenutno se predvaja (QML) Name[sr]=Тренутна свирка (КуМЛ) Name[sr@ijekavian]=Тренутна свирка (КуМЛ) Name[sr@ijekavianlatin]=Trenutna svirka (QML) Name[sr@latin]=Trenutna svirka (QML) Name[sv]=Spelar nu (QML) Name[tr]=Şimdi çalıyor (QML) Name[uk]=Зараз відтворюється (QML) Name[x-test]=xxNow playing (QML)xx Name[zh_CN]=正在播放 (QML) Name[zh_TW]=現正播放(QML) Comment=A proof of concept media player controller qml Comment[ar]=متحكّم لمشغّل وسائط ب‍QML يثبت فعاليّة المبدأ Comment[bs]=Dokaz koncepta media player upravljača qml Comment[ca]=Una prova del concepte de controlador QML per a un reproductor multimèdia Comment[ca@valencia]=Una prova del concepte de controlador QML per a un reproductor multimèdia Comment[da]=Prototype af medieafspiller-betjening i qml Comment[de]=Ein Konzeptnachweis für eine Medien-Wiedergabe geschrieben in QML Comment[en_GB]=A proof of concept media player controller qml Comment[es]=Una prueba de concepto de controlador de reproductor multimedia en QML Comment[et]=QML-is kirjutatud meediamängija juhtimise näidis Comment[eu]=qml euskarri-jotzaile kontrolatzaile baten kontzeptu proba Comment[fi]=QML:n soveltuvuusselvitys mediasoittimen ohjaamiseen Comment[fr]=Un contrôleur de lecteur multimédia comme démonstrateur de faisabilité en QML Comment[gd]=Seo qml airson inneal-smachd aig cluicheadair-mheadhanan mar dhearbhadh air bun-smuain Comment[gl]=Unha proba de concepto de controlador de reprodutor multimedia en qml Comment[hu]=Bemutató médiavezérlő QML-ben írva Comment[ia]=Un prova de controlator qml de reproductor de media ideate Comment[id]=Sebuah bukti konsep qml pengendali player media Comment[it]=Un prototipo qml del controllo di un lettore multimediale Comment[ko]=QML 기반 미디어 재생기 제어 예제 Comment[nb]=En qml mediespiller-styring, som proof of concept Comment[nds]=En Konzeptprööv för en QML-Medianafspeler-Kuntrull Comment[nl]=Een 'proof of concept' qml voor besturing van een mediaspeler Comment[nn]=Ein enkel QML-basert eksempel-mediespelarkontrollar Comment[pl]=Przykładowy sterownik odtwarzacza multimediów w qml Comment[pt]=A prova de conceito de um QML com controlo de leitor multimédia Comment[pt_BR]=A prova de conceito de um QML com controle de reprodutor multimídia Comment[ru]=Пример интерфейса управления медиапроигрывателем на QML Comment[sk]=Proof of concept ovládač prehrávača médií qml Comment[sl]=Delujoč nadzornik qml za glasbeni predvajalnik Comment[sr]=Показни управљач медија плејером у КуМЛ‑у Comment[sr@ijekavian]=Показни управљач медија плејером у КуМЛ‑у Comment[sr@ijekavianlatin]=Pokazni upravljač medija plejerom u QML‑u Comment[sr@latin]=Pokazni upravljač medija plejerom u QML‑u Comment[sv]=Ett koncept för styrning av mediaspelare i QML Comment[tr]=Bir ortam oynatıcısı denetçisi qml 'in kavram kanıtı Comment[uk]=Тестова програма для спостереження за відтворенням мультимедійних даних, написана мовою qml Comment[x-test]=xxA proof of concept media player controller qmlxx Comment[zh_CN]=媒体播放器控制器 QML 版本的概念验证 Comment[zh_TW]=概念媒體播放控制器 qml 的證明 Icon=applications-multimedia Type=Service X-KDE-ServiceTypes=Plasma/Applet X-KDE-PluginInfo-Author=Marco Martin X-KDE-PluginInfo-Category=Examples X-KDE-PluginInfo-Depends= X-KDE-PluginInfo-Email=notmart@gmail.com X-KDE-PluginInfo-EnabledByDefault=true X-KDE-PluginInfo-License=GPL X-KDE-PluginInfo-Name=org.kde.nowplaying-qml X-KDE-PluginInfo-Version=1.0 -X-KDE-PluginInfo-Website=http://plasma.kde.org/ +X-KDE-PluginInfo-Website=https://plasma.kde.org/ X-Plasma-API=declarativeappletscript X-Plasma-MainScript=qml/main.qml diff --git a/examples/applets/samegame/metadata.desktop b/examples/applets/samegame/metadata.desktop index 7ac191907..def933d1c 100644 --- a/examples/applets/samegame/metadata.desktop +++ b/examples/applets/samegame/metadata.desktop @@ -1,96 +1,96 @@ [Desktop Entry] Name=Same game (QML) Name[ar]=نفس اللعبة (QML) Name[bs]=Ista igra (QML) Name[ca]=Joc Same (QML) Name[ca@valencia]=Joc Same (QML) Name[da]=Same game (QML) Name[de]=SameGame-Spiel (QML) Name[en_GB]=Same game (QML) Name[es]=Juego Iguales (QML) Name[et]=Sama mäng (QML) Name[eu]=SameGame jokoa (QML) Name[fi]=Same Game (QML) Name[fr]=Same Game (QML) Name[gd]=An aon gheama (QML) Name[gl]=Xogo dos iguais (QML) Name[hu]=Leszedegetős játék (QML) Name[ia]=Mesme Joco (QML) Name[id]=Permainan Same (QML) Name[it]=Same game (QML) Name[ko]=같은 것 맞추기(QML) Name[nb]=Same game (QML) Name[nds]=SameGame (QML) Name[nl]=Zelfde spel (QML) Name[nn]=Same game (QML) Name[pl]=Ta sama gra (QML) Name[pt]=Jogo de bolas (QML) Name[pt_BR]=Jogo de bolas (QML) Name[ru]=Игра Same (QML) Name[sk]=Uložiť hru (QML) Name[sl]=Same game (QML) Name[sr]=Исто‑исто (КуМЛ) Name[sr@ijekavian]=Исто‑исто (КуМЛ) Name[sr@ijekavianlatin]=Isto‑isto (QML) Name[sr@latin]=Isto‑isto (QML) Name[sv]=Samegame (QML) Name[tr]=Aynı oyun (QML) Name[uk]=Та сама гра (QML) Name[x-test]=xxSame game (QML)xx Name[zh_CN]=相同游戏 (QML) Name[zh_TW]=Same game (QML) Comment=The Same game QML Qt demo converted as plasmoid Comment[ar]=نسخة «نفس اللعبة» ب‍QML في «كيوت» محوّلة كبلازمويد Comment[bs]=Ista igra QML Qt demo preobraćen kao plazmoid Comment[ca]=La demo Qt en QML del joc Same convertit com a plasmoide Comment[ca@valencia]=La demo Qt en QML del joc Same convertit com a plasmoide Comment[da]=Same Game QML Qt-demo konverteret til en plasmoid Comment[de]=Das Spiel SameGame als QML-QT-Demo umgewandelt in ein Plasmoid Comment[en_GB]=The Same game QML Qt demo converted as plasmoid Comment[es]=Demo en QML de Qt del juego Iguales convertido en plasmoide Comment[et]=Plasmoidiks muudetud Sama mängu QML-versiooni näidis Comment[eu]=SameGame jokoaren QML Qt demoa plasmoid bihurtuta Comment[fi]=QML Qt-demo Same Game muunnettuna plasmoidiksi Comment[fr]=Le jeu « Same Game » de la démo QML de Qt, converti en plasmoid Comment[gd]=Taisbeanadh air QML Qt an aon gheama mar phlasmoid Comment[gl]=O xogo dos iguais en QML convertido nun plasmoide Comment[hu]=A leszedegetős játék demó verziója plazmoidként Comment[ia]=Le Mesme Joco QML. Demo de QT convertite in plasmoid Comment[id]=Demo Qt permainan Same QML yang dikonversi sebagai plasmoid Comment[it]=La dimostrazione QML Qt del gioco Same convertito in plasmoide Comment[ko]=Plasmoid로 변환된 같은 것 맞추기 QML Qt 데모 Comment[nb]=Same game QML Qt-demo gjort om til plasmoide Comment[nds]=Dat SameGame-QML-Qt-Demo ümbuut as Plasma-Lüttprogramm Comment[nl]=De demo van QML Qt van 'Zelfde spel' geconverteerd als plasmoid Comment[nn]=Same game QML Qt-demo gjort om til plasmoide Comment[pl]=Demo Qt Tej samej gry przekształcone na plazmoid Comment[pt]=A demonstração do jogo Same Game do Qt em QML Comment[pt_BR]=Demonstração do jogo Same Game do Qt em QML convertido como plasmoide Comment[ru]=Игра Same в виде виджета Plasma на QML Comment[sk]=Same game QML Qt demo konvertované ako plasmoid Comment[sl]=Predstavitvena igra SameGame v QML Qt, pretvorjena v plasmoid Comment[sr]=КуТ‑ов демо исто‑истог на КуМЛ‑у претворен у плазмоид Comment[sr@ijekavian]=КуТ‑ов демо исто‑истог на КуМЛ‑у претворен у плазмоид Comment[sr@ijekavianlatin]=Qt‑ov demo isto‑istog na QML‑u pretvoren u plazmoid Comment[sr@latin]=Qt‑ov demo isto‑istog na QML‑u pretvoren u plazmoid Comment[sv]=Samegame QML Qt-demonstrationen konverterad till Plasmoid Comment[tr]=Aynı oyunun QML Qt plasmoid olarak çevrilmiş halinin tanıtımı Comment[uk]=Плазмоїд-демонстрація тієї самої гри на основі QML Comment[x-test]=xxThe Same game QML Qt demo converted as plasmoidxx Comment[zh_CN]=相同游戏 QML 的 Qt demo 转化成的小部件 Comment[zh_TW]=Same game QML Qt 展示轉換為元件 Icon=applications-games Type=Service X-KDE-ServiceTypes=Plasma/Applet X-Plasma-API=declarativeappletscript X-Plasma-MainScript=qml/samegame.qml X-KDE-PluginInfo-Author=Marco Martin X-KDE-PluginInfo-Email=notmart@gmail.com X-KDE-PluginInfo-Name=org.kde.samegame-qml X-KDE-PluginInfo-Version=1.0 -X-KDE-PluginInfo-Website=http://plasma.kde.org/ +X-KDE-PluginInfo-Website=https://plasma.kde.org/ X-KDE-PluginInfo-Category=Examples X-KDE-PluginInfo-Depends= X-KDE-PluginInfo-License=GPL X-KDE-PluginInfo-EnabledByDefault=true diff --git a/examples/applets/testcomponents/contents/ui/DragPage.qml b/examples/applets/testcomponents/contents/ui/DragPage.qml index b1e4ab7a7..1d878667d 100644 --- a/examples/applets/testcomponents/contents/ui/DragPage.qml +++ b/examples/applets/testcomponents/contents/ui/DragPage.qml @@ -1,262 +1,262 @@ /* * Copyright 2013 Sebastian Kügler * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA. */ import QtQuick 2.0 import org.kde.plasma.core 2.0 as PlasmaCore import org.kde.plasma.components 2.0 as PlasmaComponents import org.kde.plasma.extras 2.0 as PlasmaExtras import org.kde.kquickcontrolsaddons 2.0 as KQuickControlsAddons import org.kde.draganddrop 2.0 as DragAndDrop // MousePage PlasmaComponents.Page { id: dragPage property int _h: 48 property bool isDragging: false anchors { fill: parent margins: _s } PlasmaExtras.Title { id: dlabel anchors { left: parent.left; right: parent.right; top: parent.top; } text: "Drag & Drop" } Column { id: dragCol width: (parent.width-_h)/2 height: parent.height anchors { left: parent.left; top: parent.top; topMargin: itemHeight/2 } spacing: _h/4 property int itemHeight: _h*1.5 DragItem { text: "Image and URL" icon: "image-png" height: parent.itemHeight DragAndDrop.DragArea { objectName: "imageandurl" anchors { fill: parent; } //delegateImage: "akonadi" - mimeData.url: "http://plasma.kde.org" + mimeData.url: "https://plasma.kde.org/" onDragStarted: { isDragging = true; print(" drag started for " + objectName); ooo.text = objectName } onDrop: { isDragging = false; print(" item dropped " + objectName); ooo.text = objectName } //Rectangle { anchors.fill: parent; color: "blue"; opacity: 0.4; } } } DragItem { text: "Delegate Image" icon: "image-png" height: parent.itemHeight DragAndDrop.DragArea { objectName: "image" anchors { fill: parent; } //delegateImage: "akonadi" - //mimeData.url: "http://plasma.kde.org" + //mimeData.url: "https://plasma.kde.org" onDragStarted: { isDragging = true; print(" drag started for " + objectName); ooo.text = objectName } onDrop: { isDragging = false; print(" item dropped " + objectName); ooo.text = objectName } //Rectangle { anchors.fill: parent; color: "green"; opacity: 0.4; } } } DragItem { text: "HTML" icon: "text-html" height: parent.itemHeight DragAndDrop.DragArea { objectName: "html" anchors { fill: parent; } mimeData.html: "One Two Three Four Five " onDragStarted: { isDragging = true; print(" drag started for " + objectName); ooo.text = objectName } onDrop: { isDragging = false; print(" item dropped " + objectName); ooo.text = objectName } } } DragItem { text: "Color" icon: "preferences-color" height: parent.itemHeight DragAndDrop.DragArea { objectName: "color" anchors { fill: parent; } mimeData.color: "orange" onDragStarted: { isDragging = true; print(" drag started for " + objectName); ooo.text = objectName } onDrop: { isDragging = false; print(" item dropped " + objectName); ooo.text = objectName //mimeData. } } } DragItem { text: "Lots of Stuff" icon: "ksplash" height: parent.itemHeight DragAndDrop.DragArea { id: dragArea2 objectName: "stuff" // width: parent.width / 2 // height: dropArea.height / 2 anchors.fill: parent mimeData.text: "Clownfish" mimeData.html: "

Swimming in a Sea of Cheese

Primus->perform();

" mimeData.color: "darkred" - mimeData.url: "http://plasma.kde.org" - mimeData.urls: ["http://planetkde.org", "http://fsfe.org", "http://techbase.kde.org", "http://qt-project.org"] + mimeData.url: "https://plasma.kde.org" + mimeData.urls: ["https://planet.kde.org", "https://fsfe.org", "https://techbase.kde.org", "https://qt.io"] //Rectangle { anchors.fill: parent; color: "yellow"; opacity: 0.6; } onDragStarted: { isDragging = true; print(" drag started for " + objectName); ooo.text = objectName } onDrop: { isDragging = false; print(" item dropped " + objectName); ooo.text = objectName } } } PlasmaComponents.Label { id: ooo } } DragAndDrop.DropArea { id: dropArea //width: parent.width- / 2 //visible: false anchors { right: parent.right; left: dragCol.right; bottom: parent.bottom; top: parent.top; margins: _h/2 } PlasmaComponents.ListItem { id: dropHightlight anchors.fill: parent opacity: 0 PropertyAnimation { properties: "opacity"; easing.type: Easing.Linear; duration: 2000; } } Rectangle { id: clr; anchors.fill: parent; color: "transparent"; opacity: color != "transparent" ? 1 : 0; } PlasmaComponents.Label { id: ilabel font.pointSize: _h / 2 text: "Drop here." opacity: isDragging ? 0.7 : 0 anchors.centerIn: parent horizontalAlignment: Text.AlignCenter PropertyAnimation { properties: "opacity"; easing.type: Easing.Linear; duration: 2000; } } PlasmaComponents.Label { id: slabel font.pointSize: _h / 4 //text: "Drop here." //opacity: isDragging ? 1 : 0 //onTextChanged: print("droparea changed to " + text) anchors.top: parent.top anchors.right: parent.right anchors.left: parent.left //horizontalAlignment: Text.AlignCenter } onDragEnter: { // slabel.text = "drop item here"; dropHightlight.opacity = 1; } onDragLeave: { // slabel.text = "drop left"; dropHightlight.opacity = 0; } onDrop: { var txt = event.mimeData.html; txt += event.mimeData.text; if (event.mimeData.url != "") { txt += "
Url: " + event.mimeData.url; } var i = 0; var u; for (u in event.mimeData.urls) { txt += "
Url " + i + " : " + event.mimeData.urls[i]; i++; } // print("COLOR: " + event.mimeData.color); if (event.mimeData.hasColor()) { clr.color = event.mimeData.color; } else { clr.color = "transparent"; } slabel.text = txt dropHightlight.opacity = 0.5; } } } diff --git a/examples/applets/widgetgallery/metadata.desktop b/examples/applets/widgetgallery/metadata.desktop index fd09df6bd..92bc0a944 100644 --- a/examples/applets/widgetgallery/metadata.desktop +++ b/examples/applets/widgetgallery/metadata.desktop @@ -1,95 +1,95 @@ [Desktop Entry] Name=Widgets gallery Name[ar]=معرض للودجات Name[bs]=galerija dodataka Name[ca]=Galeria d'estris Name[ca@valencia]=Galeria d'estris Name[cs]=Galerie widgetů Name[da]=Widget-galleri Name[de]=Miniprogramm-Galerie Name[en_GB]=Widgets gallery Name[es]=Galería de elementos gráficos Name[et]=Vidinagalerii Name[eu]=Trepeta galeria Name[fi]=Kontrolligalleria Name[fr]=Galerie de composants graphiques Name[gd]=Gailearaidh nan widgets Name[gl]=Galería de trebellos Name[hu]=Elemgaléria Name[ia]=Galleria de widget Name[id]=Galeri widget Name[it]=Galleria dei widget Name[ko]=위젯 갤러리 Name[nb]=Elementgalleri Name[nds]=Lüttprogramm-Galerie Name[nl]=Galerij van widgets Name[nn]=Elementgalleri Name[pl]=Galeria elementów interfejsu Name[pt]=Galeria de elementos Name[pt_BR]=Galeria de widgets Name[ru]=Галерея виджетов Name[sk]=Galéria widgetov Name[sl]=Galerija gradnikov Name[sr]=Галерија виџета Name[sr@ijekavian]=Галерија виџета Name[sr@ijekavianlatin]=Galerija vidžeta Name[sr@latin]=Galerija vidžeta Name[sv]=Grafiskt komponentgalleri Name[tr]=Uygulama Galerisi Name[uk]=Галерея віджетів Name[x-test]=xxWidgets galleryxx Name[zh_CN]=部件浏览器 Name[zh_TW]=元件集 Comment=gallery of widgets done with Plasma QtComponents Comment[bs]=galerija dodataka urađena sa plazma Qt komponentama Comment[ca]=Galeria d'estris fets amb el «QtComponents» del Plasma Comment[ca@valencia]=Galeria d'estris fets amb el «QtComponents» del Plasma Comment[da]=galleri over widgets lavet med Plasma QtComponents Comment[de]=Galerie von Miniprogrammen, die mit Plasma QtComponents erstellt wurden Comment[en_GB]=gallery of widgets done with Plasma QtComponents Comment[es]=Galería de elementos gráficos realizada con Plasma QtComponents Comment[et]=Plasma QtComponentsiga valmistatud vidinagalerii Comment[eu]=Plasma 'QtComponents' erabiliz egindako trepeten galeria Comment[fi]=galleria kontrolleista, jotka on tehty Plasman QtComponents-tekniikalla Comment[fr]=Galerie de composants graphiques réalisés avec les QtComponents de Plasma Comment[gd]=Gailearaidh de widgets a chaidh a dhèanamh le QtComponents Plasma Comment[gl]=galería de trebellos feita con QtComponents de Plasma Comment[hu]=A Plasma QtComponentből készült elemek galériája Comment[ia]=galleria de widget facite con Plasma QtComponents Comment[id]=galeri widget kelar dengan Plasma QtComponents Comment[it]=galleria di widget realizzata con Plasma QtComponents Comment[ko]=Plasma QtComponents로 작성한 위젯 갤러리 Comment[nb]=galleri av elementer laget med Plasma QtComponents Comment[nds]=Galerie vun Lüttprogrammen, de mit de Plasma-QtComponents opstellt wöörn Comment[nl]=galerij van widgets gemaakt met Plasma QtComponents Comment[nn]=Galleri med element laga med Plasma QtComponents Comment[pl]=galeria elementów interfejsu wykonana w QtComponents Plazmy Comment[pt]=Uma galeria de elementos gráficos feita com o QtComponents do Plasma Comment[pt_BR]=Galeria de widgets gráficos feita com o QtComponents do Plasma Comment[ru]=Галерея виджетов, реализованная при помощи QtComponents в Plasma Comment[sk]=Galéria widgetov vytvorených pomocou Plasma QtComponents Comment[sl]=Galerija gradnikov ustvarjena s Plasma QtComponents Comment[sr]=Галерија виџета преко плазма КуТ компонената Comment[sr@ijekavian]=Галерија виџета преко плазма КуТ компонената Comment[sr@ijekavianlatin]=Galerija vidžeta preko plasma Qt komponenata Comment[sr@latin]=Galerija vidžeta preko plasma Qt komponenata Comment[sv]=galleri av grafiska komponenter skapade med Plasma Qt-komponenter Comment[tr]=Plasma QtComponents ile yapılmış gereç galerisi Comment[uk]=Галерея віджетів, створених за допомогою QtComponent-ів Плазми Comment[x-test]=xxgallery of widgets done with Plasma QtComponentsxx Comment[zh_CN]=Plasma Qt 部件实现的部件展示 Comment[zh_TW]=Plasma QtComponents 的元件集 Icon=preferences-desktop-theme Type=Service X-KDE-ServiceTypes=Plasma/Applet X-Plasma-API=declarativeappletscript X-Plasma-MainScript=ui/main.qml X-KDE-PluginInfo-Author=Marco MArtin X-KDE-PluginInfo-Email=notmart@gmail.com X-KDE-PluginInfo-Name=org.kde.example.widgetgallery X-KDE-PluginInfo-Version=1.0 -X-KDE-PluginInfo-Website=http://plasma.kde.org/ +X-KDE-PluginInfo-Website=https://plasma.kde.org/ X-KDE-PluginInfo-Category=Examples X-KDE-PluginInfo-Depends= X-KDE-PluginInfo-License=GPL X-KDE-PluginInfo-EnabledByDefault=true diff --git a/examples/dataengines/customDataContainers/plasma-dataengine-example-customDataContainers.desktop b/examples/dataengines/customDataContainers/plasma-dataengine-example-customDataContainers.desktop index b174cae46..be92900cd 100644 --- a/examples/dataengines/customDataContainers/plasma-dataengine-example-customDataContainers.desktop +++ b/examples/dataengines/customDataContainers/plasma-dataengine-example-customDataContainers.desktop @@ -1,94 +1,94 @@ [Desktop Entry] Name=Custom DataContainers Name[bs]=Odabrani kontejneri podataka Name[ca]=«DataContainers» personalitzats Name[ca@valencia]=«DataContainers» personalitzats Name[da]=Tilpassede databeholdere Name[de]=Benutzerdefinierte Datencontainer Name[en_GB]=Custom DataContainers Name[es]=«DataContainers» personalizados Name[et]=Kohandatud andmekonteinerid Name[eu]=Norberak finkatutako «DataContainer»rak Name[fi]=Mukautetut DataContainerit Name[fr]=DataContainers personnalisés Name[gd]=DataContainers gnàthaichte Name[gl]=DataContainers personalizado Name[hu]=Egyéni DataContainerek Name[ia]=DataContainers (Contento de datos) personalisate Name[id]=Custom DataContainers Name[it]=DataContainer personalizzati Name[ko]=사용자 정의 데이터 컨테이너 Name[nb]=Tilpassede DataContainers Name[nds]=Egen Datengelaatsen Name[nl]=Aangepaste gegevenscontainers Name[nn]=Tilpassa «DataContainers» Name[pl]=Własne pojemniki danych Name[pt]=Contentores Personalizados Name[pt_BR]=DataContainers personalizados Name[ru]=Нестандартные объекты DataContainer Name[sk]=Vlastné dátové kontajnery Name[sl]=DataContainers po meri Name[sr]=Посебни садржаоци података Name[sr@ijekavian]=Посебни садржаоци података Name[sr@ijekavianlatin]=Posebni sadržaoci podataka Name[sr@latin]=Posebni sadržaoci podataka Name[sv]=Egen DataContainer Name[tr]=Özel Veri Kapları Name[uk]=Нетипові контейнери даних Name[x-test]=xxCustom DataContainersxx Name[zh_CN]=自定义数据容器 Name[zh_TW]=自訂資料容器 Comment=A demonstration of how to subclass DataContainer Comment[bs]=Demonstracija kako se podklasira kontejner podataka Comment[ca]=Una demostració de com usar la subclasse «DataContainer» Comment[ca@valencia]=Una demostració de com usar la subclasse «DataContainer» Comment[da]=En demonstration af hvordan man gør DataContainer til en underklasse Comment[de]=Eine Demonstration wie Unterklassen von Datencontainern erstellt werden Comment[en_GB]=A demonstration of how to subclass DataContainer Comment[es]=Una demostración de cómo derivar una clase de «DataContainer» Comment[et]=Näidis, kuidas muuta andmekonteiner alamklassiks Comment[eu]=«DataContainer» azpiklase bat egiteko erakustaldi bat Comment[fi]=Demonstraatio DataContainerin aliluokittamisesta Comment[fr]=Une démonstration de comment faire une sous-classe de « DataContainer » Comment[gd]=Taisbeanadh air mar a chruthaicheas tu fo-chlasaichean aig DataContainer Comment[gl]=Unha demostración de como facer subclases de DataContainer Comment[hu]=A DataContainer alosztályként használatának demonstrációja Comment[ia]=Un demonstration de como poner in sub-classe un DataContainer Comment[id]=Sebuah demonstrasi bagaimana untuk mensubkelas WadahData Comment[it]=Una dimostrazione di come creare sottoclassi di DataContainer Comment[ko]=DataContainer 파생 클래스를 작성하는 방법 시연 Comment[nb]=En demonstrasjon av hvordan subklasser av DataContainer lages Comment[nds]=En Demonstratschoon, wodennig sik en DataContainer-Ünnerklass bruken lett Comment[nl]=Een demonstratie van hoe een subklasse toe te kennen aan een gegevenscontainer Comment[nn]=Ein demonstrasjon av korleis subklassa ein «DataContainer» Comment[pl]=Przedstawienie sposobu tworzenia podklasy pojemnika danych Comment[pt]=Um demonstração de como usar a classe DataContainer Comment[pt_BR]=Demonstração de como usar a subclasse DataContainer Comment[ru]=Пример наследования от класса DataContainer Comment[sk]=Demonštrácia ako urobiť podtriedu dátového kontajnera Comment[sl]=Predstavitev podrazreda DataContainer Comment[sr]=Демонстрација извођења из класе DataContainer Comment[sr@ijekavian]=Демонстрација извођења из класе DataContainer Comment[sr@ijekavianlatin]=Demonstracija izvođenja iz klase DataContainer Comment[sr@latin]=Demonstracija izvođenja iz klase DataContainer Comment[sv]=En demonstration av hur en delklass av DataContainer skapas Comment[tr]=Veri haznesinin nasıl altı sınıf yapıldığının bir göstergesi Comment[uk]=Демонстрація створення підкласу DataContainer Comment[x-test]=xxA demonstration of how to subclass DataContainerxx Comment[zh_CN]=展示如何继承 DataContainer Comment[zh_TW]=DataContainer 子類別的範例 Type=Service Icon=plasma X-KDE-ServiceTypes=Plasma/DataEngine X-KDE-Library=plasma_dataengine_example_customDataContainers X-KDE-PluginInfo-Author=Aaron Seigo X-KDE-PluginInfo-Email=aseigo@kde.org X-KDE-PluginInfo-Name=org.kde.examples.customDataContainers X-KDE-PluginInfo-Version=1.0 -X-KDE-PluginInfo-Website=http://plasma.kde.org/ +X-KDE-PluginInfo-Website=https://plasma.kde.org/ X-KDE-PluginInfo-Category=Examples X-KDE-PluginInfo-Depends= X-KDE-PluginInfo-License=BSD X-KDE-PluginInfo-EnabledByDefault=true diff --git a/examples/dataengines/simpleEngine/plasma-dataengine-example-simpleEngine.desktop b/examples/dataengines/simpleEngine/plasma-dataengine-example-simpleEngine.desktop index b5557abbb..8ebdbbcc7 100644 --- a/examples/dataengines/simpleEngine/plasma-dataengine-example-simpleEngine.desktop +++ b/examples/dataengines/simpleEngine/plasma-dataengine-example-simpleEngine.desktop @@ -1,97 +1,97 @@ [Desktop Entry] Name=Simple DataEngine Example Name[ar]=مثال بسيط لمحرّك بيانات Name[bs]=Jednostavan primjer pogona podataka Name[ca]=Exemple senzill de «DataEngine» Name[ca@valencia]=Exemple senzill de «DataEngine» Name[cs]=Jednoduchý příklad datového nástroje Name[da]=Simpelt eksempel på datamotor Name[de]=Einfaches Datentreiber-Beispiel Name[en_GB]=Simple DataEngine Example Name[es]=Ejemplo sencillo de «DataEngine» Name[et]=Lihtsa andmemootori näidis Name[eu]='DataEngine'ren adibide xumea Name[fi]=Yksinkertainen DataEngine-esimerkki Name[fr]=Exemple simple de DataEngine Name[gd]=Eisimpleir simplidh air DataEngine Name[gl]=Exemplo sinxelo de DataEngine Name[hu]=Egyszerű adatmotor példa Name[ia]=Exemplo semplice de DataEngine (Motor de datos) Name[id]=Contoh MesinData Sederhana Name[it]=Esempio di un motore di dati semplice Name[ko]=간단한 데이터 엔진 예제 Name[nb]=Enkelt DataEngine-eksempel Name[nds]=Eenfach Datenkarn-Bispill Name[nl]=Eenvoudig voorbeeld voor gegevensengine Name[nn]=Enkelt «DataEngine»-eksempel Name[pl]=Prosty przykład silnika danych Name[pt]=Exemplo Simples de Motor de Dados Name[pt_BR]=Exemplo simples de DataEngine Name[ru]=Простой пример источника данных Plasma Name[sk]=Jednoduchý príklad dátového enginu Name[sl]=Preprost primer podatkovnega pogona Name[sr]=Једноставан пример датомотора Name[sr@ijekavian]=Једноставан пример датомотора Name[sr@ijekavianlatin]=Jednostavan primer datomotora Name[sr@latin]=Jednostavan primer datomotora Name[sv]=Enkelt exempel på DataEngine Name[tr]=Basit VeriMotoru Örneği Name[uk]=Простий приклад рушія даних Name[x-test]=xxSimple DataEngine Examplexx Name[zh_CN]=简单数据引擎样例 Name[zh_TW]=簡單資料引擎範例 Comment=A very basic DataEngine implementation Comment[ar]=تنفيذ أساسيّ لمحرّك بيانات (DataEngine) Comment[bs]=Veoma jednostavna implementacija pogona podataka Comment[ca]=Una implementació molt bàsica de «DataEngine» Comment[ca@valencia]=Una implementació molt bàsica de «DataEngine» Comment[da]=En meget basal implementation af en datamotor Comment[de]=Eine Basis-Implementation eines Datentreibers Comment[en_GB]=A very basic DataEngine implementation Comment[es]=Una implementación muy básica de «DataEngine» Comment[et]=Väga lihtne andmemootor Comment[eu]='DataEngine'ren inplementazio oso oinarrizkoa Comment[fi]=Erittäin yksinkertainen DataEngine-toteutus Comment[fr]=Une implémentation très basique de DataEngine Comment[gd]=Ball-eisimpleir glè bhunasach de DataEngine Comment[gl]=Unha realización moi básica de DataEngine Comment[hu]=Egy nagyon egyszerű adatmotor megvalósítás Comment[ia]=Un implementation multo basic de DataEngine (Motor de datos) Comment[id]=Sebuah implementasi MesinData yang sangat dasar Comment[it]=Un'implementazione base di un motore di dati Comment[ko]=기본적인 데이터 엔진 구현 Comment[nb]=En meget enkel implementasjon av DataEngine Comment[nds]=En bannig simpel Datenkarn-Ümsetten Comment[nl]=Een erge basisimplementatie van een gegevens-engine Comment[nn]=Ein svært enkel «DataEngine»-implementasjon Comment[pl]=Bardzo podstawowa implementacja silnika danych Comment[pt]=Uma implementação muito básica do DataEngine Comment[pt_BR]=Implementação muito básica do DataEngine Comment[ru]=Простейшая реализация источника данных Plasma Comment[sk]=Veľmi základná implementácia dátového enginu Comment[sl]=Zelo preprosta izvedba podatkovnega pogona Comment[sr]=Врло основна изведба датомотора Comment[sr@ijekavian]=Врло основна изведба датомотора Comment[sr@ijekavianlatin]=Vrlo osnovna izvedba datomotora Comment[sr@latin]=Vrlo osnovna izvedba datomotora Comment[sv]=En mycket grundläggande implementering av DataEngine Comment[tr]=Çok basit bir VeriMotoru gerçekleştirimi Comment[uk]=Базова реалізація рушія даних Comment[x-test]=xxA very basic DataEngine implementationxx Comment[zh_CN]=非常基础的数据引擎实现 Comment[zh_TW]=非常基本的 DataEngine 實作 Type=Service Icon=plasma X-KDE-ServiceTypes=Plasma/DataEngine X-KDE-Library=plasma_dataengine_example_simpleEngine X-KDE-PluginInfo-Author=Aaron Seigo X-KDE-PluginInfo-Email=aseigo@kde.org X-KDE-PluginInfo-Name=org.kde.examples.simpleEngine X-KDE-PluginInfo-Version=1.0 -X-KDE-PluginInfo-Website=http://plasma.kde.org/ +X-KDE-PluginInfo-Website=https://plasma.kde.org/ X-KDE-PluginInfo-Category=Examples X-KDE-PluginInfo-Depends= X-KDE-PluginInfo-License=BSD X-KDE-PluginInfo-EnabledByDefault=true diff --git a/examples/dataengines/sourcesOnRequest/plasma-dataengine-example-sourcesOnRequest.desktop b/examples/dataengines/sourcesOnRequest/plasma-dataengine-example-sourcesOnRequest.desktop index 4c28dec81..c55601fb1 100644 --- a/examples/dataengines/sourcesOnRequest/plasma-dataengine-example-sourcesOnRequest.desktop +++ b/examples/dataengines/sourcesOnRequest/plasma-dataengine-example-sourcesOnRequest.desktop @@ -1,94 +1,94 @@ [Desktop Entry] Name=Sources On Request Name[bs]=Izvori na zahtjev Name[ca]=Fonts a demanda Name[ca@valencia]=Fonts a demanda Name[da]=Kilder på anmodning Name[de]=Ressourcen auf Anforderung Name[en_GB]=Sources On Request Name[es]=Fuentes bajo petición Name[et]=Lähtekood nõudmisel Name[eu]=Iturburuak eskatu ahala Name[fi]=Lähteet pyynnöstä Name[fr]=Sources à la demande Name[gd]=Tùsan le iarrtas Name[gl]=Orixes baixo pedido Name[hu]=Forráskérés Name[ia]=Fontes sur requesta Name[id]=Sumber Saat Permintaan Name[it]=Fonti su richiesta Name[ko]=요청 시 원본 제공 Name[nb]=Kilder på forespørsel Name[nds]=Borns op Anfraag Name[nl]=Bronnen op verzoek Name[nn]=Kjelder på førespurnad Name[pl]=Źródła na żądanie Name[pt]=Fontes a Pedido Name[pt_BR]=Fontes a pedido Name[ru]=Источники по запросу Name[sk]=Zdroje na požiadanie Name[sl]=Viri na zahtevo Name[sr]=Извори на захтев Name[sr@ijekavian]=Извори на захтев Name[sr@ijekavianlatin]=Izvori na zahtev Name[sr@latin]=Izvori na zahtev Name[sv]=Källor på begäran Name[tr]=İstekteki Kaynaklar Name[uk]=Джерела за запитом Name[x-test]=xxSources On Requestxx Name[zh_CN]=按需请求源 Name[zh_TW]=要求來源 Comment=A DataEngine example showing how to respond to requests for source creation and updates Comment[bs]=Primjer pogona podataka prikazuje kako odgovoriti na zahtjeve za kreiranje izvora i ažuriranja Comment[ca]=Un exemple de «DataEngine» que mostra com respondre a peticions de creació i actualització de les fonts Comment[ca@valencia]=Un exemple de «DataEngine» que mostra com respondre a peticions de creació i actualització de les fonts Comment[da]=Et datamotor-eksempel som viser hvordan man besvarer anmodninger om kilde-oprettelser og opdateringer Comment[de]=Ein Datentreiber-Beispiel, das die Antwort auf Anfragen zur Erstellung von Quellen und Aktualisierungen zeigt Comment[en_GB]=A DataEngine example showing how to respond to requests for source creation and updates Comment[es]=Un ejemplo de «DataEngine» que muestra cómo responder a peticiones para creación y actualización de fuentes Comment[et]=Andmemootori näidis, kuidsa vastata lähtekoodi loomise ja uuendamise päringutele Comment[eu]=Iturburu sorrera eta eguneraketa eskaerei nola erantzun erakusten duen 'DataEngine' adibide bat Comment[fi]=DataEngine-esimerkki, joka näyttää miten vastata lähteiden luonnin ja päivittämisen pyyntöihin Comment[fr]=Un exemple DataEngine montrant comment répondre à des requêtes de création de source et de mise à jour Comment[gd]=Ball-eisimpleir airson inneal-dàta a sheallas mar a fhreagrar do dh'iarrtasan airson cruthachadh 's ùrachadh thùsan Comment[gl]=Un exemplo de DataEngine que mostra como responder a pedidos de creación e actualización de orixes Comment[hu]=DataEngine példa forráslétrehozási és frissítési kérések megválaszolására Comment[ia]=Un exemplo de dataEngine (motor de datos) monstrante como responder a requestas de creation de fonte e actualisationes Comment[id]=Sebuah contoh DataEngine menampilkan bagaimana respon untuk permintaan terhadap update dan penciptaan sumber Comment[it]=Un esempio di motore di dati che mostra come rispondere alle richieste di creazione di fonti e aggiornamenti Comment[ko]=원본 생성과 업데이트에 반응할 방법에 대한 데이터 엔진 예제 Comment[nb]=Et DataEngine-eksempel som viser hvordan forespørsel om oppretting og oppdatering av kilder skal besvares Comment[nds]=En Datenkarn-Bispill, dat wiest, wodennig een op Anfragen na Bornopstellen un -opfrischen antern kann Comment[nl]=Een voorbeeld van een gegevens-engine die toont hoe te antwoorden op verzoeken voor aanmaken van een bron en bijwerken Comment[nn]=Eit «DataEngine»-eksempel som viser korleis svara på førespurnadar om oppretting og oppdatering av kjelder Comment[pl]=Przykład silnika danych pokazujący sposób odpowiedzi na żądanie utworzenia źródła i uaktualnienia Comment[pt]=Um exemplo de DataEngine que demonstra como responder a pedidos de criação e actualização da fonte Comment[pt_BR]=Exemplo de DataEngine que demonstra como responder a solicitações de criação e atualização da fonte Comment[ru]=Пример источника данных Plasma, показывающий, как обрабатывать запросы на создание и обновление источника. Comment[sk]=Ukážka dátového enginu ukazujúca, ako odpovedať na požiadavky na vytvorenie zdroja a aktualizácie Comment[sl]=Primer podatkovnega pogona, ki prikazuje kako se odzvati na zahteve na ustvarjanje virov in njihovo posodabljanje Comment[sr]=Пример датомотора који показује како одговарати на захтеве за стварање и допуне извора Comment[sr@ijekavian]=Пример датомотора који показује како одговарати на захтеве за стварање и допуне извора Comment[sr@ijekavianlatin]=Primer datomotora koji pokazuje kako odgovarati na zahteve za stvaranje i dopune izvora Comment[sr@latin]=Primer datomotora koji pokazuje kako odgovarati na zahteve za stvaranje i dopune izvora Comment[sv]=Ett exempel på en DataEngine som visar hur man svara på en begäran om att skapa källor och uppdateringar Comment[tr]=Kaynak oluşturma ve güncelleme için isteklere nasıl cevap verilmesi gerektiğini gösteren bir veri-motoru örneği Comment[uk]=Приклад рушія даних, який демонструє способи відповіді на запити щодо створення джерела і оновлень Comment[x-test]=xxA DataEngine example showing how to respond to requests for source creation and updatesxx Comment[zh_CN]=数据引擎样例显示如何响应源的创建和更新请求 Comment[zh_TW]=DataEngine 回應要求建立來源與更新的範例 Type=Service Icon=plasma X-KDE-ServiceTypes=Plasma/DataEngine X-KDE-Library=plasma_dataengine_example_sourcesOnRequest X-KDE-PluginInfo-Author=Aaron Seigo X-KDE-PluginInfo-Email=aseigo@kde.org X-KDE-PluginInfo-Name=org.kde.examples.sourcesOnRequest X-KDE-PluginInfo-Version=1.0 -X-KDE-PluginInfo-Website=http://plasma.kde.org/ +X-KDE-PluginInfo-Website=https://plasma.kde.org/ X-KDE-PluginInfo-Category=Examples X-KDE-PluginInfo-Depends= X-KDE-PluginInfo-License=BSD X-KDE-PluginInfo-EnabledByDefault=true diff --git a/examples/developerguide/basic/metadata.desktop b/examples/developerguide/basic/metadata.desktop index 835c3a493..cd7e110f7 100644 --- a/examples/developerguide/basic/metadata.desktop +++ b/examples/developerguide/basic/metadata.desktop @@ -1,96 +1,96 @@ [Desktop Entry] Comment=Basic App Comment[ar]=تطبيق أساسيّ Comment[ca]=Aplicació bàsica Comment[ca@valencia]=Aplicació bàsica Comment[da]=Basal app Comment[de]=Einfache Anwendung Comment[en_GB]=Basic App Comment[es]=Aplicación básica Comment[et]=Lihtrakendus Comment[eu]=Oinarrizko aplikazioa Comment[fi]=Perussovellus Comment[fr]=Application basique Comment[gd]=Aplacaid bhunaiteach Comment[gl]=Aplicativo básico Comment[hu]=Alap alkalmazás Comment[ia]=App Basic Comment[id]=App Dasar Comment[it]=Applicazione di base Comment[ko]=기본 앱 Comment[nl]=Basis app Comment[nn]=Grunnleggjande program Comment[pl]=Podstawowa aplikacja Comment[pt]=Aplicação Básica Comment[pt_BR]=Aplicativo básico Comment[ru]=Простейшее приложение Comment[sk]=Základná aplikácia Comment[sl]=Osnovni program Comment[sr]=Основни програм Comment[sr@ijekavian]=Основни програм Comment[sr@ijekavianlatin]=Osnovni program Comment[sr@latin]=Osnovni program Comment[sv]=Enkel applikation Comment[tr]=Temel Uygulama Comment[uk]=Базова програма Comment[x-test]=xxBasic Appxx Comment[zh_CN]=基础小程序 Comment[zh_TW]=基本應用程式 Name=Bug Name[ar]=علّة Name[ca]=Error Name[ca@valencia]=Error Name[cs]=Chyba Name[da]=Programfejl Name[de]=Fehler Name[en_GB]=Bug Name[es]=Fallo Name[et]=Viga Name[eu]=Akatsa Name[fi]=Vika Name[fr]=Bogue Name[gd]=Buga Name[gl]=Fallo Name[hu]=Hiba Name[ia]=Bug Name[id]=Bug Name[it]=Bug Name[ko]=버그 Name[lt]=Vabalas Name[nb]=Feil Name[nds]=Fehler Name[nl]=Bug Name[nn]=Feil Name[pa]=ਬੱਗ Name[pl]=Błąd Name[pt]=Insecto Name[pt_BR]=Erro Name[ru]=Ошибка Name[sk]=Chyba Name[sl]=Hrošč Name[sr]=Грешка Name[sr@ijekavian]=Грешка Name[sr@ijekavianlatin]=Greška Name[sr@latin]=Greška Name[sv]=Fel Name[tr]=Hata Name[uk]=Вада Name[x-test]=xxBugxx Name[zh_CN]=臭虫 Name[zh_TW]=錯誤 Icon=kbugbuster Type=Application Exec=kpackagelauncherqml -a org.kde.example.developerguide.basic %u X-KDE-PluginInfo-Author=Sebastian Kügler X-KDE-PluginInfo-Category=Development X-KDE-PluginInfo-Email=sebas@kde.org X-KDE-PluginInfo-License=LGPLv2+ X-KDE-PluginInfo-Name=org.kde.example.developerguide.basic X-KDE-PluginInfo-Version=1.0 -X-KDE-PluginInfo-Website=http://www.kde.org +X-KDE-PluginInfo-Website=https://www.kde.org X-KDE-ServiceTypes=KPackage/GenericQML X-Plasma-API=declarativeappletscript X-Plasma-MainScript=ui/main.qml diff --git a/examples/testcontainmentactionsplugin/plasma-containmentactions-test.desktop b/examples/testcontainmentactionsplugin/plasma-containmentactions-test.desktop index 32b488e17..f29000e1a 100644 --- a/examples/testcontainmentactionsplugin/plasma-containmentactions-test.desktop +++ b/examples/testcontainmentactionsplugin/plasma-containmentactions-test.desktop @@ -1,106 +1,106 @@ [Desktop Entry] Name=Test Name[ar]=اختبار Name[bs]=Test Name[ca]=Prova Name[ca@valencia]=Prova Name[cs]=Test Name[da]=Test Name[de]=Test Name[en_GB]=Test Name[es]=Prueba Name[et]=Test Name[eu]=Probatu Name[fi]=Testi Name[fr]=Test Name[gd]=Deuchainn Name[gl]=Proba Name[hu]=Teszt Name[ia]=Essaya Name[id]=Uji Name[it]=Prova Name[ko]=시험 Name[lt]=Testas Name[mr]=चाचणी Name[nb]=Test Name[nds]=Test Name[nl]=Test Name[nn]=Test Name[pa]=ਟੈਸਟ Name[pl]=Próba Name[pt]=Teste Name[pt_BR]=Teste Name[ru]=Тестовый модуль Name[sk]=Test Name[sl]=Preizkus Name[sr]=Проба Name[sr@ijekavian]=Проба Name[sr@ijekavianlatin]=Proba Name[sr@latin]=Proba Name[sv]=Test Name[tr]=Test Name[ug]=سىنا Name[uk]=Тест Name[x-test]=xxTestxx Name[zh_CN]=测试 Name[zh_TW]=測試 Comment=A dummy plugin for testing Comment[ar]=ملحقة دمية اختباريّة Comment[bs]=Lažni priključak za probe Comment[ca]=Un connector fals per a proves Comment[ca@valencia]=Un connector fals per a proves Comment[cs]=Falešný zásuvný modul pro testování Comment[da]=Et attrap-plugin til testformål Comment[de]=Ein Dummy-Modul zum Testen. Comment[en_GB]=A dummy plugin for testing Comment[es]=Un complemento de simulación para hacer pruebas Comment[et]=Libaplugin testimiseks Comment[eu]=Probak egiteko gezurretazko plugin bat Comment[fi]=Tyhjä testausliitännäinen Comment[fr]=Un module externe factice pour tester Comment[gd]=Plugan dumaidh a chum deuchainn Comment[gl]=Un complemento para probas Comment[hu]=Üres bővítmény tesztelésre Comment[ia]=Un plugin vacue pro essayar Comment[id]=Sebuah plugin dumi untuk pengujian Comment[it]=Un'estensione finta di prova Comment[ko]=테스트를 위한 뼈대 플러그인 Comment[lt]=Netikras papildinys testavimui Comment[mr]=चाचणीसाठी नकली प्लगइन Comment[nb]=Et attrapp-programtillegg for testing Comment[nds]=En Platzholler-Moduul för't Utproberen Comment[nl]=Een dummy plugin voor testen Comment[nn]=Ein eksempeltillegg for testing Comment[pl]=Pusta wtyczka do wypróbowywania Comment[pt]=Um 'plugin' de exemplo para testes Comment[pt_BR]=Um plugin fictício para testes Comment[ru]=Тестовый модуль Comment[sk]=Ukážkový modul pre testovanie Comment[sl]=Preizkusni vstavek za preizkušanje Comment[sr]=Лажни прикључак за пробе Comment[sr@ijekavian]=Лажни прикључак за пробе Comment[sr@ijekavianlatin]=Lažni priključak za probe Comment[sr@latin]=Lažni priključak za probe Comment[sv]=Ett exempelinsticksprogram för test Comment[tr]=Denemek için sahte bir eklenti Comment[ug]=سىناشقا ئىشلىتىدىغان قىستۇرما Comment[uk]=Додаток для тестування Comment[x-test]=xxA dummy plugin for testingxx Comment[zh_CN]=测试用插件 Comment[zh_TW]=測試用外掛程式 Icon=preferences-desktop-color Type=Service X-KDE-ServiceTypes=Plasma/ContainmentActions X-KDE-Library=plasma_containmentactions_test X-KDE-PluginInfo-Author=Chani X-KDE-PluginInfo-Email=chani@kde.org X-KDE-PluginInfo-Name=test X-KDE-PluginInfo-Version=pre0.1 -X-KDE-PluginInfo-Website=http://plasma.kde.org/ +X-KDE-PluginInfo-Website=https://plasma.kde.org/ X-KDE-PluginInfo-Depends= X-KDE-PluginInfo-License=GPL X-KDE-PluginInfo-EnabledByDefault=true X-Plasma-HasConfigurationInterface=true diff --git a/src/declarativeimports/core/framesvgitem.h b/src/declarativeimports/core/framesvgitem.h index 06206a2ad..a82330fdc 100644 --- a/src/declarativeimports/core/framesvgitem.h +++ b/src/declarativeimports/core/framesvgitem.h @@ -1,266 +1,266 @@ /*************************************************************************** * Copyright 2010 Marco Martin * * Copyright 2014 David Edmundson * * * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . * ***************************************************************************/ #ifndef FRAMESVGITEM_P #define FRAMESVGITEM_P #include #include #include #include "units.h" namespace Plasma { class FrameSvg; /** * @class FrameSvgItemMargins * * @short The sizes of a frame's margins. */ class FrameSvgItemMargins : public QObject { Q_OBJECT /** * Width in pixels of the left margin. */ Q_PROPERTY(qreal left READ left NOTIFY marginsChanged) /** * Height in pixels of the top margin. */ Q_PROPERTY(qreal top READ top NOTIFY marginsChanged) /** * Width in pixels of the right margin. */ Q_PROPERTY(qreal right READ right NOTIFY marginsChanged) /** * Height in pixels of the bottom margin. */ Q_PROPERTY(qreal bottom READ bottom NOTIFY marginsChanged) /** * Width in pixels of the left and right margins combined. */ Q_PROPERTY(qreal horizontal READ horizontal NOTIFY marginsChanged) /** * Height in pixels of the top and bottom margins combined. */ Q_PROPERTY(qreal vertical READ vertical NOTIFY marginsChanged) public: FrameSvgItemMargins(Plasma::FrameSvg *frameSvg, QObject *parent = nullptr); qreal left() const; qreal top() const; qreal right() const; qreal bottom() const; qreal horizontal() const; qreal vertical() const; /// returns a vector with left, top, right, bottom QVector margins() const; void setFixed(bool fixed); bool isFixed() const; public Q_SLOTS: void update(); Q_SIGNALS: void marginsChanged(); private: FrameSvg *m_frameSvg; bool m_fixed; }; /** * @class FrameSvgItem * * @short Provides an SVG with borders. * * It is exposed as org.kde.plasma.core.FrameSvgItem */ class FrameSvgItem : public QQuickItem { Q_OBJECT Q_INTERFACES(QQmlParserStatus) /** * Theme relative path of the svg, like "widgets/background" */ Q_PROPERTY(QString imagePath READ imagePath WRITE setImagePath NOTIFY imagePathChanged) /** * prefix for the 9 piece svg, like "pushed" or "normal" for the button - * see http://techbase.kde.org/Development/Tutorials/Plasma/ThemeDetails + * see https://techbase.kde.org/Development/Tutorials/Plasma/ThemeDetails * for a list of paths and prefixes * It can also be an array of strings, specifying a fallback chain in case * the first element isn't found in the theme, eg ["toolbutton-normal", "normal"] * so it's easy to keep backwards compatibility with old themes * (Note: fallback chain is supported only @since 5.32) */ Q_PROPERTY(QVariant prefix READ prefix WRITE setPrefix NOTIFY prefixChanged) /** * the actual prefix that was used, if a fallback chain array was set as "prefix" * @since 5.34 */ Q_PROPERTY(QString usedPrefix READ usedPrefix NOTIFY usedPrefixChanged) /** * The margins of the frame, read only * @see FrameSvgItemMargins */ Q_PROPERTY(QObject *margins READ margins CONSTANT) /** * The margins of the frame, regardless if they are enabled or not * read only * @see FrameSvgItemMargins */ Q_PROPERTY(QObject *fixedMargins READ fixedMargins CONSTANT) /** * The borders that will be rendered, it's a flag combination of: * NoBorder * TopBorder * BottomBorder * LeftBorder * RightBorder */ Q_PROPERTY(Plasma::FrameSvg::EnabledBorders enabledBorders READ enabledBorders WRITE setEnabledBorders NOTIFY enabledBordersChanged) /** * Holds whether the current svg is present in the current theme and NO fallback is involved */ Q_PROPERTY(bool fromCurrentTheme READ fromCurrentTheme NOTIFY fromCurrentThemeChanged) /** * Set a color group for the FrameSvgItem. * if the Svg uses stylesheets and has elements * that are either TextColor or BackgroundColor class, * make them use ButtonTextColor/ButtonBackgroundColor * or ViewTextColor/ViewBackgroundColor, ComplementaryTextColor etc. */ Q_PROPERTY(Plasma::Theme::ColorGroup colorGroup READ colorGroup WRITE setColorGroup NOTIFY colorGroupChanged) /** * Sets the image in a selected status. * Svgs can be colored with system color themes, if the status is selected, * the TextColor will become HighlightedText color and BackgroundColor * will become HighlightColor, making the svg graphics (for instance an icon) * will look correct together selected text * @see Plasma::Svg::status * @since 5.23 */ Q_PROPERTY(Plasma::Svg::Status status READ status WRITE setStatus NOTIFY statusChanged) public: /** * @return true if the svg has the necessary elements with the given prefix * to draw a frame * @param prefix the given prefix we want to check if drawable */ Q_INVOKABLE bool hasElementPrefix(const QString &prefix) const; /// @cond INTERNAL_DOCS FrameSvgItem(QQuickItem *parent = nullptr); ~FrameSvgItem(); void setImagePath(const QString &path); QString imagePath() const; void setPrefix(const QVariant &prefix); QVariant prefix() const; QString usedPrefix() const; void setEnabledBorders(const Plasma::FrameSvg::EnabledBorders borders); Plasma::FrameSvg::EnabledBorders enabledBorders() const; FrameSvgItemMargins *margins(); FrameSvgItemMargins *fixedMargins(); void setColorGroup(Plasma::Theme::ColorGroup group); Plasma::Theme::ColorGroup colorGroup() const; bool fromCurrentTheme() const; void setStatus(Plasma::Svg::Status status); Plasma::Svg::Status status() const; void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry) override; /** * Only to be used from inside this library, is not intended to be invokable */ Plasma::FrameSvg *frameSvg() const; QSGNode *updatePaintNode(QSGNode *, UpdatePaintNodeData *) override; void itemChange(QQuickItem::ItemChange change, const QQuickItem::ItemChangeData & data) override; protected: void classBegin() override; void componentComplete() override; /// @endcond Q_SIGNALS: void imagePathChanged(); void prefixChanged(); void enabledBordersChanged(); void fromCurrentThemeChanged(); void colorGroupChanged(); void repaintNeeded(); void statusChanged(); void usedPrefixChanged(); private Q_SLOTS: void doUpdate(); void updateDevicePixelRatio(); private: void applyPrefixes(); Plasma::FrameSvg *m_frameSvg; FrameSvgItemMargins *m_margins; FrameSvgItemMargins *m_fixedMargins; QStringList m_prefixes; bool m_textureChanged; bool m_sizeChanged; bool m_fastPath; }; } #endif diff --git a/src/desktoptheme/air/metadata.desktop b/src/desktoptheme/air/metadata.desktop index 37754fb0d..9659873f3 100644 --- a/src/desktoptheme/air/metadata.desktop +++ b/src/desktoptheme/air/metadata.desktop @@ -1,115 +1,115 @@ [Desktop Entry] Name=Air Name[ar]=هواء Name[bs]=Vazduh Name[ca]=Air Name[ca@valencia]=Air Name[cs]=Vzduch Name[da]=Air Name[de]=Air Name[en_GB]=Air Name[es]=Aire Name[et]=Õhk Name[eu]=Air Name[fi]=Air Name[fr]=Air Name[gd]=Adhair Name[gl]=Air Name[hu]=Levegő Name[ia]=Air Name[id]=Air Name[it]=Aria Name[ko]=공기 Name[lt]=Oras Name[mr]=एअर Name[nb]=Luft Name[nds]=Luft Name[nl]=Air Name[nn]=Luft Name[pa]=ਏਅਰ Name[pl]=Powietrze Name[pt]=Air Name[pt_BR]=Air Name[ru]=Air Name[sk]=Vzduch Name[sl]=Zrak Name[sr]=Ваздух Name[sr@ijekavian]=Ваздух Name[sr@ijekavianlatin]=Vazduh Name[sr@latin]=Vazduh Name[sv]=Luft Name[tr]=Air Name[ug]=ھاۋا Name[uk]=Air Name[x-test]=xxAirxx Name[zh_CN]=大气 Name[zh_TW]=Air Comment=A breath of fresh air Comment[ar]=نسمة من الهواء المنعش Comment[bs]=Dašak svježeg vazduha Comment[ca]=Una alenada d'aire fresc Comment[ca@valencia]=Una alenada d'aire fresc Comment[cs]=Závan čerstvého vzduchu Comment[da]=En mundfuld frisk luft Comment[de]=Ein Atemzug frische Luft Comment[en_GB]=A breath of fresh air Comment[es]=Una bocanada de aire fresco Comment[et]=Värskendav tuulepuhang Comment[eu]=Haize berria Comment[fi]=Raikkaan ilman leyhähdys Comment[fr]=Un souffle d'air frais Comment[gd]=Anail Comment[gl]=Un folgo de ar fresco Comment[hu]=Friss fuvallat Comment[ia]=Un respiration de aere fresc Comment[id]=Sebuah hirupan udara yang segar Comment[it]=Una ventata di aria fresca Comment[ko]=신선한 바람 Comment[lt]=Gryno oro gurkšnis Comment[mr]=शुद्ध हवेचा श्वास Comment[nb]=Et pust av frisk luft Comment[nds]=Wat frische Luft Comment[nl]=Een hap frisse lucht Comment[nn]=Eit friskt pust Comment[pa]=ਤਾਜ਼ਾ ਹਵਾ ਵਿੱਚ ਸਾਹ ਲਵੋ Comment[pl]=Powiew świeżego powietrza Comment[pt]=Uma brisa de ar fresco Comment[pt_BR]=Um pouco de ar fresco Comment[ru]=Волшебные пузырьки Comment[sk]=Závan čerstvého vzduchu Comment[sl]=Svež vetrič Comment[sr]=Дашак свежег ваздуха Comment[sr@ijekavian]=Дашак свјежег ваздуха Comment[sr@ijekavianlatin]=Dašak svježeg vazduha Comment[sr@latin]=Dašak svežeg vazduha Comment[sv]=Ett friskt andetag Comment[tr]=Temiz havadan bir nefes Comment[ug]=ساپ ھاۋادىن نەپەسلىنىش Comment[uk]=Ковток свіжого повітря Comment[x-test]=xxA breath of fresh airxx Comment[zh_CN]=呼吸清新空气 Comment[zh_TW]=吸一口新鮮空氣 X-KDE-PluginInfo-Author=The Oxygen Project X-KDE-PluginInfo-Email=kde-artists@kde.org X-KDE-PluginInfo-Name=air X-KDE-PluginInfo-Version=1.3 -X-KDE-PluginInfo-Website=http://plasma.kde.org +X-KDE-PluginInfo-Website=https://plasma.kde.org X-KDE-PluginInfo-Category= X-KDE-PluginInfo-Depends= X-KDE-PluginInfo-License=GPL X-KDE-PluginInfo-EnabledByDefault=true X-Plasma-API=5.0 [Wallpaper] defaultWallpaperTheme=Elarun defaultFileSuffix=.png defaultWidth=2560 defaultHeight=1600 [ContrastEffect] enabled=true contrast=0.3 intensity=1.9 saturation=1.9 diff --git a/src/desktoptheme/breeze-dark/metadata.desktop b/src/desktoptheme/breeze-dark/metadata.desktop index e01d072c8..952bcadc9 100644 --- a/src/desktoptheme/breeze-dark/metadata.desktop +++ b/src/desktoptheme/breeze-dark/metadata.desktop @@ -1,66 +1,66 @@ [Desktop Entry] Name=Breeze Dark Name[ar]=نسيم داكن Name[ca]=Brisa fosca Name[ca@valencia]=Brisa fosca Name[cs]=Breeze Tmavé Name[da]=Breeze Dark Name[de]=Breeze-Dunkel Name[en_GB]=Breeze Dark Name[es]=Brisa oscuro Name[et]=Breeze Dark Name[eu]=Breeze iluna Name[fi]=Breeze Dark Name[fr]=Breeze foncé Name[gd]=Dorch-oiteag Name[gl]=Breeze escuro Name[hu]=Breeze Dark Name[ia]=Brisa obscure Name[id]=Breeze Dark Name[it]=Brezza scuro Name[ko]=어두운 Breeze Name[lt]=Breeze tamsi Name[nb]=Mørk bris Name[nds]=Breeze düüster Name[nl]=Breeze Dark Name[nn]=Breeze mørk Name[pl]=Ciemna bryza Name[pt]=Brisa Escura Name[pt_BR]=Breeze Dark Name[ru]=Breeze, тёмный вариант Name[sk]=Tmavý vánok Name[sl]=Sapica (temna) Name[sr]=Поветарац тамни Name[sr@ijekavian]=Поветарац тамни Name[sr@ijekavianlatin]=Povetarac tamni Name[sr@latin]=Povetarac tamni Name[sv]=Breeze mörk Name[tr]=Esintili Koyu Name[uk]=Темна Breeze Name[x-test]=xxBreeze Darkxx Name[zh_CN]=暗色微风 Name[zh_TW]=Breeze Dark X-KDE-PluginInfo-Author=KDE Visual Design Group X-KDE-PluginInfo-Email=kde-artists@kde.org X-KDE-PluginInfo-Name=breeze-dark X-KDE-PluginInfo-Version=5.51 -X-KDE-PluginInfo-Website=http://plasma.kde.org +X-KDE-PluginInfo-Website=https://plasma.kde.org X-KDE-PluginInfo-Category= X-KDE-PluginInfo-Depends= X-KDE-PluginInfo-License=LGPL X-KDE-PluginInfo-EnabledByDefault=true X-Plasma-API=5.0 [Wallpaper] defaultWallpaperTheme=Next defaultFileSuffix=.png defaultWidth=1920 defaultHeight=1080 [ContrastEffect] enabled=true contrast=0.2 intensity=0.4 saturation=1.7 diff --git a/src/desktoptheme/breeze-light/metadata.desktop b/src/desktoptheme/breeze-light/metadata.desktop index cc845b8e1..5f4e39c8d 100644 --- a/src/desktoptheme/breeze-light/metadata.desktop +++ b/src/desktoptheme/breeze-light/metadata.desktop @@ -1,63 +1,63 @@ [Desktop Entry] Name=Breeze Light Name[ar]=نسيم فاتح Name[ca]=Brisa clara Name[ca@valencia]=Brisa clara Name[cs]=Breeze Světlé Name[da]=Breeze Light Name[de]=Breeze Light Name[en_GB]=Breeze Light Name[es]=Brisa claro Name[et]=Breeze Light Name[eu]=Breeze argia Name[fi]=Breeze Light Name[fr]=Brise claire Name[gd]=Oiteag shoilleir Name[gl]=Breeze claro Name[hu]=Breeze Light Name[ia]=Brisa legier Name[id]=Breeze Light Name[it]=Brezza chiaro Name[ko]=Breeze Light Name[nl]=Breeze Light Name[nn]=Breeze lys Name[pl]=Lekka Bryza Name[pt]=Brisa Clara Name[pt_BR]=Breeze Light Name[ru]=Breeze, светлый вариант Name[sk]=Vánok svetlý Name[sl]=Sapica (svetla) Name[sr]=Поветарац лаки Name[sr@ijekavian]=Поветарац лаки Name[sr@ijekavianlatin]=Povetarac laki Name[sr@latin]=Povetarac laki Name[sv]=Breeze ljus Name[tr]=Hafif Esinti Name[uk]=Світла Breeze Name[x-test]=xxBreeze Lightxx Name[zh_CN]=亮色微风 Name[zh_TW]=Breeze Light X-KDE-PluginInfo-Author=KDE Visual Design Group X-KDE-PluginInfo-Email=kde-artists@kde.org X-KDE-PluginInfo-Name=default X-KDE-PluginInfo-Version=5.51 -X-KDE-PluginInfo-Website=http://plasma.kde.org +X-KDE-PluginInfo-Website=https://plasma.kde.org X-KDE-PluginInfo-Category= X-KDE-PluginInfo-Depends= X-KDE-PluginInfo-License=LGPL X-KDE-PluginInfo-EnabledByDefault=true X-Plasma-API=5.0 [Wallpaper] defaultWallpaperTheme=Next defaultFileSuffix=.png defaultWidth=1920 defaultHeight=1080 [ContrastEffect] enabled=true contrast=0.2 intensity=2.0 saturation=1.7 diff --git a/src/desktoptheme/breeze/metadata.desktop b/src/desktoptheme/breeze/metadata.desktop index 46838be54..3b1667c0d 100644 --- a/src/desktoptheme/breeze/metadata.desktop +++ b/src/desktoptheme/breeze/metadata.desktop @@ -1,67 +1,67 @@ [Desktop Entry] Name=Breeze Name[ar]=نسيم Name[ca]=Brisa Name[ca@valencia]=Brisa Name[cs]=Breeze Name[da]=Breeze Name[de]=Breeze Name[en_GB]=Breeze Name[es]=Brisa Name[et]=Breeze Name[eu]=Breeze Name[fi]=Breeze Name[fr]=Breeze Name[gd]=Oiteag Name[gl]=Breeze Name[hu]=Breeze Name[ia]=Brisa Name[id]=Breeze Name[it]=Brezza Name[ko]=Breeze Name[lt]=Breeze Name[nb]=Bris Name[nds]=Breeze Name[nl]=Breeze Name[nn]=Breeze Name[pl]=Bryza Name[pt]=Brisa Name[pt_BR]=Breeze Name[ru]=Breeze Name[sk]=Vánok Name[sl]=Sapica Name[sr]=Поветарац Name[sr@ijekavian]=Поветарац Name[sr@ijekavianlatin]=Povetarac Name[sr@latin]=Povetarac Name[sv]=Breeze Name[tr]=Esintili Name[uk]=Breeze Name[x-test]=xxBreezexx Name[zh_CN]=微风 Name[zh_TW]=Breeze X-KDE-PluginInfo-Author=KDE Visual Design Group X-KDE-PluginInfo-Email=kde-artists@kde.org X-KDE-PluginInfo-Name=default X-KDE-PluginInfo-Version=5.51 -X-KDE-PluginInfo-Website=http://plasma.kde.org +X-KDE-PluginInfo-Website=https://plasma.kde.org X-KDE-PluginInfo-Category= X-KDE-PluginInfo-Depends= X-KDE-PluginInfo-License=LGPL X-KDE-PluginInfo-EnabledByDefault=true X-Plasma-API=5.0 [Wallpaper] defaultWallpaperTheme=Next defaultFileSuffix=.png defaultWidth=1920 defaultHeight=1080 [ContrastEffect] enabled=true contrast=0.2 #intensity is disabled, in order to auto adjust to the chosen theme color #intensity=2.0 saturation=1.7 diff --git a/src/desktoptheme/oxygen/metadata.desktop b/src/desktoptheme/oxygen/metadata.desktop index d6786495b..a16bd3ccb 100644 --- a/src/desktoptheme/oxygen/metadata.desktop +++ b/src/desktoptheme/oxygen/metadata.desktop @@ -1,115 +1,115 @@ [Desktop Entry] Name=Oxygen Name[ar]=أكسجين Name[bs]=kiseonik Name[ca]=Oxygen Name[ca@valencia]=Oxygen Name[cs]=Oxygen Name[da]=Oxygen Name[de]=Oxygen Name[en_GB]=Oxygen Name[es]=Oxígeno Name[et]=Oxygen Name[eu]=Oxygen Name[fi]=Oxygen Name[fr]=Oxygen Name[gd]=Ogsaidean Name[gl]=Oxygen Name[hu]=Oxygen Name[ia]=Oxygen Name[id]=Oxygen Name[it]=Oxygen Name[ko]=Oxygen Name[lt]=Oxygen Name[mr]=ऑक्सीजन Name[nb]=Oxygen Name[nds]=Oxygen Name[nl]=Oxygen Name[nn]=Oksygen Name[pa]=ਆਕਸੀਜਨ Name[pl]=Tlen Name[pt]=Oxygen Name[pt_BR]=Oxygen Name[ru]=Oxygen Name[sk]=Oxygen Name[sl]=Kisik Name[sr]=Кисеоник Name[sr@ijekavian]=Кисеоник Name[sr@ijekavianlatin]=Kiseonik Name[sr@latin]=Kiseonik Name[sv]=Oxygen Name[tr]=Oxygen Name[ug]=ئوكسېگىن Name[uk]=Oxygen Name[x-test]=xxOxygenxx Name[zh_CN]=Oxygen Name[zh_TW]=Oxygen Comment=Theme done in the Oxygen style Comment[ar]=سمة مصنوعة بنمط «أكسجين» Comment[bs]=Tema urađena u stilu Kiseonika Comment[ca]=Tema fet en l'estil Oxygen Comment[ca@valencia]=Tema fet en l'estil Oxygen Comment[cs]=Motiv ve stylu Oxygen Comment[da]=Tema lavet i Oxygen-stil Comment[de]=Oberflächen-Design im Oxygen-Stil Comment[en_GB]=Theme done in the Oxygen style Comment[es]=Tema realizado al estilo de Oxígeno Comment[et]=Oxygeni stiilis teema Comment[eu]=Oxygen estiloan egindako gaia Comment[fi]=Oxygen-tyylinen teema Comment[fr]=Thème réalisé dans le style Oxygen Comment[gd]=Ùrlar san stoidhle ogsaidean Comment[gl]=Tema feito no estilo Oxygen Comment[hu]=Oxygen-stílusú téma Comment[ia]=Thema facite in le stilo de Oxygen Comment[id]=Tema dikelarkan dalam gaya Oxygen Comment[it]=Tema realizzato nello stile di Oxygen Comment[ko]=Oxygen 스타일의 기본 테마 Comment[lt]=Apipavidalinimas padarytas Oxygen stiliumi Comment[mr]=ऑक्सीजन शैली मध्ये शैली तयार केली Comment[nb]=Tema laget i Oxygen-stil Comment[nds]=Muster in den Oxygen-Stil Comment[nl]=Thema in Oxygen-stijl Comment[nn]=Tema laga i Oksygen-stilen Comment[pa]=ਥੀਮ ਆਕਸੀਜਨ ਸਟਾਇਲ 'ਚ Comment[pl]=Wystrój wzorowany na stylu Tlen Comment[pt]=Um tema feito com o estilo Oxygen Comment[pt_BR]=Tema criado no estilo Oxygen Comment[ru]=Тема, выполненная в стиле Oxygen Comment[sk]=Téma v štýle Oxygen Comment[sl]=Tema v slogu videza Kisik Comment[sr]=Тема урађена у стилу Кисеоника Comment[sr@ijekavian]=Тема урађена у стилу Кисеоника Comment[sr@ijekavianlatin]=Tema urađena u stilu Kiseonika Comment[sr@latin]=Tema urađena u stilu Kiseonika Comment[sv]=Tema skapat med Oxygen-stilen Comment[tr]=Oxygen biçimi ile yapılmış tema Comment[ug]=ئوكسېگىن ئۇسلۇبىدىكى ئۆرنەك Comment[uk]=Тема в стилі Oxygen Comment[x-test]=xxTheme done in the Oxygen stylexx Comment[zh_CN]=Oxygen 风格的主题 Comment[zh_TW]=以 Oxygen 樣式完成的外觀主題 X-KDE-PluginInfo-Author=The Oxygen Project X-KDE-PluginInfo-Email=kde-artists@kde.org X-KDE-PluginInfo-Name=oxygen X-KDE-PluginInfo-Version=1.1 -X-KDE-PluginInfo-Website=http://plasma.kde.org +X-KDE-PluginInfo-Website=https://plasma.kde.org X-KDE-PluginInfo-Category= X-KDE-PluginInfo-Depends= X-KDE-PluginInfo-License=GPL X-KDE-PluginInfo-EnabledByDefault=true X-Plasma-API=5.0 [Wallpaper] defaultWallpaperTheme=Elarun defaultFileSuffix=.png defaultWidth=2560 defaultHeight=1600 [ContrastEffect] enabled=true contrast=0.3 intensity=0.5 saturation=1.9 diff --git a/src/plasma/CMakeLists.txt b/src/plasma/CMakeLists.txt index 0ef686341..1427e58ef 100644 --- a/src/plasma/CMakeLists.txt +++ b/src/plasma/CMakeLists.txt @@ -1,228 +1,228 @@ add_subdirectory(packagestructure) # This option should be removed, or moved down as far as possible. # That means porting the existing frameworks to the CMake automoc # feature. Porting is mostly removing explicit moc includes, and # leaving the ones which are truly needed (ie, if you remove # them, the build fails). set(CMAKE_AUTOMOC_RELAXED_MODE ON) if(KDE_PLATFORM_FEATURE_BINARY_COMPATIBLE_FEATURE_REDUCTION) set(PLASMA_NO_PACKAGE_EXTRADATA TRUE) endif() #find_package(KdepimLibs 4.5.60) #find_package(Gpgme) #set_package_properties(KDEPIMLIBS PROPERTIES DESCRIPTION "KDE PIM libraries" -# URL "http://www.kde.org" TYPE OPTIONAL +# URL "https://www.kde.org" TYPE OPTIONAL # PURPOSE "Needed for building several Plasma DataEngines") configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config-plasma.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-plasma.h) #FIXME: gpgme++ is in kdepimlibs, must move somewhere else! include_directories(${KDEPIMLIBS_INCLUDE_DIRS} ${GPGME_INCLUDES}) add_definitions(-DKDE_DEFAULT_DEBUG_AREA=1209) ########### next target ############### set(Plasma_LIB_SRCS #global plasma.cpp pluginloader.cpp version.cpp #applets,containments,corona applet.cpp containment.cpp containmentactions.cpp corona.cpp private/applet_p.cpp private/associatedapplicationmanager.cpp private/containment_p.cpp private/timetracker.cpp #Dataengines, services datacontainer.cpp dataengine.cpp dataengineconsumer.cpp service.cpp servicejob.cpp private/datacontainer_p.cpp private/dataenginemanager.cpp private/storage.cpp private/storagethread.cpp #packages package.cpp packagestructure.cpp #graphics framesvg.cpp svg.cpp theme.cpp private/theme_p.cpp #scripting scripting/appletscript.cpp scripting/dataenginescript.cpp scripting/scriptengine.cpp ) if(HAVE_X11) set(Plasma_LIB_SRCS ${Plasma_LIB_SRCS} private/effectwatcher.cpp) endif() kconfig_add_kcfg_files(Plasma_LIB_SRCS data/kconfigxt/libplasma-theme-global.kcfgc) #NEPOMUK_GENERATE_FROM_ONTOLOGY( # nwc.nrl # ${metadata_test_BINARY_DIR} # TEST_HEADERS # TEST_SOURCES # TEST_INCLUDES #) ecm_qt_declare_logging_category(Plasma_LIB_SRCS HEADER debug_p.h IDENTIFIER LOG_PLASMA CATEGORY_NAME org.kde.plasma) add_library(KF5Plasma ${Plasma_LIB_SRCS}) add_library(KF5::Plasma ALIAS KF5Plasma) if(HAVE_X11) set(PLASMA_EXTRA_LIBS ${PLASMA_EXTRA_LIBS} Qt5::X11Extras ${X11_LIBRARIES} XCB::XCB) endif() if(DL_LIBRARY) set(PLASMA_EXTRA_LIBS ${PLASMA_EXTRA_LIBS} ${DL_LIBRARY}) endif() target_link_libraries(KF5Plasma PUBLIC KF5::Service # For kplugininfo.h and kservice.h Qt5::Gui KF5::Package PRIVATE Qt5::Sql Qt5::Svg Qt5::DBus KF5::Archive KF5::GuiAddons #kimagecache KF5::I18n KF5::KIOCore #ServiceJob KF5::KIOWidgets #KRun KF5::WindowSystem #compositingActive KF5::Declarative #runtimePlatform KF5::XmlGui #KActionCollection KF5::GlobalAccel #Applet::setGlobalShortcut KF5::Notifications KF5::IconThemes ${PLASMA_EXTRA_LIBS} ) target_include_directories(KF5Plasma PUBLIC "$" ) target_include_directories(KF5Plasma INTERFACE "$" ) set_target_properties(KF5Plasma PROPERTIES VERSION ${PLASMA_VERSION_STRING} SOVERSION ${PLASMA_SOVERSION} EXPORT_NAME Plasma ) ########### install files ############### generate_export_header(KF5Plasma BASE_NAME Plasma EXPORT_FILE_NAME plasma/plasma_export.h) ecm_generate_headers(Plasma_CamelCase_HEADERS HEADER_NAMES Applet Containment ContainmentActions Corona DataContainer DataEngine DataEngineConsumer PluginLoader FrameSvg Package PackageStructure Service ServiceJob Svg Theme Plasma REQUIRED_HEADERS Plasma_HEADERS PREFIX Plasma ) set(Plasma_HEADERS ${Plasma_HEADERS} version.h ) set(PlasmaScripting_HEADERS scripting/appletscript.h scripting/dataenginescript.h scripting/scriptengine.h ) install(FILES ${Plasma_HEADERS} ${CMAKE_CURRENT_BINARY_DIR}/plasma/plasma_export.h DESTINATION ${KDE_INSTALL_INCLUDEDIR_KF5}/plasma COMPONENT Devel) install(FILES ${Plasma_CamelCase_HEADERS} DESTINATION ${KDE_INSTALL_INCLUDEDIR_KF5}/Plasma COMPONENT Devel) install(FILES ${PlasmaScripting_HEADERS} DESTINATION ${KDE_INSTALL_INCLUDEDIR_KF5}/plasma/scripting COMPONENT Devel) install(FILES data/servicetypes/plasma-applet.desktop data/servicetypes/plasma-containment.desktop data/servicetypes/plasma-containmentactions.desktop data/servicetypes/plasma-dataengine.desktop data/servicetypes/plasma-generic.desktop data/servicetypes/plasma-packagestructure.desktop data/servicetypes/plasma-scriptengine.desktop data/servicetypes/plasma-service.desktop data/servicetypes/plasma-shell.desktop data/servicetypes/plasma-lookandfeel.desktop DESTINATION ${KDE_INSTALL_KSERVICETYPES5DIR}) install(FILES data/operations/dataengineservice.operations DESTINATION ${PLASMA_DATA_INSTALL_DIR}/services) install(FILES data/operations/plasmoidservice.operations DESTINATION ${PLASMA_DATA_INSTALL_DIR}/services) install(FILES data/operations/storage.operations DESTINATION ${PLASMA_DATA_INSTALL_DIR}/services) install(TARGETS KF5Plasma EXPORT KF5PlasmaTargets ${KF5_INSTALL_TARGETS_DEFAULT_ARGS}) if(BUILD_QCH) ecm_add_qch( KF5Plasma_QCH NAME Plasma BASE_NAME KF5Plasma VERSION ${KF5_VERSION} ORG_DOMAIN org.kde SOURCES # using only public headers, to cover only public API ${Plasma_HEADERS} ${PlasmaScripting_HEADERS} Mainpage.dox MD_MAINPAGE "${CMAKE_SOURCE_DIR}/README.md" LINK_QCHS Qt5Gui_QCH KF5Service_QCH KF5Package_QCH BLANK_MACROS PLASMA_EXPORT PLASMA_DEPRECATED PLASMA_DEPRECATED_EXPORT TAGFILE_INSTALL_DESTINATION ${KDE_INSTALL_QTQCHDIR} QCH_INSTALL_DESTINATION ${KDE_INSTALL_QTQCHDIR} COMPONENT Devel ) endif() diff --git a/src/plasma/Mainpage.dox b/src/plasma/Mainpage.dox index 4ba86d7cf..df0f3178f 100644 --- a/src/plasma/Mainpage.dox +++ b/src/plasma/Mainpage.dox @@ -1,84 +1,84 @@ /** @page libplasma Plasma framework Plasma framework is the core of the Plasma desktop. It provides a framework of graphical widgets (Plasma::Applet) that can be organised into managed groupings (Plasma::Containment), such as a desktop or panel. It also provides a data abstraction layer (Plasma::DataEngine) and a corresponding service interaction layer (Plasma::Service) to make implementing widgets easier. -The Qt Quick -framework and set of KDE Frameworks +The Qt Quick +framework and set of KDE Frameworks provide the underpinning for Plasma framework. As a result, it should work anywhere that Qt does. Although Plasma framework is developed for the use of the Plasma desktop shell, currently known as Plasma 5, it is general enough to be useful in other applications. -Amarok is using it for its context +Amarok is using it for its context view, allowing for pluggable widgets to display and interact with the music collection, such as "current track" and "tag cloud" widgets. Plasma framework itself only provides a framework, and the widgets, containments, data engines are all implemented as plugins (using C++, for widgets QML is prefferd). However, the framework is designed to make implementing these plugins as easy as possible, including providing scripting support. Other important classes are: - Plasma::Corona: the canvas that containments are placed on - Plasma::View: a QWidget for displaying a containment - Plasma::Theme: provides theming support - Plasma::Package: provides descriptions of packages containing plugins for libplasma - Plasma::Svg and Plasma::FrameSvg: provides themable, cached SVGs - Plasma::AppletScript, Plasma::DataEngineScript and Plasma::ScriptEngine: provide scripting interfaces for plugins The -Plasma tutorials +Plasma tutorials on TechBase provide a good introduction to writing plugins, such as widgets and data engines, for libplasma-based applications. @authors Aaron Seigo \
Alessandro Diaferia \
Alex Merry \
Alexander Wiedenbruch \
Alexis Ménard \
André Duffeck \
Andrew Lake \
Artur de Souza \
Bertjan Broeksema \
Chani Armitage \
Davide Bettio \
Dan Meltzer \
Fredrik Höglund \
Ivan Cukic \
John Tapsell \
Jordi Polo \
Kevin Ottens \
Montel Laurent \
Marco Martin \
Matt Broadstone \
Petri Damsten \
Rafael Fernández López \
Riccardo Iaconelli \
Richard J. Moore \
Rob Scheepmaker \
Robert Knight \
Sebastian Kuegler \
Siraj Razick \
Zack Rusin \ @maintainers Marco Martin \ @licenses @lgpl */ // DOXYGEN_SET_PROJECT_NAME = Plasma // DOXYGEN_SET_RECURSIVE = YES // DOXYGEN_EXCLUDE_PATTERNS = *_p.h */private/* */tests/* // vim:ts=4:sw=4:expandtab:filetype=doxygen diff --git a/src/plasma/README b/src/plasma/README index e55cd8746..8d9f12efa 100644 --- a/src/plasma/README +++ b/src/plasma/README @@ -1,29 +1,29 @@ libplasma This directory contains the classes making up libplasma, which provides the core framework used by Plasma applications, such as the Plasma desktop shell and its components. This includes applet and extension definitions and loading, common GUI elements, data and service interaction, search system, etc. Domain specific sets of functionality, e.g. for network awareness or sensors, are not found here but as DataEngine, Service, Applet, Package, Wallpaper, ContainmentActions, Containment and other plugins. Commit Guidelines: * If your patch is not an obvious or trivial bug fix, have it peer reviewed - by another Plasma developer; http://reviewboard.kde.org is your friend :) + by another Plasma developer; https://phabricator.kde.org is your friend :) -* All code MUST follow the kdelibs coding style, as found at: - http://techbase.kde.org/Policies/Kdelibs_Coding_Style +* All code MUST follow the KDE Frameworks coding style, as found at: + https://techbase.kde.org/Policies/Frameworks_Coding_Style * All new public API MUST have apidox written before committing and must go through an API review with another Plasma developer. We have to maintain binary compatibility, remember! Unit tests are next to godliness. (Though as you can see, right now libplasma is hellbound.) -Please refer to the Plasma website (http://plasma.kde.org) and Plasma wiki -(http://techbase.kde.org/Projects/Plasma) for API documentation and design +Please refer to the Plasma website (https://plasma.kde.org) and Plasma wiki +(https://community.kde.org/Plasma) for API documentation and design documents regarding this library. diff --git a/src/plasma/private/effectwatcher.cpp b/src/plasma/private/effectwatcher.cpp index 82c1c0d0c..04da91904 100644 --- a/src/plasma/private/effectwatcher.cpp +++ b/src/plasma/private/effectwatcher.cpp @@ -1,109 +1,109 @@ /* * Copyright 2011 Marco Martin * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Library General Public License as * published by the Free Software Foundation; either version 2, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details * * You should have received a copy of the GNU Library General Public * License along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "effectwatcher_p.h" #include #include namespace Plasma { EffectWatcher::EffectWatcher(const QString &property, QObject *parent) : QObject(parent), m_property(XCB_ATOM_NONE), m_isX11(QX11Info::isPlatformX11()) { init(property); } void EffectWatcher::init(const QString &property) { if (!m_isX11) { return; } QCoreApplication::instance()->installNativeEventFilter(this); xcb_connection_t *c = QX11Info::connection(); const QByteArray propertyName = property.toLatin1(); xcb_intern_atom_cookie_t atomCookie = xcb_intern_atom_unchecked(c, false, propertyName.length(), propertyName.constData()); xcb_get_window_attributes_cookie_t winAttrCookie = xcb_get_window_attributes_unchecked(c, QX11Info::appRootWindow()); QScopedPointer atom(xcb_intern_atom_reply(c, atomCookie, nullptr)); if (!atom.isNull()) { m_property = atom->atom; } m_effectActive = isEffectActive(); QScopedPointer attrs(xcb_get_window_attributes_reply(c, winAttrCookie, nullptr)); if (!attrs.isNull()) { uint32_t events = attrs->your_event_mask | XCB_EVENT_MASK_PROPERTY_CHANGE; xcb_change_window_attributes(c, QX11Info::appRootWindow(), XCB_CW_EVENT_MASK, &events); } } bool EffectWatcher::nativeEventFilter(const QByteArray &eventType, void *message, long *result) { Q_UNUSED(result); // A faster comparison than eventType != "xcb_generic_event_t" // given that eventType can only have the following values: // "xcb_generic_event_t", "windows_generic_MSG" and "mac_generic_NSEvent" - // According to http://doc.qt.io/qt-5/qabstractnativeeventfilter.html + // According to https://doc.qt.io/qt-5/qabstractnativeeventfilter.html if (eventType[0] != 'x') { return false; } xcb_generic_event_t *event = reinterpret_cast(message); uint response_type = event->response_type & ~0x80; if (response_type != XCB_PROPERTY_NOTIFY || m_property == XCB_ATOM_NONE) { return false; } xcb_property_notify_event_t *prop_event = reinterpret_cast(event); if (prop_event->atom == m_property) { bool nowEffectActive = isEffectActive(); if (m_effectActive != nowEffectActive) { m_effectActive = nowEffectActive; emit effectChanged(m_effectActive); } } return false; } bool EffectWatcher::isEffectActive() const { if (m_property == XCB_ATOM_NONE || !m_isX11) { return false; } xcb_connection_t *c = QX11Info::connection(); xcb_list_properties_cookie_t propsCookie = xcb_list_properties_unchecked(c, QX11Info::appRootWindow()); QScopedPointer props(xcb_list_properties_reply(c, propsCookie, nullptr)); if (props.isNull()) { return false; } xcb_atom_t *atoms = xcb_list_properties_atoms(props.data()); for (int i = 0; i < props->atoms_len; ++i) { if (atoms[i] == m_property) { return true; } } return false; } } // namespace Plasma diff --git a/src/plasmaquick/private/packages.cpp b/src/plasmaquick/private/packages.cpp index 4e379775e..f0a901f2b 100644 --- a/src/plasmaquick/private/packages.cpp +++ b/src/plasmaquick/private/packages.cpp @@ -1,133 +1,133 @@ /****************************************************************************** * Copyright 2007-2009 by Aaron Seigo * * Copyright 2013 by Sebastian Kügler * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Library General Public * * License as published by the Free Software Foundation; either * * version 2 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Library General Public License for more details. * * * * You should have received a copy of the GNU Library General Public License * * along with this library; see the file COPYING.LIB. If not, write to * * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * * Boston, MA 02110-1301, USA. * *******************************************************************************/ #include "packages.h" #include #include #include #include #include "../plasma/config-plasma.h" void LookAndFeelPackage::initPackage(Plasma::Package *package) { - // http://community.kde.org/Plasma/lookAndFeelPackage# + // https://community.kde.org/Plasma/lookAndFeelPackage package->setDefaultPackageRoot(QStringLiteral(PLASMA_RELATIVE_DATA_INSTALL_DIR "/look-and-feel/")); //Defaults package->addFileDefinition("defaults", QStringLiteral("defaults"), i18n("Default settings for theme, etc.")); //Colors package->addFileDefinition("colors", QStringLiteral("colors"), i18n("Color scheme to use for applications.")); //Directories package->addDirectoryDefinition("previews", QStringLiteral("previews"), i18n("Preview Images")); package->addFileDefinition("loginmanagerpreview", QStringLiteral("previews/loginmanager.png"), i18n("Preview for the Login Manager")); package->addFileDefinition("lockscreenpreview", QStringLiteral("previews/lockscreen.png"), i18n("Preview for the Lock Screen")); package->addFileDefinition("userswitcherpreview", QStringLiteral("previews/userswitcher.png"), i18n("Preview for the Userswitcher")); package->addFileDefinition("desktopswitcherpreview", QStringLiteral("previews/desktopswitcher.png"), i18n("Preview for the Virtual Desktop Switcher")); package->addFileDefinition("splashpreview", QStringLiteral("previews/splash.png"), i18n("Preview for Splash Screen")); package->addFileDefinition("runcommandpreview", QStringLiteral("previews/runcommand.png"), i18n("Preview for KRunner")); package->addFileDefinition("windowdecorationpreview", QStringLiteral("previews/windowdecoration.png"), i18n("Preview for the Window Decorations")); package->addFileDefinition("windowswitcherpreview", QStringLiteral("previews/windowswitcher.png"), i18n("Preview for Window Switcher")); package->addDirectoryDefinition("loginmanager", QStringLiteral("loginmanager"), i18n("Login Manager")); package->addFileDefinition("loginmanagermainscript", QStringLiteral("loginmanager/LoginManager.qml"), i18n("Main Script for Login Manager")); package->addDirectoryDefinition("logout", QStringLiteral("logout"), i18n("Logout Dialog")); package->addFileDefinition("logoutmainscript", QStringLiteral("logout/Logout.qml"), i18n("Main Script for Logout Dialog")); package->addDirectoryDefinition("lockscreen", QStringLiteral("lockscreen"), i18n("Screenlocker")); package->addFileDefinition("lockscreenmainscript", QStringLiteral("lockscreen/LockScreen.qml"), i18n("Main Script for Lock Screen")); package->addDirectoryDefinition("userswitcher", QStringLiteral("userswitcher"), i18n("UI for fast user switching")); package->addFileDefinition("userswitchermainscript", QStringLiteral("userswitcher/UserSwitcher.qml"), i18n("Main Script for User Switcher")); package->addDirectoryDefinition("desktopswitcher", QStringLiteral("desktopswitcher"), i18n("Virtual Desktop Switcher")); package->addFileDefinition("desktopswitchermainscript", QStringLiteral("desktopswitcher/DesktopSwitcher.qml"), i18n("Main Script for Virtual Desktop Switcher")); package->addDirectoryDefinition("osd", QStringLiteral("osd"), i18n("On-Screen Display Notifications")); package->addFileDefinition("osdmainscript", QStringLiteral("osd/Osd.qml"), i18n("Main Script for On-Screen Display Notifications")); package->addDirectoryDefinition("splash", QStringLiteral("splash"), i18n("Splash Screen")); package->addFileDefinition("splashmainscript", QStringLiteral("splash/Splash.qml"), i18n("Main Script for Splash Screen")); package->addDirectoryDefinition("runcommand", QStringLiteral("runcommand"), i18n("KRunner UI")); package->addFileDefinition("runcommandmainscript", QStringLiteral("runcommand/RunCommand.qml"), i18n("Main Script KRunner")); package->addDirectoryDefinition("windowdecoration", QStringLiteral("windowdecoration"), i18n("Window Decoration")); package->addFileDefinition("windowdecorationmainscript", QStringLiteral("windowdecoration/WindowDecoration.qml"), i18n("Main Script for Window Decoration")); package->addDirectoryDefinition("windowswitcher", QStringLiteral("windowswitcher"), i18n("Window Switcher")); package->addFileDefinition("windowswitchermainscript", QStringLiteral("windowswitcher/WindowSwitcher.qml"), i18n("Main Script for Window Switcher")); } void QmlWallpaperPackage::initPackage(Plasma::Package *package) { package->addFileDefinition("mainscript", QStringLiteral("ui/main.qml"), i18n("Main Script File")); package->setRequired("mainscript", true); QStringList platform = KDeclarative::KDeclarative::runtimePlatform(); if (!platform.isEmpty()) { QMutableStringListIterator it(platform); while (it.hasNext()) { it.next(); it.setValue(QStringLiteral("platformcontents/") + it.value()); } platform.append(QStringLiteral("contents")); package->setContentsPrefixPaths(platform); } package->setDefaultPackageRoot(QStringLiteral(PLASMA_RELATIVE_DATA_INSTALL_DIR "/wallpapers/")); package->addDirectoryDefinition("images", QStringLiteral("images"), i18n("Images")); package->addDirectoryDefinition("theme", QStringLiteral("theme"), i18n("Themed Images")); QStringList mimetypes; mimetypes << QStringLiteral("image/svg+xml") << QStringLiteral("image/png") << QStringLiteral("image/jpeg"); package->setMimeTypes("images", mimetypes); package->setMimeTypes("theme", mimetypes); package->addDirectoryDefinition("config", QStringLiteral("config"), i18n("Configuration Definitions")); mimetypes.clear(); mimetypes << QStringLiteral("text/xml"); package->setMimeTypes("config", mimetypes); package->addDirectoryDefinition("ui", QStringLiteral("ui"), i18n("User Interface")); package->addDirectoryDefinition("data", QStringLiteral("data"), i18n("Data Files")); package->addDirectoryDefinition("scripts", QStringLiteral("code"), i18n("Executable Scripts")); mimetypes.clear(); mimetypes << QStringLiteral("text/plain"); package->setMimeTypes("scripts", mimetypes); package->addDirectoryDefinition("translations", QStringLiteral("locale"), i18n("Translations")); } void LayoutTemplatePackage::initPackage(Plasma::Package *package) { package->setServicePrefix(QStringLiteral("plasma-layout-template")); package->setDefaultPackageRoot(QStringLiteral(PLASMA_RELATIVE_DATA_INSTALL_DIR "/layout-templates")); package->addFileDefinition("mainscript", QStringLiteral("layout.js"), i18n("Main Script File")); package->setRequired("mainscript", true); } diff --git a/src/scriptengines/qml/plasmoid/containmentinterface.cpp b/src/scriptengines/qml/plasmoid/containmentinterface.cpp index 9cde92105..24f6a702d 100644 --- a/src/scriptengines/qml/plasmoid/containmentinterface.cpp +++ b/src/scriptengines/qml/plasmoid/containmentinterface.cpp @@ -1,1226 +1,1226 @@ /* * Copyright 2008 Chani Armitage * Copyright 2008, 2009 Aaron Seigo * Copyright 2010 Marco Martin * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Library General Public License as * published by the Free Software Foundation; either version 2, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details * * You should have received a copy of the GNU Library General Public * License along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "containmentinterface.h" #include "wallpaperinterface.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "kdeclarative/configpropertymap.h" #include ContainmentInterface::ContainmentInterface(DeclarativeAppletScript *parent, const QVariantList &args) : AppletInterface(parent, args), m_wallpaperInterface(nullptr), m_activityInfo(nullptr), m_wheelDelta(0), m_editMode(false) { m_containment = static_cast(appletScript()->applet()->containment()); setAcceptedMouseButtons(Qt::AllButtons); connect(m_containment.data(), &Plasma::Containment::appletRemoved, this, &ContainmentInterface::appletRemovedForward); connect(m_containment.data(), &Plasma::Containment::appletAdded, this, &ContainmentInterface::appletAddedForward); if (!m_appletInterfaces.isEmpty()) { emit appletsChanged(); } } void ContainmentInterface::init() { if (qmlObject()->rootObject()) { return; } m_activityInfo = new KActivities::Info(m_containment->activity(), this); connect(m_activityInfo, &KActivities::Info::nameChanged, this, &ContainmentInterface::activityNameChanged); emit activityNameChanged(); AppletInterface::init(); //Create the ToolBox if (m_containment) { KConfigGroup defaults; if (m_containment->containmentType() == Plasma::Types::DesktopContainment) { defaults = KConfigGroup(KSharedConfig::openConfig(m_containment->corona()->kPackage().filePath("defaults")), "Desktop"); } else if (m_containment->containmentType() == Plasma::Types::PanelContainment) { defaults = KConfigGroup(KSharedConfig::openConfig(m_containment->corona()->kPackage().filePath("defaults")), "Panel"); } if (defaults.isValid()) { KPackage::Package pkg = KPackage::PackageLoader::self()->loadPackage(QStringLiteral("KPackage/GenericQML")); pkg.setDefaultPackageRoot(QStringLiteral("plasma/packages")); if (defaults.isValid()) { pkg.setPath(defaults.readEntry("ToolBox", "org.kde.desktoptoolbox")); } else { pkg.setPath(QStringLiteral("org.kde.desktoptoolbox")); } PlasmaQuick::PackageUrlInterceptor *interceptor = dynamic_cast(qmlObject()->engine()->urlInterceptor()); if (interceptor) { interceptor->addAllowedPath(pkg.path()); } if (pkg.metadata().isValid() && !pkg.metadata().isHidden()) { if (pkg.isValid()) { QObject *containmentGraphicObject = qmlObject()->rootObject(); QVariantHash toolboxProperties; toolboxProperties[QStringLiteral("parent")] = QVariant::fromValue(this); QObject *toolBoxObject = qmlObject()->createObjectFromSource(pkg.fileUrl("mainscript"), nullptr, toolboxProperties); if (toolBoxObject && containmentGraphicObject) { containmentGraphicObject->setProperty("toolBox", QVariant::fromValue(toolBoxObject)); } } else { qWarning() << "Could not load toolbox package." << pkg.path(); } } else { qWarning() << "Toolbox not loading, toolbox package is either invalid or disabled."; } } } //set parent, both as object hierarchically and visually //do this only for containments, applets will do it in compactrepresentationcheck if (qmlObject()->rootObject()) { qmlObject()->rootObject()->setProperty("parent", QVariant::fromValue(this)); //set anchors QQmlExpression expr(qmlObject()->engine()->rootContext(), qmlObject()->rootObject(), QStringLiteral("parent")); QQmlProperty prop(qmlObject()->rootObject(), QStringLiteral("anchors.fill")); prop.write(expr.evaluate()); } if (!m_containment->wallpaper().isEmpty()) { loadWallpaper(); } connect(m_containment.data(), &Plasma::Containment::activityChanged, this, &ContainmentInterface::activityChanged); connect(m_containment.data(), &Plasma::Containment::activityChanged, [ = ]() { delete m_activityInfo; m_activityInfo = new KActivities::Info(m_containment->activity(), this); connect(m_activityInfo, &KActivities::Info::nameChanged, this, &ContainmentInterface::activityNameChanged); emit activityNameChanged(); }); connect(m_containment.data(), &Plasma::Containment::wallpaperChanged, this, &ContainmentInterface::loadWallpaper); connect(m_containment.data(), &Plasma::Containment::containmentTypeChanged, this, &ContainmentInterface::containmentTypeChanged); connect(m_containment.data()->actions(), &KActionCollection::inserted, this, &ContainmentInterface::actionsChanged); connect(m_containment.data()->actions(), &KActionCollection::removed, this, &ContainmentInterface::actionsChanged); if (m_containment->corona()) { connect(m_containment->corona(), &Plasma::Corona::availableScreenRegionChanged, this, &ContainmentInterface::availableScreenRegionChanged); connect(m_containment->corona(), &Plasma::Corona::availableScreenRectChanged, this, &ContainmentInterface::availableScreenRectChanged); } } QList ContainmentInterface::applets() { return m_appletInterfaces; } Plasma::Types::ContainmentType ContainmentInterface::containmentType() const { return appletScript()->containmentType(); } void ContainmentInterface::setContainmentType(Plasma::Types::ContainmentType type) { appletScript()->setContainmentType(type); } Plasma::Applet *ContainmentInterface::createApplet(const QString &plugin, const QVariantList &args, const QPoint &pos) { return createApplet(plugin, args, QRectF(pos, QSize())); } Plasma::Applet *ContainmentInterface::createApplet(const QString &plugin, const QVariantList &args, const QRectF &geom) { //HACK //This is necessary to delay the appletAdded signal (of containmentInterface) AFTER the applet graphics object has been created blockSignals(true); Plasma::Applet *applet = m_containment->createApplet(plugin, args); if (applet) { QQuickItem *appletGraphicObject = applet->property("_plasma_graphicObject").value(); //invalid applet? if (!appletGraphicObject) { blockSignals(false); return applet; } if (geom.width() > 0 && geom.height() > 0) { appletGraphicObject->setSize(geom.size()); } blockSignals(false); emit appletAdded(appletGraphicObject, geom.x(), geom.y()); emit appletsChanged(); } else { blockSignals(false); } return applet; } void ContainmentInterface::setAppletArgs(Plasma::Applet *applet, const QString &mimetype, const QString &data) { if (!applet) { return; } AppletInterface *appletInterface = applet->property("_plasma_graphicObject").value(); if (appletInterface) { emit appletInterface->externalData(mimetype, data); } } QObject *ContainmentInterface::containmentAt(int x, int y) { QObject *desktop = nullptr; foreach (Plasma::Containment *c, m_containment->corona()->containments()) { ContainmentInterface *contInterface = c->property("_plasma_graphicObject").value(); if (contInterface && contInterface->isVisible()) { QWindow *w = contInterface->window(); if (w && w->geometry().contains(QPoint(window()->x(), window()->y()) + QPoint(x, y))) { if (c->containmentType() == Plasma::Types::CustomEmbeddedContainment) { continue; } if (c->containmentType() == Plasma::Types::DesktopContainment) { desktop = contInterface; } else { return contInterface; } } } } return desktop; } void ContainmentInterface::addApplet(AppletInterface *applet, int x, int y) { if (!applet || applet->applet()->containment() == m_containment) { return; } blockSignals(true); m_containment->addApplet(applet->applet()); blockSignals(false); emit appletAdded(applet, x, y); } QPointF ContainmentInterface::mapFromApplet(AppletInterface *applet, int x, int y) { if (!applet->window() || !window()) { return QPointF(); } //x,y in absolute screen coordinates of current view QPointF pos = applet->mapToScene(QPointF(x, y)); pos = QPointF(pos + applet->window()->geometry().topLeft()); //return the coordinate in the relative view's coords return pos - window()->geometry().topLeft(); } QPointF ContainmentInterface::mapToApplet(AppletInterface *applet, int x, int y) { if (!applet->window() || !window()) { return QPointF(); } //x,y in absolute screen coordinates of current view QPointF pos(x, y); pos = QPointF(pos + window()->geometry().topLeft()); //the coordinate in the relative view's coords pos = pos - applet->window()->geometry().topLeft(); //make it relative to applet coords return pos - applet->mapToScene(QPointF(0, 0)); } QPointF ContainmentInterface::adjustToAvailableScreenRegion(int x, int y, int w, int h) const { QRegion reg; int screenId = screen(); if (screenId > -1 && m_containment->corona()) { reg = m_containment->corona()->availableScreenRegion(screenId); } if (!reg.isEmpty()) { //make it relative QRect geometry = m_containment->corona()->screenGeometry(screenId); reg.translate(- geometry.topLeft()); } else { reg = QRect(0, 0, width(), height()); } const QRect rect(qBound(reg.boundingRect().left(), x, reg.boundingRect().right() + 1 - w), qBound(reg.boundingRect().top(), y, reg.boundingRect().bottom() + 1 - h), w, h); const QRectF ar = availableScreenRect(); QRect tempRect(rect); // in the case we are in the topleft quadrant // * see if the passed rect is completely in the region, if yes, return // * otherwise, try to move it horizontally to the screenrect x // * if now fits, return // * if fail, move vertically // * as last resort, move horizontally and vertically // top left corner if (rect.center().x() <= ar.center().x() && rect.center().y() <= ar.center().y()) { //QRegion::contains doesn't do what it would suggest, so do reg.intersected(rect) != rect instead if (reg.intersected(rect) != rect) { tempRect = QRect(qMax(rect.left(), (int)ar.left()), rect.top(), w, h); if (reg.intersected(tempRect) == tempRect) { return tempRect.topLeft(); } tempRect = QRect(rect.left(), qMax(rect.top(), (int)ar.top()), w, h); if (reg.intersected(tempRect) == tempRect) { return tempRect.topLeft(); } tempRect = QRect(qMax(rect.left(), (int)ar.left()), qMax(rect.top(), (int)ar.top()), w, h); return tempRect.topLeft(); } else { return rect.topLeft(); } //bottom left corner } else if (rect.center().x() <= ar.center().x() && rect.center().y() > ar.center().y()) { if (reg.intersected(rect) != rect) { tempRect = QRect(qMax(rect.left(), (int)ar.left()), rect.top(), w, h); if (reg.intersected(tempRect) == tempRect) { return tempRect.topLeft(); } tempRect = QRect(rect.left(), qMin(rect.top(), (int)(ar.bottom() + 1 - h)), w, h); if (reg.intersected(tempRect) == tempRect) { return tempRect.topLeft(); } tempRect = QRect(qMax(rect.left(), (int)ar.left()), qMin(rect.top(), (int)(ar.bottom() + 1 - h)), w, h); return tempRect.topLeft(); } else { return rect.topLeft(); } //top right corner } else if (rect.center().x() > ar.center().x() && rect.center().y() <= ar.center().y()) { if (reg.intersected(rect) != rect) { tempRect = QRect(qMin(rect.left(), (int)(ar.right() + 1 - w)), rect.top(), w, h); if (reg.intersected(tempRect) == tempRect) { return tempRect.topLeft(); } tempRect = QRect(rect.left(), qMax(rect.top(), (int)ar.top()), w, h); if (reg.intersected(tempRect) == tempRect) { return tempRect.topLeft(); } tempRect = QRect(qMin(rect.left(), (int)(ar.right() + 1 - w)), qMax(rect.top(), (int)ar.top()), w, h); return tempRect.topLeft(); } else { return rect.topLeft(); } //bottom right corner } else if (rect.center().x() > ar.center().x() && rect.center().y() > ar.center().y()) { if (reg.intersected(rect) != rect) { tempRect = QRect(qMin(rect.left(), (int)(ar.right() + 1 - w)), rect.top(), w, h); if (reg.intersected(tempRect) == tempRect) { return tempRect.topLeft(); } tempRect = QRect(rect.left(), qMin(rect.top(), (int)(ar.bottom() + 1 - h)), w, h); if (reg.intersected(tempRect) == tempRect) { return tempRect.topLeft(); } tempRect = QRect(qMin(rect.left(), (int)(ar.right() + 1 - w)), qMin(rect.top(), (int)(ar.bottom() + 1 - h)), w, h); return tempRect.topLeft(); } else { return rect.topLeft(); } } return rect.topLeft(); } bool ContainmentInterface::isEditMode() const { return m_editMode; } void ContainmentInterface::setEditMode(bool edit) { if (edit == m_editMode) { return; } if (m_containment->immutability() != Plasma::Types::Mutable) { return; } m_editMode = edit; emit editModeChanged(); } void ContainmentInterface::processMimeData(QObject *mimeDataProxy, int x, int y, KIO::DropJob *dropJob) { QMimeData* mime = qobject_cast(mimeDataProxy); if (mime) { processMimeData(mime, x, y, dropJob); } else { processMimeData(mimeDataProxy->property("mimeData").value(), x, y, dropJob); } } void ContainmentInterface::processMimeData(QMimeData *mimeData, int x, int y, KIO::DropJob *dropJob) { if (!mimeData) { return; } //const QMimeData *mimeData = data; qDebug() << "Arrived mimeData" << mimeData->urls() << mimeData->formats() << "at" << x << ", " << y; // Catch drops from a Task Manager and convert to usable URL. if (!mimeData->hasUrls() && mimeData->hasFormat(QStringLiteral("text/x-orgkdeplasmataskmanager_taskurl"))) { QList urls = {QUrl(QString::fromUtf8(mimeData->data(QStringLiteral("text/x-orgkdeplasmataskmanager_taskurl"))))}; mimeData->setUrls(urls); } if (mimeData->hasFormat(QStringLiteral("text/x-plasmoidservicename"))) { QString data = QString::fromUtf8( mimeData->data(QStringLiteral("text/x-plasmoidservicename")) ); const QStringList appletNames = data.split(QLatin1Char('\n'), QString::SkipEmptyParts); foreach (const QString &appletName, appletNames) { qDebug() << "adding" << appletName; metaObject()->invokeMethod(this, "createApplet", Qt::QueuedConnection, Q_ARG(QString, appletName), Q_ARG(QVariantList, QVariantList()), Q_ARG(QRectF, QRectF(x, y, -1, -1))); } } else if (mimeData->hasUrls()) { //TODO: collect the mimetypes of available script engines and offer // to create widgets out of the matching URLs, if any const QList urls = KUrlMimeData::urlsFromMimeData(mimeData); foreach (const QUrl &url, urls) { QMimeDatabase db; const QMimeType &mime = db.mimeTypeForUrl(url); QString mimeName = mime.name(); QVariantList args; args << url.url(); qDebug() << "can decode" << mimeName << args; // It may be a directory or a file, let's stat KIO::JobFlags flags = KIO::HideProgressInfo; KIO::MimetypeJob *job = KIO::mimetype(url, flags); m_dropPoints[job] = QPoint(x, y); QObject::connect(job, SIGNAL(result(KJob*)), this, SLOT(dropJobResult(KJob*))); QObject::connect(job, SIGNAL(mimetype(KIO::Job*,QString)), this, SLOT(mimeTypeRetrieved(KIO::Job*,QString))); if (dropJob) { m_dropJobs[job] = dropJob; } else { QMenu *choices = new QMenu(i18n("Content dropped")); if (choices->winId()) { choices->windowHandle()->setTransientParent(window()); } choices->addAction(QIcon::fromTheme(QStringLiteral("process-working")), i18n("Fetching file type...")); choices->popup(window() ? window()->mapToGlobal(QPoint(x, y)) : QPoint(x, y)); m_dropMenus[job] = choices; } } } else { QStringList formats = mimeData->formats(); QHash seenPlugins; QHash pluginFormats; foreach (const QString &format, formats) { const auto plugins = Plasma::PluginLoader::self()->listAppletMetaDataForMimeType(format); foreach (const auto &plugin, plugins) { if (seenPlugins.contains(plugin.pluginId())) { continue; } seenPlugins.insert(plugin.pluginId(), plugin); pluginFormats.insert(plugin.pluginId(), format); } } //qDebug() << "Mimetype ..." << formats << seenPlugins.keys() << pluginFormats.values(); QString selectedPlugin; if (seenPlugins.isEmpty()) { // do nothing //directly create if only one offer only if the containment didn't pass an existing plugin } else if (seenPlugins.count() == 1) { selectedPlugin = seenPlugins.constBegin().key(); Plasma::Applet *applet = createApplet(selectedPlugin, QVariantList(), QRect(x, y, -1, -1)); setAppletArgs(applet, pluginFormats[selectedPlugin], QString::fromUtf8(mimeData->data(pluginFormats[selectedPlugin]))); } else { QMenu *choices = nullptr; if (!dropJob) { choices = new QMenu(); if (choices->winId()) { choices->windowHandle()->setTransientParent(window()); } } QList extraActions; QHash actionsToPlugins; foreach (const auto &info, seenPlugins) { QAction *action; if (!info.iconName().isEmpty()) { action = new QAction(QIcon::fromTheme(info.iconName()), info.name(), nullptr); } else { action = new QAction(info.name(), nullptr); } extraActions << action; if (choices) { choices->addAction(action); } action->setData(info.pluginId()); connect(action, &QAction::triggered, this, [this, x, y, mimeData, action]() { const QString selectedPlugin = action->data().toString(); Plasma::Applet *applet = createApplet(selectedPlugin, QVariantList(), QRect(x, y, -1, -1)); setAppletArgs(applet, selectedPlugin, QString::fromUtf8(mimeData->data(selectedPlugin))); }); actionsToPlugins.insert(action, info.pluginId()); } //if the menu was created by ourselves, delete it if (choices) { QAction *choice = choices->exec(window() ? window()->mapToGlobal(QPoint(x, y)) : QPoint(x, y)); delete choices; } else { Q_ASSERT(dropJob); dropJob->setApplicationActions(extraActions); } } } } void ContainmentInterface::clearDataForMimeJob(KIO::Job *job) { QObject::disconnect(job, nullptr, this, nullptr); m_dropPoints.remove(job); QMenu *choices = m_dropMenus.take(job); m_dropJobs.remove(job); job->kill(); } void ContainmentInterface::dropJobResult(KJob *job) { if (job->error()) { qDebug() << "ERROR" << job->error() << ' ' << job->errorString(); } } void ContainmentInterface::mimeTypeRetrieved(KIO::Job *job, const QString &mimetype) { qDebug() << "Mimetype Job returns." << mimetype; KIO::TransferJob *tjob = dynamic_cast(job); if (!tjob) { qDebug() << "job should be a TransferJob, but isn't"; clearDataForMimeJob(job); return; } QList appletList = Plasma::PluginLoader::self()->listAppletMetaDataForUrl(tjob->url()); if (mimetype.isEmpty() && appletList.isEmpty()) { clearDataForMimeJob(job); qDebug() << "No applets found matching the url (" << tjob->url() << ") or the mimetype (" << mimetype << ")"; return; } else { QPoint posi; // will be overwritten with the event's position if (m_dropPoints.contains(tjob)) { posi = m_dropPoints.value(tjob); qDebug() << "Received a suitable dropEvent at" << posi; } else { qDebug() << "Bailing out. Cannot find associated dropEvent related to the TransferJob"; clearDataForMimeJob(job); return; } QMenu *choices = m_dropMenus.value(tjob); QList dropActions; KIO::DropJob *dropJob = m_dropJobs.value(tjob); if (!choices && !dropJob) { qDebug() << "Bailing out. No QMenu or drop job found for this job."; clearDataForMimeJob(job); return; } qDebug() << "Creating menu for:" << mimetype << posi; appletList << Plasma::PluginLoader::self()->listAppletMetaDataForMimeType(mimetype); QList wallpaperList; if (m_containment->containmentType() != Plasma::Types::PanelContainment && m_containment->containmentType() != Plasma::Types::CustomPanelContainment) { if (m_wallpaperInterface && m_wallpaperInterface->supportsMimetype(mimetype)) { wallpaperList << m_wallpaperInterface->kPackage().metadata(); } else { wallpaperList = WallpaperInterface::listWallpaperMetadataForMimetype(mimetype); } } const bool isPlasmaPackage = (mimetype == QLatin1String("application/x-plasma")); if (!appletList.isEmpty() || !wallpaperList.isEmpty() || isPlasmaPackage) { QAction *installPlasmaPackageAction = nullptr; if (isPlasmaPackage) { if (choices) { choices->addSection(i18n("Plasma Package")); installPlasmaPackageAction = choices->addAction(QIcon::fromTheme(QStringLiteral("application-x-plasma")), i18n("Install")); } else { QAction *action = new QAction(i18n("Plasma Package"), nullptr); action->setSeparator(true); dropActions << action; installPlasmaPackageAction = new QAction(QIcon::fromTheme(QStringLiteral("application-x-plasma")), i18n("Install"), nullptr); Q_ASSERT(dropJob); dropActions << installPlasmaPackageAction; dropJob->setApplicationActions(dropActions); } const QString &packagePath = tjob->url().toLocalFile(); connect(installPlasmaPackageAction, &QAction::triggered, this, [this, posi, packagePath]() { using namespace KPackage; PackageStructure *structure = PackageLoader::self()->loadPackageStructure(QStringLiteral("Plasma/Applet")); Package package(structure); KJob *installJob = package.update(packagePath); connect(installJob, &KJob::result, this, [this, packagePath, structure, posi](KJob *job) { auto fail = [job](const QString &text) { KNotification::event(QStringLiteral("plasmoidInstallationFailed"), i18n("Package Installation Failed"), text, QStringLiteral("dialog-error"), nullptr, KNotification::CloseOnTimeout, QStringLiteral("plasma_workspace")); }; // if the applet is already installed, just add it to the containment if (job->error() != KJob::NoError && job->error() != Package::PackageAlreadyInstalledError && job->error() != Package::NewerVersionAlreadyInstalledError) { fail(job->errorText()); return; } using namespace KPackage; Package package(structure); // TODO how can I get the path of the actual package? package.setPath(packagePath); // TODO how can I get the plugin id? Package::metadata() is deprecated if (!package.isValid() || !package.metadata().isValid()) { fail(i18n("The package you just dropped is invalid.")); return; } createApplet(package.metadata().pluginId(), QVariantList(), QRect(posi, QSize(-1,-1))); }); }); } if (choices) { choices->addSection(i18n("Widgets")); } else { QAction *action = new QAction(i18n("Widgets"), nullptr); action->setSeparator(true); dropActions << action; } foreach (const auto &info, appletList) { const QString actionText = i18nc("Add widget", "Add %1", info.name()); QAction *action = new QAction(actionText, nullptr); if (!info.iconName().isEmpty()) { action->setIcon(QIcon::fromTheme(info.iconName())); } if (choices) { choices->addAction(action); } dropActions << action; action->setData(info.pluginId()); const QUrl url = tjob->url(); connect(action, &QAction::triggered, this, [this, action, posi, mimetype, url]() { Plasma::Applet *applet = createApplet(action->data().toString(), QVariantList(), QRect(posi, QSize(-1,-1))); setAppletArgs(applet, mimetype, url.toString()); }); } { QAction *action = new QAction(i18nc("Add icon widget", "Add Icon"), nullptr); if (choices) { choices->addAction(action); } dropActions << action; action->setData(QStringLiteral("org.kde.plasma.icon")); const QUrl url = tjob->url(); connect(action, &QAction::triggered, this, [this, action, posi, mimetype, url](){ Plasma::Applet *applet = createApplet(action->data().toString(), QVariantList(), QRect(posi, QSize(-1,-1))); setAppletArgs(applet, mimetype, url.toString()); }); } QHash actionsToWallpapers; if (!wallpaperList.isEmpty()) { if (choices) { choices->addSection(i18n("Wallpaper")); } else { QAction *action = new QAction(i18n("Wallpaper"), nullptr); action->setSeparator(true); dropActions << action; } QMap sorted; foreach (const auto &info, appletList) { sorted.insert(info.name(), info); } foreach (const KPluginMetaData &info, wallpaperList) { const QString actionText = i18nc("Set wallpaper", "Set %1", info.name()); QAction *action = new QAction(actionText, nullptr); if (!info.iconName().isEmpty()) { action->setIcon(QIcon::fromTheme(info.iconName())); } if (choices) { choices->addAction(action); } dropActions << action; actionsToWallpapers.insert(action, info.pluginId()); const QUrl url = tjob->url(); connect(action, &QAction::triggered, this, [this, url]() { //set wallpapery stuff if (m_wallpaperInterface && url.isValid()) { m_wallpaperInterface->setUrl(url); } }); } } } else { //case in which we created the menu ourselves, just the "fetching type entry, directly create the icon applet if (choices) { Plasma::Applet *applet = createApplet(QStringLiteral("org.kde.plasma.icon"), QVariantList(), QRect(posi, QSize(-1,-1))); setAppletArgs(applet, mimetype, tjob->url().toString()); } else { QAction *action; if (choices) { choices->addSection(i18n("Widgets")); action = choices->addAction(i18nc("Add icon widget", "Add Icon")); } else { QAction *sep = new QAction(i18n("Widgets"), nullptr); sep->setSeparator(true); dropActions << sep; // we can at least create an icon as a link to the URL action = new QAction(i18nc("Add icon widget", "Add Icon"), nullptr); dropActions << action; } const QUrl url = tjob->url(); connect(action, &QAction::triggered, this, [this, posi, mimetype, url](){ Plasma::Applet *applet = createApplet(QStringLiteral("org.kde.plasma.icon"), QVariantList(), QRect(posi, QSize(-1,-1))); setAppletArgs(applet, mimetype, url.toString()); }); } } if (choices) { // HACK If the QMenu becomes empty at any point after the "determining mimetype" // popup was shown, it self-destructs, does not matter if we call clear() or remove // the action manually, hence we remove the aforementioned item after we populated the menu choices->removeAction(choices->actions().at(0)); choices->exec(); } else { dropJob->setApplicationActions(dropActions); } clearDataForMimeJob(tjob); } } void ContainmentInterface::appletAddedForward(Plasma::Applet *applet) { if (!applet) { return; } AppletInterface *appletGraphicObject = applet->property("_plasma_graphicObject").value(); AppletInterface *contGraphicObject = m_containment->property("_plasma_graphicObject").value(); // qDebug() << "Applet added on containment:" << m_containment->title() << contGraphicObject // << "Applet: " << applet << applet->title() << appletGraphicObject; //applets can not have a graphic object if they don't have a script engine loaded //this can happen if they were loaded with an invalid metadata if (!appletGraphicObject) { return; } if (contGraphicObject) { appletGraphicObject->setProperty("visible", false); appletGraphicObject->setProperty("parent", QVariant::fromValue(contGraphicObject)); } m_appletInterfaces << appletGraphicObject; connect(appletGraphicObject, &QObject::destroyed, this, [this](QObject *obj) { m_appletInterfaces.removeAll(obj); }); emit appletAdded(appletGraphicObject, appletGraphicObject->m_positionBeforeRemoval.x(), appletGraphicObject->m_positionBeforeRemoval.y()); emit appletsChanged(); } void ContainmentInterface::appletRemovedForward(Plasma::Applet *applet) { AppletInterface *appletGraphicObject = applet->property("_plasma_graphicObject").value(); if (appletGraphicObject) { m_appletInterfaces.removeAll(appletGraphicObject); appletGraphicObject->m_positionBeforeRemoval = appletGraphicObject->mapToItem(this, QPointF()); } emit appletRemoved(appletGraphicObject); emit appletsChanged(); } void ContainmentInterface::loadWallpaper() { if (m_containment->containmentType() != Plasma::Types::DesktopContainment && m_containment->containmentType() != Plasma::Types::CustomContainment) { return; } if (!m_containment->wallpaper().isEmpty()) { delete m_wallpaperInterface; m_wallpaperInterface = new WallpaperInterface(this); m_wallpaperInterface->setZ(-1000); //Qml seems happier if the parent gets set in this way m_wallpaperInterface->setProperty("parent", QVariant::fromValue(this)); //set anchors QQmlExpression expr(qmlObject()->engine()->rootContext(), m_wallpaperInterface, QStringLiteral("parent")); QQmlProperty prop(m_wallpaperInterface, QStringLiteral("anchors.fill")); prop.write(expr.evaluate()); m_containment->setProperty("wallpaperGraphicsObject", QVariant::fromValue(m_wallpaperInterface)); } else { if (m_wallpaperInterface) { m_wallpaperInterface->deleteLater(); m_wallpaperInterface = nullptr; } } } QString ContainmentInterface::activity() const { return m_containment->activity(); } QString ContainmentInterface::activityName() const { if (!m_activityInfo) { return QString(); } return m_activityInfo->name(); } QList ContainmentInterface::actions() const { //FIXME: giving directly a QList crashes QStringList actionOrder; actionOrder << QStringLiteral("add widgets") << QStringLiteral("manage activities") << QStringLiteral("remove") << QStringLiteral("lock widgets") << QStringLiteral("run associated application") << QStringLiteral("configure"); QHash orderedActions; //use a multimap to sort by action type QMultiMap actions; int i = 0; foreach (QAction *a, m_containment->actions()->actions()) { if (!actionOrder.contains(a->objectName())) { //FIXME QML visualizations don't support menus for now, *and* there is no way to //distinguish them on QML side if (!a->menu()) { actions.insert(a->data().toInt()*100 + i, a); ++i; } } else { orderedActions[a->objectName()] = a; } } i = 0; foreach (QAction *a, m_containment->corona()->actions()->actions()) { if (a->objectName() == QStringLiteral("lock widgets") || a->menu()) { //It is up to the Containment to decide if the user is allowed or not //to lock/unluck the widgets, so corona should not add one when there is none //(user is not allow) and it shouldn't add another one when there is already //one continue; } if (!actionOrder.contains(a->objectName())) { actions.insert(a->data().toInt()*100 + i, a); } else { orderedActions[a->objectName()] = a; } ++i; } QList actionList = actions.values(); foreach (const QString &name, actionOrder) { QAction *a = orderedActions.value(name); if (a && !a->menu()) { actionList << a; } ++i; } return actionList; } //PROTECTED-------------------- void ContainmentInterface::mouseReleaseEvent(QMouseEvent *event) { event->setAccepted(m_containment->containmentActions().contains(Plasma::ContainmentActions::eventToString(event))); } void ContainmentInterface::mousePressEvent(QMouseEvent *event) { //even if the menu is executed synchronously, other events may be processed //by the qml incubator when plasma is loading, so we need to guard there if (m_contextMenu) { m_contextMenu.data()->close(); return; } const QString trigger = Plasma::ContainmentActions::eventToString(event); Plasma::ContainmentActions *plugin = m_containment->containmentActions().value(trigger); if (!plugin || plugin->contextualActions().isEmpty()) { event->setAccepted(false); return; } //the plugin can be a single action or a context menu //Don't have an action list? execute as single action //and set the event position as action data if (plugin->contextualActions().length() == 1) { QAction *action = plugin->contextualActions().at(0); action->setData(event->pos()); action->trigger(); event->accept(); return; } //FIXME: very inefficient appletAt() implementation Plasma::Applet *applet = nullptr; foreach (QObject *appletObject, m_appletInterfaces) { if (AppletInterface *ai = qobject_cast(appletObject)) { if (ai->isVisible() && ai->contains(ai->mapFromItem(this, event->posF()))) { applet = ai->applet(); break; } else { ai = nullptr; } } } //qDebug() << "Invoking menu for applet" << applet; QMenu *desktopMenu = new QMenu; //this is a workaround where Qt now creates the menu widget //in .exec before oxygen can polish it and set the following attribute desktopMenu->setAttribute(Qt::WA_TranslucentBackground); //end workaround if (desktopMenu->winId()) { desktopMenu->windowHandle()->setTransientParent(window()); } desktopMenu->setAttribute(Qt::WA_DeleteOnClose); m_contextMenu = desktopMenu; emit m_containment->contextualActionsAboutToShow(); if (applet) { emit applet->contextualActionsAboutToShow(); addAppletActions(desktopMenu, applet, event); } else { addContainmentActions(desktopMenu, event); } //this is a workaround where Qt will fail to realize a mouse has been released // this happens if a window which does not accept focus spawns a new window that takes focus and X grab // whilst the mouse is depressed // https://bugreports.qt.io/browse/QTBUG-59044 // this causes the next click to go missing //by releasing manually we avoid that situation auto ungrabMouseHack = [this]() { if (window() && window()->mouseGrabberItem()) { window()->mouseGrabberItem()->ungrabMouse(); } }; //pre 5.8.0 QQuickWindow code is "item->grabMouse(); sendEvent(item, mouseEvent)" //post 5.8.0 QQuickWindow code is sendEvent(item, mouseEvent); item->grabMouse() if (QVersionNumber::fromString(QLatin1String(qVersion())) > QVersionNumber(5, 8, 0)) { QTimer::singleShot(0, this, ungrabMouseHack); } else { ungrabMouseHack(); } //end workaround QPoint pos = event->globalPos(); if (window() && m_containment->containmentType() == Plasma::Types::PanelContainment) { desktopMenu->adjustSize(); if (QScreen *screen = window()->screen()) { const QRect geo = screen->availableGeometry(); pos = QPoint(qBound(geo.left(), pos.x(), geo.right() + 1 - desktopMenu->width()), qBound(geo.top(), pos.y(), geo.bottom() + 1 - desktopMenu->height())); } } if (desktopMenu->isEmpty()) { delete desktopMenu; event->accept(); return; } // Bug 344205 keep panel visible while menu is open const auto oldStatus = m_containment->status(); m_containment->setStatus(Plasma::Types::RequiresAttentionStatus); connect(desktopMenu, &QMenu::aboutToHide, m_containment, [this, oldStatus] { m_containment->setStatus(oldStatus); }); KAcceleratorManager::manage(desktopMenu); desktopMenu->popup(pos); event->setAccepted(true); } void ContainmentInterface::wheelEvent(QWheelEvent *event) { const QString trigger = Plasma::ContainmentActions::eventToString(event); Plasma::ContainmentActions *plugin = m_containment->containmentActions().value(trigger); if (!plugin) { event->setAccepted(false); return; } m_wheelDelta += event->delta(); // Angle delta 120 for common "one click" - // See: http://qt-project.org/doc/qt-5/qml-qtquick-wheelevent.html#angleDelta-prop + // See: https://doc.qt.io/qt-5/qml-qtquick-wheelevent.html#angleDelta-prop while (m_wheelDelta >= 120) { m_wheelDelta -= 120; plugin->performPreviousAction(); } while (m_wheelDelta <= -120) { m_wheelDelta += 120; plugin->performNextAction(); } } void ContainmentInterface::keyPressEvent(QKeyEvent *event) { if (event->key() == Qt::Key_Menu) { QMouseEvent me(QEvent::MouseButtonRelease, QPoint(), Qt::RightButton, Qt::RightButton, event->modifiers()); mousePressEvent(&me); event->accept(); } AppletInterface::keyPressEvent(event); } void ContainmentInterface::addAppletActions(QMenu *desktopMenu, Plasma::Applet *applet, QEvent *event) { foreach (QAction *action, applet->contextualActions()) { if (action) { desktopMenu->addAction(action); } } if (!applet->failedToLaunch()) { QAction *runAssociatedApplication = applet->actions()->action(QStringLiteral("run associated application")); if (runAssociatedApplication && runAssociatedApplication->isEnabled()) { desktopMenu->addAction(runAssociatedApplication); } QAction *configureApplet = applet->actions()->action(QStringLiteral("configure")); if (configureApplet && configureApplet->isEnabled()) { desktopMenu->addAction(configureApplet); } QAction *appletAlternatives = applet->actions()->action(QStringLiteral("alternatives")); if (appletAlternatives && appletAlternatives->isEnabled()) { desktopMenu->addAction(appletAlternatives); } } QMenu *containmentMenu = new QMenu(i18nc("%1 is the name of the containment", "%1 Options", m_containment->title()), desktopMenu); if (m_containment->containmentType() != Plasma::Types::DesktopContainment) { addContainmentActions(containmentMenu, event); } if (!containmentMenu->isEmpty()) { int enabled = 0; //count number of real actions QListIterator actionsIt(containmentMenu->actions()); while (enabled < 3 && actionsIt.hasNext()) { QAction *action = actionsIt.next(); if (action->isVisible() && !action->isSeparator()) { ++enabled; } } if (enabled) { //if there is only one, don't create a submenu if (enabled < 2) { foreach (QAction *action, containmentMenu->actions()) { if (action->isVisible() && !action->isSeparator()) { desktopMenu->addAction(action); } } } else { desktopMenu->addMenu(containmentMenu); } } } if (m_containment->immutability() == Plasma::Types::Mutable && (m_containment->containmentType() != Plasma::Types::PanelContainment || m_containment->isUserConfiguring())) { QAction *closeApplet = applet->actions()->action(QStringLiteral("remove")); //qDebug() << "checking for removal" << closeApplet; if (closeApplet) { if (!desktopMenu->isEmpty()) { desktopMenu->addSeparator(); } //qDebug() << "adding close action" << closeApplet->isEnabled() << closeApplet->isVisible(); desktopMenu->addAction(closeApplet); } } } void ContainmentInterface::addContainmentActions(QMenu *desktopMenu, QEvent *event) { if (m_containment->corona()->immutability() != Plasma::Types::Mutable && !KAuthorized::authorizeKAction(QStringLiteral("plasma/containment_actions"))) { //qDebug() << "immutability"; return; } //this is what ContainmentPrivate::prepareContainmentActions was const QString trigger = Plasma::ContainmentActions::eventToString(event); Plasma::ContainmentActions *plugin = m_containment->containmentActions().value(trigger); if (!plugin) { return; } if (plugin->containment() != m_containment) { plugin->setContainment(m_containment); // now configure it KConfigGroup cfg(m_containment->corona()->config(), "ActionPlugins"); cfg = KConfigGroup(&cfg, QString::number(m_containment->containmentType())); KConfigGroup pluginConfig = KConfigGroup(&cfg, trigger); plugin->restore(pluginConfig); } QList actions = plugin->contextualActions(); if (actions.isEmpty()) { //it probably didn't bother implementing the function. give the user a chance to set //a better plugin. note that if the user sets no-plugin this won't happen... if ((m_containment->containmentType() != Plasma::Types::PanelContainment && m_containment->containmentType() != Plasma::Types::CustomPanelContainment) && m_containment->actions()->action(QStringLiteral("configure"))) { desktopMenu->addAction(m_containment->actions()->action(QStringLiteral("configure"))); } } else { desktopMenu->addActions(actions); } return; } #include "moc_containmentinterface.cpp" diff --git a/src/tools/port-cmake-style.sh b/src/tools/port-cmake-style.sh index e339e4d7d..62bda056d 100755 --- a/src/tools/port-cmake-style.sh +++ b/src/tools/port-cmake-style.sh @@ -1,10 +1,10 @@ for FS in `find $PWD -type f -name 'CMakeLists.txt' -o -name '*.cmake'`; do #all commands should be lowercase - #http://techbase.kde.org/Policies/CMake_Coding_Style#Upper.2Flower_casing + #https://community.kde.org/Policies/CMake_Coding_Style#Upper.2Flower_casing perl -p -i -e 's/^( *)([0-9A-Z_]*)( *)\(/$1.lc($2).$3."("/ge' $FS #removes the predicate of endif and else in cmake - # http://techbase.kde.org/Policies/CMake_Coding_Style#End_commands + # https://community.kde.org/Policies/CMake_Coding_Style#End_commands perl -p -i -e 's/endif( *)\(.*\)/endif\1()/g' $FS perl -p -i -e 's/else( *)\(.*\)/else\1()/g' $FS done diff --git a/templates/cpp-plasmoid/src/package/metadata.desktop b/templates/cpp-plasmoid/src/package/metadata.desktop index 2eedf7b56..283d54b17 100644 --- a/templates/cpp-plasmoid/src/package/metadata.desktop +++ b/templates/cpp-plasmoid/src/package/metadata.desktop @@ -1,98 +1,98 @@ [Desktop Entry] Name=%{APPNAME} Name[ar]=%{APPNAME} Name[ca]=%{APPNAME} Name[ca@valencia]=%{APPNAME} Name[cs]=%{APPNAME} Name[da]=%{APPNAME} Name[de]=%{APPNAME} Name[en_GB]=%{APPNAME} Name[es]=%{APPNAME} Name[et]=%{APPNAME} Name[eu]=%{APPNAME} Name[fi]=%{APPNAME} Name[fr]=%{APPNAME} Name[gd]=%{APPNAME} Name[gl]=%{APPNAME} Name[hu]=%{APPNAME} Name[ia]=%{APPNAME} Name[id]=%{APPNAME} Name[it]=%{APPNAME} Name[ko]=%{APPNAME} Name[nb]=%{APPNAME} Name[nl]=%{APPNAME} Name[nn]=%{APPNAME} Name[pl]=%{APPNAME} Name[pt]=%{APPNAME} Name[pt_BR]=%{APPNAME} Name[ru]=%{APPNAME} Name[sk]=%{APPNAME} Name[sl]=%{APPNAME} Name[sr]=%{APPNAME} Name[sr@ijekavian]=%{APPNAME} Name[sr@ijekavianlatin]=%{APPNAME} Name[sr@latin]=%{APPNAME} Name[sv]=%{APPNAME} Name[tr]=%{APPNAME} Name[uk]=%{APPNAME} Name[x-test]=xx%{APPNAME}xx Name[zh_CN]=%{APPNAME} Name[zh_TW]=%{APPNAME} Comment=what your app does in a few words Comment[ar]=ما يفعله تطبيقك ببضع كلمات Comment[ca]=Què fa aquesta aplicació en poques paraules Comment[ca@valencia]=Què fa aquesta aplicació en poques paraules Comment[da]=nogle få ord om hvad din app gør Comment[de]=In ein paar Worten, was Ihre Anwendung tut Comment[en_GB]=what your app does in a few words Comment[es]=lo que hace su aplicación, en pocas palabras Comment[et]=Mõne sõnaga, mida rakendus teeb Comment[eu]=zure aplikazioak egiten duena hitz gutxitan Comment[fi]=ohjelmasi toiminta muutamalla sanalla Comment[fr]=que fait votre application en quelques mots Comment[gd]=na nì an aplacaid agad ann am beagan fhaclan Comment[gl]=o que fai o seu aplicativo en poucas palabras Comment[hu]=Írja le néhány szóba, mit csinál az alkalmazása! Comment[ia]=cosa tu app face in pauc parolas Comment[id]=app apa yang kamu lakukan dalam beberapa kata Comment[it]=Cosa fa la tua applicazione in poche parole Comment[ko]=프로그램이 하는 일에 대한 간단한 설명 Comment[nb]=hva programmet gjør, med noen få ord Comment[nl]=wat uw app doet in een paar woorden Comment[nn]=nokre få ord om kva programmet gjer Comment[pl]=w kilku słowach opis co robi twój program Comment[pt]=o que faz a sua aplicação, em poucas palavras Comment[pt_BR]=breve descrição do que o seu aplicativo faz Comment[ru]=Несколько слов о том, что делает ваша программа Comment[sk]=čo vaša aplikácia robí v niekoľkých slovách Comment[sl]=kaj vaš program dela, v nekaj besedah Comment[sr]=Укратко о томе шта ваш програм ради Comment[sr@ijekavian]=Укратко о томе шта ваш програм ради Comment[sr@ijekavianlatin]=Ukratko o tome šta vaš program radi Comment[sr@latin]=Ukratko o tome šta vaš program radi Comment[sv]=vad programmet gör med några få ord Comment[tr]=uygulamanızın yaptığı şey, birkaç sözcükte Comment[uk]=призначення вашої програми у декількох словах Comment[x-test]=xxwhat your app does in a few wordsxx Comment[zh_CN]=简单几个词概括您的小程序的功能 Comment[zh_TW]=以數個字描述您的應用程式的用途 Icon=applications-system Type=Service X-KDE-ServiceTypes=Plasma/Applet X-KDE-Library=plasma_applet_%{APPNAMELC} X-KDE-PluginInfo-Author=%{AUTHOR} X-KDE-PluginInfo-Email=%{EMAIL} X-KDE-PluginInfo-Name=org.kde.plasma.%{APPNAMELC} X-KDE-PluginInfo-Version=1.0 -X-KDE-PluginInfo-Website=http://plasma.kde.org/ +X-KDE-PluginInfo-Website=https://plasma.kde.org/ X-KDE-PluginInfo-Category=Utilities X-KDE-PluginInfo-Depends= X-KDE-PluginInfo-License=GPL X-KDE-PluginInfo-EnabledByDefault=true X-Plasma-API=declarativeappletscript X-Plasma-MainScript=ui/main.qml diff --git a/templates/qml-plasmoid-with-qml-extension/package/metadata.desktop b/templates/qml-plasmoid-with-qml-extension/package/metadata.desktop index 93891b78c..ca4cb1d8f 100644 --- a/templates/qml-plasmoid-with-qml-extension/package/metadata.desktop +++ b/templates/qml-plasmoid-with-qml-extension/package/metadata.desktop @@ -1,95 +1,95 @@ [Desktop Entry] Name=%{APPNAME} Name[ar]=%{APPNAME} Name[ca]=%{APPNAME} Name[ca@valencia]=%{APPNAME} Name[cs]=%{APPNAME} Name[da]=%{APPNAME} Name[de]=%{APPNAME} Name[en_GB]=%{APPNAME} Name[es]=%{APPNAME} Name[et]=%{APPNAME} Name[eu]=%{APPNAME} Name[fi]=%{APPNAME} Name[fr]=%{APPNAME} Name[gd]=%{APPNAME} Name[gl]=%{APPNAME} Name[hu]=%{APPNAME} Name[ia]=%{APPNAME} Name[id]=%{APPNAME} Name[it]=%{APPNAME} Name[ko]=%{APPNAME} Name[nb]=%{APPNAME} Name[nl]=%{APPNAME} Name[nn]=%{APPNAME} Name[pl]=%{APPNAME} Name[pt]=%{APPNAME} Name[pt_BR]=%{APPNAME} Name[ru]=%{APPNAME} Name[sk]=%{APPNAME} Name[sl]=%{APPNAME} Name[sr]=%{APPNAME} Name[sr@ijekavian]=%{APPNAME} Name[sr@ijekavianlatin]=%{APPNAME} Name[sr@latin]=%{APPNAME} Name[sv]=%{APPNAME} Name[tr]=%{APPNAME} Name[uk]=%{APPNAME} Name[x-test]=xx%{APPNAME}xx Name[zh_CN]=%{APPNAME} Name[zh_TW]=%{APPNAME} Comment=what your app does in a few words Comment[ar]=ما يفعله تطبيقك ببضع كلمات Comment[ca]=Què fa aquesta aplicació en poques paraules Comment[ca@valencia]=Què fa aquesta aplicació en poques paraules Comment[da]=nogle få ord om hvad din app gør Comment[de]=In ein paar Worten, was Ihre Anwendung tut Comment[en_GB]=what your app does in a few words Comment[es]=lo que hace su aplicación, en pocas palabras Comment[et]=Mõne sõnaga, mida rakendus teeb Comment[eu]=zure aplikazioak egiten duena hitz gutxitan Comment[fi]=ohjelmasi toiminta muutamalla sanalla Comment[fr]=que fait votre application en quelques mots Comment[gd]=na nì an aplacaid agad ann am beagan fhaclan Comment[gl]=o que fai o seu aplicativo en poucas palabras Comment[hu]=Írja le néhány szóba, mit csinál az alkalmazása! Comment[ia]=cosa tu app face in pauc parolas Comment[id]=app apa yang kamu lakukan dalam beberapa kata Comment[it]=Cosa fa la tua applicazione in poche parole Comment[ko]=프로그램이 하는 일에 대한 간단한 설명 Comment[nb]=hva programmet gjør, med noen få ord Comment[nl]=wat uw app doet in een paar woorden Comment[nn]=nokre få ord om kva programmet gjer Comment[pl]=w kilku słowach opis co robi twój program Comment[pt]=o que faz a sua aplicação, em poucas palavras Comment[pt_BR]=breve descrição do que o seu aplicativo faz Comment[ru]=Несколько слов о том, что делает ваша программа Comment[sk]=čo vaša aplikácia robí v niekoľkých slovách Comment[sl]=kaj vaš program dela, v nekaj besedah Comment[sr]=Укратко о томе шта ваш програм ради Comment[sr@ijekavian]=Укратко о томе шта ваш програм ради Comment[sr@ijekavianlatin]=Ukratko o tome šta vaš program radi Comment[sr@latin]=Ukratko o tome šta vaš program radi Comment[sv]=vad programmet gör med några få ord Comment[tr]=uygulamanızın yaptığı şey, birkaç sözcükte Comment[uk]=призначення вашої програми у декількох словах Comment[x-test]=xxwhat your app does in a few wordsxx Comment[zh_CN]=简单几个词概括您的小程序的功能 Comment[zh_TW]=以數個字描述您的應用程式的用途 Icon=applications-system Type=Service X-KDE-ServiceTypes=Plasma/Applet X-KDE-PluginInfo-Author=%{AUTHOR} X-KDE-PluginInfo-Email=%{EMAIL} X-KDE-PluginInfo-Name=org.kde.plasma.%{APPNAMELC} X-KDE-PluginInfo-Version=1.0 -X-KDE-PluginInfo-Website=http://plasma.kde.org/ +X-KDE-PluginInfo-Website=https://plasma.kde.org/ X-KDE-PluginInfo-Category=Utilities X-KDE-PluginInfo-Depends= X-KDE-PluginInfo-License=GPL X-KDE-PluginInfo-EnabledByDefault=true X-Plasma-API=declarativeappletscript X-Plasma-MainScript=ui/main.qml diff --git a/templates/qml-plasmoid/package/metadata.desktop b/templates/qml-plasmoid/package/metadata.desktop index 93891b78c..ca4cb1d8f 100644 --- a/templates/qml-plasmoid/package/metadata.desktop +++ b/templates/qml-plasmoid/package/metadata.desktop @@ -1,95 +1,95 @@ [Desktop Entry] Name=%{APPNAME} Name[ar]=%{APPNAME} Name[ca]=%{APPNAME} Name[ca@valencia]=%{APPNAME} Name[cs]=%{APPNAME} Name[da]=%{APPNAME} Name[de]=%{APPNAME} Name[en_GB]=%{APPNAME} Name[es]=%{APPNAME} Name[et]=%{APPNAME} Name[eu]=%{APPNAME} Name[fi]=%{APPNAME} Name[fr]=%{APPNAME} Name[gd]=%{APPNAME} Name[gl]=%{APPNAME} Name[hu]=%{APPNAME} Name[ia]=%{APPNAME} Name[id]=%{APPNAME} Name[it]=%{APPNAME} Name[ko]=%{APPNAME} Name[nb]=%{APPNAME} Name[nl]=%{APPNAME} Name[nn]=%{APPNAME} Name[pl]=%{APPNAME} Name[pt]=%{APPNAME} Name[pt_BR]=%{APPNAME} Name[ru]=%{APPNAME} Name[sk]=%{APPNAME} Name[sl]=%{APPNAME} Name[sr]=%{APPNAME} Name[sr@ijekavian]=%{APPNAME} Name[sr@ijekavianlatin]=%{APPNAME} Name[sr@latin]=%{APPNAME} Name[sv]=%{APPNAME} Name[tr]=%{APPNAME} Name[uk]=%{APPNAME} Name[x-test]=xx%{APPNAME}xx Name[zh_CN]=%{APPNAME} Name[zh_TW]=%{APPNAME} Comment=what your app does in a few words Comment[ar]=ما يفعله تطبيقك ببضع كلمات Comment[ca]=Què fa aquesta aplicació en poques paraules Comment[ca@valencia]=Què fa aquesta aplicació en poques paraules Comment[da]=nogle få ord om hvad din app gør Comment[de]=In ein paar Worten, was Ihre Anwendung tut Comment[en_GB]=what your app does in a few words Comment[es]=lo que hace su aplicación, en pocas palabras Comment[et]=Mõne sõnaga, mida rakendus teeb Comment[eu]=zure aplikazioak egiten duena hitz gutxitan Comment[fi]=ohjelmasi toiminta muutamalla sanalla Comment[fr]=que fait votre application en quelques mots Comment[gd]=na nì an aplacaid agad ann am beagan fhaclan Comment[gl]=o que fai o seu aplicativo en poucas palabras Comment[hu]=Írja le néhány szóba, mit csinál az alkalmazása! Comment[ia]=cosa tu app face in pauc parolas Comment[id]=app apa yang kamu lakukan dalam beberapa kata Comment[it]=Cosa fa la tua applicazione in poche parole Comment[ko]=프로그램이 하는 일에 대한 간단한 설명 Comment[nb]=hva programmet gjør, med noen få ord Comment[nl]=wat uw app doet in een paar woorden Comment[nn]=nokre få ord om kva programmet gjer Comment[pl]=w kilku słowach opis co robi twój program Comment[pt]=o que faz a sua aplicação, em poucas palavras Comment[pt_BR]=breve descrição do que o seu aplicativo faz Comment[ru]=Несколько слов о том, что делает ваша программа Comment[sk]=čo vaša aplikácia robí v niekoľkých slovách Comment[sl]=kaj vaš program dela, v nekaj besedah Comment[sr]=Укратко о томе шта ваш програм ради Comment[sr@ijekavian]=Укратко о томе шта ваш програм ради Comment[sr@ijekavianlatin]=Ukratko o tome šta vaš program radi Comment[sr@latin]=Ukratko o tome šta vaš program radi Comment[sv]=vad programmet gör med några få ord Comment[tr]=uygulamanızın yaptığı şey, birkaç sözcükte Comment[uk]=призначення вашої програми у декількох словах Comment[x-test]=xxwhat your app does in a few wordsxx Comment[zh_CN]=简单几个词概括您的小程序的功能 Comment[zh_TW]=以數個字描述您的應用程式的用途 Icon=applications-system Type=Service X-KDE-ServiceTypes=Plasma/Applet X-KDE-PluginInfo-Author=%{AUTHOR} X-KDE-PluginInfo-Email=%{EMAIL} X-KDE-PluginInfo-Name=org.kde.plasma.%{APPNAMELC} X-KDE-PluginInfo-Version=1.0 -X-KDE-PluginInfo-Website=http://plasma.kde.org/ +X-KDE-PluginInfo-Website=https://plasma.kde.org/ X-KDE-PluginInfo-Category=Utilities X-KDE-PluginInfo-Depends= X-KDE-PluginInfo-License=GPL X-KDE-PluginInfo-EnabledByDefault=true X-Plasma-API=declarativeappletscript X-Plasma-MainScript=ui/main.qml