/////////////////////////////////////////////////////////////////////////////
-// Name: reparent.cpp
+// Name: src/x11/reparent.cpp
// Purpose: wxWindow
// Author: Julian Smart
// Modified by:
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
+// for compilers that support precompilation, includes "wx.h".
+#include "wx/wxprec.h"
+
+#if defined(__BORLANDC__)
+#pragma hdrstop
+#endif
+
// ============================================================================
// declarations
// ============================================================================
// headers
// ----------------------------------------------------------------------------
-#ifdef __GNUG__
- #pragma implementation "reparent.h"
-#endif
-
-#include "wx/setup.h"
-
#if !wxUSE_NANOX
#include "wx/x11/reparent.h"
+
+#ifndef WX_PRECOMP
+ #include "wx/log.h"
+ #include "wx/app.h"
+ #include "wx/timer.h"
+#endif
+
#include "wx/evtloop.h"
-#include "wx/log.h"
-#include "wx/app.h"
-#include "wx/timer.h"
#include "wx/x11/private.h"
#include "X11/Xatom.h"
+#include "wx/generic/private/timer.h"
+
/*
* wxAdoptedWindow
*/
static bool Xerror;
static Atom WM_STATE = 0;
-bool wxReparenter::sm_done = FALSE;
+bool wxReparenter::sm_done = false;
wxAdoptedWindow* wxReparenter::sm_toReparent = NULL;
wxWindow* wxReparenter::sm_newParent = NULL;
wxString wxReparenter::sm_name;
-bool wxReparenter::sm_exactMatch = FALSE;
+bool wxReparenter::sm_exactMatch = false;
-static int ErrorHandler(Display* dpy, XErrorEvent* event)
+static int ErrorHandler(Display* WXUNUSED(dpy), XErrorEvent* WXUNUSED(event))
{
Xerror = True;
return False;
old = XSetErrorHandler(ErrorHandler);
XReparentWindow( wxGlobalDisplay(),
- (Window) toReparent->GetMainWindow(),
- (Window) newParent->GetMainWindow(),
+ (Window) toReparent->X11GetMainWindow(),
+ (Window) newParent->X11GetMainWindow(),
0, 0);
if (!XQueryTree( wxGlobalDisplay(),
- (Window) toReparent->GetMainWindow(),
+ (Window) toReparent->X11GetMainWindow(),
&returnroot, &returnparent,
&children, &numchildren) || Xerror)
{
XSetErrorHandler(old);
- return TRUE;
+ return true;
}
if (numchildren > 0)
"Reparenting child at offset %d and position %d, %d.\n",
parentOffset, parentOffset+xwa.x, parentOffset+xwa.y);
XReparentWindow( wxGlobalDisplay(),
- children[each], (Window) newParent->GetMainWindow(),
+ children[each], (Window) newParent->X11GetMainWindow(),
xwa.x, xwa.y);
}
}
XSetErrorHandler(old);
- return TRUE;
+ return true;
}
// Wait for an appropriate window to be created.
-// If exactMatch is FALSE, a substring match is OK.
+// If exactMatch is false, a substring match is OK.
// If windowName is empty, then wait for the next overrideRedirect window.
bool wxReparenter::WaitAndReparent(wxWindow* newParent, wxAdoptedWindow* toReparent,
const wxString& windowName,
sm_toReparent = toReparent;
sm_exactMatch = exactMatch;
sm_name = windowName;
-
+
Display* display = wxGlobalDisplay();
XSelectInput(display,
RootWindowOfScreen(DefaultScreenOfDisplay(display)),
if (!WM_STATE)
WM_STATE = XInternAtom(display, "WM_STATE", False);
-#ifdef __WXDEBUG__
- if (!windowName.IsEmpty())
- wxLogDebug(_T("Waiting for window %s"), windowName.c_str());
-#endif
-
- sm_done = FALSE;
+ sm_done = false;
wxEventLoop eventLoop;
while (!sm_done)
else
{
#if wxUSE_TIMER
- wxTimer::NotifyTimers();
- wxTheApp->SendIdleEvents();
+ wxGenericTimerImpl::NotifyTimers();
+ wxTheApp->ProcessIdle();
#endif
}
}
- return TRUE;
+ return true;
}
bool wxReparenter::ProcessXEvent(WXEvent* event)
{
if (xevent->type == MapNotify)
{
- wxLogDebug(_T("Window was mapped"));
+ wxLogDebug(wxT("Window was mapped"));
}
-
+
if (xevent->type == MapNotify && !xevent->xmap.override_redirect &&
(client = (Window) FindAClientWindow((WXWindow) xevent->xmap.window, sm_name)))
{
- wxLogDebug(_T("Found a client window, about to reparent"));
+ wxLogDebug(wxT("Found a client window, about to reparent"));
wxASSERT(sm_toReparent->GetParent() == NULL);
-
+
sm_toReparent->SetHandle((WXWindow) client);
sm_newParent->AddChild(sm_toReparent);
sm_done = Reparent(sm_newParent, sm_toReparent);
xevent->xmap.override_redirect &&
xevent->xmap.window)
{
- wxLogDebug(_T("Found an override redirect window, about to reparent"));
+ wxLogDebug(wxT("Found an override redirect window, about to reparent"));
sm_toReparent->SetHandle((WXWindow) xevent->xmap.window);
sm_newParent->AddChild(sm_toReparent);
wxASSERT(sm_toReparent->GetParent() == NULL);
-
+
sm_done = Reparent(sm_newParent, sm_toReparent);
return sm_done;
}
}
- return FALSE;
+ return false;
}
WXWindow wxReparenter::FindAClientWindow(WXWindow window, const wxString& name)
Window result = 0;
XErrorHandler old;
char *clientName;
-
+
Xerror = False;
old = XSetErrorHandler(ErrorHandler);
rvalue = XGetWindowProperty((Display*) wxGetDisplay(),
XFree((char *) propreturn);
}
XFetchName((Display*) wxGetDisplay(), (Window) window, &clientName);
-
+
wxString str1(name);
wxString str2 = wxString::FromAscii(clientName);
str1.Lower();
str2.Lower();
-
+
bool matches;
if (sm_exactMatch)
matches = (name == wxString::FromAscii(clientName));
else
matches = (str1.Contains(str2) || str2.Contains(str1));
-
+
XFree(clientName);
-
+
if (matches)
return (WXWindow) window;
else
return NULL;
}
-
+
old = XSetErrorHandler(ErrorHandler);
if (!XQueryTree((Display*) wxGetDisplay(), (Window) window, &returnroot, &returnparent,
&children, &numchildren) || Xerror)
return NULL;
}
XSetErrorHandler(old);
-
+
result = 0;
for (i=0; i<(int)numchildren && !result ;i++) {
result = (Window) FindAClientWindow((WXWindow) children[i], name);
} return (WXWindow) result;
}
-#endif
+#endif // !wxUSE_NANOX