fix: use legacy ColorChooserDialog to sidestep GTK4 ColorDialog popover bug completely
This commit is contained in:
+11
-6
@@ -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();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user