kde/sddm: vendor as a full-fork recipe (path=source, patches baked)
Convert the transient git-fetch sddm recipe to the vendored model: commit the source/ tree (pristine sddm @63780fcd + the two Redox patches baked in), switch [source] to path="source" so the build never reaches github at cook time, and keep the .patch files tracked for re-application on a version bump. Also fixes the malformed redox-helper-utmpx-stub.patch (wrong hunk line-counts -> 'malformed patch at line 24') by regenerating it with correct headers. First of the 26 transient recipes being vendored for an offline, reproducible full-fork build.
@@ -32,8 +32,6 @@ local/recipes/dev/ninja-build/source
|
||||
# Bump-recipe cache used by local/scripts/bump-graphics-recipes.sh.
|
||||
# Cache is fetched from upstream release indexes; reproducible from script run.
|
||||
.redbear-recipe-bump/
|
||||
local/recipes/kde/sddm/source
|
||||
local/recipes/kde/sddm/source-pristine
|
||||
|
||||
# Build artifacts — target/ dirs are everywhere
|
||||
target
|
||||
|
||||
@@ -7,16 +7,19 @@ version = "0.3.1"
|
||||
# XcbKeyboardBackend removed from greeter; XorgDisplayServer/XorgUserDisplayServer/XAuth
|
||||
# removed from daemon. Default display server fallback is Wayland.
|
||||
[source]
|
||||
git = "https://github.com/sddm/sddm.git"
|
||||
rev = "63780fcd79f1dbf81a30eef48c28c699ab15aded"
|
||||
patches = [
|
||||
# Redox has no Linux/FreeBSD VT subsystem (VT_ACTIVATE/VT_WAITACTIVE/KDSETMODE
|
||||
# etc.); stub SDDM::VirtualTerminal to no-ops (greeter runs on the compositor).
|
||||
"redox-virtualterminal-stub.patch",
|
||||
# Redox has no utmp/utmpx login-accounting DB; stub sddm-helper's
|
||||
# utmpLogin/utmpLogout to no-ops (skip <utmpx.h>).
|
||||
"redox-helper-utmpx-stub.patch",
|
||||
]
|
||||
# Vendored local fork (full-fork model): build from the committed source/ tree so
|
||||
# the distro builds offline/reproducibly, immune to upstream mirror churn. source/
|
||||
# = pristine upstream + the Redox patches below BAKED IN. The .patch files are kept
|
||||
# tracked (and source.tar holds the pristine snapshot) so a version bump can
|
||||
# re-apply them to a newer upstream via sync-recipe-source.sh.
|
||||
# upstream: https://github.com/sddm/sddm.git
|
||||
# rev: 63780fcd79f1dbf81a30eef48c28c699ab15aded
|
||||
# patches (baked into source/):
|
||||
# redox-virtualterminal-stub.patch — Redox has no Linux/FreeBSD VT subsystem
|
||||
# (VT_ACTIVATE/VT_WAITACTIVE/KDSETMODE); stub SDDM::VirtualTerminal to no-ops.
|
||||
# redox-helper-utmpx-stub.patch — Redox has no utmp/utmpx login-accounting;
|
||||
# stub sddm-helper's utmpLogin/utmpLogout to no-ops (skip <utmpx.h>).
|
||||
path = "source"
|
||||
|
||||
[build]
|
||||
template = "custom"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
--- a/src/helper/HelperApp.cpp
|
||||
+++ b/src/helper/HelperApp.cpp
|
||||
--- a/src/helper/HelperApp.cpp 2026-08-01 04:21:31.968403136 +0300
|
||||
+++ b/src/helper/HelperApp.cpp 2026-08-01 04:24:37.190803255 +0300
|
||||
@@ -41,7 +41,9 @@
|
||||
#if defined(Q_OS_LINUX)
|
||||
#include <utmp.h>
|
||||
@@ -10,7 +10,7 @@
|
||||
#include <QByteArray>
|
||||
#include <signal.h>
|
||||
|
||||
@@ -301,6 +303,10 @@
|
||||
@@ -301,6 +303,12 @@
|
||||
}
|
||||
|
||||
void HelperApp::utmpLogin(const QString &vt, const QString &displayName, const QString &user, qint64 pid, bool authSuccessful) {
|
||||
@@ -23,7 +23,7 @@
|
||||
struct utmpx entry { };
|
||||
struct timeval tv;
|
||||
|
||||
@@ -339,9 +345,14 @@
|
||||
@@ -339,9 +347,16 @@
|
||||
#if defined(Q_OS_LINUX)
|
||||
updwtmpx(authSuccessful ? "/var/log/wtmp" : "/var/log/btmp", &entry);
|
||||
#endif
|
||||
@@ -40,7 +40,7 @@
|
||||
struct utmpx entry { };
|
||||
struct timeval tv;
|
||||
|
||||
@@ -378,6 +389,7 @@
|
||||
@@ -378,6 +393,7 @@
|
||||
#elif defined(Q_OS_FREEBSD)
|
||||
pututxline(&entry);
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
# ==[ Subject: One line only short meaningful description for logs ]===|
|
||||
|
||||
|
||||
# ==[ Details: Describe what changed and explain why it changed ]======|
|
||||
|
||||
|
||||
# Change log entry (see below for instructions).
|
||||
#[ChangeLog][][]
|
||||
|
||||
# ==[ Footers: Uncomment and edit where applicable ]===================|
|
||||
#
|
||||
# One issue per entry. Remember space after colon.
|
||||
#Issue:
|
||||
#
|
||||
# If this commit closes an issue use this. Remember space after colon.
|
||||
#Closes:
|
||||
#
|
||||
# ==[ Please wrap at 72 characters ]===================================|
|
||||
#
|
||||
# Change log entry: If this commit adds a significant feature, fixes an
|
||||
# issue or contains a behavior change that is relevant to others,
|
||||
# add a change log entry. It can be multiple lines long and ends with an
|
||||
# empty newline. Try to integrate it into the flow of the commit message
|
||||
# to avoid redundancy.
|
||||
# Use the module name to indicate the area of the change e.g. [Greeter].
|
||||
# Optionally specify a class or subtopic [Daemon][Display].
|
||||
# Other common tags are: [General] or [Important Behavior Changes].
|
||||
#
|
||||
# [ChangeLog][module][class/topic] description of the really important
|
||||
# change that was just made on several lines.
|
||||
@@ -0,0 +1,17 @@
|
||||
# remove files from deployment using `git archive`
|
||||
|
||||
# common files
|
||||
.commit-template export-ignore
|
||||
.gitattributes export-ignore
|
||||
.gitignore export-ignore
|
||||
.mailmap export-ignore
|
||||
.travis.yml export-ignore
|
||||
|
||||
# several files and directories we never want to export
|
||||
# a little bit belt and braces as the most of these files
|
||||
# should never ever be in the repository
|
||||
|
||||
*~ export-ignore
|
||||
.kdev4 export-ignore
|
||||
*build* export-ignore
|
||||
*.user export-ignore
|
||||
@@ -0,0 +1,98 @@
|
||||
name: CI
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- develop
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
- develop
|
||||
|
||||
env:
|
||||
CLAZY_CHECKS: "level1"
|
||||
|
||||
jobs:
|
||||
build:
|
||||
if: "!contains(github.event.head_commit.message, 'ci skip')"
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
container-image:
|
||||
- "quay.io/fedora/fedora:rawhide"
|
||||
- "quay.io/centos/centos:stream9"
|
||||
- "registry.opensuse.org/opensuse/tumbleweed-dnf"
|
||||
- "docker.io/library/ubuntu:22.04"
|
||||
- "docker.io/library/ubuntu:23.04"
|
||||
compiler:
|
||||
- gcc
|
||||
- clang
|
||||
qt:
|
||||
- "qt5"
|
||||
include:
|
||||
- container-image: "docker.io/library/ubuntu:23.04"
|
||||
compiler: clang
|
||||
qt: "qt6"
|
||||
- container-image: "docker.io/library/ubuntu:23.04"
|
||||
compiler: gcc
|
||||
qt: "qt6"
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
container:
|
||||
image: ${{ matrix.container-image }}
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Dependencies (rpm-type)
|
||||
if: ${{ contains(matrix.container-image, 'fedora') || contains(matrix.container-image, 'centos') || contains(matrix.container-image, 'opensuse') }}
|
||||
run: |
|
||||
set -x
|
||||
dnf --assumeyes install dnf-plugins-core
|
||||
if [[ "${{ matrix.container-image }}" =~ "centos" ]]; then dnf --assumeyes config-manager --set-enabled crb && dnf --assumeyes install epel-release; fi
|
||||
dnf --assumeyes builddep sddm
|
||||
if [ "${{ matrix.qt }}" = "qt5" ] && [[ "${{ matrix.container-image }}" =~ "fedora" ]]; then dnf --assumeyes install qt5-qtbase-devel qt5-qtdeclarative-devel qt5-qttools-devel; fi
|
||||
dnf --assumeyes --allowerasing --nobest install clang clazy
|
||||
- name: Dependencies (deb-type)
|
||||
if: ${{ contains(matrix.container-image, 'ubuntu') }}
|
||||
run: |
|
||||
set -x
|
||||
sed -i '/^#\sdeb-src /s/^#//' "/etc/apt/sources.list"
|
||||
apt-get update -y
|
||||
DEBIAN_FRONTEND=noninteractive apt-get build-dep sddm -y
|
||||
if [ "${{ matrix.qt }}" = "qt6" ]; then
|
||||
DEBIAN_FRONTEND=noninteractive apt-get install clang clazy qt6-base-dev qt6-base-dev-tools qt6-tools-dev qt6-declarative-dev qml6-module-qtqml-workerscript qml6-module-qtquick-window -y
|
||||
else
|
||||
DEBIAN_FRONTEND=noninteractive apt-get install clang clazy qml-module-qttest -y
|
||||
fi
|
||||
- name: Build
|
||||
run: |
|
||||
set -x
|
||||
mkdir -p build
|
||||
cd build
|
||||
if [ "${{ matrix.qt }}" = "qt6" ]; then
|
||||
BUILD_WITH_QT6=ON
|
||||
else
|
||||
BUILD_WITH_QT6=OFF
|
||||
fi
|
||||
if [ "${{ matrix.compiler }}" = "clang" ]; then
|
||||
export CC=clang
|
||||
#export CXX=clang++
|
||||
export CXX=clazy
|
||||
fi
|
||||
if [ -f "/usr/etc/login.defs" ]; then
|
||||
export LOGIN_DEFS_PATH="/usr/etc/login.defs"
|
||||
else
|
||||
export LOGIN_DEFS_PATH="/etc/login.defs"
|
||||
fi
|
||||
cmake .. \
|
||||
-DBUILD_MAN_PAGES:BOOL=ON \
|
||||
-DBUILD_WITH_QT6:BOOL=${BUILD_WITH_QT6} \
|
||||
-DLOGIN_DEFS_PATH:PATH="${LOGIN_DEFS_PATH}"
|
||||
make -j $(getconf _NPROCESSORS_ONLN)
|
||||
make install
|
||||
- name: Test
|
||||
env:
|
||||
CTEST_OUTPUT_ON_FAILURE: "1"
|
||||
working-directory: build
|
||||
run: make test
|
||||
@@ -0,0 +1,28 @@
|
||||
name: Checks
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- develop
|
||||
tags:
|
||||
- v*
|
||||
pull_request:
|
||||
types:
|
||||
- opened
|
||||
- synchronize
|
||||
- reopened
|
||||
- edited
|
||||
|
||||
jobs:
|
||||
qml:
|
||||
if: "!contains(github.event.head_commit.message, 'ci skip')"
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 1
|
||||
- name: Validate QML and JavaScript files
|
||||
uses: liri-infra/qmllint-action@8bfbc8ec90b2f48147db9b47403448eda7b20a31
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
@@ -0,0 +1,3 @@
|
||||
/build/
|
||||
*~
|
||||
*.user
|
||||
@@ -0,0 +1,9 @@
|
||||
Nathan Weber <supernathansunshine@gmail.com>
|
||||
Nikita Mikhailov <nslqqq@gmail.com>
|
||||
Andrea Scarpino <me@andreascarpino.it> <andrea@archlinux.org>
|
||||
Isaque Galdino <igaldino@gmail.com> <izup@fake.com>
|
||||
raffarti <raffarti@zoho.com> <raffarti@localhost.localdomain>
|
||||
Martin Briza <mbriza@redhat.com> <m@rtinbriza.cz>
|
||||
David Edmundson <kde@davidedmundson.co.uk> <david@davidedmundson.co.uk>
|
||||
Pier Luigi Fiorini <pierluigi.fiorini@liri.io> <pierluigi.fiorini@gmail.com>
|
||||
Pier Luigi Fiorini <pierluigi.fiorini@liri.io> <plfiorini@users.noreply.github.com>
|
||||
@@ -0,0 +1 @@
|
||||
63780fcd79f1
|
||||
@@ -0,0 +1,234 @@
|
||||
cmake_minimum_required(VERSION 3.4)
|
||||
|
||||
project(SDDM)
|
||||
|
||||
set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
||||
set(CMAKE_AUTOMOC ON)
|
||||
SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
|
||||
|
||||
# Set version
|
||||
set(SDDM_VERSION_MAJOR 0)
|
||||
set(SDDM_VERSION_MINOR 21)
|
||||
set(SDDM_VERSION_PATCH 0)
|
||||
set(SDDM_VERSION_STRING "${SDDM_VERSION_MAJOR}.${SDDM_VERSION_MINOR}.${SDDM_VERSION_PATCH}")
|
||||
add_compile_definitions("SDDM_VERSION=\"${SDDM_VERSION_STRING}\"")
|
||||
|
||||
# Options
|
||||
option(BUILD_MAN_PAGES "Build man pages" OFF)
|
||||
option(ENABLE_JOURNALD "Enable logging to journald" ON)
|
||||
option(NO_SYSTEMD "Disable systemd support" OFF)
|
||||
option(USE_ELOGIND "Use elogind instead of logind" OFF)
|
||||
option(BUILD_WITH_QT6 "Build with Qt 6" OFF)
|
||||
option(INSTALL_PAM_CONFIGURATION "Install PAM configuration files" ON)
|
||||
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
|
||||
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake;${CMAKE_MODULE_PATH}")
|
||||
|
||||
# Definitions
|
||||
add_definitions(-Wall -Wextra -DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_FROM_BYTEARRAY -DQT_NO_FOREACH)
|
||||
|
||||
# Default build type
|
||||
if(NOT CMAKE_BUILD_TYPE)
|
||||
set(CMAKE_BUILD_TYPE Release)
|
||||
endif()
|
||||
|
||||
# Handle build type
|
||||
if(CMAKE_BUILD_TYPE MATCHES [Dd]ebug)
|
||||
message(STATUS "Debug build")
|
||||
add_definitions(-DDEBUG)
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -O0")
|
||||
else()
|
||||
message(STATUS "Release build")
|
||||
add_definitions(-DNDEBUG)
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2")
|
||||
endif()
|
||||
|
||||
# Default absolute paths
|
||||
if(NOT DEFINED CMAKE_INSTALL_SYSCONFDIR)
|
||||
set(CMAKE_INSTALL_SYSCONFDIR "/etc")
|
||||
endif()
|
||||
if(NOT DEFINED CMAKE_INSTALL_LOCALSTATEDIR)
|
||||
set(CMAKE_INSTALL_LOCALSTATEDIR "/var")
|
||||
endif()
|
||||
|
||||
# Standard installation paths
|
||||
include(GNUInstallDirs)
|
||||
|
||||
# Macros
|
||||
include(FeatureSummary)
|
||||
|
||||
# PKG-CONFIG
|
||||
find_package(PkgConfig)
|
||||
|
||||
# PAM
|
||||
find_package(PAM REQUIRED)
|
||||
|
||||
# XAU
|
||||
pkg_check_modules(LIBXAU REQUIRED "xau")
|
||||
|
||||
# XCB
|
||||
find_package(XCB REQUIRED)
|
||||
|
||||
# XKB
|
||||
find_package(XKB REQUIRED)
|
||||
|
||||
# Qt
|
||||
if(BUILD_WITH_QT6)
|
||||
set(QT_MAJOR_VERSION 6)
|
||||
message(STATUS "Building Qt 6 version")
|
||||
else()
|
||||
set(QT_MAJOR_VERSION 5)
|
||||
message(STATUS "Building Qt 5 version")
|
||||
endif()
|
||||
|
||||
find_package(Qt${QT_MAJOR_VERSION} 5.15.0 CONFIG REQUIRED Core DBus Gui Qml Quick LinguistTools Test QuickTest)
|
||||
|
||||
# find qt5 imports dir
|
||||
get_target_property(QMAKE_EXECUTABLE Qt${QT_MAJOR_VERSION}::qmake LOCATION)
|
||||
if(NOT QT_IMPORTS_DIR)
|
||||
execute_process(COMMAND ${QMAKE_EXECUTABLE} -query QT_INSTALL_QML OUTPUT_VARIABLE QT_IMPORTS_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
endif()
|
||||
|
||||
# systemd
|
||||
if(NOT NO_SYSTEMD AND NOT USE_ELOGIND)
|
||||
pkg_check_modules(SYSTEMD "systemd")
|
||||
endif()
|
||||
|
||||
if(SYSTEMD_FOUND)
|
||||
add_definitions(-DHAVE_SYSTEMD)
|
||||
set(CMAKE_AUTOMOC_MOC_OPTIONS -DHAVE_SYSTEMD)
|
||||
|
||||
# libsystemd-journal was merged into libsystemd in 209
|
||||
if(${SYSTEMD_VERSION} VERSION_LESS 209)
|
||||
pkg_check_modules(JOURNALD "libsystemd-journal")
|
||||
else()
|
||||
pkg_check_modules(JOURNALD "libsystemd")
|
||||
endif()
|
||||
|
||||
if(ENABLE_JOURNALD)
|
||||
if(JOURNALD_FOUND)
|
||||
add_definitions(-DHAVE_JOURNALD)
|
||||
set(CMAKE_AUTOMOC_MOC_OPTIONS -DHAVE_JOURNALD)
|
||||
else()
|
||||
message(WARNING "Disable journald support for lack of libsystemd-journal")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if (NOT DEFINED SYSTEMD_SYSTEM_UNIT_DIR)
|
||||
pkg_get_variable(SYSTEMD_SYSTEM_UNIT_DIR systemd systemdsystemunitdir)
|
||||
endif()
|
||||
|
||||
if (NOT DEFINED SYSTEMD_SYSUSERS_DIR)
|
||||
pkg_get_variable(SYSTEMD_SYSUSERS_DIR systemd sysusersdir)
|
||||
endif()
|
||||
|
||||
if (NOT DEFINED SYSTEMD_TMPFILES_DIR)
|
||||
pkg_get_variable(SYSTEMD_TMPFILES_DIR systemd tmpfilesdir)
|
||||
endif()
|
||||
|
||||
set(HALT_COMMAND "/usr/bin/systemctl poweroff")
|
||||
set(REBOOT_COMMAND "/usr/bin/systemctl reboot")
|
||||
else()
|
||||
set(SYSTEMD_FOUND 0)
|
||||
endif()
|
||||
add_feature_info("systemd" SYSTEMD_FOUND "systemd support")
|
||||
add_feature_info("journald" JOURNALD_FOUND "journald support")
|
||||
|
||||
# elogind
|
||||
if(NO_SYSTEMD AND USE_ELOGIND)
|
||||
pkg_check_modules(ELOGIND "libelogind")
|
||||
endif()
|
||||
|
||||
if(ELOGIND_FOUND)
|
||||
add_definitions(-DHAVE_ELOGIND)
|
||||
set(CMAKE_AUTOMOC_MOC_OPTIONS -DHAVE_ELOGIND)
|
||||
|
||||
set(HALT_COMMAND "/usr/bin/loginctl poweroff")
|
||||
set(REBOOT_COMMAND "/usr/bin/loginctl reboot")
|
||||
endif()
|
||||
add_feature_info("elogind" ELOGIND_FOUND "elogind support")
|
||||
|
||||
# Default behaviour if neither systemd nor elogind is used
|
||||
if (NOT ELOGIND_FOUND AND NOT SYSTEMD_FOUND)
|
||||
# Set the VT on which sddm will normally appear, and the
|
||||
# commands for shutdown and reboot. On FreeBSD, there are
|
||||
# normally more getty's running than on Linux.
|
||||
if("${CMAKE_SYSTEM_NAME}" STREQUAL "FreeBSD")
|
||||
set(HALT_COMMAND "/sbin/shutdown -p now")
|
||||
else()
|
||||
set(HALT_COMMAND "/sbin/shutdown -h -P now")
|
||||
endif()
|
||||
set(REBOOT_COMMAND "/sbin/shutdown -r now")
|
||||
endif()
|
||||
|
||||
if (SYSTEMD_FOUND)
|
||||
set(RUNTIME_DIR_DEFAULT "/run/sddm")
|
||||
else()
|
||||
set(RUNTIME_DIR_DEFAULT "${CMAKE_INSTALL_FULL_LOCALSTATEDIR}/run/sddm")
|
||||
endif()
|
||||
|
||||
|
||||
# Set constants
|
||||
set(DATA_INSTALL_DIR "${CMAKE_INSTALL_FULL_DATADIR}/sddm" CACHE PATH "System application data install directory")
|
||||
set(DBUS_CONFIG_DIR "${CMAKE_INSTALL_FULL_DATADIR}/dbus-1/system.d" CACHE PATH "DBus config files directory")
|
||||
set(STATE_DIR "${CMAKE_INSTALL_FULL_LOCALSTATEDIR}/lib/sddm" CACHE PATH "State directory")
|
||||
set(RUNTIME_DIR "${RUNTIME_DIR_DEFAULT}" CACHE PATH "Runtime data storage directory")
|
||||
set(QML_INSTALL_DIR "${QT_IMPORTS_DIR}" CACHE PATH "QML component installation directory")
|
||||
|
||||
set(SESSION_COMMAND "${DATA_INSTALL_DIR}/scripts/Xsession" CACHE PATH "Script to execute when starting the X11 desktop session")
|
||||
set(WAYLAND_SESSION_COMMAND "${DATA_INSTALL_DIR}/scripts/wayland-session" CACHE PATH "Script to execute when starting the Wayland desktop session")
|
||||
|
||||
set(CONFIG_FILE "${CMAKE_INSTALL_FULL_SYSCONFDIR}/sddm.conf" CACHE PATH "Path of the sddm config file")
|
||||
set(CONFIG_DIR "${CMAKE_INSTALL_FULL_SYSCONFDIR}/sddm.conf.d" CACHE PATH "Path of the sddm config directory")
|
||||
set(ACCOUNTSSERVICE_DATA_DIR "/var/lib/AccountsService" CACHE PATH "Path of the accountsservice data directory")
|
||||
set(SYSTEM_CONFIG_DIR "${CMAKE_INSTALL_PREFIX}/lib/sddm/sddm.conf.d" CACHE PATH "Path of the system sddm config directory")
|
||||
set(LOG_FILE "${CMAKE_INSTALL_FULL_LOCALSTATEDIR}/log/sddm.log" CACHE PATH "Path of the sddm log file")
|
||||
set(DBUS_CONFIG_FILENAME "org.freedesktop.DisplayManager.conf" CACHE STRING "Name of the sddm config file")
|
||||
set(COMPONENTS_TRANSLATION_DIR "${DATA_INSTALL_DIR}/translations-qt${QT_MAJOR_VERSION}" CACHE PATH "Components translations directory")
|
||||
set(SDDM_INITIAL_VT "1" CACHE STRING "Initial tty to use")
|
||||
|
||||
|
||||
# Autodetect UID_MIN and UID_MAX from /etc/login.defs
|
||||
if(NOT DEFINED LOGIN_DEFS_PATH)
|
||||
set(LOGIN_DEFS_PATH "/etc/login.defs" CACHE PATH "Path to login.defs")
|
||||
endif()
|
||||
|
||||
if(NOT EXISTS "${LOGIN_DEFS_PATH}" AND NOT DEFINED UID_MIN AND NOT DEFINED UID_MAX)
|
||||
message(FATAL_ERROR "Could not find login.defs at ${LOGIN_DEFS_PATH}. Try -DLOGIN_DEFS_PATH.")
|
||||
endif()
|
||||
|
||||
if(NOT DEFINED UID_MIN)
|
||||
file(STRINGS "${LOGIN_DEFS_PATH}" UID_MIN LIMIT_COUNT 1 REGEX "^UID_MIN")
|
||||
string(REGEX REPLACE "^UID_MIN[\t ]+([0-9]+)" "\\1" UID_MIN "${UID_MIN}")
|
||||
if(NOT UID_MIN MATCHES "[0-9]+")
|
||||
message(WARNING "Could not detect a valid UID_MIN (got '${UID_MIN}'). You should review your login.defs file.")
|
||||
set(UID_MIN 1000)
|
||||
else()
|
||||
message(STATUS "Autodetected UID_MIN=${UID_MIN} from ${LOGIN_DEFS_PATH}")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(NOT DEFINED UID_MAX)
|
||||
file(STRINGS "${LOGIN_DEFS_PATH}" UID_MAX LIMIT_COUNT 1 REGEX "^UID_MAX")
|
||||
string(REGEX REPLACE "^UID_MAX[\t ]+([0-9]+)" "\\1" UID_MAX "${UID_MAX}")
|
||||
if(NOT UID_MAX MATCHES "[0-9]+")
|
||||
message(WARNING "Could not detect a valid UID_MAX (got '${UID_MAX}'). You should review your login.defs file.")
|
||||
set(UID_MAX 65000)
|
||||
else()
|
||||
message(STATUS "Autodetected UID_MAX=${UID_MAX} from ${LOGIN_DEFS_PATH}")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Add subdirectories
|
||||
add_subdirectory(components)
|
||||
add_subdirectory(data)
|
||||
add_subdirectory(services)
|
||||
add_subdirectory(src)
|
||||
|
||||
enable_testing()
|
||||
add_subdirectory(test)
|
||||
|
||||
# Display feature summary
|
||||
feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES)
|
||||
@@ -0,0 +1,138 @@
|
||||
This list contains list of contributors to the sddm. Names are sorted by number
|
||||
of commits at time of this writing. Commit data has been generated using:
|
||||
|
||||
git shortlog -s -e -n
|
||||
|
||||
Commit counts have ben removed, since they change pretty frequently. Some of the
|
||||
the committer names and email addresses have changed, so we use .mailmap file to
|
||||
merge them.
|
||||
|
||||
Abdurrahman AVCI <abdurrahmanavci@gmail.com>
|
||||
Pier Luigi Fiorini <pierluigi.fiorini@liri.io>
|
||||
David Edmundson <kde@davidedmundson.co.uk>
|
||||
Nikita Mikhailov <nslqqq@gmail.com>
|
||||
Martin Briza <mbriza@redhat.com>
|
||||
Jerome Leclanche <jerome@leclan.ch>
|
||||
Fabian Vogt <fabian@ritter-vogt.de>
|
||||
AnAkkk <anakin.cs@gmail.com>
|
||||
Christopher Roy Bratusek <nano@tuxfamily.org>
|
||||
Andrea Scarpino <me@andreascarpino.it>
|
||||
Dāvis <davispuh@gmail.com>
|
||||
Kevin S.C. Decker <kevin.decker@fu-berlin.de>
|
||||
Reza Fatahilah Shah <rshah0385@kireihana.com>
|
||||
Aaron Seigo <aseigo@kde.org>
|
||||
Nathan Weber <supernathansunshine@gmail.com>
|
||||
Elias Probst <mail@eliasprobst.eu>
|
||||
Raphael Kubo da Costa <rakuco@FreeBSD.org>
|
||||
Richard Martin <radiosity@gmail.com>
|
||||
naund <naund@users.noreply.github.com>
|
||||
Leonardo <leonardo.guilherme@gmail.com>
|
||||
Sanjeev Premi <spremi@ymail.com>
|
||||
Kristoffer Grundström <kristoffer.grundstrom1983@gmail.com>
|
||||
Yury G. Kudryashov <urkud.urkud@gmail.com>
|
||||
Alberto Milone <alberto.milone@canonical.com>
|
||||
Andreas Müller <schnitzeltony@googlemail.com>
|
||||
Antonio Larrosa <larrosa@kde.org>
|
||||
Hendrik Lehmbruch <hlehmbruch@gmx.net>
|
||||
Isaque Galdino <igaldino@gmail.com>
|
||||
Kuzma Shapran <kuzma.shapran@gmail.com>
|
||||
Robert Antoni Buj Gelonch <robert.buj@gmail.com>
|
||||
Sven Eden <seden@havi.de>
|
||||
welaq <welaq@users.noreply.github.com>
|
||||
Albert Vaca <albertvaka@gmail.com>
|
||||
Aurélien COUDERC <zecoucou@free.fr>
|
||||
Florian Jacob <projects+git@florianjacob.de>
|
||||
František Zatloukal <Zatloukal.Frantisek@gmail.com>
|
||||
Gabriel Craciunescu <crazy@frugalware.org>
|
||||
Generator <american.jesus.pt@gmail.com>
|
||||
Guo Yunhe <guoyunhebrave@gmail.com>
|
||||
Jonathan Marten <jjm@keelhaul.me.uk>
|
||||
Jonathan Riddell <jr@jriddell.org>
|
||||
José Pedro Arvela <jparvela@gmail.com>
|
||||
Karl Ove Hufthammer <karl@huftis.org>
|
||||
Kevin Funk <kfunk@kde.org>
|
||||
Marcin Mikołajczak <me@m4sk.in>
|
||||
Matthew Dawson <matthew@mjdsystems.ca>
|
||||
Mika Kobayashi <mika@p4d.co.jp>
|
||||
Nick Shaforostoff <shafff@ukr.net>
|
||||
Nikolay Amiantov <ab@fmap.me>
|
||||
Palo Kisa <palo.kisa@gmail.com>
|
||||
Papoteur <yves.brungard_git@gadz.org>
|
||||
leuqarte <leuqarte@users.noreply.github.com>
|
||||
preisi <thomas.preisner@fau.de>
|
||||
raven700 <raven700@o2.pl>
|
||||
scootergrisen <scootergrisen@gmail.com>
|
||||
林博仁 <Buo.Ren.Lin@gmail.com>
|
||||
Alberto Luaces <aluaces@udc.es>
|
||||
Aleix Pol <aleixpol@kde.org>
|
||||
Aleksei Kovura <3616242+alex3kov@users.noreply.github.com>
|
||||
Alexander Potashev <aspotashev@gmail.com>
|
||||
Andreas Sturmlechner <andreas.sturmlechner@gmail.com>
|
||||
Arthur Țițeică <arthur@psw.ro>
|
||||
B. Jacquot <bastien.jacquot@univ-reims.fr>
|
||||
Bastian Beischer <bastian.beischer@gmail.com>
|
||||
Baurzhan Muftakhidinov <baurthefirst@gmail.com>
|
||||
Benjamin Chrétien <chretien@lirmm.fr>
|
||||
Benjamin Robin <dev@benjarobin.fr>
|
||||
Benno Fünfstück <benno.fuenfstueck@gmail.com>
|
||||
Cherevan Andriy <cherevan.andriy@gmail.com>
|
||||
Cochise César <cochisecesar@gmail.com>
|
||||
David Heidelberger <david.heidelberger@ixit.cz>
|
||||
Eric Engestrom <eric@engestrom.ch>
|
||||
Eric Hameleers <alien@slackware.com>
|
||||
Eric Koegel <eric.koegel@gmail.com>
|
||||
Gabriel Martinez <reitaka@gmail.com>
|
||||
Harald Sitter <sitter@kde.org>
|
||||
HarveyMittens <teknocratdefunct@riseup.net>
|
||||
Ioannis Koutras <ioannis.koutras@gmail.com>
|
||||
Janik Rabe <janik-rabe@web.de>
|
||||
Jeff Huang <s8321414@chakralinux.org>
|
||||
Jeff Huang <s8321414@gmail.com>
|
||||
Jiachen Yang <farseerfc@gmail.com>
|
||||
Johannes Pointner <johannes.pointner@gmail.com>
|
||||
Jon Eyolfson <jon@eyl.io>
|
||||
Lasse Liehu <lasse.liehu@gmail.com>
|
||||
Ludger Krämer <dbluelle@blau-weissoedingen.de>
|
||||
Mads <mads@ab3.no>
|
||||
Mario Young <maye.co@gmail.com>
|
||||
Marius Bakke <mbakke@fastmail.com>
|
||||
Mathieu Jobin <mathieu@justbudget.com>
|
||||
Michal Petrucha <michal.petrucha@koniiiik.org>
|
||||
Mingye Wang <arthur200126@gmail.com>
|
||||
Mladen Pejaković <pejakm@autistici.org>
|
||||
Nathaniel Graham <pointedstick@zoho.com>
|
||||
Peter Wu <peter@lekensteyn.nl>
|
||||
Petr Vanek <petr@scribus.info>
|
||||
Péter Radics <mitchnull@gmail.com>
|
||||
Robert Antoni Buj Gelonch <rbuj@users.noreply.github.com>
|
||||
Robert Hoffmann <externer.dl.hoffmann@muenchen.de>
|
||||
Robert Xu <robxu9@gmail.com>
|
||||
Rohan Garg <rohan@kde.org>
|
||||
SafaAlfulaij <safaalfulaij@hotmail.com>
|
||||
Shinjo Park <peremen@gmail.com>
|
||||
Simon Clemente <simon_clemente@yahoo.com>
|
||||
Stany MARCEL <stanypub@gmail.com>
|
||||
Stefan Majewsky <majewsky@gmx.net>
|
||||
Steve Gerbino <steve@gerbino.co>
|
||||
Sérgio Marques <smarquespt@gmail.com>
|
||||
Takahiro Hashimoto <kenya888@gmail.com>
|
||||
Thomas Preisner <mail@tpreisner.de>
|
||||
Vincent43 <31109921+Vincent43@users.noreply.github.com>
|
||||
Volkan Gezer <wakeup@users.noreply.github.com>
|
||||
Volodymyr Medvid <vmmedvid@gmail.com>
|
||||
Weng Xuetian <wengxt@gmail.com>
|
||||
ZH <zhhhhz@zoho.com>
|
||||
Zach Ploskey <zach@ploskey.com>
|
||||
a.k.a. Harvey <teknocratdefunct@riseup.net>
|
||||
akmc <liudas@akmc.lt>
|
||||
alien999999999 <alien@rmail.be>
|
||||
k2s <martin.minka@gmail.com>
|
||||
m4sk1n <me@m4sk.in>
|
||||
mortein79 <mortein79@gmail.com>
|
||||
mscherer <misc@zarb.org>
|
||||
raffarti <raffarti@zoho.com>
|
||||
realsobek <liebundartig@freenet.de>
|
||||
rehejuhan <jyri2000@mail.ee>
|
||||
tesfabpel <tesfabpel@gmail.com>
|
||||
w41l <walecha99@gmail.com>
|
||||
林博仁(Buo-Ren Lin) <Buo.Ren.Lin@gmail.com>
|
||||
@@ -0,0 +1,282 @@
|
||||
## Legend
|
||||
---------
|
||||
+ New features
|
||||
- Bug fixes
|
||||
* Others
|
||||
|
||||
## 0.21.0
|
||||
----------------------
|
||||
+ sddm-greeter can now be built for both Qt5 and Qt6
|
||||
+ Themes can now declare their Qt version compatibility to control which greeter gets used
|
||||
+ New CMake option INSTALL_PAM_CONFIGURATION (defaults to ON)
|
||||
+ Bulgarian translation added
|
||||
* DBus policy files are now installed in /usr rather than /etc
|
||||
* Do not show keyboard layouts on wayland as switching is not implemented
|
||||
* Switch the default commandline for Weston to use the kiosk shell (available in 9.0+)
|
||||
- Fix building with Qt 6.7
|
||||
- Handle autologin failure by falling back to the greeter (#1775)
|
||||
- Fix session names containing ',' (#1745)
|
||||
- Don't let tmpfiles delete x11 auth files for very long running sessions
|
||||
- Many improvements for the **experimental** wayland support
|
||||
|
||||
## 0.20.0 - 2023-06-23
|
||||
----------------------
|
||||
+ Initial Qt6 support (Will break themes which rely on Qt 5)
|
||||
+ **Experimental** support for running the greeter with Wayland
|
||||
+ Enable HiDPI scaling by default
|
||||
+ Support for running X11 display server without root privileges
|
||||
+ Greeter: Support setting environment variables
|
||||
+ Allow additional env vars to be defined in session files (#1370)
|
||||
+ Make accountsservice data directory overridable via CMake
|
||||
+ Add support for X11 cursor size configuration
|
||||
+ Search XDG Base Directories for session files
|
||||
+ Display information and errors from PAM in the greeter (#1486)
|
||||
* Remove the Passwd backend, make PAM mandatory
|
||||
* Bump minimum CMake version to 3.4
|
||||
* Introduce SDDM_INITIAL_VT as the TTY to reach out to
|
||||
* Set XCURSOR_SIZE in XorgDisplayServer::start
|
||||
* Make it possible to start ConsoleKit D-Bus service during SDDM startup
|
||||
* pam: Do not use tally2 if faillock is present
|
||||
* Bump to Qt 5.15, port away from deprecated APIs
|
||||
* remove `-logfile` arg that causes server to fail
|
||||
- Set RUNTIME_DIR to /run/sddm when using systemd to follow FHS 3.0
|
||||
- Use avatars in FacesDir first and if not found search other locations
|
||||
- Switch to using libxau with `FamilyWild` (#1230)
|
||||
- New interface to access config values from themes (#1097)
|
||||
- Session names are translated now (#1645)
|
||||
- Many more bugfixes
|
||||
|
||||
## 0.19.0 - 2020-11-02
|
||||
----------------------
|
||||
* Don't disable authentication in --test-mode
|
||||
- Fix X not having access control on startup
|
||||
(fixes CVE-2020-28049)
|
||||
- Don't fill UserModel if theme does not require it
|
||||
* Set re-use session option by default
|
||||
* Avoid adjusting active auth sessions
|
||||
* Cleanup sessions on exit
|
||||
* Don't abort on failure to start the display server
|
||||
+ Custom default font
|
||||
* Limit systemd service restarts
|
||||
* Typo fixes
|
||||
* Fix graphical glitches on NVIDIA after VT switching
|
||||
* Rewind password database
|
||||
* Memory allocation fixes
|
||||
* FreeBSD fixes
|
||||
* Use C++ scoping for handling buffer deletion
|
||||
* Allow to configure the QML installation directory
|
||||
* Port connects
|
||||
* Keep string termination characters in utmp entries
|
||||
* Look for available display for test mode
|
||||
* Interlingue translation
|
||||
* Remove chVt() from declarations
|
||||
- Rewind password db before scanning it (again) for available users
|
||||
- Session reuse: Only consider "online" sessions
|
||||
* Use modern connects
|
||||
* Update translations
|
||||
|
||||
## 0.18.1 - 2019-03-11
|
||||
----------------------
|
||||
- Fix crashes when creating a user session
|
||||
|
||||
## 0.18.0 - 2018-07-17
|
||||
----------------------
|
||||
+ Support theme supplied avatars
|
||||
+ Compile against Qt 5.11
|
||||
- Fix platform detection for HighDPI
|
||||
- On close, switch VT to a running session if applicable
|
||||
- Better ConsoleKit support
|
||||
- Fix authentication when reusing existing sessions
|
||||
- Hide sessions with NoDisplay=true
|
||||
- Honor PAM's ambient supplemental groups
|
||||
- Cleanup socket destruction
|
||||
- Don't quit on SIGHUP
|
||||
* Updated translations
|
||||
|
||||
## 0.17.0 - 2017-12-05
|
||||
----------------------
|
||||
+ Added possibility to change border width of ComboBox widget.
|
||||
+ Added missing utmp/wtmp/btmp handling.
|
||||
+ Make greeter see icons set by AccountsServices.
|
||||
- Fix sddm.conf man page syntax error and update.
|
||||
- Fix ComboBox widget.
|
||||
- Fix connection of PropertiesChanged event for LogindSeat.
|
||||
- Avoid race conditions with Xsetup.
|
||||
* Update de translation.
|
||||
* Update lt translation.
|
||||
* Update zh_TW translation.
|
||||
* Adjust order of components in the default PATH.
|
||||
* Set default input method to qtvirtualkeyboard.
|
||||
|
||||
## 0.16.0 - 2017-10-04
|
||||
----------------------
|
||||
+ Support non-latin characters in theme settings.
|
||||
+ Support fish shell in Xsession and wayland-session.
|
||||
+ Unlock GNOME keyring at login.
|
||||
+ Configuration directory.
|
||||
- Make the default cursor themed.
|
||||
- Update date and time in elarun theme.
|
||||
- Fix theme metadata default values.
|
||||
- Fix session selection in elarun.
|
||||
- Do not truncate XAUTHORITY on login.
|
||||
- Make enabled property of Button functional.
|
||||
- Fix typos in documentation.
|
||||
* Re-use existing sessions.
|
||||
* Add ConsoleKit 2 support.
|
||||
* Stop assuming shadow(5) is always available.
|
||||
* Explicitely set XDG_SEAT when starting a user session.
|
||||
* Suppress errors when pam_elogind is not available.
|
||||
* Suppress errors when pam_systemd is not available.
|
||||
* Added possibility to change color of dropdown menu.
|
||||
* Add Hindi translation.
|
||||
* Completed Swedish translation.
|
||||
* Update French translation.
|
||||
|
||||
## 0.15.0 - 2017-08-30
|
||||
----------------------
|
||||
- Fix display of avatars.
|
||||
+ New sddm.conf option EnableHiDPI to allow opt out of auto scaling.
|
||||
- Theme cursor.
|
||||
+ Support optional kwallet PAM opening.
|
||||
+ Autologin, try last successful login if not explicitly set.
|
||||
+ Ignore session desktop files with hidden=true.
|
||||
+ Support elogind.
|
||||
|
||||
## 0.14.0 - 2016-08-28
|
||||
----------------------
|
||||
+ New sddm.conf option EnableAvatars (useful for slow filesystems)
|
||||
+ New sddm.conf option UserAuthFile on the XDisplay section
|
||||
to change the default Xauthority file name and path.
|
||||
+ New sddm.conf option SessionLogFile on XDisplay and WaylandDisplay
|
||||
sections to change the default user session log location.
|
||||
+ ComboBox now exposes the arrow background color as
|
||||
"arrowColor" property.
|
||||
+ New "style" theme configuration for QtQuick Controls 2.0.
|
||||
+ Require Qt 5.6 or better.
|
||||
+ Enable HiDPI support.
|
||||
+ Refresh sessions list.
|
||||
+ Always fallback to an embedded theme if no suitable theme is found.
|
||||
- Actually change Qt platform theme.
|
||||
- Switch to Wayland session vt only when authentication
|
||||
succeeds.
|
||||
- Close PAM session.
|
||||
- Delete PAM credentials after closing the session.
|
||||
* More theme-neutral default user and root avatars
|
||||
* REMOVED the "circles" theme. Remember to change it if you had it set!
|
||||
* REMOVED the "maui" theme as a standalone theme as it is now
|
||||
embedded in the greeter. Remember to change the theme to empty
|
||||
if you had it set to "maui".
|
||||
* Update Estonian translation.
|
||||
* Add Catalan translation from Robert Antoni Buj Gelonch.
|
||||
* Add Dutch translation from Eric Hameleers.
|
||||
* Add Slovak translation from Martin Minka.
|
||||
* Add Swedish translation from Kristoffer Grundström.
|
||||
* Add Ukrainian translation from Cherevan Andriy.
|
||||
* Add Indian flag from Sanjeev Premi.
|
||||
|
||||
## 0.13.0 - 2015-11-04
|
||||
----------------------
|
||||
+ Greeter inherits path environment variables from parent so that
|
||||
themes installed in non-standard paths will work.
|
||||
+ Add ENABLE_PAM option to toggle PAM support at build time.
|
||||
+ Allow overriding textColor in ComboBox.
|
||||
- Don't cast QByteArray to (char *).
|
||||
- Disable greeters from loading KDE's debug hander
|
||||
(fix CVE-2015-0856).
|
||||
- Fix multi-screen support for some setups.
|
||||
* Added Serbian translation.
|
||||
* Added Traditional Chinese translation.
|
||||
* Improved German translation.
|
||||
* Remove failsafe session entry.
|
||||
* Close the pipe fd passed to X server.
|
||||
* A few micro-optimizations.
|
||||
|
||||
## 0.12.0 - 2015-09-05
|
||||
----------------------
|
||||
* Add a new "platformTheme" setting for themes.
|
||||
Themes can now specify a Qt platform theme plugin.
|
||||
* Autodetect UID_MIN and UID_MAX from /etc/login.defs
|
||||
* Add Arabic translation by Safa Alfulaij.
|
||||
* Add Hungarian translation by mortein79.
|
||||
* Russian translation improvements by Alexander Potashev.
|
||||
* Wait for display setup script to finish.
|
||||
* Reload configuration after display setup.
|
||||
* Pass locale environment variables to the greeter.
|
||||
* Support right-to-left languages.
|
||||
* Wayland session support.
|
||||
* Xorg server arguments are configurable.
|
||||
* Honor locale settings in /etc/environment
|
||||
* Allow SYSTEMD_SYSTEM_UNIT_DIR to be overridden at compile time.
|
||||
* No longer hardcode min/max UIDs.
|
||||
* FreeBSD build fixes.
|
||||
* Fixed Qt 5.5 build warnings.
|
||||
* Honor TryExec in Xsession desktop files.
|
||||
* New sddm.conf option XephyrPath.
|
||||
* New sddm.conf option ServerArguments.
|
||||
* New sddm.conf option DisplayStopCommand.
|
||||
* Enable QT_NO_CAST_FROM_ASCII.
|
||||
* Replace non-free background with a CC-BY-SA alternative for
|
||||
the maldives theme.
|
||||
* Many untracked bug fixes.
|
||||
|
||||
## 0.11.0 - 2014-11-20
|
||||
----------------------
|
||||
+ Reload the configuration every time we start a new session
|
||||
- Fix stderr redirection in the helper. Solving a memory leak
|
||||
- Set system locale in the greeter
|
||||
- Bail on chdir failure
|
||||
* Use QUuid for unique ID generation
|
||||
* Update lithuanian translations
|
||||
|
||||
## 0.10.0 - 2014-10-16
|
||||
----------------------
|
||||
+ Set default icon theme from greeter theme configuration.
|
||||
+ Set cursor theme according to greeter theme configuration.
|
||||
- Never permit a login as the sddm user (CVE-2014-7271)
|
||||
- Fix race condition in XAUTHORITY code (CVE-2014-7272)
|
||||
- XAUTHORITY is no longer owned by root
|
||||
- Flush any buffered data to the log file, this writes immediately
|
||||
all the log messages.
|
||||
- Fixed password field initial focus state
|
||||
- Don't override pam environment variables.
|
||||
* Remove Qt 4 support.
|
||||
* Prioritize sessions with a .desktop prefix
|
||||
* Add Kazakh translation.
|
||||
* Separate display server specific code.
|
||||
|
||||
## 0.9.0 - 2014-08-02
|
||||
---------------------
|
||||
+ Implemented automatic login
|
||||
+ Greeter now runs as its own user
|
||||
+ Added translation support for themes.
|
||||
+ Added keyboard layout support.
|
||||
+ Added option to turn on numlock at startup.
|
||||
+ ~/.xsession-errors support
|
||||
+ Improved compatibility with GNOME and Unity
|
||||
+ Initial Plymouth support
|
||||
+ Implemented logging to journald if available
|
||||
+ Added org.freedesktop.DisplayManager interface
|
||||
+ Fast user switching
|
||||
+ Test mode that can be toggled at runtime
|
||||
+ Auto Relogging
|
||||
+ User filtering based on shell
|
||||
+ User filtering based on name
|
||||
+ PAM is now optional
|
||||
- No longer stripping comments from sddm.conf on login
|
||||
- Fixed incorrect PAM handling causing PulseAudio to fail.
|
||||
- Fixed a crash caused by incorrect handling of PAM
|
||||
- Fixed compilation with Qt 5.0.0
|
||||
- Correctly import PAM environment into the sesion
|
||||
- Fixed missing environment variables
|
||||
- Find empty displays and virtual desktops automatically
|
||||
- Exit gracefully when SIGTERM is received
|
||||
- Fix running SDDM under a Plasma 5.0 desktop.
|
||||
* Now using Oxygen instead of Geosans Light
|
||||
* Added man pages sddm(1), sddm-greeter(1), sddm.conf(5)
|
||||
* Removed custom session
|
||||
* Failsafe is no longer the default session
|
||||
|
||||
## 0.1.0 - 2013-03-19
|
||||
---------------------
|
||||
* Initial release
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
## Installation instructions
|
||||
|
||||
SDDM uses CMake to configure and build the project.
|
||||
|
||||
1. From the project root, create a build directory: `mkdir build`
|
||||
2. From the build directory, run cmake to the project root. Eg: `cd build && cmake ..`
|
||||
3. To build, run `make`.
|
||||
4. To install, run `make install`.
|
||||
|
||||
CMake accepts a number of standard and extra arguments:
|
||||
|
||||
- BUILD_MAN_PAGES, pass -DBUILD_MAN_PAGES=ON to build man pages
|
||||
- ENABLE_JOURNALD, pass -DENABLE_JOURNALD=OFF
|
||||
to disable logging to the journal
|
||||
|
||||
By default, a debug build is created. To build for production, use
|
||||
`cmake -DCMAKE_BUILD_TYPE=Release`.
|
||||
|
||||
To see all the possible arguments, run `cmake -L ..`.
|
||||
For documentation on standard CMake variables, see:
|
||||
http://www.cmake.org/cmake/help/v3.0/manual/cmake-variables.7.html
|
||||
|
||||
### Post-installation steps
|
||||
|
||||
By default, SDDM runs as its own user. An `sddm` user needs to be created, with
|
||||
its home set to `/var/lib/sddm` by default.
|
||||
|
||||
### Dependencies
|
||||
|
||||
SDDM depends on PAM for authorization and XCB to communicate with the X server.
|
||||
Apart from other things, it also depends on Qt for the user interface and event
|
||||
loop management.
|
||||
SDDM can optionally make use of logind (the systemd login manager API), or
|
||||
ConsoleKit2, or upower to enable support for suspend, hibernate etc.
|
||||
In order to build the man pages, you will need `rst2man` installed. It is
|
||||
provided by the python `docutils` package
|
||||
|
||||
Note that SDDM makes use of C++11 features for a modern and clean codebase,
|
||||
therefore it needs a recent version of GCC to compile (4.7 at least).
|
||||
@@ -0,0 +1,280 @@
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
License is intended to guarantee your freedom to share and change free
|
||||
software--to make sure the software is free for all its users. This
|
||||
General Public License applies to most of the Free Software
|
||||
Foundation's software and to any other program whose authors commit to
|
||||
using it. (Some other Free Software Foundation software is covered by
|
||||
the GNU Lesser General Public License instead.) You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
this service if you wish), that you receive source code or can get it
|
||||
if you want it, that you can change the software or use pieces of it
|
||||
in new free programs; and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
anyone to deny you these rights or to ask you to surrender the rights.
|
||||
These restrictions translate to certain responsibilities for you if you
|
||||
distribute copies of the software, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must give the recipients all the rights that
|
||||
you have. You must make sure that they, too, receive or can get the
|
||||
source code. And you must show them these terms so they know their
|
||||
rights.
|
||||
|
||||
We protect your rights with two steps: (1) copyright the software, and
|
||||
(2) offer you this license which gives you legal permission to copy,
|
||||
distribute and/or modify the software.
|
||||
|
||||
Also, for each author's protection and ours, we want to make certain
|
||||
that everyone understands that there is no warranty for this free
|
||||
software. If the software is modified by someone else and passed on, we
|
||||
want its recipients to know that what they have is not the original, so
|
||||
that any problems introduced by others will not reflect on the original
|
||||
authors' reputations.
|
||||
|
||||
Finally, any free program is threatened constantly by software
|
||||
patents. We wish to avoid the danger that redistributors of a free
|
||||
program will individually obtain patent licenses, in effect making the
|
||||
program proprietary. To prevent this, we have made it clear that any
|
||||
patent must be licensed for everyone's free use or not licensed at all.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License applies to any program or other work which contains
|
||||
a notice placed by the copyright holder saying it may be distributed
|
||||
under the terms of this General Public License. The "Program", below,
|
||||
refers to any such program or work, and a "work based on the Program"
|
||||
means either the Program or any derivative work under copyright law:
|
||||
that is to say, a work containing the Program or a portion of it,
|
||||
either verbatim or with modifications and/or translated into another
|
||||
language. (Hereinafter, translation is included without limitation in
|
||||
the term "modification".) Each licensee is addressed as "you".
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running the Program is not restricted, and the output from the Program
|
||||
is covered only if its contents constitute a work based on the
|
||||
Program (independent of having been made by running the Program).
|
||||
Whether that is true depends on what the Program does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Program's
|
||||
source code as you receive it, in any medium, provided that you
|
||||
conspicuously and appropriately publish on each copy an appropriate
|
||||
copyright notice and disclaimer of warranty; keep intact all the
|
||||
notices that refer to this License and to the absence of any warranty;
|
||||
and give any other recipients of the Program a copy of this License
|
||||
along with the Program.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy, and
|
||||
you may at your option offer warranty protection in exchange for a fee.
|
||||
|
||||
2. You may modify your copy or copies of the Program or any portion
|
||||
of it, thus forming a work based on the Program, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
a) You must cause the modified files to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
b) You must cause any work that you distribute or publish, that in
|
||||
whole or in part contains or is derived from the Program or any
|
||||
part thereof, to be licensed as a whole at no charge to all third
|
||||
parties under the terms of this License.
|
||||
|
||||
c) If the modified program normally reads commands interactively
|
||||
when run, you must cause it, when started running for such
|
||||
interactive use in the most ordinary way, to print or display an
|
||||
announcement including an appropriate copyright notice and a
|
||||
notice that there is no warranty (or else, saying that you provide
|
||||
a warranty) and that users may redistribute the program under
|
||||
these conditions, and telling the user how to view a copy of this
|
||||
License. (Exception: if the Program itself is interactive but
|
||||
does not normally print such an announcement, your work based on
|
||||
the Program is not required to print an announcement.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Program,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Program, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Program.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Program
|
||||
with the Program (or with a work based on the Program) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may copy and distribute the Program (or a work based on it,
|
||||
under Section 2) in object code or executable form under the terms of
|
||||
Sections 1 and 2 above provided that you also do one of the following:
|
||||
|
||||
a) Accompany it with the complete corresponding machine-readable
|
||||
source code, which must be distributed under the terms of Sections
|
||||
1 and 2 above on a medium customarily used for software interchange; or,
|
||||
|
||||
b) Accompany it with a written offer, valid for at least three
|
||||
years, to give any third party, for a charge no more than your
|
||||
cost of physically performing source distribution, a complete
|
||||
machine-readable copy of the corresponding source code, to be
|
||||
distributed under the terms of Sections 1 and 2 above on a medium
|
||||
customarily used for software interchange; or,
|
||||
|
||||
c) Accompany it with the information you received as to the offer
|
||||
to distribute corresponding source code. (This alternative is
|
||||
allowed only for noncommercial distribution and only if you
|
||||
received the program in object code or executable form with such
|
||||
an offer, in accord with Subsection b above.)
|
||||
|
||||
The source code for a work means the preferred form of the work for
|
||||
making modifications to it. For an executable work, complete source
|
||||
code means all the source code for all modules it contains, plus any
|
||||
associated interface definition files, plus the scripts used to
|
||||
control compilation and installation of the executable. However, as a
|
||||
special exception, the source code distributed need not include
|
||||
anything that is normally distributed (in either source or binary
|
||||
form) with the major components (compiler, kernel, and so on) of the
|
||||
operating system on which the executable runs, unless that component
|
||||
itself accompanies the executable.
|
||||
|
||||
If distribution of executable or object code is made by offering
|
||||
access to copy from a designated place, then offering equivalent
|
||||
access to copy the source code from the same place counts as
|
||||
distribution of the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
4. You may not copy, modify, sublicense, or distribute the Program
|
||||
except as expressly provided under this License. Any attempt
|
||||
otherwise to copy, modify, sublicense or distribute the Program is
|
||||
void, and will automatically terminate your rights under this License.
|
||||
However, parties who have received copies, or rights, from you under
|
||||
this License will not have their licenses terminated so long as such
|
||||
parties remain in full compliance.
|
||||
|
||||
5. You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Program or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Program (or any work based on the
|
||||
Program), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Program or works based on it.
|
||||
|
||||
6. Each time you redistribute the Program (or any work based on the
|
||||
Program), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute or modify the Program subject to
|
||||
these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties to
|
||||
this License.
|
||||
|
||||
7. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Program at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Program by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Program.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under
|
||||
any particular circumstance, the balance of the section is intended to
|
||||
apply and the section as a whole is intended to apply in other
|
||||
circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system, which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
8. If the distribution and/or use of the Program is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Program under this License
|
||||
may add an explicit geographical distribution limitation excluding
|
||||
those countries, so that distribution is permitted only in or among
|
||||
countries not thus excluded. In such case, this License incorporates
|
||||
the limitation as if written in the body of this License.
|
||||
|
||||
9. The Free Software Foundation may publish revised and/or new versions
|
||||
of the General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program
|
||||
specifies a version number of this License which applies to it and "any
|
||||
later version", you have the option of following the terms and conditions
|
||||
either of that version or of any later version published by the Free
|
||||
Software Foundation. If the Program does not specify a version number of
|
||||
this License, you may choose any version ever published by the Free Software
|
||||
Foundation.
|
||||
|
||||
10. If you wish to incorporate parts of the Program into other free
|
||||
programs whose distribution conditions are different, write to the author
|
||||
to ask for permission. For software which is copyrighted by the Free
|
||||
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||
make exceptions for this. Our decision will be guided by the two goals
|
||||
of preserving the free status of all derivatives of our free software and
|
||||
of promoting the sharing and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||
REPAIR OR CORRECTION.
|
||||
|
||||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
@@ -0,0 +1,299 @@
|
||||
Creative Commons Legal Code
|
||||
|
||||
Attribution 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 above) for the
|
||||
purposes of this License.
|
||||
c. "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.
|
||||
d. "Licensor" means the individual, individuals, entity or entities that offer
|
||||
(s) the Work under the terms of this License.
|
||||
e. "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.
|
||||
f. "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.
|
||||
g. "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.
|
||||
h. "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.
|
||||
i. "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(b), 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(b), as requested.
|
||||
b. 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 Section 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 (b) 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.
|
||||
c. 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 this
|
||||
License.
|
||||
|
||||
Creative Commons may be contacted at https://creativecommons.org/.
|
||||
@@ -0,0 +1,107 @@
|
||||
## INTRODUCTION
|
||||
|
||||
[](https://webchat.freenode.net/?channels=sddm)
|
||||
|
||||
SDDM is a modern display manager for X11 and Wayland sessions aiming to
|
||||
be fast, simple and beautiful.
|
||||
It uses modern technologies like QtQuick, which in turn gives the designer the ability to
|
||||
create smooth, animated user interfaces.
|
||||
|
||||
SDDM is extremely themeable. We put no restrictions on the user interface design,
|
||||
it is completely up to the designer. We simply provide a few callbacks to the user interface
|
||||
which can be used for authentication, suspend etc.
|
||||
|
||||
To further ease theme creation we provide some premade components like a textbox,
|
||||
a combox etc.
|
||||
|
||||
There are a few sample themes distributed with SDDM.
|
||||
They can be used as a starting point for new themes.
|
||||
|
||||
## SCREENSHOTS
|
||||
|
||||

|
||||
|
||||
## VIDEOS
|
||||
|
||||
* [Video background](https://www.youtube.com/watch?v=kKwz2FQcE3c)
|
||||
* [Maui theme 1](https://www.youtube.com/watch?v=-0d1wkcU9DU)
|
||||
* [Maui theme 2](https://www.youtube.com/watch?v=dJ28mrOeuNA)
|
||||
|
||||
## RESOURCES
|
||||
|
||||
* [Issue tracker](https://github.com/sddm/sddm/issues)
|
||||
* [Wiki](https://github.com/sddm/sddm/wiki)
|
||||
* [Mailing List](https://groups.google.com/group/sddm-devel)
|
||||
* IRC channel `#sddm` on [chat.freenode.net](https://webchat.freenode.net?channels=sddm)
|
||||
|
||||
## INSTALLATION
|
||||
|
||||
Qt >= 5.15.0 is required to use SDDM.
|
||||
|
||||
SDDM runs the greeter as a system user named "sddm" whose home directory needs
|
||||
to be set to `/var/lib/sddm`.
|
||||
|
||||
If pam and systemd are available, the greeter will go through logind
|
||||
which will give it access to drm devices.
|
||||
|
||||
Distributions without pam and systemd will need to put the "sddm" user
|
||||
into the "video" group, otherwise errors regarding GL and drm devices
|
||||
might be experienced.
|
||||
|
||||
## VIRTUAL TERMINALS
|
||||
|
||||
SDDM is assumed to start at the tty specified by the cmake variable
|
||||
SDDM_INITIAL_VT which is an integer and defaults to 1.
|
||||
|
||||
If SDDM_INITIAL_VT wasn't available, SDDM will use the next available one
|
||||
instead.
|
||||
|
||||
You can override SDDM_INITIAL_VT if you want to have a different one if,
|
||||
for example, you were planning on using tty1 for something else.
|
||||
|
||||
## LICENSE
|
||||
|
||||
Source code of SDDM is licensed under GNU GPL version 2 or later (at your choosing).
|
||||
QML files are MIT licensed and images are CC BY 3.0.
|
||||
|
||||
## TROUBLESHOOTING
|
||||
|
||||
### NVIDIA Prime
|
||||
|
||||
Add this at the bottom of the Xsetup script:
|
||||
|
||||
```sh
|
||||
if [ -e /sbin/prime-offload ]; then
|
||||
echo running NVIDIA Prime setup /sbin/prime-offload, you will need to manually run /sbin/prime-switch to shut down
|
||||
/sbin/prime-offload
|
||||
fi
|
||||
```
|
||||
|
||||
### No User Icon
|
||||
|
||||
SDDM reads user icon from either ~/.face.icon or FacesDir/username.face.icon
|
||||
|
||||
You need to make sure that SDDM user have permissions to read those files.
|
||||
In case you don't want to allow other users to access your $HOME you can use
|
||||
ACLs if your filesystem does support it.
|
||||
|
||||
```sh
|
||||
setfacl -m u:sddm:x /home/username
|
||||
setfacl -m u:sddm:r /home/username/.face.icon
|
||||
```
|
||||
|
||||
### Custom DPI
|
||||
|
||||
In order to set custom DPI for high resolution screens you should configure
|
||||
Xorg yourself. An easy way is to pass an additional argument to Xorg.
|
||||
|
||||
Edit ``/etc/sddm.conf``, go to the ``X11`` section and change ``ServerArguments`` like this:
|
||||
|
||||
```
|
||||
ServerArguments=-nolisten tcp -dpi 192
|
||||
```
|
||||
|
||||
to set DPI to 192.
|
||||
|
||||
As an alternative you can edit Xorg configuration ``xorg.conf``, please refer to the
|
||||
Xorg documentation.
|
||||
@@ -0,0 +1,75 @@
|
||||
# - Try to find the PAM libraries
|
||||
# Once done this will define
|
||||
#
|
||||
# PAM_FOUND - system has pam
|
||||
# PAM_INCLUDE_DIR - the pam include directory
|
||||
# PAM_LIBRARIES - libpam library
|
||||
|
||||
if (PAM_INCLUDE_DIR AND PAM_LIBRARY)
|
||||
# Already in cache, be silent
|
||||
set(PAM_FIND_QUIETLY TRUE)
|
||||
endif (PAM_INCLUDE_DIR AND PAM_LIBRARY)
|
||||
|
||||
find_path(PAM_INCLUDE_DIR NAMES security/pam_appl.h pam/pam_appl.h)
|
||||
find_library(PAM_LIBRARY pam)
|
||||
find_library(DL_LIBRARY dl)
|
||||
find_library(HAVE_PAM_FAILLOCK NAME pam_faillock.so PATH_SUFFIXES security)
|
||||
|
||||
if (PAM_INCLUDE_DIR AND PAM_LIBRARY)
|
||||
set(PAM_FOUND TRUE)
|
||||
if (DL_LIBRARY)
|
||||
set(PAM_LIBRARIES ${PAM_LIBRARY} ${DL_LIBRARY})
|
||||
else (DL_LIBRARY)
|
||||
set(PAM_LIBRARIES ${PAM_LIBRARY})
|
||||
endif (DL_LIBRARY)
|
||||
|
||||
if (EXISTS ${PAM_INCLUDE_DIR}/pam/pam_appl.h)
|
||||
# darwin claims to be something special
|
||||
set(HAVE_PAM_PAM_APPL_H 1)
|
||||
endif (EXISTS ${PAM_INCLUDE_DIR}/pam/pam_appl.h)
|
||||
|
||||
if (NOT DEFINED PAM_MESSAGE_CONST)
|
||||
include(CheckCXXSourceCompiles)
|
||||
# XXX does this work with plain c?
|
||||
check_cxx_source_compiles("
|
||||
#if ${HAVE_PAM_PAM_APPL_H}+0
|
||||
# include <pam/pam_appl.h>
|
||||
#else
|
||||
# include <security/pam_appl.h>
|
||||
#endif
|
||||
|
||||
static int PAM_conv(
|
||||
int num_msg,
|
||||
const struct pam_message **msg, /* this is the culprit */
|
||||
struct pam_response **resp,
|
||||
void *ctx)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
struct pam_conv PAM_conversation = {
|
||||
&PAM_conv, /* this bombs out if the above does not match */
|
||||
0
|
||||
};
|
||||
|
||||
return 0;
|
||||
}
|
||||
" PAM_MESSAGE_CONST)
|
||||
endif (NOT DEFINED PAM_MESSAGE_CONST)
|
||||
set(PAM_MESSAGE_CONST ${PAM_MESSAGE_CONST} CACHE BOOL "PAM expects a conversation function with const pam_message")
|
||||
|
||||
endif (PAM_INCLUDE_DIR AND PAM_LIBRARY)
|
||||
|
||||
if (PAM_FOUND)
|
||||
if (NOT PAM_FIND_QUIETLY)
|
||||
message(STATUS "Found PAM: ${PAM_LIBRARIES}")
|
||||
endif (NOT PAM_FIND_QUIETLY)
|
||||
else (PAM_FOUND)
|
||||
if (PAM_FIND_REQUIRED)
|
||||
message(FATAL_ERROR "PAM was not found")
|
||||
endif(PAM_FIND_REQUIRED)
|
||||
endif (PAM_FOUND)
|
||||
|
||||
mark_as_advanced(PAM_INCLUDE_DIR PAM_LIBRARY DL_LIBRARY PAM_MESSAGE_CONST)
|
||||
@@ -0,0 +1,54 @@
|
||||
# - Try to find libxcb
|
||||
# Once done this will define
|
||||
#
|
||||
# LIBXCB_FOUND - system has libxcb
|
||||
# LIBXCB_LIBRARIES - Link these to use libxcb
|
||||
# LIBXCB_INCLUDE_DIR - the libxcb include dir
|
||||
# LIBXCB_DEFINITIONS - compiler switches required for using libxcb
|
||||
|
||||
# Copyright (c) 2008 Helio Chissini de Castro, <helio@kde.org>
|
||||
# Copyright (c) 2007, Matthias Kretz, <kretz@kde.org>
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions
|
||||
# are met:
|
||||
#
|
||||
# 1. Redistributions of source code must retain the copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
# 2. Redistributions in binary form must reproduce the copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
# 3. The name of the author may not be used to endorse or promote products
|
||||
# derived from this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
|
||||
IF (NOT WIN32)
|
||||
IF (LIBXCB_INCLUDE_DIR AND LIBXCB_LIBRARIES)
|
||||
# in cache already
|
||||
SET(XCB_FIND_QUIETLY TRUE)
|
||||
ENDIF (LIBXCB_INCLUDE_DIR AND LIBXCB_LIBRARIES)
|
||||
|
||||
FIND_PACKAGE(PkgConfig)
|
||||
PKG_CHECK_MODULES(PKG_XCB xcb)
|
||||
|
||||
SET(LIBXCB_DEFINITIONS ${PKG_XCB_CFLAGS})
|
||||
|
||||
FIND_PATH(LIBXCB_INCLUDE_DIR xcb/xcb.h ${PKG_XCB_INCLUDE_DIRS})
|
||||
FIND_LIBRARY(LIBXCB_LIBRARIES NAMES xcb libxcb PATHS ${PKG_XCB_LIBRARY_DIRS})
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
FIND_PACKAGE_HANDLE_STANDARD_ARGS(XCB DEFAULT_MSG LIBXCB_LIBRARIES LIBXCB_INCLUDE_DIR)
|
||||
|
||||
MARK_AS_ADVANCED(LIBXCB_INCLUDE_DIR LIBXCB_LIBRARIES XCBPROC_EXECUTABLE)
|
||||
ENDIF (NOT WIN32)
|
||||
@@ -0,0 +1,58 @@
|
||||
# - Try to find libxcb
|
||||
# Once done this will define
|
||||
#
|
||||
# LIBXKB_FOUND - system has libxcb
|
||||
# LIBXKB_LIBRARIES - Link these to use libxcb-xkb
|
||||
# LIBXKB_INCLUDE_DIR - the libxcb-xkb include dir
|
||||
# LIBXKB_DEFINITIONS - compiler switches required for using libxcb
|
||||
|
||||
# Copyright (c) 2013, Abdurrahman AVCI, <abdurrahmanavci@gmail.com>
|
||||
# Copyright (c) 2008, Helio Chissini de Castro, <helio@kde.org>
|
||||
# Copyright (c) 2007, Matthias Kretz, <kretz@kde.org>
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions
|
||||
# are met:
|
||||
#
|
||||
# 1. Redistributions of source code must retain the copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
# 2. Redistributions in binary form must reproduce the copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
# 3. The name of the author may not be used to endorse or promote products
|
||||
# derived from this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
|
||||
IF (NOT WIN32)
|
||||
IF (LIBXKB_INCLUDE_DIR AND LIBXKB_LIBRARIES)
|
||||
# in cache already
|
||||
SET(XKB_FIND_QUIETLY TRUE)
|
||||
ENDIF (LIBXKB_INCLUDE_DIR AND LIBXKB_LIBRARIES)
|
||||
|
||||
# use pkg-config to get the directories and then use these values
|
||||
# in the FIND_PATH() and FIND_LIBRARY() calls
|
||||
FIND_PACKAGE(PkgConfig)
|
||||
PKG_CHECK_MODULES(PKG_XKB xcb-xkb)
|
||||
|
||||
SET(LIBXKB_DEFINITIONS ${PKG_XKB_CFLAGS})
|
||||
|
||||
FIND_PATH(LIBXKB_INCLUDE_DIR xcb/xkb.h ${PKG_XKB_INCLUDE_DIRS})
|
||||
|
||||
FIND_LIBRARY(LIBXKB_LIBRARIES NAMES xcb-xkb libxcb-xkb PATHS ${PKG_XKB_LIBRARY_DIRS})
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
FIND_PACKAGE_HANDLE_STANDARD_ARGS(XKB DEFAULT_MSG LIBXKB_LIBRARIES LIBXKB_INCLUDE_DIR)
|
||||
|
||||
MARK_AS_ADVANCED(LIBXKB_INCLUDE_DIR LIBXKB_LIBRARIES)
|
||||
ENDIF (NOT WIN32)
|
||||
@@ -0,0 +1,48 @@
|
||||
/***************************************************************************
|
||||
* 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
|
||||
|
||||
FocusScope {
|
||||
id: container
|
||||
|
||||
property alias source: image.source
|
||||
property alias fillMode: image.fillMode
|
||||
property alias status: image.status
|
||||
|
||||
|
||||
Image {
|
||||
id: image
|
||||
anchors.fill: parent
|
||||
|
||||
clip: true
|
||||
focus: true
|
||||
smooth: true
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
onClicked: container.focus = true
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,131 @@
|
||||
/***************************************************************************
|
||||
* 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
|
||||
|
||||
Rectangle {
|
||||
id: container
|
||||
width: 80; height: 30
|
||||
|
||||
property alias borderColor: main.color
|
||||
property alias textColor: textArea.color
|
||||
property alias font: textArea.font
|
||||
property alias text: textArea.text
|
||||
property alias implicitWidth: textArea.implicitWidth
|
||||
property alias implicitHeight: textArea.implicitHeight
|
||||
|
||||
color: "#4682b4"
|
||||
property color disabledColor: "#888888"
|
||||
property color activeColor: "#266294"
|
||||
property color pressedColor: "#064264"
|
||||
|
||||
property bool enabled: true
|
||||
property bool spaceDown: false
|
||||
property bool isFocused: activeFocus || mouseArea.containsMouse
|
||||
property bool isPressed: spaceDown || mouseArea.pressed
|
||||
|
||||
signal pressed()
|
||||
signal released()
|
||||
signal clicked()
|
||||
|
||||
states: [
|
||||
State {
|
||||
name: "disabled"; when: (container.enabled === false)
|
||||
PropertyChanges { target: container; color: disabledColor }
|
||||
PropertyChanges { target: main; color: disabledColor }
|
||||
},
|
||||
State {
|
||||
name: "active"; when: container.enabled && container.isFocused && !container.isPressed
|
||||
PropertyChanges { target: container; color: activeColor }
|
||||
PropertyChanges { target: main; color: activeColor }
|
||||
},
|
||||
State {
|
||||
name: "pressed"; when: container.enabled && container.isPressed
|
||||
PropertyChanges { target: container; color: pressedColor }
|
||||
PropertyChanges { target: main; color: pressedColor }
|
||||
}
|
||||
]
|
||||
|
||||
Behavior on color { NumberAnimation { duration: 200 } }
|
||||
|
||||
clip: true
|
||||
smooth: true
|
||||
|
||||
Rectangle {
|
||||
id: main
|
||||
width: parent.width - 2; height: parent.height - 2
|
||||
anchors.centerIn: parent
|
||||
|
||||
color: parent.color
|
||||
border.color: "white"
|
||||
border.width: 1
|
||||
|
||||
visible: container.isFocused
|
||||
}
|
||||
|
||||
Text {
|
||||
id: textArea
|
||||
anchors.centerIn: parent
|
||||
color: "white"
|
||||
text: "Button"
|
||||
font.bold: true
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
id: mouseArea
|
||||
|
||||
anchors.fill: parent
|
||||
|
||||
cursorShape: Qt.PointingHandCursor
|
||||
|
||||
hoverEnabled: container.enabled
|
||||
enabled: container.enabled
|
||||
|
||||
acceptedButtons: Qt.LeftButton
|
||||
|
||||
onPressed: { container.focus = true; container.pressed() }
|
||||
onClicked: { container.focus = true; container.clicked() }
|
||||
onReleased: { container.focus = true; container.released() }
|
||||
}
|
||||
|
||||
Keys.onPressed: {
|
||||
if (event.key === Qt.Key_Space) {
|
||||
container.spaceDown = true;
|
||||
container.pressed()
|
||||
event.accepted = true
|
||||
} else if (event.key === Qt.Key_Return) {
|
||||
container.clicked()
|
||||
event.accepted = true
|
||||
}
|
||||
}
|
||||
|
||||
Keys.onReleased: {
|
||||
if (event.key === Qt.Key_Space) {
|
||||
container.spaceDown = false;
|
||||
container.released()
|
||||
container.clicked()
|
||||
event.accepted = true
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
/***************************************************************************
|
||||
* 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
|
||||
|
||||
Column {
|
||||
id: container
|
||||
|
||||
property date dateTime: new Date()
|
||||
property color color: "white"
|
||||
property alias timeFont: time.font
|
||||
property alias dateFont: date.font
|
||||
|
||||
Timer {
|
||||
interval: 100; running: true; repeat: true;
|
||||
onTriggered: container.dateTime = new Date()
|
||||
}
|
||||
|
||||
Text {
|
||||
id: time
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
|
||||
color: container.color
|
||||
|
||||
text : Qt.formatTime(container.dateTime, "hh:mm")
|
||||
|
||||
font.pointSize: 72
|
||||
}
|
||||
|
||||
Text {
|
||||
id: date
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
|
||||
color: container.color
|
||||
|
||||
text : Qt.formatDate(container.dateTime, Qt.DefaultLocaleLongDate)
|
||||
|
||||
font.pointSize: 24
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,258 @@
|
||||
/***************************************************************************
|
||||
* 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
|
||||
|
||||
FocusScope {
|
||||
id: container
|
||||
width: 80; height: 30
|
||||
|
||||
property color color: "white"
|
||||
property color borderColor: "#ababab"
|
||||
property color focusColor: "#266294"
|
||||
property color hoverColor: "#5692c4"
|
||||
property color menuColor: "white"
|
||||
property color textColor: "black"
|
||||
|
||||
property int borderWidth: 1
|
||||
property font font
|
||||
property alias model: listView.model
|
||||
property int index: 0
|
||||
property alias arrowColor: arrow.color
|
||||
property alias arrowIcon: arrowIcon.source
|
||||
|
||||
property Component rowDelegate: defaultRowDelegate
|
||||
|
||||
signal valueChanged(int id)
|
||||
|
||||
Component {
|
||||
id: defaultRowDelegate
|
||||
Text {
|
||||
anchors.fill: parent
|
||||
anchors.margins: 3 + container.borderWidth + (LayoutMirroring.enabled ? arrow.width : 0)
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
color: container.textColor
|
||||
font: container.font
|
||||
|
||||
text: parent.modelItem.name
|
||||
}
|
||||
}
|
||||
|
||||
onFocusChanged: if (!container.activeFocus) close(false)
|
||||
|
||||
Rectangle {
|
||||
id: main
|
||||
|
||||
anchors.fill: parent
|
||||
|
||||
color: container.color
|
||||
border.color: container.borderColor
|
||||
border.width: container.borderWidth
|
||||
|
||||
Behavior on border.color { ColorAnimation { duration: 100 } }
|
||||
|
||||
states: [
|
||||
State {
|
||||
name: "hover"; when: mouseArea.containsMouse
|
||||
PropertyChanges { target: main; border.width: container.borderWidth; border.color: container.hoverColor }
|
||||
},
|
||||
State {
|
||||
name: "focus"; when: container.activeFocus && !mouseArea.containsMouse
|
||||
PropertyChanges { target: main; border.width: container.borderWidth; border.color: container.focusColor }
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
Loader {
|
||||
id: topRow
|
||||
anchors.fill: parent
|
||||
focus: true
|
||||
clip: true
|
||||
|
||||
sourceComponent: rowDelegate
|
||||
property variant modelItem
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
id: arrow
|
||||
anchors.right: parent.right
|
||||
width: 20 + 2*border.width; height: parent.height
|
||||
|
||||
border.color: main.border.color
|
||||
border.width: main.border.width
|
||||
|
||||
Image {
|
||||
id: arrowIcon
|
||||
anchors.fill: parent
|
||||
anchors.leftMargin: parent.border.width
|
||||
anchors.rightMargin: parent.border.width
|
||||
clip: true
|
||||
smooth: true
|
||||
fillMode: Image.PreserveAspectFit
|
||||
}
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
id: mouseArea
|
||||
anchors.fill: container
|
||||
|
||||
cursorShape: Qt.PointingHandCursor
|
||||
|
||||
hoverEnabled: true
|
||||
|
||||
onEntered: if (main.state == "") main.state = "hover";
|
||||
onExited: if (main.state == "hover") main.state = "";
|
||||
onClicked: { container.focus = true; toggle() }
|
||||
onWheel: {
|
||||
if (wheel.angleDelta.y > 0)
|
||||
listView.decrementCurrentIndex()
|
||||
else
|
||||
listView.incrementCurrentIndex()
|
||||
}
|
||||
}
|
||||
|
||||
Keys.onPressed: {
|
||||
if (event.key === Qt.Key_Up) {
|
||||
listView.decrementCurrentIndex()
|
||||
} else if (event.key === Qt.Key_Down) {
|
||||
if (event.modifiers !== Qt.AltModifier)
|
||||
listView.incrementCurrentIndex()
|
||||
else
|
||||
toggle()
|
||||
} else if (event.key === Qt.Key_Enter || event.key === Qt.Key_Return) {
|
||||
close(true)
|
||||
} else if (event.key === Qt.Key_Escape) {
|
||||
close(false)
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
id: dropDown
|
||||
width: container.width; height: 0
|
||||
anchors.top: container.bottom
|
||||
anchors.topMargin: 0
|
||||
|
||||
color: container.menuColor
|
||||
|
||||
clip: true
|
||||
|
||||
Behavior on height { NumberAnimation { duration: 100 } }
|
||||
|
||||
Component {
|
||||
id: myDelegate
|
||||
|
||||
Rectangle {
|
||||
width: dropDown.width; height: container.height - 2*container.borderWidth
|
||||
color: "transparent"
|
||||
|
||||
Loader {
|
||||
id: loader
|
||||
anchors.fill: parent
|
||||
sourceComponent: rowDelegate
|
||||
|
||||
property variant modelItem: model
|
||||
}
|
||||
|
||||
property variant modelItem: model
|
||||
|
||||
MouseArea {
|
||||
id: delegateMouseArea
|
||||
anchors.fill: parent
|
||||
|
||||
cursorShape: Qt.PointingHandCursor
|
||||
|
||||
hoverEnabled: true
|
||||
onEntered: listView.currentIndex = index
|
||||
onClicked: close(true)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ListView {
|
||||
id: listView
|
||||
width: container.width; height: (container.height - 2*container.borderWidth) * count + container.borderWidth
|
||||
delegate: myDelegate
|
||||
highlight: Rectangle {
|
||||
anchors.horizontalCenter: parent ? parent.horizontalCenter : undefined;
|
||||
color: container.hoverColor
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
anchors.fill: listView
|
||||
anchors.topMargin: -container.borderWidth
|
||||
color: "transparent"
|
||||
clip: false
|
||||
border.color: main.border.color
|
||||
border.width: main.border.width
|
||||
}
|
||||
|
||||
states: [
|
||||
State {
|
||||
name: "visible";
|
||||
PropertyChanges { target: dropDown; height: (container.height - 2*container.borderWidth) * listView.count + container.borderWidth}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
function toggle() {
|
||||
if (dropDown.state === "visible")
|
||||
close(false)
|
||||
else
|
||||
open()
|
||||
}
|
||||
|
||||
function open() {
|
||||
dropDown.state = "visible"
|
||||
listView.currentIndex = container.index
|
||||
}
|
||||
|
||||
function close(update) {
|
||||
dropDown.state = ""
|
||||
|
||||
if (update) {
|
||||
container.index = listView.currentIndex
|
||||
topRow.modelItem = listView.currentItem.modelItem
|
||||
valueChanged(listView.currentIndex)
|
||||
}
|
||||
}
|
||||
|
||||
Component.onCompleted: {
|
||||
listView.currentIndex = container.index
|
||||
if (listView.currentItem)
|
||||
topRow.modelItem = listView.currentItem.modelItem
|
||||
}
|
||||
|
||||
onIndexChanged: {
|
||||
listView.currentIndex = container.index
|
||||
if (listView.currentItem)
|
||||
topRow.modelItem = listView.currentItem.modelItem
|
||||
}
|
||||
|
||||
onModelChanged: {
|
||||
listView.currentIndex = container.index
|
||||
if (listView.currentItem)
|
||||
topRow.modelItem = listView.currentItem.modelItem
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,97 @@
|
||||
/***************************************************************************
|
||||
* Copyright (c) 2013 Reza Fatahilah Shah <rshah0385@kireihana.com>
|
||||
* 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
|
||||
|
||||
Image {
|
||||
id: container
|
||||
|
||||
opacity: 0.6
|
||||
|
||||
property bool enabled: true
|
||||
property bool spaceDown: false
|
||||
property bool isFocused: activeFocus || mouseArea.containsMouse
|
||||
property bool isPressed: spaceDown || mouseArea.pressed
|
||||
|
||||
signal pressed()
|
||||
signal released()
|
||||
signal clicked()
|
||||
|
||||
mirror: LayoutMirroring.enabled
|
||||
states: [
|
||||
State {
|
||||
name: "disabled"; when: (container.enabled === false)
|
||||
},
|
||||
State {
|
||||
name: "active"; when: container.enabled && container.isFocused && !container.isPressed
|
||||
PropertyChanges { target: container; opacity: 1.0 }
|
||||
},
|
||||
State {
|
||||
name: "pressed"; when: container.enabled && container.isPressed
|
||||
}
|
||||
]
|
||||
|
||||
Behavior on opacity { NumberAnimation { duration: 200 } }
|
||||
|
||||
clip: true
|
||||
smooth: true
|
||||
fillMode: Image.PreserveAspectFit
|
||||
|
||||
MouseArea {
|
||||
id: mouseArea
|
||||
|
||||
anchors.fill: parent
|
||||
|
||||
cursorShape: Qt.PointingHandCursor
|
||||
|
||||
hoverEnabled: true
|
||||
|
||||
acceptedButtons: Qt.LeftButton
|
||||
|
||||
onPressed: { container.focus = true; container.pressed() }
|
||||
onClicked: { container.focus = true; container.clicked() }
|
||||
onReleased: { container.focus = true; container.released() }
|
||||
}
|
||||
|
||||
Keys.onPressed: {
|
||||
if (event.key === Qt.Key_Space) {
|
||||
container.spaceDown = true;
|
||||
container.pressed()
|
||||
event.accepted = true
|
||||
} else if (event.key === Qt.Key_Return) {
|
||||
container.clicked()
|
||||
event.accepted = true
|
||||
}
|
||||
}
|
||||
|
||||
Keys.onReleased: {
|
||||
if (event.key === Qt.Key_Space) {
|
||||
container.spaceDown = false;
|
||||
container.released()
|
||||
container.clicked()
|
||||
event.accepted = true
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
/***************************************************************************
|
||||
* Copyright (c) 2013 Nikita Mikhaylov <nslqqq@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
|
||||
|
||||
ComboBox {
|
||||
id: combo
|
||||
|
||||
model: keyboard.layouts
|
||||
index: keyboard.currentLayout
|
||||
|
||||
onValueChanged: keyboard.currentLayout = id
|
||||
|
||||
Connections {
|
||||
target: keyboard
|
||||
|
||||
onCurrentLayoutChanged: combo.index = keyboard.currentLayout
|
||||
}
|
||||
|
||||
rowDelegate: Rectangle {
|
||||
color: "transparent"
|
||||
|
||||
Image {
|
||||
id: img
|
||||
source: "${DATA_INSTALL_DIR}/flags/%1.png".arg(modelItem ? modelItem.modelData.shortName : "zz")
|
||||
|
||||
anchors.margins: 4
|
||||
fillMode: Image.PreserveAspectFit
|
||||
|
||||
anchors.left: parent.left
|
||||
anchors.top: parent.top
|
||||
anchors.bottom: parent.bottom
|
||||
}
|
||||
|
||||
Text {
|
||||
anchors.margins: 4
|
||||
anchors.left: img.right
|
||||
anchors.top: parent.top
|
||||
anchors.bottom: parent.bottom
|
||||
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
|
||||
text: modelItem ? modelItem.modelData.shortName : "zz"
|
||||
font.pixelSize: 14
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,89 @@
|
||||
/***************************************************************************
|
||||
* Copyright (c) 2013 Reza Fatahilah Shah <rshah0385@kireihana.com>
|
||||
* 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
|
||||
|
||||
Rectangle {
|
||||
id: menu
|
||||
|
||||
width: 200; height: 0
|
||||
|
||||
property int itemHeight: 30
|
||||
property alias model: menuList.model
|
||||
property alias index: menuList.currentIndex
|
||||
|
||||
Behavior on height { NumberAnimation { duration: 100 } }
|
||||
|
||||
states: [
|
||||
State {
|
||||
name: "visible";
|
||||
PropertyChanges { target: menu; height: itemHeight * menuList.count }
|
||||
}
|
||||
]
|
||||
|
||||
Component {
|
||||
id: listViewItem
|
||||
|
||||
Rectangle {
|
||||
color: mouseArea.containsMouse ? "steelblue" : "transparent"
|
||||
width: parent.width; height: menu.itemHeight
|
||||
|
||||
Text {
|
||||
anchors.fill: parent
|
||||
anchors.margins: 4
|
||||
|
||||
text: model.name
|
||||
elide: Text.ElideRight
|
||||
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
id: mouseArea
|
||||
anchors.fill: parent
|
||||
|
||||
cursorShape: Qt.PointingHandCursor
|
||||
|
||||
hoverEnabled: true
|
||||
|
||||
onClicked: { menuList.currentIndex = index; menu.state = "" }
|
||||
}
|
||||
|
||||
Keys.onReturnPressed: { itemClicked(index); menu.state = "" }
|
||||
}
|
||||
}
|
||||
|
||||
ListView {
|
||||
id: menuList
|
||||
|
||||
anchors.fill: parent
|
||||
|
||||
clip: true
|
||||
|
||||
delegate: listViewItem
|
||||
highlight: Rectangle { color: "lightsteelblue" }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,165 @@
|
||||
/***************************************************************************
|
||||
* Copyright (c) 2013 Nikita Mikhaylov <nslqqq@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
|
||||
|
||||
FocusScope {
|
||||
id: container
|
||||
width: 80; height: 30
|
||||
|
||||
property alias color: txtMain.color
|
||||
property alias borderColor: txtMain.borderColor
|
||||
property alias focusColor: txtMain.focusColor
|
||||
property alias hoverColor: txtMain.hoverColor
|
||||
property alias radius: txtMain.radius
|
||||
property alias font: txtMain.font
|
||||
property alias textColor: txtMain.textColor
|
||||
property alias echoMode: txtMain.echoMode
|
||||
property alias text: txtMain.text
|
||||
|
||||
property alias image: img.source
|
||||
property double imageFadeIn: 300
|
||||
property double imageFadeOut: 200
|
||||
|
||||
property alias tooltipEnabled: tooltip.visible
|
||||
property alias tooltipText: tooltipText.text
|
||||
property alias tooltipFG: tooltipText.color
|
||||
property alias tooltipBG: tooltip.color
|
||||
|
||||
TextConstants {
|
||||
id: textConstants
|
||||
}
|
||||
|
||||
TextBox {
|
||||
id: txtMain
|
||||
width: parent.width; height: parent.height
|
||||
font.pixelSize: 14
|
||||
|
||||
echoMode: TextInput.Password
|
||||
|
||||
focus: true
|
||||
}
|
||||
|
||||
Image {
|
||||
id: img
|
||||
opacity: 0
|
||||
state: keyboard.capsLock ? "activated" : ""
|
||||
anchors.right: parent.right
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
fillMode: Image.PreserveAspectFit
|
||||
|
||||
smooth: true
|
||||
height: parent.height * 0.8
|
||||
|
||||
source: "warning.png"
|
||||
sourceSize.width: width
|
||||
sourceSize.height: height
|
||||
|
||||
anchors.rightMargin: 0.3 * width
|
||||
|
||||
states: [
|
||||
State {
|
||||
name: "activated"
|
||||
PropertyChanges { target: img; opacity: 1; }
|
||||
},
|
||||
State {
|
||||
name: ""
|
||||
PropertyChanges { target: img; opacity: 0; }
|
||||
}
|
||||
]
|
||||
|
||||
transitions: [
|
||||
Transition {
|
||||
to: "activated"
|
||||
NumberAnimation { target: img; property: "opacity"; from: 0; to: 1; duration: imageFadeIn; }
|
||||
},
|
||||
|
||||
Transition {
|
||||
to: ""
|
||||
NumberAnimation { target: img; property: "opacity"; from: 1; to: 0; duration: imageFadeOut; }
|
||||
}
|
||||
]
|
||||
|
||||
MouseArea {
|
||||
id: hoverArea
|
||||
|
||||
anchors.fill: parent
|
||||
hoverEnabled: true
|
||||
cursorShape: Qt.ArrowCursor
|
||||
|
||||
onEntered: {
|
||||
tooltip.x = mouseX + img.x + 10
|
||||
tooltip.y = mouseY + 10
|
||||
}
|
||||
|
||||
onPositionChanged: {
|
||||
tooltip.x = mouseX + img.x + 10
|
||||
tooltip.y = mouseY + 10
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
id: tooltip
|
||||
color: "lightblue"
|
||||
border.color: "black"
|
||||
border.width: 1
|
||||
|
||||
width: 1.1 * tooltipText.implicitWidth
|
||||
height: 1.4 * tooltipText.implicitHeight
|
||||
radius: 2
|
||||
opacity: 0
|
||||
|
||||
state: hoverArea.containsMouse && img.state == "activated" ? "activated" : ""
|
||||
|
||||
states: [
|
||||
State {
|
||||
name: "activated"
|
||||
PropertyChanges { target: tooltip; opacity: 1 }
|
||||
},
|
||||
State {
|
||||
name: ""
|
||||
PropertyChanges { target: tooltip; opacity: 0 }
|
||||
}
|
||||
]
|
||||
|
||||
transitions: [
|
||||
Transition {
|
||||
to: "activated"
|
||||
NumberAnimation { target: tooltip; property: "opacity"; from: 0; to: 1; duration: imageFadeIn; }
|
||||
},
|
||||
|
||||
Transition {
|
||||
to: ""
|
||||
NumberAnimation { target: tooltip; property: "opacity"; from: 1; to: 0; duration: imageFadeOut; }
|
||||
}
|
||||
]
|
||||
|
||||
Text {
|
||||
id: tooltipText
|
||||
anchors.centerIn: parent;
|
||||
text: textConstants.capslockWarning
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,126 @@
|
||||
/***************************************************************************
|
||||
* 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
|
||||
|
||||
FocusScope {
|
||||
id: container
|
||||
|
||||
width: 150; height: 185
|
||||
clip: true
|
||||
|
||||
property alias name: name.text
|
||||
property alias icon: icon.source
|
||||
property alias password: password.text
|
||||
property bool showPassword: true
|
||||
|
||||
signal login()
|
||||
|
||||
Behavior on height { NumberAnimation { duration: 100 } }
|
||||
|
||||
states: [
|
||||
State {
|
||||
name: ""
|
||||
PropertyChanges { target: container; height: 185 }
|
||||
},
|
||||
State {
|
||||
name: "active"
|
||||
PropertyChanges { target: container; height: 225 }
|
||||
}
|
||||
]
|
||||
|
||||
Rectangle {
|
||||
id: shadow
|
||||
anchors.fill: parent
|
||||
color: "#55000000"
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
id: canvas
|
||||
anchors.fill: shadow
|
||||
anchors.margins: 2
|
||||
color: "white"
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
id: mouseArea
|
||||
anchors.fill: parent
|
||||
cursorShape: Qt.PointingHandCursor
|
||||
}
|
||||
|
||||
Column {
|
||||
id: column
|
||||
anchors.fill: canvas
|
||||
anchors.margins: 5
|
||||
spacing: 5
|
||||
|
||||
clip: true
|
||||
|
||||
Image {
|
||||
id: icon
|
||||
width: parent.width; height: 150
|
||||
clip: true
|
||||
smooth: true
|
||||
fillMode: Image.PreserveAspectCrop
|
||||
}
|
||||
|
||||
Text {
|
||||
id: name
|
||||
height: 20
|
||||
anchors { left: parent.left; right: parent.right }
|
||||
color: "#666666"
|
||||
elide: Text.ElideRight
|
||||
font { bold: true; capitalization: Font.AllUppercase }
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
}
|
||||
|
||||
PasswordBox {
|
||||
id: password
|
||||
width: parent.width; height: showPassword ? 30 : 0
|
||||
font.pixelSize: 14
|
||||
|
||||
focus: true
|
||||
visible: showPassword
|
||||
|
||||
Keys.onPressed: {
|
||||
if (event.key === Qt.Key_Return || event.key === Qt.Key_Enter) {
|
||||
container.login();
|
||||
event.accepted = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Text {
|
||||
id: pressToLogin
|
||||
height: 30
|
||||
font.pixelSize: 14
|
||||
anchors { left: parent.left; right: parent.right }
|
||||
color: "#666666"
|
||||
elide: Text.ElideRight
|
||||
font { bold: true; capitalization: Font.AllUppercase }
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
text: qsTr("Press to login")
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,89 @@
|
||||
/***************************************************************************
|
||||
* 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
|
||||
|
||||
FocusScope {
|
||||
id: container
|
||||
width: 80; height: 30
|
||||
|
||||
property color color: "white"
|
||||
property color borderColor: "#ababab"
|
||||
property color focusColor: "#266294"
|
||||
property color hoverColor: "#5692c4"
|
||||
property alias radius: main.radius
|
||||
property alias font: txtMain.font
|
||||
property alias textColor: txtMain.color
|
||||
property alias echoMode: txtMain.echoMode
|
||||
property alias text: txtMain.text
|
||||
|
||||
Rectangle {
|
||||
id: main
|
||||
|
||||
anchors.fill: parent
|
||||
|
||||
color: container.color
|
||||
border.color: container.borderColor
|
||||
border.width: 1
|
||||
|
||||
Behavior on border.color { ColorAnimation { duration: 100 } }
|
||||
|
||||
states: [
|
||||
State {
|
||||
name: "hover"; when: mouseArea.containsMouse
|
||||
PropertyChanges { target: main; border.width: 1; border.color: container.hoverColor }
|
||||
},
|
||||
State {
|
||||
name: "focus"; when: container.activeFocus && !mouseArea.containsMouse
|
||||
PropertyChanges { target: main; border.width: 1; border.color: container.focusColor }
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
id: mouseArea
|
||||
anchors.fill: container
|
||||
|
||||
cursorShape: Qt.IBeamCursor
|
||||
|
||||
hoverEnabled: true
|
||||
|
||||
onEntered: if (main.state == "") main.state = "hover";
|
||||
onExited: if (main.state == "hover") main.state = "";
|
||||
onClicked: container.focus = true;
|
||||
}
|
||||
|
||||
TextInput {
|
||||
id: txtMain
|
||||
width: parent.width - 16
|
||||
anchors.centerIn: parent
|
||||
|
||||
color: "black"
|
||||
|
||||
clip: true
|
||||
focus: true
|
||||
|
||||
passwordCharacter: "\u25cf"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
configure_file("2.0/LayoutBox.qml" "2.0/LayoutBox.qml")
|
||||
|
||||
install(DIRECTORY "2.0/" DESTINATION "${QML_INSTALL_DIR}/SddmComponents" PATTERN "LayoutBox.qml" EXCLUDE)
|
||||
install(DIRECTORY "common/" DESTINATION "${QML_INSTALL_DIR}/SddmComponents")
|
||||
install(DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/2.0/" DESTINATION "${QML_INSTALL_DIR}/SddmComponents")
|
||||
@@ -0,0 +1,53 @@
|
||||
/***************************************************************************
|
||||
* Copyright (c) 2013 Nikita Mikhailov <nslqqq@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
|
||||
|
||||
QtObject {
|
||||
readonly property string capslockWarning: qsTr("Warning, Caps Lock is ON!")
|
||||
readonly property string layout: qsTr("Layout")
|
||||
readonly property string login: qsTr("Login")
|
||||
readonly property string loginFailed: qsTr("Login failed")
|
||||
readonly property string loginSucceeded: qsTr("Login succeeded")
|
||||
readonly property string password: qsTr("Password")
|
||||
readonly property string emptyPassword: qsTr("Please enter a password!")
|
||||
readonly property string passwordChange: qsTr("Change password")
|
||||
readonly property string prompt: qsTr("Enter your username and password")
|
||||
readonly property string promptSelectUser: qsTr("Select your user and enter password")
|
||||
readonly property string promptUser: qsTr("Enter your username")
|
||||
readonly property string promptPassword: qsTr("Enter your password")
|
||||
readonly property string emptyPrompt: qsTr("Password:")
|
||||
readonly property string showPasswordPrompt:qsTr("Show password")
|
||||
readonly property string hidePasswordPrompt:qsTr("Hide password")
|
||||
readonly property string reboot: qsTr("Reboot")
|
||||
readonly property string session: qsTr("Session")
|
||||
readonly property string shutdown: qsTr("Shutdown")
|
||||
readonly property string suspend: qsTr("Suspend")
|
||||
readonly property string hibernate: qsTr("Hibernate")
|
||||
readonly property string userName: qsTr("Username")
|
||||
readonly property string welcomeText: qsTr("Welcome to %1")
|
||||
readonly property string pamMaxtriesError: qsTr("Password change aborted because maximum tries reached")
|
||||
readonly property string pamMaxtriesInfo: qsTr("New password change round! Please input current password again!")
|
||||
}
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
module SddmComponents
|
||||
|
||||
Background 2.0 Background.qml
|
||||
Button 2.0 Button.qml
|
||||
Clock 2.0 Clock.qml
|
||||
ComboBox 2.0 ComboBox.qml
|
||||
ImageButton 2.0 ImageButton.qml
|
||||
LayoutBox 2.0 LayoutBox.qml
|
||||
Menu 2.0 Menu.qml
|
||||
PasswordBox 2.0 PasswordBox.qml
|
||||
PictureBox 2.0 PictureBox.qml
|
||||
TextBox 2.0 TextBox.qml
|
||||
TextConstants 2.0 TextConstants.qml
|
||||
|
After Width: | Height: | Size: 9.5 KiB |
@@ -0,0 +1,37 @@
|
||||
install(DIRECTORY "flags" DESTINATION "${DATA_INSTALL_DIR}")
|
||||
|
||||
install(FILES
|
||||
"org.freedesktop.DisplayManager.conf"
|
||||
DESTINATION "${DBUS_CONFIG_DIR}"
|
||||
RENAME ${DBUS_CONFIG_FILENAME}
|
||||
)
|
||||
|
||||
install(FILES
|
||||
"faces/root.face.icon.png"
|
||||
DESTINATION "${DATA_INSTALL_DIR}/faces"
|
||||
RENAME "root.face.icon"
|
||||
)
|
||||
|
||||
install(FILES
|
||||
"faces/default.face.icon.png"
|
||||
DESTINATION "${DATA_INSTALL_DIR}/faces"
|
||||
RENAME ".face.icon"
|
||||
)
|
||||
|
||||
install(FILES
|
||||
"scripts/Xsession"
|
||||
"scripts/Xsetup"
|
||||
"scripts/Xstop"
|
||||
"scripts/wayland-session"
|
||||
DESTINATION "${DATA_INSTALL_DIR}/scripts"
|
||||
PERMISSIONS
|
||||
OWNER_READ OWNER_WRITE OWNER_EXECUTE
|
||||
GROUP_READ GROUP_EXECUTE
|
||||
WORLD_READ WORLD_EXECUTE
|
||||
)
|
||||
|
||||
if(BUILD_MAN_PAGES)
|
||||
add_subdirectory(man)
|
||||
endif()
|
||||
add_subdirectory(themes)
|
||||
add_subdirectory(translations)
|
||||
@@ -0,0 +1,2 @@
|
||||
These are the default avatars.
|
||||
They are installed to `.face.icon` and `root.face.icon`. See ../CMakeLists.txt.
|
||||
|
After Width: | Height: | Size: 4.8 KiB |
|
After Width: | Height: | Size: 5.0 KiB |
|
After Width: | Height: | Size: 178 B |
|
After Width: | Height: | Size: 175 B |
|
After Width: | Height: | Size: 350 B |
|
After Width: | Height: | Size: 219 B |
|
After Width: | Height: | Size: 677 B |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 214 B |
|
After Width: | Height: | Size: 209 B |
|
After Width: | Height: | Size: 797 B |
|
After Width: | Height: | Size: 885 B |
|
After Width: | Height: | Size: 1.0 KiB |
|
After Width: | Height: | Size: 379 B |
|
After Width: | Height: | Size: 247 B |
|
After Width: | Height: | Size: 1009 B |
|
After Width: | Height: | Size: 375 B |
|
After Width: | Height: | Size: 220 B |
|
After Width: | Height: | Size: 457 B |
|
After Width: | Height: | Size: 227 B |
|
After Width: | Height: | Size: 253 B |
|
After Width: | Height: | Size: 220 B |
|
After Width: | Height: | Size: 993 B |
|
After Width: | Height: | Size: 221 B |
|
After Width: | Height: | Size: 2.4 KiB |
|
After Width: | Height: | Size: 234 B |
|
After Width: | Height: | Size: 214 B |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 178 B |
|
After Width: | Height: | Size: 262 B |
|
After Width: | Height: | Size: 2.4 KiB |
|
After Width: | Height: | Size: 223 B |
|
After Width: | Height: | Size: 382 B |
|
After Width: | Height: | Size: 622 B |
|
After Width: | Height: | Size: 292 B |
|
After Width: | Height: | Size: 260 B |
|
After Width: | Height: | Size: 221 B |
|
After Width: | Height: | Size: 992 B |
|
After Width: | Height: | Size: 321 B |
|
After Width: | Height: | Size: 281 B |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 232 B |
|
After Width: | Height: | Size: 281 B |
|
After Width: | Height: | Size: 657 B |
|
After Width: | Height: | Size: 223 B |
|
After Width: | Height: | Size: 200 B |
|
After Width: | Height: | Size: 165 B |
|
After Width: | Height: | Size: 217 B |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 384 B |
|
After Width: | Height: | Size: 820 B |
|
After Width: | Height: | Size: 220 B |
|
After Width: | Height: | Size: 257 B |
|
After Width: | Height: | Size: 884 B |
|
After Width: | Height: | Size: 211 B |
|
After Width: | Height: | Size: 248 B |
|
After Width: | Height: | Size: 607 B |
|
After Width: | Height: | Size: 290 B |
|
After Width: | Height: | Size: 357 B |
|
After Width: | Height: | Size: 222 B |
|
After Width: | Height: | Size: 215 B |
|
After Width: | Height: | Size: 384 B |
|
After Width: | Height: | Size: 339 B |
|
After Width: | Height: | Size: 202 B |