From 63f17906621d14f56c07eab3b937f6a654422dec Mon Sep 17 00:00:00 2001 From: Shawn Schantz Date: Tue, 15 Sep 2026 14:29:05 -0400 Subject: [PATCH 1/4] feat(mac): remove old config UI now that the Keyman Configuration app is available to install and manage keyboard packages, delete the old configuration interface accessed through the Keyman menu on the input method --- .../Keyman4MacIM.xcodeproj/project.pbxproj | 169 ----- .../Keyman4MacIM/Base.lproj/MainMenu.xib | 7 +- mac/Keyman4MacIM/Keyman4MacIM/Info.plist | 2 - .../Base.lproj/KMAboutWindowController.xib | 39 +- .../KMAboutWindow/KMAboutWindowController.m | 19 - .../Base.lproj/preferences.xib | 321 ---------- .../KMConfiguration/KMConfigColumn1CellView.h | 13 - .../KMConfiguration/KMConfigColumn1CellView.m | 14 - .../KMConfiguration/KMConfigColumn3CellView.h | 15 - .../KMConfiguration/KMConfigColumn3CellView.m | 13 - .../KMConfigurationWindowController.h | 19 - .../KMConfigurationWindowController.m | 593 ------------------ .../am.lproj/preferences.strings | 38 -- .../cs.lproj/preferences.strings | 38 -- .../el.lproj/preferences.strings | 38 -- .../en.lproj/preferences.strings | 39 -- .../es-419.lproj/preferences.strings | 38 -- .../es.lproj/preferences.strings | 38 -- .../ff-ng.lproj/preferences.strings | 38 -- .../ff.lproj/preferences.strings | 38 -- .../ha.lproj/preferences.strings | 38 -- .../it.lproj/preferences.strings | 38 -- .../km.lproj/preferences.strings | 38 -- .../kn.lproj/preferences.strings | 38 -- .../nl.lproj/preferences.strings | 38 -- .../pl.lproj/preferences.strings | 38 -- .../pt-PT.lproj/preferences.strings | 38 -- .../ru.lproj/preferences.strings | 38 -- .../sv.lproj/preferences.strings | 38 -- .../uk.lproj/preferences.strings | 38 -- .../vi.lproj/preferences.strings | 38 -- .../zh-Hans.lproj/preferences.strings | 38 -- .../KMDownloadKBWindowController.h | 14 - .../KMDownloadKBWindowController.m | 101 --- .../KMDownloadKBWindowController.xib | 44 -- .../Base.lproj/KMInfoWindowController.xib | 61 -- .../KMInfoWindow/KMInfoWindowController.h | 15 - .../KMInfoWindow/KMInfoWindowController.m | 227 ------- .../am.lproj/KMInfoWindowController.strings | 8 - .../cs.lproj/KMInfoWindowController.strings | 8 - .../el.lproj/KMInfoWindowController.strings | 8 - .../en.lproj/KMInfoWindowController.strings | 9 - .../KMInfoWindowController.strings | 8 - .../es.lproj/KMInfoWindowController.strings | 8 - .../KMInfoWindowController.strings | 8 - .../ff.lproj/KMInfoWindowController.strings | 8 - .../ha.lproj/KMInfoWindowController.strings | 8 - .../it.lproj/KMInfoWindowController.strings | 8 - .../km.lproj/KMInfoWindowController.strings | 8 - .../kn.lproj/KMInfoWindowController.strings | 8 - .../nl.lproj/KMInfoWindowController.strings | 8 - .../pl.lproj/KMInfoWindowController.strings | 8 - .../KMInfoWindowController.strings | 8 - .../ru.lproj/KMInfoWindowController.strings | 8 - .../sv.lproj/KMInfoWindowController.strings | 8 - .../uk.lproj/KMInfoWindowController.strings | 8 - .../vi.lproj/KMInfoWindowController.strings | 8 - .../KMInfoWindowController.strings | 8 - .../Keyman4MacIM/KMInputController.m | 25 +- .../Keyman4MacIM/KMInputMethodAppDelegate.h | 30 +- .../Keyman4MacIM/KMInputMethodAppDelegate.m | 543 +--------------- mac/Keyman4MacIM/Keyman4MacIM/KMPackage.m | 4 - .../OnScreenKeyboard/OSKWindowController.m | 2 +- .../OnScreenKeyboard/OSKWindowController.xib | 6 +- .../KeymanSettings/InputMethodUtil.swift | 1 + mac/build.sh | 32 +- mac/local-deploy.sh | 4 +- 67 files changed, 29 insertions(+), 3226 deletions(-) delete mode 100644 mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/Base.lproj/preferences.xib delete mode 100644 mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/KMConfigColumn1CellView.h delete mode 100644 mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/KMConfigColumn1CellView.m delete mode 100644 mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/KMConfigColumn3CellView.h delete mode 100644 mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/KMConfigColumn3CellView.m delete mode 100644 mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/KMConfigurationWindowController.h delete mode 100644 mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/KMConfigurationWindowController.m delete mode 100644 mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/am.lproj/preferences.strings delete mode 100644 mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/cs.lproj/preferences.strings delete mode 100644 mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/el.lproj/preferences.strings delete mode 100644 mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/en.lproj/preferences.strings delete mode 100644 mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/es-419.lproj/preferences.strings delete mode 100644 mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/es.lproj/preferences.strings delete mode 100644 mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/ff-ng.lproj/preferences.strings delete mode 100644 mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/ff.lproj/preferences.strings delete mode 100644 mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/ha.lproj/preferences.strings delete mode 100644 mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/it.lproj/preferences.strings delete mode 100644 mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/km.lproj/preferences.strings delete mode 100644 mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/kn.lproj/preferences.strings delete mode 100644 mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/nl.lproj/preferences.strings delete mode 100644 mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/pl.lproj/preferences.strings delete mode 100644 mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/pt-PT.lproj/preferences.strings delete mode 100644 mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/ru.lproj/preferences.strings delete mode 100644 mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/sv.lproj/preferences.strings delete mode 100644 mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/uk.lproj/preferences.strings delete mode 100644 mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/vi.lproj/preferences.strings delete mode 100644 mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/zh-Hans.lproj/preferences.strings delete mode 100644 mac/Keyman4MacIM/Keyman4MacIM/KMDownloadKeyboard/KMDownloadKBWindowController.h delete mode 100644 mac/Keyman4MacIM/Keyman4MacIM/KMDownloadKeyboard/KMDownloadKBWindowController.m delete mode 100644 mac/Keyman4MacIM/Keyman4MacIM/KMDownloadKeyboard/KMDownloadKBWindowController.xib delete mode 100644 mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/Base.lproj/KMInfoWindowController.xib delete mode 100644 mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/KMInfoWindowController.h delete mode 100644 mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/KMInfoWindowController.m delete mode 100644 mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/am.lproj/KMInfoWindowController.strings delete mode 100644 mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/cs.lproj/KMInfoWindowController.strings delete mode 100644 mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/el.lproj/KMInfoWindowController.strings delete mode 100644 mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/en.lproj/KMInfoWindowController.strings delete mode 100644 mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/es-419.lproj/KMInfoWindowController.strings delete mode 100644 mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/es.lproj/KMInfoWindowController.strings delete mode 100644 mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/ff-ng.lproj/KMInfoWindowController.strings delete mode 100644 mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/ff.lproj/KMInfoWindowController.strings delete mode 100644 mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/ha.lproj/KMInfoWindowController.strings delete mode 100644 mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/it.lproj/KMInfoWindowController.strings delete mode 100644 mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/km.lproj/KMInfoWindowController.strings delete mode 100644 mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/kn.lproj/KMInfoWindowController.strings delete mode 100644 mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/nl.lproj/KMInfoWindowController.strings delete mode 100644 mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/pl.lproj/KMInfoWindowController.strings delete mode 100644 mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/pt-PT.lproj/KMInfoWindowController.strings delete mode 100644 mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/ru.lproj/KMInfoWindowController.strings delete mode 100644 mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/sv.lproj/KMInfoWindowController.strings delete mode 100644 mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/uk.lproj/KMInfoWindowController.strings delete mode 100644 mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/vi.lproj/KMInfoWindowController.strings delete mode 100644 mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/zh-Hans.lproj/KMInfoWindowController.strings diff --git a/mac/Keyman4MacIM/Keyman4MacIM.xcodeproj/project.pbxproj b/mac/Keyman4MacIM/Keyman4MacIM.xcodeproj/project.pbxproj index c571478cb6..41368fad0d 100644 --- a/mac/Keyman4MacIM/Keyman4MacIM.xcodeproj/project.pbxproj +++ b/mac/Keyman4MacIM/Keyman4MacIM.xcodeproj/project.pbxproj @@ -12,7 +12,6 @@ 290BC75E274F3FD7005CD1C3 /* KMKeyboardInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 290BC75D274F3FD7005CD1C3 /* KMKeyboardInfo.m */; }; 2915DC512BFE35DB0051FC52 /* KMLogs.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B4A0D32BF7675A00682049 /* KMLogs.m */; }; 293EA3E627140D8100545EED /* KMAboutWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 293EA3E827140D8100545EED /* KMAboutWindowController.xib */; }; - 293EA3EB27140DEC00545EED /* preferences.xib in Resources */ = {isa = PBXBuildFile; fileRef = 293EA3ED27140DEC00545EED /* preferences.xib */; }; 293EA3F427181FDA00545EED /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 293EA3F627181FDA00545EED /* Localizable.strings */; }; 296105232C8E91C7007BF6B7 /* KMInputMethodLifecycle.m in Sources */ = {isa = PBXBuildFile; fileRef = 296105222C8E91C7007BF6B7 /* KMInputMethodLifecycle.m */; }; 296FE2FC275DD21600F46898 /* KMPackageReader.m in Sources */ = {isa = PBXBuildFile; fileRef = 296FE2FB275DD21600F46898 /* KMPackageReader.m */; }; @@ -28,7 +27,6 @@ 299ABD7129ECE75B00AA5948 /* KeySender.m in Sources */ = {isa = PBXBuildFile; fileRef = 299ABD6F29ECE75B00AA5948 /* KeySender.m */; }; 299B5E2029126CA20070841D /* keyman-icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 299B5E1E29126CA20070841D /* keyman-icon@2x.png */; }; 299B5E2129126CA20070841D /* keyman-icon.png in Resources */ = {isa = PBXBuildFile; fileRef = 299B5E1F29126CA20070841D /* keyman-icon.png */; }; - 29B42A572728339900EDD5D3 /* KMInfoWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 29B42A592728339900EDD5D3 /* KMInfoWindowController.xib */; }; 29B42A602728343B00EDD5D3 /* KMKeyboardHelpWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 29B42A622728343B00EDD5D3 /* KMKeyboardHelpWindowController.xib */; }; 29B4A0D52BF7675A00682049 /* KMLogs.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B4A0D32BF7675A00682049 /* KMLogs.m */; }; 29B6FB732BC39DD60074BF7F /* TextApiComplianceTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B6FB722BC39DD60074BF7F /* TextApiComplianceTests.m */; }; @@ -45,8 +43,6 @@ 9800EC5A1C02940300BF0FB5 /* keyman-for-mac-os-license.html in Resources */ = {isa = PBXBuildFile; fileRef = 9800EC591C02940300BF0FB5 /* keyman-for-mac-os-license.html */; }; 9803C9D81B0EFB3B0082A6F9 /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9803C9D71B0EFB3B0082A6F9 /* WebKit.framework */; }; 983247281A9EA28F0010B90C /* KeymanEngine4Mac.framework in Copy Files */ = {isa = PBXBuildFile; fileRef = 984C2B211A79DF1B0023F89D /* KeymanEngine4Mac.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 9832472E1A9EABC70010B90C /* KMConfigColumn1CellView.m in Sources */ = {isa = PBXBuildFile; fileRef = 9832472D1A9EABC70010B90C /* KMConfigColumn1CellView.m */; }; - 983247B21A9EB9690010B90C /* KMConfigColumn3CellView.m in Sources */ = {isa = PBXBuildFile; fileRef = 983247B11A9EB9690010B90C /* KMConfigColumn3CellView.m */; }; 9836B3701AE5F11D00780482 /* ioapi.c in Sources */ = {isa = PBXBuildFile; fileRef = 9836B3661AE5F11D00780482 /* ioapi.c */; }; 9836B3711AE5F11D00780482 /* mztools.c in Sources */ = {isa = PBXBuildFile; fileRef = 9836B3681AE5F11D00780482 /* mztools.c */; }; 9836B3721AE5F11D00780482 /* unzip.c in Sources */ = {isa = PBXBuildFile; fileRef = 9836B36A1AE5F11D00780482 /* unzip.c */; }; @@ -72,12 +68,8 @@ 98D6DA7B1A799F0B00B09822 /* InputMethodKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 98D6DA7A1A799F0B00B09822 /* InputMethodKit.framework */; }; 98D6DA7E1A799FF400B09822 /* KMInputController.m in Sources */ = {isa = PBXBuildFile; fileRef = 98D6DA7D1A799FF400B09822 /* KMInputController.m */; }; 98E2CEA11A92C39C00AE2455 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 98E2CEA01A92C39C00AE2455 /* InfoPlist.strings */; }; - 98E6729F1B532F5E00DBDE2F /* KMDownloadKBWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 98E6729D1B532F5D00DBDE2F /* KMDownloadKBWindowController.m */; }; - 98E672A01B532F5E00DBDE2F /* KMDownloadKBWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 98E6729E1B532F5E00DBDE2F /* KMDownloadKBWindowController.xib */; }; 98E672A41B532F9900DBDE2F /* KMKeyboardHelpWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 98E672A21B532F9900DBDE2F /* KMKeyboardHelpWindowController.m */; }; - 98F3C8931A8D739500F675E3 /* KMConfigurationWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 98F3C8911A8D739500F675E3 /* KMConfigurationWindowController.m */; }; 98FE105E1B4DE8F400525F54 /* NSWindow+SuppMethods.m in Sources */ = {isa = PBXBuildFile; fileRef = 98FE105D1B4DE8F400525F54 /* NSWindow+SuppMethods.m */; }; - 98FE10631B4DEE5600525F54 /* KMInfoWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 98FE10611B4DEE5600525F54 /* KMInfoWindowController.m */; }; 9A3D6C5D221531B0008785A3 /* KMOSVersion.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A3D6C5C221531B0008785A3 /* KMOSVersion.m */; }; B90818AF7ED302187DE0E026 /* Pods_Keyman.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B644E63217FFE54B91C71C94 /* Pods_Keyman.framework */; }; D861B03F2C5747F70003675E /* KMSettingsRepository.m in Sources */ = {isa = PBXBuildFile; fileRef = D861B03E2C5747F70003675E /* KMSettingsRepository.m */; }; @@ -146,8 +138,6 @@ 29015ABB2C58D86F00CCBB94 /* KMDataRepository.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KMDataRepository.h; sourceTree = ""; }; 29015ABC2C58D86F00CCBB94 /* KMDataRepository.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KMDataRepository.m; sourceTree = ""; }; 2901BA8A292332B3009903EC /* ff-ng */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "ff-ng"; path = "ff-ng.lproj/KMAboutWindowController.strings"; sourceTree = ""; }; - 2901BA8B292332B3009903EC /* ff-ng */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "ff-ng"; path = "ff-ng.lproj/preferences.strings"; sourceTree = ""; }; - 2901BA8C292332B3009903EC /* ff-ng */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "ff-ng"; path = "ff-ng.lproj/KMInfoWindowController.strings"; sourceTree = ""; }; 2901BA8D292332B3009903EC /* ff-ng */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "ff-ng"; path = "ff-ng.lproj/KMKeyboardHelpWindowController.strings"; sourceTree = ""; }; 2901BA8E292332B4009903EC /* ff-ng */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "ff-ng"; path = "ff-ng.lproj/MainMenu.strings"; sourceTree = ""; }; 2901BA8F292332CF009903EC /* ff-ng */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "ff-ng"; path = "ff-ng.lproj/Localizable.strings"; sourceTree = ""; }; @@ -158,8 +148,6 @@ 293EA3E527140D3A00545EED /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; 293EA3E727140D8100545EED /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/KMAboutWindowController.xib; sourceTree = ""; }; 293EA3EA27140D8E00545EED /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/KMAboutWindowController.strings; sourceTree = ""; }; - 293EA3EC27140DEC00545EED /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/preferences.xib; sourceTree = ""; }; - 293EA3EF27140DFA00545EED /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/preferences.strings; sourceTree = ""; }; 293EA3F02714158600545EED /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/MainMenu.strings; sourceTree = ""; }; 293EA3F527181FDA00545EED /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; 296105212C8E91C7007BF6B7 /* KMInputMethodLifecycle.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KMInputMethodLifecycle.h; sourceTree = ""; }; @@ -167,8 +155,6 @@ 296FE2FA275DD21600F46898 /* KMPackageReader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KMPackageReader.h; sourceTree = ""; }; 296FE2FB275DD21600F46898 /* KMPackageReader.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KMPackageReader.m; sourceTree = ""; }; 29781101297FB262007C886D /* kn */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = kn; path = kn.lproj/KMAboutWindowController.strings; sourceTree = ""; }; - 29781102297FB262007C886D /* kn */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = kn; path = kn.lproj/preferences.strings; sourceTree = ""; }; - 29781103297FB263007C886D /* kn */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = kn; path = kn.lproj/KMInfoWindowController.strings; sourceTree = ""; }; 29781104297FB263007C886D /* kn */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = kn; path = kn.lproj/KMKeyboardHelpWindowController.strings; sourceTree = ""; }; 29781105297FB263007C886D /* kn */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = kn; path = kn.lproj/MainMenu.strings; sourceTree = ""; }; 29781106297FB27E007C886D /* kn */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = kn; path = kn.lproj/Localizable.strings; sourceTree = ""; }; @@ -178,26 +164,18 @@ 297A501528DF4D360074EB1B /* PrivacyWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PrivacyWindowController.h; sourceTree = ""; }; 297A501628DF4D360074EB1B /* PrivacyConsent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PrivacyConsent.m; sourceTree = ""; }; 298566BC29802962004ACA95 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/KMAboutWindowController.strings; sourceTree = ""; }; - 298566BD29802963004ACA95 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/preferences.strings; sourceTree = ""; }; - 298566BE29802963004ACA95 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/KMInfoWindowController.strings; sourceTree = ""; }; 298566BF29802963004ACA95 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/KMKeyboardHelpWindowController.strings; sourceTree = ""; }; 298566C029802963004ACA95 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/MainMenu.strings; sourceTree = ""; }; 298566C129802970004ACA95 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/Localizable.strings; sourceTree = ""; }; 298566C82980C9AD004ACA95 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/KMAboutWindowController.strings; sourceTree = ""; }; - 298566C92980C9AD004ACA95 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/preferences.strings; sourceTree = ""; }; - 298566CA2980C9AD004ACA95 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/KMInfoWindowController.strings; sourceTree = ""; }; 298566CB2980C9AE004ACA95 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/KMKeyboardHelpWindowController.strings; sourceTree = ""; }; 298566CC2980C9AE004ACA95 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/MainMenu.strings; sourceTree = ""; }; 298566CD2980C9B9004ACA95 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/Localizable.strings; sourceTree = ""; }; 298566D42980D47C004ACA95 /* uk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = uk; path = uk.lproj/KMAboutWindowController.strings; sourceTree = ""; }; - 298566D52980D47D004ACA95 /* uk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = uk; path = uk.lproj/preferences.strings; sourceTree = ""; }; - 298566D62980D47D004ACA95 /* uk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = uk; path = uk.lproj/KMInfoWindowController.strings; sourceTree = ""; }; 298566D72980D47D004ACA95 /* uk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = uk; path = uk.lproj/KMKeyboardHelpWindowController.strings; sourceTree = ""; }; 298566D82980D47E004ACA95 /* uk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = uk; path = uk.lproj/MainMenu.strings; sourceTree = ""; }; 298566D92980D489004ACA95 /* uk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = uk; path = uk.lproj/Localizable.strings; sourceTree = ""; }; 298566E02980E579004ACA95 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/KMAboutWindowController.strings; sourceTree = ""; }; - 298566E12980E579004ACA95 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/preferences.strings; sourceTree = ""; }; - 298566E22980E57A004ACA95 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/KMInfoWindowController.strings; sourceTree = ""; }; 298566E32980E57A004ACA95 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/KMKeyboardHelpWindowController.strings; sourceTree = ""; }; 298566E42980E57A004ACA95 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/MainMenu.strings; sourceTree = ""; }; 298566E52980E584004ACA95 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Localizable.strings; sourceTree = ""; }; @@ -209,71 +187,49 @@ 299B5E1E29126CA20070841D /* keyman-icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "keyman-icon@2x.png"; sourceTree = ""; }; 299B5E1F29126CA20070841D /* keyman-icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "keyman-icon.png"; sourceTree = ""; }; 29A4730527E9D6D500DE07C7 /* ha */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ha; path = ha.lproj/KMAboutWindowController.strings; sourceTree = ""; }; - 29A4730627E9D6D500DE07C7 /* ha */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ha; path = ha.lproj/preferences.strings; sourceTree = ""; }; - 29A4730727E9D6D600DE07C7 /* ha */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ha; path = ha.lproj/KMInfoWindowController.strings; sourceTree = ""; }; 29A4730827E9D6D700DE07C7 /* ha */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ha; path = ha.lproj/KMKeyboardHelpWindowController.strings; sourceTree = ""; }; 29A4730927E9D6D700DE07C7 /* ha */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ha; path = ha.lproj/MainMenu.strings; sourceTree = ""; }; 29A4730A27E9D84B00DE07C7 /* ha */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ha; path = ha.lproj/Localizable.strings; sourceTree = ""; }; 29B27FF229062FF50036917E /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/KMAboutWindowController.strings; sourceTree = ""; }; - 29B27FF329062FF50036917E /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/preferences.strings; sourceTree = ""; }; - 29B27FF429062FF50036917E /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/KMInfoWindowController.strings; sourceTree = ""; }; 29B27FF529062FF60036917E /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/KMKeyboardHelpWindowController.strings; sourceTree = ""; }; 29B27FF629062FF60036917E /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/MainMenu.strings; sourceTree = ""; }; 29B27FF7290630170036917E /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/Localizable.strings; sourceTree = ""; }; 29B348AA2726F1C1009B1C82 /* km */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = km; path = km.lproj/KMAboutWindowController.strings; sourceTree = ""; }; - 29B348AB2726F1C2009B1C82 /* km */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = km; path = km.lproj/preferences.strings; sourceTree = ""; }; 29B348AC2726F1C2009B1C82 /* km */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = km; path = km.lproj/MainMenu.strings; sourceTree = ""; }; 29B348AE2726F1C7009B1C82 /* km */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = km; path = km.lproj/Localizable.strings; sourceTree = ""; }; - 29B42A582728339900EDD5D3 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/KMInfoWindowController.xib; sourceTree = ""; }; - 29B42A5B2728339E00EDD5D3 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/KMInfoWindowController.strings; sourceTree = ""; }; - 29B42A5F272833A600EDD5D3 /* km */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = km; path = km.lproj/KMInfoWindowController.strings; sourceTree = ""; }; 29B42A612728343B00EDD5D3 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/KMKeyboardHelpWindowController.xib; sourceTree = ""; }; 29B42A642728343F00EDD5D3 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/KMKeyboardHelpWindowController.strings; sourceTree = ""; }; 29B42A682728344600EDD5D3 /* km */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = km; path = km.lproj/KMKeyboardHelpWindowController.strings; sourceTree = ""; }; 29B4A0D32BF7675A00682049 /* KMLogs.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KMLogs.m; sourceTree = ""; }; 29B4A0D42BF7675A00682049 /* KMLogs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KMLogs.h; sourceTree = ""; }; 29B5BC0328169A6300B86A17 /* ff */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ff; path = ff.lproj/KMAboutWindowController.strings; sourceTree = ""; }; - 29B5BC0428169A6400B86A17 /* ff */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ff; path = ff.lproj/preferences.strings; sourceTree = ""; }; - 29B5BC0528169A6400B86A17 /* ff */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ff; path = ff.lproj/KMInfoWindowController.strings; sourceTree = ""; }; 29B5BC0628169A6500B86A17 /* ff */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ff; path = ff.lproj/KMKeyboardHelpWindowController.strings; sourceTree = ""; }; 29B5BC0728169A6600B86A17 /* ff */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ff; path = ff.lproj/MainMenu.strings; sourceTree = ""; }; 29B5BC0828169A8600B86A17 /* ff */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ff; path = ff.lproj/Localizable.strings; sourceTree = ""; }; 29B6BB5B292239B4008F04BD /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/KMAboutWindowController.strings"; sourceTree = ""; }; - 29B6BB5C292239B4008F04BD /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/preferences.strings"; sourceTree = ""; }; - 29B6BB5D292239B4008F04BD /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/KMInfoWindowController.strings"; sourceTree = ""; }; 29B6BB5E292239B4008F04BD /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/KMKeyboardHelpWindowController.strings"; sourceTree = ""; }; 29B6BB5F292239B4008F04BD /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/MainMenu.strings"; sourceTree = ""; }; 29B6BB60292239DC008F04BD /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.strings"; sourceTree = ""; }; 29B6FB722BC39DD60074BF7F /* TextApiComplianceTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TextApiComplianceTests.m; sourceTree = ""; }; 29B70A23283CB6680086B580 /* es-419 */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-419"; path = "es-419.lproj/KMAboutWindowController.strings"; sourceTree = ""; }; - 29B70A24283CB6690086B580 /* es-419 */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-419"; path = "es-419.lproj/preferences.strings"; sourceTree = ""; }; - 29B70A25283CB66A0086B580 /* es-419 */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-419"; path = "es-419.lproj/KMInfoWindowController.strings"; sourceTree = ""; }; 29B70A26283CB66B0086B580 /* es-419 */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-419"; path = "es-419.lproj/KMKeyboardHelpWindowController.strings"; sourceTree = ""; }; 29B70A27283CB66C0086B580 /* es-419 */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-419"; path = "es-419.lproj/MainMenu.strings"; sourceTree = ""; }; 29B70A28283CB6900086B580 /* es-419 */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-419"; path = "es-419.lproj/Localizable.strings"; sourceTree = ""; }; 29BE9D852CA3C21900B67DE7 /* KMModifierMapping.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KMModifierMapping.h; sourceTree = ""; }; 29BE9D862CA3C21900B67DE7 /* KMModifierMapping.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KMModifierMapping.m; sourceTree = ""; }; 29BFA761282936D4009FCCC3 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/KMAboutWindowController.strings; sourceTree = ""; }; - 29BFA762282936D5009FCCC3 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/preferences.strings; sourceTree = ""; }; - 29BFA763282936D5009FCCC3 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/KMInfoWindowController.strings; sourceTree = ""; }; 29BFA764282936D6009FCCC3 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/KMKeyboardHelpWindowController.strings; sourceTree = ""; }; 29BFA765282936D7009FCCC3 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/MainMenu.strings; sourceTree = ""; }; 29BFA76628293760009FCCC3 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/Localizable.strings; sourceTree = ""; }; 29BFA76D282948BD009FCCC3 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/KMAboutWindowController.strings; sourceTree = ""; }; - 29BFA76E282948BE009FCCC3 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/preferences.strings; sourceTree = ""; }; - 29BFA76F282948BE009FCCC3 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/KMInfoWindowController.strings; sourceTree = ""; }; 29BFA770282948BF009FCCC3 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/KMKeyboardHelpWindowController.strings; sourceTree = ""; }; 29BFA771282948C0009FCCC3 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/MainMenu.strings; sourceTree = ""; }; 29BFA7722829490A009FCCC3 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/Localizable.strings; sourceTree = ""; }; 29C1E1742800227500759EDE /* pt-PT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-PT"; path = "pt-PT.lproj/KMAboutWindowController.strings"; sourceTree = ""; }; - 29C1E1752800227600759EDE /* pt-PT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-PT"; path = "pt-PT.lproj/preferences.strings"; sourceTree = ""; }; - 29C1E1762800227700759EDE /* pt-PT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-PT"; path = "pt-PT.lproj/KMInfoWindowController.strings"; sourceTree = ""; }; 29C1E1772800227700759EDE /* pt-PT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-PT"; path = "pt-PT.lproj/KMKeyboardHelpWindowController.strings"; sourceTree = ""; }; 29C1E1782800227800759EDE /* pt-PT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-PT"; path = "pt-PT.lproj/MainMenu.strings"; sourceTree = ""; }; 29C1E179280025A900759EDE /* pt-PT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-PT"; path = "pt-PT.lproj/Localizable.strings"; sourceTree = ""; }; 29D470942C648D5100224B4F /* el */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = el; path = el.lproj/KMAboutWindowController.strings; sourceTree = ""; }; - 29D470952C648D5100224B4F /* el */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = el; path = el.lproj/preferences.strings; sourceTree = ""; }; - 29D470962C648D5200224B4F /* el */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = el; path = el.lproj/KMInfoWindowController.strings; sourceTree = ""; }; 29D470972C648D5200224B4F /* el */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = el; path = el.lproj/KMKeyboardHelpWindowController.strings; sourceTree = ""; }; 29D470982C648D5200224B4F /* el */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = el; path = el.lproj/MainMenu.strings; sourceTree = ""; }; 29D470992C648D7100224B4F /* el */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = el; path = el.lproj/Localizable.strings; sourceTree = ""; }; @@ -281,8 +237,6 @@ 29DBBF662D35053E00D8E33C /* KMSentryHelper.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KMSentryHelper.m; sourceTree = ""; }; 29DD5F432CFEF88000683388 /* SILAndikaV1RGB.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = SILAndikaV1RGB.png; sourceTree = ""; }; 29DD8400276C49E20066A16E /* am */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = am; path = am.lproj/KMAboutWindowController.strings; sourceTree = ""; }; - 29DD8401276C49E20066A16E /* am */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = am; path = am.lproj/preferences.strings; sourceTree = ""; }; - 29DD8402276C49E30066A16E /* am */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = am; path = am.lproj/KMInfoWindowController.strings; sourceTree = ""; }; 29DD8403276C49E40066A16E /* am */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = am; path = am.lproj/KMKeyboardHelpWindowController.strings; sourceTree = ""; }; 29DD8404276C49E50066A16E /* am */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = am; path = am.lproj/MainMenu.strings; sourceTree = ""; }; 29DD8408276C4D2F0066A16E /* am */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = am; path = am.lproj/Localizable.strings; sourceTree = ""; }; @@ -307,10 +261,6 @@ 878287E1B18ED4EE910C4BC7 /* Pods-Keyman.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Keyman.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Keyman/Pods-Keyman.debug.xcconfig"; sourceTree = ""; }; 9800EC591C02940300BF0FB5 /* keyman-for-mac-os-license.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = "keyman-for-mac-os-license.html"; sourceTree = ""; }; 9803C9D71B0EFB3B0082A6F9 /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; }; - 9832472C1A9EABC70010B90C /* KMConfigColumn1CellView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = KMConfigColumn1CellView.h; path = Keyman4MacIM/KMConfiguration/KMConfigColumn1CellView.h; sourceTree = ""; }; - 9832472D1A9EABC70010B90C /* KMConfigColumn1CellView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = KMConfigColumn1CellView.m; path = Keyman4MacIM/KMConfiguration/KMConfigColumn1CellView.m; sourceTree = ""; }; - 983247B01A9EB9690010B90C /* KMConfigColumn3CellView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = KMConfigColumn3CellView.h; path = Keyman4MacIM/KMConfiguration/KMConfigColumn3CellView.h; sourceTree = ""; }; - 983247B11A9EB9690010B90C /* KMConfigColumn3CellView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = KMConfigColumn3CellView.m; path = Keyman4MacIM/KMConfiguration/KMConfigColumn3CellView.m; sourceTree = ""; }; 9836B3651AE5F11D00780482 /* crypt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = crypt.h; sourceTree = ""; }; 9836B3661AE5F11D00780482 /* ioapi.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ioapi.c; sourceTree = ""; }; 9836B3671AE5F11D00780482 /* ioapi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ioapi.h; sourceTree = ""; }; @@ -352,32 +302,21 @@ 98D6DA7C1A799FF400B09822 /* KMInputController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KMInputController.h; sourceTree = ""; }; 98D6DA7D1A799FF400B09822 /* KMInputController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KMInputController.m; sourceTree = ""; }; 98E2CEA01A92C39C00AE2455 /* InfoPlist.strings */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; path = InfoPlist.strings; sourceTree = ""; }; - 98E6729C1B532F5D00DBDE2F /* KMDownloadKBWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = KMDownloadKBWindowController.h; path = Keyman4MacIM/KMDownloadKeyboard/KMDownloadKBWindowController.h; sourceTree = ""; }; - 98E6729D1B532F5D00DBDE2F /* KMDownloadKBWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = KMDownloadKBWindowController.m; path = Keyman4MacIM/KMDownloadKeyboard/KMDownloadKBWindowController.m; sourceTree = ""; }; - 98E6729E1B532F5E00DBDE2F /* KMDownloadKBWindowController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = KMDownloadKBWindowController.xib; path = Keyman4MacIM/KMDownloadKeyboard/KMDownloadKBWindowController.xib; sourceTree = ""; }; 98E672A11B532F9900DBDE2F /* KMKeyboardHelpWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = KMKeyboardHelpWindowController.h; path = Keyman4MacIM/KMKeyboardHelpWindow/KMKeyboardHelpWindowController.h; sourceTree = ""; }; 98E672A21B532F9900DBDE2F /* KMKeyboardHelpWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = KMKeyboardHelpWindowController.m; path = Keyman4MacIM/KMKeyboardHelpWindow/KMKeyboardHelpWindowController.m; sourceTree = ""; }; - 98F3C8901A8D739500F675E3 /* KMConfigurationWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = KMConfigurationWindowController.h; path = Keyman4MacIM/KMConfiguration/KMConfigurationWindowController.h; sourceTree = ""; }; - 98F3C8911A8D739500F675E3 /* KMConfigurationWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = KMConfigurationWindowController.m; path = Keyman4MacIM/KMConfiguration/KMConfigurationWindowController.m; sourceTree = ""; }; 98FE105C1B4DE8F400525F54 /* NSWindow+SuppMethods.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSWindow+SuppMethods.h"; path = "Categories/NSWindow+SuppMethods.h"; sourceTree = ""; }; 98FE105D1B4DE8F400525F54 /* NSWindow+SuppMethods.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "NSWindow+SuppMethods.m"; path = "Categories/NSWindow+SuppMethods.m"; sourceTree = ""; }; - 98FE10601B4DEE5600525F54 /* KMInfoWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = KMInfoWindowController.h; path = Keyman4MacIM/KMInfoWindow/KMInfoWindowController.h; sourceTree = ""; }; - 98FE10611B4DEE5600525F54 /* KMInfoWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = KMInfoWindowController.m; path = Keyman4MacIM/KMInfoWindow/KMInfoWindowController.m; sourceTree = ""; }; 9A3D6C5B221531B0008785A3 /* KMOSVersion.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KMOSVersion.h; sourceTree = ""; }; 9A3D6C5C221531B0008785A3 /* KMOSVersion.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KMOSVersion.m; sourceTree = ""; }; A71FD8BA8404531DFBD861B6 /* Pods_KeymanTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_KeymanTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; B644E63217FFE54B91C71C94 /* Pods_Keyman.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Keyman.framework; sourceTree = BUILT_PRODUCTS_DIR; }; CEFFECD82A417FEA00D58C36 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/KMAboutWindowController.strings; sourceTree = ""; }; - CEFFECD92A417FEB00D58C36 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/preferences.strings; sourceTree = ""; }; - CEFFECDA2A417FEB00D58C36 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/KMInfoWindowController.strings; sourceTree = ""; }; CEFFECDB2A417FEC00D58C36 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/KMKeyboardHelpWindowController.strings; sourceTree = ""; }; CEFFECDC2A417FEC00D58C36 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/MainMenu.strings; sourceTree = ""; }; CEFFECDD2A4180FD00D58C36 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Localizable.strings; sourceTree = ""; }; D861B03D2C5747F70003675E /* KMSettingsRepository.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KMSettingsRepository.h; sourceTree = ""; }; D861B03E2C5747F70003675E /* KMSettingsRepository.m */ = {isa = PBXFileReference; indentWidth = 2; lastKnownFileType = sourcecode.c.objc; path = KMSettingsRepository.m; sourceTree = ""; tabWidth = 2; }; D88EC4072D7878C10022CB80 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/KMAboutWindowController.strings; sourceTree = ""; }; - D88EC4082D7878C20022CB80 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/preferences.strings; sourceTree = ""; }; - D88EC4092D7878C20022CB80 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/KMInfoWindowController.strings; sourceTree = ""; }; D88EC40A2D7878C20022CB80 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/KMKeyboardHelpWindowController.strings; sourceTree = ""; }; D88EC40B2D7878C30022CB80 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/MainMenu.strings; sourceTree = ""; }; D88EC40C2D7878ED0022CB80 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/Localizable.strings; sourceTree = ""; }; @@ -402,7 +341,6 @@ E2C92D4720B46CEA00742A7D /* KeymanEngine4Mac.framework.dSYM */ = {isa = PBXFileReference; lastKnownFileType = wrapper.dsym; name = KeymanEngine4Mac.framework.dSYM; path = Keyman4MacIM/Frameworks/KeymanEngine4Mac.framework.dSYM; sourceTree = ""; }; E2D5529B20DD8D6100D77CFB /* LegacyTestClient.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LegacyTestClient.h; sourceTree = ""; }; E2D5529C20DD8E0200D77CFB /* LegacyTestClient.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = LegacyTestClient.m; sourceTree = ""; }; - E2EE23962142E2AC00EAA98C /* logo.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = logo.png; path = Keyman4MacIM/KMConfiguration/logo.png; sourceTree = ""; }; FA67C64E3D2743D2BCF46ED1 /* Pods-KeymanTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-KeymanTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-KeymanTests/Pods-KeymanTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ @@ -480,22 +418,6 @@ path = ConfigurationHost; sourceTree = ""; }; - 983246EC1A9E8E860010B90C /* KMConfiguration */ = { - isa = PBXGroup; - children = ( - E2EE23962142E2AC00EAA98C /* logo.png */, - 9832472C1A9EABC70010B90C /* KMConfigColumn1CellView.h */, - 9832472D1A9EABC70010B90C /* KMConfigColumn1CellView.m */, - 983247B01A9EB9690010B90C /* KMConfigColumn3CellView.h */, - 983247B11A9EB9690010B90C /* KMConfigColumn3CellView.m */, - 98F3C8901A8D739500F675E3 /* KMConfigurationWindowController.h */, - 98F3C8911A8D739500F675E3 /* KMConfigurationWindowController.m */, - 293EA3ED27140DEC00545EED /* preferences.xib */, - ); - name = KMConfiguration; - path = ..; - sourceTree = ""; - }; 9836B3631AE5F11D00780482 /* ZipArchive */ = { isa = PBXGroup; children = ( @@ -545,17 +467,6 @@ path = Images; sourceTree = ""; }; - 9897BD8E1B099A2400C3F58A /* KMDownloadKeyboard */ = { - isa = PBXGroup; - children = ( - 98E6729C1B532F5D00DBDE2F /* KMDownloadKBWindowController.h */, - 98E6729D1B532F5D00DBDE2F /* KMDownloadKBWindowController.m */, - 98E6729E1B532F5E00DBDE2F /* KMDownloadKBWindowController.xib */, - ); - name = KMDownloadKeyboard; - path = ..; - sourceTree = ""; - }; 989C9BFF1A7876DE00A20425 = { isa = PBXGroup; children = ( @@ -598,9 +509,6 @@ 989C9C121A7876DE00A20425 /* Images.xcassets */, 98BDD3681BC3511200FAC7C4 /* Keyman4MacIM.entitlements */, 98BF92401BF01CBE0002126A /* KMAboutWindow */, - 983246EC1A9E8E860010B90C /* KMConfiguration */, - 9897BD8E1B099A2400C3F58A /* KMDownloadKeyboard */, - 98FE105F1B4DEE1100525F54 /* KMInfoWindow */, 98D6DA7C1A799FF400B09822 /* KMInputController.h */, 98D6DA7D1A799FF400B09822 /* KMInputController.m */, 98A778C21A8C53BF00CF809D /* KMInputMethodAppDelegate.h */, @@ -698,17 +606,6 @@ name = Categories; sourceTree = ""; }; - 98FE105F1B4DEE1100525F54 /* KMInfoWindow */ = { - isa = PBXGroup; - children = ( - 98FE10601B4DEE5600525F54 /* KMInfoWindowController.h */, - 98FE10611B4DEE5600525F54 /* KMInfoWindowController.m */, - 29B42A592728339900EDD5D3 /* KMInfoWindowController.xib */, - ); - name = KMInfoWindow; - path = ..; - sourceTree = ""; - }; E27BA9CC2020321F00D273E7 /* Frameworks */ = { isa = PBXGroup; children = ( @@ -867,20 +764,17 @@ 98E2CEA11A92C39C00AE2455 /* InfoPlist.strings in Resources */, E21E645820C04EA8000D6274 /* logo.png in Resources */, 9874C3211B536847000BB543 /* info.png in Resources */, - 98E672A01B532F5E00DBDE2F /* KMDownloadKBWindowController.xib in Resources */, 37AE5C9D239A7B770086CC7C /* qrcode.min.js in Resources */, 37C2B0CB25FF2C350092E16A /* Help in Resources */, 299B5E2029126CA20070841D /* keyman-icon@2x.png in Resources */, 297A501828DF4D360074EB1B /* PrivacyWindowController.xib in Resources */, 984B8F451AF1C3D900E096A8 /* OSKWindowController.xib in Resources */, - 29B42A572728339900EDD5D3 /* KMInfoWindowController.xib in Resources */, 299B5E2129126CA20070841D /* keyman-icon.png in Resources */, E213601E2142D7C000A043B7 /* keyman-88.png in Resources */, 293EA3F427181FDA00545EED /* Localizable.strings in Resources */, 98BF92471BF01D890002126A /* image.jpg in Resources */, 293EA3E627140D8100545EED /* KMAboutWindowController.xib in Resources */, 37A245C12565DFA6000BBF92 /* Assets.xcassets in Resources */, - 293EA3EB27140DEC00545EED /* preferences.xib in Resources */, 29DD5F442CFEF88000683388 /* SILAndikaV1RGB.png in Resources */, 9800EC5A1C02940300BF0FB5 /* keyman-for-mac-os-license.html in Resources */, 989C9C161A7876DE00A20425 /* MainMenu.xib in Resources */, @@ -1016,7 +910,6 @@ buildActionMask = 2147483647; files = ( 9836B3731AE5F11D00780482 /* zip.c in Sources */, - 98F3C8931A8D739500F675E3 /* KMConfigurationWindowController.m in Sources */, 9A3D6C5D221531B0008785A3 /* KMOSVersion.m in Sources */, 989C9C111A7876DE00A20425 /* main.m in Sources */, 290BC680274B9DB1005CD1C3 /* KMPackageInfo.m in Sources */, @@ -1031,21 +924,17 @@ 29015ABD2C58D86F00CCBB94 /* KMDataRepository.m in Sources */, 9836B3701AE5F11D00780482 /* ioapi.c in Sources */, E21799051FC5B7BC00F2D66A /* KMInputMethodEventHandler.m in Sources */, - 98E6729F1B532F5E00DBDE2F /* KMDownloadKBWindowController.m in Sources */, 98E672A41B532F9900DBDE2F /* KMKeyboardHelpWindowController.m in Sources */, 98A778C41A8C53BF00CF809D /* KMInputMethodAppDelegate.m in Sources */, 98D6DA7E1A799FF400B09822 /* KMInputController.m in Sources */, 98BF92441BF01CBE0002126A /* KMAboutWindowController.m in Sources */, 299ABD7129ECE75B00AA5948 /* KeySender.m in Sources */, - 98FE10631B4DEE5600525F54 /* KMInfoWindowController.m in Sources */, 298D09F72A1F4533006B9DFE /* TextApiCompliance.m in Sources */, 9836B3721AE5F11D00780482 /* unzip.c in Sources */, 296FE2FC275DD21600F46898 /* KMPackageReader.m in Sources */, - 9832472E1A9EABC70010B90C /* KMConfigColumn1CellView.m in Sources */, 297A501928DF4D360074EB1B /* PrivacyConsent.m in Sources */, 98FE105E1B4DE8F400525F54 /* NSWindow+SuppMethods.m in Sources */, 9836B3741AE5F11D00780482 /* ZipArchive.mm in Sources */, - 983247B21A9EB9690010B90C /* KMConfigColumn3CellView.m in Sources */, 290BC75E274F3FD7005CD1C3 /* KMKeyboardInfo.m in Sources */, 297A501728DF4D360074EB1B /* PrivacyWindowController.m in Sources */, 98BF92521BF03D4D0002126A /* KMAboutBGView.m in Sources */, @@ -1116,35 +1005,6 @@ name = KMAboutWindowController.xib; sourceTree = ""; }; - 293EA3ED27140DEC00545EED /* preferences.xib */ = { - isa = PBXVariantGroup; - children = ( - 293EA3EC27140DEC00545EED /* Base */, - 293EA3EF27140DFA00545EED /* en */, - 29B348AB2726F1C2009B1C82 /* km */, - 29DD8401276C49E20066A16E /* am */, - 29A4730627E9D6D500DE07C7 /* ha */, - 29C1E1752800227600759EDE /* pt-PT */, - 29B5BC0428169A6400B86A17 /* ff */, - 29BFA762282936D5009FCCC3 /* it */, - 29BFA76E282948BE009FCCC3 /* pl */, - 29B70A24283CB6690086B580 /* es-419 */, - 29B27FF329062FF50036917E /* nl */, - 29B6BB5C292239B4008F04BD /* zh-Hans */, - 2901BA8B292332B3009903EC /* ff-ng */, - 298566BD29802963004ACA95 /* cs */, - 29781102297FB262007C886D /* kn */, - 298566C92980C9AD004ACA95 /* sv */, - 298566D52980D47D004ACA95 /* uk */, - 298566E12980E579004ACA95 /* ru */, - CEFFECD92A417FEB00D58C36 /* es */, - 29D470952C648D5100224B4F /* el */, - D88EC4082D7878C20022CB80 /* vi */, - ); - name = preferences.xib; - path = Keyman4MacIM/KMConfiguration; - sourceTree = ""; - }; 293EA3F627181FDA00545EED /* Localizable.strings */ = { isa = PBXVariantGroup; children = ( @@ -1172,35 +1032,6 @@ name = Localizable.strings; sourceTree = ""; }; - 29B42A592728339900EDD5D3 /* KMInfoWindowController.xib */ = { - isa = PBXVariantGroup; - children = ( - 29B42A582728339900EDD5D3 /* Base */, - 29B42A5B2728339E00EDD5D3 /* en */, - 29B42A5F272833A600EDD5D3 /* km */, - 29DD8402276C49E30066A16E /* am */, - 29A4730727E9D6D600DE07C7 /* ha */, - 29C1E1762800227700759EDE /* pt-PT */, - 29B5BC0528169A6400B86A17 /* ff */, - 29BFA763282936D5009FCCC3 /* it */, - 29BFA76F282948BE009FCCC3 /* pl */, - 29B70A25283CB66A0086B580 /* es-419 */, - 29B27FF429062FF50036917E /* nl */, - 29B6BB5D292239B4008F04BD /* zh-Hans */, - 2901BA8C292332B3009903EC /* ff-ng */, - 298566BE29802963004ACA95 /* cs */, - 29781103297FB263007C886D /* kn */, - 298566CA2980C9AD004ACA95 /* sv */, - 298566D62980D47D004ACA95 /* uk */, - 298566E22980E57A004ACA95 /* ru */, - CEFFECDA2A417FEB00D58C36 /* es */, - 29D470962C648D5200224B4F /* el */, - D88EC4092D7878C20022CB80 /* vi */, - ); - name = KMInfoWindowController.xib; - path = Keyman4MacIM/KMInfoWindow; - sourceTree = ""; - }; 29B42A622728343B00EDD5D3 /* KMKeyboardHelpWindowController.xib */ = { isa = PBXVariantGroup; children = ( diff --git a/mac/Keyman4MacIM/Keyman4MacIM/Base.lproj/MainMenu.xib b/mac/Keyman4MacIM/Keyman4MacIM/Base.lproj/MainMenu.xib index 0696c81eba..657c560f02 100644 --- a/mac/Keyman4MacIM/Keyman4MacIM/Base.lproj/MainMenu.xib +++ b/mac/Keyman4MacIM/Keyman4MacIM/Base.lproj/MainMenu.xib @@ -1,8 +1,8 @@ - + - + @@ -19,8 +19,7 @@ - - + diff --git a/mac/Keyman4MacIM/Keyman4MacIM/Info.plist b/mac/Keyman4MacIM/Keyman4MacIM/Info.plist index eaab961dcc..1905f25541 100644 --- a/mac/Keyman4MacIM/Keyman4MacIM/Info.plist +++ b/mac/Keyman4MacIM/Keyman4MacIM/Info.plist @@ -54,8 +54,6 @@ Keyman_Input_Connection InputMethodServerControllerClass KMInputController - InputMethodServerPreferencesWindowControllerClass - KMConfigurationWindowController Keyman SentryEnvironment diff --git a/mac/Keyman4MacIM/Keyman4MacIM/KMAboutWindow/Base.lproj/KMAboutWindowController.xib b/mac/Keyman4MacIM/Keyman4MacIM/KMAboutWindow/Base.lproj/KMAboutWindowController.xib index fa15b43024..fa3d9b0fbe 100644 --- a/mac/Keyman4MacIM/Keyman4MacIM/KMAboutWindow/Base.lproj/KMAboutWindowController.xib +++ b/mac/Keyman4MacIM/Keyman4MacIM/KMAboutWindow/Base.lproj/KMAboutWindowController.xib @@ -1,8 +1,8 @@ - + - + @@ -20,7 +20,7 @@ - + @@ -57,10 +57,10 @@ - + - + - + @@ -81,7 +81,7 @@ - + @@ -102,24 +102,10 @@ - + - - - - - - - diff --git a/mac/Keyman4MacIM/Keyman4MacIM/KMAboutWindow/KMAboutWindowController.m b/mac/Keyman4MacIM/Keyman4MacIM/KMAboutWindow/KMAboutWindowController.m index 08b4d1b1e6..8333b29931 100644 --- a/mac/Keyman4MacIM/Keyman4MacIM/KMAboutWindow/KMAboutWindowController.m +++ b/mac/Keyman4MacIM/Keyman4MacIM/KMAboutWindow/KMAboutWindowController.m @@ -17,7 +17,6 @@ @property (nonatomic, weak) IBOutlet NSButton *licenseButton; // not needed at the moment but might be: @property (nonatomic, weak) IBOutlet NSButton *closeButton; -@property (nonatomic, weak) IBOutlet NSButton *configureButton; @end @implementation KMAboutWindowController @@ -47,24 +46,6 @@ [self setLicenseButtonTitle:self.licenseButton.title underlined:NO]; } -- (IBAction)configAction:(id)sender { - // Using `showConfigurationWindow` instead of `showPreferences:` because `showPreferences:` is missing in - // High Sierra (10.13.1 - 10.13.3). See: https://bugreport.apple.com/web/?problemID=35422518 - // rrb: where Apple's API is broken (10.13.1-10.13.3) call our workaround, otherwise, call showPreferences - u_int16_t systemVersion = [KMOSVersion SystemVersion]; - if ([KMOSVersion Version_10_13_1] <= systemVersion && systemVersion <= [KMOSVersion Version_10_13_3]) // between 10.13.1 and 10.13.3 inclusive - { - os_log([KMLogs uiLog], "About Box: calling workaround instead of showPreferences (sys ver %x)", systemVersion); - [self.AppDelegate showConfigurationWindow]; // call our workaround - } - else - { - os_log([KMLogs uiLog], "About Box: calling Apple's showPreferences (sys ver %x)", systemVersion); - [self.AppDelegate.inputController showPreferences:sender]; // call Apple API - } - [self close]; -} - - (IBAction)closeAction:(id)sender { [self close]; } diff --git a/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/Base.lproj/preferences.xib b/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/Base.lproj/preferences.xib deleted file mode 100644 index a257c34419..0000000000 --- a/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/Base.lproj/preferences.xib +++ /dev/null @@ -1,321 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -YnBsaXN0MDDUAQIDBAUGBwpYJHZlcnNpb25ZJGFyY2hpdmVyVCR0b3BYJG9iamVjdHMSAAGGoF8QD05T -S2V5ZWRBcmNoaXZlctEICVRyb290gAGuCwwZGh8UJCkqMTQ3PUBVJG51bGzWDQ4PEBESExQVFhcYVk5T -U2l6ZV5OU1Jlc2l6aW5nTW9kZVYkY2xhc3NcTlNJbWFnZUZsYWdzVk5TUmVwc1dOU0NvbG9ygAIQAIAN -EiDDAACAA4ALVnsxLCAxfdIbDxweWk5TLm9iamVjdHOhHYAEgArSGw8gI6IhIoAFgAaACdMPJSYnKBRf -EBROU1RJRkZSZXByZXNlbnRhdGlvbl8QGU5TSW50ZXJuYWxMYXlvdXREaXJlY3Rpb26ACIAHTxEIjE1N -ACoAAAAKAAAAEAEAAAMAAAABAAEAAAEBAAMAAAABAAEAAAECAAMAAAACAAgACAEDAAMAAAABAAEAAAEG -AAMAAAABAAEAAAEKAAMAAAABAAEAAAERAAQAAAABAAAACAESAAMAAAABAAEAAAEVAAMAAAABAAIAAAEW -AAMAAAABAAEAAAEXAAQAAAABAAAAAgEcAAMAAAABAAEAAAEoAAMAAAABAAIAAAFSAAMAAAABAAEAAAFT -AAMAAAACAAEAAYdzAAcAAAe8AAAA0AAAAAAAAAe8YXBwbAIgAABtbnRyR1JBWVhZWiAH0AACAA4ADAAA -AABhY3NwQVBQTAAAAABub25lAAAAAAAAAAAAAAAAAAAAAAAA9tYAAQAAAADTLWFwcGwAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVkZXNjAAAAwAAAAG9kc2NtAAABMAAA -Bi5jcHJ0AAAHYAAAADh3dHB0AAAHmAAAABRrVFJDAAAHrAAAAA5kZXNjAAAAAAAAABVHZW5lcmljIEdy -YXkgUHJvZmlsZQAAAAAAAAAAAAAAFUdlbmVyaWMgR3JheSBQcm9maWxlAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbWx1YwAAAAAAAAAeAAAADHNrU0sAAAAqAAABeGRh -REsAAAA0AAABomNhRVMAAAAsAAAB1nB0QlIAAAAqAAACAnVrVUEAAAAsAAACLGZyRlUAAAAqAAACWGh1 -SFUAAAAuAAACgnpoVFcAAAAQAAACsG5iTk8AAAAsAAACwGNzQ1oAAAAkAAAC7GhlSUwAAAAgAAADEGl0 -SVQAAAAuAAADMHJvUk8AAAAkAAADXmRlREUAAAA6AAADgmtvS1IAAAAYAAADvHN2U0UAAAAuAAAD1Hpo -Q04AAAAQAAAEAmphSlAAAAAWAAAEEmVsR1IAAAAkAAAEKHB0UE8AAAA4AAAETG5sTkwAAAAqAAAEhGVz -RVMAAAAoAAAErnRoVEgAAAAkAAAE1nRyVFIAAAAiAAAE+mZpRkkAAAAsAAAFHGhySFIAAAA6AAAFSHBs -UEwAAAA2AAAFgnJ1UlUAAAAmAAAFuGFyRUcAAAAoAAAF3mVuVVMAAAAoAAAGBgBWAWEAZQBvAGIAZQBj -AG4A/QAgAHMAaQB2AP0AIABwAHIAbwBmAGkAbABHAGUAbgBlAHIAZQBsACAAZwByAOUAdABvAG4AZQBi -AGUAcwBrAHIAaQB2AGUAbABzAGUAUABlAHIAZgBpAGwAIABkAGUAIABnAHIAaQBzACAAZwBlAG4A6ABy -AGkAYwBQAGUAcgBmAGkAbAAgAEMAaQBuAHoAYQAgAEcAZQBuAOkAcgBpAGMAbwQXBDAEMwQwBDsETAQ9 -BDgEOQAgBD8EQAQ+BEQEMAQ5BDsAIABHAHIAYQB5AFAAcgBvAGYAaQBsACAAZwDpAG4A6QByAGkAcQB1 -AGUAIABnAHIAaQBzAMEAbAB0AGEAbADhAG4AbwBzACAAcwB6APwAcgBrAGUAIABwAHIAbwBmAGkAbJAa -dShwcJaOgnJfaWPPj/AARwBlAG4AZQByAGkAcwBrACAAZwByAOUAdABvAG4AZQBwAHIAbwBmAGkAbABP -AGIAZQBjAG4A/QAgAWEAZQBkAP0AIABwAHIAbwBmAGkAbAXkBegF1QXkBdkF3AAgAEcAcgBhAHkAIAXb -BdwF3AXZAFAAcgBvAGYAaQBsAG8AIABnAHIAaQBnAGkAbwAgAGcAZQBuAGUAcgBpAGMAbwBQAHIAbwBm -AGkAbAAgAGcAcgBpACAAZwBlAG4AZQByAGkAYwBBAGwAbABnAGUAbQBlAGkAbgBlAHMAIABHAHIAYQB1 -AHMAdAB1AGYAZQBuAC0AUAByAG8AZgBpAGzHfLwYACAARwByAGEAeQAg1QS4XNMMx3wARwBlAG4AZQBy -AGkAcwBrACAAZwByAOUAcwBrAGEAbABlAHAAcgBvAGYAaQBsZm6QGnBwXqZjz4/wZYdO9k4AgiwwsDDs -MKQw1zDtMNUwoTCkMOsDkwO1A70DuQO6A8wAIAPAA8EDvwPGA68DuwAgA7MDugPBA7kAUABlAHIAZgBp -AGwAIABnAGUAbgDpAHIAaQBjAG8AIABkAGUAIABjAGkAbgB6AGUAbgB0AG8AcwBBAGwAZwBlAG0AZQBl -AG4AIABnAHIAaQBqAHMAcAByAG8AZgBpAGUAbABQAGUAcgBmAGkAbAAgAGcAcgBpAHMAIABnAGUAbgDp -AHIAaQBjAG8OQg4bDiMORA4fDiUOTA4qDjUOQA4XDjIOFw4xDkgOJw5EDhsARwBlAG4AZQBsACAARwBy -AGkAIABQAHIAbwBmAGkAbABpAFkAbABlAGkAbgBlAG4AIABoAGEAcgBtAGEAYQBwAHIAbwBmAGkAaQBs -AGkARwBlAG4AZQByAGkBDQBrAGkAIABwAHIAbwBmAGkAbAAgAHMAaQB2AGkAaAAgAHQAbwBuAG8AdgBh -AFUAbgBpAHcAZQByAHMAYQBsAG4AeQAgAHAAcgBvAGYAaQBsACAAcwB6AGEAcgBvAVsAYwBpBB4EMQRJ -BDgEOQAgBEEENQRABEsEOQAgBD8EQAQ+BEQEOAQ7BEwGRQZEBkEAIAYqBjkGMQZKBkEAIABHAHIAYQB5 -ACAGJwZEBjkGJwZFAEcAZQBuAGUAcgBpAGMAIABHAHIAYQB5ACAAUAByAG8AZgBpAGwAZQAAdGV4dAAA -AABDb3B5cmlnaHQgMjAwNyBBcHBsZSBJbmMuLCBhbGwgcmlnaHRzIHJlc2VydmVkLgBYWVogAAAAAAAA -81EAAQAAAAEWzGN1cnYAAAAAAAAAAQHNAADSKywtLlokY2xhc3NuYW1lWCRjbGFzc2VzXxAQTlNCaXRt -YXBJbWFnZVJlcKMtLzBaTlNJbWFnZVJlcFhOU09iamVjdNIrLDIzV05TQXJyYXmiMjDSKyw1Nl5OU011 -dGFibGVBcnJheaM1MjDTODkPOjs8V05TV2hpdGVcTlNDb2xvclNwYWNlRDAgMAAQA4AM0issPj9XTlND -b2xvcqI+MNIrLEFCV05TSW1hZ2WiQTAACAARABoAJAApADIANwBJAEwAUQBTAGIAaAB1AHwAiwCSAJ8A -pgCuALAAsgC0ALkAuwC9AMQAyQDUANYA2ADaAN8A4gDkAOYA6ADvAQYBIgEkASYJtgm7CcYJzwniCeYJ -8Qn6Cf8KBwoKCg8KHgoiCikKMQo+CkMKRQpHCkwKVApXClwKZAAAAAAAAAIBAAAAAAAAAEMAAAAAAAAA -AAAAAAAAAApnA - - - - diff --git a/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/KMConfigColumn1CellView.h b/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/KMConfigColumn1CellView.h deleted file mode 100644 index 146fd3245e..0000000000 --- a/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/KMConfigColumn1CellView.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// KMConfigColumn1CellView.h -// Keyman4MacIM -// -// Created by Serkan Kurt on 26/02/2015. -// Copyright (c) 2017 SIL International. All rights reserved. -// - -#import - -@interface KMConfigColumn1CellView : NSTableCellView -@property (nonatomic, weak) IBOutlet NSButton *checkBox; -@end diff --git a/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/KMConfigColumn1CellView.m b/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/KMConfigColumn1CellView.m deleted file mode 100644 index c76fa0ef2c..0000000000 --- a/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/KMConfigColumn1CellView.m +++ /dev/null @@ -1,14 +0,0 @@ -// -// KMConfigColumn1CellView.m -// Keyman4MacIM -// -// Created by Serkan Kurt on 26/02/2015. -// Copyright (c) 2017 SIL International. All rights reserved. -// - -#import "KMConfigColumn1CellView.h" - -@implementation KMConfigColumn1CellView -@synthesize checkBox; - -@end diff --git a/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/KMConfigColumn3CellView.h b/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/KMConfigColumn3CellView.h deleted file mode 100644 index 01c6886f43..0000000000 --- a/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/KMConfigColumn3CellView.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// KMConfigColumn3CellView.h -// Keyman4MacIM -// -// Created by Serkan Kurt on 26/02/2015. -// Copyright (c) 2017 SIL International. All rights reserved. -// - -#import - -@interface KMConfigColumn3CellView : NSTableCellView -@property (nonatomic, weak) IBOutlet NSButton *infoButton; -@property (nonatomic, weak) IBOutlet NSButton *helpButton; -@property (nonatomic, weak) IBOutlet NSButton *removeButton; -@end diff --git a/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/KMConfigColumn3CellView.m b/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/KMConfigColumn3CellView.m deleted file mode 100644 index a8c597aa4f..0000000000 --- a/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/KMConfigColumn3CellView.m +++ /dev/null @@ -1,13 +0,0 @@ -// -// KMConfigColumn3CellView.m -// Keyman4MacIM -// -// Created by Serkan Kurt on 26/02/2015. -// Copyright (c) 2017 SIL International. All rights reserved. -// - -#import "KMConfigColumn3CellView.h" - -@implementation KMConfigColumn3CellView -@synthesize infoButton, helpButton, removeButton; -@end diff --git a/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/KMConfigurationWindowController.h b/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/KMConfigurationWindowController.h deleted file mode 100644 index adc7343bd6..0000000000 --- a/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/KMConfigurationWindowController.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// KMConfigurationWindowController.h -// Keyman4MacIM -// -// Created by Serkan Kurt on 24/02/2015. -// Copyright (c) 2017 SIL International. All rights reserved. -// - -#import -#import "KMInputMethodAppDelegate.h" -#import "KMConfigColumn1CellView.h" -#import "KMConfigColumn3CellView.h" -#import "KMPackage.h" - -@interface KMConfigurationWindowController : NSWindowController - -- (void)handleRequestToInstallPackage:(KMPackage *) package; - -@end diff --git a/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/KMConfigurationWindowController.m b/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/KMConfigurationWindowController.m deleted file mode 100644 index ad15d92866..0000000000 --- a/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/KMConfigurationWindowController.m +++ /dev/null @@ -1,593 +0,0 @@ -// -// KMConfigurationWindowController.m -// Keyman4MacIM -// -// Created by Serkan Kurt on 24/02/2015. -// Copyright (c) 2017 SIL International. All rights reserved. -// - -#import "KMConfigurationWindowController.h" -#import "KMDownloadKBWindowController.h" -#import "KMDataRepository.h" -#import "KMLogs.h" -#import "KMSentryHelper.h" - -@interface KMConfigurationWindowController () -@property (nonatomic, weak) IBOutlet NSTableView *tableView; -@property (nonatomic, weak) IBOutlet WebView *webView; -@property (nonatomic, weak) IBOutlet NSButton *supportBack; -@property (nonatomic, weak) IBOutlet NSButton *supportForward; -@property (nonatomic, weak) IBOutlet NSButton *supportHome; -@property (nonatomic, strong) NSMutableArray *tableContents; -@property (nonatomic, strong) NSTimer *reloadTimer; -@property (nonatomic, strong) NSDate *lastReloadDate; -@property (nonatomic, strong) NSAlert *deleteAlertView; -@property (nonatomic, strong) NSAlert *confirmKmpInstallAlertView; -@end - -@implementation KMConfigurationWindowController - -- (KMInputMethodAppDelegate *)AppDelegate { - return (KMInputMethodAppDelegate *)[NSApp delegate]; -} - -- (id)initWithWindowNibName:(NSString *)windowNibName { - self = [super initWithWindowNibName:windowNibName]; - if (self) { - if (self.AppDelegate.infoWindow_.window != nil) { - [self.window addChildWindow:self.AppDelegate.infoWindow_.window ordered:NSWindowAbove]; - [self.AppDelegate.infoWindow_.window centerInParent]; - } - else if (self.AppDelegate.downloadKBWindow_.window != nil) { - [self.window addChildWindow:self.AppDelegate.downloadKBWindow_.window ordered:NSWindowAbove]; - [self.AppDelegate.downloadKBWindow_.window centerInParent]; - } - - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(timerAction:) name:kKeymanKeyboardDownloadCompletedNotification object:nil]; - } - - return self; -} - -- (void)dealloc { - [[NSNotificationCenter defaultCenter] removeObserver:self]; - [self stopTimer]; -} - -- (void)windowDidLoad { - [self.AppDelegate registerConfigurationWindow:self]; - [super windowDidLoad]; - [self.window center]; - [_tableView registerForDraggedTypes:@[NSFilenamesPboardType]]; - _lastReloadDate = [NSDate date]; - [self startTimer]; - - [self.webView setFrameLoadDelegate:(id)self]; - [self.webView setPolicyDelegate:(id)self]; - - NSURL *homeUrl = [[NSBundle mainBundle] URLForResource:@"index" withExtension:@"html" subdirectory:@"Help"]; - [self.webView.mainFrame loadRequest:[NSURLRequest requestWithURL:homeUrl]]; -} - -- (void)webView:(WebView *)sender decidePolicyForNewWindowAction:(NSDictionary *)actionInformation request:(NSURLRequest *)request newFrameName:(NSString *)frameName decisionListener:(id)listener { - [[NSWorkspace sharedWorkspace] openURL:[actionInformation objectForKey:WebActionOriginalURLKey]]; - [listener ignore]; -} - -- (void)webView:(WebView *)webView decidePolicyForNavigationAction:(NSDictionary *)actionInformation request:(NSURLRequest *)request frame:(WebFrame *)frame decisionListener:(id)listener { - NSString* url = [[request URL] absoluteString]; - os_log_debug([KMLogs uiLog], "decidePolicyForNavigationAction, navigating to %{public}@", url); - - if([url hasPrefix: @"file:"]) { - [listener use]; - } else { - [listener ignore]; - [[NSWorkspace sharedWorkspace] openURL: [request URL]]; - } -} - -- (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame; { - self.supportBack.enabled = [self.webView canGoBack]; - self.supportForward.enabled = [self.webView canGoForward]; -} - -- (IBAction)supportBackAction:(id)sender { - [self.webView goBack]; -} - -- (IBAction)supportForwardAction:(id)sender { - [self.webView goForward]; -} - -- (IBAction)supportHomeAction:(id)sender { - NSURL *homeUrl = [[NSBundle mainBundle] URLForResource:@"index" withExtension:@"html" subdirectory:@"Help"]; - [self.webView.mainFrame loadRequest:[NSURLRequest requestWithURL:homeUrl]]; - -} - -- (void)setTableView:(NSTableView *)tableView { - _tableView = tableView; - NSMenu *menu = [[NSMenu alloc] init]; - NSMenuItem *item = [[NSMenuItem alloc] initWithTitle:@"Refresh" action:@selector(refreshAction:) keyEquivalent:@""]; - [menu addItem:item]; - [_tableView setMenu:menu]; -} - -- (void)refreshAction:(id)sender { - [self.AppDelegate setKmxFileList:nil]; - [self setTableContents:nil]; - [self saveEnabledKeyboards]; - [self.tableView reloadData]; - _lastReloadDate = [NSDate date]; -} - -- (NSArray *)tableContents { - if (_tableContents == nil) { - _tableContents = [[NSMutableArray alloc] initWithCapacity:0]; - for (int i = 0; i < self.kmxFileList.count; i++) { - id obj = [self.kmxFileList objectAtIndex:i]; - if ([obj isKindOfClass:[NSArray class]]) { - NSArray *pArray = (NSArray *)obj; - NSString *packageFolder = [self packageFolderFromPath:[pArray objectAtIndex:0]]; - NSString *packageName = [self.AppDelegate packageNameFromPackageInfo:packageFolder]; - - if (packageName) { - os_log_debug([KMLogs testLog], "tableContents, packageFolder: %{public}@, packageName: %{public}@", packageFolder, packageName); - [_tableContents addObject:[NSDictionary dictionaryWithObjectsAndKeys:packageName, @"HeaderTitle", nil]]; - } else { - os_log_error([KMLogs testLog], "tableContents, no packageName for packageFolder: %{public}@", packageFolder); - NSString *noPackageName = NSLocalizedString(@"unknown-package-name", nil); - [_tableContents addObject:[NSDictionary dictionaryWithObjectsAndKeys:noPackageName, @"HeaderTitle", nil]]; - } - for (NSString *path in pArray) { - os_log_debug([KMLogs uiLog], "tableContents, path = '%{public}@'", path); - NSDictionary *info = [KMXFile keyboardInfoFromKmxFile:path]; - if (!info) { - info = [[NSDictionary alloc] initWithObjectsAndKeys: - NSLocalizedString(@"message-error-loading-keyboard", nil), kKMKeyboardNameKey, - NSLocalizedString(@"message-error-unknown-metadata", nil), kKMKeyboardVersionKey, - NSLocalizedString(@"message-error-unknown-metadata", nil), kKMKeyboardCopyrightKey, - NSLocalizedString(@"message-error-unknown-metadata", nil), kKMVisualKeyboardKey, - nil]; - } - [_tableContents addObject:info]; - } - } - else { - NSString *path = (NSString *)obj; - os_log_debug([KMLogs uiLog], "tableContents, path = '%{public}@'", path); - NSDictionary *info = [KMXFile keyboardInfoFromKmxFile:path]; - if (!info) { - info = [[NSDictionary alloc] initWithObjectsAndKeys: - NSLocalizedString(@"message-error-loading-keyboard", nil), kKMKeyboardNameKey, - NSLocalizedString(@"message-error-unknown-metadata", nil), kKMKeyboardVersionKey, - NSLocalizedString(@"message-error-unknown-metadata", nil), kKMKeyboardCopyrightKey, - NSLocalizedString(@"message-error-unknown-metadata", nil), kKMVisualKeyboardKey, - nil]; - } - [_tableContents addObject:info]; - } - } - } - - return _tableContents; -} - -- (NSString *)kmxFilePathAtIndex:(NSUInteger)index { - return [self.AppDelegate kmxFilePathAtIndex:index]; -} - -- (NSString *)packagePathAtIndex:(NSUInteger)index { - return [self.AppDelegate packagePathAtIndex:index]; -} - -- (NSInteger)indexForPackageFolder:(NSString *)packageFolder { - return [self.AppDelegate indexForPackageFolder:packageFolder]; -} - -- (NSString *)packageFolderFromPath:(NSString *)path { - return [self.AppDelegate packageFolderFromPath:path]; -} - -- (NSString *)keyboardsPath { - return self.AppDelegate.keyboardsPath; -} - -- (NSArray *)kmxFileList { - return self.AppDelegate.kmxFileList; -} - -- (NSMutableArray *)enabledKeyboards { - return self.AppDelegate.enabledKeyboards; -} - -- (void)saveEnabledKeyboards { - [self.AppDelegate saveEnabledKeyboards]; -} - -- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView { - return self.tableContents.count; -} - -- (NSIndexSet *)tableView:(NSTableView *)tableView selectionIndexesForProposedSelection:(NSIndexSet *)proposedSelectionIndexes { - return 0; -} - -- (NSTableRowView *)tableView:(NSTableView *)tableView rowViewForRow:(NSInteger)row { - NSDictionary *info = [self.tableContents objectAtIndex:row]; - BOOL isHeader = ([info objectForKey:@"HeaderTitle"] != nil); - if (isHeader) { - NSTableRowView *rowView = [[NSTableRowView alloc] init]; - NSTextField *textField = [[NSTextField alloc] initWithFrame:NSMakeRect(4, 4, tableView.frame.size.width-86, tableView.rowHeight-8)]; - [textField setEditable:NO]; - [textField setBordered:NO]; - [textField setBackgroundColor:[NSColor clearColor]]; - [textField setAlignment:NSTextAlignmentLeft]; - [textField setFont:[NSFont systemFontOfSize:tableView.rowHeight*0.5]]; - [textField setTextColor:[NSColor colorWithSRGBRed:0.0 green:0.0 blue:0.1 alpha:1.0]]; - [textField setStringValue:[info objectForKey:@"HeaderTitle"]]; - [rowView addSubview:textField]; - return rowView; - } - - return nil; -} - -- (void)tableView:(NSTableView *)tableView didAddRowView:(NSTableRowView *)rowView forRow:(NSInteger)row { - NSDictionary *info = [self.tableContents objectAtIndex:row]; - BOOL isHeader = ([info objectForKey:@"HeaderTitle"] != nil); - if (isHeader) - [rowView setBackgroundColor:[NSColor colorWithSRGBRed:186.0/255.0 green:211.0/255.0 blue:1.0 alpha:1.0]]; -} - -- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row { - NSDictionary *info = [self.tableContents objectAtIndex:row]; - NSString *identifier = [tableColumn identifier]; - NSString *headerTitle = [info objectForKey:@"HeaderTitle"]; - BOOL isHeader = (headerTitle != nil); - BOOL isOthers = NO; - NSString *kmxFilePath = [self kmxFilePathAtIndex:row]; - if (kmxFilePath != nil) { - isOthers = [[self packageFolderFromPath:kmxFilePath] isEqualToString:@"Others"]; - } - else if (isHeader && [headerTitle isEqualToString:@"Others"]) { - isOthers = YES; - } - if ([identifier isEqualToString:@"Column1"]) { - KMConfigColumn1CellView *cellView = [tableView makeViewWithIdentifier:identifier owner:self]; - - if (isHeader) { - [cellView setHidden:YES]; - } - else { - [cellView setHidden:NO]; - cellView.imageView.objectValue = [info objectForKey:kKMKeyboardIconKey]; - [cellView.checkBox setTag:row]; - [cellView.checkBox setAction:@selector(checkBoxAction:)]; - NSString *kmxFilePath = [self kmxFilePathAtIndex:row]; - NSString *partialPath = [KMDataRepository.shared trimToPartialPath:kmxFilePath]; - os_log_debug([KMLogs uiLog], "tableView:viewForTableColumn, kmxFilePath = %{public}@ for row %li, partialPath = %{public}@", kmxFilePath, (long)row, partialPath); - [cellView.checkBox setState:([self.enabledKeyboards containsObject:partialPath])?NSOnState:NSOffState]; - } - - return cellView; - } - else if ([identifier isEqualToString:@"Column2"]) { - NSTableCellView *cellView = [tableView makeViewWithIdentifier:identifier owner:self]; - if (!isHeader) { - [cellView setHidden:NO]; - //cellView.textField.stringValue = [NSString stringWithFormat:@"%@ (%@)", [info objectForKey:kKMKeyboardNameKey], [info objectForKey:kKMKeyboardVersionKey]]; - cellView.textField.stringValue = [info objectForKey:kKMKeyboardNameKey]; - } - else { - cellView.textField.stringValue = @""; - [cellView setHidden:YES]; - } - - return cellView; - } - else if ([identifier isEqualToString:@"Column3"]) { - KMConfigColumn3CellView *cellView = [tableView makeViewWithIdentifier:identifier owner:self]; - - if ((!isHeader && !isOthers) || (isHeader && isOthers)) { - [cellView.removeButton setHidden:YES]; - [cellView.infoButton setHidden:YES]; - [cellView.helpButton setHidden:YES]; - } - else if (isOthers) { - [cellView.removeButton setHidden:NO]; - [cellView.infoButton setHidden:YES]; - [cellView.helpButton setHidden:YES]; - } - else { - [cellView.removeButton setHidden:NO]; - - [cellView.infoButton setHidden:NO]; - [cellView.infoButton setTag:row]; - [cellView.infoButton setAction:@selector(infoAction:)]; - [cellView.infoButton setBordered:NO]; - [cellView.infoButton setWantsLayer:YES]; - CALayer *btnLayer = [cellView.infoButton layer]; - btnLayer.backgroundColor = [NSColor clearColor].CGColor; - btnLayer.cornerRadius = 9.5; - - [cellView.helpButton setHidden:NO]; - [cellView.helpButton setTag:row]; - [cellView.helpButton setAction:@selector(helpAction:)]; - [cellView.helpButton setEnabled:[self hasHelpDocumentation:row]]; - } - - if (![cellView.removeButton isHidden]) { - [cellView.removeButton setTag:row]; - [cellView.removeButton setAction:@selector(removeAction:)]; - [cellView.removeButton setBordered:NO]; - [cellView.removeButton setWantsLayer:YES]; - CALayer *btnLayer = [cellView.removeButton layer]; - btnLayer.backgroundColor = [NSColor whiteColor].CGColor; - btnLayer.cornerRadius = 9.5; - btnLayer.borderWidth = 1.0; - btnLayer.borderColor = [NSColor grayColor].CGColor; - } - - return cellView; - } - - return nil; -} - -- (NSDragOperation)tableView:(NSTableView*)tv validateDrop:(id )info proposedRow:(NSInteger)row proposedDropOperation:(NSTableViewDropOperation)op { - return NSDragOperationCopy; -} - -- (BOOL)tableView:(NSTableView *)tableView acceptDrop:(id)info row:(NSInteger)row dropOperation:(NSTableViewDropOperation)dropOperation { - NSPasteboard *pboard = [info draggingPasteboard]; - NSArray *filenames = [pboard propertyListForType:NSFilenamesPboardType]; - NSMutableArray *kmpFiles = nil; - for (NSString *filename in filenames) { - if ([filename hasSuffix:@".kmp"]) { - if (kmpFiles == nil) - kmpFiles = [NSMutableArray arrayWithObject:filename]; - else - [kmpFiles addObject:filename]; - } - } - - for (NSString *kmpFile in kmpFiles) { - if ([self.AppDelegate unzipFile:kmpFile]) - [self refreshAction:nil]; - else - [kmpFiles removeObject:kmpFile]; - } - - if (kmpFiles.count < 1) - kmpFiles = nil; - - return (kmpFiles==nil?NO:YES); -} - -- (void)checkBoxAction:(id)sender { - NSButton *checkBox = (NSButton *)sender; - NSString *kmxFilePath = [self kmxFilePathAtIndex:checkBox.tag]; - NSString * kmxFileName = [kmxFilePath lastPathComponent]; - NSString *partialPath = [KMDataRepository.shared trimToPartialPath:kmxFilePath]; - os_log_debug([KMLogs uiLog], "checkBoxAction, kmxFilePath = %{public}@ for checkBox.tag %li, partialPath = %{public}@", kmxFilePath, checkBox.tag, partialPath); - if (checkBox.state == NSOnState) { - os_log_debug([KMLogs uiLog], "enabling active keyboard: %{public}@", kmxFileName); - NSString *message = [NSString stringWithFormat:@"enabling active keyboard: %@", kmxFileName]; - [KMSentryHelper addUserBreadCrumb:@"config" message:message]; - [self.enabledKeyboards addObject:partialPath]; - [self saveEnabledKeyboards]; - } - else if (checkBox.state == NSOffState) { - os_log_debug([KMLogs uiLog], "disabling active keyboard: %{public}@", kmxFileName); - NSString *message = [NSString stringWithFormat:@"disabling active keyboard: %@", kmxFileName]; - [KMSentryHelper addUserBreadCrumb:@"config" message:message]; - [self.enabledKeyboards removeObject:partialPath]; - [self saveEnabledKeyboards]; - } -} - -- (void)infoAction:(id)sender { - [KMSentryHelper addUserBreadCrumb:@"user" message:@"getting package information"]; - NSButton *infoButton = (NSButton *)sender; - NSString *packagePath = [self packagePathAtIndex:infoButton.tag]; - if (packagePath != nil) { - if (self.AppDelegate.infoWindow_.window != nil) - [self.AppDelegate.infoWindow_ close]; - - [self.window addChildWindow:self.AppDelegate.infoWindow.window ordered:NSWindowAbove]; - [self.AppDelegate.infoWindow.window centerInParent]; - [self.AppDelegate.infoWindow.window makeKeyAndOrderFront:nil]; - [self.AppDelegate.infoWindow setPackagePath:packagePath]; - } -} - -- (void)helpAction:(id)sender { - [KMSentryHelper addUserBreadCrumb:@"user" message:@"displaying help"]; - NSButton *helpButton = (NSButton *)sender; - NSString *packagePath = [self packagePathAtIndex:helpButton.tag]; - if (packagePath != nil) { - if (self.AppDelegate.kbHelpWindow_.window != nil) - [self.AppDelegate.kbHelpWindow_ close]; - - [self.window addChildWindow:self.AppDelegate.kbHelpWindow.window ordered:NSWindowAbove]; - [self.AppDelegate.kbHelpWindow.window centerInParent]; - [self.AppDelegate.kbHelpWindow.window makeKeyAndOrderFront:nil]; - [self.AppDelegate.kbHelpWindow setPackagePath:packagePath]; - } -} - -- (void)removeAction:(id)sender { - NSButton *deleteButton = (NSButton *)sender; - NSDictionary *info = [self.tableContents objectAtIndex:deleteButton.tag]; - NSString *deleteKeyboardMessage = NSLocalizedString(@"message-confirm-delete-keyboard", nil); - NSString *keyboardName = nil; - - if ([info objectForKey:@"HeaderTitle"] != nil) { - keyboardName = [info objectForKey:@"HeaderTitle"]; - } else { - keyboardName = [info objectForKey:kKMKeyboardNameKey]; - } - [self.deleteAlertView setMessageText:[NSString localizedStringWithFormat:deleteKeyboardMessage, keyboardName]]; - os_log_debug([KMLogs configLog], "entered removeAction for keyboardName: %{public}@", keyboardName); - - [self.deleteAlertView beginSheetModalForWindow:self.window completionHandler:^(NSModalResponse returnCode) { - if (returnCode == NSAlertFirstButtonReturn) { - os_log_debug([KMLogs uiLog], "confirm delete keyboard alert dismissed"); - [self deleteFileAtIndex:[NSNumber numberWithInteger:deleteButton.tag]]; - - os_log_debug([KMLogs configLog], "removeAction for keyboardName: %{public}@", keyboardName); - [KMSentryHelper addUserBreadCrumb:@"configure" message:[NSString stringWithFormat:@"remove keyboard: %@", keyboardName]]; - } - self.deleteAlertView = nil; - }]; -} - -- (IBAction)downloadAction:(id)sender { - [KMSentryHelper addUserBreadCrumb:@"user" message:@"download keyboard"]; - - if (self.AppDelegate.infoWindow_.window != nil) - [self.AppDelegate.infoWindow_ close]; - - if (self.AppDelegate.kbHelpWindow_.window != nil) - [self.AppDelegate.kbHelpWindow_ close]; - - [self.window addChildWindow:self.AppDelegate.downloadKBWindow.window ordered:NSWindowAbove]; - [self.AppDelegate.downloadKBWindow.window centerInParent]; - [self.AppDelegate.downloadKBWindow.window makeKeyAndOrderFront:nil]; -} - -- (void)handleRequestToInstallPackage:(KMPackage *) package { - os_log_debug([KMLogs dataLog], "handleRequestToInstallPackage"); - NSString *keyboardInfoString = NSLocalizedString(@"info-install-keyboard-filename", nil); - [self.confirmKmpInstallAlertView setInformativeText:[NSString localizedStringWithFormat:keyboardInfoString, package.getOrigKmpFilename]]; - - os_log_debug([KMLogs uiLog], "Asking user to confirm installation of %{public}@, KMP - temp file name: %{public}@", package.getOrigKmpFilename, package.getTempKmpFilename); - - [self.confirmKmpInstallAlertView beginSheetModalForWindow:self.window completionHandler:^(NSModalResponse returnCode) { - os_log_debug([KMLogs uiLog], "confirm keyboard installation alert dismissed"); - if (returnCode == NSAlertFirstButtonReturn) { - [self installPackageFile: package.getTempKmpFilename]; - } - [package releaseTempKMPFile]; - self.confirmKmpInstallAlertView = nil; - }]; -} - -- (void)installPackageFile:(NSString *)kmpFile { - // kmpFile could be a temp file (in fact, it always is!), so don't display the name. - os_log_debug([KMLogs dataLog], "kmpFile - ready to unzip/install Package File: %{public}@", kmpFile); - [KMSentryHelper addInfoBreadCrumb:@"configure" message:@"install package file"]; - - BOOL didUnzip = [self.AppDelegate unzipFile:kmpFile]; - - if (!didUnzip) { - os_log_debug([KMLogs dataLog], "kmpFile, unzipFile failed"); - NSAlert *failure = [[NSAlert alloc] init]; - [failure addButtonWithTitle:NSLocalizedString(@"button-keyboard-file-unreadable", @"Alert button")]; - - NSString *errorString = NSLocalizedString(@"message-keyboard-file-unreadable", nil); - [failure setMessageText:[NSString localizedStringWithFormat:errorString, kmpFile.lastPathComponent]]; - - [failure setIcon:[[NSBundle mainBundle] imageForResource:@"logo.png"]]; - [failure setAlertStyle:NSAlertStyleWarning]; - [failure beginSheetModalForWindow:self.window completionHandler:^(NSModalResponse returnCode) { - os_log_debug([KMLogs uiLog], "kmpFile, keyboard file unreadable alert dismissed with returnCode: %ld", (long)returnCode); - }]; - } - else { - os_log_debug([KMLogs dataLog], "kmpFile, completed installation of KMP file"); - } -} - -- (void)startTimer { - if (_reloadTimer == nil) { - TimerTarget *timerTarget = [[TimerTarget alloc] init]; - timerTarget.target = self; - _reloadTimer = [NSTimer scheduledTimerWithTimeInterval:5.0f - target:timerTarget - selector:@selector(timerAction:) - userInfo:nil - repeats:YES]; - } -} - -- (void)stopTimer { - if (_reloadTimer != nil) { - [_reloadTimer invalidate]; - _reloadTimer = nil; - } -} - -- (void)timerAction:(NSTimer *)timer { - if ([self shouldReloadData]) { - [self.AppDelegate setKmxFileList:nil]; - [self setTableContents:nil]; - [self saveEnabledKeyboards]; - [self.tableView reloadData]; - _lastReloadDate = [NSDate date]; - } -} - -- (BOOL)shouldReloadData { - NSDictionary *attrs = [[NSFileManager defaultManager] attributesOfItemAtPath:self.keyboardsPath error:nil]; - NSDate *lastModDate = [attrs fileModificationDate]; - return ([lastModDate compare:_lastReloadDate] == NSOrderedDescending); -} - -- (BOOL)hasHelpDocumentation:(NSUInteger)row { - NSString *packagePath = [self packagePathAtIndex:row]; - if (packagePath != nil) { - NSString *welcomeFile = [packagePath stringByAppendingPathComponent:@"welcome.htm"]; - if ([[NSFileManager defaultManager] fileExistsAtPath:welcomeFile]) - return YES; - } - - return NO; -} - -- (NSAlert *)deleteAlertView { - if (_deleteAlertView == nil) { - _deleteAlertView = [[NSAlert alloc] init]; - [_deleteAlertView setInformativeText:NSLocalizedString(@"info-cannot-undo-delete-keyboard", nil)]; - [_deleteAlertView addButtonWithTitle:NSLocalizedString(@"button-delete-keyboard", nil)]; - [_deleteAlertView addButtonWithTitle:NSLocalizedString(@"button-cancel-delete-keyboard", nil)]; - [_deleteAlertView setAlertStyle:NSAlertStyleWarning]; - [_deleteAlertView setIcon:[[NSBundle mainBundle] imageForResource:@"logo.png"]]; - } - - return _deleteAlertView; -} - -- (NSAlert *)confirmKmpInstallAlertView { - if (_confirmKmpInstallAlertView == nil) { - _confirmKmpInstallAlertView = [[NSAlert alloc] init]; - [_confirmKmpInstallAlertView addButtonWithTitle:NSLocalizedString(@"button-install-keyboard", nil)]; - [_confirmKmpInstallAlertView addButtonWithTitle:NSLocalizedString(@"button-cancel-install-keyboard", nil)]; - [_confirmKmpInstallAlertView setMessageText:NSLocalizedString(@"message-confirm-install-keyboard", nil)]; - [_confirmKmpInstallAlertView setAlertStyle:NSAlertStyleInformational]; - [_confirmKmpInstallAlertView setIcon:[[NSBundle mainBundle] imageForResource:@"logo.png"]]; - } - - return _confirmKmpInstallAlertView; -} - -- (void)deleteFileAtIndex:(NSNumber *) n { - NSInteger index = [n integerValue]; - NSString *path2Remove = nil; - NSString *kmxFilePath = [self kmxFilePathAtIndex:index]; - if (kmxFilePath == nil) { - kmxFilePath = [self kmxFilePathAtIndex:index+1]; - path2Remove = [[self keyboardsPath] stringByAppendingPathComponent:[self packageFolderFromPath:kmxFilePath]]; - } - else { - path2Remove = kmxFilePath; - } - - NSError *error; - [[NSFileManager defaultManager] removeItemAtPath:path2Remove error:&error]; - if (error == nil) { - [self performSelector:@selector(timerAction:) withObject:nil afterDelay:1.0]; - } -} -@end diff --git a/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/am.lproj/preferences.strings b/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/am.lproj/preferences.strings deleted file mode 100644 index d40a9cbfba..0000000000 --- a/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/am.lproj/preferences.strings +++ /dev/null @@ -1,38 +0,0 @@ -/* Checkbox text to always show on-screen keyboard */ -"4UX-80-0Vo.title" = "የስክሪን ላይ ኪቦርዱን ሁልጊዜ አሳይ"; - -/* Checkbox text to enable verbose Console logging */ -"7J6-zy-R20.title" = "የቃል መዝገብ ማስታወሻ ተጠቀም"; - -/* Support button text */ -"93O-x6-RLF.label" = "ድጋፍ"; - -/* Download Keyboard button text */ -"CTw-kf-WNS.title" = "የፊደል ገበታ ሰሌዳ አውርድ..."; - -/* Keyman Configuration window title */ -"F0z-JX-Cv5.title" = "ኪይማንን ለአጠቃቀም ማዘጋጃ"; - -/* button text to go back to previous page */ -"JOK-JV-n8w.title" = "ተመለስ"; - -/* Keyboards button text */ -"MPN-9N-wWc.label" = "የፊደል ገበታ ሰሌዳ"; - -/* text to explain verbose Console logging option */ -"MrI-GM-7d6.title" = "የቃል መዝግብ ማስታወሻ አማራጩ ሲበራ ኪይማን የኬይማን ድጋፍ ችግርን ለመመርመር የሚረዱ ድርጊቶችን ይመዘግባል። የኮንሶል ፕሮግራሙ ከኪይማን የመልእክት ምዝግብ ማስታወሻን ለማየት ሊያገለግል ይችላል። በኮንሶል ውስጥ ሁሉንም የ\"ኪይማን\" መልእክቶችን ለማሳየት ያጣሩ። ይህ የምዝገባ ማስታወሻ ከተፈለገ ወደ ውጭ ሊላክ እና ለየ ኪይማን ድጋፍ ሊላክ ይችላል።"; - -/* button text to move forward to the next page */ -"eXr-8V-h1g.title" = "ወደፊት"; - -/* button text to return to the home help page */ -"fXS-aC-CMH.title" = "መግቢያ ገጽ"; - -/* Options button text */ -"frd-No-seV.label" = "ምርጫዎች"; - -/* Installed Keyboard column heading */ -"jex-Nd-Qzg.headerCell.title" = "የፊደል ሰሌዳን መጫን"; - -/* Verbose logging tooltip text */ -"uWx-3J-U0D.ibShadowedToolTip" = "በአንድ የተወሰነ የቁልፍ ሰሌዳ ወይም በአጠቃላይ ከኪይማን ጋር ችግሮች ካጋጠሙዎት ይህንን ቁልፍ ያብሩት።"; diff --git a/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/cs.lproj/preferences.strings b/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/cs.lproj/preferences.strings deleted file mode 100644 index 9477b4c637..0000000000 --- a/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/cs.lproj/preferences.strings +++ /dev/null @@ -1,38 +0,0 @@ -/* Checkbox text to always show on-screen keyboard */ -"4UX-80-0Vo.title" = "Vždy zobrazovat klávesnici na obrazovce"; - -/* Checkbox text to enable verbose Console logging */ -"7J6-zy-R20.title" = "Použít detailní logování konzole"; - -/* Support button text */ -"93O-x6-RLF.label" = "Podpora"; - -/* Download Keyboard button text */ -"CTw-kf-WNS.title" = "Stáhnout klávesnici..."; - -/* Keyman Configuration window title */ -"F0z-JX-Cv5.title" = "Konfigurace klíče"; - -/* button text to go back to previous page */ -"JOK-JV-n8w.title" = "Zpět"; - -/* Keyboards button text */ -"MPN-9N-wWc.label" = "Klávesnice"; - -/* text to explain verbose Console logging option */ -"MrI-GM-7d6.title" = "Když je zapnuta možnost detailního logování, Keyman zaznamená akce, které mohou pomoci Keymanovi diagnostikovat problém. Program konzole může být použit k zobrazení protokolu zpráv od Keymana. V konzoli filtr zobrazuje všechny zprávy z procesu \"Klíčové\". Tento log může být exportován a v případě potřeby odeslán na podporu klíče."; - -/* button text to move forward to the next page */ -"eXr-8V-h1g.title" = "Přeposlat"; - -/* button text to return to the home help page */ -"fXS-aC-CMH.title" = "Domů"; - -/* Options button text */ -"frd-No-seV.label" = "Možnosti"; - -/* Installed Keyboard column heading */ -"jex-Nd-Qzg.headerCell.title" = "Instalovaná klávesnice"; - -/* Verbose logging tooltip text */ -"uWx-3J-U0D.ibShadowedToolTip" = "Zapněte, pokud máte problémy s konkrétní klávesnicí nebo s klíčem obecně."; diff --git a/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/el.lproj/preferences.strings b/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/el.lproj/preferences.strings deleted file mode 100644 index 6b750343d0..0000000000 --- a/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/el.lproj/preferences.strings +++ /dev/null @@ -1,38 +0,0 @@ -/* Checkbox text to always show on-screen keyboard */ -"4UX-80-0Vo.title" = "Νὰ ἐμφανίζεται πάντοτε τὸ πληκτρολόγιο ὀθόνης"; - -/* Checkbox text to enable verbose Console logging */ -"7J6-zy-R20.title" = "Χρησιμοποιῆστε λεπτομερῆ καταγραφὴ μηνυμάτων κονσόλας"; - -/* Support button text */ -"93O-x6-RLF.label" = "Ὑποστήριξη"; - -/* Download Keyboard button text */ -"CTw-kf-WNS.title" = "Κατεβάστε πληκτρολόγιο..."; - -/* Keyman Configuration window title */ -"F0z-JX-Cv5.title" = "Παράμετροι Keyman"; - -/* button text to go back to previous page */ -"JOK-JV-n8w.title" = "Πίσω"; - -/* Keyboards button text */ -"MPN-9N-wWc.label" = "Πληκτρολόγια"; - -/* text to explain verbose Console logging option */ -"MrI-GM-7d6.title" = "Ὅταν εἶναι ἐνεργὴ ἡ λεπτομερὴς καταγραφὴ μηνυμάτων κονσόλας, τὸ Keyman θὰ καταγράφει ἐνέργειες ποὺ θὰ βοηθήσουν τὴν ὁμάδα ὑποστήριξης Keyman νὰ διαγνώσει τυχὸν πρόβλημα. Μὲ τὸ πρόγραμμα κονσόλας μπορεῖτε νὰ δεῖτε τὰ μηνύματα τοῦ Keyman σὲ ἀρχεῖο. Στὴν Κονσόλα φιλτράρετε καὶ προβάλετε ὅλα τὰ μηνύματα ἀπὸ τὴν διεργασία \"Keyman\". Ἂν χρειασθεῖ, αὐτὴ ἡ ἀναφορὰ μπορεῖ νὰ ἐξαχθεῖ καὶ νὰ ἀποσταλεῖ στὴν ὑποστήριξη τοῦ Keyman."; - -/* button text to move forward to the next page */ -"eXr-8V-h1g.title" = "Μπροστά"; - -/* button text to return to the home help page */ -"fXS-aC-CMH.title" = "Ἀρχική"; - -/* Options button text */ -"frd-No-seV.label" = "Ἐπιλογές"; - -/* Installed Keyboard column heading */ -"jex-Nd-Qzg.headerCell.title" = "Ἐγκατεστημένο Πληκτρολόγιο"; - -/* Verbose logging tooltip text */ -"uWx-3J-U0D.ibShadowedToolTip" = "Ἐνεργοποιῆστε ἂν ἔχετε προβλήματα μὲ ἕνα συγκεκριμένο πληκτρολόγιο ἢ μὲ τὸ Keyman γενικῶς."; diff --git a/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/en.lproj/preferences.strings b/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/en.lproj/preferences.strings deleted file mode 100644 index a950d9fdec..0000000000 --- a/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/en.lproj/preferences.strings +++ /dev/null @@ -1,39 +0,0 @@ - -/* Checkbox text to always show on-screen keyboard */ -"4UX-80-0Vo.title" = "Always show on-screen keyboard"; - -/* Checkbox text to enable verbose Console logging */ -"7J6-zy-R20.title" = "Use verbose Console logging"; - -/* Support button text */ -"93O-x6-RLF.label" = "Support"; - -/* Download Keyboard button text */ -"CTw-kf-WNS.title" = "Download Keyboard..."; - -/* Keyman Configuration window title */ -"F0z-JX-Cv5.title" = "Keyman Configuration"; - -/* button text to go back to previous page */ -"JOK-JV-n8w.title" = "Back"; - -/* Keyboards button text */ -"MPN-9N-wWc.label" = "Keyboards"; - -/* text to explain verbose Console logging option */ -"MrI-GM-7d6.title" = "When the verbose logging option is on, Keyman will log actions that might help Keyman Support diagnose a problem. The Console program can be used to see a log of messages from Keyman. In Console, filter to show all messages from the \"Keyman\" process. This log can be exported and sent to Keyman support if needed."; - -/* button text to move forward to the next page */ -"eXr-8V-h1g.title" = "Forward"; - -/* button text to return to the home help page */ -"fXS-aC-CMH.title" = "Home"; - -/* Options button text */ -"frd-No-seV.label" = "Options"; - -/* Installed Keyboard column heading */ -"jex-Nd-Qzg.headerCell.title" = "Installed Keyboard"; - -/* Verbose logging tooltip text */ -"uWx-3J-U0D.ibShadowedToolTip" = "Turn this on if you are having problems with a specific keyboard or with Keyman in general."; diff --git a/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/es-419.lproj/preferences.strings b/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/es-419.lproj/preferences.strings deleted file mode 100644 index d835bfd432..0000000000 --- a/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/es-419.lproj/preferences.strings +++ /dev/null @@ -1,38 +0,0 @@ -/* Checkbox text to always show on-screen keyboard */ -"4UX-80-0Vo.title" = "Mostrar siempre el teclado en pantalla"; - -/* Checkbox text to enable verbose Console logging */ -"7J6-zy-R20.title" = "Usar registro detallado"; - -/* Support button text */ -"93O-x6-RLF.label" = "Soporte"; - -/* Download Keyboard button text */ -"CTw-kf-WNS.title" = "Descargar teclado..."; - -/* Keyman Configuration window title */ -"F0z-JX-Cv5.title" = "Configuración de Keyman"; - -/* button text to go back to previous page */ -"JOK-JV-n8w.title" = "Atrás"; - -/* Keyboards button text */ -"MPN-9N-wWc.label" = "Teclados"; - -/* text to explain verbose Console logging option */ -"MrI-GM-7d6.title" = "Cuando la opción de registro detallado está activada, Keyman registrará acciones que podrían ayudar a Keyman Support diagnosticar un problema. La aplicación de consola puede ser usada para ver un registro de mensajes de Keyman. En la aplicación de consola, puede filtrar para mostrar todos los mensajes del proceso \"Keyman\". Este registro puede ser exportado y enviado al soporte de Keyman si es necesario."; - -/* button text to move forward to the next page */ -"eXr-8V-h1g.title" = "Siguiente"; - -/* button text to return to the home help page */ -"fXS-aC-CMH.title" = "Inicio"; - -/* Options button text */ -"frd-No-seV.label" = "Opciones"; - -/* Installed Keyboard column heading */ -"jex-Nd-Qzg.headerCell.title" = "Teclado instalado"; - -/* Verbose logging tooltip text */ -"uWx-3J-U0D.ibShadowedToolTip" = "Active esta opción si tiene problemas con un teclado específico o con Keyman en general."; diff --git a/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/es.lproj/preferences.strings b/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/es.lproj/preferences.strings deleted file mode 100644 index aadead65f4..0000000000 --- a/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/es.lproj/preferences.strings +++ /dev/null @@ -1,38 +0,0 @@ -/* Checkbox text to always show on-screen keyboard */ -"4UX-80-0Vo.title" = "Mostrar siempre el teclado en pantalla"; - -/* Checkbox text to enable verbose Console logging */ -"7J6-zy-R20.title" = "Utilizar el registro detallado de la consola"; - -/* Support button text */ -"93O-x6-RLF.label" = "Soporte"; - -/* Download Keyboard button text */ -"CTw-kf-WNS.title" = "Descargar teclado..."; - -/* Keyman Configuration window title */ -"F0z-JX-Cv5.title" = "Configuración de Keyman"; - -/* button text to go back to previous page */ -"JOK-JV-n8w.title" = "Volver"; - -/* Keyboards button text */ -"MPN-9N-wWc.label" = "Teclados"; - -/* text to explain verbose Console logging option */ -"MrI-GM-7d6.title" = "Si la opción de registro detallado está activada, Keyman registrará las acciones que puedan ayudar al servicio de asistencia técnica de Keyman a diagnosticar un problema. El programa Consola puede utilizarse para ver un registro de los mensajes de Keyman. En Consola, filtre para mostrar todos los mensajes del proceso \"Keyman\". Este registro puede exportarse y enviarse al servicio de asistencia de Keyman si es necesario."; - -/* button text to move forward to the next page */ -"eXr-8V-h1g.title" = "Adelante"; - -/* button text to return to the home help page */ -"fXS-aC-CMH.title" = "Inicio"; - -/* Options button text */ -"frd-No-seV.label" = "Opciones"; - -/* Installed Keyboard column heading */ -"jex-Nd-Qzg.headerCell.title" = "Teclado instalado"; - -/* Verbose logging tooltip text */ -"uWx-3J-U0D.ibShadowedToolTip" = "Active esta opción si tiene problemas con un teclado específico o con Keyman en general."; diff --git a/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/ff-ng.lproj/preferences.strings b/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/ff-ng.lproj/preferences.strings deleted file mode 100644 index 19d96968b5..0000000000 --- a/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/ff-ng.lproj/preferences.strings +++ /dev/null @@ -1,38 +0,0 @@ -/* Checkbox text to always show on-screen keyboard */ -"4UX-80-0Vo.title" = "Koonday holla kibod dow yeeso na`ura"; - -/* Checkbox text to enable verbose Console logging */ -"7J6-zy-R20.title" = "Nafturu bee verbose Consol logging"; - -/* Support button text */ -"93O-x6-RLF.label" = "Mballa"; - -/* Download Keyboard button text */ -"CTw-kf-WNS.title" = "Jippunu kibod..."; - -/* Keyman Configuration window title */ -"F0z-JX-Cv5.title" = "Konfigoreshon Keyman"; - -/* button text to go back to previous page */ -"JOK-JV-n8w.title" = "Ɓaawo"; - -/* Keyboards button text */ -"MPN-9N-wWc.label" = "Tappirɗe"; - -/* text to explain verbose Console logging option */ -"MrI-GM-7d6.title" = "To cuɓol logging verbose man ɗo maɓɓiti, Keyman nastay nder kuuɗe ko mballata Keyman Mballita laarol nder masala. kuuɗe Consol man naftiran nasta nder lelle diga Keyman. Nder Consol, seɗu ngam holla kala lelle fuu diga kuuɗe \"Keyman\" man. nastugo nder man ɓe wurtinay ɗum ɓe yerɓa ɗum haa Keyman to ɗo mari haaje."; - -/* button text to move forward to the next page */ -"eXr-8V-h1g.title" = "Yeeso"; - -/* button text to return to the home help page */ -"fXS-aC-CMH.title" = "Home"; - -/* Options button text */ -"frd-No-seV.label" = "Cuɓi"; - -/* Installed Keyboard column heading */ -"jex-Nd-Qzg.headerCell.title" = "Wa`unu kibod"; - -/* Verbose logging tooltip text */ -"uWx-3J-U0D.ibShadowedToolTip" = "Kunnu ɗo to a` ɗo fotta bee masala bee nanta kala kibod fuu ko bo bee Keyman nder fuu man."; diff --git a/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/ff.lproj/preferences.strings b/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/ff.lproj/preferences.strings deleted file mode 100644 index 527693851e..0000000000 --- a/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/ff.lproj/preferences.strings +++ /dev/null @@ -1,38 +0,0 @@ -/* Checkbox text to always show on-screen keyboard */ -"4UX-80-0Vo.title" = "Hollu tappirde yaynirde sahaa kala"; - -/* Checkbox text to enable verbose Console logging */ -"7J6-zy-R20.title" = "Huutoro tonnginagol Ginorde njuutnuka"; - -/* Support button text */ -"93O-x6-RLF.label" = "Wallitorde"; - -/* Download Keyboard button text */ -"CTw-kf-WNS.title" = "Aawto Tappirde..."; - -/* Keyman Configuration window title */ -"F0z-JX-Cv5.title" = "Teeltagol Keyman"; - -/* button text to go back to previous page */ -"JOK-JV-n8w.title" = "Rutto"; - -/* Keyboards button text */ -"MPN-9N-wWc.label" = "Tappirɗe"; - -/* text to explain verbose Console logging option */ -"MrI-GM-7d6.title" = "So tonnginagol njuuñukka ena hurmi, maa Keyman tonngino baɗe baawɗe wallitde Wallirorde Keyman yiytuse caɗeele. Yuɓɓo Ginorde ndee ena waawi huutoreede ngam yiyde tonnginagol ɓatakuuje Keyman. E Ginorde ndee, seɗtu ngam hollude ɓatakuuje iwɗe e silsil Keyman ɗee fof. Ngol tonnginagol ena waawi jiggiteede kadi neldee to wallitorde Keyman so sokkaama."; - -/* button text to move forward to the next page */ -"eXr-8V-h1g.title" = "Yeeso"; - -/* button text to return to the home help page */ -"fXS-aC-CMH.title" = "Jaɓɓorgo"; - -/* Options button text */ -"frd-No-seV.label" = "Cuɓe"; - -/* Installed Keyboard column heading */ -"jex-Nd-Qzg.headerCell.title" = "Tappirde Aafaande"; - -/* Verbose logging tooltip text */ -"uWx-3J-U0D.ibShadowedToolTip" = "Huɓɓu ɗuum so aɗa jogii caɗeele e tappirde heeriinde walla e Keyman jaati."; diff --git a/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/ha.lproj/preferences.strings b/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/ha.lproj/preferences.strings deleted file mode 100644 index 221b215624..0000000000 --- a/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/ha.lproj/preferences.strings +++ /dev/null @@ -1,38 +0,0 @@ -/* Checkbox text to always show on-screen keyboard */ -"4UX-80-0Vo.title" = "Ko da yaushe a nuna madannai na allon kwamfuta"; - -/* Checkbox text to enable verbose Console logging */ -"7J6-zy-R20.title" = "Ayi amfani da shigar verbose Console"; - -/* Support button text */ -"93O-x6-RLF.label" = "Tallafi"; - -/* Download Keyboard button text */ -"CTw-kf-WNS.title" = "A sauke Madannai..."; - -/* Keyman Configuration window title */ -"F0z-JX-Cv5.title" = "Haɗa Keyman"; - -/* button text to go back to previous page */ -"JOK-JV-n8w.title" = "Baya"; - -/* Keyboards button text */ -"MPN-9N-wWc.label" = "Keyboards"; - -/* text to explain verbose Console logging option */ -"MrI-GM-7d6.title" = "Idan zabin shigar verbose na kunne, Keyman zai shigar da ayyukan da zasu taimakawa hanyoyin nemo matsala na Keyman. Za'a iya amfani da shirin Keyman wajen ganin sakonni da yawa daga Keyman. A Console, a tace a nuna dukkan sakonni daga hanyar \"Keyman\". Za'a iya tura wadannan sakonni masu yawa zuwa Tallafin Keyman idan da bukata."; - -/* button text to move forward to the next page */ -"eXr-8V-h1g.title" = "Gaba"; - -/* button text to return to the home help page */ -"fXS-aC-CMH.title" = "Babban Shafi"; - -/* Options button text */ -"frd-No-seV.label" = "Zabuka"; - -/* Installed Keyboard column heading */ -"jex-Nd-Qzg.headerCell.title" = "Madannin da aka saka"; - -/* Verbose logging tooltip text */ -"uWx-3J-U0D.ibShadowedToolTip" = "Ka kunna wannan idan kana da matsala da da wani madanni ko Keyman gabadaya."; diff --git a/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/it.lproj/preferences.strings b/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/it.lproj/preferences.strings deleted file mode 100644 index 23333e41df..0000000000 --- a/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/it.lproj/preferences.strings +++ /dev/null @@ -1,38 +0,0 @@ -/* Checkbox text to always show on-screen keyboard */ -"4UX-80-0Vo.title" = "Mostra sempre la tastiera sullo schermo"; - -/* Checkbox text to enable verbose Console logging */ -"7J6-zy-R20.title" = "Usa il log della console prolissa"; - -/* Support button text */ -"93O-x6-RLF.label" = "Supporto"; - -/* Download Keyboard button text */ -"CTw-kf-WNS.title" = "Scarica Tastiera..."; - -/* Keyman Configuration window title */ -"F0z-JX-Cv5.title" = "Configurazione Keyman"; - -/* button text to go back to previous page */ -"JOK-JV-n8w.title" = "Indietro"; - -/* Keyboards button text */ -"MPN-9N-wWc.label" = "Tastiere"; - -/* text to explain verbose Console logging option */ -"MrI-GM-7d6.title" = "Quando l'opzione di registrazione dettagliata è attiva, Keyman registrerà le azioni che potrebbero aiutare Keyman Supporto diagnosticare un problema. Il programma Console può essere utilizzato per vedere un registro dei messaggi da Keyman. In Console, filtrare per mostrare tutti i messaggi dal processo \"Keyman\". Questo registro può essere esportato e inviato al supporto di Keyman, se necessario."; - -/* button text to move forward to the next page */ -"eXr-8V-h1g.title" = "Avanti"; - -/* button text to return to the home help page */ -"fXS-aC-CMH.title" = "Home"; - -/* Options button text */ -"frd-No-seV.label" = "Opzioni"; - -/* Installed Keyboard column heading */ -"jex-Nd-Qzg.headerCell.title" = "Tastiera Installata"; - -/* Verbose logging tooltip text */ -"uWx-3J-U0D.ibShadowedToolTip" = "Accendi questo se hai problemi con una tastiera specifica o con Keyman in generale."; diff --git a/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/km.lproj/preferences.strings b/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/km.lproj/preferences.strings deleted file mode 100644 index fd960cc5cb..0000000000 --- a/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/km.lproj/preferences.strings +++ /dev/null @@ -1,38 +0,0 @@ -/* Checkbox text to always show on-screen keyboard */ -"4UX-80-0Vo.title" = "បង្ហាញក្ដារចុចលើអេក្រង់ជានិច្ច"; - -/* Checkbox text to enable verbose Console logging */ -"7J6-zy-R20.title" = "ប្រើកំណត់ហេតុកុងសូលលម្អិត"; - -/* Support button text */ -"93O-x6-RLF.label" = "គាំទ្រ"; - -/* Download Keyboard button text */ -"CTw-kf-WNS.title" = "ទាញយកក្ដារចុច..."; - -/* Keyman Configuration window title */ -"F0z-JX-Cv5.title" = "ការកំណត់រចនាសម្ព័ន្ធ Keyman"; - -/* button text to go back to previous page */ -"JOK-JV-n8w.title" = "ថយក្រោយ"; - -/* Keyboards button text */ -"MPN-9N-wWc.label" = "ក្ដារចុច"; - -/* text to explain verbose Console logging option */ -"MrI-GM-7d6.title" = "នៅពេលបើកជម្រើសកំណត់ហេតុលម្អិត Keyman នឹងរក្សារទុកកំណត់ហេតុសកម្មភាពដែលអាចជួយក្រុមការងារ​ Keyman វិភាគបញ្ហា។ កម្មវិធីកុងសូលអាចប្រើបើកមើលសារកំណត់ហេតុពី Keyman។ ក្នុងកុងសូល ត្រងដើម្បីបង្ហាញសារទាំងអស់ពីដំណើរការរបស់ \"Keyman\"។ បើចាំបាច់ អ្នកអាចនាំចេញ ឬផ្ញើកំណត់ហេតុនេទៅក្រុមការងារ Keyman។"; - -/* button text to move forward to the next page */ -"eXr-8V-h1g.title" = "ទៅមុខ"; - -/* button text to return to the home help page */ -"fXS-aC-CMH.title" = "ដើម"; - -/* Options button text */ -"frd-No-seV.label" = "ជម្រើស"; - -/* Installed Keyboard column heading */ -"jex-Nd-Qzg.headerCell.title" = "បានដំឡើង​ក្ដារចុច"; - -/* Verbose logging tooltip text */ -"uWx-3J-U0D.ibShadowedToolTip" = "បើកចុះ ប្រសិនបើអ្នកកំពុងមានបញ្ហាជាមួយ Keyman ឬក្ដារចុចណាមួយជាក់លាក់។"; diff --git a/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/kn.lproj/preferences.strings b/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/kn.lproj/preferences.strings deleted file mode 100644 index 8307f70406..0000000000 --- a/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/kn.lproj/preferences.strings +++ /dev/null @@ -1,38 +0,0 @@ -/* Checkbox text to always show on-screen keyboard */ -"4UX-80-0Vo.title" = "ಯಾವಾಗಲೂ ತೆರೆಯ ಮೇಲೆ ಕೀಲಿಮಣೆ ತೋರಿಸು"; - -/* Checkbox text to enable verbose Console logging */ -"7J6-zy-R20.title" = "ಹೆಚ್ಚಿನ ವಿವರಗಳನ್ನು ಕನ್ಸೋಲ್‌ನಲ್ಲಿ ದಾಖಲಿಸು"; - -/* Support button text */ -"93O-x6-RLF.label" = "ಸಹಾಯ"; - -/* Download Keyboard button text */ -"CTw-kf-WNS.title" = "ಕೀಲಿಮಣೆ ಡೌನ್ಲೋಡ್ ಮಾಡಿ..."; - -/* Keyman Configuration window title */ -"F0z-JX-Cv5.title" = "ಕೀಮ್ಯಾನ್ ಸಂರಚನೆ (ಕಾನ್ಫಿಗರೇಷನ್)"; - -/* button text to go back to previous page */ -"JOK-JV-n8w.title" = "ಹಿಂದೆ"; - -/* Keyboards button text */ -"MPN-9N-wWc.label" = "ಕೀಲಿಮಣೆಗಳು"; - -/* text to explain verbose Console logging option */ -"MrI-GM-7d6.title" = "ವರ್ಬೋಸ್ ಲಾಗಿಂಗ್ ಆಯ್ಕೆಯು ಆನ್ ಆಗಿರುವಾಗ, ಕೀಮ್ಯಾನ್ (support) ಬೆಂಬಲವು ಸಮಸ್ಯೆಯನ್ನು ಪತ್ತೆಹಚ್ಚಲು ಸಹಾಯ ಮಾಡುವ ಕ್ರಿಯೆಗಳನ್ನು ಕೀಮ್ಯಾನ್ ಲಾಗ್ ಮಾಡುತ್ತದೆ. ಕೀಮ್ಯಾನ್‌ನಿಂದ ಸಂದೇಶಗಳ ಲಾಗ್ ಅನ್ನು ನೋಡಲು ಕನ್ಸೋಲ್ ಪ್ರೋಗ್ರಾಂ ಅನ್ನು ಬಳಸಬಹುದು. ಕನ್ಸೋಲ್‌ನಲ್ಲಿ, \"ಕೀಮ್ಯಾನ್\" ಪ್ರಕ್ರಿಯೆಯಿಂದ ಎಲ್ಲಾ ಸಂದೇಶಗಳನ್ನು ತೋರಿಸಲು ಫಿಲ್ಟರ್ ಮಾಡಿ. ಅಗತ್ಯವಿದ್ದರೆ ಈ ಲಾಗ್ ಅನ್ನು ರಫ್ತು ಮಾಡಬಹುದು ಮತ್ತು ಕೀಮ್ಯಾನ್ (support) ಬೆಂಬಲಕ್ಕೆ ಕಳುಹಿಸಬಹುದು."; - -/* button text to move forward to the next page */ -"eXr-8V-h1g.title" = "ಮುಂದಕ್ಕೆ"; - -/* button text to return to the home help page */ -"fXS-aC-CMH.title" = "ಹೋಮ್"; - -/* Options button text */ -"frd-No-seV.label" = "ಆಯ್ಕೆಗಳು"; - -/* Installed Keyboard column heading */ -"jex-Nd-Qzg.headerCell.title" = "ಅನುಸ್ಥಾಪಿಸಲಾದ ಕೀಲಿಮಣೆಯನ್ನು"; - -/* Verbose logging tooltip text */ -"uWx-3J-U0D.ibShadowedToolTip" = "ನಿರ್ದಿಷ್ಟ ಕೀಲಿಮಣೆ ಅಥವಾ ಸಾಮಾನ್ಯವಾಗಿ ಕೀಮ್ಯಾನ್‌ನೊಂದಿಗೆ ನೀವು ಸಮಸ್ಯೆಗಳನ್ನು ಹೊಂದಿದ್ದರೆ, ಇದನ್ನು ಆನ್ ಮಾಡಿ."; diff --git a/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/nl.lproj/preferences.strings b/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/nl.lproj/preferences.strings deleted file mode 100644 index 1aae254502..0000000000 --- a/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/nl.lproj/preferences.strings +++ /dev/null @@ -1,38 +0,0 @@ -/* Checkbox text to always show on-screen keyboard */ -"4UX-80-0Vo.title" = "Altijd het schermtoetsenbord weergeven"; - -/* Checkbox text to enable verbose Console logging */ -"7J6-zy-R20.title" = "Gebruik verbose console logging"; - -/* Support button text */ -"93O-x6-RLF.label" = "Ondersteuning"; - -/* Download Keyboard button text */ -"CTw-kf-WNS.title" = "Download toetsenbord..."; - -/* Keyman Configuration window title */ -"F0z-JX-Cv5.title" = "Sleutelman configuratie"; - -/* button text to go back to previous page */ -"JOK-JV-n8w.title" = "Achterzijde"; - -/* Keyboards button text */ -"MPN-9N-wWc.label" = "Keyboards"; - -/* text to explain verbose Console logging option */ -"MrI-GM-7d6.title" = "Als de uitgebreide logging optie is ingeschakeld, zal Keyman acties loggen die Keyman Support kunnen helpen een probleem te diagnosticeren. Het console programma kan worden gebruikt om een logboek van berichten van Keyman te zien. In de console filteren om alle berichten van het \"Keyman\"-proces te tonen. Deze log kan worden geëxporteerd en naar Keyman-ondersteuning worden verzonden indien nodig."; - -/* button text to move forward to the next page */ -"eXr-8V-h1g.title" = "Doorsturen"; - -/* button text to return to the home help page */ -"fXS-aC-CMH.title" = "Startpagina"; - -/* Options button text */ -"frd-No-seV.label" = "Instellingen"; - -/* Installed Keyboard column heading */ -"jex-Nd-Qzg.headerCell.title" = "Geïnstalleerd toetsenbord"; - -/* Verbose logging tooltip text */ -"uWx-3J-U0D.ibShadowedToolTip" = "Zet dit aan als je problemen hebt met een specifiek toetsenbord of met Keyman in het algemeen."; diff --git a/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/pl.lproj/preferences.strings b/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/pl.lproj/preferences.strings deleted file mode 100644 index b58e6e6291..0000000000 --- a/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/pl.lproj/preferences.strings +++ /dev/null @@ -1,38 +0,0 @@ -/* Checkbox text to always show on-screen keyboard */ -"4UX-80-0Vo.title" = "Zawsze pokazuj klawiaturę ekranową"; - -/* Checkbox text to enable verbose Console logging */ -"7J6-zy-R20.title" = "Użyj rejestrowania konsoli"; - -/* Support button text */ -"93O-x6-RLF.label" = "Wsparcie"; - -/* Download Keyboard button text */ -"CTw-kf-WNS.title" = "Pobierz klawiaturę..."; - -/* Keyman Configuration window title */ -"F0z-JX-Cv5.title" = "Konfiguracja Keymana"; - -/* button text to go back to previous page */ -"JOK-JV-n8w.title" = "Powrót"; - -/* Keyboards button text */ -"MPN-9N-wWc.label" = "Keyboards"; - -/* text to explain verbose Console logging option */ -"MrI-GM-7d6.title" = "Gdy włączona jest opcja rejestrowania szczegółowego, Keyman będzie rejestrować działania, które mogą pomóc w diagnozowaniu problemu przez obsługę Keyman. Program Konsoli może być używany do wyświetlania dziennika wiadomości od Keyman. W Konsoli filtr, aby wyświetlić wszystkie wiadomości z procesu \"Keyman\". Ten dziennik można wyeksportować i wysłać do obsługi Keyman w razie potrzeby."; - -/* button text to move forward to the next page */ -"eXr-8V-h1g.title" = "Przekaż"; - -/* button text to return to the home help page */ -"fXS-aC-CMH.title" = "Strona główna"; - -/* Options button text */ -"frd-No-seV.label" = "Opcje"; - -/* Installed Keyboard column heading */ -"jex-Nd-Qzg.headerCell.title" = "Zainstalowana Klawiatura"; - -/* Verbose logging tooltip text */ -"uWx-3J-U0D.ibShadowedToolTip" = "Włącz tę opcję jeśli masz problemy z określoną klawiaturą lub ogólnie z Keymanem."; diff --git a/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/pt-PT.lproj/preferences.strings b/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/pt-PT.lproj/preferences.strings deleted file mode 100644 index def43607c3..0000000000 --- a/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/pt-PT.lproj/preferences.strings +++ /dev/null @@ -1,38 +0,0 @@ -/* Checkbox text to always show on-screen keyboard */ -"4UX-80-0Vo.title" = "Sempre mostrar o teclado na tela"; - -/* Checkbox text to enable verbose Console logging */ -"7J6-zy-R20.title" = "Usar registro do Console detalhado"; - -/* Support button text */ -"93O-x6-RLF.label" = "Suporte"; - -/* Download Keyboard button text */ -"CTw-kf-WNS.title" = "Baixar teclado..."; - -/* Keyman Configuration window title */ -"F0z-JX-Cv5.title" = "Configuração do Keyman "; - -/* button text to go back to previous page */ -"JOK-JV-n8w.title" = "Voltar"; - -/* Keyboards button text */ -"MPN-9N-wWc.label" = "Teclados"; - -/* text to explain verbose Console logging option */ -"MrI-GM-7d6.title" = "Quando a opção de registro detalhada estiver ativada, o Keyman irá registrar ações que podem ajudar o suporte ao Keyman a diagnosticar um problema. O programa Console pode ser usado para ver um registro de mensagens do Keyman. Em Console, filtro para mostrar todas as mensagens do processo \"Keyman\". Este log pode ser exportado e enviado para o suporte a Keyman, se necessário."; - -/* button text to move forward to the next page */ -"eXr-8V-h1g.title" = "Avançar"; - -/* button text to return to the home help page */ -"fXS-aC-CMH.title" = "Residencial"; - -/* Options button text */ -"frd-No-seV.label" = "Opções"; - -/* Installed Keyboard column heading */ -"jex-Nd-Qzg.headerCell.title" = "Teclado instalado"; - -/* Verbose logging tooltip text */ -"uWx-3J-U0D.ibShadowedToolTip" = "Ative isso se você estiver tendo problemas com um teclado específico ou com o Keyman em geral."; diff --git a/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/ru.lproj/preferences.strings b/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/ru.lproj/preferences.strings deleted file mode 100644 index 24b4393b03..0000000000 --- a/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/ru.lproj/preferences.strings +++ /dev/null @@ -1,38 +0,0 @@ -/* Checkbox text to always show on-screen keyboard */ -"4UX-80-0Vo.title" = "Всегда показывать экранную клавиатуру"; - -/* Checkbox text to enable verbose Console logging */ -"7J6-zy-R20.title" = "Использовать подробное ведение журнала Консоли"; - -/* Support button text */ -"93O-x6-RLF.label" = "Поддержка"; - -/* Download Keyboard button text */ -"CTw-kf-WNS.title" = "Скачать клавиатуру..."; - -/* Keyman Configuration window title */ -"F0z-JX-Cv5.title" = "Настройки Keyman"; - -/* button text to go back to previous page */ -"JOK-JV-n8w.title" = "Назад"; - -/* Keyboards button text */ -"MPN-9N-wWc.label" = "Keyboards"; - -/* text to explain verbose Console logging option */ -"MrI-GM-7d6.title" = "Когда включена опция ведения подробного журнала, Keyman будет записывать действия, которые могут помочь в диагностировании проблемы с помощью Keyman Support. Программа консоли может быть использована для просмотра журнала сообщений от Keyman. В консоли фильтровать для показа всех сообщений из процесса \"Keyman\". Этот журнал можно экспортировать и при необходимости отправлять в службу поддержки Keyman."; - -/* button text to move forward to the next page */ -"eXr-8V-h1g.title" = "Вперед"; - -/* button text to return to the home help page */ -"fXS-aC-CMH.title" = "Домашний"; - -/* Options button text */ -"frd-No-seV.label" = "Параметры"; - -/* Installed Keyboard column heading */ -"jex-Nd-Qzg.headerCell.title" = "Установленная клавиатура"; - -/* Verbose logging tooltip text */ -"uWx-3J-U0D.ibShadowedToolTip" = "Включите это, если у вас возникли проблемы с определенной клавиатурой или с Keyman в целом."; diff --git a/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/sv.lproj/preferences.strings b/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/sv.lproj/preferences.strings deleted file mode 100644 index 88d3107cba..0000000000 --- a/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/sv.lproj/preferences.strings +++ /dev/null @@ -1,38 +0,0 @@ -/* Checkbox text to always show on-screen keyboard */ -"4UX-80-0Vo.title" = "Visa alltid skärmtangentbord"; - -/* Checkbox text to enable verbose Console logging */ -"7J6-zy-R20.title" = "Använd verbose Console-loggning"; - -/* Support button text */ -"93O-x6-RLF.label" = "Stöd"; - -/* Download Keyboard button text */ -"CTw-kf-WNS.title" = "Ladda ner tangentbord..."; - -/* Keyman Configuration window title */ -"F0z-JX-Cv5.title" = "Keyman konfiguration"; - -/* button text to go back to previous page */ -"JOK-JV-n8w.title" = "Tillbaka"; - -/* Keyboards button text */ -"MPN-9N-wWc.label" = "Keyboards"; - -/* text to explain verbose Console logging option */ -"MrI-GM-7d6.title" = "När verbose loggning alternativet är på, kommer Keyman logga åtgärder som kan hjälpa Keyman Support diagnostisera ett problem. Programmet Konsol kan användas för att se en logg av meddelanden från Keyman. I Console, filter för att visa alla meddelanden från \"Keyman\" processen. Denna logg kan exporteras och skickas till Keyman support om det behövs."; - -/* button text to move forward to the next page */ -"eXr-8V-h1g.title" = "Framåt"; - -/* button text to return to the home help page */ -"fXS-aC-CMH.title" = "Hem"; - -/* Options button text */ -"frd-No-seV.label" = "Alternativ"; - -/* Installed Keyboard column heading */ -"jex-Nd-Qzg.headerCell.title" = "Installerat tangentbord"; - -/* Verbose logging tooltip text */ -"uWx-3J-U0D.ibShadowedToolTip" = "Aktivera detta om du har problem med ett specifikt tangentbord eller med Keyman i allmänhet."; diff --git a/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/uk.lproj/preferences.strings b/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/uk.lproj/preferences.strings deleted file mode 100644 index 040cb82624..0000000000 --- a/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/uk.lproj/preferences.strings +++ /dev/null @@ -1,38 +0,0 @@ -/* Checkbox text to always show on-screen keyboard */ -"4UX-80-0Vo.title" = "Завжди показувати на екранній клавіатурі"; - -/* Checkbox text to enable verbose Console logging */ -"7J6-zy-R20.title" = "Використати докладне ведення журналу"; - -/* Support button text */ -"93O-x6-RLF.label" = "Підтримка"; - -/* Download Keyboard button text */ -"CTw-kf-WNS.title" = "Завантажити клавіатуру..."; - -/* Keyman Configuration window title */ -"F0z-JX-Cv5.title" = "Налаштування Keyman"; - -/* button text to go back to previous page */ -"JOK-JV-n8w.title" = "Відмінити"; - -/* Keyboards button text */ -"MPN-9N-wWc.label" = "Keyboards"; - -/* text to explain verbose Console logging option */ -"MrI-GM-7d6.title" = "Коли відбувається докладне ведення журналу, Keyman буде журналювати, які можуть допомогти Keyman підтримувати проблему. Програма Консолі може бути використана щоб побачити журнал повідомлень з Keyman. У Console, фільтр для показу всіх повідомлень з процесу \"Keyman\". За необхідності, цей журнал можна експортувати та відправляти в підтримку Keyman."; - -/* button text to move forward to the next page */ -"eXr-8V-h1g.title" = "Переслати"; - -/* button text to return to the home help page */ -"fXS-aC-CMH.title" = "Домашній екран"; - -/* Options button text */ -"frd-No-seV.label" = "Опції"; - -/* Installed Keyboard column heading */ -"jex-Nd-Qzg.headerCell.title" = "Встановлена клавіатура"; - -/* Verbose logging tooltip text */ -"uWx-3J-U0D.ibShadowedToolTip" = "Увімкніть це, якщо у вас виникають проблеми з певною клавіатурою або з Keyman загалом."; diff --git a/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/vi.lproj/preferences.strings b/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/vi.lproj/preferences.strings deleted file mode 100644 index f99aa6f525..0000000000 --- a/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/vi.lproj/preferences.strings +++ /dev/null @@ -1,38 +0,0 @@ -/* Checkbox text to always show on-screen keyboard */ -"4UX-80-0Vo.title" = "Luôn hiện bàn phím ảo"; - -/* Checkbox text to enable verbose Console logging */ -"7J6-zy-R20.title" = "Chọn verbose Console logging"; - -/* Support button text */ -"93O-x6-RLF.label" = "Hỗ trợ"; - -/* Download Keyboard button text */ -"CTw-kf-WNS.title" = "Tải về bàn phím..."; - -/* Keyman Configuration window title */ -"F0z-JX-Cv5.title" = "Cấu hình Keyman"; - -/* button text to go back to previous page */ -"JOK-JV-n8w.title" = "Quay lại"; - -/* Keyboards button text */ -"MPN-9N-wWc.label" = "Bàn phím"; - -/* text to explain verbose Console logging option */ -"MrI-GM-7d6.title" = "Khi tuỳ chọn ghi nhật ký chi tiết được bật, Keyman sẽ ghi các hành động có thể giúp Bộ phận Hỗ trợ Keyman chẩn đoán sự cố. Chương trình Console có thể được sử dụng để xem nhật ký tin nhắn từ Keyman. Trong Console, bộ lọc để hiển thị tất cả tin nhắn từ quá trình \"Keyman\". Nhật ký này có thể được xuất khẩu và gửi cho Bộ phận Hỗ trợ Keyman nếu cần."; - -/* button text to move forward to the next page */ -"eXr-8V-h1g.title" = "Chuyển tiếp"; - -/* button text to return to the home help page */ -"fXS-aC-CMH.title" = "Trang chủ"; - -/* Options button text */ -"frd-No-seV.label" = "Tùy chỉnh"; - -/* Installed Keyboard column heading */ -"jex-Nd-Qzg.headerCell.title" = "Bàn phím được tải về"; - -/* Verbose logging tooltip text */ -"uWx-3J-U0D.ibShadowedToolTip" = "Mở cái này khi bạn có khó khăn với một bàn phím cụ thể nói riêng hoặc với Keyman nói chung."; diff --git a/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/zh-Hans.lproj/preferences.strings b/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/zh-Hans.lproj/preferences.strings deleted file mode 100644 index f0a5d7d0a8..0000000000 --- a/mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/zh-Hans.lproj/preferences.strings +++ /dev/null @@ -1,38 +0,0 @@ -/* Checkbox text to always show on-screen keyboard */ -"4UX-80-0Vo.title" = "总是在屏幕上显示键盘"; - -/* Checkbox text to enable verbose Console logging */ -"7J6-zy-R20.title" = "使用详细的控制台日志"; - -/* Support button text */ -"93O-x6-RLF.label" = "支持"; - -/* Download Keyboard button text */ -"CTw-kf-WNS.title" = "下载键盘..."; - -/* Keyman Configuration window title */ -"F0z-JX-Cv5.title" = "Keyman 配置"; - -/* button text to go back to previous page */ -"JOK-JV-n8w.title" = "返回"; - -/* Keyboards button text */ -"MPN-9N-wWc.label" = "键盘"; - -/* text to explain verbose Console logging option */ -"MrI-GM-7d6.title" = "当详细日志选项开启时,Keyman 将记录可能有助于 Keyman 支持诊断问题的动作。控制台程序可以用来查看来自 Keyman 的消息日志。在控制台,过滤后可显示来自\"Keyman\"进程的所有消息。此日志可导出,且可在需要时将其发送至 Keyman 支持。"; - -/* button text to move forward to the next page */ -"eXr-8V-h1g.title" = "前进"; - -/* button text to return to the home help page */ -"fXS-aC-CMH.title" = "主页"; - -/* Options button text */ -"frd-No-seV.label" = "选项"; - -/* Installed Keyboard column heading */ -"jex-Nd-Qzg.headerCell.title" = "已安装的键盘"; - -/* Verbose logging tooltip text */ -"uWx-3J-U0D.ibShadowedToolTip" = "如果特定的键盘或 Keyman 中出现问题,请打开它。"; diff --git a/mac/Keyman4MacIM/Keyman4MacIM/KMDownloadKeyboard/KMDownloadKBWindowController.h b/mac/Keyman4MacIM/Keyman4MacIM/KMDownloadKeyboard/KMDownloadKBWindowController.h deleted file mode 100644 index 6b82fad59d..0000000000 --- a/mac/Keyman4MacIM/Keyman4MacIM/KMDownloadKeyboard/KMDownloadKBWindowController.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// KMDownloadKBWindowController.h -// Keyman4MacIM -// -// Created by Serkan Kurt on 18/05/2015. -// Copyright (c) 2017 SIL International. All rights reserved. -// - -#import -#import - -@interface KMDownloadKBWindowController : NSWindowController - -@end diff --git a/mac/Keyman4MacIM/Keyman4MacIM/KMDownloadKeyboard/KMDownloadKBWindowController.m b/mac/Keyman4MacIM/Keyman4MacIM/KMDownloadKeyboard/KMDownloadKBWindowController.m deleted file mode 100644 index 3cfcc1b1d8..0000000000 --- a/mac/Keyman4MacIM/Keyman4MacIM/KMDownloadKeyboard/KMDownloadKBWindowController.m +++ /dev/null @@ -1,101 +0,0 @@ -// -// KMDownloadKBWindowController.m -// Keyman4MacIM -// -// Created by Serkan Kurt on 18/05/2015. -// Copyright (c) 2018 SIL International. All rights reserved. -// - -#import "KMDownloadKBWindowController.h" -#import "KMInputMethodAppDelegate.h" -#import "KMLogs.h" - -@interface KMDownloadKBWindowController () -@property (nonatomic, weak) IBOutlet WebView *webView; -@end - -@implementation KMDownloadKBWindowController - -- (KMInputMethodAppDelegate *)AppDelegate { - return (KMInputMethodAppDelegate *)[NSApp delegate]; -} - -- (void)windowDidLoad { - [super windowDidLoad]; - - [self.webView setFrameLoadDelegate:(id)self]; - [self.webView setGroupName:@"KMDownloadKB"]; - [self.webView setPolicyDelegate:(id)self]; - - NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"]; - KeymanVersionInfo keymanVersionInfo = [[self AppDelegate] versionInfo]; - NSString *url = [NSString stringWithFormat:@"https://%@/go/macos/14.0/download-keyboards/?version=%@", keymanVersionInfo.keymanCom, version]; - - os_log_debug([KMLogs uiLog], "KMDownloadKBWindowController opening url = %{public}@, version = '%{public}@'", url, version); - [self.webView.mainFrame loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:url]]]; -} - -- (void)webView:(WebView *)sender decidePolicyForNewWindowAction:(NSDictionary *)actionInformation request:(NSURLRequest *)request newFrameName:(NSString *)frameName decisionListener:(id)listener { - [[NSWorkspace sharedWorkspace] openURL:[actionInformation objectForKey:WebActionOriginalURLKey]]; - [listener ignore]; -} - -- (void)webView:(WebView *)webView decidePolicyForNavigationAction:(NSDictionary *)actionInformation request:(NSURLRequest *)request frame:(WebFrame *)frame decisionListener:(id)listener { - NSString* url = [[request URL] absoluteString]; - os_log_debug([KMLogs uiLog], "decidePolicyForNavigationAction, navigating to %{public}@", url); - - // The pattern for matching links matches work in #3602 - NSString* urlPathMatchKeyboardsInstall = @"^http(?:s)?://keyman(?:-staging)?\\.com(?:\\.localhost)?/keyboards/install/([^?/]+)(?:\\?(.+))?$"; - // e.g. https://keyman.com/keyboards/install/foo - NSString* urlPathMatchKeyboardsRoot = @"^http(?:s)?://keyman(?:-staging)?\\.com(?:\\.localhost)?/keyboards([/?].*)?$"; - // http://keyman.com.localhost/keyboards/foo - NSString* urlPathMatchKeyboardsGo = @"^http(?:s)?://keyman(?:-staging)?\\.com(?:\\.localhost)?/go/macos/[^/]+/download-keyboards"; - // https://keyman-staging.com/go/macos/14.0/download-keyboards?version=14.0.146.0 - NSRange range = NSMakeRange(0, url.length); - - NSError* error; - NSRegularExpression* regexInstall = [NSRegularExpression regularExpressionWithPattern: urlPathMatchKeyboardsInstall options: 0 error: &error]; - NSRegularExpression* regexRoot = [NSRegularExpression regularExpressionWithPattern: urlPathMatchKeyboardsRoot options: 0 error: &error]; - NSRegularExpression* regexGo = [NSRegularExpression regularExpressionWithPattern: urlPathMatchKeyboardsGo options: 0 error: &error]; - - NSArray* matchesInstall = [regexInstall matchesInString:url options:0 range:range]; - - if(matchesInstall.count > 0) { - os_log_debug([KMLogs uiLog], "Delegating download to app delegate."); - [listener ignore]; - NSTextCheckingResult* match = (NSTextCheckingResult*) matchesInstall[0]; - NSString* matchKeyboardId = [url substringWithRange:[match rangeAtIndex:1]]; - // Install keyboard link - [self.AppDelegate downloadKeyboardFromKeyboardId:matchKeyboardId]; - //[self.AppDelegate processURL:url]; - } - else if([regexRoot numberOfMatchesInString:url options:0 range:range] > 0 || - [regexGo numberOfMatchesInString:url options:0 range:range] > 0) { - // allow https://keyman.com/keyboards* to go through - // allow https://keyman.com/go/macos/download-keyboards to go through - os_log_debug([KMLogs uiLog], "Accepting link in this browser."); - [listener use]; - } - else if([url startsWith:@"keyman:"]) { - if ([url startsWith:@"keyman:link?url="]) - { - os_log_debug([KMLogs uiLog], "Opening keyman:link URL in default browser: %@", url); - [listener ignore]; - url = [request.URL.absoluteString substringFromIndex:[@"keyman:link?url=" length]]; - [[NSWorkspace sharedWorkspace] openURL: [[NSURL alloc] initWithString:url]]; - } - else { - os_log_debug([KMLogs uiLog], "Delegating download to app delegate."); - [listener ignore]; - [self.AppDelegate processURL:url]; - } - } - else - { - // Open in external browser - os_log_debug([KMLogs uiLog], "Opening URL in default browser: %@", url); - [listener ignore]; - [[NSWorkspace sharedWorkspace] openURL: [[NSURL alloc] initWithString:url]]; - } -} -@end diff --git a/mac/Keyman4MacIM/Keyman4MacIM/KMDownloadKeyboard/KMDownloadKBWindowController.xib b/mac/Keyman4MacIM/Keyman4MacIM/KMDownloadKeyboard/KMDownloadKBWindowController.xib deleted file mode 100644 index 5377f29425..0000000000 --- a/mac/Keyman4MacIM/Keyman4MacIM/KMDownloadKeyboard/KMDownloadKBWindowController.xib +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/Base.lproj/KMInfoWindowController.xib b/mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/Base.lproj/KMInfoWindowController.xib deleted file mode 100644 index ed3e50a4cb..0000000000 --- a/mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/Base.lproj/KMInfoWindowController.xib +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/KMInfoWindowController.h b/mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/KMInfoWindowController.h deleted file mode 100644 index ea89b0cb19..0000000000 --- a/mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/KMInfoWindowController.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// KMInfoWindowController.h -// Keyman4MacIM -// -// Created by Serkan Kurt on 9/07/2015. -// Copyright (c) 2017 SIL International. All rights reserved. -// - -#import - -@interface KMInfoWindowController : NSWindowController - -@property (nonatomic, strong) NSString *packagePath; - -@end diff --git a/mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/KMInfoWindowController.m b/mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/KMInfoWindowController.m deleted file mode 100644 index 32a8377b64..0000000000 --- a/mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/KMInfoWindowController.m +++ /dev/null @@ -1,227 +0,0 @@ -// -// KMInfoWindowController.m -// Keyman4MacIM -// -// Created by Serkan Kurt on 9/07/2015. -// Copyright (c) 2017 SIL International. All rights reserved. -// - -#import "KMInfoWindowController.h" -#import "KMInputMethodAppDelegate.h" -#import "KMPackageInfo.h" -#import "KMKeyboardInfo.h" -#import "KMLogs.h" -#import - -@interface KMInfoWindowController () -@property (nonatomic, weak) IBOutlet NSImageView *imageView; -@property (nonatomic, weak) IBOutlet NSTabView *tabView; -@property (nonatomic, weak) IBOutlet WebView *detailsView; -@property (nonatomic, weak) IBOutlet WebView *readmeView; -@property (nonatomic, strong) KMPackageInfo *packageInfo; -@property (nonatomic, strong) NSTabViewItem *readMeTab; -@end - -@implementation KMInfoWindowController - -- (KMInputMethodAppDelegate *)AppDelegate { - return (KMInputMethodAppDelegate *)[NSApp delegate]; -} - -- (void)windowDidLoad { - [super windowDidLoad]; - - [self.tabView setDelegate:self]; - [self.detailsView setFrameLoadDelegate:(id)self]; - [self.detailsView setPolicyDelegate:(id)self]; - [self.readmeView setFrameLoadDelegate:(id)self]; - [self.readmeView setPolicyDelegate:(id)self]; -} - -// TODO: rename, refactor, reset PackageInfo directly rather than making getter do it? -- (void)setPackagePath:(NSString *)packagePath { - _packagePath = packagePath; - _packageInfo = nil; - [self.tabView selectTabViewItemAtIndex:0]; - if (packagePath != nil && packagePath.length) { - NSString *imgName = self.packageInfo.graphicFilename; - if (imgName != nil) { - NSString *imgFile = [packagePath stringByAppendingPathComponent:imgName]; - NSImage *img = [[NSImage alloc] initWithContentsOfFile:imgFile]; - [self.imageView setImage:img]; - } - else { - [self.imageView setImage:[NSImage imageNamed:@"SideImage.bmp"]]; - } - - NSString *detailsHtml = [self detailsHtml]; - if (detailsHtml != nil) - [self.detailsView.mainFrame loadHTMLString:detailsHtml baseURL:[[NSBundle mainBundle] resourceURL]]; - else - [self.detailsView.mainFrame loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"about:blank"]]]; - - NSString *readmeFilename = self.packageInfo.readmeFilename; - if (readmeFilename != nil) { - [self.readmeView.mainFrame loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[packagePath stringByAppendingPathComponent:readmeFilename]]]]; - if (_readMeTab != nil && ![self.tabView.tabViewItems containsObject:_readMeTab]) { - [self.tabView addTabViewItem:_readMeTab]; - _readMeTab = nil; - } - } - else { - [self.readmeView.mainFrame loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"about:blank"]]]; - if ([self.tabView.tabViewItems count] > 1) { - _readMeTab = [self.tabView tabViewItemAtIndex:1]; - [self.tabView removeTabViewItem:_readMeTab]; - } - } - } -} - -- (BOOL)tabView:(NSTabView *)tabView shouldSelectTabViewItem:(NSTabViewItem *)tabViewItem { - return YES; -} - -// TODO: refactor: any reason for this to be HTML? hard to read stringWithFormat applied to template with 16 arguments -- (NSString *)detailsHtml { - - @try { - NSString *htmlFormat = - @"" - "" - "" - "Keyman" - "" - "" - "" - "" - "

%@

" - "
" - "
" - "
" - "" - "
Scan this code to load this keyboard on another device or " - "share online
" - "
" - "

%@


" - "%@" - "
" - "

%@


" - "%@" - "
" - "

%@

%@


" - "

%@

%@


" - "

%@

%@


" - "

%@

%@

" - "
" - "" - ""; - - NSString *pBodyFormat = @"

%@


"; - NSMutableString *keyboardString = [NSMutableString stringWithString:@""]; - - if (self.packageInfo.keyboards.count) { - for (KMKeyboardInfo *keyboard in self.packageInfo.keyboards) { - [keyboardString appendString:[NSString stringWithFormat:pBodyFormat, keyboard.name]]; - } - } else { - keyboardString = [NSMutableString stringWithString:@"


"]; - } - - NSArray *fonts = self.packageInfo.fonts; - NSMutableString *fontsStr = [NSMutableString stringWithString:@""]; - - if (fonts != nil && fonts.count) { - for (NSString *font in fonts) { - [fontsStr appendString:[NSString stringWithFormat:pBodyFormat, font]]; - } - } - else { - fontsStr = [NSMutableString stringWithString:@"


"]; - } - - NSString *linkFormat = @"%@"; - NSString *packageId = [self.packagePath lastPathComponent]; - - KeymanVersionInfo keymanVersionInfo = [[self AppDelegate] versionInfo]; - NSString *shareUrl = [NSString stringWithFormat:@"https://%@/go/keyboard/%@/share", keymanVersionInfo.keymanCom, packageId]; - - NSString *name = self.packageInfo.packageName; - if (name == nil) - name = @"Unknown Keyboard Package"; - - NSString *version = self.packageInfo.packageVersion; - if (version == nil) - version = @""; - - NSString *authorV1 = self.packageInfo.authorName; - NSString *authorV2 = self.packageInfo.authorUrl; - NSString *author = @""; - if (authorV1.length && authorV2.length) - author = [NSString stringWithFormat:linkFormat, authorV2, authorV1]; - else if (authorV1.length) - author = authorV1; - else if (authorV2.length) - author = [NSString stringWithFormat:linkFormat, authorV2, authorV2]; - - NSString *website = @""; - if (self.packageInfo.website.length) - website = [NSString stringWithFormat:linkFormat, self.packageInfo.website, self.packageInfo.website]; - - NSString *copyright = @""; - if (self.packageInfo.copyright.length) - copyright = self.packageInfo.copyright; - - // get localized label strings - NSString *keyboardsLabel = NSLocalizedString(@"keyboards-label", nil); - NSString *fontsLabel = NSLocalizedString(@"fonts-label", nil); - NSString *packageVersionLabel = NSLocalizedString(@"package-version-label", nil); - NSString *authorLabel = NSLocalizedString(@"author-label", nil); - NSString *websiteLabel = NSLocalizedString(@"website-label", nil); - NSString *copyrightLabel = NSLocalizedString(@"copyright-label", nil); - - - NSString *htmlStr = [NSString stringWithFormat:htmlFormat, name, shareUrl, shareUrl, - keyboardsLabel, keyboardString, fontsLabel, fontsStr, - packageVersionLabel, version, authorLabel, author, - websiteLabel, website, copyrightLabel, copyright]; - - return htmlStr; - } - @catch (NSException *e) { - os_log_error([KMLogs uiLog], "Error = %@", e.description); - return nil; - } -} - -- (KMPackageInfo *)packageInfo { - if(_packageInfo == nil) { - _packageInfo = [self.AppDelegate loadPackageInfo:self.packagePath]; - } - - return _packageInfo; -} - -- (void)webView:(WebView *)webView decidePolicyForNavigationAction:(NSDictionary *)actionInformation request:(NSURLRequest *)request frame:(WebFrame *)frame decisionListener:(id)listener { - NSNumber *navType = [actionInformation objectForKey:WebActionNavigationTypeKey]; - if (navType.integerValue == WebNavigationTypeLinkClicked && ![request.URL isFileURL]) { - NSString *urlStr = [[request URL] absoluteString]; - if ([urlStr startsWith:@"link:"]) - urlStr = [urlStr substringFromIndex:5]; - - [[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:urlStr]]; - } - else - [listener use]; -} - -@end diff --git a/mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/am.lproj/KMInfoWindowController.strings b/mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/am.lproj/KMInfoWindowController.strings deleted file mode 100644 index deaa6e1bcc..0000000000 --- a/mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/am.lproj/KMInfoWindowController.strings +++ /dev/null @@ -1,8 +0,0 @@ -/* Package Information window title */ -"F0z-JX-Cv5.title" = "የፓኬጅ መረጃዎች"; - -/* button text to show Details */ -"Fvy-XJ-s38.label" = "ዝርዝሮች"; - -/* button text to show Read Me */ -"waA-IW-Qyn.label" = "የሚነበብ"; diff --git a/mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/cs.lproj/KMInfoWindowController.strings b/mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/cs.lproj/KMInfoWindowController.strings deleted file mode 100644 index 4c9f26c0f8..0000000000 --- a/mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/cs.lproj/KMInfoWindowController.strings +++ /dev/null @@ -1,8 +0,0 @@ -/* Package Information window title */ -"F0z-JX-Cv5.title" = "Informace o balíčku"; - -/* button text to show Details */ -"Fvy-XJ-s38.label" = "Detaily"; - -/* button text to show Read Me */ -"waA-IW-Qyn.label" = "Číst mě"; diff --git a/mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/el.lproj/KMInfoWindowController.strings b/mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/el.lproj/KMInfoWindowController.strings deleted file mode 100644 index af78cc7f5f..0000000000 --- a/mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/el.lproj/KMInfoWindowController.strings +++ /dev/null @@ -1,8 +0,0 @@ -/* Package Information window title */ -"F0z-JX-Cv5.title" = "Πληροφορίες πακέτου"; - -/* button text to show Details */ -"Fvy-XJ-s38.label" = "Λεπτομέρειες"; - -/* button text to show Read Me */ -"waA-IW-Qyn.label" = "Read Me"; diff --git a/mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/en.lproj/KMInfoWindowController.strings b/mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/en.lproj/KMInfoWindowController.strings deleted file mode 100644 index 98bfd7086a..0000000000 --- a/mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/en.lproj/KMInfoWindowController.strings +++ /dev/null @@ -1,9 +0,0 @@ - -/* Package Information window title */ -"F0z-JX-Cv5.title" = "Package Information"; - -/* button text to show Details */ -"Fvy-XJ-s38.label" = "Details"; - -/* button text to show Read Me */ -"waA-IW-Qyn.label" = "Read Me"; diff --git a/mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/es-419.lproj/KMInfoWindowController.strings b/mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/es-419.lproj/KMInfoWindowController.strings deleted file mode 100644 index 73e939c51e..0000000000 --- a/mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/es-419.lproj/KMInfoWindowController.strings +++ /dev/null @@ -1,8 +0,0 @@ -/* Package Information window title */ -"F0z-JX-Cv5.title" = "Información del paquete"; - -/* button text to show Details */ -"Fvy-XJ-s38.label" = "Detalles"; - -/* button text to show Read Me */ -"waA-IW-Qyn.label" = "Léame"; diff --git a/mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/es.lproj/KMInfoWindowController.strings b/mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/es.lproj/KMInfoWindowController.strings deleted file mode 100644 index d300224130..0000000000 --- a/mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/es.lproj/KMInfoWindowController.strings +++ /dev/null @@ -1,8 +0,0 @@ -/* Package Information window title */ -"F0z-JX-Cv5.title" = "Información del Paquete"; - -/* button text to show Details */ -"Fvy-XJ-s38.label" = "Detalles"; - -/* button text to show Read Me */ -"waA-IW-Qyn.label" = "Léame"; diff --git a/mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/ff-ng.lproj/KMInfoWindowController.strings b/mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/ff-ng.lproj/KMInfoWindowController.strings deleted file mode 100644 index 84fb8acc10..0000000000 --- a/mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/ff-ng.lproj/KMInfoWindowController.strings +++ /dev/null @@ -1,8 +0,0 @@ -/* Package Information window title */ -"F0z-JX-Cv5.title" = "Humpito Haɓɓere"; - -/* button text to show Details */ -"Fvy-XJ-s38.label" = "Bayanuji gootel gootel"; - -/* button text to show Read Me */ -"waA-IW-Qyn.label" = "Rid Mi"; diff --git a/mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/ff.lproj/KMInfoWindowController.strings b/mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/ff.lproj/KMInfoWindowController.strings deleted file mode 100644 index e269d2f129..0000000000 --- a/mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/ff.lproj/KMInfoWindowController.strings +++ /dev/null @@ -1,8 +0,0 @@ -/* Package Information window title */ -"F0z-JX-Cv5.title" = "Humpito Haɓɓere"; - -/* button text to show Details */ -"Fvy-XJ-s38.label" = "Cariiɗe"; - -/* button text to show Read Me */ -"waA-IW-Qyn.label" = "Tar Ɗuum"; diff --git a/mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/ha.lproj/KMInfoWindowController.strings b/mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/ha.lproj/KMInfoWindowController.strings deleted file mode 100644 index 97b0e4b4a9..0000000000 --- a/mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/ha.lproj/KMInfoWindowController.strings +++ /dev/null @@ -1,8 +0,0 @@ -/* Package Information window title */ -"F0z-JX-Cv5.title" = "Package Information"; - -/* button text to show Details */ -"Fvy-XJ-s38.label" = "Cikakken bayani"; - -/* button text to show Read Me */ -"waA-IW-Qyn.label" = "Karanta ni"; diff --git a/mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/it.lproj/KMInfoWindowController.strings b/mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/it.lproj/KMInfoWindowController.strings deleted file mode 100644 index 3d2755066c..0000000000 --- a/mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/it.lproj/KMInfoWindowController.strings +++ /dev/null @@ -1,8 +0,0 @@ -/* Package Information window title */ -"F0z-JX-Cv5.title" = "Informazioni pacchetto"; - -/* button text to show Details */ -"Fvy-XJ-s38.label" = "Dettagli"; - -/* button text to show Read Me */ -"waA-IW-Qyn.label" = "Leggermi"; diff --git a/mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/km.lproj/KMInfoWindowController.strings b/mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/km.lproj/KMInfoWindowController.strings deleted file mode 100644 index edd32b1829..0000000000 --- a/mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/km.lproj/KMInfoWindowController.strings +++ /dev/null @@ -1,8 +0,0 @@ -/* Package Information window title */ -"F0z-JX-Cv5.title" = "ព័ត៌មានកញ្ចប់"; - -/* button text to show Details */ -"Fvy-XJ-s38.label" = "លម្អិត"; - -/* button text to show Read Me */ -"waA-IW-Qyn.label" = "អានខ្ញុំ"; diff --git a/mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/kn.lproj/KMInfoWindowController.strings b/mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/kn.lproj/KMInfoWindowController.strings deleted file mode 100644 index b453ae2e7f..0000000000 --- a/mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/kn.lproj/KMInfoWindowController.strings +++ /dev/null @@ -1,8 +0,0 @@ -/* Package Information window title */ -"F0z-JX-Cv5.title" = "ಪ್ಯಾಕೇಜ್ ಮಾಹಿತಿ"; - -/* button text to show Details */ -"Fvy-XJ-s38.label" = "ವಿವರಗಳು"; - -/* button text to show Read Me */ -"waA-IW-Qyn.label" = "ಈ ಸಂದೇಶವನ್ನು ಓದಿ"; diff --git a/mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/nl.lproj/KMInfoWindowController.strings b/mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/nl.lproj/KMInfoWindowController.strings deleted file mode 100644 index e728781fa1..0000000000 --- a/mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/nl.lproj/KMInfoWindowController.strings +++ /dev/null @@ -1,8 +0,0 @@ -/* Package Information window title */ -"F0z-JX-Cv5.title" = "Package Information"; - -/* button text to show Details */ -"Fvy-XJ-s38.label" = "Beschrijving"; - -/* button text to show Read Me */ -"waA-IW-Qyn.label" = "Lees mij"; diff --git a/mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/pl.lproj/KMInfoWindowController.strings b/mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/pl.lproj/KMInfoWindowController.strings deleted file mode 100644 index 2cb2b1f075..0000000000 --- a/mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/pl.lproj/KMInfoWindowController.strings +++ /dev/null @@ -1,8 +0,0 @@ -/* Package Information window title */ -"F0z-JX-Cv5.title" = "Package Information"; - -/* button text to show Details */ -"Fvy-XJ-s38.label" = "Szczegóły"; - -/* button text to show Read Me */ -"waA-IW-Qyn.label" = "Przeczytaj mnie"; diff --git a/mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/pt-PT.lproj/KMInfoWindowController.strings b/mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/pt-PT.lproj/KMInfoWindowController.strings deleted file mode 100644 index 65f53f48d5..0000000000 --- a/mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/pt-PT.lproj/KMInfoWindowController.strings +++ /dev/null @@ -1,8 +0,0 @@ -/* Package Information window title */ -"F0z-JX-Cv5.title" = "Informação de pacote"; - -/* button text to show Details */ -"Fvy-XJ-s38.label" = "Detalhes"; - -/* button text to show Read Me */ -"waA-IW-Qyn.label" = "Me Ler"; diff --git a/mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/ru.lproj/KMInfoWindowController.strings b/mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/ru.lproj/KMInfoWindowController.strings deleted file mode 100644 index d466f39f8d..0000000000 --- a/mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/ru.lproj/KMInfoWindowController.strings +++ /dev/null @@ -1,8 +0,0 @@ -/* Package Information window title */ -"F0z-JX-Cv5.title" = "Package Information"; - -/* button text to show Details */ -"Fvy-XJ-s38.label" = "Подробности"; - -/* button text to show Read Me */ -"waA-IW-Qyn.label" = "Читать меня"; diff --git a/mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/sv.lproj/KMInfoWindowController.strings b/mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/sv.lproj/KMInfoWindowController.strings deleted file mode 100644 index 296a10433a..0000000000 --- a/mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/sv.lproj/KMInfoWindowController.strings +++ /dev/null @@ -1,8 +0,0 @@ -/* Package Information window title */ -"F0z-JX-Cv5.title" = "Package Information"; - -/* button text to show Details */ -"Fvy-XJ-s38.label" = "Detaljer"; - -/* button text to show Read Me */ -"waA-IW-Qyn.label" = "Läs mig"; diff --git a/mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/uk.lproj/KMInfoWindowController.strings b/mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/uk.lproj/KMInfoWindowController.strings deleted file mode 100644 index e887a8a345..0000000000 --- a/mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/uk.lproj/KMInfoWindowController.strings +++ /dev/null @@ -1,8 +0,0 @@ -/* Package Information window title */ -"F0z-JX-Cv5.title" = "Package Information"; - -/* button text to show Details */ -"Fvy-XJ-s38.label" = "Подробиці"; - -/* button text to show Read Me */ -"waA-IW-Qyn.label" = "Читати мене"; diff --git a/mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/vi.lproj/KMInfoWindowController.strings b/mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/vi.lproj/KMInfoWindowController.strings deleted file mode 100644 index 1a9024deec..0000000000 --- a/mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/vi.lproj/KMInfoWindowController.strings +++ /dev/null @@ -1,8 +0,0 @@ -/* Package Information window title */ -"F0z-JX-Cv5.title" = "Thông tin gói"; - -/* button text to show Details */ -"Fvy-XJ-s38.label" = "Chi tiết"; - -/* button text to show Read Me */ -"waA-IW-Qyn.label" = "Đọc tôi"; diff --git a/mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/zh-Hans.lproj/KMInfoWindowController.strings b/mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/zh-Hans.lproj/KMInfoWindowController.strings deleted file mode 100644 index 6e47b1fd05..0000000000 --- a/mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/zh-Hans.lproj/KMInfoWindowController.strings +++ /dev/null @@ -1,8 +0,0 @@ -/* Package Information window title */ -"F0z-JX-Cv5.title" = "软件包信息"; - -/* button text to show Details */ -"Fvy-XJ-s38.label" = "详细信息"; - -/* button text to show Read Me */ -"waA-IW-Qyn.label" = "说明"; diff --git a/mac/Keyman4MacIM/Keyman4MacIM/KMInputController.m b/mac/Keyman4MacIM/Keyman4MacIM/KMInputController.m index c628311b9f..ba5b89d822 100644 --- a/mac/Keyman4MacIM/Keyman4MacIM/KMInputController.m +++ b/mac/Keyman4MacIM/Keyman4MacIM/KMInputController.m @@ -146,12 +146,8 @@ KMInputMethodEventHandler* _eventHandler; - (void)menuAction:(id)sender { NSMenuItem *mItem = [sender objectForKey:kIMKCommandMenuItemName]; NSInteger itag = mItem.tag; - os_log_debug([KMLogs uiLog], "Keyman menu clicked - tag: %lu", itag); - if (itag == CONFIG_MENUITEM_TAG) { - [KMSentryHelper addUserBreadCrumb:@"menu" message:@"Configuration..."]; - [self showConfigurationWindow:sender]; - } - else if (itag == OSK_MENUITEM_TAG) { + os_log_debug([KMLogs uiLog], "Keyman menu item selected - tag: %lu", itag); + if (itag == OSK_MENUITEM_TAG) { [KMSentryHelper addUserBreadCrumb:@"menu" message:@"On-screen Keyboard"]; [KMSettingsRepository.shared writeShowOskOnActivate:YES]; os_log_debug([KMLogs oskLog], "menuAction OSK_MENUITEM_TAG, updating settings writeShowOsk to YES"); @@ -167,21 +163,4 @@ KMInputMethodEventHandler* _eventHandler; } } -- (void)showConfigurationWindow:(id)sender { - // Using `showConfigurationWindow` instead of `showPreferences:` because `showPreferences:` is missing in - // High Sierra (10.13.1 - 10.13.3). See: https://bugreport.apple.com/web/?problemID=35422518 - // rrb: where Apple's API is broken (10.13.1-10.13.3) call our workaround, otherwise, call showPreferences - u_int16_t systemVersion = [KMOSVersion SystemVersion]; - if ([KMOSVersion Version_10_13_1] <= systemVersion && systemVersion <= [KMOSVersion Version_10_13_3]) // between 10.13.1 and 10.13.3 inclusive - { - os_log_info([KMLogs uiLog], "Input Menu: calling workaround instead of showPreferences (sys ver %x)", systemVersion); - [self.appDelegate showConfigurationWindow]; // call our workaround - } - else - { - os_log_info([KMLogs uiLog], "Input Menu: calling Apple's showPreferences (sys ver %x)", systemVersion); - [self showPreferences:sender]; // call Apple API - } -} - @end diff --git a/mac/Keyman4MacIM/Keyman4MacIM/KMInputMethodAppDelegate.h b/mac/Keyman4MacIM/Keyman4MacIM/KMInputMethodAppDelegate.h index 72eb330a2e..9590418ae5 100644 --- a/mac/Keyman4MacIM/Keyman4MacIM/KMInputMethodAppDelegate.h +++ b/mac/Keyman4MacIM/Keyman4MacIM/KMInputMethodAppDelegate.h @@ -16,7 +16,6 @@ #import "KMPackageReader.h" #import "KMInputController.h" #import "KMAboutWindowController.h" -#import "KMInfoWindowController.h" #import "KMKeyboardHelpWindowController.h" #import "OSKWindowController.h" #import "NSWindow+SuppMethods.h" @@ -24,8 +23,6 @@ typedef void(^PostEventCallback)(CGEventRef eventToPost); -extern NSString *const kKeymanKeyboardDownloadCompletedNotification; - typedef struct { NSString *sentryEnvironment; NSString *versionRelease; @@ -38,13 +35,12 @@ typedef struct { } KeymanVersionInfo; // tags for default menu items, displayed whether keyboards are active or not -static const int DIVIDER_MENUITEM_TAG = -4; -static const int CONFIG_MENUITEM_TAG = -3; +static const int DIVIDER_MENUITEM_TAG = -3; static const int OSK_MENUITEM_TAG = -2; static const int ABOUT_MENUITEM_TAG = -1; // the number of menu items that do not represent active keyboards -static const int DEFAULT_KEYMAN_MENU_ITEM_COUNT = 4; +static const int DEFAULT_KEYMAN_MENU_ITEM_COUNT = 3; // the tag for the first keyboard dynamically added to the menu static const int KEYMAN_FIRST_KEYBOARD_MENUITEM_TAG = 0; @@ -71,8 +67,6 @@ static const int KEYMAN_FIRST_KEYBOARD_MENUITEM_INDEX = 0; @property (nonatomic, strong) NSImage *keyboardIcon; // TODO: refactor above properties @property (nonatomic, strong) NSString *keyboardsPath; -@property (nonatomic, strong) NSString *fontsPath; -@property (nonatomic, strong) NSMutableArray *kmxFileList; @property (nonatomic, strong) NSMutableArray *enabledKeyboards; @property (assign) int numberOfKeyboardMenuItems; @property (nonatomic, strong) NSMutableString *contextBuffer; @@ -81,49 +75,29 @@ static const int KEYMAN_FIRST_KEYBOARD_MENUITEM_INDEX = 0; @property (nonatomic, assign) CFRunLoopSourceRef runLoopEventSrc; @property (nonatomic, assign) BOOL contextChangedByLowLevelEvent; @property (nonatomic, strong) OSKWindowController *oskWindow; -@property (nonatomic, strong) NSAlert *downloadInfoView; -@property (nonatomic, strong) NSProgressIndicator *progressIndicator; @property (nonatomic, weak) KMInputController *inputController; -@property (nonatomic, strong) NSWindowController *configWindow; -@property (nonatomic, strong) NSWindowController *downloadKBWindow; @property (nonatomic, strong) KMAboutWindowController *aboutWindow; -@property (nonatomic, strong) KMInfoWindowController *infoWindow; @property (nonatomic, strong) KMKeyboardHelpWindowController *kbHelpWindow; -@property (nonatomic, strong) NSURLConnection *connection; -@property (nonatomic, strong) NSString *downloadFilename; -@property (nonatomic, strong) NSMutableData *receivedData; -@property (nonatomic, assign) NSUInteger expectedBytes; - (NSMenu *)menu; - (void)saveEnabledKeyboards; - (void)applyPersistedOptions; - (void)showAboutWindow; - (void)showOSK; -- (void)showConfigurationWindow; - (void)selectKeyboardFromMenu:(NSInteger)tag; - (void)handleKeyEvent:(NSEvent *)event; - (void)loadKeyboardFromKmxFile:(KMXFile *)kmx; - (void)resetKmx; - (NSEventModifierFlags) determineModifiers; -- (BOOL)unzipFile:(NSString *)filePath; -- (NSWindowController *)downloadKBWindow_; - (NSWindowController *)aboutWindow_; -- (NSWindowController *)infoWindow_; - (NSWindowController *)kbHelpWindow_; -- (void)processURL:(NSString*)rawUrl; -- (void)downloadKeyboardFromKeyboardId:(NSString *)keyboardId; -- (NSString *)kmxFilePathAtIndex:(NSUInteger)index; -- (NSString *)packagePathAtIndex:(NSUInteger)index; -- (NSInteger)indexForPackageFolder:(NSString *)packageFolder; - (NSString *)packageFolderFromPath:(NSString *)path; - (KMPackageInfo *)loadPackageInfo:(NSString *)path; -- (NSString *)packageNameFromPackageInfo:(NSString *)packageFolder; - (NSArray *)keyboardNamesFromFolder:(NSString *)packageFolder; - (NSString *)kvkFilePathFromFilename:(NSString *)kvkFilename; - (NSString *)oskWindowTitle; - (void)postKeyboardEventWithSource: (CGEventSourceRef)source code:(CGKeyCode) virtualKey postCallback:(PostEventCallback)postEvent; - (KeymanVersionInfo)versionInfo; -- (void)registerConfigurationWindow:(NSWindowController *)window; - (BOOL)canForceSentryEvents; @end diff --git a/mac/Keyman4MacIM/Keyman4MacIM/KMInputMethodAppDelegate.m b/mac/Keyman4MacIM/Keyman4MacIM/KMInputMethodAppDelegate.m index ef0c140f5b..878033e6b7 100644 --- a/mac/Keyman4MacIM/Keyman4MacIM/KMInputMethodAppDelegate.m +++ b/mac/Keyman4MacIM/Keyman4MacIM/KMInputMethodAppDelegate.m @@ -10,8 +10,6 @@ #import "KMInputMethodLifecycle.h" #import "KMSettingsRepository.h" #import "KMDataRepository.h" -#import "KMConfigurationWindowController.h" -#import "KMDownloadKBWindowController.h" #import "ZipArchive.h" #import "KMPackageReader.h" #import "KMPackageInfo.h" @@ -33,9 +31,6 @@ NSString *const kKeyboardsChanged = @"com.keyman.keyboards.changed"; NSString *const kAccessibilityCheckedRequest = @"com.keyman.accessibility.check.request"; NSString *const kAccessibilityRequest = @"com.keyman.accessibility.request"; -// in-app notifications -NSString *const kKeymanKeyboardDownloadCompletedNotification = @"kKeymanKeyboardDownloadCompletedNotification"; - @implementation NSString (VersionNumbers) /** * Returns a minimal version number by removing all '.0' from end of string, @@ -73,7 +68,7 @@ NSString *const kKeymanKeyboardDownloadCompletedNotification = @"kKeymanKeyboard @synthesize kvk = _kvk; @synthesize keyboardName = _keyboardName; @synthesize keyboardsPath = _keyboardsPath; -@synthesize kmxFileList = _kmxFileList; +//@synthesize kmxFileList = _kmxFileList; @synthesize selectedKeyboard = _selectedKeyboard; @synthesize enabledKeyboards = _enabledKeyboards; @synthesize contextBuffer = _contextBuffer; @@ -97,10 +92,6 @@ id _lastServerWithOSKShowing = nil; - (void)initCompletion { os_log_info([KMLogs startupLog], "initCompletionHandler method invoked"); - [[NSAppleEventManager sharedAppleEventManager] setEventHandler:self - andSelector:@selector(handleURLEvent:withReplyEvent:) - forEventClass:kInternetEventClass - andEventID:kAEGetURL]; self.lowLevelEventTap = CGEventTapCreate(kCGAnnotatedSessionEventTap, kCGHeadInsertEventTap, @@ -308,38 +299,6 @@ id _lastServerWithOSKShowing = nil; [KMSentryHelper addArchitectureTag:processorType]; } -- (void)handleURLEvent:(NSAppleEventDescriptor*)event withReplyEvent:(NSAppleEventDescriptor*)replyEvent { - - [self processURL:[[event paramDescriptorForKeyword:keyDirectObject] stringValue]]; -} - -- (void)processURL:(NSString*)rawUrl { - NSMutableString *urlStr = [NSMutableString stringWithString:rawUrl]; - [urlStr replaceOccurrencesOfString:@"keyman:" withString:@"keyman/" options:0 range:NSMakeRange(0, 7)]; - NSURL *url = [NSURL URLWithString:urlStr]; - os_log_debug([KMLogs keyboardLog], "processURL, url = %{public}@", url); - - if ([url.lastPathComponent isEqualToString:@"download"]) { - if (_connection != nil) { - os_log_debug([KMLogs keyboardLog], "Already downloading a keyboard."); - return; - } - - NSURL *downloadUrl; - NSArray *params = [[url query] componentsSeparatedByString:@"&"]; - for (NSString *value in params) { - NSUInteger index = NSNotFound; - if ((index = [value rangeOfString:@"filename="].location) != NSNotFound) - _downloadFilename = [NSString stringWithString:[value substringFromIndex:index+9]]; - else if ((index = [value rangeOfString:@"url="].location) != NSNotFound) { - NSString *urlString = [NSString stringWithString:[value substringFromIndex:index+4]]; - urlString = [urlString stringByRemovingPercentEncoding]; - downloadUrl = [NSURL URLWithString:urlString]; - } - } - } -} - + (KMInputMethodAppDelegate *)AppDelegate { return (KMInputMethodAppDelegate *)[NSApp delegate]; } @@ -557,95 +516,6 @@ CGEventRef eventTapFunction(CGEventTapProxy proxy, CGEventType type, CGEventRef return _keyboardsPath; } -- (NSArray *)kmxFileList { - if (_kmxFileList == nil) { - os_log_debug([KMLogs dataLog], "creating kmxFileList"); - NSArray *kmxFiles = [self getKmxFilesInKeyboardsDirectory]; - _kmxFileList = [[NSMutableArray alloc] initWithCapacity:0]; - NSMutableArray *others = nil; - for (NSString *filePath in kmxFiles) { - os_log_debug([KMLogs dataLog], "kmxFileList, filePath: %{public}@", filePath); - NSString *packageFolder = [self packageFolderFromPath:filePath]; - NSInteger index = [self indexForPackageFolder:packageFolder]; - if ([packageFolder isEqualToString:@"Others"]) { - if (others == nil) - others = [NSMutableArray arrayWithCapacity:0]; - [others addObject:filePath]; - } - else { - if (index >= 0) { - [[_kmxFileList objectAtIndex:index] addObject:filePath]; - } - else { - NSMutableArray *pArray = [[NSMutableArray alloc] initWithObjects:filePath, nil]; - [_kmxFileList addObject:pArray]; - } - } - } - - if (others != nil) - [_kmxFileList addObject:others]; - } - - return _kmxFileList; -} - -- (NSString *)kmxFilePathAtIndex:(NSUInteger)index { - NSUInteger x = 0; - NSUInteger len = _kmxFileList.count; - for (int i = 0; i < len; i++) { - x++; - NSArray *pArray = (NSArray *)[_kmxFileList objectAtIndex:i]; - for (NSString *path in pArray) { - if (index == x) - return path; - x++; - } - } - - return nil; -} - -- (NSString *)packagePathAtIndex:(NSUInteger)index { - NSString *packagePath = nil; - NSUInteger x = 0; - NSUInteger len = _kmxFileList.count; - for (int i = 0; i < len; i++) { - NSArray *pArray = (NSArray *)[_kmxFileList objectAtIndex:i]; - if (!pArray.count) { - i++; - x++; - continue; - } - - if (index >= x && index <= (x+pArray.count)) { - packagePath = [[pArray objectAtIndex:0] stringByDeletingLastPathComponent]; - break; - } - - x += (pArray.count+1); - } - - return packagePath; -} - -- (NSInteger)indexForPackageFolder:(NSString *)packageFolder { - NSInteger index = -1; - NSUInteger len = _kmxFileList.count; - for (int i = 0; i < len; i++) { - NSArray *pArray = (NSArray *)[_kmxFileList objectAtIndex:i]; - if (pArray.count > 0) { - NSString *packageFolder2 = [self packageFolderFromPath:[pArray objectAtIndex:0]]; - if ([packageFolder isEqualToString:packageFolder2]) { - index = i; - break; - } - } - } - - return index; -} - - (NSString *)packageFolderFromPath:(NSString *)path { NSString *packageFolder = nil; NSString *sourcePath = [self keyboardsPath]; @@ -665,19 +535,6 @@ CGEventRef eventTapFunction(CGEventTapProxy proxy, CGEventType type, CGEventRef return [self.packageReader loadPackageInfo:path]; } -- (NSString *)packageNameFromPackageInfo:(NSString *)packageFolder { - NSString *packageName = nil; - - NSString *path = [[self keyboardsPath] stringByAppendingPathComponent:packageFolder]; - KMPackageInfo *packageInfo = [self.packageReader loadPackageInfo:path]; - - if (packageInfo) { - packageName = packageInfo.packageName; - } - - return packageName; -} - - (NSArray *)keyboardNamesFromFolder:(NSString *)packageFolder { os_log_debug([KMLogs dataLog], "keyboardNamesFromFolder, folder = %{public}@", packageFolder); NSMutableArray *kbNames = [[NSMutableArray alloc] initWithCapacity:0];; @@ -841,11 +698,6 @@ CGEventRef eventTapFunction(CGEventTapProxy proxy, CGEventType type, CGEventRef } - (void)setDefaultKeymanMenuItems { - NSMenuItem *config = [self.menu itemWithTag:CONFIG_MENUITEM_TAG]; - if (config) { - [config setAction:@selector(menuAction:)]; - } - NSMenuItem *osk = [self.menu itemWithTag:OSK_MENUITEM_TAG]; if (osk) { [osk setAction:@selector(menuAction:)]; @@ -1066,17 +918,6 @@ CGEventRef eventTapFunction(CGEventTapProxy proxy, CGEventType type, CGEventRef return _oskWindow; } -- (void)showConfigurationWindow { - os_log_debug([KMLogs uiLog], "Showing config window..."); - [self.configWindow.window centerInParent]; - [self.configWindow.window makeKeyAndOrderFront:nil]; - [self.configWindow.window setLevel:NSFloatingWindowLevel]; -} - -- (void)registerConfigurationWindow:(NSWindowController *)window { - _configWindow = window; -} - - (void)showOSK { [self.oskWindow prepareToShowOsk]; [[self.oskWindow window] makeKeyAndOrderFront:nil]; @@ -1097,16 +938,6 @@ CGEventRef eventTapFunction(CGEventTapProxy proxy, CGEventType type, CGEventRef * probably be managed better. */ -- (NSWindowController *)configWindow { - if (_configWindow.window == nil) { - os_log_debug([KMLogs uiLog], "Creating config window..."); - _configWindow = [[KMConfigurationWindowController alloc] initWithWindowNibName:@"preferences"]; - [self observeCloseFor:_configWindow.window]; - } - - return _configWindow; -} - // TODO: rewrite confusing pattern, multiple methods differing only by underscore - (NSWindowController *)aboutWindow_ { return _aboutWindow; @@ -1121,19 +952,6 @@ CGEventRef eventTapFunction(CGEventTapProxy proxy, CGEventType type, CGEventRef return _aboutWindow; } -- (NSWindowController *)infoWindow_ { - return _infoWindow; -} - -- (NSWindowController *)infoWindow { - if (_infoWindow.window == nil) { - _infoWindow = [[KMInfoWindowController alloc] initWithWindowNibName:@"KMInfoWindowController"]; - [self observeCloseFor:_infoWindow.window]; - } - - return _infoWindow; -} - - (NSWindowController *)kbHelpWindow_ { return _kbHelpWindow; } @@ -1147,19 +965,6 @@ CGEventRef eventTapFunction(CGEventTapProxy proxy, CGEventType type, CGEventRef return _kbHelpWindow; } -- (NSWindowController *)downloadKBWindow_ { - return _downloadKBWindow; -} - -- (NSWindowController *)downloadKBWindow { - if (_downloadKBWindow.window == nil) { - _downloadKBWindow = [[KMDownloadKBWindowController alloc] initWithWindowNibName:@"KMDownloadKBWindowController"]; - [self observeCloseFor:_downloadKBWindow.window]; - } - - return _downloadKBWindow; -} - /* * Release windows after closing -- no need to keep them hanging about */ @@ -1173,200 +978,12 @@ CGEventRef eventTapFunction(CGEventTapProxy proxy, CGEventType type, CGEventRef - (void)windowWillClose:(NSNotification *)notification { NSWindow* window = notification.object; - if (window == _downloadKBWindow.window) { - _downloadKBWindow.window = nil; - } else if(window == _kbHelpWindow.window) { + if(window == _kbHelpWindow.window) { _kbHelpWindow.window = nil; - } else if(window == _infoWindow.window) { - _infoWindow.window = nil; - } else if(window == _configWindow.window) { - _configWindow.window = nil; } [[NSNotificationCenter defaultCenter] removeObserver:self name:NSWindowWillCloseNotification object:window]; } -/* - * Endpoints for download process - * TODO: this should really be refactored - */ - -- (void)downloadComplete:(NSModalResponse) returnCode { - os_log_debug([KMLogs uiLog], "downloadComplete, NSModalResponse returnCode: %ld", (long)returnCode); - if (returnCode == NSModalResponseCancel) { - os_log_debug([KMLogs uiLog], "downloadComplete, returnCode == NSModalResponseCancel"); - [_connection cancel]; - } - else if (returnCode == NSModalResponseOK) { - os_log_debug([KMLogs uiLog], "downloadComplete, returnCode == NSModalResponseOK"); - - [_downloadKBWindow close]; - - if (self.configWindow.window != nil) { - os_log_debug([KMLogs uiLog], "downloadComplete, self.configWindow.window != nil"); - [self.configWindow.window makeKeyAndOrderFront:nil]; - if (![[self.configWindow.window childWindows] containsObject:self.infoWindow.window]) { - [self.configWindow.window addChildWindow:self.infoWindow.window ordered:NSWindowAbove]; - } - [self.infoWindow.window centerInParent]; - [self.infoWindow.window makeKeyAndOrderFront:nil]; - } - else { - os_log_debug([KMLogs uiLog], "downloadComplete, self.configWindow.window == nil"); - [self.infoWindow.window centerInParent]; - [self.infoWindow.window makeKeyAndOrderFront:nil]; - [self.infoWindow.window setLevel:NSFloatingWindowLevel]; - } - - NSString *packagePath = [self.keyboardsPath stringByAppendingPathComponent:[self.downloadFilename stringByDeletingPathExtension]]; - [self.infoWindow setPackagePath:packagePath]; - } - - _downloadInfoView = nil; - _connection = nil; - _downloadFilename = nil; - _receivedData = nil; - _expectedBytes = 0; -} - -- (NSAlert *)downloadInfoView { - os_log_debug([KMLogs uiLog], "downloadInfoView"); - if (_downloadInfoView == nil) { - _downloadInfoView = [[NSAlert alloc] init]; - [_downloadInfoView setMessageText:NSLocalizedString(@"message-keyboard-downloading", nil)]; - [_downloadInfoView setInformativeText:@""]; - [_downloadInfoView addButtonWithTitle:NSLocalizedString(@"button-cancel-downloading", nil)]; - [_downloadInfoView setAlertStyle:NSAlertStyleInformational]; - [_downloadInfoView setAccessoryView:self.progressIndicator]; - } - - return _downloadInfoView; -} - -- (NSProgressIndicator *)progressIndicator { - os_log_debug([KMLogs uiLog], "progressIndicator"); - if (_progressIndicator == nil) { - _progressIndicator = [[NSProgressIndicator alloc] initWithFrame:NSMakeRect(0, 0, 300, 20)]; - [_progressIndicator setIndeterminate:NO]; - [_progressIndicator setMinValue:0]; - [_progressIndicator setMaxValue:100]; - [_progressIndicator setDoubleValue:0]; - } - - return _progressIndicator; -} - -- (void)downloadKeyboardFromKeyboardId:(NSString *)keyboardId { - KeymanVersionInfo keymanVersionInfo = [self versionInfo]; - NSURL* url = [NSURL URLWithString:[NSString stringWithFormat:@"https://%@/go/package/download/%@?platform=macos&tier=%@", - keymanVersionInfo.keymanCom, keyboardId, keymanVersionInfo.tier]]; //&bcp47=%@&update=0 - _downloadFilename = [NSString stringWithFormat:@"%@.kmp", keyboardId]; - [self downloadKeyboardFromURL:url]; -} - - -- (void)downloadKeyboardFromURL:(NSURL *)url { - NSURL* downloadUrl = url; - os_log_debug([KMLogs uiLog], "downloadKeyboardFromURL, url.path: %{public}@", url.path); - - if (downloadUrl && _downloadFilename) { - if (_infoWindow.window != nil) - [_infoWindow close]; - - [self.downloadInfoView setInformativeText:self.downloadFilename]; - - if (self.configWindow.window != nil) { - os_log_debug([KMLogs uiLog], "downloadKeyboardFromURL, self.configWindow.window != nil"); - [self.configWindow.window makeKeyAndOrderFront:nil]; - if (![[self.configWindow.window childWindows] containsObject:self.downloadKBWindow.window]) { - [self.configWindow.window addChildWindow:self.downloadKBWindow.window ordered:NSWindowAbove]; - } - [self.downloadKBWindow.window centerInParent]; - [self.downloadKBWindow.window makeKeyAndOrderFront:nil]; - - /* - Open sheet off of config window, not the download window. - This is because, if the download is successful, - the download window will be closed by the sheet. - */ - [self.downloadInfoView beginSheetModalForWindow:self.configWindow.window completionHandler:^(NSModalResponse returnCode) { - [self downloadComplete:returnCode]; - }]; - } - else { - os_log_debug([KMLogs uiLog], "downloadKeyboardFromURL, self.configWindow.window == nil"); - [self.downloadKBWindow.window centerInParent]; - [self.downloadKBWindow.window makeKeyAndOrderFront:nil]; - [self.downloadKBWindow.window setLevel:NSFloatingWindowLevel]; - /* - Open sheet off of config window, same as above. - */ - [self.downloadInfoView beginSheetModalForWindow:self.configWindow.window completionHandler:^(NSModalResponse returnCode) { - [self downloadComplete:returnCode]; - }]; - } - - if (_connection == nil) { - os_log_debug([KMLogs uiLog], "downloadKeyboardFromURL, _connection == nil, set button title cancel downloading, tag = -1"); - [_downloadInfoView setMessageText:NSLocalizedString(@"message-keyboard-downloading", nil)]; - NSButton *button = (NSButton *)[_downloadInfoView.buttons objectAtIndex:0]; - [button setTitle:NSLocalizedString(@"button-cancel-downloading", nil)]; - [button setTag:-1]; - [self.progressIndicator setDoubleValue:0]; - NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:60]; - _receivedData = [[NSMutableData alloc] initWithLength:0]; - _connection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES]; - } - } -} - -- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { - [self.receivedData setLength:0]; - self.expectedBytes = [response expectedContentLength]; -} - -- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { - [self.receivedData appendData:data]; - float progress = ((float)[self.receivedData length]/(float)self.expectedBytes)*100; - [self.progressIndicator setDoubleValue:progress]; -} - -- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { - _connection = nil; - _downloadFilename = nil; - _receivedData = nil; - _expectedBytes = 0; -} - -- (NSURLRequest *)connection:(NSURLConnection *)connection - willSendRequest:(nonnull NSURLRequest *)request - redirectResponse:(nullable NSURLResponse *)response { - return request; -} - -- (NSCachedURLResponse *)connection:(NSURLConnection *)connection willCacheResponse:(NSCachedURLResponse *)cachedResponse { - return nil; -} - -- (void)connectionDidFinishLoading:(NSURLConnection *)connection { - os_log_debug([KMLogs uiLog], "connectionDidFinishLoading"); - NSString *filePath = [self.keyboardsPath stringByAppendingPathComponent:self.downloadFilename]; - [self.receivedData writeToFile:filePath atomically:YES]; - [self unzipFile:filePath]; - [[NSFileManager defaultManager] removeItemAtPath:filePath error:nil]; - - [_downloadInfoView setMessageText:NSLocalizedString(@"message-keyboard-download-complete", nil)]; - NSButton *button = (NSButton *)[_downloadInfoView.buttons objectAtIndex:0]; - os_log_debug([KMLogs uiLog], "connectionDidFinishLoading, set button title download complete, tag = 1"); - [button setTitle:NSLocalizedString(@"button-download-complete", nil)]; - [button setTag:1]; - [[NSNotificationCenter defaultCenter] postNotificationName:kKeymanKeyboardDownloadCompletedNotification - object:self - userInfo:nil]; - _connection = nil; - _receivedData = nil; - _expectedBytes = 0; -} - - (void)handleKeyEvent:(NSEvent *)event { os_log_debug([KMLogs keyTraceLog], "handleKeyEvent: %{public}@", event); @@ -1435,160 +1052,4 @@ extern const CGKeyCode kProcessPendingBuffer; } } -// Check the package info to ensure that we support this version -// (e.g. Keyman 15 does not support a 16.0 version package) -- (BOOL)verifyPackageVersionInTempFolder: (NSString *)tempDestFolder filePath:(NSString *)filePath { - KMPackageInfo *packageInfo = [self loadPackageInfo:tempDestFolder]; - if(packageInfo == nil) { - os_log_info([KMLogs eventsLog], "Could not find kmp.json in %{public}@", filePath); - } else { - NSString* requiredVersion = [packageInfo.fileVersion minimalVersionNumberString]; - KeymanVersionInfo keymanVersionInfo = [self versionInfo]; - NSString *currentVersion = [keymanVersionInfo.versionRelease minimalVersionNumberString]; - - if ([requiredVersion compare:currentVersion options:NSNumericSearch] == NSOrderedDescending) { - // currentVersion is lower than the requiredVersion - os_log_error([KMLogs keyboardLog], "Package %{public}@ requires a newer version of Keyman: %{public}@", filePath, requiredVersion); - } else { - return YES; - } - } - return NO; -} - -// TODO: This seriously needs to be refactored out of the app delegate and into -// a keyboard install module -- (BOOL)unzipFile:(NSString *)filePath { - BOOL didUnzip = NO; - NSError *error = nil; - NSString *fileName = filePath.lastPathComponent; - NSString *folderName = [fileName stringByDeletingPathExtension]; - - os_log_debug([KMLogs keyboardLog], "unzipFile, folderName: %{public}@, fileName: %{public}@", folderName, fileName); - - // First we unzip into a temp folder, and check kmp.json for the fileVersion - // before we continue installation. We don't want to overwrite existing - // package if it is there if the files are not compatible with the installed - // version of Keyman. - - NSString *tempFolderName = [folderName stringByAppendingString:@".tmp.install"]; - NSString *tempDestFolder = [self.keyboardsPath stringByAppendingPathComponent:tempFolderName]; - - ZipArchive *za = [[ZipArchive alloc] init]; - if ([za UnzipOpenFile:filePath]) { - os_log_debug([KMLogs keyboardLog], "unzipFile, Unzipping %{public}@ to %{public}@", filePath, tempDestFolder); - if ([[NSFileManager defaultManager] fileExistsAtPath:tempDestFolder]) { - os_log_debug([KMLogs keyboardLog], "unzipFile, The temp destination folder already exists. Overwriting..."); - } - - didUnzip = [za UnzipFileTo:tempDestFolder overWrite:YES]; - [za UnzipCloseFile]; - } - - if (!didUnzip) { - os_log_error([KMLogs keyboardLog], "unzipFile, Failed to unzip file: %{public}@", filePath); - return NO; - } - - os_log_debug([KMLogs keyboardLog], "unzipFile, Unzipped file: %{public}@", filePath); - - BOOL didInstall = [self verifyPackageVersionInTempFolder:tempDestFolder filePath:filePath]; - - NSString *destFolder = [self.keyboardsPath stringByAppendingPathComponent:folderName]; - - // Remove existing package if it exists - if (didInstall && [[NSFileManager defaultManager] fileExistsAtPath:destFolder]) { - os_log_debug([KMLogs keyboardLog], "unzipFile, The destination folder already exists. Overwriting..."); - [[NSFileManager defaultManager] removeItemAtPath:destFolder error:&error]; - if (error != nil) { - os_log_error([KMLogs keyboardLog], "unzipFile, Unable to remove destination folder %{public}@", destFolder); - didInstall = NO; - } - } - - // - // We believe this package is valid, let's go ahead and install it - // - - // Rename the temp folder to the desired dest folder. removing existing folder first - if(didInstall) { - [[NSFileManager defaultManager] moveItemAtPath:tempDestFolder toPath:destFolder error:&error]; - if (error != nil) { - os_log_error([KMLogs keyboardLog], "unzipFile, Unable to move temp folder %{public}@ to dest folder %{public}@", tempDestFolder, destFolder); - didInstall = NO; - } - } - - if(!didInstall) { - [[NSFileManager defaultManager] removeItemAtPath:tempDestFolder error:&error]; - if (error != nil) { - os_log_error([KMLogs keyboardLog], "unzipFile, Unable to remove temp folder %{public}@", tempDestFolder); - } - - return NO; - } - - // Package has installed, now scan for keyboards and fonts - // TODO: we need to be reading the kmp.json data to determine keyboards to install - NSString * keyboardFolderPath = [self.keyboardsPath stringByAppendingPathComponent:folderName]; - os_log_debug([KMLogs keyboardLog], "unzipFile, folderName: %{public}@, keyboardFolderPath: %{public}@", folderName, keyboardFolderPath); - [self installFontsAtPath:keyboardFolderPath]; - - for (NSString *kmxFile in [self getKmxFilesAtPath:keyboardFolderPath]) { - NSString *partialPath = [KMDataRepository.shared buildPartialPathFrom:folderName keyboardFile:[kmxFile lastPathComponent]]; - [self addEnabledKeyboard:partialPath]; - } - [self saveEnabledKeyboards]; - - return YES; -} - -- (NSString *)fontsPath { - if (_fontsPath == nil) { - BOOL isDir; - NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES); - - if (paths.count == 1) { - NSString *path = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"Fonts"]; - if ([[NSFileManager defaultManager] fileExistsAtPath:path isDirectory:&isDir] && isDir) - _fontsPath = [NSString stringWithString:path]; - } - } - - return _fontsPath; -} - -- (void)installFontsAtPath:(NSString *)path { - NSString *fontsPath = self.fontsPath; - if (fontsPath == nil) - return; - - NSArray *fonts = [self FontFilesAtPath:path]; - for (NSString *srcPath in fonts) { - NSString *destPath = [fontsPath stringByAppendingPathComponent:[srcPath lastPathComponent]]; - NSError *error; - if ([[NSFileManager defaultManager] fileExistsAtPath:destPath]) - [[NSFileManager defaultManager] removeItemAtPath:destPath error:&error]; - - if (error == nil) - [[NSFileManager defaultManager] copyItemAtPath:srcPath toPath:destPath error:&error]; - - if (error != nil) - os_log_error([KMLogs keyboardLog], "installFontsAtPath error = %{public}@", error); - } -} - -- (NSArray *)FontFilesAtPath:(NSString *)path { - NSDirectoryEnumerator *dirEnum = [[NSFileManager defaultManager] enumeratorAtPath:path]; - NSMutableArray *fontFiles = [[NSMutableArray alloc] initWithCapacity:0]; - NSString *filePath; - while (filePath = (NSString *)[dirEnum nextObject]) { - NSString *extension = [[filePath pathExtension] lowercaseString]; - if ([extension isEqualToString:@"ttf"] || [extension isEqualToString:@"otf"]) - [fontFiles addObject:[path stringByAppendingPathComponent:filePath]]; - } - - return fontFiles; -} - @end diff --git a/mac/Keyman4MacIM/Keyman4MacIM/KMPackage.m b/mac/Keyman4MacIM/Keyman4MacIM/KMPackage.m index 8f204706bd..41eb6ded23 100644 --- a/mac/Keyman4MacIM/Keyman4MacIM/KMPackage.m +++ b/mac/Keyman4MacIM/Keyman4MacIM/KMPackage.m @@ -8,7 +8,6 @@ #import #import "KMPackage.h" -#import "KMConfigurationWindowController.h" #import "KMLogs.h" @implementation KMPackage @@ -92,9 +91,6 @@ NSString *filename = nil; // This is the filename from the FileWrapper (if any) return NO; } - KMConfigurationWindowController *configWindowController = (KMConfigurationWindowController *)[self.AppDelegate configWindow]; - [configWindowController handleRequestToInstallPackage:self]; - return YES; // Even if the user decides not to, we need to return Yes to prevent displaying an error message. } diff --git a/mac/Keyman4MacIM/Keyman4MacIM/OnScreenKeyboard/OSKWindowController.m b/mac/Keyman4MacIM/Keyman4MacIM/OnScreenKeyboard/OSKWindowController.m index d4f457c754..7babc0166b 100644 --- a/mac/Keyman4MacIM/Keyman4MacIM/OnScreenKeyboard/OSKWindowController.m +++ b/mac/Keyman4MacIM/Keyman4MacIM/OnScreenKeyboard/OSKWindowController.m @@ -98,7 +98,7 @@ } - (void)resetOSK { - os_log_debug([KMLogs oskLog], "OSKWindowController windowDidLoad"); + os_log_debug([KMLogs oskLog], "OSKWindowController resetOSK"); [self.oskView setKvk:[self.AppDelegate kvk]]; [self.oskView resetOSK]; if (_helpButton) { diff --git a/mac/Keyman4MacIM/Keyman4MacIM/OnScreenKeyboard/OSKWindowController.xib b/mac/Keyman4MacIM/Keyman4MacIM/OnScreenKeyboard/OSKWindowController.xib index 6a55541cb5..4da27bcdeb 100644 --- a/mac/Keyman4MacIM/Keyman4MacIM/OnScreenKeyboard/OSKWindowController.xib +++ b/mac/Keyman4MacIM/Keyman4MacIM/OnScreenKeyboard/OSKWindowController.xib @@ -1,8 +1,8 @@ - + - + @@ -18,7 +18,7 @@ - + diff --git a/mac/KeymanSettings/Sources/KeymanSettings/InputMethodUtil.swift b/mac/KeymanSettings/Sources/KeymanSettings/InputMethodUtil.swift index 5a01bba22a..1e8e78c1e8 100644 --- a/mac/KeymanSettings/Sources/KeymanSettings/InputMethodUtil.swift +++ b/mac/KeymanSettings/Sources/KeymanSettings/InputMethodUtil.swift @@ -243,6 +243,7 @@ public class InputMethodUtil { // Keyman is running: check accessibility by sending distributed notification Logger.setup.debug("invokeKeymanInputMethodCheckAccess(), calling sendAccessibilityCheckRequest()") self.sendAccessibilityCheckRequest() + } else { // Keyman is not running, launch and check accessibility with specific command line argument Logger.setup.debug("invokeKeymanInputMethodCheckAccess(), calling launchKeymanInputMethodAsSeparateProcess()") diff --git a/mac/build.sh b/mac/build.sh index a05e662cd8..620f7a24b0 100755 --- a/mac/build.sh +++ b/mac/build.sh @@ -15,7 +15,7 @@ builder_describe "Builds Keyman for macOS." \ "clean" \ "configure" \ "build" \ - "publish Publishes debug info to Sentry and builds DMG, .download_info for distribution" \ + "publish Publishes debug info to Sentry and creates installer, .download_info for distribution" \ "test" \ "install Installs Keyman.app and Keyman Configuration.app locally." \ ":engine KeymanEngine4Mac" \ @@ -198,14 +198,6 @@ do_build_app ( ) { #check_code_sign_status } -do_build_settings_package ( ) { - ### Build Keyman Settings Package ### - builder_heading "Building Keyman Settings Package" - execBuildCommand "Keyman Settings Package" xcodebuild $BUILD_OPTIONS $BUILD_ACTIONS -scheme KeymanSettings \ - -destination 'platform=macOS' -derivedDataPath ./build \ - BUILD_LIBRARY_FOR_DISTRIBUTION=YES -} - do_build_config_app ( ) { ### Build Keyman Configuration.app (Configuration app) ### builder_heading "Building Keyman Configuration.app" @@ -295,7 +287,6 @@ do_build_testapp() { # In case both install & publish actions are specified, we should still only notarize once. DID_NOTARIZE=false -# MAC-CONFIG-TODO: delete this if we only ever notarize installer package do_notarize() { if [[ $DID_NOTARIZE == false ]]; then ### Validate notarization environment variables ### @@ -359,7 +350,7 @@ do_install() { builder_die "build.sh install should not be run on CI" elif ! builder_has_option --quick && ! builder_is_debug_build; then echo "about to notarize" - # do not notarize if quick option is specified or not a relase build + # do not notarize if quick option is specified or not a release build # notarization fails unless signed with Developer ID certificate # which is not used in debug builds do_notarize @@ -382,23 +373,6 @@ do_install() { "$KEYMAN_MAC_BASE_PATH/local-deploy.sh" "$KM4MIM_APP_BASE_PATH" "$KM4M_CONFIG_APP_BASE_PATH" } -# MAC-CONFIG-TODO: delete this and everything else related to building .dmg -do_publish() { - builder_if_release_build_level do_notarize - - builder_heading "Preparing files for release deployment..." - ./setup/build.sh - - "${KM4MIM_BASE_PATH}/make-km-dmg.sh" - - local UPLOAD_PATH="${KM4MIM_BASE_PATH}/output/upload/${KEYMAN_VERSION}" - write_download_info "${UPLOAD_PATH}" "keyman-${KEYMAN_VERSION_FOR_FILENAME}.dmg" "Keyman4MacIM" dmg mac - - if builder_is_ci_build && builder_is_ci_build_level_release; then - do_sentry - fi -} - do_create_installer() { builder_heading "Creating installer package..." @@ -435,7 +409,6 @@ builder_run_action test:app execBuildCommand "$IM_NAME-tests" "xcodebuild builder_run_action test:help check-markdown "$KEYMAN_ROOT/mac/docs/help" builder_run_action build:app do_update_app_metadata -#builder_run_action build:configapp do_build_settings_package builder_run_action build:configapp do_build_config_app builder_run_action build:testapp do_build_testapp @@ -443,6 +416,5 @@ builder_run_action build:testapp do_build_testapp builder_run_action install do_install -#builder_run_action publish do_publish builder_run_action publish do_create_installer builder_run_action publish do_publish_installer diff --git a/mac/local-deploy.sh b/mac/local-deploy.sh index 608d1c6045..fc0e4295d0 100755 --- a/mac/local-deploy.sh +++ b/mac/local-deploy.sh @@ -1,6 +1,8 @@ #!/usr/bin/env bash -# MAC-CONFIG-TODO: change to builder script and find a way to deploy locally with shared data support +# does not produce an input method and config app that can communicate +# when built locally -- to access app group settings, each app must +# be signed with 'Developer ID Application' certificate # Please note that this build script (understandably) assumes that it is running on Mac OS X. if [[ "${OSTYPE}" != "darwin"* ]]; then From f3f5da48d0317e0fe3770bd56057bda48b5a492b Mon Sep 17 00:00:00 2001 From: Shawn Schantz Date: Tue, 15 Sep 2026 21:34:27 -0400 Subject: [PATCH 2/4] feat(mac): upload dsyms and remove double-click support --- .../Keyman4MacIM.xcodeproj/project.pbxproj | 6 - mac/Keyman4MacIM/Keyman4MacIM/Info.plist | 17 --- mac/Keyman4MacIM/Keyman4MacIM/KMPackage.h | 22 ---- mac/Keyman4MacIM/Keyman4MacIM/KMPackage.m | 108 ------------------ mac/build.sh | 4 + 5 files changed, 4 insertions(+), 153 deletions(-) delete mode 100644 mac/Keyman4MacIM/Keyman4MacIM/KMPackage.h delete mode 100644 mac/Keyman4MacIM/Keyman4MacIM/KMPackage.m diff --git a/mac/Keyman4MacIM/Keyman4MacIM.xcodeproj/project.pbxproj b/mac/Keyman4MacIM/Keyman4MacIM.xcodeproj/project.pbxproj index 41368fad0d..4a612a060d 100644 --- a/mac/Keyman4MacIM/Keyman4MacIM.xcodeproj/project.pbxproj +++ b/mac/Keyman4MacIM/Keyman4MacIM.xcodeproj/project.pbxproj @@ -79,7 +79,6 @@ E213601E2142D7C000A043B7 /* keyman-88.png in Resources */ = {isa = PBXBuildFile; fileRef = E213601D2142D7BF00A043B7 /* keyman-88.png */; }; E21799051FC5B7BC00F2D66A /* KMInputMethodEventHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = E21799041FC5B7BC00F2D66A /* KMInputMethodEventHandler.m */; }; E21E645820C04EA8000D6274 /* logo.png in Resources */ = {isa = PBXBuildFile; fileRef = E21E645720C04EA7000D6274 /* logo.png */; }; - E240F599202DED740000067D /* KMPackage.m in Sources */ = {isa = PBXBuildFile; fileRef = E240F598202DED740000067D /* KMPackage.m */; }; E2585A7F20DD6C3C00CBB994 /* KMMethodEventHandlerTests.kmx in Resources */ = {isa = PBXBuildFile; fileRef = E2585A7E20DD6C3C00CBB994 /* KMMethodEventHandlerTests.kmx */; }; E2585A8120DD7CF100CBB994 /* TestAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = E2585A8020DD7CF100CBB994 /* TestAppDelegate.m */; }; E27BA9D32020D8BF00D273E7 /* SimpleTest.kmx in Resources */ = {isa = PBXBuildFile; fileRef = E27BA9D22020D8BF00D273E7 /* SimpleTest.kmx */; }; @@ -329,8 +328,6 @@ E21799031FC5B74D00F2D66A /* KMInputMethodEventHandler.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KMInputMethodEventHandler.h; sourceTree = ""; }; E21799041FC5B7BC00F2D66A /* KMInputMethodEventHandler.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KMInputMethodEventHandler.m; sourceTree = ""; }; E21E645720C04EA7000D6274 /* logo.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = logo.png; path = Keyman4MacIM/KMConfiguration/logo.png; sourceTree = SOURCE_ROOT; }; - E240F597202DED300000067D /* KMPackage.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KMPackage.h; sourceTree = ""; }; - E240F598202DED740000067D /* KMPackage.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KMPackage.m; sourceTree = ""; }; E2585A7E20DD6C3C00CBB994 /* KMMethodEventHandlerTests.kmx */ = {isa = PBXFileReference; lastKnownFileType = file; path = KMMethodEventHandlerTests.kmx; sourceTree = ""; }; E2585A8020DD7CF100CBB994 /* TestAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TestAppDelegate.m; sourceTree = ""; }; E2585A8220DD7D3F00CBB994 /* TestAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TestAppDelegate.h; sourceTree = ""; }; @@ -526,8 +523,6 @@ 984B8F3E1AF1C2F400E096A8 /* OnScreenKeyboard */, 989C9C0B1A7876DE00A20425 /* Supporting Files */, 9836B3631AE5F11D00780482 /* ZipArchive */, - E240F597202DED300000067D /* KMPackage.h */, - E240F598202DED740000067D /* KMPackage.m */, 9A3D6C5B221531B0008785A3 /* KMOSVersion.h */, 9A3D6C5C221531B0008785A3 /* KMOSVersion.m */, 290BC67E274B9DB1005CD1C3 /* KMPackageInfo.h */, @@ -916,7 +911,6 @@ 29DBBF672D35053E00D8E33C /* KMSentryHelper.m in Sources */, 29B4A0D52BF7675A00682049 /* KMLogs.m in Sources */, 98BF924F1BF02DC20002126A /* KMBarView.m in Sources */, - E240F599202DED740000067D /* KMPackage.m in Sources */, 296105232C8E91C7007BF6B7 /* KMInputMethodLifecycle.m in Sources */, D861B03F2C5747F70003675E /* KMSettingsRepository.m in Sources */, 984B8F441AF1C3D900E096A8 /* OSKWindowController.m in Sources */, diff --git a/mac/Keyman4MacIM/Keyman4MacIM/Info.plist b/mac/Keyman4MacIM/Keyman4MacIM/Info.plist index 1905f25541..31641d7ff5 100644 --- a/mac/Keyman4MacIM/Keyman4MacIM/Info.plist +++ b/mac/Keyman4MacIM/Keyman4MacIM/Info.plist @@ -4,23 +4,6 @@ CFBundleDevelopmentRegion en - CFBundleDocumentTypes - - - CFBundleTypeExtensions - - kmp - - CFBundleTypeIconFile - keyman - CFBundleTypeName - Keyman Package - CFBundleTypeRole - Editor - NSDocumentClass - KMPackage - - CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIconFile diff --git a/mac/Keyman4MacIM/Keyman4MacIM/KMPackage.h b/mac/Keyman4MacIM/Keyman4MacIM/KMPackage.h deleted file mode 100644 index b558a89c64..0000000000 --- a/mac/Keyman4MacIM/Keyman4MacIM/KMPackage.h +++ /dev/null @@ -1,22 +0,0 @@ -// -// KMPackage.h -// Keyman -// -// Created by tom on 2/9/18. -// Copyright © 2018 SIL International. All rights reserved. -// - -#ifndef KMPackage_h -#define KMPackage_h - -#import -#import "KMInputMethodAppDelegate.h" - -@interface KMPackage : NSDocument --(NSString *) getOrigKmpFilename; --(NSString *) getTempKmpFilename; - --(void) releaseTempKMPFile; -@end - -#endif /* KMPackage_h */ diff --git a/mac/Keyman4MacIM/Keyman4MacIM/KMPackage.m b/mac/Keyman4MacIM/Keyman4MacIM/KMPackage.m deleted file mode 100644 index 41eb6ded23..0000000000 --- a/mac/Keyman4MacIM/Keyman4MacIM/KMPackage.m +++ /dev/null @@ -1,108 +0,0 @@ -// -// KMPackage.m -// Keyman -// -// Created by tom on 2/9/18. -// Copyright © 2018 SIL International. All rights reserved. -// - -#import -#import "KMPackage.h" -#import "KMLogs.h" - -@implementation KMPackage - -const NSInteger kUnexpectedFileAsscociationType = 42; -NSString *filenameTempKMP = nil; -NSString *filename = nil; // This is the filename from the FileWrapper (if any) - - --(NSString *) getOrigKmpFilename { - return filename; -} - --(NSString *) getTempKmpFilename { - return filenameTempKMP; -} - -+ (BOOL)autosavesInPlace { - return NO; -} - -// This method gets called whenever a user double-clicks a KMP file, regardless of whether -// they decide to install it or cancel the installation. It also gets called one time up-front -// when Keyman first loads. -- (void)makeWindowControllers { - os_log_debug([KMLogs dataLog], "KMP - in KMPackage.makeWindowControllers"); - - if (filename != nil) { // Should be true every time except maybe the very first time (when loading). - filename = nil; - [self closeIfFilesAreReleased]; - } -} - --(void) closeIfFilesAreReleased { - // Since we aren't really opening this file as a document, after reading it (or deciding not to) - // we need to close this document so the controller doesn't hold onto it. Otherwise, if the user - // double-clicks the same KMP file a second time it will just assume we want to open the window - // to display the already open document, rather than attempting to read it again. - - os_log_debug([KMLogs dataLog], "Closing document to release presenter..."); - if (filename == nil && filenameTempKMP == nil) - [self close]; -} - -- (KMInputMethodAppDelegate *)AppDelegate { - return (KMInputMethodAppDelegate *)[NSApp delegate]; -} - --(BOOL)readFromFileWrapper:(NSFileWrapper *)fileWrapper ofType:(NSString *)typeName error:(NSError * _Nullable __autoreleasing *)outError { - - filename = [fileWrapper filename]; - - os_log_debug([KMLogs dataLog], "readFromFileWrapper called with file: %{public}@", filename); - - if (![typeName isEqualToString: @"Keyman Package"]) { - if (outError != NULL) { - NSString *description = [@"Unexpected file association for type " stringByAppendingString:typeName]; - NSDictionary *errorDictionary = @{ NSLocalizedDescriptionKey : description, - NSFilePathErrorKey : filename - }; - *outError = [[NSError alloc] initWithDomain:@"Keyman" code:kUnexpectedFileAsscociationType userInfo:errorDictionary]; - } - return NO; - } - - // Strip out any browser-appended number, e.g. khmer_angkor (1).kmp - // We work on a copy of the file, so this is safe to do -- the fileWrapper - // saves to the filename we give it. - NSError *error = nil; - NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@" \\(\\d+\\)\\.kmp$" options:NSRegularExpressionCaseInsensitive error:&error]; - filename = [regex stringByReplacingMatchesInString:filename - options:0 - range:NSMakeRange(0, [filename length]) - withTemplate:@".kmp"]; - - filenameTempKMP = [NSTemporaryDirectory() stringByAppendingPathComponent:filename]; - assert(filenameTempKMP != nil); - NSURL *fileURL = [[NSURL alloc] initFileURLWithPath:filenameTempKMP]; - if (![fileWrapper writeToURL:fileURL options:NSFileWrapperWritingAtomic originalContentsURL:nil error:outError]) { - filenameTempKMP = nil; - return NO; - } - - return YES; // Even if the user decides not to, we need to return Yes to prevent displaying an error message. -} - --(void) releaseTempKMPFile { - assert(filenameTempKMP != nil); - [[NSFileManager defaultManager] removeItemAtPath:filenameTempKMP error:nil]; - filenameTempKMP = nil; - [self closeIfFilesAreReleased]; -} - -// This tells the system that we aren't reading the Keyman Package file lazily. --(BOOL) isEntireFileLoaded { - return YES; -} -@end diff --git a/mac/build.sh b/mac/build.sh index 620f7a24b0..88eaedf42d 100755 --- a/mac/build.sh +++ b/mac/build.sh @@ -343,6 +343,9 @@ do_sentry() { sentry-cli upload-dif "build/$CONFIG" popd > /dev/null + pushd "$CONFIGAPP_BASE_PATH" > /dev/null + sentry-cli upload-dif "build/Build/Products/$CONFIG" + popd > /dev/null } do_install() { @@ -386,6 +389,7 @@ do_publish_installer() { builder_echo info "writing download info for Keyman installer..." local UPLOAD_PATH="${KEYMAN_MAC_BASE_PATH}/build/upload/${KEYMAN_VERSION}" write_download_info "${UPLOAD_PATH}" "Keyman-${KEYMAN_VERSION_FOR_FILENAME}.pkg" "Keyman Installer Package" pkg mac + do_sentry else builder_echo info "not writing download info because we are not on a CI build..." fi From d50b8d81e63f020dd07f8be3fe0c025cadac0917 Mon Sep 17 00:00:00 2001 From: Shawn Schantz Date: Wed, 16 Sep 2026 15:43:31 -0400 Subject: [PATCH 3/4] feat(mac): fix constraint on about close button also added comment with issue # --- .../Installation/InstallationCheck.swift | 3 +- .../Base.lproj/KMAboutWindowController.xib | 55 +++++++++---------- .../KeymanSettings/InputMethodUtil.swift | 1 - .../Sources/Model/KeymanPackage.swift | 2 +- 4 files changed, 30 insertions(+), 31 deletions(-) diff --git a/mac/Config/Installation/InstallationCheck.swift b/mac/Config/Installation/InstallationCheck.swift index eb516276c4..c0df6428ed 100644 --- a/mac/Config/Installation/InstallationCheck.swift +++ b/mac/Config/Installation/InstallationCheck.swift @@ -245,7 +245,8 @@ public class InstallationCheck { name: NSNotification.Name.accessibilityStateResponse, object: nil // Observe notifications from any sender ) - // MAC-CONFIG-TODO: add timeout? + // TODO: add timeout in case response is not received + // see issue #16579 } /** diff --git a/mac/Keyman4MacIM/Keyman4MacIM/KMAboutWindow/Base.lproj/KMAboutWindowController.xib b/mac/Keyman4MacIM/Keyman4MacIM/KMAboutWindow/Base.lproj/KMAboutWindowController.xib index fa3d9b0fbe..cc63416206 100644 --- a/mac/Keyman4MacIM/Keyman4MacIM/KMAboutWindow/Base.lproj/KMAboutWindowController.xib +++ b/mac/Keyman4MacIM/Keyman4MacIM/KMAboutWindow/Base.lproj/KMAboutWindowController.xib @@ -28,31 +28,25 @@ - - + - - - - - - - + + - + @@ -104,20 +98,20 @@ - + + + @@ -126,6 +120,9 @@ + + + @@ -137,20 +134,22 @@
- - - - - - - - - - - - - - + + + + + + + + + + + + + + + +
diff --git a/mac/KeymanSettings/Sources/KeymanSettings/InputMethodUtil.swift b/mac/KeymanSettings/Sources/KeymanSettings/InputMethodUtil.swift index 1e8e78c1e8..5a01bba22a 100644 --- a/mac/KeymanSettings/Sources/KeymanSettings/InputMethodUtil.swift +++ b/mac/KeymanSettings/Sources/KeymanSettings/InputMethodUtil.swift @@ -243,7 +243,6 @@ public class InputMethodUtil { // Keyman is running: check accessibility by sending distributed notification Logger.setup.debug("invokeKeymanInputMethodCheckAccess(), calling sendAccessibilityCheckRequest()") self.sendAccessibilityCheckRequest() - } else { // Keyman is not running, launch and check accessibility with specific command line argument Logger.setup.debug("invokeKeymanInputMethodCheckAccess(), calling launchKeymanInputMethodAsSeparateProcess()") diff --git a/mac/KeymanSettings/Sources/Model/KeymanPackage.swift b/mac/KeymanSettings/Sources/Model/KeymanPackage.swift index 5bdb936794..205b06145c 100644 --- a/mac/KeymanSettings/Sources/Model/KeymanPackage.swift +++ b/mac/KeymanSettings/Sources/Model/KeymanPackage.swift @@ -132,7 +132,7 @@ public class KeymanPackage: Identifiable, Hashable, Equatable { helpFilename: String? = nil, graphicFilename: String? = nil ) throws { - // Replicate package validations +TODO // Replicate package validations if keyboards.isEmpty { throw LoadPackageError.containsNoKeyboards } self.id = UUID() From 7de6b43d6f39fa48afadd30796de8264c7779d05 Mon Sep 17 00:00:00 2001 From: Shawn Schantz Date: Wed, 16 Sep 2026 15:52:13 -0400 Subject: [PATCH 4/4] feat(mac): fix compile issue --- mac/KeymanSettings/Sources/Model/KeymanPackage.swift | 3 --- 1 file changed, 3 deletions(-) diff --git a/mac/KeymanSettings/Sources/Model/KeymanPackage.swift b/mac/KeymanSettings/Sources/Model/KeymanPackage.swift index 205b06145c..5e5832e52d 100644 --- a/mac/KeymanSettings/Sources/Model/KeymanPackage.swift +++ b/mac/KeymanSettings/Sources/Model/KeymanPackage.swift @@ -132,9 +132,6 @@ public class KeymanPackage: Identifiable, Hashable, Equatable { helpFilename: String? = nil, graphicFilename: String? = nil ) throws { -TODO // Replicate package validations - if keyboards.isEmpty { throw LoadPackageError.containsNoKeyboards } - self.id = UUID() self.sourceDirectoryUrl = packageUrl self.sharePackageUrl = KeymanPackage.buildSharePackageUrl(packageUrl: self.sourceDirectoryUrl)