|
|
Home » U++ Library support » TopWindow&PopUp, TrayIcon » [BUG?] X11 (at least OSX) Menus displayed under TopWindow, owner=RootWindow
|
|
|
|
|
Re: [BUG?] X11 (at least OSX) Menus displayed under TopWindow, owner=RootWindow [message #31033 is a reply to message #31027] |
Tue, 01 February 2011 22:51   |
|
mirek wrote on Tue, 01 February 2011 19:29 |
fudadmin wrote on Mon, 31 January 2011 13:34 |
if(activate && !topctrl->IsPopUp())
topwindow->SetWndForeground();
no more flickering and menus works well! 
|
Does this variant work in linux too?
Mirek
|
It works in the sense of "compiles and runs". But with this solution theide still comes to foreground when linking is finished. I would prefer some solution that removes that behavior.
Honza
|
|
|
|
|
Re: [BUG?] X11 (at least OSX) Menus displayed under TopWindow, owner=RootWindow [message #31072 is a reply to message #31054] |
Thu, 03 February 2011 19:20   |
|
fudadmin wrote on Wed, 02 February 2011 17:42 | ok, semi-blind fix. I do not know which cases or intentions should be covered with SetWndForeground.. It looks working well on osx11:
focusCtrl = _this;
focusCtrlWnd = topwindow;
DoKillFocus(pfocusCtrl, _this);
LLOG("SetFocus 2 - after DoKillFocus");
DoDeactivate(pfocusCtrl, _this);
if( !topctrl->IsPopUp() )
_this->SetWndForeground();
DoSetFocus(pfocusCtrl, _this, activate);
if(topwindow)
lastActiveWnd = topwindow;
return true;
I just thought that there's no good logic to put ->SetWndForeground before DoDeactivate.
also, I removed if(activate) because that prevented Assist popup getting focus and wheel was not working.
|
Sounds logical and works well for me on X11.
Honza
|
|
|
|
|
Re: [BUG?] X11 (at least OSX) Menus displayed under TopWindow, owner=RootWindow [message #32206 is a reply to message #32204] |
Sat, 30 April 2011 20:20   |
|
mirek wrote on Sat, 30 April 2011 19:07 | I have to admit I am little bit lost about what code change required... 
Could you provide complete SetFocus0 please?
Mirek
|
I understand, I had trouble finding the fix in this thread as well 
bool Ctrl::SetFocus0(bool activate)
{
GuiLock __;
if(IsUsrLog())
UsrLogT(6, String().Cat() << "SETFOCUS " << Desc(this));
LLOG("Ctrl::SetFocus " << Desc(this));
LLOG("focusCtrlWnd " << UPP::Name(focusCtrlWnd));
LLOG("Ctrl::SetFocus0 -> deferredSetFocus = NULL; was: " << UPP::Name(defferedSetFocus));
defferedSetFocus = NULL;
if(focusCtrl == this) return true;
if(!IsOpen() || !IsEnabled() || !IsVisible()) return false;
Ptr<Ctrl> pfocusCtrl = focusCtrl;
Ptr<Ctrl> topwindow = GetTopWindow();
Ptr<Ctrl> topctrl = GetTopCtrl();
Ptr<Ctrl> _this = this;
if(!topwindow) topwindow = topctrl;
LLOG("SetFocus -> SetWndFocus: topwindow = " << UPP::Name(topwindow) << ", focusCtrlWnd = " << UPP::Name(focusCtrlWnd));
if(!topwindow->HasWndFocus() && !topwindow->SetWndFocus()) return false;// cxl 31.1.2004
if(activate) topctrl->SetWndForeground(); // <- this line changed
LLOG("SetFocus -> focusCtrl = this: " << FormatIntHex(this) << ", _this = " << FormatIntHex(~_this) << ", " << UPP::Name(_this));
focusCtrl = _this;
focusCtrlWnd = topwindow;
DoKillFocus(pfocusCtrl, _this);
LLOG("SetFocus 2");
DoDeactivate(pfocusCtrl, _this);
DoSetFocus(pfocusCtrl, _this, activate);
if(topwindow)
lastActiveWnd = topwindow;
return true;
}
Tested on OpenBSD+gcc4.2 and Linux+gcc4.6, seems to work fine on both...
Honza
|
|
|
|
|
|
Re: [BUG?] X11 (at least OSX) Menus displayed under TopWindow, owner=RootWindow [message #32259 is a reply to message #32258] |
Wed, 04 May 2011 12:50   |
|
mirek wrote on Wed, 04 May 2011 12:00 | I believe the right solution is to change PopUp method, not SetFocus0...
Perhaps something around X11Wnd.cpp line 518...
Maybe adding _NET_WM_STATE_ABOVE too?
|
_NET_WM_STATE_ABOVE might be a solution for menus, but I'm not sure if it won't cause trouble with popups in general. It might lead to situations where popup stays hanging on screen. I am no X11 expert, but I remember such things happening in past with U++.
Honza
|
|
|
|
|
Goto Forum:
Current Time: Tue Apr 29 11:21:03 CEST 2025
Total time taken to generate the page: 0.00478 seconds
|
|
|