]> git.saurik.com Git - wxWidgets.git/commitdiff
wxBook additions; added a couple of pixels in menu drawing; taskbar
authorJulian Smart <julian@anthemion.co.uk>
Thu, 12 Aug 1999 20:18:18 +0000 (20:18 +0000)
committerJulian Smart <julian@anthemion.co.uk>
Thu, 12 Aug 1999 20:18:18 +0000 (20:18 +0000)
PopupMenu improvements

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@3363 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/html/wxbook.htm
docs/latex/wx/time.tex
src/msw/mdi.cpp
src/msw/ownerdrw.cpp
src/msw/taskbar.cpp
src/msw/window.cpp

index 26ea676027311d41318d6627d6f0f90e1a5274aa..c40507fe9aad512e7206b81be02d7cc0880721aa 100644 (file)
@@ -79,6 +79,12 @@ So far, the following people are interested in taking part in this project:<P>
 </i>
 <li><a href="mailto:julian.smart@ukonline.co.uk">Julian Smart</a>.
 <li><a href="mailto:zeitlin@dptmaths.ens-cachan.fr">Vadim Zeitlin</a>.
+<li><a href="mailto:slavik2@czn.cz">Vaclav Slavik</a>. <i>wxHTML section</i>
+<li><a href="mailto:csomor@advancedconcepts.ch">Stefan Csomor</a>. <i>the sequence of events i.e. which action provokes which event sequence,
+this is implicit for the use on MSW, but very important for other systems; and porting to new platforms</i>
+<li><a href="mailto:karsten@phy.hw.ac.uk">Karsten Ballueder</a>. <i>short tutorials on some useful
+GNU tools, like autoconf/configure/make, programming
+strategies, etc.</i>
 </ul>
 
 <hr>
@@ -114,6 +120,9 @@ in terms of a quickie job using the existing reference manual.<P>
 Another publishing name to think of is O'Reilly. They would probably give us a lot
 of guidance for style, formatting, etc.<P>
 
+<a href="mailto:Roald.Ribe@winlink.no">Roald Ribe</a> writes:
+"<a href="http://www.bruceeckel.com/javabook.html" target=_new>Thinking in Java</a>
+is published both as a PDF for internet (by the author) and in print by Prentice Hall."<P>
 
 <hr>
 
index 2e463e402b30c098b172222fba3d599a35dbb70e..85cd2a6055537fe06f9ae95bb88fd0ecd4bc747d 100644 (file)
@@ -18,25 +18,10 @@ with a new wxDateTime class in the near future.
 
 {\small \begin{verbatim}
 typedef unsigned short hourTy;
-\end{verbatim}}
-
-{\small \begin{verbatim}
 typedef unsigned short minuteTy;
-\end{verbatim}}
-
-{\small \begin{verbatim}
 typedef unsigned short secondTy;
-\end{verbatim}}
-
-{\small \begin{verbatim}
 typedef unsigned long clockTy;
-\end{verbatim}}
-
-{\small \begin{verbatim}
 enum tFormat { wx12h, wx24h };
-\end{verbatim}}
-
-{\small \begin{verbatim}
 enum tPrecision { wxStdMinSec, wxStdMin };
 \end{verbatim}}
 
index 381c6d04569e933908fa96aa8918d71d71c44546..499c4f49720714dcb16d3d9d7e8cac226ab665d0 100644 (file)
@@ -61,7 +61,7 @@ extern wxChar wxMDIFrameClassName[];
 extern wxChar wxMDIChildFrameClassName[];
 extern wxWindow *wxWndHook;                 // from window.cpp
 
-extern wxList *wxWinHandleList;
+extern void wxAssociateWinWithHandle(HWND hWnd, wxWindow *win);
 
 static HWND invalidHandle = 0;
 
