diff --git a/videoview.cpp b/videoview.cpp index f4dd5bfeb9aecc63a9f72c20038338f130eeb0d0..b27079806b3625386fdad5e53b39afadbbfa79bc 100644 --- a/videoview.cpp +++ b/videoview.cpp @@ -168,21 +168,27 @@ VideoView::showContextMenu(const QPoint& pos) QPoint globalPos = this->mapToGlobal(pos); QMenu menu; + Media::Video* outVideo = nullptr; + int activeIndex = -1; + + if (auto call = CallModel::instance().selectedCall()) { + outVideo = call->firstMedia<Media::Video>(Media::Media::Direction::OUT); + if (outVideo) + activeIndex = outVideo->sourceModel()->activeIndex(); + } for (auto device : Video::DeviceModel::instance().devices()) { std::unique_ptr<QAction> deviceAction(new QAction(device->name(), this)); deviceAction->setCheckable(true); - if (device == Video::DeviceModel::instance().activeDevice()) - deviceAction->setChecked(true); + if (outVideo) + if (outVideo->sourceModel()->getDeviceIndex(device) == activeIndex) + deviceAction->setChecked(true); auto ptr = deviceAction.release(); menu.addAction(ptr); connect(ptr, &QAction::toggled, [=](bool checked) { if (checked == true) { - if (auto call = CallModel::instance().selectedCall()) { - if (auto outVideo = call->firstMedia<Media::Video>(Media::Media::Direction::OUT)) { - outVideo->sourceModel()->switchTo(device); - } - } + if (outVideo) + outVideo->sourceModel()->switchTo(device); Video::DeviceModel::instance().setActive(device); } }); @@ -192,21 +198,33 @@ VideoView::showContextMenu(const QPoint& pos) auto shareAction = new QAction(tr("Share entire screen"), this); menu.addAction(shareAction); - connect(shareAction, &QAction::triggered, [=]() { - if (auto call = CallModel::instance().selectedCall()) { - if (auto outVideo = call->firstMedia<Media::Video>(Media::Media::Direction::OUT)) { - outVideo->sourceModel()->setDisplay(0, QApplication::desktop()->rect()); - } - } - }); + shareAction->setCheckable(true); auto shareAreaAction = new QAction(tr("Share screen area"), this); menu.addAction(shareAreaAction); + shareAreaAction->setCheckable(true); connect(shareAreaAction, &QAction::triggered, [=]() { SelectAreaDialog selec; selec.exec(); }); auto shareFileAction = new QAction(tr("Share file"), this); menu.addAction(shareFileAction); + shareFileAction->setCheckable(true); + + switch(activeIndex) { + + case Video::SourceModel::ExtendedDeviceList::SCREEN: + shareAction->setChecked(true); + break; + case Video::SourceModel::ExtendedDeviceList::FILE: + shareFileAction->setChecked(true); + break; + + } + + connect(shareAction, &QAction::triggered, [=]() { + if (outVideo) + outVideo->sourceModel()->setDisplay(0, QApplication::desktop()->rect()); + }); connect(shareFileAction, &QAction::triggered, [=]() { QFileDialog dialog(this); dialog.setFileMode(QFileDialog::AnyFile); @@ -214,11 +232,8 @@ VideoView::showContextMenu(const QPoint& pos) if (!dialog.exec()) return; fileNames = dialog.selectedFiles(); - if (auto call = CallModel::instance().selectedCall()) { - if (auto outVideo = call->firstMedia<Media::Video>(Media::Media::Direction::OUT)) { - outVideo->sourceModel()->setFile(QUrl::fromLocalFile(fileNames.at(0))); - } - } + if (outVideo) + outVideo->sourceModel()->setFile(QUrl::fromLocalFile(fileNames.at(0))); }); menu.exec(globalPos);