summaryrefslogtreecommitdiff
path: root/client/macrowindow.cc
diff options
context:
space:
mode:
Diffstat (limited to 'client/macrowindow.cc')
-rw-r--r--client/macrowindow.cc41
1 files changed, 38 insertions, 3 deletions
diff --git a/client/macrowindow.cc b/client/macrowindow.cc
index 44f2797..f924d8c 100644
--- a/client/macrowindow.cc
+++ b/client/macrowindow.cc
@@ -52,6 +52,7 @@ MacroWindow::MacroWindow(NetCom &n, QString course, QString templ,
MacroDrawer *d)
: Collapser(NULL, is_static?NULL:scrollarea), netcom(n)
{
+ this->scrollarea = scrollarea;
drawer = d;
this->is_static = is_static;
@@ -189,11 +190,13 @@ bool MacroWindow::doCommit()
void MacroWindow::commit()
{
doCommit();
+ drawer->setFocus();
}
void MacroWindow::cancel()
{
collapseWrapper();
+ drawer->setFocus();
}
void MacroWindow::expandWrapper()
@@ -271,9 +274,39 @@ void MacroWindow::clear()
lua->clear();
if(mainwidget) {
- delete mainwidget;
- mainwidget = NULL;
drawer->setFocus();
+ mainwidget->deleteLater();
+ mainwidget = NULL;
+ }
+}
+
+QWidgetList getRecursiveWidgetList(QWidget *w)
+{
+ QWidgetList list;
+
+ list.append(w);
+
+ QObjectList objs = w->children();
+ for(int i = 0; i < objs.size(); i++) {
+ if(objs[i]->isWidgetType()) {
+ QWidget *cw = (QWidget*)objs[i];
+ list.append(getRecursiveWidgetList(cw));
+ }
+ }
+
+ return list;
+}
+
+void setTabOrderRecursive(QWidget *w)
+{
+ QWidgetList list = getRecursiveWidgetList(w);
+ QWidget *last = NULL;
+ for(int i = 0; i < list.size(); i++) {
+ QWidget *w = list[i];
+ if((w->focusPolicy() & Qt::TabFocus) != 0) {
+ if(last) QWidget::setTabOrder(last, w);
+ last = w;
+ }
}
}
@@ -292,7 +325,9 @@ void MacroWindow::animated(QWidget *w)
if(is_static) return;
+ setTabOrderRecursive(scrollarea);
+
// Set keyboard focus on the first focusable widget in the macro.
- mainwidget->setKeyboardFocus();
+ mainwidget->setKeyboardFocusRecursive();
}
}