Skip to content

Commit

Permalink
macos: Use one EventUserData per widget, not a single shared one.
Browse files Browse the repository at this point in the history
  • Loading branch information
geon committed Nov 2, 2024
1 parent 2204a5f commit b93840f
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 9 deletions.
22 changes: 14 additions & 8 deletions src/backends/macos/backend.zig
Original file line number Diff line number Diff line change
Expand Up @@ -62,11 +62,8 @@ pub const GuiWidget = struct {
data: *EventUserData,
};

var test_data = EventUserData{ .peer = undefined };
pub inline fn getEventUserData(peer: PeerType) *EventUserData {
_ = peer;
return &test_data;
//return @ptrCast(*EventUserData, @alignCast(@alignOf(EventUserData), c.g_object_get_data(@ptrCast(*c.GObject, peer), "eventUserData").?));
pub inline fn getEventUserData(peer: GuiWidget) *EventUserData {
return peer.data;
}

pub fn Events(comptime T: type) type {
Expand Down Expand Up @@ -169,7 +166,10 @@ pub const Window = struct {
);

return Window{
.peer = GuiWidget{ .object = window, .data = undefined },
.peer = GuiWidget{
.object = window,
.data = try lib.internal.scratch_allocator.create(EventUserData),
},
};
}

Expand Down Expand Up @@ -246,7 +246,10 @@ pub const Container = struct {
const view = (try getFlippedNSView())
.msgSend(objc.Object, "alloc", .{})
.msgSend(objc.Object, "initWithFrame:", .{AppKit.NSRect.make(0, 0, 1, 1)});
return Container{ .peer = GuiWidget{ .object = view, .data = undefined } };
return Container{ .peer = GuiWidget{
.object = view,
.data = try lib.internal.scratch_allocator.create(EventUserData),
} };
}

pub fn add(self: *const Container, peer: GuiWidget) void {
Expand Down Expand Up @@ -347,7 +350,10 @@ pub const Label = struct {
const NSTextField = objc.getClass("NSTextField").?;
const label = NSTextField.msgSend(objc.Object, "labelWithString:", .{AppKit.nsString("")});
return Label{
.peer = GuiWidget{ .object = label, .data = undefined },
.peer = GuiWidget{
.object = label,
.data = try lib.internal.scratch_allocator.create(EventUserData),
},
};
}

Expand Down
6 changes: 5 additions & 1 deletion src/backends/macos/components/Button.zig
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ const objc = @import("objc");
const AppKit = @import("../AppKit.zig");
const Events = backend.Events;
const BackendError = @import("../../shared.zig").BackendError;
const lib = @import("../../../capy.zig");

const Button = @This();

Expand All @@ -14,7 +15,10 @@ pub fn create() BackendError!Button {
const NSButton = objc.getClass("NSButton").?;
// const button = NSButton.msgSend(objc.Object, "alloc", .{})
const button = NSButton.msgSend(objc.Object, "buttonWithTitle:target:action:", .{ AppKit.nsString(""), AppKit.nil, null });
const peer = backend.GuiWidget{ .object = button, .data = undefined };
const peer = backend.GuiWidget{
.object = button,
.data = try lib.internal.scratch_allocator.create(backend.EventUserData),
};
try Button.setupEvents(peer);
return Button{ .peer = peer };
}
Expand Down

0 comments on commit b93840f

Please sign in to comment.