sych with blackbox
This commit is contained in:
parent
1525520dd1
commit
3312a209d7
3 changed files with 64 additions and 55 deletions
|
@ -245,11 +245,11 @@ public:
|
||||||
inline unsigned int getResizeZones(void) const
|
inline unsigned int getResizeZones(void) const
|
||||||
{ return resource.resize_zones; }
|
{ return resource.resize_zones; }
|
||||||
|
|
||||||
inline unsigned int getCurrentWorkspaceID(void)
|
inline unsigned int getCurrentWorkspaceID(void) const
|
||||||
{ return current_workspace->getID(); }
|
{ return current_workspace->getID(); }
|
||||||
inline unsigned int getWorkspaceCount(void)
|
inline unsigned int getWorkspaceCount(void) const
|
||||||
{ return workspacesList.size(); }
|
{ return workspacesList.size(); }
|
||||||
inline unsigned int getIconCount(void) { return iconList.size(); }
|
inline unsigned int getIconCount(void) const { return iconList.size(); }
|
||||||
inline unsigned int getNumberOfWorkspaces(void) const
|
inline unsigned int getNumberOfWorkspaces(void) const
|
||||||
{ return resource.workspaces; }
|
{ return resource.workspaces; }
|
||||||
inline int getPlacementPolicy(void) const
|
inline int getPlacementPolicy(void) const
|
||||||
|
|
|
@ -422,7 +422,7 @@ Window BlackboxWindow::createToplevelWindow(void) {
|
||||||
ButtonMotionMask | EnterWindowMask;
|
ButtonMotionMask | EnterWindowMask;
|
||||||
|
|
||||||
return XCreateWindow(blackbox->getXDisplay(), screen->getRootWindow(),
|
return XCreateWindow(blackbox->getXDisplay(), screen->getRootWindow(),
|
||||||
-1, -1, 1, 1, frame.border_w, screen->getDepth(),
|
0, 0, 1, 1, frame.border_w, screen->getDepth(),
|
||||||
InputOutput, screen->getVisual(), create_mask,
|
InputOutput, screen->getVisual(), create_mask,
|
||||||
&attrib_create);
|
&attrib_create);
|
||||||
}
|
}
|
||||||
|
@ -462,10 +462,14 @@ void BlackboxWindow::associateClientWindow(void) {
|
||||||
XSelectInput(blackbox->getXDisplay(), frame.plate, SubstructureRedirectMask);
|
XSelectInput(blackbox->getXDisplay(), frame.plate, SubstructureRedirectMask);
|
||||||
|
|
||||||
XGrabServer(blackbox->getXDisplay());
|
XGrabServer(blackbox->getXDisplay());
|
||||||
XSelectInput(blackbox->getXDisplay(), client.window, NoEventMask);
|
|
||||||
XReparentWindow(blackbox->getXDisplay(), client.window, frame.plate, 0, 0);
|
unsigned long event_mask = PropertyChangeMask | FocusChangeMask |
|
||||||
|
StructureNotifyMask;
|
||||||
XSelectInput(blackbox->getXDisplay(), client.window,
|
XSelectInput(blackbox->getXDisplay(), client.window,
|
||||||
PropertyChangeMask | FocusChangeMask | StructureNotifyMask);
|
event_mask & ~StructureNotifyMask);
|
||||||
|
XReparentWindow(blackbox->getXDisplay(), client.window, frame.plate, 0, 0);
|
||||||
|
XSelectInput(blackbox->getXDisplay(), client.window, event_mask);
|
||||||
|
|
||||||
XUngrabServer(blackbox->getXDisplay());
|
XUngrabServer(blackbox->getXDisplay());
|
||||||
|
|
||||||
XRaiseWindow(blackbox->getXDisplay(), frame.plate);
|
XRaiseWindow(blackbox->getXDisplay(), frame.plate);
|
||||||
|
@ -1636,11 +1640,13 @@ void BlackboxWindow::iconify(void) {
|
||||||
* split second, leaving us with a ghost window... so, we need to do this
|
* split second, leaving us with a ghost window... so, we need to do this
|
||||||
* while the X server is grabbed
|
* while the X server is grabbed
|
||||||
*/
|
*/
|
||||||
|
unsigned long event_mask = PropertyChangeMask | FocusChangeMask |
|
||||||
|
StructureNotifyMask;
|
||||||
XGrabServer(blackbox->getXDisplay());
|
XGrabServer(blackbox->getXDisplay());
|
||||||
XSelectInput(blackbox->getXDisplay(), client.window, NoEventMask);
|
|
||||||
XUnmapWindow(blackbox->getXDisplay(), client.window);
|
|
||||||
XSelectInput(blackbox->getXDisplay(), client.window,
|
XSelectInput(blackbox->getXDisplay(), client.window,
|
||||||
PropertyChangeMask | FocusChangeMask | StructureNotifyMask);
|
event_mask & ~StructureNotifyMask);
|
||||||
|
XUnmapWindow(blackbox->getXDisplay(), client.window);
|
||||||
|
XSelectInput(blackbox->getXDisplay(), client.window, event_mask);
|
||||||
XUngrabServer(blackbox->getXDisplay());
|
XUngrabServer(blackbox->getXDisplay());
|
||||||
|
|
||||||
XUnmapWindow(blackbox->getXDisplay(), frame.window);
|
XUnmapWindow(blackbox->getXDisplay(), frame.window);
|
||||||
|
@ -1749,10 +1755,12 @@ void BlackboxWindow::withdraw(void) {
|
||||||
|
|
||||||
XGrabServer(blackbox->getXDisplay());
|
XGrabServer(blackbox->getXDisplay());
|
||||||
|
|
||||||
XSelectInput(blackbox->getXDisplay(), client.window, NoEventMask);
|
unsigned long event_mask = PropertyChangeMask | FocusChangeMask |
|
||||||
XUnmapWindow(blackbox->getXDisplay(), client.window);
|
StructureNotifyMask;
|
||||||
XSelectInput(blackbox->getXDisplay(), client.window,
|
XSelectInput(blackbox->getXDisplay(), client.window,
|
||||||
PropertyChangeMask | FocusChangeMask | StructureNotifyMask);
|
event_mask & ~StructureNotifyMask);
|
||||||
|
XUnmapWindow(blackbox->getXDisplay(), client.window);
|
||||||
|
XSelectInput(blackbox->getXDisplay(), client.window, event_mask);
|
||||||
|
|
||||||
XUngrabServer(blackbox->getXDisplay());
|
XUngrabServer(blackbox->getXDisplay());
|
||||||
|
|
||||||
|
@ -3679,16 +3687,8 @@ BWindowGroup::BWindowGroup(Blackbox *b, Window _group)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
watch for destroy notify on the group window (in addition to
|
|
||||||
any other events we are looking for)
|
|
||||||
|
|
||||||
since some managed windows can also be window group controllers,
|
|
||||||
we need to make sure that we don't clobber the event mask for the
|
|
||||||
managed window
|
|
||||||
*/
|
|
||||||
XSelectInput(blackbox->getXDisplay(), group,
|
XSelectInput(blackbox->getXDisplay(), group,
|
||||||
wattrib.your_event_mask | StructureNotifyMask);
|
PropertyChangeMask | FocusChangeMask | StructureNotifyMask);
|
||||||
|
|
||||||
blackbox->saveGroupSearch(group, this);
|
blackbox->saveGroupSearch(group, this);
|
||||||
}
|
}
|
||||||
|
|
|
@ -103,19 +103,14 @@ unsigned int Workspace::removeWindow(BlackboxWindow *w) {
|
||||||
// pass focus to the next appropriate window
|
// pass focus to the next appropriate window
|
||||||
if ((w->isFocused() || w == lastfocus) &&
|
if ((w->isFocused() || w == lastfocus) &&
|
||||||
! screen->getBlackbox()->doShutdown()) {
|
! screen->getBlackbox()->doShutdown()) {
|
||||||
if (id == screen->getCurrentWorkspaceID()) {
|
|
||||||
// The window is on the visible workspace
|
|
||||||
focusFallback(w);
|
focusFallback(w);
|
||||||
} else {
|
|
||||||
// The window is not on the visible workspace.
|
// if the window is sticky, then it needs to be removed on all other
|
||||||
if (lastfocus == w) {
|
// workspaces too!
|
||||||
// The window was the last-focus target, so we need to replace it.
|
if (w->isStuck()) {
|
||||||
setLastFocusedWindow(stackingList.front());
|
for (unsigned int i = 0; i < screen->getWorkspaceCount(); ++i)
|
||||||
}
|
if (i != id)
|
||||||
// if the window focused on the current workspace, then reapply that
|
screen->getWorkspace(i)->focusFallback(w);
|
||||||
// workspace's focus too
|
|
||||||
if (w->isFocused())
|
|
||||||
screen->getCurrentWorkspace()->focusFallback(w);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -141,6 +136,9 @@ unsigned int Workspace::removeWindow(BlackboxWindow *w) {
|
||||||
void Workspace::focusFallback(const BlackboxWindow *old_window) {
|
void Workspace::focusFallback(const BlackboxWindow *old_window) {
|
||||||
BlackboxWindow *newfocus = 0;
|
BlackboxWindow *newfocus = 0;
|
||||||
|
|
||||||
|
if (id == screen->getCurrentWorkspaceID()) {
|
||||||
|
// The window is on the visible workspace.
|
||||||
|
|
||||||
// if it's a transient, then try to focus its parent
|
// if it's a transient, then try to focus its parent
|
||||||
if (old_window && old_window->isTransient()) {
|
if (old_window && old_window->isTransient()) {
|
||||||
newfocus = old_window->getTransientFor();
|
newfocus = old_window->getTransientFor();
|
||||||
|
@ -166,6 +164,17 @@ void Workspace::focusFallback(const BlackboxWindow *old_window) {
|
||||||
}
|
}
|
||||||
|
|
||||||
screen->getBlackbox()->setFocusedWindow(newfocus);
|
screen->getBlackbox()->setFocusedWindow(newfocus);
|
||||||
|
} else {
|
||||||
|
// The window is not on the visible workspace.
|
||||||
|
|
||||||
|
if (old_window && lastfocus == old_window) {
|
||||||
|
// The window was the last-focus target, so we need to replace it.
|
||||||
|
BlackboxWindow *win = (BlackboxWindow*) 0;
|
||||||
|
if (! stackingList.empty())
|
||||||
|
win = stackingList.front();
|
||||||
|
setLastFocusedWindow(win);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue