/*++ Copyright (c) 1995 Microsoft Corporation Module Name: unixui.cxx Abstract: Contains Unix fixes Contents: //UnixAdjustButtonSpacing UnixRemoveMoreInfoButton Author: Sriram Nambakam (v-sriran) 07-Dec-1998 Revision History: 07-Dec-1998 v-sriran Created --*/ #include #include "ierrui.hxx" #include "iehelpid.h" #include "unixui.h" #include #if 0 #define MOVE_LEFT 0 #define MOVE_CENTER 1 #define MOVE_RIGHT 2 static void hAdjustButtonSpacing(HWND hwnd, short buttonSpacingStyle, short cButtons, short dwSpacing, ...); /* HACKHACK * On Unix, we draw a focus rectangle around the button that is currently * selected. And, the focus rectangle will overlap with the next button. * We programatically move the button to the *left*, to make it look good. */ void UnixAdjustButtonSpacing(HWND hwnd, DWORD dwDlgId) { switch(dwDlgId) { case IDD_HTTP_TO_HTTPS_ZONE_CROSSING: /* In these the More Info button is ID_TELL_ME_ABOUT_SECURITY */ hAdjustButtonSpacing(hwnd, MOVE_LEFT, 1, 5, IDOK); break; #ifdef NOT_YET_IMPLEMENTED case IDD_HTTPS_TO_HTTP_ZONE_CROSSING: break; case IDD_MIXED_SECURITY: break; case IDD_INVALID_CA: break; case IDD_BAD_CN: break; case IDD_CONFIRM_COOKIE: /* In this the More Info button is IDC_COOKIE_DETAILS */ break; #endif /* NOT_YET_IMPLEMENTED */ } } /* * This function assumes all buttons are of equal width for MOVE_CENTER */ void hAdjustButtonSpacing(HWND hwnd, short buttonSpacingStyle, short cButtons, short dwSpacing, ...) { va_list Arguments; DWORD dwButtonId; va_start(Arguments, dwSpacing); if (buttonSpacingStyle != MOVE_CENTER && dwSpacing) { HWND hCurButton; RECT rect; for (short i = 0; i < cButtons; i++) { dwButtonId = (DWORD)va_arg(Arguments,ULONG); if ((hCurButton = GetDlgItem(hwnd, dwButtonId))) { GetWindowRect(hCurButton, &rect); ScreenToClient(hwnd, (LPPOINT)&rect); SetWindowPos(hCurButton, NULL, (buttonSpacingStyle == MOVE_LEFT ? rect.left-dwSpacing : rect.left+dwSpacing), rect.top, 0, 0, SWP_NOZORDER|SWP_NOSIZE|SWP_NOACTIVATE); } } } else /* MOVE_CENTER; dwSpacing does not matter */ { } va_end(Arguments); return; } #endif /* 0 */ #define MOVE_CENTER 0x0001 static void hRemoveAndAdjust(HWND hwnd, DWORD dwFlags, short cButtons, ...); /* If we have Button1 Button2 "More Info" * The following function makes it * Button1 Button2 * And, you have to pass the ids of "More Info" Button2 Button1 in the * variable argument list in that order */ void UnixRemoveMoreInfoButton(HWND hwnd, DWORD dwDlgId) { switch(dwDlgId) { case IDD_HTTP_TO_HTTPS_ZONE_CROSSING: /* In these the More Info button is ID_TELL_ME_ABOUT_SECURITY */ hRemoveAndAdjust(hwnd, MOVE_CENTER, 2, ID_TELL_ME_ABOUT_SECURITY, IDOK); break; case IDD_HTTPS_TO_HTTP_ZONE_CROSSING: hRemoveAndAdjust(hwnd, 0, 3, ID_TELL_ME_ABOUT_SECURITY, IDCANCEL, IDOK); break; #ifdef NOT_YET_IMPLEMENTED case IDD_MIXED_SECURITY: break; case IDD_INVALID_CA: break; case IDD_BAD_CN: break; case IDD_CONFIRM_COOKIE: /* In this the More Info button is IDC_COOKIE_DETAILS */ break; #endif /* NOT_YET_IMPLEMENTED */ } } void hRemoveAndAdjust(HWND hwnd, DWORD dwFlags, short cButtons, ...) { va_list Arguments; DWORD dwMoreInfoButtonId, dwButtonId; HWND hMoreInfoButton, hDefButton; RECT rectCur, rectPrev; hDefButton = MwRemoveDefPushButtonStyle(hwnd); /* Expect the first button to be the More Info Button * Hide the More Info Button, and move the other buttons to * the appropriate positions */ if (cButtons < 2) goto Cleanup; /* We should use MOVE_CENTER only if there are two buttons in the move * list, and we hide the more info button, and move the other one to * the center */ if ((dwFlags & MOVE_CENTER) && cButtons != 2) goto Cleanup; va_start(Arguments, cButtons); dwMoreInfoButtonId = (DWORD)va_arg(Arguments, ULONG); hMoreInfoButton = GetDlgItem(hwnd, dwMoreInfoButtonId); if (!hMoreInfoButton) goto Cleanup; GetWindowRect(hMoreInfoButton, &rectPrev); ScreenToClient(hwnd, (LPPOINT)&rectPrev); if (dwFlags & MOVE_CENTER) { HWND hCurButton; dwButtonId = (DWORD)va_arg(Arguments,ULONG); if ((hCurButton = GetDlgItem(hwnd, dwButtonId))) { RECT rectDlg; GetWindowRect(hCurButton, &rectCur); ScreenToClient(hwnd, (LPPOINT)&rectCur); GetWindowRect(hwnd, &rectDlg); ScreenToClient(hwnd, (LPPOINT)&rectDlg); SetWindowPos(hCurButton, NULL, ((rectDlg.right - rectDlg.left)/2)-((rectCur.right-rectCur.left)/2), rectCur.top, 0, 0, SWP_NOZORDER|SWP_NOSIZE|SWP_NOACTIVATE); } } else { HWND hCurButton; for (short i = 1; i < cButtons; i++) { dwButtonId = (DWORD)va_arg(Arguments,ULONG); if ((hCurButton = GetDlgItem(hwnd, dwButtonId))) { GetWindowRect(hCurButton, &rectCur); ScreenToClient(hwnd, (LPPOINT)&rectCur); SetWindowPos(hCurButton, NULL, rectPrev.left, rectPrev.top, 0, 0, SWP_NOZORDER|SWP_NOSIZE|SWP_NOACTIVATE); memcpy(&rectPrev, &rectCur, sizeof(RECT)); } } } /* Hide the More Info Button */ ShowWindow(hMoreInfoButton, SW_HIDE); Cleanup: if (hDefButton) MwRestoreDefPushButtonStyle(hDefButton); return; }