add function to focus modal children
This commit is contained in:
parent
cda0b1b8b7
commit
edd5394207
2 changed files with 17 additions and 3 deletions
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue