mirror of
https://bitbucket.org/smil3y/kde-playground.git
synced 2025-02-23 18:32:51 +00:00
kgreeter: implement session option via menu and actions
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
parent
12906c1bb1
commit
9a3f042be5
2 changed files with 75 additions and 29 deletions
|
@ -47,15 +47,20 @@ private Q_SLOTS:
|
|||
void slotPoweroff();
|
||||
void slotReboot();
|
||||
|
||||
void slotSession();
|
||||
|
||||
void slotLayout();
|
||||
|
||||
void slotLogin();
|
||||
|
||||
private:
|
||||
void setSession(const QString &session);
|
||||
bool isUserLogged() const;
|
||||
|
||||
Ui::KGreeter m_ui;
|
||||
LightDMGreeter *m_ldmgreeter;
|
||||
QList<QAction*> m_sessionactions;
|
||||
QList<QAction*> m_layoutactions;
|
||||
QImage m_background;
|
||||
QImage m_rectangle;
|
||||
};
|
||||
|
@ -95,10 +100,12 @@ KGreeter::KGreeter(QWidget *parent)
|
|||
Q_ASSERT(ldmlayout);
|
||||
|
||||
QAction* layoutaction = new QAction(m_ui.menuKeyboard);
|
||||
layoutaction->setCheckable(true);
|
||||
layoutaction->setText(QString::fromUtf8(lightdm_layout_get_description(ldmlayout)));
|
||||
layoutaction->setData(QVariant(QString::fromUtf8(lightdm_layout_get_name(ldmlayout))));
|
||||
connect(layoutaction, SIGNAL(triggered()), this, SLOT(slotLayout()));
|
||||
m_ui.menuKeyboard->addAction(layoutaction);
|
||||
m_layoutactions.append(layoutaction);
|
||||
}
|
||||
|
||||
GList *ldmusers = lightdm_user_list_get_users(lightdm_user_list_get_instance());
|
||||
|
@ -121,7 +128,14 @@ KGreeter::KGreeter(QWidget *parent)
|
|||
|
||||
const QString ldmsessionname = QString::fromUtf8(lightdm_session_get_name(ldmsession));
|
||||
const QString ldmsessionkey = QString::fromUtf8(lightdm_session_get_key(ldmsession));
|
||||
m_ui.sessionsbox->addItem(ldmsessionname, QVariant(ldmsessionkey));
|
||||
|
||||
QAction* sessionaction = new QAction(m_ui.menuSessions);
|
||||
sessionaction->setCheckable(true);
|
||||
sessionaction->setText(ldmsessionname);
|
||||
sessionaction->setData(QVariant(ldmsessionkey));
|
||||
connect(sessionaction, SIGNAL(triggered()), this, SLOT(slotSession()));
|
||||
m_ui.menuSessions->addAction(sessionaction);
|
||||
m_sessionactions.append(sessionaction);
|
||||
}
|
||||
|
||||
const QString ldmdefaultuser = QString::fromUtf8(lightdm_greeter_get_select_user_hint(m_ldmgreeter));
|
||||
|
@ -136,12 +150,7 @@ KGreeter::KGreeter(QWidget *parent)
|
|||
m_ui.useredit->setText(ldmdefaultuser);
|
||||
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;
|
||||
}
|
||||
}
|
||||
setSession(ldmdefaultsession);
|
||||
}
|
||||
|
||||
QSettings kgreeterstate("lightdm-kgreeter-state");
|
||||
|
@ -154,11 +163,8 @@ KGreeter::KGreeter(QWidget *parent)
|
|||
}
|
||||
m_ui.useredit->setText(lastuser);
|
||||
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() == lastsession) {
|
||||
m_ui.sessionsbox->setCurrentIndex(i);
|
||||
break;
|
||||
}
|
||||
if (!lastsession.isEmpty()) {
|
||||
setSession(lastsession);
|
||||
}
|
||||
|
||||
m_ui.groupbox->setTitle(QString::fromUtf8(lightdm_get_hostname()));
|
||||
|
@ -201,8 +207,8 @@ void KGreeter::paintEvent(QPaintEvent *event)
|
|||
m_ui.groupbox->setFlat(true);
|
||||
QPainter painter(this);
|
||||
QSize kgreeterrectanglesize(m_ui.groupbox->size());
|
||||
kgreeterrectanglesize.rwidth() = kgreeterrectanglesize.width() * 1.04;
|
||||
kgreeterrectanglesize.rheight() = kgreeterrectanglesize.height() * 1.6;
|
||||
kgreeterrectanglesize.rwidth() = kgreeterrectanglesize.width() * 1.1;
|
||||
kgreeterrectanglesize.rheight() = kgreeterrectanglesize.height() * 1.8;
|
||||
painter.drawImage(m_ui.groupbox->pos(), m_rectangle.scaled(kgreeterrectanglesize));
|
||||
} else {
|
||||
m_ui.groupbox->setFlat(false);
|
||||
|
@ -226,7 +232,13 @@ QByteArray KGreeter::getPass() const
|
|||
|
||||
QByteArray KGreeter::getSession() const
|
||||
{
|
||||
return m_ui.sessionsbox->itemData(m_ui.sessionsbox->currentIndex()).toString().toUtf8();
|
||||
Q_FOREACH (const QAction *sessionaction, m_sessionactions) {
|
||||
if (sessionaction->isChecked()) {
|
||||
return sessionaction->data().toByteArray();
|
||||
}
|
||||
}
|
||||
Q_ASSERT(false);
|
||||
return QByteArray();
|
||||
}
|
||||
|
||||
LightDMGreeter * KGreeter::getGreeter() const
|
||||
|
@ -333,8 +345,23 @@ void KGreeter::slotReboot()
|
|||
}
|
||||
}
|
||||
|
||||
void KGreeter::slotSession()
|
||||
{
|
||||
const QAction* sessionaction = qobject_cast<QAction*>(sender());
|
||||
const QString sessionname = sessionaction->data().toString();
|
||||
|
||||
Q_FOREACH (QAction *sessionaction, m_sessionactions) {
|
||||
sessionaction->setChecked(false);
|
||||
if (sessionaction->data().toString() == sessionname) {
|
||||
sessionaction->setChecked(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void KGreeter::slotLayout()
|
||||
{
|
||||
QString ldmlayoutname;
|
||||
|
||||
const QAction* layoutaction = qobject_cast<QAction*>(sender());
|
||||
const QString layoutname = layoutaction->data().toString();
|
||||
GList *ldmlayouts = lightdm_get_layouts();
|
||||
|
@ -342,11 +369,24 @@ void KGreeter::slotLayout()
|
|||
LightDMLayout *ldmlayout = static_cast<LightDMLayout*>(ldmitem->data);
|
||||
Q_ASSERT(ldmlayout);
|
||||
|
||||
if (layoutname == QString::fromUtf8(lightdm_layout_get_name(ldmlayout))) {
|
||||
ldmlayoutname = QString::fromUtf8(lightdm_layout_get_name(ldmlayout));
|
||||
if (layoutname == ldmlayoutname) {
|
||||
lightdm_set_layout(ldmlayout);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (ldmlayoutname.isEmpty()) {
|
||||
Q_ASSERT(false);
|
||||
return;
|
||||
}
|
||||
|
||||
Q_FOREACH (QAction *layoutaction, m_layoutactions) {
|
||||
layoutaction->setChecked(false);
|
||||
if (layoutaction->data().toString() == ldmlayoutname) {
|
||||
layoutaction->setChecked(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void KGreeter::slotLogin()
|
||||
|
@ -367,6 +407,16 @@ void KGreeter::slotLogin()
|
|||
g_main_loop_run(glibloop);
|
||||
}
|
||||
|
||||
void KGreeter::setSession(const QString &session)
|
||||
{
|
||||
Q_FOREACH (QAction *sessionaction, m_sessionactions) {
|
||||
sessionaction->setChecked(false);
|
||||
if (sessionaction->data().toString() == session) {
|
||||
sessionaction->setChecked(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool KGreeter::isUserLogged() const
|
||||
{
|
||||
GList *ldmusers = lightdm_user_list_get_users(lightdm_user_list_get_instance());
|
||||
|
|
|
@ -106,9 +106,6 @@
|
|||
<layout class="QGridLayout" name="gridLayout_2">
|
||||
<item row="0" column="0" colspan="3">
|
||||
<layout class="QGridLayout" name="gridLayout_3">
|
||||
<item row="0" column="1">
|
||||
<widget class="QComboBox" name="usersbox"/>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="text">
|
||||
|
@ -116,6 +113,9 @@
|
|||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QComboBox" name="usersbox"/>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="userlabel">
|
||||
<property name="text">
|
||||
|
@ -130,16 +130,6 @@
|
|||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="1">
|
||||
<widget class="QComboBox" name="sessionsbox"/>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="text">
|
||||
<string>Session:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QLineEdit" name="useredit"/>
|
||||
</item>
|
||||
|
@ -195,7 +185,13 @@
|
|||
<string>Keyboard</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QMenu" name="menuSessions">
|
||||
<property name="title">
|
||||
<string>Sessions</string>
|
||||
</property>
|
||||
</widget>
|
||||
<addaction name="menuSystem"/>
|
||||
<addaction name="menuSessions"/>
|
||||
<addaction name="menuKeyboard"/>
|
||||
</widget>
|
||||
<widget class="QStatusBar" name="statusbar"/>
|
||||
|
|
Loading…
Add table
Reference in a new issue