From daa05e2732d1491c2d551ebe5ec04d44ef1b1f6e Mon Sep 17 00:00:00 2001 From: dmitry Date: Sun, 12 May 2019 01:20:44 +0000 Subject: [PATCH] cocoa: getting rid of code duplication in event processing git-svn-id: trunk@61208 - --- lcl/interfaces/cocoa/cocoaint.pas | 1 + lcl/interfaces/cocoa/cocoaobject.inc | 38 ++++++++++------------------ lcl/interfaces/cocoa/cocoawinapi.inc | 2 +- 3 files changed, 15 insertions(+), 26 deletions(-) diff --git a/lcl/interfaces/cocoa/cocoaint.pas b/lcl/interfaces/cocoa/cocoaint.pas index 9215ed3cca..e21f11af53 100644 --- a/lcl/interfaces/cocoa/cocoaint.pas +++ b/lcl/interfaces/cocoa/cocoaint.pas @@ -156,6 +156,7 @@ type procedure AppInit(var ScreenInfo: TScreenInfo); override; procedure AppRun(const ALoop: TApplicationMainLoop); override; + procedure AppRunMessages(onlyOne: Boolean); procedure AppWaitMessage; override; procedure AppProcessMessages; override; procedure AppTerminate; override; diff --git a/lcl/interfaces/cocoa/cocoaobject.inc b/lcl/interfaces/cocoa/cocoaobject.inc index 4db1e558ca..5a17d799d0 100644 --- a/lcl/interfaces/cocoa/cocoaobject.inc +++ b/lcl/interfaces/cocoa/cocoaobject.inc @@ -89,12 +89,7 @@ begin end; end; -{------------------------------------------------------------------------------ - Method: TCocoaWidgetSet.AppProcessMessages - - Handle all pending messages - ------------------------------------------------------------------------------} -procedure TCocoaWidgetSet.AppProcessMessages; +procedure TCocoaWidgetSet.AppRunMessages(onlyOne: Boolean); var event: NSEvent; pool:NSAutoReleasePool; @@ -116,7 +111,17 @@ begin // Thus we have to check the clipboard on every loop pool.release; - until event = nil; + until onlyOne or (event = nil); +end; + +{------------------------------------------------------------------------------ + Method: TCocoaWidgetSet.AppProcessMessages + + Handle all pending messages + ------------------------------------------------------------------------------} +procedure TCocoaWidgetSet.AppProcessMessages; +begin + AppRunMessages(false); end; {------------------------------------------------------------------------------ @@ -125,25 +130,8 @@ end; Passes execution control to Cocoa ------------------------------------------------------------------------------} procedure TCocoaWidgetSet.AppWaitMessage; -var - event : NSEvent; - pool:NSAutoReleasePool; begin - pool := NSAutoreleasePool.alloc.init; - {$ifdef BOOLFIX} - event := NSApp.nextEventMatchingMask_untilDate_inMode_dequeue_(NSAnyEventMask, NSDate.distantFuture, NSDefaultRunLoopMode, Ord(true)); - {$else} - event := NSApp.nextEventMatchingMask_untilDate_inMode_dequeue(NSAnyEventMask, NSDate.distantFuture, NSDefaultRunLoopMode, true); - {$endif} - if event <> nil then - begin - NSApp.sendEvent(event); - NSApp.updateWindows; - end; - - SyncClipboard(); // NSPasteboard doesn't provide any notifications regarding the change - // Thus we have to check the clipboard on every loop - pool.release; + AppRunMessages(true); end; {------------------------------------------------------------------------------ diff --git a/lcl/interfaces/cocoa/cocoawinapi.inc b/lcl/interfaces/cocoa/cocoawinapi.inc index e9d18f6eda..e6debd75af 100644 --- a/lcl/interfaces/cocoa/cocoawinapi.inc +++ b/lcl/interfaces/cocoa/cocoawinapi.inc @@ -2247,7 +2247,7 @@ begin Result:=inherited SetCaretRespondToFocus(handle, ShowHideOnFocus); end; -function TCocoaWidgetSet.RectVisible(dc: HDC; const ARect: TRect): Boolean; +function TCocoaWidgetSet.RectVisible(dc: hdc; const ARect: TRect): Boolean; var ClipBox: CGRect; ctx : TCocoaContext;