44
55#include < oleacc.h>
66
7- #include < functional>
87#include < memory>
98#include < optional>
109#include < string>
1110#include < string_view>
12- #include < thread>
1311#include < vector>
1412
1513#include " config.h"
@@ -495,8 +493,8 @@ bool IsOnNewTab(const NodePtr& top) {
495493// Whether the mouse is on a bookmark.
496494bool IsOnBookmark (HWND hwnd, POINT pt) {
497495 bool flag = false ;
498- std::function< bool ( const NodePtr&)> LambdaEnumChild =
499- [&pt, &flag, &LambdaEnumChild]( const NodePtr& child) -> bool {
496+ auto find_bookmark = [&pt, &flag]( this auto && self,
497+ const NodePtr& child) -> bool {
500498 auto role = GetAccessibleRole (child);
501499 if (role == ROLE_SYSTEM_PUSHBUTTON || role == ROLE_SYSTEM_MENUITEM) {
502500 bool is_in_rect = false ;
@@ -517,19 +515,19 @@ bool IsOnBookmark(HWND hwnd, POINT pt) {
517515 }
518516 }
519517 // traverse the child nodes.
520- TraversalAccessible (child, LambdaEnumChild );
518+ TraversalAccessible (child, self );
521519 return flag;
522520 };
523521 // Start traversing.
524- TraversalAccessible (GetChromeWidgetWin (hwnd), LambdaEnumChild );
522+ TraversalAccessible (GetChromeWidgetWin (hwnd), find_bookmark );
525523 return flag;
526524}
527525
528526// Expanded drop-down list in the address bar
529527bool IsOnExpandedList (HWND hwnd, POINT pt) {
530528 bool flag = false ;
531- std::function< bool ( const NodePtr&)> LambdaEnumChild =
532- [&pt, &flag, &LambdaEnumChild]( const NodePtr& child) -> bool {
529+ auto find_drop_down_list = [&pt, &flag]( this auto && self,
530+ const NodePtr& child) -> bool {
533531 if (GetAccessibleRole (child) == ROLE_SYSTEM_LIST &&
534532 (GetAccessibleState (child) & STATE_SYSTEM_EXPANDED)) {
535533 GetAccessibleSize (child, [&flag, &pt](RECT rect) {
@@ -541,10 +539,10 @@ bool IsOnExpandedList(HWND hwnd, POINT pt) {
541539 return true ;
542540 }
543541 }
544- TraversalAccessible (child, LambdaEnumChild );
542+ TraversalAccessible (child, self );
545543 return flag;
546544 };
547- TraversalAccessible (GetChromeWidgetWin (hwnd), LambdaEnumChild );
545+ TraversalAccessible (GetChromeWidgetWin (hwnd), find_drop_down_list );
548546 return flag;
549547}
550548
@@ -554,27 +552,26 @@ bool IsOmniboxFocus(const NodePtr& top) {
554552 }
555553
556554 bool is_focused = false ;
557- std::function< bool ( const NodePtr&)> find_focused =
558- [&is_focused, &find_focused]( const NodePtr& node) -> bool {
555+ auto find_focused = [&is_focused]( this auto && self,
556+ const NodePtr& node) -> bool {
559557 if (GetAccessibleRole (node) == ROLE_SYSTEM_TEXT &&
560558 (GetAccessibleState (node) & STATE_SYSTEM_FOCUSED)) {
561559 is_focused = true ;
562560 return true ;
563561 }
564- TraversalAccessible (node, find_focused , false );
562+ TraversalAccessible (node, self , false );
565563 return is_focused;
566564 };
567565
568- std::function<bool (const NodePtr&)> find_toolbar =
569- [&](const NodePtr& node) -> bool {
566+ auto find_toolbar = [&](this auto && self, const NodePtr& node) -> bool {
570567 if (GetAccessibleRole (node) == ROLE_SYSTEM_TOOLBAR) {
571568 find_focused (node);
572569 if (is_focused) {
573570 return true ;
574571 }
575572 return false ;
576573 }
577- TraversalAccessible (node, find_toolbar , false );
574+ TraversalAccessible (node, self , false );
578575
579576 return is_focused;
580577 };
@@ -590,8 +587,7 @@ bool IsOnCloseButton(const NodePtr& top, POINT pt) {
590587 }
591588
592589 bool found = false ;
593- std::function<bool (const NodePtr&)> find_hit_button =
594- [&](const NodePtr& node) -> bool {
590+ auto find_hit_button = [&](this auto && self, const NodePtr& node) -> bool {
595591 if (GetAccessibleRole (node) == ROLE_SYSTEM_PUSHBUTTON) {
596592 GetAccessibleSize (node, [&](RECT rect) {
597593 if (PtInRect (&rect, pt)) {
@@ -602,10 +598,10 @@ bool IsOnCloseButton(const NodePtr& top, POINT pt) {
602598 return true ;
603599 }
604600 }
605- TraversalAccessible (node, find_hit_button );
601+ TraversalAccessible (node, self );
606602 return found;
607603 };
608- find_hit_button (top);
604+ TraversalAccessible (top, find_hit_button, false );
609605 return found;
610606}
611607
@@ -625,14 +621,14 @@ bool IsOnFindBarPane(POINT pt) {
625621 // └─ PANE
626622 // └─ PANE
627623 // └─ TEXT (focused, the input field of find-in-page bar)
628- std::function< bool ( const NodePtr&)> find_focused =
629- [&text_element, &find_focused]( const NodePtr& node) -> bool {
624+ auto find_focused = [&text_element]( this auto && self,
625+ const NodePtr& node) -> bool {
630626 if (GetAccessibleRole (node) == ROLE_SYSTEM_TEXT &&
631627 (GetAccessibleState (node) & STATE_SYSTEM_FOCUSED)) {
632628 text_element = node;
633629 return true ;
634630 }
635- TraversalAccessible (node, find_focused , false );
631+ TraversalAccessible (node, self , false );
636632 return text_element != nullptr ;
637633 };
638634 TraversalAccessible (root, find_focused, false );
0 commit comments