diff options
author | senator <elsenator@gmail.com> | 2011-12-01 15:58:45 +0100 |
---|---|---|
committer | senator <elsenator@gmail.com> | 2011-12-01 15:58:45 +0100 |
commit | bf3029b893e7138593d2d185d4ce9de26491a15e (patch) | |
tree | 557cd81a1cd3f192346dca187f006f7814d8a5e3 /client/macrowindow.cc | |
parent | 9989ea2f6bfa19bd349bbbdec8ec3f56c1427245 (diff) | |
parent | 5ed7a801b4194e72cc3898de57fb1d9ea0e8caa4 (diff) |
Merge branch 'master' of http://git.aasimon.org/public/pracro
Diffstat (limited to 'client/macrowindow.cc')
-rw-r--r-- | client/macrowindow.cc | 41 |
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(); } } |