Community
    • Login

    Plugin Docking Panel floating / docked detection

    Scheduled Pinned Locked Moved Notepad++ & Plugin Development
    13 Posts 5 Posters 868 Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • PeterJonesP
      PeterJones @Michael Vincent
      last edited by PeterJones

      @Michael-Vincent ,

      I don’t have any experience with coding the docking plugins, but I would think _isFloating and _isClosed would have the same persistence/visibility, since they have identical scope & protection, so if .isFloating() were defined at the same level as .isClosed(), I would think it should work.

      My suggestion would be to add some “debug print” statements (‡) inside each case: DNM_...: – something like display the state of both of those variables, and display the output of both of those calls. Then you could see whether it’s ever hitting the cases that are changing _isFloating, and whether isFloating() is able to know the right state when it’s called after one of the other modes has been entered.

      ‡: I think that’s possible using OutputDebugString() and sysinternals DebugView

      Michael VincentM 1 Reply Last reply Reply Quote 3
      • Michael VincentM
        Michael Vincent @PeterJones
        last edited by

        @PeterJones said in Plugin Docking Panel floating / docked detection:

        My suggestion would be to add some “debug print” statements (‡) inside each case: DNM_…: – something like display the state of both of those variables, and display the output of both of those calls. Then you could see whether it’s ever hitting the cases

        Seems to not be even hitting those cases as I added:

        OutputDebugString(TEXT("FLOATING"));
        

        and

        OutputDebugString(TEXT("DOCKING"));
        

        just inside their respective case statements and they never showed in my DbgView.exe window - while other debug strings did.

        Seems maybe an issue in Notepad++ itself? Need to dig into that.

        Cheers.

        EkopalypseE 1 Reply Last reply Reply Quote 2
        • EkopalypseE
          Ekopalypse @Michael Vincent
          last edited by

          @Michael-Vincent

          Seems to work for me

          19006891-d7b3-43e1-8b8b-35ecd6d385d5-image.png

          Michael VincentM 1 Reply Last reply Reply Quote 2
          • Michael VincentM
            Michael Vincent @Ekopalypse
            last edited by

            @Ekopalypse said in Plugin Docking Panel floating / docked detection:

            Seems to work for me

            How are you detecting them in PythonScript? Are you just running the Notepad++ demo plugin and added the OutputDebugString() like I mentioned above?

            I tried on 2 different plugins (my Git and the new MultiReplace one discussed in another recent thread). Docking and undocking the Dockable windows for either does not trigger a FLOAT or DOCK message to print for me. I even added a MessageBox() to pop incase my OutputDebugString() syntax / incantation was wrong.

            Cheers.

            EkopalypseE 1 Reply Last reply Reply Quote 0
            • EkopalypseE
              Ekopalypse @Michael Vincent
              last edited by Ekopalypse

              @Michael-Vincent

              No, it is a docked dialog with pythonscript.
              Which npp version are you using?
              How is the tbdata structure created?
              What does the dialog-proc look like?
              Is one of the versions of the plugins publicly available?

              Michael VincentM 1 Reply Last reply Reply Quote 1
              • Michael VincentM
                Michael Vincent @Ekopalypse
                last edited by

                @Ekopalypse

                Which npp version are you using?

                8.5.4 64-bit

                How is the tbdata structure created?

                https://github.com/vinsworldcom/nppGitSCM/blob/f91f0aa8f64ef28ca5dd8a95b264143cabc3cd93/PluginDefinition.cpp#L734

                What does the dialog-proc look like?

                https://github.com/vinsworldcom/nppGitSCM/blob/f91f0aa8f64ef28ca5dd8a95b264143cabc3cd93/DockingFeature/GitPanelDlg.cpp#L533

                Is one of the versions of the plugins publicly available?

                https://github.com/vinsworldcom/nppGitSCM

                Cheers.

                EkopalypseE 2 Replies Last reply Reply Quote 0
                • EkopalypseE
                  Ekopalypse @Michael Vincent
                  last edited by

                  @Michael-Vincent

                  I am still using 8.5, I will upgrade to 8.5.4.
                  Thanks for the links - I’ll play with gitscm and see if I can figure out what’s causing it. Will report back tomorrow.

                  1 Reply Last reply Reply Quote 0
                  • EkopalypseE
                    Ekopalypse @Michael Vincent
                    last edited by Ekopalypse

                    @Michael-Vincent

                    but the default proc is not used, isn’t it?
                    Your callback is from GitPanelDlg.cpp
                    but the message DMN_DOCK is in DockingDlgInterface.h

                    rdipardoR 1 Reply Last reply Reply Quote 3
                    • rdipardoR
                      rdipardo @Ekopalypse
                      last edited by rdipardo

                      @Ekopalypse is right.

                      DMN_FLOAT and DMN_DOCK are passed as the code member of a NMHDR struct, which you intercept by hooking the WM_NOTIFY message.

                      GitSCM seems to be already doing this correctly in the protected run_dlgProc method (in the DockingDlgInterface.h header).

                      The debug message should be consistently printed if you put the code under the case labels for DMN_FLOAT and DMN_DOCK, respectively.

                      Michael VincentM 1 Reply Last reply Reply Quote 3
                      • Michael VincentM
                        Michael Vincent @rdipardo
                        last edited by

                        @rdipardo said in Plugin Docking Panel floating / docked detection:

                        DMN_FLOAT and DMN_DOCK are passed as the code member of a NMHDR struct, which you intercept by hooking the WM_NOTIFY message.

                        Indeed. This all makes sense now. I’m overriding the default run_dlgProc() in “DockingDlgInterface.h”. So what I need to do in my run_dlgProc() is if I don’t process the WM_NOTIFY, call the default one:

                                    DockingDlgInterface::run_dlgProc( message, wParam, lParam );
                        
                        

                        Works now! Thank you all - have a great weekend!

                        Cheers.

                        1 Reply Last reply Reply Quote 4
                        • First post
                          Last post
                        The Community of users of the Notepad++ text editor.
                        Powered by NodeBB | Contributors