diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/Window.cc | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/src/Window.cc b/src/Window.cc index b7f78cf..71f597e 100644 --- a/src/Window.cc +++ b/src/Window.cc | |||
@@ -3421,17 +3421,21 @@ void FluxboxWindow::attachTo(int x, int y, bool interrupted) { | |||
3421 | if (XTranslateCoordinates(display, parent().window(), | 3421 | if (XTranslateCoordinates(display, parent().window(), |
3422 | parent().window(), | 3422 | parent().window(), |
3423 | x, y, &dest_x, &dest_y, &child)) { | 3423 | x, y, &dest_x, &dest_y, &child)) { |
3424 | |||
3425 | bool inside_titlebar = false; | ||
3424 | // search for a fluxboxwindow | 3426 | // search for a fluxboxwindow |
3425 | WinClient *client = Fluxbox::instance()->searchWindow(child); | 3427 | WinClient *client = Fluxbox::instance()->searchWindow(child); |
3426 | FluxboxWindow *attach_to_win = 0; | 3428 | FluxboxWindow *attach_to_win = 0; |
3427 | if (client) { | 3429 | if (client) { |
3430 | |||
3431 | inside_titlebar = client->fbwindow()->hasTitlebar() && | ||
3432 | client->fbwindow()->y() + client->fbwindow()->titlebarHeight() > dest_y; | ||
3433 | |||
3428 | Fluxbox::TabsAttachArea area= Fluxbox::instance()->getTabsAttachArea(); | 3434 | Fluxbox::TabsAttachArea area= Fluxbox::instance()->getTabsAttachArea(); |
3429 | if (area == Fluxbox::ATTACH_AREA_WINDOW) | 3435 | if (area == Fluxbox::ATTACH_AREA_WINDOW) |
3430 | attach_to_win = client->fbwindow(); | 3436 | attach_to_win = client->fbwindow(); |
3431 | else if (area == Fluxbox::ATTACH_AREA_TITLEBAR) { | 3437 | else if (area == Fluxbox::ATTACH_AREA_TITLEBAR && inside_titlebar) { |
3432 | if(client->fbwindow()->hasTitlebar() && | 3438 | attach_to_win = client->fbwindow(); |
3433 | client->fbwindow()->y() + client->fbwindow()->titlebarHeight() > dest_y) | ||
3434 | attach_to_win = client->fbwindow(); | ||
3435 | } | 3439 | } |
3436 | } | 3440 | } |
3437 | 3441 | ||
@@ -3440,7 +3444,7 @@ void FluxboxWindow::attachTo(int x, int y, bool interrupted) { | |||
3440 | 3444 | ||
3441 | attach_to_win->attachClient(*old_attached,x,y ); | 3445 | attach_to_win->attachClient(*old_attached,x,y ); |
3442 | // we could be deleted here, DO NOT do anything else that alters this object | 3446 | // we could be deleted here, DO NOT do anything else that alters this object |
3443 | } else if (attach_to_win != this) { | 3447 | } else if (attach_to_win != this || (attach_to_win == this && !inside_titlebar)) { |
3444 | // disconnect client if we didn't drop on a window | 3448 | // disconnect client if we didn't drop on a window |
3445 | WinClient &client = *old_attached; | 3449 | WinClient &client = *old_attached; |
3446 | detachClient(*old_attached); | 3450 | detachClient(*old_attached); |
@@ -3450,11 +3454,10 @@ void FluxboxWindow::attachTo(int x, int y, bool interrupted) { | |||
3450 | client.fbwindow()->move(frame().x() - m_last_resize_x + x, frame().y() - m_last_resize_y + y); | 3454 | client.fbwindow()->move(frame().x() - m_last_resize_x + x, frame().y() - m_last_resize_y + y); |
3451 | client.fbwindow()->show(); | 3455 | client.fbwindow()->show(); |
3452 | } | 3456 | } |
3453 | } else if(attach_to_win==this && attach_to_win->isTabable()) { | 3457 | } else if( attach_to_win == this && attach_to_win->isTabable()) { |
3454 | //reording of tabs within a frame | 3458 | //reording of tabs within a frame |
3455 | moveClientTo(*old_attached, x, y); | 3459 | moveClientTo(*old_attached, x, y); |
3456 | } | 3460 | } |
3457 | |||
3458 | } | 3461 | } |
3459 | } | 3462 | } |
3460 | 3463 | ||