mirror of
https://bitbucket.org/smil3y/kde-playground.git
synced 2025-02-24 02:42:51 +00:00
kgreeter: review
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
parent
9e8cc9b5f0
commit
9906315da3
3 changed files with 97 additions and 52 deletions
|
@ -2,30 +2,40 @@ cmake_minimum_required(VERSION 3.4 FATAL_ERROR)
|
||||||
|
|
||||||
project(kgreeter CXX)
|
project(kgreeter CXX)
|
||||||
|
|
||||||
|
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/modules")
|
||||||
set(CMAKE_AUTOMOC TRUE)
|
set(CMAKE_AUTOMOC TRUE)
|
||||||
set(CMAKE_AUTOUIC TRUE)
|
set(CMAKE_AUTOUIC TRUE)
|
||||||
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
|
|
||||||
|
|
||||||
include(GNUInstallDirs)
|
include(GNUInstallDirs)
|
||||||
|
|
||||||
find_package(Katie REQUIRED)
|
find_package(Katie REQUIRED)
|
||||||
find_package(KDE4 REQUIRED)
|
find_package(KDE4 REQUIRED)
|
||||||
|
|
||||||
|
find_package(LightDM)
|
||||||
|
set_package_properties(LightDM PROPERTIES
|
||||||
|
PURPOSE "Required for the greeter"
|
||||||
|
DESCRIPTION "Cross-desktop display manager"
|
||||||
|
URL "https://github.com/canonical/lightdm"
|
||||||
|
TYPE REQUIRED
|
||||||
|
)
|
||||||
|
|
||||||
|
find_package(GLIB2)
|
||||||
|
set_package_properties(GLIB2 PROPERTIES
|
||||||
|
PURPOSE "Required for the greeter"
|
||||||
|
DESCRIPTION "Low-level core library that forms the basis for projects such as GTK and GNOME"
|
||||||
|
URL "https://gitlab.gnome.org/GNOME/glib"
|
||||||
|
TYPE REQUIRED
|
||||||
|
)
|
||||||
|
|
||||||
include_directories(
|
include_directories(
|
||||||
${KATIE_INCLUDES}
|
${KATIE_INCLUDES}
|
||||||
${KDE4_INCLUDES}
|
${KDE4_INCLUDES}
|
||||||
/usr/include/lightdm-gobject-1
|
${LIGHTDM_INCLUDE_DIR}
|
||||||
/usr/include/gio-unix-2.0
|
${GLIB2_INCLUDE_DIR}
|
||||||
/usr/include/libmount
|
|
||||||
/usr/include/blkid
|
|
||||||
/usr/include/glib-2.0
|
|
||||||
/usr/lib/x86_64-linux-gnu/glib-2.0/include
|
|
||||||
/usr/include/libxml2
|
|
||||||
)
|
)
|
||||||
link_directories(/usr/pkg/lib)
|
|
||||||
|
|
||||||
add_definitions(
|
add_definitions(
|
||||||
|
${LIGHTDM_DEFINITIONS}
|
||||||
)
|
)
|
||||||
|
|
||||||
add_executable(kgreeter kgreeter.cpp)
|
add_executable(kgreeter kgreeter.cpp)
|
||||||
|
@ -33,9 +43,9 @@ target_link_libraries(kgreeter
|
||||||
Katie::Core
|
Katie::Core
|
||||||
Katie::Gui
|
Katie::Gui
|
||||||
KDE4::kdeui
|
KDE4::kdeui
|
||||||
glib-2.0
|
${LIGHTDM_LIBRARIES}
|
||||||
|
${GLIB2_LIBRARIES}
|
||||||
gobject-2.0
|
gobject-2.0
|
||||||
lightdm-gobject-1
|
|
||||||
)
|
)
|
||||||
|
|
||||||
set_target_properties(kgreeter PROPERTIES
|
set_target_properties(kgreeter PROPERTIES
|
||||||
|
|
42
kgreeter/cmake/modules/FindLightDM.cmake
Normal file
42
kgreeter/cmake/modules/FindLightDM.cmake
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
# Try to find LightDM library, once done this will define:
|
||||||
|
#
|
||||||
|
# LIGHTDM_FOUND - system has LightDM
|
||||||
|
# LIGHTDM_INCLUDE_DIR - the LightDM include directory
|
||||||
|
# LIGHTDM_LIBRARIES - the libraries needed to use LightDM
|
||||||
|
# LIGHTDM_DEFINITIONS - compiler switches required for using LightDM
|
||||||
|
#
|
||||||
|
# Copyright (c) 2022 Ivailo Monev <xakepa10@gmail.com>
|
||||||
|
#
|
||||||
|
# Redistribution and use is allowed according to the terms of the BSD license.
|
||||||
|
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
|
||||||
|
|
||||||
|
if(NOT WIN32)
|
||||||
|
include(FindPkgConfig)
|
||||||
|
pkg_check_modules(PC_LIGHTDM QUIET liblightdm-gobject-1)
|
||||||
|
|
||||||
|
set(LIGHTDM_INCLUDE_DIR ${PC_LIGHTDM_INCLUDE_DIRS})
|
||||||
|
set(LIGHTDM_LIBRARIES ${PC_LIGHTDM_LIBRARIES})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(LIGHTDM_VERSION ${PC_LIGHTDM_VERSION})
|
||||||
|
set(LIGHTDM_DEFINITIONS ${PC_LIGHTDM_CFLAGS_OTHER})
|
||||||
|
|
||||||
|
if(NOT LIGHTDM_INCLUDE_DIR OR NOT LIGHTDM_LIBRARIES)
|
||||||
|
find_path(LIGHTDM_INCLUDE_DIR
|
||||||
|
NAMES lightdm-gobject-1/lightdm.h
|
||||||
|
HINTS $ENV{LIGHTDMDIR}/include
|
||||||
|
)
|
||||||
|
|
||||||
|
find_library(LIGHTDM_LIBRARIES
|
||||||
|
NAMES lightdm-gobject-1
|
||||||
|
HINTS $ENV{LIGHTDMDIR}/lib
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
include(FindPackageHandleStandardArgs)
|
||||||
|
find_package_handle_standard_args(LightDM
|
||||||
|
VERSION_VAR LIGHTDM_VERSION
|
||||||
|
REQUIRED_VARS LIGHTDM_LIBRARIES LIGHTDM_INCLUDE_DIR
|
||||||
|
)
|
||||||
|
|
||||||
|
mark_as_advanced(LIGHTDM_INCLUDE_DIR LIGHTDM_LIBRARIES)
|
|
@ -13,14 +13,10 @@
|
||||||
|
|
||||||
#include "ui_kgreeter.h"
|
#include "ui_kgreeter.h"
|
||||||
|
|
||||||
QT_USE_NAMESPACE
|
// for the callbacks
|
||||||
|
|
||||||
// For the callbacks
|
|
||||||
static GMainLoop *glibloop = NULL;
|
static GMainLoop *glibloop = NULL;
|
||||||
|
|
||||||
static QSettings kgreetersettings("/etc/lightdm/lightdm-kgreeter-greeter.conf", QSettings::IniFormat);
|
static QSettings kgreetersettings("/etc/lightdm/lightdm-kgreeter-greeter.conf", QSettings::IniFormat);
|
||||||
// TODO: where to save it? /var/lib/lightdm/ is not writable
|
|
||||||
static QSettings kgreeterstate("/tmp/lightdm-kgreeter-greeter.ini", QSettings::IniFormat);
|
|
||||||
|
|
||||||
class KGreeter : public QMainWindow
|
class KGreeter : public QMainWindow
|
||||||
{
|
{
|
||||||
|
@ -34,9 +30,9 @@ public:
|
||||||
|
|
||||||
LightDMGreeter* getGreater() const;
|
LightDMGreeter* getGreater() const;
|
||||||
|
|
||||||
static void show_prompt_cb(LightDMGreeter *ldmgreeter, const char *ldmtext, LightDMPromptType ldmtype, gpointer ldmptr);
|
static void showPromptCb(LightDMGreeter *ldmgreeter, const char *ldmtext, LightDMPromptType ldmtype, gpointer ldmptr);
|
||||||
static void authentication_complete_cb(LightDMGreeter *ldmgreeter, gpointer ldmptr);
|
static void authenticationCompleteCb(LightDMGreeter *ldmgreeter, gpointer ldmptr);
|
||||||
static void show_message_cb(LightDMGreeter *ldmgreeter, const gchar *ldmtext, LightDMMessageType ldmtype, gpointer ldmptr);
|
static void showMessageCb(LightDMGreeter *ldmgreeter, const gchar *ldmtext, LightDMMessageType ldmtype, gpointer ldmptr);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void paintEvent(QPaintEvent *event);
|
void paintEvent(QPaintEvent *event);
|
||||||
|
@ -73,9 +69,18 @@ KGreeter::KGreeter(QWidget *parent)
|
||||||
|
|
||||||
m_ldmgreeter = lightdm_greeter_new();
|
m_ldmgreeter = lightdm_greeter_new();
|
||||||
|
|
||||||
g_signal_connect(m_ldmgreeter, LIGHTDM_GREETER_SIGNAL_SHOW_PROMPT, G_CALLBACK(KGreeter::show_prompt_cb), this);
|
g_signal_connect(
|
||||||
g_signal_connect(m_ldmgreeter, LIGHTDM_GREETER_SIGNAL_AUTHENTICATION_COMPLETE, G_CALLBACK(KGreeter::authentication_complete_cb), this);
|
m_ldmgreeter, LIGHTDM_GREETER_SIGNAL_SHOW_PROMPT,
|
||||||
g_signal_connect(m_ldmgreeter, LIGHTDM_GREETER_SIGNAL_SHOW_MESSAGE, G_CALLBACK(KGreeter::show_message_cb), this);
|
G_CALLBACK(KGreeter::showPromptCb), this
|
||||||
|
);
|
||||||
|
g_signal_connect(
|
||||||
|
m_ldmgreeter, LIGHTDM_GREETER_SIGNAL_AUTHENTICATION_COMPLETE,
|
||||||
|
G_CALLBACK(KGreeter::authenticationCompleteCb), this
|
||||||
|
);
|
||||||
|
g_signal_connect(
|
||||||
|
m_ldmgreeter, LIGHTDM_GREETER_SIGNAL_SHOW_MESSAGE,
|
||||||
|
G_CALLBACK(KGreeter::showMessageCb), this
|
||||||
|
);
|
||||||
|
|
||||||
GList *ldmlayouts = lightdm_get_layouts();
|
GList *ldmlayouts = lightdm_get_layouts();
|
||||||
for (GList *ldmitem = ldmlayouts; ldmitem; ldmitem = ldmitem->next) {
|
for (GList *ldmitem = ldmlayouts; ldmitem; ldmitem = ldmitem->next) {
|
||||||
|
@ -122,19 +127,13 @@ KGreeter::KGreeter(QWidget *parent)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// qDebug() << Q_FUNC_INFO << kgreeterstate.fileName() << kgreeterstate.map() << kgreeterstate.status();
|
const QString ldmdefaultsession = QString::fromUtf8(lightdm_greeter_get_default_session_hint(m_ldmgreeter));
|
||||||
const QString lastuser = kgreeterstate.value("state/lastuser").toString();
|
if (!ldmdefaultsession.isEmpty()) {
|
||||||
for (int i = 0; i < m_ui.usersbox->count(); i++) {
|
for (int i = 0; i < m_ui.sessionsbox->count(); i++) {
|
||||||
if (m_ui.usersbox->itemText(i) == lastuser) {
|
if (m_ui.sessionsbox->itemData(i).toString() == ldmdefaultsession) {
|
||||||
m_ui.usersbox->setCurrentIndex(i);
|
m_ui.sessionsbox->setCurrentIndex(i);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
const QString lastsession = kgreeterstate.value("state/lastsession").toString();
|
|
||||||
for (int i = 0; i < m_ui.sessionsbox->count(); i++) {
|
|
||||||
if (m_ui.sessionsbox->itemData(i).toString() == lastuser) {
|
|
||||||
m_ui.sessionsbox->setCurrentIndex(i);
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -177,12 +176,12 @@ void KGreeter::paintEvent(QPaintEvent *event)
|
||||||
|
|
||||||
QByteArray KGreeter::getUser() const
|
QByteArray KGreeter::getUser() const
|
||||||
{
|
{
|
||||||
return m_ui.usersbox->currentText().toLocal8Bit();
|
return m_ui.usersbox->currentText().toUtf8();
|
||||||
}
|
}
|
||||||
|
|
||||||
QByteArray KGreeter::getPass() const
|
QByteArray KGreeter::getPass() const
|
||||||
{
|
{
|
||||||
return m_ui.passedit->text().toLocal8Bit();
|
return m_ui.passedit->text().toUtf8();
|
||||||
}
|
}
|
||||||
|
|
||||||
QByteArray KGreeter::getSession() const
|
QByteArray KGreeter::getSession() const
|
||||||
|
@ -195,7 +194,7 @@ LightDMGreeter * KGreeter::getGreater() const
|
||||||
return m_ldmgreeter;
|
return m_ldmgreeter;
|
||||||
}
|
}
|
||||||
|
|
||||||
void KGreeter::show_prompt_cb(LightDMGreeter *ldmgreeter, const char *ldmtext, LightDMPromptType ldmtype, gpointer ldmptr)
|
void KGreeter::showPromptCb(LightDMGreeter *ldmgreeter, const char *ldmtext, LightDMPromptType ldmtype, gpointer ldmptr)
|
||||||
{
|
{
|
||||||
// qDebug() << Q_FUNC_INFO;
|
// qDebug() << Q_FUNC_INFO;
|
||||||
|
|
||||||
|
@ -210,7 +209,7 @@ void KGreeter::show_prompt_cb(LightDMGreeter *ldmgreeter, const char *ldmtext, L
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void KGreeter::authentication_complete_cb(LightDMGreeter *ldmgreeter, gpointer ldmptr)
|
void KGreeter::authenticationCompleteCb(LightDMGreeter *ldmgreeter, gpointer ldmptr)
|
||||||
{
|
{
|
||||||
// qDebug() << Q_FUNC_INFO;
|
// qDebug() << Q_FUNC_INFO;
|
||||||
|
|
||||||
|
@ -219,10 +218,6 @@ void KGreeter::authentication_complete_cb(LightDMGreeter *ldmgreeter, gpointer l
|
||||||
|
|
||||||
const QByteArray kgreetersession = kgreeter->getSession();
|
const QByteArray kgreetersession = kgreeter->getSession();
|
||||||
|
|
||||||
kgreeterstate.setValue("state/lastsession", kgreetersession);
|
|
||||||
// qDebug() << Q_FUNC_INFO << kgreeterstate.fileName() << kgreeterstate.map() << kgreeterstate.status();
|
|
||||||
|
|
||||||
// Start the session
|
|
||||||
g_autoptr(GError) gliberror = NULL;
|
g_autoptr(GError) gliberror = NULL;
|
||||||
if (!lightdm_greeter_get_is_authenticated(ldmgreeter) ||
|
if (!lightdm_greeter_get_is_authenticated(ldmgreeter) ||
|
||||||
!lightdm_greeter_start_session_sync(ldmgreeter, kgreetersession.constData(), &gliberror))
|
!lightdm_greeter_start_session_sync(ldmgreeter, kgreetersession.constData(), &gliberror))
|
||||||
|
@ -235,18 +230,14 @@ void KGreeter::authentication_complete_cb(LightDMGreeter *ldmgreeter, gpointer l
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void KGreeter::show_message_cb(LightDMGreeter *ldmgreeter, const gchar *ldmtext, LightDMMessageType ldmtype, gpointer ldmptr)
|
void KGreeter::showMessageCb(LightDMGreeter *ldmgreeter, const gchar *ldmtext, LightDMMessageType ldmtype, gpointer ldmptr)
|
||||||
{
|
{
|
||||||
// qDebug() << Q_FUNC_INFO;
|
// qDebug() << Q_FUNC_INFO;
|
||||||
|
|
||||||
KGreeter* kgreeter = static_cast<KGreeter*>(ldmptr);
|
KGreeter* kgreeter = static_cast<KGreeter*>(ldmptr);
|
||||||
Q_ASSERT(kgreeter);
|
Q_ASSERT(kgreeter);
|
||||||
|
|
||||||
if (ldmtype == LIGHTDM_MESSAGE_TYPE_INFO) {
|
kgreeter->statusBar()->showMessage(QString::fromUtf8(ldmtext));
|
||||||
kgreeter->statusBar()->showMessage(QString::fromUtf8(ldmtext));
|
|
||||||
} else {
|
|
||||||
kgreeter->statusBar()->showMessage(QString::fromUtf8(ldmtext));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void KGreeter::slotSuspend()
|
void KGreeter::slotSuspend()
|
||||||
|
@ -303,7 +294,6 @@ void KGreeter::slotLogin()
|
||||||
|
|
||||||
g_autoptr(GError) gliberror = NULL;
|
g_autoptr(GError) gliberror = NULL;
|
||||||
lightdm_greeter_authenticate(m_ldmgreeter, kgreeterusername.constData(), &gliberror);
|
lightdm_greeter_authenticate(m_ldmgreeter, kgreeterusername.constData(), &gliberror);
|
||||||
kgreeterstate.setValue("state/lastuser", kgreeterusername);
|
|
||||||
g_main_loop_run(glibloop);
|
g_main_loop_run(glibloop);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -320,7 +310,10 @@ int main(int argc, char**argv)
|
||||||
|
|
||||||
const QString kgreetercolorscheme = kgreetersettings.value("greeter/colorscheme").toString();
|
const QString kgreetercolorscheme = kgreetersettings.value("greeter/colorscheme").toString();
|
||||||
if (!kgreetercolorscheme.isEmpty()) {
|
if (!kgreetercolorscheme.isEmpty()) {
|
||||||
KSharedConfigPtr kcolorschemeconfig = KSharedConfig::openConfig(QString::fromLatin1("color-schemes/%1.colors").arg(kgreetercolorscheme), KConfig::FullConfig, "data");
|
KSharedConfigPtr kcolorschemeconfig = KSharedConfig::openConfig(
|
||||||
|
QString::fromLatin1("color-schemes/%1.colors").arg(kgreetercolorscheme),
|
||||||
|
KConfig::FullConfig, "data"
|
||||||
|
);
|
||||||
app.setPalette(KGlobalSettings::createApplicationPalette(kcolorschemeconfig));
|
app.setPalette(KGlobalSettings::createApplicationPalette(kcolorschemeconfig));
|
||||||
} else {
|
} else {
|
||||||
app.setPalette(KGlobalSettings::createApplicationPalette());
|
app.setPalette(KGlobalSettings::createApplicationPalette());
|
||||||
|
|
Loading…
Add table
Reference in a new issue