Fix buttons when converting to GTK 4 (#473)

* Fix buttons when converting to GTK 4

* Childrens
This commit is contained in:
Rafał Mikrut 2021-11-30 13:53:04 +01:00 committed by GitHub
parent 4871016a3c
commit c7b9abcfa0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 63 additions and 66 deletions

16
Cargo.lock generated
View File

@ -38,18 +38,18 @@ dependencies = [
[[package]]
name = "ansi_term"
version = "0.11.0"
version = "0.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b"
checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
dependencies = [
"winapi",
]
[[package]]
name = "anyhow"
version = "1.0.49"
version = "1.0.51"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0a03e93e97a28fbc9f42fbc5ba0886a3c67eb637b476dbee711f80a6ffe8223d"
checksum = "8b26702f315f53b6071259e15dd9d64528213b44d61de1ec926eca7715d62203"
[[package]]
name = "arrayref"
@ -312,9 +312,9 @@ dependencies = [
[[package]]
name = "clap"
version = "2.33.3"
version = "2.34.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002"
checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c"
dependencies = [
"ansi_term",
"atty",
@ -1889,9 +1889,9 @@ dependencies = [
[[package]]
name = "ryu"
version = "1.0.5"
version = "1.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e"
checksum = "3c9613b5a66ab9ba26415184cfc41156594925a9cf3a2057e57f31ff145f6568"
[[package]]
name = "same-file"

View File

@ -3,7 +3,7 @@ use std::fs;
use std::fs::Metadata;
use gtk::prelude::*;
use gtk::{Align, CheckButton, Dialog, TextView};
use gtk::{Align, CheckButton, Dialog, ResponseType, TextView};
use crate::gui_data::GuiData;
use crate::help_functions::*;
@ -96,24 +96,16 @@ pub async fn check_if_can_delete_files(check_button_settings_confirm_deletion: &
true
}
fn create_dialog_ask_for_deletion(window_main: &gtk::Window) -> (Dialog, CheckButton) {
let confirmation_dialog_delete = gtk::Dialog::with_buttons(
Some("Delete confirmation"),
Some(window_main),
gtk::DialogFlags::DESTROY_WITH_PARENT,
&[("Ok", gtk::ResponseType::Ok), ("Close", gtk::ResponseType::Cancel)],
);
fn create_dialog_ask_for_deletion(_window_main: &gtk::Window) -> (Dialog, CheckButton) {
let confirmation_dialog_delete = gtk::Dialog::builder().title("Delete confirmation").build();
let button_ok = confirmation_dialog_delete.add_button("Ok", ResponseType::Ok);
confirmation_dialog_delete.add_button("Close", ResponseType::Cancel);
let label: gtk::Label = gtk::Label::new(Some("Are you sure that you want to delete files?"));
let check_button: gtk::CheckButton = gtk::CheckButton::with_label("Ask next time");
check_button.set_active(true);
check_button.set_halign(Align::Center);
let button_box = get_dialog_box_child(&confirmation_dialog_delete).children()[0].clone().downcast::<gtk::Box>().unwrap().children()[0]
.clone()
.downcast::<gtk::ButtonBox>()
.unwrap();
let button_ok = button_box.children()[0].clone();
button_ok.grab_focus();
let internal_box = get_dialog_box_child(&confirmation_dialog_delete);
@ -124,25 +116,17 @@ fn create_dialog_ask_for_deletion(window_main: &gtk::Window) -> (Dialog, CheckBu
(confirmation_dialog_delete, check_button)
}
fn create_dialog_group_deletion(window_main: &gtk::Window) -> (Dialog, CheckButton) {
let confirmation_dialog_group_delete = gtk::Dialog::with_buttons(
Some("Confirmation of deleting all files in group"),
Some(window_main),
gtk::DialogFlags::MODAL,
&[("Ok", gtk::ResponseType::Ok), ("Close", gtk::ResponseType::Cancel)],
);
fn create_dialog_group_deletion(_window_main: &gtk::Window) -> (Dialog, CheckButton) {
let confirmation_dialog_group_delete = gtk::Dialog::builder().title("Confirmation of deleting all files in group").build();
let button_ok = confirmation_dialog_group_delete.add_button("Ok", ResponseType::Ok);
confirmation_dialog_group_delete.add_button("Close", ResponseType::Cancel);
let label: gtk::Label = gtk::Label::new(Some("In some groups there are selected all records."));
let label2: gtk::Label = gtk::Label::new(Some("Are you sure that you want to delete them?"));
let check_button: gtk::CheckButton = gtk::CheckButton::with_label("Ask next time");
check_button.set_active(true);
check_button.set_halign(Align::Center);
let button_box = get_dialog_box_child(&confirmation_dialog_group_delete).children()[0].clone().downcast::<gtk::Box>().unwrap().children()[0]
.clone()
.downcast::<gtk::ButtonBox>()
.unwrap();
let button_ok = button_box.children()[0].clone();
button_ok.grab_focus();
let internal_box = get_dialog_box_child(&confirmation_dialog_group_delete);

View File

@ -1,7 +1,7 @@
use std::path::{Path, PathBuf};
use gtk::prelude::*;
use gtk::TreePath;
use gtk::{ResponseType, TreePath};
use crate::gui_data::GuiData;
use crate::help_functions::*;
@ -53,18 +53,22 @@ pub fn connect_button_move(gui_data: &GuiData) {
fn move_things(tree_view: &gtk::TreeView, column_file_name: i32, column_path: i32, column_color: Option<i32>, column_selection: i32, entry_info: &gtk::Entry, text_view_errors: &gtk::TextView, window_main: &gtk::Window) {
reset_text_view(text_view_errors);
let chooser = gtk::FileChooserDialog::with_buttons(
Some("Choose folder to which you want to move duplicated files"),
Some(window_main),
gtk::FileChooserAction::SelectFolder,
&[("Ok", gtk::ResponseType::Ok), ("Close", gtk::ResponseType::Cancel)],
);
let chooser = gtk::FileChooserDialog::builder()
.title("Choose folder to which you want to move duplicated files")
.action(gtk::FileChooserAction::SelectFolder)
.build();
chooser.add_button("Ok", ResponseType::Ok);
chooser.add_button("Close", ResponseType::Cancel);
chooser.set_select_multiple(false);
chooser.show_all();
window_main.set_sensitive(false);
let entry_info = entry_info.clone();
let text_view_errors = text_view_errors.clone();
let tree_view = tree_view.clone();
let window_main = window_main.clone();
chooser.connect_response(move |file_chooser, response_type| {
if response_type == gtk::ResponseType::Ok {
let folders = file_chooser.filenames();
@ -80,6 +84,7 @@ fn move_things(tree_view: &gtk::TreeView, column_file_name: i32, column_path: i3
}
}
file_chooser.close();
window_main.set_sensitive(true);
});
}

View File

@ -22,7 +22,7 @@ pub fn connect_notebook_tabs(gui_data: &GuiData) {
{
for (index, upper_tab) in get_all_upper_tabs().iter().enumerate() {
if *shared_upper_notebooks.borrow_mut().get_mut(&current_tab_in_main_notebook).unwrap().get_mut(upper_tab).unwrap() {
notebook_upper.children().get(index).unwrap().show();
notebook_upper.children().get(index).unwrap().show(); // TODO find alternative for children
} else {
notebook_upper.children().get(index).unwrap().hide();
}

View File

@ -1,5 +1,5 @@
use gtk::prelude::*;
use gtk::{TreeIter, Window};
use gtk::{ResponseType, TreeIter, Window};
use czkawka_core::common::Common;
@ -213,7 +213,7 @@ fn popover_one_oldest_newest(popover: &gtk::Popover, tree_view: &gtk::TreeView,
popover.popdown();
}
fn popover_custom_select_unselect(popover: &gtk::Popover, window_main: &Window, tree_view: &gtk::TreeView, column_color: Option<i32>, column_file_name: i32, column_path: i32, column_button_selection: u32, select_things: bool) {
fn popover_custom_select_unselect(popover: &gtk::Popover, _window_main: &Window, tree_view: &gtk::TreeView, column_color: Option<i32>, column_file_name: i32, column_path: i32, column_button_selection: u32, select_things: bool) {
popover.popdown();
enum WildcardType {
@ -229,7 +229,10 @@ fn popover_custom_select_unselect(popover: &gtk::Popover, window_main: &Window,
// Accept Dialog
{
let confirmation_dialog_delete = gtk::Dialog::with_buttons(Some(window_title), Some(window_main), gtk::DialogFlags::MODAL, &[("Ok", gtk::ResponseType::Ok), ("Close", gtk::ResponseType::Cancel)]);
let confirmation_dialog_select_unselect = gtk::Dialog::builder().title(window_title).build();
confirmation_dialog_select_unselect.add_button("Ok", ResponseType::Ok);
confirmation_dialog_select_unselect.add_button("Close", ResponseType::Cancel);
let label: gtk::Label = gtk::Label::new(Some("Usage: */folder-nr*/* or name-version-*.txt"));
let radio_path = gtk::RadioButton::builder().label("Path").build();
@ -261,13 +264,13 @@ fn popover_custom_select_unselect(popover: &gtk::Popover, window_main: &Window,
grid.attach(&entry_name, 1, 2, 1, 1);
grid.attach(&entry_name_path, 1, 3, 1, 1);
let box_widget = get_dialog_box_child(&confirmation_dialog_delete);
let box_widget = get_dialog_box_child(&confirmation_dialog_select_unselect);
box_widget.add(&grid);
confirmation_dialog_delete.show_all();
confirmation_dialog_select_unselect.show_all();
let tree_view = tree_view.clone();
confirmation_dialog_delete.connect_response(move |confirmation_dialog_delete, response_type| {
confirmation_dialog_select_unselect.connect_response(move |confirmation_dialog_select_unselect, response_type| {
let wildcard_type: WildcardType;
let wildcard: String;
@ -334,10 +337,10 @@ fn popover_custom_select_unselect(popover: &gtk::Popover, window_main: &Window,
}
}
} else {
confirmation_dialog_delete.close();
confirmation_dialog_select_unselect.close();
return;
}
confirmation_dialog_delete.close();
confirmation_dialog_select_unselect.close();
});
}
}

View File

@ -1,11 +1,11 @@
use gtk::prelude::*;
use gtk::{TreeView, Window};
use gtk::{ResponseType, TreeView, Window};
#[cfg(target_family = "windows")]
use czkawka_core::common::Common;
use crate::gui_data::GuiData;
use crate::help_functions::{get_list_store, ColumnsDirectory};
use crate::help_functions::{get_dialog_box_child, get_list_store, ColumnsDirectory};
pub fn connect_selection_of_directories(gui_data: &GuiData) {
// Add manually directory
@ -78,11 +78,18 @@ pub fn connect_selection_of_directories(gui_data: &GuiData) {
fn add_chosen_directories(window_main: &Window, tree_view: &TreeView, excluded_items: bool) {
let folders_to = if excluded_items { "Folders to exclude" } else { "Folders to include" };
let chooser = gtk::FileChooserDialog::with_buttons(Some(folders_to), Some(window_main), gtk::FileChooserAction::SelectFolder, &[("Ok", gtk::ResponseType::Ok), ("Close", gtk::ResponseType::Cancel)]);
let chooser = gtk::FileChooserDialog::builder().title(folders_to).action(gtk::FileChooserAction::SelectFolder).build();
chooser.add_button("Ok", ResponseType::Ok);
chooser.add_button("Close", ResponseType::Cancel);
chooser.set_select_multiple(true);
chooser.show_all();
window_main.set_sensitive(false);
let tree_view = tree_view.clone();
let window_main = window_main.clone();
chooser.connect_response(move |chooser, response_type| {
if response_type == gtk::ResponseType::Ok {
let folder = chooser.filenames();
@ -95,21 +102,25 @@ fn add_chosen_directories(window_main: &Window, tree_view: &TreeView, excluded_i
}
}
chooser.close();
window_main.set_sensitive(true);
});
}
fn add_manually_directories(window_main: &Window, tree_view: &TreeView) {
let dialog_manual_add_directory = gtk::Dialog::with_buttons(Some("Add directory manually"), Some(window_main), gtk::DialogFlags::MODAL, &[("Ok", gtk::ResponseType::Ok), ("Close", gtk::ResponseType::Cancel)]);
let dialog_manual_add_directory = gtk::Dialog::builder().title("Add directory manually").build();
dialog_manual_add_directory.add_button("Ok", ResponseType::Ok);
dialog_manual_add_directory.add_button("Close", ResponseType::Cancel);
window_main.set_sensitive(false);
let entry: gtk::Entry = gtk::Entry::new();
for widgets in dialog_manual_add_directory.children() {
// By default GtkBox is child of dialog, so we can easily add other things to it
widgets.clone().downcast::<gtk::Box>().unwrap().add(&entry);
}
get_dialog_box_child(&dialog_manual_add_directory).add(&entry);
dialog_manual_add_directory.show_all();
let tree_view = tree_view.clone();
let window_main = window_main.clone();
dialog_manual_add_directory.connect_response(move |dialog_manual_add_directory, response_type| {
if response_type == gtk::ResponseType::Ok {
let text = entry.text().to_string().trim().to_string();
@ -123,10 +134,8 @@ fn add_manually_directories(window_main: &Window, tree_view: &TreeView) {
let values: [(u32, &dyn ToValue); 1] = [(ColumnsDirectory::Path as u32, &text)];
list_store.set(&list_store.append(), &values);
}
} else {
dialog_manual_add_directory.close();
return;
}
dialog_manual_add_directory.close();
window_main.set_sensitive(true);
});
}

View File

@ -427,10 +427,6 @@ pub fn get_dialog_box_child(dialog: &gtk::Dialog) -> gtk::Box {
dialog.child().unwrap().downcast::<gtk::Box>().unwrap()
}
// pub fn get_box_child_from_box(box_main: &gtk::Box) -> gtk::Box {
// box_main.first_child().unwrap().downcast::<gtk::Box>().unwrap() // TODO Probably fist_child will be proper replacement for childrens()
// }
pub fn change_dimension_to_krotka(dimensions: String) -> (u64, u64) {
#[allow(clippy::single_char_pattern)]
let vec = dimensions.split::<&str>("x").collect::<Vec<_>>();