diff options
Diffstat (limited to 'alf')
| -rw-r--r-- | alf/alf.cpp | 30 | ||||
| -rw-r--r-- | alf/alfcombobox.cpp | 2 | ||||
| -rw-r--r-- | alf/alfcompat.cpp | 10 | ||||
| -rw-r--r-- | alf/alfcompat.h | 3 | ||||
| -rw-r--r-- | alf/alfpanel.cpp | 2 | ||||
| -rw-r--r-- | alf/alfpriv.h | 2 | ||||
| -rw-r--r-- | alf/alfspacer.cpp | 2 |
7 files changed, 21 insertions, 30 deletions
diff --git a/alf/alf.cpp b/alf/alf.cpp index 06b0099..61ce4ee 100644 --- a/alf/alf.cpp +++ b/alf/alf.cpp @@ -419,16 +419,18 @@ ALF_Free(const void *p) } void -ALF_BuildRandomClassName(const TCHAR* prefix, TCHAR* buf, DWORD cchBuf) +ALF_BuildUniqueName(TCHAR *buf, const TCHAR *prefix, ULONG_PTR uniquifier) { - LONG_PTR c1, c2; - ALF_UniqueCounterValue(&c1, &c2); + int prefixlen = lstrlen(prefix); + CopyMemory(buf, prefix, prefixlen * sizeof(*prefix)); - DWORD_PTR params[] = { (DWORD_PTR)prefix, (DWORD_PTR)c1, (DWORD_PTR)c2 }; - - FormatMessage(FORMAT_MESSAGE_ARGUMENT_ARRAY | FORMAT_MESSAGE_FROM_STRING, - TEXT("%1.%2!d!.%3!d!"), 0, 0, - buf, cchBuf, (va_list*)params); + int numlen = sizeof(LONG_PTR)*2; + int i = numlen - 1; + while (i >= 0) { + buf[prefixlen + i] = "0123456789ABCDEF"[uniquifier & 0xf]; + uniquifier >>= 4; + i--; + } } LPTSTR @@ -437,13 +439,16 @@ ALF_RegisterWindowClass(HINSTANCE hInstance, const ALFWindowClassParams *params) WNDCLASS cls; ZeroMemory(&cls, sizeof(cls)); + ALFWindowVTable *pvtbl = ALF_New(ALFWindowVTable, 1); + *pvtbl = params->vtbl; + const TCHAR *classNamePtr = params->className; TCHAR classNameBuf[256]; if (!classNamePtr) { ZeroMemory(classNameBuf, sizeof(classNameBuf)); classNamePtr = classNameBuf; - ALF_BuildRandomClassName(TEXT("ALFWindow"), classNameBuf, 256); + ALF_BuildUniqueName(classNameBuf, TEXT("ALFWindow."), (ULONG_PTR)pvtbl); } cls.style = params->classStyle; @@ -461,11 +466,10 @@ ALF_RegisterWindowClass(HINSTANCE hInstance, const ALFWindowClassParams *params) cls.lpfnWndProc = ALF_WindowProc; ATOM classatom = RegisterClass(&cls); - if (!classatom) + if (!classatom) { + ALF_Free(pvtbl); return NULL; - - ALFWindowVTable *pvtbl = ALF_New(ALFWindowVTable, 1); - *pvtbl = params->vtbl; + } // XXX: This could have been a HWND_MESSAGE window, but Win95 doesn't support these HWND tmp = CreateWindowEx(0, MAKEINTATOM(classatom), TEXT("dummy"), 0, 0, 0, 0, 0, NULL, 0, hInstance, 0); diff --git a/alf/alfcombobox.cpp b/alf/alfcombobox.cpp index 6dbc15a..efe3706 100644 --- a/alf/alfcombobox.cpp +++ b/alf/alfcombobox.cpp @@ -268,7 +268,7 @@ ALF_RegisterComboClass(void) ZeroMemory(&cls, sizeof(cls)); TCHAR classNameBuf[256]; - ALF_BuildRandomClassName(TEXT("ALFComboBox"), classNameBuf, 256); + ALF_BuildUniqueName(classNameBuf, TEXT("ALFComboBox."), (ULONG_PTR)&_alf_comboClass); cls.hInstance = ALF_HINSTANCE; cls.hCursor = LoadCursor(NULL, (LPTSTR)IDC_ARROW); diff --git a/alf/alfcompat.cpp b/alf/alfcompat.cpp index 5c743ce..3895545 100644 --- a/alf/alfcompat.cpp +++ b/alf/alfcompat.cpp @@ -232,16 +232,6 @@ ALF_GetAveCharWidth(HDC hdc) return (s.cx / 26 + 1) / 2; } -void -ALF_UniqueCounterValue(LONG_PTR *pCounterId, LONG_PTR *pCounterValue) -{ - static LONG counter = 0; - - LONG r = InterlockedIncrement(&counter); - *pCounterId = (LONG_PTR)&counter; - *pCounterValue = r; -} - static HTHEME WINAPI ALF_Compat_fallbackOpenThemeData(HWND window, LPCWSTR classNames) { diff --git a/alf/alfcompat.h b/alf/alfcompat.h index 6926de5..9c7f3f2 100644 --- a/alf/alfcompat.h +++ b/alf/alfcompat.h @@ -57,9 +57,6 @@ typedef struct { long ALF_GetAveCharWidth(HDC hdc); -void -ALF_UniqueCounterValue(LONG_PTR *pCounterId, LONG_PTR *pCounterValue); - typedef void *ALF_Compat_HANIMATIONBUFFER; typedef enum { diff --git a/alf/alfpanel.cpp b/alf/alfpanel.cpp index 58f933e..5a18976 100644 --- a/alf/alfpanel.cpp +++ b/alf/alfpanel.cpp @@ -58,7 +58,7 @@ ALF_RegisterPanelClass(void) ZeroMemory(&cls, sizeof(cls)); TCHAR classNameBuf[256]; - ALF_BuildRandomClassName(TEXT("ALFPanel"), classNameBuf, 256); + ALF_BuildUniqueName(classNameBuf, TEXT("ALFPanel."), (ULONG_PTR)&_alf_panelClass); cls.hInstance = ALF_HINSTANCE; cls.hCursor = LoadCursor(NULL, (LPTSTR)IDC_ARROW); diff --git a/alf/alfpriv.h b/alf/alfpriv.h index c3a7fb9..aa0b39d 100644 --- a/alf/alfpriv.h +++ b/alf/alfpriv.h @@ -53,7 +53,7 @@ void ALF_RegisterSpacerClass(void); void -ALF_BuildRandomClassName(const TCHAR *prefix, TCHAR *buf, DWORD cchBuf); +ALF_BuildUniqueName(TCHAR *buf, const TCHAR *prefix, ULONG_PTR uniquifier); BOOL ALF_ShouldMessageBubble(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam); diff --git a/alf/alfspacer.cpp b/alf/alfspacer.cpp index da18600..1b9278d 100644 --- a/alf/alfspacer.cpp +++ b/alf/alfspacer.cpp @@ -9,7 +9,7 @@ ALF_RegisterSpacerClass(void) ZeroMemory(&cls, sizeof(cls)); TCHAR classNameBuf[256]; - ALF_BuildRandomClassName(TEXT("ALFSpacer"), classNameBuf, 256); + ALF_BuildUniqueName(classNameBuf, TEXT("ALFSpacer."), (ULONG_PTR)&_alf_spacerClass); cls.hInstance = ALF_HINSTANCE; cls.hCursor = LoadCursor(NULL, (LPTSTR)IDC_ARROW); |
