]> git.saurik.com Git - wxWidgets.git/commitdiff
Trivially implemented DoDrawIcon
authorJulian Smart <julian@anthemion.co.uk>
Tue, 12 Mar 2002 12:29:21 +0000 (12:29 +0000)
committerJulian Smart <julian@anthemion.co.uk>
Tue, 12 Mar 2002 12:29:21 +0000 (12:29 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@14563 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/x11/dcclient.cpp
src/x11/toplevel.cpp
src/x11/window.cpp

index 04c54e565e5b9766d221c8e8339750515f8c51f6..4c3d25fa2101de91922a0cbe1f834ec80d21f227 100644 (file)
@@ -838,6 +838,7 @@ void wxWindowDC::DoDrawEllipse( wxCoord x, wxCoord y, wxCoord width, wxCoord hei
 
 void wxWindowDC::DoDrawIcon( const wxIcon &icon, wxCoord x, wxCoord y)
 {
+    DoDrawBitmap(icon, x, y, TRUE);
 }
 
 #if wxUSE_NANOX
index f1981aeb72fc91f0bd49a24ab313527ff95d4658..e585e1557adeefaf814f8a58506475ee619b8d0c 100644 (file)
@@ -619,9 +619,59 @@ void wxTopLevelWindowX11::DoSetClientSize(int width, int height)
 
 void wxTopLevelWindowX11::DoSetSize(int x, int y, int width, int height, int sizeFlags)
 {
+#if 0
     // wxLogDebug( "Setting pos: %d, %d", x, y );
     wxWindowX11::DoSetSize(x, y, width, height, sizeFlags);
+#endif
+    XSync(wxGlobalDisplay(), False);
+    Window window = (Window) m_mainWidget;
+    if (!window)
+        return ;
+
+    Display *display = (Display*) GetXDisplay();
+    Window root = RootWindowOfScreen(DefaultScreenOfDisplay(display));
+    Window parent_window = window,
+        next_parent   = window;
+
+    // search for the parent that is child of ROOT, because the WM may
+    // reparent twice and notify only the next parent (like FVWM)
+    while (next_parent != root) {
+        Window *theChildren; unsigned int n;
+        parent_window = next_parent;
+        XQueryTree(display, parent_window, &root,
+            &next_parent, &theChildren, &n);
+        XFree(theChildren); // not needed
+    }
+
+    XWindowChanges windowChanges;
+    windowChanges.x = x;
+    windowChanges.y = y;
+    windowChanges.width = width;
+    windowChanges.height = height;
+    windowChanges.stack_mode = 0;
+    int valueMask = CWX | CWY | CWWidth | CWHeight;
+
+    if (x != -1 || (sizeFlags & wxSIZE_ALLOW_MINUS_ONE))
+    {
+        valueMask |= CWX;
+    }
+    if (y != -1 || (sizeFlags & wxSIZE_ALLOW_MINUS_ONE))
+    {
+        valueMask |= CWY;
+    }
+    if (width != -1)
+    {
+        windowChanges.width = wxMax(1, width);
+        valueMask |= CWWidth;
+    }
+    if (height != -1)
+    {
+        windowChanges.height = wxMax(1, height);
+        valueMask |= CWHeight;
+    }
 
+    XConfigureWindow( display, parent_window, valueMask, &windowChanges );
+    
     XSizeHints size_hints;
     size_hints.flags = 0;
     if (x > -1 && y > -1)
@@ -703,6 +753,30 @@ void wxTopLevelWindowX11::DoGetPosition(int *x, int *y) const
 {
     XSync(wxGlobalDisplay(), False);
     Window window = (Window) m_mainWidget;
+    if (!window)
+        return ;
+
+    Display *display = (Display*) GetXDisplay();
+    Window root = RootWindowOfScreen(DefaultScreenOfDisplay(display));
+    Window parent_window = window,
+        next_parent   = window;
+
+    // search for the parent that is child of ROOT, because the WM may
+    // reparent twice and notify only the next parent (like FVWM)
+    while (next_parent != root) {
+        Window *theChildren; unsigned int n;
+        parent_window = next_parent;
+        XQueryTree(display, parent_window, &root,
+            &next_parent, &theChildren, &n);
+        XFree(theChildren); // not needed
+    }
+    int xx, yy; unsigned int dummy;
+    XGetGeometry(display, parent_window, &root,
+        &xx, &yy, &dummy, &dummy, &dummy, &dummy);
+    if (x) *x = xx;
+    if (y) *y = yy;
+
+#if 0    
     if (window)
     {
         int offsetX = 0;
@@ -727,4 +801,5 @@ void wxTopLevelWindowX11::DoGetPosition(int *x, int *y) const
             *y = attr.y + offsetY;
         }
     }
+#endif
 }
index 4fd8cb243b49a1defc6cfee7384ebb9a1ecdf474..4012874c150e3933ae919f70e56fe28e34403318 100644 (file)
@@ -781,6 +781,14 @@ void wxWindowX11::DoSetClientSize(int width, int height)
 
     wxCHECK_RET( xwindow, wxT("invalid window") );
 
+    XWindowChanges windowChanges;
+    windowChanges.width = width;
+    windowChanges.height = height;
+    windowChanges.stack_mode = 0;
+    int valueMask = CWWidth | CWHeight;
+
+    XConfigureWindow( wxGlobalDisplay(), xwindow, valueMask, &windowChanges );
+#if 0
     XWindowAttributes attr;
     Status status = XGetWindowAttributes( wxGlobalDisplay(), xwindow, &attr );
     wxCHECK_RET( status, wxT("invalid window attributes") );
@@ -797,6 +805,7 @@ void wxWindowX11::DoSetClientSize(int width, int height)
         new_h = height;
     
     DoMoveWindow( new_x, new_y, new_w, new_h );
+#endif
 }
 
 // For implementation purposes - sometimes decorations make the client area