Home » U++ Library support » U++ Library : Other (not classified elsewhere) » Display problem with Splitter, GLCtrl and MenuBar
|
|
Re: Display problem with Splitter, GLCtrl and MenuBar [message #15732 is a reply to message #15711] |
Tue, 06 May 2008 20:14   |
mdelfede
Messages: 1308 Registered: September 2007
|
Ultimate Contributor |
|
|
Fixed, will post updated code in svn.
Quick fixes : In Core/X11DHCtrl.cpp, from line 341 :
case POSITION : // = 100,
case LAYOUTPOS : // = 101,
r = GetRectInParentWindow();
XGetGeometry(Xdisplay, top->window, &dummy, &x, &y, &width, &height, &border, &depth);
if( (x != r.left || y != r.top) && ((int)width == r.Width() && (int)height == r.Height()))
XMoveWindow(Xdisplay, top->window, r.left, r.top);
else if( (x == r.left || y == r.top) && ((int)width != r.Width() || (int)height != r.Height()))
XResizeWindow(Xdisplay, top->window, r.Width(), r.Height());
else if( x != r.left || y != r.top || (int)width != r.Width() || (int)height != r.Height())
XMoveResizeWindow(Xdisplay, top->window, r.left, r.top, r.Width(), r.Height());
break;
default:
break;
} // switch(reason)
}
} // END DHCtrl::State()
and, in X11Wnd, from line 152 :
// Gets the rect inside the parent window
Rect Ctrl::GetRectInParentWindow(void) const
{
Rect r = GetRect();
Ctrl *q = parent;
while(q)
{
if(q->top)
break;
r += q->GetRect().TopLeft();
q = q->parent;
}
if(q)
r += q->GetScreenView().TopLeft() - q->GetScreenRect().TopLeft() ;
return r;
}
// 01/12/2007 - END
Ciao
Max
|
|
|
|
Re: Display problem with Splitter, GLCtrl and MenuBar [message #15800 is a reply to message #15750] |
Thu, 08 May 2008 00:21   |
mdelfede
Messages: 1308 Registered: September 2007
|
Ultimate Contributor |
|
|
sorry, I posted incomplete quickfix here in forum... here the complete Status function in X11DHCtrl.cpp (some declarations were missing...). From line 294 :
/////////////////////////////////////////////////////////////////////////////////////////
// State handler
void DHCtrl::State(int reason)
{
Window dummy;
int x, y;
unsigned int width, height, border, depth;
Rect r;
// No handling if in error state
if( isError)
return;
// Initializes the control if needed (and possible...)
if(!isInitialized && GetTopWindow() && GetTopWindow()->GetWindow())
Init();
if(isInitialized)
{
switch( reason )
{
case FOCUS : // = 10,
break;
case ACTIVATE : // = 11,
break;
case DEACTIVATE : // = 12,
break;
case SHOW : // = 13,
MapWindow(IsShown());
break;
case ENABLE : // = 14,
break;
case EDITABLE : // = 15,
break;
case OPEN : // = 16,
break;
case CLOSE : // = 17,
Terminate();
break;
case POSITION : // = 100,
case LAYOUTPOS : // = 101,
r = GetRectInParentWindow();
XGetGeometry(Xdisplay, top->window, &dummy, &x, &y, &width, &height, &border, &depth);
if( (x != r.left || y != r.top) && ((int)width == r.Width() && (int)height == r.Height()))
XMoveWindow(Xdisplay, top->window, r.left, r.top);
else if( (x == r.left || y == r.top) && ((int)width != r.Width() || (int)height != r.Height()))
XResizeWindow(Xdisplay, top->window, r.Width(), r.Height());
else if( x != r.left || y != r.top || (int)width != r.Width() || (int)height != r.Height())
XMoveResizeWindow(Xdisplay, top->window, r.left, r.top, r.Width(), r.Height());
break;
default:
break;
} // switch(reason)
}
} // END DHCtrl::State()
In svn that's already ok.
Sorry again for the missing part 
Max
|
|
|
|
|
|
|
Re: Display problem with Splitter, GLCtrl and MenuBar [message #15871 is a reply to message #15869] |
Tue, 13 May 2008 20:53   |
mdelfede
Messages: 1308 Registered: September 2007
|
Ultimate Contributor |
|
|
Well, hopefully ( ) solved!
In CtrlCore/X11DHCtrl.cpp, from line 294 :
/////////////////////////////////////////////////////////////////////////////////////////
// State handler
void DHCtrl::State(int reason)
{
Window dummy;
int x, y;
unsigned int width, height, border, depth;
Rect r;
// No handling if in error state
if( isError)
return;
// Initializes the control if needed (and possible...)
if(!isInitialized && GetTopWindow() && GetTopWindow()->GetWindow())
Init();
if(isInitialized)
{
switch( reason )
{
case FOCUS : // = 10,
break;
case ACTIVATE : // = 11,
break;
case DEACTIVATE : // = 12,
break;
case SHOW : // = 13,
MapWindow(IsShown());
break;
case ENABLE : // = 14,
break;
case EDITABLE : // = 15,
break;
case OPEN : // = 16,
break;
case CLOSE : // = 17,
Terminate();
break;
case POSITION : // = 100,
case LAYOUTPOS : // = 101,
SyncNativeWindows();
break;
default:
break;
} // switch(reason)
}
}
And in CtrlCore/X11Wnd.cpp, from line 152 :
// Gets the rect inside the parent window
Rect Ctrl::GetRectInParentWindow(void) const
{
Rect r = GetRect();
Ctrl *q = parent;
while(q)
{
if(q->top)
break;
r += q->GetRect().TopLeft() + q->GetView().TopLeft();
q = q->parent;
}
if(q)
r += q->GetView().TopLeft();
return r;
}
Ciao
Max
|
|
|
|
|
|
Goto Forum:
Current Time: Fri May 09 18:03:43 CEST 2025
Total time taken to generate the page: 0.02475 seconds
|