logiguard fork: GPUI xdg-activation keyboard-focus serial fix
Some checks failed
Update All Top Ranking Issues / update_top_ranking_issues (push) Has been cancelled
Triage Project Sync (#84) / Sync triage project (push) Has been cancelled
release_nightly / notify_on_failure (push) Has been cancelled
release_nightly / check_style (push) Has been cancelled
release_nightly / run_tests_windows (push) Has been cancelled
release_nightly / clippy_windows (push) Has been cancelled
release_nightly / bundle_linux_aarch64 (push) Has been cancelled
release_nightly / bundle_linux_x86_64 (push) Has been cancelled
release_nightly / bundle_mac_aarch64 (push) Has been cancelled
release_nightly / bundle_mac_x86_64 (push) Has been cancelled
release_nightly / bundle_windows_aarch64 (push) Has been cancelled
release_nightly / bundle_windows_x86_64 (push) Has been cancelled
release_nightly / build_nix_linux_x86_64 (push) Has been cancelled
release_nightly / build_nix_mac_aarch64 (push) Has been cancelled
release_nightly / update_nightly_tag (push) Has been cancelled
Hotfix Review Monitor / check-hotfix-reviews (push) Has been cancelled
Stale PR Review Reminder / check-stale-prs (push) Has been cancelled
Update Weekly Top Ranking Issues / update_top_ranking_issues (push) Has been cancelled
Bump collab-staging Tag / update-collab-staging-tag (push) Has been cancelled
compliance_check / scheduled_compliance_check (push) Has been cancelled
Some checks failed
Update All Top Ranking Issues / update_top_ranking_issues (push) Has been cancelled
Triage Project Sync (#84) / Sync triage project (push) Has been cancelled
release_nightly / notify_on_failure (push) Has been cancelled
release_nightly / check_style (push) Has been cancelled
release_nightly / run_tests_windows (push) Has been cancelled
release_nightly / clippy_windows (push) Has been cancelled
release_nightly / bundle_linux_aarch64 (push) Has been cancelled
release_nightly / bundle_linux_x86_64 (push) Has been cancelled
release_nightly / bundle_mac_aarch64 (push) Has been cancelled
release_nightly / bundle_mac_x86_64 (push) Has been cancelled
release_nightly / bundle_windows_aarch64 (push) Has been cancelled
release_nightly / bundle_windows_x86_64 (push) Has been cancelled
release_nightly / build_nix_linux_x86_64 (push) Has been cancelled
release_nightly / build_nix_mac_aarch64 (push) Has been cancelled
release_nightly / update_nightly_tag (push) Has been cancelled
Hotfix Review Monitor / check-hotfix-reviews (push) Has been cancelled
Stale PR Review Reminder / check-stale-prs (push) Has been cancelled
Update Weekly Top Ranking Issues / update_top_ranking_issues (push) Has been cancelled
Bump collab-staging Tag / update-collab-staging-tag (push) Has been cancelled
compliance_check / scheduled_compliance_check (push) Has been cancelled
Single-commit orphan branch: full zed-industries/zed @ 8c74db0 source tree with a 3-file patch applied (no upstream history). Patch (crates/gpui_linux/src/linux/wayland/): - serial.rs: add SerialKind::KeyboardEnter - client.rs: store wl_keyboard.enter serial; add latest_serial_of() - window.rs: activate() uses keyboard-enter serial (Mutter focus gate) Mutter honors window activation only when the token carries the keyboard- focus serial from wl_keyboard.enter; GPUI used a stale mouse-press serial. See docs/tray-window-focus-wayland.md in logiguard. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
23
crates/language_onboarding/Cargo.toml
Normal file
23
crates/language_onboarding/Cargo.toml
Normal file
@@ -0,0 +1,23 @@
|
||||
[package]
|
||||
name = "language_onboarding"
|
||||
version = "0.1.0"
|
||||
edition.workspace = true
|
||||
publish.workspace = true
|
||||
license = "GPL-3.0-or-later"
|
||||
|
||||
[lints]
|
||||
workspace = true
|
||||
|
||||
[lib]
|
||||
path = "src/python.rs"
|
||||
|
||||
[features]
|
||||
default = []
|
||||
|
||||
[dependencies]
|
||||
db.workspace = true
|
||||
editor.workspace = true
|
||||
gpui.workspace = true
|
||||
project.workspace = true
|
||||
ui.workspace = true
|
||||
workspace.workspace = true
|
||||
1
crates/language_onboarding/LICENSE-GPL
Symbolic link
1
crates/language_onboarding/LICENSE-GPL
Symbolic link
@@ -0,0 +1 @@
|
||||
../../LICENSE-GPL
|
||||
100
crates/language_onboarding/src/python.rs
Normal file
100
crates/language_onboarding/src/python.rs
Normal file
@@ -0,0 +1,100 @@
|
||||
use db::kvp::Dismissable;
|
||||
use editor::Editor;
|
||||
use gpui::{Context, EventEmitter, Subscription};
|
||||
use ui::{Banner, FluentBuilder as _, prelude::*};
|
||||
use workspace::{ToolbarItemEvent, ToolbarItemLocation, ToolbarItemView, Workspace};
|
||||
|
||||
pub struct BasedPyrightBanner {
|
||||
dismissed: bool,
|
||||
have_basedpyright: bool,
|
||||
_subscriptions: [Subscription; 1],
|
||||
}
|
||||
|
||||
impl Dismissable for BasedPyrightBanner {
|
||||
const KEY: &str = "basedpyright-banner";
|
||||
}
|
||||
|
||||
impl BasedPyrightBanner {
|
||||
pub fn new(workspace: &Workspace, cx: &mut Context<Self>) -> Self {
|
||||
let subscription = cx.subscribe(workspace.project(), |this, _, event, _| {
|
||||
if let project::Event::LanguageServerAdded(_, name, _) = event
|
||||
&& name == "basedpyright"
|
||||
{
|
||||
this.have_basedpyright = true;
|
||||
}
|
||||
});
|
||||
let dismissed = Self::dismissed(cx);
|
||||
Self {
|
||||
dismissed,
|
||||
have_basedpyright: false,
|
||||
_subscriptions: [subscription],
|
||||
}
|
||||
}
|
||||
|
||||
fn onboarding_banner_enabled(&self) -> bool {
|
||||
!self.dismissed && self.have_basedpyright
|
||||
}
|
||||
}
|
||||
|
||||
impl EventEmitter<ToolbarItemEvent> for BasedPyrightBanner {}
|
||||
|
||||
impl Render for BasedPyrightBanner {
|
||||
fn render(&mut self, _window: &mut Window, cx: &mut Context<Self>) -> impl IntoElement {
|
||||
div()
|
||||
.id("basedpyright-banner")
|
||||
.when(self.onboarding_banner_enabled(), |el| {
|
||||
el.child(
|
||||
Banner::new()
|
||||
.child(
|
||||
v_flex()
|
||||
.gap_0p5()
|
||||
.child(Label::new("Basedpyright is now the only default language server for Python").mt_0p5())
|
||||
.child(Label::new("We have disabled PyRight and pylsp by default. They can be re-enabled in your settings.").size(LabelSize::Small).color(Color::Muted))
|
||||
)
|
||||
.action_slot(
|
||||
h_flex()
|
||||
.gap_0p5()
|
||||
.child(
|
||||
Button::new("learn-more", "Learn More")
|
||||
.label_size(LabelSize::Small)
|
||||
.end_icon(Icon::new(IconName::ArrowUpRight).size(IconSize::XSmall).color(Color::Muted))
|
||||
.on_click(|_, _, cx| {
|
||||
cx.open_url("https://zed.dev/docs/languages/python")
|
||||
}),
|
||||
)
|
||||
.child(IconButton::new("dismiss", IconName::Close).icon_size(IconSize::Small).on_click(
|
||||
cx.listener(|this, _, _, cx| {
|
||||
this.dismissed = true;
|
||||
Self::set_dismissed(true, cx);
|
||||
cx.notify();
|
||||
}),
|
||||
))
|
||||
)
|
||||
.into_any_element(),
|
||||
)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
impl ToolbarItemView for BasedPyrightBanner {
|
||||
fn set_active_pane_item(
|
||||
&mut self,
|
||||
active_pane_item: Option<&dyn workspace::ItemHandle>,
|
||||
_window: &mut ui::Window,
|
||||
cx: &mut Context<Self>,
|
||||
) -> ToolbarItemLocation {
|
||||
if !self.onboarding_banner_enabled() {
|
||||
return ToolbarItemLocation::Hidden;
|
||||
}
|
||||
if let Some(item) = active_pane_item
|
||||
&& let Some(editor) = item.act_as::<Editor>(cx)
|
||||
&& let Some(path) = editor.update(cx, |editor, cx| editor.target_file_abs_path(cx))
|
||||
&& let Some(file_name) = path.file_name()
|
||||
&& file_name.as_encoded_bytes().ends_with(".py".as_bytes())
|
||||
{
|
||||
return ToolbarItemLocation::Secondary;
|
||||
}
|
||||
|
||||
ToolbarItemLocation::Hidden
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user