summaryrefslogtreecommitdiff
path: root/gfx/src/X11Util.h
diff options
context:
space:
mode:
Diffstat (limited to 'gfx/src/X11Util.h')
-rw-r--r--gfx/src/X11Util.h148
1 files changed, 0 insertions, 148 deletions
diff --git a/gfx/src/X11Util.h b/gfx/src/X11Util.h
deleted file mode 100644
index e04913342..000000000
--- a/gfx/src/X11Util.h
+++ /dev/null
@@ -1,148 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*-
- * vim: sw=2 ts=8 et :
- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#ifndef mozilla_X11Util_h
-#define mozilla_X11Util_h
-
-// Utilities common to all X clients, regardless of UI toolkit.
-
-#if defined(MOZ_WIDGET_GTK)
-# include <gdk/gdk.h>
-# include <gdk/gdkx.h>
-# include "X11UndefineNone.h"
-#else
-# error Unknown toolkit
-#endif
-
-#include <string.h> // for memset
-#include "mozilla/Scoped.h" // for SCOPED_TEMPLATE
-
-namespace mozilla {
-
-/**
- * Return the default X Display created and used by the UI toolkit.
- */
-inline Display*
-DefaultXDisplay()
-{
-#if defined(MOZ_WIDGET_GTK)
- return GDK_DISPLAY_XDISPLAY(gdk_display_get_default());
-#endif
-}
-
-/**
- * Sets *aVisual to point to aDisplay's Visual struct corresponding to
- * aVisualID, and *aDepth to its depth. When aVisualID is None, these are set
- * to nullptr and 0 respectively. Both out-parameter pointers are assumed
- * non-nullptr.
- */
-void
-FindVisualAndDepth(Display* aDisplay, VisualID aVisualID,
- Visual** aVisual, int* aDepth);
-
-
-/**
- * Ensure that all X requests have been processed.
- *
- * This is similar to XSync, but doesn't need a round trip if the previous
- * request was synchronous or if events have been received since the last
- * request. Subsequent FinishX calls will be noops if there have been no
- * intermediate requests.
- */
-
-void
-FinishX(Display* aDisplay);
-
-/**
- * Invoke XFree() on a pointer to memory allocated by Xlib (if the
- * pointer is nonnull) when this class goes out of scope.
- */
-template <typename T>
-struct ScopedXFreePtrTraits
-{
- typedef T *type;
- static T *empty() { return nullptr; }
- static void release(T *ptr) { if (ptr != nullptr) XFree(ptr); }
-};
-SCOPED_TEMPLATE(ScopedXFree, ScopedXFreePtrTraits)
-
-/**
- * On construction, set a graceful X error handler that doesn't crash the application and records X errors.
- * On destruction, restore the X error handler to what it was before construction.
- *
- * The SyncAndGetError() method allows to know whether a X error occurred, optionally allows to get the full XErrorEvent,
- * and resets the recorded X error state so that a single X error will be reported only once.
- *
- * Nesting is correctly handled: multiple nested ScopedXErrorHandler's don't interfere with each other's state. However,
- * if SyncAndGetError is not called on the nested ScopedXErrorHandler, then any X errors caused by X calls made while the nested
- * ScopedXErrorHandler was in place may then be caught by the other ScopedXErrorHandler. This is just a result of X being
- * asynchronous and us not doing any implicit syncing: the only method in this class what causes syncing is SyncAndGetError().
- *
- * This class is not thread-safe at all. It is assumed that only one thread is using any ScopedXErrorHandler's. Given that it's
- * not used on Mac, it should be easy to make it thread-safe by using thread-local storage with __thread.
- */
-class ScopedXErrorHandler
-{
-public:
- // trivial wrapper around XErrorEvent, just adding ctor initializing by zero.
- struct ErrorEvent
- {
- XErrorEvent mError;
-
- ErrorEvent()
- {
- memset(this, 0, sizeof(ErrorEvent));
- }
- };
-
-private:
-
- // this ScopedXErrorHandler's ErrorEvent object
- ErrorEvent mXError;
-
- // static pointer for use by the error handler
- static ErrorEvent* sXErrorPtr;
-
- // what to restore sXErrorPtr to on destruction
- ErrorEvent* mOldXErrorPtr;
-
- // what to restore the error handler to on destruction
- int (*mOldErrorHandler)(Display *, XErrorEvent *);
-
-public:
-
- static int
- ErrorHandler(Display *, XErrorEvent *ev);
-
- /**
- * @param aAllowOffMainThread whether to warn if used off main thread
- */
- explicit ScopedXErrorHandler(bool aAllowOffMainThread = false);
-
- ~ScopedXErrorHandler();
-
- /** \returns true if a X error occurred since the last time this method was called on this ScopedXErrorHandler object,
- * or since the creation of this ScopedXErrorHandler object if this method was never called on it.
- *
- * \param ev this optional parameter, if set, will be filled with the XErrorEvent object. If multiple errors occurred,
- * the first one will be returned.
- */
- bool SyncAndGetError(Display *dpy, XErrorEvent *ev = nullptr);
-};
-
-class OffMainThreadScopedXErrorHandler : public ScopedXErrorHandler
-{
-public:
- OffMainThreadScopedXErrorHandler()
- : ScopedXErrorHandler(true)
- {
- }
-};
-
-} // namespace mozilla
-
-#endif // mozilla_X11Util_h