Ignore menu item action if mouse exited the menu item
This commit is contained in:
parent
0df02b8c9d
commit
19d2644500
|
@ -1,5 +1,7 @@
|
|||
package ctbrec.ui;
|
||||
|
||||
import javafx.geometry.Bounds;
|
||||
import javafx.scene.Node;
|
||||
import javafx.scene.control.ContextMenu;
|
||||
import javafx.scene.input.MouseButton;
|
||||
import javafx.scene.input.MouseEvent;
|
||||
|
@ -15,4 +17,17 @@ public class UiUtils {
|
|||
}
|
||||
});
|
||||
}
|
||||
|
||||
public static void ignoreMouseReleasedIfMouseExited(ContextMenu menu) {
|
||||
menu.addEventFilter(MouseEvent.MOUSE_RELEASED, evt -> {
|
||||
if (evt.getTarget() instanceof Node) {
|
||||
Node target = (Node) evt.getTarget();
|
||||
Bounds screenBounds = target.localToScreen(target.getBoundsInLocal());
|
||||
boolean releasedOnOriginalMouseItem = screenBounds.contains(evt.getScreenX(), evt.getScreenY());
|
||||
if (!releasedOnOriginalMouseItem) {
|
||||
evt.consume();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
package ctbrec.ui.controls;
|
||||
|
||||
import ctbrec.ui.UiUtils;
|
||||
import javafx.scene.control.ContextMenu;
|
||||
import javafx.scene.control.MenuItem;
|
||||
|
||||
public class CustomMouseBehaviorContextMenu extends ContextMenu {
|
||||
|
||||
public CustomMouseBehaviorContextMenu(MenuItem...items) {
|
||||
super(items);
|
||||
UiUtils.disableRightClickFor(this);
|
||||
UiUtils.ignoreMouseReleasedIfMouseExited(this);
|
||||
}
|
||||
}
|
|
@ -46,6 +46,7 @@ import ctbrec.ui.DesktopIntegration;
|
|||
import ctbrec.ui.action.FollowAction;
|
||||
import ctbrec.ui.action.PlayAction;
|
||||
import ctbrec.ui.action.StartRecordingAction;
|
||||
import ctbrec.ui.controls.CustomMouseBehaviorContextMenu;
|
||||
import ctbrec.ui.controls.SearchBox;
|
||||
import ctbrec.ui.tabs.TabSelectionListener;
|
||||
import javafx.beans.property.BooleanProperty;
|
||||
|
@ -342,7 +343,7 @@ public class MyFreeCamsTableTab extends Tab implements TabSelectionListener {
|
|||
MenuItem follow = new MenuItem("Follow");
|
||||
follow.setOnAction(e -> new FollowAction(getTabPane(), selectedModels).execute());
|
||||
|
||||
ContextMenu menu = new ContextMenu();
|
||||
ContextMenu menu = new CustomMouseBehaviorContextMenu();
|
||||
menu.getItems().addAll(startRecording, copyUrl, openInPlayer, openInBrowser, follow);
|
||||
|
||||
if (selectedModels.size() > 1) {
|
||||
|
@ -468,7 +469,7 @@ public class MyFreeCamsTableTab extends Tab implements TabSelectionListener {
|
|||
}
|
||||
|
||||
private void showColumnSelection(ActionEvent evt) {
|
||||
ContextMenu menu = new ContextMenu();
|
||||
ContextMenu menu = new CustomMouseBehaviorContextMenu();
|
||||
for (TableColumn<ModelTableRow, ?> tc : columns) {
|
||||
CheckMenuItem item = new CheckMenuItem(tc.getText());
|
||||
item.setSelected(isColumnEnabled(tc));
|
||||
|
|
|
@ -39,7 +39,6 @@ import ctbrec.ui.DesktopIntegration;
|
|||
import ctbrec.ui.JavaFxModel;
|
||||
import ctbrec.ui.PreviewPopupHandler;
|
||||
import ctbrec.ui.StreamSourceSelectionDialog;
|
||||
import ctbrec.ui.UiUtils;
|
||||
import ctbrec.ui.action.CheckModelAccountAction;
|
||||
import ctbrec.ui.action.EditNotesAction;
|
||||
import ctbrec.ui.action.FollowAction;
|
||||
|
@ -52,6 +51,7 @@ import ctbrec.ui.action.ResumeAction;
|
|||
import ctbrec.ui.action.SetStopDateAction;
|
||||
import ctbrec.ui.action.StopRecordingAction;
|
||||
import ctbrec.ui.action.ToggleRecordingAction;
|
||||
import ctbrec.ui.controls.CustomMouseBehaviorContextMenu;
|
||||
import ctbrec.ui.controls.DateTimeCellFactory;
|
||||
import ctbrec.ui.controls.Dialogs;
|
||||
import ctbrec.ui.controls.SearchBox;
|
||||
|
@ -675,8 +675,7 @@ public class RecordedModelsTab extends Tab implements TabSelectionListener {
|
|||
MenuItem openRecDir = new MenuItem("Open recording directory");
|
||||
openRecDir.setOnAction(e -> new OpenRecordingsDir(table, selectedModels.get(0)).execute());
|
||||
|
||||
ContextMenu menu = new ContextMenu(stop);
|
||||
UiUtils.disableRightClickFor(menu);
|
||||
ContextMenu menu = new CustomMouseBehaviorContextMenu(stop);
|
||||
if (selectedModels.size() == 1) {
|
||||
menu.getItems().add(selectedModels.get(0).isSuspended() ? resumeRecording : pauseRecording);
|
||||
menu.getItems().add(stopRecordingAt);
|
||||
|
|
|
@ -46,11 +46,11 @@ import ctbrec.ui.DesktopIntegration;
|
|||
import ctbrec.ui.FileDownload;
|
||||
import ctbrec.ui.JavaFxRecording;
|
||||
import ctbrec.ui.Player;
|
||||
import ctbrec.ui.UiUtils;
|
||||
import ctbrec.ui.action.FollowAction;
|
||||
import ctbrec.ui.action.PauseAction;
|
||||
import ctbrec.ui.action.PlayAction;
|
||||
import ctbrec.ui.action.StopRecordingAction;
|
||||
import ctbrec.ui.controls.CustomMouseBehaviorContextMenu;
|
||||
import ctbrec.ui.controls.DateTimeCellFactory;
|
||||
import ctbrec.ui.controls.Dialogs;
|
||||
import ctbrec.ui.controls.Toast;
|
||||
|
@ -390,11 +390,10 @@ public class RecordingsTab extends Tab implements TabSelectionListener {
|
|||
}
|
||||
|
||||
private ContextMenu createContextMenu(List<JavaFxRecording> recordings) {
|
||||
ContextMenu contextMenu = new ContextMenu();
|
||||
ContextMenu contextMenu = new CustomMouseBehaviorContextMenu();
|
||||
contextMenu.setHideOnEscape(true);
|
||||
contextMenu.setAutoHide(true);
|
||||
contextMenu.setAutoFix(true);
|
||||
UiUtils.disableRightClickFor(contextMenu);
|
||||
|
||||
JavaFxRecording first = recordings.get(0);
|
||||
MenuItem openInPlayer = new MenuItem("Open in Player");
|
||||
|
|
|
@ -38,10 +38,10 @@ import ctbrec.ui.DesktopIntegration;
|
|||
import ctbrec.ui.SiteUiFactory;
|
||||
import ctbrec.ui.TipDialog;
|
||||
import ctbrec.ui.TokenLabel;
|
||||
import ctbrec.ui.UiUtils;
|
||||
import ctbrec.ui.action.IgnoreModelsAction;
|
||||
import ctbrec.ui.action.OpenRecordingsDir;
|
||||
import ctbrec.ui.action.SetStopDateAction;
|
||||
import ctbrec.ui.controls.CustomMouseBehaviorContextMenu;
|
||||
import ctbrec.ui.controls.FasterVerticalScrollPaneSkin;
|
||||
import ctbrec.ui.controls.SearchBox;
|
||||
import ctbrec.ui.controls.SearchPopover;
|
||||
|
@ -477,10 +477,10 @@ public class ThumbOverviewTab extends Tab implements TabSelectionListener {
|
|||
openInPlayer.setOnAction(e -> startPlayer(getSelectedThumbCells(cell)));
|
||||
|
||||
MenuItem start = new MenuItem("Start Recording");
|
||||
start.setOnAction(e -> startStopAction(e, getSelectedThumbCells(cell), true));
|
||||
start.setOnAction(e -> startStopAction(getSelectedThumbCells(cell), true));
|
||||
|
||||
MenuItem stop = new MenuItem("Stop Recording");
|
||||
stop.setOnAction(e -> startStopAction(e, getSelectedThumbCells(cell), false));
|
||||
stop.setOnAction(e -> startStopAction(getSelectedThumbCells(cell), false));
|
||||
MenuItem startStop = recorder.isTracked(cell.getModel()) ? stop : start;
|
||||
|
||||
MenuItem recordUntil = new MenuItem("Start Recording Until");
|
||||
|
@ -515,12 +515,11 @@ public class ThumbOverviewTab extends Tab implements TabSelectionListener {
|
|||
|
||||
configureItemsForSelection(cell, openInPlayer, copyUrl, sendTip);
|
||||
|
||||
ContextMenu contextMenu = new ContextMenu();
|
||||
ContextMenu contextMenu = new CustomMouseBehaviorContextMenu();
|
||||
contextMenu.setAutoHide(true);
|
||||
contextMenu.setHideOnEscape(true);
|
||||
contextMenu.setAutoFix(true);
|
||||
contextMenu.getItems().addAll(openInPlayer, new SeparatorMenuItem(), startStop);
|
||||
UiUtils.disableRightClickFor(contextMenu);
|
||||
if(modelIsTrackedByRecorder) {
|
||||
contextMenu.getItems().add(pauseResume);
|
||||
} else {
|
||||
|
@ -704,7 +703,7 @@ public class ThumbOverviewTab extends Tab implements TabSelectionListener {
|
|||
return 0;
|
||||
}
|
||||
|
||||
private void startStopAction(ActionEvent e, List<ThumbCell> selection, boolean start) {
|
||||
private void startStopAction(List<ThumbCell> selection, boolean start) {
|
||||
for (ThumbCell thumbCell : selection) {
|
||||
thumbCell.startStopAction(start);
|
||||
}
|
||||
|
|
|
@ -18,6 +18,7 @@ import ch.qos.logback.classic.spi.IThrowableProxy;
|
|||
import ch.qos.logback.classic.spi.LoggingEvent;
|
||||
import ch.qos.logback.classic.spi.StackTraceElementProxy;
|
||||
import ctbrec.event.EventBusHolder;
|
||||
import ctbrec.ui.controls.CustomMouseBehaviorContextMenu;
|
||||
import ctbrec.ui.controls.SearchBox;
|
||||
import javafx.application.Platform;
|
||||
import javafx.beans.property.SimpleStringProperty;
|
||||
|
@ -150,7 +151,7 @@ public class LoggingTab extends Tab {
|
|||
});
|
||||
});
|
||||
|
||||
ContextMenu menu = new ContextMenu(copy);
|
||||
ContextMenu menu = new CustomMouseBehaviorContextMenu(copy);
|
||||
return menu;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue