From ad813b00d5956f35f2b1585a276095e24ce8ad5a Mon Sep 17 00:00:00 2001
From: Julian Smart <julian@anthemion.co.uk>
Date: Wed, 24 Feb 1999 08:02:28 +0000
Subject: [PATCH] Some stubs corrections; Motif corrections incl. busy cursor
 fix; doc corrections

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@1775 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
---
 docs/html/faqmsw.htm          | 20 ++++++++++++++++++++
 docs/latex/wx/document.tex    |  6 +++---
 docs/latex/wx/tokenizr.tex    | 12 ++++++------
 docs/latex/wx/window.tex      |  2 ++
 docs/motif/install.txt        | 14 ++++++++++++++
 docs/msw/install.txt          |  7 +++++++
 include/wx/motif/frame.h      |  1 -
 include/wx/motif/mdi.h        |  2 +-
 include/wx/motif/setup.h      |  3 +++
 include/wx/stubs/filedlg.h    | 18 ++++++++++++++++++
 include/wx/stubs/setup.h      |  6 ++++++
 include/wx/tokenzr.h          |  3 +++
 samples/docview/doc.cpp       |  2 +-
 samples/docview/docview.cpp   |  2 +-
 samples/docview/view.cpp      |  2 +-
 samples/docvwmdi/doc.cpp      |  2 +-
 samples/docvwmdi/docview.cpp  |  2 +-
 samples/docvwmdi/view.cpp     |  2 +-
 samples/layout/layout.cpp     |  2 +-
 samples/printing/printing.cpp |  2 +-
 src/generic/panelg.cpp        |  2 +-
 src/motif/dialog.cpp          |  5 +++++
 src/motif/utils.cpp           |  3 +++
 src/motif/window.cpp          | 14 ++++++++++----
 src/stubs/filedlg.cpp         |  2 +-
 src/stubs/makefile.unx        |  2 +-
 src/stubs/thread.cpp          |  4 ++++
 27 files changed, 116 insertions(+), 26 deletions(-)

diff --git a/docs/html/faqmsw.htm b/docs/html/faqmsw.htm
index b373e725de..984a87f3fc 100644
--- a/docs/html/faqmsw.htm
+++ b/docs/html/faqmsw.htm
@@ -146,6 +146,26 @@ There is a sample which demonstrates MFC and wxWindows code co-existing in the s
 application. However, don't expect to be able to enable wxWindows windows with OLE-2
 functionality using MFC.<P>
 
