Skip to content

Commit fdb5cc3

Browse files
committed
fix: crash on start for win32 applications
This was caused by a change in one enum type of zigwin32 which made a `@enumFromInt` call fail.
1 parent 4bfb914 commit fdb5cc3

File tree

1 file changed

+9
-2
lines changed

1 file changed

+9
-2
lines changed

src/backends/win32/Monitor.zig

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -160,18 +160,25 @@ pub fn getDpi(self: *Monitor) u32 {
160160
}
161161
}
162162

163+
// Workaround as zigwin32 doesn't use the correct enum type for ENUM_DISPLAY_SETTINGS_MODE
164+
pub extern "user32" fn EnumDisplaySettingsW(
165+
lpszDeviceName: ?[*:0]const u16,
166+
iModeNum: u32,
167+
lpDevMode: ?*win32.DEVMODEW,
168+
) callconv(@import("std").os.windows.WINAPI) win32.BOOL;
169+
163170
pub fn getNumberOfVideoModes(self: *Monitor) usize {
164171
var count: u32 = 0;
165172
var dev_mode: win32.DEVMODEW = std.mem.zeroInit(win32.DEVMODEW, .{ .dmSize = @sizeOf(win32.DEVMODEW) });
166-
while (win32.EnumDisplaySettingsW(self.adapter_win32_name, @enumFromInt(count), &dev_mode) != 0) {
173+
while (EnumDisplaySettingsW(self.adapter_win32_name, count, &dev_mode) != 0) {
167174
count += 1;
168175
}
169176
return count;
170177
}
171178

172179
pub fn getVideoMode(self: *Monitor, index: usize) lib.VideoMode {
173180
var dev_mode: win32.DEVMODEW = std.mem.zeroInit(win32.DEVMODEW, .{ .dmSize = @sizeOf(win32.DEVMODEW) });
174-
std.debug.assert(win32.EnumDisplaySettingsW(self.adapter_win32_name, @enumFromInt(index), &dev_mode) != 0);
181+
std.debug.assert(EnumDisplaySettingsW(self.adapter_win32_name, @intCast(index), &dev_mode) != 0);
175182
return .{
176183
.width = @intCast(dev_mode.dmPelsWidth),
177184
.height = @intCast(dev_mode.dmPelsHeight),

0 commit comments

Comments
 (0)