Skip to content

Commit

Permalink
replace FbRootWindow::depth with maxDepth
Browse files Browse the repository at this point in the history
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
  • Loading branch information
luebking authored and mgumz committed Jun 26, 2016
1 parent 484c33b commit dcdde4d
Show file tree
Hide file tree
Showing 4 changed files with 9 additions and 6 deletions.
7 changes: 4 additions & 3 deletions src/FbRootWindow.cc
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,8 @@ FbRootWindow::FbRootWindow(int screen_num):
m_colormap(0),
m_decorationDepth(0),
m_decorationVisual(0),
m_decorationColormap(0) {
m_decorationColormap(0),
m_maxDepth(depth()) {

Display *disp = FbTk::App::instance()->display();

Expand All @@ -55,9 +56,9 @@ FbRootWindow::FbRootWindow(int screen_num):

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)
Expand Down
2 changes: 2 additions & 0 deletions src/FbRootWindow.hh
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ public:
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;
Expand All @@ -49,6 +50,7 @@ private:
int m_decorationDepth;
Visual *m_decorationVisual;
Colormap m_decorationColormap;
int m_maxDepth;
};

#endif // FBROOTWINDOW_HH
4 changes: 2 additions & 2 deletions src/FbWinFrame.cc
Original file line number Diff line number Diff line change
Expand Up @@ -115,8 +115,8 @@ FbWinFrame::FbWinFrame(BScreen &screen, unsigned int client_depth,
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,
Expand Down
2 changes: 1 addition & 1 deletion src/Screen.cc
Original file line number Diff line number Diff line change
Expand Up @@ -297,7 +297,7 @@ BScreen::BScreen(FbTk::ResourceManager &rm,
"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();
Expand Down

0 comments on commit dcdde4d

Please sign in to comment.