readDatabaseTexture("window.button.unfocus", "black", style);
resource.wstyle.b_pressed =
readDatabaseTexture("window.button.pressed", "black", style);
- resource.wstyle.f_focus =
- readDatabaseColor("window.frame.focusColor", "white", style);
- resource.wstyle.f_unfocus =
- readDatabaseColor("window.frame.unfocusColor", "black", style);
+
+ // we create the window.frame texture by hand because it exists only to
+ // make the code cleaner and is not actually used for display
+ BColor color = readDatabaseColor("window.frame.focusColor", "white", style);
+ resource.wstyle.f_focus = BTexture("solid flat", getBaseDisplay(),
+ getScreenNumber(), image_control);
+ resource.wstyle.f_focus.setColor(color);
+
+ color = readDatabaseColor("window.frame.unfocusColor", "white", style);
+ resource.wstyle.f_unfocus = BTexture("solid flat", getBaseDisplay(),
+ getScreenNumber(), image_control);
+ resource.wstyle.f_unfocus.setColor(color);
+
resource.wstyle.l_text_focus =
readDatabaseColor("window.label.focus.textColor", "black", style);
resource.wstyle.l_text_unfocus =
resource.wstyle.justify = CenterJustify;
}
- // load toolbar config
+ // sanity checks
+ if (resource.wstyle.t_focus.texture() == BTexture::Parent_Relative)
+ resource.wstyle.t_focus = resource.wstyle.f_focus;
+ if (resource.wstyle.t_unfocus.texture() == BTexture::Parent_Relative)
+ resource.wstyle.t_unfocus = resource.wstyle.f_unfocus;
+ if (resource.wstyle.h_focus.texture() == BTexture::Parent_Relative)
+ resource.wstyle.h_focus = resource.wstyle.f_focus;
+ if (resource.wstyle.h_unfocus.texture() == BTexture::Parent_Relative)
+ resource.wstyle.h_unfocus = resource.wstyle.f_unfocus;
+
+// load toolbar config
resource.tstyle.toolbar =
readDatabaseTexture("toolbar", "black", style);
resource.tstyle.label =
resource.tstyle.justify = CenterJustify;
}
+ // sanity checks
+ if (resource.tstyle.toolbar.texture() == BTexture::Parent_Relative) {
+ resource.tstyle.toolbar = BTexture("solid flat", getBaseDisplay(),
+ getScreenNumber(), image_control);
+ resource.tstyle.toolbar.setColor(BColor("black", getBaseDisplay(),
+ getScreenNumber()));
+ }
+
// load menu config
resource.mstyle.title =
readDatabaseTexture("menu.title", "white", style);
resource.mstyle.bullet_pos = Basemenu::Right;
}
+ // sanity checks
+ if (resource.mstyle.frame.texture() == BTexture::Parent_Relative) {
+ resource.mstyle.frame = BTexture("solid flat", getBaseDisplay(),
+ getScreenNumber(), image_control);
+ resource.mstyle.frame.setColor(BColor("black", getBaseDisplay(),
+ getScreenNumber()));
+ }
+
resource.border_color =
readDatabaseColor("borderColor", "black", style);
void BScreen::changeWorkspaceID(unsigned int id) {
if (! current_workspace || id == current_workspace->getID()) return;
- current_workspace->hide();
+ BlackboxWindow *focused = blackbox->getFocusedWindow();
+ if (focused && focused->getScreen() == this) {
+ assert(focused->isStuck() ||
+ focused->getWorkspaceNumber() == current_workspace->getID());
+
+ current_workspace->setLastFocusedWindow(focused);
+ } 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);
+ current_workspace->hideAll();
workspacemenu->setItemSelected(current_workspace->getID() + 2, False);
current_workspace = getWorkspace(id);
- current_workspace->show();
-
xatom->setValue(getRootWindow(), XAtom::net_current_desktop,
XAtom::cardinal, id);
workspacemenu->setItemSelected(current_workspace->getID() + 2, True);
toolbar->redrawWorkspaceLabel(True);
+ current_workspace->showAll();
+
+ if (resource.focus_last && current_workspace->getLastFocusedWindow()) {
+ XSync(blackbox->getXDisplay(), False);
+ current_workspace->getLastFocusedWindow()->setInputFocus();
+ }
+
updateNetizenCurrentWorkspace();
}
if (rootmenu->isVisible())
rootmenu->hide();
} else if (xbutton->button == 2) {
- int mx = xbutton->x_root - (workspacemenu->getWidth() / 2);
- int my = xbutton->y_root - (workspacemenu->getTitleHeight() / 2);
-
- if (mx < 0) mx = 0;
- if (my < 0) my = 0;
-
- if (mx + workspacemenu->getWidth() > getWidth())
- mx = getWidth() - workspacemenu->getWidth() - getBorderWidth();
-
- if (my + workspacemenu->getHeight() > getHeight())
- my = getHeight() - workspacemenu->getHeight() - getBorderWidth();
-
- workspacemenu->move(mx, my);
-
- if (! workspacemenu->isVisible()) {
- workspacemenu->removeParent();
- workspacemenu->show();
- }
+ showWorkspaceMenu(xbutton->x_root, xbutton->y_root);
} else if (xbutton->button == 3) {
- int mx = xbutton->x_root - (rootmenu->getWidth() / 2);
- int my = xbutton->y_root - (rootmenu->getTitleHeight() / 2);
-
- if (mx < 0) mx = 0;
- if (my < 0) my = 0;
-
- if (mx + rootmenu->getWidth() > getWidth())
- mx = getWidth() - rootmenu->getWidth() - getBorderWidth();
-
- if (my + rootmenu->getHeight() > getHeight())
- my = getHeight() - rootmenu->getHeight() - getBorderWidth();
-
- rootmenu->move(mx, my);
-
- if (! rootmenu->isVisible()) {
- blackbox->checkMenu();
- rootmenu->show();
- }
+ showRootMenu(xbutton->x_root, xbutton->y_root);
// mouse wheel up
} else if ((xbutton->button == 4 && resource.root_scroll == NormalScroll) ||
(xbutton->button == 5 && resource.root_scroll == ReverseScroll)) {
}
+void BScreen::showWorkspaceMenu(int x, int y) {
+ int mx = x - (workspacemenu->getWidth() / 2);
+ int my = y - (workspacemenu->getTitleHeight() / 2);
+
+ if (mx < 0) mx = 0;
+ if (my < 0) my = 0;
+
+ if (mx + workspacemenu->getWidth() > getWidth())
+ mx = getWidth() - workspacemenu->getWidth() - getBorderWidth();
+
+ if (my + workspacemenu->getHeight() > getHeight())
+ my = getHeight() - workspacemenu->getHeight() - getBorderWidth();
+
+ workspacemenu->move(mx, my);
+
+ if (! workspacemenu->isVisible()) {
+ workspacemenu->removeParent();
+ workspacemenu->show();
+ }
+}
+
+
+void BScreen::showRootMenu(int x, int y) {
+ int mx = x - (rootmenu->getWidth() / 2);
+ int my = y - (rootmenu->getTitleHeight() / 2);
+
+ if (mx < 0) mx = 0;
+ if (my < 0) my = 0;
+
+ if (mx + rootmenu->getWidth() > getWidth())
+ mx = getWidth() - rootmenu->getWidth() - getBorderWidth();
+
+ if (my + rootmenu->getHeight() > getHeight())
+ my = getHeight() - rootmenu->getHeight() - getBorderWidth();
+
+ rootmenu->move(mx, my);
+
+ if (! rootmenu->isVisible()) {
+ blackbox->checkMenu();
+ rootmenu->show();
+ }
+}
+
+
void BScreen::propertyNotifyEvent(const XPropertyEvent *pe) {
if (pe->atom == xatom->getAtom(XAtom::net_desktop_names)) {
// _NET_WM_DESKTOP_NAMES
texture.setDisplay(getBaseDisplay(), getScreenNumber());
texture.setImageControl(image_control);
- if (texture.texture() & BTexture::Solid) {
- texture.setColor(readDatabaseColor(rname + ".color",
- default_color, style));
- texture.setColorTo(readDatabaseColor(rname + ".colorTo",
- default_color, style));
- } else if (texture.texture() & BTexture::Gradient) {
- texture.setColor(readDatabaseColor(rname + ".color",
- default_color, style));
- texture.setColorTo(readDatabaseColor(rname + ".colorTo",
- default_color, style));
- }
-
+ texture.setColor(readDatabaseColor(rname + ".color", default_color, style));
+ texture.setColorTo(readDatabaseColor(rname + ".colorTo", default_color,
+ style));
+
return texture;
}