зеркало из https://github.com/mozilla/gecko-dev.git
274 строки
8.2 KiB
C++
Executable File
274 строки
8.2 KiB
C++
Executable File
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
|
*
|
|
* The contents of this file are subject to the Netscape Public License
|
|
* Version 1.0 (the "NPL"); you may not use this file except in
|
|
* compliance with the NPL. You may obtain a copy of the NPL at
|
|
* http://www.mozilla.org/NPL/
|
|
*
|
|
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
|
* for the specific language governing rights and limitations under the
|
|
* NPL.
|
|
*
|
|
* The Initial Developer of this code under the NPL is Netscape
|
|
* Communications Corporation. Portions created by Netscape are
|
|
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
|
* Reserved.
|
|
*/
|
|
|
|
#include "stdafx.h"
|
|
|
|
#include "winclose.h"
|
|
#include "wfedde.h"
|
|
#include "mainfrm.h"
|
|
|
|
// Static property.
|
|
CPtrList CWindowChangeRegistry::m_Registry;
|
|
|
|
CWindowChangeItem::CWindowChangeItem(DWORD dwWindowID, int iType) : CWindowChangeRegistry() {
|
|
m_dwWindowID = dwWindowID;
|
|
m_iType = iType;
|
|
}
|
|
|
|
void CWindowChangeItem::Closing(DWORD dwWindowID) {
|
|
// Purpose: Go through all registered windows, and tell them if they are the one closing.
|
|
// Arguments: dwWindowID The window closing.
|
|
// Returns: void
|
|
// Comments:
|
|
// Revision History:
|
|
// 01-19-95 created GAB
|
|
//
|
|
|
|
// Go through the registry, call the member WindowClosing, vtables call the correct class.
|
|
POSITION rIndex = m_Registry.GetHeadPosition();
|
|
CWindowChangeItem *pClose;
|
|
while(rIndex != NULL) {
|
|
pClose = (CWindowChangeItem *)m_Registry.GetNext(rIndex);
|
|
if(pClose->GetWindowID() == dwWindowID) {
|
|
pClose->WindowClosing(theApp.m_bExit);
|
|
|
|
// Remove it from the list, no longer needed, as window doesn't exist.
|
|
delete pClose;
|
|
}
|
|
}
|
|
}
|
|
|
|
void CWindowChangeItem::Sizing(DWORD dwWindowID, DWORD dwX, DWORD dwY, DWORD dwCX, DWORD dwCY) {
|
|
// Purpose: Go through all registered windows, and tell them if they are the one is changing.
|
|
// Arguments: dwWindowID The window sizing.
|
|
// dw* The sizes.
|
|
// Returns: void
|
|
// Comments:
|
|
// Revision History:
|
|
// 02-01-95 created GAB
|
|
//
|
|
|
|
// Go through the registry, call the member WindowSizing, vtables call the correct class.
|
|
POSITION rIndex = m_Registry.GetHeadPosition();
|
|
CWindowChangeItem *pClose;
|
|
while(rIndex != NULL) {
|
|
pClose = (CWindowChangeItem *)m_Registry.GetNext(rIndex);
|
|
if(pClose->GetWindowID() == dwWindowID) {
|
|
pClose->WindowSizing(dwX, dwY, dwCX, dwCY);
|
|
}
|
|
}
|
|
}
|
|
|
|
void CWindowChangeItem::Maximizing(DWORD dwWindowID) {
|
|
// Purpose: Go through all registered windows, and tell them if they are the one is changing.
|
|
// Arguments: dwWindowID The window maximizing.
|
|
// Returns: void
|
|
// Comments:
|
|
// Revision History:
|
|
// 02-01-95 created GAB
|
|
//
|
|
|
|
// Go through the registry, call the member WindowMaximizing, vtables call the correct class.
|
|
POSITION rIndex = m_Registry.GetHeadPosition();
|
|
CWindowChangeItem *pClose;
|
|
while(rIndex != NULL) {
|
|
pClose = (CWindowChangeItem *)m_Registry.GetNext(rIndex);
|
|
if(pClose->GetWindowID() == dwWindowID) {
|
|
pClose->WindowMaximizing();
|
|
}
|
|
}
|
|
}
|
|
|
|
void CWindowChangeItem::Minimizing(DWORD dwWindowID) {
|
|
// Purpose: Go through all registered windows, and tell them if they are the one is changing.
|
|
// Arguments: dwWindowID The window minimizing.
|
|
// Returns: void
|
|
// Comments:
|
|
// Revision History:
|
|
// 02-01-95 created GAB
|
|
//
|
|
|
|
// Go through the registry, call the member WindowMinimizing, vtables call the correct class.
|
|
POSITION rIndex = m_Registry.GetHeadPosition();
|
|
CWindowChangeItem *pClose;
|
|
while(rIndex != NULL) {
|
|
pClose = (CWindowChangeItem *)m_Registry.GetNext(rIndex);
|
|
if(pClose->GetWindowID() == dwWindowID) {
|
|
pClose->WindowMinimizing();
|
|
}
|
|
}
|
|
}
|
|
|
|
void CWindowChangeItem::Normalizing(DWORD dwWindowID) {
|
|
// Purpose: Go through all registered windows, and tell them if they are the one is changing.
|
|
// Arguments: dwWindowID The window maximizing.
|
|
// Returns: void
|
|
// Comments:
|
|
// Revision History:
|
|
// 02-01-95 created GAB
|
|
//
|
|
|
|
// Go through the registry, call the member WindowNormalizing, vtables call the correct class.
|
|
POSITION rIndex = m_Registry.GetHeadPosition();
|
|
CWindowChangeItem *pClose;
|
|
while(rIndex != NULL) {
|
|
pClose = (CWindowChangeItem *)m_Registry.GetNext(rIndex);
|
|
if(pClose->GetWindowID() == dwWindowID) {
|
|
pClose->WindowNormalizing();
|
|
}
|
|
}
|
|
}
|
|
|
|
CDDEWindowChangeItem::CDDEWindowChangeItem(CString& csServiceName, DWORD dwWindowID) : CWindowChangeItem(dwWindowID, m_DDE) {
|
|
m_rIndex = m_Registry.AddTail(this);
|
|
m_csServiceName = csServiceName;
|
|
}
|
|
|
|
void CDDEWindowChangeItem::WindowClosing(BOOL bExiting) {
|
|
// Purpose: Tell the DDE implementation that the window is closing, and the exit status.
|
|
// Arguments: bExiting If the app is exiting, this is TRUE.
|
|
// Returns: void
|
|
// Comments:
|
|
// Revision History:
|
|
// 01-19-95 created GAB
|
|
//
|
|
|
|
// Just call the DDE implementation, it will handle the details.
|
|
CDDEWrapper::WindowChange(this, m_Close, (TwoByteBool)bExiting);
|
|
}
|
|
|
|
void CDDEWindowChangeItem::WindowSizing(DWORD dwX, DWORD dwY, DWORD dwCX, DWORD dwCY) {
|
|
// Purpose: Tell the DDE implementation that the window is resized, and the new coordinates.
|
|
// Arguments: dwX The x position.
|
|
// dwY The y position.
|
|
// dwCX The width.
|
|
// dwCY The height.
|
|
// Returns: void
|
|
// Comments:
|
|
// Revision History:
|
|
// 02-01-95 created GAB
|
|
//
|
|
|
|
// Just call the DDE implementation, it will handle the details.
|
|
CDDEWrapper::WindowChange(this, m_Size, FALSE, dwX, dwY, dwCX, dwCY);
|
|
}
|
|
|
|
void CDDEWindowChangeItem::WindowMaximizing() {
|
|
// Purpose: Tell the DDE implementation that the window is resized, and the new coordinates.
|
|
// Arguments: void
|
|
// Returns: void
|
|
// Comments:
|
|
// Revision History:
|
|
// 02-01-95 created GAB
|
|
//
|
|
|
|
// Just call the DDE implementation, it will handle the details.
|
|
CDDEWrapper::WindowChange(this, m_Maximize);
|
|
}
|
|
|
|
void CDDEWindowChangeItem::WindowMinimizing() {
|
|
// Purpose: Tell the DDE implementation that the window is resized, and the new coordinates.
|
|
// Arguments: void
|
|
// Returns: void
|
|
// Comments:
|
|
// Revision History:
|
|
// 02-01-95 created GAB
|
|
//
|
|
|
|
// Just call the DDE implementation, it will handle the details.
|
|
CDDEWrapper::WindowChange(this, m_Minimize);
|
|
}
|
|
|
|
void CDDEWindowChangeItem::WindowNormalizing() {
|
|
// Purpose: Tell the DDE implementation that the window is resized, and the new coordinates.
|
|
// Arguments: void
|
|
// Returns: void
|
|
// Comments:
|
|
// Revision History:
|
|
// 02-01-95 created GAB
|
|
//
|
|
|
|
// Just call the DDE implementation, it will handle the details.
|
|
CDDEWrapper::WindowChange(this, m_Normalize);
|
|
}
|
|
|
|
BOOL CDDEWindowChangeItem::DDERegister(CString& csServiceName, DWORD dwWindowID) {
|
|
// Purpose: Register a server to monitor when a window closes.
|
|
// Arguments: csServiceName The server to callback.
|
|
// dwWindowID The window to monitor.
|
|
// Returns: BOOL Wether or not registration was successful.
|
|
// Comments: Constructor, basically.
|
|
// Revision History:
|
|
// 01-19-95 created GAB
|
|
//
|
|
|
|
// Don't allow the mimimized window to be monitored.
|
|
if(dwWindowID == 0) {
|
|
return(FALSE);
|
|
}
|
|
|
|
// Make sure such a window exists.
|
|
CAbstractCX *pCX = CAbstractCX::FindContextByID(dwWindowID);
|
|
if(NULL == pCX) {
|
|
return(FALSE);
|
|
}
|
|
if(pCX->GetContext()->type != MWContextBrowser) {
|
|
return(FALSE);
|
|
}
|
|
|
|
// Looks like it will work.
|
|
CDDEWindowChangeItem *pDontCare = new CDDEWindowChangeItem(csServiceName, dwWindowID);
|
|
return(TRUE);
|
|
}
|
|
|
|
BOOL CDDEWindowChangeItem::DDEUnRegister(CString& csServiceName, DWORD dwWindowID) {
|
|
// Purpose: UnRegister a server to monitor when a window closes.
|
|
// Arguments: csServiceName The server not wanting to monitor.
|
|
// dwWindowID The window to stop monitoring.
|
|
// Returns: BOOL False if never registered, otherwise TRUE.
|
|
// Comments: Destructor, basically.
|
|
// Revision History:
|
|
// 01-19-95 created GAB
|
|
//
|
|
|
|
// Allright, we need to go through ever entry in our registry.
|
|
POSITION rIndex = m_Registry.GetHeadPosition();
|
|
CWindowChangeItem *pCmp;
|
|
CDDEWindowChangeItem *pDelme = NULL;
|
|
while(rIndex != NULL) {
|
|
pCmp = (CWindowChangeItem *)m_Registry.GetNext(rIndex);
|
|
if(pCmp->GetType() != m_DDE) {
|
|
continue;
|
|
}
|
|
pDelme = (CDDEWindowChangeItem *)pCmp;
|
|
|
|
if(pDelme->GetServiceName() == csServiceName && pDelme->GetWindowID() == dwWindowID) {
|
|
break;
|
|
}
|
|
pDelme = NULL;
|
|
}
|
|
|
|
if(pDelme == NULL) {
|
|
return(FALSE);
|
|
}
|
|
else {
|
|
delete(pDelme);
|
|
return(TRUE);
|
|
}
|
|
}
|