+<H3>Why do I sometimes get bizarre crash problems using VC++ 5/6?</H3>
+
+Some crash problems can be due to inconsistent compiler
+options (and of course this isn't limited to wxWindows).
+If strange/weird/impossible things start to happen please
+check (dumping IDE project file as makefile and doing text comparison
+if necessary) that the project settings, especially the list of defined
+symbols, struct packing, etc. are exactly the same for all items in
+the project. After this, delete everything (including PCH) and recompile.<P>
+
+VC++ 5's optimization code seems to be broken and can
+cause problems: this can be seen when deleting an object Dialog
+Editor, in Release mode with optimizations on. If in doubt,
+switch off optimisations, although this will result in much
+larger executables. It seems possible that the library can be created with
+strong optimization, so long as the application is not strongly
+optimized. For example, in wxWindows project, set to 'Minimum
+Size'. In Dialog Editor project, set to 'Customize: Favor Small
+Code' (and no others). This will then work.<P>
+
 
 </font>
 
diff --git a/docs/latex/wx/document.tex b/docs/latex/wx/document.tex
index fc50326630..4affd5ade7 100644
--- a/docs/latex/wx/document.tex
+++ b/docs/latex/wx/document.tex
@@ -141,7 +141,7 @@ dialog boxes. By default, uses the frame associated with the first view.
 
 \constfunc{wxString}{GetFilename}{\void}
 
-Gets the filename associated with this document, or NULL if none is
+Gets the filename associated with this document, or "" if none is
 associated.
 
 \membersection{wxDocument::GetFirstView}
@@ -241,7 +241,7 @@ document, and notifies the views that the filename (in fact, the title) has chan
 
 \func{virtual bool}{OnOpenDocument}{\param{const wxString\& }{filename}}
 
-Constructs an input file stream for the given filename (which must not be NULL),
+Constructs an input file stream for the given filename (which must not be empty),
 and calls LoadObject. If LoadObject returns TRUE, the document is set to
 unmodified; otherwise, an error message box is displayed. The document's
 views are notified that the filename has changed, to give windows an opportunity
@@ -251,7 +251,7 @@ to update their titles. All of the document's views are then updated.
 
 \func{virtual bool}{OnSaveDocument}{\param{const wxString\& }{filename}}
 
-Constructs an output file stream for the given filename (which must not be NULL),
+Constructs an output file stream for the given filename (which must not be empty),
 and calls SaveObject. If SaveObject returns TRUE, the document is set to
 unmodified; otherwise, an error message box is displayed.
 
diff --git a/docs/latex/wx/tokenizr.tex b/docs/latex/wx/tokenizr.tex
index 750bd8cb35..ffc8d5dfe7 100644
--- a/docs/latex/wx/tokenizr.tex
+++ b/docs/latex/wx/tokenizr.tex
@@ -31,25 +31,25 @@ Destructor.
 
 \membersection{wxStringTokenizer::CountTokens}\label{wxstringtokenizercounttokens}
 
-\constfunc{virtual int}{CountTokens}{\void}
+\constfunc{int}{CountTokens}{\void}
 
 Returns the number of tokens in the input string.
 
-\membersection{wxStringTokenizer::HasMoreToken}\label{wxstringtokenizerhasmoretoken}
+\membersection{wxStringTokenizer::HasMoreTokens}\label{wxstringtokenizerhasmoretokens}
 
-\constfunc{virtual bool}{HasMoreToken}{\void}
+\constfunc{bool}{HasMoreTokens}{\void}
 
 Returns TRUE if the tokenizer has further tokens.
 
-\membersection{wxStringTokenizer::NextToken}\label{wxstringtokenizernexttoken}
+\membersection{wxStringTokenizer::GetNextToken}\label{wxstringtokenizergetnexttoken}
 
-\constfunc{virtual wxString}{NextToken}{\void}
+\constfunc{wxString}{GetNextToken}{\void}
 
 Returns the next token.
 
 \membersection{wxStringTokenizer::GetString}\label{wxstringtokenizergetstring}
 
-\constfunc{virtual wxString}{GetString}{\void}
+\constfunc{wxString}{GetString}{\void}
 
 Returns the input string.
 
diff --git a/docs/latex/wx/window.tex b/docs/latex/wx/window.tex
index 22a2375ef0..6c371edf25 100644
--- a/docs/latex/wx/window.tex
+++ b/docs/latex/wx/window.tex
@@ -1683,11 +1683,13 @@ Sets the window's cursor.
 
 \docparam{cursor}{Specifies the cursor that the window should normally display.}
 
+\begin{comment}
 \wxheading{Remarks}
 
 Under Windows, you sometimes need to call ::wxSetCursor in addition to this
 function if you want the cursor to change immediately, because under Windows,
 wxWindows only sets the global cursor when it detects mouse movement.
+\end{comment
 
 \wxheading{See also}
 
diff --git a/docs/motif/install.txt b/docs/motif/install.txt
index 25e82c7cfc..59b5efa404 100644
--- a/docs/motif/install.txt
+++ b/docs/motif/install.txt
@@ -131,6 +131,20 @@ Troubleshooting
   possible temporary workaround (comment out the final
   XtDestroyWidget from ~wxWindow in window.cpp).
 
+- If you use flex and bison instead of yacc and lex, you may need
+  to change the relevant part of src/motif/makefile.unx to read:
+
+  ../common/y_tab.c: ../common/parser.y
+     $(YACC) ../common/parser.y
+     mv ../common/parser.tab.c ../common/y_tab.c
+
+  (the 'mv' command needs to be changed)
+
+- Some compilers, such as Sun C++, may give a lot of warnings about
+  virtual functions being hidden. Please ignore these, it's correct C++ syntax.
+  If you find any incorrect instances, though, such as a
+  missing 'const' in an overridden function, please let us know.
+
 Other Notes
 -----------
 
diff --git a/docs/msw/install.txt b/docs/msw/install.txt
index 6659a1680e..98481fb68f 100644
--- a/docs/msw/install.txt
+++ b/docs/msw/install.txt
@@ -137,6 +137,13 @@ optimized. For example, in wxWindows project, set to 'Minimum
 Size'. In Dialog Editor project, set to 'Customize: Favor Small
 Code' (and no others). This will then work.
 
+Note (4): some crash problems can be due to inconsistent compiler
+options. If strange/weird/impossible things start to happen please
+check (dumping IDE project file as makefile and doing text comparison
+if necessary) that the project settings, especially the list of defined
+symbols, struct packing, etc. are exactly the same for all items in
+the project. After this, delete everything (including PCH) and recompile.
+
 Visual C++ 1.5 compilation
 --------------------------
 
diff --git a/include/wx/motif/frame.h b/include/wx/motif/frame.h
index 9326616bb9..732b4917c3 100644
--- a/include/wx/motif/frame.h
+++ b/include/wx/motif/frame.h
@@ -55,7 +55,6 @@ public:
 
     virtual bool Destroy();
 
-    void SetClientSize(int width, int height);
     void GetClientSize(int *width, int *height) const;
     void GetSize(int *width, int *height) const ;
     void GetPosition(int *x, int *y) const ;
diff --git a/include/wx/motif/mdi.h b/include/wx/motif/mdi.h
index 26376b2c61..37cb782543 100644
--- a/include/wx/motif/mdi.h
+++ b/include/wx/motif/mdi.h
@@ -146,7 +146,7 @@ public:
     void SetTitle(const wxString& title);
 
     void SetClientSize(int width, int height);
-    void GetClientSize(int *width, int *height);
+    void GetClientSize(int *width, int *height) const;
     void GetSize(int *width, int *height) const;
     void GetPosition(int *x, int *y) const ;
 
diff --git a/include/wx/motif/setup.h b/include/wx/motif/setup.h
index d8a9fbdd86..d1e2804da4 100644
--- a/include/wx/motif/setup.h
+++ b/include/wx/motif/setup.h
@@ -138,6 +138,9 @@
 #define wxUSE_TOOLTIPS      0
                                   // Use tooltips
 
+#define wxUSE_DYNLIB_CLASS  0
+                                  // Use wxLibrary
+
 /*
  * Finer detail
  *
diff --git a/include/wx/stubs/filedlg.h b/include/wx/stubs/filedlg.h
index 9169262331..bd6075eb15 100644
--- a/include/wx/stubs/filedlg.h
+++ b/include/wx/stubs/filedlg.h
@@ -67,5 +67,23 @@ public:
 #define wxHIDE_READONLY     0x0008
 #define wxFILE_MUST_EXIST   0x0010
 
+// File selector - backward compatibility
+WXDLLEXPORT wxString wxFileSelector(const char *message = wxFileSelectorPromptStr, const char *default_path = NULL,
+                     const char *default_filename = NULL, const char *default_extension = NULL,
+                     const char *wildcard = wxFileSelectorDefaultWildcardStr, int flags = 0,
+                     wxWindow *parent = NULL, int x = -1, int y = -1);
+
+// An extended version of wxFileSelector
+WXDLLEXPORT wxString wxFileSelectorEx(const char *message = wxFileSelectorPromptStr, const char *default_path = NULL,
+                     const char *default_filename = NULL, int *indexDefaultExtension = NULL,
+                     const char *wildcard = wxFileSelectorDefaultWildcardStr, int flags = 0,
+                     wxWindow *parent = NULL, int x = -1, int y = -1);
+
+// Generic file load dialog
+WXDLLEXPORT wxString wxLoadFileSelector(const char *what, const char *extension, const char *default_name = NULL, wxWindow *parent = NULL);
+
+// Generic file save dialog
+WXDLLEXPORT wxString wxSaveFileSelector(const char *what, const char *extension, const char *default_name = NULL, wxWindow *parent = NULL);
+
 #endif
     // _WX_FILEDLG_H_
diff --git a/include/wx/stubs/setup.h b/include/wx/stubs/setup.h
index 0456d8c1a6..49c2fe8b50 100644
--- a/include/wx/stubs/setup.h
+++ b/include/wx/stubs/setup.h
@@ -126,6 +126,12 @@
 
 #define wxUSE_SERIAL        0
                                   // Use serialization
+
+#define wxUSE_TOOLTIPS      0
+                                  // Use tooltips
+
+#define wxUSE_DYNLIB_CLASS  0
+                                  // Use wxLibrary
 /*
  * Finer detail
  *
diff --git a/include/wx/tokenzr.h b/include/wx/tokenzr.h
index c23d130185..764b4c8091 100644
--- a/include/wx/tokenzr.h
+++ b/include/wx/tokenzr.h
@@ -30,7 +30,10 @@ public:
 
   int CountTokens();
   bool HasMoreToken();
+  inline bool HasMoreTokens() { return HasMoreToken(); };
   wxString NextToken();
+  // A better name!
+  inline wxString GetNextToken() { return NextToken(); };
   wxString GetString() { return m_string; }
 
   void SetString(const wxString& to_tokenize,
diff --git a/samples/docview/doc.cpp b/samples/docview/doc.cpp
index 04e328c621..23a5316143 100644
--- a/samples/docview/doc.cpp
+++ b/samples/docview/doc.cpp
@@ -25,7 +25,7 @@
 #endif
 
 #if !wxUSE_DOC_VIEW_ARCHITECTURE
-#error You must set wxUSE_DOC_VIEW_ARCHITECTURE to 1 in wx_setup.h!
+#error You must set wxUSE_DOC_VIEW_ARCHITECTURE to 1 in setup.h!
 #endif
 
 #include "doc.h"
diff --git a/samples/docview/docview.cpp b/samples/docview/docview.cpp
index 681fa2ebc0..6204548013 100644
--- a/samples/docview/docview.cpp
+++ b/samples/docview/docview.cpp
@@ -32,7 +32,7 @@
 #endif
 
 #if !wxUSE_DOC_VIEW_ARCHITECTURE
-#error You must set wxUSE_DOC_VIEW_ARCHITECTURE to 1 in wx_setup.h!
+#error You must set wxUSE_DOC_VIEW_ARCHITECTURE to 1 in setup.h!
 #endif
 
 #include "wx/docview.h"
diff --git a/samples/docview/view.cpp b/samples/docview/view.cpp
index e0e01bb499..61cec41421 100644
--- a/samples/docview/view.cpp
+++ b/samples/docview/view.cpp
@@ -25,7 +25,7 @@
 #endif
 
 #if !wxUSE_DOC_VIEW_ARCHITECTURE
-#error You must set wxUSE_DOC_VIEW_ARCHITECTURE to 1 in wx_setup.h!
+#error You must set wxUSE_DOC_VIEW_ARCHITECTURE to 1 in setup.h!
 #endif
 
 #include "docview.h"
diff --git a/samples/docvwmdi/doc.cpp b/samples/docvwmdi/doc.cpp
index 04e328c621..23a5316143 100644
--- a/samples/docvwmdi/doc.cpp
+++ b/samples/docvwmdi/doc.cpp
@@ -25,7 +25,7 @@
 #endif
 
 #if !wxUSE_DOC_VIEW_ARCHITECTURE
-#error You must set wxUSE_DOC_VIEW_ARCHITECTURE to 1 in wx_setup.h!
+#error You must set wxUSE_DOC_VIEW_ARCHITECTURE to 1 in setup.h!
 #endif
 
 #include "doc.h"
diff --git a/samples/docvwmdi/docview.cpp b/samples/docvwmdi/docview.cpp
index 00a2ea7340..dad7ffd133 100644
--- a/samples/docvwmdi/docview.cpp
+++ b/samples/docvwmdi/docview.cpp
@@ -30,7 +30,7 @@
 #endif
 
 #if !wxUSE_DOC_VIEW_ARCHITECTURE
-#error You must set wxUSE_DOC_VIEW_ARCHITECTURE to 1 in wx_setup.h!
+#error You must set wxUSE_DOC_VIEW_ARCHITECTURE to 1 in setup.h!
 #endif
 
 #include "docview.h"
diff --git a/samples/docvwmdi/view.cpp b/samples/docvwmdi/view.cpp
index 56afdce5df..80adc13467 100644
--- a/samples/docvwmdi/view.cpp
+++ b/samples/docvwmdi/view.cpp
@@ -25,7 +25,7 @@
 #endif
 
 #if !wxUSE_DOC_VIEW_ARCHITECTURE
-#error You must set wxUSE_DOC_VIEW_ARCHITECTURE to 1 in wx_setup.h!
+#error You must set wxUSE_DOC_VIEW_ARCHITECTURE to 1 in setup.h!
 #endif
 
 #include "docview.h"
diff --git a/samples/layout/layout.cpp b/samples/layout/layout.cpp
index ab66c79b01..23209958d2 100644
--- a/samples/layout/layout.cpp
+++ b/samples/layout/layout.cpp
@@ -21,7 +21,7 @@
 #endif
 
 #if !wxUSE_CONSTRAINTS
-#error You must set wxUSE_CONSTRAINTS to 1 in wx_setup.h!
+#error You must set wxUSE_CONSTRAINTS to 1 in setup.h!
 #endif
 
 #include <ctype.h>
diff --git a/samples/printing/printing.cpp b/samples/printing/printing.cpp
index 4ace50d72a..2deb53b0fd 100644
--- a/samples/printing/printing.cpp
+++ b/samples/printing/printing.cpp
@@ -25,7 +25,7 @@
 #endif
 
 #if !wxUSE_PRINTING_ARCHITECTURE
-#error You must set wxUSE_PRINTING_ARCHITECTURE to 1 in wx_setup.h to compile this demo.
+#error You must set wxUSE_PRINTING_ARCHITECTURE to 1 in setup.h to compile this demo.
 #endif
 
 // Set this to 1 if you want to test PostScript printing under MSW.
diff --git a/src/generic/panelg.cpp b/src/generic/panelg.cpp
index f96bb1701b..4046f5bd11 100644
--- a/src/generic/panelg.cpp
+++ b/src/generic/panelg.cpp
@@ -51,7 +51,7 @@ bool wxPanel::Create(wxWindow *parent, wxWindowID id,
                      long style,
                      const wxString& name)
 {
-    m_lastFocus = NULL;
+    m_lastFocus = 0;
 
     bool ret = wxWindow::Create(parent, id, pos, size, style, name);
 
diff --git a/src/motif/dialog.cpp b/src/motif/dialog.cpp
index 7dc7f7363f..41d930d7f1 100644
--- a/src/motif/dialog.cpp
+++ b/src/motif/dialog.cpp
@@ -342,6 +342,11 @@ void wxDialog::DoSetSize(int x, int y, int width, int height, int sizeFlags)
     XtVaSetValues((Widget) m_mainWidget, XmNresizePolicy, XmRESIZE_NONE, NULL);
 }
 
+void wxDialog::DoSetClientSize(int width, int height)
+{
+    wxWindow::SetSize(-1, -1, width, height);
+}
+
 void wxDialog::SetTitle(const wxString& title)
 {
     m_dialogTitle = title;
diff --git a/src/motif/utils.cpp b/src/motif/utils.cpp
index 99569a53c2..94820453fb 100644
--- a/src/motif/utils.cpp
+++ b/src/motif/utils.cpp
@@ -556,6 +556,9 @@ wxXSetBusyCursor (wxWindow * win, wxCursor * cursor)
     Display *display = (Display*) win->GetXDisplay();
     
     Window xwin = (Window) win->GetXWindow();
+    if (!xwin)
+       return;
+
     XSetWindowAttributes attrs;
     
     if (cursor)
diff --git a/src/motif/window.cpp b/src/motif/window.cpp
index 5af4953242..e3e0d614be 100644
--- a/src/motif/window.cpp
+++ b/src/motif/window.cpp
@@ -747,7 +747,7 @@ void wxWindow::GetClientSize(int *x, int *y) const
     *x = xx; *y = yy;
 }
 
-void wxWindow::SetSize(int x, int y, int width, int height, int sizeFlags)
+void wxWindow::DoSetSize(int x, int y, int width, int height, int sizeFlags)
 {
     // A bit of optimization to help sort out the flickers.
     int oldX, oldY, oldW, oldH;
@@ -819,7 +819,7 @@ void wxWindow::SetSize(int x, int y, int width, int height, int sizeFlags)
     */
 }
 
-void wxWindow::SetClientSize(int width, int height)
+void wxWindow::DoSetClientSize(int width, int height)
 {
     if (m_drawingArea)
     {
@@ -2307,12 +2307,18 @@ void wxDeleteWindowFromTable(Widget w)
 // Get the underlying X window and display
 WXWindow wxWindow::GetXWindow() const
 {
-    return (WXWindow) XtWindow((Widget) GetMainWidget());
+    if (GetMainWidget())
+        return (WXWindow) XtWindow((Widget) GetMainWidget());
+    else
+        return (WXWindow) 0;
 }
 
 WXDisplay *wxWindow::GetXDisplay() const
 {
-    return (WXDisplay*) XtDisplay((Widget) GetMainWidget());
+    if (GetMainWidget())
+        return (WXDisplay*) XtDisplay((Widget) GetMainWidget());
+    else
+        return (WXDisplay*) NULL;
 }
 
 WXWidget wxWindow::GetMainWidget() const
diff --git a/src/stubs/filedlg.cpp b/src/stubs/filedlg.cpp
index 36182617e0..8832598af4 100644
--- a/src/stubs/filedlg.cpp
+++ b/src/stubs/filedlg.cpp
@@ -59,7 +59,7 @@ wxString wxFileSelector(const char *title,
         return wxEmptyString;
 }
 
-char *wxFileSelectorEx(const char *title,
+wxString wxFileSelectorEx(const char *title,
                        const char *defaultDir,
                        const char *defaultFileName,
                        int* defaultFilterIndex,
diff --git a/src/stubs/makefile.unx b/src/stubs/makefile.unx
index a834d05b4a..9e789a14a0 100644
--- a/src/stubs/makefile.unx
+++ b/src/stubs/makefile.unx
@@ -51,7 +51,7 @@ LIB_CPP_SRC=\
  ../common/framecmn.cpp \
  ../common/stream.cpp \
  ../common/datstrm.cpp \
- ../common/fstream.cpp \
+ ../common/wfstream.cpp \
  ../common/mstream.cpp \
  ../common/zstream.cpp \
  ../common/objstrm.cpp \
diff --git a/src/stubs/thread.cpp b/src/stubs/thread.cpp
index e12b45e63b..34ad1a4f14 100644
--- a/src/stubs/thread.cpp
+++ b/src/stubs/thread.cpp
@@ -17,6 +17,8 @@
 #include "wx/thread.h"
 #include "wx/utils.h"
 
+#if wxUSE_THREADS
+
 enum thread_state {
   STATE_IDLE = 0,
   STATE_RUNNING,
@@ -259,3 +261,5 @@ public:
 
 IMPLEMENT_DYNAMIC_CLASS(wxThreadModule, wxModule)
 
+#endif
+  // wxUSE_THREADS
-- 
2.45.2

