فهرست منبع

LibWeb: Invalidate input element style on focus change

The style of input and textarea elements is now invalidated when focus
is changed to a new element. This ensures any `:focus` selectors are
applied correctly.
Tim Ledbetter 1 سال پیش
والد
کامیت
572324d47b
2فایلهای تغییر یافته به همراه16 افزوده شده و 6 حذف شده
  1. 8 3
      Userland/Libraries/LibWeb/HTML/HTMLInputElement.cpp
  2. 8 3
      Userland/Libraries/LibWeb/HTML/HTMLTextAreaElement.cpp

+ 8 - 3
Userland/Libraries/LibWeb/HTML/HTMLInputElement.cpp

@@ -1098,16 +1098,21 @@ void HTMLInputElement::update_slider_thumb_element()
 
 void HTMLInputElement::did_receive_focus()
 {
-    auto navigable = document().navigable();
-    if (!navigable)
-        return;
     if (!m_text_node)
         return;
+    m_text_node->invalidate_style();
+    auto navigable = document().navigable();
+    if (!navigable) {
+        return;
+    }
     navigable->set_cursor_position(DOM::Position::create(realm(), *m_text_node, 0));
 }
 
 void HTMLInputElement::did_lose_focus()
 {
+    if (m_text_node)
+        m_text_node->invalidate_style();
+
     commit_pending_changes();
 }
 

+ 8 - 3
Userland/Libraries/LibWeb/HTML/HTMLTextAreaElement.cpp

@@ -67,16 +67,21 @@ void HTMLTextAreaElement::visit_edges(Cell::Visitor& visitor)
 
 void HTMLTextAreaElement::did_receive_focus()
 {
-    auto navigable = document().navigable();
-    if (!navigable)
-        return;
     if (!m_text_node)
         return;
+    m_text_node->invalidate_style();
+    auto navigable = document().navigable();
+    if (!navigable) {
+        return;
+    }
     navigable->set_cursor_position(DOM::Position::create(realm(), *m_text_node, 0));
 }
 
 void HTMLTextAreaElement::did_lose_focus()
 {
+    if (m_text_node)
+        m_text_node->invalidate_style();
+
     // The change event fires when the value is committed, if that makes sense for the control,
     // or else when the control loses focus
     queue_an_element_task(HTML::Task::Source::UserInteraction, [this] {