diff options
Diffstat (limited to 'src/Screen.cc')
-rw-r--r-- | src/Screen.cc | 49 |
1 files changed, 46 insertions, 3 deletions
diff --git a/src/Screen.cc b/src/Screen.cc index ddfb65f..578b0c7 100644 --- a/src/Screen.cc +++ b/src/Screen.cc | |||
@@ -87,6 +87,12 @@ | |||
87 | class Slit {}; | 87 | class Slit {}; |
88 | #endif // SLIT | 88 | #endif // SLIT |
89 | 89 | ||
90 | #ifdef USE_TOOLBAR | ||
91 | #include "Toolbar.hh" | ||
92 | #else | ||
93 | class Toolbar {}; | ||
94 | #endif // USE_TOOLBAR | ||
95 | |||
90 | #ifdef STDC_HEADERS | 96 | #ifdef STDC_HEADERS |
91 | #include <sys/types.h> | 97 | #include <sys/types.h> |
92 | #endif // STDC_HEADERS | 98 | #endif // STDC_HEADERS |
@@ -121,6 +127,10 @@ extern "C" { | |||
121 | } | 127 | } |
122 | #endif // XINERAMA | 128 | #endif // XINERAMA |
123 | 129 | ||
130 | #ifdef HAVE_RANDR | ||
131 | #include <X11/extensions/Xrandr.h> | ||
132 | #endif // HAVE_RANDR | ||
133 | |||
124 | #include <iostream> | 134 | #include <iostream> |
125 | #include <algorithm> | 135 | #include <algorithm> |
126 | #include <functional> | 136 | #include <functional> |
@@ -354,6 +364,7 @@ BScreen::BScreen(FbTk::ResourceManager &rm, | |||
354 | 364 | ||
355 | 365 | ||
356 | Display *disp = m_root_window.display(); | 366 | Display *disp = m_root_window.display(); |
367 | Fluxbox *fluxbox = Fluxbox::instance(); | ||
357 | 368 | ||
358 | initXinerama(); | 369 | initXinerama(); |
359 | 370 | ||
@@ -375,6 +386,15 @@ BScreen::BScreen(FbTk::ResourceManager &rm, | |||
375 | return; | 386 | return; |
376 | } | 387 | } |
377 | 388 | ||
389 | // we're going to manage the screen, so now add our pid | ||
390 | #ifdef HAVE_GETPID | ||
391 | pid_t bpid = getpid(); | ||
392 | |||
393 | rootWindow().changeProperty(fluxbox->getFluxboxPidAtom(), XA_CARDINAL, | ||
394 | sizeof(pid_t) * 8, PropModeReplace, | ||
395 | (unsigned char *) &bpid, 1); | ||
396 | #endif // HAVE_GETPID | ||
397 | |||
378 | // check if we're the first EWMH compliant window manager on this screen | 398 | // check if we're the first EWMH compliant window manager on this screen |
379 | Atom wm_check = XInternAtom(disp, "_NET_SUPPORTING_WM_CHECK", False); | 399 | Atom wm_check = XInternAtom(disp, "_NET_SUPPORTING_WM_CHECK", False); |
380 | Atom xa_ret_type; | 400 | Atom xa_ret_type; |
@@ -391,6 +411,19 @@ BScreen::BScreen(FbTk::ResourceManager &rm, | |||
391 | // TODO fluxgen: check if this is the right place | 411 | // TODO fluxgen: check if this is the right place |
392 | m_head_areas = new HeadArea[numHeads() ? numHeads() : 1]; | 412 | m_head_areas = new HeadArea[numHeads() ? numHeads() : 1]; |
393 | 413 | ||
414 | #ifdef HAVE_RANDR | ||
415 | // setup RANDR for this screens root window | ||
416 | // we need to determine if we should use old randr select input function or not | ||
417 | #ifdef X_RRScreenChangeSelectInput | ||
418 | // use old set randr event | ||
419 | XRRScreenChangeSelectInput(disp, rootWindow().window(), True); | ||
420 | #else | ||
421 | XRRSelectInput(disp, rootWindow().window(), | ||
422 | RRScreenChangeNotifyMask); | ||
423 | #endif // X_RRScreenChangeSelectInput | ||
424 | |||
425 | #endif // HAVE_RANDR | ||
426 | |||
394 | _FB_USES_NLS; | 427 | _FB_USES_NLS; |
395 | 428 | ||
396 | fprintf(stderr, _FB_CONSOLETEXT(Screen, ManagingScreen, | 429 | fprintf(stderr, _FB_CONSOLETEXT(Screen, ManagingScreen, |
@@ -409,7 +442,6 @@ BScreen::BScreen(FbTk::ResourceManager &rm, | |||
409 | rootWindow().setCursor(XCreateFontCursor(disp, XC_left_ptr)); | 442 | rootWindow().setCursor(XCreateFontCursor(disp, XC_left_ptr)); |
410 | 443 | ||
411 | // load this screens resources | 444 | // load this screens resources |
412 | Fluxbox *fluxbox = Fluxbox::instance(); | ||
413 | fluxbox->load_rc(*this); | 445 | fluxbox->load_rc(*this); |
414 | 446 | ||
415 | // setup image cache engine | 447 | // setup image cache engine |
@@ -517,10 +549,11 @@ BScreen::BScreen(FbTk::ResourceManager &rm, | |||
517 | 549 | ||
518 | BScreen::~BScreen() { | 550 | BScreen::~BScreen() { |
519 | 551 | ||
520 | |||
521 | if (! managed) | 552 | if (! managed) |
522 | return; | 553 | return; |
523 | 554 | ||
555 | m_toolbar.reset(0); | ||
556 | |||
524 | FbTk::EventManager *evm = FbTk::EventManager::instance(); | 557 | FbTk::EventManager *evm = FbTk::EventManager::instance(); |
525 | evm->remove(rootWindow()); | 558 | evm->remove(rootWindow()); |
526 | Keys *keys = Fluxbox::instance()->keys(); | 559 | Keys *keys = Fluxbox::instance()->keys(); |
@@ -685,9 +718,19 @@ void BScreen::initWindows() { | |||
685 | children[i] = None; // we dont need this anymore, since we already created a window for it | 718 | children[i] = None; // we dont need this anymore, since we already created a window for it |
686 | } | 719 | } |
687 | 720 | ||
688 | |||
689 | XFree(children); | 721 | XFree(children); |
690 | 722 | ||
723 | // now, show slit and toolbar | ||
724 | #ifdef SLIT | ||
725 | if (slit()) | ||
726 | slit()->show(); | ||
727 | #endif // SLIT | ||
728 | |||
729 | #ifdef USE_TOOLBAR | ||
730 | m_toolbar.reset(new Toolbar(*this, | ||
731 | *layerManager().getLayer(::Layer::NORMAL))); | ||
732 | #endif // USE_TOOLBAR | ||
733 | |||
691 | } | 734 | } |
692 | 735 | ||
693 | unsigned int BScreen::currentWorkspaceID() const { | 736 | unsigned int BScreen::currentWorkspaceID() const { |