diff --git a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/bookmark/DBTraceBookmarkManager.java b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/bookmark/DBTraceBookmarkManager.java index d03a5e3ab8..37c9bff904 100644 --- a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/bookmark/DBTraceBookmarkManager.java +++ b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/bookmark/DBTraceBookmarkManager.java @@ -89,6 +89,7 @@ public class DBTraceBookmarkManager extends AbstractDBTraceSpaceBasedManager definedTypes = new HashSet<>(); protected final Map typesByName = new HashMap<>(); protected final Collection typesView = Collections.unmodifiableCollection(typesByName.values()); @@ -155,6 +156,10 @@ public class DBTraceBookmarkManager extends AbstractDBTraceSpaceBasedManager(TraceEvents.BOOKMARK_TYPE_ADDED, null, type)); return type; diff --git a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/program/DBTraceProgramViewBookmarkManager.java b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/program/DBTraceProgramViewBookmarkManager.java index 376ad28a3e..a412380710 100644 --- a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/program/DBTraceProgramViewBookmarkManager.java +++ b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/program/DBTraceProgramViewBookmarkManager.java @@ -54,6 +54,11 @@ public class DBTraceProgramViewBookmarkManager implements TraceProgramViewBookma return bookmarkManager.defineBookmarkType(type, icon, color, priority); } + @Override + public boolean isDefinedType(String type) { + return bookmarkManager.isDefinedType(type); + } + @Override public BookmarkType[] getBookmarkTypes() { Collection types = bookmarkManager.getDefinedBookmarkTypes(); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/bookmark/BookmarkPlugin.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/bookmark/BookmarkPlugin.java index bd24c964fa..53495d4cc8 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/bookmark/BookmarkPlugin.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/bookmark/BookmarkPlugin.java @@ -298,12 +298,22 @@ public class BookmarkPlugin extends ProgramPlugin implements PopupActionProvider if (type == null) { return null; } + String typeString = type.getTypeString(); BookmarkNavigator nav = bookmarkNavigators.get(typeString); - if (nav == null) { - nav = new BookmarkNavigator(markerService, currentProgram.getBookmarkManager(), type); - bookmarkNavigators.put(typeString, nav); + if (nav != null) { + return nav; } + + BookmarkManager bookmarkManager = currentProgram.getBookmarkManager(); + if (!bookmarkManager.isDefinedType(typeString)) { + // This implies the bookmark was created by a plugin that is no longer available in + // the current tool. + return null; + } + + nav = new BookmarkNavigator(markerService, bookmarkManager, type); + bookmarkNavigators.put(typeString, nav); return nav; } diff --git a/Ghidra/Framework/Generic/src/main/java/generic/util/WindowUtilities.java b/Ghidra/Framework/Generic/src/main/java/generic/util/WindowUtilities.java index 9f47123a69..21c4a1aa6f 100644 --- a/Ghidra/Framework/Generic/src/main/java/generic/util/WindowUtilities.java +++ b/Ghidra/Framework/Generic/src/main/java/generic/util/WindowUtilities.java @@ -351,12 +351,11 @@ public class WindowUtilities { // 'pad' is for checking to avoid full-size windows with odd OS borders. This is an // arbitrary number that is larger than the 'move' amount below. int pad = 50; - int screenArea = screen.width * screen.height; - int boundsArea = bounds.width * bounds.height; - if (boundsArea > screenArea) { - int newWidth = screen.width - pad; - int newHeight = screen.height - pad; - bounds.setSize(newWidth, newHeight); + if (bounds.width > screen.width) { + bounds.width = screen.width - pad; + } + if (bounds.height > screen.height) { + bounds.height = screen.height - pad; } // Next, move the window as little as possible to get fully on-screen. diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/bookmark/BookmarkDBManager.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/bookmark/BookmarkDBManager.java index fa59b8a54f..1dbc8f1293 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/bookmark/BookmarkDBManager.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/bookmark/BookmarkDBManager.java @@ -4,9 +4,9 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -52,6 +52,7 @@ public class BookmarkDBManager implements BookmarkManager, ErrorHandler, Manager private boolean upgrade = false; private Map typesByName = new TreeMap<>(); + private Set definedTypes = new HashSet<>(); private ObjectArray typesArray = new ObjectArray(); private Lock lock; @@ -235,6 +236,11 @@ public class BookmarkDBManager implements BookmarkManager, ErrorHandler, Manager return (BookmarkTypeDB) typesArray.get(typeID); } + @Override + public boolean isDefinedType(String type) { + return definedTypes.contains(type); + } + @Override public BookmarkType defineType(String type, Icon icon, Color color, int priority) { lock.acquire(); @@ -251,6 +257,7 @@ public class BookmarkDBManager implements BookmarkManager, ErrorHandler, Manager bmt.setIcon(icon); bmt.setMarkerColor(color); bmt.setMarkerPriority(priority); + definedTypes.add(type); } catch (IOException e) { dbError(e); diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/listing/BookmarkManager.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/listing/BookmarkManager.java index 86b234d1c9..2908d8a653 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/listing/BookmarkManager.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/listing/BookmarkManager.java @@ -4,9 +4,9 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -66,6 +66,15 @@ public interface BookmarkManager { */ BookmarkType defineType(String type, Icon icon, Color color, int priority); + /** + * Returns true if the given bookmark type has been defined via a call to + * {@link #defineType(String, Icon, Color, int)}. This allows clients to know whether the + * given type should be displayed. + * @param type the type to check + * @return true if defined + */ + boolean isDefinedType(String type); + /** * Returns list of known bookmark types * @return list of known bookmark types