int index = session_selector_.addTab(window, name);
session_selector_.setCurrentIndex(index);
+ last_focused_session_ = session;
window->setDockNestingEnabled(true);
session_windows_.erase(session);
+ if (last_focused_session_ == session)
+ last_focused_session_.reset();
+
sessions_.remove_if([&](shared_ptr<Session> s) {
return s == session; });
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)) {
- 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());
on_focused_session_changed(session);
}
- prev_session = session;
break;
}
}
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
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()) {
case Session::Stopped:
- session.start_capture([&](QString message) {
+ session->start_capture([&](QString message) {
session_error("Capture failed", message); });
break;
case Session::AwaitingTrigger:
case Session::Running:
- session.stop_capture();
+ session->stop_capture();
break;
}
}
}
// 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);
}
// 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();