summaryrefslogtreecommitdiff
path: root/x11-themes/redcore-theme-sddm/files
diff options
context:
space:
mode:
Diffstat (limited to 'x11-themes/redcore-theme-sddm/files')
-rw-r--r--x11-themes/redcore-theme-sddm/files/redcore/Background.qml69
-rw-r--r--x11-themes/redcore-theme-sddm/files/redcore/BreezeMenuStyle.qml25
-rw-r--r--x11-themes/redcore-theme-sddm/files/redcore/KeyboardButton.qml38
-rw-r--r--x11-themes/redcore-theme-sddm/files/redcore/LICENSE337
-rw-r--r--x11-themes/redcore-theme-sddm/files/redcore/Login.qml156
-rw-r--r--x11-themes/redcore-theme-sddm/files/redcore/Main.qml648
-rw-r--r--x11-themes/redcore-theme-sddm/files/redcore/README1
-rw-r--r--x11-themes/redcore-theme-sddm/files/redcore/SessionButton.qml59
-rw-r--r--x11-themes/redcore-theme-sddm/files/redcore/angle-down.pngbin196 -> 0 bytes
-rw-r--r--x11-themes/redcore-theme-sddm/files/redcore/assets/login.svgzbin0 -> 1357 bytes
-rw-r--r--x11-themes/redcore-theme-sddm/files/redcore/assets/logout_primary.svgzbin0 -> 3033 bytes
-rw-r--r--x11-themes/redcore-theme-sddm/files/redcore/assets/restart_primary.svgzbin0 -> 2337 bytes
-rw-r--r--x11-themes/redcore-theme-sddm/files/redcore/assets/shutdown_primary.svgzbin0 -> 1394 bytes
-rw-r--r--x11-themes/redcore-theme-sddm/files/redcore/assets/suspend_primary.svgzbin0 -> 1433 bytes
-rw-r--r--x11-themes/redcore-theme-sddm/files/redcore/assets/switch_primary.svgzbin0 -> 3098 bytes
-rw-r--r--x11-themes/redcore-theme-sddm/files/redcore/background.jpgbin0 -> 9464010 bytes
-rw-r--r--x11-themes/redcore-theme-sddm/files/redcore/components/ActionButton.qml128
-rw-r--r--x11-themes/redcore-theme-sddm/files/redcore/components/Battery.qml53
-rw-r--r--x11-themes/redcore-theme-sddm/files/redcore/components/Clock.qml50
-rw-r--r--x11-themes/redcore-theme-sddm/files/redcore/components/KeyboardLayoutButton.qml52
-rw-r--r--x11-themes/redcore-theme-sddm/files/redcore/components/SessionManagementScreen.qml121
-rw-r--r--x11-themes/redcore-theme-sddm/files/redcore/components/UserDelegate.qml190
-rw-r--r--x11-themes/redcore-theme-sddm/files/redcore/components/UserList.qml93
-rw-r--r--x11-themes/redcore-theme-sddm/files/redcore/components/VirtualKeyboard.qml28
-rw-r--r--x11-themes/redcore-theme-sddm/files/redcore/components/WallpaperFader.qml182
-rw-r--r--x11-themes/redcore-theme-sddm/files/redcore/metadata.desktop17
-rw-r--r--x11-themes/redcore-theme-sddm/files/redcore/rectangle.pngbin16231 -> 0 bytes
-rw-r--r--x11-themes/redcore-theme-sddm/files/redcore/redcore.pngbin2267049 -> 0 bytes
-rw-r--r--x11-themes/redcore-theme-sddm/files/redcore/theme.conf5
-rw-r--r--x11-themes/redcore-theme-sddm/files/redcore/theme.conf.user2
30 files changed, 1686 insertions, 568 deletions
diff --git a/x11-themes/redcore-theme-sddm/files/redcore/Background.qml b/x11-themes/redcore-theme-sddm/files/redcore/Background.qml
new file mode 100644
index 00000000..5a384151
--- /dev/null
+++ b/x11-themes/redcore-theme-sddm/files/redcore/Background.qml
@@ -0,0 +1,69 @@
+/*
+ * Copyright 2016 Boudhayan Gupta <bgupta@kde.org>
+ *
+ * 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.
+ */
+
+import QtQuick 2.2
+
+FocusScope {
+ id: sceneBackground
+
+ property var sceneBackgroundType
+ property alias sceneBackgroundColor: sceneColorBackground.color
+ property alias sceneBackgroundImage: sceneImageBackground.source
+
+ Rectangle {
+ id: sceneColorBackground
+ anchors.fill: parent
+ }
+
+ Image {
+ id: sceneImageBackground
+ anchors.fill: parent
+ sourceSize.width: parent.width
+ sourceSize.height: parent.height
+ fillMode: Image.PreserveAspectCrop
+ smooth: true;
+ }
+
+ states: [
+ State {
+ name: "imageBackground"
+ when: sceneBackgroundType === "image"
+ PropertyChanges {
+ target: sceneColorBackground
+ visible: false
+ }
+ PropertyChanges {
+ target: sceneImageBackground
+ visible: true
+ }
+ },
+ State {
+ name: "colorBackground"
+ when: sceneBackgroundType !== "image"
+ PropertyChanges {
+ target: sceneColorBackground
+ visible: true
+ }
+ PropertyChanges {
+ target: sceneImageBackground
+ visible: false
+ }
+ }
+ ]
+}
diff --git a/x11-themes/redcore-theme-sddm/files/redcore/BreezeMenuStyle.qml b/x11-themes/redcore-theme-sddm/files/redcore/BreezeMenuStyle.qml
new file mode 100644
index 00000000..7d56c149
--- /dev/null
+++ b/x11-themes/redcore-theme-sddm/files/redcore/BreezeMenuStyle.qml
@@ -0,0 +1,25 @@
+import QtQuick 2.2
+
+import org.kde.plasma.core 2.0 as PlasmaCore
+
+import QtQuick.Controls.Styles 1.4 as QQCS
+import QtQuick.Controls 1.3 as QQC
+
+QQCS.MenuStyle {
+ frame: Rectangle {
+ color: PlasmaCore.ColorScope.backgroundColor
+ border.color: Qt.tint(PlasmaCore.ColorScope.textColor, Qt.rgba(color.r, color.g, color.b, 0.7))
+ border.width: 1
+ }
+ itemDelegate.label: QQC.Label {
+ height: contentHeight * 1.2
+ verticalAlignment: Text.AlignVCenter
+ color: styleData.selected ? PlasmaCore.ColorScope.highlightedTextColor : PlasmaCore.ColorScope.textColor
+ font.pointSize: config.fontSize
+ text: styleData.text
+ }
+ itemDelegate.background: Rectangle {
+ visible: styleData.selected
+ color: PlasmaCore.ColorScope.highlightColor
+ }
+}
diff --git a/x11-themes/redcore-theme-sddm/files/redcore/KeyboardButton.qml b/x11-themes/redcore-theme-sddm/files/redcore/KeyboardButton.qml
new file mode 100644
index 00000000..9989d93e
--- /dev/null
+++ b/x11-themes/redcore-theme-sddm/files/redcore/KeyboardButton.qml
@@ -0,0 +1,38 @@
+import QtQuick 2.2
+
+import org.kde.plasma.core 2.0 as PlasmaCore
+import org.kde.plasma.components 2.0 as PlasmaComponents
+
+import QtQuick.Controls 1.3 as QQC
+
+PlasmaComponents.ToolButton {
+ id: keyboardButton
+
+ property int currentIndex: -1
+
+ text: i18nd("plasma_lookandfeel_org.kde.lookandfeel", "Keyboard Layout: %1", instantiator.objectAt(currentIndex).shortName)
+ implicitWidth: minimumWidth
+ font.pointSize: config.fontSize
+
+ visible: menu.items.length > 1
+
+ Component.onCompleted: currentIndex = Qt.binding(function() {return keyboard.currentLayout});
+
+ menu: QQC.Menu {
+ id: keyboardMenu
+ style: BreezeMenuStyle {}
+ Instantiator {
+ id: instantiator
+ model: keyboard.layouts
+ onObjectAdded: keyboardMenu.insertItem(index, object)
+ onObjectRemoved: keyboardMenu.removeItem( object )
+ delegate: QQC.MenuItem {
+ text: modelData.longName
+ property string shortName: modelData.shortName
+ onTriggered: {
+ keyboard.currentLayout = model.index
+ }
+ }
+ }
+ }
+}
diff --git a/x11-themes/redcore-theme-sddm/files/redcore/LICENSE b/x11-themes/redcore-theme-sddm/files/redcore/LICENSE
deleted file mode 100644
index 6b679353..00000000
--- a/x11-themes/redcore-theme-sddm/files/redcore/LICENSE
+++ /dev/null
@@ -1,337 +0,0 @@
-Creative Commons Legal Code
-
-Attribution-ShareAlike 3.0 Unported
-
- CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL
- SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN ATTORNEY-CLIENT
- RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS"
- BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE INFORMATION
- PROVIDED, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM ITS USE.
-
-License
-
-THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE
-COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY
-COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS
-AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
-
-BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE
-BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE
-CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE
-IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS.
-
-1. Definitions
-
- a. "Adaptation" means a work based upon the Work, or upon the Work and other
- pre-existing works, such as a translation, adaptation, derivative work,
- arrangement of music or other alterations of a literary or artistic work,
- or phonogram or performance and includes cinematographic adaptations or any
- other form in which the Work may be recast, transformed, or adapted
- including in any form recognizably derived from the original, except that a
- work that constitutes a Collection will not be considered an Adaptation for
- the purpose of this License. For the avoidance of doubt, where the Work is
- a musical work, performance or phonogram, the synchronization of the Work
- in timed-relation with a moving image ("synching") will be considered an
- Adaptation for the purpose of this License.
- b. "Collection" means a collection of literary or artistic works, such as
- encyclopedias and anthologies, or performances, phonograms or broadcasts,
- or other works or subject matter other than works listed in Section 1(f)
- below, which, by reason of the selection and arrangement of their contents,
- constitute intellectual creations, in which the Work is included in its
- entirety in unmodified form along with one or more other contributions,
- each constituting separate and independent works in themselves, which
- together are assembled into a collective whole. A work that constitutes a
- Collection will not be considered an Adaptation (as defined below) for the
- purposes of this License.
- c. "Creative Commons Compatible License" means a license that is listed at
- http://creativecommons.org/compatiblelicenses that has been approved by
- Creative Commons as being essentially equivalent to this License,
- including, at a minimum, because that license: (i) contains terms that have
- the same purpose, meaning and effect as the License Elements of this
- License; and, (ii) explicitly permits the relicensing of adaptations of
- works made available under that license under this License or a Creative
- Commons jurisdiction license with the same License Elements as this
- License.
- d. "Distribute" means to make available to the public the original and copies
- of the Work or Adaptation, as appropriate, through sale or other transfer
- of ownership.
- e. "License Elements" means the following high-level license attributes as
- selected by Licensor and indicated in the title of this License:
- Attribution, ShareAlike.
- f. "Licensor" means the individual, individuals, entity or entities that offer
- (s) the Work under the terms of this License.
- g. "Original Author" means, in the case of a literary or artistic work, the
- individual, individuals, entity or entities who created the Work or if no
- individual or entity can be identified, the publisher; and in addition (i)
- in the case of a performance the actors, singers, musicians, dancers, and
- other persons who act, sing, deliver, declaim, play in, interpret or
- otherwise perform literary or artistic works or expressions of folklore;
- (ii) in the case of a phonogram the producer being the person or legal
- entity who first fixes the sounds of a performance or other sounds; and,
- (iii) in the case of broadcasts, the organization that transmits the
- broadcast.
- h. "Work" means the literary and/or artistic work offered under the terms of
- this License including without limitation any production in the literary,
- scientific and artistic domain, whatever may be the mode or form of its
- expression including digital form, such as a book, pamphlet and other
- writing; a lecture, address, sermon or other work of the same nature; a
- dramatic or dramatico-musical work; a choreographic work or entertainment
- in dumb show; a musical composition with or without words; a
- cinematographic work to which are assimilated works expressed by a process
- analogous to cinematography; a work of drawing, painting, architecture,
- sculpture, engraving or lithography; a photographic work to which are
- assimilated works expressed by a process analogous to photography; a work
- of applied art; an illustration, map, plan, sketch or three-dimensional
- work relative to geography, topography, architecture or science; a
- performance; a broadcast; a phonogram; a compilation of data to the extent
- it is protected as a copyrightable work; or a work performed by a variety
- or circus performer to the extent it is not otherwise considered a literary
- or artistic work.
- i. "You" means an individual or entity exercising rights under this License
- who has not previously violated the terms of this License with respect to
- the Work, or who has received express permission from the Licensor to
- exercise rights under this License despite a previous violation.
- j. "Publicly Perform" means to perform public recitations of the Work and to
- communicate to the public those public recitations, by any means or
- process, including by wire or wireless means or public digital
- performances; to make available to the public Works in such a way that
- members of the public may access these Works from a place and at a place
- individually chosen by them; to perform the Work to the public by any means
- or process and the communication to the public of the performances of the
- Work, including by public digital performance; to broadcast and rebroadcast
- the Work by any means including signs, sounds or images.
- k. "Reproduce" means to make copies of the Work by any means including without
- limitation by sound or visual recordings and the right of fixation and
- reproducing fixations of the Work, including storage of a protected
- performance or phonogram in digital form or other electronic medium.
-
-2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit,
-or restrict any uses free from copyright or rights arising from limitations or
-exceptions that are provided for in connection with the copyright protection
-under copyright law or other applicable laws.
-
-3. License Grant. Subject to the terms and conditions of this License, Licensor
-hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the
-duration of the applicable copyright) license to exercise the rights in the
-Work as stated below:
-
- a. to Reproduce the Work, to incorporate the Work into one or more
- Collections, and to Reproduce the Work as incorporated in the Collections;
- b. to create and Reproduce Adaptations provided that any such Adaptation,
- including any translation in any medium, takes reasonable steps to clearly
- label, demarcate or otherwise identify that changes were made to the
- original Work. For example, a translation could be marked "The original
- work was translated from English to Spanish," or a modification could
- indicate "The original work has been modified.";
- c. to Distribute and Publicly Perform the Work including as incorporated in
- Collections; and,
- d. to Distribute and Publicly Perform Adaptations.
- e. For the avoidance of doubt:
-
- i. Non-waivable Compulsory License Schemes. In those jurisdictions in
- which the right to collect royalties through any statutory or
- compulsory licensing scheme cannot be waived, the Licensor reserves the
- exclusive right to collect such royalties for any exercise by You of
- the rights granted under this License;
- ii. Waivable Compulsory License Schemes. In those jurisdictions in which
- the right to collect royalties through any statutory or compulsory
- licensing scheme can be waived, the Licensor waives the exclusive right
- to collect such royalties for any exercise by You of the rights granted
- under this License; and,
- iii. Voluntary License Schemes. The Licensor waives the right to collect
- royalties, whether individually or, in the event that the Licensor is a
- member of a collecting society that administers voluntary licensing
- schemes, via that society, from any exercise by You of the rights
- granted under this License.
-
-The above rights may be exercised in all media and formats whether now known or
-hereafter devised. The above rights include the right to make such
-modifications as are technically necessary to exercise the rights in other
-media and formats. Subject to Section 8(f), all rights not expressly granted by
-Licensor are hereby reserved.
-
-4. Restrictions. The license granted in Section 3 above is expressly made
-subject to and limited by the following restrictions:
-
- a. You may Distribute or Publicly Perform the Work only under the terms of
- this License. You must include a copy of, or the Uniform Resource
- Identifier (URI) for, this License with every copy of the Work You
- Distribute or Publicly Perform. You may not offer or impose any terms on
- the Work that restrict the terms of this License or the ability of the
- recipient of the Work to exercise the rights granted to that recipient
- under the terms of the License. You may not sublicense the Work. You must
- keep intact all notices that refer to this License and to the disclaimer of
- warranties with every copy of the Work You Distribute or Publicly Perform.
- When You Distribute or Publicly Perform the Work, You may not impose any
- effective technological measures on the Work that restrict the ability of a
- recipient of the Work from You to exercise the rights granted to that
- recipient under the terms of the License. This Section 4(a) applies to the
- Work as incorporated in a Collection, but this does not require the
- Collection apart from the Work itself to be made subject to the terms of
- this License. If You create a Collection, upon notice from any Licensor You
- must, to the extent practicable, remove from the Collection any credit as
- required by Section 4(c), as requested. If You create an Adaptation, upon
- notice from any Licensor You must, to the extent practicable, remove from
- the Adaptation any credit as required by Section 4(c), as requested.
- b. You may Distribute or Publicly Perform an Adaptation only under the terms
- of: (i) this License; (ii) a later version of this License with the same
- License Elements as this License; (iii) a Creative Commons jurisdiction
- license (either this or a later license version) that contains the same
- License Elements as this License (e.g., Attribution-ShareAlike 3.0 US));
- (iv) a Creative Commons Compatible License. If you license the Adaptation
- under one of the licenses mentioned in (iv), you must comply with the terms
- of that license. If you license the Adaptation under the terms of any of
- the licenses mentioned in (i), (ii) or (iii) (the "Applicable License"),
- you must comply with the terms of the Applicable License generally and the
- following provisions: (I) You must include a copy of, or the URI for, the
- Applicable License with every copy of each Adaptation You Distribute or
- Publicly Perform; (II) You may not offer or impose any terms on the
- Adaptation that restrict the terms of the Applicable License or the ability
- of the recipient of the Adaptation to exercise the rights granted to that
- recipient under the terms of the Applicable License; (III) You must keep
- intact all notices that refer to the Applicable License and to the
- disclaimer of warranties with every copy of the Work as included in the
- Adaptation You Distribute or Publicly Perform; (IV) when You Distribute or
- Publicly Perform the Adaptation, You may not impose any effective
- technological measures on the Adaptation that restrict the ability of a
- recipient of the Adaptation from You to exercise the rights granted to that
- recipient under the terms of the Applicable License. This Section 4(b)
- applies to the Adaptation as incorporated in a Collection, but this does
- not require the Collection apart from the Adaptation itself to be made
- subject to the terms of the Applicable License.
- c. If You Distribute, or Publicly Perform the Work or any Adaptations or
- Collections, You must, unless a request has been made pursuant to Section 4
- (a), keep intact all copyright notices for the Work and provide, reasonable
- to the medium or means You are utilizing: (i) the name of the Original
- Author (or pseudonym, if applicable) if supplied, and/or if the Original
- Author and/or Licensor designate another party or parties (e.g., a sponsor
- institute, publishing entity, journal) for attribution ("Attribution
- Parties") in Licensor's copyright notice, terms of service or by other
- reasonable means, the name of such party or parties; (ii) the title of the
- Work if supplied; (iii) to the extent reasonably practicable, the URI, if
- any, that Licensor specifies to be associated with the Work, unless such
- URI does not refer to the copyright notice or licensing information for the
- Work; and (iv) , consistent with Ssection 3(b), in the case of an
- Adaptation, a credit identifying the use of the Work in the Adaptation
- (e.g., "French translation of the Work by Original Author," or "Screenplay
- based on original Work by Original Author"). The credit required by this
- Section 4(c) may be implemented in any reasonable manner; provided,
- however, that in the case of a Adaptation or Collection, at a minimum such
- credit will appear, if a credit for all contributing authors of the
- Adaptation or Collection appears, then as part of these credits and in a
- manner at least as prominent as the credits for the other contributing
- authors. For the avoidance of doubt, You may only use the credit required
- by this Section for the purpose of attribution in the manner set out above
- and, by exercising Your rights under this License, You may not implicitly
- or explicitly assert or imply any connection with, sponsorship or
- endorsement by the Original Author, Licensor and/or Attribution Parties, as
- appropriate, of You or Your use of the Work, without the separate, express
- prior written permission of the Original Author, Licensor and/or
- Attribution Parties.
- d. Except as otherwise agreed in writing by the Licensor or as may be
- otherwise permitted by applicable law, if You Reproduce, Distribute or
- Publicly Perform the Work either by itself or as part of any Adaptations or
- Collections, You must not distort, mutilate, modify or take other
- derogatory action in relation to the Work which would be prejudicial to the
- Original Author's honor or reputation. Licensor agrees that in those
- jurisdictions (e.g. Japan), in which any exercise of the right granted in
- Section 3(b) of this License (the right to make Adaptations) would be
- deemed to be a distortion, mutilation, modification or other derogatory
- action prejudicial to the Original Author's honor and reputation, the
- Licensor will waive or not assert, as appropriate, this Section, to the
- fullest extent permitted by the applicable national law, to enable You to
- reasonably exercise Your right under Section 3(b) of this License (right to
- make Adaptations) but not otherwise.
-
-5. Representations, Warranties and Disclaimer
-
-UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS
-THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND
-CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING,
-WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A
-PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS,
-ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE.
-SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH
-EXCLUSION MAY NOT APPLY TO YOU.
-
-6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN
-NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL,
-INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS
-LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
-7. Termination
-
- a. This License and the rights granted hereunder will terminate automatically
- upon any breach by You of the terms of this License. Individuals or
- entities who have received Adaptations or Collections from You under this
- License, however, will not have their licenses terminated provided such
- individuals or entities remain in full compliance with those licenses.
- Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License.
- b. Subject to the above terms and conditions, the license granted here is
- perpetual (for the duration of the applicable copyright in the Work).
- Notwithstanding the above, Licensor reserves the right to release the Work
- under different license terms or to stop distributing the Work at any time;
- provided, however that any such election will not serve to withdraw this
- License (or any other license that has been, or is required to be, granted
- under the terms of this License), and this License will continue in full
- force and effect unless terminated as stated above.
-
-8. Miscellaneous
-
- a. Each time You Distribute or Publicly Perform the Work or a Collection, the
- Licensor offers to the recipient a license to the Work on the same terms
- and conditions as the license granted to You under this License.
- b. Each time You Distribute or Publicly Perform an Adaptation, Licensor offers
- to the recipient a license to the original Work on the same terms and
- conditions as the license granted to You under this License.
- c. If any provision of this License is invalid or unenforceable under
- applicable law, it shall not affect the validity or enforceability of the
- remainder of the terms of this License, and without further action by the
- parties to this agreement, such provision shall be reformed to the minimum
- extent necessary to make such provision valid and enforceable.
- d. No term or provision of this License shall be deemed waived and no breach
- consented to unless such waiver or consent shall be in writing and signed
- by the party to be charged with such waiver or consent.
- e. This License constitutes the entire agreement between the parties with
- respect to the Work licensed here. There are no understandings, agreements
- or representations with respect to the Work not specified here. Licensor
- shall not be bound by any additional provisions that may appear in any
- communication from You. This License may not be modified without the mutual
- written agreement of the Licensor and You.
- f. The rights granted under, and the subject matter referenced, in this
- License were drafted utilizing the terminology of the Berne Convention for
- the Protection of Literary and Artistic Works (as amended on September 28,
- 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the
- WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright
- Convention (as revised on July 24, 1971). These rights and subject matter
- take effect in the relevant jurisdiction in which the License terms are
- sought to be enforced according to the corresponding provisions of the
- implementation of those treaty provisions in the applicable national law.
- If the standard suite of rights granted under applicable copyright law
- includes additional rights not granted under this License, such additional
- rights are deemed to be included in the License; this License is not
- intended to restrict the license of any rights under applicable law.
-
- Creative Commons Notice
-
- Creative Commons is not a party to this License, and makes no warranty
- whatsoever in connection with the Work. Creative Commons will not be liable
- to You or any party on any legal theory for any damages whatsoever,
- including without limitation any general, special, incidental or
- consequential damages arising in connection to this license.
- Notwithstanding the foregoing two (2) sentences, if Creative Commons has
- expressly identified itself as the Licensor hereunder, it shall have all
- rights and obligations of Licensor.
-
- Except for the limited purpose of indicating to the public that the Work is
- licensed under the CCPL, Creative Commons does not authorize the use by
- either party of the trademark "Creative Commons" or any related trademark
- or logo of Creative Commons without the prior written consent of Creative
- Commons. Any permitted use will be in compliance with Creative Commons'
- then-current trademark usage guidelines, as may be published on its website
- or otherwise made available upon request from time to time. For the
- avoidance of doubt, this trademark restriction does not form part of the
- License.
-
- Creative Commons may be contacted at https://creativecommons.org/.
diff --git a/x11-themes/redcore-theme-sddm/files/redcore/Login.qml b/x11-themes/redcore-theme-sddm/files/redcore/Login.qml
new file mode 100644
index 00000000..7234917f
--- /dev/null
+++ b/x11-themes/redcore-theme-sddm/files/redcore/Login.qml
@@ -0,0 +1,156 @@
+import "components"
+
+import QtQuick 2.0
+import QtQuick.Layouts 1.2
+import QtQuick.Controls.Styles 1.4
+
+import org.kde.plasma.core 2.0 as PlasmaCore
+import org.kde.plasma.components 2.0 as PlasmaComponents
+
+SessionManagementScreen {
+
+ property bool showUsernamePrompt: !showUserList
+ property int usernameFontSize
+ property string usernameFontColor
+ property string lastUserName
+ property bool passwordFieldOutlined: config.PasswordFieldOutlined == "true"
+ property bool hidePasswordRevealIcon: config.HidePasswordRevealIcon == "false"
+ property int visibleBoundary: mapFromItem(loginButton, 0, 0).y
+ onHeightChanged: visibleBoundary = mapFromItem(loginButton, 0, 0).y + loginButton.height + units.smallSpacing
+
+ signal loginRequest(string username, string password)
+
+ onShowUsernamePromptChanged: {
+ if (!showUsernamePrompt) {
+ lastUserName = ""
+ }
+ }
+
+ /*
+ * Login has been requested with the following username and password
+ * If username field is visible, it will be taken from that, otherwise from the "name" property of the currentIndex
+ */
+ function startLogin() {
+ var username = showUsernamePrompt ? userNameInput.text : userList.selectedUser
+ var password = passwordBox.text
+
+ loginButton.forceActiveFocus();
+ loginRequest(username, password);
+ }
+
+ PlasmaComponents.TextField {
+ id: userNameInput
+ Layout.fillWidth: true
+ Layout.minimumHeight: 32
+ implicitHeight: usernameFontSize * 2.85
+ font.pointSize: usernameFontSize * 0.8
+ font.family: config.Font || "Noto Sans"
+ opacity: 1.0
+ text: lastUserName
+ visible: showUsernamePrompt
+ focus: showUsernamePrompt && !lastUserName //if there's a username prompt it gets focus first, otherwise password does
+ placeholderText: i18nd("plasma_lookandfeel_org.kde.lookandfeel", "Username")
+
+ style: TextFieldStyle {
+ textColor: "white"
+ placeholderTextColor: "white"
+ background: Rectangle {
+ radius: 6
+ border.color: "#1A73E8"
+ border.width: 2
+ color: "#48316f"
+ }
+ }
+ }
+
+ PlasmaComponents.TextField {
+ id: passwordBox
+ Layout.fillWidth: true
+ Layout.minimumHeight: 32
+ implicitHeight: usernameFontSize * 2.85
+ font.pointSize: usernameFontSize * 0.8
+ opacity: passwordFieldOutlined ? 1.0 : 1.0
+ font.family: config.Font || "Noto Sans"
+ placeholderText: config.PasswordFieldPlaceholderText == "Password" ? i18nd("plasma_lookandfeel_org.kde.lookandfeel", "Password") : config.PasswordFieldPlaceholderText
+ focus: !showUsernamePrompt || lastUserName
+ echoMode: TextInput.Password
+ revealPasswordButtonShown: hidePasswordRevealIcon
+ onAccepted: startLogin()
+
+ style: TextFieldStyle {
+ textColor: passwordFieldOutlined ? "white" : "white"
+ placeholderTextColor: passwordFieldOutlined ? "white" : "white"
+ passwordCharacter: config.PasswordFieldCharacter == "" ? "●" : config.PasswordFieldCharacter
+ background: Rectangle {
+ radius: 6
+ border.color: "#1A73E8"
+ border.width: 2
+ color: "#48316f"
+ }
+ }
+
+ Keys.onEscapePressed: {
+ mainStack.currentItem.forceActiveFocus();
+ }
+
+ Keys.onPressed: {
+ if (event.key == Qt.Key_Left && !text) {
+ userList.decrementCurrentIndex();
+ event.accepted = true
+ }
+ if (event.key == Qt.Key_Right && !text) {
+ userList.incrementCurrentIndex();
+ event.accepted = true
+ }
+ }
+
+ Keys.onReleased: {
+ if (loginButton.opacity == 0 && length > 0) {
+ showLoginButton.start()
+ }
+ if (loginButton.opacity > 0 && length == 0) {
+ hideLoginButton.start()
+ }
+ }
+
+ Connections {
+ target: sddm
+ onLoginFailed: {
+ passwordBox.selectAll()
+ passwordBox.forceActiveFocus()
+ }
+ }
+ }
+
+ Image {
+ id: loginButton
+ source: "assets/login.svgz"
+ smooth: true
+ sourceSize: Qt.size(passwordBox.height, passwordBox.height)
+ anchors {
+ left: passwordBox.right
+ verticalCenter: passwordBox.verticalCenter
+ }
+ anchors.leftMargin: 8
+ visible: opacity > 0
+ opacity: 0
+ MouseArea {
+ anchors.fill: parent
+ onClicked: startLogin();
+ }
+ PropertyAnimation {
+ id: showLoginButton
+ target: loginButton
+ properties: "opacity"
+ to: 0.75
+ duration: 100
+ }
+ PropertyAnimation {
+ id: hideLoginButton
+ target: loginButton
+ properties: "opacity"
+ to: 0
+ duration: 80
+ }
+ }
+}
diff --git a/x11-themes/redcore-theme-sddm/files/redcore/Main.qml b/x11-themes/redcore-theme-sddm/files/redcore/Main.qml
index 4757e0cd..986bc3d7 100644
--- a/x11-themes/redcore-theme-sddm/files/redcore/Main.qml
+++ b/x11-themes/redcore-theme-sddm/files/redcore/Main.qml
@@ -1,275 +1,481 @@
-/***************************************************************************
-* Copyright (c) 2013 Abdurrahman AVCI <abdurrahmanavci@gmail.com>
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without restriction,
-* including without limitation the rights to use, copy, modify, merge,
-* publish, distribute, sublicense, and/or sell copies of the Software,
-* and to permit persons to whom the Software is furnished to do so,
-* subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included
-* in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
-* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
-* OR OTHER DEALINGS IN THE SOFTWARE.
-*
-***************************************************************************/
-
-import QtQuick 2.0
-import SddmComponents 2.0
-
-Rectangle {
- id: container
- width: 640
- height: 480
-
- LayoutMirroring.enabled: Qt.locale().textDirection == Qt.RightToLeft
+/*
+ * Copyright 2016 David Edmundson <davidedmundson@kde.org>
+ *
+ * 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.
+ */
+
+import QtQuick 2.8
+
+import QtQuick.Layouts 1.1
+import QtQuick.Controls 1.1
+import QtGraphicalEffects 1.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 "components"
+
+PlasmaCore.ColorScope {
+ id: root
+
+ // If we're using software rendering, draw outlines instead of shadows
+ // See https://bugs.kde.org/show_bug.cgi?id=398317
+ readonly property bool softwareRendering: GraphicsInfo.api === GraphicsInfo.Software
+
+ colorGroup: PlasmaCore.Theme.ComplementaryColorGroup
+
+ width: 1600
+ height: 900
+
+ property string notificationMessage
+
+ LayoutMirroring.enabled: Qt.application.layoutDirection === Qt.RightToLeft
LayoutMirroring.childrenInherit: true
- TextConstants { id: textConstants }
-
- Connections {
- target: sddm
-
- onLoginSucceeded: {
- errorMessage.color = "steelblue"
- errorMessage.text = textConstants.loginSucceeded
- }
-
- onLoginFailed: {
- password.text = ""
- errorMessage.color = "red"
- errorMessage.text = textConstants.loginFailed
- }
+ PlasmaCore.DataSource {
+ id: keystateSource
+ engine: "keystate"
+ connectedSources: "Caps Lock"
}
- Background {
+ Item {
+ id: wallpaper
anchors.fill: parent
- source: config.background
- fillMode: Image.PreserveAspectCrop
- onStatusChanged: {
- if (status == Image.Error && source != config.defaultBackground) {
- source = config.defaultBackground
+ Repeater {
+ model: screenModel
+
+ Background {
+ x: geometry.x; y: geometry.y; width: geometry.width; height: geometry.height
+ sceneBackgroundType: config.type
+ sceneBackgroundColor: config.color
+ sceneBackgroundImage: config.background
}
}
}
- Rectangle {
+ MouseArea {
+ id: loginScreenRoot
anchors.fill: parent
- color: "transparent"
- //visible: primaryScreen
- Clock {
- id: clock
- anchors.margins: 5
- anchors.top: parent.top; anchors.right: parent.right
+ property bool uiVisible: true
+ property bool blockUI: mainStack.depth > 1 || userListComponent.mainPasswordBox.text.length > 0 || inputPanel.keyboardActive || config.type !== "image"
+
+ hoverEnabled: true
+ drag.filterChildren: true
+ onPressed: uiVisible = true;
+ onPositionChanged: uiVisible = true;
+ onUiVisibleChanged: {
+ if (blockUI) {
+ fadeoutTimer.running = false;
+ } else if (uiVisible) {
+ fadeoutTimer.restart();
+ }
+ }
+ onBlockUIChanged: {
+ if (blockUI) {
+ fadeoutTimer.running = false;
+ uiVisible = true;
+ } else {
+ fadeoutTimer.restart();
+ }
+ }
- color: "white"
- timeFont.family: "Oxygen"
+ Keys.onPressed: {
+ uiVisible = true;
+ event.accepted = false;
}
- Image {
- id: rectangle
- anchors.centerIn: parent
- width: Math.max(320, mainColumn.implicitWidth + 50)
- height: Math.max(320, mainColumn.implicitHeight + 50)
-
- source: "rectangle.png"
-
- Column {
- id: mainColumn
- anchors.centerIn: parent
- spacing: 12
- Text {
- anchors.horizontalCenter: parent.horizontalCenter
- color: "black"
- verticalAlignment: Text.AlignVCenter
- height: text.implicitHeight
- width: parent.width
- text: textConstants.welcomeText.arg(sddm.hostName)
- wrapMode: Text.WordWrap
- font.pixelSize: 24
- elide: Text.ElideRight
- horizontalAlignment: Text.AlignHCenter
+ //takes one full minute for the ui to disappear
+ Timer {
+ id: fadeoutTimer
+ running: true
+ interval: 60000
+ onTriggered: {
+ if (!loginScreenRoot.blockUI) {
+ loginScreenRoot.uiVisible = false;
}
+ }
+ }
+ WallpaperFader {
+ visible: config.type === "image"
+ anchors.fill: parent
+ state: loginScreenRoot.uiVisible ? "on" : "off"
+ source: wallpaper
+ mainStack: mainStack
+ footer: footer
+ clock: clock
+ }
- Column {
- width: parent.width
- spacing: 4
- Text {
- id: lblName
- width: parent.width
- text: textConstants.userName
- font.bold: true
- font.pixelSize: 12
- }
+ DropShadow {
+ id: clockShadow
+ anchors.fill: clock
+ source: clock
+ visible: !softwareRendering
+ horizontalOffset: 1
+ verticalOffset: 1
+ radius: 6
+ samples: 14
+ spread: 0.3
+ color: "black" // matches Breeze window decoration and desktopcontainment
+ Behavior on opacity {
+ OpacityAnimator {
+ duration: 1000
+ easing.type: Easing.InOutQuad
+ }
+ }
+ }
+
+ Clock {
+ id: clock
+ visible: y > 0
+ property Item shadow: clockShadow
+ y: (userListComponent.userList.y + mainStack.y)/2 - height/2
+ anchors.horizontalCenter: parent.horizontalCenter
+ }
- TextBox {
- id: name
- width: parent.width; height: 30
- text: userModel.lastUser
- font.pixelSize: 14
- KeyNavigation.backtab: rebootButton; KeyNavigation.tab: password
+ StackView {
+ id: mainStack
+ anchors {
+ left: parent.left
+ right: parent.right
+ }
+ height: root.height + units.gridUnit * 3
+
+ focus: true //StackView is an implicit focus scope, so we need to give this focus so the item inside will have it
+
+ Timer {
+ //SDDM has a bug in 0.13 where even though we set the focus on the right item within the window, the window doesn't have focus
+ //it is fixed in 6d5b36b28907b16280ff78995fef764bb0c573db which will be 0.14
+ //we need to call "window->activate()" *After* it's been shown. We can't control that in QML so we use a shoddy timer
+ //it's been this way for all Plasma 5.x without a huge problem
+ running: true
+ repeat: false
+ interval: 200
+ onTriggered: mainStack.forceActiveFocus()
+ }
- Keys.onPressed: {
- if (event.key === Qt.Key_Return || event.key === Qt.Key_Enter) {
- sddm.login(name.text, password.text, session.index)
- event.accepted = true
- }
- }
- }
- }
+ initialItem: Login {
+ id: userListComponent
+ userListModel: userModel
+ userListCurrentIndex: userModel.lastIndex >= 0 ? userModel.lastIndex : 0
+ lastUserName: userModel.lastUser
+
+ usernameFontSize: root.generalFontSize
+ usernameFontColor: root.generalFontColor
- Column {
- width: parent.width
- spacing : 4
- Text {
- id: lblPassword
- width: parent.width
- text: textConstants.password
- font.bold: true
- font.pixelSize: 12
- }
+ showUserList: {
+ if ( !userListModel.hasOwnProperty("count")
+ || !userListModel.hasOwnProperty("disableAvatarsThreshold"))
+ return (userList.y + mainStack.y) > 0
- PasswordBox {
- id: password
- width: parent.width; height: 30
- font.pixelSize: 14
+ if ( userListModel.count == 0 ) return false
- KeyNavigation.backtab: name; KeyNavigation.tab: session
+ return userListModel.count <= userListModel.disableAvatarsThreshold && (userList.y + mainStack.y) > 0
+ }
- Keys.onPressed: {
- if (event.key === Qt.Key_Return || event.key === Qt.Key_Enter) {
- sddm.login(name.text, password.text, session.index)
- event.accepted = true
- }
- }
+ notificationMessage: {
+ var text = ""
+ if (keystateSource.data["Caps Lock"]["Locked"]) {
+ text += i18nd("plasma_lookandfeel_org.kde.lookandfeel","Caps Lock is on")
+ if (root.notificationMessage) {
+ text += " • "
}
}
+ text += root.notificationMessage
+ return text
+ }
- Row {
- spacing: 4
- width: parent.width / 2
- z: 100
-
- Column {
- z: 100
- width: parent.width * 1.3
- spacing : 4
- anchors.bottom: parent.bottom
-
- Text {
- id: lblSession
- width: parent.width
- text: textConstants.session
- wrapMode: TextEdit.WordWrap
- font.bold: true
- font.pixelSize: 12
- }
+ actionItems: [
+ ActionButton {
+ iconSource: "/usr/share/sddm/themes/Orchis/assets/suspend_primary.svgz"
+ text: i18ndc("plasma_lookandfeel_org.kde.lookandfeel","Suspend to RAM","Sleep")
+ onClicked: sddm.suspend()
+ enabled: sddm.canSuspend
+ visible: !inputPanel.keyboardActive
+ },
+ ActionButton {
+ iconSource: "/usr/share/sddm/themes/Orchis/assets/restart_primary.svgz"
+ text: i18nd("plasma_lookandfeel_org.kde.lookandfeel","Restart")
+ onClicked: sddm.reboot()
+ enabled: sddm.canReboot
+ visible: !inputPanel.keyboardActive
+ },
+ ActionButton {
+ iconSource: "/usr/share/sddm/themes/Orchis/assets/shutdown_primary.svgz"
+ text: i18nd("plasma_lookandfeel_org.kde.lookandfeel","Shut Down")
+ onClicked: sddm.powerOff()
+ enabled: sddm.canPowerOff
+ visible: !inputPanel.keyboardActive
+ },
+ ActionButton {
+ iconSource: "/usr/share/sddm/themes/Orchis/assets/switch_primary.svgz"
+ text: i18ndc("plasma_lookandfeel_org.kde.lookandfeel", "For switching to a username and password prompt", "Other...")
+ onClicked: mainStack.push(userPromptComponent)
+ enabled: true
+ visible: !userListComponent.showUsernamePrompt && !inputPanel.keyboardActive
+ }]
+
+ onLoginRequest: {
+ root.notificationMessage = ""
+ sddm.login(username, password, sessionButton.currentIndex)
+ }
+ }
- ComboBox {
- id: session
- width: parent.width; height: 30
- font.pixelSize: 14
+ Behavior on opacity {
+ OpacityAnimator {
+ duration: units.longDuration
+ }
+ }
+ }
- arrowIcon: "angle-down.png"
+ Loader {
+ id: inputPanel
+ state: "hidden"
+ property bool keyboardActive: item ? item.active : false
+ onKeyboardActiveChanged: {
+ if (keyboardActive) {
+ state = "visible"
+ } else {
+ state = "hidden";
+ }
+ }
+ source: "components/VirtualKeyboard.qml"
+ anchors {
+ left: parent.left
+ right: parent.right
+ }
- model: sessionModel
- index: sessionModel.lastIndex
+ function showHide() {
+ state = state == "hidden" ? "visible" : "hidden";
+ }
- KeyNavigation.backtab: password; KeyNavigation.tab: layoutBox
+ states: [
+ State {
+ name: "visible"
+ PropertyChanges {
+ target: mainStack
+ y: Math.min(0, root.height - inputPanel.height - userListComponent.visibleBoundary)
+ }
+ PropertyChanges {
+ target: inputPanel
+ y: root.height - inputPanel.height
+ opacity: 1
+ }
+ },
+ State {
+ name: "hidden"
+ PropertyChanges {
+ target: mainStack
+ y: 0
+ }
+ PropertyChanges {
+ target: inputPanel
+ y: root.height - root.height/4
+ opacity: 0
+ }
+ }
+ ]
+ transitions: [
+ Transition {
+ from: "hidden"
+ to: "visible"
+ SequentialAnimation {
+ ScriptAction {
+ script: {
+ inputPanel.item.activated = true;
+ Qt.inputMethod.show();
+ }
+ }
+ ParallelAnimation {
+ NumberAnimation {
+ target: mainStack
+ property: "y"
+ duration: units.longDuration
+ easing.type: Easing.InOutQuad
+ }
+ NumberAnimation {
+ target: inputPanel
+ property: "y"
+ duration: units.longDuration
+ easing.type: Easing.OutQuad
+ }
+ OpacityAnimator {
+ target: inputPanel
+ duration: units.longDuration
+ easing.type: Easing.OutQuad
+ }
}
}
-
- Column {
- z: 101
- width: parent.width * 0.7
- spacing : 4
- anchors.bottom: parent.bottom
-
- Text {
- id: lblLayout
- width: parent.width
- text: textConstants.layout
- wrapMode: TextEdit.WordWrap
- font.bold: true
- font.pixelSize: 12
+ },
+ Transition {
+ from: "visible"
+ to: "hidden"
+ SequentialAnimation {
+ ParallelAnimation {
+ NumberAnimation {
+ target: mainStack
+ property: "y"
+ duration: units.longDuration
+ easing.type: Easing.InOutQuad
+ }
+ NumberAnimation {
+ target: inputPanel
+ property: "y"
+ duration: units.longDuration
+ easing.type: Easing.InQuad
+ }
+ OpacityAnimator {
+ target: inputPanel
+ duration: units.longDuration
+ easing.type: Easing.InQuad
+ }
}
-
- LayoutBox {
- id: layoutBox
- width: parent.width; height: 30
- font.pixelSize: 14
-
- arrowIcon: "angle-down.png"
-
- KeyNavigation.backtab: session; KeyNavigation.tab: loginButton
+ ScriptAction {
+ script: {
+ Qt.inputMethod.hide();
+ }
}
}
}
+ ]
+ }
+
- Column {
- width: parent.width
- Text {
- id: errorMessage
- anchors.horizontalCenter: parent.horizontalCenter
- text: textConstants.prompt
- font.pixelSize: 10
+ Component {
+ id: userPromptComponent
+ Login {
+ showUsernamePrompt: true
+ notificationMessage: root.notificationMessage
+
+ // using a model rather than a QObject list to avoid QTBUG-75900
+ userListModel: ListModel {
+ ListElement {
+ name: ""
+ iconSource: ""
+ }
+ Component.onCompleted: {
+ // as we can't bind inside ListElement
+ setProperty(0, "name", i18nd("plasma_lookandfeel_org.kde.lookandfeel", "Type in Username and Password"));
}
}
- Row {
- spacing: 4
- anchors.horizontalCenter: parent.horizontalCenter
- property int btnWidth: Math.max(loginButton.implicitWidth,
- shutdownButton.implicitWidth,
- rebootButton.implicitWidth, 80) + 8
- Button {
- id: loginButton
- text: textConstants.login
- width: parent.btnWidth
-
- onClicked: sddm.login(name.text, password.text, session.index)
+ onLoginRequest: {
+ root.notificationMessage = ""
+ sddm.login(username, password, sessionButton.currentIndex)
+ }
- KeyNavigation.backtab: layoutBox; KeyNavigation.tab: shutdownButton
+ actionItems: [
+ ActionButton {
+ iconSource: "/usr/share/sddm/themes/Orchis/assets/suspend_primary.svgz"
+ text: i18ndc("plasma_lookandfeel_org.kde.lookandfeel","Suspend to RAM","Sleep")
+ onClicked: sddm.suspend()
+ enabled: sddm.canSuspend
+ visible: !inputPanel.keyboardActive
+ },
+ ActionButton {
+ iconSource: "/usr/share/sddm/themes/Orchis/assets/restart_primary.svgz"
+ text: i18nd("plasma_lookandfeel_org.kde.lookandfeel","Restart")
+ onClicked: sddm.reboot()
+ enabled: sddm.canReboot
+ visible: !inputPanel.keyboardActive
+ },
+ ActionButton {
+ iconSource: "/usr/share/sddm/themes/Orchis/assets/shutdown_primary.svgz"
+ text: i18nd("plasma_lookandfeel_org.kde.lookandfeel","Shut Down")
+ onClicked: sddm.powerOff()
+ enabled: sddm.canPowerOff
+ visible: !inputPanel.keyboardActive
+ },
+ ActionButton {
+ iconSource: "/usr/share/sddm/themes/Orchis/assets/switch_primary.svgz"
+ text: i18nd("plasma_lookandfeel_org.kde.lookandfeel","List Users")
+ onClicked: mainStack.pop()
+ visible: !inputPanel.keyboardActive
}
+ ]
+ }
+ }
- Button {
- id: shutdownButton
- text: textConstants.shutdown
- width: parent.btnWidth
+ //Footer
+ RowLayout {
+ id: footer
+ anchors {
+ bottom: parent.bottom
+ left: parent.left
+ right: parent.right
+ margins: units.smallSpacing
+ }
- onClicked: sddm.powerOff()
+ Behavior on opacity {
+ OpacityAnimator {
+ duration: units.longDuration
+ }
+ }
- KeyNavigation.backtab: loginButton; KeyNavigation.tab: rebootButton
- }
+ PlasmaComponents.ToolButton {
+ text: i18ndc("plasma_lookandfeel_org.kde.lookandfeel", "Button to show/hide virtual keyboard", "Virtual Keyboard")
+ font.pointSize: config.fontSize
+ iconName: inputPanel.keyboardActive ? "input-keyboard-virtual-on" : "input-keyboard-virtual-off"
+ onClicked: inputPanel.showHide()
+ visible: inputPanel.status == Loader.Ready
+ }
- Button {
- id: rebootButton
- text: textConstants.reboot
- width: parent.btnWidth
+ KeyboardButton {
+ }
- onClicked: sddm.reboot()
+ SessionButton {
+ id: sessionButton
+ }
- KeyNavigation.backtab: shutdownButton; KeyNavigation.tab: name
- }
- }
+ Item {
+ Layout.fillWidth: true
}
+
+ Battery { }
+ }
+ }
+
+ Connections {
+ target: sddm
+ onLoginFailed: {
+ notificationMessage = i18nd("plasma_lookandfeel_org.kde.lookandfeel", "Login Failed")
+ footer.enabled = true
+ mainStack.enabled = true
+ userListComponent.userList.opacity = 1
+ }
+ onLoginSucceeded: {
+ //note SDDM will kill the greeter at some random point after this
+ //there is no certainty any transition will finish, it depends on the time it
+ //takes to complete the init
+ mainStack.opacity = 0
+ footer.opacity = 0
+ }
+ }
+
+ onNotificationMessageChanged: {
+ if (notificationMessage) {
+ notificationResetTimer.start();
}
}
- Component.onCompleted: {
- if (name.text == "")
- name.focus = true
- else
- password.focus = true
+ Timer {
+ id: notificationResetTimer
+ interval: 3000
+ onTriggered: notificationMessage = ""
}
}
diff --git a/x11-themes/redcore-theme-sddm/files/redcore/README b/x11-themes/redcore-theme-sddm/files/redcore/README
deleted file mode 100644
index 56dfea3c..00000000
--- a/x11-themes/redcore-theme-sddm/files/redcore/README
+++ /dev/null
@@ -1 +0,0 @@
-This theme is based on SDDM Maldives theme, which is included by default in SDDM package.
diff --git a/x11-themes/redcore-theme-sddm/files/redcore/SessionButton.qml b/x11-themes/redcore-theme-sddm/files/redcore/SessionButton.qml
new file mode 100644
index 00000000..58590c83
--- /dev/null
+++ b/x11-themes/redcore-theme-sddm/files/redcore/SessionButton.qml
@@ -0,0 +1,59 @@
+/*
+ * Copyright 2016 David Edmundson <davidedmundson@kde.org>
+ *
+ * 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.
+ */
+
+import QtQuick 2.2
+
+import org.kde.plasma.core 2.0 as PlasmaCore
+import org.kde.plasma.components 2.0 as PlasmaComponents
+
+import QtQuick.Controls 1.3 as QQC
+
+PlasmaComponents.ToolButton {
+ id: root
+ property int currentIndex: -1
+
+ implicitWidth: minimumWidth
+
+ visible: menu.items.length > 1
+
+ text: i18nd("plasma_lookandfeel_org.kde.lookandfeel", "Desktop Session: %1", instantiator.objectAt(currentIndex).text || "")
+
+ font.pointSize: config.fontSize
+
+ Component.onCompleted: {
+ currentIndex = sessionModel.lastIndex
+ }
+
+ menu: QQC.Menu {
+ id: menu
+ style: BreezeMenuStyle {}
+ Instantiator {
+ id: instantiator
+ model: sessionModel
+ onObjectAdded: menu.insertItem(index, object)
+ onObjectRemoved: menu.removeItem( object )
+ delegate: QQC.MenuItem {
+ text: model.name
+ onTriggered: {
+ root.currentIndex = model.index
+ }
+ }
+ }
+ }
+}
diff --git a/x11-themes/redcore-theme-sddm/files/redcore/angle-down.png b/x11-themes/redcore-theme-sddm/files/redcore/angle-down.png
deleted file mode 100644
index 4e9aeb02..00000000
--- a/x11-themes/redcore-theme-sddm/files/redcore/angle-down.png
+++ /dev/null
Binary files differ
diff --git a/x11-themes/redcore-theme-sddm/files/redcore/assets/login.svgz b/x11-themes/redcore-theme-sddm/files/redcore/assets/login.svgz
new file mode 100644
index 00000000..a1b005b6
--- /dev/null
+++ b/x11-themes/redcore-theme-sddm/files/redcore/assets/login.svgz
Binary files differ
diff --git a/x11-themes/redcore-theme-sddm/files/redcore/assets/logout_primary.svgz b/x11-themes/redcore-theme-sddm/files/redcore/assets/logout_primary.svgz
new file mode 100644
index 00000000..fd83ef02
--- /dev/null
+++ b/x11-themes/redcore-theme-sddm/files/redcore/assets/logout_primary.svgz
Binary files differ
diff --git a/x11-themes/redcore-theme-sddm/files/redcore/assets/restart_primary.svgz b/x11-themes/redcore-theme-sddm/files/redcore/assets/restart_primary.svgz
new file mode 100644
index 00000000..e749f9b3
--- /dev/null
+++ b/x11-themes/redcore-theme-sddm/files/redcore/assets/restart_primary.svgz
Binary files differ
diff --git a/x11-themes/redcore-theme-sddm/files/redcore/assets/shutdown_primary.svgz b/x11-themes/redcore-theme-sddm/files/redcore/assets/shutdown_primary.svgz
new file mode 100644
index 00000000..03592da9
--- /dev/null
+++ b/x11-themes/redcore-theme-sddm/files/redcore/assets/shutdown_primary.svgz
Binary files differ
diff --git a/x11-themes/redcore-theme-sddm/files/redcore/assets/suspend_primary.svgz b/x11-themes/redcore-theme-sddm/files/redcore/assets/suspend_primary.svgz
new file mode 100644
index 00000000..6bbf63c9
--- /dev/null
+++ b/x11-themes/redcore-theme-sddm/files/redcore/assets/suspend_primary.svgz
Binary files differ
diff --git a/x11-themes/redcore-theme-sddm/files/redcore/assets/switch_primary.svgz b/x11-themes/redcore-theme-sddm/files/redcore/assets/switch_primary.svgz
new file mode 100644
index 00000000..5f344258
--- /dev/null
+++ b/x11-themes/redcore-theme-sddm/files/redcore/assets/switch_primary.svgz
Binary files differ
diff --git a/x11-themes/redcore-theme-sddm/files/redcore/background.jpg b/x11-themes/redcore-theme-sddm/files/redcore/background.jpg
new file mode 100644
index 00000000..a550bf7c
--- /dev/null
+++ b/x11-themes/redcore-theme-sddm/files/redcore/background.jpg
Binary files differ
diff --git a/x11-themes/redcore-theme-sddm/files/redcore/components/ActionButton.qml b/x11-themes/redcore-theme-sddm/files/redcore/components/ActionButton.qml
new file mode 100644
index 00000000..9fbd2a8a
--- /dev/null
+++ b/x11-themes/redcore-theme-sddm/files/redcore/components/ActionButton.qml
@@ -0,0 +1,128 @@
+/*
+ * Copyright 2016 David Edmundson <davidedmundson@kde.org>
+ *
+ * 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.
+ */
+
+import QtQuick 2.8
+import org.kde.plasma.core 2.0 as PlasmaCore
+import org.kde.plasma.components 2.0 as PlasmaComponents
+
+Item {
+ id: root
+ property alias text: label.text
+ property alias iconSource: icon.source
+ property alias containsMouse: mouseArea.containsMouse
+ property alias font: label.font
+ property alias labelRendering: label.renderType
+ property alias circleOpacity: iconCircle.opacity
+ property alias circleVisiblity: iconCircle.visible
+ property int fontSize: config.fontSize
+ readonly property bool softwareRendering: GraphicsInfo.api === GraphicsInfo.Software
+ signal clicked
+
+ activeFocusOnTab: true
+
+ property int iconSize: units.gridUnit * 3
+
+ implicitWidth: Math.max(iconSize + units.largeSpacing * 2, label.contentWidth)
+ implicitHeight: iconSize + units.smallSpacing + label.implicitHeight
+
+ opacity: activeFocus || containsMouse ? 1 : 0.85
+ Behavior on opacity {
+ PropertyAnimation { // OpacityAnimator makes it turn black at random intervals
+ duration: units.longDuration * 2
+ easing.type: Easing.InOutQuad
+ }
+ }
+
+ Rectangle {
+ id: iconCircle
+ anchors.centerIn: icon
+ width: iconSize + units.smallSpacing
+ height: width
+ radius: width / 2
+ color: softwareRendering ? PlasmaCore.ColorScope.backgroundColor : PlasmaCore.ColorScope.textColor
+ opacity: activeFocus || containsMouse ? (softwareRendering ? 0.8 : 0.15) : (softwareRendering ? 0.6 : 0)
+ Behavior on opacity {
+ PropertyAnimation { // OpacityAnimator makes it turn black at random intervals
+ duration: units.longDuration * 3
+ easing.type: Easing.InOutQuad
+ }
+ }
+ }
+
+ Rectangle {
+ anchors.centerIn: iconCircle
+ width: iconCircle.width
+ height: width
+ radius: width / 2
+ scale: mouseArea.containsPress ? 1 : 0
+ color: PlasmaCore.ColorScope.textColor
+ opacity: 0.15
+ Behavior on scale {
+ PropertyAnimation {
+ duration: units.shortDuration
+ easing.type: Easing.InOutQuart
+ }
+ }
+ }
+
+ PlasmaCore.IconItem {
+ id: icon
+ anchors {
+ top: parent.top
+ horizontalCenter: parent.horizontalCenter
+ }
+ width: iconSize
+ height: iconSize
+
+ colorGroup: PlasmaCore.ColorScope.colorGroup
+ active: mouseArea.containsMouse || root.activeFocus
+ }
+
+ PlasmaComponents.Label {
+ id: label
+ font.pointSize: Math.max(fontSize + 1,theme.defaultFont.pointSize + 1)
+ anchors {
+ top: icon.bottom
+ topMargin: (softwareRendering ? 1.5 : 1) * units.smallSpacing
+ left: parent.left
+ right: parent.right
+ }
+ style: softwareRendering ? Text.Outline : Text.Normal
+ styleColor: softwareRendering ? PlasmaCore.ColorScope.backgroundColor : "transparent" //no outline, doesn't matter
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignTop
+ wrapMode: Text.WordWrap
+ font.underline: root.activeFocus
+ }
+
+ MouseArea {
+ id: mouseArea
+ hoverEnabled: true
+ onClicked: root.clicked()
+ anchors.fill: parent
+ }
+
+ Keys.onEnterPressed: clicked()
+ Keys.onReturnPressed: clicked()
+ Keys.onSpacePressed: clicked()
+
+ Accessible.onPressAction: clicked()
+ Accessible.role: Accessible.Button
+ Accessible.name: label.text
+}
diff --git a/x11-themes/redcore-theme-sddm/files/redcore/components/Battery.qml b/x11-themes/redcore-theme-sddm/files/redcore/components/Battery.qml
new file mode 100644
index 00000000..2351c4de
--- /dev/null
+++ b/x11-themes/redcore-theme-sddm/files/redcore/components/Battery.qml
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2016 Kai Uwe Broulik <kde@privat.broulik.de>
+ *
+ * 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.
+ */
+
+import QtQuick 2.2
+
+import org.kde.plasma.core 2.0 as PlasmaCore
+import org.kde.plasma.components 2.0 as PlasmaComponents
+import org.kde.plasma.workspace.components 2.0 as PW
+
+Row {
+ spacing: units.smallSpacing
+ visible: pmSource.data["Battery"]["Has Cumulative"]
+
+ PlasmaCore.DataSource {
+ id: pmSource
+ engine: "powermanagement"
+ connectedSources: ["Battery", "AC Adapter"]
+ }
+
+ PW.BatteryIcon {
+ id: battery
+ hasBattery: pmSource.data["Battery"]["Has Battery"] || false
+ percent: pmSource.data["Battery"]["Percent"] || 0
+ pluggedIn: pmSource.data["AC Adapter"] ? pmSource.data["AC Adapter"]["Plugged in"] : false
+
+ height: batteryLabel.height
+ width: height
+ }
+
+ PlasmaComponents.Label {
+ id: batteryLabel
+ font.pointSize: config.fontSize
+ height: undefined
+ text: i18nd("plasma_lookandfeel_org.kde.lookandfeel","%1%", battery.percent)
+ Accessible.name: i18nd("plasma_lookandfeel_org.kde.lookandfeel","Battery at %1%", battery.percent)
+ }
+}
diff --git a/x11-themes/redcore-theme-sddm/files/redcore/components/Clock.qml b/x11-themes/redcore-theme-sddm/files/redcore/components/Clock.qml
new file mode 100644
index 00000000..6e26055c
--- /dev/null
+++ b/x11-themes/redcore-theme-sddm/files/redcore/components/Clock.qml
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2016 David Edmundson <davidedmundson@kde.org>
+ *
+ * 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.
+ */
+
+import QtQuick 2.8
+import QtQuick.Layouts 1.1
+import QtQuick.Controls 1.1
+import org.kde.plasma.core 2.0
+
+ColumnLayout {
+ readonly property bool softwareRendering: GraphicsInfo.api === GraphicsInfo.Software
+
+ Label {
+ text: Qt.formatTime(timeSource.data["Local"]["DateTime"])
+ color: ColorScope.textColor
+ style: softwareRendering ? Text.Outline : Text.Normal
+ styleColor: softwareRendering ? ColorScope.backgroundColor : "transparent" //no outline, doesn't matter
+ font.pointSize: 48
+ Layout.alignment: Qt.AlignHCenter
+ }
+ Label {
+ text: Qt.formatDate(timeSource.data["Local"]["DateTime"], Qt.DefaultLocaleLongDate)
+ color: ColorScope.textColor
+ style: softwareRendering ? Text.Outline : Text.Normal
+ styleColor: softwareRendering ? ColorScope.backgroundColor : "transparent" //no outline, doesn't matter
+ font.pointSize: 24
+ Layout.alignment: Qt.AlignHCenter
+ }
+ DataSource {
+ id: timeSource
+ engine: "time"
+ connectedSources: ["Local"]
+ interval: 1000
+ }
+}
diff --git a/x11-themes/redcore-theme-sddm/files/redcore/components/KeyboardLayoutButton.qml b/x11-themes/redcore-theme-sddm/files/redcore/components/KeyboardLayoutButton.qml
new file mode 100644
index 00000000..32edb528
--- /dev/null
+++ b/x11-themes/redcore-theme-sddm/files/redcore/components/KeyboardLayoutButton.qml
@@ -0,0 +1,52 @@
+/***************************************************************************
+ * Copyright (C) 2014 by Daniel Vrátil <dvratil@redhat.com> *
+ * *
+ * 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 . *
+ ***************************************************************************/
+
+import QtQuick 2.1
+import QtQuick.Controls 1.1 as QQC
+
+import org.kde.plasma.components 2.0 as PlasmaComponents
+
+import org.kde.plasma.workspace.keyboardlayout 1.0
+
+PlasmaComponents.ToolButton {
+
+ property int fontSize: config.fontSize
+
+ id: kbLayoutButton
+
+ iconName: "input-keyboard"
+ implicitWidth: minimumWidth
+ text: layout.currentLayoutDisplayName
+ font.pointSize: Math.max(fontSize,theme.defaultFont.pointSize)
+
+ Accessible.name: i18ndc("plasma_lookandfeel_org.kde.lookandfeel", "Button to change keyboard layout", "Switch layout")
+
+ visible: layout.layouts.length > 1
+
+ onClicked: layout.nextLayout()
+
+ KeyboardLayout {
+ id: layout
+ function nextLayout() {
+ var layouts = layout.layouts;
+ var index = (layouts.indexOf(layout.currentLayout)+1) % layouts.length;
+ layout.currentLayout = layouts[index];
+ }
+ }
+}
diff --git a/x11-themes/redcore-theme-sddm/files/redcore/components/SessionManagementScreen.qml b/x11-themes/redcore-theme-sddm/files/redcore/components/SessionManagementScreen.qml
new file mode 100644
index 00000000..5f882604
--- /dev/null
+++ b/x11-themes/redcore-theme-sddm/files/redcore/components/SessionManagementScreen.qml
@@ -0,0 +1,121 @@
+/*
+ * Copyright 2016 David Edmundson <davidedmundson@kde.org>
+ *
+ * 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.
+ */
+
+import QtQuick 2.2
+
+import QtQuick.Layouts 1.1
+import QtQuick.Controls 1.1
+
+import org.kde.plasma.core 2.0 as PlasmaCore
+import org.kde.plasma.components 2.0 as PlasmaComponents
+
+Item {
+ id: root
+
+ /*
+ * Any message to be displayed to the user, visible above the text fields
+ */
+ property alias notificationMessage: notificationsLabel.text
+
+ /*
+ * A list of Items (typically ActionButtons) to be shown in a Row beneath the prompts
+ */
+ property alias actionItems: actionItemsLayout.children
+
+ /*
+ * A model with a list of users to show in the view
+ * The following roles should exist:
+ * - name
+ * - iconSource
+ *
+ * The following are also handled:
+ * - vtNumber
+ * - displayNumber
+ * - session
+ * - isTty
+ */
+ property alias userListModel: userListView.model
+
+ /*
+ * Self explanatory
+ */
+ property alias userListCurrentIndex: userListView.currentIndex
+ property var userListCurrentModelData: userListView.currentItem === null ? [] : userListView.currentItem.m
+ property bool showUserList: true
+
+ property alias userList: userListView
+
+ property int fontSize: config.fontSize
+
+ default property alias _children: innerLayout.children
+
+ UserList {
+ id: userListView
+ visible: showUserList && y > 0
+ anchors {
+ bottom: parent.verticalCenter
+ left: parent.left
+ right: parent.right
+ }
+ }
+
+ //goal is to show the prompts, in ~16 grid units high, then the action buttons
+ //but collapse the space between the prompts and actions if there's no room
+ //ui is constrained to 16 grid units wide, or the screen
+ ColumnLayout {
+ id: prompts
+ anchors.top: parent.verticalCenter
+ anchors.topMargin: units.gridUnit * 0.5
+ anchors.left: parent.left
+ anchors.right: parent.right
+ anchors.bottom: parent.bottom
+ PlasmaComponents.Label {
+ id: notificationsLabel
+ font.pointSize: Math.max(fontSize + 1,theme.defaultFont.pointSize + 1)
+ Layout.maximumWidth: units.gridUnit * 16
+ Layout.alignment: Qt.AlignHCenter
+ Layout.fillWidth: true
+ horizontalAlignment: Text.AlignHCenter
+ wrapMode: Text.WordWrap
+ font.italic: true
+ }
+ ColumnLayout {
+ Layout.minimumHeight: implicitHeight
+ Layout.maximumHeight: units.gridUnit * 10
+ Layout.maximumWidth: units.gridUnit * 16
+ Layout.alignment: Qt.AlignHCenter
+ ColumnLayout {
+ id: innerLayout
+ Layout.alignment: Qt.AlignHCenter
+ Layout.fillWidth: true
+ }
+ Item {
+ Layout.fillHeight: true
+ }
+ }
+ Row { //deliberately not rowlayout as I'm not trying to resize child items
+ id: actionItemsLayout
+ spacing: units.largeSpacing / 2
+ Layout.alignment: Qt.AlignHCenter
+ }
+ Item {
+ Layout.fillHeight: true
+ }
+ }
+}
diff --git a/x11-themes/redcore-theme-sddm/files/redcore/components/UserDelegate.qml b/x11-themes/redcore-theme-sddm/files/redcore/components/UserDelegate.qml
new file mode 100644
index 00000000..960315df
--- /dev/null
+++ b/x11-themes/redcore-theme-sddm/files/redcore/components/UserDelegate.qml
@@ -0,0 +1,190 @@
+/*
+ * Copyright 2014 David Edmundson <davidedmundson@kde.org>
+ * Copyright 2014 Aleix Pol Gonzalez <aleixpol@blue-systems.com>
+ *
+ * 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.
+ */
+
+import QtQuick 2.8
+import org.kde.plasma.core 2.0 as PlasmaCore
+import org.kde.plasma.components 2.0 as PlasmaComponents
+
+Item {
+ id: wrapper
+
+ // If we're using software rendering, draw outlines instead of shadows
+ // See https://bugs.kde.org/show_bug.cgi?id=398317
+ readonly property bool softwareRendering: GraphicsInfo.api === GraphicsInfo.Software
+
+ property bool isCurrent: true
+
+ readonly property var m: model
+ property string name
+ property string userName
+ property string avatarPath
+ property string iconSource
+ property bool constrainText: true
+ property alias nameFontSize: usernameDelegate.font.pointSize
+ property int fontSize: config.fontSize
+ signal clicked()
+
+ property real faceSize: Math.min(width, height - usernameDelegate.height - units.smallSpacing)
+
+ opacity: isCurrent ? 1.0 : 0.5
+
+ Behavior on opacity {
+ OpacityAnimator {
+ duration: units.longDuration
+ }
+ }
+
+ // Draw a translucent background circle under the user picture
+ Rectangle {
+ anchors.centerIn: imageSource
+ width: imageSource.width - 2 // Subtract to prevent fringing
+ height: width
+ radius: width / 2
+
+ color: PlasmaCore.ColorScope.backgroundColor
+ opacity: 0.6
+ }
+
+ Item {
+ id: imageSource
+ anchors {
+ bottom: usernameDelegate.top
+ bottomMargin: units.largeSpacing
+ horizontalCenter: parent.horizontalCenter
+ }
+ Behavior on width {
+ PropertyAnimation {
+ from: faceSize
+ duration: units.longDuration * 2;
+ }
+ }
+ width: isCurrent ? faceSize : faceSize - units.largeSpacing
+ height: width
+
+ //Image takes priority, taking a full path to a file, if that doesn't exist we show an icon
+ Image {
+ id: face
+ source: wrapper.avatarPath
+ sourceSize: Qt.size(faceSize, faceSize)
+ fillMode: Image.PreserveAspectCrop
+ anchors.fill: parent
+ }
+
+ PlasmaCore.IconItem {
+ id: faceIcon
+ source: iconSource
+ visible: (face.status == Image.Error || face.status == Image.Null)
+ anchors.fill: parent
+ anchors.margins: units.gridUnit * 0.5 // because mockup says so...
+ colorGroup: PlasmaCore.ColorScope.colorGroup
+ }
+ }
+
+ ShaderEffect {
+ anchors {
+ bottom: usernameDelegate.top
+ bottomMargin: units.largeSpacing
+ horizontalCenter: parent.horizontalCenter
+ }
+
+ width: imageSource.width
+ height: imageSource.height
+
+ supportsAtlasTextures: true
+
+ property var source: ShaderEffectSource {
+ sourceItem: imageSource
+ // software rendering is just a fallback so we can accept not having a rounded avatar here
+ hideSource: wrapper.GraphicsInfo.api !== GraphicsInfo.Software
+ live: true // otherwise the user in focus will show a blurred avatar
+ }
+
+ property var colorBorder: PlasmaCore.ColorScope.textColor
+
+ //draw a circle with an antialised border
+ //innerRadius = size of the inner circle with contents
+ //outerRadius = size of the border
+ //blend = area to blend between two colours
+ //all sizes are normalised so 0.5 == half the width of the texture
+
+ //if copying into another project don't forget to connect themeChanged to update()
+ //but in SDDM that's a bit pointless
+ fragmentShader: "
+ varying highp vec2 qt_TexCoord0;
+ uniform highp float qt_Opacity;
+ uniform lowp sampler2D source;
+
+ uniform lowp vec4 colorBorder;
+ highp float blend = 0.01;
+ highp float innerRadius = 0.47;
+ highp float outerRadius = 0.49;
+ lowp vec4 colorEmpty = vec4(0.0, 0.0, 0.0, 0.0);
+
+ void main() {
+ lowp vec4 colorSource = texture2D(source, qt_TexCoord0.st);
+
+ highp vec2 m = qt_TexCoord0 - vec2(0.5, 0.5);
+ highp float dist = sqrt(m.x * m.x + m.y * m.y);
+
+ if (dist < innerRadius)
+ gl_FragColor = colorSource;
+ else if (dist < innerRadius + blend)
+ gl_FragColor = mix(colorSource, colorBorder, ((dist - innerRadius) / blend));
+ else if (dist < outerRadius)
+ gl_FragColor = colorBorder;
+ else if (dist < outerRadius + blend)
+ gl_FragColor = mix(colorBorder, colorEmpty, ((dist - outerRadius) / blend));
+ else
+ gl_FragColor = colorEmpty ;
+
+ gl_FragColor = gl_FragColor * qt_Opacity;
+ }
+ "
+ }
+
+ PlasmaComponents.Label {
+ id: usernameDelegate
+ font.pointSize: Math.max(fontSize + 2,theme.defaultFont.pointSize + 2)
+ anchors {
+ bottom: parent.bottom
+ horizontalCenter: parent.horizontalCenter
+ }
+ height: implicitHeight // work around stupid bug in Plasma Components that sets the height
+ width: constrainText ? parent.width : implicitWidth
+ text: wrapper.name
+ style: softwareRendering ? Text.Outline : Text.Normal
+ styleColor: softwareRendering ? PlasmaCore.ColorScope.backgroundColor : "transparent" //no outline, doesn't matter
+ elide: Text.ElideRight
+ horizontalAlignment: Text.AlignHCenter
+ //make an indication that this has active focus, this only happens when reached with keyboard navigation
+ font.underline: wrapper.activeFocus
+ }
+
+ MouseArea {
+ anchors.fill: parent
+ hoverEnabled: true
+
+ onClicked: wrapper.clicked();
+ }
+
+ Accessible.name: name
+ Accessible.role: Accessible.Button
+ function accessiblePressAction() { wrapper.clicked() }
+}
diff --git a/x11-themes/redcore-theme-sddm/files/redcore/components/UserList.qml b/x11-themes/redcore-theme-sddm/files/redcore/components/UserList.qml
new file mode 100644
index 00000000..a2d85088
--- /dev/null
+++ b/x11-themes/redcore-theme-sddm/files/redcore/components/UserList.qml
@@ -0,0 +1,93 @@
+/*
+ * Copyright 2014 David Edmundson <davidedmundson@kde.org>
+ *
+ * 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.
+ */
+
+import QtQuick 2.2
+
+ListView {
+ id: view
+ readonly property string selectedUser: currentItem ? currentItem.userName : ""
+ readonly property int userItemWidth: units.gridUnit * 8
+ readonly property int userItemHeight: units.gridUnit * 8
+
+ implicitHeight: userItemHeight
+
+ activeFocusOnTab : true
+
+ /*
+ * Signals that a user was explicitly selected
+ */
+ signal userSelected;
+
+ orientation: ListView.Horizontal
+ highlightRangeMode: ListView.StrictlyEnforceRange
+
+ //centre align selected item (which implicitly centre aligns the rest
+ preferredHighlightBegin: width/2 - userItemWidth/2
+ preferredHighlightEnd: preferredHighlightBegin
+
+ delegate: UserDelegate {
+ avatarPath: model.icon || ""
+ iconSource: model.iconName || "user-identity"
+
+ name: {
+ var displayName = model.realName || model.name
+
+ if (model.vtNumber === undefined || model.vtNumber < 0) {
+ return displayName
+ }
+
+ if (!model.session) {
+ return i18ndc("plasma_lookandfeel_org.kde.lookandfeel", "Nobody logged in on that session", "Unused")
+ }
+
+
+ var location = ""
+ if (model.isTty) {
+ location = i18ndc("plasma_lookandfeel_org.kde.lookandfeel", "User logged in on console number", "TTY %1", model.vtNumber)
+ } else if (model.displayNumber) {
+ location = i18ndc("plasma_lookandfeel_org.kde.lookandfeel", "User logged in on console (X display number)", "on TTY %1 (Display %2)", model.vtNumber, model.displayNumber)
+ }
+
+ if (location) {
+ return i18ndc("plasma_lookandfeel_org.kde.lookandfeel", "Username (location)", "%1 (%2)", displayName, location)
+ }
+
+ return displayName
+ }
+
+ userName: model.name
+
+ width: userItemWidth
+ height: userItemHeight
+
+ //if we only have one delegate, we don't need to clip the text as it won't be overlapping with anything
+ constrainText: ListView.view.count > 1
+
+ isCurrent: ListView.isCurrentItem
+
+ onClicked: {
+ ListView.view.currentIndex = index;
+ ListView.view.userSelected();
+ }
+ }
+
+ Keys.onEscapePressed: view.userSelected()
+ Keys.onEnterPressed: view.userSelected()
+ Keys.onReturnPressed: view.userSelected()
+}
diff --git a/x11-themes/redcore-theme-sddm/files/redcore/components/VirtualKeyboard.qml b/x11-themes/redcore-theme-sddm/files/redcore/components/VirtualKeyboard.qml
new file mode 100644
index 00000000..7848b753
--- /dev/null
+++ b/x11-themes/redcore-theme-sddm/files/redcore/components/VirtualKeyboard.qml
@@ -0,0 +1,28 @@
+/********************************************************************
+ This file is part of the KDE project.
+
+Copyright (C) 2017 Martin Gräßlin <mgraesslin@kde.org>
+
+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, see <http://www.gnu.org/licenses/>.
+*********************************************************************/
+import QtQuick 2.5
+import QtQuick.VirtualKeyboard 2.1
+
+InputPanel {
+ id: inputPanel
+ property bool activated: false
+ active: activated && Qt.inputMethod.visible
+ visible: active
+ width: parent.width
+}
diff --git a/x11-themes/redcore-theme-sddm/files/redcore/components/WallpaperFader.qml b/x11-themes/redcore-theme-sddm/files/redcore/components/WallpaperFader.qml
new file mode 100644
index 00000000..31dfe007
--- /dev/null
+++ b/x11-themes/redcore-theme-sddm/files/redcore/components/WallpaperFader.qml
@@ -0,0 +1,182 @@
+/********************************************************************
+ This file is part of the KDE project.
+
+Copyright (C) 2014 Aleix Pol Gonzalez <aleixpol@blue-systems.com>
+
+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, see <http://www.gnu.org/licenses/>.
+*********************************************************************/
+
+import QtQuick 2.6
+import QtQuick.Controls 1.1
+import QtQuick.Layouts 1.1
+import QtGraphicalEffects 1.0
+
+import org.kde.plasma.core 2.0 as PlasmaCore
+import org.kde.plasma.components 2.0 as PlasmaComponents
+
+import org.kde.plasma.private.sessions 2.0
+import "../components"
+
+Item {
+ id: wallpaperFader
+ property Item clock
+ property Item mainStack
+ property Item footer
+ property alias source: wallpaperBlur.source
+ state: lockScreenRoot.uiVisible ? "on" : "off"
+ property real factor: 0
+ readonly property bool lightBackground: Math.max(PlasmaCore.ColorScope.backgroundColor.r, PlasmaCore.ColorScope.backgroundColor.g, PlasmaCore.ColorScope.backgroundColor.b) > 0.5
+
+ Behavior on factor {
+ NumberAnimation {
+ target: wallpaperFader
+ property: "factor"
+ duration: 1000
+ easing.type: Easing.InOutQuad
+ }
+ }
+ FastBlur {
+ id: wallpaperBlur
+ anchors.fill: parent
+ radius: 50 * wallpaperFader.factor
+ }
+ ShaderEffect {
+ id: wallpaperShader
+ anchors.fill: parent
+ supportsAtlasTextures: true
+ property var source: ShaderEffectSource {
+ sourceItem: wallpaperBlur
+ live: true
+ hideSource: true
+ textureMirroring: ShaderEffectSource.NoMirroring
+ }
+
+ readonly property real contrast: 0.65 * wallpaperFader.factor + (1 - wallpaperFader.factor)
+ readonly property real saturation: 1.6 * wallpaperFader.factor + (1 - wallpaperFader.factor)
+ readonly property real intensity: (wallpaperFader.lightBackground ? 1.7 : 0.6) * wallpaperFader.factor + (1 - wallpaperFader.factor)
+
+ readonly property real transl: (1.0 - contrast) / 2.0;
+ readonly property real rval: (1.0 - saturation) * 0.2126;
+ readonly property real gval: (1.0 - saturation) * 0.7152;
+ readonly property real bval: (1.0 - saturation) * 0.0722;
+
+ property var colorMatrix: Qt.matrix4x4(
+ contrast, 0, 0, 0.0,
+ 0, contrast, 0, 0.0,
+ 0, 0, contrast, 0.0,
+ transl, transl, transl, 1.0).times(Qt.matrix4x4(
+ rval + saturation, rval, rval, 0.0,
+ gval, gval + saturation, gval, 0.0,
+ bval, bval, bval + saturation, 0.0,
+ 0, 0, 0, 1.0)).times(Qt.matrix4x4(
+ intensity, 0, 0, 0,
+ 0, intensity, 0, 0,
+ 0, 0, intensity, 0,
+ 0, 0, 0, 1
+ ));
+
+
+ fragmentShader: "
+ uniform mediump mat4 colorMatrix;
+ uniform mediump sampler2D source;
+ varying mediump vec2 qt_TexCoord0;
+ uniform lowp float qt_Opacity;
+
+ void main(void)
+ {
+ mediump vec4 tex = texture2D(source, qt_TexCoord0);
+ gl_FragColor = tex * colorMatrix * qt_Opacity;
+ }"
+ }
+
+ states: [
+ State {
+ name: "on"
+ PropertyChanges {
+ target: mainStack
+ opacity: 1
+ }
+ PropertyChanges {
+ target: footer
+ opacity: 1
+ }
+ PropertyChanges {
+ target: wallpaperFader
+ factor: 1
+ }
+ PropertyChanges {
+ target: clock.shadow
+ opacity: 0
+ }
+ },
+ State {
+ name: "off"
+ PropertyChanges {
+ target: mainStack
+ opacity: 0
+ }
+ PropertyChanges {
+ target: footer
+ opacity: 0
+ }
+ PropertyChanges {
+ target: wallpaperFader
+ factor: 0
+ }
+ PropertyChanges {
+ target: clock.shadow
+ opacity: 1
+ }
+ }
+ ]
+ transitions: [
+ Transition {
+ from: "off"
+ to: "on"
+ //Note: can't use animators as they don't play well with parallelanimations
+ ParallelAnimation {
+ NumberAnimation {
+ target: mainStack
+ property: "opacity"
+ duration: units.longDuration
+ easing.type: Easing.InOutQuad
+ }
+ NumberAnimation {
+ target: footer
+ property: "opacity"
+ duration: units.longDuration
+ easing.type: Easing.InOutQuad
+ }
+ }
+ },
+ Transition {
+ from: "on"
+ to: "off"
+ ParallelAnimation {
+ NumberAnimation {
+ target: mainStack
+ property: "opacity"
+ duration: 500
+ easing.type: Easing.InOutQuad
+ }
+ NumberAnimation {
+ target: footer
+ property: "opacity"
+ duration: 500
+ easing.type: Easing.InOutQuad
+ }
+ }
+ }
+ ]
+}
diff --git a/x11-themes/redcore-theme-sddm/files/redcore/metadata.desktop b/x11-themes/redcore-theme-sddm/files/redcore/metadata.desktop
index de2d7e1e..26e37838 100644
--- a/x11-themes/redcore-theme-sddm/files/redcore/metadata.desktop
+++ b/x11-themes/redcore-theme-sddm/files/redcore/metadata.desktop
@@ -1,15 +1,16 @@
[SddmGreeterTheme]
Name=Redcore
-Description=Redcore Theme
-Author=Ghiunhan Mamut
-Copyright=(c) 2017, Ghiunhan Mamut
+Description=ChromeOS Theme
+Author=Vince Liuice
+Copyright=(c) 2020, Vince Liuice
License=CC-BY-SA
Type=sddm-theme
-Version=0.1
-Website=https://redcorelinux.org
+Version=0.1.0
+Website=https://github.com/vinceliuice/Orchis-kde
+Screenshot=preview.png
MainScript=Main.qml
ConfigFile=theme.conf
TranslationsDirectory=translations
-Email=venerix@redcorelinux.org
-Theme-Id=redcore
-Theme-API=${COMPONENTS_VERSION}
+Email=vinceliuice@hotmail.com
+Theme-Id=Orchis
+Theme-API=2.0
diff --git a/x11-themes/redcore-theme-sddm/files/redcore/rectangle.png b/x11-themes/redcore-theme-sddm/files/redcore/rectangle.png
deleted file mode 100644
index 791b26c9..00000000
--- a/x11-themes/redcore-theme-sddm/files/redcore/rectangle.png
+++ /dev/null
Binary files differ
diff --git a/x11-themes/redcore-theme-sddm/files/redcore/redcore.png b/x11-themes/redcore-theme-sddm/files/redcore/redcore.png
deleted file mode 100644
index 9eb8b888..00000000
--- a/x11-themes/redcore-theme-sddm/files/redcore/redcore.png
+++ /dev/null
Binary files differ
diff --git a/x11-themes/redcore-theme-sddm/files/redcore/theme.conf b/x11-themes/redcore-theme-sddm/files/redcore/theme.conf
index 4e884605..53dfe0ad 100644
--- a/x11-themes/redcore-theme-sddm/files/redcore/theme.conf
+++ b/x11-themes/redcore-theme-sddm/files/redcore/theme.conf
@@ -1,2 +1,5 @@
[General]
-background=redcore.png
+type=image
+color=#520A0A
+fontSize=10
+background=background.jpg
diff --git a/x11-themes/redcore-theme-sddm/files/redcore/theme.conf.user b/x11-themes/redcore-theme-sddm/files/redcore/theme.conf.user
new file mode 100644
index 00000000..68c66429
--- /dev/null
+++ b/x11-themes/redcore-theme-sddm/files/redcore/theme.conf.user
@@ -0,0 +1,2 @@
+[General]
+type=image