diff options
Diffstat (limited to 'src/FocusControl.cc')
-rw-r--r-- | src/FocusControl.cc | 64 |
1 files changed, 33 insertions, 31 deletions
diff --git a/src/FocusControl.cc b/src/FocusControl.cc index 701373b..bf79d3e 100644 --- a/src/FocusControl.cc +++ b/src/FocusControl.cc | |||
@@ -62,20 +62,20 @@ bool doSkipWindow(const Focusable &win, const ClientPattern *pat) { | |||
62 | return false; // else don't skip | 62 | return false; // else don't skip |
63 | } | 63 | } |
64 | 64 | ||
65 | }; // end anonymous namespace | 65 | } // end anonymous namespace |
66 | 66 | ||
67 | FocusControl::FocusControl(BScreen &screen): | 67 | FocusControl::FocusControl(BScreen &screen): |
68 | m_screen(screen), | 68 | m_screen(screen), |
69 | m_focus_model(screen.resourceManager(), | 69 | m_focus_model(screen.resourceManager(), |
70 | CLICKFOCUS, | 70 | CLICKFOCUS, |
71 | screen.name()+".focusModel", | 71 | screen.name()+".focusModel", |
72 | screen.altName()+".FocusModel"), | 72 | screen.altName()+".FocusModel"), |
73 | m_tab_focus_model(screen.resourceManager(), | 73 | m_tab_focus_model(screen.resourceManager(), |
74 | CLICKTABFOCUS, | 74 | CLICKTABFOCUS, |
75 | screen.name()+".tabFocusModel", | 75 | screen.name()+".tabFocusModel", |
76 | screen.altName()+".TabFocusModel"), | 76 | screen.altName()+".TabFocusModel"), |
77 | m_focus_new(screen.resourceManager(), true, | 77 | m_focus_new(screen.resourceManager(), true, |
78 | screen.name()+".focusNewWindows", | 78 | screen.name()+".focusNewWindows", |
79 | screen.altName()+".FocusNewWindows"), | 79 | screen.altName()+".FocusNewWindows"), |
80 | m_focused_list(screen), m_creation_order_list(screen), | 80 | m_focused_list(screen), m_creation_order_list(screen), |
81 | m_focused_win_list(screen), m_creation_order_win_list(screen), | 81 | m_focused_win_list(screen), m_creation_order_win_list(screen), |
@@ -85,7 +85,7 @@ FocusControl::FocusControl(BScreen &screen): | |||
85 | m_ignore_mouse_x(-1), m_ignore_mouse_y(-1) { | 85 | m_ignore_mouse_x(-1), m_ignore_mouse_y(-1) { |
86 | 86 | ||
87 | m_cycling_window = m_focused_list.clientList().end(); | 87 | m_cycling_window = m_focused_list.clientList().end(); |
88 | 88 | ||
89 | } | 89 | } |
90 | 90 | ||
91 | void FocusControl::cycleFocus(const FocusableList &window_list, | 91 | void FocusControl::cycleFocus(const FocusableList &window_list, |
@@ -252,7 +252,7 @@ Focusable *FocusControl::lastFocusedWindow(int workspace) { | |||
252 | if (workspace < 0 || workspace >= (int) m_screen.numberOfWorkspaces()) | 252 | if (workspace < 0 || workspace >= (int) m_screen.numberOfWorkspaces()) |
253 | return m_focused_list.clientList().front(); | 253 | return m_focused_list.clientList().front(); |
254 | 254 | ||
255 | Focusables::iterator it = m_focused_list.clientList().begin(); | 255 | Focusables::iterator it = m_focused_list.clientList().begin(); |
256 | Focusables::iterator it_end = m_focused_list.clientList().end(); | 256 | Focusables::iterator it_end = m_focused_list.clientList().end(); |
257 | for (; it != it_end; ++it) { | 257 | for (; it != it_end; ++it) { |
258 | if ((*it)->fbwindow() && (*it)->acceptsFocus() && | 258 | if ((*it)->fbwindow() && (*it)->acceptsFocus() && |
@@ -307,11 +307,11 @@ void FocusControl::dirFocus(FluxboxWindow &win, FocusDir dir) { | |||
307 | 307 | ||
308 | // we scan through the list looking for the window that is "closest" | 308 | // we scan through the list looking for the window that is "closest" |
309 | // in the given direction | 309 | // in the given direction |
310 | 310 | ||
311 | FluxboxWindow *foundwin = 0; | 311 | FluxboxWindow *foundwin = 0; |
312 | int weight = 999999, exposure = 0; // extreme values | 312 | int weight = 999999, exposure = 0; // extreme values |
313 | int borderW = win.frame().window().borderWidth(), | 313 | int borderW = win.frame().window().borderWidth(), |
314 | top = win.y() + borderW, | 314 | top = win.y() + borderW, |
315 | bottom = win.y() + win.height() + borderW, | 315 | bottom = win.y() + win.height() + borderW, |
316 | left = win.x() + borderW, | 316 | left = win.x() + borderW, |
317 | right = win.x() + win.width() + borderW; | 317 | right = win.x() + win.width() + borderW; |
@@ -319,17 +319,17 @@ void FocusControl::dirFocus(FluxboxWindow &win, FocusDir dir) { | |||
319 | Workspace::Windows &wins = m_screen.currentWorkspace()->windowList(); | 319 | Workspace::Windows &wins = m_screen.currentWorkspace()->windowList(); |
320 | Workspace::Windows::iterator it = wins.begin(); | 320 | Workspace::Windows::iterator it = wins.begin(); |
321 | for (; it != wins.end(); ++it) { | 321 | for (; it != wins.end(); ++it) { |
322 | if ((*it) == &win | 322 | if ((*it) == &win |
323 | || (*it)->isIconic() | 323 | || (*it)->isIconic() |
324 | || (*it)->isFocusHidden() | 324 | || (*it)->isFocusHidden() |
325 | || !(*it)->acceptsFocus()) | 325 | || !(*it)->acceptsFocus()) |
326 | continue; // skip self | 326 | continue; // skip self |
327 | 327 | ||
328 | // we check things against an edge, and within the bounds (draw a picture) | 328 | // we check things against an edge, and within the bounds (draw a picture) |
329 | int edge=0, upper=0, lower=0, oedge=0, oupper=0, olower=0; | 329 | int edge=0, upper=0, lower=0, oedge=0, oupper=0, olower=0; |
330 | 330 | ||
331 | int otop = (*it)->y() + borderW, | 331 | int otop = (*it)->y() + borderW, |
332 | // 2 * border = border on each side | 332 | // 2 * border = border on each side |
333 | obottom = (*it)->y() + (*it)->height() + borderW, | 333 | obottom = (*it)->y() + (*it)->height() + borderW, |
334 | oleft = (*it)->x() + borderW, | 334 | oleft = (*it)->x() + borderW, |
335 | // 2 * border = border on each side | 335 | // 2 * border = border on each side |
@@ -371,7 +371,7 @@ void FocusControl::dirFocus(FluxboxWindow &win, FocusDir dir) { | |||
371 | break; | 371 | break; |
372 | } | 372 | } |
373 | 373 | ||
374 | if (oedge < edge) | 374 | if (oedge < edge) |
375 | continue; // not in the right direction | 375 | continue; // not in the right direction |
376 | 376 | ||
377 | if (olower <= upper || oupper >= lower) { | 377 | if (olower <= upper || oupper >= lower) { |
@@ -396,7 +396,7 @@ void FocusControl::dirFocus(FluxboxWindow &win, FocusDir dir) { | |||
396 | } // else not improvement | 396 | } // else not improvement |
397 | } | 397 | } |
398 | 398 | ||
399 | if (foundwin) | 399 | if (foundwin) |
400 | foundwin->focus(); | 400 | foundwin->focus(); |
401 | 401 | ||
402 | } | 402 | } |
@@ -516,7 +516,7 @@ void FocusControl::revertFocus(BScreen &screen) { | |||
516 | * assumption: client has focus | 516 | * assumption: client has focus |
517 | */ | 517 | */ |
518 | void FocusControl::unfocusWindow(WinClient &client, | 518 | void FocusControl::unfocusWindow(WinClient &client, |
519 | bool full_revert, | 519 | bool full_revert, |
520 | bool unfocus_frame) { | 520 | bool unfocus_frame) { |
521 | // go up the transient tree looking for a focusable window | 521 | // go up the transient tree looking for a focusable window |
522 | 522 | ||
@@ -547,8 +547,8 @@ void FocusControl::setFocusedWindow(WinClient *client) { | |||
547 | return; | 547 | return; |
548 | 548 | ||
549 | BScreen *screen = client ? &client->screen() : 0; | 549 | BScreen *screen = client ? &client->screen() : 0; |
550 | BScreen *old_screen = | 550 | BScreen *old_screen = |
551 | FocusControl::focusedWindow() ? | 551 | FocusControl::focusedWindow() ? |
552 | &FocusControl::focusedWindow()->screen() : 0; | 552 | &FocusControl::focusedWindow()->screen() : 0; |
553 | 553 | ||
554 | #ifdef DEBUG | 554 | #ifdef DEBUG |
@@ -567,10 +567,10 @@ void FocusControl::setFocusedWindow(WinClient *client) { | |||
567 | 567 | ||
568 | if (client && client->fbwindow() && !client->fbwindow()->isIconic()) { | 568 | if (client && client->fbwindow() && !client->fbwindow()->isIconic()) { |
569 | // screen should be ok | 569 | // screen should be ok |
570 | s_focused_fbwindow = client->fbwindow(); | 570 | s_focused_fbwindow = client->fbwindow(); |
571 | s_focused_window = client; // update focused window | 571 | s_focused_window = client; // update focused window |
572 | s_expecting_focus = 0; | 572 | s_expecting_focus = 0; |
573 | s_focused_fbwindow->setCurrentClient(*client, | 573 | s_focused_fbwindow->setCurrentClient(*client, |
574 | false); // don't set inputfocus | 574 | false); // don't set inputfocus |
575 | s_focused_fbwindow->setFocusFlag(true); // set focus flag | 575 | s_focused_fbwindow->setFocusFlag(true); // set focus flag |
576 | 576 | ||
@@ -604,9 +604,9 @@ std::string FbTk::Resource<FocusControl::FocusModel>::getString() const { | |||
604 | template<> | 604 | template<> |
605 | void FbTk::Resource<FocusControl::FocusModel>:: | 605 | void FbTk::Resource<FocusControl::FocusModel>:: |
606 | setFromString(char const *strval) { | 606 | setFromString(char const *strval) { |
607 | if (strcasecmp(strval, "MouseFocus") == 0) | 607 | if (strcasecmp(strval, "MouseFocus") == 0) |
608 | m_value = FocusControl::MOUSEFOCUS; | 608 | m_value = FocusControl::MOUSEFOCUS; |
609 | else if (strcasecmp(strval, "ClickToFocus") == 0) | 609 | else if (strcasecmp(strval, "ClickToFocus") == 0) |
610 | m_value = FocusControl::CLICKFOCUS; | 610 | m_value = FocusControl::CLICKFOCUS; |
611 | else | 611 | else |
612 | setDefaultValue(); | 612 | setDefaultValue(); |
@@ -630,9 +630,11 @@ setFromString(char const *strval) { | |||
630 | 630 | ||
631 | if (strcasecmp(strval, "SloppyTabFocus") == 0 ) | 631 | if (strcasecmp(strval, "SloppyTabFocus") == 0 ) |
632 | m_value = FocusControl::MOUSETABFOCUS; | 632 | m_value = FocusControl::MOUSETABFOCUS; |
633 | else if (strcasecmp(strval, "ClickToTabFocus") == 0) | 633 | else if (strcasecmp(strval, "ClickToTabFocus") == 0) |
634 | m_value = FocusControl::CLICKTABFOCUS; | 634 | m_value = FocusControl::CLICKTABFOCUS; |
635 | else | 635 | else |
636 | setDefaultValue(); | 636 | setDefaultValue(); |
637 | } | 637 | } |
638 | |||
638 | } // end namespace FbTk | 639 | } // end namespace FbTk |
640 | |||