m_layout(nullptr),
m_terminal(nullptr),
m_terminalWidget(nullptr),
+ m_konsolePartMissingMessage(nullptr),
m_konsolePart(nullptr),
m_konsolePartCurrentDirectory(),
m_sendCdToTerminalHistory()
{
m_layout = new QVBoxLayout(this);
- m_layout->setMargin(0);
+ m_layout->setContentsMargins(0, 0, 0, 0);
}
TerminalPanel::~TerminalPanel()
emit hideTerminalPanel();
}
-bool TerminalPanel::isHiddenInVisibleWindow()
+bool TerminalPanel::isHiddenInVisibleWindow() const
{
return parentWidget()
- && parentWidget()->isHidden()
- && m_terminal
- && (m_terminal->foregroundProcessId() == -1);
+ && parentWidget()->isHidden();
}
void TerminalPanel::dockVisibilityChanged()
{
// Only react when the DockWidget itself (not some parent) is hidden. This way we don't
// respond when e.g. Dolphin is minimized.
- if (isHiddenInVisibleWindow()) {
+ if (isHiddenInVisibleWindow() && m_terminal && !hasProgramRunning()) {
// Make sure that the following "cd /" command will not affect the view.
disconnect(m_konsolePart, SIGNAL(currentDirectoryChanged(QString)),
this, SLOT(slotKonsolePartCurrentDirectoryChanged(QString)));
}
}
+QString TerminalPanel::runningProgramName() const
+{
+ return m_terminal ? m_terminal->foregroundProcessName() : QString();
+}
+
+bool TerminalPanel::hasProgramRunning() const
+{
+ return m_terminal && (m_terminal->foregroundProcessId() != -1);
+}
+
bool TerminalPanel::urlChanged()
{
if (!url().isValid()) {
return false;
}
- const bool sendInput = m_terminal && (m_terminal->foregroundProcessId() == -1) && isVisible();
+ const bool sendInput = m_terminal && !hasProgramRunning() && isVisible();
if (sendInput) {
changeDir(url());
}
if (m_konsolePart) {
connect(m_konsolePart, &KParts::ReadOnlyPart::destroyed, this, &TerminalPanel::terminalExited);
m_terminalWidget = m_konsolePart->widget();
+ setFocusProxy(m_terminalWidget);
m_layout->addWidget(m_terminalWidget);
if (m_konsolePartMissingMessage) {
m_layout->removeWidget(m_konsolePartMissingMessage);
}
if (m_terminal) {
m_terminal->showShellInDir(url().toLocalFile());
- changeDir(url());
+ if(!hasProgramRunning()) {
+ changeDir(url());
+ }
m_terminalWidget->setFocus();
connect(m_konsolePart, SIGNAL(currentDirectoryChanged(QString)),
this, SLOT(slotKonsolePartCurrentDirectoryChanged(QString)));
const QUrl url(QUrl::fromLocalFile(dir));
emit changeUrl(url);
}
+
+bool TerminalPanel::terminalHasFocus() const
+{
+ if (m_terminalWidget) {
+ return m_terminalWidget->hasFocus();
+ }
+
+ return hasFocus();
+}