feat: tab dnd

This commit is contained in:
Ashley Wulber 2026-01-28 20:07:05 -05:00
parent 021a8e614e
commit 2b90abdde9
No known key found for this signature in database
GPG key ID: 5216D4F46A90A820
2 changed files with 62 additions and 52 deletions

View file

@ -3,7 +3,7 @@
use cosmic::surface;
use cosmic::widget::menu::action::MenuAction;
use cosmic::widget::menu::key_bind::KeyBind;
use cosmic::widget::segmented_button::Entity;
use cosmic::widget::segmented_button::{Entity, ReorderEvent};
use cosmic::{
Application, ApplicationExt, Apply, Element, action,
app::{Core, Settings, Task, context_drawer},
@ -391,6 +391,7 @@ pub enum Message {
Quit,
QuitForce,
Redo,
ReorderTab(ReorderEvent),
RevertAllChanges,
Save(Option<segmented_button::Entity>),
SaveAll,
@ -1409,9 +1410,8 @@ impl Application for App {
let font_names = {
let mut font_names = Vec::new();
let mut font_system = font_system().write().unwrap();
let attrs = monospace_attrs();
for face in font_system.raw().db().faces() {
if face.style == attrs.style && face.stretch == attrs.stretch && face.monospaced {
if face.monospaced {
//TODO: get localized name if possible
let font_name = face
.families
@ -2549,6 +2549,13 @@ impl Application for App {
return self.update(Message::TabChanged(self.tab_model.active()));
}
}
Message::ReorderTab(ReorderEvent {
dragged,
target,
position,
}) => {
_ = self.tab_model.reorder(dragged, target, position);
}
Message::RevertAllChanges => {
if let Some(Tab::Editor(tab)) = self.active_tab_mut() {
tab.reload();
@ -3001,6 +3008,9 @@ impl Application for App {
.push(
widget::tab_bar::horizontal(&self.tab_model)
.button_height(32)
.enable_tab_drag(String::from("x-cosmic-edit/tab"))
.on_reorder(Message::ReorderTab)
.tab_drag_threshold(25.)
.button_spacing(space_xxs)
.close_icon(icon_cache_get("window-close-symbolic", 16))
//TODO: this causes issues with small window sizes .minimum_button_width(240)