From 0cb86ee4af969394f52219f92647b16d5caf3b3b Mon Sep 17 00:00:00 2001 From: micha Date: Wed, 16 Nov 2005 19:12:10 +0000 Subject: [PATCH] add flags to AddEventHandler, socket and flags to callback git-svn-id: trunk@8179 - --- lcl/include/intfbaselcl.inc | 2 +- lcl/include/lclintf.inc | 4 ++-- lcl/include/lclintfh.inc | 2 +- lcl/interfacebase.pp | 1 + lcl/interfaces/gtk/gtklclintf.inc | 15 ++++++++++----- lcl/interfaces/gtk/gtklclintfh.inc | 2 +- lcl/interfaces/gtk/gtkproc.pp | 2 +- lcl/interfaces/win32/win32int.pp | 2 +- lcl/interfaces/win32/win32lclintf.inc | 2 +- lcl/interfaces/win32/win32lclintfh.inc | 2 +- lcl/interfaces/win32/win32object.inc | 5 +++-- 11 files changed, 23 insertions(+), 16 deletions(-) diff --git a/lcl/include/intfbaselcl.inc b/lcl/include/intfbaselcl.inc index e717c91cb2..c944939875 100644 --- a/lcl/include/intfbaselcl.inc +++ b/lcl/include/intfbaselcl.inc @@ -26,7 +26,7 @@ } //##apiwiz##sps## // Do not remove -procedure TWidgetSet.AddEventHandler(AHandle: THandle; AEventHandler: TNotifyEvent); +procedure TWidgetSet.AddEventHandler(AHandle: THandle; AFlags: dword; AEventHandler: TWaitHandleEvent); begin end; diff --git a/lcl/include/lclintf.inc b/lcl/include/lclintf.inc index e0264cb94b..3c14a9dcdc 100644 --- a/lcl/include/lclintf.inc +++ b/lcl/include/lclintf.inc @@ -33,9 +33,9 @@ ******************************************************************************} //##apiwiz##sps## // Do not remove -procedure AddEventHandler(AHandle: THandle; AEventHandler: TNotifyEvent); +procedure AddEventHandler(AHandle: THandle; AFlags: dword; AEventHandler: TWaitHandleEvent); begin - WidgetSet.AddEventHandler(AHandle, AEventHandler); + WidgetSet.AddEventHandler(AHandle, AFlags, AEventHandler); end; procedure AttachMenuToWindow(AMenuObject: TComponent); diff --git a/lcl/include/lclintfh.inc b/lcl/include/lclintfh.inc index 5f19216224..3465fb31b6 100644 --- a/lcl/include/lclintfh.inc +++ b/lcl/include/lclintfh.inc @@ -37,7 +37,7 @@ ******************************************************************************} //##apiwiz##sps## // Do not remove -procedure AddEventHandler(AHandle: THandle; AEventHandler: TNotifyEvent); {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF} +procedure AddEventHandler(AHandle: THandle; AFlags: dword; AEventHandler: TWaitHandleEvent); {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF} procedure AttachMenuToWindow(AMenuObject: TComponent); {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF} procedure CallDefaultWndHandler(Sender: TObject; var Message); {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF} diff --git a/lcl/interfacebase.pp b/lcl/interfacebase.pp index 59ae8e3af1..81421a29a3 100644 --- a/lcl/interfacebase.pp +++ b/lcl/interfacebase.pp @@ -38,6 +38,7 @@ uses type TApplicationMainLoop = procedure of object; + TWaitHandleEvent = procedure(AHandle: THandle; AFlags: dword) of object; { TWidgetSet } diff --git a/lcl/interfaces/gtk/gtklclintf.inc b/lcl/interfaces/gtk/gtklclintf.inc index 77d28edd11..177c62b182 100644 --- a/lcl/interfaces/gtk/gtklclintf.inc +++ b/lcl/interfaces/gtk/gtklclintf.inc @@ -31,22 +31,27 @@ function waithandle_iocallback(source: PGIOChannel; condition: TGIOCondition; data: gpointer): gboolean; cdecl; +var + lEventHandler: PWaitHandleEventHandler absolute data; begin - TNotifyEvent(data^)(WidgetSet); + lEventHandler^.OnEvent(lEventHandler^.Handle, condition); + result := true; end; - -procedure TGtkWidgetSet.AddEventHandler(AHandle: THandle; AEventHandler: TNotifyEvent); + +procedure TGtkWidgetSet.AddEventHandler(AHandle: THandle; AFlags: dword; + AEventHandler: TWaitHandleEvent); var giochannel: pgiochannel; lEventHandler: PWaitHandleEventHandler; begin + if AEventHandler = nil then exit; New(lEventHandler); giochannel := g_io_channel_unix_new(AHandle); lEventHandler^.Handle := AHandle; lEventHandler^.GIOChannel := giochannel; lEventHandler^.OnEvent := AEventHandler; - lEventHandler^.GSourceID := g_io_add_watch(giochannel, - G_IO_IN, @waithandle_iocallback, @lEventHandler^.OnEvent); + lEventHandler^.GSourceID := g_io_add_watch(giochannel, + AFlags, @waithandle_iocallback, lEventHandler); lEventHandler^.NextHandler := FWaitHandles; FWaitHandles := lEventHandler; end; diff --git a/lcl/interfaces/gtk/gtklclintfh.inc b/lcl/interfaces/gtk/gtklclintfh.inc index d8158d75a2..448d9cb14c 100644 --- a/lcl/interfaces/gtk/gtklclintfh.inc +++ b/lcl/interfaces/gtk/gtklclintfh.inc @@ -29,7 +29,7 @@ } //##apiwiz##sps## // Do not remove -procedure AddEventHandler(AHandle: THandle; AEventHandler: TNotifyEvent); override; +procedure AddEventHandler(AHandle: THandle; AFlags: dword; AEventHandler: TWaitHandleEvent); override; function DrawSplitter(DC: HDC; const ARect: TRect; Horizontal: boolean): boolean; override; function ExtUTF8Out(DC: HDC; X, Y: Integer; Options: Longint; Rect: PRect; diff --git a/lcl/interfaces/gtk/gtkproc.pp b/lcl/interfaces/gtk/gtkproc.pp index 3d09bbae41..f628d8853b 100644 --- a/lcl/interfaces/gtk/gtkproc.pp +++ b/lcl/interfaces/gtk/gtkproc.pp @@ -64,7 +64,7 @@ type Handle: THandle; GIOChannel: pgiochannel; GSourceID: guint; - OnEvent: TNotifyEvent; + OnEvent: TWaitHandleEvent; NextHandler: PWaitHandleEventHandler; end; diff --git a/lcl/interfaces/win32/win32int.pp b/lcl/interfaces/win32/win32int.pp index daec7dd92b..c916b85608 100644 --- a/lcl/interfaces/win32/win32int.pp +++ b/lcl/interfaces/win32/win32int.pp @@ -124,7 +124,7 @@ Type FWaitHandleCount: dword; FWaitHandles: array of HANDLE; - FWaitHandleCallbacks: array of TNotifyEvent; + FWaitHandleCallbacks: array of TWaitHandleEvent; FThemesActive: boolean; FThemeLibrary: HMODULE; diff --git a/lcl/interfaces/win32/win32lclintf.inc b/lcl/interfaces/win32/win32lclintf.inc index 35486e7216..d29c08f838 100644 --- a/lcl/interfaces/win32/win32lclintf.inc +++ b/lcl/interfaces/win32/win32lclintf.inc @@ -29,7 +29,7 @@ //##apiwiz##sps## // Do not remove -procedure TWin32WidgetSet.AddEventHandler(AHandle: THandle; AEventHandler: TNotifyEvent); +procedure TWin32WidgetSet.AddEventHandler(AHandle: THandle; AFlags: dword; AEventHandler: TWaitHandleEvent); var listlen: dword; begin diff --git a/lcl/interfaces/win32/win32lclintfh.inc b/lcl/interfaces/win32/win32lclintfh.inc index b04b59b85e..2ac13cb042 100644 --- a/lcl/interfaces/win32/win32lclintfh.inc +++ b/lcl/interfaces/win32/win32lclintfh.inc @@ -29,7 +29,7 @@ //##apiwiz##sps## // Do not remove -procedure AddEventHandler(AHandle: THandle; AEventHandler: TNotifyEvent); override; +procedure AddEventHandler(AHandle: THandle; AFlags: dword; AEventHandler: TWaitHandleEvent); override; procedure DrawArrow(Arrow: TComponent; Canvas: TPersistent); override; diff --git a/lcl/interfaces/win32/win32object.inc b/lcl/interfaces/win32/win32object.inc index ce1c1a642b..5fae6d6cfa 100644 --- a/lcl/interfaces/win32/win32object.inc +++ b/lcl/interfaces/win32/win32object.inc @@ -324,7 +324,7 @@ End; procedure TWin32WidgetSet.AppWaitMessage; var done: boolean; - retVal: dword; + retVal, index: dword; begin RedrawMenus; Assert(False, 'Trace:TWin32WidgetSet.WaitMessage - Start'); @@ -334,7 +334,8 @@ begin FWaitHandles[0], false, INFINITE, QS_ALLINPUT); if (WAIT_OBJECT_0 <= retVal) and (retVal < WAIT_OBJECT_0 + FWaitHandleCount) then begin - FWaitHandleCallbacks[retVal-WAIT_OBJECT_0](Self); + index := retVal-WAIT_OBJECT_0; + FWaitHandleCallbacks[index](FWaitHandles[index], 0); end else if retVal = WAIT_OBJECT_0 + FWaitHandleCount then done := true; until done;