この日記はMozillaのプロダクトへの貢献者としての私の成果を中心に、気になったバグやWeb界隈の話題について書いていますが、 断り書きがある場合を除き、いかなる団体のオフィシャルな見解ではありません。あくまでも個人的なものです。 Mozilla Foundation、Mozilla Corporation、及び関連企業の公式情報ではないことに注意してください。

現在、XHTML 1.0 (もどき)から、HTML5なコンテンツに修正中です。古い日記は修正が完了していませんので表示が崩れます。 順次、修正していく予定ですのでしばらくお待ちください。

もずはっく日記(2013年9月)

2013年9月30日

Bug-org 912956 Separate nsGUIEvent.h to a few header files
初回投稿日時: 2013年09月30日22時25分47秒
最終更新日時: 2013年09月30日22時29分07秒
カテゴリ: Events Mozilla Core Mozilla26 Mozilla27 バグ修正
SNS: (list)

長年の悲願だった、Geckoの内部イベントリファクタリングを実行することを決意しました。まず、このバグでは、肥大化したnsGUIEvent.hを複数のヘッダファイルに分割し、イベント関連のコードを修正した場合に、リビルドする範囲を軽減しようというのがまずは第一目標としました。

まず、イベントクラスのリネームもこの機会に行うため、まずは、nsEvent.hと、nsGUIEvent.hで定義されていた、mozilla::widget名前空間のものをmozilla名前空間に移しました。これだけは、Mozilla 26で修正されています。

これ以降は、Mozilla 27での修正になります。

各イベントクラスや、関連する構造体の前方宣言を行っている、nsEvent.hは、mozilla/EventForwards.hにリネームしました(ソースコードは、widget/EventForwards.hです)。

次に、イベントの種類ごとに、以下のようにヘッダファイルを分割しました。

mozilla/BasicEvents.h
  • enum nsEventStructType
  • イベントメッセージ
  • mozilla::BaseEventFlags
  • mozilla::EventFlags
  • mozilla::WidgetEvent (旧nsEvent)
  • mozilla::WidgetGUIEvent (旧nsGUIEvent)
  • mozilla::WidgetInputEvent (旧nsInputEvent)
  • mozilla::InternalUIEvent (旧nsUIEvent)
mozilla/ContentEvents.h
  • mozilla::InternalScriptErrorEvent (旧nsScriptErrorEvent)
  • mozilla::InternalScrollPortEvent (旧nsScrollPortEvent)
  • mozilla::InternalScrollAreaEvent (旧nsScrollAreaEvent)
  • mozilla::InternalFormEvent (旧nsFormEvent)
  • mozilla::InternalClipboardEvent (旧nsClipboardEvent)
  • mozilla::InternalFocusEvent (旧nsFocusEvent)
  • mozilla::InternalTransitionEvent (旧nsTransitionEvent)
  • mozilla::InternalAnimationEvent (旧nsAnimationEvent)
mozilla/MiscEvents.h
  • mozilla::WidgetContentCommandEvent (旧nsContentCommandEvent)
  • mozilla::WidgetCommandEvent (旧nsCommandEvent)
  • mozilla::WidgetPluginEvent (旧nsPluginEvent)
mozilla/MouseEvents.h
  • enum nsDragDropEventStatus
  • mozilla::WidgetMouseEventBase (旧nsMouseEvent_base)
  • mozilla::WidgetMouseEvent (旧nsMouseEvent)
  • mozilla::WidgetDragEvent (旧nsDragEvent)
  • mozilla::WidgetMouseScrollEvent (旧nsMouseScrollEvent)
  • mozilla::WidgetWheelEvent (旧mozilla::WheelEvent)
mozilla/TextEvents.h
  • NS_VK_*
  • mozilla::AlternativeCharCode (旧nsAlternativeCharCode)
  • mozilla::WidgetKeyboardEvent (旧nsKeyEvent)
  • mozilla::TextRangeStyle (旧nsTextRangeStyle)
  • mozilla::TextRange (旧nsTextRange)
  • mozilla::TextRangeArray (旧nsTextRangeArray)
  • mozilla::WidgetTextEvent (旧nsTextEvent)
  • mozilla::WidgetCompositionEvent (旧nsCompositionEvent)
  • mozilla::WidgetQueryContentEvent (旧nsQueryContentEvent)
  • mozilla::WidgetSelectionEvent (旧nsSelectionEvent)
mozilla/TouchEvents.h
  • mozilla::WidgetGestureNotifyEvent (旧nsGestureNotifyEvent)
  • mozilla::WidgetSimpleGestureEvent (旧nsSimpleGestureEvent)
  • mozilla::WidgetTouchEvent (旧nsTouchEvent)
mozilla/MutationEvent.h
  • mozilla::InternalMutationEvent (旧nsMutationEvent)
  • NS_EVENT_BITS_MUTATION_*

ネイティブイベントをGeckoに伝達するために、widgetが使用するイベントは、Widget prefix付きで、それ以外、DOMイベントの実データの保存領域として使われるものは、Internal prefix付きのクラス名になっています。

このバグの修正時には、全ての旧クラス名や、旧構造体名はそのまま利用できるようにtypedefで別名を宣言してありますが、Bug-org 920377で順次、この別名を削除して、新しい名前を使用するように置換作業を行っています。

また、大量にあったマクロやインライン関数のイベントに関するユーティリティ類は、全て、WidgetEventのメソッドとして実装し、widget/shared/WidgetEventImpl.cppで実装しています。今後、さらに有用なメソッドを追加しても、その実装によって依存関係が増えない形になりましたので、より、イベント周りのコードは整理されていくと思います。

また、最後にnsGUIEvent.hは削除され、新しいヘッダファイルは必要なものだけを直接、インクルードするように修正しています。BasicEvents.hを変更した場合のリビルド対象はまだまだ多いですが、この辺も、別のバグで対応していく予定です。

関連するかもしれないエントリ

bug-org 912956を含むエントリ