[yew-devel] [PATCH yew-widget-toolkit v2] widget: dropdown: update picker placement after showing

Dominik Csapak d.csapak at proxmox.com
Fri Dec 20 11:31:39 CET 2024


It seems that under certain circumstances (e.g. a dropdown in a dialog)
updating the position of the picker before it's opened (it's a
popover) does not work properly in safari/webkit/epiphany.

When trying to open such a dropdown, it (or some parts of it) would
be rendered with a height of 0px, even though the elements have
a height set explicitly.

To fix this, update the picker placement after opening it. What exactly
is the cause (e.g. if it's a browser bug or our css/aligning) is yet to
be determined.

This fixes an issue on webkit (tested with epiphany) that opening
dropdowns in a dialog did not show the dropdown properly.

Signed-off-by: Dominik Csapak <d.csapak at proxmox.com>
---
 src/widget/dropdown.rs | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/src/widget/dropdown.rs b/src/widget/dropdown.rs
index f9b49f1..a125bf6 100644
--- a/src/widget/dropdown.rs
+++ b/src/widget/dropdown.rs
@@ -510,12 +510,6 @@ impl Component for PwtDropdown {
             }
         }
 
-        if let Some(placer) = &self.picker_placer {
-            if let Err(err) = placer.update() {
-                log::error!("error updating placement: {}", err.to_string());
-            }
-        }
-
         if self.show != self.last_show {
             self.last_show = self.show;
             if let Some(popover_node) = self.picker_ref.get() {
@@ -533,6 +527,14 @@ impl Component for PwtDropdown {
                 }
             }
         }
+
+        // update picker placement after we opened/closed it
+        if let Some(placer) = &self.picker_placer {
+            if let Err(err) = placer.update() {
+                log::error!("error updating placement: {}", err.to_string());
+            }
+        }
+
         self.focus_on_field = false;
     }
 }
-- 
2.39.5





More information about the yew-devel mailing list