diff options
author | mathias <mathias> | 2005-07-13 18:41:38 (GMT) |
---|---|---|
committer | mathias <mathias> | 2005-07-13 18:41:38 (GMT) |
commit | 3e16ad8cf8be40a1868b6c133649d6549a755761 (patch) | |
tree | 92cab56ca5ee4f8d4e707ec7fa8156f630054b80 | |
parent | 21e525a856f54d7d62dc21a5d8ba8d74983c9747 (diff) | |
download | fluxbox-3e16ad8cf8be40a1868b6c133649d6549a755761.zip fluxbox-3e16ad8cf8be40a1868b6c133649d6549a755761.tar.bz2 |
When the screen is filled with windows it can be pretty hard to find a "valid"
area to drop a tab button to detach the client from the group. solution is to
detach the client if the tab button is dropped onto the client area of the
same group.
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | src/Window.cc | 17 |
2 files changed, 14 insertions, 7 deletions
@@ -1,5 +1,9 @@ | |||
1 | (Format: Year/Month/Day) | 1 | (Format: Year/Month/Day) |
2 | Changes for 0.9.14: | 2 | Changes for 0.9.14: |
3 | *05/07/13: | ||
4 | Dragging a tab button from current titlebar onto current client area will | ||
5 | detach that client (Mathias) | ||
6 | Window.cc | ||
3 | *05/07/12: | 7 | *05/07/12: |
4 | Renaming of 'bsetroot' to 'fbsetroot' (Mathias) | 8 | Renaming of 'bsetroot' to 'fbsetroot' (Mathias) |
5 | blackbox's 'bsetroot' and fluxbox's 'bsetroot' have different syntax | 9 | blackbox's 'bsetroot' and fluxbox's 'bsetroot' have different syntax |
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 | ||