◀ANSI版開発トップへ
  • 4343 タブにマウス操作の機能追加
    • 4344 RE: タブにマウス操作の機能追加
      • 4346 Re2: タブにマウス操作の機能追加
        • 4352 Re3: タブにマウス操作の機能追加
          • 4354 Re4: タブにマウス操作の機能追加
    • 4345 Re: タブにマウス操作の機能追加
    • 4348 Re: タブにマウス操作の機能追加
      • 4355 Re2: タブにマウス操作の機能追加
    • 4356 タブにマウス操作の機能追加(修正1.2.1版)
    • 4366 タブにマウス操作の機能追加(修正1.3.1版)
      • 4371 修正1.3.2版
  • [4343] タブにマウス操作の機能追加 ryoji 2006年03月26日 03:44

    タブにマウス操作の機能追加をしてみました。
    #Subversion運用への慣らしも兼ねて (^^;

    ・タブバーの何もない所をダブルクリックで新規作成 >>data:5077
    ・タブ上のマウスホイールでウィンドウ切替(共通設定オプション) >>dev:4302
    です。

    保管場所: SourceForge Patches "TabWnd Mouse+"
    パッチ形式: TortoiseSVN Create Patch...
    ベース: sakura/trunk#954
    • [4344] RE: タブにマウス操作の機能追加 げんた 2006年03月26日 23:27

      >・タブ上のマウスホイールでウィンドウ切替(共通設定オプション) >>dev:4302
      >です。
      タブバーの上じゃなくてタブの上でないとうまく動かないんですね.

      それと,ホイールをくるくる激しく回すと一瞬画面が消えてから現れ,それ以降反応しなくなることがあります.
      • [4346] Re2: タブにマウス操作の機能追加 ryoji 2006年03月26日 23:55

        ▼ げんたさん
        > >・タブ上のマウスホイールでウィンドウ切替(共通設定オプション) >>dev:4302
        > >です。
        > タブバーの上じゃなくてタブの上でないとうまく動かないんですね.
        あ、これ、無意識に他エディタの動作を真似しちゃってました。言われてみると、バーの上ならどこでも効くようにしたほうが良さそうですね。

        > それと,ホイールをくるくる激しく回すと一瞬画面が消えてから現れ,それ以降反応しなくなることがあります.
        Ctrl+Tab も押しっぱなしだと同様なので、従来からの問題ですね。
        ちょっと対策考えてみます。
        • [4352] Re3: タブにマウス操作の機能追加 げんた 2006年03月30日 21:46

          >> それと,ホイールをくるくる激しく回すと一瞬画面が消えてから現れ,それ以降反応しなくなることがあります.
          >Ctrl+Tab も押しっぱなしだと同様なので、従来からの問題ですね。
          仮説ですが,
          このエディタは見かけ上TABだけ変わったように見えますが,実際には二人羽織状態で同じ位置の複数のウィンドウで表示・非表示を切り替えていますよね.
          次のウィンドウに画面が切り替わる前に同じウィンドウにメッセージが連続して入ってしまうと誤動作するのかな?
          • [4354] Re4: タブにマウス操作の機能追加 ryoji 2006年03月31日 01:25

            ▼ げんたさん
            > >> それと,ホイールをくるくる激しく回すと一瞬画面が消えてから現れ,それ以降反応しなくなることがあります.
            > >Ctrl+Tab も押しっぱなしだと同様なので、従来からの問題ですね。
            > 仮説ですが,
            > このエディタは見かけ上TABだけ変わったように見えますが,実際には二人羽織状態で同じ位置の複数のウィンドウで表示・非表示を切り替えていますよね.
            > 次のウィンドウに画面が切り替わる前に同じウィンドウにメッセージが連続して入ってしまうと誤動作するのかな?
            WM_MOUSEWHEEL処理の最後にPeekMessage()で残りのWM_MOUSEWHEELを刈り取ってしまう(PM_REMOVE)、という実験を最初に試したんですが、特に効果は見られなかったです。

            間違いなくまずそうなのは、表示/非表示の切り替えにPostMessage()でTWNT_ORDER通知している点です。
            画面A、B、CがあってアクティブなのがAだったとき、
            1.WM_MOUSEWHEELによってAがBをアクティブ化する(A、Bが表示状態)
            2.Bは自分がアクティブになるとA、B、CにTWNT_ORDER通知をポストする
            3.AはTWNT_ORDERを取り出すと自分を非表示にする
            4.BはTWNT_ORDERを取り出すと自分を表示にする(既に表示だけど)
            5.CはTWNT_ORDERを取り出すと自分を非表示にする(既に非表示だけど)
            (3,4,5は順不同)
            という動作になりますが、2よりも後の処理には必ずタイムラグがあります。
            5 よりも先にBのWM_MOUSEWHEEL処理が動きだすかもしれない。
            すると、Cは一旦アクティブにされるものの、その後の 5 によって自分を消してしまう。
            Cは自分がアクティブになったときに自分自身にTWNT_ORDERをポストしているから、また表示されるけど。

            何度も試していると、2画面が表示状態のまま止まったりすることも。
            TWNT_ORDERをSendMessage()で試してみたらだいぶ改善されたけど、それでも完動はしてないです。
            他の要因も絡んでいるということなのでしょうが、まだ不明。
            共有メモリの非同期アクセスが絡んでたら、嫌だなぁ~...
    • [4345] Re: タブにマウス操作の機能追加 げんた 2006年03月26日 23:37

      >保管場所: SourceForge Patches "TabWnd Mouse+"
      あ,別にコメントを日本語で書いて頂いても大丈夫です.
      ただ,送られてくるメールにその本文が入って文字化けしますけど.
      私はそれがいやで日本語を無意識に避けているだけです.
    • [4348] Re: タブにマウス操作の機能追加 もか 2006年03月29日 02:31

      ホイールによるタブ切り替えについて、
      F_PREVWINDOW / F_NEXTWINDOWを使っているので画面分割中だと、
      アクティブな分割パネル(サクラ用語だと何だろう)が切り替わることがあります。
      ドキュメント(=タブ)間を切り替えるだけのほうが、使いかってはよさそうです。
      • [4355] Re2: タブにマウス操作の機能追加 ryoji 2006年03月31日 01:40

        ▼ もかさん
        > ホイールによるタブ切り替えについて、
        > F_PREVWINDOW / F_NEXTWINDOWを使っているので画面分割中だと、
        > アクティブな分割パネル(サクラ用語だと何だろう)が切り替わることがあります。
        なので、要望では「タブ切替」と呼ばれていたのを密かに「ウィンドウ切替」と呼称変更していたのでした σ(^^;;;
        もともとちょっと気にはしてたんですが、
        > ドキュメント(=タブ)間を切り替えるだけのほうが、使いかってはよさそうです。
        やっぱりタブ上の操作なので「タブ切替」にしたほうが素直でしたね。
        ただ、高速切替が安定しないことには、安易に取り込まないほうがよさそうですけど...
    • [4356] タブにマウス操作の機能追加(修正1.2.1版) ryoji 2006年03月31日 02:28

      TabWnd_MousePlus1_2_1.diff(修正1.2.1版)
      マウスホイールの修正
      ・タブ上だけでなくタブバーのどこでもホイールが効くように
      ・マルチモニタで負座標のときでもホイールが動作するように
      ・ホイール動作を「ウィンドウ切替」から「タブ切替」に
      連続ホイールによる高速切替は不安定なままです。
      安定化の目処も立っていません。

      上記パッチに、以下を追加するとちょっとはましになるかも。

      --- sakura_core/CShareData.cpp (revision 954)
      +++ sakura_core/CShareData.cpp (working copy)
      @@ -822,8 +826,20 @@
      cRecentEditNode.Terminate();

      //ウインドウ登録メッセージをブロードキャストする。
      - PostMessageToAllEditors( MYWM_TAB_WINDOW_NOTIFY, (WPARAM)nSubCommand, (LPARAM)hWnd, hWnd );

      + // 2006.03.30 ryoji タブまとめ表示の場合は SendMessageToAllEditors() にする
      + // "次/前の画面" などの連続実行で短時間内に多数のウィンドウ切り替えが
      + // 行われる場合、ポストでは受け側の処理(TWNT_ORDER)が遅延するので、
      + // 一時的に、
      + // ・全部の画面が消える
      + // ・複数の画面が表示される
      + // ・表示されていてほしい画面が消えて別の画面が表示される
      + // などの状態になり、切り替え動作自体がおかしくなることがある
      + if( ( m_pShareData->m_Common.m_bDispTabWnd && !m_pShareData->m_Common.m_bDispTabWndMultiWin ) && nSubCommand == TWNT_ORDER )
      + SendMessageToAllEditors( MYWM_TAB_WINDOW_NOTIFY, (WPARAM)nSubCommand, (LPARAM)hWnd, hWnd );
      + else
      + PostMessageToAllEditors( MYWM_TAB_WINDOW_NOTIFY, (WPARAM)nSubCommand, (LPARAM)hWnd, hWnd );
      +
      return TRUE;
      }

    • [4366] タブにマウス操作の機能追加(修正1.3.1版) ryoji 2006年04月03日 23:17

      TabWnd_MousePlus1_3_1.diff(修正1.3.1版)

      今回の修正
      ・画面の連続切替(Ctrl+Tab や ホイールによる切替)が安定動作しない件の対策

      TWNT_ORDER を SendMessageTimeout() でブロードキャストするようにしました。
      ActivateFrameWindow() が複数プロセスで衝突しないようにしました。
      マルチプロセスの同期関連で他に問題が無いかは不明ですが、動作テストの範囲では安定しているように思われます。

      動作確認
      コンパイル: VC++6.0, 2003, 2005
      OS: Win95, 98SE, NT4.0 WS, 2000 Pro, Xp Pro(SP2)
      CPU: Pen3, Pen4(ハイパースレッディング)

      保管場所: SourceForge Patches "TabWnd Mouse+"
      パッチ形式: TortoiseSVN Create Patch...
      ベース: sakura/trunk#955
      • [4371] 修正1.3.2版 ryoji 2006年04月04日 22:23

        TabWnd_MousePlus1_3_2.diff
        バグ混入してたので、その部分を除去しました。m(__)m
        ついでにミューテックスクラスも汎用化。

        保管場所: SourceForge Patches "TabWnd Mouse+"
        パッチ形式: TortoiseSVN
        ベース: sakura/trunk#956