diff --git a/doomsday/tools/shell/src/guishellapp.cpp b/doomsday/tools/shell/src/guishellapp.cpp index 357919b16c..3350fdf8a5 100644 --- a/doomsday/tools/shell/src/guishellapp.cpp +++ b/doomsday/tools/shell/src/guishellapp.cpp @@ -268,10 +268,11 @@ void GuiShellApp::startLocalServer() } #endif auto *win = d->winSys->focusedWindow(); - LocalServerDialog dlg; - if (dlg.exec(win->root())) + auto *dlg = new LocalServerDialog; + dlg->setDeleteAfterDismissed(true); + if (dlg->exec(win->root())) { - StringList opts = dlg.additionalOptions(); + StringList opts = dlg->additionalOptions(); if (!Preferences::iwadFolder().isEmpty()) { opts << "-iwad" << Preferences::iwadFolder(); @@ -279,18 +280,18 @@ void GuiShellApp::startLocalServer() auto *sv = new LocalServer; sv->setApplicationPath(Config::get().gets("Preferences.appFolder")); - if (!dlg.name().isEmpty()) + if (!dlg->name().isEmpty()) { - sv->setName(dlg.name()); + sv->setName(dlg->name()); } - sv->start(dlg.port(), - dlg.gameMode(), + sv->start(dlg->port(), + dlg->gameMode(), opts, - dlg.runtimeFolder()); - d->localServers[dlg.port()] = sv; + dlg->runtimeFolder()); + d->localServers[dlg->port()] = sv; - newOrReusedConnectionWindow()->waitForLocalConnection - (dlg.port(), sv->errorLogPath(), dlg.name()); + newOrReusedConnectionWindow()->waitForLocalConnection( + dlg->port(), sv->errorLogPath(), dlg->name()); } } catch (const Error &er) diff --git a/doomsday/tools/shell/src/linkwindow.cpp b/doomsday/tools/shell/src/linkwindow.cpp index 6c947758ba..2061a9c3ea 100644 --- a/doomsday/tools/shell/src/linkwindow.cpp +++ b/doomsday/tools/shell/src/linkwindow.cpp @@ -106,8 +106,10 @@ DE_PIMPL(LinkWindow) waitTimeout.setInterval(1.0); auto *keys = new KeyActions; - keys->add(KeyEvent(KeyEvent::Pressed, ',', 0, 0, "", KeyEvent::Control), + keys->add(KeyEvent::press(',', KeyEvent::Command), []() { GuiShellApp::app().showPreferences(); }); + keys->add(KeyEvent::press('n', KeyEvent::Command), + []() { GuiShellApp::app().startLocalServer(); }); root.add(keys); } diff --git a/doomsday/tools/shell/src/localserverdialog.cpp b/doomsday/tools/shell/src/localserverdialog.cpp index 4638e8995c..41dee29aea 100644 --- a/doomsday/tools/shell/src/localserverdialog.cpp +++ b/doomsday/tools/shell/src/localserverdialog.cpp @@ -81,7 +81,7 @@ DE_GUI_PIMPL(LocalServerDialog) form->addRow(0, opt);*/ port = &area.addNew(); - port->rule().setInput(Rule::Width, rule("unit") * 50); + port->rule().setInput(Rule::Width, rule("unit") * 25); port->setText(String::asText(cfg.getui("LocalServer.port", DEFAULT_PORT))); /* @@ -108,8 +108,8 @@ DE_GUI_PIMPL(LocalServerDialog) portMsg->hide(); // form->addRow(tr("TCP port:"), hb); auto *tcpLabel = LabelWidget::newWithText("TCP Port:", &area); - layout << *tcpLabel << *port - << tcpLabel->rule().width() << *portMsg; + layout << *tcpLabel << *port; + portMsg->rule().setLeftTop(port->rule().right(), port->rule().top()); announce = &area.addNew(); announce->setText("Public server: visible to all"); @@ -117,14 +117,16 @@ DE_GUI_PIMPL(LocalServerDialog) layout << Const(0) << *announce; password = &area.addNew(); - password->rule().setInput(Rule::Width, rule("unit") * 80); + password->rule().setInput(Rule::Width, rule("unit") * 50); password->setText(cfg.gets("LocalServer.password", "")); passwordMsg = &area.addNew(); passwordMsg->setTextColor("accent"); passwordMsg->hide(); - layout << *LabelWidget::newWithText("Shell Password:", &area) << *password - << Const(0) << *passwordMsg; + layout << *LabelWidget::newWithText("Shell Password:", &area) << *password; + passwordMsg->rule().setLeftTop(password->rule().right(), password->rule().top()); + + ButtonWidget *foldButton; // Fold panel for advanced settings. { @@ -137,6 +139,7 @@ DE_GUI_PIMPL(LocalServerDialog) adLayout.setColumnAlignment(0, ui::AlignRight); runtime = &content->addNew("Select Runtime Folder"); + runtime->rule().setInput(Rule::Width, width); runtime->setPath(cfg.gets("LocalServer.runtime", "")); if (runtime->path().isEmpty()) { @@ -153,16 +156,19 @@ DE_GUI_PIMPL(LocalServerDialog) << *options; content->rule().setSize(adLayout); - - auto *foldButton = advanced->makeTitle("Advanced Options"); + foldButton = advanced->makeTitle("Advanced Options"); + foldButton->setFont("separator.label"); + foldButton->rule().setInput(Rule::Right, rect.right()); area.add(foldButton); - layout.append(*foldButton, 2); + foldButton->rule().setLeftTop(rect.left(), password->rule().bottom()); advanced->rule().setLeftTop(foldButton->rule().left(), foldButton->rule().bottom()); } - area.setContentSize(layout.width(), layout.height() + advanced->rule().height()); + area.setContentSize(layout.width(), + layout.height() + foldButton->rule().height() + + advanced->rule().height()); } int portNumber() const