SL-16102 Set window title to agent name (child of SL-15999 Support for low overhead, non interactive viewer sessions)

master
Callum Linden 2021-09-28 15:24:42 -07:00
parent dc48e174c4
commit 851fef6801
6 changed files with 60 additions and 1 deletions

View File

@ -137,6 +137,12 @@ BOOL LLWindow::canDelete()
return TRUE;
}
//virtual
void LLWindow::setTitle(const std::string title)
{
// the action happens in the platform specific impl
}
// virtual
void LLWindow::incBusyCount()
{

View File

@ -86,6 +86,13 @@ public:
virtual void showCursorFromMouseMove() = 0;
virtual void hideCursorUntilMouseMove() = 0;
// Provide a way to set the Viewer window title after the
// windows has been created. The initial use case for this
// is described in SL-16102 (update window title with agent
// name, location etc. for non-interactive viewer) but it
// may also be useful in other cases.
virtual void setTitle(const std::string title);
// These two functions create a way to make a busy cursor instead
// of an arrow when someone's busy doing something. Draw an
// arrow/hour if busycount > 0.

View File

@ -1811,6 +1811,13 @@ void LLWindowWin32::moveWindow( const LLCoordScreen& position, const LLCoordScre
MoveWindow(mWindowHandle, position.mX, position.mY, size.mX, size.mY, TRUE);
}
void LLWindowWin32::setTitle(const std::string title)
{
// TODO: Do we need to use the wide string version of this call
// to support non-ascii usernames (and region names??)
SetWindowTextA(mWindowHandle, title.c_str());
}
BOOL LLWindowWin32::setCursorPosition(const LLCoordWindow position)
{
mMousePositionModified = TRUE;

View File

@ -58,7 +58,8 @@ public:
/*virtual*/ BOOL setSizeImpl(LLCoordScreen size);
/*virtual*/ BOOL setSizeImpl(LLCoordWindow size);
/*virtual*/ BOOL switchContext(BOOL fullscreen, const LLCoordScreen &size, BOOL disable_vsync, const LLCoordScreen * const posp = NULL);
/*virtual*/ BOOL setCursorPosition(LLCoordWindow position);
/*virtual*/ void setTitle(const std::string title);
/*virtual*/ BOOL setCursorPosition(LLCoordWindow position);
/*virtual*/ BOOL getCursorPosition(LLCoordWindow *position);
/*virtual*/ void showCursor();
/*virtual*/ void hideCursor();

View File

@ -16666,6 +16666,17 @@
<key>Value</key>
<integer>1</integer>
</map>
<key>UpdateAppWindowTitleBar</key>
<map>
<key>Comment</key>
<string>Updates the application window title bar with brief information about user/location</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
</map>
</llsd>

View File

@ -39,6 +39,11 @@
#include "llviewerregion.h"
#include "llworldmap.h"
#include "llagentui.h"
#include "llwindow.h"
#include "llviewerwindow.h"
#include "llavatarname.h"
#include "llavatarnamecache.h"
//////////////////////////////////////////////////////////////////////////////
// LLTeleportHistoryItem
@ -174,6 +179,28 @@ void LLTeleportHistory::updateCurrentLocation(const LLVector3d& new_pos)
if (!mGotInitialUpdate)
mGotInitialUpdate = true;
// update Viewer window title with username and region name
// if we are in "non-interactive mode" (SL-15999) or the debug
// setting to allow it is enabled (may be useful in other situations)
if (gNonInteractive || gSavedSettings.getBOOL("UpdateAppWindowTitleBar"))
{
LLAvatarName av_name;
if (LLAvatarNameCache::get(gAgent.getID(), &av_name))
{
if (gAgent.getRegion() && gViewerWindow && gViewerWindow->getWindow())
{
std::string region = gAgent.getRegion()->getName();
std::string username = av_name.getUserName();
// this first pass simply displays username and region name
// but could easily be extended to include other details like
// X/Y/Z location within a region etc.
std::string new_title = STRINGIZE(username << " @ " << region);
gViewerWindow->getWindow()->setTitle(new_title);
}
}
}
// Signal the interesting party that we've changed.
onHistoryChanged();
}