mirror of
				https://github.com/Swordfish90/cool-retro-term.git
				synced 2025-10-31 07:04:20 +00:00 
			
		
		
		
	UI/UX fixes for OSX version.
This commit is contained in:
		| @@ -1,4 +1,4 @@ | |||||||
| QT += qml quick widgets sql | QT += qml quick widgets sql quickcontrols2 | ||||||
| TARGET = cool-retro-term  | TARGET = cool-retro-term  | ||||||
|  |  | ||||||
| DESTDIR = $$OUT_PWD/../ | DESTDIR = $$OUT_PWD/../ | ||||||
|   | |||||||
| @@ -6,6 +6,7 @@ | |||||||
|  |  | ||||||
| #include <QtWidgets/QApplication> | #include <QtWidgets/QApplication> | ||||||
| #include <QIcon> | #include <QIcon> | ||||||
|  | #include <QQuickStyle> | ||||||
|  |  | ||||||
| #include <QDebug> | #include <QDebug> | ||||||
| #include <stdlib.h> | #include <stdlib.h> | ||||||
| @@ -40,6 +41,9 @@ int main(int argc, char *argv[]) | |||||||
| #if defined(Q_OS_MAC) | #if defined(Q_OS_MAC) | ||||||
|     // This allows UTF-8 characters usage in OSX. |     // This allows UTF-8 characters usage in OSX. | ||||||
|     setenv("LC_CTYPE", "UTF-8", 1); |     setenv("LC_CTYPE", "UTF-8", 1); | ||||||
|  |  | ||||||
|  |     // Force fusion style on macOS | ||||||
|  |     QQuickStyle::setStyle("Fusion"); | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|     if (argc>1 && (!strcmp(argv[1],"-h") || !strcmp(argv[1],"--help"))) { |     if (argc>1 && (!strcmp(argv[1],"-h") || !strcmp(argv[1],"--help"))) { | ||||||
| @@ -65,9 +69,7 @@ int main(int argc, char *argv[]) | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     QApplication app(argc, argv); |     QApplication app(argc, argv); | ||||||
|     // set application attributes |     app.setAttribute(Qt::AA_MacDontSwapCtrlAndMeta, true); | ||||||
|     // Has no effects, see https://bugreports.qt.io/browse/QTBUG-51293 |  | ||||||
|     // app.setAttribute(Qt::AA_MacDontSwapCtrlAndMeta, true); |  | ||||||
|  |  | ||||||
|     QQmlApplicationEngine engine; |     QQmlApplicationEngine engine; | ||||||
|     FileIO fileIO; |     FileIO fileIO; | ||||||
|   | |||||||
| @@ -34,6 +34,8 @@ QtObject { | |||||||
|     readonly property real minBurnInFadeTime: 160 |     readonly property real minBurnInFadeTime: 160 | ||||||
|     readonly property real maxBurnInFadeTime: 1600 |     readonly property real maxBurnInFadeTime: 1600 | ||||||
|  |  | ||||||
|  |     property bool isMacOS: Qt.platform.os === "osx" | ||||||
|  |  | ||||||
|     // GENERAL SETTINGS /////////////////////////////////////////////////////// |     // GENERAL SETTINGS /////////////////////////////////////////////////////// | ||||||
|     property int x: 100 |     property int x: 100 | ||||||
|     property int y: 100 |     property int y: 100 | ||||||
| @@ -41,7 +43,7 @@ QtObject { | |||||||
|     property int height: 768 |     property int height: 768 | ||||||
|  |  | ||||||
|     property bool fullscreen: false |     property bool fullscreen: false | ||||||
|     property bool showMenubar: Qt.platform.os === "osx" ? true : false |     property bool showMenubar: false | ||||||
|  |  | ||||||
|     property string wintitle: "cool-retro-term" |     property string wintitle: "cool-retro-term" | ||||||
|  |  | ||||||
| @@ -54,7 +56,7 @@ QtObject { | |||||||
|     property real bloomQuality: 0.5 |     property real bloomQuality: 0.5 | ||||||
|  |  | ||||||
|     property real burnInQuality: 0.5 |     property real burnInQuality: 0.5 | ||||||
|     property bool useFastBurnIn: Qt.platform.os === "osx" ? false : true |     property bool useFastBurnIn: true | ||||||
|  |  | ||||||
|     property bool blinkingCursor: false |     property bool blinkingCursor: false | ||||||
|  |  | ||||||
|   | |||||||
| @@ -72,20 +72,38 @@ Loader { | |||||||
|  |  | ||||||
|             Connections { |             Connections { | ||||||
|                 target: kterminal |                 target: kterminal | ||||||
|                 onImagePainted: completelyUpdate() |  | ||||||
|  |                 function onImagePainted() { | ||||||
|  |                     completelyUpdate() | ||||||
|  |                 } | ||||||
|             } |             } | ||||||
|             // Restart blurred source settings change. |             // Restart blurred source settings change. | ||||||
|             Connections{ |             Connections{ | ||||||
|                 target: appSettings |                 target: appSettings | ||||||
|                 onBurnInChanged: burnInEffect.restartBlurSource(); |  | ||||||
|                 onTerminalFontChanged: burnInEffect.restartBlurSource(); |                 function onBurnInChanged() { | ||||||
|                 onRasterizationChanged: burnInEffect.restartBlurSource(); |                     burnInEffect.restartBlurSource() | ||||||
|                 onBurnInQualityChanged: burnInEffect.restartBlurSource(); |                 } | ||||||
|  |  | ||||||
|  |                 function onTerminalFontChanged() { | ||||||
|  |                     burnInEffect.restartBlurSource() | ||||||
|  |                 } | ||||||
|  |  | ||||||
|  |                 function onRasterizationChanged() { | ||||||
|  |                     burnInEffect.restartBlurSource() | ||||||
|  |                 } | ||||||
|  |  | ||||||
|  |                 function onBurnInQualityChanged() { | ||||||
|  |                     burnInEffect.restartBlurSource() | ||||||
|  |                 } | ||||||
|             } |             } | ||||||
|  |  | ||||||
|             Connections { |             Connections { | ||||||
|                 target: kterminalScrollbar |                 target: kterminalScrollbar | ||||||
|                 onOpacityChanged: completelyUpdate() |  | ||||||
|  |                 function onOpacityChanged() { | ||||||
|  |                     completelyUpdate() | ||||||
|  |                 } | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -34,10 +34,8 @@ Item { | |||||||
|         visible: false |         visible: false | ||||||
|  |  | ||||||
|         //This is a workaround to a Qt 5.2 bug. |         //This is a workaround to a Qt 5.2 bug. | ||||||
|         onColorChanged: if (Qt.platform.os !== "osx") |         onColorChanged: if (!appSettings.isMacOS) colorSelected(color) | ||||||
|                             colorSelected(color) |         onAccepted: if (appSettings.isMacOS) colorSelected(color) | ||||||
|         onAccepted: if (Qt.platform.os === "osx") |  | ||||||
|                         colorSelected(color) |  | ||||||
|     } |     } | ||||||
|     Rectangle { |     Rectangle { | ||||||
|         anchors.fill: parent |         anchors.fill: parent | ||||||
|   | |||||||
| @@ -45,28 +45,54 @@ Item{ | |||||||
|     property size fontMetrics: kterminal.fontMetrics |     property size fontMetrics: kterminal.fontMetrics | ||||||
|  |  | ||||||
|     // Manage copy and paste |     // Manage copy and paste | ||||||
|     Connections{ |     Connections { | ||||||
|         target: copyAction |         target: copyAction | ||||||
|         onTriggered: kterminal.copyClipboard(); |  | ||||||
|  |         function onTriggered() { | ||||||
|  |             kterminal.copyClipboard() | ||||||
|  |         } | ||||||
|     } |     } | ||||||
|     Connections{ |     Connections { | ||||||
|         target: pasteAction |         target: pasteAction | ||||||
|         onTriggered: kterminal.pasteClipboard() |  | ||||||
|  |         function onTriggered() { | ||||||
|  |             kterminal.pasteClipboard() | ||||||
|  |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     //When settings are updated sources need to be redrawn. |     //When settings are updated sources need to be redrawn. | ||||||
|     Connections{ |     Connections { | ||||||
|         target: appSettings |         target: appSettings | ||||||
|         onFontScalingChanged: terminalContainer.updateSources(); |  | ||||||
|         onFontWidthChanged: terminalContainer.updateSources(); |         function onFontScalingChanged() { | ||||||
|  |             terminalContainer.updateSources() | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         function onFontWidthChanged() { | ||||||
|  |             terminalContainer.updateSources() | ||||||
|  |         } | ||||||
|     } |     } | ||||||
|     Connections{ |     Connections { | ||||||
|         target: terminalContainer |         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() { |     function updateSources() { | ||||||
|         kterminal.update(); |         kterminal.update() | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     QMLTermWidget { |     QMLTermWidget { | ||||||
| @@ -143,7 +169,7 @@ Item{ | |||||||
|                 var args = Utils.tokenizeCommandLine(appSettings.customCommand); |                 var args = Utils.tokenizeCommandLine(appSettings.customCommand); | ||||||
|                 ksession.setShellProgram(args[0]); |                 ksession.setShellProgram(args[0]); | ||||||
|                 ksession.setArgs(args.slice(1)); |                 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. |                 // OSX Requires the following default parameters for auto login. | ||||||
|                 ksession.setArgs(["-i", "-l"]); |                 ksession.setArgs(["-i", "-l"]); | ||||||
|             } |             } | ||||||
| @@ -173,7 +199,7 @@ Item{ | |||||||
|  |  | ||||||
|     Loader { |     Loader { | ||||||
|         id: menuLoader |         id: menuLoader | ||||||
|         sourceComponent: (Qt.platform.os === "osx" || appSettings.showMenubar ? shortContextMenu : fullContextMenu) |         sourceComponent: (appSettings.isMacOS || appSettings.showMenubar ? shortContextMenu : fullContextMenu) | ||||||
|     } |     } | ||||||
|     property alias contextmenu: menuLoader.item |     property alias contextmenu: menuLoader.item | ||||||
|  |  | ||||||
|   | |||||||
| @@ -215,10 +215,12 @@ ColumnLayout { | |||||||
|             } |             } | ||||||
|             Label { |             Label { | ||||||
|                 text: qsTr("Opacity") |                 text: qsTr("Opacity") | ||||||
|  |                 visible: !appSettings.isMacOS | ||||||
|             } |             } | ||||||
|             SimpleSlider { |             SimpleSlider { | ||||||
|                 onValueChanged: appSettings.windowOpacity = value |                 onValueChanged: appSettings.windowOpacity = value | ||||||
|                 value: appSettings.windowOpacity |                 value: appSettings.windowOpacity | ||||||
|  |                 visible: !appSettings.isMacOS | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -68,7 +68,10 @@ ColumnLayout { | |||||||
|                 } |                 } | ||||||
|                 Connections { |                 Connections { | ||||||
|                     target: appSettings |                     target: appSettings | ||||||
|                     onTerminalFontChanged: fontChanger.updateIndex() |  | ||||||
|  |                     function onTerminalFontChanged() { | ||||||
|  |                         fontChanger.updateIndex() | ||||||
|  |                     } | ||||||
|                 } |                 } | ||||||
|                 Component.onCompleted: updateIndex() |                 Component.onCompleted: updateIndex() | ||||||
|             } |             } | ||||||
|   | |||||||
| @@ -34,7 +34,7 @@ Window { | |||||||
|  |  | ||||||
|     TabBar { |     TabBar { | ||||||
|         id: bar |         id: bar | ||||||
|         width: parent.width |         anchors { left: parent.left; right: parent.right; top: parent.top } | ||||||
|         TabButton { |         TabButton { | ||||||
|             text: qsTr("General") |             text: qsTr("General") | ||||||
|         } |         } | ||||||
|   | |||||||
| @@ -53,20 +53,30 @@ ApplicationWindow { | |||||||
|     property bool fullscreen: appSettings.fullscreen |     property bool fullscreen: appSettings.fullscreen | ||||||
|     onFullscreenChanged: visibility = (fullscreen ? Window.FullScreen : Window.Windowed) |     onFullscreenChanged: visibility = (fullscreen ? Window.FullScreen : Window.Windowed) | ||||||
|  |  | ||||||
|     menuBar: WindowMenu { |     menuBar: qtquickMenuLoader.item | ||||||
|         id: mainMenu |  | ||||||
|         visible: (Qt.platform.os === "osx" || appSettings.showMenubar) |     Loader { | ||||||
|  |         id: qtquickMenuLoader | ||||||
|  |         active: !appSettings.isMacOS && appSettings.showMenubar | ||||||
|  |         sourceComponent: WindowMenu { } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     Loader { | ||||||
|  |         id: globalMenuLoader | ||||||
|  |         active: appSettings.isMacOS | ||||||
|  |         sourceComponent: OSXMenu { } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     property string wintitle: appSettings.wintitle |     property string wintitle: appSettings.wintitle | ||||||
|  |  | ||||||
|     color: "#00000000" |     color: "#00000000" | ||||||
|  |  | ||||||
|     title: terminalContainer.title || qsTr(appSettings.wintitle) |     title: terminalContainer.title || qsTr(appSettings.wintitle) | ||||||
|  |  | ||||||
|     Action { |     Action { | ||||||
|         id: showMenubarAction |         id: showMenubarAction | ||||||
|         text: qsTr("Show Menubar") |         text: qsTr("Show Menubar") | ||||||
|         enabled: Qt.platform.os !== "osx" |         enabled: !appSettings.isMacOS | ||||||
|         shortcut: "Ctrl+Shift+M" |         shortcut: "Ctrl+Shift+M" | ||||||
|         checkable: true |         checkable: true | ||||||
|         checked: appSettings.showMenubar |         checked: appSettings.showMenubar | ||||||
| @@ -75,7 +85,7 @@ ApplicationWindow { | |||||||
|     Action { |     Action { | ||||||
|         id: fullscreenAction |         id: fullscreenAction | ||||||
|         text: qsTr("Fullscreen") |         text: qsTr("Fullscreen") | ||||||
|         enabled: Qt.platform.os !== "osx" |         enabled: !appSettings.isMacOS | ||||||
|         shortcut: "Alt+F11" |         shortcut: "Alt+F11" | ||||||
|         onTriggered: appSettings.fullscreen = !appSettings.fullscreen |         onTriggered: appSettings.fullscreen = !appSettings.fullscreen | ||||||
|         checkable: true |         checkable: true | ||||||
| @@ -154,7 +164,7 @@ ApplicationWindow { | |||||||
|     onClosing: { |     onClosing: { | ||||||
|         // OSX Since we are currently supporting only one window |         // OSX Since we are currently supporting only one window | ||||||
|         // quit the application when it is closed. |         // quit the application when it is closed. | ||||||
|         if (Qt.platform.os === "osx") |         if (appSettings.isMacOS) | ||||||
|             Qt.quit() |             Qt.quit() | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										89
									
								
								app/qml/menus/OSXMenu.qml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								app/qml/menus/OSXMenu.qml
									
									
									
									
									
										Normal file
									
								
							| @@ -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 <http://www.gnu.org/licenses/>. | ||||||
|  | *******************************************************************************/ | ||||||
|  |  | ||||||
|  | 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() | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -46,5 +46,6 @@ | |||||||
|         <file>menus/FullContextMenu.qml</file> |         <file>menus/FullContextMenu.qml</file> | ||||||
|         <file>menus/ShortContextMenu.qml</file> |         <file>menus/ShortContextMenu.qml</file> | ||||||
|         <file>ShaderLibrary.qml</file> |         <file>ShaderLibrary.qml</file> | ||||||
|  |         <file>menus/OSXMenu.qml</file> | ||||||
|     </qresource> |     </qresource> | ||||||
| </RCC> | </RCC> | ||||||
|   | |||||||
 Submodule qmltermwidget updated: 5c47d1f494...997bdaa832
									
								
							
		Reference in New Issue
	
	Block a user