fix: devtools allow restoring saved dock state on Windows (#39734)

* fix: devtools allow restoring saved dock state on Windows

* chore: address feedback
This commit is contained in:
Robo 2023-09-07 17:14:01 +09:00 коммит произвёл GitHub
Родитель f6e8544ef6
Коммит 0a064cece9
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
5 изменённых файлов: 30 добавлений и 15 удалений

Просмотреть файл

@ -2667,14 +2667,6 @@ void WebContents::OpenDevTools(gin::Arguments* args) {
state = "detach"; state = "detach";
} }
#if BUILDFLAG(IS_WIN)
auto* win = static_cast<NativeWindowViews*>(owner_window());
// Force a detached state when WCO is enabled to match Chrome
// behavior and prevent occlusion of DevTools.
if (win && win->IsWindowControlsOverlayEnabled())
state = "detach";
#endif
bool activate = true; bool activate = true;
std::string title; std::string title;
if (args && args->Length() == 1) { if (args && args->Length() == 1) {

Просмотреть файл

@ -40,13 +40,6 @@ namespace electron {
namespace { namespace {
bool IsAppRTL() {
const std::string& locale = g_browser_process->GetApplicationLocale();
base::i18n::TextDirection text_direction =
base::i18n::GetTextDirectionForLocaleInStartUp(locale.c_str());
return text_direction == base::i18n::RIGHT_TO_LEFT;
}
NSString* GetAppPathForProtocol(const GURL& url) { NSString* GetAppPathForProtocol(const GURL& url) {
NSURL* ns_url = [NSURL NSURL* ns_url = [NSURL
URLWithString:base::SysUTF8ToNSString(url.possibly_invalid_spec())]; URLWithString:base::SysUTF8ToNSString(url.possibly_invalid_spec())];

Просмотреть файл

@ -44,11 +44,13 @@
#include "services/network/public/cpp/simple_url_loader_stream_consumer.h" #include "services/network/public/cpp/simple_url_loader_stream_consumer.h"
#include "services/network/public/cpp/wrapper_shared_url_loader_factory.h" #include "services/network/public/cpp/wrapper_shared_url_loader_factory.h"
#include "shell/browser/api/electron_api_web_contents.h" #include "shell/browser/api/electron_api_web_contents.h"
#include "shell/browser/native_window_views.h"
#include "shell/browser/net/asar/asar_url_loader_factory.h" #include "shell/browser/net/asar/asar_url_loader_factory.h"
#include "shell/browser/protocol_registry.h" #include "shell/browser/protocol_registry.h"
#include "shell/browser/ui/inspectable_web_contents_delegate.h" #include "shell/browser/ui/inspectable_web_contents_delegate.h"
#include "shell/browser/ui/inspectable_web_contents_view.h" #include "shell/browser/ui/inspectable_web_contents_view.h"
#include "shell/browser/ui/inspectable_web_contents_view_delegate.h" #include "shell/browser/ui/inspectable_web_contents_view_delegate.h"
#include "shell/common/application_info.h"
#include "shell/common/platform_util.h" #include "shell/common/platform_util.h"
#include "third_party/blink/public/common/logging/logging_utils.h" #include "third_party/blink/public/common/logging/logging_utils.h"
#include "third_party/blink/public/common/page/page_zoom.h" #include "third_party/blink/public/common/page/page_zoom.h"
@ -585,6 +587,23 @@ void InspectableWebContents::LoadCompleted() {
prefs.FindString("currentDockState"); prefs.FindString("currentDockState");
base::RemoveChars(*current_dock_state, "\"", &dock_state_); base::RemoveChars(*current_dock_state, "\"", &dock_state_);
} }
#if BUILDFLAG(IS_WIN)
auto* api_web_contents = api::WebContents::From(GetWebContents());
if (api_web_contents) {
auto* win =
static_cast<NativeWindowViews*>(api_web_contents->owner_window());
// When WCO is enabled, undock the devtools if the current dock
// position overlaps with the position of window controls to avoid
// broken layout.
if (win && win->IsWindowControlsOverlayEnabled()) {
if (IsAppRTL() && dock_state_ == "left") {
dock_state_ = "undocked";
} else if (dock_state_ == "right") {
dock_state_ = "undocked";
}
}
}
#endif
std::u16string javascript = base::UTF8ToUTF16( std::u16string javascript = base::UTF8ToUTF16(
"UI.DockController.instance().setDockSide(\"" + dock_state_ + "\");"); "UI.DockController.instance().setDockSide(\"" + dock_state_ + "\");");
GetDevToolsWebContents()->GetPrimaryMainFrame()->ExecuteJavaScript( GetDevToolsWebContents()->GetPrimaryMainFrame()->ExecuteJavaScript(

Просмотреть файл

@ -4,8 +4,10 @@
#include "shell/common/application_info.h" #include "shell/common/application_info.h"
#include "base/i18n/rtl.h"
#include "base/no_destructor.h" #include "base/no_destructor.h"
#include "base/strings/stringprintf.h" #include "base/strings/stringprintf.h"
#include "chrome/browser/browser_process.h"
#include "chrome/common/chrome_version.h" #include "chrome/common/chrome_version.h"
#include "content/public/common/user_agent.h" #include "content/public/common/user_agent.h"
#include "electron/electron_version.h" #include "electron/electron_version.h"
@ -47,4 +49,11 @@ std::string GetApplicationUserAgent() {
return content::BuildUserAgentFromProduct(user_agent); return content::BuildUserAgentFromProduct(user_agent);
} }
bool IsAppRTL() {
const std::string& locale = g_browser_process->GetApplicationLocale();
base::i18n::TextDirection text_direction =
base::i18n::GetTextDirectionForLocaleInStartUp(locale.c_str());
return text_direction == base::i18n::RIGHT_TO_LEFT;
}
} // namespace electron } // namespace electron

Просмотреть файл

@ -25,6 +25,8 @@ std::string GetApplicationVersion();
// Returns the user agent of Electron. // Returns the user agent of Electron.
std::string GetApplicationUserAgent(); std::string GetApplicationUserAgent();
bool IsAppRTL();
#if BUILDFLAG(IS_WIN) #if BUILDFLAG(IS_WIN)
PCWSTR GetRawAppUserModelID(); PCWSTR GetRawAppUserModelID();
bool GetAppUserModelID(ScopedHString* app_id); bool GetAppUserModelID(ScopedHString* app_id);