Skip to content

Support window parenting on macOS, closes #3751#3754

Merged
lucasfernog merged 9 commits intodevfrom
parent-window-macos
Mar 23, 2022
Merged

Support window parenting on macOS, closes #3751#3754
lucasfernog merged 9 commits intodevfrom
parent-window-macos

Conversation

@probablykasper
Copy link
Member

@probablykasper probablykasper commented Mar 22, 2022

What kind of change does this PR introduce?

  • Bugfix
  • Feature
  • Docs
  • New Binding issue #___
  • Code style update
  • Refactor
  • Build-related changes
  • Other, please describe:

Does this PR introduce a breaking change?

  • Yes, and the changes were approved in issue #___
  • No

Checklist

  • When resolving issues, they are referenced in the PR's title (e.g fix: remove a typo, closes #___, #___)
  • A change file is added if any packages will require a version bump due to this PR per the instructions in the readme.
  • I have added a convincing reason for adding this feature, if necessary

Other information

Closes #3751
Usage:

#[command]
pub fn create_child_window(id: String, app: AppHandle) {
  let main = app.get_window("main").unwrap();

  let child = window::WindowBuilder::new(&app, id, WindowUrl::default())
    .title("Child")
    .inner_size(400.0, 300.0);

  #[cfg(target_os = "macos")]
  let child = child.parent_window(main.ns_window().unwrap());
  #[cfg(target_os = "windows")]
  let child = child.parent_window(main.hwnd().unwrap());

  child.build();
}

Implemented it in the same way as for Windows, but it would be nice if usage was the same for all platforms. Not sure what the way to implement that would be, maybe RawWindowHandle? Would also be a breaking change, unless a different name is used.

@probablykasper probablykasper requested review from a team March 22, 2022 23:25
@probablykasper probablykasper requested a review from a team as a code owner March 22, 2022 23:25
@probablykasper
Copy link
Member Author

The example is failing because the Windows parent_window expects HWND but main.hwnd().unwrap() returns *mut std::ffi::c_void. Is that a bug with the Windows implementation?

@lucasfernog
Copy link
Member

@probablykasper I think the best solution is to change parent_window to return a HWND so I pushed that, but now the child window is not visible (it works if I remove the child.parent_window() call.

@probablykasper
Copy link
Member Author

Hm, no clue why that would be. Any idea if it works in tao atm?

[skip ci]

Co-authored-by: Amr Bashir <amr.bashir2015@gmail.com>
@lucasfernog
Copy link
Member

Parent window directly on tao is weird but at least it shows the child window. I think wry is touching the window and messing with it too. Do you know if that's the case @amrbashir

@lucasfernog lucasfernog merged commit 4e807a5 into dev Mar 23, 2022
@lucasfernog lucasfernog deleted the parent-window-macos branch March 23, 2022 16:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[feat] Allow creation of child Window for macOS

4 participants