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 crate::composite_icon::CompositeIcon;
use gtk::prelude::*; use gtk::prelude::*;
use gtk::{ use gtk::{
Box as GtkBox, ColorDialog, Label, Orientation, Picture, ScrolledWindow, Box as GtkBox, Label, Orientation, Picture, ScrolledWindow,
}; };
use std::cell::RefCell; use std::cell::RefCell;
use std::rc::Rc; use std::rc::Rc;
@@ -227,8 +227,6 @@ pub fn build_editor_page(
.child(&drawing_area) .child(&drawing_area)
.build(); .build();
let dialog = ColorDialog::builder().title("Pick a Color").build();
{ {
let composite = Rc::clone(&composite); let composite = Rc::clone(&composite);
let tag = tag.clone(); let tag = tag.clone();
@@ -237,7 +235,6 @@ pub fn build_editor_page(
let drawing_area = drawing_area.clone(); let drawing_area = drawing_area.clone();
button.connect_clicked(move |btn| { button.connect_clicked(move |btn| {
let dialog = dialog.clone();
let tag = tag.clone(); let tag = tag.clone();
let composite = Rc::clone(&composite); let composite = Rc::clone(&composite);
let refresh_preview = refresh_preview.clone(); 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 parent_window = btn.root().and_downcast::<gtk::Window>();
let initial_color = current_rgba.borrow().clone(); let initial_color = current_rgba.borrow().clone();
dialog.choose_rgba(parent_window.as_ref(), Some(&initial_color), gtk::gio::Cancellable::NONE, move |res| { let dialog = gtk::ColorChooserDialog::new(Some("Pick a Color"), parent_window.as_ref());
if let Ok(new_rgba) = res { 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!( let new_hex = format!(
"#{:02x}{:02x}{:02x}", "#{:02x}{:02x}{:02x}",
(new_rgba.red() * 255.0).round() as u8, (new_rgba.red() * 255.0).round() as u8,
@@ -273,7 +275,10 @@ pub fn build_editor_page(
refresh_preview(); refresh_preview();
} }
} }
d.destroy();
}); });
dialog.show();
}); });
} }