Disable focus on action rows with child widgets

This commit is contained in:
Elias Projahn 2021-11-12 00:44:09 +01:00
parent 61a440e45c
commit 2c1fe19b05
35 changed files with 162 additions and 124 deletions

View file

@ -68,6 +68,7 @@
<property name="selection-mode">none</property>
<child>
<object class="AdwActionRow">
<property name="activatable">False</property>
<property name="title" translatable="yes">Loading…</property>
<child>
<object class="GtkSpinner">
@ -88,8 +89,8 @@
<property name="selection-mode">none</property>
<child>
<object class="AdwActionRow" id="error_row">
<property name="focusable">False</property>
<property name="title" translatable="yes">Error while searching for matching metadata</property>
<property name="activatable">True</property>
<property name="activatable-widget">try_again_button</property>
<child>
<object class="GtkButton" id="try_again_button">
@ -111,6 +112,7 @@
<property name="selection-mode">none</property>
<child>
<object class="AdwActionRow">
<property name="activatable">False</property>
<property name="title" translatable="yes">No matching metadata found</property>
</object>
</child>
@ -150,8 +152,8 @@
<property name="selection-mode">none</property>
<child>
<object class="AdwActionRow">
<property name="focusable">False</property>
<property name="title" translatable="yes">Select existing medium</property>
<property name="activatable">True</property>
<property name="activatable-widget">select_button</property>
<child>
<object class="GtkButton" id="select_button">
@ -163,8 +165,8 @@
</child>
<child>
<object class="AdwActionRow">
<property name="focusable">False</property>
<property name="title" translatable="yes">Add a new medium</property>
<property name="activatable">True</property>
<property name="activatable-widget">add_button</property>
<child>
<object class="GtkButton" id="add_button">

View file

@ -69,7 +69,7 @@
<property name="selection-mode">none</property>
<child>
<object class="AdwActionRow">
<property name="activatable">True</property>
<property name="focusable">False</property>
<property name="title" translatable="yes">Username</property>
<property name="activatable-widget">username_entry</property>
<child>
@ -82,7 +82,7 @@
</child>
<child>
<object class="AdwActionRow">
<property name="activatable">True</property>
<property name="focusable">False</property>
<property name="title" translatable="yes">Password</property>
<property name="activatable-widget">password_entry</property>
<child>
@ -120,7 +120,7 @@
<property name="selection-mode">none</property>
<child>
<object class="AdwActionRow">
<property name="activatable">True</property>
<property name="focusable">False</property>
<property name="title" translatable="yes">Register a new account</property>
<property name="activatable-widget">register_button</property>
<child>
@ -159,7 +159,7 @@
<property name="selection-mode">none</property>
<child>
<object class="AdwActionRow">
<property name="activatable">True</property>
<property name="focusable">False</property>
<property name="title" translatable="yes">Don't use an account</property>
<property name="activatable-widget">logout_button</property>
<child>

View file

@ -71,7 +71,7 @@
<property name="selection-mode">none</property>
<child>
<object class="AdwActionRow" id="name_row">
<property name="activatable">True</property>
<property name="focusable">False</property>
<property name="title" translatable="yes">Name of the medium</property>
<property name="activatable-widget">name_entry</property>
<child>
@ -84,7 +84,7 @@
</child>
<child>
<object class="AdwActionRow">
<property name="activatable">True</property>
<property name="focusable">False</property>
<property name="title" translatable="yes">Publish to the server</property>
<property name="activatable-widget">publish_switch</property>
<child>

View file

@ -51,7 +51,7 @@
<property name="selection-mode">none</property>
<child>
<object class="AdwActionRow" id="person_row">
<property name="activatable">True</property>
<property name="focusable">False</property>
<property name="title" translatable="yes">Select a person</property>
<property name="activatable-widget">person_button</property>
<child>
@ -64,7 +64,7 @@
</child>
<child>
<object class="AdwActionRow" id="ensemble_row">
<property name="activatable">True</property>
<property name="focusable">False</property>
<property name="title" translatable="yes">Select an ensemble</property>
<property name="activatable-widget">ensemble_button</property>
<child>
@ -77,7 +77,7 @@
</child>
<child>
<object class="AdwActionRow" id="role_row">
<property name="activatable">True</property>
<property name="focusable">False</property>
<property name="title" translatable="yes">Select a role</property>
<property name="activatable-widget">role_button</property>
<child>

