Browse Source

Fix headers for clang; Add Window::setTransientWinId used in Carla

gh-pages
falkTX 10 years ago
parent
commit
339d2fb4a0
3 changed files with 50 additions and 11 deletions
  1. +21
    -10
      dgl/Base.hpp
  2. +2
    -0
      dgl/Window.hpp
  3. +27
    -1
      dgl/src/Window.cpp

+ 21
- 10
dgl/Base.hpp View File

@@ -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


+ 2
- 0
dgl/Window.hpp View File

@@ -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;


+ 27
- 1
dgl/src/Window.cpp View File

@@ -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();


Loading…
Cancel
Save