mirror of
https://bitbucket.org/smil3y/kde-playground.git
synced 2025-02-23 18:32: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)
|
||||
|
||||
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/modules")
|
||||
set(CMAKE_AUTOMOC TRUE)
|
||||
set(CMAKE_AUTOUIC TRUE)
|
||||
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
|
||||
|
||||
include(GNUInstallDirs)
|
||||
|
||||
find_package(Katie 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(
|
||||
${KATIE_INCLUDES}
|
||||
${KDE4_INCLUDES}
|
||||
/usr/include/lightdm-gobject-1
|
||||
/usr/include/gio-unix-2.0
|
||||
/usr/include/libmount
|
||||
/usr/include/blkid
|
||||
/usr/include/glib-2.0
|
||||
/usr/lib/x86_64-linux-gnu/glib-2.0/include
|
||||
/usr/include/libxml2
|
||||
${LIGHTDM_INCLUDE_DIR}
|
||||
${GLIB2_INCLUDE_DIR}
|
||||
)
|
||||
link_directories(/usr/pkg/lib)
|
||||
|
||||
add_definitions(
|
||||
${LIGHTDM_DEFINITIONS}
|
||||
)
|
||||
|
||||
add_executable(kgreeter kgreeter.cpp)
|
||||
|
@ -33,9 +43,9 @@ target_link_libraries(kgreeter
|
|||
Katie::Core
|
||||
Katie::Gui
|
||||
KDE4::kdeui
|
||||
glib-2.0
|
||||
${LIGHTDM_LIBRARIES}
|
||||
${GLIB2_LIBRARIES}
|
||||
gobject-2.0
|
||||
lightdm-gobject-1
|
||||
)
|
||||
|
||||
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"
|
||||
|
||||
QT_USE_NAMESPACE
|
||||
|
||||
// For the callbacks
|
||||
// for the callbacks
|
||||
static GMainLoop *glibloop = NULL;
|
||||
|
||||
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
|
||||
{
|
||||
|
@ -34,9 +30,9 @@ public:
|
|||
|
||||
LightDMGreeter* getGreater() const;
|
||||
|
||||
static void show_prompt_cb(LightDMGreeter *ldmgreeter, const char *ldmtext, LightDMPromptType ldmtype, gpointer ldmptr);
|
||||
static void authentication_complete_cb(LightDMGreeter *ldmgreeter, gpointer ldmptr);
|
||||
static void show_message_cb(LightDMGreeter *ldmgreeter, const gchar *ldmtext, LightDMMessageType ldmtype, gpointer ldmptr);
|
||||
static void showPromptCb(LightDMGreeter *ldmgreeter, const char *ldmtext, LightDMPromptType ldmtype, gpointer ldmptr);
|
||||
static void authenticationCompleteCb(LightDMGreeter *ldmgreeter, gpointer ldmptr);
|
||||
static void showMessageCb(LightDMGreeter *ldmgreeter, const gchar *ldmtext, LightDMMessageType ldmtype, gpointer ldmptr);
|
||||
|
||||
protected:
|
||||
void paintEvent(QPaintEvent *event);
|
||||
|
@ -73,9 +69,18 @@ KGreeter::KGreeter(QWidget *parent)
|
|||
|
||||
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(m_ldmgreeter, LIGHTDM_GREETER_SIGNAL_AUTHENTICATION_COMPLETE, G_CALLBACK(KGreeter::authentication_complete_cb), this);
|
||||
g_signal_connect(m_ldmgreeter, LIGHTDM_GREETER_SIGNAL_SHOW_MESSAGE, G_CALLBACK(KGreeter::show_message_cb), this);
|
||||
g_signal_connect(
|
||||
m_ldmgreeter, LIGHTDM_GREETER_SIGNAL_SHOW_PROMPT,
|
||||
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();
|
||||
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 lastuser = kgreeterstate.value("state/lastuser").toString();
|
||||
for (int i = 0; i < m_ui.usersbox->count(); i++) {
|
||||
if (m_ui.usersbox->itemText(i) == lastuser) {
|
||||
m_ui.usersbox->setCurrentIndex(i);
|
||||
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;
|
||||
const QString ldmdefaultsession = QString::fromUtf8(lightdm_greeter_get_default_session_hint(m_ldmgreeter));
|
||||
if (!ldmdefaultsession.isEmpty()) {
|
||||
for (int i = 0; i < m_ui.sessionsbox->count(); i++) {
|
||||
if (m_ui.sessionsbox->itemData(i).toString() == ldmdefaultsession) {
|
||||
m_ui.sessionsbox->setCurrentIndex(i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -177,12 +176,12 @@ void KGreeter::paintEvent(QPaintEvent *event)
|
|||
|
||||
QByteArray KGreeter::getUser() const
|
||||
{
|
||||
return m_ui.usersbox->currentText().toLocal8Bit();
|
||||
return m_ui.usersbox->currentText().toUtf8();
|
||||
}
|
||||
|
||||
QByteArray KGreeter::getPass() const
|
||||
{
|
||||
return m_ui.passedit->text().toLocal8Bit();
|
||||
return m_ui.passedit->text().toUtf8();
|
||||
}
|
||||
|
||||
QByteArray KGreeter::getSession() const
|
||||
|
@ -195,7 +194,7 @@ LightDMGreeter * KGreeter::getGreater() const
|
|||
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;
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -219,10 +218,6 @@ void KGreeter::authentication_complete_cb(LightDMGreeter *ldmgreeter, gpointer l
|
|||
|
||||
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;
|
||||
if (!lightdm_greeter_get_is_authenticated(ldmgreeter) ||
|
||||
!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;
|
||||
|
||||
KGreeter* kgreeter = static_cast<KGreeter*>(ldmptr);
|
||||
Q_ASSERT(kgreeter);
|
||||
|
||||
if (ldmtype == LIGHTDM_MESSAGE_TYPE_INFO) {
|
||||
kgreeter->statusBar()->showMessage(QString::fromUtf8(ldmtext));
|
||||
} else {
|
||||
kgreeter->statusBar()->showMessage(QString::fromUtf8(ldmtext));
|
||||
}
|
||||
kgreeter->statusBar()->showMessage(QString::fromUtf8(ldmtext));
|
||||
}
|
||||
|
||||
void KGreeter::slotSuspend()
|
||||
|
@ -303,7 +294,6 @@ void KGreeter::slotLogin()
|
|||
|
||||
g_autoptr(GError) gliberror = NULL;
|
||||
lightdm_greeter_authenticate(m_ldmgreeter, kgreeterusername.constData(), &gliberror);
|
||||
kgreeterstate.setValue("state/lastuser", kgreeterusername);
|
||||
g_main_loop_run(glibloop);
|
||||
}
|
||||
|
||||
|
@ -320,7 +310,10 @@ int main(int argc, char**argv)
|
|||
|
||||
const QString kgreetercolorscheme = kgreetersettings.value("greeter/colorscheme").toString();
|
||||
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));
|
||||
} else {
|
||||
app.setPalette(KGlobalSettings::createApplicationPalette());
|
||||
|
|
Loading…
Add table
Reference in a new issue