Skip to content

Commit 2dec12e

Browse files
cleanup
1 parent 0f31f81 commit 2dec12e

4 files changed

Lines changed: 39 additions & 42 deletions

File tree

desktop/wrapper/src/handle_desktop_wrapper_message.rs

Lines changed: 5 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
use graphene_std::Color;
22
use graphene_std::raster::Image;
33
use graphite_editor::messages::app_window::app_window_message_handler::AppWindowPlatform;
4-
use graphite_editor::messages::layout::LayoutMessage;
54
use graphite_editor::messages::prelude::*;
6-
use graphite_editor::messages::tool::tool_messages::tool_prelude::{LayoutTarget, WidgetId};
75

86
use crate::messages::Platform;
7+
use crate::utils::menu::parse_item_path;
98

109
use super::DesktopWrapperMessageDispatcher;
1110
use super::messages::{DesktopFrontendMessage, DesktopWrapperMessage, EditorMessage, OpenFileDialogContext, SaveFileDialogContext};
@@ -151,28 +150,11 @@ pub(super) fn handle_desktop_wrapper_message(dispatcher: &mut DesktopWrapperMess
151150
dispatcher.queue_editor_message(message);
152151
}
153152
DesktopWrapperMessage::MenuEvent { id } => {
154-
let mut id_parts = id.split(':');
155-
let Some(widget_id) = id_parts.next() else {
153+
if let Some(message) = parse_item_path(id) {
154+
dispatcher.queue_editor_message(message);
155+
} else {
156156
tracing::error!("Received a malformed MenuEvent id");
157-
return;
158-
};
159-
let widget_id = widget_id.parse::<u64>().unwrap();
160-
161-
let value = id_parts
162-
.map(|part| {
163-
use base64::prelude::*;
164-
let bytes = base64::engine::general_purpose::STANDARD.decode(part).unwrap();
165-
String::from_utf8(bytes).unwrap()
166-
})
167-
.collect::<Vec<_>>();
168-
let value = serde_json::to_value(value).unwrap();
169-
170-
let message = LayoutMessage::WidgetValueUpdate {
171-
layout_target: LayoutTarget::MenuBar,
172-
widget_id: WidgetId(widget_id),
173-
value,
174-
};
175-
dispatcher.queue_editor_message(message);
157+
}
176158
}
177159
}
178160
}

desktop/wrapper/src/intercept_frontend_message.rs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -123,13 +123,10 @@ pub(super) fn intercept_frontend_message(dispatcher: &mut DesktopWrapperMessageD
123123
new_value: DiffUpdate::SubLayout(layout),
124124
},
125125
] if widget_path.is_empty() => {
126-
let entries = crate::utils::menu::convert_menu_bar_entries_to_menu_items(layout);
126+
let entries = crate::utils::menu::convert_menu_bar_layout_to_menu_items(layout);
127127
dispatcher.respond(DesktopFrontendMessage::UpdateMenu { entries });
128128
}
129-
u => {
130-
dbg!(u);
131-
tracing::error!("received invalid MeneBar update")
132-
}
129+
_ => {}
133130
}
134131
}
135132
FrontendMessage::WindowClose => {

desktop/wrapper/src/utils.rs

Lines changed: 31 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,31 @@
11
#[cfg(target_os = "macos")]
22
pub(crate) mod menu {
3+
use base64::engine::Engine;
4+
use base64::engine::general_purpose::STANDARD as BASE64;
5+
36
use graphite_editor::messages::input_mapper::utility_types::input_keyboard::{Key, LayoutKey, LayoutKeysGroup};
47
use graphite_editor::messages::input_mapper::utility_types::misc::ActionKeys;
5-
use graphite_editor::messages::tool::tool_messages::tool_prelude::{LayoutGroup, MenuListEntry, SubLayout, Widget};
8+
use graphite_editor::messages::layout::LayoutMessage;
9+
use graphite_editor::messages::tool::tool_messages::tool_prelude::{LayoutGroup, LayoutTarget, MenuListEntry, SubLayout, Widget, WidgetId};
610

7-
use crate::messages::{KeyCode, MenuItem, Modifiers, Shortcut};
11+
use crate::messages::{EditorMessage, KeyCode, MenuItem, Modifiers, Shortcut};
812

9-
pub(crate) fn convert_menu_bar_entries_to_menu_items(layout: &SubLayout) -> Vec<MenuItem> {
13+
pub(crate) fn convert_menu_bar_layout_to_menu_items(layout: &SubLayout) -> Vec<MenuItem> {
1014
let layout_group = match layout.as_slice() {
1115
[layout_group] => layout_group,
1216
_ => panic!("Menu bar layout is supposed to have exactly one layout group"),
1317
};
1418
let LayoutGroup::Row { widgets } = layout_group else {
1519
panic!("Menu bar layout group is supposed to be a row");
1620
};
17-
println!("");
1821
widgets
1922
.into_iter()
2023
.map(|widget| {
2124
let text_button = match &widget.widget {
2225
Widget::TextButton(text_button) => text_button,
2326
_ => panic!("Menu bar layout top-level widgets are supposed to be text buttons"),
2427
};
25-
28+
2629
MenuItem::SubMenu {
2730
id: widget.widget_id.to_string(),
2831
text: text_button.label.clone(),
@@ -33,15 +36,30 @@ pub(crate) mod menu {
3336
.collect::<Vec<MenuItem>>()
3437
}
3538

36-
fn item_path_to_string(widget_id: u64, path: Vec<String>) -> String {
37-
let path = path
38-
.into_iter()
39-
.map(|element| {
40-
use base64::prelude::*;
41-
base64::engine::general_purpose::STANDARD.encode(element)
39+
pub(crate) fn parse_item_path(id: String) -> Option<EditorMessage> {
40+
let mut id_parts = id.split(':');
41+
let widget_id = id_parts.next()?.parse::<u64>().ok()?;
42+
43+
let value = id_parts
44+
.map(|part| {
45+
let bytes = BASE64.decode(part).ok()?;
46+
String::from_utf8(bytes).ok()
4247
})
43-
.collect::<Vec<_>>()
44-
.join(":");
48+
.collect::<Option<Vec<String>>>()?;
49+
let value = serde_json::to_value(value).ok()?;
50+
51+
Some(
52+
LayoutMessage::WidgetValueUpdate {
53+
layout_target: LayoutTarget::MenuBar,
54+
widget_id: WidgetId(widget_id),
55+
value,
56+
}
57+
.into(),
58+
)
59+
}
60+
61+
fn item_path_to_string(widget_id: u64, path: Vec<String>) -> String {
62+
let path = path.into_iter().map(|element| BASE64.encode(element)).collect::<Vec<_>>().join(":");
4563
format!("{widget_id}:{path}")
4664
}
4765

editor/src/messages/layout/layout_message_handler.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -484,7 +484,7 @@ impl LayoutMessageHandler {
484484
widget_diffs = vec![WidgetDiff {
485485
widget_path: Vec::new(),
486486
new_value: DiffUpdate::SubLayout(current.layout.clone()),
487-
}]
487+
}];
488488
}
489489

490490
self.send_diff(widget_diffs, layout_target, responses, action_input_mapping);

0 commit comments

Comments
 (0)