diff options
23 files changed, 289 insertions, 387 deletions
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 62af812971..f2aec208a1 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -393,6 +393,7 @@ set(viewer_SOURCE_FILES      llmaniprotate.cpp      llmanipscale.cpp      llmaniptranslate.cpp +    llfloatermarketplace.cpp      llmarketplacefunctions.cpp      llmarketplacenotifications.cpp      llmaterialeditor.cpp @@ -930,6 +931,7 @@ set(viewer_HEADER_FILES      llfloaterlinkreplace.h      llfloaterloadprefpreset.h      llfloatermap.h +    llfloatermarketplace.h      llfloatermarketplacelistings.h      llfloatermediasettings.h      llfloatermemleak.h diff --git a/indra/newview/llfloatermarketplace.cpp b/indra/newview/llfloatermarketplace.cpp new file mode 100644 index 0000000000..889daf84ab --- /dev/null +++ b/indra/newview/llfloatermarketplace.cpp @@ -0,0 +1,47 @@ +/** + * @file llfloatermarketplace.cpp + * @brief floater for the Marketplace web site + * + * $LicenseInfo:firstyear=2011&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2011, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA + * $/LicenseInfo$ + */ + +#include "llviewerprecompiledheaders.h" + +#include "llfloatermarketplace.h" +#include "lluictrlfactory.h" + +LLFloaterMarketplace::LLFloaterMarketplace(const LLSD& key) +    :   LLFloater(key) +{ +} + +LLFloaterMarketplace::~LLFloaterMarketplace() +{ +} + +bool LLFloaterMarketplace::postBuild() +{ +    enableResizeCtrls(true, true, false); +    return true; +} + + diff --git a/indra/newview/llfloatermarketplace.h b/indra/newview/llfloatermarketplace.h new file mode 100644 index 0000000000..2ae4d0d64a --- /dev/null +++ b/indra/newview/llfloatermarketplace.h @@ -0,0 +1,40 @@ +/** + * @file llfloatermarketplace.h + * @brief floater for the Marketplace web site + * + * $LicenseInfo:firstyear=2011&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2011, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA + * $/LicenseInfo$ + */ + +#pragma once + +#include "llfloater.h" + +class LLFloaterMarketplace: +    public LLFloater +{ +    friend class LLFloaterReg; +private: +    LLFloaterMarketplace(const LLSD& key); +    ~LLFloaterMarketplace(); +    bool postBuild() override; +}; + diff --git a/indra/newview/llfloatersearch.cpp b/indra/newview/llfloatersearch.cpp index d3c8bf3451..9762154a26 100644 --- a/indra/newview/llfloatersearch.cpp +++ b/indra/newview/llfloatersearch.cpp @@ -1,11 +1,10 @@  /**   * @file llfloatersearch.cpp - * @author Martin Reddy - * @brief Search floater - uses an embedded web browser control + * @brief Floater for Search (update 2025, preload)   * - * $LicenseInfo:firstyear=2009&license=viewerlgpl$ + * $LicenseInfo:firstyear=2011&license=viewerlgpl$   * Second Life Viewer Source Code - * Copyright (C) 2010, Linden Research, Inc. + * Copyright (C) 2011, Linden Research, Inc.   *   * This library is free software; you can redistribute it and/or   * modify it under the terms of the GNU Lesser General Public @@ -27,68 +26,34 @@  #include "llviewerprecompiledheaders.h" +#include "llfloatersearch.h" + +#include "llagent.h"  #include "llcommandhandler.h"  #include "llfloaterreg.h" -#include "llfloatersearch.h" -#include "llhttpconstants.h"  #include "llmediactrl.h" -#include "llnotificationsutil.h" -#include "lllogininstance.h" -#include "lluri.h" -#include "llagent.h" -#include "llui.h" +#include "lluictrlfactory.h"  #include "llviewercontrol.h"  #include "llweb.h"  // support secondlife:///app/search/{CATEGORY}/{QUERY} SLapps -class LLSearchHandler : public LLCommandHandler -{ -public: -    // requires trusted browser to trigger -    LLSearchHandler() : LLCommandHandler("search", UNTRUSTED_CLICK_ONLY) { } -    bool handle(const LLSD& tokens, const LLSD& query_map, const std::string& grid, LLMediaCtrl* web) -    { -        const size_t parts = tokens.size(); - -        // get the (optional) category for the search -        std::string collection; -        if (parts > 0) -        { -            collection = tokens[0].asString(); +class LLSearchHandler : public LLCommandHandler { +    public: +        // requires trusted browser to trigger +        LLSearchHandler() : LLCommandHandler("search", UNTRUSTED_CLICK_ONLY) { } +        bool handle(const LLSD& tokens, const LLSD& query_map, const std::string& grid, LLMediaCtrl* web) { +            const size_t parts = tokens.size(); + +            // open the search floater and perform the requested search +            LLFloaterReg::showInstance("search", tokens); +            return true;          } - -        // get the (optional) search string -        std::string search_text; -        if (parts > 1) -        { -            search_text = tokens[1].asString(); -        } - -        // create the LLSD arguments for the search floater -        LLFloaterSearch::Params p; -        p.search.collection = collection; -        p.search.query = LLURI::unescape(search_text); - -        // open the search floater and perform the requested search -        LLFloaterReg::showInstance("search", p); -        return true; -    }  };  LLSearchHandler gSearchHandler; -LLFloaterSearch::SearchQuery::SearchQuery() -:   category("category", ""), -    collection("collection", ""), -    query("query") -{} - -LLFloaterSearch::LLFloaterSearch(const Params& key) : -    LLFloaterWebContent(key), -    mSearchGodLevel(0) +LLFloaterSearch::LLFloaterSearch(const LLSD& key) +    : LLFloater(key)  { -    // declare a map that transforms a category name into -    // the URL suffix that is used to search that category -      mSearchType.insert("standard");      mSearchType.insert("land");      mSearchType.insert("classified"); @@ -100,76 +65,61 @@ LLFloaterSearch::LLFloaterSearch(const Params& key) :      mCollectionType.insert("people");  } -bool LLFloaterSearch::postBuild() +LLFloaterSearch::~LLFloaterSearch()  { -    LLFloaterWebContent::postBuild(); -    mWebBrowser->addObserver(this); - -    return true;  } -void LLFloaterSearch::onOpen(const LLSD& key) +void LLFloaterSearch::onOpen(const LLSD& tokens)  { -    Params p(key); -    p.trusted_content = true; -    p.allow_address_entry = false; - -    LLFloaterWebContent::onOpen(p); -    mWebBrowser->setFocus(true); -    search(p.search); +    initiateSearch(tokens);  } -void LLFloaterSearch::onClose(bool app_quitting) +void LLFloaterSearch::initiateSearch(const LLSD& tokens)  { -    LLFloaterWebContent::onClose(app_quitting); -    // tear down the web view so we don't show the previous search -    // result when the floater is opened next time -    destroy(); -} +    std::string url = gSavedSettings.getString("SearchURL"); -void LLFloaterSearch::godLevelChanged(U8 godlevel) -{ -    // search results can change based upon god level - if the user -    // changes god level, then give them a warning (we don't refresh -    // the search as this might undo any page navigation or -    // AJAX-driven changes since the last search). +    LLSD subs; -    //FIXME: set status bar text +    // Setting this substitution here results in a full set of collections being +    // substituted into the final URL using the logic from the original search. +    subs["TYPE"] = "standard"; -    //getChildView("refresh_search")->setVisible( (godlevel != mSearchGodLevel)); -} +    const size_t parts = tokens.size(); -void LLFloaterSearch::search(const SearchQuery &p) -{ -    if (! mWebBrowser || !p.validateBlock()) +    // get the (optional) category for the search +    std::string collection; +    if (parts > 0)      { -        return; +        collection = tokens[0].asString();      } -    // reset the god level warning as we're sending the latest state -    getChildView("refresh_search")->setVisible(false); -    mSearchGodLevel = gAgent.getGodLevel(); +    // get the (optional) search string +    std::string search_text; +    if (parts > 1) +    { +        search_text = tokens[1].asString(); +    } -    // work out the subdir to use based on the requested category -    LLSD subs; -    if (mSearchType.find(p.category) != mSearchType.end()) +    // TODO: where does category get set? I cannot find a reference to +    // it in internal docs - might be conflated with values in mSearchType +    std::string category; +    if (mSearchType.find(category) != mSearchType.end())      { -        subs["TYPE"] = p.category; +        subs["TYPE"] = category;      }      else      {          subs["TYPE"] = "standard";      } -    // add the search query string -    subs["QUERY"] = LLURI::escape(p.query); +    subs["QUERY"] = LLURI::escape(search_text);      subs["COLLECTION"] = "";      if (subs["TYPE"] == "standard")      { -        if (mCollectionType.find(p.collection) != mCollectionType.end()) +        if (mCollectionType.find(collection) != mCollectionType.end())          { -            subs["COLLECTION"] = "&collection_chosen=" + std::string(p.collection); +            subs["COLLECTION"] = "&collection_chosen=" + std::string(collection);          }          else          { @@ -182,30 +132,41 @@ void LLFloaterSearch::search(const SearchQuery &p)          }      } -    // add the user's preferred maturity (can be changed via prefs) -    std::string maturity; +    // Default to PG +    std::string maturity = "g";      if (gAgent.prefersAdult())      { -        maturity = "gma";  // PG,Mature,Adult +        // PG,Mature,Adult +        maturity = "gma";      }      else if (gAgent.prefersMature())      { -        maturity = "gm";  // PG,Mature -    } -    else -    { -        maturity = "g";  // PG +        // PG,Mature +        maturity = "gm";      }      subs["MATURITY"] = maturity; -    // add the user's god status +    // God status      subs["GODLIKE"] = gAgent.isGodlike() ? "1" : "0"; -    // get the search URL and expand all of the substitutions -    // (also adds things like [LANGUAGE], [VERSION], [OS], etc.) -    std::string url = gSavedSettings.getString("SearchURL"); +    // This call expands a set of generic substitutions like language, viewer version +    // etc. and then also does the same with the list of subs passed in.      url = LLWeb::expandURLSubstitutions(url, subs); -    // and load the URL in the web view -    mWebBrowser->navigateTo(url, HTTP_CONTENT_TEXT_HTML); +    // Naviation to the calculated URL - we know it's HTML so we can +    // tell the media system not to bother with the MIME type check. +    LLMediaCtrl* search_browser = findChild<LLMediaCtrl>("search_contents"); +    search_browser->navigateTo(url, HTTP_CONTENT_TEXT_HTML); +} + +bool LLFloaterSearch::postBuild() +{ +    enableResizeCtrls(true, true, false); + +    // This call is actioned by the preload code in llViewerWindow +    // that creates the search floater during the login process +    // using a generic search with no query +    initiateSearch(LLSD()); + +    return true;  } diff --git a/indra/newview/llfloatersearch.h b/indra/newview/llfloatersearch.h index beaac2ad2f..e8a2be4797 100644 --- a/indra/newview/llfloatersearch.h +++ b/indra/newview/llfloatersearch.h @@ -1,11 +1,10 @@  /**   * @file llfloatersearch.h - * @author Martin Reddy - * @brief Search floater - uses an embedded web browser control + * @brief Floater for Search (update 2025, preload)   * - * $LicenseInfo:firstyear=2009&license=viewerlgpl$ + * $LicenseInfo:firstyear=2011&license=viewerlgpl$   * Second Life Viewer Source Code - * Copyright (C) 2010, Linden Research, Inc. + * Copyright (C) 2011, Linden Research, Inc.   *   * This library is free software; you can redistribute it and/or   * modify it under the terms of the GNU Lesser General Public @@ -25,70 +24,23 @@   * $/LicenseInfo$   */ -#ifndef LL_LLFLOATERSEARCH_H -#define LL_LLFLOATERSEARCH_H +#pragma once -#include "llfloaterwebcontent.h" -#include "llviewermediaobserver.h" +#include "llfloater.h" -#include <string> +class LLFloaterSearch: +    public LLFloater { +        friend class LLFloaterReg; -class LLMediaCtrl; +    public: +        void onOpen(const LLSD& key) override; -/// -/// The search floater allows users to perform all search operations. -/// All search functionality is now implemented via web services and -/// so this floater simply embeds a web view and displays the search -/// web page. The browser control is explicitly marked as "trusted" -/// so that the user can click on teleport links in search results. -/// -class LLFloaterSearch : -    public LLFloaterWebContent -{ -public: -    struct SearchQuery : public LLInitParam::Block<SearchQuery> -    { -        Optional<std::string> category; -        Optional<std::string> collection; -        Optional<std::string> query; +    private: +        LLFloaterSearch(const LLSD& key); +        ~LLFloaterSearch(); +        void initiateSearch(const LLSD& tokens); +        bool postBuild() override; -        SearchQuery(); -    }; - -    struct _Params : public LLInitParam::Block<_Params, LLFloaterWebContent::Params> -    { -        Optional<SearchQuery> search; -    }; - -    typedef LLSDParamAdapter<_Params> Params; - -    LLFloaterSearch(const Params& key); - -    /// show the search floater with a new search -    /// see search() for details on the key parameter. -    /*virtual*/ void onOpen(const LLSD& key); - -    /*virtual*/ void onClose(bool app_quitting); - -    /// perform a search with the specific search term. -    /// The key should be a map that can contain the following keys: -    ///  - "id": specifies the text phrase to search for -    ///  - "category": one of "all" (default), "people", "places", -    ///    "events", "groups", "wiki", "destinations", "classifieds" -    void search(const SearchQuery &query); - -    /// changing godmode can affect the search results that are -    /// returned by the search website - use this method to tell the -    /// search floater that the user has changed god level. -    void godLevelChanged(U8 godlevel); - -private: -    /*virtual*/ bool postBuild(); - -    std::set<std::string> mSearchType; -    std::set<std::string> mCollectionType; -    U8          mSearchGodLevel; +        std::set<std::string> mSearchType; +        std::set<std::string> mCollectionType;  }; - -#endif  // LL_LLFLOATERSEARCH_H - diff --git a/indra/newview/llstatusbar.cpp b/indra/newview/llstatusbar.cpp index bb93e2e79e..82c959d7f7 100644 --- a/indra/newview/llstatusbar.cpp +++ b/indra/newview/llstatusbar.cpp @@ -161,7 +161,8 @@ bool LLStatusBar::postBuild()      getChild<LLUICtrl>("buyL")->setCommitCallback(          boost::bind(&LLStatusBar::onClickBuyCurrency, this)); -    getChild<LLUICtrl>("goShop")->setCommitCallback(boost::bind(&LLWeb::loadURL, gSavedSettings.getString("MarketplaceURL"), LLStringUtil::null, LLStringUtil::null)); +    getChild<LLUICtrl>("goShop")->setCommitCallback( +        boost::bind(&LLStatusBar::onClickShop, this));      mBoxBalance = getChild<LLTextBox>("balance");      mBoxBalance->setClickedCallback(&LLStatusBar::onClickRefreshBalance, this); @@ -520,6 +521,11 @@ void LLStatusBar::onClickBuyCurrency()      LLFirstUse::receiveLindens(false);  } +void LLStatusBar::onClickShop() +{ +    LLFloaterReg::toggleInstanceOrBringToFront("marketplace"); +} +  void LLStatusBar::onMouseEnterPresetsCamera()  {      LLView* popup_holder = gViewerWindow->getRootView()->getChildView("popup_holder"); diff --git a/indra/newview/llstatusbar.h b/indra/newview/llstatusbar.h index a8fc621ff8..eb4ca8e894 100644 --- a/indra/newview/llstatusbar.h +++ b/indra/newview/llstatusbar.h @@ -101,6 +101,7 @@ public:  private:      void onClickBuyCurrency(); +    void onClickShop();      void onVolumeChanged(const LLSD& newvalue);      void onVoiceChanged(const LLSD& newvalue);      void onObscureBalanceChanged(const LLSD& newvalue); diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp index 4b3af6d7e8..3b35ca8db1 100644 --- a/indra/newview/llviewerfloaterreg.cpp +++ b/indra/newview/llviewerfloaterreg.cpp @@ -21,6 +21,7 @@   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA   *   * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA + * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA   * $/LicenseInfo$   */ @@ -98,6 +99,7 @@  #include "llfloaterlinkreplace.h"  #include "llfloaterloadprefpreset.h"  #include "llfloatermap.h" +#include "llfloatermarketplace.h"  #include "llfloatermarketplacelistings.h"  #include "llfloatermediasettings.h"  #include "llfloatermemleak.h" @@ -419,6 +421,7 @@ void LLViewerFloaterReg::registerFloaters()      LLFloaterReg::add("mem_leaking", "floater_mem_leaking.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterMemLeak>);      LLFloaterReg::add("media_settings", "floater_media_settings.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterMediaSettings>); +    LLFloaterReg::add("marketplace", "floater_marketplace.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterMarketplace>);      LLFloaterReg::add("marketplace_listings", "floater_marketplace_listings.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterMarketplaceListings>);      LLFloaterReg::add("marketplace_validation", "floater_marketplace_validation.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterMarketplaceValidation>);      LLFloaterReg::add("message_critical", "floater_critical.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterTOS>); diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp index 82a52e63f6..c6bc252efd 100644 --- a/indra/newview/llviewermedia.cpp +++ b/indra/newview/llviewermedia.cpp @@ -1259,35 +1259,46 @@ void LLViewerMedia::getOpenIDCookieCoro(std::string url)      {          LLAppViewer::instance()->postToMainCoro([=]()              { -                LLMediaCtrl* media_instance = LLFloaterReg::getInstance("destinations")->getChild<LLMediaCtrl>("destination_guide_contents"); -                if (media_instance) +                std::string cookie_host = authority.substr(hostStart, hostEnd - hostStart); +                std::string cookie_name = ""; +                std::string cookie_value = ""; +                std::string cookie_path = ""; +                bool httponly = true; +                bool secure = true; + +                LLViewerMedia* inst = getInstance(); +                if (inst->parseRawCookie(inst->mOpenIDCookie, cookie_name, cookie_value, cookie_path, httponly, secure))                  { -                    LLViewerMedia* inst = getInstance(); -                    std::string cookie_host = authority.substr(hostStart, hostEnd - hostStart); -                    std::string cookie_name = ""; -                    std::string cookie_value = ""; -                    std::string cookie_path = ""; -                    bool httponly = true; -                    bool secure = true; -                    if (inst->parseRawCookie(inst->mOpenIDCookie, cookie_name, cookie_value, cookie_path, httponly, secure) && -                        media_instance->getMediaPlugin()) +                    // MAINT-5711 - inexplicably, the CEF setCookie function will no longer set the cookie if the +                    // url and domain are not the same. This used to be my.sl.com and id.sl.com respectively and worked. +                    // For now, we use the URL for the OpenID POST request since it will have the same authority +                    // as the domain field. +                    // (Feels like there must be a less dirty way to construct a URL from component LLURL parts) +                    // MAINT-6392 - Rider: Do not change, however, the original URI requested, since it is used further +                    // down. +                    std::string cefUrl(std::string(inst->mOpenIDURL.mURI) + "://" + std::string(inst->mOpenIDURL.mAuthority)); + +                    // list of floater names and webbrowser therein to set the cookie that arrived via login into +                    struct MediaCookieInstance { +                        std::string floater_name; +                        std::string browser_name; +                    }; +                    struct MediaCookieInstance media_cookie_instances[] = { +                        {"search", "search_contents" }, +                        {"marketplace", "marketplace_contents" }, +                        {"destinations", "destination_guide_contents" }, +                    }; +                    for (MediaCookieInstance mci : media_cookie_instances)                      { -                        // MAINT-5711 - inexplicably, the CEF setCookie function will no longer set the cookie if the -                        // url and domain are not the same. This used to be my.sl.com and id.sl.com respectively and worked. -                        // For now, we use the URL for the OpenID POST request since it will have the same authority -                        // as the domain field. -                        // (Feels like there must be a less dirty way to construct a URL from component LLURL parts) -                        // MAINT-6392 - Rider: Do not change, however, the original URI requested, since it is used further -                        // down. -                        std::string cefUrl(std::string(inst->mOpenIDURL.mURI) + "://" + std::string(inst->mOpenIDURL.mAuthority)); - -                        media_instance->getMediaPlugin()->setCookie(cefUrl, cookie_name, cookie_value, cookie_host, -                            cookie_path, httponly, secure); - -                        // Now that we have parsed the raw cookie, we must store it so that each new media instance -                        // can also get a copy and faciliate logging into internal SL sites. -                        media_instance->getMediaPlugin()->storeOpenIDCookie(cefUrl, cookie_name, cookie_value, -                            cookie_host, cookie_path, httponly, secure); +                        LLMediaCtrl* media_instance = LLFloaterReg::getInstance(mci.floater_name)->getChild<LLMediaCtrl>(mci.browser_name); +                        if (media_instance && media_instance->getMediaPlugin()) +                        { +                            media_instance->getMediaPlugin()->setCookie(cefUrl, cookie_name, cookie_value, cookie_host, +                                cookie_path, httponly, secure); + +                            media_instance->getMediaPlugin()->storeOpenIDCookie(cefUrl, cookie_name, cookie_value, +                                cookie_host, cookie_path, httponly, secure); +                        }                      }                  }              }); diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 7a8a57c03d..f7688b762f 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -4354,13 +4354,6 @@ void set_god_level(U8 god_level)      // changing god-level can affect which menus we see      show_debug_menus(); - -    // changing god-level can invalidate search results -    LLFloaterSearch *search = dynamic_cast<LLFloaterSearch*>(LLFloaterReg::getInstance("search")); -    if (search) -    { -        search->godLevelChanged(god_level); -    }  }  #ifdef TOGGLE_HACKED_GODLIKE_VIEWER diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index b0408b73ad..0edb7c70ea 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -2309,6 +2309,18 @@ void LLViewerWindow::initWorldUI()              url = LLWeb::expandURLSubstitutions(url, LLSD());              avatar_welcome_pack->navigateTo(url, HTTP_CONTENT_TEXT_HTML);          } +        LLMediaCtrl* search = LLFloaterReg::getInstance("search")->findChild<LLMediaCtrl>("search_contents"); +        if (search) +        { +            search->setErrorPageURL(gSavedSettings.getString("GenericErrorPageURL")); +        } +        LLMediaCtrl* marketplace = LLFloaterReg::getInstance("marketplace")->getChild<LLMediaCtrl>("marketplace_contents"); +        if (marketplace) +        { +            marketplace->setErrorPageURL(gSavedSettings.getString("GenericErrorPageURL")); +            std::string url = gSavedSettings.getString("MarketplaceURL"); +            marketplace->navigateTo(url, HTTP_CONTENT_TEXT_HTML); +        }      }  } diff --git a/indra/newview/skins/default/xui/da/floater_search.xml b/indra/newview/skins/default/xui/da/floater_search.xml deleted file mode 100644 index 80a30b1aa1..0000000000 --- a/indra/newview/skins/default/xui/da/floater_search.xml +++ /dev/null @@ -1,16 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_search" title="FIND"> -	<floater.string name="loading_text"> -		Henter... -	</floater.string> -	<floater.string name="done_text"> -		Færdig -	</floater.string> -	<layout_stack name="stack1"> -		<layout_panel name="browser_layout"> -			<text name="refresh_search"> -				Gentag søgning med "God level" -			</text> -		</layout_panel> -	</layout_stack> -</floater> diff --git a/indra/newview/skins/default/xui/de/floater_search.xml b/indra/newview/skins/default/xui/de/floater_search.xml deleted file mode 100644 index bd39bf2bce..0000000000 --- a/indra/newview/skins/default/xui/de/floater_search.xml +++ /dev/null @@ -1,16 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_search" title=""> -	<floater.string name="loading_text"> -		Wird geladen... -	</floater.string> -	<floater.string name="done_text"> -		Fertig -	</floater.string> -	<layout_stack name="stack1"> -		<layout_panel name="browser_layout"> -			<text name="refresh_search"> -				Suche wiederholen, um aktuellen Gott-Level zu berücksichtigen -			</text> -		</layout_panel> -	</layout_stack> -</floater> diff --git a/indra/newview/skins/default/xui/en/floater_marketplace.xml b/indra/newview/skins/default/xui/en/floater_marketplace.xml new file mode 100644 index 0000000000..2299e02c63 --- /dev/null +++ b/indra/newview/skins/default/xui/en/floater_marketplace.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater + positioning="cascading" + legacy_header_height="225" + can_minimize="true" + can_close="true" + can_resize="true" + min_height="800" + min_width="800" + height="800" + layout="topleft" + name="Marketplace" + single_instance="true" + help_topic="marketplace" + save_rect="true" + save_visibility="true" + title="MARKETPLACE" + width="800"> +    <web_browser +      top="25" +      height="775" +      width="800" +      follows="all" +      name="marketplace_contents" +      trusted_content="true"/> +</floater> diff --git a/indra/newview/skins/default/xui/en/floater_search.xml b/indra/newview/skins/default/xui/en/floater_search.xml index fc1e32915a..76a486e211 100644 --- a/indra/newview/skins/default/xui/en/floater_search.xml +++ b/indra/newview/skins/default/xui/en/floater_search.xml @@ -1,18 +1,26 @@  <?xml version="1.0" encoding="utf-8" standalone="yes"?>  <floater -  positioning="cascading" -  legacy_header_height="18" -  can_resize="true" -  height="775" -  layout="topleft" -  min_height="400" -  min_width="500" -  name="floater_search" -  help_topic="floater_search" -  save_rect="true" -  save_visibility="true" -  title="" -  initial_mime_type="text/html" -  width="780" -  tab_stop="true" -  filename="floater_web_content.xml"/> + positioning="cascading" + legacy_header_height="225" + can_minimize="true" + can_close="true" + can_resize="true" + min_height="800" + min_width="800" + height="800" + layout="topleft" + name="Search" + single_instance="true" + help_topic="search" + save_rect="true" + save_visibility="true" + title="SEARCH" + width="800"> +    <web_browser +      top="25" +      height="775" +      width="800" +      follows="all" +      name="search_contents" +      trusted_content="true"/> +</floater> diff --git a/indra/newview/skins/default/xui/es/floater_search.xml b/indra/newview/skins/default/xui/es/floater_search.xml deleted file mode 100644 index e24d8064a1..0000000000 --- a/indra/newview/skins/default/xui/es/floater_search.xml +++ /dev/null @@ -1,16 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_search" title=""> -	<floater.string name="loading_text"> -		Cargando... -	</floater.string> -	<floater.string name="done_text"> -		Hecho -	</floater.string> -	<layout_stack name="stack1"> -		<layout_panel name="browser_layout"> -			<text name="refresh_search"> -				Redo search to reflect current God level -			</text> -		</layout_panel> -	</layout_stack> -</floater> diff --git a/indra/newview/skins/default/xui/fr/floater_search.xml b/indra/newview/skins/default/xui/fr/floater_search.xml deleted file mode 100644 index 32800182ea..0000000000 --- a/indra/newview/skins/default/xui/fr/floater_search.xml +++ /dev/null @@ -1,16 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_search" title=""> -	<floater.string name="loading_text"> -		Chargement... -	</floater.string> -	<floater.string name="done_text"> -		Terminé -	</floater.string> -	<layout_stack name="stack1"> -		<layout_panel name="browser_layout"> -			<text name="refresh_search"> -				Relancer la recherche pour refléter le niveau divin actuel -			</text> -		</layout_panel> -	</layout_stack> -</floater> diff --git a/indra/newview/skins/default/xui/it/floater_search.xml b/indra/newview/skins/default/xui/it/floater_search.xml deleted file mode 100644 index ac3dc17aa3..0000000000 --- a/indra/newview/skins/default/xui/it/floater_search.xml +++ /dev/null @@ -1,16 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_search" title=""> -	<floater.string name="loading_text"> -		Caricamento in corso... -	</floater.string> -	<floater.string name="done_text"> -		Fine -	</floater.string> -	<layout_stack name="stack1"> -		<layout_panel name="browser_layout"> -			<text name="refresh_search"> -				Ripeti ricerca in modo che rifletta il livello di diritti Admin attuale -			</text> -		</layout_panel> -	</layout_stack> -</floater> diff --git a/indra/newview/skins/default/xui/ja/floater_search.xml b/indra/newview/skins/default/xui/ja/floater_search.xml deleted file mode 100644 index 531ac77f95..0000000000 --- a/indra/newview/skins/default/xui/ja/floater_search.xml +++ /dev/null @@ -1,16 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_search" title=""> -	<floater.string name="loading_text"> -		読み込んでいます…。 -	</floater.string> -	<floater.string name="done_text"> -		完了 -	</floater.string> -	<layout_stack name="stack1"> -		<layout_panel name="browser_layout"> -			<text name="refresh_search"> -				現在のゴッドレベルに反映させるため、検索をやり直してください。 -			</text> -		</layout_panel> -	</layout_stack> -</floater> diff --git a/indra/newview/skins/default/xui/pt/floater_search.xml b/indra/newview/skins/default/xui/pt/floater_search.xml deleted file mode 100644 index 3509cb786d..0000000000 --- a/indra/newview/skins/default/xui/pt/floater_search.xml +++ /dev/null @@ -1,16 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_search" title=""> -	<floater.string name="loading_text"> -		Carregando... -	</floater.string> -	<floater.string name="done_text"> -		Pronto -	</floater.string> -	<layout_stack name="stack1"> -		<layout_panel name="browser_layout"> -			<text name="refresh_search"> -				Buscar novamente com status God -			</text> -		</layout_panel> -	</layout_stack> -</floater> diff --git a/indra/newview/skins/default/xui/ru/floater_search.xml b/indra/newview/skins/default/xui/ru/floater_search.xml deleted file mode 100644 index 405a6598ac..0000000000 --- a/indra/newview/skins/default/xui/ru/floater_search.xml +++ /dev/null @@ -1,16 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_search" title=""> -	<floater.string name="loading_text"> -		Загрузка... -	</floater.string> -	<floater.string name="done_text"> -		Готово -	</floater.string> -	<layout_stack name="stack1"> -		<layout_panel name="browser_layout"> -			<text name="refresh_search"> -				Повторить поиск, чтобы показать текущий уровень творца -			</text> -		</layout_panel> -	</layout_stack> -</floater> diff --git a/indra/newview/skins/default/xui/tr/floater_search.xml b/indra/newview/skins/default/xui/tr/floater_search.xml deleted file mode 100644 index 08c1e5162c..0000000000 --- a/indra/newview/skins/default/xui/tr/floater_search.xml +++ /dev/null @@ -1,16 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_search" title=""> -	<floater.string name="loading_text"> -		Yükleniyor... -	</floater.string> -	<floater.string name="done_text"> -		Tamamlandı -	</floater.string> -	<layout_stack name="stack1"> -		<layout_panel name="browser_layout"> -			<text name="refresh_search"> -				Mevcut Yönetici seviyesini dikkate alarak aramayı yenile -			</text> -		</layout_panel> -	</layout_stack> -</floater> diff --git a/indra/newview/skins/default/xui/zh/floater_search.xml b/indra/newview/skins/default/xui/zh/floater_search.xml deleted file mode 100644 index 3e85a529ae..0000000000 --- a/indra/newview/skins/default/xui/zh/floater_search.xml +++ /dev/null @@ -1,16 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_search" title=""> -	<floater.string name="loading_text"> -		載入中... -	</floater.string> -	<floater.string name="done_text"> -		完成 -	</floater.string> -	<layout_stack name="stack1"> -		<layout_panel name="browser_layout"> -			<text name="refresh_search"> -				以目前具備的神階級再搜尋一次 -			</text> -		</layout_panel> -	</layout_stack> -</floater>  | 
