Skip to content

Commit 3e1de24

Browse files
committed
chore: use builtin context menu
1 parent 1fd5684 commit 3e1de24

File tree

3 files changed

+17
-42
lines changed

3 files changed

+17
-42
lines changed

crates/egui-term/src/display/mod.rs

Lines changed: 16 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ use alacritty_terminal::vte::ansi::{Color, NamedColor};
1111
use copypasta::ClipboardProvider;
1212
use egui::epaint::RectShape;
1313
use egui::{
14-
Align2, Area, Button, Color32, CornerRadius, CursorIcon, Id, Key, KeyboardShortcut, Modifiers,
15-
Painter, Pos2, Rect, Response, Vec2, WidgetText,
14+
Align2, Button, CornerRadius, CursorIcon, Key, KeyboardShortcut, Modifiers, Painter, Pos2,
15+
Rect, Response, Vec2, WidgetText,
1616
};
1717
use egui::{Shape, Stroke};
1818

@@ -148,24 +148,19 @@ impl TerminalView<'_> {
148148
}
149149

150150
impl TerminalView<'_> {
151-
pub fn context_menu(&mut self, pos: Pos2, layout: &Response, ui: &mut egui::Ui) {
152-
Area::new(Id::new(format!("context_menu_{:?}", self.id())))
153-
.fixed_pos(pos)
154-
.order(egui::Order::Foreground)
155-
.show(ui.ctx(), |ui| {
156-
egui::Frame::popup(ui.style()).show(ui, |ui| {
157-
let width = 200.;
158-
ui.set_width(width);
159-
// copy btn
160-
self.copy_btn(ui, layout, width);
161-
// paste btn
162-
self.paste_btn(ui, width);
163-
164-
ui.separator();
165-
// select all btn
166-
self.select_all_btn(ui, width);
167-
});
168-
});
151+
pub fn context_menu(&mut self, layout: &Response) {
152+
layout.context_menu(|ui| {
153+
let width = 200.;
154+
ui.set_width(width);
155+
// copy btn
156+
self.copy_btn(ui, layout, width);
157+
// paste btn
158+
self.paste_btn(ui, width);
159+
160+
ui.separator();
161+
// select all btn
162+
self.select_all_btn(ui, width);
163+
});
169164
}
170165

171166
fn copy_btn(&mut self, ui: &mut egui::Ui, layout: &Response, btn_width: f32) {
@@ -217,9 +212,7 @@ fn context_btn<'a>(
217212
width: f32,
218213
shortcut: Option<String>,
219214
) -> Button<'a> {
220-
let mut btn = Button::new(text)
221-
.fill(Color32::TRANSPARENT)
222-
.min_size((width, 0.).into());
215+
let mut btn = Button::new(text).min_size((width, 0.).into());
223216
if let Some(shortcut) = shortcut {
224217
btn = btn.shortcut_text(shortcut);
225218
}

crates/egui-term/src/input/mod.rs

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -133,10 +133,6 @@ impl TerminalView<'_> {
133133
PointerButton::Primary => {
134134
self.left_button_click(state, layout, position, modifiers, pressed)
135135
}
136-
PointerButton::Secondary => {
137-
state.context_menu_position = Some(position);
138-
None
139-
}
140136
_ => None,
141137
}
142138
}
@@ -149,9 +145,6 @@ impl TerminalView<'_> {
149145
modifiers: &Modifiers,
150146
pressed: bool,
151147
) -> Option<InputAction> {
152-
if state.context_menu_position.is_some() {
153-
return None;
154-
}
155148
let terminal_mode = self.term_ctx.terminal.mode();
156149
if terminal_mode.intersects(TermMode::MOUSE_MODE) {
157150
Some(InputAction::BackendCall(BackendCommand::MouseReport(

crates/egui-term/src/view.rs

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ pub struct TerminalViewState {
2323
// for terminal
2424
pub mouse_point: Point,
2525
pub mouse_position: Option<Pos2>,
26-
pub context_menu_position: Option<Pos2>,
2726
pub cursor_position: Option<Pos2>,
2827
pub scrollbar_state: ScrollbarState,
2928
}
@@ -79,17 +78,7 @@ impl Widget for TerminalView<'_> {
7978
self.has_focus = false;
8079
}
8180

82-
// context menu
83-
if let Some(pos) = state.context_menu_position {
84-
if is_in_terminal(pos, layout.rect) {
85-
self.context_menu(pos, &layout, ui);
86-
}
87-
}
88-
89-
if ui.input(|input_state| input_state.pointer.primary_clicked()) {
90-
state.context_menu_position = None;
91-
ui.close();
92-
}
81+
self.context_menu(&layout);
9382

9483
let background = self.theme().get_color(Color::Named(NamedColor::Background));
9584

0 commit comments

Comments
 (0)