Skip to content

Commit

Permalink
Notification sent when foreground process in a session ends
Browse files Browse the repository at this point in the history
  • Loading branch information
wwestrop committed Apr 13, 2020
1 parent 3590453 commit 251452b
Show file tree
Hide file tree
Showing 4 changed files with 43 additions and 2 deletions.
14 changes: 14 additions & 0 deletions desktop/konsole.notifyrc
Expand Up @@ -727,6 +727,20 @@ Comment[zh_CN]=被监视会话中检测到的静默
Comment[zh_TW]=監控工作階段中偵測到靜默時的行為
Action=Popup

[Event/ProcessFinishedHidden]
Name=Process finished in Non-Focused Monitored Session
Name[en_GB]=Process finished in Non-Focused Monitored Session
Comment=Process finished in a non-focused monitored session
Comment[en_GB]=Process finished in a non-focused monitored session
Action=Popup

[Event/ProcessFinished]
Name=Process finished in Monitored Session
Name[en_GB]=Process finished in Monitored Session
Comment=Process finished in a monitored session
Comment[en_GB]=Process finished in a monitored session
Action=Popup

[Event/Finished]
Name=Session Finished With Non-Zero Status
Name[af]=Sessie het geëindig met nie-zero status
Expand Down
1 change: 1 addition & 0 deletions desktop/sessionui.rc
Expand Up @@ -28,6 +28,7 @@
<Menu name="view">
<Action name="monitor-silence" group="session-view-operations"/>
<Action name="monitor-activity" group="session-view-operations"/>
<Action name="monitor-process-finish" group="session-view-operations"/>
<Separator group="session-view-operations"/>
<Action name="view-readonly" group="session-view-operations"/>
<Separator group="session-view-operations"/>
Expand Down
25 changes: 24 additions & 1 deletion src/SessionController.cpp
Expand Up @@ -56,6 +56,7 @@
#include <KSharedConfig>
#include <KConfigGroup>
#include <KCodecAction>
#include <KNotification>

// Konsole
#include "EditProfileDialog.h"
Expand Down Expand Up @@ -93,7 +94,6 @@ SessionController::SessionController(Session* session , TerminalDisplay* view, Q
, _profileList(nullptr)
, _sessionIcon(QIcon())
, _sessionIconName(QString())
, _previousState(-1)
, _searchFilter(nullptr)
, _urlFilter(nullptr)
, _fileFilter(nullptr)
Expand All @@ -115,6 +115,8 @@ SessionController::SessionController(Session* session , TerminalDisplay* view, Q
, _isSearchBarEnabled(false)
, _editProfileDialog(nullptr)
, _searchBar(view->searchBar())
, _wasForegroundProcessActive(false)
, _monitorProcessFinish(false)
{
Q_ASSERT(session);
Q_ASSERT(view);
Expand Down Expand Up @@ -314,6 +316,19 @@ void SessionController::snapshot()
// apply new title
_session->setTitle(Session::DisplayedTitleRole, title);

// check if foreground process ended and notify if this option was requested
if (_monitorProcessFinish) {
bool isForegroundProcessActive = _session->isForegroundProcessActive();
if (_wasForegroundProcessActive && !isForegroundProcessActive) {
KNotification::event(QStringLiteral("ProcessFinished"),
QStringLiteral("A process running in a monitored session has finished."),
QPixmap(),
QApplication::activeWindow(),
KNotification::CloseWhenWidgetActivated);
}
_wasForegroundProcessActive = isForegroundProcessActive;
}

// do not forget icon
updateSessionIcon();
}
Expand Down Expand Up @@ -728,6 +743,10 @@ void SessionController::setupExtraActions()
action = collection->addAction(QStringLiteral("monitor-silence"), toggleAction);
connect(action, &QAction::toggled, this, &Konsole::SessionController::monitorSilence);

toggleAction = new KToggleAction(i18n("Monitor for Process Finishing"), this);
action = collection->addAction(QStringLiteral("monitor-process-finish"), toggleAction);
connect(action, &QAction::toggled, this, &Konsole::SessionController::monitorProcessFinish);

// Text Size
action = collection->addAction(QStringLiteral("enlarge-font"), this, SLOT(increaseFontSize()));
action->setText(i18n("Enlarge Font"));
Expand Down Expand Up @@ -1558,6 +1577,10 @@ void SessionController::monitorSilence(bool monitor)
{
_session->setMonitorSilence(monitor);
}
void SessionController::monitorProcessFinish(bool monitor)
{
_monitorProcessFinish = monitor;
}
void SessionController::updateSessionIcon()
{
// If the default profile icon is being used, don't put it on the tab
Expand Down
5 changes: 4 additions & 1 deletion src/SessionController.h
Expand Up @@ -242,6 +242,7 @@ private Q_SLOTS:
void clearHistoryAndReset();
void monitorActivity(bool monitor);
void monitorSilence(bool monitor);
void monitorProcessFinish(bool monitor);
void renameSession();
void switchProfile(const Profile::Ptr &profile);
void handleWebShortcutAction();
Expand Down Expand Up @@ -315,7 +316,6 @@ private Q_SLOTS:

QIcon _sessionIcon;
QString _sessionIconName;
int _previousState;

RegExpFilter *_searchFilter;
UrlFilter *_urlFilter;
Expand Down Expand Up @@ -354,6 +354,9 @@ private Q_SLOTS:

QString _searchText;
QPointer<IncrementalSearchBar> _searchBar;

bool _wasForegroundProcessActive;
bool _monitorProcessFinish;
};
inline bool SessionController::isValid() const
{
Expand Down

0 comments on commit 251452b

Please sign in to comment.