summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--alf/alf.cpp28
-rw-r--r--alf/alf.h3
-rw-r--r--alf/alfbutton.cpp2
-rw-r--r--alf/alfcombobox.cpp2
-rw-r--r--alf/alfedit.cpp2
-rw-r--r--alf/alflabel.cpp2
-rw-r--r--widgetfactory.cpp4
7 files changed, 41 insertions, 2 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)
{
diff --git a/alf/alf.h b/alf/alf.h
index 62f4563..f057b10 100644
--- a/alf/alf.h
+++ b/alf/alf.h
@@ -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);
diff --git a/widgetfactory.cpp b/widgetfactory.cpp
index e2d631c..64e4e60 100644
--- a/widgetfactory.cpp
+++ b/widgetfactory.cpp
@@ -154,7 +154,9 @@ WinMain
ALF_ShowModal(win);
- DestroyWindow(win);
+ ALF_DestroyWindow(win);
+ ALF_UnregisterWindowClass(app, clazz);
+ ALF_TeardownApplication(app);
return 0;
}