diff options
| author | Jonas Kümmerlin <jonas@kuemmerlin.eu> | 2019-01-02 17:44:51 +0100 |
|---|---|---|
| committer | Jonas Kümmerlin <jonas@kuemmerlin.eu> | 2019-01-02 17:44:51 +0100 |
| commit | 2517546be1599c63843e45bf1ac6c9ddb9c0dbf4 (patch) | |
| tree | a9102695a6b73e309ecf2acb9a4ce9f3c094fc91 /alf | |
| parent | 89d174ab47af8a31ba316e03e36883e6924171bf (diff) | |
implement cleanup functions
Diffstat (limited to 'alf')
| -rw-r--r-- | alf/alf.cpp | 28 | ||||
| -rw-r--r-- | alf/alf.h | 3 | ||||
| -rw-r--r-- | alf/alfbutton.cpp | 2 | ||||
| -rw-r--r-- | alf/alfcombobox.cpp | 2 | ||||
| -rw-r--r-- | alf/alfedit.cpp | 2 | ||||
| -rw-r--r-- | alf/alflabel.cpp | 2 |
6 files changed, 38 insertions, 1 deletions
diff --git a/alf/alf.cpp b/alf/alf.cpp index 36e17ac..981d1e7 100644 --- a/alf/alf.cpp +++ b/alf/alf.cpp @@ -25,6 +25,9 @@ ALF_DestroyWindowPriv(ALFWindowPriv *priv) } ALF_ListInit(&priv->widgets); + if (priv->fonts.hMessageFont) + DeleteObject(priv->fonts.hMessageFont); + HeapFree(GetProcessHeap(), 0, priv->layout.columns); HeapFree(GetProcessHeap(), 0, priv->layout.rows); HeapFree(GetProcessHeap(), 0, priv); @@ -540,6 +543,13 @@ ALF_CreateApplication(HINSTANCE hInstance) return app; } +void +ALF_TeardownApplication(ALFAPP app) +{ + UnregisterClass(app->comboClass, app->hInstance); + HeapFree(GetProcessHeap(), 0, app->compatFn); + HeapFree(GetProcessHeap(), 0, app); +} void ALF_BuildRandomClassName(const TCHAR *prefix, TCHAR *buf) @@ -601,6 +611,18 @@ ALF_RegisterWindowClass(ALFAPP app, const ALFWindowClassParams *params) return MAKEINTATOM(classatom); } +void +ALF_UnregisterWindowClass(ALFAPP app, LPCTSTR className) +{ + HWND tmp = CreateWindowEx(0, className, TEXT("dummy"), 0, 0, 0, 0, 0, NULL, 0, app->hInstance, 0); + ALFWindowVTable *pvtbl = (ALFWindowVTable*)GetClassLongPtr(tmp, 0); + DestroyWindow(tmp); + + HeapFree(GetProcessHeap(), 0, pvtbl); + + UnregisterClass(className, app->hInstance); +} + HWND ALF_InstantiateWindow(ALFAPP app, LPCTSTR className, HWND hwndParent, void *closure) { return CreateWindowEx(0, @@ -615,6 +637,12 @@ HWND ALF_InstantiateWindow(ALFAPP app, LPCTSTR className, HWND hwndParent, void closure); } +void +ALF_DestroyWindow(HWND win) +{ + DestroyWindow(win); +} + ALFAPP ALF_ApplicationFromWindow(HWND hwnd) { @@ -88,6 +88,9 @@ ALF_UnregisterWindowClass(ALFAPP app, LPCTSTR className); HWND ALF_InstantiateWindow(ALFAPP app, LPCTSTR className, HWND hwndParent, void *closure); +void +ALF_DestroyWindow(HWND win); + ALFAPP ALF_ApplicationFromWindow(HWND hwnd); diff --git a/alf/alfbutton.cpp b/alf/alfbutton.cpp index 2df9fc9..729e7ee 100644 --- a/alf/alfbutton.cpp +++ b/alf/alfbutton.cpp @@ -65,6 +65,8 @@ ALF__ButtonSubclassProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam, UINT p->left, p->top + padding, p->right - p->left, p->bottom - p->top - 2*padding, SWP_NOZORDER|SWP_NOACTIVATE); + } else if (uMsg == WM_DESTROY) { + app->compatFn->RemoveWindowSubclass(hwnd, ALF__ButtonSubclassProc, 0); } return app->compatFn->DefSubclassProc(hwnd, uMsg, wParam, lParam); diff --git a/alf/alfcombobox.cpp b/alf/alfcombobox.cpp index ce6eba9..90e53ad 100644 --- a/alf/alfcombobox.cpp +++ b/alf/alfcombobox.cpp @@ -318,7 +318,7 @@ ALF_ComboBoxCurrentText(HWND combo) void ALF_ComboBoxSetText(HWND combo, const TCHAR *text) { - return ALF_SetText(combo, text); + ALF_SetText(combo, text); } int diff --git a/alf/alfedit.cpp b/alf/alfedit.cpp index 2dae626..1d259a8 100644 --- a/alf/alfedit.cpp +++ b/alf/alfedit.cpp @@ -46,6 +46,8 @@ ALF__EditSubclassProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam, UINT_P p->left, p->top + 1, p->right - p->left, p->bottom - p->top - 2, SWP_NOZORDER|SWP_NOACTIVATE); + } else if (uMsg == WM_DESTROY) { + app->compatFn->RemoveWindowSubclass(hwnd, ALF__EditSubclassProc, 0); } return app->compatFn->DefSubclassProc(hwnd, uMsg, wParam, lParam); diff --git a/alf/alflabel.cpp b/alf/alflabel.cpp index 283b99a..59e2ca3 100644 --- a/alf/alflabel.cpp +++ b/alf/alflabel.cpp @@ -68,6 +68,8 @@ ALF__LabelSubclassProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam, UINT_ p->left, p->top + topPadding, p->right - p->left, p->bottom - p->top - topPadding, SWP_NOZORDER|SWP_NOACTIVATE); + } else if (uMsg == WM_DESTROY) { + app->compatFn->RemoveWindowSubclass(hwnd, ALF__LabelSubclassProc, 0); } return app->compatFn->DefSubclassProc(hwnd, uMsg, wParam, lParam); |
