536 | | BScreen screen(window); |
537 | | BRect frame = screen.Frame(); |
538 | | if (where.x == frame.left || where.x == frame.right |
539 | | || where.y == frame.top || where.y == frame.bottom) { |
540 | | // cursor is on screen edge |
541 | | if (window->Frame().Contains(where)) |
542 | | window->Activate(); |
543 | | } |
| 536 | BRect screenFrame = BScreen(window).Frame(); |
| 537 | |
| 538 | if (where.x != screenFrame.left && where.x != screenFrame.right |
| 539 | && where.y != screenFrame.top && where.y != screenFrame.bottom) |
| 540 | return; |
| 541 | else { |
| 542 | BMessage settings; |
| 543 | BRect windowFrame = window->Frame(); |
| 544 | float offset = kScreenBorderOffset / 2.0; |
| 545 | |
| 546 | if (window->GetDecoratorSettings(&settings) == B_OK){ |
| 547 | BRect tabFrame = settings.FindRect("tab frame"); // Frame of the decorator tab |
| 548 | if (tabFrame.top <= screenFrame.top){ // Take into account tab height. |
| 549 | windowFrame.InsetBy(-(offset), -(tabFrame.bottom + offset)); |
| 550 | if (screenFrame.Contains(windowFrame) && windowFrame.Contains(where)) |
| 551 | window->Activate(); |
| 552 | } else { // Not at top, SAT decor turned on. |
| 553 | windowFrame.InsetBy(-(offset), -(offset)); |
| 554 | if (screenFrame.Contains(windowFrame) && windowFrame.Contains(where)) |
| 555 | window->Activate(); |
| 556 | } |
| 557 | } else { //Window at edge within offset, without SAT Decor enabled. |
| 558 | windowFrame.InsetBy(-(offset), -(offset)); //We should still be lenient! |
| 559 | if (screenFrame.Contains(windowFrame) && windowFrame.Contains(where)) |
| 560 | window->Activate(); |
| 561 | } |
| 562 | } |