diff --git a/app/app.pro b/app/app.pro index 39bd4ec..1e42dcc 100644 --- a/app/app.pro +++ b/app/app.pro @@ -1,4 +1,4 @@ -QT += qml quick widgets sql +QT += qml quick widgets sql quickcontrols2 TARGET = cool-retro-term DESTDIR = $$OUT_PWD/../ diff --git a/app/main.cpp b/app/main.cpp index c58679e..afd0834 100644 --- a/app/main.cpp +++ b/app/main.cpp @@ -6,11 +6,13 @@ #include #include +#include #include #include #include +#include #include #include @@ -33,6 +35,9 @@ int main(int argc, char *argv[]) // This disables QT appmenu under Ubuntu, which is not working with QML apps. setenv("QT_QPA_PLATFORMTHEME", "", 1); + // Disable Connections slot warnings + QLoggingCategory::setFilterRules("qt.qml.connections.warning=false"); + #if defined (Q_OS_LINUX) setenv("QSG_RENDER_LOOP", "threaded", 0); #endif @@ -42,6 +47,9 @@ int main(int argc, char *argv[]) setenv("LC_CTYPE", "UTF-8", 1); #endif + // Force fusion style on every platform + QQuickStyle::setStyle("Fusion"); + if (argc>1 && (!strcmp(argv[1],"-h") || !strcmp(argv[1],"--help"))) { QTextStream cout(stdout, QIODevice::WriteOnly); cout << "Usage: " << argv[0] << " [--default-settings] [--workdir ] [--program ] [-p|--profile ] [--fullscreen] [-h|--help]" << endl; @@ -65,9 +73,7 @@ int main(int argc, char *argv[]) } QApplication app(argc, argv); - // set application attributes - // Has no effects, see https://bugreports.qt.io/browse/QTBUG-51293 - // app.setAttribute(Qt::AA_MacDontSwapCtrlAndMeta, true); + app.setAttribute(Qt::AA_MacDontSwapCtrlAndMeta, true); QQmlApplicationEngine engine; FileIO fileIO; diff --git a/app/qml/ApplicationSettings.qml b/app/qml/ApplicationSettings.qml index d8a1d70..424f0bd 100644 --- a/app/qml/ApplicationSettings.qml +++ b/app/qml/ApplicationSettings.qml @@ -34,6 +34,8 @@ QtObject { readonly property real minBurnInFadeTime: 160 readonly property real maxBurnInFadeTime: 1600 + property bool isMacOS: Qt.platform.os === "osx" + // GENERAL SETTINGS /////////////////////////////////////////////////////// property int x: 100 property int y: 100 @@ -41,7 +43,7 @@ QtObject { property int height: 768 property bool fullscreen: false - property bool showMenubar: Qt.platform.os === "osx" ? true : false + property bool showMenubar: false property string wintitle: "cool-retro-term" @@ -52,9 +54,7 @@ QtObject { property bool verbose: false property real bloomQuality: 0.5 - property real burnInQuality: 0.5 - property bool useFastBurnIn: Qt.platform.os === "osx" ? false : true property bool blinkingCursor: false @@ -242,8 +242,7 @@ QtObject { "bloomQuality": bloomQuality, "burnInQuality": burnInQuality, "useCustomCommand": useCustomCommand, - "customCommand": customCommand, - "useFastBurnIn": useFastBurnIn + "customCommand": customCommand } return stringify(settings) } @@ -338,9 +337,6 @@ QtObject { !== undefined ? settings.useCustomCommand : useCustomCommand customCommand = settings.customCommand !== undefined ? settings.customCommand : customCommand - - useFastBurnIn = settings.useFastBurnIn - !== undefined ? settings.useFastBurnIn : useFastBurnIn } function loadProfileString(profileString) { diff --git a/app/qml/BurnInEffect.qml b/app/qml/BurnInEffect.qml index 9061b9c..6478b95 100644 --- a/app/qml/BurnInEffect.qml +++ b/app/qml/BurnInEffect.qml @@ -29,26 +29,29 @@ Loader { property real lastUpdate: 0 property real prevLastUpdate: 0 - property real delay: (1.0 / appSettings.fps) * 1000 property real burnIn: appSettings.burnIn property real burnInFadeTime: 1 / Utils.lint(_minBurnInFadeTime, _maxBurnInFadeTime, burnIn) property real _minBurnInFadeTime: appSettings.minBurnInFadeTime property real _maxBurnInFadeTime: appSettings.maxBurnInFadeTime - active: appSettings.useFastBurnIn && appSettings.burnIn !== 0 + active: appSettings.burnIn !== 0 anchors.fill: parent function completelyUpdate() { - prevLastUpdate = lastUpdate; - lastUpdate = timeManager.time; - item.source.scheduleUpdate(); + let newTime = timeManager.time + if (newTime > lastUpdate) { + prevLastUpdate = lastUpdate + lastUpdate = newTime + } + + item.source.scheduleUpdate() } - function restartBlurSource(){ - prevLastUpdate = timeManager.time; - lastUpdate = prevLastUpdate; - completelyUpdate(); + function restartBlurSource() { + prevLastUpdate = timeManager.time + lastUpdate = prevLastUpdate + completelyUpdate() } sourceComponent: Item { @@ -72,20 +75,30 @@ Loader { Connections { target: kterminal - onImagePainted: completelyUpdate() + + function onImagePainted() { + completelyUpdate() + } } // Restart blurred source settings change. - Connections{ - target: appSettings - onBurnInChanged: burnInEffect.restartBlurSource(); - onTerminalFontChanged: burnInEffect.restartBlurSource(); - onRasterizationChanged: burnInEffect.restartBlurSource(); - onBurnInQualityChanged: burnInEffect.restartBlurSource(); - } - Connections { - target: kterminalScrollbar - onOpacityChanged: completelyUpdate() + target: appSettings + + function onBurnInChanged() { + burnInEffect.restartBlurSource() + } + + function onTerminalFontChanged() { + burnInEffect.restartBlurSource() + } + + function onRasterizationChanged() { + burnInEffect.restartBlurSource() + } + + function onBurnInQualityChanged() { + burnInEffect.restartBlurSource() + } } } diff --git a/app/qml/ColorButton.qml b/app/qml/ColorButton.qml index f46134b..a2d97e3 100644 --- a/app/qml/ColorButton.qml +++ b/app/qml/ColorButton.qml @@ -34,10 +34,8 @@ Item { visible: false //This is a workaround to a Qt 5.2 bug. - onColorChanged: if (Qt.platform.os !== "osx") - colorSelected(color) - onAccepted: if (Qt.platform.os === "osx") - colorSelected(color) + onColorChanged: if (!appSettings.isMacOS) colorSelected(color) + onAccepted: if (appSettings.isMacOS) colorSelected(color) } Rectangle { anchors.fill: parent diff --git a/app/qml/PreprocessedTerminal.qml b/app/qml/PreprocessedTerminal.qml index 9edf981..85660e9 100644 --- a/app/qml/PreprocessedTerminal.qml +++ b/app/qml/PreprocessedTerminal.qml @@ -34,7 +34,6 @@ Item{ property ShaderEffectSource mainSource: kterminalSource property BurnInEffect burnInEffect: burnInEffect - property SlowBurnIn slowBurnInEffect: slowBurnInEffect property real fontWidth: 1.0 property real screenScaling: 1.0 property real scaleTexture: 1.0 @@ -45,28 +44,54 @@ Item{ property size fontMetrics: kterminal.fontMetrics // Manage copy and paste - Connections{ + Connections { target: copyAction - onTriggered: kterminal.copyClipboard(); + + function onTriggered() { + kterminal.copyClipboard() + } } - Connections{ + Connections { target: pasteAction - onTriggered: kterminal.pasteClipboard() + + function onTriggered() { + kterminal.pasteClipboard() + } } //When settings are updated sources need to be redrawn. - Connections{ + Connections { target: appSettings - onFontScalingChanged: terminalContainer.updateSources(); - onFontWidthChanged: terminalContainer.updateSources(); + + function onFontScalingChanged() { + terminalContainer.updateSources() + } + + function onFontWidthChanged() { + terminalContainer.updateSources() + } } - Connections{ + Connections { target: terminalContainer - onWidthChanged: terminalContainer.updateSources(); - onHeightChanged: terminalContainer.updateSources(); + + function onWidthChanged() { + terminalContainer.updateSources() + } + + function onHeightChanged() { + terminalContainer.updateSources() + } } + Connections { + target: terminalWindow + + function onActiveChanged() { + kterminal.forceActiveFocus() + } + } + function updateSources() { - kterminal.update(); + kterminal.update() } QMLTermWidget { @@ -143,7 +168,7 @@ Item{ var args = Utils.tokenizeCommandLine(appSettings.customCommand); ksession.setShellProgram(args[0]); ksession.setArgs(args.slice(1)); - } else if (!defaultCmd && Qt.platform.os === "osx") { + } else if (!defaultCmd && appSettings.isMacOS) { // OSX Requires the following default parameters for auto login. ksession.setArgs(["-i", "-l"]); } @@ -173,7 +198,7 @@ Item{ Loader { id: menuLoader - sourceComponent: (Qt.platform.os === "osx" || appSettings.showMenubar ? shortContextMenu : fullContextMenu) + sourceComponent: (appSettings.isMacOS || appSettings.showMenubar ? shortContextMenu : fullContextMenu) } property alias contextmenu: menuLoader.item @@ -250,9 +275,5 @@ Item{ BurnInEffect { id: burnInEffect } - - SlowBurnIn { - id: slowBurnInEffect - } } } diff --git a/app/qml/SettingsAdvancedTab.qml b/app/qml/SettingsAdvancedTab.qml index 2a4e238..f7eb161 100644 --- a/app/qml/SettingsAdvancedTab.qml +++ b/app/qml/SettingsAdvancedTab.qml @@ -154,12 +154,6 @@ ColumnLayout { Label { text: Math.round(burnInSlider.value * 100) + "%" } - CheckBox { - Layout.columnSpan: 2 - text: qsTr("Burnin optimization (Might display timing artifacts)") - checked: appSettings.useFastBurnIn - onCheckedChanged: appSettings.useFastBurnIn = checked - } } } } diff --git a/app/qml/SettingsGeneralTab.qml b/app/qml/SettingsGeneralTab.qml index ed3359e..40fbc0d 100644 --- a/app/qml/SettingsGeneralTab.qml +++ b/app/qml/SettingsGeneralTab.qml @@ -33,6 +33,7 @@ ColumnLayout { Layout.fillWidth: true Layout.fillHeight: true model: appSettings.profilesList + clip: true delegate: Rectangle { width: label.width height: label.height @@ -215,10 +216,12 @@ ColumnLayout { } Label { text: qsTr("Opacity") + visible: !appSettings.isMacOS } SimpleSlider { onValueChanged: appSettings.windowOpacity = value value: appSettings.windowOpacity + visible: !appSettings.isMacOS } } } diff --git a/app/qml/SettingsTerminalTab.qml b/app/qml/SettingsTerminalTab.qml index 8e3a35c..7811d4c 100644 --- a/app/qml/SettingsTerminalTab.qml +++ b/app/qml/SettingsTerminalTab.qml @@ -68,7 +68,10 @@ ColumnLayout { } Connections { target: appSettings - onTerminalFontChanged: fontChanger.updateIndex() + + function onTerminalFontChanged() { + fontChanger.updateIndex() + } } Component.onCompleted: updateIndex() } diff --git a/app/qml/SettingsWindow.qml b/app/qml/SettingsWindow.qml index 6b5c024..1009aa2 100644 --- a/app/qml/SettingsWindow.qml +++ b/app/qml/SettingsWindow.qml @@ -27,42 +27,49 @@ import QtQuick.Dialogs 1.1 Window { id: settings_window title: qsTr("Settings") - width: 800 - height: 600 + width: 600 + height: 480 property int tabmargins: 15 - TabBar { - id: bar - width: parent.width - TabButton { - text: qsTr("General") - } - TabButton { - text: qsTr("Terminal") - } - TabButton { - text: qsTr("Effects") - } - TabButton { - text: qsTr("Advanced") - } - } + Item { + anchors { fill: parent; margins: tabmargins } - StackLayout { - anchors { - top: bar.bottom - left: parent.left - right: parent.right - bottom: parent.bottom - margins: tabmargins + TabBar { + id: bar + anchors { left: parent.left; right: parent.right; top: parent.top; } + TabButton { + text: qsTr("General") + } + TabButton { + text: qsTr("Terminal") + } + TabButton { + text: qsTr("Effects") + } + TabButton { + text: qsTr("Advanced") + } } - currentIndex: bar.currentIndex + Frame { + anchors { + top: bar.bottom + left: parent.left + right: parent.right + bottom: parent.bottom + } - SettingsGeneralTab { } - SettingsTerminalTab { } - SettingsEffectsTab { } - SettingsAdvancedTab { } + StackLayout { + anchors.fill: parent + + currentIndex: bar.currentIndex + + SettingsGeneralTab { } + SettingsTerminalTab { } + SettingsEffectsTab { } + SettingsAdvancedTab { } + } + } } } diff --git a/app/qml/ShaderTerminal.qml b/app/qml/ShaderTerminal.qml index 4164320..2de0d9b 100644 --- a/app/qml/ShaderTerminal.qml +++ b/app/qml/ShaderTerminal.qml @@ -24,7 +24,6 @@ import QtGraphicalEffects 1.0 import "utils.js" as Utils Item { - property SlowBurnIn slowBurnInEffect property ShaderEffectSource source property BurnInEffect burnInEffect property ShaderEffectSource bloomSource @@ -67,14 +66,10 @@ Item { property real glowingLine: appSettings.glowingLine * 0.2 // Fast burnin properties - property real burnIn: appSettings.useFastBurnIn ? appSettings.burnIn : 0 + property real burnIn: appSettings.burnIn property real burnInLastUpdate: burnInEffect.lastUpdate property real burnInTime: burnInEffect.burnInFadeTime - // Slow burnin properties - property real slowBurnIn: appSettings.useFastBurnIn ? 0 : appSettings.burnIn - property ShaderEffectSource slowBurnInSource: slowBurnInEffect.source - property real jitter: appSettings.jitter property size jitterDisplacement: Qt.size(0.007 * jitter, 0.002 * jitter) property real shadowLength: 0.25 * screenCurvature * Utils.lint(0.50, 1.5, ambientLight) @@ -185,8 +180,6 @@ Item { uniform sampler2D burnInSource; uniform highp float burnInLastUpdate; uniform highp float burnInTime;" : "") + - (slowBurnIn !== 0 ? " - uniform sampler2D slowBurnInSource;" : "") + (staticNoise !== 0 ? " uniform highp float staticNoise;" : "") + (((staticNoise !== 0 || jitter !== 0) ||(fallBack && (flickering || horizontalSync))) ? " @@ -314,11 +307,6 @@ Item { txt_color = max(txt_color, convertWithChroma(burnInColor));" : "") + - (slowBurnIn !== 0 ? " - vec4 txt_blur = texture2D(slowBurnInSource, staticCoords); - txt_color = max(txt_color, convertWithChroma(txt_blur.rgb * txt_blur.a)); - " : "") + - "txt_color += fontColor.rgb * vec3(color);" + "txt_color = applyRasterization(staticCoords, txt_color, virtualResolution, rasterizationIntensity);\n" + diff --git a/app/qml/SlowBurnIn.qml b/app/qml/SlowBurnIn.qml deleted file mode 100644 index 25899ba..0000000 --- a/app/qml/SlowBurnIn.qml +++ /dev/null @@ -1,140 +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.0 - -import "utils.js" as Utils - -Loader { - property ShaderEffectSource source: item ? item.source : null - - active: !appSettings.useFastBurnIn && appSettings.burnIn !== 0 - anchors.fill: parent - - sourceComponent: Item { - property alias source: burnInSourceEffect - property int burnInScaling: scaleTexture * appSettings.burnInQuality - - ShaderEffectSource { - property bool updateBurnIn: false - property real burnIn: appSettings.burnIn - property real fps: appSettings.fps !== 0 ? appSettings.fps : 60 - property real burnInFadeTime: Utils.lint(minBurnInFadeTime, maxBurnInFadeTime, burnIn) - property real burnInCoefficient: 1000 / (fps * burnInFadeTime) - property real minBurnInFadeTime: appSettings.minBurnInFadeTime - property real maxBurnInFadeTime: appSettings.maxBurnInFadeTime - - id: burnInSourceEffect - - anchors.fill: parent - - sourceItem: burnInEffect - recursive: true - live: false - hideSource: true - wrapMode: kterminalSource.wrapMode - - visible: false - - function restartBlurSource(){ - livetimer.restart(); - } - - // This updates the burnin synched with the timer. - Connections { - target: burnInSourceEffect.updateBurnIn ? timeManager : null - ignoreUnknownSignals: false - onTimeChanged: { - burnInSourceEffect.scheduleUpdate(); - } - } - - Timer { - id: livetimer - - // The interval assumes 60 fps. This is the time needed burnout a white pixel. - // We multiply 1.1 to have a little bit of margin over the theoretical value. - // This solution is not extremely clean, but it's probably the best to avoid measuring fps. - - interval: burnInSourceEffect.burnInFadeTime * 1.1 - running: true - onTriggered: burnInSourceEffect.updateBurnIn = false; - } - Connections { - target: kterminal - onImagePainted:{ - burnInSourceEffect.scheduleUpdate(); - burnInSourceEffect.updateBurnIn = true; - livetimer.restart(); - } - } - // Restart blurred source settings change. - Connections { - target: appSettings - onBurnInChanged: burnInSourceEffect.restartBlurSource(); - onTerminalFontChanged: burnInSourceEffect.restartBlurSource(); - onRasterizationChanged: burnInSourceEffect.restartBlurSource(); - onBurnInQualityChanged: burnInSourceEffect.restartBlurSource(); - } - Connections { - target: kterminalScrollbar - onOpacityChanged: burnInSourceEffect.restartBlurSource(); - } - - ShaderEffect { - id: burnInEffect - - property variant txt_source: kterminalSource - property variant blurredSource: burnInSourceEffect - property real burnInCoefficient: burnInSourceEffect.burnInCoefficient - - anchors.fill: parent - blending: false - - fragmentShader: - "#ifdef GL_ES - precision mediump float; - #endif\n" + - - "uniform lowp float qt_Opacity;" + - "uniform lowp sampler2D txt_source;" + - - "varying highp vec2 qt_TexCoord0; - uniform lowp sampler2D blurredSource; - uniform highp float burnInCoefficient;" + - - "float max3(vec3 v) { - return max (max (v.x, v.y), v.z); - }" + - - "void main() {" + - "vec2 coords = qt_TexCoord0;" + - "vec3 origColor = texture2D(txt_source, coords).rgb;" + - "vec3 blur_color = texture2D(blurredSource, coords).rgb - vec3(burnInCoefficient);" + - "vec3 color = min(origColor + blur_color, max(origColor, blur_color));" + - - "gl_FragColor = vec4(color, max3(color - origColor));" + - "}" - - onStatusChanged: if (log) console.log(log) //Print warning messages - } - } - } -} diff --git a/app/qml/TerminalContainer.qml b/app/qml/TerminalContainer.qml index 9896354..b6be435 100644 --- a/app/qml/TerminalContainer.qml +++ b/app/qml/TerminalContainer.qml @@ -33,7 +33,6 @@ ShaderTerminal { source: terminal.mainSource burnInEffect: terminal.burnInEffect - slowBurnInEffect: terminal.slowBurnInEffect virtualResolution: terminal.virtualResolution screenResolution: Qt.size( terminalWindow.width * devicePixelRatio * appSettings.windowScaling, diff --git a/app/qml/main.qml b/app/qml/main.qml index 0e8395f..8ae0774 100644 --- a/app/qml/main.qml +++ b/app/qml/main.qml @@ -53,20 +53,30 @@ ApplicationWindow { property bool fullscreen: appSettings.fullscreen onFullscreenChanged: visibility = (fullscreen ? Window.FullScreen : Window.Windowed) - menuBar: WindowMenu { - id: mainMenu - visible: (Qt.platform.os === "osx" || appSettings.showMenubar) + menuBar: qtquickMenuLoader.item + + Loader { + id: qtquickMenuLoader + active: !appSettings.isMacOS && appSettings.showMenubar + sourceComponent: WindowMenu { } + } + + Loader { + id: globalMenuLoader + active: appSettings.isMacOS + sourceComponent: OSXMenu { } } property string wintitle: appSettings.wintitle color: "#00000000" + title: terminalContainer.title || qsTr(appSettings.wintitle) Action { id: showMenubarAction text: qsTr("Show Menubar") - enabled: Qt.platform.os !== "osx" + enabled: !appSettings.isMacOS shortcut: "Ctrl+Shift+M" checkable: true checked: appSettings.showMenubar @@ -75,7 +85,7 @@ ApplicationWindow { Action { id: fullscreenAction text: qsTr("Fullscreen") - enabled: Qt.platform.os !== "osx" + enabled: !appSettings.isMacOS shortcut: "Alt+F11" onTriggered: appSettings.fullscreen = !appSettings.fullscreen checkable: true @@ -154,7 +164,7 @@ ApplicationWindow { onClosing: { // OSX Since we are currently supporting only one window // quit the application when it is closed. - if (Qt.platform.os === "osx") + if (appSettings.isMacOS) Qt.quit() } } diff --git a/app/qml/menus/OSXMenu.qml b/app/qml/menus/OSXMenu.qml new file mode 100644 index 0000000..3fe9971 --- /dev/null +++ b/app/qml/menus/OSXMenu.qml @@ -0,0 +1,89 @@ +/******************************************************************************* +* 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: 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: zoomIn.text + shortcut: "Meta++" + onTriggered: zoomIn.trigger() + } + MenuItem { + text: zoomOut.text + shortcut: "Meta+-" + onTriggered: zoomOut.trigger() + } + } + Menu { + id: profilesMenu + title: qsTr("Profiles") + Instantiator { + model: appSettings.profilesList + delegate: MenuItem { + text: model.text + onTriggered: { + appSettings.loadProfileString(obj_string) + appSettings.handleFontChanged() + } + } + onObjectAdded: profilesMenu.insertItem(index, object) + onObjectRemoved: profilesMenu.removeItem(object) + } + } + Menu { + title: qsTr("Help") + MenuItem { + text: showAboutAction.text + onTriggered: showAboutAction.trigger() + } + } +} diff --git a/app/qml/resources.qrc b/app/qml/resources.qrc index 0cb4d24..1114d8d 100644 --- a/app/qml/resources.qrc +++ b/app/qml/resources.qrc @@ -41,10 +41,10 @@ BurnInEffect.qml fonts/modern-terminus/TerminusTTF-4.46.0.ttf TerminalFrame.qml - SlowBurnIn.qml menus/WindowMenu.qml menus/FullContextMenu.qml menus/ShortContextMenu.qml ShaderLibrary.qml + menus/OSXMenu.qml diff --git a/qmltermwidget b/qmltermwidget index 5c47d1f..6322802 160000 --- a/qmltermwidget +++ b/qmltermwidget @@ -1 +1 @@ -Subproject commit 5c47d1f49455394226e0e595f79c148f0c098006 +Subproject commit 63228027e1f97c24abb907550b22ee91836929c5