Skip to content

Commit 46d5928

Browse files
Desktop: Fix window maximize and minimize (#3200)
Fix window maximize and minimize state
1 parent f4a0f27 commit 46d5928

File tree

9 files changed

+44
-40
lines changed

9 files changed

+44
-40
lines changed

desktop/src/app.rs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -166,10 +166,15 @@ impl App {
166166
graphics_state.set_overlays_scene(scene);
167167
}
168168
}
169-
DesktopFrontendMessage::UpdateWindowState { maximized, minimized } => {
169+
DesktopFrontendMessage::MinimizeWindow => {
170170
if let Some(window) = &self.window {
171+
window.set_minimized(true);
172+
}
173+
}
174+
DesktopFrontendMessage::MaximizeWindow => {
175+
if let Some(window) = &self.window {
176+
let maximized = !window.is_maximized();
171177
window.set_maximized(maximized);
172-
window.set_minimized(minimized);
173178
}
174179
}
175180
DesktopFrontendMessage::DragWindow => {
@@ -352,6 +357,10 @@ impl ApplicationHandler for App {
352357
WindowEvent::SurfaceResized(size) => {
353358
let _ = self.cef_window_size_sender.send(size.into());
354359
self.cef_context.notify_of_resize();
360+
if let Some(window) = &self.window {
361+
let maximized = window.is_maximized();
362+
self.app_event_scheduler.schedule(AppEvent::DesktopWrapperMessage(DesktopWrapperMessage::UpdateMaximized { maximized }));
363+
}
355364
}
356365
WindowEvent::RedrawRequested => {
357366
let Some(ref mut graphics_state) = self.graphics_state else { return };

desktop/wrapper/src/handle_desktop_wrapper_message.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
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::prelude::{AppWindowMessage, DocumentMessage, PortfolioMessage, PreferencesMessage};
4+
use graphite_editor::messages::prelude::{AppWindowMessage, DocumentMessage, FrontendMessage, PortfolioMessage, PreferencesMessage};
55

66
use crate::messages::Platform;
77

@@ -118,6 +118,10 @@ pub(super) fn handle_desktop_wrapper_message(dispatcher: &mut DesktopWrapperMess
118118
let message = AppWindowMessage::AppWindowUpdatePlatform { platform };
119119
dispatcher.queue_editor_message(message.into());
120120
}
121+
DesktopWrapperMessage::UpdateMaximized { maximized } => {
122+
let message = FrontendMessage::UpdateMaximized { maximized };
123+
dispatcher.queue_editor_message(message.into());
124+
}
121125
DesktopWrapperMessage::LoadDocument {
122126
id,
123127
document,

desktop/wrapper/src/intercept_frontend_message.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -64,18 +64,18 @@ pub(super) fn intercept_frontend_message(dispatcher: &mut DesktopWrapperMessageD
6464
FrontendMessage::TriggerVisitLink { url } => {
6565
dispatcher.respond(DesktopFrontendMessage::OpenUrl(url));
6666
}
67-
FrontendMessage::UpdateWindowState { maximized, minimized } => {
68-
dispatcher.respond(DesktopFrontendMessage::UpdateWindowState { maximized, minimized });
69-
70-
// Forward this to update the UI
71-
return Some(message);
72-
}
7367
FrontendMessage::DragWindow => {
7468
dispatcher.respond(DesktopFrontendMessage::DragWindow);
7569
}
7670
FrontendMessage::CloseWindow => {
7771
dispatcher.respond(DesktopFrontendMessage::CloseWindow);
7872
}
73+
FrontendMessage::TriggerMinimizeWindow => {
74+
dispatcher.respond(DesktopFrontendMessage::MinimizeWindow);
75+
}
76+
FrontendMessage::TriggerMaximizeWindow => {
77+
dispatcher.respond(DesktopFrontendMessage::MaximizeWindow);
78+
}
7979
FrontendMessage::TriggerPersistenceWriteDocument { document_id, document, details } => {
8080
dispatcher.respond(DesktopFrontendMessage::PersistenceWriteDocument {
8181
id: document_id,

desktop/wrapper/src/messages.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,8 @@ pub enum DesktopFrontendMessage {
3232
height: f32,
3333
},
3434
UpdateOverlays(vello::Scene),
35-
UpdateWindowState {
36-
maximized: bool,
37-
minimized: bool,
38-
},
35+
MinimizeWindow,
36+
MaximizeWindow,
3937
DragWindow,
4038
CloseWindow,
4139
PersistenceWriteDocument {
@@ -92,6 +90,9 @@ pub enum DesktopWrapperMessage {
9290
},
9391
PollNodeGraphEvaluation,
9492
UpdatePlatform(Platform),
93+
UpdateMaximized {
94+
maximized: bool,
95+
},
9596
LoadDocument {
9697
id: DocumentId,
9798
document: Document,

editor/src/messages/app_window/app_window_message_handler.rs

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,27 +5,17 @@ use graphite_proc_macros::{ExtractField, message_handler_data};
55
#[derive(Debug, Clone, Default, ExtractField)]
66
pub struct AppWindowMessageHandler {
77
platform: AppWindowPlatform,
8-
maximized: bool,
9-
minimized: bool,
108
}
119

1210
#[message_handler_data]
1311
impl MessageHandler<AppWindowMessage, ()> for AppWindowMessageHandler {
1412
fn process_message(&mut self, message: AppWindowMessage, responses: &mut std::collections::VecDeque<Message>, _: ()) {
1513
match message {
1614
AppWindowMessage::AppWindowMaximize => {
17-
self.maximized = !self.maximized;
18-
responses.add(FrontendMessage::UpdateWindowState {
19-
maximized: self.maximized,
20-
minimized: self.minimized,
21-
});
15+
responses.add(FrontendMessage::TriggerMaximizeWindow);
2216
}
2317
AppWindowMessage::AppWindowMinimize => {
24-
self.minimized = !self.minimized;
25-
responses.add(FrontendMessage::UpdateWindowState {
26-
maximized: self.maximized,
27-
minimized: self.minimized,
28-
});
18+
responses.add(FrontendMessage::TriggerMinimizeWindow);
2919
}
3020
AppWindowMessage::AppWindowUpdatePlatform { platform } => {
3121
self.platform = platform;

editor/src/messages/frontend/frontend_message.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,8 @@ pub enum FrontendMessage {
120120
TriggerVisitLink {
121121
url: String,
122122
},
123+
TriggerMinimizeWindow,
124+
TriggerMaximizeWindow,
123125

124126
// Update prefix: give the frontend a new value or state for it to use
125127
UpdateActiveDocument {
@@ -339,9 +341,8 @@ pub enum FrontendMessage {
339341
UpdatePlatform {
340342
platform: AppWindowPlatform,
341343
},
342-
UpdateWindowState {
344+
UpdateMaximized {
343345
maximized: bool,
344-
minimized: bool,
345346
},
346347
DragWindow,
347348
CloseWindow,

frontend/src/messages.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -302,9 +302,8 @@ export class UpdatePlatform extends JsMessage {
302302
readonly platform!: AppWindowPlatform;
303303
}
304304

305-
export class UpdateWindowState extends JsMessage {
305+
export class UpdateMaximized extends JsMessage {
306306
readonly maximized!: boolean;
307-
readonly minimized!: boolean;
308307
}
309308

310309
export class CloseWindow extends JsMessage {}
@@ -1694,7 +1693,7 @@ export const messageMakers: Record<string, MessageMaker> = {
16941693
UpdateLayersPanelControlBarLeftLayout,
16951694
UpdateLayersPanelControlBarRightLayout,
16961695
UpdateLayerWidths,
1697-
UpdateWindowState,
1696+
UpdateMaximized,
16981697
UpdateMenuBarLayout,
16991698
UpdateMouseCursor,
17001699
UpdateNodeGraphControlBarLayout,

frontend/src/state-providers/app-window.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { writable } from "svelte/store";
22

33
import { type Editor } from "@graphite/editor";
4-
import { type AppWindowPlatform, UpdatePlatform, UpdateViewportHolePunch, UpdateWindowState } from "@graphite/messages";
4+
import { type AppWindowPlatform, UpdatePlatform, UpdateViewportHolePunch, UpdateMaximized as UpdateMaximized } from "@graphite/messages";
55

66
export function createAppWindowState(editor: Editor) {
77
const { subscribe, update } = writable({
@@ -17,9 +17,9 @@ export function createAppWindowState(editor: Editor) {
1717
return state;
1818
});
1919
});
20-
editor.subscriptions.subscribeJsMessage(UpdateWindowState, (updateWindowState) => {
20+
editor.subscriptions.subscribeJsMessage(UpdateMaximized, (updateMaximized) => {
2121
update((state) => {
22-
state.maximized = updateWindowState.maximized;
22+
state.maximized = updateMaximized.maximized;
2323
return state;
2424
});
2525
});

frontend/wasm/src/editor_api.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -307,13 +307,6 @@ impl EditorHandle {
307307
}
308308
}
309309

310-
/// Minimizes the application window to the taskbar or dock
311-
#[wasm_bindgen(js_name = appWindowMinimize)]
312-
pub fn app_window_minimize(&self) {
313-
let message = AppWindowMessage::AppWindowMinimize;
314-
self.dispatch(message);
315-
}
316-
317310
#[wasm_bindgen(js_name = addPrimaryImport)]
318311
pub fn add_primary_import(&self) {
319312
self.dispatch(DocumentMessage::AddTransaction);
@@ -338,6 +331,13 @@ impl EditorHandle {
338331
self.dispatch(NodeGraphMessage::AddSecondaryExport);
339332
}
340333

334+
/// Minimizes the application window to the taskbar or dock
335+
#[wasm_bindgen(js_name = appWindowMinimize)]
336+
pub fn app_window_minimize(&self) {
337+
let message = AppWindowMessage::AppWindowMinimize;
338+
self.dispatch(message);
339+
}
340+
341341
/// Toggles minimizing or restoring down the application window
342342
#[wasm_bindgen(js_name = appWindowMaximize)]
343343
pub fn app_window_maximize(&self) {

0 commit comments

Comments
 (0)