forked from bartvdbraak/blender
Ghost/X11: allow creating windows to fail
Would exit, problematic for setting stereo3d modes which aren't always supported.
This commit is contained in:
parent
4be7258f00
commit
f3161c97a6
@ -291,11 +291,17 @@ GHOST_WindowX11(
|
||||
m_visualInfo(NULL),
|
||||
m_normal_state(GHOST_kWindowStateNormal),
|
||||
m_system(system),
|
||||
m_valid_setup(false),
|
||||
m_invalid_window(false),
|
||||
m_empty_cursor(None),
|
||||
m_custom_cursor(None),
|
||||
m_visible_cursor(None)
|
||||
m_visible_cursor(None),
|
||||
#ifdef WITH_XDND
|
||||
m_dropTarget(NULL),
|
||||
#endif
|
||||
#if defined(WITH_X11_XINPUT) && defined(X_HAVE_UTF8_STRING)
|
||||
m_xic(NULL),
|
||||
#endif
|
||||
m_valid_setup(false)
|
||||
{
|
||||
if (type == GHOST_kDrawingContextTypeOpenGL) {
|
||||
m_visualInfo = x11_visualinfo_from_glx(m_display, stereoVisual, &m_wantNumOfAASamples);
|
||||
@ -306,10 +312,10 @@ GHOST_WindowX11(
|
||||
m_visualInfo = XGetVisualInfo(m_display, 0, &tmp, &n);
|
||||
}
|
||||
|
||||
/* exit if this is the first window */
|
||||
/* caller needs to check 'getValid()' */
|
||||
if (m_visualInfo == NULL) {
|
||||
fprintf(stderr, "initial window could not find the GLX extension, exit!\n");
|
||||
exit(EXIT_FAILURE);
|
||||
fprintf(stderr, "initial window could not find the GLX extension\n");
|
||||
return;
|
||||
}
|
||||
|
||||
unsigned int xattributes_valuemask = 0;
|
||||
@ -486,11 +492,6 @@ GHOST_WindowX11(
|
||||
}
|
||||
}
|
||||
|
||||
#if defined(WITH_X11_XINPUT) && defined(X_HAVE_UTF8_STRING)
|
||||
m_xic = NULL;
|
||||
#endif
|
||||
|
||||
|
||||
/* Set the window hints */
|
||||
{
|
||||
XWMHints *xwmhints = XAllocWMHints();
|
||||
@ -1216,15 +1217,6 @@ validate()
|
||||
GHOST_WindowX11::
|
||||
~GHOST_WindowX11()
|
||||
{
|
||||
static Atom Primary_atom, Clipboard_atom;
|
||||
Window p_owner, c_owner;
|
||||
/*Change the owner of the Atoms to None if we are the owner*/
|
||||
Primary_atom = XInternAtom(m_display, "PRIMARY", False);
|
||||
Clipboard_atom = XInternAtom(m_display, "CLIPBOARD", False);
|
||||
|
||||
p_owner = XGetSelectionOwner(m_display, Primary_atom);
|
||||
c_owner = XGetSelectionOwner(m_display, Clipboard_atom);
|
||||
|
||||
std::map<unsigned int, Cursor>::iterator it = m_standard_cursors.begin();
|
||||
for (; it != m_standard_cursors.end(); ++it) {
|
||||
XFreeCursor(m_display, it->second);
|
||||
@ -1237,11 +1229,23 @@ GHOST_WindowX11::
|
||||
XFreeCursor(m_display, m_custom_cursor);
|
||||
}
|
||||
|
||||
if (p_owner == m_window) {
|
||||
XSetSelectionOwner(m_display, Primary_atom, None, CurrentTime);
|
||||
}
|
||||
if (c_owner == m_window) {
|
||||
XSetSelectionOwner(m_display, Clipboard_atom, None, CurrentTime);
|
||||
if (m_valid_setup) {
|
||||
static Atom Primary_atom, Clipboard_atom;
|
||||
Window p_owner, c_owner;
|
||||
/*Change the owner of the Atoms to None if we are the owner*/
|
||||
Primary_atom = XInternAtom(m_display, "PRIMARY", False);
|
||||
Clipboard_atom = XInternAtom(m_display, "CLIPBOARD", False);
|
||||
|
||||
|
||||
p_owner = XGetSelectionOwner(m_display, Primary_atom);
|
||||
c_owner = XGetSelectionOwner(m_display, Clipboard_atom);
|
||||
|
||||
if (p_owner == m_window) {
|
||||
XSetSelectionOwner(m_display, Primary_atom, None, CurrentTime);
|
||||
}
|
||||
if (c_owner == m_window) {
|
||||
XSetSelectionOwner(m_display, Clipboard_atom, None, CurrentTime);
|
||||
}
|
||||
}
|
||||
|
||||
if (m_visualInfo) {
|
||||
@ -1260,7 +1264,9 @@ GHOST_WindowX11::
|
||||
|
||||
releaseNativeHandles();
|
||||
|
||||
XDestroyWindow(m_display, m_window);
|
||||
if (m_valid_setup) {
|
||||
XDestroyWindow(m_display, m_window);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -327,8 +327,6 @@ private:
|
||||
/** A pointer to the typed system class. */
|
||||
GHOST_SystemX11 *m_system;
|
||||
|
||||
bool m_valid_setup;
|
||||
|
||||
/** Used to concatenate calls to invalidate() on this window. */
|
||||
bool m_invalid_window;
|
||||
|
||||
@ -356,6 +354,8 @@ private:
|
||||
XIC m_xic;
|
||||
#endif
|
||||
|
||||
bool m_valid_setup;
|
||||
|
||||
void icccmSetState(int state);
|
||||
int icccmGetState() const;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user