2zw - X11 Windowmanager
Files | Log | Commits | Refs | README
Size: 1697 bytes
# TODO - add EWMH - add toggle float - > default is not float, pressing mod4 + space should toggle float window - handle dialoge windows properly - RandR can be improved. fn handleFloatingWindows() void { var node = list.first; while (node) |n| : (node = n.next) { if (n.data.is_floating) { var attrs: C.XWindowAttributes = undefined; _ = C.XGetWindowAttributes(display, n.data.w, &attrs); // Check if window needs to be positioned (new or off-screen) const needs_positioning = attrs.x <= 0 || attrs.y <= 0 || attrs.x >= @intCast(screen_w) || attrs.y >= @intCast(screen_h) || // Also reposition windows that are too large for the screen attrs.width > screen_w || attrs.height > screen_h; if (needs_positioning) { // Calculate dimensions - limit to 2/3 of screen size const width = @min(attrs.width, @as(c_int, @intCast(@divTrunc(screen_w * 2, 3)))); const height = @min(attrs.height, @as(c_int, @intCast(@divTrunc(screen_h * 2, 3)))); // Center the window const x = @divTrunc(@as(c_int, @intCast(screen_w)) - width, 2); const y = @divTrunc(@as(c_int, @intCast(screen_h)) - height, 2); _ = C.XMoveResizeWindow(display, n.data.w, x, y, @intCast(width), @intCast(height)); } // Ensure the window is on top of tiled windows _ = C.XRaiseWindow(display, n.data.w); } } }