diff options
author | Christian Persch <chpe@src.gnome.org> | 2007-08-26 04:59:04 +0800 |
---|---|---|
committer | Christian Persch <chpe@src.gnome.org> | 2007-08-26 04:59:04 +0800 |
commit | 6deabce61b1758b0c395678bf5c2769ee4ca17c6 (patch) | |
tree | 27866c89b34cb0fe866753fbef2894e6dfd01785 /embed/xulrunner/src/GeckoSingle.cpp | |
parent | d2bc7076ca31996d4a5b80b74e4380e6f2f56321 (diff) | |
download | gsoc2013-epiphany-6deabce61b1758b0c395678bf5c2769ee4ca17c6.tar gsoc2013-epiphany-6deabce61b1758b0c395678bf5c2769ee4ca17c6.tar.gz gsoc2013-epiphany-6deabce61b1758b0c395678bf5c2769ee4ca17c6.tar.bz2 gsoc2013-epiphany-6deabce61b1758b0c395678bf5c2769ee4ca17c6.tar.lz gsoc2013-epiphany-6deabce61b1758b0c395678bf5c2769ee4ca17c6.tar.xz gsoc2013-epiphany-6deabce61b1758b0c395678bf5c2769ee4ca17c6.tar.zst gsoc2013-epiphany-6deabce61b1758b0c395678bf5c2769ee4ca17c6.zip |
Initial checkin: merged embed/gecko from xulrunner branch to embed/xulrunner, and svn copied embed/mozilla to embed/xulrunner/embed. Not integreated with the build yet.
svn path=/trunk/; revision=7297
Diffstat (limited to 'embed/xulrunner/src/GeckoSingle.cpp')
-rw-r--r-- | embed/xulrunner/src/GeckoSingle.cpp | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/embed/xulrunner/src/GeckoSingle.cpp b/embed/xulrunner/src/GeckoSingle.cpp new file mode 100644 index 000000000..4b5d8e467 --- /dev/null +++ b/embed/xulrunner/src/GeckoSingle.cpp @@ -0,0 +1,122 @@ +/* + * Copyright © Christopher Blizzard + * Copyright © 2006 Christian Persch + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2.1, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * --------------------------------------------------------------------------- + * Derived from Mozilla.org code, which had the following attributions: + * + * The Original Code is mozilla.org code. + * + * The Initial Developer of the Original Code is + * Christopher Blizzard. Portions created by Christopher Blizzard are Copyright © Christopher Blizzard. All Rights Reserved. + * Portions created by the Initial Developer are Copyright © 2001 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Christopher Blizzard <blizzard@mozilla.org> + * --------------------------------------------------------------------------- + * + * $Id$ + */ + +#include <mozilla-config.h> +#include <config.h> + +#include <stdlib.h> +#include "nsIDocShell.h" +#include "nsIWebProgress.h" +#include "nsIWebBrowserStream.h" +#include "nsIWidget.h" + +// all of our local includes +#include "GeckoSingle.h" +#include "EmbedWindow.h" +#include "gecko-init.h" +#include "gecko-init-private.h" + +GSList *GeckoSingle::sWindowList = nsnull; +PRUint32 GeckoSingle::sWidgetCount = 0; + +GeckoSingle::GeckoSingle() +{ +} + +GeckoSingle::~GeckoSingle() +{ +} + +/* static */ +GeckoBrowser * +GeckoSingle::FindPrivateForBrowser(nsIWebBrowserChrome *aBrowser) +{ + // This function doesn't get called very often at all ( only when + // creating a new window ) so it's OK to walk the list of open + // windows. + for (GSList *l = sWindowList; l != NULL; l = l->next) { + GeckoBrowser *tmpPrivate = static_cast<GeckoBrowser *>(l->data); + // get the browser object for that window + nsIWebBrowserChrome *chrome = static_cast<nsIWebBrowserChrome *> + (tmpPrivate->mWindow); + if (chrome == aBrowser) + return tmpPrivate; + } + + return nsnull; +} + +/* static */ +void +GeckoSingle::ReparentToOffscreen (GtkWidget* aWidget) +{ + gecko_reparent_to_offscreen (aWidget); +} + +/* static */ +void +GeckoSingle::AddBrowser(GeckoBrowser *aBrowser) +{ + PushStartup(); + sWindowList = g_slist_prepend (sWindowList, aBrowser); +} + +/* static */ +void +GeckoSingle::RemoveBrowser(GeckoBrowser *aBrowser) +{ + sWindowList = g_slist_remove (sWindowList, aBrowser); + PopStartup(); +} + +/* static */ +void +GeckoSingle::PushStartup() +{ + GeckoSingle::sWidgetCount++; +} + +/* static */ +void +GeckoSingle::PopStartup() +{ + GeckoSingle::sWidgetCount--; + if (GeckoSingle::sWidgetCount == 0) { + gecko_shutdown(); +#ifdef XPCOM_GLUE + XPCOMGlueShutdown(); +#endif + } +} |