@@ -640,7 +640,7 @@ bool wxMDIChildFrame::Create(wxMDIParentFrame *parent,
   m_hWnd = (WXHWND)Return;
 
   wxWndHook = NULL;
-  wxWinHandleList->Append((long)GetHWND(), this);
+  wxAssociateWinWithHandle((HWND) GetHWND(), this);
 
   // VZ: what's this? an act of piracy?
   //SetWindowLong(GetHwnd(), 0, (long)this);
index cefdc0e8e376aad997567774ef52ffb2fe768001..d60bc8c408344dfcdf12d5f4957802dacbd2482c 100644 (file)
@@ -77,6 +77,10 @@ bool wxOwnerDrawn::OnMeasureItem(size_t *pwidth, size_t *pheight)
   str += _T('W'); // 'W' is typically the widest letter
 
   dc.GetTextExtent(str, (long *)pwidth, (long *)pheight);
+
+  // JACS: items still look too tightly packed, so adding 2 pixels.
+  (*pheight) = (*pheight) + 2;
+
   m_nHeight = *pheight;                // remember height for use in OnDrawItem
 
   return TRUE;
@@ -86,6 +90,10 @@ bool wxOwnerDrawn::OnMeasureItem(size_t *pwidth, size_t *pheight)
 // Win32 GDI functions and not wxWindows ones. Might help to whoever decides to
 // port this code to X. (VZ)
 
+// JACS: TODO. Why does a disabled but highlighted item still
+// get drawn embossed? How can we tell DrawState that we don't want the
+// embossing?
+
 #if defined(__WIN32__) && !defined(__SC__) && !defined(__TWIN32__)
 #define   O_DRAW_NATIVE_API     // comments below explain why I use it
 #endif
index 0fa9ef3a20c99e06dc2b4419fce06a7e3c3775b4..36d0de6c5235e3e2ed03d63d09e331ec6e733358 100644 (file)
@@ -158,6 +158,16 @@ bool wxTaskBarIcon::RemoveIcon(void)
 
 bool wxTaskBarIcon::PopupMenu(wxMenu *menu) //, int x, int y);
 {
+    // OK, so I know this isn't thread-friendly, but
+    // what to do? We need this check.
+
+    static bool s_inPopup = FALSE;
+
+    if (s_inPopup)
+        return FALSE;
+
+    s_inPopup = TRUE;
+
     bool        rval = FALSE;
     wxWindow*   win;
     int         x, y;
@@ -177,7 +187,9 @@ bool wxTaskBarIcon::PopupMenu(wxMenu *menu) //, int x, int y);
 
     win->PopEventHandler(FALSE);
     win->Destroy();
-    //delete win;
+    delete win;
+
+    s_inPopup = FALSE;
 
     return rval;
 }
index 956c30b92b709154142eb92628291b0d3ada277c..161cdf53747fb725565b61bfd58c92a03504ebb9 100644 (file)
@@ -1719,6 +1719,12 @@ LRESULT APIENTRY _EXPORT wxWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA
     // it with wxWindow stored in wxWndHook
     if ( !wnd && wxWndHook )
     {
+#if 0 // def __WXDEBUG__
+        char buf[512];
+        ::GetClassNameA((HWND) hWnd, buf, 512);
+        wxString className(buf);
+#endif
+
         wxAssociateWinWithHandle(hWnd, wxWndHook);
         wnd = wxWndHook;
         wxWndHook = NULL;
@@ -2124,6 +2130,10 @@ wxWindow *wxFindWinFromHandle(WXHWND hWnd)
     return (wxWindow *)node->Data();
 }
 
+#if 0 // def __WXDEBUG__
+static int gs_AssociationCount = 0;
+#endif
+
 void wxAssociateWinWithHandle(HWND hWnd, wxWindow *win)
 {
     // adding NULL hWnd is (first) surely a result of an error and
@@ -2131,12 +2141,33 @@ void wxAssociateWinWithHandle(HWND hWnd, wxWindow *win)
     wxCHECK_RET( hWnd != (HWND)NULL,
                  _T("attempt to add a NULL hWnd to window list ignored") );
 
-    if ( !wxWinHandleList->Find((long)hWnd) )
+
+    wxWindow *oldWin = wxFindWinFromHandle((WXHWND) hWnd);
+    if ( oldWin && (oldWin != win) )
+    {
+        wxString str(win->GetClassInfo()->GetClassName());
+        wxLogError("Bug! Found existing HWND %X for new window of class %s", (int) hWnd, (const char*) str);
+    }
+    else if (!oldWin)
+    {
+#if 0 // def __WXDEBUG__
+        gs_AssociationCount ++;
+        wxLogDebug("+ Association %d", gs_AssociationCount);
+#endif
+
         wxWinHandleList->Append((long)hWnd, win);
+    }
 }
 
 void wxRemoveHandleAssociation(wxWindow *win)
 {
+#if 0 // def __WXDEBUG__
+    if (wxWinHandleList->Member(win))
+    {
+        wxLogDebug("- Association %d", gs_AssociationCount);
+        gs_AssociationCount --;
+    }
+#endif
     wxWinHandleList->DeleteObject(win);
 }
 
@@ -2284,7 +2315,18 @@ bool wxWindow::MSWCreate(int id,
     }
 
     wxWndHook = NULL;
-    wxWinHandleList->Append((long)m_hWnd, this);
+#ifdef __WXDEBUG__
+    wxNode* node = wxWinHandleList->Member(this);
+    if (node)
+    {
+        HWND hWnd = (HWND) node->GetKeyInteger();
+        if (hWnd != (HWND) m_hWnd)
+        {
+            wxLogError("A second HWND association is being added for the same window!");
+        }
+    }
+#endif
+    wxAssociateWinWithHandle((HWND) m_hWnd, this);
 
     return TRUE;
 }
@@ -3513,11 +3555,12 @@ void wxSetKeyboardHook(bool doIt)
     {
         wxTheKeyboardHookProc = MakeProcInstance((FARPROC) wxKeyboardHook, wxGetInstance());
         wxTheKeyboardHook = SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC) wxTheKeyboardHookProc, wxGetInstance(),
+
 #if defined(__WIN32__) && !defined(__TWIN32__)
             GetCurrentThreadId());
         //      (DWORD)GetCurrentProcess()); // This is another possibility. Which is right?
 #else
-        GetCurrentTask());
+            GetCurrentTask());
 #endif
     }
     else