add function to focus modal children

This commit is contained in:
Dana Jansens 2003-02-03 08:47:57 +00:00
parent cda0b1b8b7
commit edd5394207
2 changed files with 17 additions and 3 deletions

View file

@ -679,8 +679,6 @@ void Client::updateTransientFor()
_transient_for = c; _transient_for = c;
if (_transient_for) if (_transient_for)
_transient_for->_transients.push_back(this); // add to new parent _transient_for->_transients.push_back(this); // add to new parent
// XXX: change decor status?
} }
} }
@ -841,7 +839,6 @@ void Client::setState(StateAction action, long data1, long data2)
} else if (state == otk::Property::atoms.net_wm_state_maximized_horz) { } else if (state == otk::Property::atoms.net_wm_state_maximized_horz) {
if (_max_horz) continue; if (_max_horz) continue;
maxh = true; maxh = true;
// XXX: resize the window etc
} else if (state == otk::Property::atoms.net_wm_state_shaded) { } else if (state == otk::Property::atoms.net_wm_state_shaded) {
shadestate = true; shadestate = true;
} else if (state == otk::Property::atoms.net_wm_state_skip_taskbar) { } else if (state == otk::Property::atoms.net_wm_state_skip_taskbar) {
@ -1551,6 +1548,13 @@ void Client::disableDecorations(DecorationFlags flags)
} }
bool Client::focusModalChild()
{
// XXX: find a modal child recursively and try focus it
return false;
}
bool Client::focus() bool Client::focus()
{ {
// won't try focus if the client doesn't want it, or if the window isn't // won't try focus if the client doesn't want it, or if the window isn't
@ -1559,6 +1563,10 @@ bool Client::focus()
if (_focused) return true; if (_focused) return true;
if (_modal)
if (focusModalChild())
return true;
// do a check to see if the window has already been unmapped or destroyed // do a check to see if the window has already been unmapped or destroyed
// do this intelligently while watching out for unmaps we've generated // do this intelligently while watching out for unmaps we've generated
// (ignore_unmaps > 0) // (ignore_unmaps > 0)

View file

@ -472,6 +472,12 @@ private:
void internal_resize(Corner anchor, int w, int h, bool user = true, void internal_resize(Corner anchor, int w, int h, bool user = true,
int x = INT_MIN, int y = INT_MIN); int x = INT_MIN, int y = INT_MIN);
//! Attempts to focus a modal child of this window, recursively.
/*!
@return true if a modal child has been found and focused; otherwise, false.
*/
bool focusModalChild();
public: public:
#ifndef SWIG #ifndef SWIG
//! Constructs a new Client object around a specified window id //! Constructs a new Client object around a specified window id