From 3537f849ef6f13c01565578eea77ec11c1f2bb3a Mon Sep 17 00:00:00 2001 From: Ahmed Ashour Date: Tue, 26 Mar 2019 17:43:23 +0100 Subject: [PATCH] fix(gui): detect if a window is opened inside a visible screen (PR #521) --- .../java/jadx/gui/settings/JadxSettings.java | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/jadx-gui/src/main/java/jadx/gui/settings/JadxSettings.java b/jadx-gui/src/main/java/jadx/gui/settings/JadxSettings.java index 7a7c04c33..64680c03a 100644 --- a/jadx-gui/src/main/java/jadx/gui/settings/JadxSettings.java +++ b/jadx-gui/src/main/java/jadx/gui/settings/JadxSettings.java @@ -1,6 +1,9 @@ package jadx.gui.settings; -import java.awt.*; +import java.awt.Font; +import java.awt.GraphicsDevice; +import java.awt.GraphicsEnvironment; +import java.awt.Window; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; @@ -142,14 +145,25 @@ public class JadxSettings extends JadxCLIArgs { public boolean loadWindowPos(Window window) { WindowLocation pos = windowPos.get(window.getClass().getSimpleName()); - if (pos == null) { + if (pos == null || !isContainedInAnyScreen(pos)) { return false; } + window.setLocation(pos.getX(), pos.getY()); window.setSize(pos.getWidth(), pos.getHeight()); return true; } + private static boolean isContainedInAnyScreen(WindowLocation pos) { + for (GraphicsDevice gd : GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()) { + if (gd.getDefaultConfiguration().getBounds().contains( + pos.getX(), pos.getY(), pos.getWidth(), pos.getHeight())) { + return true; + } + } + return false; + } + public boolean isShowHeapUsageBar() { return showHeapUsageBar; }