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:
Tweet (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::BaseEventFlagsmozilla::EventFlagsmozilla::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 nsDragDropEventStatusmozilla::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を変更した場合のリビルド対象はまだまだ多いですが、この辺も、別のバグで対応していく予定です。