summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
authorMaxim Nikolenko <maximnproductengine@lindenlab.com>2026-04-09 00:08:07 +0300
committerGitHub <noreply@github.com>2026-04-09 00:08:07 +0300
commit7fc1d9a1aec58acfc4359ffa45c8b1ce342fb2d8 (patch)
treeda44d87539c9cf57f5fb78e2560b0c2cb31c33e8 /indra/newview
parent28a654e62bcfecf28a1626ef6c13e0f834344803 (diff)
#5607 workaround fix for the web content being black after resizing
Diffstat (limited to 'indra/newview')
-rw-r--r--indra/newview/llpanellogin.cpp47
-rw-r--r--indra/newview/llpanellogin.h7
2 files changed, 44 insertions, 10 deletions
diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp
index f100fb8c1a..d629d33e43 100644
--- a/indra/newview/llpanellogin.cpp
+++ b/indra/newview/llpanellogin.cpp
@@ -48,6 +48,7 @@
#include "llstartup.h"
#include "lltextbox.h"
#include "llui.h"
+#include "llframetimer.h"
#include "lluiconstants.h"
#include "llslurl.h"
#include "llversioninfo.h"
@@ -314,8 +315,8 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,
forgot_password_text->setClickedCallback(onClickForgotPassword, NULL);
// get the web browser control
- LLMediaCtrl* web_browser = getChild<LLMediaCtrl>("login_html");
- web_browser->addObserver(this);
+ mWebBrowser = getChild<LLMediaCtrl>("login_html");
+ mWebBrowser->addObserver(this);
loadLoginPage();
@@ -850,11 +851,9 @@ void LLPanelLogin::setAlwaysRefresh(bool refresh)
{
if (sInstance && LLStartUp::getStartupState() < STATE_LOGIN_CLEANUP)
{
- LLMediaCtrl* web_browser = sInstance->getChild<LLMediaCtrl>("login_html");
-
- if (web_browser)
+ if (sInstance->mWebBrowser)
{
- web_browser->setAlwaysRefresh(refresh);
+ sInstance->mWebBrowser->setAlwaysRefresh(refresh);
}
}
}
@@ -911,16 +910,28 @@ void LLPanelLogin::loadLoginPage()
gViewerWindow->setMenuBackgroundColor(false, !LLGridManager::getInstance()->isInProductionGrid());
- LLMediaCtrl* web_browser = sInstance->getChild<LLMediaCtrl>("login_html");
- if (web_browser->getCurrentNavUrl() != login_uri.asString())
+ if (sInstance->mWebBrowser->getCurrentNavUrl() != login_uri.asString())
{
LL_DEBUGS("AppInit") << "loading: " << login_uri << LL_ENDL;
- web_browser->navigateTo( login_uri.asString(), "text/html" );
+ sInstance->mWebBrowser->navigateTo(login_uri.asString(), "text/html");
}
}
-void LLPanelLogin::handleMediaEvent(LLPluginClassMedia* /*self*/, EMediaEvent event)
+void LLPanelLogin::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event)
{
+ constexpr F32 REFRESH_DELAY = 2.f;
+ switch (event)
+ {
+ case MEDIA_EVENT_SIZE_CHANGED:
+ {
+ mForceRefreshTimer.reset();
+ mForceRefreshTimer.setTimerExpirySec(REFRESH_DELAY);
+ mForceRefresh = true;
+ break;
+ }
+ default:
+ break;
+ }
}
//---------------------------------------------------------------------------
@@ -1383,3 +1394,19 @@ void LLPanelLogin::collapseGridPanel(bool collapse)
mLoginStack->collapsePanel(mGridPanel, collapse);
mLoginStack->updateLayout();
}
+
+void LLPanelLogin::draw()
+{
+ LLPanel::draw();
+
+ // Workaround for the black screen issue (see #5607)
+ // Should be removed after the proper fix for resizing is implemented
+ if (mForceRefresh && mForceRefreshTimer.hasExpired())
+ {
+ if (mWebBrowser->getMediaPlugin())
+ {
+ mWebBrowser->getMediaPlugin()->forceRenderRefresh();
+ }
+ mForceRefresh = false;
+ }
+}
diff --git a/indra/newview/llpanellogin.h b/indra/newview/llpanellogin.h
index f7104a94b1..a00081795e 100644
--- a/indra/newview/llpanellogin.h
+++ b/indra/newview/llpanellogin.h
@@ -48,6 +48,8 @@ public:
void *callback_data);
~LLPanelLogin();
+ void draw();
+
virtual void setFocus( bool b );
static void show(const LLRect &rect,
@@ -131,10 +133,15 @@ private:
unsigned int mPasswordLength;
unsigned int mLocationLength;
+ LLTimer mForceRefreshTimer;
+ bool mForceRefresh {false};
+
bool mAlertNotif;
LLButton* mLoginBtn;
LLLayoutPanel* mGridPanel;
LLLayoutStack* mLoginStack;
+
+ LLMediaCtrl* mWebBrowser;
};
#endif