diff --git a/app/qml/PreprocessedTerminal.qml b/app/qml/PreprocessedTerminal.qml
index 81eb705..a87c3ce 100644
--- a/app/qml/PreprocessedTerminal.qml
+++ b/app/qml/PreprocessedTerminal.qml
@@ -20,15 +20,14 @@
import QtQuick 2.2
import QtQuick.Controls 2.0
-import QtQml
import QMLTermWidget 2.0
import "menus"
import "utils.js" as Utils
-Item {
- id: preprocessedTerminal
+Item{
+ id: terminalContainer
signal sessionFinished()
property size virtualResolution: Qt.size(kterminal.totalWidth, kterminal.totalHeight)
@@ -48,14 +47,14 @@ Item {
// Manage copy and paste
Connections {
target: copyAction
- enabled: terminalContainer.hasFocus
+
onTriggered: {
kterminal.copyClipboard()
}
}
Connections {
target: pasteAction
- enabled: terminalContainer.hasFocus
+
onTriggered: {
kterminal.pasteClipboard()
}
@@ -66,22 +65,22 @@ Item {
target: appSettings
onFontScalingChanged: {
- preprocessedTerminal.updateSources()
+ terminalContainer.updateSources()
}
onFontWidthChanged: {
- preprocessedTerminal.updateSources()
+ terminalContainer.updateSources()
}
}
Connections {
- target: preprocessedTerminal
+ target: terminalContainer
onWidthChanged: {
- preprocessedTerminal.updateSources()
+ terminalContainer.updateSources()
}
onHeightChanged: {
- preprocessedTerminal.updateSources()
+ terminalContainer.updateSources()
}
}
@@ -119,7 +118,7 @@ Item {
id: ksession
onFinished: {
- preprocessedTerminal.sessionFinished()
+ terminalContainer.sessionFinished()
}
}
@@ -149,8 +148,8 @@ Item {
pixelSize: pixelSize
});
- preprocessedTerminal.fontWidth = fontWidth;
- preprocessedTerminal.screenScaling = screenScaling;
+ terminalContainer.fontWidth = fontWidth;
+ terminalContainer.screenScaling = screenScaling;
scaleTexture = Math.max(1.0, Math.floor(screenScaling * appSettings.windowScaling));
}
@@ -158,7 +157,7 @@ Item {
target: appSettings
onWindowScalingChanged: {
- scaleTexture = Math.max(1.0, Math.floor(preprocessedTerminal.screenScaling * appSettings.windowScaling));
+ scaleTexture = Math.max(1.0, Math.floor(terminalContainer.screenScaling * appSettings.windowScaling));
}
}
@@ -187,6 +186,9 @@ Item {
appSettings.fontManager.refresh()
startSession();
}
+ Component.onDestruction: {
+ appSettings.fontManager.terminalFontChanged.disconnect(handleFontChanged);
+ }
}
Component {
@@ -214,7 +216,7 @@ Item {
cursorShape: kterminal.terminalUsesMouse ? Qt.ArrowCursor : Qt.IBeamCursor
onWheel: function(wheel) {
if (wheel.modifiers & Qt.ControlModifier) {
- wheel.angleDelta.y > 0 ? zoomInAction.trigger() : zoomOutAction.trigger();
+ wheel.angleDelta.y > 0 ? zoomIn.trigger() : zoomOut.trigger();
} else {
var coord = correctDistortion(wheel.x, wheel.y);
kterminal.simulateWheel(coord.x, coord.y, wheel.buttons, wheel.modifiers, wheel.angleDelta);
diff --git a/app/qml/TerminalContainer.qml b/app/qml/TerminalContainer.qml
index 9074893..657cdc7 100644
--- a/app/qml/TerminalContainer.qml
+++ b/app/qml/TerminalContainer.qml
@@ -28,13 +28,6 @@ ShaderTerminal {
signal sessionFinished()
property bool loadBloomEffect: appSettings.bloom > 0 || appSettings._frameShininess > 0
- property bool hasFocus
-
- onHasFocusChanged: {
- if (hasFocus) {
- activate()
- }
- }
id: mainShader
opacity: appSettings.windowOpacity * 0.3 + 0.7
diff --git a/app/qml/TerminalTabs.qml b/app/qml/TerminalTabs.qml
index 5a917b6..d1d5bd0 100644
--- a/app/qml/TerminalTabs.qml
+++ b/app/qml/TerminalTabs.qml
@@ -130,15 +130,17 @@ Item {
Repeater {
model: tabsModel
TerminalContainer {
- id: terminalContainer
- hasFocus: terminalWindow.active && StackLayout.isCurrentItem
-
- onTerminalSizeChanged: updateTerminalSize()
-
+ property bool shouldHaveFocus: terminalWindow.active && StackLayout.isCurrentItem
+ onShouldHaveFocusChanged: {
+ if (shouldHaveFocus) {
+ activate()
+ }
+ }
onTitleChanged: tabsModel.setProperty(index, "title", normalizeTitle(title))
Layout.fillWidth: true
Layout.fillHeight: true
onSessionFinished: tabsRoot.closeTab(index)
+ onTerminalSizeChanged: updateTerminalSize()
function updateTerminalSize() {
// Every tab will have the same size so we can simply take the first one.
diff --git a/app/qml/TerminalWindow.qml b/app/qml/TerminalWindow.qml
index 003a50e..f4bb93a 100644
--- a/app/qml/TerminalWindow.qml
+++ b/app/qml/TerminalWindow.qml
@@ -20,7 +20,6 @@
import QtQuick 2.2
import QtQuick.Window 2.1
import QtQuick.Controls 2.3
-import QtQml
import "menus"
@@ -43,25 +42,7 @@ ApplicationWindow {
property bool fullscreen: false
onFullscreenChanged: visibility = (fullscreen ? Window.FullScreen : Window.Windowed)
- menuBar: qtquickMenuLoader.item
-
- Loader {
- id: qtquickMenuLoader
- active: !appSettings.isMacOS && (appSettings.showMenubar && !fullscreen)
- sourceComponent: WindowMenu { }
- }
-
- Connections {
- target: newTabAction
- enabled: terminalWindow.active
- onTriggered: terminalTabs.addTab()
- }
-
- Connections {
- target: fullscreenAction
- enabled: terminalWindow.active
- onTriggered: terminalWindow.fullscreen = !terminalWindow.fullscreen
- }
+ menuBar: WindowMenu { }
property real normalizedWindowScale: 1024 / ((0.5 * width + 0.5 * height))
@@ -69,6 +50,73 @@ ApplicationWindow {
title: terminalTabs.currentTitle
+ Action {
+ id: fullscreenAction
+ text: qsTr("Fullscreen")
+ enabled: !appSettings.isMacOS
+ shortcut: StandardKey.FullScreen
+ onTriggered: fullscreen = !fullscreen
+ checkable: true
+ checked: fullscreen
+ }
+ Action {
+ id: newWindowAction
+ text: qsTr("New Window")
+ shortcut: appSettings.isMacOS ? "Meta+N" : "Ctrl+Shift+N"
+ onTriggered: appRoot.createWindow()
+ }
+ Action {
+ id: quitAction
+ text: qsTr("Quit")
+ shortcut: appSettings.isMacOS ? StandardKey.Close : "Ctrl+Shift+Q"
+ onTriggered: terminalWindow.close()
+ }
+ Action {
+ id: showsettingsAction
+ text: qsTr("Settings")
+ onTriggered: {
+ settingsWindow.show()
+ settingsWindow.requestActivate()
+ settingsWindow.raise()
+ }
+ }
+ Action {
+ id: copyAction
+ text: qsTr("Copy")
+ shortcut: appSettings.isMacOS ? StandardKey.Copy : "Ctrl+Shift+C"
+ }
+ Action {
+ id: pasteAction
+ text: qsTr("Paste")
+ shortcut: appSettings.isMacOS ? StandardKey.Paste : "Ctrl+Shift+V"
+ }
+ Action {
+ id: zoomIn
+ text: qsTr("Zoom In")
+ shortcut: StandardKey.ZoomIn
+ onTriggered: appSettings.incrementScaling()
+ }
+ Action {
+ id: zoomOut
+ text: qsTr("Zoom Out")
+ shortcut: StandardKey.ZoomOut
+ onTriggered: appSettings.decrementScaling()
+ }
+ Action {
+ id: showAboutAction
+ text: qsTr("About")
+ onTriggered: {
+ aboutDialog.show()
+ aboutDialog.requestActivate()
+ aboutDialog.raise()
+ }
+ }
+ Action {
+ id: newTabAction
+ text: qsTr("New Tab")
+ shortcut: appSettings.isMacOS ? StandardKey.AddTab : "Ctrl+Shift+T"
+ onTriggered: terminalTabs.addTab()
+ }
TerminalTabs {
id: terminalTabs
width: parent.width
diff --git a/app/qml/main.qml b/app/qml/main.qml
index dc4f426..9b3b4d0 100644
--- a/app/qml/main.qml
+++ b/app/qml/main.qml
@@ -18,7 +18,6 @@
* along with this program. If not, see .
*******************************************************************************/
import QtQuick 2.2
-import QtQuick.Controls 2.3
import "menus"
@@ -47,83 +46,12 @@ QtObject {
property ListModel windowsModel: ListModel { }
- property Loader globalMenuLoader: Loader {
- active: appSettings.isMacOS
- sourceComponent: OSXMenu { }
- }
-
- property Action fullscreenAction: Action {
- text: qsTr("Fullscreen")
- enabled: !appSettings.isMacOS
- shortcut: "Alt+F11"
- }
-
- property bool initialFullscreenRequested: Qt.application.arguments.indexOf("--fullscreen") !== -1
-
- property Action newWindowAction: Action {
- text: qsTr("New Window")
- shortcut: "Ctrl+Shift+N"
- onTriggered: appRoot.createWindow()
- }
-
- property Action quitAction: Action {
- text: qsTr("Quit")
- shortcut: "Ctrl+Shift+Q"
- onTriggered: appSettings.close()
- }
-
- property Action showsettingsAction: Action {
- text: qsTr("Settings")
- onTriggered: {
- settingsWindow.show()
- settingsWindow.requestActivate()
- settingsWindow.raise()
- }
- }
-
- property Action copyAction: Action {
- text: qsTr("Copy")
- shortcut: "Ctrl+Shift+C"
- }
-
- property Action pasteAction: Action {
- text: qsTr("Paste")
- shortcut: "Ctrl+Shift+V"
- }
-
- property Action zoomInAction: Action {
- text: qsTr("Zoom In")
- shortcut: "Ctrl++"
- onTriggered: appSettings.incrementScaling()
- }
-
- property Action zoomOutAction: Action {
- text: qsTr("Zoom Out")
- shortcut: "Ctrl+-"
- onTriggered: appSettings.decrementScaling()
- }
-
- property Action showAboutAction: Action {
- text: qsTr("About")
- onTriggered: {
- aboutDialog.show()
- aboutDialog.requestActivate()
- aboutDialog.raise()
- }
- }
-
- property Action newTabAction: Action {
- text: qsTr("New Tab")
- }
-
function createWindow() {
- var useFullscreen = initialFullscreenRequested
- var window = windowComponent.createObject(null, { fullscreen: useFullscreen })
+ var window = windowComponent.createObject(null)
if (!window)
return
windowsModel.append({ window: window })
- initialFullscreenRequested = false
window.show()
window.requestActivate()
}
diff --git a/app/qml/menus/FullContextMenu.qml b/app/qml/menus/FullContextMenu.qml
index 2d7c70f..0d2ad9f 100644
--- a/app/qml/menus/FullContextMenu.qml
+++ b/app/qml/menus/FullContextMenu.qml
@@ -65,10 +65,10 @@ Menu {
visible: fullscreenAction.enabled
}
MenuItem {
- action: zoomInAction
+ action: zoomIn
}
MenuItem {
- action: zoomOutAction
+ action: zoomOut
}
}
Menu {
diff --git a/app/qml/menus/OSXMenu.qml b/app/qml/menus/OSXMenu.qml
deleted file mode 100644
index 7f0926a..0000000
--- a/app/qml/menus/OSXMenu.qml
+++ /dev/null
@@ -1,99 +0,0 @@
-/*******************************************************************************
-* Copyright (c) 2013-2021 "Filippo Scognamiglio"
-* https://github.com/Swordfish90/cool-retro-term
-*
-* This file is part of cool-retro-term.
-*
-* cool-retro-term is free software: you can redistribute it and/or modify
-* it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
-* (at your option) any later version.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU General Public License for more details.
-*
-* You should have received a copy of the GNU General Public License
-* along with this program. If not, see .
-*******************************************************************************/
-
-import QtQuick 2.3
-import Qt.labs.platform 1.1
-
-MenuBar {
- id: defaultMenuBar
-
- Menu {
- title: qsTr("File")
- MenuItem {
- text: newWindowAction.text
- shortcut: newWindowAction.shortcut
- onTriggered: newWindowAction.trigger()
- }
- MenuItem {
- text: newTabAction.text
- shortcut: newTabAction.shortcut
- onTriggered: newTabAction.trigger()
- }
- MenuSeparator {}
- MenuItem {
- text: quitAction.text
- onTriggered: quitAction.trigger()
- }
- }
- Menu {
- title: qsTr("Edit")
- MenuItem {
- text: copyAction.text
- shortcut: "Meta+C"
- onTriggered: copyAction.trigger()
- }
- MenuItem {
- text: pasteAction.text
- shortcut: "Meta+V"
- onTriggered: pasteAction.trigger()
- }
- MenuSeparator {}
- MenuItem {
- text: showsettingsAction.text
- shortcut: showsettingsAction.shortcut
- onTriggered: showsettingsAction.trigger()
- }
- }
- Menu {
- title: qsTr("View")
- MenuItem {
- text: zoomInAction.text
- shortcut: "Meta++"
- onTriggered: zoomInAction.trigger()
- }
- MenuItem {
- text: zoomOutAction.text
- shortcut: "Meta+-"
- onTriggered: zoomOutAction.trigger()
- }
- }
- Menu {
- id: profilesMenu
- title: qsTr("Profiles")
- Instantiator {
- model: appSettings.profilesList
- delegate: MenuItem {
- text: model.text
- onTriggered: {
- appSettings.loadProfileString(obj_string)
- }
- }
- onObjectAdded: function(index, object) { profilesMenu.insertItem(index, object) }
- onObjectRemoved: function(object) { profilesMenu.removeItem(object) }
- }
- }
- Menu {
- title: qsTr("Help")
- MenuItem {
- text: showAboutAction.text
- onTriggered: showAboutAction.trigger()
- }
- }
-}
diff --git a/app/qml/menus/WindowMenu.qml b/app/qml/menus/WindowMenu.qml
index 6d3f1f7..5dd5c49 100644
--- a/app/qml/menus/WindowMenu.qml
+++ b/app/qml/menus/WindowMenu.qml
@@ -22,46 +22,33 @@ import QtQuick.Controls 2.3
MenuBar {
id: defaultMenuBar
- visible: appSettings.showMenubar
+ visible: appSettings.isMacOS || appSettings.showMenubar
Menu {
title: qsTr("File")
- MenuItem {
- action: newWindowAction
- }
- MenuItem {
- action: newTabAction
- }
- MenuSeparator {}
- MenuItem {
- action: quitAction
- }
+ MenuItem { action: newWindowAction }
+ MenuItem { action: newTabAction }
+ MenuSeparator { }
+ MenuItem { action: quitAction }
}
Menu {
title: qsTr("Edit")
- MenuItem {
- action: copyAction
- }
- MenuItem {
- action: pasteAction
- }
+ MenuItem { action: copyAction }
+ MenuItem { action: pasteAction }
MenuSeparator {}
- MenuItem {
- action: showsettingsAction
- }
+ MenuItem { action: showsettingsAction }
}
Menu {
+ id: viewMenu
title: qsTr("View")
- MenuItem {
- action: fullscreenAction
- visible: fullscreenAction.enabled
- }
- MenuItem {
- action: zoomInAction
- }
- MenuItem {
- action: zoomOutAction
+ Instantiator {
+ model: !appSettings.isMacOS ? 1 : 0
+ delegate: MenuItem { action: fullscreenAction }
+ onObjectAdded: (index, object) => viewMenu.insertItem(index, object)
+ onObjectRemoved: (index, object) => viewMenu.removeItem(object)
}
+ MenuItem { action: zoomIn }
+ MenuItem { action: zoomOut }
}
Menu {
id: profilesMenu
diff --git a/app/qml/resources.qrc b/app/qml/resources.qrc
index 961600e..8afc83a 100644
--- a/app/qml/resources.qrc
+++ b/app/qml/resources.qrc
@@ -48,7 +48,6 @@
menus/WindowMenu.qml
menus/FullContextMenu.qml
menus/ShortContextMenu.qml
- menus/OSXMenu.qml
../shaders/terminal_dynamic.vert.qsb
../shaders/terminal_static.vert.qsb
../shaders/terminal_frame.vert.qsb
diff --git a/qmltermwidget b/qmltermwidget
index 7dad24f..d86ebbc 160000
--- a/qmltermwidget
+++ b/qmltermwidget
@@ -1 +1 @@
-Subproject commit 7dad24fefb783508c5d0df52f6e7beac27d28173
+Subproject commit d86ebbc396ece6ed46b30eaa1ebead138ab7f2a4