commit 339d2fb4a0ddc5305aeaecabe88d92bf62976e5c
parent 5d89995112172b5ae04d9a5333a5bb1e301e38d1
Author: falkTX <falktx@gmail.com>
Date: Thu, 10 Apr 2014 20:53:05 +0100
Fix headers for clang; Add Window::setTransientWinId used in Carla
Diffstat:
3 files changed, 50 insertions(+), 11 deletions(-)
diff --git a/dgl/Base.hpp b/dgl/Base.hpp
@@ -17,35 +17,44 @@
#ifndef DGL_BASE_HPP_INCLUDED
#define DGL_BASE_HPP_INCLUDED
+/* Compatibility with non-clang compilers */
+#ifndef __has_feature
+# define __has_feature(x) 0
+#endif
+#ifndef __has_extension
+# define __has_extension __has_feature
+#endif
+
+/* Check OS */
#if defined(WIN32) || defined(_WIN32) || defined(__WIN32__)
# define DGL_OS_WINDOWS 1
#elif defined(__APPLE__)
# define DGL_OS_MAC 1
#elif defined(__HAIKU__)
# define DGL_OS_HAIKU 1
-#elif defined(__linux__)
+#elif defined(__linux__) || defined(__linux)
# define DGL_OS_LINUX 1
#endif
+/* Check for C++11 support */
#if defined(HAVE_CPP11_SUPPORT)
# define PROPER_CPP11_SUPPORT
-#elif defined(__GNUC__) && (__cplusplus >= 201103L || defined(__GXX_EXPERIMENTAL_CXX0X__))
-# if (__GNUC__ * 100 + __GNUC_MINOR__) >= 405
-# define PROPER_CPP11_SUPPORT
-# if (__GNUC__ * 100 + __GNUC_MINOR__) < 407
-# define override // gcc4.7+ only
-# endif
+#elif __cplusplus >= 201103L || (defined(__GNUC__) && defined(__GXX_EXPERIMENTAL_CXX0X__) && (__GNUC__ * 100 + __GNUC_MINOR__) >= 405) || __has_extension(cxx_noexcept)
+# define PROPER_CPP11_SUPPORT
+# if (defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__) < 407) || ! __has_extension(cxx_override_control)
+# define override // gcc4.7+ only
+# define final // gcc4.7+ only
# endif
#endif
#ifndef PROPER_CPP11_SUPPORT
-# ifndef __clang__
-# define noexcept throw()
-# endif
+# define noexcept throw()
# define override
+# define final
# define nullptr (0)
#endif
+/* Define namespace */
#ifndef DGL_NAMESPACE
# define DGL_NAMESPACE DGL
#endif
@@ -54,12 +63,14 @@
#define END_NAMESPACE_DGL }
#define USE_NAMESPACE_DGL using namespace DGL_NAMESPACE;
+/* GL includes */
#ifdef DGL_OS_MAC
# include <OpenGL/gl.h>
#else
# include <GL/gl.h>
#endif
+/* missing GL defines */
#if defined(GL_BGR_EXT) && ! defined(GL_BGR)
# define GL_BGR GL_BGR_EXT
#endif
diff --git a/dgl/Window.hpp b/dgl/Window.hpp
@@ -61,6 +61,8 @@ public:
void setTitle(const char* title);
+ void setTransientWinId(intptr_t winId);
+
App& getApp() const noexcept;
uint32_t getEventTimestamp() const;
int getModifiers() const;
diff --git a/dgl/src/Window.cpp b/dgl/src/Window.cpp
@@ -34,6 +34,8 @@ struct PuglViewImpl {
int height;
};}
#elif defined(DGL_OS_LINUX)
+# include <sys/types.h>
+# include <unistd.h>
extern "C" {
# include "pugl/pugl_x11.c"
}
@@ -185,6 +187,10 @@ public:
xDisplay = impl->display;
xWindow = impl->win;
assert(xWindow != 0);
+
+ pid_t pid = getpid();
+ Atom _nwp = XInternAtom(xDisplay, "_NET_WM_PID", True);
+ XChangeProperty(xDisplay, xWindow, _nwp, XA_CARDINAL, 32, PropModeReplace, (const unsigned char*)&pid, 1);
#endif
DBG("Success!\n");
@@ -426,7 +432,9 @@ public:
XSizeHints sizeHints;
memset(&sizeHints, 0, sizeof(sizeHints));
- sizeHints.flags = PMinSize|PMaxSize;
+ sizeHints.flags = PSize|PMinSize|PMaxSize;
+ sizeHints.width = static_cast<int>(width);
+ sizeHints.height = static_cast<int>(height);
sizeHints.min_width = static_cast<int>(width);
sizeHints.min_height = static_cast<int>(height);
sizeHints.max_width = static_cast<int>(width);
@@ -457,6 +465,19 @@ public:
#endif
}
+ void setTransientWinId(const intptr_t winId)
+ {
+#if defined(DGL_OS_LINUX)
+ XSetTransientForHint(xDisplay, xWindow, static_cast<::Window>(winId));
+#else
+ return;
+ // unused
+ (void)winId;
+#endif
+ }
+
+ // -------------------------------------------------------------------
+
App& getApp() const noexcept
{
return fApp;
@@ -871,6 +892,11 @@ void Window::setTitle(const char* title)
pData->setTitle(title);
}
+void Window::setTransientWinId(intptr_t winId)
+{
+ pData->setTransientWinId(winId);
+}
+
App& Window::getApp() const noexcept
{
return pData->getApp();