Something went wrong. Try again.
The cutest scrollable window manager for Windows
windows tiling-manager tiling scrollable-window-manager scrollable cute window scroll window-manager
Something went wrong. Try again.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253const Monitor = @This();
const Error = error{EnumDisplayMonitorsFailed};
handle: win32.graphics.gdi.HMONITOR,
const EnumContext = struct { allocator: std.mem.Allocator, list: *std.ArrayList(Monitor), err: ?std.mem.Allocator.Error = null,};
/// Appends each monitor to `list`.pub fn enumerate(allocator: std.mem.Allocator, list: *std.ArrayList(Monitor)) !void { var ctx: EnumContext = .{ .allocator = allocator, .list = list };
if (win32.graphics.gdi.EnumDisplayMonitors(null, null, &monitorEnumProc, @intCast(@intFromPtr(&ctx))) == 0) { log.err("couldn't look at the monitors", .{}); return Error.EnumDisplayMonitorsFailed; }
if (ctx.err) |e| { log.err("couldn't get the monitors: {s}", .{@errorName(e)}); return e; }}
fn monitorEnumProc( hmonitor: ?win32.graphics.gdi.HMONITOR, _: ?win32.graphics.gdi.HDC, _: ?*win32.foundation.RECT, lparam: win32.foundation.LPARAM,) callconv(.winapi) win32.foundation.BOOL { const ctx: *EnumContext = @ptrFromInt(@as(usize, @intCast(lparam)));
const monitor: Monitor = .{ .handle = hmonitor.? };
ctx.list.ensureUnusedCapacity(ctx.allocator, 1) catch |e| { ctx.err = e; return 0; }; ctx.list.appendAssumeCapacity(monitor);
log.debug("spotted monitor (now {d})", .{ctx.list.items.len});
return 1;}
const log = std.log.scoped(.monitor);
const win32 = @import("win32");const std = @import("std");