summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
4df7756)
While it would be neat if it worked, it unfortunately doesn't as
the currently focused item may not be related to any view - e.g.
when one of the tabs of the QTabWidget was clicked.
For this reason, we store the last session the user interacted
with and treat it as the currently focused session.
int index = session_selector_.addTab(window, name);
session_selector_.setCurrentIndex(index);
int index = session_selector_.addTab(window, name);
session_selector_.setCurrentIndex(index);
+ last_focused_session_ = session;
window->setDockNestingEnabled(true);
window->setDockNestingEnabled(true);
session_windows_.erase(session);
session_windows_.erase(session);
+ if (last_focused_session_ == session)
+ last_focused_session_.reset();
+
sessions_.remove_if([&](shared_ptr<Session> s) {
return s == session; });
sessions_.remove_if([&](shared_ptr<Session> s) {
return s == session; });
void MainWindow::on_focus_changed()
{
void MainWindow::on_focus_changed()
{
- static shared_ptr<Session> prev_session;
-
shared_ptr<views::ViewBase> view = get_active_view();
if (view) {
for (shared_ptr<Session> session : sessions_) {
if (session->has_view(view)) {
shared_ptr<views::ViewBase> view = get_active_view();
if (view) {
for (shared_ptr<Session> session : sessions_) {
if (session->has_view(view)) {
- if (session != prev_session) {
+ if (session != last_focused_session_) {
// Activate correct tab if necessary
shared_ptr<Session> tab_session = get_tab_session(
session_selector_.currentIndex());
// Activate correct tab if necessary
shared_ptr<Session> tab_session = get_tab_session(
session_selector_.currentIndex());
on_focused_session_changed(session);
}
on_focused_session_changed(session);
}
- prev_session = session;
void MainWindow::on_focused_session_changed(shared_ptr<Session> session)
{
void MainWindow::on_focused_session_changed(shared_ptr<Session> session)
{
+ last_focused_session_ = session;
+
setWindowTitle(session->name() + " - " + WindowTitle);
// Update the state of the run/stop button, too
setWindowTitle(session->name() + " - " + WindowTitle);
// Update the state of the run/stop button, too
void MainWindow::on_run_stop_clicked()
{
void MainWindow::on_run_stop_clicked()
{
- Session &session = get_active_view()->session();
+ shared_ptr<Session> session = last_focused_session_;
+
+ if (!session)
+ return;
- switch (session.get_capture_state()) {
+ switch (session->get_capture_state()) {
- session.start_capture([&](QString message) {
+ session->start_capture([&](QString message) {
session_error("Capture failed", message); });
break;
case Session::AwaitingTrigger:
case Session::Running:
session_error("Capture failed", message); });
break;
case Session::AwaitingTrigger:
case Session::Running:
- session.stop_capture();
+ session->stop_capture();
}
// Refresh window title if the affected session has focus
}
// Refresh window title if the affected session has focus
- shared_ptr<views::ViewBase> view = get_active_view();
-
- if (view && session->has_view(view))
+ if (session == last_focused_session_.get())
setWindowTitle(session->name() + " - " + WindowTitle);
}
setWindowTitle(session->name() + " - " + WindowTitle);
}
// Ignore if caller is not the currently focused session
// unless there is only one session
// Ignore if caller is not the currently focused session
// unless there is only one session
- if (sessions_.size() > 1) {
- Session &focused_session = get_active_view()->session();
-
- if (caller != &focused_session)
- return;
- }
+ if ((sessions_.size() > 1) && (caller != last_focused_session_.get()))
+ return;
int state = caller->get_capture_state();
int state = caller->get_capture_state();
DeviceManager &device_manager_;
std::list< std::shared_ptr<Session> > sessions_;
DeviceManager &device_manager_;
std::list< std::shared_ptr<Session> > sessions_;
+ std::shared_ptr<Session> last_focused_session_;
std::map< QDockWidget*, std::shared_ptr<views::ViewBase> > view_docks_;
std::map< QDockWidget*, std::shared_ptr<views::ViewBase> > view_docks_;