From 9251e89359ce46d08c0924b09d48fedbdf2c95fb Mon Sep 17 00:00:00 2001 From: Jonas Kümmerlin Date: Sun, 31 May 2020 01:49:11 +0200 Subject: ALFApplication and multiple toplevels support --- alf/alf.h | 51 ++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 50 insertions(+), 1 deletion(-) (limited to 'alf/alf.h') diff --git a/alf/alf.h b/alf/alf.h index 6f42f35..cc1d936 100644 --- a/alf/alf.h +++ b/alf/alf.h @@ -80,6 +80,7 @@ typedef struct { #define ALF_WM_SETMODALRESULT (ALF_WM__BASE + 7) #define ALF_WM_GETMODALRESULT (ALF_WM__BASE + 8) #define ALF_WM_GETDPI (ALF_WM__BASE + 9) +#define ALF_WM_GETAPPLICATION (ALF_WM__BASE + 10) #define ALF_WM_BACKGROUNDCHANGE (ALF_WM__BASE + 11) #define ALF_WM_APPLYSIZE (ALF_WM__BASE + 12) #define ALF_WM_SETBGCOLOR (ALF_WM__BASE + 13) @@ -301,10 +302,58 @@ ALF_FillRect(HDC dc, const RECT *rc, ALFColor color); void ALF_DestroyWidget(HWND win, WORD id); + +// application + +// an application is a container for multiple top-level windows +// NOTE: ALFApplication is not thread-safe. It must be accessed only from the +// thread that created it, and all toplevels associated with the application +// must live on that same thread. + +typedef struct tagALFApplication ALFApplication; + +ALFApplication * +ALF_CreateApplication(void); + +void +ALF_Application_ProcessMessages(ALFApplication *app); + +// continuously processes messages until a quit message is posted +// or all windows have been destroyed +void +ALF_Application_Run(ALFApplication *app); + +BOOL +ALF_Application_EnumToplevels(ALFApplication *app, WNDENUMPROC proc, LPARAM param); + +HWND +ALF_Application_ActiveToplevel(ALFApplication *app); + +void +ALF_Application_SetPreTranslateMessageHandler(ALFApplication *app, BOOL(*handler)(void *,MSG *), void *closure); + +BOOL +ALF_Application_PreTranslateMessage(ALFApplication *app, MSG *msg, HWND modalToplevel); + +// TODO: implement modal stuff +/*void +ALF_Application_DisableWindowsForModal(ALFApplication *app, HWND skip); + +void +ALF_Application_ReenableWindowsForModal(ALFApplication *app, HWND skip);*/ + +// also destroys all toplevels associated with the application +void +ALF_DestroyApplication(ALFApplication *app); + + // toplevel window HWND -ALF_CreateToplevelWindow(DWORD exstyle, DWORD style, HWND hwndOwner, ALFToplevelVTable *vtbl, void *closure); +ALF_CreateToplevelWindow(DWORD exstyle, DWORD style, HWND hwndOwner, ALFApplication *app, ALFToplevelVTable *vtbl, void *closure); + +ALFApplication * +ALF_Toplevel_Application(HWND toplevel); void ALF_Toplevel_Resize(HWND win, int cptWidth, int cptHeight); -- cgit v1.2.3