From b9f80fa8fa2d335018d2a2cf13e9bfd81aa7526d Mon Sep 17 00:00:00 2001 From: rootiest Date: Mon, 3 Aug 2026 23:31:00 -0400 Subject: [PATCH] fix: use legacy ColorChooserDialog to sidestep GTK4 ColorDialog popover bug completely --- src/ui/editor.rs | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/ui/editor.rs b/src/ui/editor.rs index e904cf2..132827e 100644 --- a/src/ui/editor.rs +++ b/src/ui/editor.rs @@ -1,7 +1,7 @@ use crate::composite_icon::CompositeIcon; use gtk::prelude::*; use gtk::{ - Box as GtkBox, ColorDialog, Label, Orientation, Picture, ScrolledWindow, + Box as GtkBox, Label, Orientation, Picture, ScrolledWindow, }; use std::cell::RefCell; use std::rc::Rc; @@ -227,8 +227,6 @@ pub fn build_editor_page( .child(&drawing_area) .build(); - let dialog = ColorDialog::builder().title("Pick a Color").build(); - { let composite = Rc::clone(&composite); let tag = tag.clone(); @@ -237,7 +235,6 @@ pub fn build_editor_page( let drawing_area = drawing_area.clone(); button.connect_clicked(move |btn| { - let dialog = dialog.clone(); let tag = tag.clone(); let composite = Rc::clone(&composite); let refresh_preview = refresh_preview.clone(); @@ -246,8 +243,13 @@ pub fn build_editor_page( let parent_window = btn.root().and_downcast::(); let initial_color = current_rgba.borrow().clone(); - dialog.choose_rgba(parent_window.as_ref(), Some(&initial_color), gtk::gio::Cancellable::NONE, move |res| { - if let Ok(new_rgba) = res { + let dialog = gtk::ColorChooserDialog::new(Some("Pick a Color"), parent_window.as_ref()); + dialog.set_use_alpha(false); + dialog.set_rgba(&initial_color); + + dialog.connect_response(move |d, response| { + if response == gtk::ResponseType::Ok { + let new_rgba = d.rgba(); let new_hex = format!( "#{:02x}{:02x}{:02x}", (new_rgba.red() * 255.0).round() as u8, @@ -273,7 +275,10 @@ pub fn build_editor_page( refresh_preview(); } } + d.destroy(); }); + + dialog.show(); }); }