commit
8b5b3a0a3b
5 changed files with 515 additions and 517 deletions
785
Cargo.lock
generated
785
Cargo.lock
generated
File diff suppressed because it is too large
Load diff
13
Cargo.toml
13
Cargo.toml
|
|
@ -67,7 +67,15 @@ default-features = false
|
|||
features = ["multi-window", "tokio", "winit"]
|
||||
|
||||
[features]
|
||||
default = ["bzip2", "dbus-config", "desktop", "gvfs", "liblzma", "notify", "wgpu"]
|
||||
default = [
|
||||
"bzip2",
|
||||
"dbus-config",
|
||||
"desktop",
|
||||
"gvfs",
|
||||
"liblzma",
|
||||
"notify",
|
||||
"wgpu",
|
||||
]
|
||||
dbus-config = ["libcosmic/dbus-config"]
|
||||
desktop = ["libcosmic/desktop", "dep:cosmic-mime-apps", "dep:xdg"]
|
||||
gvfs = ["dep:gio", "dep:glib"]
|
||||
|
|
@ -106,6 +114,9 @@ xdg-mime = { git = "https://github.com/ellieplayswow/xdg-mime-rs", branch = "fea
|
|||
# libcosmic = { path = "../libcosmic" }
|
||||
# cosmic-config = { path = "../libcosmic/cosmic-config" }
|
||||
# cosmic-theme = { path = "../libcosmic/cosmic-theme" }
|
||||
# cosmic-config = { git = "https://github.com/pop-os/libcosmic//", branch = "drop-menu-tree-changes" }
|
||||
# libcosmic = { git = "https://github.com/pop-os/libcosmic//", branch = "drop-menu-tree-changes" }
|
||||
# cosmic-theme = { git = "https://github.com/pop-os/libcosmic//", branch = "drop-menu-tree-changes" }
|
||||
|
||||
# [patch.'https://github.com/pop-os/smithay-clipboard']
|
||||
# smithay-clipboard = { path = "../smithay-clipboard" }
|
||||
|
|
|
|||
163
src/app.rs
163
src/app.rs
|
|
@ -1,7 +1,6 @@
|
|||
// Copyright 2023 System76 <info@system76.com>
|
||||
// SPDX-License-Identifier: GPL-3.0-only
|
||||
|
||||
use cosmic::iced::mouse::Event::CursorMoved;
|
||||
#[cfg(feature = "wayland")]
|
||||
use cosmic::iced::{
|
||||
event::wayland::{Event as WaylandEvent, OutputEvent, OverlapNotifyEvent},
|
||||
|
|
@ -16,7 +15,8 @@ use cosmic::iced::{
|
|||
#[cfg(feature = "wayland")]
|
||||
use cosmic::iced_winit::commands::overlap_notify::overlap_notify;
|
||||
use cosmic::{
|
||||
app::{self, context_drawer, message, Core, Task},
|
||||
action,
|
||||
app::{self, context_drawer, Core, Task},
|
||||
cosmic_config, cosmic_theme, executor,
|
||||
iced::{
|
||||
self,
|
||||
|
|
@ -41,6 +41,7 @@ use cosmic::{
|
|||
},
|
||||
Application, ApplicationExt, Element,
|
||||
};
|
||||
use cosmic::{iced::mouse::Event::CursorMoved, surface};
|
||||
use mime_guess::Mime;
|
||||
use notify_debouncer_full::{
|
||||
new_debouncer,
|
||||
|
|
@ -265,10 +266,10 @@ pub enum NavMenuAction {
|
|||
}
|
||||
|
||||
impl MenuAction for NavMenuAction {
|
||||
type Message = cosmic::app::Message<Message>;
|
||||
type Message = cosmic::Action<Message>;
|
||||
|
||||
fn message(&self) -> Self::Message {
|
||||
cosmic::app::Message::App(Message::NavMenuAction(*self))
|
||||
cosmic::Action::App(Message::NavMenuAction(*self))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -382,8 +383,9 @@ pub enum Message {
|
|||
Recents,
|
||||
#[cfg(feature = "wayland")]
|
||||
OutputEvent(OutputEvent, WlOutput),
|
||||
Cosmic(app::cosmic::Message),
|
||||
Cosmic(app::Action),
|
||||
None,
|
||||
Surface(surface::Action),
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Eq, PartialEq)]
|
||||
|
|
@ -904,7 +906,7 @@ impl App {
|
|||
async move {
|
||||
let location2 = location.clone();
|
||||
match tokio::task::spawn_blocking(move || location2.scan(icon_sizes)).await {
|
||||
Ok((parent_item_opt, items)) => message::app(Message::TabRescan(
|
||||
Ok((parent_item_opt, items)) => cosmic::action::app(Message::TabRescan(
|
||||
entity,
|
||||
location,
|
||||
parent_item_opt,
|
||||
|
|
@ -913,7 +915,7 @@ impl App {
|
|||
)),
|
||||
Err(err) => {
|
||||
log::warn!("failed to rescan: {}", err);
|
||||
message::none()
|
||||
cosmic::action::none()
|
||||
}
|
||||
}
|
||||
},
|
||||
|
|
@ -1017,16 +1019,15 @@ impl App {
|
|||
// Tabs are collected first to placate the borrowck
|
||||
let tabs: Vec<_> = self.tab_model.iter().collect();
|
||||
// Update main conf and each tab with the new config
|
||||
let commands: Vec<_> = std::iter::once(cosmic::app::command::set_theme(
|
||||
self.config.app_theme.theme(),
|
||||
))
|
||||
.chain(tabs.into_iter().map(|entity| {
|
||||
self.update(Message::TabMessage(
|
||||
Some(entity),
|
||||
tab::Message::Config(self.config.tab),
|
||||
))
|
||||
}))
|
||||
.collect();
|
||||
let commands: Vec<_> =
|
||||
std::iter::once(cosmic::command::set_theme(self.config.app_theme.theme()))
|
||||
.chain(tabs.into_iter().map(|entity| {
|
||||
self.update(Message::TabMessage(
|
||||
Some(entity),
|
||||
tab::Message::Config(self.config.tab),
|
||||
))
|
||||
}))
|
||||
.collect();
|
||||
Task::batch(commands)
|
||||
}
|
||||
|
||||
|
|
@ -1179,7 +1180,7 @@ impl App {
|
|||
})
|
||||
.await
|
||||
.unwrap();
|
||||
message::app(Message::MaybeExit)
|
||||
cosmic::action::app(Message::MaybeExit)
|
||||
},
|
||||
|x| x,
|
||||
);
|
||||
|
|
@ -1801,7 +1802,7 @@ impl Application for App {
|
|||
(app, Task::batch(commands))
|
||||
}
|
||||
|
||||
fn nav_bar(&self) -> Option<Element<message::Message<Self::Message>>> {
|
||||
fn nav_bar(&self) -> Option<Element<cosmic::Action<Self::Message>>> {
|
||||
if !self.core().nav_bar_active() {
|
||||
return None;
|
||||
}
|
||||
|
|
@ -1809,18 +1810,18 @@ impl Application for App {
|
|||
let nav_model = self.nav_model()?;
|
||||
|
||||
let mut nav = cosmic::widget::nav_bar(nav_model, |entity| {
|
||||
cosmic::app::Message::Cosmic(cosmic::app::cosmic::Message::NavBar(entity))
|
||||
cosmic::Action::Cosmic(cosmic::app::Action::NavBar(entity))
|
||||
})
|
||||
.drag_id(self.nav_drag_id)
|
||||
.on_dnd_enter(|entity, _| cosmic::app::Message::App(Message::DndEnterNav(entity)))
|
||||
.on_dnd_leave(|_| cosmic::app::Message::App(Message::DndExitNav))
|
||||
.on_dnd_enter(|entity, _| cosmic::Action::App(Message::DndEnterNav(entity)))
|
||||
.on_dnd_leave(|_| cosmic::Action::App(Message::DndExitNav))
|
||||
.on_dnd_drop(|entity, data, action| {
|
||||
cosmic::app::Message::App(Message::DndDropNav(entity, data, action))
|
||||
cosmic::Action::App(Message::DndDropNav(entity, data, action))
|
||||
})
|
||||
.on_context(|entity| cosmic::app::Message::App(Message::NavBarContext(entity)))
|
||||
.on_close(|entity| cosmic::app::Message::App(Message::NavBarClose(entity)))
|
||||
.on_context(|entity| cosmic::Action::App(Message::NavBarContext(entity)))
|
||||
.on_close(|entity| cosmic::Action::App(Message::NavBarClose(entity)))
|
||||
.on_middle_press(|entity| {
|
||||
cosmic::app::Message::App(Message::NavMenuAction(NavMenuAction::OpenInNewTab(entity)))
|
||||
cosmic::Action::App(Message::NavMenuAction(NavMenuAction::OpenInNewTab(entity)))
|
||||
})
|
||||
.context_menu(self.nav_context_menu(self.nav_bar_context_id))
|
||||
.close_icon(
|
||||
|
|
@ -1843,7 +1844,7 @@ impl Application for App {
|
|||
fn nav_context_menu(
|
||||
&self,
|
||||
entity: widget::nav_bar::Id,
|
||||
) -> Option<Vec<widget::menu::Tree<cosmic::app::Message<Self::Message>>>> {
|
||||
) -> Option<Vec<widget::menu::Tree<cosmic::Action<Self::Message>>>> {
|
||||
let favorite_index_opt = self.nav_model.data::<FavoriteIndex>(entity);
|
||||
let location_opt = self.nav_model.data::<Location>(entity);
|
||||
|
||||
|
|
@ -1945,7 +1946,9 @@ impl Application for App {
|
|||
|
||||
if let Some(data) = self.nav_model.data::<MounterData>(entity) {
|
||||
if let Some(mounter) = MOUNTERS.get(&data.0) {
|
||||
return mounter.mount(data.1.clone()).map(|_| message::none());
|
||||
return mounter
|
||||
.mount(data.1.clone())
|
||||
.map(|_| cosmic::action::none());
|
||||
}
|
||||
}
|
||||
Task::none()
|
||||
|
|
@ -1991,7 +1994,7 @@ impl Application for App {
|
|||
// of closing everything on one press
|
||||
if self.core.window.show_context {
|
||||
self.set_show_context(false);
|
||||
return cosmic::task::message(app::Message::App(Message::SetShowDetails(false)));
|
||||
return cosmic::task::message(cosmic::action::app(Message::SetShowDetails(false)));
|
||||
}
|
||||
if self.search_get().is_some() {
|
||||
// Close search if open
|
||||
|
|
@ -2183,7 +2186,7 @@ impl Application for App {
|
|||
|
||||
let (id, command) = window::open(settings);
|
||||
self.windows.insert(id, WindowKind::DesktopViewOptions);
|
||||
return command.map(|_id| message::none());
|
||||
return command.map(|_id| cosmic::action::none());
|
||||
}
|
||||
Message::DialogCancel => {
|
||||
self.dialog_pages.pop_front();
|
||||
|
|
@ -2232,7 +2235,7 @@ impl Application for App {
|
|||
error: _,
|
||||
} => {
|
||||
if let Some(mounter) = MOUNTERS.get(&mounter_key) {
|
||||
return mounter.mount(item).map(|_| message::none());
|
||||
return mounter.mount(item).map(|_| cosmic::action::none());
|
||||
}
|
||||
}
|
||||
DialogPage::NetworkAuth {
|
||||
|
|
@ -2244,7 +2247,7 @@ impl Application for App {
|
|||
return Task::perform(
|
||||
async move {
|
||||
auth_tx.send(auth).await.unwrap();
|
||||
message::none()
|
||||
cosmic::action::none()
|
||||
},
|
||||
|x| x,
|
||||
);
|
||||
|
|
@ -2513,7 +2516,7 @@ impl Application for App {
|
|||
Some((*mounter_key, self.network_drive_input.clone()));
|
||||
return mounter
|
||||
.network_drive(self.network_drive_input.clone())
|
||||
.map(|_| message::none());
|
||||
.map(|_| cosmic::action::none());
|
||||
}
|
||||
log::warn!(
|
||||
"no mounter found for connecting to {:?}",
|
||||
|
|
@ -2778,10 +2781,11 @@ impl Application for App {
|
|||
let to = path.clone();
|
||||
return clipboard::read_data::<ClipboardPaste>().map(move |contents_opt| {
|
||||
match contents_opt {
|
||||
Some(contents) => {
|
||||
message::app(Message::PasteContents(to.clone(), contents))
|
||||
}
|
||||
None => message::none(),
|
||||
Some(contents) => cosmic::action::app(Message::PasteContents(
|
||||
to.clone(),
|
||||
contents,
|
||||
)),
|
||||
None => cosmic::action::none(),
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
@ -2833,7 +2837,7 @@ impl Application for App {
|
|||
Message::UndoTrash(tid, paths.clone())
|
||||
}),
|
||||
)
|
||||
.map(cosmic::app::Message::App),
|
||||
.map(cosmic::Action::App),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -2958,7 +2962,7 @@ impl Application for App {
|
|||
PreviewKind::Location(Location::Path(path)),
|
||||
),
|
||||
);
|
||||
commands.push(command.map(|_id| message::none()));
|
||||
commands.push(command.map(|_id| cosmic::action::none()));
|
||||
}
|
||||
return Task::batch(commands);
|
||||
}
|
||||
|
|
@ -2979,7 +2983,6 @@ impl Application for App {
|
|||
|
||||
return Task::batch([self.rescan_trash(), self.update_desktop()]);
|
||||
}
|
||||
|
||||
Message::Rename(entity_opt) => {
|
||||
let entity = entity_opt.unwrap_or_else(|| self.tab_model.active());
|
||||
if let Some(tab) = self.tab_model.data_mut::<Tab>(entity) {
|
||||
|
|
@ -3023,7 +3026,7 @@ impl Application for App {
|
|||
return Task::perform(
|
||||
async move {
|
||||
let _ = tx.send(replace_result).await;
|
||||
message::none()
|
||||
cosmic::action::none()
|
||||
},
|
||||
|x| x,
|
||||
);
|
||||
|
|
@ -3239,11 +3242,9 @@ impl Application for App {
|
|||
App::exec_entry_action(entry, action);
|
||||
}
|
||||
tab::Command::Iced(iced_command) => {
|
||||
commands.push(
|
||||
iced_command.0.map(move |x| {
|
||||
message::app(Message::TabMessage(Some(entity), x))
|
||||
}),
|
||||
);
|
||||
commands.push(iced_command.0.map(move |x| {
|
||||
cosmic::action::app(Message::TabMessage(Some(entity), x))
|
||||
}));
|
||||
}
|
||||
tab::Command::OpenFile(path) => self.open_file(&path),
|
||||
tab::Command::OpenInNewTab(path) => {
|
||||
|
|
@ -3333,7 +3334,7 @@ impl Application for App {
|
|||
self.context_page = context_page;
|
||||
// Preview status is preserved across restarts
|
||||
if matches!(self.context_page, ContextPage::Preview(_, _)) {
|
||||
return cosmic::task::message(app::Message::App(Message::SetShowDetails(
|
||||
return cosmic::task::message(cosmic::action::app(Message::SetShowDetails(
|
||||
self.core.window.show_context,
|
||||
)));
|
||||
}
|
||||
|
|
@ -3378,7 +3379,10 @@ impl Application for App {
|
|||
if let Some(window_id) = self.window_id_opt.take() {
|
||||
return Task::batch([
|
||||
window::close(window_id),
|
||||
Task::perform(async move { message::app(Message::MaybeExit) }, |x| x),
|
||||
Task::perform(
|
||||
async move { cosmic::action::app(Message::MaybeExit) },
|
||||
|x| x,
|
||||
),
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
|
@ -3466,7 +3470,7 @@ impl Application for App {
|
|||
self.nav_dnd_hover = Some((location.clone(), Instant::now()));
|
||||
let location = location.clone();
|
||||
return Task::perform(tokio::time::sleep(HOVER_DURATION), move |_| {
|
||||
cosmic::app::Message::App(Message::DndHoverLocTimeout(location.clone()))
|
||||
cosmic::Action::App(Message::DndHoverLocTimeout(location.clone()))
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
@ -3528,7 +3532,7 @@ impl Application for App {
|
|||
Message::DndEnterTab(entity) => {
|
||||
self.tab_dnd_hover = Some((entity, Instant::now()));
|
||||
return Task::perform(tokio::time::sleep(HOVER_DURATION), move |_| {
|
||||
cosmic::app::Message::App(Message::DndHoverTabTimeout(entity))
|
||||
cosmic::Action::App(Message::DndHoverTabTimeout(entity))
|
||||
});
|
||||
}
|
||||
Message::DndExitTab => {
|
||||
|
|
@ -3571,16 +3575,15 @@ impl Application for App {
|
|||
return self.update(Message::TabActivate(entity));
|
||||
}
|
||||
}
|
||||
|
||||
Message::NavBarClose(entity) => {
|
||||
if let Some(data) = self.nav_model.data::<MounterData>(entity) {
|
||||
if let Some(mounter) = MOUNTERS.get(&data.0) {
|
||||
return mounter.unmount(data.1.clone()).map(|_| message::none());
|
||||
return mounter
|
||||
.unmount(data.1.clone())
|
||||
.map(|_| cosmic::action::none());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Tracks which nav bar item to show a context menu for.
|
||||
Message::NavBarContext(entity) => {
|
||||
// Close location editing if enabled
|
||||
let tab_entity = self.tab_model.active();
|
||||
|
|
@ -3590,8 +3593,6 @@ impl Application for App {
|
|||
|
||||
self.nav_bar_context_id = entity;
|
||||
}
|
||||
|
||||
// Applies selected nav bar context menu operation.
|
||||
Message::NavMenuAction(action) => match action {
|
||||
NavMenuAction::Open(entity) => {
|
||||
if let Some(path) = self
|
||||
|
|
@ -3817,7 +3818,7 @@ impl Application for App {
|
|||
}
|
||||
Message::Cosmic(cosmic) => {
|
||||
// Forward cosmic messages
|
||||
return Task::perform(async move { cosmic }, message::cosmic);
|
||||
return Task::perform(async move { cosmic }, cosmic::action::cosmic);
|
||||
}
|
||||
Message::None => {}
|
||||
#[cfg(all(feature = "desktop", feature = "wayland"))]
|
||||
|
|
@ -3853,6 +3854,11 @@ impl Application for App {
|
|||
};
|
||||
}
|
||||
}
|
||||
Message::Surface(a) => {
|
||||
return cosmic::task::message(cosmic::Action::Cosmic(
|
||||
cosmic::app::Action::Surface(a),
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
Task::none()
|
||||
|
|
@ -3881,7 +3887,7 @@ impl Application for App {
|
|||
} else {
|
||||
text_input = text_input
|
||||
.on_input(Message::NetworkDriveInput)
|
||||
.on_submit(Message::NetworkDriveSubmit);
|
||||
.on_submit(|_| Message::NetworkDriveSubmit);
|
||||
widget::button::standard(fl!("connect")).on_press(Message::NetworkDriveSubmit)
|
||||
};
|
||||
context_drawer::context_drawer(
|
||||
|
|
@ -3937,9 +3943,8 @@ impl Application for App {
|
|||
}
|
||||
}
|
||||
|
||||
let dialog_page = match self.dialog_pages.front() {
|
||||
Some(some) => some,
|
||||
None => return None,
|
||||
let Some(dialog_page) = self.dialog_pages.front() else {
|
||||
return None;
|
||||
};
|
||||
|
||||
let cosmic_theme::Spacing {
|
||||
|
|
@ -4008,9 +4013,16 @@ impl Application for App {
|
|||
password: password.clone(),
|
||||
})
|
||||
})
|
||||
.on_submit_maybe(complete_maybe.clone())
|
||||
.on_submit_maybe(
|
||||
complete_maybe.clone().map(|maybe| move |_| maybe.clone()),
|
||||
)
|
||||
.into(),
|
||||
widget::dropdown(archive_types, selected, move |index| {
|
||||
Element::from(widget::dropdown(
|
||||
archive_types,
|
||||
selected,
|
||||
move |index| index,
|
||||
))
|
||||
.map(|index| {
|
||||
Message::DialogUpdate(DialogPage::Compress {
|
||||
paths: paths.clone(),
|
||||
to: to.clone(),
|
||||
|
|
@ -4043,7 +4055,9 @@ impl Application for App {
|
|||
password: Some(password_unwrapped),
|
||||
})
|
||||
})
|
||||
.on_submit_maybe(complete_maybe)
|
||||
.on_submit_maybe(
|
||||
complete_maybe.clone().map(|maybe| move |_| maybe.clone()),
|
||||
)
|
||||
.into(),
|
||||
]));
|
||||
}
|
||||
|
|
@ -4128,7 +4142,7 @@ impl Application for App {
|
|||
auth_tx: auth_tx.clone(),
|
||||
})
|
||||
})
|
||||
.on_submit(Message::DialogComplete);
|
||||
.on_submit(|_| Message::DialogComplete);
|
||||
if !id_assigned {
|
||||
input = input.id(self.dialog_text_input.clone());
|
||||
id_assigned = true;
|
||||
|
|
@ -4150,7 +4164,7 @@ impl Application for App {
|
|||
auth_tx: auth_tx.clone(),
|
||||
})
|
||||
})
|
||||
.on_submit(Message::DialogComplete);
|
||||
.on_submit(|_| Message::DialogComplete);
|
||||
if !id_assigned {
|
||||
input = input.id(self.dialog_text_input.clone());
|
||||
id_assigned = true;
|
||||
|
|
@ -4173,7 +4187,7 @@ impl Application for App {
|
|||
auth_tx: auth_tx.clone(),
|
||||
})
|
||||
})
|
||||
.on_submit(Message::DialogComplete);
|
||||
.on_submit(|_| Message::DialogComplete);
|
||||
if !id_assigned {
|
||||
input = input.id(self.dialog_text_input.clone());
|
||||
}
|
||||
|
|
@ -4309,7 +4323,9 @@ impl Application for App {
|
|||
dir: *dir,
|
||||
})
|
||||
})
|
||||
.on_submit_maybe(complete_maybe)
|
||||
.on_submit_maybe(
|
||||
complete_maybe.clone().map(|maybe| move |_| maybe.clone()),
|
||||
)
|
||||
.into(),
|
||||
])
|
||||
.spacing(space_xxs),
|
||||
|
|
@ -4469,7 +4485,9 @@ impl Application for App {
|
|||
dir: *dir,
|
||||
})
|
||||
})
|
||||
.on_submit_maybe(complete_maybe)
|
||||
.on_submit_maybe(
|
||||
complete_maybe.clone().map(|maybe| move |_| maybe.clone()),
|
||||
)
|
||||
.into(),
|
||||
])
|
||||
.spacing(space_xxs),
|
||||
|
|
@ -4569,7 +4587,6 @@ impl Application for App {
|
|||
widget::button::standard(fl!("keep")).on_press(Message::DialogCancel),
|
||||
),
|
||||
};
|
||||
|
||||
Some(dialog.into())
|
||||
}
|
||||
|
||||
|
|
@ -4849,9 +4866,9 @@ impl Application for App {
|
|||
None => {
|
||||
//TODO: distinct views per monitor in desktop mode
|
||||
return self.view_main().map(|message| match message {
|
||||
app::Message::App(app) => app,
|
||||
app::Message::Cosmic(cosmic) => Message::Cosmic(cosmic),
|
||||
app::Message::None => Message::None,
|
||||
cosmic::Action::App(app) => app,
|
||||
cosmic::Action::Cosmic(cosmic) => Message::Cosmic(cosmic),
|
||||
cosmic::Action::None => Message::None,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
// SPDX-License-Identifier: GPL-3.0-only
|
||||
|
||||
use cosmic::{
|
||||
app::{self, context_drawer, cosmic::Cosmic, message, Core, Task},
|
||||
app::{self, context_drawer, cosmic::Cosmic, Core, Task},
|
||||
cosmic_config, cosmic_theme, executor,
|
||||
iced::{
|
||||
event,
|
||||
|
|
@ -46,7 +46,7 @@ use crate::{
|
|||
};
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct DialogMessage(app::Message<Message>);
|
||||
pub struct DialogMessage(cosmic::Action<Message>);
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
pub enum DialogResult {
|
||||
|
|
@ -200,10 +200,10 @@ impl<M: Send + 'static> Dialog<M> {
|
|||
on_result: Box::new(on_result),
|
||||
},
|
||||
Task::batch([
|
||||
window_command.map(|_id| message::none()),
|
||||
window_command.map(|_id| cosmic::action::none()),
|
||||
cosmic_command
|
||||
.map(DialogMessage)
|
||||
.map(move |message| app::Message::App(mapper(message))),
|
||||
.map(move |message| cosmic::action::app(mapper(message))),
|
||||
]),
|
||||
)
|
||||
}
|
||||
|
|
@ -215,7 +215,7 @@ impl<M: Send + 'static> Dialog<M> {
|
|||
.app
|
||||
.update_title()
|
||||
.map(DialogMessage)
|
||||
.map(move |message| app::Message::App(mapper(message)))
|
||||
.map(move |message| cosmic::action::app(mapper(message)))
|
||||
}
|
||||
|
||||
pub fn set_accept_label(&mut self, accept_label: impl Into<String>) {
|
||||
|
|
@ -246,7 +246,7 @@ impl<M: Send + 'static> Dialog<M> {
|
|||
.app
|
||||
.rescan_tab()
|
||||
.map(DialogMessage)
|
||||
.map(move |message| app::Message::App(mapper(message)))
|
||||
.map(move |message| cosmic::action::app(mapper(message)))
|
||||
}
|
||||
|
||||
pub fn subscription(&self) -> Subscription<M> {
|
||||
|
|
@ -263,12 +263,12 @@ impl<M: Send + 'static> Dialog<M> {
|
|||
.cosmic
|
||||
.update(message.0)
|
||||
.map(DialogMessage)
|
||||
.map(move |message| app::Message::App(mapper(message)));
|
||||
.map(move |message| cosmic::action::app(mapper(message)));
|
||||
if let Some(result) = self.cosmic.app.result_opt.take() {
|
||||
let on_result_message = (self.on_result)(result);
|
||||
Task::batch([
|
||||
command,
|
||||
Task::perform(async move { app::Message::App(on_result_message) }, |x| x),
|
||||
Task::perform(async move { cosmic::action::app(on_result_message) }, |x| x),
|
||||
])
|
||||
} else {
|
||||
command
|
||||
|
|
@ -327,6 +327,7 @@ enum Message {
|
|||
SearchActivate,
|
||||
SearchClear,
|
||||
SearchInput(String),
|
||||
Surface(cosmic::surface::Action),
|
||||
#[allow(clippy::enum_variant_names)]
|
||||
TabMessage(tab::Message),
|
||||
TabRescan(Location, Option<tab::Item>, Vec<tab::Item>),
|
||||
|
|
@ -419,7 +420,7 @@ impl App {
|
|||
widget::text_input("", filename)
|
||||
.id(self.filename_id.clone())
|
||||
.on_input(Message::Filename)
|
||||
.on_submit(Message::Save(false)),
|
||||
.on_submit(|_| Message::Save(false)),
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -531,11 +532,11 @@ impl App {
|
|||
let location2 = location.clone();
|
||||
match tokio::task::spawn_blocking(move || location2.scan(icon_sizes)).await {
|
||||
Ok((parent_item_opt, items)) => {
|
||||
message::app(Message::TabRescan(location, parent_item_opt, items))
|
||||
cosmic::action::app(Message::TabRescan(location, parent_item_opt, items))
|
||||
}
|
||||
Err(err) => {
|
||||
log::warn!("failed to rescan: {}", err);
|
||||
message::none()
|
||||
cosmic::action::none()
|
||||
}
|
||||
}
|
||||
},
|
||||
|
|
@ -921,7 +922,9 @@ impl Application for App {
|
|||
name,
|
||||
})
|
||||
})
|
||||
.on_submit_maybe(complete_maybe)
|
||||
.on_submit_maybe(
|
||||
complete_maybe.clone().map(|maybe| move |_| maybe.clone()),
|
||||
)
|
||||
.into(),
|
||||
])
|
||||
.spacing(space_xxs),
|
||||
|
|
@ -997,7 +1000,7 @@ impl Application for App {
|
|||
elements
|
||||
}
|
||||
|
||||
fn nav_bar(&self) -> Option<Element<message::Message<Self::Message>>> {
|
||||
fn nav_bar(&self) -> Option<Element<cosmic::Action<Self::Message>>> {
|
||||
if !self.core().nav_bar_active() {
|
||||
return None;
|
||||
}
|
||||
|
|
@ -1005,9 +1008,9 @@ impl Application for App {
|
|||
let nav_model = self.nav_model()?;
|
||||
|
||||
let mut nav = cosmic::widget::nav_bar(nav_model, |entity| {
|
||||
cosmic::app::Message::Cosmic(cosmic::app::cosmic::Message::NavBar(entity))
|
||||
cosmic::action::cosmic(cosmic::app::Action::NavBar(entity))
|
||||
})
|
||||
//TODO .on_close(|entity| cosmic::app::Message::App(Message::NavBarClose(entity)))
|
||||
//TODO .on_close(|entity| cosmic::cosmic::action::app(Message::NavBarClose(entity)))
|
||||
.close_icon(
|
||||
widget::icon::from_name("media-eject-symbolic")
|
||||
.size(16)
|
||||
|
|
@ -1043,7 +1046,9 @@ impl Application for App {
|
|||
|
||||
if let Some(data) = self.nav_model.data::<MounterData>(entity) {
|
||||
if let Some(mounter) = MOUNTERS.get(&data.0) {
|
||||
return mounter.mount(data.1.clone()).map(|_| message::none());
|
||||
return mounter
|
||||
.mount(data.1.clone())
|
||||
.map(|_| cosmic::action::none());
|
||||
}
|
||||
}
|
||||
Task::none()
|
||||
|
|
@ -1416,11 +1421,9 @@ impl Application for App {
|
|||
commands.push(Task::batch([self.update_watcher(), self.rescan_tab()]));
|
||||
}
|
||||
tab::Command::Iced(iced_command) => {
|
||||
commands.push(
|
||||
iced_command.0.map(|tab_message| {
|
||||
message::app(Message::TabMessage(tab_message))
|
||||
}),
|
||||
);
|
||||
commands.push(iced_command.0.map(|tab_message| {
|
||||
cosmic::action::app(Message::TabMessage(tab_message))
|
||||
}));
|
||||
}
|
||||
tab::Command::OpenFile(_item_path) => {
|
||||
if self.flags.kind.save() {
|
||||
|
|
@ -1575,6 +1578,11 @@ impl Application for App {
|
|||
tab::View::Grid => zoom_out(&mut self.tab.config.icon_sizes.grid, 50, 500),
|
||||
}
|
||||
}
|
||||
Message::Surface(a) => {
|
||||
return cosmic::task::message(cosmic::Action::Cosmic(
|
||||
cosmic::app::Action::Surface(a),
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
Task::none()
|
||||
|
|
|
|||
21
src/tab.rs
21
src/tab.rs
|
|
@ -1560,15 +1560,18 @@ impl Item {
|
|||
if !mime_apps.is_empty() {
|
||||
settings.push(
|
||||
widget::settings::item::builder(fl!("open-with")).control(
|
||||
widget::dropdown(
|
||||
mime_apps,
|
||||
mime_apps.iter().position(|x| x.is_default),
|
||||
|index| {
|
||||
let mime_app = &mime_apps[index];
|
||||
Message::SetOpenWith(self.mime.clone(), mime_app.id.clone())
|
||||
},
|
||||
Element::from(
|
||||
widget::dropdown(
|
||||
mime_apps,
|
||||
mime_apps.iter().position(|x| x.is_default),
|
||||
move |index| index,
|
||||
)
|
||||
.icons(mime_app_cache.icons(&self.mime)),
|
||||
)
|
||||
.icons(mime_app_cache.icons(&self.mime)),
|
||||
.map(|index| {
|
||||
let mime_app = &mime_apps[index];
|
||||
Message::SetOpenWith(self.mime.clone(), mime_app.id.clone())
|
||||
}),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
|
@ -3771,7 +3774,7 @@ impl Tab {
|
|||
location.with_path(PathBuf::from(input)).into(),
|
||||
))
|
||||
})
|
||||
.on_submit(Message::EditLocationSubmit)
|
||||
.on_submit(|_| Message::EditLocationSubmit)
|
||||
.line_height(1.0);
|
||||
let mut popover =
|
||||
widget::popover(text_input).position(widget::popover::Position::Bottom);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue