diff options
Diffstat (limited to 'src/Ewmh.cc')
-rw-r--r-- | src/Ewmh.cc | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/src/Ewmh.cc b/src/Ewmh.cc index 51f7fa8..96ba209 100644 --- a/src/Ewmh.cc +++ b/src/Ewmh.cc | |||
@@ -766,23 +766,31 @@ bool Ewmh::checkClientMessage(const XClientMessageEvent &ce, | |||
766 | return true; | 766 | return true; |
767 | // ce.window = window to focus | 767 | // ce.window = window to focus |
768 | 768 | ||
769 | winclient->focus(); | ||
770 | if (winclient->fbwindow()) { | 769 | if (winclient->fbwindow()) { |
771 | 770 | ||
772 | FluxboxWindow* fbwin = winclient->fbwindow(); | 771 | FluxboxWindow* fbwin = winclient->fbwindow(); |
773 | fbwin->raise(); | ||
774 | 772 | ||
775 | // if the raised window is on a different workspace | 773 | // if the raised window is on a different workspace |
776 | // we do what the user wish: | 774 | // we do what the user wish: |
777 | // either ignore|go to that workspace|get the window | 775 | // either ignore|go to that workspace|get the window |
778 | if (fbwin->screen().currentWorkspaceID() != fbwin->workspaceNumber()) { | 776 | if (fbwin->screen().currentWorkspaceID() != fbwin->workspaceNumber()) { |
779 | if (fbwin->screen().getFollowModel() == BScreen::FOLLOW_ACTIVE_WINDOW) { | 777 | BScreen::FollowModel model = (ce.data.l[0] == 2) ? |
778 | fbwin->screen().getUserFollowModel() : | ||
779 | fbwin->screen().getFollowModel(); | ||
780 | if (model == BScreen::FOLLOW_ACTIVE_WINDOW) { | ||
780 | fbwin->screen().changeWorkspaceID(fbwin->workspaceNumber()); | 781 | fbwin->screen().changeWorkspaceID(fbwin->workspaceNumber()); |
781 | } else if (fbwin->screen().getFollowModel() == BScreen::FETCH_ACTIVE_WINDOW) { | 782 | } else if (model == BScreen::FETCH_ACTIVE_WINDOW) { |
782 | fbwin->screen().sendToWorkspace(fbwin->screen().currentWorkspaceID(), fbwin); | 783 | fbwin->screen().sendToWorkspace(fbwin->screen().currentWorkspaceID(), fbwin); |
784 | } else if (model == BScreen::SEMIFOLLOW_ACTIVE_WINDOW) { | ||
785 | if (fbwin->isIconic()) | ||
786 | fbwin->screen().sendToWorkspace(fbwin->screen().currentWorkspaceID(), fbwin); | ||
787 | else | ||
788 | fbwin->screen().changeWorkspaceID(fbwin->workspaceNumber()); | ||
783 | } // else we ignore it. my favourite mode :) | 789 | } // else we ignore it. my favourite mode :) |
784 | } | 790 | } |
791 | fbwin->raise(); | ||
785 | } | 792 | } |
793 | winclient->focus(); | ||
786 | return true; | 794 | return true; |
787 | } else if (ce.message_type == m_net_close_window) { | 795 | } else if (ce.message_type == m_net_close_window) { |
788 | if (winclient == 0) | 796 | if (winclient == 0) |