View file

@ -14,6 +14,7 @@
<property name="title" translatable="yes">Music library</property>
<child>
<object class="AdwActionRow" id="music_library_path_row">
<property name="focusable">False</property>
<property name="title" translatable="yes">Music library folder</property>
<property name="activatable-widget">select_music_library_path_button</property>
<property name="subtitle" translatable="yes">None selected</property>
@ -33,6 +34,7 @@
<property name="title" translatable="yes">Server connection</property>
<child>
<object class="AdwActionRow" id="url_row">
<property name="focusable">False</property>
<property name="title" translatable="yes">Server URL</property>
<property name="activatable-widget">url_button</property>
<property name="subtitle" translatable="yes">Not set</property>
@ -47,6 +49,7 @@
</child>
<child>
<object class="AdwActionRow" id="login_row">
<property name="focusable">False</property>
<property name="title" translatable="yes">Login credentials</property>
<property name="activatable-widget">login_button</property>
<property name="subtitle" translatable="yes">Not logged in</property>

View file

@ -75,7 +75,7 @@
<property name="selection-mode">none</property>
<child>
<object class="AdwActionRow" id="work_row">
<property name="activatable">True</property>
<property name="focusable">False</property>
<property name="title" translatable="yes">Select a work</property>
<property name="activatable-widget">work_button</property>
<child>
@ -88,7 +88,7 @@
</child>
<child>
<object class="AdwActionRow">
<property name="activatable">True</property>
<property name="focusable">False</property>
<property name="title" translatable="yes">Comment</property>
<property name="activatable-widget">comment_entry</property>
<child>
@ -101,7 +101,7 @@
</child>
<child>
<object class="AdwActionRow">
<property name="activatable">True</property>
<property name="focusable">False</property>
<property name="title" translatable="yes">Publish to the server</property>
<property name="activatable-widget">upload_switch</property>
<child>

View file

@ -102,7 +102,7 @@
<property name="selection-mode">none</property>
<child>
<object class="AdwActionRow">
<property name="activatable">True</property>
<property name="focusable">False</property>
<property name="title" translatable="yes">Username</property>
<property name="activatable-widget">username_entry</property>
<child>
@ -115,7 +115,7 @@
</child>
<child>
<object class="AdwActionRow">
<property name="activatable">True</property>
<property name="focusable">False</property>
<property name="title" translatable="yes">E-mail (optional)</property>
<property name="activatable-widget">email_entry</property>
<child>
@ -147,7 +147,7 @@
<property name="selection-mode">none</property>
<child>
<object class="AdwActionRow">
<property name="activatable">True</property>
<property name="focusable">False</property>
<property name="title" translatable="yes">Password</property>
<property name="activatable-widget">password_entry</property>
<child>
@ -162,7 +162,7 @@
</child>
<child>
<object class="AdwActionRow">
<property name="activatable">True</property>
<property name="focusable">False</property>
<property name="title" translatable="yes">Repeat password</property>
<property name="activatable-widget">repeat_password_entry</property>
<child>
@ -202,7 +202,7 @@
</child>
<child>
<object class="AdwActionRow">
<property name="activatable">True</property>
<property name="focusable">False</property>
<property name="title" translatable="yes">Your answer</property>
<property name="activatable-widget">captcha_entry</property>
<child>

View file

@ -40,7 +40,7 @@
<property name="selection-mode">none</property>
<child>
<object class="AdwActionRow">
<property name="activatable">True</property>
<property name="focusable">False</property>
<property name="title" translatable="yes">URL</property>
<property name="activatable-widget">url_entry</property>
<child>

View file

@ -61,7 +61,7 @@
<property name="selection-mode">none</property>
<child>
<object class="AdwActionRow" id="recording_row">
<property name="activatable">True</property>
<property name="focusable">False</property>
<property name="title" translatable="yes">Select a recording</property>
<property name="activatable-widget">select_recording_button</property>
<child>

