aboutsummaryrefslogtreecommitdiff
path: root/src/FbWinFrame.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/FbWinFrame.cc')
-rw-r--r--src/FbWinFrame.cc58
1 files changed, 55 insertions, 3 deletions
diff --git a/src/FbWinFrame.cc b/src/FbWinFrame.cc
index bd44467..9b8b7e7 100644
--- a/src/FbWinFrame.cc
+++ b/src/FbWinFrame.cc
@@ -19,7 +19,7 @@
19// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 19// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
20// DEALINGS IN THE SOFTWARE. 20// DEALINGS IN THE SOFTWARE.
21 21
22// $Id: FbWinFrame.cc,v 1.75 2004/02/27 12:20:01 fluxgen Exp $ 22// $Id: FbWinFrame.cc,v 1.76 2004/02/28 16:54:04 fluxgen Exp $
23 23
24#include "FbWinFrame.hh" 24#include "FbWinFrame.hh"
25 25
@@ -28,6 +28,7 @@
28#include "FbTk/TextButton.hh" 28#include "FbTk/TextButton.hh"
29#include "FbTk/App.hh" 29#include "FbTk/App.hh"
30#include "FbTk/SimpleCommand.hh" 30#include "FbTk/SimpleCommand.hh"
31#include "FbTk/Compose.hh"
31#include "CompareWindow.hh" 32#include "CompareWindow.hh"
32#include "FbWinFrameTheme.hh" 33#include "FbWinFrameTheme.hh"
33 34
@@ -140,6 +141,7 @@ void FbWinFrame::show() {
140 m_visible = true; 141 m_visible = true;
141 m_window.showSubwindows(); 142 m_window.showSubwindows();
142 m_window.show(); 143 m_window.show();
144 updateTransparent();
143} 145}
144 146
145/** 147/**
@@ -551,7 +553,6 @@ void FbWinFrame::buttonReleaseEvent(XButtonEvent &event) {
551 if (button_it != m_labelbuttons.end()) 553 if (button_it != m_labelbuttons.end())
552 (*button_it)->buttonReleaseEvent(event); 554 (*button_it)->buttonReleaseEvent(event);
553 555
554
555 if (event.window == m_grip_right.window() || 556 if (event.window == m_grip_right.window() ||
556 event.window == m_grip_left.window() || 557 event.window == m_grip_left.window() ||
557 event.window == m_clientarea.window() || 558 event.window == m_clientarea.window() ||
@@ -1223,23 +1224,74 @@ void FbWinFrame::renderButtonUnfocus(FbTk::TextButton &button) {
1223 button.setBackgroundColor(m_label_unfocused_color); 1224 button.setBackgroundColor(m_label_unfocused_color);
1224 1225
1225} 1226}
1227namespace {
1228class IgnoreEvent {
1229public:
1230 typedef void result_type;
1231 typedef Window argument_type;
1232 explicit IgnoreEvent(long eventmask):
1233 m_display(FbTk::App::instance()->display()),
1234 m_event_mask(eventmask) {
1235 }
1236
1237 void operator()(Window win) const {
1238 static XEvent event;
1239 while (XCheckWindowEvent(m_display, win, m_event_mask, &event))
1240 continue;
1241 }
1242private:
1243 Display *m_display;
1244 long m_event_mask;
1245};
1246}
1226 1247
1227void FbWinFrame::updateTransparent() { 1248void FbWinFrame::updateTransparent() {
1228 redrawTitlebar(); 1249
1250 m_label.clear();
1251 m_label.updateTransparent();
1252 m_titlebar.clear();
1253 m_titlebar.updateTransparent();
1229 1254
1255 for_each(m_labelbuttons.begin(),
1256 m_labelbuttons.end(),
1257 mem_fun(&FbTk::Button::clear));
1258
1230 for_each(m_buttons_left.begin(), 1259 for_each(m_buttons_left.begin(),
1231 m_buttons_left.end(), 1260 m_buttons_left.end(),
1232 mem_fun(&FbTk::Button::clear)); 1261 mem_fun(&FbTk::Button::clear));
1262
1233 for_each(m_buttons_right.begin(), 1263 for_each(m_buttons_right.begin(),
1234 m_buttons_right.end(), 1264 m_buttons_right.end(),
1235 mem_fun(&FbTk::Button::clear)); 1265 mem_fun(&FbTk::Button::clear));
1266 // ignore exposure events, since we already cleared
1267 // and redrawn the windows
1268 IgnoreEvent ign(ExposureMask);
1269
1270 // base windows
1271 ign(m_label.window());
1272 ign(m_titlebar.window());
1273
1274 // labels
1275 for_each(m_labelbuttons.begin(),
1276 m_labelbuttons.end(),
1277 FbTk::Compose(ign, mem_fun(&FbTk::Button::window)));
1278 // win buttons
1279 for_each(m_buttons_right.begin(),
1280 m_buttons_right.end(),
1281 FbTk::Compose(ign, mem_fun(&FbTk::Button::window)));
1282 for_each(m_buttons_left.begin(),
1283 m_buttons_left.end(),
1284 FbTk::Compose(ign, mem_fun(&FbTk::Button::window)));
1236 1285
1237 m_grip_left.clear(); 1286 m_grip_left.clear();
1238 m_grip_left.updateTransparent(); 1287 m_grip_left.updateTransparent();
1288 ign(m_grip_left.window());
1239 m_grip_right.clear(); 1289 m_grip_right.clear();
1240 m_grip_right.updateTransparent(); 1290 m_grip_right.updateTransparent();
1291 ign(m_grip_right.window());
1241 m_handle.clear(); 1292 m_handle.clear();
1242 m_handle.updateTransparent(); 1293 m_handle.updateTransparent();
1294 ign(m_handle.window());
1243} 1295}
1244 1296
1245 1297