summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/dialog.cpp15
-rw-r--r--src/dialog.h1
-rw-r--r--src/windowmanager.cpp28
3 files changed, 27 insertions, 17 deletions
diff --git a/src/dialog.cpp b/src/dialog.cpp
index 56860f2..a0b9a47 100644
--- a/src/dialog.cpp
+++ b/src/dialog.cpp
@@ -29,9 +29,6 @@ static bool isProcessRunning(const QString &binary);
Dialog::Dialog(QWidget *parent)
: QDialog(parent), ui(new Ui::Dialog) {
- // Make sure a window manager is running, so any modals or other popups work properly
- WindowManager::ensureRunning();
-
model_[TAB_NATIVE] = new SessionTreeModel(parent);
model_[TAB_RECENT_COURSES] = new SessionTreeModel(parent, true);
model_[TAB_ALL_VMS] = new SessionTreeModel(parent);
@@ -732,7 +729,7 @@ void Dialog::onTabButtonChanged(int tab) {
}
// Update pressed status of buttons
- for (int i = 0; i < 3; ++i) {
+ for (int i = 0; i < TAB_COUNT; ++i) {
tabs_[i]->setChecked(tab == i);
}
@@ -871,6 +868,7 @@ void Dialog::selectFirstElement() {
QModelIndex newIndex = QModelIndex(model_[activeTab_]->index(0, 0, section));
ui->treeView->selectionModel()->setCurrentIndex(newIndex, QItemSelectionModel::Select);
+
ui->treeView->setFocus();
}
@@ -917,6 +915,15 @@ void Dialog::checkAutostart() {
}
}
+void Dialog::showEvent(QShowEvent *e)
+{
+ QDialog::showEvent(e);
+ // Make sure a window manager is running, so any modals or other popups work properly
+ QTimer::singleShot(10, []() {
+ WindowManager::ensureRunning();
+ });
+}
+
static bool isProcessRunning(const QString &binary)
{
bool full = binary.contains('/');
diff --git a/src/dialog.h b/src/dialog.h
index 5c3af17..cc7f50e 100644
--- a/src/dialog.h
+++ b/src/dialog.h
@@ -47,6 +47,7 @@ class Dialog : public QDialog {
void mousePressEvent(QMouseEvent *event);
bool eventFilter(QObject *target, QEvent *event);
void keyPressEvent(QKeyEvent * e);
+ void showEvent(QShowEvent * e) override;
private: // Private vars n methods
Ui::Dialog *ui;
diff --git a/src/windowmanager.cpp b/src/windowmanager.cpp
index e85a08e..077801e 100644
--- a/src/windowmanager.cpp
+++ b/src/windowmanager.cpp
@@ -14,24 +14,26 @@ static void killInstance();
void ensureRunning()
{
+ static bool once = false;
+ if (once)
+ return;
+ once = true;
wm.start(QLatin1String("openbox"));
wm.closeReadChannel(QProcess::StandardError);
wm.closeReadChannel(QProcess::StandardOutput);
wm.closeWriteChannel();
wm.waitForStarted(500);
- // Ugly, but if openbox initializes just as we map
- // the main window, it might become invisible
- for (int i = 0; i < 10 && wm.state() == QProcess::Running; ++i) {
- QThread::msleep(25);
- }
- if (wm.state() == QProcess::Running) {
- qDebug() << "- Spawned openbox";
- QObject::connect(QCoreApplication::instance(), &QCoreApplication::aboutToQuit, killInstance);
- } else if (wm.exitCode() == 0) {
- qDebug() << "- A WM is already running";
- } else {
- qDebug() << "- openbox binary not in $PATH";
- }
+ QTimer::singleShot(100, []() {
+ if (wm.state() == QProcess::Running) {
+ qDebug() << "- Spawned openbox";
+ QObject::connect(QCoreApplication::instance(), &QCoreApplication::aboutToQuit, killInstance);
+ QProcess::startDetached("wmctrl", QStringList() << "-a" << "vmchooser" << "-F");
+ } else if (wm.exitCode() == 0) {
+ qDebug() << "- A WM is already running";
+ } else {
+ qDebug() << "- openbox binary not in $PATH";
+ }
+ });
}
void stopOwnInstance()