diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/FbRootWindow.cc | 35 | ||||
-rw-r--r-- | src/FbRootWindow.hh | 8 | ||||
-rw-r--r-- | src/FbTk/FbWindow.cc | 29 | ||||
-rw-r--r-- | src/FbTk/FbWindow.hh | 14 | ||||
-rw-r--r-- | src/FbWinFrame.cc | 32 | ||||
-rw-r--r-- | src/FbWinFrame.hh | 2 | ||||
-rw-r--r-- | src/Window.cc | 2 |
7 files changed, 90 insertions, 32 deletions
diff --git a/src/FbRootWindow.cc b/src/FbRootWindow.cc index 7e2b77e..e329719 100644 --- a/src/FbRootWindow.cc +++ b/src/FbRootWindow.cc | |||
@@ -27,10 +27,20 @@ | |||
27 | FbRootWindow::FbRootWindow(int screen_num): | 27 | FbRootWindow::FbRootWindow(int screen_num): |
28 | FbTk::FbWindow(RootWindow(FbTk::App::instance()->display(), screen_num)), | 28 | FbTk::FbWindow(RootWindow(FbTk::App::instance()->display(), screen_num)), |
29 | m_visual(0), | 29 | m_visual(0), |
30 | m_colormap(0) { | 30 | m_colormap(0), |
31 | m_decorationDepth(0), | ||
32 | m_decorationVisual(0), | ||
33 | m_decorationColormap(0) { | ||
31 | 34 | ||
32 | Display *disp = FbTk::App::instance()->display(); | 35 | Display *disp = FbTk::App::instance()->display(); |
33 | 36 | ||
37 | m_visual = DefaultVisual(disp, screen_num); | ||
38 | m_colormap = DefaultColormap(disp, screen_num); | ||
39 | |||
40 | m_decorationDepth = DefaultDepth(disp, screen_num); | ||
41 | m_decorationVisual = DefaultVisual(disp, screen_num); | ||
42 | m_decorationColormap = DefaultColormap(disp, screen_num); | ||
43 | |||
34 | // search for a TrueColor Visual... if we can't find one... we will use the | 44 | // search for a TrueColor Visual... if we can't find one... we will use the |
35 | // default visual for the screen | 45 | // default visual for the screen |
36 | XVisualInfo vinfo_template, *vinfo_return; | 46 | XVisualInfo vinfo_template, *vinfo_return; |
@@ -44,19 +54,26 @@ FbRootWindow::FbRootWindow(int screen_num): | |||
44 | vinfo_nitems > 0) { | 54 | vinfo_nitems > 0) { |
45 | 55 | ||
46 | for (int i = 0; i < vinfo_nitems; i++) { | 56 | for (int i = 0; i < vinfo_nitems; i++) { |
47 | // We can't handle 32-bit visuals just yet (Composite ARGB) | 57 | if ((DefaultDepth(disp, screen_num) < vinfo_return[i].depth) |
48 | if (vinfo_return[i].depth != 32 && DefaultDepth(disp, screen_num) < vinfo_return[i].depth) | 58 | && (depth() < vinfo_return[i].depth)){ |
49 | m_visual = vinfo_return[i].visual; | 59 | m_visual = vinfo_return[i].visual; |
60 | setDepth(vinfo_return[i].depth); | ||
61 | } | ||
62 | |||
63 | if((m_decorationDepth < vinfo_return[i].depth) | ||
64 | && (vinfo_return[i].depth != 32)) { | ||
65 | m_decorationVisual = vinfo_return[i].visual; | ||
66 | m_decorationDepth = vinfo_return[i].depth; | ||
67 | } | ||
50 | } | 68 | } |
51 | 69 | ||
52 | XFree(vinfo_return); | 70 | XFree(vinfo_return); |
53 | } | 71 | } |
54 | 72 | ||
55 | if (m_visual) { | 73 | if (m_visual != DefaultVisual(disp, screen_num)) { |
56 | m_colormap = XCreateColormap(disp, window(), | 74 | m_colormap = XCreateColormap(disp, window(), m_visual, AllocNone); |
57 | m_visual, AllocNone); | 75 | } |
58 | } else { | 76 | if (m_decorationVisual != DefaultVisual(disp, screen_num)) { |
59 | m_visual = DefaultVisual(disp, screen_num); | 77 | m_decorationColormap = XCreateColormap(disp, window(), m_visual, AllocNone); |
60 | m_colormap = DefaultColormap(disp, screen_num); | ||
61 | } | 78 | } |
62 | } | 79 | } |
diff --git a/src/FbRootWindow.hh b/src/FbRootWindow.hh index 34b8219..8e97cc3 100644 --- a/src/FbRootWindow.hh +++ b/src/FbRootWindow.hh | |||
@@ -38,9 +38,17 @@ public: | |||
38 | Visual *visual() const { return m_visual; } | 38 | Visual *visual() const { return m_visual; } |
39 | Colormap colormap() const { return m_colormap; } | 39 | Colormap colormap() const { return m_colormap; } |
40 | 40 | ||
41 | int decorationDepth() const { return m_decorationDepth; } | ||
42 | Visual *decorationVisual() const { return m_decorationVisual; } | ||
43 | Colormap decorationColormap() const { return m_decorationColormap; } | ||
44 | |||
41 | private: | 45 | private: |
42 | Visual *m_visual; | 46 | Visual *m_visual; |
43 | Colormap m_colormap; | 47 | Colormap m_colormap; |
48 | |||
49 | int m_decorationDepth; | ||
50 | Visual *m_decorationVisual; | ||
51 | Colormap m_decorationColormap; | ||
44 | }; | 52 | }; |
45 | 53 | ||
46 | #endif // FBROOTWINDOW_HH | 54 | #endif // FBROOTWINDOW_HH |
diff --git a/src/FbTk/FbWindow.cc b/src/FbTk/FbWindow.cc index 9fa59fc..8362733 100644 --- a/src/FbTk/FbWindow.cc +++ b/src/FbTk/FbWindow.cc | |||
@@ -77,7 +77,9 @@ FbWindow::FbWindow(int screen_num, | |||
77 | bool override_redirect, | 77 | bool override_redirect, |
78 | bool save_unders, | 78 | bool save_unders, |
79 | unsigned int depth, | 79 | unsigned int depth, |
80 | int class_type): | 80 | int class_type, |
81 | Visual *visual, | ||
82 | Colormap cmap): | ||
81 | FbDrawable(), | 83 | FbDrawable(), |
82 | m_parent(0), | 84 | m_parent(0), |
83 | m_screen_num(screen_num), | 85 | m_screen_num(screen_num), |
@@ -93,7 +95,7 @@ FbWindow::FbWindow(int screen_num, | |||
93 | 95 | ||
94 | create(RootWindow(display(), screen_num), | 96 | create(RootWindow(display(), screen_num), |
95 | x, y, width, height, eventmask, | 97 | x, y, width, height, eventmask, |
96 | override_redirect, save_unders, depth, class_type); | 98 | override_redirect, save_unders, depth, class_type, visual, cmap); |
97 | } | 99 | } |
98 | 100 | ||
99 | FbWindow::FbWindow(const FbWindow &parent, | 101 | FbWindow::FbWindow(const FbWindow &parent, |
@@ -101,7 +103,10 @@ FbWindow::FbWindow(const FbWindow &parent, | |||
101 | long eventmask, | 103 | long eventmask, |
102 | bool override_redirect, | 104 | bool override_redirect, |
103 | bool save_unders, | 105 | bool save_unders, |
104 | unsigned int depth, int class_type): | 106 | unsigned int depth, |
107 | int class_type, | ||
108 | Visual *visual, | ||
109 | Colormap cmap): | ||
105 | FbDrawable(), | 110 | FbDrawable(), |
106 | m_parent(&parent), | 111 | m_parent(&parent), |
107 | m_screen_num(parent.screenNumber()), | 112 | m_screen_num(parent.screenNumber()), |
@@ -113,9 +118,7 @@ FbWindow::FbWindow(const FbWindow &parent, | |||
113 | m_lastbg_pm(0), m_renderer(0) { | 118 | m_lastbg_pm(0), m_renderer(0) { |
114 | 119 | ||
115 | create(parent.window(), x, y, width, height, eventmask, | 120 | create(parent.window(), x, y, width, height, eventmask, |
116 | override_redirect, save_unders, depth, class_type); | 121 | override_redirect, save_unders, depth, class_type, visual, cmap); |
117 | |||
118 | |||
119 | } | 122 | } |
120 | 123 | ||
121 | FbWindow::FbWindow(Window client): | 124 | FbWindow::FbWindow(Window client): |
@@ -634,9 +637,8 @@ bool FbWindow::updateGeometry() { | |||
634 | void FbWindow::create(Window parent, int x, int y, | 637 | void FbWindow::create(Window parent, int x, int y, |
635 | unsigned int width, unsigned int height, | 638 | unsigned int width, unsigned int height, |
636 | long eventmask, bool override_redirect, | 639 | long eventmask, bool override_redirect, |
637 | bool save_unders, unsigned int depth, int class_type) { | 640 | bool save_unders, unsigned int depth, int class_type, |
638 | 641 | Visual *visual, Colormap cmap) { | |
639 | |||
640 | m_border_width = 0; | 642 | m_border_width = 0; |
641 | m_border_color = 0; | 643 | m_border_color = 0; |
642 | 644 | ||
@@ -654,11 +656,18 @@ void FbWindow::create(Window parent, int x, int y, | |||
654 | values.save_under = True; | 656 | values.save_under = True; |
655 | } | 657 | } |
656 | 658 | ||
659 | if (cmap != CopyFromParent) { | ||
660 | valmask |= CWColormap | CWBackPixel | CWBorderPixel; | ||
661 | values.colormap = cmap; | ||
662 | values.background_pixel = XWhitePixel(display(), 0); | ||
663 | values.border_pixel = XBlackPixel(display(), 0); | ||
664 | } | ||
665 | |||
657 | m_window = XCreateWindow(display(), parent, x, y, width, height, | 666 | m_window = XCreateWindow(display(), parent, x, y, width, height, |
658 | 0, // border width | 667 | 0, // border width |
659 | depth, // depth | 668 | depth, // depth |
660 | class_type, // class | 669 | class_type, // class |
661 | CopyFromParent, // visual | 670 | visual, // visual |
662 | valmask, // create mask | 671 | valmask, // create mask |
663 | &values); // create atrribs | 672 | &values); // create atrribs |
664 | 673 | ||
diff --git a/src/FbTk/FbWindow.hh b/src/FbTk/FbWindow.hh index 6f6a558..e03083c 100644 --- a/src/FbTk/FbWindow.hh +++ b/src/FbTk/FbWindow.hh | |||
@@ -57,7 +57,9 @@ public: | |||
57 | bool overrride_redirect = false, | 57 | bool overrride_redirect = false, |
58 | bool save_unders = false, | 58 | bool save_unders = false, |
59 | unsigned int depth = CopyFromParent, | 59 | unsigned int depth = CopyFromParent, |
60 | int class_type = InputOutput); | 60 | int class_type = InputOutput, |
61 | Visual *visual = CopyFromParent, | ||
62 | Colormap cmap = CopyFromParent); | ||
61 | 63 | ||
62 | FbWindow(const FbWindow &parent, | 64 | FbWindow(const FbWindow &parent, |
63 | int x, int y, | 65 | int x, int y, |
@@ -66,7 +68,9 @@ public: | |||
66 | bool overrride_redirect = false, | 68 | bool overrride_redirect = false, |
67 | bool save_unders = false, | 69 | bool save_unders = false, |
68 | unsigned int depth = CopyFromParent, | 70 | unsigned int depth = CopyFromParent, |
69 | int class_type = InputOutput); | 71 | int class_type = InputOutput, |
72 | Visual *visual = CopyFromParent, | ||
73 | Colormap cmap = CopyFromParent); | ||
70 | 74 | ||
71 | virtual ~FbWindow(); | 75 | virtual ~FbWindow(); |
72 | virtual void setBackgroundColor(const FbTk::Color &bg_color); | 76 | virtual void setBackgroundColor(const FbTk::Color &bg_color); |
@@ -207,6 +211,8 @@ protected: | |||
207 | /// creates a window with x window client (m_window = client) | 211 | /// creates a window with x window client (m_window = client) |
208 | explicit FbWindow(Window client); | 212 | explicit FbWindow(Window client); |
209 | 213 | ||
214 | void setDepth(unsigned int depth) { m_depth = depth; } | ||
215 | |||
210 | private: | 216 | private: |
211 | /// sets new X window and destroys old | 217 | /// sets new X window and destroys old |
212 | void setNew(Window win); | 218 | void setNew(Window win); |
@@ -216,7 +222,9 @@ private: | |||
216 | bool override_redirect, | 222 | bool override_redirect, |
217 | bool save_unders, | 223 | bool save_unders, |
218 | unsigned int depth, | 224 | unsigned int depth, |
219 | int class_type); | 225 | int class_type, |
226 | Visual *visual, | ||
227 | Colormap cmap); | ||
220 | 228 | ||
221 | const FbWindow *m_parent; ///< parent FbWindow | 229 | const FbWindow *m_parent; ///< parent FbWindow |
222 | int m_screen_num; ///< screen num on which this window exist | 230 | int m_screen_num; ///< screen num on which this window exist |
diff --git a/src/FbWinFrame.cc b/src/FbWinFrame.cc index a8ee4d5..53cecf7 100644 --- a/src/FbWinFrame.cc +++ b/src/FbWinFrame.cc | |||
@@ -45,7 +45,8 @@ using std::string; | |||
45 | 45 | ||
46 | using FbTk::STLUtil::forAll; | 46 | using FbTk::STLUtil::forAll; |
47 | 47 | ||
48 | FbWinFrame::FbWinFrame(BScreen &screen, WindowState &state, | 48 | FbWinFrame::FbWinFrame(BScreen &screen, unsigned int client_depth, |
49 | WindowState &state, | ||
49 | FocusableTheme<FbWinFrameTheme> &theme): | 50 | FocusableTheme<FbWinFrameTheme> &theme): |
50 | m_screen(screen), | 51 | m_screen(screen), |
51 | m_theme(theme), | 52 | m_theme(theme), |
@@ -54,26 +55,41 @@ FbWinFrame::FbWinFrame(BScreen &screen, WindowState &state, | |||
54 | m_window(theme->screenNum(), state.x, state.y, state.width, state.height, | 55 | m_window(theme->screenNum(), state.x, state.y, state.width, state.height, |
55 | ButtonPressMask | ButtonReleaseMask | | 56 | ButtonPressMask | ButtonReleaseMask | |
56 | ButtonMotionMask | EnterWindowMask | | 57 | ButtonMotionMask | EnterWindowMask | |
57 | LeaveWindowMask, true), | 58 | LeaveWindowMask, true, false, |
59 | client_depth, InputOutput, | ||
60 | ((client_depth == 32) && (screen.rootWindow().depth() == 32) ? screen.rootWindow().visual() : CopyFromParent), | ||
61 | ((client_depth == 32) && (screen.rootWindow().depth() == 32) ? screen.rootWindow().colormap() : CopyFromParent)), | ||
58 | m_layeritem(window(), *screen.layerManager().getLayer(ResourceLayer::NORMAL)), | 62 | m_layeritem(window(), *screen.layerManager().getLayer(ResourceLayer::NORMAL)), |
59 | m_titlebar(m_window, 0, 0, 100, 16, | 63 | m_titlebar(m_window, 0, 0, 100, 16, |
60 | ButtonPressMask | ButtonReleaseMask | | 64 | ButtonPressMask | ButtonReleaseMask | |
61 | ButtonMotionMask | ExposureMask | | 65 | ButtonMotionMask | ExposureMask | |
62 | EnterWindowMask | LeaveWindowMask), | 66 | EnterWindowMask | LeaveWindowMask, |
67 | false, false, screen.rootWindow().decorationDepth(), InputOutput, | ||
68 | screen.rootWindow().decorationVisual(), | ||
69 | screen.rootWindow().decorationColormap()), | ||
63 | m_tab_container(m_titlebar), | 70 | m_tab_container(m_titlebar), |
64 | m_label(m_titlebar, m_theme->font(), FbTk::BiDiString("")), | 71 | m_label(m_titlebar, m_theme->font(), FbTk::BiDiString("")), |
65 | m_handle(m_window, 0, 0, 100, 5, | 72 | m_handle(m_window, 0, 0, 100, 5, |
66 | ButtonPressMask | ButtonReleaseMask | | 73 | ButtonPressMask | ButtonReleaseMask | |
67 | ButtonMotionMask | ExposureMask | | 74 | ButtonMotionMask | ExposureMask | |
68 | EnterWindowMask | LeaveWindowMask), | 75 | EnterWindowMask | LeaveWindowMask, |
76 | false, false, screen.rootWindow().decorationDepth(), InputOutput, | ||
77 | screen.rootWindow().decorationVisual(), | ||
78 | screen.rootWindow().decorationColormap()), | ||
69 | m_grip_right(m_handle, 0, 0, 10, 4, | 79 | m_grip_right(m_handle, 0, 0, 10, 4, |
70 | ButtonPressMask | ButtonReleaseMask | | 80 | ButtonPressMask | ButtonReleaseMask | |
71 | ButtonMotionMask | ExposureMask | | 81 | ButtonMotionMask | ExposureMask | |
72 | EnterWindowMask | LeaveWindowMask), | 82 | EnterWindowMask | LeaveWindowMask, |
83 | false, false, screen.rootWindow().decorationDepth(), InputOutput, | ||
84 | screen.rootWindow().decorationVisual(), | ||
85 | screen.rootWindow().decorationColormap()), | ||
73 | m_grip_left(m_handle, 0, 0, 10, 4, | 86 | m_grip_left(m_handle, 0, 0, 10, 4, |
74 | ButtonPressMask | ButtonReleaseMask | | 87 | ButtonPressMask | ButtonReleaseMask | |
75 | ButtonMotionMask | ExposureMask | | 88 | ButtonMotionMask | ExposureMask | |
76 | EnterWindowMask | LeaveWindowMask), | 89 | EnterWindowMask | LeaveWindowMask, |
90 | false, false, screen.rootWindow().decorationDepth(), InputOutput, | ||
91 | screen.rootWindow().decorationVisual(), | ||
92 | screen.rootWindow().decorationColormap()), | ||
77 | m_clientarea(m_window, 0, 0, 100, 100, | 93 | m_clientarea(m_window, 0, 0, 100, 100, |
78 | ButtonPressMask | ButtonReleaseMask | | 94 | ButtonPressMask | ButtonReleaseMask | |
79 | ButtonMotionMask | ExposureMask | | 95 | ButtonMotionMask | ExposureMask | |
diff --git a/src/FbWinFrame.hh b/src/FbWinFrame.hh index 5e13301..347a668 100644 --- a/src/FbWinFrame.hh +++ b/src/FbWinFrame.hh | |||
@@ -70,7 +70,7 @@ public: | |||
70 | }; | 70 | }; |
71 | 71 | ||
72 | /// create a top level window | 72 | /// create a top level window |
73 | FbWinFrame(BScreen &screen, WindowState &state, | 73 | FbWinFrame(BScreen &screen, unsigned int client_depth, WindowState &state, |
74 | FocusableTheme<FbWinFrameTheme> &theme); | 74 | FocusableTheme<FbWinFrameTheme> &theme); |
75 | 75 | ||
76 | /* /// create a frame window inside another FbWindow, NOT IMPLEMENTED! | 76 | /* /// create a frame window inside another FbWindow, NOT IMPLEMENTED! |
diff --git a/src/Window.cc b/src/Window.cc index 6e60a80..db5bacc 100644 --- a/src/Window.cc +++ b/src/Window.cc | |||
@@ -281,7 +281,7 @@ FluxboxWindow::FluxboxWindow(WinClient &client): | |||
281 | screen().unfocusedWinButtonTheme()), | 281 | screen().unfocusedWinButtonTheme()), |
282 | m_theme(*this, screen().focusedWinFrameTheme(), | 282 | m_theme(*this, screen().focusedWinFrameTheme(), |
283 | screen().unfocusedWinFrameTheme()), | 283 | screen().unfocusedWinFrameTheme()), |
284 | m_frame(client.screen(), m_state, m_theme), | 284 | m_frame(client.screen(), client.depth(), m_state, m_theme), |
285 | m_placed(false), | 285 | m_placed(false), |
286 | m_old_layernum(0), | 286 | m_old_layernum(0), |
287 | m_parent(client.screen().rootWindow()), | 287 | m_parent(client.screen().rootWindow()), |