Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
e5d0fe28
D
dragonwell8_jdk
项目概览
openanolis
/
dragonwell8_jdk
通知
4
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dragonwell8_jdk
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
e5d0fe28
编写于
6月 13, 2013
作者:
P
pchelko
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
8013468: [macosx] Cursor does not update properly when in fullscreen mode on Mac
Reviewed-by: anthony, serb
上级
950c342e
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
170 addition
and
4 deletion
+170
-4
src/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java
src/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java
+0
-2
src/macosx/native/sun/awt/AWTWindow.m
src/macosx/native/sun/awt/AWTWindow.m
+4
-2
test/java/awt/Mouse/EnterExitEvents/FullscreenEnterEventTest.java
...a/awt/Mouse/EnterExitEvents/FullscreenEnterEventTest.java
+166
-0
未找到文件。
src/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java
浏览文件 @
e5d0fe28
...
...
@@ -804,8 +804,6 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo
throw
new
RuntimeException
(
"Unknown window state: "
+
windowState
);
}
nativeSynthesizeMouseEnteredExitedEvents
();
// NOTE: the SWP.windowState field gets updated to the newWindowState
// value when the native notification comes to us
}
...
...
src/macosx/native/sun/awt/AWTWindow.m
浏览文件 @
e5d0fe28
...
...
@@ -447,6 +447,8 @@ AWT_ASSERT_APPKIT_THREAD;
// TODO: create generic AWT assert
}
[
AWTWindow
synthesizeMouseEnteredExitedEventsForAllWindows
];
NSRect
frame
=
ConvertNSScreenRect
(
env
,
[
self
.
nsWindow
frame
]);
static
JNF_MEMBER_CACHE
(
jm_deliverMoveResizeEvent
,
jc_CPlatformWindow
,
"deliverMoveResizeEvent"
,
"(IIIIZ)V"
);
...
...
@@ -630,6 +632,7 @@ AWT_ASSERT_APPKIT_THREAD;
[
self
_notifyFullScreenOp
:
com_apple_eawt_FullScreenHandler_FULLSCREEN_DID_ENTER
withEnv
:
env
];
(
*
env
)
->
DeleteLocalRef
(
env
,
platformWindow
);
}
[
AWTWindow
synthesizeMouseEnteredExitedEventsForAllWindows
];
}
-
(
void
)
windowWillExitFullScreen
:(
NSNotification
*
)
notification
{
...
...
@@ -652,6 +655,7 @@ AWT_ASSERT_APPKIT_THREAD;
[
self
_notifyFullScreenOp
:
com_apple_eawt_FullScreenHandler_FULLSCREEN_DID_EXIT
withEnv
:
env
];
(
*
env
)
->
DeleteLocalRef
(
env
,
platformWindow
);
}
[
AWTWindow
synthesizeMouseEnteredExitedEventsForAllWindows
];
}
-
(
void
)
sendEvent
:(
NSEvent
*
)
event
{
...
...
@@ -891,8 +895,6 @@ JNF_COCOA_ENTER(env);
// ensure we repaint the whole window after the resize operation
// (this will also re-enable screen updates, which were disabled above)
// TODO: send PaintEvent
[
AWTWindow
synthesizeMouseEnteredExitedEventsForAllWindows
];
}];
JNF_COCOA_EXIT
(
env
);
...
...
test/java/awt/Mouse/EnterExitEvents/FullscreenEnterEventTest.java
0 → 100644
浏览文件 @
e5d0fe28
/*
* Copyright (c) 2013 Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
import
sun.misc.OSEnvironment
;
import
test.java.awt.regtesthelpers.Util
;
import
javax.swing.*
;
import
java.awt.*
;
import
java.awt.event.InputEvent
;
import
java.awt.event.MouseAdapter
;
import
java.awt.event.MouseEvent
;
import
java.lang.reflect.InvocationHandler
;
import
java.lang.reflect.Method
;
import
java.lang.reflect.Proxy
;
/*
* @test
* @bug 8013468
* @summary Cursor does not update properly when in fullscreen mode on Mac
* The core reason of the issue was the lack of a mouse entered event in fullscreen
* @library ../../regtesthelpers
* @build Util
* @author Petr Pchelko area=awt.event
* @run main FullscreenEnterEventTest
*/
public
class
FullscreenEnterEventTest
{
private
static
String
OS
=
System
.
getProperty
(
"os.name"
).
toLowerCase
();
private
static
JFrame
frame
;
private
static
volatile
int
mouseEnterCount
=
0
;
private
static
volatile
boolean
windowEnteringFullScreen
=
false
;
private
static
volatile
boolean
windowEnteredFullScreen
=
false
;
public
static
void
main
(
String
[]
args
)
throws
Exception
{
if
(!
OS
.
contains
(
"mac"
))
{
System
.
out
.
println
(
"The test is applicable only to Mac OS X. Passed"
);
return
;
}
SwingUtilities
.
invokeAndWait
(
new
Runnable
()
{
@Override
public
void
run
()
{
createAndShowGUI
();
}
});
//Move the mouse away from the frame and check the View-base full screen mode
Robot
r
=
Util
.
createRobot
();
Util
.
waitForIdle
(
r
);
r
.
mouseMove
(
500
,
500
);
Util
.
waitForIdle
(
r
);
mouseEnterCount
=
0
;
SwingUtilities
.
invokeAndWait
(
new
Runnable
()
{
@Override
public
void
run
()
{
GraphicsEnvironment
.
getLocalGraphicsEnvironment
().
getDefaultScreenDevice
().
setFullScreenWindow
(
frame
);
}
});
Util
.
waitForIdle
(
r
);
if
(
mouseEnterCount
!=
1
)
{
throw
new
RuntimeException
(
"No MouseEntered event for view-base full screen. Failed."
);
}
SwingUtilities
.
invokeAndWait
(
new
Runnable
()
{
@Override
public
void
run
()
{
GraphicsEnvironment
.
getLocalGraphicsEnvironment
().
getDefaultScreenDevice
().
setFullScreenWindow
(
null
);
}
});
//Test native full screen support
Point
fullScreenButtonPos
=
frame
.
getLocation
();
fullScreenButtonPos
.
translate
(
frame
.
getWidth
()
-
10
,
10
);
r
.
mouseMove
(
fullScreenButtonPos
.
x
,
fullScreenButtonPos
.
y
);
mouseEnterCount
=
0
;
//Cant use waitForIdle for full screen transition.
int
waitCount
=
0
;
while
(!
windowEnteringFullScreen
)
{
r
.
mousePress
(
InputEvent
.
BUTTON1_MASK
);
r
.
mouseRelease
(
InputEvent
.
BUTTON1_MASK
);
Thread
.
sleep
(
100
);
if
(
waitCount
++
>
10
)
throw
new
RuntimeException
(
"Can't enter full screen mode. Failed"
);
}
waitCount
=
0
;
while
(!
windowEnteredFullScreen
)
{
Thread
.
sleep
(
200
);
if
(
waitCount
++
>
10
)
throw
new
RuntimeException
(
"Can't enter full screen mode. Failed"
);
}
if
(
mouseEnterCount
!=
1
)
{
throw
new
RuntimeException
(
"No MouseEntered event for native full screen. Failed."
);
}
}
private
static
void
createAndShowGUI
()
{
frame
=
new
JFrame
(
" Fullscreen OSX Bug "
);
frame
.
setDefaultCloseOperation
(
JFrame
.
EXIT_ON_CLOSE
);
enableFullScreen
(
frame
);
frame
.
addMouseListener
(
new
MouseAdapter
()
{
@Override
public
void
mouseEntered
(
MouseEvent
e
)
{
mouseEnterCount
++;
}
});
frame
.
setBounds
(
100
,
100
,
100
,
100
);
frame
.
pack
();
frame
.
setVisible
(
true
);
}
/*
* Use reflection to make a test compilable on not Mac OS X
*/
private
static
void
enableFullScreen
(
Window
window
)
{
try
{
Class
fullScreenUtilities
=
Class
.
forName
(
"com.apple.eawt.FullScreenUtilities"
);
Method
setWindowCanFullScreen
=
fullScreenUtilities
.
getMethod
(
"setWindowCanFullScreen"
,
Window
.
class
,
boolean
.
class
);
setWindowCanFullScreen
.
invoke
(
fullScreenUtilities
,
window
,
true
);
Class
fullScreenListener
=
Class
.
forName
(
"com.apple.eawt.FullScreenListener"
);
Object
listenerObject
=
Proxy
.
newProxyInstance
(
fullScreenListener
.
getClassLoader
(),
new
Class
[]{
fullScreenListener
},
new
InvocationHandler
()
{
@Override
public
Object
invoke
(
Object
proxy
,
Method
method
,
Object
[]
args
)
throws
Throwable
{
switch
(
method
.
getName
())
{
case
"windowEnteringFullScreen"
:
windowEnteringFullScreen
=
true
;
break
;
case
"windowEnteredFullScreen"
:
windowEnteredFullScreen
=
true
;
break
;
}
return
null
;
}
});
Method
addFullScreenListener
=
fullScreenUtilities
.
getMethod
(
"addFullScreenListenerTo"
,
Window
.
class
,
fullScreenListener
);
addFullScreenListener
.
invoke
(
fullScreenUtilities
,
window
,
listenerObject
);
}
catch
(
Exception
e
)
{
throw
new
RuntimeException
(
"FullScreen utilities not available"
,
e
);
}
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录