View file

@ -75,7 +75,7 @@
<property name="selection-mode">none</property>
<child>
<object class="AdwActionRow" id="composer_row">
<property name="activatable">True</property>
<property name="focusable">False</property>
<property name="title" translatable="yes">Select a composer</property>
<property name="activatable-widget">composer_button</property>
<child>
@ -88,7 +88,7 @@
</child>
<child>
<object class="AdwActionRow">
<property name="activatable">True</property>
<property name="focusable">False</property>
<property name="title" translatable="yes">Title</property>
<property name="activatable-widget">title_entry</property>
<child>
@ -101,7 +101,7 @@
</child>
<child>
<object class="AdwActionRow">
<property name="activatable">True</property>
<property name="focusable">False</property>
<property name="title" translatable="yes">Publish to the server</property>
<property name="activatable-widget">upload_switch</property>
<child>

View file

@ -55,7 +55,7 @@
<property name="selection-mode">none</property>
<child>
<object class="AdwActionRow">
<property name="activatable">True</property>
<property name="focusable">False</property>
<property name="title" translatable="yes">Title</property>
<property name="activatable-widget">title_entry</property>
<child>

View file

@ -55,7 +55,7 @@
<property name="selection-mode">none</property>
<child>
<object class="AdwActionRow">
<property name="activatable">True</property>
<property name="focusable">False</property>
<property name="title" translatable="yes">Title</property>
<property name="activatable-widget">title_entry</property>
<child>

View file

@ -136,12 +136,14 @@ impl Screen<Option<Recording>, Recording> for RecordingEditor {
});
}));
let row = adw::ActionRow::new();
row.set_activatable(true);
row.set_title(&performance.get_title());
let row = adw::ActionRowBuilder::new()
.focusable(false)
.activatable_widget(&edit_button)
.title(&performance.get_title())
.build();
row.add_suffix(&delete_button);
row.add_suffix(&edit_button);
row.set_activatable_widget(Some(&edit_button));
row.upcast()
}));

View file

