summaryrefslogtreecommitdiff
path: root/alf/alf.h
diff options
context:
space:
mode:
authorJonas Kümmerlin <jonas@kuemmerlin.eu>2020-05-31 01:49:11 +0200
committerJonas Kümmerlin <jonas@kuemmerlin.eu>2020-05-31 01:49:11 +0200
commit9251e89359ce46d08c0924b09d48fedbdf2c95fb (patch)
tree4adb0418223a07834f8e55a457c07ceda1bf29b3 /alf/alf.h
parent8d31086aed4aa91232cbaad9cf88d720e6329bcf (diff)
ALFApplication and multiple toplevels support
Diffstat (limited to 'alf/alf.h')
-rw-r--r--alf/alf.h51
1 files changed, 50 insertions, 1 deletions
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);