src/Viewer/FGEventHandler.cxx: fixed multi-window event-handling bug.
Ever since support for CompositeViewer was added in f62e5b9ce3
,
FGEventHandler::eventToViewport() has been always calling
window_builder->getDefaultWindow() so it could decide whether an event was for
the main window or not. But if a custom camera-group was specified, there would
be no existing window called 'FlightGear' so getDefaultWindow() would create
one, which then interfered with event handling.
The fix is to change the global WindowBuilder::defaultWindowName to match
sim/rendering/camera-group/gui/window/name when we are handling a custom
camera-group, which ensures that when FGEventHandler::eventToViewport() calls
window_builder->getDefaultWindow(), it gets the main window, not a new window
called 'FlightGear'.
This commit is contained in:
parent
c542e0d427
commit
17d40cdd80
3 changed files with 10 additions and 5 deletions
|
@ -728,7 +728,7 @@ void CameraGroup::buildGUICamera(SGPropertyNode* cameraNode,
|
||||||
: 0);
|
: 0);
|
||||||
if (!window && windowNode) {
|
if (!window && windowNode) {
|
||||||
// New style window declaration / definition
|
// New style window declaration / definition
|
||||||
window = wBuild->buildWindow(windowNode);
|
window = wBuild->buildWindow(windowNode, true /*isMainWindow*/);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!window) { // buildWindow can fail
|
if (!window) { // buildWindow can fail
|
||||||
|
|
|
@ -44,7 +44,7 @@ string makeName(const string& prefix, int num)
|
||||||
|
|
||||||
ref_ptr<WindowBuilder> WindowBuilder::windowBuilder;
|
ref_ptr<WindowBuilder> WindowBuilder::windowBuilder;
|
||||||
|
|
||||||
const string WindowBuilder::defaultWindowName("FlightGear");
|
string WindowBuilder::defaultWindowName("FlightGear");
|
||||||
|
|
||||||
// default to true (historical behaviour), we will clear the flag if
|
// default to true (historical behaviour), we will clear the flag if
|
||||||
// we run another GUI.
|
// we run another GUI.
|
||||||
|
@ -228,7 +228,7 @@ void WindowBuilder::setMacPoseAsStandaloneApp(GraphicsContext::Traits* traits)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
GraphicsWindow* WindowBuilder::buildWindow(const SGPropertyNode* winNode)
|
GraphicsWindow* WindowBuilder::buildWindow(const SGPropertyNode* winNode, bool isMainWindow)
|
||||||
{
|
{
|
||||||
WindowSystemAdapter* wsa = WindowSystemAdapter::getWSA();
|
WindowSystemAdapter* wsa = WindowSystemAdapter::getWSA();
|
||||||
string windowName;
|
string windowName;
|
||||||
|
@ -236,6 +236,11 @@ GraphicsWindow* WindowBuilder::buildWindow(const SGPropertyNode* winNode)
|
||||||
windowName = winNode->getStringValue("window-name");
|
windowName = winNode->getStringValue("window-name");
|
||||||
else if (winNode->hasChild("name"))
|
else if (winNode->hasChild("name"))
|
||||||
windowName = winNode->getStringValue("name");
|
windowName = winNode->getStringValue("name");
|
||||||
|
if (isMainWindow) {
|
||||||
|
SG_LOG(SG_GENERAL, SG_DEBUG, "Changing defaultWindowName from "
|
||||||
|
<< defaultWindowName << " to " << windowName);
|
||||||
|
defaultWindowName = windowName;
|
||||||
|
}
|
||||||
GraphicsWindow* result = 0;
|
GraphicsWindow* result = 0;
|
||||||
if (!windowName.empty()) {
|
if (!windowName.empty()) {
|
||||||
// look for an existing window and return that
|
// look for an existing window and return that
|
||||||
|
|
|
@ -47,7 +47,7 @@ public:
|
||||||
* @param winNode The window's root property node
|
* @param winNode The window's root property node
|
||||||
* @return a graphics window.
|
* @return a graphics window.
|
||||||
*/
|
*/
|
||||||
GraphicsWindow* buildWindow(const SGPropertyNode* winNode);
|
GraphicsWindow* buildWindow(const SGPropertyNode* winNode, bool isMainWindow=false);
|
||||||
/** Get a window whose properties come from FlightGear's
|
/** Get a window whose properties come from FlightGear's
|
||||||
* command line arguments and their defaults. The window is opened
|
* command line arguments and their defaults. The window is opened
|
||||||
* if it has not been already.
|
* if it has not been already.
|
||||||
|
@ -74,7 +74,7 @@ protected:
|
||||||
bool usingQtGraphicsWindow = false;
|
bool usingQtGraphicsWindow = false;
|
||||||
|
|
||||||
static osg::ref_ptr<WindowBuilder> windowBuilder;
|
static osg::ref_ptr<WindowBuilder> windowBuilder;
|
||||||
static const std::string defaultWindowName;
|
static std::string defaultWindowName;
|
||||||
static bool poseAsStandaloneApp;
|
static bool poseAsStandaloneApp;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue