Compare commits

...

11 commits

Author SHA1 Message Date
7393ce1ff1 chore: align workspaces with local cosmic stack 2026-05-24 11:11:12 +02:00
Vukašin Vojinović
cd729d045b chore: add rust-toolchain to enforce 1.93 2026-05-12 17:18:56 +02:00
Vukašin Vojinović
12e449e050 fix(size_cross_nth): get max_cross after constraining main
Prevents visual cross sizes for the main widget and other children from becoming different.
This happened when the title height became a significant-enough chunk of max main that it interfered with the preview aspect ratio after its relayout with the previously unaccounted for title height, which caused its width to shrink (to keep the aspect ratio), while the title remained at `max_cross`.
2026-05-12 17:18:56 +02:00
Michael Murphy
d4071eae98
i18n: translation update from Hosted Weblate (#303) 2026-05-12 17:14:17 +02:00
Hosted Weblate
522ad626b1
i18n: translation updates from weblate
Co-authored-by: BoneNI <bounkirdni@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Jim Spentzos <jimspentzos2000@gmail.com>
Co-authored-by: Марко М. Костић <marko.m.kostic@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-workspaces/el/
Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-workspaces/sr/
Translation: Pop OS/COSMIC Workspaces
2026-05-03 01:52:45 +02:00
Michael Aaron Murphy
d56a59208e chore: update all dependencies 2026-04-29 21:41:03 +02:00
Michael Aaron Murphy
e8a1927d42 chore: add zed editor config 2026-04-29 21:41:03 +02:00
Michael Aaron Murphy
2acf6f9f14 chore: apply rustfmt config with module import granulatiry 2026-04-29 21:41:03 +02:00
Michael Aaron Murphy
2b9906f941 chore: update libcosmic and MSRV 2026-04-29 21:41:03 +02:00
Jeremy Soller
4e9c902ee2
i18n: translation update from Hosted Weblate (#295) 2026-04-14 09:51:52 -06:00
Hosted Weblate
8542100f85
i18n: translation updates from weblate
Co-authored-by: Asier Saratsua Garmendia <asier.sarasua@gmail.com>
Co-authored-by: ButterflyOfFire <boffire@users.noreply.hosted.weblate.org>
Co-authored-by: Geeson Wan <wang14240@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Hugo Carvalho <hugokarvalho@hotmail.com>
Co-authored-by: João Campos <tiojoca@gmail.com>
Co-authored-by: Urocissa Caerulea.Tw <urocissa.tw@proton.me>
Co-authored-by: Walter William Beckerleg Bruckman <spayk.99@protonmail.com>
Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-workspaces/kab/
Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-workspaces/pt/
Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-workspaces/pt_BR/
Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-workspaces/zh_Hant/
Translation: Pop OS/COSMIC Workspaces
2026-04-12 18:50:15 +02:00
41 changed files with 499 additions and 692 deletions

15
.zed/settings.json Normal file
View file

@ -0,0 +1,15 @@
{
"format_on_save": "on",
"lsp": {
"rust-analyzer": {
"initialization_options": {
"check": {
"command": "clippy",
},
"rustfmt": {
"extraArgs": ["+nightly"],
},
},
},
},
}

590
Cargo.lock generated

File diff suppressed because it is too large Load diff

View file

@ -1,17 +1,18 @@
[package]
name = "cosmic-workspaces"
version = "1.0.0"
version = "1.0.12"
edition = "2024"
rust-version = "1.93"
[dependencies]
anyhow = "1.0.102"
calloop = { version = "0.14.4", features = ["executor"] }
clap = { version = "4", features = ["derive"] }
cosmic-bg-config = { git = "https://github.com/pop-os/cosmic-bg" }
cosmic-bg-config = { path = "../cosmic-bg/config" }
cosmic-comp-config = { git = "https://github.com/pop-os/cosmic-comp" }
env_logger = "0.11.9"
gbm = "0.18.0"
libcosmic = { git = "https://github.com/pop-os/libcosmic", default-features = false, features = [
cosmic = { package = "libcosmic-yoda", path = "../libcosmic", default-features = false, features = [
"tokio",
"wayland",
"single-instance",
@ -19,7 +20,7 @@ libcosmic = { git = "https://github.com/pop-os/libcosmic", default-features = fa
"multi-window",
"winit",
] }
cosmic-config = { git = "https://github.com/pop-os/libcosmic" }
cosmic-config = { path = "../libcosmic/cosmic-config" }
freedesktop-icons = { package = "cosmic-freedesktop-icons", git = "https://github.com/pop-os/freedesktop-icons" }
memmap2 = "0.9.10"
@ -37,7 +38,7 @@ zbus = "5.13.2"
tokio-stream = { version = "0.1.18", features = ["sync"] }
ash = { version = "0.38.0", features = ["loaded"] }
bytemuck = "1.25.0"
cosmic-panel-config = { git = "https://github.com/pop-os/cosmic-panel" }
cosmic-panel-config = { path = "../cosmic-panel/cosmic-panel-config" }
[dependencies.i18n-embed]
version = "0.16"
@ -45,12 +46,49 @@ features = ["fluent-system", "desktop-requester"]
[features]
default = ["wgpu"]
wgpu = ["libcosmic/wgpu"]
wgpu = ["cosmic/wgpu"]
# Debugging features
force-shm-screencopy = []
no-subsurfaces = ["force-shm-screencopy"]
mock-backend = []
[patch.'https://github.com/pop-os/libcosmic']
cosmic-config = { path = "../libcosmic/cosmic-config" }
cosmic-theme = { path = "../libcosmic/cosmic-theme" }
iced = { path = "../libcosmic/iced" }
iced_accessibility = { path = "../libcosmic/iced/accessibility" }
iced_core = { path = "../libcosmic/iced/core" }
iced_futures = { path = "../libcosmic/iced/futures" }
iced_graphics = { path = "../libcosmic/iced/graphics" }
iced_renderer = { path = "../libcosmic/iced/renderer" }
iced_runtime = { path = "../libcosmic/iced/runtime" }
iced_tiny_skia = { path = "../libcosmic/iced/tiny_skia" }
iced_wgpu = { path = "../libcosmic/iced/wgpu" }
iced_widget = { path = "../libcosmic/iced/widget" }
iced_winit = { path = "../libcosmic/iced/winit" }
[patch.'https://github.com/pop-os/cosmic-protocols']
cosmic-protocols = { path = "../cosmic-protocols" }
cosmic-client-toolkit = { path = "../cosmic-protocols/client-toolkit" }
[patch.'https://github.com/pop-os/cosmic-text.git']
cosmic-text = { git = "https://forge.aditua.com/leyoda/cosmic-text.git", branch = "local/pr-503" }
[patch.'https://github.com/pop-os/cosmic-bg']
cosmic-bg-config = { path = "../cosmic-bg/config" }
[patch.'https://github.com/pop-os/cosmic-panel']
cosmic-panel-config = { path = "../cosmic-panel/cosmic-panel-config" }
xdg-shell-wrapper-config = { path = "../cosmic-panel/xdg-shell-wrapper-config" }
[patch.'https://github.com/pop-os/cosmic-settings-daemon']
cosmic-settings-config = { path = "../cosmic-settings-daemon/config" }
[patch.'https://forge.aditua.com/leyoda/window_clipboard.git']
window_clipboard = { path = "../window_clipboard" }
dnd = { path = "../window_clipboard/dnd" }
mime = { path = "../window_clipboard/mime" }
[profile.dev]
# Not usable at opt-level 0, at least with software renderer
opt-level = 1

6
debian/changelog vendored
View file

@ -1,3 +1,9 @@
cosmic-workspaces (1.0.12) noble; urgency=medium
* Version bump
-- Michael Murphy <michael@mmurphy.dev> Wed, 29 Apr 2026 17:48:17 +0200
cosmic-workspaces (0.1.0) jammy; urgency=medium
* Initial release.

View file

@ -0,0 +1,2 @@
workspace = Χώρος εργασίας { $number }
new-workspace = Νέος χώρος εργασίας

View file

View file

@ -0,0 +1,2 @@
workspace = Tallunt n umahil { $number }
new-workspace = Tallunt n umahil tamaynut

View file

View file

@ -1,2 +1,2 @@
workspace = Área de trabalho { $number }
new-workspace = Nova área de trabalho
workspace = Espaço de trabalho { $number }
new-workspace = Novo espaço de trabalho

View file

@ -1,2 +1,2 @@
new-workspace = Nova área de trabalho
workspace = Área de trabalho{ $number }
workspace = Área de trabalho { $number }

View file

@ -0,0 +1,2 @@
workspace = Радни простор { $number }
new-workspace = Нови радни простор

View file

@ -1,2 +1,2 @@
workspace = 工作區 { $number }
new-workspace = 新工作區
new-workspace = 新建工作區

3
rust-toolchain.toml Normal file
View file

@ -0,0 +1,3 @@
[toolchain]
channel = "1.93.0"
components = ["clippy", "rustfmt"]

View file

@ -1 +1 @@
imports_granularity = "Crate"
imports_granularity = "Module"

View file

@ -1,37 +1,23 @@
// Copyright 2024 System76 <info@system76.com>
// SPDX-License-Identifier: GPL-3.0-only
use cosmic::{
cctk::{
cosmic_protocols::{
toplevel_info::v1::client::zcosmic_toplevel_handle_v1,
toplevel_management::v1::client::zcosmic_toplevel_manager_v1,
workspace::v2::client::zcosmic_workspace_handle_v2,
},
wayland_client::{
Connection, WEnum,
protocol::{wl_output, wl_shm},
},
wayland_protocols::ext::workspace::v1::client::ext_workspace_handle_v1,
},
iced::{
self,
futures::{FutureExt, SinkExt, executor::block_on},
},
iced_winit::platform_specific::wayland::subsurface_widget::{Shmbuf, SubsurfaceBuffer},
};
use cosmic::cctk::cosmic_protocols::toplevel_info::v1::client::zcosmic_toplevel_handle_v1;
use cosmic::cctk::cosmic_protocols::toplevel_management::v1::client::zcosmic_toplevel_manager_v1;
use cosmic::cctk::cosmic_protocols::workspace::v2::client::zcosmic_workspace_handle_v2;
use cosmic::cctk::wayland_client::protocol::{wl_output, wl_shm};
use cosmic::cctk::wayland_client::{Connection, WEnum};
use cosmic::cctk::wayland_protocols::ext::workspace::v1::client::ext_workspace_handle_v1;
use cosmic::iced::futures::executor::block_on;
use cosmic::iced::futures::{FutureExt, SinkExt};
use cosmic::iced::{self};
use cosmic::iced_winit::platform_specific::wayland::subsurface_widget::{Shmbuf, SubsurfaceBuffer};
use futures_channel::mpsc;
use std::{
collections::HashSet,
fs,
io::{self, Write},
sync::{
Arc,
atomic::{AtomicU32, Ordering},
},
thread,
};
use std::collections::HashSet;
use std::io::{self, Write};
use std::sync::Arc;
use std::sync::atomic::{AtomicU32, Ordering};
use std::{fs, thread};
use super::{CaptureImage, Cmd, Event};
use crate::utils;

View file

@ -7,13 +7,9 @@
//! There are two backends: one that uses cosmic-comp protocols, and a mock
//! backend for testing without any special protocols.
use cosmic::{
cctk::{
cosmic_protocols::toplevel_management::v1::client::zcosmic_toplevel_manager_v1,
wayland_client::protocol::wl_output,
},
iced::platform_specific::shell::subsurface_widget::SubsurfaceBuffer,
};
use cosmic::cctk::cosmic_protocols::toplevel_management::v1::client::zcosmic_toplevel_manager_v1;
use cosmic::cctk::wayland_client::protocol::wl_output;
use cosmic::iced::platform_specific::shell::subsurface_widget::SubsurfaceBuffer;
use std::collections::HashSet;
// Wayland backend using cosmic-comp specific protocols
@ -98,6 +94,7 @@ pub enum Cmd {
wl_output::WlOutput,
),
MoveWorkspaceBefore(ExtWorkspaceHandleV1, ExtWorkspaceHandleV1),
#[allow(dead_code)]
MoveWorkspaceAfter(ExtWorkspaceHandleV1, ExtWorkspaceHandleV1),
ActivateWorkspace(ExtWorkspaceHandleV1),
SetWorkspacePinned(ExtWorkspaceHandleV1, bool),

View file

@ -1,15 +1,12 @@
use cctk::{
screencopy::{Formats, Rect},
wayland_client::{
Connection, Dispatch, QueueHandle,
protocol::{wl_buffer, wl_shm, wl_shm_pool},
},
use cctk::screencopy::{Formats, Rect};
use cctk::wayland_client::protocol::{wl_buffer, wl_shm, wl_shm_pool};
use cctk::wayland_client::{Connection, Dispatch, QueueHandle};
use cosmic::cctk;
use cosmic::iced::platform_specific::shell::subsurface_widget::{
BufferSource, Dmabuf, Plane, Shmbuf,
};
use cosmic::{
cctk,
iced::platform_specific::shell::subsurface_widget::{BufferSource, Dmabuf, Plane, Shmbuf},
};
use std::{os::fd::AsFd, sync::Arc};
use std::os::fd::AsFd;
use std::sync::Arc;
use wayland_protocols::wp::linux_dmabuf::zv1::client::zwp_linux_buffer_params_v1;
use super::AppData;

View file

@ -1,7 +1,5 @@
use cctk::{
screencopy::{CaptureSession, CaptureSource, ScreencopyState},
wayland_client::QueueHandle,
};
use cctk::screencopy::{CaptureSession, CaptureSource, ScreencopyState};
use cctk::wayland_client::QueueHandle;
use cosmic::cctk;
use std::sync::{Arc, Mutex};

View file

@ -1,16 +1,11 @@
use cctk::{
sctk::{
self,
dmabuf::{DmabufFeedback, DmabufHandler, DmabufState},
},
wayland_client::{Connection, QueueHandle, protocol::wl_buffer},
};
use cctk::sctk::dmabuf::{DmabufFeedback, DmabufHandler, DmabufState};
use cctk::sctk::{self};
use cctk::wayland_client::protocol::wl_buffer;
use cctk::wayland_client::{Connection, QueueHandle};
use cosmic::cctk;
use wayland_protocols::wp::linux_dmabuf::zv1::client::{
zwp_linux_buffer_params_v1::ZwpLinuxBufferParamsV1,
zwp_linux_dmabuf_feedback_v1::ZwpLinuxDmabufFeedbackV1,
};
use wayland_protocols::wp::linux_dmabuf::zv1::client::zwp_linux_buffer_params_v1::ZwpLinuxBufferParamsV1;
use wayland_protocols::wp::linux_dmabuf::zv1::client::zwp_linux_dmabuf_feedback_v1::ZwpLinuxDmabufFeedbackV1;
use super::AppData;

View file

@ -1,9 +1,7 @@
use std::{
collections::hash_map::{self, HashMap},
fs, io,
os::unix::fs::MetadataExt,
path::{Path, PathBuf},
};
use std::collections::hash_map::{self, HashMap};
use std::os::unix::fs::MetadataExt;
use std::path::{Path, PathBuf};
use std::{fs, io};
// TODO Purge gbm devices that are no longer needed/valid?
#[derive(Default)]

View file

@ -2,35 +2,29 @@
// subscription.
use calloop_wayland_source::WaylandSource;
use cctk::{
cosmic_protocols::workspace::v2::client::zcosmic_workspace_handle_v2,
screencopy::{CaptureSource, ScreencopyState},
sctk::{
self,
dmabuf::{DmabufFeedback, DmabufState},
registry::{ProvidesRegistryState, RegistryState},
seat::{SeatHandler, SeatState},
shm::{Shm, ShmHandler},
},
toplevel_info::ToplevelInfoState,
toplevel_management::ToplevelManagerState,
wayland_client::{
Connection, Proxy, QueueHandle, globals::registry_queue_init, protocol::wl_seat,
},
workspace::WorkspaceState,
};
use cosmic::{
cctk,
iced::{
self,
futures::{
FutureExt, SinkExt,
channel::mpsc,
executor::{ThreadPool, block_on},
},
},
};
use std::{cell::RefCell, collections::HashMap, hash::Hash, sync::Arc, thread};
use cctk::cosmic_protocols::workspace::v2::client::zcosmic_workspace_handle_v2;
use cctk::screencopy::{CaptureSource, ScreencopyState};
use cctk::sctk::dmabuf::{DmabufFeedback, DmabufState};
use cctk::sctk::registry::{ProvidesRegistryState, RegistryState};
use cctk::sctk::seat::{SeatHandler, SeatState};
use cctk::sctk::shm::{Shm, ShmHandler};
use cctk::sctk::{self};
use cctk::toplevel_info::ToplevelInfoState;
use cctk::toplevel_management::ToplevelManagerState;
use cctk::wayland_client::globals::registry_queue_init;
use cctk::wayland_client::protocol::wl_seat;
use cctk::wayland_client::{Connection, Proxy, QueueHandle};
use cctk::workspace::WorkspaceState;
use cosmic::cctk;
use cosmic::iced::futures::channel::mpsc;
use cosmic::iced::futures::executor::{ThreadPool, block_on};
use cosmic::iced::futures::{FutureExt, SinkExt};
use cosmic::iced::{self};
use std::cell::RefCell;
use std::collections::HashMap;
use std::hash::Hash;
use std::sync::Arc;
use std::thread;
mod buffer;
use buffer::Buffer;

View file

@ -1,21 +1,15 @@
use cosmic::{
cctk::{
self,
screencopy::{
CaptureFrame, CaptureOptions, CaptureSession, CaptureSource, FailureReason, Formats,
Frame, ScreencopyFrameData, ScreencopyFrameDataExt, ScreencopyHandler,
ScreencopySessionData, ScreencopySessionDataExt, ScreencopyState,
},
wayland_client::{Connection, QueueHandle, WEnum},
},
iced::platform_specific::shell::subsurface_widget::{
SubsurfaceBuffer, SubsurfaceBufferRelease,
},
use cosmic::cctk::screencopy::{
CaptureFrame, CaptureOptions, CaptureSession, CaptureSource, FailureReason, Formats, Frame,
ScreencopyFrameData, ScreencopyFrameDataExt, ScreencopyHandler, ScreencopySessionData,
ScreencopySessionDataExt, ScreencopyState,
};
use std::{
array,
sync::{Arc, Weak},
use cosmic::cctk::wayland_client::{Connection, QueueHandle, WEnum};
use cosmic::cctk::{self};
use cosmic::iced::platform_specific::shell::subsurface_widget::{
SubsurfaceBuffer, SubsurfaceBufferRelease,
};
use std::array;
use std::sync::{Arc, Weak};
use super::{AppData, Buffer, Capture, CaptureImage, Event};

View file

@ -1,9 +1,7 @@
use cctk::{
cosmic_protocols::toplevel_management::v1::client::zcosmic_toplevel_manager_v1,
toplevel_info::{ToplevelInfoHandler, ToplevelInfoState},
toplevel_management::{ToplevelManagerHandler, ToplevelManagerState},
wayland_client::{Connection, QueueHandle, WEnum},
};
use cctk::cosmic_protocols::toplevel_management::v1::client::zcosmic_toplevel_manager_v1;
use cctk::toplevel_info::{ToplevelInfoHandler, ToplevelInfoState};
use cctk::toplevel_management::{ToplevelManagerHandler, ToplevelManagerState};
use cctk::wayland_client::{Connection, QueueHandle, WEnum};
use cosmic::cctk;
use wayland_protocols::ext::foreign_toplevel_list::v1::client::ext_foreign_toplevel_handle_v1::ExtForeignToplevelHandleV1;

View file

@ -1,5 +1,7 @@
use ash::{prelude::VkResult, vk};
use std::{collections::HashMap, ffi::CStr};
use ash::prelude::VkResult;
use ash::vk;
use std::collections::HashMap;
use std::ffi::CStr;
pub struct Vulkan {
instance: ash::Instance,

View file

@ -1,5 +1,7 @@
use cosmic::iced::{self, futures::StreamExt};
use std::{any::TypeId, hash::Hash};
use cosmic::iced::futures::StreamExt;
use cosmic::iced::{self};
use std::any::TypeId;
use std::hash::Hash;
use tokio::sync::broadcast;
use tokio_stream::wrappers::BroadcastStream;

View file

@ -1,10 +1,10 @@
//! Types related to drag-and-drop
use cosmic::{
cctk::wayland_client::{Proxy, protocol::wl_output},
iced::clipboard::mime::AsMimeTypes,
};
use std::{borrow::Cow, sync::LazyLock};
use cosmic::cctk::wayland_client::Proxy;
use cosmic::cctk::wayland_client::protocol::wl_output;
use cosmic::iced::clipboard::mime::AsMimeTypes;
use std::borrow::Cow;
use std::sync::LazyLock;
use crate::backend::{ExtForeignToplevelHandleV1, ExtWorkspaceHandleV1};

View file

@ -1,10 +1,8 @@
// Copyright 2023 System76 <info@system76.com>
// SPDX-License-Identifier: GPL-3.0-only
use i18n_embed::{
DefaultLocalizer, LanguageLoader, Localizer,
fluent::{FluentLanguageLoader, fluent_language_loader},
};
use i18n_embed::fluent::{FluentLanguageLoader, fluent_language_loader};
use i18n_embed::{DefaultLocalizer, LanguageLoader, Localizer};
use rust_embed::RustEmbed;
use std::sync::LazyLock;

View file

@ -3,47 +3,38 @@
#![allow(clippy::single_match)]
use cctk::{
cosmic_protocols::{
toplevel_management::v1::client::zcosmic_toplevel_manager_v1,
workspace::v2::client::zcosmic_workspace_handle_v2,
},
sctk::shell::wlr_layer::{Anchor, KeyboardInteractivity, Layer},
wayland_client::{Connection, Proxy, protocol::wl_output},
wayland_protocols::ext::workspace::v1::client::ext_workspace_handle_v1,
};
use cctk::cosmic_protocols::toplevel_management::v1::client::zcosmic_toplevel_manager_v1;
use cctk::cosmic_protocols::workspace::v2::client::zcosmic_workspace_handle_v2;
use cctk::sctk::shell::wlr_layer::{Anchor, KeyboardInteractivity, Layer};
use cctk::wayland_client::protocol::wl_output;
use cctk::wayland_client::{Connection, Proxy};
use cctk::wayland_protocols::ext::workspace::v1::client::ext_workspace_handle_v1;
use clap::Parser;
use cosmic::{
app::{Application, CosmicFlags},
cctk, dbus_activation,
iced::platform_specific::shell::commands::layer_surface::{
destroy_layer_surface, get_layer_surface,
},
iced::runtime::platform_specific::wayland::layer_surface::{
IcedOutput, SctkLayerSurfaceSettings,
},
iced::window::Id as SurfaceId,
iced::{
self, Size, Subscription, Task,
clipboard::dnd::{DndEvent, SourceEvent},
event::wayland::{Event as WaylandEvent, LayerEvent, OutputEvent},
keyboard::key::{Key, Named},
mouse::ScrollDelta,
},
scroll::DiscreteScrollState,
use cosmic::app::{Application, CosmicFlags};
use cosmic::iced::clipboard::dnd::{DndEvent, SourceEvent};
use cosmic::iced::event::wayland::{Event as WaylandEvent, LayerEvent, OutputEvent};
use cosmic::iced::keyboard::key::{Key, Named};
use cosmic::iced::mouse::ScrollDelta;
use cosmic::iced::platform_specific::shell::commands::layer_surface::{
destroy_layer_surface, get_layer_surface,
};
use cosmic::iced::runtime::platform_specific::wayland::layer_surface::{
IcedOutput, SctkLayerSurfaceSettings,
};
use cosmic::iced::window::Id as SurfaceId;
use cosmic::iced::{self, Size, Subscription, Task};
use cosmic::scroll::DiscreteScrollState;
use cosmic::{cctk, dbus_activation};
use cosmic_comp_config::CosmicCompConfig;
use cosmic_config::{CosmicConfigEntry, cosmic_config_derive::CosmicConfigEntry};
use cosmic_config::CosmicConfigEntry;
use cosmic_config::cosmic_config_derive::CosmicConfigEntry;
use cosmic_panel_config::{CosmicPanelConfig, CosmicPanelContainerConfigEntry, PanelAnchor};
use i18n_embed::DesktopLanguageRequester;
use std::{
collections::{HashMap, HashSet},
mem,
path::PathBuf,
process::Command,
str,
time::Duration,
};
use std::collections::{HashMap, HashSet};
use std::path::PathBuf;
use std::process::Command;
use std::time::Duration;
use std::{mem, str};
mod dbus;
mod desktop_info;

View file

@ -1,8 +1,7 @@
use rustix::{io::Errno, shm};
use std::{
os::fd::OwnedFd,
time::{SystemTime, UNIX_EPOCH},
};
use rustix::io::Errno;
use rustix::shm;
use std::os::fd::OwnedFd;
use std::time::{SystemTime, UNIX_EPOCH};
#[cfg(target_os = "linux")]
fn create_memfd() -> rustix::io::Result<OwnedFd> {

View file

@ -1,34 +1,22 @@
use cosmic::{
Apply,
cctk::{
cosmic_protocols::{
toplevel_info::v1::client::zcosmic_toplevel_handle_v1,
workspace::v2::client::zcosmic_workspace_handle_v2,
},
wayland_client::protocol::wl_output,
wayland_protocols::ext::workspace::v1::client::ext_workspace_handle_v1,
},
iced::core::{
Shadow,
text::{Ellipsize, EllipsizeHeightLimit},
},
iced::{
self, Alignment, Border, Length,
advanced::layout::flex::Axis,
clipboard::mime::{AllowedMimeTypes, AsMimeTypes},
platform_specific::shell::subsurface_widget::Subsurface,
widget::{column, row},
},
widget::{self, Widget},
};
use cosmic::Apply;
use cosmic::cctk::cosmic_protocols::toplevel_info::v1::client::zcosmic_toplevel_handle_v1;
use cosmic::cctk::cosmic_protocols::workspace::v2::client::zcosmic_workspace_handle_v2;
use cosmic::cctk::wayland_client::protocol::wl_output;
use cosmic::cctk::wayland_protocols::ext::workspace::v1::client::ext_workspace_handle_v1;
use cosmic::iced::advanced::layout::flex::Axis;
use cosmic::iced::clipboard::mime::{AllowedMimeTypes, AsMimeTypes};
use cosmic::iced::core::Shadow;
use cosmic::iced::core::text::{Ellipsize, EllipsizeHeightLimit};
use cosmic::iced::platform_specific::shell::subsurface_widget::Subsurface;
use cosmic::iced::widget::{column, row};
use cosmic::iced::{self, Alignment, Border, Length};
use cosmic::widget::{self, Widget};
use cosmic_comp_config::workspace::WorkspaceLayout;
use std::collections::HashSet;
use crate::{
App, LayerSurface, Msg, Toplevel, Workspace,
backend::{self, CaptureImage},
dnd::{Drag, DragSurface, DragToplevel, DragWorkspace, DropTarget},
};
use crate::backend::{self, CaptureImage};
use crate::dnd::{Drag, DragSurface, DragToplevel, DragWorkspace, DropTarget};
use crate::{App, LayerSurface, Msg, Toplevel, Workspace};
fn dnd_source_with_drag_surface<D: AsMimeTypes + Send + Clone + 'static>(
drag_content: D,

View file

@ -1,19 +1,15 @@
// Renders image behind widget, and otherwise passes through all behavior
use cosmic::iced::{
Length, Rectangle, Size, Vector,
advanced::{
Clipboard, Layout, Shell, Widget,
layout::{self},
mouse, overlay, renderer,
widget::{Operation, Tree, tree},
},
core::Renderer,
event::Event,
};
use cosmic::iced::advanced::layout::{self};
use cosmic::iced::advanced::widget::{Operation, Tree, tree};
use cosmic::iced::advanced::{Clipboard, Layout, Shell, Widget, mouse, overlay, renderer};
use cosmic::iced::core::Renderer;
use cosmic::iced::event::Event;
use cosmic::iced::{Length, Rectangle, Size, Vector};
use std::marker::PhantomData;
#[allow(dead_code)]
pub fn image_bg<'a, Msg, T1: Into<cosmic::Element<'a, Msg>>, T2: Into<cosmic::Element<'a, Msg>>>(
content: T1,
bg: T2,

View file

@ -1,13 +1,9 @@
//! Show one surface, sized to match the size of another (invisible) widget
use cosmic::iced::{
Length, Rectangle, Size,
advanced::{
Clipboard, Layout, Shell, Widget, layout, mouse, renderer,
widget::{Operation, Tree},
},
event::{self, Event},
};
use cosmic::iced::advanced::widget::{Operation, Tree};
use cosmic::iced::advanced::{Clipboard, Layout, Shell, Widget, layout, mouse, renderer};
use cosmic::iced::event::Event;
use cosmic::iced::{Length, Rectangle, Size};
use std::marker::PhantomData;
pub fn match_size<

View file

@ -1,11 +1,7 @@
use cosmic::iced::{
Length, Rectangle, Size, Vector,
advanced::{
Clipboard, Layout, Shell, Widget, layout, mouse, overlay, renderer,
widget::{Id, Operation, Tree, tree},
},
event::{self, Event},
};
use cosmic::iced::advanced::widget::{Id, Operation, Tree, tree};
use cosmic::iced::advanced::{Clipboard, Layout, Shell, Widget, layout, mouse, overlay, renderer};
use cosmic::iced::event::Event;
use cosmic::iced::{Length, Rectangle, Size, Vector};
use std::marker::PhantomData;
mod image_bg;

View file

@ -1,14 +1,11 @@
use cosmic::iced::{
Length, Rectangle, Size, Vector,
advanced::{
Clipboard, Layout, Shell, Widget, layout, mouse, overlay, renderer,
widget::{Id, Operation, Tree, tree},
},
event::{self, Event},
};
use cosmic::iced::advanced::widget::{Id, Operation, Tree, tree};
use cosmic::iced::advanced::{Clipboard, Layout, Shell, Widget, layout, mouse, overlay, renderer};
use cosmic::iced::event::Event;
use cosmic::iced::{Length, Rectangle, Size, Vector};
use std::marker::PhantomData;
#[allow(dead_code)]
pub fn mouse_interaction_wrapper<'a, Msg, T: Into<cosmic::Element<'a, Msg>>>(
mouse_interaction: mouse::Interaction,
content: T,

View file

@ -1,15 +1,11 @@
// This widget defines it's cross axis size as the `index`th child's size
use cosmic::iced::{
Length, Point, Rectangle, Size,
advanced::{
Clipboard, Layout, Shell, Widget,
layout::{self, flex::Axis},
mouse, renderer,
widget::{Operation, Tree},
},
event::{self, Event},
};
use cosmic::iced::advanced::layout::flex::Axis;
use cosmic::iced::advanced::layout::{self, Limits};
use cosmic::iced::advanced::widget::{Operation, Tree};
use cosmic::iced::advanced::{Clipboard, Layout, Shell, Widget, mouse, renderer};
use cosmic::iced::event::Event;
use cosmic::iced::{Length, Point, Rectangle, Size};
use std::marker::PhantomData;
// Duplicate of private methods
@ -78,25 +74,38 @@ impl<Msg> Widget<Msg, cosmic::Theme, cosmic::Renderer> for SizeCrossNth<'_, Msg>
&mut self,
tree: &mut Tree,
renderer: &cosmic::Renderer,
limits: &layout::Limits,
limits: &Limits,
) -> layout::Node {
let max_main = self.axis.main(limits.max());
let max_cross = self.axis.cross(limits.max());
// XXX cleaner solution
// Get layout of main widget, to set overall cross axis size
let (max_width, max_height) = self.axis.pack(max_main, max_cross);
let child_limits = layout::Limits::new(Size::ZERO, Size::new(max_width, max_height));
// Lay out all non-reference children to get their total main size
let mut total_main = 0.0;
for (i, (child, tree)) in self
.children
.iter_mut()
.zip(tree.children.iter_mut())
.enumerate()
{
if i != self.index {
let (max_width, max_height) = self.axis.pack(max_main - total_main, max_cross);
let child_limits = Limits::new(Size::ZERO, Size::new(max_width, max_height));
let layout = child.as_widget_mut().layout(tree, renderer, &child_limits);
total_main += self.axis.main(layout.size());
}
}
// Lay out reference child with remaining main to get max cross size
let (max_width, max_height) = self.axis.pack(max_main - total_main, max_cross);
let child_limits = Limits::new(Size::ZERO, Size::new(max_width, max_height));
let layout = self.children[self.index].as_widget_mut().layout(
&mut tree.children[self.index],
renderer,
&child_limits,
);
let max_cross = self.axis.cross(layout.size());
// XXX sill allocating maximum main axis?
// - what was it doing before?
// Lay out all children constrained to reference cross
let mut total_main = 0.0;
let nodes = self
.children
@ -104,8 +113,7 @@ impl<Msg> Widget<Msg, cosmic::Theme, cosmic::Renderer> for SizeCrossNth<'_, Msg>
.zip(tree.children.iter_mut())
.map(|(child, tree)| {
let (max_width, max_height) = self.axis.pack(max_main - total_main, max_cross);
let child_limits =
layout::Limits::new(Size::ZERO, Size::new(max_width, max_height));
let child_limits = Limits::new(Size::ZERO, Size::new(max_width, max_height));
let mut layout = child.as_widget_mut().layout(tree, renderer, &child_limits);
// Center on cross axis
let cross = ((max_cross - self.axis.cross(layout.size())) / 2.).max(0.);

View file

@ -1,13 +1,9 @@
use cosmic::iced::{
Length, Rectangle, Size, Vector,
advanced::{
Clipboard, Layout, Shell, Widget,
layout::{self, flex::Axis},
mouse, renderer,
widget::{Operation, Tree},
},
event::{self, Event},
};
use cosmic::iced::advanced::layout::flex::Axis;
use cosmic::iced::advanced::layout::{self};
use cosmic::iced::advanced::widget::{Operation, Tree};
use cosmic::iced::advanced::{Clipboard, Layout, Shell, Widget, mouse, renderer};
use cosmic::iced::event::Event;
use cosmic::iced::{Length, Rectangle, Size, Vector};
use std::marker::PhantomData;
mod toplevel_layout;

View file

@ -1,5 +1,6 @@
use aliasable::vec::AliasableVec;
use cosmic::iced::{Length, Point, Rectangle, Size, advanced::layout::flex::Axis};
use cosmic::iced::advanced::layout::flex::Axis;
use cosmic::iced::{Length, Point, Rectangle, Size};
use std::marker::PhantomData;
use super::{LayoutToplevel, ToplevelLayout};

View file

@ -1,9 +1,8 @@
use cosmic::iced::{Length, advanced::layout::flex::Axis};
use cosmic::iced::Length;
use cosmic::iced::advanced::layout::flex::Axis;
use super::{
LayoutToplevel,
axis_toplevel_layout::{AxisPoint, AxisRectangle, AxisSize, AxisToplevelLayout},
};
use super::LayoutToplevel;
use super::axis_toplevel_layout::{AxisPoint, AxisRectangle, AxisSize, AxisToplevelLayout};
pub(crate) struct RowColToplevelLayout {
pub axis: Axis,

View file

@ -1,10 +1,9 @@
use cosmic::iced::{Length, advanced::layout::flex::Axis};
use cosmic::iced::Length;
use cosmic::iced::advanced::layout::flex::Axis;
use super::{
LayoutToplevel,
axis_toplevel_layout::{AxisRectangle, AxisSize, AxisToplevelLayout},
row_col_toplevel_layout::RowColToplevelLayout,
};
use super::LayoutToplevel;
use super::axis_toplevel_layout::{AxisRectangle, AxisSize, AxisToplevelLayout};
use super::row_col_toplevel_layout::RowColToplevelLayout;
pub(crate) struct TwoRowColToplevelLayout(RowColToplevelLayout);

View file

@ -1,14 +1,10 @@
//! If `visible` is set to `true`, behaves exactly as wrapped widget. If `false`,
//! takes the same space but does not draw.
use cosmic::iced::{
Length, Rectangle, Size,
advanced::{
Clipboard, Layout, Shell, Widget, layout, mouse, renderer,
widget::{Operation, Tree},
},
event::{self, Event},
};
use cosmic::iced::advanced::widget::{Operation, Tree};
use cosmic::iced::advanced::{Clipboard, Layout, Shell, Widget, layout, mouse, renderer};
use cosmic::iced::event::Event;
use cosmic::iced::{Length, Rectangle, Size};
use std::marker::PhantomData;
pub fn visibility_wrapper<'a, Msg, T: Into<cosmic::Element<'a, Msg>>>(

View file

@ -1,17 +1,13 @@
// Custom varian of row/column
// Gives each child widget a maximum size on main axis of total/n
use cosmic::iced::{
Length, Point, Rectangle, Size,
advanced::{
Clipboard, Layout, Shell, Widget,
layout::{self, flex::Axis},
mouse, renderer,
widget::{Operation, Tree},
},
core::clipboard::DndDestinationRectangles,
event::{self, Event},
};
use cosmic::iced::advanced::layout::flex::Axis;
use cosmic::iced::advanced::layout::{self};
use cosmic::iced::advanced::widget::{Operation, Tree};
use cosmic::iced::advanced::{Clipboard, Layout, Shell, Widget, mouse, renderer};
use cosmic::iced::core::clipboard::DndDestinationRectangles;
use cosmic::iced::event::Event;
use cosmic::iced::{Length, Point, Rectangle, Size};
use std::marker::PhantomData;
// Duplicate of private methods