commit | a4e4430a5a7c2860de70ae59e94ba6aa9e3a23c8 | [log] [tgz] |
---|---|---|
author | Sergei Tachenov <sergei.tachenov@jetbrains.com> | Mon Aug 07 14:39:22 2023 +0300 |
committer | Maxim Kartashev <maxim.kartashev@jetbrains.com> | Tue Aug 22 12:19:23 2023 +0400 |
tree | e83911b7b5f51ff16b712c3661a2ef1d15cf7933 | |
parent | f85dae83dfec0108f76429981f4acb07ba64210d [diff] |
JBR-5824 Ensure popup menus are on the correct screen This is a very old bug, JDK-6415065. What happens here is that when the position of a popup menu is calculated, it can expand above or below, depending on the position of the parent menu, the item being expanded and the size of the submenu and screen resolution. If the menu decides to expand above, the position calculation in JMenu.getPopupMenuOrigin may yield a coordinate above the current screen. Later, JPopupMenu.adjustPopupLocationToFitScreen tries to fit the entire menu into the screen. However, it has no idea which screen is correct, as all it has is an (x, y) location. If that location is invalid, it may correct it by fitting it into the screen. However, if it is valid, but located on an incorrect screen, then the whole logic goes awry and the menu is fitted into the wrong screen. Fix by pre-adjusting the Y location to fit into the correct screen in JMenu.getPopupMenuOrigin, where the correct screen is still known. The resulting location may still not be final, as the menu's height needs to be taken into account as well, but that's exactly what JPopupMenu.adjustPopupLocationToFitScreen does. Since the coordinate is on the correct screen now, it fits the menu into the same screen, which guarantees it'll be the correct one.
JetBrains Runtime is a fork of OpenJDK available for Windows, Mac OS X, and Linux. It supports enhanced class redefinition (DCEVM), features optional JCEF, a framework for embedding Chromium-based browsers, includes a number of improvements in font rendering, keyboards support, windowing/focus subsystems, HiDPI, accessibility, and performance, provides better desktop integration and bugfixes not yet present in OpenJDK.
NOTE: This is a development branch that is periodically synchronized with the OpenJDK master branch.
Release builds are based on these branches:
Download the latest releases of JetBrains Runtime to use with JetBrains IDEs. The full list can be found on the releases page.
IDE Version | Latest JBR | Date Released |
---|---|---|
2023.1 | 17.0.6-b829.5 | 01-Mar-2023 |
2022.3 | 17.0.6-b653.34 | 28-Feb-2023 |
2022.2 | 17.0.6-b469.82 | 06-Mar-2023 |
IDE Version | Latest JBR | Date Released |
---|---|---|
2022.1 | 11_0_16-b2043.64 | 10-Nov-2022 |
2021.3 | 11_0_14_1-b1751.46 | 21-Feb-2022 |
2021.2 | 11_0_13-b1504.49 | 15-Nov-2021 |
2021.1 | 11.0.11+9-b1341.60 | 15-Jun-2021 |
2020.3 | 11_0_10-b1145.115 | 21-Jun-2021 |
-XX:+AllowEnhancedClassRedefinition
.git config --global core.autocrlf input git clone git@github.com:JetBrains/JetBrainsRuntime.git cd JetBrainsRuntime git checkout jbr21
git config --global core.autocrlf false git clone git@github.com:JetBrains/JetBrainsRuntime.git cd JetBrainsRuntime git checkout jbr21
Here are quick per-platform instructions for those who can't wait to get started. Please refer to OpenJDK build docs for in-depth coverage of all the details.
TIP: To get a preliminary report of what's missing, run
./configure
and check its output. It would usually have meaningful advice on how to solve the problem.
Create a container:
$ cd jb/project/docker $ docker build . ... Successfully built 942ea9900054
Run these commands in the new container:
$ docker run -v `pwd`../../../../:/JetBrainsRuntime -it 942ea9900054 # cd /JetBrainsRuntime # sh ./configure # make images CONF=linux-x86_64-normal-server-release
Install the necessary tools, libraries, and headers with:
$ sudo apt-get install autoconf make build-essential libx11-dev libxext-dev libxrender-dev libxtst-dev \ libxt-dev libxrandr-dev libcups2-dev libfontconfig1-dev libasound2-dev
Get Java 19 (for instance, Azul Zulu Builds of OpenJDK 19).
Then run the following:
$ cd JetBrainsRuntime $ git checkout main $ sh ./configure $ make images
This will build the release configuration under ./build/linux-x86_64-server-release/
.
autoconf
, binutils
, cpio
, diffutils
, file
, gawk
, gcc-core
, make
, m4
, unzip
, zip
.From the command line:
"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvarsall.bat" amd64 "c:\Program_Files\cygwin64\bin\mintty.exe" /bin/bash -l
The first command sets up environment variables, the second starts a Cygwin shell with the proper environment.
In the Cygwin shell:
$ cd JetBrainsRuntime $ git checkout main $ bash configure --with-toolchain-version=2019 $ make images
This will build the release configuration under ./build/windows-x86_64-server-release/
.
Install the following:
autoconf
via Homebrew.From the command line:
$ cd JetBrainsRuntime $ git checkout main $ sh ./configure $ make images
This will build the release configuration under ./build/macosx-x86_64-server-release/
.
You can use CLion to develop native parts of the JetBrains Runtime and IntelliJ IDEA for the parts written in Java. Both require projects to be created.
Run
$ make compile-commands
in the git root and open the resulting build/.../compile_commands.json
file as a project. Then use Tools | Compilation Database | Change Project Root
to point to git root of this repository.
See also this detailed step-by-step tutorial for all platforms: How to develop OpenJDK with CLion.
Run
$ sh ./bin/idea.sh
in the git root to generate project files (add --help
for options). If you have multiple configurations (for example, release
and fastdebug
), supply the --conf <conf_name>
argument. Then open the git root directory as a project in IDEA.
We are happy to receive your pull requests! Before you submit one, please sign our Contributor License Agreement (CLA).