Merge branch 'develop' of https://github.com/secondlife/viewer
# Conflicts: # indra/newview/llfloatersearch.cpp # indra/newview/llstatusbar.cpp # indra/newview/lltextureview.cpp # indra/newview/llviewerwindow.cpp # indra/newview/skins/default/xui/en/floater_search.xmlmaster
commit
950fa11bcb
|
|
@ -50,7 +50,7 @@ static const U32 DEFAULT_POOL_SIZE = 5;
|
|||
// SL-14399: When we teleport to a brand-new simulator, the coprocedure queue
|
||||
// gets absolutely slammed with fetch requests. Make this queue effectively
|
||||
// unlimited.
|
||||
const U32 LLCoprocedureManager::DEFAULT_QUEUE_SIZE = 1024*1024;
|
||||
const U32 LLCoprocedureManager::DEFAULT_QUEUE_SIZE = 1024*512;
|
||||
|
||||
//=========================================================================
|
||||
class LLCoprocedurePool: private boost::noncopyable
|
||||
|
|
@ -58,7 +58,7 @@ class LLCoprocedurePool: private boost::noncopyable
|
|||
public:
|
||||
typedef LLCoprocedureManager::CoProcedure_t CoProcedure_t;
|
||||
|
||||
LLCoprocedurePool(const std::string &name, size_t size);
|
||||
LLCoprocedurePool(const std::string &name, size_t size, size_t queue_size);
|
||||
~LLCoprocedurePool();
|
||||
|
||||
/// Places the coprocedure on the queue for processing.
|
||||
|
|
@ -118,7 +118,7 @@ private:
|
|||
typedef std::shared_ptr<CoprocQueue_t> CoprocQueuePtr;
|
||||
|
||||
std::string mPoolName;
|
||||
size_t mPoolSize, mActiveCoprocsCount, mPending;
|
||||
size_t mPoolSize, mQueueSize, mActiveCoprocsCount, mPending;
|
||||
CoprocQueuePtr mPendingCoprocs;
|
||||
LLTempBoundListener mStatusListener;
|
||||
|
||||
|
|
@ -141,7 +141,7 @@ LLCoprocedureManager::~LLCoprocedureManager()
|
|||
close();
|
||||
}
|
||||
|
||||
void LLCoprocedureManager::initializePool(const std::string &poolName)
|
||||
void LLCoprocedureManager::initializePool(const std::string &poolName, size_t queue_size)
|
||||
{
|
||||
poolMap_t::iterator it = mPoolMap.find(poolName);
|
||||
|
||||
|
|
@ -180,7 +180,7 @@ void LLCoprocedureManager::initializePool(const std::string &poolName)
|
|||
LL_WARNS("CoProcMgr") << "LLCoprocedureManager: No setting for \"" << keyName << "\" setting pool size to default of " << size << LL_ENDL;
|
||||
}
|
||||
|
||||
poolPtr_t pool(new LLCoprocedurePool(poolName, size));
|
||||
poolPtr_t pool(new LLCoprocedurePool(poolName, size, queue_size));
|
||||
LL_ERRS_IF(!pool, "CoprocedureManager") << "Unable to create pool named \"" << poolName << "\" FATAL!" << LL_ENDL;
|
||||
|
||||
bool inserted = mPoolMap.emplace(poolName, pool).second;
|
||||
|
|
@ -212,7 +212,8 @@ void LLCoprocedureManager::setPropertyMethods(SettingQuery_t queryfn, SettingUpd
|
|||
mPropertyQueryFn = queryfn;
|
||||
mPropertyDefineFn = updatefn;
|
||||
|
||||
initializePool("Upload");
|
||||
constexpr size_t UPLOAD_QUEUE_SIZE = 2048;
|
||||
initializePool("Upload", UPLOAD_QUEUE_SIZE);
|
||||
initializePool("AIS"); // it might be better to have some kind of on-demand initialization for AIS
|
||||
// "ExpCache" pool gets initialized in LLExperienceCache
|
||||
// asset storage pool gets initialized in LLViewerAssetStorage
|
||||
|
|
@ -296,17 +297,19 @@ void LLCoprocedureManager::close(const std::string &pool)
|
|||
}
|
||||
|
||||
//=========================================================================
|
||||
LLCoprocedurePool::LLCoprocedurePool(const std::string &poolName, size_t size):
|
||||
LLCoprocedurePool::LLCoprocedurePool(const std::string &poolName, size_t size, size_t queue_size):
|
||||
mPoolName(poolName),
|
||||
mPoolSize(size),
|
||||
mQueueSize(queue_size),
|
||||
mActiveCoprocsCount(0),
|
||||
mPending(0),
|
||||
mHTTPPolicy(LLCore::HttpRequest::DEFAULT_POLICY_ID),
|
||||
mCoroMapping()
|
||||
{
|
||||
llassert_always(mQueueSize > mPoolSize); // queue should be able to fit pool
|
||||
try
|
||||
{
|
||||
mPendingCoprocs = std::make_shared<CoprocQueue_t>(LLCoprocedureManager::DEFAULT_QUEUE_SIZE);
|
||||
mPendingCoprocs = std::make_shared<CoprocQueue_t>(mQueueSize);
|
||||
// store in our LLTempBoundListener so that when the LLCoprocedurePool is
|
||||
// destroyed, we implicitly disconnect from this LLEventPump
|
||||
// Monitores application status
|
||||
|
|
@ -357,7 +360,7 @@ LLCoprocedurePool::LLCoprocedurePool(const std::string &poolName, size_t size):
|
|||
mCoroMapping.insert(CoroAdapterMap_t::value_type(pooledCoro, httpAdapter));
|
||||
}
|
||||
|
||||
LL_INFOS("CoProcMgr") << "Created coprocedure pool named \"" << mPoolName << "\" with " << size << " items, queue max " << LLCoprocedureManager::DEFAULT_QUEUE_SIZE << LL_ENDL;
|
||||
LL_INFOS("CoProcMgr") << "Created coprocedure pool named \"" << mPoolName << "\" with " << size << " items, queue max " << mQueueSize << LL_ENDL;
|
||||
}
|
||||
|
||||
LLCoprocedurePool::~LLCoprocedurePool()
|
||||
|
|
@ -376,7 +379,7 @@ LLUUID LLCoprocedurePool::enqueueCoprocedure(const std::string &name, LLCoproced
|
|||
<< "\" at "
|
||||
<< mPending << LL_ENDL;
|
||||
|
||||
if (mPending >= (LLCoprocedureManager::DEFAULT_QUEUE_SIZE - 1))
|
||||
if (mPending >= (mQueueSize - 1))
|
||||
{
|
||||
// If it's all used up (not supposed to happen,
|
||||
// fetched should cap it), we are going to crash
|
||||
|
|
|
|||
|
|
@ -79,7 +79,7 @@ public:
|
|||
void close();
|
||||
void close(const std::string &pool);
|
||||
|
||||
void initializePool(const std::string &poolName);
|
||||
void initializePool(const std::string &poolName, size_t queue_size = DEFAULT_QUEUE_SIZE);
|
||||
|
||||
private:
|
||||
|
||||
|
|
|
|||
|
|
@ -116,7 +116,8 @@ void LLExperienceCache::initSingleton()
|
|||
cache_stream >> (*this);
|
||||
}
|
||||
|
||||
LLCoprocedureManager::instance().initializePool("ExpCache");
|
||||
constexpr size_t CORO_QUEUE_SIZE = 2048;
|
||||
LLCoprocedureManager::instance().initializePool("ExpCache", CORO_QUEUE_SIZE);
|
||||
|
||||
LLCoros::instance().launch("LLExperienceCache::idleCoro",
|
||||
boost::bind(&LLExperienceCache::idleCoro, this));
|
||||
|
|
|
|||
|
|
@ -521,6 +521,7 @@ set(viewer_SOURCE_FILES
|
|||
llmaniprotate.cpp
|
||||
llmanipscale.cpp
|
||||
llmaniptranslate.cpp
|
||||
llfloatermarketplace.cpp
|
||||
llmarketplacefunctions.cpp
|
||||
llmarketplacenotifications.cpp
|
||||
llmaterialeditor.cpp
|
||||
|
|
@ -1223,6 +1224,7 @@ set(viewer_HEADER_FILES
|
|||
llfloaterlinkreplace.h
|
||||
llfloaterloadprefpreset.h
|
||||
llfloatermap.h
|
||||
llfloatermarketplace.h
|
||||
llfloatermarketplacelistings.h
|
||||
llfloatermediasettings.h
|
||||
llfloatermemleak.h
|
||||
|
|
|
|||
|
|
@ -2962,7 +2962,7 @@ FSPanelSearchWeb::FSPanelSearchWeb() : FSSearchPanelBase()
|
|||
|
||||
bool FSPanelSearchWeb::postBuild()
|
||||
{
|
||||
mWebBrowser = getChild<LLMediaCtrl>("search_browser");
|
||||
mWebBrowser = getChild<LLMediaCtrl>("search_contents");
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5404,6 +5404,7 @@ void LLAppViewer::forceDisconnect(const std::string& mesg)
|
|||
}
|
||||
else
|
||||
{
|
||||
sendSimpleLogoutRequest();
|
||||
args["MESSAGE"] = big_reason;
|
||||
LLNotificationsUtil::add("YouHaveBeenLoggedOut", args, LLSD(), &finish_disconnect );
|
||||
}
|
||||
|
|
@ -6223,6 +6224,27 @@ void LLAppViewer::sendLogoutRequest()
|
|||
}
|
||||
}
|
||||
|
||||
void LLAppViewer::sendSimpleLogoutRequest()
|
||||
{
|
||||
if (!mLogoutRequestSent && gMessageSystem)
|
||||
{
|
||||
gLogoutInProgress = true;
|
||||
|
||||
LLMessageSystem* msg = gMessageSystem;
|
||||
msg->newMessageFast(_PREHASH_LogoutRequest);
|
||||
msg->nextBlockFast(_PREHASH_AgentData);
|
||||
msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
|
||||
msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
|
||||
gAgent.sendReliableMessage();
|
||||
|
||||
LL_INFOS("Agent") << "Logging out as agent: " << gAgent.getID() << " Session: " << gAgent.getSessionID() << LL_ENDL;
|
||||
|
||||
gLogoutTimer.reset();
|
||||
gLogoutMaxTime = LOGOUT_REQUEST_TIME;
|
||||
mLogoutRequestSent = true;
|
||||
}
|
||||
}
|
||||
|
||||
void LLAppViewer::updateNameLookupUrl(const LLViewerRegion * regionp)
|
||||
{
|
||||
if (!regionp || !regionp->capabilitiesReceived())
|
||||
|
|
|
|||
|
|
@ -313,6 +313,10 @@ private:
|
|||
void sendLogoutRequest();
|
||||
void disconnectViewer();
|
||||
|
||||
// Does not create a marker file. For lost network case,
|
||||
// to at least attempt to remove the ghost from the world.
|
||||
void sendSimpleLogoutRequest();
|
||||
|
||||
// *FIX: the app viewer class should be some sort of singleton, no?
|
||||
// Perhaps its child class is the singleton and this should be an abstract base.
|
||||
static LLAppViewer* sInstance;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -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;
|
||||
};
|
||||
|
||||
|
|
@ -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,16 +26,13 @@
|
|||
|
||||
#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"
|
||||
|
||||
|
|
@ -44,54 +40,23 @@
|
|||
#include "lfsimfeaturehandler.h" // <FS:CR> Opensim search support
|
||||
|
||||
// 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();
|
||||
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();
|
||||
// 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");
|
||||
|
|
@ -103,122 +68,17 @@ LLFloaterSearch::LLFloaterSearch(const Params& key) :
|
|||
mCollectionType.insert("people");
|
||||
}
|
||||
|
||||
bool LLFloaterSearch::postBuild()
|
||||
LLFloaterSearch::~LLFloaterSearch()
|
||||
{
|
||||
LLFloaterWebContent::postBuild();
|
||||
mWebBrowser->addObserver(this);
|
||||
|
||||
// <FS:Ansariel> Seperate help topic aside from other web content
|
||||
setHelpTopic("floater_search");
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void LLFloaterSearch::onOpen(const LLSD& key)
|
||||
void LLFloaterSearch::onOpen(const LLSD& tokens)
|
||||
{
|
||||
Params p(key);
|
||||
p.trusted_content = true;
|
||||
// <FS:AW opensim search support>
|
||||
// p.allow_address_entry = false;
|
||||
#ifdef OPENSIM // <FS:AW optional opensim support>
|
||||
bool debug = gSavedSettings.getBOOL("DebugSearch");
|
||||
p.allow_address_entry = debug;
|
||||
// <FS:AW optional opensim support>
|
||||
#else // OPENSIM
|
||||
p.allow_address_entry = false;
|
||||
#endif // OPENSIM
|
||||
// </FS:AW optional opensim support>
|
||||
|
||||
// </FS:AW opensim search support>
|
||||
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();
|
||||
}
|
||||
|
||||
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).
|
||||
|
||||
//FIXME: set status bar text
|
||||
|
||||
//getChildView("refresh_search")->setVisible( (godlevel != mSearchGodLevel));
|
||||
}
|
||||
|
||||
void LLFloaterSearch::search(const SearchQuery &p)
|
||||
{
|
||||
if (! mWebBrowser || !p.validateBlock())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// reset the god level warning as we're sending the latest state
|
||||
getChildView("refresh_search")->setVisible(false);
|
||||
mSearchGodLevel = gAgent.getGodLevel();
|
||||
|
||||
// work out the subdir to use based on the requested category
|
||||
LLSD subs;
|
||||
if (mSearchType.find(p.category) != mSearchType.end())
|
||||
{
|
||||
subs["TYPE"] = p.category;
|
||||
}
|
||||
else
|
||||
{
|
||||
subs["TYPE"] = "standard";
|
||||
}
|
||||
|
||||
// add the search query string
|
||||
subs["QUERY"] = LLURI::escape(p.query);
|
||||
|
||||
subs["COLLECTION"] = "";
|
||||
if (subs["TYPE"] == "standard")
|
||||
{
|
||||
if (mCollectionType.find(p.collection) != mCollectionType.end())
|
||||
{
|
||||
subs["COLLECTION"] = "&collection_chosen=" + std::string(p.collection);
|
||||
}
|
||||
else
|
||||
{
|
||||
std::string collection_args("");
|
||||
for (std::set<std::string>::iterator it = mCollectionType.begin(); it != mCollectionType.end(); ++it)
|
||||
{
|
||||
collection_args += "&collection_chosen=" + std::string(*it);
|
||||
}
|
||||
subs["COLLECTION"] = collection_args;
|
||||
}
|
||||
}
|
||||
|
||||
// add the user's preferred maturity (can be changed via prefs)
|
||||
std::string maturity;
|
||||
if (gAgent.prefersAdult())
|
||||
{
|
||||
maturity = "gma"; // PG,Mature,Adult
|
||||
}
|
||||
else if (gAgent.prefersMature())
|
||||
{
|
||||
maturity = "gm"; // PG,Mature
|
||||
}
|
||||
else
|
||||
{
|
||||
maturity = "g"; // PG
|
||||
}
|
||||
subs["MATURITY"] = maturity;
|
||||
|
||||
// add the user's 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.)
|
||||
// <FS:AW opensim search support>
|
||||
// std::string url = gSavedSettings.getString("SearchURL");
|
||||
std::string url;
|
||||
|
|
@ -236,8 +96,98 @@ void LLFloaterSearch::search(const SearchQuery &p)
|
|||
}
|
||||
// </FS:AW opensim search support>
|
||||
|
||||
LLSD subs;
|
||||
|
||||
// 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";
|
||||
|
||||
const size_t parts = tokens.size();
|
||||
|
||||
// get the (optional) category for the search
|
||||
std::string collection;
|
||||
if (parts > 0)
|
||||
{
|
||||
collection = tokens[0].asString();
|
||||
}
|
||||
|
||||
// get the (optional) search string
|
||||
std::string search_text;
|
||||
if (parts > 1)
|
||||
{
|
||||
search_text = tokens[1].asString();
|
||||
}
|
||||
|
||||
// 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"] = category;
|
||||
}
|
||||
else
|
||||
{
|
||||
subs["TYPE"] = "standard";
|
||||
}
|
||||
|
||||
subs["QUERY"] = LLURI::escape(search_text);
|
||||
|
||||
subs["COLLECTION"] = "";
|
||||
if (subs["TYPE"] == "standard")
|
||||
{
|
||||
if (mCollectionType.find(collection) != mCollectionType.end())
|
||||
{
|
||||
subs["COLLECTION"] = "&collection_chosen=" + std::string(collection);
|
||||
}
|
||||
else
|
||||
{
|
||||
std::string collection_args("");
|
||||
for (std::set<std::string>::iterator it = mCollectionType.begin(); it != mCollectionType.end(); ++it)
|
||||
{
|
||||
collection_args += "&collection_chosen=" + std::string(*it);
|
||||
}
|
||||
subs["COLLECTION"] = collection_args;
|
||||
}
|
||||
}
|
||||
|
||||
// Default to PG
|
||||
std::string maturity = "g";
|
||||
if (gAgent.prefersAdult())
|
||||
{
|
||||
// PG,Mature,Adult
|
||||
maturity = "gma";
|
||||
}
|
||||
else if (gAgent.prefersMature())
|
||||
{
|
||||
// PG,Mature
|
||||
maturity = "gm";
|
||||
}
|
||||
subs["MATURITY"] = maturity;
|
||||
|
||||
// God status
|
||||
subs["GODLIKE"] = gAgent.isGodlike() ? "1" : "0";
|
||||
|
||||
// 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());
|
||||
|
||||
// <FS:Ansariel> Seperate help topic aside from other web content
|
||||
setHelpTopic("floater_search");
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -296,7 +296,8 @@ bool LLStatusBar::postBuild()
|
|||
boost::bind(&LLStatusBar::onClickBuyCurrency, this));
|
||||
|
||||
// <FS:Ansariel> Not used in Firestorm
|
||||
//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);
|
||||
|
|
@ -968,6 +969,11 @@ void LLStatusBar::onClickBuyCurrency()
|
|||
LLFirstUse::receiveLindens(false);
|
||||
}
|
||||
|
||||
void LLStatusBar::onClickShop()
|
||||
{
|
||||
LLFloaterReg::toggleInstanceOrBringToFront("marketplace");
|
||||
}
|
||||
|
||||
void LLStatusBar::onMouseEnterPresetsCamera()
|
||||
{
|
||||
LLView* popup_holder = gViewerWindow->getRootView()->getChildView("popup_holder");
|
||||
|
|
|
|||
|
|
@ -164,6 +164,7 @@ public:
|
|||
private:
|
||||
|
||||
void onClickBuyCurrency();
|
||||
void onClickShop();
|
||||
void onVolumeChanged(const LLSD& newvalue);
|
||||
//void onVoiceChanged(const LLSD& newvalue); // <FS:Ansariel> Fix LL voice disabled on 2nd instance nonsense
|
||||
void onObscureBalanceChanged(const LLSD& newvalue);
|
||||
|
|
|
|||
|
|
@ -49,6 +49,7 @@
|
|||
#include "llviewerregion.h"
|
||||
#include "llviewerstats.h"
|
||||
#include "llviewerstatsrecorder.h"
|
||||
#include "llviewerthrottle.h"
|
||||
#include "llviewerassetstats.h"
|
||||
#include "llworld.h"
|
||||
#include "llsdparam.h"
|
||||
|
|
@ -2705,7 +2706,7 @@ LLTextureFetch::LLTextureFetch(LLTextureCache* cache, bool threaded, bool qa_mod
|
|||
mOriginFetchSource(LLTextureFetch::FROM_ALL),
|
||||
mTextureInfoMainThread(false)
|
||||
{
|
||||
mMaxBandwidth = gSavedSettings.getF32("ThrottleBandwidthKBPS");
|
||||
mMaxBandwidth = LLViewerThrottle::getMaxBandwidthKbps();
|
||||
mTextureInfo.setLogging(true);
|
||||
|
||||
LLAppCoreHttp & app_core_http(LLAppViewer::instance()->getAppCoreHttp());
|
||||
|
|
@ -3265,11 +3266,10 @@ void LLTextureFetch::commonUpdate()
|
|||
size_t LLTextureFetch::update(F32 max_time_ms)
|
||||
{
|
||||
LL_PROFILE_ZONE_SCOPED;
|
||||
static LLCachedControl<F32> band_width(gSavedSettings,"ThrottleBandwidthKBPS", 3000.0);
|
||||
|
||||
{
|
||||
mNetworkQueueMutex.lock(); // +Mfnq
|
||||
mMaxBandwidth = band_width();
|
||||
mMaxBandwidth = LLViewerThrottle::getMaxBandwidthKbps();
|
||||
|
||||
add(LLStatViewer::TEXTURE_NETWORK_DATA_RECEIVED, mHTTPTextureBits);
|
||||
mHTTPTextureBits = (U32Bits)0;
|
||||
|
|
|
|||
|
|
@ -49,6 +49,7 @@
|
|||
#include "llviewerobjectlist.h"
|
||||
#include "llviewertexture.h"
|
||||
#include "llviewertexturelist.h"
|
||||
#include "llviewerthrottle.h"
|
||||
#include "llviewerwindow.h"
|
||||
#include "llwindow.h"
|
||||
#include "llvovolume.h"
|
||||
|
|
@ -735,13 +736,9 @@ void LLGLTexMemBar::draw()
|
|||
|
||||
// <FS:Ansariel> Move BW figures further to the right to prevent overlapping
|
||||
left = 575;
|
||||
F32Kilobits bandwidth( LLAppViewer::getTextureFetch()->getTextureBandwidth() );
|
||||
// <FS:Ansariel> Speed-up
|
||||
//F32Kilobits max_bandwidth = gSavedSettings.getF32("ThrottleBandwidthKBPS");
|
||||
static LLCachedControl<F32> throttleBandwidthKBPS(gSavedSettings, "ThrottleBandwidthKBPS");
|
||||
F32Kilobits max_bandwidth( (F32)throttleBandwidthKBPS );
|
||||
// </FS:Ansariel> Speed-upx
|
||||
color = bandwidth.value() > max_bandwidth.value() ? LLColor4::red : bandwidth.value() > max_bandwidth.value() * .75f ? LLColor4::yellow : text_color;
|
||||
F32Kilobits bandwidth(LLAppViewer::getTextureFetch()->getTextureBandwidth());
|
||||
F32Kilobits max_bandwidth(LLViewerThrottle::getMaxBandwidthKbps());
|
||||
color = bandwidth > max_bandwidth ? LLColor4::red : bandwidth > max_bandwidth*.75f ? LLColor4::yellow : text_color;
|
||||
color[VALPHA] = text_color[VALPHA];
|
||||
text = llformat("BW:%.0f/%.0f",bandwidth.value(), max_bandwidth.value());
|
||||
LLFontGL::getFontMonospace()->renderUTF8(text, 0, (S32)x_right, v_offset + line_height*3,
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
@ -501,6 +503,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>);
|
||||
|
|
|
|||
|
|
@ -1267,35 +1267,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));
|
||||
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()->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);
|
||||
media_instance->getMediaPlugin()->storeOpenIDCookie(cefUrl, cookie_name, cookie_value,
|
||||
cookie_host, cookie_path, httponly, secure);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -5504,13 +5504,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
|
||||
|
|
|
|||
|
|
@ -225,7 +225,7 @@ void LLViewerThrottle::setMaxBandwidth(F32 kbits_per_second, bool from_event)
|
|||
|
||||
void LLViewerThrottle::load()
|
||||
{
|
||||
mMaxBandwidth = gSavedSettings.getF32("ThrottleBandwidthKBPS")*1024;
|
||||
mMaxBandwidth = getMaxBandwidthKbps() * 1024;
|
||||
resetDynamicThrottle();
|
||||
mCurrent.dump();
|
||||
}
|
||||
|
|
@ -242,6 +242,15 @@ void LLViewerThrottle::sendToSim() const
|
|||
mCurrent.sendToSim();
|
||||
}
|
||||
|
||||
F32 LLViewerThrottle::getMaxBandwidthKbps()
|
||||
{
|
||||
constexpr F32 MIN_BANDWIDTH = 100.0f; // 100 Kbps
|
||||
constexpr F32 MAX_BANDWIDTH = 10000.0f; // 10 Mbps
|
||||
|
||||
static LLCachedControl<F32> bandwidth(gSavedSettings, "ThrottleBandwidthKBPS", 3000.0);
|
||||
return llclamp(bandwidth(), MIN_BANDWIDTH, MAX_BANDWIDTH);
|
||||
}
|
||||
|
||||
|
||||
LLViewerThrottleGroup LLViewerThrottle::getThrottleGroup(const F32 bandwidth_kbps)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -64,6 +64,7 @@ public:
|
|||
void save() const;
|
||||
void sendToSim() const;
|
||||
|
||||
static F32 getMaxBandwidthKbps();
|
||||
F32 getMaxBandwidth()const { return mMaxBandwidth; }
|
||||
F32 getCurrentBandwidth() const { return mCurrentBandwidth; }
|
||||
|
||||
|
|
|
|||
|
|
@ -2525,6 +2525,18 @@ void LLViewerWindow::initWorldUI()
|
|||
{
|
||||
destination_guide_url = gSavedSettings.getString("DestinationGuideURL");
|
||||
}
|
||||
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);
|
||||
}
|
||||
|
||||
if(!destination_guide_url.empty())
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
@ -1,16 +1,2 @@
|
|||
<?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>
|
||||
<floater name="floater_search" title="Suche"/>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
@ -1,18 +1,26 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<floater
|
||||
positioning="centered"
|
||||
legacy_header_height="18"
|
||||
can_resize="true"
|
||||
height="775"
|
||||
layout="topleft"
|
||||
min_height="400"
|
||||
min_width="500"
|
||||
name="floater_search"
|
||||
help_topic="fs_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>
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ name="panel_ls_web">
|
|||
right="-5"
|
||||
layout="topleft"
|
||||
follows="all"
|
||||
name="search_browser"
|
||||
name="search_contents"
|
||||
trusted_content="true"
|
||||
start_url="about:blank" />
|
||||
</panel>
|
||||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
Loading…
Reference in New Issue