aboutsummaryrefslogtreecommitdiff
path: root/src/FbTk/FbWindow.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/FbTk/FbWindow.cc')
-rw-r--r--src/FbTk/FbWindow.cc76
1 files changed, 40 insertions, 36 deletions
diff --git a/src/FbTk/FbWindow.cc b/src/FbTk/FbWindow.cc
index e0a0a4a..6f07b45 100644
--- a/src/FbTk/FbWindow.cc
+++ b/src/FbTk/FbWindow.cc
@@ -44,26 +44,26 @@
44 44
45namespace FbTk { 45namespace FbTk {
46 46
47FbWindow::FbWindow():FbDrawable(), m_parent(0), m_screen_num(0), m_window(0), m_x(0), m_y(0), 47FbWindow::FbWindow():FbDrawable(), m_parent(0), m_screen_num(0), m_window(0), m_x(0), m_y(0),
48 m_width(0), m_height(0), m_border_width(0), m_depth(0), m_destroy(true), 48 m_width(0), m_height(0), m_border_width(0), m_depth(0), m_destroy(true),
49 m_buffer_pm(0){ 49 m_buffer_pm(0){
50 50
51} 51}
52 52
53FbWindow::FbWindow(const FbWindow& the_copy):m_parent(the_copy.parent()), 53FbWindow::FbWindow(const FbWindow& the_copy):m_parent(the_copy.parent()),
54 m_screen_num(the_copy.screenNumber()), m_window(the_copy.window()), 54 m_screen_num(the_copy.screenNumber()), m_window(the_copy.window()),
55 m_x(the_copy.x()), m_y(the_copy.y()), 55 m_x(the_copy.x()), m_y(the_copy.y()),
56 m_width(the_copy.width()), m_height(the_copy.height()), 56 m_width(the_copy.width()), m_height(the_copy.height()),
57 m_border_width(the_copy.borderWidth()), 57 m_border_width(the_copy.borderWidth()),
58 m_depth(the_copy.depth()), m_destroy(true), 58 m_depth(the_copy.depth()), m_destroy(true),
59 m_buffer_pm(0) { 59 m_buffer_pm(0) {
60 the_copy.m_window = 0; 60 the_copy.m_window = 0;
61} 61}
62 62
63FbWindow::FbWindow(int screen_num, 63FbWindow::FbWindow(int screen_num,
64 int x, int y, 64 int x, int y,
65 unsigned int width, unsigned int height, 65 unsigned int width, unsigned int height,
66 long eventmask, 66 long eventmask,
67 bool override_redirect, 67 bool override_redirect,
68 bool save_unders, 68 bool save_unders,
69 int depth, 69 int depth,
@@ -73,30 +73,30 @@ FbWindow::FbWindow(int screen_num,
73 m_screen_num(screen_num), 73 m_screen_num(screen_num),
74 m_destroy(true), 74 m_destroy(true),
75 m_buffer_pm(0) { 75 m_buffer_pm(0) {
76 76
77 create(RootWindow(display(), screen_num), 77 create(RootWindow(display(), screen_num),
78 x, y, width, height, eventmask, 78 x, y, width, height, eventmask,
79 override_redirect, save_unders, depth, class_type); 79 override_redirect, save_unders, depth, class_type);
80}; 80};
81 81
82FbWindow::FbWindow(const FbWindow &parent, 82FbWindow::FbWindow(const FbWindow &parent,
83 int x, int y, unsigned int width, unsigned int height, 83 int x, int y, unsigned int width, unsigned int height,
84 long eventmask, 84 long eventmask,
85 bool override_redirect, 85 bool override_redirect,
86 bool save_unders, 86 bool save_unders,
87 int depth, int class_type): 87 int depth, int class_type):
88 m_parent(&parent), 88 m_parent(&parent),
89 m_screen_num(parent.screenNumber()), 89 m_screen_num(parent.screenNumber()),
90 m_destroy(true), 90 m_destroy(true),
91 m_buffer_pm(0) { 91 m_buffer_pm(0) {
92 92
93 create(parent.window(), x, y, width, height, eventmask, 93 create(parent.window(), x, y, width, height, eventmask,
94 override_redirect, save_unders, depth, class_type); 94 override_redirect, save_unders, depth, class_type);
95 95
96 96
97}; 97};
98 98
99FbWindow::FbWindow(Window client):FbDrawable(), m_parent(0), 99FbWindow::FbWindow(Window client):FbDrawable(), m_parent(0),
100 m_screen_num(0), 100 m_screen_num(0),
101 m_window(0), 101 m_window(0),
102 m_x(0), m_y(0), 102 m_x(0), m_y(0),
@@ -117,9 +117,9 @@ FbWindow::~FbWindow() {
117 117
118 if (m_window != 0) { 118 if (m_window != 0) {
119 // so we don't get any dangling eventhandler for this window 119 // so we don't get any dangling eventhandler for this window
120 FbTk::EventManager::instance()->remove(m_window); 120 FbTk::EventManager::instance()->remove(m_window);
121 if (m_destroy) 121 if (m_destroy)
122 XDestroyWindow(display(), m_window); 122 XDestroyWindow(display(), m_window);
123 } 123 }
124} 124}
125 125
@@ -136,7 +136,7 @@ void FbWindow::setBorderColor(const FbTk::Color &border_color) {
136 XSetWindowBorder(display(), m_window, border_color.pixel()); 136 XSetWindowBorder(display(), m_window, border_color.pixel());
137} 137}
138 138
139void FbWindow::setBorderWidth(unsigned int size) { 139void FbWindow::setBorderWidth(unsigned int size) {
140 XSetWindowBorderWidth(display(), m_window, size); 140 XSetWindowBorderWidth(display(), m_window, size);
141 m_border_width = size; 141 m_border_width = size;
142} 142}
@@ -153,8 +153,8 @@ void FbWindow::clear() {
153 XClearWindow(display(), m_window); 153 XClearWindow(display(), m_window);
154} 154}
155 155
156void FbWindow::clearArea(int x, int y, 156void FbWindow::clearArea(int x, int y,
157 unsigned int width, unsigned int height, 157 unsigned int width, unsigned int height,
158 bool exposures) { 158 bool exposures) {
159 XClearArea(display(), window(), x, y, width, height, exposures); 159 XClearArea(display(), window(), x, y, width, height, exposures);
160} 160}
@@ -254,7 +254,7 @@ FbWindow &FbWindow::operator = (const FbWindow &win) {
254} 254}
255 255
256FbWindow &FbWindow::operator = (Window win) { 256FbWindow &FbWindow::operator = (Window win) {
257 setNew(win); 257 setNew(win);
258 return *this; 258 return *this;
259} 259}
260 260
@@ -289,7 +289,7 @@ void FbWindow::setNew(Window win) {
289 m_depth = attr.depth; 289 m_depth = attr.depth;
290 m_border_width = attr.border_width; 290 m_border_width = attr.border_width;
291 } 291 }
292 292
293 } 293 }
294} 294}
295 295
@@ -318,7 +318,7 @@ void FbWindow::setInputFocus(int revert_to, int time) {
318} 318}
319 319
320void FbWindow::setCursor(Cursor cur) { 320void FbWindow::setCursor(Cursor cur) {
321 XDefineCursor(display(), window(), cur); 321 XDefineCursor(display(), window(), cur);
322} 322}
323 323
324void FbWindow::unsetCursor() { 324void FbWindow::unsetCursor() {
@@ -368,8 +368,8 @@ bool FbWindow::property(Atom property,
368 unsigned long *nitems_return, 368 unsigned long *nitems_return,
369 unsigned long *bytes_after_return, 369 unsigned long *bytes_after_return,
370 unsigned char **prop_return) const { 370 unsigned char **prop_return) const {
371 if (XGetWindowProperty(display(), window(), 371 if (XGetWindowProperty(display(), window(),
372 property, long_offset, long_length, do_delete, 372 property, long_offset, long_length, do_delete,
373 req_type, actual_type_return, 373 req_type, actual_type_return,
374 actual_format_return, nitems_return, 374 actual_format_return, nitems_return,
375 bytes_after_return, prop_return) == Success) 375 bytes_after_return, prop_return) == Success)
@@ -383,19 +383,23 @@ void FbWindow::changeProperty(Atom property, Atom type,
383 int mode, 383 int mode,
384 unsigned char *data, 384 unsigned char *data,
385 int nelements) { 385 int nelements) {
386 386
387 XChangeProperty(display(), m_window, property, type, 387 XChangeProperty(display(), m_window, property, type,
388 format, mode, 388 format, mode,
389 data, nelements); 389 data, nelements);
390} 390}
391 391
392void FbWindow::deleteProperty(Atom property) {
393 XDeleteProperty(display(), m_window, property);
394}
395
392int FbWindow::screenNumber() const { 396int FbWindow::screenNumber() const {
393 return m_screen_num; 397 return m_screen_num;
394} 398}
395 399
396long FbWindow::eventMask() const { 400long FbWindow::eventMask() const {
397 XWindowAttributes attrib; 401 XWindowAttributes attrib;
398 XGetWindowAttributes(display(), window(), 402 XGetWindowAttributes(display(), window(),
399 &attrib); 403 &attrib);
400 return attrib.your_event_mask; 404 return attrib.your_event_mask;
401 405
@@ -420,16 +424,16 @@ void FbWindow::updateGeometry() {
420 Window root; 424 Window root;
421 unsigned int border_width, depth; 425 unsigned int border_width, depth;
422 XGetGeometry(display(), m_window, &root, &m_x, &m_y, 426 XGetGeometry(display(), m_window, &root, &m_x, &m_y,
423 (unsigned int *)&m_width, (unsigned int *)&m_height, 427 (unsigned int *)&m_width, (unsigned int *)&m_height,
424 &border_width, &depth); 428 &border_width, &depth);
425 m_depth = depth; 429 m_depth = depth;
426} 430}
427 431
428void FbWindow::create(Window parent, int x, int y, 432void FbWindow::create(Window parent, int x, int y,
429 unsigned int width, unsigned int height, 433 unsigned int width, unsigned int height,
430 long eventmask, bool override_redirect, 434 long eventmask, bool override_redirect,
431 bool save_unders, int depth, int class_type) { 435 bool save_unders, int depth, int class_type) {
432 436
433 437
434 m_border_width = 0; 438 m_border_width = 0;
435 439
@@ -437,7 +441,7 @@ void FbWindow::create(Window parent, int x, int y,
437 XSetWindowAttributes values; 441 XSetWindowAttributes values;
438 values.event_mask = eventmask; 442 values.event_mask = eventmask;
439 443
440 if (override_redirect) { 444 if (override_redirect) {
441 valmask |= CWOverrideRedirect; 445 valmask |= CWOverrideRedirect;
442 values.override_redirect = True; 446 values.override_redirect = True;
443 } 447 }
@@ -448,13 +452,13 @@ void FbWindow::create(Window parent, int x, int y,
448 } 452 }
449 453
450 m_window = XCreateWindow(display(), parent, x, y, width, height, 454 m_window = XCreateWindow(display(), parent, x, y, width, height,
451 0, // border width 455 0, // border width
452 depth, // depth 456 depth, // depth
453 class_type, // class 457 class_type, // class
454 CopyFromParent, // visual 458 CopyFromParent, // visual
455 valmask, // create mask 459 valmask, // create mask
456 &values); // create atrribs 460 &values); // create atrribs
457 461
458 assert(m_window); 462 assert(m_window);
459 463
460 updateGeometry(); 464 updateGeometry();