summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorManolo Gouy <Manolo>2011-04-11 19:52:41 +0000
committerManolo Gouy <Manolo>2011-04-11 19:52:41 +0000
commit8d084cb4bc5830e566dc516f6a85a4262a464fda (patch)
treea949f4826e1d05f944cb177f4a926f5701b27f8e /src
parent4710a6767088ab1dc6f5ab8f1219cd8ce1b09018 (diff)
Added missing fl_lock_function() / fl_unlock_function() pairs of calls.
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@8576 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'src')
-rw-r--r--src/Fl_cocoa.mm61
1 files changed, 53 insertions, 8 deletions
diff --git a/src/Fl_cocoa.mm b/src/Fl_cocoa.mm
index c88f73474..76aa0a143 100644
--- a/src/Fl_cocoa.mm
+++ b/src/Fl_cocoa.mm
@@ -491,6 +491,7 @@ int fl_ready()
static void processFLTKEvent(void) {
+ fl_lock_function();
dataready.CancelThread(DEBUGTEXT("DATA READY EVENT\n"));
// CHILD THREAD TELLS US DATA READY
@@ -506,6 +507,7 @@ static void processFLTKEvent(void) {
dataready.HandleData(r,w,x);
break;
}
+ fl_unlock_function();
return;
}
@@ -617,10 +619,12 @@ static void do_timer(CFRunLoopTimerRef timer, void* data)
}
- (BOOL)windowShouldClose:(FLWindow *)fl
{
+ fl_lock_function();
Fl::handle( FL_CLOSE, [fl getFl_Window] ); // this might or might not close the window
if (!Fl_X::first) return YES;
Fl_Window *l = Fl::first_window();
while( l != NULL && l != [fl getFl_Window]) l = Fl::next_window(l);
+ fl_unlock_function();
return (l == NULL ? YES : NO);
}
- (BOOL)containsGLsubwindow
@@ -1058,6 +1062,7 @@ extern "C" {
@implementation FLDelegate
- (void)windowDidMove:(NSNotification *)notif
{
+ fl_lock_function();
FLWindow *nsw = (FLWindow*)[notif object];
Fl_Window *window = [nsw getFl_Window];
NSPoint pt, pt2;
@@ -1069,9 +1074,11 @@ extern "C" {
if ([nsw containsGLsubwindow] ) {
[nsw display];// redraw window after moving if it contains OpenGL subwindows
}
+ fl_unlock_function();
}
- (void)windowDidResize:(NSNotification *)notif
{
+ fl_lock_function();
FLWindow *nsw = (FLWindow*)[notif object];
Fl_Window *window = [nsw getFl_Window];
NSRect r = [[nsw contentView] frame];
@@ -1085,52 +1092,66 @@ extern "C" {
(int)([[nsw screen] frame].size.height - pt2.y),
(int)r.size.width,
(int)r.size.height);
+ fl_unlock_function();
}
- (void)windowDidResignKey:(NSNotification *)notif
{
+ fl_lock_function();
FLWindow *nsw = (FLWindow*)[notif object];
Fl_Window *window = [nsw getFl_Window];
Fl::handle( FL_UNFOCUS, window);
+ fl_unlock_function();
}
- (void)windowDidBecomeKey:(NSNotification *)notif
{
+ fl_lock_function();
FLWindow *nsw = (FLWindow*)[notif object];
Fl_Window *window = [nsw getFl_Window];
if (!window->modal() || window->border()) Fl::handle( FL_FOCUS, window);
+ fl_unlock_function();
}
- (void)windowDidBecomeMain:(NSNotification *)notif
{
+ fl_lock_function();
FLWindow *nsw = (FLWindow*)[notif object];
Fl_Window *window = [nsw getFl_Window];
Fl::first_window(window);
update_e_xy_and_e_xy_root(nsw);
+ fl_unlock_function();
}
- (void)windowDidDeminiaturize:(NSNotification *)notif
{
+ fl_lock_function();
FLWindow *nsw = (FLWindow*)[notif object];
Fl_Window *window = [nsw getFl_Window];
window->set_visible();
update_e_xy_and_e_xy_root(nsw);
+ fl_unlock_function();
}
- (void)windowDidMiniaturize:(NSNotification *)notif
{
+ fl_lock_function();
FLWindow *nsw = (FLWindow*)[notif object];
Fl_Window *window = [nsw getFl_Window];
window->clear_visible();
+ fl_unlock_function();
}
- (void)windowWillClose:(NSNotification *)notif
{
+ fl_lock_function();
Fl_Window *w = Fl::first_window();
- if (!w) return;
- NSWindow *cw = (NSWindow*)Fl_X::i(w)->xid;
- if ( ![cw isMiniaturized] && ([cw styleMask] & NSTitledWindowMask) ) {
- if (![cw isKeyWindow]) { // always make Fl::first_window() the key widow
- [cw makeKeyAndOrderFront:nil];
- }
- if (![cw isMainWindow]) { // always make Fl::first_window() the main widow
- [cw makeMainWindow];
+ if (w) {
+ NSWindow *cw = (NSWindow*)Fl_X::i(w)->xid;
+ if ( ![cw isMiniaturized] && ([cw styleMask] & NSTitledWindowMask) ) {
+ if (![cw isKeyWindow]) { // always make Fl::first_window() the key widow
+ [cw makeKeyAndOrderFront:nil];
+ }
+ if (![cw isMainWindow]) { // always make Fl::first_window() the main widow
+ [cw makeMainWindow];
+ }
}
}
+ fl_unlock_function();
}
- (void)anywindowwillclosenotif:(NSNotification *)notif
{
@@ -1166,6 +1187,7 @@ extern "C" {
*/
- (void)applicationDidBecomeActive:(NSNotification *)notify
{
+ fl_lock_function();
Fl_X *x;
FLWindow *top = 0, *topModal = 0, *topNonModal = 0;
for (x = Fl_X::first;x;x = x->next) {
@@ -1192,9 +1214,11 @@ extern "C" {
}
}
}
+ fl_unlock_function();
}
- (void)applicationWillResignActive:(NSNotification *)notify
{
+ fl_lock_function();
Fl_X *x;
FLWindow *top = 0;
// sort in all regular windows
@@ -1231,17 +1255,21 @@ extern "C" {
}
}
}
+ fl_unlock_function();
}
- (void)applicationWillHide:(NSNotification *)notify
{
+ fl_lock_function();
Fl_X *x;
for (x = Fl_X::first;x;x = x->next) {
Fl_Window *window = x->w;
if ( !window->parent() ) Fl::handle( FL_HIDE, window);
}
+ fl_unlock_function();
}
- (void)applicationWillUnhide:(NSNotification *)notify
{
+ fl_lock_function();
Fl_X *x;
for (x = Fl_X::first;x;x = x->next) {
Fl_Window *window = x->w;
@@ -1250,6 +1278,7 @@ extern "C" {
Fl::handle( FL_SHOW, window);
}
}
+ fl_unlock_function();
}
- (id)windowWillReturnFieldEditor:(NSWindow *)sender toObject:(id)client
{
@@ -1270,6 +1299,7 @@ extern "C" {
{
NSEventType type = [theEvent type];
if (type == NSLeftMouseDown) {
+ fl_lock_function();
Fl_Window *grab = Fl::grab();
if (grab) {
FLWindow *win = (FLWindow *)[theEvent window];
@@ -1279,6 +1309,7 @@ extern "C" {
cocoaMouseHandler(theEvent);
}
}
+ fl_unlock_function();
} else if (type == NSApplicationDefined) {
if ([theEvent subtype] == FLTKDataReadyEvent) {
processFLTKEvent();
@@ -1621,9 +1652,11 @@ static void q_set_window_title(NSWindow *nsw, const char * name ) {
@implementation FLView
- (void)drawRect:(NSRect)rect
{
+ fl_lock_function();
FLWindow *cw = (FLWindow*)[self window];
Fl_Window *w = [cw getFl_Window];
handleUpdateEvent(w);
+ fl_unlock_function();
}
- (BOOL)acceptsFirstResponder
@@ -1706,28 +1739,34 @@ static void q_set_window_title(NSWindow *nsw, const char * name ) {
}
- (NSDragOperation)draggingEntered:(id < NSDraggingInfo >)sender
{
+ fl_lock_function();
Fl_Window *target = [(FLWindow*)[self window] getFl_Window];
update_e_xy_and_e_xy_root([self window]);
fl_dnd_target_window = target;
int ret = Fl::handle( FL_DND_ENTER, target );
breakMacEventLoop();
+ fl_unlock_function();
return ret ? NSDragOperationCopy : NSDragOperationNone;
}
- (NSDragOperation)draggingUpdated:(id < NSDraggingInfo >)sender
{
+ fl_lock_function();
Fl_Window *target = [(FLWindow*)[self window] getFl_Window];
update_e_xy_and_e_xy_root([self window]);
fl_dnd_target_window = target;
int ret = Fl::handle( FL_DND_DRAG, target );
breakMacEventLoop();
+ fl_unlock_function();
return ret ? NSDragOperationCopy : NSDragOperationNone;
}
- (BOOL)performDragOperation:(id <NSDraggingInfo>)sender
{
static char *DragData = NULL;
+ fl_lock_function();
Fl_Window *target = [(FLWindow*)[self window] getFl_Window];
if ( !Fl::handle( FL_DND_RELEASE, target ) ) {
breakMacEventLoop();
+ fl_unlock_function();
return NO;
}
NSPasteboard *pboard;
@@ -1753,6 +1792,7 @@ static void q_set_window_title(NSWindow *nsw, const char * name ) {
}
else {
breakMacEventLoop();
+ fl_unlock_function();
return NO;
}
Fl::e_text = DragData;
@@ -1765,14 +1805,17 @@ static void q_set_window_title(NSWindow *nsw, const char * name ) {
Fl::e_length = 0;
fl_dnd_target_window = NULL;
breakMacEventLoop();
+ fl_unlock_function();
return YES;
}
- (void)draggingExited:(id < NSDraggingInfo >)sender
{
+ fl_lock_function();
if ( fl_dnd_target_window ) {
Fl::handle( FL_DND_LEAVE, fl_dnd_target_window );
fl_dnd_target_window = 0;
}
+ fl_unlock_function();
}
- (NSDragOperation)draggingSourceOperationMaskForLocal:(BOOL)isLocal
{
@@ -1857,6 +1900,7 @@ static void q_set_window_title(NSWindow *nsw, const char * name ) {
- (NSRect)firstRectForCharacterRange:(NSRange)aRange {
NSRect glyphRect;
+ fl_lock_function();
Fl_Widget *focus = Fl::focus();
Fl_Window *wfocus = focus->window();
while (wfocus->window()) wfocus = wfocus->window();
@@ -1877,6 +1921,7 @@ static void q_set_window_title(NSWindow *nsw, const char * name ) {
// Convert the rect to screen coordinates
glyphRect.origin.y = wfocus->h() - glyphRect.origin.y;
glyphRect.origin = [[self window] convertBaseToScreen:glyphRect.origin];
+ fl_unlock_function();
return glyphRect;
}