Somewhat gruesome tweak to use SetClassLongPtr where available and degrade
authorjacob <jacob@cda61777-01e9-0310-a592-d414129be87e>
Fri, 27 Jan 2006 20:49:59 +0000 (20:49 +0000)
committerjacob <jacob@cda61777-01e9-0310-a592-d414129be87e>
Fri, 27 Jan 2006 20:49:59 +0000 (20:49 +0000)
nicely elsewhere, which should fix `win64' _properly_.
Tested on recent-ish MinGW (with GetWindowLongPtr but not GetClassLongPtr),
and VC++ 6.0 with a recent SDK, but not with vanilla VC++.

git-svn-id: svn://svn.tartarus.org/sgt/putty@6535 cda61777-01e9-0310-a592-d414129be87e

windows/windlg.c
windows/window.c
windows/winstuff.h

index dba4d5f..019f615 100644 (file)
@@ -240,11 +240,7 @@ static int SaneDialogBox(HINSTANCE hinst,
     wc.style = CS_DBLCLKS | CS_SAVEBITS | CS_BYTEALIGNWINDOW;
     wc.lpfnWndProc = DefDlgProc;
     wc.cbClsExtra = 0;
-#ifdef LONG_PTR
     wc.cbWndExtra = DLGWINDOWEXTRA + 2*sizeof(LONG_PTR);
-#else
-    wc.cbWndExtra = DLGWINDOWEXTRA + 8;
-#endif
     wc.hInstance = hinst;
     wc.hIcon = NULL;
     wc.hCursor = LoadCursor(NULL, IDC_ARROW);
index e5aa45b..97b205a 100644 (file)
@@ -1010,7 +1010,7 @@ static void update_mouse_pointer(void)
     }
     {
        HCURSOR cursor = LoadCursor(NULL, curstype);
-       SetClassLong(hwnd, GCL_HCURSOR, (LONG)cursor);
+       SetClassLongPtr(hwnd, GCLP_HCURSOR, (LONG_PTR)cursor);
        SetCursor(cursor); /* force redraw of cursor at current posn */
     }
     if (force_visible != forced_visible) {
index d2202a6..9ec33de 100644 (file)
@@ -36,21 +36,38 @@ struct FontSpec {
     (fq) == FQ_NONANTIALIASED ? NONANTIALIASED_QUALITY : \
     CLEARTYPE_QUALITY)
 
-/* VC++ 6 doesn't have GetWindowLongPtr and friends.  Degrade nicely. */
+/*
+ * Where we can, we use GetWindowLongPtr and friends because they're
+ * more useful on 64-bit platforms, but they're a relatively recent
+ * innovation, missing from VC++ 6 and older MinGW.  Degrade nicely.
+ * (NB that on some systems, some of these things are available but
+ * not others...)
+ */
 
-#ifndef GWLP_USERDATA
+#ifndef GCLP_HCURSOR
+/* GetClassLongPtr and friends */
+#undef  GetClassLongPtr
+#define GetClassLongPtr GetClassLong
+#undef  SetClassLongPtr
+#define SetClassLongPtr SetClassLong
+#define GCLP_HCURSOR GCL_HCURSOR
+/* GetWindowLongPtr and friends */
+#undef  GetWindowLongPtr
 #define GetWindowLongPtr GetWindowLong
+#undef  SetWindowLongPtr
 #define SetWindowLongPtr SetWindowLong
+#undef  GWLP_USERDATA
 #define GWLP_USERDATA GWL_USERDATA
+#undef  DWLP_MSGRESULT
 #define DWLP_MSGRESULT DWL_MSGRESULT
+/* Since we've clobbered the above functions, we should clobber the
+ * associated type regardless of whether it's defined. */
+#undef LONG_PTR
+#define LONG_PTR LONG
 #endif
 
 #define BOXFLAGS DLGWINDOWEXTRA
-#ifdef LONG_PTR
 #define BOXRESULT (DLGWINDOWEXTRA + sizeof(LONG_PTR))
-#else
-#define BOXRESULT (DLGWINDOWEXTRA + 4)
-#endif
 #define DF_END 0x0001
 
 /*