aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/Screen.cc78
1 files changed, 33 insertions, 45 deletions
diff --git a/src/Screen.cc b/src/Screen.cc
index 08a5e02..880e13c 100644
--- a/src/Screen.cc
+++ b/src/Screen.cc
@@ -22,7 +22,7 @@
22// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 22// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
23// DEALINGS IN THE SOFTWARE. 23// DEALINGS IN THE SOFTWARE.
24 24
25// $Id: Screen.cc,v 1.82 2002/11/21 15:57:47 fluxgen Exp $ 25// $Id: Screen.cc,v 1.83 2002/11/24 20:56:06 fluxgen Exp $
26 26
27 27
28#include "Screen.hh" 28#include "Screen.hh"
@@ -233,14 +233,15 @@ m_currentworkspace_sig(*this), // current workspace signal
233theme(0), 233theme(0),
234resource(rm, screenname, altscreenname) 234resource(rm, screenname, altscreenname)
235{ 235{
236 Display *disp = BaseDisplay::getXDisplay();
236 237
237 event_mask = ColormapChangeMask | EnterWindowMask | PropertyChangeMask | 238 event_mask = ColormapChangeMask | EnterWindowMask | PropertyChangeMask |
238 SubstructureRedirectMask | KeyPressMask | KeyReleaseMask | 239 SubstructureRedirectMask | KeyPressMask | KeyReleaseMask |
239 ButtonPressMask | ButtonReleaseMask| SubstructureNotifyMask; 240 ButtonPressMask | ButtonReleaseMask| SubstructureNotifyMask;
240 241
241 XErrorHandler old = XSetErrorHandler((XErrorHandler) anotherWMRunning); 242 XErrorHandler old = XSetErrorHandler((XErrorHandler) anotherWMRunning);
242 XSelectInput(BaseDisplay::getXDisplay(), getRootWindow(), event_mask); 243 XSelectInput(disp, getRootWindow(), event_mask);
243 XSync(BaseDisplay::getXDisplay(), False); 244 XSync(disp, False);
244 XSetErrorHandler((XErrorHandler) old); 245 XSetErrorHandler((XErrorHandler) old);
245 246
246 managed = running; 247 managed = running;
@@ -263,18 +264,17 @@ resource(rm, screenname, altscreenname)
263#ifdef HAVE_GETPID 264#ifdef HAVE_GETPID
264 pid_t bpid = getpid(); 265 pid_t bpid = getpid();
265 266
266 XChangeProperty(BaseDisplay::getXDisplay(), getRootWindow(), 267 XChangeProperty(disp, getRootWindow(),
267 Fluxbox::instance()->getFluxboxPidAtom(), XA_CARDINAL, 268 Fluxbox::instance()->getFluxboxPidAtom(), XA_CARDINAL,
268 sizeof(pid_t) * 8, PropModeReplace, 269 sizeof(pid_t) * 8, PropModeReplace,
269 (unsigned char *) &bpid, 1); 270 (unsigned char *) &bpid, 1);
270#endif // HAVE_GETPID 271#endif // HAVE_GETPID
271 272
272 273
273 XDefineCursor(BaseDisplay::getXDisplay(), getRootWindow(), 274 XDefineCursor(disp, getRootWindow(), fluxbox->getSessionCursor());
274 fluxbox->getSessionCursor());
275 275
276 image_control = 276 image_control =
277 new BImageControl(fluxbox, this, true, fluxbox->colorsPerChannel(), 277 new BImageControl(this, true, fluxbox->colorsPerChannel(),
278 fluxbox->getCacheLife(), fluxbox->getCacheMax()); 278 fluxbox->getCacheLife(), fluxbox->getCacheMax());
279 image_control->installRootColormap(); 279 image_control->installRootColormap();
280 root_colormap_installed = true; 280 root_colormap_installed = true;
@@ -282,7 +282,7 @@ resource(rm, screenname, altscreenname)
282 fluxbox->load_rc(this); 282 fluxbox->load_rc(this);
283 283
284 image_control->setDither(*resource.image_dither); 284 image_control->setDither(*resource.image_dither);
285 theme = new Theme(getBaseDisplay()->getXDisplay(), getRootWindow(), colormap(), getScreenNumber(), 285 theme = new Theme(disp, getRootWindow(), colormap(), getScreenNumber(),
286 image_control, fluxbox->getStyleFilename(), getRootCommand().c_str()); 286 image_control, fluxbox->getStyleFilename(), getRootCommand().c_str());
287 287
288 theme->reconfigure(*resource.antialias); 288 theme->reconfigure(*resource.antialias);
@@ -306,7 +306,7 @@ resource(rm, screenname, altscreenname)
306 attrib.save_under = true; 306 attrib.save_under = true;
307 307
308 geom_window = 308 geom_window =
309 XCreateWindow(getBaseDisplay()->getXDisplay(), getRootWindow(), 309 XCreateWindow(disp, getRootWindow(),
310 0, 0, geom_w, geom_h, theme->getBorderWidth(), getDepth(), 310 0, 0, geom_w, geom_h, theme->getBorderWidth(), getDepth(),
311 InputOutput, getVisual(), mask, &attrib); 311 InputOutput, getVisual(), mask, &attrib);
312 geom_visible = false; 312 geom_visible = false;
@@ -315,25 +315,23 @@ resource(rm, screenname, altscreenname)
315 if (theme->getWindowStyle().t_focus.type() == 315 if (theme->getWindowStyle().t_focus.type() ==
316 (FbTk::Texture::FLAT | FbTk::Texture::SOLID)) { 316 (FbTk::Texture::FLAT | FbTk::Texture::SOLID)) {
317 geom_pixmap = None; 317 geom_pixmap = None;
318 XSetWindowBackground(getBaseDisplay()->getXDisplay(), geom_window, 318 XSetWindowBackground(disp, geom_window,
319 theme->getWindowStyle().t_focus.color().pixel()); 319 theme->getWindowStyle().t_focus.color().pixel());
320 } else { 320 } else {
321 geom_pixmap = image_control->renderImage(geom_w, geom_h, 321 geom_pixmap = image_control->renderImage(geom_w, geom_h,
322 &theme->getWindowStyle().t_focus); 322 &theme->getWindowStyle().t_focus);
323 XSetWindowBackgroundPixmap(getBaseDisplay()->getXDisplay(), 323 XSetWindowBackgroundPixmap(disp, geom_window, geom_pixmap);
324 geom_window, geom_pixmap);
325 } 324 }
326 } else { 325 } else {
327 if (theme->getWindowStyle().l_focus.type() == 326 if (theme->getWindowStyle().l_focus.type() ==
328 (FbTk::Texture::FLAT | FbTk::Texture::SOLID)) { 327 (FbTk::Texture::FLAT | FbTk::Texture::SOLID)) {
329 geom_pixmap = None; 328 geom_pixmap = None;
330 XSetWindowBackground(getBaseDisplay()->getXDisplay(), geom_window, 329 XSetWindowBackground(disp, geom_window,
331 theme->getWindowStyle().l_focus.color().pixel()); 330 theme->getWindowStyle().l_focus.color().pixel());
332 } else { 331 } else {
333 geom_pixmap = image_control->renderImage(geom_w, geom_h, 332 geom_pixmap = image_control->renderImage(geom_w, geom_h,
334 &theme->getWindowStyle().l_focus); 333 &theme->getWindowStyle().l_focus);
335 XSetWindowBackgroundPixmap(getBaseDisplay()->getXDisplay(), 334 XSetWindowBackgroundPixmap(disp, geom_window, geom_pixmap);
336 geom_window, geom_pixmap);
337 } 335 }
338 } 336 }
339 337
@@ -367,7 +365,7 @@ resource(rm, screenname, altscreenname)
367 m_toolbar.reset(new Toolbar(this)); 365 m_toolbar.reset(new Toolbar(this));
368 366
369#ifdef SLIT 367#ifdef SLIT
370 slit = new Slit(this); 368 m_slit.reset(new Slit(this));
371#endif // SLIT 369#endif // SLIT
372 370
373 initMenu(); 371 initMenu();
@@ -377,7 +375,7 @@ resource(rm, screenname, altscreenname)
377 //update menus 375 //update menus
378 rootmenu->update(); 376 rootmenu->update();
379#ifdef SLIT 377#ifdef SLIT
380 slit->reconfigure(); 378 m_slit->reconfigure();
381#endif // SLIT 379#endif // SLIT
382 380
383 // start with workspace 0 381 // start with workspace 0
@@ -387,8 +385,7 @@ resource(rm, screenname, altscreenname)
387 int i; 385 int i;
388 unsigned int nchild; 386 unsigned int nchild;
389 Window r, p, *children; 387 Window r, p, *children;
390 XQueryTree(getBaseDisplay()->getXDisplay(), getRootWindow(), &r, &p, 388 XQueryTree(disp, getRootWindow(), &r, &p, &children, &nchild);
391 &children, &nchild);
392 389
393 // preen the window list of all icon windows... for better dockapp support 390 // preen the window list of all icon windows... for better dockapp support
394 for (i = 0; i < (int) nchild; i++) { 391 for (i = 0; i < (int) nchild; i++) {
@@ -417,7 +414,7 @@ resource(rm, screenname, altscreenname)
417 continue; 414 continue;
418 415
419 XWindowAttributes attrib; 416 XWindowAttributes attrib;
420 if (XGetWindowAttributes(getBaseDisplay()->getXDisplay(), children[i], 417 if (XGetWindowAttributes(disp, children[i],
421 &attrib)) { 418 &attrib)) {
422 if (attrib.override_redirect) 419 if (attrib.override_redirect)
423 continue; 420 continue;
@@ -442,23 +439,18 @@ resource(rm, screenname, altscreenname)
442 } 439 }
443 } 440 }
444 441
445 if (! resource.sloppy_focus) 442 if (! resource.sloppy_focus) {
446 XSetInputFocus(getBaseDisplay()->getXDisplay(), m_toolbar->getWindowID(), 443 XSetInputFocus(disp, m_toolbar->getWindowID(),
447 RevertToParent, CurrentTime); 444 RevertToParent, CurrentTime);
445 }
448 446
449 XFree(children); 447 XFree(children);
450 XFlush(getBaseDisplay()->getXDisplay()); 448 XFlush(disp);
451}
452
453namespace {
454 template<typename T>
455 void delete_obj(T * obj) {
456 delete obj;
457 }
458} 449}
459 450
460BScreen::~BScreen() { 451BScreen::~BScreen() {
461 if (! managed) return; 452 if (! managed)
453 return;
462 454
463 if (geom_pixmap != None) 455 if (geom_pixmap != None)
464 image_control->removeImage(geom_pixmap); 456 image_control->removeImage(geom_pixmap);
@@ -494,10 +486,6 @@ BScreen::~BScreen() {
494 delete m_iconmenu; 486 delete m_iconmenu;
495 delete configmenu; 487 delete configmenu;
496 488
497#ifdef SLIT
498 delete slit;
499#endif // SLIT
500
501 delete image_control; 489 delete image_control;
502 490
503 delete theme; 491 delete theme;
@@ -581,7 +569,7 @@ void BScreen::reconfigure() {
581 m_toolbar->reconfigure(); 569 m_toolbar->reconfigure();
582 570
583#ifdef SLIT 571#ifdef SLIT
584 slit->reconfigure(); 572 m_slit->reconfigure();
585#endif // SLIT 573#endif // SLIT
586 574
587 //reconfigure workspaces 575 //reconfigure workspaces
@@ -973,14 +961,14 @@ void BScreen::raiseWindows(const Workspace::Stack &workspace_stack) {
973 session_stack[i++] = configmenu->windowID(); 961 session_stack[i++] = configmenu->windowID();
974 962
975#ifdef SLIT 963#ifdef SLIT
976 session_stack[i++] = slit->menu().getDirectionmenu().windowID(); 964 session_stack[i++] = m_slit->menu().getDirectionmenu().windowID();
977 session_stack[i++] = slit->menu().getPlacementmenu().windowID(); 965 session_stack[i++] = m_slit->menu().getPlacementmenu().windowID();
978#ifdef XINERAMA 966#ifdef XINERAMA
979 if (hasXinerama()) { 967 if (hasXinerama()) {
980 session_stack[i++] = slit->menu().getHeadmenu()->windowID(); 968 session_stack[i++] = m_slit->menu().getHeadmenu()->windowID();
981 } 969 }
982#endif // XINERAMA 970#endif // XINERAMA
983 session_stack[i++] = slit->menu().windowID(); 971 session_stack[i++] = m_slit->menu().windowID();
984#endif // SLIT 972#endif // SLIT
985 973
986 session_stack[i++] = 974 session_stack[i++] =
@@ -1002,9 +990,9 @@ void BScreen::raiseWindows(const Workspace::Stack &workspace_stack) {
1002 if (m_toolbar->isOnTop()) 990 if (m_toolbar->isOnTop())
1003 session_stack[i++] = m_toolbar->getWindowID(); 991 session_stack[i++] = m_toolbar->getWindowID();
1004 992
1005#ifdef SLIT 993#ifdef SLIT
1006 if (slit->isOnTop()) 994 if (m_slit->isOnTop())
1007 session_stack[i++] = slit->getWindowID(); 995 session_stack[i++] = m_slit->getWindowID();
1008#endif // SLIT 996#endif // SLIT
1009 if (!workspace_stack.empty()) { 997 if (!workspace_stack.empty()) {
1010 Workspace::Stack::const_reverse_iterator it = workspace_stack.rbegin(); 998 Workspace::Stack::const_reverse_iterator it = workspace_stack.rbegin();
@@ -1554,8 +1542,8 @@ void BScreen::shutdown() {
1554 } 1542 }
1555 } 1543 }
1556 1544
1557#ifdef SLIT 1545#ifdef SLIT
1558 slit->shutdown(); 1546 m_slit->shutdown();
1559#endif // SLIT 1547#endif // SLIT
1560 1548
1561} 1549}