You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
1.6 KiB
62 lines
1.6 KiB
/* |
|
SPDX-FileCopyrightText: 2006-2008 Robert Knight <robertknight@gmail.com> |
|
SPDX-FileCopyrightText: 1997, 1998 Lars Doelle <lars.doelle@on-line.de> |
|
SPDX-FileCopyrightText: 2021 Jonah Brüchert <jbb@kaidan.im> |
|
|
|
SPDX-License-Identifier: GPL-2.0-or-later |
|
*/ |
|
|
|
#include "TerminalBell.h" |
|
|
|
#include <QTimer> |
|
|
|
#include <KNotification> |
|
|
|
#include <chrono> |
|
|
|
using namespace std::literals::chrono_literals; |
|
|
|
namespace Konsole |
|
{ |
|
constexpr auto MASK_TIMEOUT = 500ms; |
|
|
|
TerminalBell::TerminalBell(Enum::BellModeEnum bellMode) |
|
: _bellMode(bellMode) |
|
{ |
|
} |
|
|
|
void TerminalBell::bell(QWidget *terminalDisplay, const QString &message, bool terminalHasFocus) |
|
{ |
|
switch (_bellMode) { |
|
case Enum::SystemBeepBell: |
|
KNotification::beep(); |
|
break; |
|
case Enum::NotifyBell: |
|
// STABLE API: |
|
// Please note that these event names, "BellVisible" and "BellInvisible", |
|
// should not change and should be kept stable, because other applications |
|
// that use this code via KPart rely on these names for notifications. |
|
KNotification::event(terminalHasFocus ? QStringLiteral("BellVisible") : QStringLiteral("BellInvisible"), message, QPixmap(), terminalDisplay); |
|
break; |
|
case Enum::VisualBell: |
|
Q_EMIT visualBell(); |
|
break; |
|
default: |
|
break; |
|
} |
|
|
|
// limit the rate at which bells can occur. |
|
// ...mainly for sound effects where rapid bells in sequence |
|
// produce a horrible noise. |
|
_bellMasked = true; |
|
QTimer::singleShot(MASK_TIMEOUT, this, [this]() { |
|
_bellMasked = false; |
|
}); |
|
} |
|
|
|
void TerminalBell::setBellMode(Enum::BellModeEnum mode) |
|
{ |
|
_bellMode = mode; |
|
} |
|
|
|
}
|
|
|