all repos — fluxbox @ dcdde4d32c93d01df205bc06d7dfcbd356be031f

custom fork of the fluxbox windowmanager

replace FbRootWindow::depth with maxDepth

The depth member of FbWindow was abused to store the maximum depth
but that gets overridden with geometry changes of the root window
(screen layout changes) so we store and read the value explicitly while
::depth() maintains the actual depth of the root window

The result of this is that frames for ARGB windows were created with a
wrong depth and failed to reparent the client window.

BUG: 1102
BUG: 1058
Thomas Lübking thomas.luebking@gmail.com
commit

dcdde4d32c93d01df205bc06d7dfcbd356be031f

parent

484c33bf25a37952a91123fb728e4b983e70f531

4 files changed, 9 insertions(+), 6 deletions(-)

jump to
M src/FbRootWindow.ccsrc/FbRootWindow.cc

@@ -30,7 +30,8 @@ m_visual(0),

m_colormap(0), m_decorationDepth(0), m_decorationVisual(0), - m_decorationColormap(0) { + m_decorationColormap(0), + m_maxDepth(depth()) { Display *disp = FbTk::App::instance()->display();

@@ -55,9 +56,9 @@ vinfo_nitems > 0) {

for (int i = 0; i < vinfo_nitems; i++) { if ((DefaultDepth(disp, screen_num) < vinfo_return[i].depth) - && (static_cast<int>(depth()) < vinfo_return[i].depth)){ + && (m_maxDepth < vinfo_return[i].depth)){ m_visual = vinfo_return[i].visual; - setDepth(vinfo_return[i].depth); + m_maxDepth = vinfo_return[i].depth; } if((m_decorationDepth < vinfo_return[i].depth)
M src/FbRootWindow.hhsrc/FbRootWindow.hh

@@ -41,6 +41,7 @@

int decorationDepth() const { return m_decorationDepth; } Visual *decorationVisual() const { return m_decorationVisual; } Colormap decorationColormap() const { return m_decorationColormap; } + int maxDepth() const { return m_maxDepth; } private: Visual *m_visual;

@@ -49,6 +50,7 @@

int m_decorationDepth; Visual *m_decorationVisual; Colormap m_decorationColormap; + int m_maxDepth; }; #endif // FBROOTWINDOW_HH
M src/FbWinFrame.ccsrc/FbWinFrame.cc

@@ -115,8 +115,8 @@ m_imagectrl(screen.imageControl()),

m_state(state), m_window(theme->screenNum(), state.x, state.y, state.width, state.height, s_mask, true, false, client_depth, InputOutput, - ((client_depth == 32) && (screen.rootWindow().depth() == 32) ? screen.rootWindow().visual() : CopyFromParent), - ((client_depth == 32) && (screen.rootWindow().depth() == 32) ? screen.rootWindow().colormap() : CopyFromParent)), + (client_depth == screen.rootWindow().maxDepth() ? screen.rootWindow().visual() : CopyFromParent), + (client_depth == screen.rootWindow().maxDepth() ? screen.rootWindow().colormap() : CopyFromParent)), m_layeritem(window(), *screen.layerManager().getLayer(ResourceLayer::NORMAL)), m_titlebar(m_window, 0, 0, 100, 16, s_mask, false, false, screen.rootWindow().decorationDepth(), InputOutput,
M src/Screen.ccsrc/Screen.cc

@@ -297,7 +297,7 @@ "BScreen::BScreen: managing screen %d "

"using visual 0x%lx, depth %d\n", "informational message saying screen number (%d), visual (%lx), and colour depth (%d)").c_str(), screenNumber(), XVisualIDFromVisual(rootWindow().visual()), - rootWindow().depth()); + rootWindow().maxDepth()); #endif // DEBUG FbTk::EventManager *evm = FbTk::EventManager::instance();