Coder Social home page Coder Social logo

Comments (5)

maxkatz6 avatar maxkatz6 commented on July 3, 2024

This line is responsible for attaching embeddable control to the parent: https://github.com/AvaloniaUI/Avalonia/blob/master/src/Windows/Avalonia.Win32.Interoperability/WinForms/WinFormsAvaloniaControlHost.cs#L60

It never really did set CHILD style on parent though, so regression must come from something else. On other hand, this style would make sense anyway.

from avalonia.

timunie avatar timunie commented on July 3, 2024

@fitdev a PR is welcome if you know how to improve it.

from avalonia.

fitdev avatar fitdev commented on July 3, 2024

It never really did set CHILD style on parent though, so regression must come from something else. On other hand, this style would make sense anyway.

I know, in fact I was using own implementation of WinFormsAvaloniaControlHost, so it is not WinFormsAvaloniaControlHost that is the culprit.

The real cause is that the "embedded window" created by EmbeddableControlRoot's constructor through IWindowingPlatform.CreateEmbeddableWindow() implemented in Win32Platform.CreateEmbeddableWindow via EmbeddedWindowImpl does not set correct styles, as expected by Windows OS for the embedding use case.

I am not Windows expert by any means, so don't really know which styles and/or extended styles should be set for such a case. But, WS_CHILD should certainly be one of them and solves this issue. Strange: it seems the style does get set in the EmbeddedWindowImpl.CreateWindowOverride, but for some reason it does not translate into actual window instance having that style in either Beta 2 or RC1.

from avalonia.

fitdev avatar fitdev commented on July 3, 2024

After some more digging, the culprit seems in the WindowImpl.UpdateWindowProperties which unconditionally does this WindowStyles style = WindowStyles.WS_CLIPCHILDREN | WindowStyles.WS_OVERLAPPEDWINDOW | WindowStyles.WS_CLIPSIBLINGS; and then modifies that style, without taking into account the already existing style (i.e. throws away WS_CHILD that was set by EmbeddedWindowImpl.CreateWindowOverride.

The WindowImpl.UpdateWindowProperties itself is called through:
Win32Platform.CreateEmbeddableWindow
WindowImpl.Show
WindowImpl.ShowWindow

So, the bottom line is that this gets screwed up in the WindowImpl.UpdateWindowProperties routine which does not preserve the initially correctly set WS_CHILD flag. So someone who owns this area should look into how best to pass the information to the UpdateWindowProperties that it should preserve certain window styles (perhaps via WindowProperties struct, a field, a parameter, or a check within the routine itself)

from avalonia.

fitdev avatar fitdev commented on July 3, 2024

Submitted PR. Can someone review it please? @timunie , @maxkatz6

from avalonia.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.