Formatting tidy-up
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@19607 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -34,57 +34,6 @@
|
|||||||
#include "wx/x11/private.h"
|
#include "wx/x11/private.h"
|
||||||
#include "X11/Xatom.h"
|
#include "X11/Xatom.h"
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
Adapted from code by Mike Yang, as follows.
|
|
||||||
|
|
||||||
From: Mike Yang (mikey@eukanuba.wpd.sgi.com)
|
|
||||||
Subject: Re: Wrapping new widget around existing windows
|
|
||||||
Newsgroups: comp.windows.x
|
|
||||||
View: Complete Thread (17 articles) | Original Format
|
|
||||||
Date: 1991-08-09 09:45:48 PST
|
|
||||||
|
|
||||||
|
|
||||||
Enough people asked, so here's my test program which reparents another
|
|
||||||
window. It's a single file (reparent.c), and will work with Motif or
|
|
||||||
Xaw. Xaw users should comment out the "#define MOTIF" line.
|
|
||||||
|
|
||||||
The reparent program first prompts for the application name of the
|
|
||||||
client that it will reparent. If you're going to start the
|
|
||||||
application override_redirect (e.g. -xrm "*overrideRedirect: true"),
|
|
||||||
then this name is ignored and the first override_redirect window is
|
|
||||||
assumed to be the one.
|
|
||||||
|
|
||||||
Input focus is supposed to be correctly handled, as is resizing with
|
|
||||||
window manager hints. If you have input focus problems, try launching
|
|
||||||
your application override_redirect instead. This method is preferred
|
|
||||||
anyway, since you can map it off-screen and then avoid the "window
|
|
||||||
flash" effect as the application's top-level window is reparented.
|
|
||||||
|
|
||||||
-----------------------------------------------------------------------
|
|
||||||
Mike Yang Silicon Graphics, Inc.
|
|
||||||
mikey@sgi.com 415/335-1786
|
|
||||||
|
|
||||||
|
|
||||||
------------------------------- cut here ------------------------------
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
Copyright 1991 by Mike Yang, mikey@sgi.com, Silicon Graphics, Inc.
|
|
||||||
|
|
||||||
Permission to use, copy, modify, distribute, and sell this software and its
|
|
||||||
documentation for any purpose is hereby granted without fee, provided that
|
|
||||||
the above copyright notice appear in all copies and that both that
|
|
||||||
copyright notice and this permission notice appear in supporting
|
|
||||||
documentation, and that the name of SGI not be used in advertising or
|
|
||||||
publicity pertaining to distribution of the software without specific,
|
|
||||||
written prior permission. SGI makes no representations about the
|
|
||||||
suitability of this software for any purpose. It is provided "as is"
|
|
||||||
without express or implied warranty.
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* wxAdoptedWindow
|
* wxAdoptedWindow
|
||||||
*/
|
*/
|
||||||
@@ -101,6 +50,7 @@ wxAdoptedWindow::wxAdoptedWindow(WXWindow window)
|
|||||||
wxAdoptedWindow::~wxAdoptedWindow()
|
wxAdoptedWindow::~wxAdoptedWindow()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* wxReparenter
|
* wxReparenter
|
||||||
*/
|
*/
|
||||||
@@ -113,11 +63,10 @@ wxWindow* wxReparenter::sm_newParent = NULL;
|
|||||||
wxString wxReparenter::sm_name;
|
wxString wxReparenter::sm_name;
|
||||||
bool wxReparenter::sm_exactMatch = FALSE;
|
bool wxReparenter::sm_exactMatch = FALSE;
|
||||||
|
|
||||||
static int
|
static int ErrorHandler(Display* dpy, XErrorEvent* event)
|
||||||
ErrorHandler(Display* dpy, XErrorEvent* event)
|
|
||||||
{
|
{
|
||||||
Xerror = True;
|
Xerror = True;
|
||||||
return False;
|
return False;
|
||||||
}
|
}
|
||||||
|
|
||||||
// We assume that toReparent has had its X window set
|
// We assume that toReparent has had its X window set
|
||||||
@@ -267,69 +216,71 @@ bool wxReparenter::ProcessXEvent(WXEvent* event)
|
|||||||
|
|
||||||
WXWindow wxReparenter::FindAClientWindow(WXWindow window, const wxString& name)
|
WXWindow wxReparenter::FindAClientWindow(WXWindow window, const wxString& name)
|
||||||
{
|
{
|
||||||
int rvalue, i;
|
int rvalue, i;
|
||||||
Atom actualtype;
|
Atom actualtype;
|
||||||
int actualformat;
|
int actualformat;
|
||||||
unsigned long nitems, bytesafter;
|
unsigned long nitems, bytesafter;
|
||||||
unsigned char *propreturn;
|
unsigned char *propreturn;
|
||||||
Window *children;
|
Window *children;
|
||||||
unsigned int numchildren;
|
unsigned int numchildren;
|
||||||
Window returnroot, returnparent;
|
Window returnroot, returnparent;
|
||||||
Window result = 0;
|
Window result = 0;
|
||||||
XErrorHandler old;
|
XErrorHandler old;
|
||||||
char *clientName;
|
char *clientName;
|
||||||
|
|
||||||
|
Xerror = False;
|
||||||
|
old = XSetErrorHandler(ErrorHandler);
|
||||||
|
rvalue = XGetWindowProperty((Display*) wxGetDisplay(),
|
||||||
|
(Window) window, WM_STATE,
|
||||||
|
0, 1, False,
|
||||||
|
AnyPropertyType, &actualtype, &actualformat,
|
||||||
|
&nitems, &bytesafter, &propreturn);
|
||||||
|
|
||||||
Xerror = False;
|
|
||||||
old = XSetErrorHandler(ErrorHandler);
|
|
||||||
rvalue = XGetWindowProperty((Display*) wxGetDisplay(),
|
|
||||||
(Window) window, WM_STATE,
|
|
||||||
0, 1, False,
|
|
||||||
AnyPropertyType, &actualtype, &actualformat,
|
|
||||||
&nitems, &bytesafter, &propreturn);
|
|
||||||
XSetErrorHandler(old);
|
|
||||||
if (!Xerror && rvalue == Success && actualtype != None)
|
|
||||||
{
|
|
||||||
if (rvalue == Success)
|
|
||||||
{
|
|
||||||
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)
|
|
||||||
{
|
|
||||||
XSetErrorHandler(old);
|
XSetErrorHandler(old);
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
XSetErrorHandler(old);
|
|
||||||
|
|
||||||
result = 0;
|
if (!Xerror && rvalue == Success && actualtype != None)
|
||||||
for (i=0; i<(int)numchildren && !result ;i++) {
|
{
|
||||||
result = (Window) FindAClientWindow((WXWindow) children[i], name);
|
if (rvalue == Success)
|
||||||
}
|
{
|
||||||
if (numchildren) {
|
XFree((char *) propreturn);
|
||||||
XFree((char *) children);
|
}
|
||||||
} return (WXWindow) result;
|
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)
|
||||||
|
{
|
||||||
|
XSetErrorHandler(old);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
XSetErrorHandler(old);
|
||||||
|
|
||||||
|
result = 0;
|
||||||
|
for (i=0; i<(int)numchildren && !result ;i++) {
|
||||||
|
result = (Window) FindAClientWindow((WXWindow) children[i], name);
|
||||||
|
}
|
||||||
|
if (numchildren) {
|
||||||
|
XFree((char *) children);
|
||||||
|
} return (WXWindow) result;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Reference in New Issue
Block a user