1
0
Fork 0
mirror of synced 2024-04-26 08:42:07 +12:00

Several small fixes (#727)

This commit is contained in:
Rafał Mikrut 2022-05-23 19:04:28 +02:00 committed by GitHub
parent 6d8b33d8cf
commit 19afce5d2e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 304 additions and 258 deletions

View file

@ -14,15 +14,13 @@ pub const RAW_IMAGE_EXTENSIONS: &[&str] = &[
".cr2", ".ari",
];
pub const IMAGE_RS_EXTENSIONS: &[&str] = &[
".jpg", ".jpeg", ".png", ".bmp", ".tiff", ".tif", ".tga", ".ff", ".jif", ".jfi", ".webp", ".gif", ".ico", ".exr", ".hdr", ".dds",
".jpg", ".jpeg", ".png", ".bmp", ".tiff", ".tif", ".tga", ".ff", ".jif", ".jfi", ".webp", ".gif", ".ico", ".exr", ".hdr",
];
pub const IMAGE_RS_SIMILAR_IMAGES_EXTENSIONS: &[&str] = &[
".jpg", ".jpeg", ".png", ".tiff", ".tif", ".tga", ".ff", ".jif", ".jfi", ".bmp", ".webp", ".exr", ".hdr", ".dds",
];
pub const IMAGE_RS_SIMILAR_IMAGES_EXTENSIONS: &[&str] = &[".jpg", ".jpeg", ".png", ".tiff", ".tif", ".tga", ".ff", ".jif", ".jfi", ".bmp", ".webp", ".exr", ".hdr"];
pub const IMAGE_RS_BROKEN_FILES_EXTENSIONS: &[&str] = &[
".jpg", ".jpeg", ".png", ".tiff", ".tif", ".tga", ".ff", ".jif", ".jfi", ".gif", ".bmp", ".ico", ".jfif", ".jpe", ".pnz", ".dib", ".webp", ".exr", ".hdr", ".dds",
".jpg", ".jpeg", ".png", ".tiff", ".tif", ".tga", ".ff", ".jif", ".jfi", ".gif", ".bmp", ".ico", ".jfif", ".jpe", ".pnz", ".dib", ".webp", ".exr", ".hdr",
];
pub const ZIP_FILES_EXTENSIONS: &[&str] = &[".zip"];

View file

@ -77,4 +77,16 @@ impl Extensions {
self.file_extensions.push(extension.to_string());
}
}
pub fn validate_allowed_extensions(&mut self, file_extensions: &[&str]) {
let mut current_file_extensions = Vec::new();
for extension in file_extensions {
assert!(extension.starts_with('.'));
if self.file_extensions.contains(&extension.to_string()) {
current_file_extensions.push(extension.to_string());
}
}
self.file_extensions = current_file_extensions;
}
}

View file

