aboutsummaryrefslogtreecommitdiff
path: root/src/ext
diff options
context:
space:
mode:
authorSean Hall <r.sean.hall@gmail.com>2021-10-27 14:42:32 -0500
committerSean Hall <r.sean.hall@gmail.com>2021-11-01 16:34:09 -0500
commitbad2e93524f376cfeb76d5231d4b08510bdad033 (patch)
treeb201ec4b1495a0af4805ea6b0bc4fce9f8bde7b7 /src/ext
parent8fa040da9d0d3826f5ffda6bcbec4f53abd97452 (diff)
downloadwix-bad2e93524f376cfeb76d5231d4b08510bdad033.tar.gz
wix-bad2e93524f376cfeb76d5231d4b08510bdad033.tar.bz2
wix-bad2e93524f376cfeb76d5231d4b08510bdad033.zip
Add more thmutil window messages to simplify handling control events.
Diffstat (limited to 'src/ext')
-rw-r--r--src/ext/Bal/wixstdba/WixStandardBootstrapperApplication.cpp210
1 files changed, 152 insertions, 58 deletions
diff --git a/src/ext/Bal/wixstdba/WixStandardBootstrapperApplication.cpp b/src/ext/Bal/wixstdba/WixStandardBootstrapperApplication.cpp
index 8cdd31ce..2283880c 100644
--- a/src/ext/Bal/wixstdba/WixStandardBootstrapperApplication.cpp
+++ b/src/ext/Bal/wixstdba/WixStandardBootstrapperApplication.cpp
@@ -2878,65 +2878,11 @@ private:
2878 pBA->OnShowFailure(); 2878 pBA->OnShowFailure();
2879 return 0; 2879 return 0;
2880 2880
2881 case WM_COMMAND: 2881 case WM_THMUTIL_CONTROL_WM_COMMAND:
2882 switch (HIWORD(wParam)) 2882 return pBA->OnThemeControlWmCommand(reinterpret_cast<THEME_CONTROLWMCOMMAND_ARGS*>(wParam), reinterpret_cast<THEME_CONTROLWMCOMMAND_RESULTS*>(lParam));
2883 {
2884 case BN_CLICKED:
2885 switch (LOWORD(wParam))
2886 {
2887 case WIXSTDBA_CONTROL_EULA_ACCEPT_CHECKBOX:
2888 pBA->OnClickAcceptCheckbox();
2889 return 0;
2890
2891 case WIXSTDBA_CONTROL_INSTALL_BUTTON:
2892 pBA->OnClickInstallButton();
2893 return 0;
2894
2895 case WIXSTDBA_CONTROL_REPAIR_BUTTON:
2896 pBA->OnClickRepairButton();
2897 return 0;
2898
2899 case WIXSTDBA_CONTROL_UNINSTALL_BUTTON:
2900 pBA->OnClickUninstallButton();
2901 return 0;
2902
2903 case WIXSTDBA_CONTROL_LAUNCH_BUTTON:
2904 pBA->OnClickLaunchButton();
2905 return 0;
2906
2907 case WIXSTDBA_CONTROL_SUCCESS_RESTART_BUTTON: __fallthrough;
2908 case WIXSTDBA_CONTROL_FAILURE_RESTART_BUTTON:
2909 pBA->OnClickRestartButton();
2910 return 0;
2911
2912 case WIXSTDBA_CONTROL_PROGRESS_CANCEL_BUTTON:
2913 pBA->OnClickCloseButton();
2914 return 0;
2915 }
2916 break;
2917 }
2918 break;
2919 2883
2920 case WM_NOTIFY: 2884 case WM_THMUTIL_CONTROL_WM_NOTIFY:
2921 if (lParam) 2885 return pBA->OnThemeControlWmNotify(reinterpret_cast<THEME_CONTROLWMNOTIFY_ARGS*>(wParam), reinterpret_cast<THEME_CONTROLWMNOTIFY_RESULTS*>(lParam));
2922 {
2923 LPNMHDR pnmhdr = reinterpret_cast<LPNMHDR>(lParam);
2924 switch (pnmhdr->code)
2925 {
2926 case NM_CLICK: __fallthrough;
2927 case NM_RETURN:
2928 switch (static_cast<DWORD>(pnmhdr->idFrom))
2929 {
2930 case WIXSTDBA_CONTROL_EULA_LINK:
2931 pBA->OnClickEulaLink();
2932 return 1;
2933 case WIXSTDBA_CONTROL_FAILURE_LOGFILE_LINK:
2934 pBA->OnClickLogFileLink();
2935 return 1;
2936 }
2937 }
2938 }
2939 break;
2940 } 2886 }
2941 2887
2942 if (pBA && pBA->m_pTaskbarList && uMsg == pBA->m_uTaskbarButtonCreatedMessage) 2888 if (pBA && pBA->m_pTaskbarList && uMsg == pBA->m_uTaskbarButtonCreatedMessage)
@@ -3666,6 +3612,154 @@ private:
3666 ReleaseStr(sczLogFile); 3612 ReleaseStr(sczLogFile);
3667 } 3613 }
3668 3614
3615 BOOL OnThemeControlWmCommand(
3616 __in const THEME_CONTROLWMCOMMAND_ARGS* pArgs,
3617 __in THEME_CONTROLWMCOMMAND_RESULTS* pResults
3618 )
3619 {
3620 HRESULT hr = S_OK;
3621 BOOL fProcessed = FALSE;
3622 BA_FUNCTIONS_ONTHEMECONTROLWMCOMMAND_ARGS themeControlWmCommandArgs = { };
3623 BA_FUNCTIONS_ONTHEMECONTROLWMCOMMAND_RESULTS themeControlWmCommandResults = { };
3624
3625 switch (HIWORD(pArgs->wParam))
3626 {
3627 case BN_CLICKED:
3628 switch (pArgs->pThemeControl->wId)
3629 {
3630 case WIXSTDBA_CONTROL_EULA_ACCEPT_CHECKBOX:
3631 OnClickAcceptCheckbox();
3632 fProcessed = TRUE;
3633 pResults->lResult = 0;
3634 ExitFunction();
3635
3636 case WIXSTDBA_CONTROL_INSTALL_BUTTON:
3637 OnClickInstallButton();
3638 fProcessed = TRUE;
3639 pResults->lResult = 0;
3640 ExitFunction();
3641
3642 case WIXSTDBA_CONTROL_REPAIR_BUTTON:
3643 OnClickRepairButton();
3644 fProcessed = TRUE;
3645 pResults->lResult = 0;
3646 ExitFunction();
3647
3648 case WIXSTDBA_CONTROL_UNINSTALL_BUTTON:
3649 OnClickUninstallButton();
3650 fProcessed = TRUE;
3651 pResults->lResult = 0;
3652 ExitFunction();
3653
3654 case WIXSTDBA_CONTROL_LAUNCH_BUTTON:
3655 OnClickLaunchButton();
3656 fProcessed = TRUE;
3657 pResults->lResult = 0;
3658 ExitFunction();
3659
3660 case WIXSTDBA_CONTROL_SUCCESS_RESTART_BUTTON: __fallthrough;
3661 case WIXSTDBA_CONTROL_FAILURE_RESTART_BUTTON:
3662 OnClickRestartButton();
3663 fProcessed = TRUE;
3664 pResults->lResult = 0;
3665 ExitFunction();
3666
3667 case WIXSTDBA_CONTROL_PROGRESS_CANCEL_BUTTON:
3668 OnClickCloseButton();
3669 fProcessed = TRUE;
3670 pResults->lResult = 0;
3671 ExitFunction();
3672 }
3673 break;
3674 }
3675
3676 if (m_pfnBAFunctionsProc)
3677 {
3678 themeControlWmCommandArgs.cbSize = sizeof(themeControlWmCommandArgs);
3679 themeControlWmCommandArgs.wParam = pArgs->wParam;
3680 themeControlWmCommandArgs.wzName = pArgs->pThemeControl->sczName;
3681 themeControlWmCommandArgs.wId = pArgs->pThemeControl->wId;
3682 themeControlWmCommandArgs.hWnd = pArgs->pThemeControl->hWnd;
3683
3684 themeControlWmCommandResults.cbSize = sizeof(themeControlWmCommandResults);
3685 themeControlWmCommandResults.lResult = pResults->lResult;
3686
3687 hr = m_pfnBAFunctionsProc(BA_FUNCTIONS_MESSAGE_ONTHEMECONTROLWMCOMMAND, &themeControlWmCommandArgs, &themeControlWmCommandResults, m_pvBAFunctionsProcContext);
3688 if (E_NOTIMPL != hr)
3689 {
3690 BalExitOnFailure(hr, "BAFunctions OnThemeControlWmCommand failed.");
3691
3692 if (themeControlWmCommandResults.fProcessed)
3693 {
3694 fProcessed = TRUE;
3695 pResults->lResult = themeControlWmCommandResults.lResult;
3696 ExitFunction();
3697 }
3698 }
3699 }
3700
3701LExit:
3702 return fProcessed;
3703 }
3704
3705 BOOL OnThemeControlWmNotify(
3706 __in const THEME_CONTROLWMNOTIFY_ARGS* pArgs,
3707 __in THEME_CONTROLWMNOTIFY_RESULTS* pResults
3708 )
3709 {
3710 HRESULT hr = S_OK;
3711 BOOL fProcessed = FALSE;
3712 BA_FUNCTIONS_ONTHEMECONTROLWMNOTIFY_ARGS themeControlWmNotifyArgs = { };
3713 BA_FUNCTIONS_ONTHEMECONTROLWMNOTIFY_RESULTS themeControlWmNotifyResults = { };
3714
3715 switch (pArgs->lParam->code)
3716 {
3717 case NM_CLICK: __fallthrough;
3718 case NM_RETURN:
3719 switch (pArgs->pThemeControl->wId)
3720 {
3721 case WIXSTDBA_CONTROL_EULA_LINK:
3722 OnClickEulaLink();
3723 fProcessed = TRUE;
3724 pResults->lResult = 1;
3725 ExitFunction();
3726 case WIXSTDBA_CONTROL_FAILURE_LOGFILE_LINK:
3727 OnClickLogFileLink();
3728 fProcessed = TRUE;
3729 pResults->lResult = 1;
3730 ExitFunction();
3731 }
3732 }
3733
3734 if (m_pfnBAFunctionsProc)
3735 {
3736 themeControlWmNotifyArgs.cbSize = sizeof(themeControlWmNotifyArgs);
3737 themeControlWmNotifyArgs.lParam = pArgs->lParam;
3738 themeControlWmNotifyArgs.wzName = pArgs->pThemeControl->sczName;
3739 themeControlWmNotifyArgs.wId = pArgs->pThemeControl->wId;
3740 themeControlWmNotifyArgs.hWnd = pArgs->pThemeControl->hWnd;
3741
3742 themeControlWmNotifyResults.cbSize = sizeof(themeControlWmNotifyResults);
3743 themeControlWmNotifyResults.lResult = pResults->lResult;
3744
3745 hr = m_pfnBAFunctionsProc(BA_FUNCTIONS_MESSAGE_ONTHEMECONTROLWMCOMMAND, &themeControlWmNotifyArgs, &themeControlWmNotifyResults, m_pvBAFunctionsProcContext);
3746 if (E_NOTIMPL != hr)
3747 {
3748 BalExitOnFailure(hr, "BAFunctions OnThemeControlWmNotify failed.");
3749
3750 if (themeControlWmNotifyResults.fProcessed)
3751 {
3752 fProcessed = TRUE;
3753 pResults->lResult = themeControlWmNotifyResults.lResult;
3754 ExitFunction();
3755 }
3756 }
3757 }
3758
3759LExit:
3760 return fProcessed;
3761 }
3762
3669 3763
3670 // 3764 //
3671 // SetState 3765 // SetState