aboutsummaryrefslogtreecommitdiff
path: root/program_info
diff options
context:
space:
mode:
Diffstat (limited to 'program_info')
-rw-r--r--program_info/CMakeLists.txt3
-rwxr-xr-xprogram_info/genicons.sh86
-rw-r--r--program_info/modrinth-mrpack-mime.xml9
-rw-r--r--program_info/org.prismlauncher.PrismLauncher.desktop.in1
-rw-r--r--program_info/prismlauncher.6.scd3
-rw-r--r--program_info/prismlauncher.icobin102134 -> 372526 bytes
-rw-r--r--program_info/prismlauncher.manifest.in2
-rw-r--r--program_info/win_install.nsi.in167
8 files changed, 244 insertions, 27 deletions
diff --git a/program_info/CMakeLists.txt b/program_info/CMakeLists.txt
index f6e2ea84..8c682711 100644
--- a/program_info/CMakeLists.txt
+++ b/program_info/CMakeLists.txt
@@ -15,14 +15,17 @@ set(Launcher_Name "${Launcher_CommonName}" PARENT_SCOPE)
set(Launcher_DisplayName "${Launcher_DisplayName}" PARENT_SCOPE)
set(Launcher_Copyright "Prism Launcher Contributors\\n© 2021-2022 PolyMC Contributors \\n© 2012-2021 MultiMC Contributors")
+set(Launcher_Copyright_Mac "Prism Launcher Contributors, © 2021-2022 PolyMC Contributors and © 2012-2021 MultiMC Contributors" PARENT_SCOPE)
set(Launcher_Copyright "${Launcher_Copyright}" PARENT_SCOPE)
set(Launcher_Domain "prismlauncher.org" PARENT_SCOPE)
set(Launcher_UserAgent "${Launcher_CommonName}/${Launcher_VERSION_NAME}" PARENT_SCOPE)
set(Launcher_ConfigFile "prismlauncher.cfg" PARENT_SCOPE)
set(Launcher_Git "https://github.com/PrismLauncher/PrismLauncher" PARENT_SCOPE)
set(Launcher_DesktopFileName "org.prismlauncher.PrismLauncher.desktop" PARENT_SCOPE)
+set(Launcher_SVGFileName "org.prismlauncher.PrismLauncher.svg" PARENT_SCOPE)
set(Launcher_Desktop "program_info/org.prismlauncher.PrismLauncher.desktop" PARENT_SCOPE)
+set(Launcher_mrpack_MIMEInfo "program_info/modrinth-mrpack-mime.xml" PARENT_SCOPE)
set(Launcher_MetaInfo "program_info/org.prismlauncher.PrismLauncher.metainfo.xml" PARENT_SCOPE)
set(Launcher_SVG "program_info/org.prismlauncher.PrismLauncher.svg" PARENT_SCOPE)
set(Launcher_Branding_ICNS "program_info/prismlauncher.icns" PARENT_SCOPE)
diff --git a/program_info/genicons.sh b/program_info/genicons.sh
index bfe756d8..42592c4e 100755
--- a/program_info/genicons.sh
+++ b/program_info/genicons.sh
@@ -1,39 +1,73 @@
-#/bin/bash
+#!/bin/bash
-# ICO
+svg2png() {
+ input_file="$1"
+ output_file="$2"
+ width="$3"
+ height="$4"
-inkscape -w 16 -h 16 -o prismlauncher_16.png org.prismlauncher.PrismLauncher.svg
-inkscape -w 24 -h 24 -o prismlauncher_24.png org.prismlauncher.PrismLauncher.svg
-inkscape -w 32 -h 32 -o prismlauncher_32.png org.prismlauncher.PrismLauncher.svg
-inkscape -w 48 -h 48 -o prismlauncher_48.png org.prismlauncher.PrismLauncher.svg
-inkscape -w 64 -h 64 -o prismlauncher_64.png org.prismlauncher.PrismLauncher.svg
-inkscape -w 128 -h 128 -o prismlauncher_128.png org.prismlauncher.PrismLauncher.svg
+ inkscape -w "$width" -h "$height" -o "$output_file" "$input_file"
+}
-convert prismlauncher_128.png prismlauncher_64.png prismlauncher_48.png prismlauncher_32.png prismlauncher_24.png prismlauncher_16.png prismlauncher.ico
+sipsresize() {
+ input_file="$1"
+ output_file="$2"
+ width="$3"
+ height="$4"
-rm -f prismlauncher_*.png
+ sips -z "$width" "$height" "$input_file" --out "$output_file"
+}
-inkscape -w 1024 -h 1024 -o prismlauncher_1024.png org.prismlauncher.PrismLauncher.bigsur.svg
+if command -v "inkscape" && command -v "icotool"; then
+ # Windows ICO
+ d=$(mktemp -d)
-mkdir prismlauncher.iconset
+ svg2png org.prismlauncher.PrismLauncher.svg "$d/prismlauncher_16.png" 16 16
+ svg2png org.prismlauncher.PrismLauncher.svg "$d/prismlauncher_24.png" 24 24
+ svg2png org.prismlauncher.PrismLauncher.svg "$d/prismlauncher_32.png" 32 32
+ svg2png org.prismlauncher.PrismLauncher.svg "$d/prismlauncher_48.png" 48 48
+ svg2png org.prismlauncher.PrismLauncher.svg "$d/prismlauncher_64.png" 64 64
+ svg2png org.prismlauncher.PrismLauncher.svg "$d/prismlauncher_128.png" 128 128
+ svg2png org.prismlauncher.PrismLauncher.svg "$d/prismlauncher_256.png" 256 256
-sips -z 16 16 prismlauncher_1024.png --out prismlauncher.iconset/icon_16x16.png
-sips -z 32 32 prismlauncher_1024.png --out prismlauncher.iconset/icon_16x16@2x.png
-sips -z 32 32 prismlauncher_1024.png --out prismlauncher.iconset/icon_32x32.png
-sips -z 64 64 prismlauncher_1024.png --out prismlauncher.iconset/icon_32x32@2x.png
-sips -z 128 128 prismlauncher_1024.png --out prismlauncher.iconset/icon_128x128.png
-sips -z 256 256 prismlauncher_1024.png --out prismlauncher.iconset/icon_128x128@2x.png
-sips -z 256 256 prismlauncher_1024.png --out prismlauncher.iconset/icon_256x256.png
-sips -z 512 512 prismlauncher_1024.png --out prismlauncher.iconset/icon_256x256@2x.png
-sips -z 512 512 prismlauncher_1024.png --out prismlauncher.iconset/icon_512x512.png
-cp prismlauncher_1024.png prismlauncher.iconset/icon_512x512@2x.png
+ rm prismlauncher.ico && icotool -o prismlauncher.ico -c \
+ "$d/prismlauncher_256.png" \
+ "$d/prismlauncher_128.png" \
+ "$d/prismlauncher_64.png" \
+ "$d/prismlauncher_48.png" \
+ "$d/prismlauncher_32.png" \
+ "$d/prismlauncher_24.png" \
+ "$d/prismlauncher_16.png"
+else
+ echo "ERROR: Windows icons were NOT generated!" >&2
+ echo "ERROR: requires inkscape and icotool in PATH"
+fi
-iconutil -c icns prismlauncher.iconset
+if command -v "inkscape" && command -v "sips" && command -v "iconutil"; then
+ # macOS ICNS
+ d=$(mktemp -d)
-rm -f prismlauncher_*.png
-rm -rf prismlauncher.iconset
+ d="$d/prismlauncher.iconset"
+ mkdir -p "$d"
+
+ svg2png org.prismlauncher.PrismLauncher.bigsur.svg "$d/icon_512x512@2x.png" 1024 1024
+ sipsresize "$d/icon_512x512@2.png" "$d/icon_16x16.png" 16 16
+ sipsresize "$d/icon_512x512@2.png" "$d/icon_16x16@2.png" 32 32
+ sipsresize "$d/icon_512x512@2.png" "$d/icon_32x32.png" 32 32
+ sipsresize "$d/icon_512x512@2.png" "$d/icon_32x32@2.png" 64 64
+ sipsresize "$d/icon_512x512@2.png" "$d/icon_128x128.png" 128 128
+ sipsresize "$d/icon_512x512@2.png" "$d/icon_128x128@2.png" 256 256
+ sipsresize "$d/icon_512x512@2.png" "$d/icon_256x256.png" 256 256
+ sipsresize "$d/icon_512x512@2.png" "$d/icon_256x256@2.png" 512 512
+ iconutil -c icns "$d"
+else
+ echo "ERROR: macOS icons were NOT generated!" >&2
+ echo "ERROR: requires inkscape, sips and iconutil in PATH"
+fi
+
+# replace icon in themes
for dir in ../launcher/resources/*/scalable
do
- cp -v org.prismlauncher.PrismLauncher.svg $dir/launcher.svg
+ cp -v org.prismlauncher.PrismLauncher.svg "$dir/launcher.svg"
done
diff --git a/program_info/modrinth-mrpack-mime.xml b/program_info/modrinth-mrpack-mime.xml
new file mode 100644
index 00000000..5001e5e7
--- /dev/null
+++ b/program_info/modrinth-mrpack-mime.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">
+ <mime-type type="application/x-modrinth-modpack+zip">
+ <comment>Modrinth Modpack File</comment>
+ <icon name="application-x-modrinth-modpack"/>
+ <glob-deleteall/>
+ <glob pattern="*.mrpack"/>
+ </mime-type>
+</mime-info>
diff --git a/program_info/org.prismlauncher.PrismLauncher.desktop.in b/program_info/org.prismlauncher.PrismLauncher.desktop.in
index e608f588..f08f2ba4 100644
--- a/program_info/org.prismlauncher.PrismLauncher.desktop.in
+++ b/program_info/org.prismlauncher.PrismLauncher.desktop.in
@@ -10,3 +10,4 @@ Icon=org.prismlauncher.PrismLauncher
Categories=Game;ActionGame;AdventureGame;Simulation;
Keywords=game;minecraft;launcher;mc;multimc;polymc;
StartupWMClass=PrismLauncher
+MimeType=application/zip;application/x-modrinth-modpack+zip
diff --git a/program_info/prismlauncher.6.scd b/program_info/prismlauncher.6.scd
index e3c7de86..f979e457 100644
--- a/program_info/prismlauncher.6.scd
+++ b/program_info/prismlauncher.6.scd
@@ -26,6 +26,9 @@ Here are the current features of Prism Launcher.
*-l, --launch*=INSTANCE_ID
Launch the instance specified by INSTANCE_ID.
+*--show*=INSTANCE_ID
+ Show the configuration window of the instance specified by INSTANCE_ID.
+
*--alive*
Write a small 'live.check' file after Prism Launcher starts.
diff --git a/program_info/prismlauncher.ico b/program_info/prismlauncher.ico
index e4529f93..2f0fa67f 100644
--- a/program_info/prismlauncher.ico
+++ b/program_info/prismlauncher.ico
Binary files differ
diff --git a/program_info/prismlauncher.manifest.in b/program_info/prismlauncher.manifest.in
index 1d764445..6f4467c7 100644
--- a/program_info/prismlauncher.manifest.in
+++ b/program_info/prismlauncher.manifest.in
@@ -10,7 +10,7 @@
</trustInfo>
<dependency>
<dependentAssembly>
- <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="x86" publicKeyToken="6595b64144ccf1df" language="*"/>
+ <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*"/>
</dependentAssembly>
</dependency>
<description>Custom Minecraft launcher for managing multiple installs.</description>
diff --git a/program_info/win_install.nsi.in b/program_info/win_install.nsi.in
index 0cd7ea11..42a9e762 100644
--- a/program_info/win_install.nsi.in
+++ b/program_info/win_install.nsi.in
@@ -110,6 +110,142 @@ VIAddVersionKey /LANG=${LANG_ENGLISH} "LegalCopyright" "@Launcher_Copyright@"
VIAddVersionKey /LANG=${LANG_ENGLISH} "FileVersion" "@Launcher_VERSION_NAME4@"
VIAddVersionKey /LANG=${LANG_ENGLISH} "ProductVersion" "@Launcher_VERSION_NAME4@"
+
+;--------------------------------
+; Shell Associate Macros
+
+!macro APP_SETUP DESCRIPTION ICON APP_ID APP_NAME APP_EXE COMMANDTEXT COMMAND ; VERB APP_COMPANY
+ ; setup APP_ID
+ WriteRegStr ShCtx "Software\Classes\${APP_ID}" "" `${DESCRIPTION}`
+ WriteRegStr ShCtx "Software\Classes\${APP_ID}\DefaultIcon" "" `${ICON}`
+ ; default open verb
+ WriteRegStr ShCtx "Software\Classes\${APP_ID}\shell" "" "open"
+ WriteRegStr ShCtx "Software\Classes\${APP_ID}\shell\open" "" `${COMMANDTEXT}`
+ WriteRegStr ShCtx "Software\Classes\${APP_ID}\shell\open\command" "" `${COMMAND}`
+
+ ; if you want the app to use it's own implementation of a verb
+ ;WriteRegStr ShCtx "Software\Classes\${APP_ID}\shell\${VERB}" "" "${DESCRIPTION}"
+ ;WriteRegStr ShCtx "Software\Classes\${APP_ID}\shell\${VERB}\command" "" `${COMMAND}`
+
+ WriteRegStr ShCtx "Software\Classes\Applications\${APP_EXE}\shell\open\command" "" `${COMMAND}`
+ WriteRegStr ShCtx "Software\Classes\Applications\${APP_EXE}" "FriendlyAppName" `${APP_NAME}` ; [Optional]
+ ;WriteRegStr ShCtx "Software\Classes\Applications\${APP_EXE}" "ApplicationCompany" `${APP_COMPANY}` ; [Optional]
+ ;WriteRegNone ShCtx "Software\Classes\Applications\${APP_EXE}\SupportedTypes" ".${EXT}" ; [Optional] Only allow "Open With" with specific extension(s) on WinXP+
+
+ # Register "Default Programs" [Optional]
+ !ifdef REGISTER_DEFAULTPROGRAMS
+ WriteRegStr ShCtx "Software\Classes\Applications\${APP_EXE}\Capabilities" "ApplicationDescription" `${DESCRIPTION}`
+ WriteRegStr ShCtx "Software\RegisteredApplications" `${APP_NAME}` "Software\Classes\Applications\${APP_EXE}\Capabilities"
+ !endif
+
+!macroend
+
+!macro APP_ASSOCIATE EXT APP_ID APP_EXE OVERWIRTE
+ ; Backup the previously associated file class
+ ${If} ${OVERWIRTE} == true
+ ReadRegStr $R0 ShCtx "Software\Classes\${EXT}" ""
+ WriteRegStr ShCtx "Software\Classes\${EXT}" "${APP_ID}_backup" "$R0"
+ WriteRegStr ShCtx "Software\Classes\${EXT}" "" "${APP_ID}"
+ ${EndIf}
+
+ WriteRegNone ShCtx "Software\Classes\${EXT}\OpenWithList" "${APP_EXE}" ; Win2000+
+ WriteRegNone ShCtx "Software\Classes\${EXT}\OpenWithProgids" "${APP_ID}" ; WinXP+
+
+ # Register "Default Programs" [Optional]
+ !ifdef REGISTER_DEFAULTPROGRAMS
+ WriteRegStr ShCtx "Software\Classes\Applications\${APP_EXE}\Capabilities\FileAssociations" "${EXT}" "${APP_ID}"
+ !endif
+
+!macroend
+
+!macro APP_UNASSOCIATE EXT APP_ID
+
+ # Unregister file type
+ ClearErrors
+ ; restore backup
+ ReadRegStr $R1 ShCtx "Software\Classes\${EXT}" ""
+ ${If} $R1 == "${APP_ID}"
+ ReadRegStr $R0 ShCtx "Software\Classes\${EXT}" `${APP_ID}_backup`
+ WriteRegStr ShCtx "Software\Classes\${EXT}" "" "$R0"
+ ${Else}
+ ReadRegStr $R0 ShCtx "Software\Classes\${EXT}" ""
+ ${EndIf}
+
+ DeleteRegKey /IfEmpty ShCtx "Software\Classes\${APP_ID}"
+ ${IfNot} ${Errors}
+ ${AndIf} $R0 == "${APP_ID}"
+ DeleteRegValue ShCtx "Software\Classes\${EXT}" ""
+ DeleteRegKey /IfEmpty ShCtx "Software\Classes\${EXT}"
+ ${EndIf}
+
+ DeleteRegValue ShCtx "Software\Classes\${EXT}\OpenWithList" "${APP_EXE}"
+ DeleteRegKey /IfEmpty ShCtx "Software\Classes\${EXT}\OpenWithList"
+ DeleteRegValue ShCtx "Software\Classes\${EXT}\OpenWithProgids" "${APP_ID}"
+ DeleteRegKey /IfEmpty ShCtx "Software\Classes\${EXT}\OpenWithProgids"
+ DeleteRegKey /IfEmpty ShCtx "Software\Classes\${EXT}"
+
+ # Attempt to clean up junk left behind by the Windows shell
+ DeleteRegValue HKCU "Software\Microsoft\Windows\CurrentVersion\ApplicationAssociationToasts" "${APP_ID}_${EXT}"
+ DeleteRegValue HKCU "Software\Microsoft\Windows\CurrentVersion\ApplicationAssociationToasts" "Applications\${APP_EXE}_${EXT}"
+ DeleteRegValue HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\${EXT}\OpenWithProgids" "${APP_ID}"
+ DeleteRegKey /IfEmpty HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\${EXT}\OpenWithProgids"
+ DeleteRegKey /IfEmpty HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\${EXT}\OpenWithList"
+ DeleteRegKey /IfEmpty HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\${EXT}"
+ ;DeleteRegKey HKCU "Software\Microsoft\Windows\Roaming\OpenWith\FileExts\.${EXT}"
+ ;DeleteRegKey HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\RecentDocs\.${EXT}"
+
+!macroend
+
+!macro APP_TEARDOWN APP_ID APP_NAME APP_EXE
+
+ # Unregister file type
+ ClearErrors
+ DeleteRegKey /IfEmpty ShCtx "Software\Classes\${APP_ID}\shell"
+ ${IfNot} ${Errors}
+ DeleteRegKey ShCtx "Software\Classes\${APP_ID}\DefaultIcon"
+ ${EndIf}
+
+ # Unregister "Open With"
+ DeleteRegKey ShCtx "Software\Classes\Applications\${APP_EXE}"
+
+ # Unregister "Default Programs"
+ !ifdef REGISTER_DEFAULTPROGRAMS
+ DeleteRegValue ShCtx "Software\RegisteredApplications" `${APP_NAME}`
+ DeleteRegKey ShCtx "Software\Classes\Applications\${APP_EXE}\Capabilities"
+ DeleteRegKey /IfEmpty ShCtx "Software\Classes\Applications\${APP_EXE}"
+ !endif
+
+ DeleteRegKey ShCtx `Software\Classes\${APP_ID}`
+ DeleteRegKey ShCtx "Software\Classes\Applications\${APP_EXE}"
+
+ # Attempt to clean up junk left behind by the Windows shell
+ DeleteRegValue HKCU "Software\Microsoft\Windows\CurrentVersion\Search\JumplistData" "$INSTDIR\${APP_EXE}"
+ DeleteRegValue HKCU "Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\MuiCache" "$INSTDIR\${APP_EXE}.FriendlyAppName"
+ DeleteRegValue HKCU "Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\MuiCache" "$INSTDIR\${APP_EXE}.ApplicationCompany"
+ DeleteRegValue HKCU "Software\Microsoft\Windows\ShellNoRoam\MUICache" "$INSTDIR\${APP_EXE}" ; WinXP
+ DeleteRegValue HKCU "Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Compatibility Assistant\Store" "$INSTDIR\${APP_EXE}"
+
+!macroend
+
+; !defines for use with SHChangeNotify
+!ifdef SHCNE_ASSOCCHANGED
+!undef SHCNE_ASSOCCHANGED
+!endif
+!define SHCNE_ASSOCCHANGED 0x08000000
+!ifdef SHCNF_FLUSH
+!undef SHCNF_FLUSH
+!endif
+!define SHCNF_FLUSH 0x1000
+
+
+# ensure this is called at the end of any section that changes shell keys
+!macro NotifyShell_AssocChanged
+; Using the system.dll plugin to call the SHChangeNotify Win32 API function so we
+; can update the shell.
+ System::Call "shell32::SHChangeNotify(i,i,i,i) (${SHCNE_ASSOCCHANGED}, ${SHCNF_FLUSH}, 0, 0)"
+!macroend
+
+
;--------------------------------
; The stuff to install
@@ -171,6 +307,27 @@ Section /o "Desktop Shortcut" DESKTOP_SHORTCUTS
SectionEnd
+
+!define APP_ID "@Launcher_CommonName@.App"
+!define APP_EXE "@Launcher_APP_BINARY_NAME@.exe"
+!define APP_ICON "$INSTDIR\${APP_EXE},0"
+!define APP_DESCRIPTION "@Launcher_DisplayName@"
+!define APP_NAME "@Launcher_DisplayName@"
+!define APP_CMD_TEXT "Minecraft Modpack"
+
+!define REGISTER_DEFAULTPROGRAMS ; value doesn't matter
+
+Section -ShellAssoc
+
+ !insertmacro APP_SETUP `${APP_DESCRIPTION}` `${APP_ICON}` `${APP_ID}` `${APP_CMD_TEXT}` `${APP_EXE}` `${APP_CMD_TEXT}` '$INSTDIR\${APP_EXE} -I "%1"'
+
+ !insertmacro APP_ASSOCIATE ".zip" `${APP_ID}` `${APP_EXE}` false
+ !insertmacro APP_ASSOCIATE ".mrpack" `${APP_ID}` `${APP_EXE}` true
+
+ !insertmacro NotifyShell_AssocChanged
+SectionEnd
+
+
;--------------------------------
; Uninstaller
@@ -202,6 +359,16 @@ Section "Uninstall"
SectionEnd
+Section -un.ShellAssoc
+
+ !insertmacro APP_TEARDOWN `${APP_ID}` `${APP_NAME}` `${APP_EXE}`
+
+ !insertmacro APP_UNASSOCIATE ".zip" `${APP_ID}`
+ !insertmacro APP_UNASSOCIATE ".mrpack" `${APP_ID}`
+
+ !insertmacro NotifyShell_AssocChanged
+SectionEnd
+
;--------------------------------
; Extra command line parameters