Bug-org 1153156 [e10s] Mousewheel scroll distance does not match non-e10s (with apz disabled)
初回投稿日時: 2016年01月30日23時04分24秒
最終更新日時: 2016年10月15日19時48分33秒
カテゴリ: e10s Mozilla Core Mozilla46 WheelEvent Windows バグ修正
SNS:
Tweet (list)
Windowsでは、マウスホイールのスクロール量のシステム設定が変更されていない場合、ルートのドキュメントのページ全体のスクロール時にのみ、スクロール量を倍にするシステムスクロールオーバーライドという機能があります。e10sモードが無効の時と、e10sモードが有効でも、APZが有効な場合には問題無く動いてるのですが、e10sモードが有効でAPZが無効の場合、スクロール量が本来の速度に戻ってしまい、遅く感じるというバグです。
e10sモードが有効で、APZが無効な場合のみ、オーバライドは子プロセスからnsIWidget::OverrideSystemMouseScrollSpeed()
が呼び出されているのがその違いなのですが、親プロセスではnsWindow::OverrideSystemMouseScrollSpeed()
が呼び出されるのに対し、子プロセスではPuppetWidget::OverrideSystemMouseScrollSpeed()
が実装されていないのでnsBaseWidget::OverrideSystemMouseScrollSpeed()
が呼び出され、Windows固有のこの機能がうまく動いていなかったわけです。
このメソッドはwheel
イベントが発生する度に呼び出されますので、単純にPuppetWidget::OverrideSystemMouseScrollSpeed()
からプロセス間通信を行って、親プロセスのnsWindow::OverrideSystemMouseScrollSpeed()
を呼び出していては負荷が大きくなりすぎます。
そこで、今回の修正では、WidgetWheelEvent
に設定の確認とオーバーライド済みのデルタ値を返すメソッドを実装し、親プロセスでなくては問い合わせることができない、システム設定がデフォルト設定かどうかをWidgetWheelEvent
の発火時に先に確認し、デフォルト設定でなければWidgetWheelEvent::mAllowToOverrideSystemScrollSpeed
をfalse
に、デフォルト設定ならtrue
にするようにし、全ての判断材料をWidgetWheelEvent
に持たせておくようにしました。
APZはこのこのコードをコピペで重複して持っているので、APZ対応に関しては独立したパッチにまとめていますので、参考にしてみてください。