fix: use legacy ColorChooserDialog to sidestep GTK4 ColorDialog popover bug completely

This commit is contained in:
2026-08-03 23:31:00 -04:00
parent 3a2443c859
commit b9f80fa8fa
+11 -6
View File
@@ -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::<gtk::Window>();
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();
});
}