diff options
-rw-r--r-- | src/Slit.cc | 57 |
1 files changed, 26 insertions, 31 deletions
diff --git a/src/Slit.cc b/src/Slit.cc index 79ebb62..d4a6837 100644 --- a/src/Slit.cc +++ b/src/Slit.cc | |||
@@ -22,7 +22,7 @@ | |||
22 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | 22 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
23 | // DEALINGS IN THE SOFTWARE. | 23 | // DEALINGS IN THE SOFTWARE. |
24 | 24 | ||
25 | // $Id: Slit.cc,v 1.58 2003/05/24 13:13:22 rathnor Exp $ | 25 | // $Id: Slit.cc,v 1.59 2003/06/05 11:30:06 fluxgen Exp $ |
26 | 26 | ||
27 | #include "Slit.hh" | 27 | #include "Slit.hh" |
28 | 28 | ||
@@ -261,6 +261,9 @@ private: | |||
261 | FbTk::ThemeItem<FbTk::Texture> m_texture; | 261 | FbTk::ThemeItem<FbTk::Texture> m_texture; |
262 | }; | 262 | }; |
263 | 263 | ||
264 | unsigned int Slit::s_eventmask = SubstructureRedirectMask | ButtonPressMask | | ||
265 | EnterWindowMask | LeaveWindowMask | ExposureMask; | ||
266 | |||
264 | Slit::Slit(BScreen &scr, FbTk::XLayer &layer, const char *filename) | 267 | Slit::Slit(BScreen &scr, FbTk::XLayer &layer, const char *filename) |
265 | : m_screen(scr), m_timer(this), | 268 | : m_screen(scr), m_timer(this), |
266 | m_slitmenu(*scr.menuTheme(), | 269 | m_slitmenu(*scr.menuTheme(), |
@@ -308,8 +311,7 @@ Slit::Slit(BScreen &scr, FbTk::XLayer &layer, const char *filename) | |||
308 | screen().rootTheme().borderColor().pixel(); | 311 | screen().rootTheme().borderColor().pixel(); |
309 | attrib.colormap = screen().rootWindow().colormap(); | 312 | attrib.colormap = screen().rootWindow().colormap(); |
310 | attrib.override_redirect = True; | 313 | attrib.override_redirect = True; |
311 | attrib.event_mask = SubstructureRedirectMask | ButtonPressMask | | 314 | attrib.event_mask = s_eventmask; |
312 | EnterWindowMask | LeaveWindowMask | ExposureMask; | ||
313 | 315 | ||
314 | frame.x = frame.y = 0; | 316 | frame.x = frame.y = 0; |
315 | frame.width = frame.height = 1; | 317 | frame.width = frame.height = 1; |
@@ -335,9 +337,7 @@ Slit::Slit(BScreen &scr, FbTk::XLayer &layer, const char *filename) | |||
335 | reconfigure(); | 337 | reconfigure(); |
336 | } | 338 | } |
337 | 339 | ||
338 | unsigned int Slit::s_eventmask = StructureNotifyMask | SubstructureNotifyMask | | 340 | |
339 | SubstructureRedirectMask | ButtonPressMask | | ||
340 | EnterWindowMask | LeaveWindowMask | ExposureMask; | ||
341 | Slit::~Slit() { | 341 | Slit::~Slit() { |
342 | if (frame.pixmap != 0) | 342 | if (frame.pixmap != 0) |
343 | screen().imageControl().removeImage(frame.pixmap); | 343 | screen().imageControl().removeImage(frame.pixmap); |
@@ -459,16 +459,16 @@ void Slit::addClient(Window w) { | |||
459 | // disable events to frame.window | 459 | // disable events to frame.window |
460 | frame.window.setEventMask(NoEventMask); | 460 | frame.window.setEventMask(NoEventMask); |
461 | client->disableEvents(); | 461 | client->disableEvents(); |
462 | |||
462 | 463 | ||
463 | XReparentWindow(disp, client->window, frame.window.window(), 0, 0); | 464 | XReparentWindow(disp, client->window, frame.window.window(), 0, 0); |
464 | XMapRaised(disp, client->window); | 465 | XMapRaised(disp, client->window); |
465 | XChangeSaveSet(disp, client->window, SetModeInsert); | 466 | XChangeSaveSet(disp, client->window, SetModeInsert); |
466 | |||
467 | // reactivate events for frame.window | 467 | // reactivate events for frame.window |
468 | frame.window.setEventMask(s_eventmask); | 468 | frame.window.setEventMask(s_eventmask); |
469 | |||
470 | // setup event for slit client window | 469 | // setup event for slit client window |
471 | client->enableEvents(); | 470 | client->enableEvents(); |
471 | |||
472 | // flush events | 472 | // flush events |
473 | XFlush(disp); | 473 | XFlush(disp); |
474 | 474 | ||
@@ -543,6 +543,11 @@ void Slit::removeClient(SlitClient *client, bool remap, bool destroy) { | |||
543 | 543 | ||
544 | 544 | ||
545 | void Slit::removeClient(Window w, bool remap) { | 545 | void Slit::removeClient(Window w, bool remap) { |
546 | #ifdef DEBUG | ||
547 | cerr<<"Slit::removeClient(Window w = 0x"<<hex<<w<<dec<<", remap = "<<remap<<")"<<endl; | ||
548 | #endif // DEBUG | ||
549 | if (w == frame.window) | ||
550 | return; | ||
546 | 551 | ||
547 | bool reconf = false; | 552 | bool reconf = false; |
548 | 553 | ||
@@ -575,6 +580,7 @@ void Slit::reconfigure() { | |||
575 | // actually correspond to mapped windows. | 580 | // actually correspond to mapped windows. |
576 | int num_windows = 0; | 581 | int num_windows = 0; |
577 | const int bevel_width = screen().rootTheme().bevelWidth(); | 582 | const int bevel_width = screen().rootTheme().bevelWidth(); |
583 | |||
578 | switch (direction()) { | 584 | switch (direction()) { |
579 | case VERTICAL: { | 585 | case VERTICAL: { |
580 | SlitClients::iterator it = m_client_list.begin(); | 586 | SlitClients::iterator it = m_client_list.begin(); |
@@ -591,16 +597,6 @@ void Slit::reconfigure() { | |||
591 | } | 597 | } |
592 | } | 598 | } |
593 | 599 | ||
594 | if (frame.width < 1) | ||
595 | frame.width = 1; | ||
596 | else | ||
597 | frame.width += (bevel_width * 2); | ||
598 | |||
599 | if (frame.height < 1) | ||
600 | frame.height = 1; | ||
601 | else | ||
602 | frame.height += bevel_width; | ||
603 | |||
604 | break; | 600 | break; |
605 | 601 | ||
606 | case HORIZONTAL: { | 602 | case HORIZONTAL: { |
@@ -616,21 +612,20 @@ void Slit::reconfigure() { | |||
616 | frame.height = (*it)->height; | 612 | frame.height = (*it)->height; |
617 | } | 613 | } |
618 | } | 614 | } |
619 | break; | 615 | |
620 | } | 616 | } |
617 | break; | ||
618 | } // end switch | ||
621 | 619 | ||
622 | if (frame.width < 1) | 620 | if (frame.width < 1) |
623 | frame.width = 1; | 621 | frame.width = 1; |
624 | else | 622 | else |
625 | frame.width += bevel_width; | 623 | frame.width += bevel_width; |
626 | |||
627 | if (frame.height < 1) | ||
628 | frame.height = 1; | ||
629 | else | ||
630 | frame.height += bevel_width*2; | ||
631 | 624 | ||
632 | break; | 625 | if (frame.height < 1) |
633 | } | 626 | frame.height = 1; |
627 | else | ||
628 | frame.height += bevel_width*2; | ||
634 | 629 | ||
635 | reposition(); | 630 | reposition(); |
636 | Display *disp = FbTk::App::instance()->display(); | 631 | Display *disp = FbTk::App::instance()->display(); |
@@ -942,7 +937,7 @@ void Slit::handleEvent(XEvent &event) { | |||
942 | } else if (event.type == DestroyNotify) { | 937 | } else if (event.type == DestroyNotify) { |
943 | removeClient(event.xdestroywindow.window, false); | 938 | removeClient(event.xdestroywindow.window, false); |
944 | } else if (event.type == UnmapNotify) { | 939 | } else if (event.type == UnmapNotify) { |
945 | removeClient(event.xany.window); | 940 | removeClient(event.xunmap.window); |
946 | } else if (event.type == MapRequest) { | 941 | } else if (event.type == MapRequest) { |
947 | #ifdef KDE | 942 | #ifdef KDE |
948 | //Check and see if client is KDE dock applet. | 943 | //Check and see if client is KDE dock applet. |