@ -10,7 +10,7 @@ use std::time::{Duration, SystemTime};
use std::{mem, panic, thread};
use crossbeam_channel::Receiver;
use lofty::{read_from_path, AudioFile, ItemKey};
use lofty::{read_from, AudioFile, ItemKey};
use rayon::prelude::*;
use serde::{Deserialize, Serialize};
@ -251,7 +251,13 @@ impl SameMusic {
fn check_files(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::UnboundedSender<ProgressData>>) -> bool {
if !self.allowed_extensions.using_custom_extensions() {
self.allowed_extensions.extend_allowed_extensions(AUDIO_FILES_EXTENSIONS);
} else {
self.allowed_extensions.validate_allowed_extensions(AUDIO_FILES_EXTENSIONS);
if !self.allowed_extensions.using_custom_extensions() {
return true;
}
}
let result = DirTraversalBuilder::new()
.root_dirs(self.directories.included_directories.clone())
.group_by(|_fe| ())
@ -362,8 +368,13 @@ impl SameMusic {
return None;
}
let result = panic::catch_unwind(|| {
match read_from_path(&path, true) {
let mut file = match File::open(&path) {
Ok(t) => t,
Err(_) => return Some(None),
};
let result = panic::catch_unwind(move || {
match read_from(&mut file, true) {
Ok(t) => Some(t),
Err(_inspected) => {
// println!("Failed to open {}", path);

View file

@ -279,6 +279,12 @@ impl SimilarImages {
if !self.allowed_extensions.using_custom_extensions() {
self.allowed_extensions.extend_allowed_extensions(IMAGE_RS_SIMILAR_IMAGES_EXTENSIONS);
self.allowed_extensions.extend_allowed_extensions(RAW_IMAGE_EXTENSIONS);
} else {
self.allowed_extensions
.validate_allowed_extensions(&[IMAGE_RS_SIMILAR_IMAGES_EXTENSIONS, RAW_IMAGE_EXTENSIONS].concat());
if !self.allowed_extensions.using_custom_extensions() {
return true;
}
}
// Add root folders for finding

View file

@ -237,6 +237,11 @@ impl SimilarVideos {
if !self.allowed_extensions.using_custom_extensions() {
self.allowed_extensions.extend_allowed_extensions(VIDEO_FILES_EXTENSIONS);
} else {
self.allowed_extensions.validate_allowed_extensions(VIDEO_FILES_EXTENSIONS);
if !self.allowed_extensions.using_custom_extensions() {
return true;
}
}
// Add root folders for finding

View file

@ -193,10 +193,11 @@ fn create_dialog_group_deletion(window_main: &gtk4::Window) -> (Dialog, CheckBut
button_ok.grab_focus();
let internal_box = get_dialog_box_child(&dialog);
internal_box.append(&label);
internal_box.append(&label2);
internal_box.append(&check_button);
let parent = button_ok.parent().unwrap().parent().unwrap().downcast::<gtk4::Box>().unwrap(); // TODO Hack, but not so ugly as before
parent.set_orientation(Orientation::Vertical);
parent.insert_child_after(&label, None::<&gtk4::Widget>);
parent.insert_child_after(&label2, Some(&label));
parent.insert_child_after(&check_button, Some(&label2));
dialog.show();
(dialog, check_button)

View file

@ -2,7 +2,7 @@ use std::fs;
use std::path::PathBuf;
use gtk4::prelude::*;
use gtk4::{Align, CheckButton, Dialog, ResponseType, TextView, TreeIter, TreePath};
use gtk4::{Align, CheckButton, Dialog, Orientation, ResponseType, TextView, TreeIter, TreePath};
use crate::flg;
use czkawka_core::duplicate::make_hard_link;
@ -275,10 +275,11 @@ fn create_dialog_non_group(window_main: &gtk4::Window) -> Dialog {
button_ok.grab_focus();
let internal_box = get_dialog_box_child(&dialog);
internal_box.append(&label);
internal_box.append(&label2);
internal_box.append(&label3);
let parent = button_ok.parent().unwrap().parent().unwrap().downcast::<gtk4::Box>().unwrap(); // TODO Hack, but not so ugly as before
parent.set_orientation(Orientation::Vertical);
parent.insert_child_after(&label, None::<&gtk4::Widget>);
parent.insert_child_after(&label2, Some(&label));
parent.insert_child_after(&label3, Some(&label2));
dialog.show();
dialog
@ -384,9 +385,10 @@ fn create_dialog_ask_for_linking(window_main: &gtk4::Window) -> (Dialog, CheckBu
button_ok.grab_focus();
let internal_box = get_dialog_box_child(&dialog);
internal_box.append(&label);
internal_box.append(&check_button);
let parent = button_ok.parent().unwrap().parent().unwrap().downcast::<gtk4::Box>().unwrap(); // TODO Hack, but not so ugly as before
parent.set_orientation(Orientation::Vertical);
parent.insert_child_after(&label, None::<&gtk4::Widget>);
parent.insert_child_after(&check_button, Some(&label));
dialog.show();
(dialog, check_button)

176
czkawka_gui/ui/czkawka.cmb Normal file → Executable file
View file

@ -173,44 +173,11 @@
(5,135,"GtkScrolledWindow","scrolled_window_bad_extensions",134,None,None,None,None),
(5,136,"GtkLabel",None,134,None,None,None,None),
(5,137,"GtkBox","buttons",3,None,None,None,1),
(5,138,"GtkBox","control_buttons",137,None,None,None,None),
(5,138,"GtkBox",None,137,None,None,None,None),
(5,139,"GtkButton","buttons_search",138,None,None,None,None),
(5,140,"GtkBox",None,139,None,None,None,None),
(5,141,"GtkImage",None,140,None,None,None,None),
(5,142,"GtkLabel",None,140,None,None,None,1),
(5,143,"GtkButton","buttons_show_errors",137,None,None,None,1),
(5,144,"GtkImage",None,143,None,None,None,None),
(5,145,"GtkButton","buttons_show_upper_notebook",137,None,None,None,2),
(5,146,"GtkImage",None,145,None,None,None,None),
(5,147,"GtkBox","action_buttons",137,None,None,None,3),
(5,148,"GtkMenuButton","buttons_select",147,None,None,None,None),
(5,149,"GtkBox",None,148,None,None,None,None),
(5,150,"GtkImage",None,149,None,None,None,None),
(5,151,"GtkLabel",None,149,None,None,None,1),
(5,152,"GtkButton","buttons_compare",147,None,None,None,1),
(5,153,"GtkBox",None,152,None,None,None,None),
(5,154,"GtkImage",None,153,None,None,None,None),
(5,155,"GtkLabel",None,153,None,None,None,1),
(5,156,"GtkButton","buttons_delete",147,None,None,None,2),
(5,157,"GtkBox",None,156,None,None,None,None),
(5,158,"GtkImage",None,157,None,None,None,None),
(5,159,"GtkLabel",None,157,None,None,None,1),
(5,160,"GtkButton","buttons_move",147,None,None,None,3),
(5,161,"GtkBox",None,160,None,None,None,None),
(5,162,"GtkImage",None,161,None,None,None,None),
(5,163,"GtkLabel",None,161,None,None,None,1),
(5,164,"GtkButton","buttons_save",147,None,None,None,4),
(5,165,"GtkBox",None,164,None,None,None,None),
(5,166,"GtkImage",None,165,None,None,None,None),
(5,167,"GtkLabel",None,165,None,None,None,1),
(5,168,"GtkButton","buttons_symlink",147,None,None,None,5),
(5,169,"GtkBox",None,168,None,None,None,None),
(5,170,"GtkImage",None,169,None,None,None,None),
(5,171,"GtkLabel",None,169,None,None,None,1),
(5,172,"GtkButton","buttons_hardlink",147,None,None,None,6),
(5,173,"GtkBox",None,172,None,None,None,None),
(5,174,"GtkImage",None,173,None,None,None,None),
(5,175,"GtkLabel",None,173,None,None,None,1),
(5,176,"GtkBox",None,3,None,None,None,2),
(5,177,"GtkEntry","entry_info",176,None,None,None,None),
(5,178,"GtkEntry",None,176,None,None,None,1),
@ -222,6 +189,40 @@
(5,184,"GtkImage",None,183,None,None,None,None),
(5,185,"GtkButton","button_app_info",182,None,None,None,1),
(5,186,"GtkImage",None,185,None,None,None,None),
(5,187,"GtkBox",None,137,None,None,None,4),
(5,188,"GtkBox",None,187,None,None,None,1),
(5,189,"GtkMenuButton","buttons_select",188,None,None,None,None),
(5,190,"GtkBox",None,189,None,None,None,None),
(5,191,"GtkImage",None,190,None,None,None,None),
(5,192,"GtkLabel",None,190,None,None,None,1),
(5,193,"GtkButton","buttons_compare",188,None,None,None,1),
(5,194,"GtkBox",None,193,None,None,None,None),
(5,195,"GtkImage",None,194,None,None,None,None),
(5,196,"GtkLabel",None,194,None,None,None,1),
(5,197,"GtkButton","buttons_delete",188,None,None,None,2),
(5,198,"GtkBox",None,197,None,None,None,None),
(5,199,"GtkImage",None,198,None,None,None,None),
(5,200,"GtkLabel",None,198,None,None,None,1),
(5,201,"GtkButton","buttons_move",188,None,None,None,3),
(5,202,"GtkBox",None,201,None,None,None,None),
(5,203,"GtkImage",None,202,None,None,None,None),
(5,204,"GtkLabel",None,202,None,None,None,1),
(5,205,"GtkButton","buttons_save",188,None,None,None,4),
(5,206,"GtkBox",None,205,None,None,None,None),
(5,207,"GtkImage",None,206,None,None,None,None),
(5,208,"GtkLabel",None,206,None,None,None,1),
(5,209,"GtkButton","buttons_symlink",188,None,None,None,5),
(5,210,"GtkBox",None,209,None,None,None,None),
(5,211,"GtkImage",None,210,None,None,None,None),
(5,212,"GtkLabel",None,210,None,None,None,1),
(5,213,"GtkButton","buttons_hardlink",188,None,None,None,6),
(5,214,"GtkBox",None,213,None,None,None,None),
(5,215,"GtkImage",None,214,None,None,None,None),
(5,216,"GtkLabel",None,214,None,None,None,1),
(5,217,"GtkButton","buttons_show_errors",187,None,None,None,2),
(5,218,"GtkImage",None,217,None,None,None,None),
(5,219,"GtkButton","buttons_show_upper_notebook",187,None,None,None,3),
(5,220,"GtkImage",None,219,None,None,None,None),
(6,1,"GtkPopover","popover_right_click",None,None,None,None,None),
(6,2,"GtkBox",None,1,None,None,None,None),
(6,3,"GtkButton","buttons_popover_right_click_open_file",2,None,None,None,None),
@ -641,58 +642,6 @@
(5,140,"GtkWidget","halign","center",None,None,None,None,None),
(5,141,"GtkImage","icon-name","image-missing",None,None,None,None,None),
(5,142,"GtkLabel","label","Search",1,None,None,None,None),
(5,143,"GtkWidget","focusable","1",None,None,None,None,None),
(5,143,"GtkWidget","receives-default","1",None,None,None,None,None),
(5,144,"GtkImage","icon-name","image-missing",None,None,None,None,None),
(5,144,"GtkWidget","halign","center",None,None,None,None,None),
(5,145,"GtkWidget","focusable","1",None,None,None,None,None),
(5,145,"GtkWidget","receives-default","1",None,None,None,None,None),
(5,146,"GtkImage","icon-name","image-missing",None,None,None,None,None),
(5,146,"GtkWidget","halign","center",None,None,None,None,None),
(5,147,"GtkBox","spacing","2",None,None,None,None,None),
(5,148,"GtkWidget","focus-on-click","0",None,None,None,None,None),
(5,148,"GtkWidget","focusable","1",None,None,None,None,None),
(5,148,"GtkWidget","receives-default","1",None,None,None,None,None),
(5,149,"GtkBox","spacing","2",None,None,None,None,None),
(5,149,"GtkWidget","halign","center",None,None,None,None,None),
(5,150,"GtkImage","icon-name","image-missing",None,None,None,None,None),
(5,151,"GtkLabel","label","Select",1,None,None,None,None),
(5,152,"GtkWidget","focusable","1",None,None,None,None,None),
(5,152,"GtkWidget","receives-default","1",None,None,None,None,None),
(5,153,"GtkBox","spacing","2",None,None,None,None,None),
(5,153,"GtkWidget","halign","center",None,None,None,None,None),
(5,154,"GtkImage","icon-name","image-missing",None,None,None,None,None),
(5,155,"GtkLabel","label","Compare",1,None,None,None,None),
(5,156,"GtkWidget","focusable","1",None,None,None,None,None),
(5,156,"GtkWidget","receives-default","1",None,None,None,None,None),
(5,157,"GtkBox","spacing","2",None,None,None,None,None),
(5,157,"GtkWidget","halign","center",None,None,None,None,None),
(5,158,"GtkImage","icon-name","image-missing",None,None,None,None,None),
(5,159,"GtkLabel","label","Delete",1,None,None,None,None),
(5,160,"GtkWidget","focusable","1",None,None,None,None,None),
(5,160,"GtkWidget","receives-default","1",None,None,None,None,None),
(5,161,"GtkBox","spacing","2",None,None,None,None,None),
(5,161,"GtkWidget","halign","center",None,None,None,None,None),
(5,162,"GtkImage","icon-name","image-missing",None,None,None,None,None),
(5,163,"GtkLabel","label","Move",1,None,None,None,None),
(5,164,"GtkWidget","focusable","1",None,None,None,None,None),
(5,164,"GtkWidget","receives-default","1",None,None,None,None,None),
(5,165,"GtkBox","spacing","2",None,None,None,None,None),
(5,165,"GtkWidget","halign","center",None,None,None,None,None),
(5,166,"GtkImage","icon-name","image-missing",None,None,None,None,None),
(5,167,"GtkLabel","label","Save",1,None,None,None,None),
(5,168,"GtkWidget","focusable","1",None,None,None,None,None),
(5,168,"GtkWidget","receives-default","1",None,None,None,None,None),
(5,169,"GtkBox","spacing","2",None,None,None,None,None),
(5,169,"GtkWidget","halign","center",None,None,None,None,None),
(5,170,"GtkImage","icon-name","image-missing",None,None,None,None,None),
(5,171,"GtkLabel","label","Symlink",1,None,None,None,None),
(5,172,"GtkWidget","focusable","1",None,None,None,None,None),
(5,172,"GtkWidget","receives-default","1",None,None,None,None,None),
(5,173,"GtkBox","spacing","2",None,None,None,None,None),
(5,173,"GtkWidget","halign","center",None,None,None,None,None),
(5,174,"GtkImage","icon-name","image-missing",None,None,None,None,None),
(5,175,"GtkLabel","label","Hardlink",1,None,None,None,None),
(5,176,"GtkWidget","margin-bottom","5",None,None,None,None,None),
(5,176,"GtkWidget","margin-end","5",None,None,None,None,None),
(5,176,"GtkWidget","margin-start","5",None,None,None,None,None),
@ -719,6 +668,61 @@
(5,185,"GtkWidget","focusable","1",None,None,None,None,None),
(5,185,"GtkWidget","receives-default","1",None,None,None,None,None),
(5,186,"GtkImage","icon-name","image-missing",None,None,None,None,None),
(5,187,"GtkWidget","halign","end",None,None,None,None,None),
(5,187,"GtkWidget","hexpand","True",None,None,None,None,None),
(5,188,"GtkBox","spacing","2",None,None,None,None,None),
(5,188,"GtkWidget","halign","end",None,None,None,None,None),
(5,189,"GtkWidget","focus-on-click","0",None,None,None,None,None),
(5,189,"GtkWidget","focusable","1",None,None,None,None,None),
(5,189,"GtkWidget","receives-default","1",None,None,None,None,None),
(5,190,"GtkBox","spacing","2",None,None,None,None,None),
(5,190,"GtkWidget","halign","center",None,None,None,None,None),
(5,191,"GtkImage","icon-name","image-missing",None,None,None,None,None),
(5,192,"GtkLabel","label","Select",1,None,None,None,None),
(5,193,"GtkWidget","focusable","1",None,None,None,None,None),
(5,193,"GtkWidget","receives-default","1",None,None,None,None,None),
(5,194,"GtkBox","spacing","2",None,None,None,None,None),
(5,194,"GtkWidget","halign","center",None,None,None,None,None),
(5,195,"GtkImage","icon-name","image-missing",None,None,None,None,None),
(5,196,"GtkLabel","label","Compare",1,None,None,None,None),
(5,197,"GtkWidget","focusable","1",None,None,None,None,None),
(5,197,"GtkWidget","receives-default","1",None,None,None,None,None),
(5,198,"GtkBox","spacing","2",None,None,None,None,None),
(5,198,"GtkWidget","halign","center",None,None,None,None,None),
(5,199,"GtkImage","icon-name","image-missing",None,None,None,None,None),
(5,200,"GtkLabel","label","Delete",1,None,None,None,None),
(5,201,"GtkWidget","focusable","1",None,None,None,None,None),
(5,201,"GtkWidget","receives-default","1",None,None,None,None,None),
(5,202,"GtkBox","spacing","2",None,None,None,None,None),
(5,202,"GtkWidget","halign","center",None,None,None,None,None),
(5,203,"GtkImage","icon-name","image-missing",None,None,None,None,None),
(5,204,"GtkLabel","label","Move",1,None,None,None,None),
(5,205,"GtkWidget","focusable","1",None,None,None,None,None),
(5,205,"GtkWidget","receives-default","1",None,None,None,None,None),
(5,206,"GtkBox","spacing","2",None,None,None,None,None),
(5,206,"GtkWidget","halign","center",None,None,None,None,None),
(5,207,"GtkImage","icon-name","image-missing",None,None,None,None,None),
(5,208,"GtkLabel","label","Save",1,None,None,None,None),
(5,209,"GtkWidget","focusable","1",None,None,None,None,None),
(5,209,"GtkWidget","receives-default","1",None,None,None,None,None),
(5,210,"GtkBox","spacing","2",None,None,None,None,None),
(5,210,"GtkWidget","halign","center",None,None,None,None,None),
(5,211,"GtkImage","icon-name","image-missing",None,None,None,None,None),
(5,212,"GtkLabel","label","Symlink",1,None,None,None,None),
(5,213,"GtkWidget","focusable","1",None,None,None,None,None),
(5,213,"GtkWidget","receives-default","1",None,None,None,None,None),
(5,214,"GtkBox","spacing","2",None,None,None,None,None),
(5,214,"GtkWidget","halign","center",None,None,None,None,None),
(5,215,"GtkImage","icon-name","image-missing",None,None,None,None,None),
(5,216,"GtkLabel","label","Hardlink",1,None,None,None,None),
(5,217,"GtkWidget","focusable","1",None,None,None,None,None),
(5,217,"GtkWidget","receives-default","1",None,None,None,None,None),
(5,218,"GtkImage","icon-name","image-missing",None,None,None,None,None),
(5,218,"GtkWidget","halign","center",None,None,None,None,None),
(5,219,"GtkWidget","focusable","1",None,None,None,None,None),
(5,219,"GtkWidget","receives-default","1",None,None,None,None,None),
(5,220,"GtkImage","icon-name","image-missing",None,None,None,None,None),
(5,220,"GtkWidget","halign","center",None,None,None,None,None),
(6,1,"GtkPopover","child",None,None,None,None,None,2),
(6,1,"GtkPopover","position","left",None,None,None,None,None),
(6,2,"GtkOrientable","orientation","vertical",None,None,None,None,None),

View file

@ -807,7 +807,7 @@
<property name="margin-start">5</property>
<property name="margin-top">2</property>
<child>
<object class="GtkBox" id="control_buttons">
<object class="GtkBox">
<property name="spacing">2</property>
<child>
<object class="GtkButton" id="buttons_search">
@ -834,49 +834,164 @@
</object>
</child>
<child>
<object class="GtkButton" id="buttons_show_errors">
<property name="focusable">1</property>
<property name="receives-default">1</property>
<object class="GtkBox">
<property name="halign">end</property>
<property name="hexpand">True</property>
<child>
<object class="GtkImage">
<property name="halign">center</property>
<property name="icon-name">image-missing</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkButton" id="buttons_show_upper_notebook">
<property name="focusable">1</property>
<property name="receives-default">1</property>
<child>
<object class="GtkImage">
<property name="halign">center</property>
<property name="icon-name">image-missing</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkBox" id="action_buttons">
<property name="spacing">2</property>
<child>
<object class="GtkMenuButton" id="buttons_select">
<property name="focus-on-click">0</property>
<property name="focusable">1</property>
<property name="receives-default">1</property>
<object class="GtkBox">
<property name="halign">end</property>
<property name="spacing">2</property>
<child>
<object class="GtkBox">
<property name="halign">center</property>
<property name="spacing">2</property>
<object class="GtkMenuButton" id="buttons_select">
<property name="focus-on-click">0</property>
<property name="focusable">1</property>
<property name="receives-default">1</property>
<child>
<object class="GtkImage">
<property name="icon-name">image-missing</property>
<object class="GtkBox">
<property name="halign">center</property>
<property name="spacing">2</property>
<child>
<object class="GtkImage">
<property name="icon-name">image-missing</property>
</object>
</child>
<child>
<object class="GtkLabel">
<property name="label" translatable="yes">Select</property>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkButton" id="buttons_compare">
<property name="focusable">1</property>
<property name="receives-default">1</property>
<child>
<object class="GtkLabel">
<property name="label" translatable="yes">Select</property>
<object class="GtkBox">
<property name="halign">center</property>
<property name="spacing">2</property>
<child>
<object class="GtkImage">
<property name="icon-name">image-missing</property>
</object>
</child>
<child>
<object class="GtkLabel">
<property name="label" translatable="yes">Compare</property>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkButton" id="buttons_delete">
<property name="focusable">1</property>
<property name="receives-default">1</property>
<child>
<object class="GtkBox">
<property name="halign">center</property>
<property name="spacing">2</property>
<child>
<object class="GtkImage">
<property name="icon-name">image-missing</property>
</object>
</child>
<child>
<object class="GtkLabel">
<property name="label" translatable="yes">Delete</property>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkButton" id="buttons_move">
<property name="focusable">1</property>
<property name="receives-default">1</property>
<child>
<object class="GtkBox">
<property name="halign">center</property>
<property name="spacing">2</property>
<child>
<object class="GtkImage">
<property name="icon-name">image-missing</property>
</object>
</child>
<child>
<object class="GtkLabel">
<property name="label" translatable="yes">Move</property>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkButton" id="buttons_save">
<property name="focusable">1</property>
<property name="receives-default">1</property>
<child>
<object class="GtkBox">
<property name="halign">center</property>
<property name="spacing">2</property>
<child>
<object class="GtkImage">
<property name="icon-name">image-missing</property>
</object>
</child>
<child>
<object class="GtkLabel">
<property name="label" translatable="yes">Save</property>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkButton" id="buttons_symlink">
<property name="focusable">1</property>
<property name="receives-default">1</property>
<child>
<object class="GtkBox">
<property name="halign">center</property>
<property name="spacing">2</property>
<child>
<object class="GtkImage">
<property name="icon-name">image-missing</property>
</object>
</child>
<child>
<object class="GtkLabel">
<property name="label" translatable="yes">Symlink</property>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkButton" id="buttons_hardlink">
<property name="focusable">1</property>
<property name="receives-default">1</property>
<child>
<object class="GtkBox">
<property name="halign">center</property>
<property name="spacing">2</property>
<child>
<object class="GtkImage">
<property name="icon-name">image-missing</property>
</object>
</child>
<child>
<object class="GtkLabel">
<property name="label" translatable="yes">Hardlink</property>
</object>
</child>
</object>
</child>
</object>
@ -884,133 +999,25 @@
</object>
</child>
<child>
<object class="GtkButton" id="buttons_compare">
<object class="GtkButton" id="buttons_show_errors">
<property name="focusable">1</property>
<property name="receives-default">1</property>
<child>
<object class="GtkBox">
<object class="GtkImage">
<property name="halign">center</property>
<property name="spacing">2</property>
<child>
<object class="GtkImage">
<property name="icon-name">image-missing</property>
</object>
</child>
<child>
<object class="GtkLabel">
<property name="label" translatable="yes">Compare</property>
</object>
</child>
<property name="icon-name">image-missing</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkButton" id="buttons_delete">
<object class="GtkButton" id="buttons_show_upper_notebook">
<property name="focusable">1</property>
<property name="receives-default">1</property>
<child>
<object class="GtkBox">
<object class="GtkImage">
<property name="halign">center</property>
<property name="spacing">2</property>
<child>
<object class="GtkImage">
<property name="icon-name">image-missing</property>
</object>
</child>
<child>
<object class="GtkLabel">
<property name="label" translatable="yes">Delete</property>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkButton" id="buttons_move">
<property name="focusable">1</property>
<property name="receives-default">1</property>
<child>
<object class="GtkBox">
<property name="halign">center</property>
<property name="spacing">2</property>
<child>
<object class="GtkImage">
<property name="icon-name">image-missing</property>
</object>
</child>
<child>
<object class="GtkLabel">
<property name="label" translatable="yes">Move</property>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkButton" id="buttons_save">
<property name="focusable">1</property>
<property name="receives-default">1</property>
<child>
<object class="GtkBox">
<property name="halign">center</property>
<property name="spacing">2</property>
<child>
<object class="GtkImage">
<property name="icon-name">image-missing</property>
</object>
</child>
<child>
<object class="GtkLabel">
<property name="label" translatable="yes">Save</property>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkButton" id="buttons_symlink">
<property name="focusable">1</property>
<property name="receives-default">1</property>
<child>
<object class="GtkBox">
<property name="halign">center</property>
<property name="spacing">2</property>
<child>
<object class="GtkImage">
<property name="icon-name">image-missing</property>
</object>
</child>
<child>
<object class="GtkLabel">
<property name="label" translatable="yes">Symlink</property>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkButton" id="buttons_hardlink">
<property name="focusable">1</property>
<property name="receives-default">1</property>
<child>
<object class="GtkBox">
<property name="halign">center</property>
<property name="spacing">2</property>
<child>
<object class="GtkImage">
<property name="icon-name">image-missing</property>
</object>
</child>
<child>
<object class="GtkLabel">
<property name="label" translatable="yes">Hardlink</property>
</object>
</child>
<property name="icon-name">image-missing</property>
</object>
</child>
</object>