Ignore:
Timestamp:
Sep 22, 2001, 8:21:01 PM (24 years ago)
Author:
sandervl
Message:

focus/activation fixes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/user32/pmwindow.cpp

    r6762 r6783  
    1 /* $Id: pmwindow.cpp,v 1.147 2001-09-19 15:39:49 sandervl Exp $ */
     1/* $Id: pmwindow.cpp,v 1.148 2001-09-22 18:20:59 sandervl Exp $ */
    22/*
    33 * Win32 Window Managment Code for OS/2
     
    803803        }
    804804
    805         if ((pswp->fl & (SWP_SIZE | SWP_MOVE | SWP_ZORDER)) == 0)
    806 //            goto RunDefWndProc;
    807             goto RunDefFrameWndProc;
    808 
    809805        if(!win32wnd->CanReceiveSizeMsgs())
    810806            break;
     
    899895
    900896            ret = 0xf;
     897        }
     898adjustend:
     899        //The next part needs to be done for top-level windows only
     900        if(!((win32wnd->getStyle() & (WS_POPUP_W|WS_CHILD_W)) == WS_CHILD_W))
     901        {
    901902            //Setting these flags is necessary to avoid activation/focus problems
    902903            if(ulFlags & SWP_DEACTIVATE) {
     
    918919                else
    919920                {
    920                     WinSetFocus(HWND_DESKTOP, WinWindowFromID(hwnd, FID_CLIENT));
    921    
     921                    HWND hwndFocusSave = WinQueryWindowULong(hwnd, QWL_HWNDFOCUSSAVE);
     922                    if(!WinIsWindow(hab, hwndFocusSave)) {
     923                        hwndFocusSave = WinWindowFromID(hwnd, FID_CLIENT);
     924                        WinSetWindowULong(hwnd, QWL_HWNDFOCUSSAVE, hwndFocusSave);
     925                    }
     926                    dprintf(("WM_ADJUSTWINDOWPOS: hwndFocusSave %x %x", OS2ToWin32Handle(hwndFocusSave), hwndFocusSave));
     927                    WinSetFocus(HWND_DESKTOP, hwndFocusSave);
     928
    922929                    ulFrameFlags  = WinQueryWindowUShort(hwnd, QWS_FLAGS);
    923930                    ulFrameFlags &= ~FF_NOACTIVATESWP;
     
    925932                }
    926933            }
    927             rc = (MRESULT)ret;
    928             break;
    929         }
    930         //Setting these flags is necessary to avoid activation/focus problems
    931         if(ulFlags & SWP_DEACTIVATE) {
    932             ret |= AWP_DEACTIVATE;
    933         }
    934         if(ulFlags & SWP_ACTIVATE)
    935         {
    936             ULONG ulFrameFlags;
    937 
    938             if(ulFlags & SWP_ZORDER) {
    939                 ulFrameFlags = WinQueryWindowUShort(hwnd, QWS_FLAGS);
    940                 WinSetWindowUShort(hwnd, QWS_FLAGS, ulFrameFlags | FF_NOACTIVATESWP);
    941             }
    942 
    943             if(!(ulFlags & SWP_SHOW))
     934        }
     935        else {
     936            if(ulFlags & (SWP_ACTIVATE|SWP_FOCUSACTIVATE))
    944937            {
    945                 ret |= AWP_ACTIVATE;
    946             }
    947             else
     938                win32wnd->MsgChildActivate(TRUE);
     939                if(fOS2Look) {
     940                    dprintf(("TBM_QUERYHILITE returned %d", WinSendDlgItemMsg(hwnd, FID_TITLEBAR, TBM_QUERYHILITE, 0, 0)));
     941                    WinSendDlgItemMsg(hwnd, FID_TITLEBAR, TBM_SETHILITE, (MPARAM)1, 0);
     942                }
     943            }
     944            else
     945            if(ulFlags & (SWP_DEACTIVATE|SWP_FOCUSDEACTIVATE))
    948946            {
    949                 WinSetFocus(HWND_DESKTOP, WinWindowFromID(hwnd, FID_CLIENT));
    950 
    951                 ulFrameFlags  = WinQueryWindowUShort(hwnd, QWS_FLAGS);
    952                 ulFrameFlags &= ~FF_NOACTIVATESWP;
    953                 WinSetWindowUShort(hwnd, QWS_FLAGS, ulFrameFlags);
    954             }
    955         }
     947                win32wnd->MsgChildActivate(FALSE);
     948                if(fOS2Look) {
     949                    dprintf(("TBM_QUERYHILITE returned %d", WinSendDlgItemMsg(hwnd, FID_TITLEBAR, TBM_QUERYHILITE, 0, 0)));
     950                    WinSendDlgItemMsg(hwnd, FID_TITLEBAR, TBM_SETHILITE, 0, 0);
     951                }
     952            }
     953        }
     954        dprintf(("WM_ADJUSTWINDOWPOS ret %x", ret));
    956955        rc = (MRESULT)ret;
    957956        break;
     
    983982            if(pswp->fl & SWP_HIDE) {
    984983                WinShowWindow(win32wnd->getOS2WindowHandle(), 0);
    985             }
     984            } 
    986985            goto RunDefFrameWndProc;
    987986        }
Note: See TracChangeset for help on using the changeset viewer.