sync with bb cvs
This commit is contained in:
parent
b21cf8b335
commit
9e99a9a1e2
8 changed files with 88 additions and 71 deletions
|
@ -61,6 +61,11 @@ void Rootmenu::itemSelected(int button, unsigned int index) {
|
||||||
if (! item->function())
|
if (! item->function())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (! (getScreen()->getRootmenu()->isTorn() || isTorn()) &&
|
||||||
|
item->function() != BScreen::Reconfigure &&
|
||||||
|
item->function() != BScreen::SetStyle)
|
||||||
|
hide();
|
||||||
|
|
||||||
switch (item->function()) {
|
switch (item->function()) {
|
||||||
case BScreen::Execute:
|
case BScreen::Execute:
|
||||||
if (item->exec())
|
if (item->exec())
|
||||||
|
@ -88,9 +93,4 @@ void Rootmenu::itemSelected(int button, unsigned int index) {
|
||||||
getScreen()->getBlackbox()->reconfigure();
|
getScreen()->getBlackbox()->reconfigure();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (! (getScreen()->getRootmenu()->isTorn() || isTorn()) &&
|
|
||||||
item->function() != BScreen::Reconfigure &&
|
|
||||||
item->function() != BScreen::SetStyle)
|
|
||||||
hide();
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1015,41 +1015,38 @@ unsigned int BScreen::removeLastWorkspace(void) {
|
||||||
|
|
||||||
|
|
||||||
void BScreen::changeWorkspaceID(unsigned int id) {
|
void BScreen::changeWorkspaceID(unsigned int id) {
|
||||||
if (! current_workspace) return;
|
if (! current_workspace || id == current_workspace->getID()) return;
|
||||||
|
|
||||||
if (id != current_workspace->getID()) {
|
BlackboxWindow *focused = blackbox->getFocusedWindow();
|
||||||
BlackboxWindow *focused = blackbox->getFocusedWindow();
|
if (focused && focused->getScreen() == this) {
|
||||||
if (focused && focused->getScreen() == this && ! focused->isStuck()) {
|
assert(focused->isStuck() ||
|
||||||
if (focused->getWorkspaceNumber() != current_workspace->getID()) {
|
focused->getWorkspaceNumber() == current_workspace->getID());
|
||||||
fprintf(stderr, "%s is on the wrong workspace, aborting\n",
|
|
||||||
focused->getTitle());
|
current_workspace->setLastFocusedWindow(focused);
|
||||||
abort();
|
} else {
|
||||||
}
|
// if no window had focus, no need to store a last focus
|
||||||
current_workspace->setLastFocusedWindow(focused);
|
current_workspace->setLastFocusedWindow((BlackboxWindow *) 0);
|
||||||
} else {
|
}
|
||||||
// if no window had focus, no need to store a last focus
|
|
||||||
current_workspace->setLastFocusedWindow((BlackboxWindow *) 0);
|
// when we switch workspaces, unfocus whatever was focused
|
||||||
}
|
blackbox->setFocusedWindow((BlackboxWindow *) 0);
|
||||||
// when we switch workspaces, unfocus whatever was focused
|
|
||||||
blackbox->setFocusedWindow((BlackboxWindow *) 0);
|
|
||||||
|
|
||||||
current_workspace->hideAll();
|
current_workspace->hideAll();
|
||||||
workspacemenu->setItemSelected(current_workspace->getID() + 2, False);
|
workspacemenu->setItemSelected(current_workspace->getID() + 2, False);
|
||||||
|
|
||||||
current_workspace = getWorkspace(id);
|
current_workspace = getWorkspace(id);
|
||||||
|
|
||||||
xatom->setValue(getRootWindow(), XAtom::net_current_desktop,
|
xatom->setValue(getRootWindow(), XAtom::net_current_desktop,
|
||||||
XAtom::cardinal, id);
|
XAtom::cardinal, id);
|
||||||
|
|
||||||
workspacemenu->setItemSelected(current_workspace->getID() + 2, True);
|
workspacemenu->setItemSelected(current_workspace->getID() + 2, True);
|
||||||
toolbar->redrawWorkspaceLabel(True);
|
toolbar->redrawWorkspaceLabel(True);
|
||||||
|
|
||||||
current_workspace->showAll();
|
current_workspace->showAll();
|
||||||
|
|
||||||
if (resource.focus_last && current_workspace->getLastFocusedWindow()) {
|
if (resource.focus_last && current_workspace->getLastFocusedWindow()) {
|
||||||
XSync(blackbox->getXDisplay(), False);
|
XSync(blackbox->getXDisplay(), False);
|
||||||
current_workspace->getLastFocusedWindow()->setInputFocus();
|
current_workspace->getLastFocusedWindow()->setInputFocus();
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
updateNetizenCurrentWorkspace();
|
updateNetizenCurrentWorkspace();
|
||||||
|
|
|
@ -96,7 +96,6 @@ Toolbar::Toolbar(BScreen *scrn) {
|
||||||
|
|
||||||
editing = False;
|
editing = False;
|
||||||
new_name_pos = 0;
|
new_name_pos = 0;
|
||||||
frame.grab_x = frame.grab_y = 0;
|
|
||||||
|
|
||||||
toolbarmenu = new Toolbarmenu(this);
|
toolbarmenu = new Toolbarmenu(this);
|
||||||
|
|
||||||
|
|
|
@ -90,7 +90,7 @@ private:
|
||||||
Window window, workspace_label, window_label, clock, psbutton, nsbutton,
|
Window window, workspace_label, window_label, clock, psbutton, nsbutton,
|
||||||
pwbutton, nwbutton;
|
pwbutton, nwbutton;
|
||||||
|
|
||||||
int x_hidden, y_hidden, hour, minute, grab_x, grab_y;
|
int x_hidden, y_hidden, hour, minute;
|
||||||
unsigned int window_label_w, workspace_label_w, clock_w,
|
unsigned int window_label_w, workspace_label_w, clock_w,
|
||||||
button_w, bevel_w, label_h;
|
button_w, bevel_w, label_h;
|
||||||
|
|
||||||
|
|
|
@ -102,39 +102,19 @@ 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()) {
|
||||||
BlackboxWindow *newfocus = 0;
|
|
||||||
if (w->isTransient()) {
|
|
||||||
newfocus = w->getTransientFor();
|
|
||||||
if (newfocus &&
|
|
||||||
(newfocus->isIconic() || // do not focus icons
|
|
||||||
newfocus->getWorkspaceNumber() != id)) // or other workspaces
|
|
||||||
newfocus = 0;
|
|
||||||
}
|
|
||||||
if (! newfocus && ! stackingList.empty())
|
|
||||||
newfocus = stackingList.front();
|
|
||||||
|
|
||||||
assert(newfocus != w); // this would be very wrong.
|
|
||||||
|
|
||||||
if (id == screen->getCurrentWorkspaceID()) {
|
if (id == screen->getCurrentWorkspaceID()) {
|
||||||
/*
|
// The window is on the visible workspace
|
||||||
if the window is on the visible workspace, then try focus it, and fall
|
focusFallback(w);
|
||||||
back to the default focus target if the window won't focus.
|
} else {
|
||||||
*/
|
// The window is not on the visible workspace.
|
||||||
if (! (newfocus && newfocus->setInputFocus()))
|
if (lastfocus == w) {
|
||||||
screen->getBlackbox()->setFocusedWindow(0);
|
// The window was the last-focus target, so we need to replace it.
|
||||||
} else if (lastfocus == w) {
|
setLastFocusedWindow(stackingList.front());
|
||||||
/*
|
}
|
||||||
If this workspace is not the current one do not assume that
|
// if the window focused on the current workspace, then reapply that
|
||||||
w == lastfocus. If a sticky window is removed on a workspace other
|
// workspace's focus too
|
||||||
than where it originated, it will fire the removeWindow on a
|
if (w->isFocused())
|
||||||
non-visible workspace.
|
screen->getCurrentWorkspace()->focusFallback(w);
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
If the window isn't on the visible workspace, don't focus the new one,
|
|
||||||
just mark it to be focused when the workspace comes into view.
|
|
||||||
*/
|
|
||||||
setLastFocusedWindow(newfocus);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -157,6 +137,37 @@ unsigned int Workspace::removeWindow(BlackboxWindow *w) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Workspace::focusFallback(const BlackboxWindow *old_window) {
|
||||||
|
BlackboxWindow *newfocus = 0;
|
||||||
|
|
||||||
|
// if it's a transient, then try to focus its parent
|
||||||
|
if (old_window && old_window->isTransient()) {
|
||||||
|
newfocus = old_window->getTransientFor();
|
||||||
|
|
||||||
|
if (! newfocus ||
|
||||||
|
newfocus->isIconic() || // do not focus icons
|
||||||
|
newfocus->getWorkspaceNumber() != id || // or other workspaces
|
||||||
|
! newfocus->setInputFocus())
|
||||||
|
newfocus = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! newfocus) {
|
||||||
|
BlackboxWindowList::iterator it = stackingList.begin(),
|
||||||
|
end = stackingList.end();
|
||||||
|
for (; it != end; ++it) {
|
||||||
|
BlackboxWindow *tmp = *it;
|
||||||
|
if (tmp && tmp->setInputFocus()) {
|
||||||
|
// we found our new focus target
|
||||||
|
newfocus = tmp;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
screen->getBlackbox()->setFocusedWindow(newfocus);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void Workspace::showAll(void) {
|
void Workspace::showAll(void) {
|
||||||
std::for_each(stackingList.begin(), stackingList.end(),
|
std::for_each(stackingList.begin(), stackingList.end(),
|
||||||
std::mem_fun(&BlackboxWindow::show));
|
std::mem_fun(&BlackboxWindow::show));
|
||||||
|
|
|
@ -87,6 +87,7 @@ public:
|
||||||
BlackboxWindow* getPrevWindowInList(BlackboxWindow *w);
|
BlackboxWindow* getPrevWindowInList(BlackboxWindow *w);
|
||||||
BlackboxWindow* getTopWindowOnStack(void) const;
|
BlackboxWindow* getTopWindowOnStack(void) const;
|
||||||
void sendWindowList(Netizen &n);
|
void sendWindowList(Netizen &n);
|
||||||
|
void focusFallback(const BlackboxWindow *old_window);
|
||||||
|
|
||||||
bool isCurrent(void) const;
|
bool isCurrent(void) const;
|
||||||
bool isLastWindow(const BlackboxWindow* w) const;
|
bool isLastWindow(const BlackboxWindow* w) const;
|
||||||
|
|
|
@ -328,10 +328,18 @@ void Blackbox::process_event(XEvent *e) {
|
||||||
BlackboxWindow *win = searchWindow(e->xmaprequest.window);
|
BlackboxWindow *win = searchWindow(e->xmaprequest.window);
|
||||||
|
|
||||||
if (win) {
|
if (win) {
|
||||||
|
bool focus = False;
|
||||||
if (win->isIconic()) {
|
if (win->isIconic()) {
|
||||||
win->deiconify();
|
win->deiconify();
|
||||||
win->setInputFocus();
|
focus = True;
|
||||||
}
|
}
|
||||||
|
if (win->isShaded()) {
|
||||||
|
win->shade();
|
||||||
|
focus = True;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (focus && (win->isTransient() || win->getScreen()->doFocusNew()))
|
||||||
|
win->setInputFocus();
|
||||||
} else {
|
} else {
|
||||||
BScreen *screen = searchScreen(e->xmaprequest.parent);
|
BScreen *screen = searchScreen(e->xmaprequest.parent);
|
||||||
|
|
||||||
|
|
|
@ -49,8 +49,8 @@ extern "C" {
|
||||||
I18n i18n;
|
I18n i18n;
|
||||||
|
|
||||||
bsetroot::bsetroot(int argc, char **argv, char *dpy_name)
|
bsetroot::bsetroot(int argc, char **argv, char *dpy_name)
|
||||||
: BaseDisplay(argv[0], dpy_name)
|
: BaseDisplay(argv[0], dpy_name) {
|
||||||
{
|
|
||||||
grad = fore = back = (char *) 0;
|
grad = fore = back = (char *) 0;
|
||||||
|
|
||||||
bool mod = False, sol = False, grd = False;
|
bool mod = False, sol = False, grd = False;
|
||||||
|
@ -97,8 +97,9 @@ bsetroot::bsetroot(int argc, char **argv, char *dpy_name)
|
||||||
} else if (! strcmp("-display", argv[i])) {
|
} else if (! strcmp("-display", argv[i])) {
|
||||||
// -display passed through tests ealier... we just skip it now
|
// -display passed through tests ealier... we just skip it now
|
||||||
i++;
|
i++;
|
||||||
} else
|
} else {
|
||||||
usage();
|
usage();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((mod + sol + grd) != True) {
|
if ((mod + sol + grd) != True) {
|
||||||
|
|
Loading…
Reference in a new issue