Closed claell closed 2 years ago
Related: #8295
Could potentially be solved by implementing #8774 and moving the other buttons slightly to the left. I think, there is some space between the search bar and the other buttons.
Agreed. Probably the responsive design behavior can be improved.
Just wanted to keep the issue description neutral to the solution (moving the button might help to improve discoverability and highlighting the special nature of it, for example).
This question is quite interesting and I will try to do it in this moment. After modifying the position of the button, I will submit a pull request.
Of course you can. You might want to coordinate and communicate with @Beingmani so as to not create any merge conflicts. He wants to work on #8774, which is very closely related.
Yes, i do. I already worked on it and it should fix the issue. Fixing #8774 will fix this.
Will raise a PR by tomorrow :)
Hey Guys,
Solution :
Moving the Background task button to the front will resolve the issues on smaller screens and since it's responsive, it will be the first one that is visible even on smaller screens.
Here is a picture of the screen where the solution is implemented. I'm trying to get rid of the space but this solution works for now I guess. let me know if I can draft a PR for this.
@Beingmani I read that you wanted to add a PR by yesterday. Are there current problems occurring that you need help with? Also, is that screenshot a mockup or an already implemented solution?
Additionally, please have a look at #8795, which is related. Maybe, you can work on that basis.
Just saw that you are working on https://github.com/Beingmani/jabref/commits/main, so adding for reference.
Hi @claell , The screenshot is from my local jabref where I made code changes.
Moving the Background task button to front should actually fix these issues.
As I wrote in the other PR, I don't think the the backgroundtask-indicator is important enough to be displayed right next to the search bar. The space is there because there is a hidden label that (as i remember) displays the number of hits of a search query. The space can probably removed if no search query is entered (managedProperty).
Removing the space (and adding it again after a query) will likely lead to "jumping" icons, though. I think that is why it has not been done before.
on 1366x768 dpi
removing a tiny bit of the white space would allow to at least show one more button. Instead of the arrow at the right, maybe the github button would then fit there too.
I also can trigger an Error pressing the button background task status indicator
. It completely crashes JabRef and I will have to do a force close. Unfortunately this is not just a problem concerning usability and beauty of the UI.
Here the error message:
JabRef 5.7--2022-05-19--4baf2a1 Linux 5.4.0-110-generic amd64 Java 18.0.1 JavaFX unknown
2022-05-20 12:59:19 [JavaFX Application Thread] org.jabref.gui.FallbackExceptionHandler.uncaughtException()
ERROR: Uncaught exception occurred in Thread[JavaFX Application Thread,5,main]: java.lang.NullPointerException: Cannot invoke "com.sun.glass.ui.Window.isTransparentWindow()" because the return value of "com.sun.javafx.tk.quantum.WindowStage.getPlatformWindow()" is null
at org.jabref.merged.module@5.7.59/com.sun.javafx.tk.quantum.GlassScene.getClearColor(Unknown Source)
at org.jabref.merged.module@5.7.59/com.sun.javafx.tk.quantum.SceneState.update(Unknown Source)
at org.jabref.merged.module@5.7.59/com.sun.javafx.tk.quantum.GlassScene.updateSceneState(Unknown Source)
at org.jabref.merged.module@5.7.59/com.sun.javafx.tk.quantum.GlassScene.releaseSynchronization(Unknown Source)
at org.jabref.merged.module@5.7.59/javafx.scene.Scene$ScenePulseListener.pulse(Unknown Source)
at org.jabref.merged.module@5.7.59/com.sun.javafx.tk.Toolkit.lambda$runPulse$2(Unknown Source)
at java.base/java.security.AccessController.doPrivileged(Unknown Source)
at org.jabref.merged.module@5.7.59/com.sun.javafx.tk.Toolkit.runPulse(Unknown Source)
at org.jabref.merged.module@5.7.59/com.sun.javafx.tk.Toolkit.firePulse(Unknown Source)
at org.jabref.merged.module@5.7.59/com.sun.javafx.tk.quantum.QuantumToolkit.pulse(Unknown Source)
at org.jabref.merged.module@5.7.59/com.sun.javafx.tk.quantum.QuantumToolkit.pulse(Unknown Source)
at org.jabref.merged.module@5.7.59/com.sun.javafx.tk.quantum.QuantumToolkit.pulseFromQueue(Unknown Source)
at org.jabref.merged.module@5.7.59/com.sun.javafx.tk.quantum.QuantumToolkit.lambda$runToolkit$11(Unknown Source)
at org.jabref.merged.module@5.7.59/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(Unknown Source)
at org.jabref.merged.module@5.7.59/com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
at org.jabref.merged.module@5.7.59/com.sun.glass.ui.gtk.GtkApplication.lambda$runLoop$11(Unknown Source)
at java.base/java.lang.Thread.run(Unknown Source)
2022-05-20 12:59:19 [JavaFX Application Thread] org.jabref.gui.FallbackExceptionHandler.uncaughtException()
ERROR: Uncaught exception occurred in Thread[JavaFX Application Thread,5,main]: java.lang.IllegalStateException: The window has already been closed
at org.jabref.merged.module@5.7.59/com.sun.glass.ui.Window.checkNotClosed(Unknown Source)
at org.jabref.merged.module@5.7.59/com.sun.glass.ui.Window.getNativeWindow(Unknown Source)
at org.jabref.merged.module@5.7.59/com.sun.glass.ui.gtk.GtkWindow.getNativeWindow(Unknown Source)
at org.jabref.merged.module@5.7.59/com.sun.prism.PresentableState.update(Unknown Source)
at org.jabref.merged.module@5.7.59/com.sun.javafx.tk.quantum.SceneState.update(Unknown Source)
at org.jabref.merged.module@5.7.59/com.sun.javafx.tk.quantum.GlassScene.updateSceneState(Unknown Source)
at org.jabref.merged.module@5.7.59/com.sun.javafx.tk.quantum.WindowStage.lambda$setScene$1(Unknown Source)
at org.jabref.merged.module@5.7.59/com.sun.javafx.tk.quantum.QuantumToolkit.runWithRenderLock(Unknown Source)
at org.jabref.merged.module@5.7.59/com.sun.javafx.tk.quantum.WindowStage.setScene(Unknown Source)
at org.jabref.merged.module@5.7.59/javafx.stage.Window$12.invalidated(Unknown Source)
at org.jabref.merged.module@5.7.59/javafx.beans.property.BooleanPropertyBase.markInvalid(Unknown Source)
at org.jabref.merged.module@5.7.59/javafx.beans.property.BooleanPropertyBase.set(Unknown Source)
at org.jabref.merged.module@5.7.59/javafx.stage.Window.setShowing(Unknown Source)
at org.jabref.merged.module@5.7.59/javafx.stage.Window.hide(Unknown Source)
at org.jabref.merged.module@5.7.59/javafx.stage.PopupWindow.hide(Unknown Source)
at org.jabref.merged.module@5.7.59/org.controlsfx.control.PopOver.lambda$hide$5(Unknown Source)
at org.jabref.merged.module@5.7.59/javafx.animation.Animation.runHandler(Unknown Source)
at org.jabref.merged.module@5.7.59/javafx.animation.Animation.finished(Unknown Source)
at org.jabref.merged.module@5.7.59/javafx.animation.AnimationAccessorImpl.finished(Unknown Source)
at org.jabref.merged.module@5.7.59/com.sun.scenario.animation.shared.SingleLoopClipEnvelope.timePulse(Unknown Source)
at org.jabref.merged.module@5.7.59/javafx.animation.Animation.doTimePulse(Unknown Source)
at org.jabref.merged.module@5.7.59/javafx.animation.Animation$1.lambda$timePulse$0(Unknown Source)
at java.base/java.security.AccessController.doPrivileged(Unknown Source)
at org.jabref.merged.module@5.7.59/javafx.animation.Animation$1.timePulse(Unknown Source)
at org.jabref.merged.module@5.7.59/com.sun.scenario.animation.AbstractPrimaryTimer.timePulseImpl(Unknown Source)
at org.jabref.merged.module@5.7.59/com.sun.scenario.animation.AbstractPrimaryTimer$MainLoop.run(Unknown Source)
at org.jabref.merged.module@5.7.59/com.sun.javafx.tk.quantum.QuantumToolkit.pulse(Unknown Source)
at org.jabref.merged.module@5.7.59/com.sun.javafx.tk.quantum.QuantumToolkit.pulse(Unknown Source)
at org.jabref.merged.module@5.7.59/com.sun.javafx.tk.quantum.QuantumToolkit.pulseFromQueue(Unknown Source)
at org.jabref.merged.module@5.7.59/com.sun.javafx.tk.quantum.QuantumToolkit.lambda$runToolkit$11(Unknown Source)
at org.jabref.merged.module@5.7.59/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(Unknown Source)
at org.jabref.merged.module@5.7.59/com.sun.glass.ui.gtk.GtkApplication.enterNestedEventLoopImpl(Native Method)
at org.jabref.merged.module@5.7.59/com.sun.glass.ui.gtk.GtkApplication._enterNestedEventLoop(Unknown Source)
at org.jabref.merged.module@5.7.59/com.sun.glass.ui.Application.enterNestedEventLoop(Unknown Source)
at org.jabref.merged.module@5.7.59/com.sun.glass.ui.EventLoop.enter(Unknown Source)
at org.jabref.merged.module@5.7.59/com.sun.javafx.tk.quantum.QuantumToolkit.enterNestedEventLoop(Unknown Source)
at org.jabref.merged.module@5.7.59/javafx.stage.Stage.showAndWait(Unknown Source)
at org.jabref.merged.module@5.7.59/javafx.scene.control.HeavyweightDialog.showAndWait(Unknown Source)
at org.jabref.merged.module@5.7.59/javafx.scene.control.Dialog.showAndWait(Unknown Source)
at org.jabref@5.7.59/org.jabref.gui.JabRefDialogService.showErrorDialogAndWait(Unknown Source)
at org.jabref@5.7.59/org.jabref.gui.FallbackExceptionHandler.lambda$uncaughtException$0(Unknown Source)
at org.jabref.merged.module@5.7.59/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(Unknown Source)
at java.base/java.security.AccessController.doPrivileged(Unknown Source)
at org.jabref.merged.module@5.7.59/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(Unknown Source)
at org.jabref.merged.module@5.7.59/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(Unknown Source)
at org.jabref.merged.module@5.7.59/com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
at org.jabref.merged.module@5.7.59/com.sun.glass.ui.gtk.GtkApplication.lambda$runLoop$11(Unknown Source)
at java.base/java.lang.Thread.run(Unknown Source)
2022-05-20 12:59:19 [JavaFX Application Thread] org.jabref.gui.FallbackExceptionHandler.uncaughtException()
ERROR: Uncaught exception occurred in Thread[JavaFX Application Thread,5,main]: java.lang.IllegalStateException: The window has already been closed
at org.jabref.merged.module@5.7.59/com.sun.glass.ui.Window.checkNotClosed(Unknown Source)
at org.jabref.merged.module@5.7.59/com.sun.glass.ui.Window.getNativeWindow(Unknown Source)
at org.jabref.merged.module@5.7.59/com.sun.glass.ui.gtk.GtkWindow.getNativeWindow(Unknown Source)
at org.jabref.merged.module@5.7.59/com.sun.prism.PresentableState.update(Unknown Source)
at org.jabref.merged.module@5.7.59/com.sun.javafx.tk.quantum.SceneState.update(Unknown Source)
at org.jabref.merged.module@5.7.59/com.sun.javafx.tk.quantum.GlassScene.updateSceneState(Unknown Source)
at org.jabref.merged.module@5.7.59/com.sun.javafx.tk.quantum.GlassScene.releaseSynchronization(Unknown Source)
at org.jabref.merged.module@5.7.59/javafx.scene.Scene$ScenePulseListener.pulse(Unknown Source)
at org.jabref.merged.module@5.7.59/com.sun.javafx.tk.Toolkit.lambda$runPulse$2(Unknown Source)
at java.base/java.security.AccessController.doPrivileged(Unknown Source)
at org.jabref.merged.module@5.7.59/com.sun.javafx.tk.Toolkit.runPulse(Unknown Source)
at org.jabref.merged.module@5.7.59/com.sun.javafx.tk.Toolkit.firePulse(Unknown Source)
at org.jabref.merged.module@5.7.59/com.sun.javafx.tk.quantum.QuantumToolkit.pulse(Unknown Source)
at org.jabref.merged.module@5.7.59/com.sun.javafx.tk.quantum.QuantumToolkit.pulse(Unknown Source)
at org.jabref.merged.module@5.7.59/com.sun.javafx.tk.quantum.QuantumToolkit.pulseFromQueue(Unknown Source)
at org.jabref.merged.module@5.7.59/com.sun.javafx.tk.quantum.QuantumToolkit.lambda$runToolkit$11(Unknown Source)
at org.jabref.merged.module@5.7.59/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(Unknown Source)
at org.jabref.merged.module@5.7.59/com.sun.glass.ui.gtk.GtkApplication.enterNestedEventLoopImpl(Native Method)
at org.jabref.merged.module@5.7.59/com.sun.glass.ui.gtk.GtkApplication._enterNestedEventLoop(Unknown Source)
at org.jabref.merged.module@5.7.59/com.sun.glass.ui.Application.enterNestedEventLoop(Unknown Source)
at org.jabref.merged.module@5.7.59/com.sun.glass.ui.EventLoop.enter(Unknown Source)
at org.jabref.merged.module@5.7.59/com.sun.javafx.tk.quantum.QuantumToolkit.enterNestedEventLoop(Unknown Source)
at org.jabref.merged.module@5.7.59/javafx.stage.Stage.showAndWait(Unknown Source)
at org.jabref.merged.module@5.7.59/javafx.scene.control.HeavyweightDialog.showAndWait(Unknown Source)
at org.jabref.merged.module@5.7.59/javafx.scene.control.Dialog.showAndWait(Unknown Source)
at org.jabref@5.7.59/org.jabref.gui.JabRefDialogService.showErrorDialogAndWait(Unknown Source)
at org.jabref@5.7.59/org.jabref.gui.FallbackExceptionHandler.lambda$uncaughtException$0(Unknown Source)
at org.jabref.merged.module@5.7.59/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(Unknown Source)
at java.base/java.security.AccessController.doPrivileged(Unknown Source)
at org.jabref.merged.module@5.7.59/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(Unknown Source)
at org.jabref.merged.module@5.7.59/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(Unknown Source)
at org.jabref.merged.module@5.7.59/com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
at org.jabref.merged.module@5.7.59/com.sun.glass.ui.gtk.GtkApplication.lambda$runLoop$11(Unknown Source)
at java.base/java.lang.Thread.run(Unknown Source)
To summarize: Would really be good to always display "background task status indicator" even on small screens, because that would likely be a workaround to triggering the error. Edit: Yes I also agree It should not be displayed prominently on the left. In my opinion, the following buttons are very important too:
Edit2: Maybe one could enable disable groups of buttons via view
? Just like one can hide the groups panel or websearch. But maybe this is overkill.
That spaces are currently set on purpose:
Here you can see where the width is set for the left spacer. https://github.com/JabRef/jabref/blob/6a2332f6b17c818a7f091647b102e7099d36569e/src/main/java/org/jabref/gui/JabRefFrame.java#L541
I think, that this can be done more responsive (like on Firefox for example). The space around the search and address bar dynamically changes depending on the window width.
In the devcall, we decided to move forward with the less intrusive solution of https://github.com/JabRef/jabref/pull/8798. That solution works in smaller window sizes equal to 1280x960 or bigger than that.
Is your suggestion for improvement related to a problem? Please describe. On smaller window sizes, the status indicator (and button) for background tasks is hidden. I think such an indicator should never be hidden.
Describe the solution you'd like Possibly change its location or never hide it at its current place.
Additional context