aboutsummaryrefslogtreecommitdiffstats
path: root/embed/xulrunner/src/GeckoSingle.cpp
diff options
context:
space:
mode:
authorChristian Persch <chpe@src.gnome.org>2007-08-26 04:59:04 +0800
committerChristian Persch <chpe@src.gnome.org>2007-08-26 04:59:04 +0800
commit6deabce61b1758b0c395678bf5c2769ee4ca17c6 (patch)
tree27866c89b34cb0fe866753fbef2894e6dfd01785 /embed/xulrunner/src/GeckoSingle.cpp
parentd2bc7076ca31996d4a5b80b74e4380e6f2f56321 (diff)
downloadgsoc2013-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.cpp122
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
+ }
+}