@ -161,8 +161,10 @@ impl Screen<Option<Work>, Work> for WorkEditor {
this.instrument_list.update(length);
}));
let row = adw::ActionRow::new();
row.set_title(&instrument.name);
let row = adw::ActionRowBuilder::new()
.title(&instrument.name)
.build();
row.add_suffix(&delete_button);
row.upcast()
@ -232,12 +234,14 @@ impl Screen<Option<Work>, Work> for WorkEditor {
});
}));
let row = adw::ActionRow::new();
row.set_activatable(true);
row.set_title(&pos.get_title());
let row = adw::ActionRowBuilder::new()
.focusable(false)
.title(&pos.get_title())
.activatable_widget(&edit_button)
.build();
row.add_suffix(&delete_button);
row.add_suffix(&edit_button);
row.set_activatable_widget(Some(&edit_button));
if let PartOrSection::Part(_) = pos {
// TODO: Replace with better solution to differentiate parts and sections.

View file

@ -71,9 +71,9 @@ impl ImportScreen {
for medium in mediums {
let row = adw::ActionRowBuilder::new()
.activatable(true)
.title(&medium.name)
.subtitle(&format!("{} Tracks", medium.tracks.len()))
.activatable(true)
.build();
row.connect_activated(clone!(@weak this => move |_| {

View file

@ -118,12 +118,14 @@ impl Screen<(Arc<ImportSession>, Option<Medium>), Medium> for MediumEditor {
edit_button.set_valign(gtk::Align::Center);
edit_button.set_child(Some(&edit_image));
let row = adw::ActionRow::new();
row.set_activatable(true);
row.set_title(&title);
row.set_subtitle(&subtitle);
let row = adw::ActionRowBuilder::new()
.focusable(false)
.title(&title)
.subtitle(&subtitle)
.activatable_widget(&edit_button)
.build();
row.add_suffix(&edit_button);
row.set_activatable_widget(Some(&edit_button));
edit_button.connect_clicked(clone!(@weak this => move |_| {
// TODO: Implement editing.

View file

@ -65,11 +65,13 @@ impl Screen<(Recording, Vec<usize>), Vec<usize>> for TrackEditor {
}
}));
let row = adw::ActionRow::new();
row.add_prefix(&check);
row.set_activatable_widget(Some(&check));
row.set_title(&part.title);
let row = adw::ActionRowBuilder::new()
.focusable(false)
.title(&part.title)
.activatable_widget(&check)
.build();
row.add_prefix(&check);
parts_list.append(&row);
}

View file

@ -75,11 +75,13 @@ impl Screen<Arc<ImportSession>, Vec<usize>> for TrackSelector {
}
}));
let row = adw::ActionRow::new();
let row = adw::ActionRowBuilder::new()
.focusable(false)
.title(&track.name)
.activatable_widget(&check)
.build();
row.add_prefix(&check);
row.set_activatable_widget(Some(&check));
row.set_activatable(true);
row.set_title(&track.name);
track_list.append(&row);
}

View file

@ -144,12 +144,14 @@ impl Screen<Arc<ImportSession>, TrackSetData> for TrackSetEditor {
edit_button.set_valign(gtk::Align::Center);
edit_button.set_child(Some(&edit_image));
let row = adw::ActionRow::new();
row.set_activatable(true);
row.set_title(&title);
row.set_subtitle(track_name);
let row = adw::ActionRowBuilder::new()
.focusable(false)
.title(&title)
.subtitle(track_name)
.activatable_widget(&edit_button)
.build();
row.add_suffix(&edit_button);
row.set_activatable_widget(Some(&edit_button));
edit_button.connect_clicked(clone!(@weak this => move |_| {
let recording = this.recording.borrow().clone();

View file

@ -74,10 +74,11 @@ impl Screen<Ensemble, ()> for EnsembleScreen {
clone!(@weak this => @default-panic, move |index| {
let recording = &this.recordings.borrow()[index];
let row = adw::ActionRow::new();
row.set_activatable(true);
row.set_title(&recording.work.get_title());
row.set_subtitle(&recording.get_performers());
let row = adw::ActionRowBuilder::new()
.activatable(true)
.title(&recording.work.get_title())
.subtitle(&recording.get_performers())
.build();
let recording = recording.to_owned();
row.connect_activated(clone!(@weak this => move |_| {
@ -103,9 +104,10 @@ impl Screen<Ensemble, ()> for EnsembleScreen {
.set_make_widget_cb(clone!(@weak this => @default-panic, move |index| {
let medium = &this.mediums.borrow()[index];
let row = adw::ActionRow::new();
row.set_activatable(true);
row.set_title(&medium.name);
let row = adw::ActionRowBuilder::new()
.activatable(true)
.title(&medium.name)
.build();
let medium = medium.to_owned();
row.connect_activated(clone!(@weak this => move |_| {

View file

@ -93,9 +93,10 @@ impl Screen<(), ()> for MainScreen {
.set_make_widget_cb(clone!(@weak this => @default-panic, move |index| {
let poe = &this.poes.borrow()[index];
let row = adw::ActionRow::new();
row.set_activatable(true);
row.set_title(&poe.get_title());
let row = adw::ActionRowBuilder::new()
.activatable(true)
.title(&poe.get_title())
.build();
let poe = poe.to_owned();
row.connect_activated(clone!(@weak this => move |_| {

View file

@ -76,11 +76,11 @@ impl Screen<Medium, ()> for MediumScreen {
parts.join(", ")
};
let row = adw::ActionRow::new();
row.set_selectable(false);
row.set_activatable(false);
row.set_title(&title);
row.set_margin_start(12);
let row = adw::ActionRowBuilder::new()
.margin_start(12)
.selectable(false)
.title(&title)
.build();
row.upcast()
}));

View file

@ -80,9 +80,10 @@ impl Screen<Person, ()> for PersonScreen {
.set_make_widget_cb(clone!(@weak this => @default-panic, move |index| {
let work = &this.works.borrow()[index];
let row = adw::ActionRow::new();
row.set_activatable(true);
row.set_title(&work.title);
let row = adw::ActionRowBuilder::new()
.activatable(true)
.title(&work.title)
.build();
let work = work.to_owned();
row.connect_activated(clone!(@weak this => move |_| {
@ -107,10 +108,11 @@ impl Screen<Person, ()> for PersonScreen {
clone!(@weak this => @default-panic, move |index| {
let recording = &this.recordings.borrow()[index];
let row = adw::ActionRow::new();
row.set_activatable(true);
row.set_title(&recording.work.get_title());
row.set_subtitle(&recording.get_performers());
let row = adw::ActionRowBuilder::new()
.activatable(true)
.title(&recording.work.get_title())
.subtitle(&recording.get_performers())
.build();
let recording = recording.to_owned();
row.connect_activated(clone!(@weak this => move |_| {
@ -136,9 +138,10 @@ impl Screen<Person, ()> for PersonScreen {
.set_make_widget_cb(clone!(@weak this => @default-panic, move |index| {
let medium = &this.mediums.borrow()[index];
let row = adw::ActionRow::new();
row.set_activatable(true);
row.set_title(&medium.name);
let row = adw::ActionRowBuilder::new()
.activatable(true)
.title(&medium.name)
.build();
let medium = medium.to_owned();
row.connect_activated(clone!(@weak this => move |_| {

View file

@ -225,10 +225,11 @@ impl Screen<(), ()> for PlayerScreen {
parts.join(", ")
};
let row = adw::ActionRow::new();
row.set_selectable(false);
row.set_activatable(true);
row.set_title(&title);
let row = adw::ActionRowBuilder::new()
.selectable(false)
.activatable(true)
.title(&title)
.build();
if first {
let subtitle = if !parts.is_empty() {

View file

@ -86,8 +86,9 @@ impl Screen<Recording, ()> for RecordingScreen {
title_parts.join(", ")
};
let row = adw::ActionRow::new();
row.set_title(&title);
let row = adw::ActionRowBuilder::new()
.title(&title)
.build();
row.upcast()
}));

View file

@ -69,10 +69,11 @@ impl Screen<Work, ()> for WorkScreen {
clone!(@weak this => @default-panic, move |index| {
let recording = &this.recordings.borrow()[index];
let row = adw::ActionRow::new();
row.set_activatable(true);
row.set_title(&recording.work.get_title());
row.set_subtitle(&recording.get_performers());
let row = adw::ActionRowBuilder::new()
.activatable(true)
.title(&recording.work.get_title())
.subtitle(&recording.get_performers())
.build();
let recording = recording.to_owned();
row.connect_activated(clone!(@weak this => move |_| {

View file

@ -52,9 +52,10 @@ impl Screen<(), Ensemble> for EnsembleSelector {
this.selector
.set_make_widget(clone!(@weak this => @default-panic, move |ensemble| {
let row = adw::ActionRow::new();
row.set_activatable(true);
row.set_title(&ensemble.name);
let row = adw::ActionRowBuilder::new()
.activatable(true)
.title(&ensemble.name)
.build();
let ensemble = ensemble.to_owned();
row.connect_activated(clone!(@weak this => move |_| {

View file

@ -52,9 +52,10 @@ impl Screen<(), Instrument> for InstrumentSelector {
this.selector
.set_make_widget(clone!(@weak this => @default-panic, move |instrument| {
let row = adw::ActionRow::new();
row.set_activatable(true);
row.set_title(&instrument.name);
let row = adw::ActionRowBuilder::new()
.activatable(true)
.title(&instrument.name)
.build();
let instrument = instrument.to_owned();
row.connect_activated(clone!(@weak this => move |_| {

View file

@ -69,9 +69,10 @@ impl Screen<(), Medium> for MediumSelector {
}));
this.selector.set_make_widget(clone!(@weak this => @default-panic, move |poe| {
let row = adw::ActionRow::new();
row.set_activatable(true);
row.set_title(&poe.get_title());
let row = adw::ActionRowBuilder::new()
.activatable(true)
.title(&poe.get_title())
.build();
let poe = poe.to_owned();
row.connect_activated(clone!(@weak this => move |_| {
@ -143,9 +144,10 @@ impl Screen<PersonOrEnsemble, Medium> for MediumSelectorMediumScreen {
this.selector
.set_make_widget(clone!(@weak this => @default-panic, move |medium| {
let row = adw::ActionRow::new();
row.set_activatable(true);
row.set_title(&medium.name);
let row = adw::ActionRowBuilder::new()
.activatable(true)
.title(&medium.name)
.build();
let medium = medium.to_owned();
row.connect_activated(clone!(@weak this => move |_| {

View file

@ -52,9 +52,10 @@ impl Screen<(), Person> for PersonSelector {
this.selector
.set_make_widget(clone!(@weak this => @default-panic, move |person| {
let row = adw::ActionRow::new();
row.set_activatable(true);
row.set_title(&person.name_lf());
let row = adw::ActionRowBuilder::new()
.activatable(true)
.title(&person.name_lf())
.build();
let person = person.to_owned();
row.connect_activated(clone!(@weak this => move |_| {

View file

@ -61,9 +61,10 @@ impl Screen<(), Recording> for RecordingSelector {
}));
this.selector.set_make_widget(clone!(@weak this => @default-panic, move |person| {
let row = adw::ActionRow::new();
row.set_activatable(true);
row.set_title(&person.name_lf());
let row = adw::ActionRowBuilder::new()
.activatable(true)
.title(&person.name_lf())
.build();
let person = person.to_owned();
row.connect_activated(clone!(@weak this => move |_| {
@ -142,9 +143,10 @@ impl Screen<Person, Work> for RecordingSelectorWorkScreen {
this.selector
.set_make_widget(clone!(@weak this => @default-panic, move |work| {
let row = adw::ActionRow::new();
row.set_activatable(true);
row.set_title(&work.title);
let row = adw::ActionRowBuilder::new()
.activatable(true)
.title(&work.title)
.build();
let work = work.to_owned();
row.connect_activated(clone!(@weak this => move |_| {
@ -209,9 +211,10 @@ impl Screen<Work, Recording> for RecordingSelectorRecordingScreen {
this.selector
.set_make_widget(clone!(@weak this => @default-panic, move |recording| {
let row = adw::ActionRow::new();
row.set_activatable(true);
row.set_title(&recording.get_performers());
let row = adw::ActionRowBuilder::new()
.activatable(true)
.title(&recording.get_performers())
.build();
let recording = recording.to_owned();
row.connect_activated(clone!(@weak this => move |_| {

View file

@ -55,9 +55,10 @@ impl Screen<(), Work> for WorkSelector {
}));
this.selector.set_make_widget(clone!(@weak this => @default-panic, move |person| {
let row = adw::ActionRow::new();
row.set_activatable(true);
row.set_title(&person.name_lf());
let row = adw::ActionRowBuilder::new()
.activatable(true)
.title(&person.name_lf())
.build();
let person = person.to_owned();
row.connect_activated(clone!(@weak this => move |_| {
@ -132,9 +133,10 @@ impl Screen<Person, Work> for WorkSelectorWorkScreen {
this.selector
.set_make_widget(clone!(@weak this => @default-panic, move |work| {
let row = adw::ActionRow::new();
row.set_activatable(true);
row.set_title(&work.title);
let row = adw::ActionRowBuilder::new()
.activatable(true)
.title(&work.title)
.build();
let work = work.to_owned();
row.connect_activated(clone!(@weak this => move |_| {

View file

@ -19,7 +19,7 @@ impl ButtonRow {
.build();
let widget = adw::ActionRowBuilder::new()
.activatable(true)
.focusable(false)
.activatable_widget(&button)
.title(title)
.build();

View file

@ -18,7 +18,7 @@ impl EntryRow {
.build();
let widget = adw::ActionRowBuilder::new()
.activatable(true)
.focusable(false)
.activatable_widget(&entry)
.title(title)
.build();

View file

@ -29,8 +29,8 @@ impl UploadSection {
.build();
let row = adw::ActionRowBuilder::new()
.focusable(false)
.title("Upload changes to the server")
.activatable(true)
.activatable_widget(&switch)
.build();