From a233e5d55f3efe446c14dee14666c88381d70a6e Mon Sep 17 00:00:00 2001 From: "gavin%gavinsharp.com" Date: Mon, 14 Apr 2008 00:53:21 +0000 Subject: [PATCH] Bug 393707: Landing 389634 broke building without XUL, patch by romaxa , r=smaug, a=beltzner --- .../components/windowwatcher/src/Makefile.in | 1 + .../src/nsAutoWindowStateHelper.cpp | 114 ++++++++++++++++++ .../src/nsAutoWindowStateHelper.h | 69 +++++++++++ .../windowwatcher/src/nsPromptService.cpp | 70 ----------- .../windowwatcher/src/nsPromptService.h | 24 +--- 5 files changed, 185 insertions(+), 93 deletions(-) create mode 100644 embedding/components/windowwatcher/src/nsAutoWindowStateHelper.cpp create mode 100644 embedding/components/windowwatcher/src/nsAutoWindowStateHelper.h diff --git a/embedding/components/windowwatcher/src/Makefile.in b/embedding/components/windowwatcher/src/Makefile.in index a4cf0d1cbb1..eb125cc7873 100644 --- a/embedding/components/windowwatcher/src/Makefile.in +++ b/embedding/components/windowwatcher/src/Makefile.in @@ -70,6 +70,7 @@ REQUIRES = xpcom \ CPPSRCS = nsPrompt.cpp \ nsWWJSUtils.cpp \ nsWindowWatcher.cpp \ + nsAutoWindowStateHelper.cpp \ $(NULL) ifdef MOZ_XUL diff --git a/embedding/components/windowwatcher/src/nsAutoWindowStateHelper.cpp b/embedding/components/windowwatcher/src/nsAutoWindowStateHelper.cpp new file mode 100644 index 00000000000..d73c06a6037 --- /dev/null +++ b/embedding/components/windowwatcher/src/nsAutoWindowStateHelper.cpp @@ -0,0 +1,114 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is mozilla.org code. + * + * The Initial Developer of the Original Code is + * Netscape Communications Corporation. + * Portions created by the Initial Developer are Copyright (C) 2001 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#include "nsAutoWindowStateHelper.h" + +#include "nsIDOMWindow.h" +#include "nsPIDOMWindow.h" +#include "nsIDOMEventTarget.h" +#include "nsIDOMEvent.h" +#include "nsIPrivateDOMEvent.h" +#include "nsIDOMDocumentEvent.h" +#include "nsString.h" + +/**************************************************************** + ****************** nsAutoWindowStateHelper ********************* + ****************************************************************/ + +nsAutoWindowStateHelper::nsAutoWindowStateHelper(nsIDOMWindow *aWindow) + : mWindow(aWindow), + mDefaultEnabled(DispatchCustomEvent("DOMWillOpenModalDialog")) +{ + nsCOMPtr window(do_QueryInterface(aWindow)); + + if (window) { + window->EnterModalState(); + } +} + +nsAutoWindowStateHelper::~nsAutoWindowStateHelper() +{ + nsCOMPtr window(do_QueryInterface(mWindow)); + + if (window) { + window->LeaveModalState(); + } + + if (mDefaultEnabled) { + DispatchCustomEvent("DOMModalDialogClosed"); + } +} + +PRBool +nsAutoWindowStateHelper::DispatchCustomEvent(const char *aEventName) +{ + if (!mWindow) { + return PR_TRUE; + } + +#ifdef DEBUG + { + nsCOMPtr window(do_QueryInterface(mWindow)); + } +#endif + + nsCOMPtr domdoc; + mWindow->GetDocument(getter_AddRefs(domdoc)); + + nsCOMPtr docevent(do_QueryInterface(domdoc)); + nsCOMPtr event; + + PRBool defaultActionEnabled = PR_TRUE; + + if (docevent) { + docevent->CreateEvent(NS_LITERAL_STRING("Events"), getter_AddRefs(event)); + + nsCOMPtr privateEvent(do_QueryInterface(event)); + if (privateEvent) { + event->InitEvent(NS_ConvertASCIItoUTF16(aEventName), PR_TRUE, PR_TRUE); + + privateEvent->SetTrusted(PR_TRUE); + + nsCOMPtr target(do_QueryInterface(mWindow)); + + target->DispatchEvent(event, &defaultActionEnabled); + } + } + + return defaultActionEnabled; +} + diff --git a/embedding/components/windowwatcher/src/nsAutoWindowStateHelper.h b/embedding/components/windowwatcher/src/nsAutoWindowStateHelper.h new file mode 100644 index 00000000000..27ed72b9967 --- /dev/null +++ b/embedding/components/windowwatcher/src/nsAutoWindowStateHelper.h @@ -0,0 +1,69 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is Mozilla Communicator client code. + * + * The Initial Developer of the Original Code is + * Netscape Communications Corporation. + * Portions created by the Initial Developer are Copyright (C) 2001 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#ifndef __nsAutoWindowStateHelper_h +#define __nsAutoWindowStateHelper_h + +#include "nsCOMPtr.h" + +/** + * Helper class for dealing with notifications around opening modal + * windows. + */ + +class nsIDOMWindow; + +class nsAutoWindowStateHelper +{ +public: + nsAutoWindowStateHelper(nsIDOMWindow *aWindow); + ~nsAutoWindowStateHelper(); + + PRBool DefaultEnabled() + { + return mDefaultEnabled; + } + +protected: + PRBool DispatchCustomEvent(const char *aEventName); + + nsIDOMWindow *mWindow; + PRBool mDefaultEnabled; +}; + + +#endif diff --git a/embedding/components/windowwatcher/src/nsPromptService.cpp b/embedding/components/windowwatcher/src/nsPromptService.cpp index d747362eb4a..86b46639d42 100644 --- a/embedding/components/windowwatcher/src/nsPromptService.cpp +++ b/embedding/components/windowwatcher/src/nsPromptService.cpp @@ -63,76 +63,6 @@ static const char kAuthenticationIconClass[] = "authentication-icon question-ico #define kCommonDialogsProperties "chrome://global/locale/commonDialogs.properties" - -/**************************************************************** - ****************** nsAutoWindowStateHelper ********************* - ****************************************************************/ - -nsAutoWindowStateHelper::nsAutoWindowStateHelper(nsIDOMWindow *aWindow) - : mWindow(aWindow), - mDefaultEnabled(DispatchCustomEvent("DOMWillOpenModalDialog")) -{ - nsCOMPtr window(do_QueryInterface(aWindow)); - - if (window) { - window->EnterModalState(); - } -} - -nsAutoWindowStateHelper::~nsAutoWindowStateHelper() -{ - nsCOMPtr window(do_QueryInterface(mWindow)); - - if (window) { - window->LeaveModalState(); - } - - if (mDefaultEnabled) { - DispatchCustomEvent("DOMModalDialogClosed"); - } -} - -PRBool -nsAutoWindowStateHelper::DispatchCustomEvent(const char *aEventName) -{ - if (!mWindow) { - return PR_TRUE; - } - -#ifdef DEBUG - { - nsCOMPtr window(do_QueryInterface(mWindow)); - } -#endif - - nsCOMPtr domdoc; - mWindow->GetDocument(getter_AddRefs(domdoc)); - - nsCOMPtr docevent(do_QueryInterface(domdoc)); - nsCOMPtr event; - - PRBool defaultActionEnabled = PR_TRUE; - - if (docevent) { - docevent->CreateEvent(NS_LITERAL_STRING("Events"), getter_AddRefs(event)); - - nsCOMPtr privateEvent(do_QueryInterface(event)); - if (privateEvent) { - event->InitEvent(NS_ConvertASCIItoUTF16(aEventName), PR_TRUE, PR_TRUE); - - privateEvent->SetTrusted(PR_TRUE); - - nsCOMPtr target(do_QueryInterface(mWindow)); - - target->DispatchEvent(event, &defaultActionEnabled); - } - } - - return defaultActionEnabled; -} - - - /**************************************************************** ************************* ParamBlock *************************** ****************************************************************/ diff --git a/embedding/components/windowwatcher/src/nsPromptService.h b/embedding/components/windowwatcher/src/nsPromptService.h index 6975737e903..a864021c525 100644 --- a/embedding/components/windowwatcher/src/nsPromptService.h +++ b/embedding/components/windowwatcher/src/nsPromptService.h @@ -50,6 +50,7 @@ #include "nsPIPromptService.h" #include "nsINonBlockingAlertService.h" #include "nsIWindowWatcher.h" +#include "nsAutoWindowStateHelper.h" class nsIDOMWindow; class nsIDialogParamBlock; @@ -77,28 +78,5 @@ private: nsCOMPtr mWatcher; }; -/** - * Helper class for dealing with notifications around opening modal - * windows. - */ -class nsAutoWindowStateHelper -{ -public: - nsAutoWindowStateHelper(nsIDOMWindow *aWindow); - ~nsAutoWindowStateHelper(); - - PRBool DefaultEnabled() - { - return mDefaultEnabled; - } - -protected: - PRBool DispatchCustomEvent(const char *aEventName); - - nsIDOMWindow *mWindow; - PRBool mDefaultEnabled; -}; - - #endif