Skip to content

Commit

Permalink
fix: screen.getCursorScreenPoint() crash on Wayland
Browse files Browse the repository at this point in the history
  • Loading branch information
codebytere committed Aug 30, 2022
1 parent 75f9573 commit 01f4fcc
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 2 deletions.
17 changes: 16 additions & 1 deletion shell/browser/api/electron_api_screen.cc
Expand Up @@ -24,6 +24,10 @@
#include "ui/display/win/screen_win.h"
#endif

#if defined(USE_OZONE)
#include "ui/ozone/public/ozone_platform.h"
#endif

namespace electron::api {

gin::WrapperInfo Screen::kWrapperInfo = {gin::kEmbedderNativeGin};
Expand Down Expand Up @@ -68,7 +72,18 @@ Screen::~Screen() {
screen_->RemoveObserver(this);
}

gfx::Point Screen::GetCursorScreenPoint() {
gfx::Point Screen::GetCursorScreenPoint(v8::Isolate* isolate) {
#if defined(USE_OZONE)
// Wayland will crash unless a window is reated prior to calling
// GetCursorScreenPoint.
if (!ui::OzonePlatform::IsInitialized()) {
gin_helper::ErrorThrower thrower(isolate);
thrower.ThrowError(
"screen.getCursorScreenPoint() cannot be called before a window has "
"been created.");
return gfx::Point();
}
#endif // BUILDFLAG(USE_OZONE)
return screen_->GetCursorScreenPoint();
}

Expand Down
2 changes: 1 addition & 1 deletion shell/browser/api/electron_api_screen.h
Expand Up @@ -40,7 +40,7 @@ class Screen : public gin::Wrappable<Screen>,
Screen(v8::Isolate* isolate, display::Screen* screen);
~Screen() override;

gfx::Point GetCursorScreenPoint();
gfx::Point GetCursorScreenPoint(v8::Isolate* isolate);
display::Display GetPrimaryDisplay();
std::vector<display::Display> GetAllDisplays();
display::Display GetDisplayNearestPoint(const gfx::Point& point);
Expand Down

0 comments on commit 01f4fcc

Please sign in to comment.