PopupMenus should indicate if they are using a custom rendering
authordino@apple.com <dino@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 9 Oct 2014 00:12:55 +0000 (00:12 +0000)
committerdino@apple.com <dino@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 9 Oct 2014 00:12:55 +0000 (00:12 +0000)
https://bugs.webkit.org/show_bug.cgi?id=137543
<rdar://problem/18544212>

Reviewed by Beth Dakin.

On Yosemite there is an animation as a popup menu closes. We can't use
this when there is a custom rendering, since the animation doesn't match
the final result. Implement this by hooking into the existing code
for hiding the arrows during animation - a WebKitSystemInterface update
will implement the other side.

* platform/mac/WebCoreSystemInterface.h: Rename parameter to be more clear.
* platform/mac/WebCoreSystemInterface.mm:
* rendering/RenderMenuList.cpp:
(RenderMenuList::menuStyle): We need to check that we are a native-looking
button, not just something with appearance.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@174485 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/platform/mac/WebCoreSystemInterface.h
Source/WebCore/platform/mac/WebCoreSystemInterface.mm
Source/WebCore/rendering/RenderMenuList.cpp

index ce3e9ff..bb401e1 100644 (file)
@@ -1,3 +1,23 @@
+2014-10-08  Dean Jackson  <dino@apple.com>
+
+        PopupMenus should indicate if they are using a custom rendering
+        https://bugs.webkit.org/show_bug.cgi?id=137543
+        <rdar://problem/18544212>
+
+        Reviewed by Beth Dakin.
+
+        On Yosemite there is an animation as a popup menu closes. We can't use
+        this when there is a custom rendering, since the animation doesn't match
+        the final result. Implement this by hooking into the existing code
+        for hiding the arrows during animation - a WebKitSystemInterface update
+        will implement the other side.
+
+        * platform/mac/WebCoreSystemInterface.h: Rename parameter to be more clear.
+        * platform/mac/WebCoreSystemInterface.mm:
+        * rendering/RenderMenuList.cpp:
+        (RenderMenuList::menuStyle): We need to check that we are a native-looking
+        button, not just something with appearance.
+
 2014-10-08  Christophe Dumez  <cdumez@apple.com>
 
         Use is<>() / downcast<>() for RenderBlock objects
index be8eba2..ab577ef 100644 (file)
@@ -187,7 +187,7 @@ extern void (*wkWindowSetAlpha)(NSWindow *, float);
 extern void (*wkWindowSetScaledFrame)(NSWindow *, NSRect, NSRect);
 
 #if defined(__OBJC__)
-extern void (*wkPopupMenu)(NSMenu*, NSPoint location, float width, NSView*, int selectedItem, NSFont*, NSControlSize controlSize, bool hideArrows);
+extern void (*wkPopupMenu)(NSMenu*, NSPoint location, float width, NSView*, int selectedItem, NSFont*, NSControlSize controlSize, bool usesCustomAppearance);
 #endif
 
 extern unsigned (*wkQTIncludeOnlyModernMediaFileTypes)(void);
index 117e13b..3d86e65 100644 (file)
@@ -62,7 +62,7 @@ NSDate *(*wkGetNSURLResponseLastModifiedDate)(NSURLResponse *response);
 BOOL (*wkGetNSURLResponseMustRevalidate)(NSURLResponse *response);
 void (*wkGetWheelEventDeltas)(NSEvent*, float* deltaX, float* deltaY, BOOL* continuous);
 UInt8 (*wkGetNSEventKeyChar)(NSEvent *);
-void (*wkPopupMenu)(NSMenu*, NSPoint location, float width, NSView*, int selectedItem, NSFont*, NSControlSize controlSize, bool hideArrows);
+void (*wkPopupMenu)(NSMenu*, NSPoint location, float width, NSView*, int selectedItem, NSFont*, NSControlSize controlSize, bool usesCustomAppearance);
 unsigned (*wkQTIncludeOnlyModernMediaFileTypes)(void);
 void (*wkQTMovieDisableComponent)(uint32_t[5]);
 float (*wkQTMovieMaxTimeLoaded)(QTMovie*);
index 1e0cf51..484ffbf 100644 (file)
@@ -567,7 +567,8 @@ PopupMenuStyle RenderMenuList::menuStyle() const
     const RenderStyle& styleToUse = m_innerBlock ? m_innerBlock->style() : style();
     IntRect absBounds = absoluteBoundingBoxRectIgnoringTransforms();
     return PopupMenuStyle(styleToUse.visitedDependentColor(CSSPropertyColor), styleToUse.visitedDependentColor(CSSPropertyBackgroundColor),
-        styleToUse.font(), styleToUse.visibility() == VISIBLE, styleToUse.display() == NONE, style().hasAppearance(), styleToUse.textIndent(),
+        styleToUse.font(), styleToUse.visibility() == VISIBLE, styleToUse.display() == NONE,
+        style().hasAppearance() && style().appearance() == MenulistPart, styleToUse.textIndent(),
         style().direction(), isOverride(style().unicodeBidi()), PopupMenuStyle::DefaultBackgroundColor,
         PopupMenuStyle::SelectPopup, theme().popupMenuSize(styleToUse, absBounds));
 }