Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jsm222/810cd4c5fb64f66b40f6b709f96fb6a3 to your computer and use it in GitHub Desktop.
Save jsm222/810cd4c5fb64f66b40f6b709f96fb6a3 to your computer and use it in GitHub Desktop.
diff --git a/lxqt-leave/keyenterreceiver.cpp b/lxqt-leave/keyenterreceiver.cpp
index 69cb6a4..ca27c5a 100644
--- a/lxqt-leave/keyenterreceiver.cpp
+++ b/lxqt-leave/keyenterreceiver.cpp
@@ -1,6 +1,9 @@
#include "keyenterreceiver.h"
-KeyEnterReceiver::KeyEnterReceiver(QObject *parent) : QObject(parent)
+#include <QDebug>
+KeyEnterReceiver::KeyEnterReceiver(QObject *parent,QVector<QToolButton*> *toolButtons) : QObject(parent)
{
+this->buttons = QVector<QToolButton*>(6);
+this->buttons = *toolButtons;
}
bool KeyEnterReceiver::eventFilter(QObject* obj, QEvent* event)
@@ -10,6 +13,52 @@ bool KeyEnterReceiver::eventFilter(QObject* obj, QEvent* event)
if ( (key->key()==Qt::Key_Enter) || (key->key()==Qt::Key_Return) ) {
QToolButton *button = static_cast<QToolButton*>(obj);
emit button->clicked(button);
+ }
+ else if ( (key->key()==Qt::Key_Up) || (key->key()==Qt::Key_Down ) || (key->key()==Qt::Key_Left) || (key->key()==Qt::Key_Right )) {
+ QToolButton *button = static_cast<QToolButton*>(obj);
+ int i = this->buttons.indexOf(button);
+ switch(key->key()) {
+ case Qt::Key_Up:{
+ if(i>2) {
+ i-=3;
+ }
+ else if(i<3 && i >0) {
+ i+=2;
+ }
+ break;
+ }
+ case Qt::Key_Down:{
+ if(i<3) {
+ i+=3;
+ }
+ else if(i<5 && i >2) {
+ i-=2;
+ }
+
+
+ break;
+ }
+ case Qt::Key_Right:{
+ i+=1;
+ if(i==6) {
+ i=0;
+ }
+ break;
+ }
+
+ case Qt::Key_Left:{
+ i-=1;
+ if(i==-1) {
+ i=5;
+ }
+ break;
+ }
+ }
+ this->buttons.at(i)->setFocus();
+
+
+
+
} else {
return QObject::eventFilter(obj, event);
}
diff --git a/lxqt-leave/keyenterreceiver.h b/lxqt-leave/keyenterreceiver.h
index 929fc46..15370bf 100644
--- a/lxqt-leave/keyenterreceiver.h
+++ b/lxqt-leave/keyenterreceiver.h
@@ -9,9 +9,10 @@ class KeyEnterReceiver : public QObject
{
Q_OBJECT
public:
- explicit KeyEnterReceiver(QObject *parent = 0);
+ explicit KeyEnterReceiver(QObject *parent = 0,QVector<QToolButton*> *buttons=nullptr);
protected:
bool eventFilter(QObject* obj, QEvent* event);
+ QVector<QToolButton*> buttons;
signals:
public slots:
diff --git a/lxqt-leave/leavedialog.cpp b/lxqt-leave/leavedialog.cpp
index a1a45c5..f05bb76 100644
--- a/lxqt-leave/leavedialog.cpp
+++ b/lxqt-leave/leavedialog.cpp
@@ -57,12 +57,11 @@ LeaveDialog::LeaveDialog(QWidget* parent)
*/
QVector<QToolButton*> buttons(6);
buttons[0] = ui->logoutButton;
- buttons[1] = ui->lockscreenButton;
+ buttons[1] = ui->shutdownButton;
buttons[2] = ui->suspendButton;
- buttons[3] = ui->hibernateButton;
+ buttons[3] = ui->lockscreenButton;
buttons[4] = ui->rebootButton;
- buttons[5] = ui->shutdownButton;
-
+ buttons[5] = ui->hibernateButton;
int maxWidth = 0;
const int N = buttons.size();
for (int i = 0; i < N; ++i) {
@@ -70,7 +69,7 @@ LeaveDialog::LeaveDialog(QWidget* parent)
buttons.at(i)->adjustSize();
maxWidth = qMax(maxWidth, buttons.at(i)->width());
}
- KeyEnterReceiver* key = new KeyEnterReceiver();
+ KeyEnterReceiver* key = new KeyEnterReceiver(0,&buttons);
for (int i = 0; i < N; ++i) {
buttons.at(i)->setMinimumWidth(maxWidth);
diff --git a/lxqt-leave/leavedialog.ui b/lxqt-leave/leavedialog.ui
index f768dcf..ca0172f 100644
--- a/lxqt-leave/leavedialog.ui
+++ b/lxqt-leave/leavedialog.ui
@@ -247,10 +247,10 @@
<tabstops>
<tabstop>cancelButton</tabstop>
<tabstop>logoutButton</tabstop>
- <tabstop>lockscreenButton</tabstop>
<tabstop>shutdownButton</tabstop>
- <tabstop>rebootButton</tabstop>
<tabstop>suspendButton</tabstop>
+ <tabstop>lockscreenButton</tabstop>
+ <tabstop>rebootButton</tabstop>
<tabstop>hibernateButton</tabstop>
</tabstops>
<resources/>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment