Changeset 244635 in webkit
- Timestamp:
- Apr 24, 2019 10:51:01 PM (5 years ago)
- Location:
- trunk
- Files:
-
- 22 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/ChangeLog
r244541 r244635 1 2019-04-24 Carlos Garcia Campos <cgarcia@igalia.com> 2 3 [GTK] Hardcoded text color in input fields 4 https://bugs.webkit.org/show_bug.cgi?id=126907 5 6 Reviewed by Michael Catanzaro. 7 8 Set and expose to build HAVE_OS_DARK_MODE_SUPPORT=1. 9 10 * Source/cmake/OptionsGTK.cmake: 11 1 12 2019-04-23 Don Olmstead <don.olmstead@sony.com> 2 13 -
trunk/LayoutTests/ChangeLog
r244630 r244635 1 2019-04-24 Carlos Garcia Campos <cgarcia@igalia.com> 2 3 [GTK] Hardcoded text color in input fields 4 https://bugs.webkit.org/show_bug.cgi?id=126907 5 6 Reviewed by Michael Catanzaro. 7 8 Remove expectations for tests that are passing again. 9 10 * platform/gtk/TestExpectations: 11 1 12 2019-04-24 Simon Fraser <simon.fraser@apple.com> 2 13 -
trunk/LayoutTests/platform/gtk/TestExpectations
r244629 r244635 1177 1177 webkit.org/b/181659 fast/canvas/webgl/simulated-vertexAttrib0-invalid-indicies.html [ Skip ] 1178 1178 1179 # When text input colors are set we do not style with GTK, so these reftests will fail1180 webkit.org/b/186219 fast/forms/input-placeholder-text-indent.html [ ImageOnlyFailure ]1181 webkit.org/b/186219 fast/forms/password-placeholder-text-security.html [ ImageOnlyFailure ]1182 webkit.org/b/186219 fast/forms/placeholder-with-positioned-element.html [ ImageOnlyFailure ]1183 webkit.org/b/186219 fast/forms/textarea-placeholder-wrapping.html [ ImageOnlyFailure ]1184 1185 1179 # This seems to be testing Apple-specific behavior? 1186 1180 css3/color-filters/color-filter-ignore-semantic.html [ ImageOnlyFailure ] -
trunk/Source/WTF/ChangeLog
r244600 r244635 1 2019-04-24 Carlos Garcia Campos <cgarcia@igalia.com> 2 3 [GTK] Hardcoded text color in input fields 4 https://bugs.webkit.org/show_bug.cgi?id=126907 5 6 Reviewed by Michael Catanzaro. 7 8 Define HAVE_OS_DARK_MODE_SUPPORT for GTK port. 9 10 * wtf/Platform.h: 11 1 12 2019-04-24 Tim Horton <timothy_horton@apple.com> 2 13 -
trunk/Source/WTF/wtf/Platform.h
r244600 r244635 1417 1417 #endif 1418 1418 1419 #if PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 1014001419 #if (PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101400) || PLATFORM(GTK) 1420 1420 #define HAVE_OS_DARK_MODE_SUPPORT 1 1421 1421 #endif -
trunk/Source/WebCore/CMakeLists.txt
r244582 r244635 1683 1683 endif () 1684 1684 1685 if (HAVE_OS_DARK_MODE_SUPPORT) 1686 set(FEATURE_DEFINES_WITH_SPACE_SEPARATOR "${FEATURE_DEFINES_WITH_SPACE_SEPARATOR} HAVE_OS_DARK_MODE_SUPPORT") 1687 endif () 1688 1685 1689 set(WebCoreTestSupport_PRIVATE_INCLUDE_DIRECTORIES 1686 1690 "${WEBCORE_DIR}/platform/mock" -
trunk/Source/WebCore/ChangeLog
r244633 r244635 1 2019-04-24 Carlos Garcia Campos <cgarcia@igalia.com> 2 3 [GTK] Hardcoded text color in input fields 4 https://bugs.webkit.org/show_bug.cgi?id=126907 5 6 Reviewed by Michael Catanzaro. 7 8 Enable HAVE_OS_DARK_MODE_SUPPORT for GTK port to ensure that dark mode is used when Page::useDarkAppearance() 9 returns true. This patch reverts r232913, I'll reopen the bug, I think we need to find a better solution for 10 that. 11 12 * CMakeLists.txt: Add HAVE_OS_DARK_MODE_SUPPORT to FEATURE_DEFINES_WITH_SPACE_SEPARATOR if enabled. 13 * css/CSSDefaultStyleSheets.cpp: Ensure html{color:text} is used in simple style sheet when 14 HAVE_OS_DARK_MODE_SUPPORT is enabled. 15 * page/FrameView.cpp: 16 (WebCore::FrameView::updateBackgroundRecursively): Use CSSValueWindowframe to get the frame view background 17 color when HAVE_OS_DARK_MODE_SUPPORT is enabled for non-mac ports. 18 * platform/gtk/RenderThemeWidget.cpp: 19 (WebCore::RenderThemeWidget::getOrCreate): Create window widget. 20 (WebCore::RenderThemeWindow::RenderThemeWindow): Add window widget. 21 * platform/gtk/RenderThemeWidget.h: 22 * rendering/RenderThemeGtk.cpp: 23 (WebCore::RenderThemeGtk::disabledTextColor const): Always use the color from the theme for consistency with 24 other form controls. 25 (WebCore::RenderThemeGtk::systemColor const): Get the color from the theme for CSSValueText, CSSValueGraytext 26 and CSSValueWindowframe. 27 * rendering/RenderThemeGtk.h: 28 1 29 2019-04-24 Zalan Bujtas <zalan@apple.com> 2 30 -
trunk/Source/WebCore/css/CSSDefaultStyleSheets.cpp
r244440 r244635 82 82 83 83 // FIXME: It would be nice to use some mechanism that guarantees this is in sync with the real UA stylesheet. 84 #if PLATFORM(MAC)85 // The only difference in the simple style sheet for macOSis the addition of html{color:text}.84 #if HAVE(OS_DARK_MODE_SUPPORT) 85 // The only difference in the simple style sheet for dark mode is the addition of html{color:text}. 86 86 static const char* simpleUserAgentStyleSheet = "html,body,div{display:block}html{color:text}head{display:none}body{margin:8px}div:focus,span:focus,a:focus{outline:auto 5px -webkit-focus-ring-color}a:any-link{color:-webkit-link;text-decoration:underline}a:any-link:active{color:-webkit-activelink}"; 87 87 #else -
trunk/Source/WebCore/page/FrameView.cpp
r244633 r244635 3001 3001 void FrameView::updateBackgroundRecursively(const Optional<Color>& backgroundColor) 3002 3002 { 3003 #if HAVE(OS_DARK_MODE_SUPPORT) && ENABLE(DARK_MODE_CSS) 3004 Color baseBackgroundColor = backgroundColor.valueOr(RenderTheme::singleton().systemColor(CSSValueAppleSystemControlBackground, styleColorOptions())); 3003 #if HAVE(OS_DARK_MODE_SUPPORT) 3004 #if PLATFORM(MAC) || PLATFORM(IOS_FAMILY) 3005 static const auto cssValueControlBackground = CSSValueAppleSystemControlBackground; 3006 #else 3007 static const auto cssValueControlBackground = CSSValueWindowframe; 3008 #endif 3009 Color baseBackgroundColor = backgroundColor.valueOr(RenderTheme::singleton().systemColor(cssValueControlBackground, styleColorOptions())); 3005 3010 #else 3006 3011 Color baseBackgroundColor = backgroundColor.valueOr(Color::white); -
trunk/Source/WebCore/platform/gtk/RenderThemeWidget.cpp
r241654 r244635 86 86 case RenderThemeWidget::Type::Icon: 87 87 return std::make_unique<RenderThemeIcon>(); 88 case RenderThemeWidget::Type::Window: 89 return std::make_unique<RenderThemeWindow>(); 88 90 } 89 91 ASSERT_NOT_REACHED(); … … 294 296 } 295 297 298 RenderThemeWindow::RenderThemeWindow() 299 : m_window(RenderThemeGadget::create({ RenderThemeGadget::Type::Generic, "window", { "background" } })) 300 { 301 } 302 296 303 } // namepsace WebCore 297 304 -
trunk/Source/WebCore/platform/gtk/RenderThemeWidget.h
r217702 r244635 60 60 ListView, 61 61 Icon, 62 Window, 62 63 }; 63 64 static RenderThemeWidget& getOrCreate(Type); … … 234 235 }; 235 236 237 class RenderThemeWindow final : public RenderThemeWidget { 238 public: 239 RenderThemeWindow(); 240 ~RenderThemeWindow() = default; 241 242 RenderThemeGadget& window() const { return *m_window; } 243 244 private: 245 std::unique_ptr<RenderThemeGadget> m_window; 246 247 }; 248 236 249 } // namespace WebCore 237 250 -
trunk/Source/WebCore/rendering/RenderThemeGtk.cpp
r240437 r244635 168 168 MediaButton, 169 169 #endif 170 #if GTK_CHECK_VERSION(3, 20, 0) 171 Window, 172 #endif 170 173 }; 171 174 … … 927 930 } 928 931 929 bool RenderThemeGtk::isControlStyled(const RenderStyle& style, const BorderData& border, const FillLayer& background, const Color& backgroundColor) const930 {931 // To avoid rendering issues with dark themes, if text input elements have color styling, we don't style them with GTK.932 if ((style.appearance() == TextFieldPart || style.appearance() == TextAreaPart || style.appearance() == SearchFieldPart) && style.color() != RenderStyle::initialColor())933 return true;934 935 return RenderTheme::isControlStyled(style, border, background, backgroundColor);936 }937 938 932 #if GTK_CHECK_VERSION(3, 20, 0) 939 933 … … 1707 1701 gadget = &static_cast<RenderThemeButton&>(RenderThemeWidget::getOrCreate(RenderThemeWidget::Type::Button)).button(); 1708 1702 break; 1703 case Window: 1704 gadget = &static_cast<RenderThemeWindow&>(RenderThemeWidget::getOrCreate(RenderThemeWidget::Type::Window)).window(); 1705 break; 1709 1706 } 1710 1707 … … 1768 1765 } 1769 1766 1767 Color RenderThemeGtk::disabledTextColor(const Color&, const Color&) const 1768 { 1769 return styleColor(Entry, GTK_STATE_FLAG_INSENSITIVE, StyleColorForeground); 1770 } 1771 1770 1772 Color RenderThemeGtk::systemColor(CSSValueID cssValueId, OptionSet<StyleColor::Options> options) const 1771 1773 { … … 1775 1777 case CSSValueCaptiontext: 1776 1778 return styleColor(Entry, GTK_STATE_FLAG_ACTIVE, StyleColorForeground); 1779 case CSSValueText: 1780 return styleColor(Entry, GTK_STATE_FLAG_ACTIVE, StyleColorForeground); 1781 case CSSValueGraytext: 1782 return styleColor(Entry, GTK_STATE_FLAG_INSENSITIVE, StyleColorForeground); 1783 #if GTK_CHECK_VERSION(3, 20, 0) 1784 case CSSValueWindowframe: 1785 return styleColor(Window, GTK_STATE_FLAG_ACTIVE, StyleColorBackground); 1786 #endif 1777 1787 default: 1778 1788 return RenderTheme::systemColor(cssValueId, options); -
trunk/Source/WebCore/rendering/RenderThemeGtk.h
r232913 r244635 81 81 Color platformInactiveListBoxSelectionBackgroundColor(OptionSet<StyleColor::Options>) const override; 82 82 Color platformInactiveListBoxSelectionForegroundColor(OptionSet<StyleColor::Options>) const override; 83 84 Color disabledTextColor(const Color&, const Color&) const override; 83 85 84 86 Seconds caretBlinkInterval() const override; … … 169 171 #endif 170 172 171 bool isControlStyled(const RenderStyle&, const BorderData&, const FillLayer&, const Color&) const override;172 173 173 Seconds animationRepeatIntervalForProgressBar(RenderProgress&) const override; 174 174 Seconds animationDurationForProgressBar(RenderProgress&) const override; -
trunk/Source/WebKit/ChangeLog
r244633 r244635 1 2019-04-24 Carlos Garcia Campos <cgarcia@igalia.com> 2 3 [GTK] Hardcoded text color in input fields 4 https://bugs.webkit.org/show_bug.cgi?id=126907 5 6 Reviewed by Michael Catanzaro. 7 8 Implement PageClient::effectiveAppearanceIsDark() for GTK port. 9 10 * UIProcess/API/gtk/PageClientImpl.cpp: 11 (WebKit::PageClientImpl::effectiveAppearanceIsDark const): Check if gtk-application-prefer-dark-theme setting is 12 enabled, or the theme name contains the -dark suffix or the GTK_THEME environment variable contains the :dark suffix. 13 * UIProcess/API/gtk/PageClientImpl.h: 14 * UIProcess/API/gtk/WebKitWebViewBase.cpp: 15 (themeChanged): Notify the WebPageProxy that the theme has changed. 16 (webkitWebViewBaseSetToplevelOnScreenWindow): Connect to notify::gtk-application-prefer-dark-theme and notify::gtk-theme-name. 17 * WebProcess/WebPage/WebPage.cpp: 18 * WebProcess/WebPage/gtk/WebPageGtk.cpp: 19 (WebKit::WebPage::setUseDarkAppearance): Set gtk-application-prefer-dark-theme setting accordingly. 20 1 21 2019-04-24 Zalan Bujtas <zalan@apple.com> 2 22 -
trunk/Source/WebKit/UIProcess/API/gtk/PageClientImpl.cpp
r243847 r244635 534 534 } 535 535 536 bool PageClientImpl::effectiveAppearanceIsDark() const 537 { 538 auto* settings = gtk_widget_get_settings(m_viewWidget); 539 gboolean preferDarkTheme; 540 g_object_get(settings, "gtk-application-prefer-dark-theme", &preferDarkTheme, nullptr); 541 if (preferDarkTheme) 542 return true; 543 544 GUniqueOutPtr<char> themeName; 545 g_object_get(settings, "gtk-theme-name", &themeName.outPtr(), nullptr); 546 if (g_str_has_suffix(themeName.get(), "-dark")) 547 return true; 548 549 if (auto* themeNameEnv = g_getenv("GTK_THEME")) 550 return g_str_has_suffix(themeNameEnv, ":dark"); 551 552 return false; 553 } 554 536 555 } // namespace WebKit -
trunk/Source/WebKit/UIProcess/API/gtk/PageClientImpl.h
r243847 r244635 163 163 WebCore::UserInterfaceLayoutDirection userInterfaceLayoutDirection() override { return WebCore::UserInterfaceLayoutDirection::LTR; } 164 164 165 bool effectiveAppearanceIsDark() const override; 166 165 167 // Members of PageClientImpl class 166 168 GtkWidget* m_viewWidget; -
trunk/Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp
r244500 r244635 184 184 unsigned long toplevelWindowStateEventID { 0 }; 185 185 unsigned long toplevelWindowRealizedID { 0 }; 186 unsigned long themeChangedID { 0 }; 187 unsigned long applicationPreferDarkThemeID { 0 }; 186 188 187 189 // View State. … … 266 268 } 267 269 270 static void themeChanged(WebKitWebViewBase* webViewBase) 271 { 272 webViewBase->priv->pageProxy->effectiveAppearanceDidChange(); 273 } 274 268 275 static void toplevelWindowRealized(WebKitWebViewBase* webViewBase) 269 276 { … … 298 305 g_signal_handler_disconnect(priv->toplevelOnScreenWindow, priv->toplevelWindowRealizedID); 299 306 priv->toplevelWindowRealizedID = 0; 307 } 308 if (priv->themeChangedID || priv->applicationPreferDarkThemeID) { 309 auto* settings = gtk_widget_get_settings(GTK_WIDGET(priv->toplevelOnScreenWindow)); 310 if (priv->themeChangedID) { 311 g_signal_handler_disconnect(settings, priv->themeChangedID); 312 priv->themeChangedID = 0; 313 } 314 if (priv->applicationPreferDarkThemeID) { 315 g_signal_handler_disconnect(settings, priv->applicationPreferDarkThemeID); 316 priv->applicationPreferDarkThemeID = 0; 317 } 300 318 } 301 319 … … 326 344 priv->toplevelWindowStateEventID = 327 345 g_signal_connect(priv->toplevelOnScreenWindow, "window-state-event", G_CALLBACK(toplevelWindowStateEvent), webViewBase); 346 347 auto* settings = gtk_widget_get_settings(GTK_WIDGET(priv->toplevelOnScreenWindow)); 348 priv->themeChangedID = 349 g_signal_connect_swapped(settings, "notify::gtk-theme-name", G_CALLBACK(themeChanged), webViewBase); 350 priv->applicationPreferDarkThemeID = 351 g_signal_connect_swapped(settings, "notify::gtk-application-prefer-dark-theme", G_CALLBACK(themeChanged), webViewBase); 328 352 329 353 if (gtk_widget_get_realized(GTK_WIDGET(window))) -
trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp
r244633 r244635 4611 4611 #endif 4612 4612 4613 #if !PLATFORM(GTK) 4613 4614 void WebPage::setUseDarkAppearance(bool useDarkAppearance) 4614 4615 { 4615 4616 corePage()->setUseDarkAppearance(useDarkAppearance); 4616 4617 } 4618 #endif 4617 4619 4618 4620 void WebPage::beginPrinting(uint64_t frameID, const PrintInfo& printInfo) -
trunk/Source/WebKit/WebProcess/WebPage/gtk/WebPageGtk.cpp
r244212 r244635 196 196 } 197 197 198 void WebPage::setUseDarkAppearance(bool useDarkAppearance) 199 { 200 if (auto* settings = gtk_settings_get_default()) 201 g_object_set(settings, "gtk-application-prefer-dark-theme", useDarkAppearance, nullptr); 202 corePage()->setUseDarkAppearance(useDarkAppearance); 203 } 204 198 205 } // namespace WebKit -
trunk/Source/cmake/OptionsGTK.cmake
r243481 r244635 193 193 SET_AND_EXPOSE_TO_BUILD(HAVE_GTK_GESTURES ${GTK3_SUPPORTS_GESTURES}) 194 194 SET_AND_EXPOSE_TO_BUILD(HAVE_GTK_UNIX_PRINTING ${GTKUnixPrint_FOUND}) 195 SET_AND_EXPOSE_TO_BUILD(HAVE_OS_DARK_MODE_SUPPORT 1) 195 196 196 197 set(glib_components gio gio-unix gobject gthread gmodule) -
trunk/Tools/ChangeLog
r244633 r244635 1 2019-04-24 Carlos Garcia Campos <cgarcia@igalia.com> 2 3 [GTK] Hardcoded text color in input fields 4 https://bugs.webkit.org/show_bug.cgi?id=126907 5 6 Reviewed by Michael Catanzaro. 7 8 Add dark-mode command line option to MiniBrowser. 9 10 * MiniBrowser/gtk/main.c: 11 (main): 12 1 13 2019-04-24 Zalan Bujtas <zalan@apple.com> 2 14 -
trunk/Tools/MiniBrowser/gtk/main.c
r244583 r244635 53 53 static const char *cookiesPolicy; 54 54 static const char *proxy; 55 static gboolean darkMode; 55 56 56 57 typedef enum { … … 104 105 { "bg-color", 0, 0, G_OPTION_ARG_CALLBACK, parseBackgroundColor, "Background color", NULL }, 105 106 { "editor-mode", 'e', 0, G_OPTION_ARG_NONE, &editorMode, "Run in editor mode", NULL }, 107 { "dark-mode", 'd', 0, G_OPTION_ARG_NONE, &darkMode, "Run in dark mode", NULL }, 106 108 { "session-file", 's', 0, G_OPTION_ARG_FILENAME, &sessionFile, "Session file", "FILE" }, 107 109 { "geometry", 'g', 0, G_OPTION_ARG_STRING, &geometry, "Set the size and position of the window (WIDTHxHEIGHT+X+Y)", "GEOMETRY" }, … … 585 587 586 588 BrowserWindow *mainWindow = BROWSER_WINDOW(browser_window_new(NULL, webContext)); 589 if (darkMode) 590 g_object_set(gtk_widget_get_settings(GTK_WIDGET(mainWindow)), "gtk-application-prefer-dark-theme", TRUE, NULL); 587 591 if (fullScreen) 588 592 gtk_window_fullscreen(GTK_WINDOW(mainWindow));
Note: See TracChangeset
for help on using the changeset viewer.