diff --git a/desktop/sessionui.rc b/desktop/sessionui.rc --- a/desktop/sessionui.rc +++ b/desktop/sessionui.rc @@ -19,6 +19,7 @@ + diff --git a/src/SessionController.h b/src/SessionController.h --- a/src/SessionController.h +++ b/src/SessionController.h @@ -249,6 +249,7 @@ void monitorActivity(bool monitor); void monitorSilence(bool monitor); void renameSession(); + void saveTabAsImage(); void switchProfile(const Profile::Ptr &profile); void handleWebShortcutAction(); void configureWebShortcuts(); diff --git a/src/SessionController.cpp b/src/SessionController.cpp --- a/src/SessionController.cpp +++ b/src/SessionController.cpp @@ -678,6 +678,10 @@ action->setIcon(QIcon::fromTheme(QStringLiteral("edit-rename"))); collection->setDefaultShortcut(action, Konsole::ACCEL + Qt::ALT + Qt::Key_S); + // Save Tab as Image + QAction* saveTabImageAction = collection->addAction(QStringLiteral("save-tab-image"), this, SLOT(saveTabAsImage())); + saveTabImageAction->setText(i18n("Save Tab as Image")); + // Copy input to ==> all tabs auto* copyInputToAllTabsAction = collection->add(QStringLiteral("copy-input-to-all-tabs")); copyInputToAllTabsAction->setText(i18n("&All Tabs in Current Window")); @@ -885,6 +889,20 @@ } } +void SessionController::saveTabAsImage() +{ + QFileDialog dialog(nullptr); + dialog.setFileMode(QFileDialog::AnyFile); + dialog.setAcceptMode(QFileDialog::AcceptSave); + dialog.setNameFilter(tr("Images (*.png)")); + + if (dialog.exec()) { + QStringList selectedFiles = dialog.selectedFiles(); + if (selectedFiles.length() > 0) + view()->grab().save(selectedFiles[0]); + } +} + bool SessionController::confirmClose() const { if (_session->isForegroundProcessActive()) {