From 5de9d1742d9d615ac7ff0d0f70822fce0fe72de7 Mon Sep 17 00:00:00 2001 From: David Partouche Date: Tue, 11 Nov 2014 17:24:12 +0100 Subject: [PATCH 1/3] Added NSScreen class --- src/appkit.rs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/appkit.rs b/src/appkit.rs index 008de23..860803d 100644 --- a/src/appkit.rs +++ b/src/appkit.rs @@ -927,3 +927,16 @@ impl NSEvent for id { msg_send()(self, selector("modifierFlags")) } } + +pub trait NSScreen { + unsafe fn mainScreen(_: Self) -> id { + "NSScreen".send("mainScreen", ()) + } + unsafe fn frame(self) -> NSRect; +} + +impl NSScreen for id { + unsafe fn frame(self) -> NSRect { + self.send_rect("frame", ()) + } +} From 54ea87fdc8a0cc9f2bebc3e99fdadffd213a77fb Mon Sep 17 00:00:00 2001 From: David Partouche Date: Tue, 11 Nov 2014 17:29:07 +0100 Subject: [PATCH 2/3] Added a window level static --- src/appkit.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/appkit.rs b/src/appkit.rs index 860803d..93e09f7 100644 --- a/src/appkit.rs +++ b/src/appkit.rs @@ -272,6 +272,8 @@ pub enum NSEventModifierFlags { NSDeviceIndependentModifierFlagsMask = 0xffff0000, } +pub static NSMainMenuWindowLevel: libc::int32_t = 24; + pub trait NSAutoreleasePool { unsafe fn new(_: Self) -> id { msg_send()(class("NSAutoreleasePool"), selector("new")) From 0a951a6cdd5f1a175b929754c134f9443b105642 Mon Sep 17 00:00:00 2001 From: David Partouche Date: Tue, 11 Nov 2014 23:54:39 +0100 Subject: [PATCH 3/3] Forgot to switch to the new msg_send system --- src/appkit.rs | 6 +++--- src/base.rs | 5 +++++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/appkit.rs b/src/appkit.rs index 93e09f7..db144f7 100644 --- a/src/appkit.rs +++ b/src/appkit.rs @@ -9,7 +9,7 @@ #![allow(non_upper_case_globals)] -use base::{id, msg_send, class, selector}; +use base::{id, msg_send, msg_send_stret, class, selector}; use base::{SEL, NSInteger, NSUInteger}; use libc; @@ -932,13 +932,13 @@ impl NSEvent for id { pub trait NSScreen { unsafe fn mainScreen(_: Self) -> id { - "NSScreen".send("mainScreen", ()) + msg_send()(class("NSScreen"), selector("mainScreen")) } unsafe fn frame(self) -> NSRect; } impl NSScreen for id { unsafe fn frame(self) -> NSRect { - self.send_rect("frame", ()) + msg_send_stret()(self, selector("frame")) } } diff --git a/src/base.rs b/src/base.rs index c7c0568..18cb03f 100644 --- a/src/base.rs +++ b/src/base.rs @@ -46,6 +46,7 @@ extern { -> Class; pub fn objc_getClass(name: *const libc::c_char) -> id; pub fn objc_msgSend(theReceiver: id, theSelector: SEL, ...) -> id; + pub fn objc_msgSend_stret(theReceiver: id, theSelector: SEL, ...); pub fn objc_registerClassPair(cls: Class); pub fn sel_registerName(name: *const libc::c_char) -> SEL; } @@ -55,6 +56,10 @@ pub unsafe fn msg_send() -> extern fn(theReceiver: id, theSelector: SEL, ...) mem::transmute(objc_msgSend) } +pub unsafe fn msg_send_stret() -> extern fn(theReceiver: id, theSelector: SEL, ...) -> T { + mem::transmute(objc_msgSend_stret) +} + /// A convenience method to convert the name of a class to the class object itself. #[inline] pub fn class(name: &str) -> id {