-BScreen::BScreen(Blackbox *bb, unsigned int scrn) : ScreenInfo(scrn) {
- blackbox = bb;
- screenstr = "session.screen" + otk::itostring(scrn) + '.';
- config = blackbox->getConfig();
- xatom = blackbox->getXAtom();
-
- event_mask = ColormapChangeMask | EnterWindowMask | PropertyChangeMask |
- SubstructureRedirectMask | ButtonPressMask | ButtonReleaseMask;
-
- XErrorHandler old = XSetErrorHandler((XErrorHandler) anotherWMRunning);
- XSelectInput(otk::OBDisplay::display, getRootWindow(), event_mask);
- XSync(otk::OBDisplay::display, False);
- XSetErrorHandler((XErrorHandler) old);
-
- managed = running;
- if (! managed) return;
-
- fprintf(stderr, "BScreen::BScreen: managing screen %d "
- "using visual 0x%lx, depth %d\n",
- getScreenNumber(), XVisualIDFromVisual(getVisual()),
- getDepth());
-
- resource.wstyle.font = (otk::BFont *) 0;
-
- geom_pixmap = None;
-
-// xatom->setSupported(this); // set-up netwm support
-#ifdef HAVE_GETPID
- xatom->setValue(getRootWindow(), otk::OBProperty::blackbox_pid,
- otk::OBProperty::Atom_Cardinal,
- (unsigned long) getpid());
-#endif // HAVE_GETPID
- unsigned long geometry[] = { getWidth(),
- getHeight()};
- xatom->set(getRootWindow(), otk::OBProperty::net_desktop_geometry,
- otk::OBProperty::Atom_Cardinal, geometry, 2);
- unsigned long viewport[] = {0,0};
- xatom->set(getRootWindow(), otk::OBProperty::net_desktop_viewport,
- otk::OBProperty::Atom_Cardinal, viewport, 2);
-
-
- XDefineCursor(otk::OBDisplay::display, getRootWindow(),
- blackbox->getSessionCursor());
-
- updateAvailableArea();
-
- image_control =
- new otk::BImageControl(Openbox::instance->timerManager(),
- this, True, blackbox->getColorsPerChannel(),
- blackbox->getCacheLife(), blackbox->getCacheMax());
- image_control->installRootColormap();
- root_colormap_installed = True;
-
- load_rc();
-
- // XXX: ugh
- resource.wstyle.setImageControl(image_control);
- resource.wstyle.setScreenNumber(scrn);
- LoadStyle();
-
- XGCValues gcv;
- gcv.foreground = WhitePixel(otk::OBDisplay::display, getScreenNumber())
- ^ BlackPixel(otk::OBDisplay::display, getScreenNumber());
- gcv.function = GXxor;
- gcv.subwindow_mode = IncludeInferiors;
- opGC = XCreateGC(otk::OBDisplay::display, getRootWindow(),
- GCForeground | GCFunction | GCSubwindowMode, &gcv);
-
- const char *s = "0: 0000 x 0: 0000";
- geom_w = resource.wstyle.font->measureString(s) + resource.wstyle.bevel_width * 2;
- geom_h = resource.wstyle.font->height() + resource.wstyle.bevel_width * 2;
-
- XSetWindowAttributes attrib;
- unsigned long mask = CWBorderPixel | CWColormap | CWSaveUnder;
- attrib.border_pixel = getBorderColor()->pixel();
- attrib.colormap = getColormap();
- attrib.save_under = True;
-
- // XXX -- move this geom_* crap out of here
-
- geom_window = XCreateWindow(otk::OBDisplay::display, getRootWindow(),
- 0, 0, geom_w, geom_h, resource.wstyle.border_width,
- getDepth(), InputOutput, getVisual(),
- mask, &attrib);
- geom_visible = False;
-
- otk::BTexture* texture = &(resource.wstyle.l_focus);
- geom_pixmap = texture->render(geom_w, geom_h, geom_pixmap);
- if (geom_pixmap == ParentRelative) {
- texture = &(resource.wstyle.t_focus);
- geom_pixmap = texture->render(geom_w, geom_h, geom_pixmap);
- }
- if (! geom_pixmap)
- XSetWindowBackground(otk::OBDisplay::display, geom_window,
- texture->color().pixel());
- else
- XSetWindowBackgroundPixmap(otk::OBDisplay::display,
- geom_window, geom_pixmap);
-
- if (resource.workspaces > 0) {
- for (unsigned int i = 0; i < resource.workspaces; ++i) {
- Workspace *wkspc = new Workspace(this, workspacesList.size());
- workspacesList.push_back(wkspc);