File tree Expand file tree Collapse file tree 5 files changed +57
-8
lines changed
recaf-core/src/main/java/software/coley/recaf
recaf-ui/src/main/java/software/coley/recaf/ui/docking Expand file tree Collapse file tree 5 files changed +57
-8
lines changed Original file line number Diff line number Diff line change 1+ package software .coley .recaf .behavior ;
2+
3+ import jakarta .annotation .Nonnull ;
4+ import software .coley .collections .Lists ;
5+
6+ import java .util .List ;
7+
8+ /**
9+ * Priority sortable item.
10+ *
11+ * @author Matt Coley
12+ */
13+ public interface PrioritySortable extends Comparable <PrioritySortable > {
14+ /**
15+ * @return This item's priority value.
16+ */
17+ default int getPriority () {
18+ return 0 ;
19+ }
20+
21+ @ Override
22+ default int compareTo (@ Nonnull PrioritySortable o ) {
23+ return Integer .compare (getPriority (), o .getPriority ());
24+ }
25+
26+ /**
27+ * Add a sortable item to a sortable list.
28+ *
29+ * @param items
30+ * List to add to.
31+ * @param item
32+ * Item to add.
33+ * @param <T>
34+ * Child priority-sortable type.
35+ *
36+ * @return {@code true} on add. {@code false} on failure <i>(Insertion index cannot be computed)</i>,
37+ */
38+ static <T extends PrioritySortable > boolean add (@ Nonnull List <T > items , @ Nonnull T item ) {
39+ return Lists .sortedInsert (PrioritySortable ::compareTo , items , item );
40+ }
41+ }
Original file line number Diff line number Diff line change 66import jakarta .enterprise .inject .Produces ;
77import jakarta .inject .Inject ;
88import org .slf4j .Logger ;
9+ import software .coley .collections .Lists ;
910import software .coley .collections .Unchecked ;
1011import software .coley .recaf .analytics .logging .Logging ;
12+ import software .coley .recaf .behavior .PrioritySortable ;
1113import software .coley .recaf .workspace .model .EmptyWorkspace ;
1214import software .coley .recaf .workspace .model .Workspace ;
1315import software .coley .recaf .workspace .model .WorkspaceModificationListener ;
1416import software .coley .recaf .workspace .model .resource .WorkspaceResource ;
1517
18+ import java .util .Comparator ;
1619import java .util .List ;
1720import java .util .concurrent .CopyOnWriteArrayList ;
1821
@@ -91,7 +94,7 @@ public List<WorkspaceOpenListener> getWorkspaceOpenListeners() {
9194
9295 @ Override
9396 public void addWorkspaceOpenListener (@ Nonnull WorkspaceOpenListener listener ) {
94- openListeners .add (listener );
97+ PrioritySortable .add (openListeners , listener );
9598 }
9699
97100 @ Override
@@ -107,7 +110,7 @@ public List<WorkspaceCloseListener> getWorkspaceCloseListeners() {
107110
108111 @ Override
109112 public void addWorkspaceCloseListener (@ Nonnull WorkspaceCloseListener listener ) {
110- closeListeners .add (listener );
113+ PrioritySortable .add (closeListeners , listener );
111114 }
112115
113116 @ Override
Original file line number Diff line number Diff line change 11package software .coley .recaf .services .workspace ;
22
33import jakarta .annotation .Nonnull ;
4+ import software .coley .recaf .behavior .PrioritySortable ;
45import software .coley .recaf .workspace .model .Workspace ;
56
67/**
78 * Listener for when old workspaces are closed.
89 *
910 * @author Matt Coley
1011 */
11- public interface WorkspaceCloseListener {
12+ public interface WorkspaceCloseListener extends PrioritySortable {
1213 /**
1314 * Called when {@link WorkspaceManager#setCurrent(Workspace)} passes and a prior workspace is removed.
1415 *
Original file line number Diff line number Diff line change 11package software .coley .recaf .services .workspace ;
22
33import jakarta .annotation .Nonnull ;
4+ import software .coley .recaf .behavior .PrioritySortable ;
45import software .coley .recaf .workspace .model .Workspace ;
56
67/**
78 * Listener for when new workspaces are opened.
89 *
910 * @author Matt Coley
1011 */
11- public interface WorkspaceOpenListener {
12+ public interface WorkspaceOpenListener extends PrioritySortable {
1213 /**
1314 * Called when {@link WorkspaceManager#setCurrent(Workspace)} passes.
1415 *
Original file line number Diff line number Diff line change @@ -394,14 +394,17 @@ public void onWorkspaceOpened(@Nonnull Workspace workspace) {
394394 @ Override
395395 public void onWorkspaceClosed (@ Nonnull Workspace workspace ) {
396396 // When a workspace is closed, show the welcome screen.
397- // TODO: Combining 'DockingManager' and 'DockingLayoutManager' made this fire earlier which
398- // happens before 'NavigationManager' does. The nav manager closes this if we open it immediately.
399- // - Need to have an order of operation system...
400- FxThreadUtil .delayedRun (25 , () -> {
397+ FxThreadUtil .run (() -> {
401398 if (!bento .search ().replaceContainer (ID_CONTAINER_ROOT_TOP , DockingManager .this ::newWelcomeContainer ))
402399 logger .error ("Failed replacing root on workspace close" );
403400 });
404401 }
402+
403+ @ Override
404+ public int getPriority () {
405+ // TODO: Arbitrary number to ensure this happens later than other close listeners
406+ return 100 ;
407+ }
405408 }
406409
407410 /**
You can’t perform that action at this time.
0 commit comments