mirror of
https://github.com/pbatard/rufus.git
synced 2024-08-14 23:57:05 +00:00
[ui] improve handling of the Quick Format and Extended Label options
* Make sure they are always unchecked for pure DD images * Make sure Quick Format is checked and disabled for ReFS or Large FAT32 * Also make sure Fixes for old BIOSes is disabled for pure DD images
This commit is contained in:
parent
e11113f802
commit
0f6794a72b
3 changed files with 41 additions and 25 deletions
55
src/rufus.c
55
src/rufus.c
|
@ -67,7 +67,7 @@ static int64_t last_iso_blocking_status;
|
||||||
static int selected_pt = -1, selected_fs = FS_UNKNOWN, preselected_fs = FS_UNKNOWN;
|
static int selected_pt = -1, selected_fs = FS_UNKNOWN, preselected_fs = FS_UNKNOWN;
|
||||||
static int image_index = 0, select_index = 0;
|
static int image_index = 0, select_index = 0;
|
||||||
static RECT relaunch_rc = { -65536, -65536, 0, 0};
|
static RECT relaunch_rc = { -65536, -65536, 0, 0};
|
||||||
static UINT uQFChecked = BST_CHECKED, uMBRChecked = BST_UNCHECKED;
|
static UINT uMBRChecked = BST_UNCHECKED;
|
||||||
static HANDLE format_thid = NULL;
|
static HANDLE format_thid = NULL;
|
||||||
static HWND hSelectImage = NULL, hStart = NULL;
|
static HWND hSelectImage = NULL, hStart = NULL;
|
||||||
static char szTimer[12] = "00:00:00";
|
static char szTimer[12] = "00:00:00";
|
||||||
|
@ -678,7 +678,7 @@ static void EnableMBRBootOptions(BOOL enable, BOOL remove_checkboxes)
|
||||||
static UINT uXPartChecked = BST_UNCHECKED;
|
static UINT uXPartChecked = BST_UNCHECKED;
|
||||||
|
|
||||||
if ((partition_type != PARTITION_STYLE_MBR) || (target_type != TT_BIOS) || (boot_type == BT_NON_BOOTABLE) ||
|
if ((partition_type != PARTITION_STYLE_MBR) || (target_type != TT_BIOS) || (boot_type == BT_NON_BOOTABLE) ||
|
||||||
((boot_type == BT_IMAGE) && !IS_BIOS_BOOTABLE(img_report))) {
|
((boot_type == BT_IMAGE) && (!IS_BIOS_BOOTABLE(img_report) || IS_DD_ONLY(img_report)))) {
|
||||||
// These options cannot apply if we aren't using MBR+BIOS, or are using an image that isn't BIOS bootable
|
// These options cannot apply if we aren't using MBR+BIOS, or are using an image that isn't BIOS bootable
|
||||||
actual_enable_mbr = FALSE;
|
actual_enable_mbr = FALSE;
|
||||||
actual_enable_fix = FALSE;
|
actual_enable_fix = FALSE;
|
||||||
|
@ -716,11 +716,14 @@ static void EnableMBRBootOptions(BOOL enable, BOOL remove_checkboxes)
|
||||||
|
|
||||||
static void EnableExtendedLabel(BOOL enable, BOOL remove_checkboxes)
|
static void EnableExtendedLabel(BOOL enable, BOOL remove_checkboxes)
|
||||||
{
|
{
|
||||||
HWND hCtrl = GetDlgItem(hMainDialog, IDC_EXTENDED_LABEL);
|
|
||||||
static UINT checked, state = 0;
|
static UINT checked, state = 0;
|
||||||
|
HWND hCtrl = GetDlgItem(hMainDialog, IDC_EXTENDED_LABEL);
|
||||||
|
|
||||||
|
if ((fs_type >= FS_EXT2) || ((boot_type == BT_IMAGE) && IS_DD_ONLY(img_report)))
|
||||||
|
enable = FALSE;
|
||||||
|
|
||||||
if (remove_checkboxes) {
|
if (remove_checkboxes) {
|
||||||
if (!enable && IsWindowEnabled(hCtrl) && (state != 1)) {
|
if (!enable && (state != 1)) {
|
||||||
checked = IsChecked(IDC_EXTENDED_LABEL);
|
checked = IsChecked(IDC_EXTENDED_LABEL);
|
||||||
CheckDlgButton(hMainDialog, IDC_EXTENDED_LABEL, BST_UNCHECKED);
|
CheckDlgButton(hMainDialog, IDC_EXTENDED_LABEL, BST_UNCHECKED);
|
||||||
state = 1;
|
state = 1;
|
||||||
|
@ -733,27 +736,33 @@ static void EnableExtendedLabel(BOOL enable, BOOL remove_checkboxes)
|
||||||
EnableWindow(hCtrl, enable);
|
EnableWindow(hCtrl, enable);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void EnableQuickFormat(BOOL enable)
|
static void EnableQuickFormat(BOOL enable, BOOL remove_checkboxes)
|
||||||
{
|
{
|
||||||
|
static UINT checked, state = 0;
|
||||||
HWND hCtrl = GetDlgItem(hMainDialog, IDC_QUICK_FORMAT);
|
HWND hCtrl = GetDlgItem(hMainDialog, IDC_QUICK_FORMAT);
|
||||||
|
|
||||||
// Keep track of the current state if we are going to disable it
|
if ((boot_type == BT_IMAGE) && IS_DD_ONLY(img_report))
|
||||||
if (IsWindowEnabled(hCtrl) && !enable) {
|
enable = FALSE;
|
||||||
uQFChecked = IsChecked(IDC_QUICK_FORMAT);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Disable/restore the quick format control depending on large FAT32 or ReFS
|
// Disable/restore the quick format control depending on large FAT32 or ReFS
|
||||||
if (((fs_type == FS_FAT32) && ((SelectedDrive.DiskSize > LARGE_FAT32_SIZE) || (force_large_fat32))) || (fs_type == FS_REFS)) {
|
if (((fs_type == FS_FAT32) && ((SelectedDrive.DiskSize > LARGE_FAT32_SIZE) || (force_large_fat32))) || (fs_type == FS_REFS)) {
|
||||||
enable = FALSE;
|
enable = FALSE;
|
||||||
|
// Quick Format is the only option for the above
|
||||||
|
remove_checkboxes = FALSE;
|
||||||
CheckDlgButton(hMainDialog, IDC_QUICK_FORMAT, BST_CHECKED);
|
CheckDlgButton(hMainDialog, IDC_QUICK_FORMAT, BST_CHECKED);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Restore state if we are re-enabling the control
|
if (remove_checkboxes) {
|
||||||
if (!IsWindowEnabled(hCtrl) && enable) {
|
if (!enable && (state != 1)) {
|
||||||
CheckDlgButton(hMainDialog, IDC_QUICK_FORMAT, uQFChecked);
|
checked = IsChecked(IDC_QUICK_FORMAT);
|
||||||
|
CheckDlgButton(hMainDialog, IDC_QUICK_FORMAT, BST_UNCHECKED);
|
||||||
|
state = 1;
|
||||||
|
} else if (enable && !IsWindowEnabled(hCtrl) && (state != 2)) {
|
||||||
|
if (state != 0)
|
||||||
|
CheckDlgButton(hMainDialog, IDC_QUICK_FORMAT, checked);
|
||||||
|
state = 2;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Now enable or disable the control
|
|
||||||
EnableWindow(hCtrl, enable);
|
EnableWindow(hCtrl, enable);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -782,10 +791,16 @@ static void EnableBootOptions(BOOL enable, BOOL remove_checkboxes)
|
||||||
EnableMBRBootOptions(actual_enable, remove_checkboxes);
|
EnableMBRBootOptions(actual_enable, remove_checkboxes);
|
||||||
|
|
||||||
EnableWindow(GetDlgItem(hMainDialog, IDC_LABEL), actual_enable);
|
EnableWindow(GetDlgItem(hMainDialog, IDC_LABEL), actual_enable);
|
||||||
EnableQuickFormat(actual_enable);
|
if (boot_type == BT_IMAGE) {
|
||||||
|
if (IS_DD_ONLY(img_report))
|
||||||
|
remove_checkboxes = TRUE;
|
||||||
|
else if (image_path == NULL)
|
||||||
|
remove_checkboxes = FALSE;
|
||||||
|
}
|
||||||
|
EnableQuickFormat(actual_enable, remove_checkboxes);
|
||||||
|
EnableExtendedLabel(actual_enable, remove_checkboxes);
|
||||||
EnableWindow(GetDlgItem(hMainDialog, IDC_BAD_BLOCKS), actual_enable_bb);
|
EnableWindow(GetDlgItem(hMainDialog, IDC_BAD_BLOCKS), actual_enable_bb);
|
||||||
EnableWindow(GetDlgItem(hMainDialog, IDC_NB_PASSES), actual_enable_bb);
|
EnableWindow(GetDlgItem(hMainDialog, IDC_NB_PASSES), actual_enable_bb);
|
||||||
EnableExtendedLabel((fs_type < FS_EXT2) ? actual_enable : FALSE, remove_checkboxes);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Toggle controls according to operation
|
// Toggle controls according to operation
|
||||||
|
@ -2165,16 +2180,16 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
|
||||||
case IDC_FILE_SYSTEM:
|
case IDC_FILE_SYSTEM:
|
||||||
if ((HIWORD(wParam) != CBN_SELCHANGE) && (HIWORD(wParam) != CBN_SELCHANGE_INTERNAL))
|
if ((HIWORD(wParam) != CBN_SELCHANGE) && (HIWORD(wParam) != CBN_SELCHANGE_INTERNAL))
|
||||||
break;
|
break;
|
||||||
if (IsWindowEnabled(hFileSystem))
|
|
||||||
EnableQuickFormat(TRUE);
|
|
||||||
set_selected_fs = (HIWORD(wParam) == CBN_SELCHANGE);
|
set_selected_fs = (HIWORD(wParam) == CBN_SELCHANGE);
|
||||||
fs_type = (int)ComboBox_GetItemData(hFileSystem, ComboBox_GetCurSel(hFileSystem));
|
fs_type = (int)ComboBox_GetItemData(hFileSystem, ComboBox_GetCurSel(hFileSystem));
|
||||||
SetClusterSizes(fs_type);
|
SetClusterSizes(fs_type);
|
||||||
if (set_selected_fs && (fs_type > 0))
|
if (set_selected_fs && (fs_type > 0))
|
||||||
selected_fs = fs_type;
|
selected_fs = fs_type;
|
||||||
|
// Some FS's (such as ReFS or Large FAT32) only have QuickFormat so make sure we reflect that
|
||||||
|
EnableQuickFormat(TRUE, TRUE);
|
||||||
EnableMBRBootOptions(TRUE, TRUE);
|
EnableMBRBootOptions(TRUE, TRUE);
|
||||||
SetMBRProps();
|
SetMBRProps();
|
||||||
EnableExtendedLabel((fs_type < FS_EXT2), TRUE);
|
EnableExtendedLabel(TRUE, TRUE);
|
||||||
break;
|
break;
|
||||||
case IDC_BOOT_SELECTION:
|
case IDC_BOOT_SELECTION:
|
||||||
if (HIWORD(wParam) != CBN_SELCHANGE)
|
if (HIWORD(wParam) != CBN_SELCHANGE)
|
||||||
|
|
|
@ -306,6 +306,7 @@ enum checksum_type {
|
||||||
#define HAS_WIN7_EFI(r) ((r.has_efi == 1) && HAS_WININST(r))
|
#define HAS_WIN7_EFI(r) ((r.has_efi == 1) && HAS_WININST(r))
|
||||||
#define HAS_EFI_IMG(r) (r.efi_img_path[0] != 0)
|
#define HAS_EFI_IMG(r) (r.efi_img_path[0] != 0)
|
||||||
#define IS_DD_BOOTABLE(r) (r.is_bootable_img)
|
#define IS_DD_BOOTABLE(r) (r.is_bootable_img)
|
||||||
|
#define IS_DD_ONLY(r) (r.is_bootable_img && (!r.is_iso || r.disable_iso))
|
||||||
#define IS_EFI_BOOTABLE(r) (r.has_efi != 0)
|
#define IS_EFI_BOOTABLE(r) (r.has_efi != 0)
|
||||||
#define IS_BIOS_BOOTABLE(r) (HAS_BOOTMGR(r) || HAS_SYSLINUX(r) || HAS_WINPE(r) || HAS_GRUB(r) || HAS_REACTOS(r) || HAS_KOLIBRIOS(r))
|
#define IS_BIOS_BOOTABLE(r) (HAS_BOOTMGR(r) || HAS_SYSLINUX(r) || HAS_WINPE(r) || HAS_GRUB(r) || HAS_REACTOS(r) || HAS_KOLIBRIOS(r))
|
||||||
#define HAS_WINTOGO(r) (HAS_BOOTMGR(r) && IS_EFI_BOOTABLE(r) && HAS_WININST(r))
|
#define HAS_WINTOGO(r) (HAS_BOOTMGR(r) && IS_EFI_BOOTABLE(r) && HAS_WININST(r))
|
||||||
|
|
10
src/rufus.rc
10
src/rufus.rc
|
@ -33,7 +33,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
|
||||||
IDD_DIALOG DIALOGEX 12, 12, 232, 326
|
IDD_DIALOG DIALOGEX 12, 12, 232, 326
|
||||||
STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||||
EXSTYLE WS_EX_ACCEPTFILES
|
EXSTYLE WS_EX_ACCEPTFILES
|
||||||
CAPTION "Rufus 3.7.1567"
|
CAPTION "Rufus 3.7.1568"
|
||||||
FONT 9, "Segoe UI Symbol", 400, 0, 0x0
|
FONT 9, "Segoe UI Symbol", 400, 0, 0x0
|
||||||
BEGIN
|
BEGIN
|
||||||
LTEXT "Drive Properties",IDS_DRIVE_PROPERTIES_TXT,8,6,53,12,NOT WS_GROUP
|
LTEXT "Drive Properties",IDS_DRIVE_PROPERTIES_TXT,8,6,53,12,NOT WS_GROUP
|
||||||
|
@ -394,8 +394,8 @@ END
|
||||||
//
|
//
|
||||||
|
|
||||||
VS_VERSION_INFO VERSIONINFO
|
VS_VERSION_INFO VERSIONINFO
|
||||||
FILEVERSION 3,7,1567,0
|
FILEVERSION 3,7,1568,0
|
||||||
PRODUCTVERSION 3,7,1567,0
|
PRODUCTVERSION 3,7,1568,0
|
||||||
FILEFLAGSMASK 0x3fL
|
FILEFLAGSMASK 0x3fL
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
FILEFLAGS 0x1L
|
FILEFLAGS 0x1L
|
||||||
|
@ -413,13 +413,13 @@ BEGIN
|
||||||
VALUE "Comments", "https://akeo.ie"
|
VALUE "Comments", "https://akeo.ie"
|
||||||
VALUE "CompanyName", "Akeo Consulting"
|
VALUE "CompanyName", "Akeo Consulting"
|
||||||
VALUE "FileDescription", "Rufus"
|
VALUE "FileDescription", "Rufus"
|
||||||
VALUE "FileVersion", "3.7.1567"
|
VALUE "FileVersion", "3.7.1568"
|
||||||
VALUE "InternalName", "Rufus"
|
VALUE "InternalName", "Rufus"
|
||||||
VALUE "LegalCopyright", "© 2011-2019 Pete Batard (GPL v3)"
|
VALUE "LegalCopyright", "© 2011-2019 Pete Batard (GPL v3)"
|
||||||
VALUE "LegalTrademarks", "https://www.gnu.org/copyleft/gpl.html"
|
VALUE "LegalTrademarks", "https://www.gnu.org/copyleft/gpl.html"
|
||||||
VALUE "OriginalFilename", "rufus-3.7.exe"
|
VALUE "OriginalFilename", "rufus-3.7.exe"
|
||||||
VALUE "ProductName", "Rufus"
|
VALUE "ProductName", "Rufus"
|
||||||
VALUE "ProductVersion", "3.7.1567"
|
VALUE "ProductVersion", "3.7.1568"
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
BLOCK "VarFileInfo"
|
BLOCK "VarFileInfo"
|
||||||
|
|
Loading…
Reference in a new issue