changeset 1483:73f2ad84d4ec

Fixed OS/2 windows being shown when setting position/size. Moved the OS/2 specific DW_OS2_NEW_WINDOW flag into os2/dw.c. Deprecated and essentially removed DW_FCF_SHELLPOSITION and DW_FCF_NOBYTEALIGN. These were OS/2 specific and are set automatically now... FCF_SHELLPOSITION was causing the positioning problems that necessitated the window being shown to set the size and position. Right now SHELLPOSITION isn't used at all... causing shell positioning to not work. I hope to have a way to allow shell positioning to work again soon but the idea I had to do this did not work.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Fri, 23 Dec 2011 15:58:13 +0000
parents dd584f431f9f
children 9b24233d7606
files dw.h os2/dw.c readme
diffstat 3 files changed, 20 insertions(+), 24 deletions(-) [+]
line wrap: on
line diff
--- a/dw.h	Thu Dec 22 14:48:38 2011 +0000
+++ b/dw.h	Fri Dec 23 15:58:13 2011 +0000
@@ -137,9 +137,7 @@
 #define DW_FCF_HORZSCROLL        FCF_HORZSCROLL
 #define DW_FCF_DLGBORDER         FCF_DLGBORDER
 #define DW_FCF_BORDER            FCF_BORDER
-#define DW_FCF_SHELLPOSITION     FCF_SHELLPOSITION
 #define DW_FCF_TASKLIST          FCF_TASKLIST
-#define DW_FCF_NOBYTEALIGN       FCF_NOBYTEALIGN
 #define DW_FCF_NOMOVEWITHOWNER   FCF_NOMOVEWITHOWNER
 #define DW_FCF_SYSMODAL          FCF_SYSMODAL
 #define DW_FCF_HIDEBUTTON        FCF_HIDEBUTTON
@@ -176,8 +174,6 @@
 
 #define DW_BS_NOBORDER           BS_NOBORDER
 
-#define DW_OS2_NEW_WINDOW        1
-
 /* flag values for dw_messagebox() */
 #define DW_MB_OK                 MB_OK
 #define DW_MB_OKCANCEL           MB_OKCANCEL
@@ -352,9 +348,7 @@
 #define DW_FCF_HORZSCROLL        0
 #define DW_FCF_DLGBORDER         0
 #define DW_FCF_BORDER            0
-#define DW_FCF_SHELLPOSITION     0
 #define DW_FCF_TASKLIST          0
-#define DW_FCF_NOBYTEALIGN       0
 #define DW_FCF_NOMOVEWITHOWNER   0
 #define DW_FCF_SYSMODAL          0
 #define DW_FCF_HIDEBUTTON        0
@@ -535,9 +529,7 @@
 #define DW_FCF_HORZSCROLL        WS_HSCROLL
 #define DW_FCF_DLGBORDER         WS_DLGFRAME
 #define DW_FCF_BORDER            WS_BORDER
-#define DW_FCF_SHELLPOSITION     0
 #define DW_FCF_TASKLIST          WS_VSCROLL
-#define DW_FCF_NOBYTEALIGN       0
 #define DW_FCF_NOMOVEWITHOWNER   0
 #define DW_FCF_SYSMODAL          0
 #define DW_FCF_HIDEBUTTON        WS_MINIMIZEBOX
@@ -818,9 +810,7 @@
 #define DW_FCF_HORZSCROLL        0
 #define DW_FCF_DLGBORDER         0
 #define DW_FCF_BORDER            Ph_WM_RENDER_BORDER
-#define DW_FCF_SHELLPOSITION     0
 #define DW_FCF_TASKLIST          0
-#define DW_FCF_NOBYTEALIGN       0
 #define DW_FCF_NOMOVEWITHOWNER   0
 #define DW_FCF_SYSMODAL          0
 #define DW_FCF_HIDEBUTTON        0
@@ -1003,9 +993,7 @@
 #define DW_FCF_HORZSCROLL        (1 << 8)
 #define DW_FCF_DLGBORDER         (1 << 9)
 #define DW_FCF_BORDER            (1 << 10)
-#define DW_FCF_SHELLPOSITION     (1 << 11)
 #define DW_FCF_TASKLIST          (1 << 12)
-#define DW_FCF_NOBYTEALIGN       (1 << 13)
 #define DW_FCF_NOMOVEWITHOWNER   (1 << 14)
 #define DW_FCF_SYSMODAL          (1 << 15)
 #define DW_FCF_HIDEBUTTON        (1 << 16)
@@ -1358,7 +1346,10 @@
 /* Obsolete, should disappear sometime */
 #define BOXHORZ DW_HORZ
 #define BOXVERT DW_VERT
+#define DW_FCF_SHELLPOSITION     0
+#define DW_FCF_NOBYTEALIGN       0
 
+/* Scrolling constants */
 #define DW_SCROLL_UP 0
 #define DW_SCROLL_DOWN 1
 #define DW_SCROLL_TOP 2
--- a/os2/dw.c	Thu Dec 22 14:48:38 2011 +0000
+++ b/os2/dw.c	Fri Dec 23 15:58:13 2011 +0000
@@ -101,6 +101,8 @@
    CLR_WHITE
 };
 
+#define DW_OS2_NEW_WINDOW        1
+
 #define IS_WARP4() (aulBuffer[0] == 20 && aulBuffer[1] >= 40)
 
 #ifndef min
