DPF

DISTRHO Plugin Framework
Log | Files | Refs | Submodules | README | LICENSE

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:
Mdgl/Base.hpp | 31+++++++++++++++++++++----------
Mdgl/Window.hpp | 2++
Mdgl/src/Window.cpp | 28+++++++++++++++++++++++++++-
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();