From 294c08bb03fa63c0e3da981fee6998abe64ad34f Mon Sep 17 00:00:00 2001 From: Ansariel Date: Tue, 25 Oct 2016 15:30:07 +0200 Subject: [PATCH] Focus search field in web search after switching from a different search tab --- indra/newview/fsfloatersearch.cpp | 24 +++++++++++++++++++++--- indra/newview/fsfloatersearch.h | 6 +++++- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/indra/newview/fsfloatersearch.cpp b/indra/newview/fsfloatersearch.cpp index eac4b5a404..f98e275d35 100644 --- a/indra/newview/fsfloatersearch.cpp +++ b/indra/newview/fsfloatersearch.cpp @@ -315,16 +315,22 @@ BOOL FSFloaterSearch::postBuild() mDetailMaturity = getChild("maturity_icon"); mTabContainer = getChild("ls_tabs"); if (mTabContainer) + { mTabContainer->setCommitCallback(boost::bind(&FSFloaterSearch::onTabChange, this)); + } flushDetails(); if (mDetailsPanel) + { mDetailsPanel->setVisible(false); + } mHasSelection = false; if (!mTabContainer->selectTab(gSavedSettings.getS32("FSLastSearchTab"))) + { mTabContainer->selectFirstTab(); + } return TRUE; } @@ -333,9 +339,10 @@ void FSFloaterSearch::onTabChange() { LLPanel* active_panel = mTabContainer->getCurrentPanel(); - if(active_panel == mPanelWeb) + if (active_panel == mPanelWeb) { mDetailsPanel->setVisible(false); + mPanelWeb->resetFocusOnLoad(); } else { @@ -2664,6 +2671,7 @@ static LLPanelInjector t_panel_fs_search_web("panel_ls_web"); FSPanelSearchWeb::FSPanelSearchWeb() : FSSearchPanelBase() , mWebBrowser(NULL) +, mResetFocusOnLoad(false) { // declare a map that transforms a category name into // the URL suffix that is used to search that category @@ -2681,8 +2689,7 @@ FSPanelSearchWeb::FSPanelSearchWeb() : FSSearchPanelBase() BOOL FSPanelSearchWeb::postBuild() { mWebBrowser = getChild("search_browser"); - if (mWebBrowser) mWebBrowser->addObserver(this); - return TRUE; + return TRUE; } void FSPanelSearchWeb::loadURL(const SearchQuery &p) @@ -2750,6 +2757,17 @@ void FSPanelSearchWeb::focusDefaultElement() mWebBrowser->setFocus(TRUE); } +void FSPanelSearchWeb::draw() +{ + if (mResetFocusOnLoad) + { + focusDefaultElement(); + mResetFocusOnLoad = false; + } + + FSSearchPanelBase::draw(); +} + //////////////////////////////////////// // Local functions // //////////////////////////////////////// diff --git a/indra/newview/fsfloatersearch.h b/indra/newview/fsfloatersearch.h index 0cb429c6a4..88baf70468 100644 --- a/indra/newview/fsfloatersearch.h +++ b/indra/newview/fsfloatersearch.h @@ -299,7 +299,7 @@ private: LLRadioGroup* mEventsMode; }; -class FSPanelSearchWeb : public FSSearchPanelBase, public LLViewerMediaObserver +class FSPanelSearchWeb : public FSSearchPanelBase { LOG_CLASS(FSFloaterSearch); public: @@ -307,12 +307,16 @@ public: /*virtual*/ BOOL postBuild(); void loadURL(const SearchQuery &query); /*virtual*/ void focusDefaultElement(); + /*virtual*/ void draw(); + void resetFocusOnLoad() { mResetFocusOnLoad = true; } private: virtual ~FSPanelSearchWeb() {}; LLMediaCtrl* mWebBrowser; LLSD mCategoryPaths; + + bool mResetFocusOnLoad; }; class FSFloaterSearch : public LLFloater