@@ -4245,7 +4247,7 @@
  */
 int API dw_window_show(HWND handle)
 {
-   int rc = WinSetWindowPos(handle, NULLHANDLE, 0, 0, 0, 0, SWP_SHOW);
+   int rc = WinShowWindow(handle, TRUE);
    HSWITCH hswitch;
    SWCNTRL swcntrl;
 
@@ -4267,6 +4269,9 @@
 
       if(blah && !(blah->flags & DW_OS2_NEW_WINDOW))
       {
+         /* Make sure windows shown for the first time are
+          * completely visible if possible.
+          */
          ULONG cx = dw_screen_width(), cy = dw_screen_height();
          int newx, newy, changed = 0;
          SWP swp;
@@ -4278,12 +4283,12 @@
          newx = swp.x;
          newy = swp.y;
 
-         if((swp.x+swp.cx) > cx)
+         if(swp.cx < cx && (swp.x+swp.cx) > cx)
          {
             newx = (cx - swp.cx)/2;
             changed = 1;
          }
-         if((swp.y+swp.cy) > cy)
+         if(swp.cy < cy && (swp.y+swp.cy) > cy)
          {
             newy = (cy - swp.cy)/2;
             changed = 1;
@@ -4922,9 +4927,6 @@
    else
       flStyle |= FCF_TITLEBAR;
 
-   if(!(flStyle & FCF_SHELLPOSITION))
-      blah->flags |= DW_OS2_NEW_WINDOW;
-
    if(flStyle & WS_MAXIMIZED)
    {
       winStyle |= WS_MAXIMIZED;
@@ -4936,6 +4938,8 @@
       flStyle &= ~WS_MINIMIZED;
    }
 
+   /* Then create the real window window without FCF_SHELLPOSITION */
+   flStyle &= ~FCF_SHELLPOSITION;
    hwndframe = WinCreateStdWindow(hwndOwner, winStyle, &flStyle, (PSZ)ClassName, (PSZ)title, 0L, NULLHANDLE, 0L, &newbox->hwnd);
    newbox->hwndtitle = WinWindowFromID(hwndframe, FID_TITLEBAR);
    if(!newbox->titlebar && newbox->hwndtitle)
@@ -4943,7 +4947,6 @@
    blah->oldproc = WinSubclassWindow(hwndframe, _sizeproc);
    WinSetWindowPtr(hwndframe, QWP_USER, blah);
    WinSetWindowPtr(newbox->hwnd, QWP_USER, newbox);
-
    return hwndframe;
 }
 
@@ -6907,7 +6910,7 @@
       _get_window_for_size(handle, &width, &height);
    
    /* Finally set the size */
-   WinSetWindowPos(handle, NULLHANDLE, 0, 0, width, height, SWP_SHOW | SWP_SIZE);
+   WinSetWindowPos(handle, NULLHANDLE, 0, 0, width, height, SWP_SIZE);
 }
 
 /*
@@ -7025,7 +7028,7 @@
    
    _handle_gravity(handle, &x, &y, width, height);
    /* Finally set the size */
-   WinSetWindowPos(handle, NULLHANDLE, x, y, width, height, SWP_SHOW | SWP_MOVE | SWP_SIZE);
+   WinSetWindowPos(handle, NULLHANDLE, x, y, width, height, SWP_MOVE | SWP_SIZE);
 }
 
 /*
@@ -9063,7 +9066,7 @@
    DWDialog *dwwait;
    HMTX mtx = dw_mutex_new();
 
-   window = dw_window_new( HWND_DESKTOP, "Choose Color", FCF_SHELLPOSITION | FCF_TITLEBAR | FCF_DLGBORDER | FCF_CLOSEBUTTON | FCF_SYSMENU);
+   window = dw_window_new( HWND_DESKTOP, "Choose Color", FCF_TITLEBAR | FCF_DLGBORDER | FCF_CLOSEBUTTON | FCF_SYSMENU);
 
    vbox = dw_box_new(DW_VERT, 5);
 
@@ -10879,7 +10882,7 @@
       DWDialog *dwwait;
       HMTX mtx = dw_mutex_new();
 
-      window = dw_window_new( HWND_DESKTOP, title, FCF_SHELLPOSITION | FCF_TITLEBAR | FCF_SIZEBORDER | FCF_MINMAX);
+      window = dw_window_new( HWND_DESKTOP, title, FCF_TITLEBAR | FCF_SIZEBORDER | FCF_MINMAX);
 
       vbox = dw_box_new(DW_VERT, 5);
 
@@ -11293,7 +11296,7 @@
     }
 
     /* Create the print dialog */
-    window = dw_window_new(HWND_DESKTOP, "Choose Printer", FCF_SHELLPOSITION | FCF_TITLEBAR | FCF_DLGBORDER | FCF_CLOSEBUTTON | FCF_SYSMENU);
+    window = dw_window_new(HWND_DESKTOP, "Choose Printer", FCF_TITLEBAR | FCF_DLGBORDER | FCF_CLOSEBUTTON | FCF_SYSMENU);
 
     vbox = dw_box_new(DW_VERT, 5);
 
--- a/readme	Thu Dec 22 14:48:38 2011 +0000
+++ b/readme	Fri Dec 23 15:58:13 2011 +0000
@@ -50,6 +50,8 @@
 Fixed auto-sizing top-level windows on Windows; added on OS/2 and Mac.
 Fixed bubble help not being displayed on Windows.
 Fixed menu bar items remaining highlighted on Mac.
+Fixed OS/2 and Windows showing windows during dw_window_set_pos/size().
+Deprecated DW_FCF_NOBYTEALIGN and DW_FCF_SHELLPOSITION flags.
 
 Dynamic Windows Documentation is available at: