From a99428c49d6afc92336d3cb88e044b3a737f5cfa Mon Sep 17 00:00:00 2001
From: Thomas Goyne <plorkyeran@aegisub.org>
Date: Sun, 6 Jan 2013 17:50:09 -0800
Subject: [PATCH] Extract options and MRU stuff from main.h

Nearly all of the files including main.h are doing so only for OPT_GET
and friends, which are rather unrelated to the main things that main.h
declares.
---
 aegisub/build/Aegisub/Aegisub.vcxproj         |  1 +
 aegisub/build/Aegisub/Aegisub.vcxproj.filters |  4 +++
 aegisub/src/ass_file.cpp                      |  2 +-
 aegisub/src/audio_box.cpp                     |  2 +-
 aegisub/src/audio_colorscheme.cpp             |  2 +-
 aegisub/src/audio_controller.cpp              |  2 +-
 aegisub/src/audio_display.cpp                 |  2 +-
 aegisub/src/audio_karaoke.cpp                 |  2 +-
 aegisub/src/audio_marker.cpp                  |  2 +-
 aegisub/src/audio_player.cpp                  |  2 +-
 aegisub/src/audio_player_alsa.cpp             |  2 +-
 aegisub/src/audio_player_dsound2.cpp          |  2 +-
 aegisub/src/audio_player_oss.cpp              |  2 +-
 aegisub/src/audio_player_portaudio.cpp        |  2 +-
 aegisub/src/audio_provider.cpp                |  1 +
 aegisub/src/audio_provider_avs.cpp            |  2 +-
 aegisub/src/audio_provider_ffmpegsource.cpp   |  2 +-
 aegisub/src/audio_provider_hd.cpp             |  2 +-
 aegisub/src/audio_provider_ram.cpp            |  2 +-
 aegisub/src/audio_renderer_waveform.cpp       |  2 +-
 aegisub/src/audio_timing_dialogue.cpp         |  2 +-
 aegisub/src/audio_timing_karaoke.cpp          |  2 +-
 aegisub/src/auto4_base.cpp                    |  2 +-
 aegisub/src/avisynth_wrap.cpp                 |  2 +-
 aegisub/src/base_grid.cpp                     |  2 +-
 aegisub/src/command/app.cpp                   |  8 ++---
 aegisub/src/command/audio.cpp                 |  2 +-
 aegisub/src/command/automation.cpp            |  9 ++---
 aegisub/src/command/edit.cpp                  |  2 +-
 aegisub/src/command/grid.cpp                  |  3 +-
 aegisub/src/command/help.cpp                  |  6 ++--
 aegisub/src/command/keyframe.cpp              |  4 +--
 aegisub/src/command/recent.cpp                |  7 ++--
 aegisub/src/command/subtitle.cpp              |  3 +-
 aegisub/src/command/time.cpp                  |  2 +-
 aegisub/src/command/timecode.cpp              |  4 +--
 aegisub/src/command/tool.cpp                  | 13 ++++---
 aegisub/src/command/video.cpp                 |  9 ++---
 aegisub/src/compat.cpp                        |  2 +-
 aegisub/src/dialog_attachments.cpp            |  2 +-
 aegisub/src/dialog_automation.cpp             | 19 ++++++-----
 aegisub/src/dialog_autosave.cpp               |  2 +-
 aegisub/src/dialog_colorpicker.cpp            |  2 +-
 aegisub/src/dialog_detached_video.cpp         | 10 +++---
 aegisub/src/dialog_dummy_video.cpp            |  2 +-
 aegisub/src/dialog_export_ebu3264.cpp         |  2 +-
 aegisub/src/dialog_fonts_collector.cpp        |  2 +-
 aegisub/src/dialog_kara_timing_copy.cpp       |  2 +-
 aegisub/src/dialog_paste_over.cpp             |  2 +-
 aegisub/src/dialog_search_replace.cpp         |  2 +-
 aegisub/src/dialog_selection.cpp              | 21 ++++++------
 aegisub/src/dialog_shift_times.cpp            |  2 +-
 aegisub/src/dialog_spellchecker.cpp           |  2 +-
 aegisub/src/dialog_style_editor.cpp           |  2 +-
 aegisub/src/dialog_style_manager.cpp          |  2 +-
 aegisub/src/dialog_text_import.cpp            |  2 +-
 aegisub/src/dialog_timing_processor.cpp       |  2 +-
 aegisub/src/dialog_version_check.cpp          |  2 +-
 aegisub/src/ffmpegsource_common.cpp           |  1 +
 aegisub/src/frame_main.cpp                    |  2 +-
 aegisub/src/hotkey.cpp                        |  2 +-
 aegisub/src/main.cpp                          | 24 +++++++------
 aegisub/src/main.h                            | 18 ----------
 aegisub/src/menu.cpp                          |  1 +
 aegisub/src/options.h                         | 34 +++++++++++++++++++
 aegisub/src/pen.cpp                           |  2 +-
 aegisub/src/persist_location.cpp              |  2 +-
 aegisub/src/preferences.cpp                   |  2 +-
 aegisub/src/preferences_base.cpp              |  2 +-
 aegisub/src/spellchecker.cpp                  |  2 +-
 aegisub/src/spellchecker_hunspell.cpp         |  2 +-
 aegisub/src/subs_edit_box.cpp                 |  2 +-
 aegisub/src/subs_edit_ctrl.cpp                |  2 +-
 aegisub/src/subs_grid.cpp                     |  2 +-
 aegisub/src/subtitle_format_ebu3264.cpp       |  2 +-
 aegisub/src/subtitle_format_ttxt.cpp          |  2 +-
 aegisub/src/subtitle_format_txt.cpp           |  2 +-
 aegisub/src/subtitles_provider.cpp            |  2 +-
 aegisub/src/text_file_writer.cpp              |  2 +-
 aegisub/src/thesaurus.cpp                     |  2 +-
 aegisub/src/timeedit_ctrl.cpp                 |  2 +-
 aegisub/src/toolbar.cpp                       |  2 +-
 aegisub/src/utils.cpp                         |  2 +-
 aegisub/src/utils.h                           |  1 +
 aegisub/src/video_box.cpp                     |  2 +-
 aegisub/src/video_context.cpp                 |  2 +-
 aegisub/src/video_display.cpp                 |  2 +-
 aegisub/src/video_provider_avs.cpp            |  2 +-
 aegisub/src/video_provider_cache.cpp          |  2 +-
 aegisub/src/video_provider_ffmpegsource.cpp   |  8 ++---
 aegisub/src/video_provider_manager.cpp        |  2 +-
 aegisub/src/video_slider.cpp                  |  2 +-
 aegisub/src/visual_tool.cpp                   |  2 +-
 aegisub/src/visual_tool_drag.cpp              |  2 +-
 aegisub/src/visual_tool_vector_clip.cpp       |  2 +-
 95 files changed, 191 insertions(+), 162 deletions(-)
 create mode 100644 aegisub/src/options.h

diff --git a/aegisub/build/Aegisub/Aegisub.vcxproj b/aegisub/build/Aegisub/Aegisub.vcxproj
index 8113f4602..524ef41e6 100644
--- a/aegisub/build/Aegisub/Aegisub.vcxproj
+++ b/aegisub/build/Aegisub/Aegisub.vcxproj
@@ -255,6 +255,7 @@
     <ClInclude Include="$(SrcDir)visual_tool_scale.h" />
     <ClInclude Include="$(SrcDir)visual_tool_vector_clip.h" />
     <ClInclude Include="$(SrcDir)ass_info.h" />
+    <ClInclude Include="$(SrcDir)options.h" />
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="$(SrcDir)aegisublocale.cpp" />
diff --git a/aegisub/build/Aegisub/Aegisub.vcxproj.filters b/aegisub/build/Aegisub/Aegisub.vcxproj.filters
index b475780c3..9dc72df3f 100644
--- a/aegisub/build/Aegisub/Aegisub.vcxproj.filters
+++ b/aegisub/build/Aegisub/Aegisub.vcxproj.filters
@@ -682,6 +682,10 @@
     <ClInclude Include="$(SrcDir)ass_info.h">
       <Filter>ASS</Filter>
     </ClInclude>
+    <ClInclude Include="$(SrcDir)include\aegisub\hotkey.h" />
+    <ClInclude Include="$(SrcDir)options.h">
+      <Filter>Preferences</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="$(SrcDir)ass_dialogue.cpp">
diff --git a/aegisub/src/ass_file.cpp b/aegisub/src/ass_file.cpp
index eba59cc7e..4bdc90ffe 100644
--- a/aegisub/src/ass_file.cpp
+++ b/aegisub/src/ass_file.cpp
@@ -50,7 +50,7 @@
 #include "ass_info.h"
 #include "ass_style.h"
 #include "compat.h"
-#include "main.h"
+#include "options.h"
 #include "standard_paths.h"
 #include "subtitle_format.h"
 #include "text_file_reader.h"
diff --git a/aegisub/src/audio_box.cpp b/aegisub/src/audio_box.cpp
index 9a9a2860c..56a94402d 100644
--- a/aegisub/src/audio_box.cpp
+++ b/aegisub/src/audio_box.cpp
@@ -62,7 +62,7 @@
 #include "audio_timing.h"
 #include "command/command.h"
 #include "libresrc/libresrc.h"
-#include "main.h"
+#include "options.h"
 #include "toggle_bitmap.h"
 #include "selection_controller.h"
 #include "utils.h"
diff --git a/aegisub/src/audio_colorscheme.cpp b/aegisub/src/audio_colorscheme.cpp
index d849c68d9..c0666793d 100644
--- a/aegisub/src/audio_colorscheme.cpp
+++ b/aegisub/src/audio_colorscheme.cpp
@@ -40,7 +40,7 @@
 
 #include "audio_rendering_style.h"
 #include "colorspace.h"
-#include "main.h"
+#include "options.h"
 
 #include <libaegisub/exception.h>
 
diff --git a/aegisub/src/audio_controller.cpp b/aegisub/src/audio_controller.cpp
index b3fa9c03f..446fc626b 100644
--- a/aegisub/src/audio_controller.cpp
+++ b/aegisub/src/audio_controller.cpp
@@ -49,7 +49,7 @@
 #include "include/aegisub/audio_provider.h"
 #include "include/aegisub/context.h"
 #include "pen.h"
-#include "main.h"
+#include "options.h"
 #include "selection_controller.h"
 #include "standard_paths.h"
 #include "utils.h"
diff --git a/aegisub/src/audio_display.cpp b/aegisub/src/audio_display.cpp
index be3361856..5de97051b 100644
--- a/aegisub/src/audio_display.cpp
+++ b/aegisub/src/audio_display.cpp
@@ -54,7 +54,7 @@
 #include "compat.h"
 #include "include/aegisub/context.h"
 #include "include/aegisub/hotkey.h"
-#include "main.h"
+#include "options.h"
 #include "selection_controller.h"
 #include "utils.h"
 #include "video_context.h"
diff --git a/aegisub/src/audio_karaoke.cpp b/aegisub/src/audio_karaoke.cpp
index 546fbd2de..4fd1720c9 100644
--- a/aegisub/src/audio_karaoke.cpp
+++ b/aegisub/src/audio_karaoke.cpp
@@ -36,7 +36,7 @@
 #include "audio_timing.h"
 #include "compat.h"
 #include "libresrc/libresrc.h"
-#include "main.h"
+#include "options.h"
 #include "selection_controller.h"
 #include "utils.h"
 
diff --git a/aegisub/src/audio_marker.cpp b/aegisub/src/audio_marker.cpp
index 58d9e05e7..4e0caebc5 100644
--- a/aegisub/src/audio_marker.cpp
+++ b/aegisub/src/audio_marker.cpp
@@ -24,7 +24,7 @@
 #include "audio_marker.h"
 
 #include "include/aegisub/context.h"
-#include "main.h"
+#include "options.h"
 #include "pen.h"
 #include "video_context.h"
 
diff --git a/aegisub/src/audio_player.cpp b/aegisub/src/audio_player.cpp
index 8e2b90eaa..3d27ff9c7 100644
--- a/aegisub/src/audio_player.cpp
+++ b/aegisub/src/audio_player.cpp
@@ -45,7 +45,7 @@
 
 #include "audio_controller.h"
 #include "compat.h"
-#include "main.h"
+#include "options.h"
 
 AudioPlayer::AudioPlayer(AudioProvider *provider)
 : provider(provider)
diff --git a/aegisub/src/audio_player_alsa.cpp b/aegisub/src/audio_player_alsa.cpp
index b142cbdaf..c8f0ed5fd 100644
--- a/aegisub/src/audio_player_alsa.cpp
+++ b/aegisub/src/audio_player_alsa.cpp
@@ -44,7 +44,7 @@
 #include "include/aegisub/audio_provider.h"
 #include "compat.h"
 #include "frame_main.h"
-#include "main.h"
+#include "options.h"
 
 #include <algorithm>
 
diff --git a/aegisub/src/audio_player_dsound2.cpp b/aegisub/src/audio_player_dsound2.cpp
index 51a086ef7..379c03a44 100644
--- a/aegisub/src/audio_player_dsound2.cpp
+++ b/aegisub/src/audio_player_dsound2.cpp
@@ -35,7 +35,6 @@
 #include "config.h"
 
 #ifdef WITH_DIRECTSOUND
-
 #include <mmsystem.h>
 #include <process.h>
 #include <dsound.h>
@@ -48,6 +47,7 @@
 #include "include/aegisub/audio_provider.h"
 #include "frame_main.h"
 #include "main.h"
+#include "options.h"
 #include "utils.h"
 
 /// @brief RAII support class to init and de-init the COM library
diff --git a/aegisub/src/audio_player_oss.cpp b/aegisub/src/audio_player_oss.cpp
index 165d4d7b6..1c2d89ca4 100644
--- a/aegisub/src/audio_player_oss.cpp
+++ b/aegisub/src/audio_player_oss.cpp
@@ -43,7 +43,7 @@
 #include "audio_controller.h"
 #include "compat.h"
 #include "include/aegisub/audio_provider.h"
-#include "main.h"
+#include "options.h"
 #include "utils.h"
 
 DEFINE_SIMPLE_EXCEPTION(OSSError, agi::AudioPlayerOpenError, "audio/player/open/oss")
diff --git a/aegisub/src/audio_player_portaudio.cpp b/aegisub/src/audio_player_portaudio.cpp
index 63a40fb7e..27dbb5c21 100644
--- a/aegisub/src/audio_player_portaudio.cpp
+++ b/aegisub/src/audio_player_portaudio.cpp
@@ -44,7 +44,7 @@
 #include "audio_controller.h"
 #include "compat.h"
 #include "include/aegisub/audio_provider.h"
-#include "main.h"
+#include "options.h"
 #include "utils.h"
 
 DEFINE_SIMPLE_EXCEPTION(PortAudioError, agi::AudioPlayerOpenError, "audio/player/open/portaudio")
diff --git a/aegisub/src/audio_provider.cpp b/aegisub/src/audio_provider.cpp
index ae2c7c5fe..d9e7d2b5e 100644
--- a/aegisub/src/audio_provider.cpp
+++ b/aegisub/src/audio_provider.cpp
@@ -51,6 +51,7 @@
 #include "dialog_progress.h"
 #include "frame_main.h"
 #include "main.h"
+#include "options.h"
 #include "utils.h"
 
 #include <libaegisub/log.h>
diff --git a/aegisub/src/audio_provider_avs.cpp b/aegisub/src/audio_provider_avs.cpp
index 11354127e..dd3178f65 100644
--- a/aegisub/src/audio_provider_avs.cpp
+++ b/aegisub/src/audio_provider_avs.cpp
@@ -40,7 +40,7 @@
 #include "audio_controller.h"
 #include "charset_conv.h"
 #include "compat.h"
-#include "main.h"
+#include "options.h"
 #include "standard_paths.h"
 #include "utils.h"
 
diff --git a/aegisub/src/audio_provider_ffmpegsource.cpp b/aegisub/src/audio_provider_ffmpegsource.cpp
index b843e16af..79e07c072 100644
--- a/aegisub/src/audio_provider_ffmpegsource.cpp
+++ b/aegisub/src/audio_provider_ffmpegsource.cpp
@@ -46,7 +46,7 @@
 
 #include "audio_controller.h"
 #include "compat.h"
-#include "main.h"
+#include "options.h"
 
 /// @brief Constructor
 /// @param filename The filename to open
diff --git a/aegisub/src/audio_provider_hd.cpp b/aegisub/src/audio_provider_hd.cpp
index 72fce2df6..82553d6b9 100644
--- a/aegisub/src/audio_provider_hd.cpp
+++ b/aegisub/src/audio_provider_hd.cpp
@@ -45,7 +45,7 @@
 #include "audio_controller.h"
 #include "audio_provider_pcm.h"
 #include "compat.h"
-#include "main.h"
+#include "options.h"
 #include "standard_paths.h"
 #include "utils.h"
 
diff --git a/aegisub/src/audio_provider_ram.cpp b/aegisub/src/audio_provider_ram.cpp
index d36667a38..2e4cb79d8 100644
--- a/aegisub/src/audio_provider_ram.cpp
+++ b/aegisub/src/audio_provider_ram.cpp
@@ -38,7 +38,7 @@
 
 #include "audio_controller.h"
 #include "compat.h"
-#include "main.h"
+#include "options.h"
 #include "utils.h"
 
 #include <libaegisub/background_runner.h>
diff --git a/aegisub/src/audio_renderer_waveform.cpp b/aegisub/src/audio_renderer_waveform.cpp
index 736049bd4..103970d97 100644
--- a/aegisub/src/audio_renderer_waveform.cpp
+++ b/aegisub/src/audio_renderer_waveform.cpp
@@ -44,7 +44,7 @@
 #include "block_cache.h"
 #include "colorspace.h"
 #include "include/aegisub/audio_provider.h"
-#include "main.h"
+#include "options.h"
 
 enum {
 	/// Only render the peaks
diff --git a/aegisub/src/audio_timing_dialogue.cpp b/aegisub/src/audio_timing_dialogue.cpp
index 22bd500c3..e68ac2bff 100644
--- a/aegisub/src/audio_timing_dialogue.cpp
+++ b/aegisub/src/audio_timing_dialogue.cpp
@@ -42,7 +42,7 @@
 #include "audio_timing.h"
 #include "command/command.h"
 #include "include/aegisub/context.h"
-#include "main.h"
+#include "options.h"
 #include "pen.h"
 #include "selection_controller.h"
 #include "utils.h"
diff --git a/aegisub/src/audio_timing_karaoke.cpp b/aegisub/src/audio_timing_karaoke.cpp
index 5b3b725ea..8df22b3fb 100644
--- a/aegisub/src/audio_timing_karaoke.cpp
+++ b/aegisub/src/audio_timing_karaoke.cpp
@@ -31,7 +31,7 @@
 #include "audio_timing.h"
 #include "compat.h"
 #include "include/aegisub/context.h"
-#include "main.h"
+#include "options.h"
 #include "pen.h"
 #include "utils.h"
 
diff --git a/aegisub/src/auto4_base.cpp b/aegisub/src/auto4_base.cpp
index 01d5fa341..9345fb1e4 100644
--- a/aegisub/src/auto4_base.cpp
+++ b/aegisub/src/auto4_base.cpp
@@ -67,7 +67,7 @@
 #include "compat.h"
 #include "dialog_progress.h"
 #include "include/aegisub/context.h"
-#include "main.h"
+#include "options.h"
 #include "standard_paths.h"
 #include "string_codec.h"
 #include "subtitle_format.h"
diff --git a/aegisub/src/avisynth_wrap.cpp b/aegisub/src/avisynth_wrap.cpp
index 7472b43eb..bd8331db2 100644
--- a/aegisub/src/avisynth_wrap.cpp
+++ b/aegisub/src/avisynth_wrap.cpp
@@ -38,7 +38,7 @@
 #include "avisynth_wrap.h"
 
 #include "avisynth.h"
-#include "main.h"
+#include "options.h"
 
 // Allocate storage for and initialise static members
 namespace {
diff --git a/aegisub/src/base_grid.cpp b/aegisub/src/base_grid.cpp
index 6270aefc8..d60d827e5 100644
--- a/aegisub/src/base_grid.cpp
+++ b/aegisub/src/base_grid.cpp
@@ -56,7 +56,7 @@
 #include "audio_box.h"
 #include "compat.h"
 #include "frame_main.h"
-#include "main.h"
+#include "options.h"
 #include "utils.h"
 #include "video_context.h"
 #include "video_slider.h"
diff --git a/aegisub/src/command/app.cpp b/aegisub/src/command/app.cpp
index dc5227179..1af80f473 100644
--- a/aegisub/src/command/app.cpp
+++ b/aegisub/src/command/app.cpp
@@ -42,17 +42,17 @@
 
 #include <libaegisub/log.h>
 
-#include "../include/aegisub/context.h"
-#include "../main.h"
-
 #include "../audio_controller.h"
 #include "../compat.h"
 #include "../dialog_about.h"
 #include "../dialog_detached_video.h"
-#include "../dialog_manager.h"
 #include "../dialog_log.h"
+#include "../dialog_manager.h"
 #include "../dialog_version_check.h"
 #include "../frame_main.h"
+#include "../include/aegisub/context.h"
+#include "../main.h"
+#include "../options.h"
 #include "../preferences.h"
 #include "../utils.h"
 #include "../video_context.h"
diff --git a/aegisub/src/command/audio.cpp b/aegisub/src/command/audio.cpp
index 107514cd9..00c9402f3 100644
--- a/aegisub/src/command/audio.cpp
+++ b/aegisub/src/command/audio.cpp
@@ -49,7 +49,7 @@
 #include "../audio_timing.h"
 #include "../compat.h"
 #include "../include/aegisub/context.h"
-#include "../main.h"
+#include "../options.h"
 #include "../selection_controller.h"
 #include "../video_context.h"
 
diff --git a/aegisub/src/command/automation.cpp b/aegisub/src/command/automation.cpp
index 2e4b5a840..6d7e17148 100644
--- a/aegisub/src/command/automation.cpp
+++ b/aegisub/src/command/automation.cpp
@@ -39,13 +39,14 @@
 
 #include "command.h"
 
-#include "../main.h"
-#include "../include/aegisub/context.h"
+#include "../auto4_base.h"
 #include "../dialog_automation.h"
 #include "../dialog_manager.h"
-#include "../auto4_base.h"
-#include "../video_context.h"
 #include "../frame_main.h"
+#include "../include/aegisub/context.h"
+#include "../main.h"
+#include "../options.h"
+#include "../video_context.h"
 
 namespace {
 	using cmd::Command;
diff --git a/aegisub/src/command/edit.cpp b/aegisub/src/command/edit.cpp
index 9b5a5979c..8268b20b7 100644
--- a/aegisub/src/command/edit.cpp
+++ b/aegisub/src/command/edit.cpp
@@ -52,8 +52,8 @@
 #include "../dialog_colorpicker.h"
 #include "../dialog_paste_over.h"
 #include "../dialog_search_replace.h"
-#include "../main.h"
 #include "../include/aegisub/context.h"
+#include "../options.h"
 #include "../subs_edit_ctrl.h"
 #include "../subs_grid.h"
 #include "../text_selection_controller.h"
diff --git a/aegisub/src/command/grid.cpp b/aegisub/src/command/grid.cpp
index d0600e8d8..dffb8bb9d 100644
--- a/aegisub/src/command/grid.cpp
+++ b/aegisub/src/command/grid.cpp
@@ -42,9 +42,10 @@
 #include "../ass_file.h"
 #include "../audio_controller.h"
 #include "../audio_timing.h"
+#include "../frame_main.h"
 #include "../include/aegisub/context.h"
 #include "../main.h"
-#include "../frame_main.h"
+#include "../options.h"
 #include "../selection_controller.h"
 #include "../utils.h"
 
diff --git a/aegisub/src/command/help.cpp b/aegisub/src/command/help.cpp
index 1ba03e11f..c54c386c1 100644
--- a/aegisub/src/command/help.cpp
+++ b/aegisub/src/command/help.cpp
@@ -41,10 +41,10 @@
 #include <libaegisub/util_osx.h>
 
 #include "command.h"
-#include "../include/aegisub/context.h"
 
-#include "../help_button.h" // help_contents
-#include "../main.h"
+#include "../help_button.h"
+#include "../include/aegisub/context.h"
+#include "../options.h"
 
 namespace {
 	using cmd::Command;
diff --git a/aegisub/src/command/keyframe.cpp b/aegisub/src/command/keyframe.cpp
index 9245ae6fc..43f700ec3 100644
--- a/aegisub/src/command/keyframe.cpp
+++ b/aegisub/src/command/keyframe.cpp
@@ -41,9 +41,9 @@
 
 #include "command.h"
 
-#include "../include/aegisub/context.h"
-#include "../main.h"
 #include "../compat.h"
+#include "../include/aegisub/context.h"
+#include "../options.h"
 #include "../video_context.h"
 
 namespace {
diff --git a/aegisub/src/command/recent.cpp b/aegisub/src/command/recent.cpp
index 1cf54983b..6c6d4b33e 100644
--- a/aegisub/src/command/recent.cpp
+++ b/aegisub/src/command/recent.cpp
@@ -41,11 +41,12 @@
 
 #include "command.h"
 
-#include "../include/aegisub/context.h"
 #include "../audio_controller.h"
-#include "../main.h"
-#include "../frame_main.h"
 #include "../compat.h"
+#include "../frame_main.h"
+#include "../include/aegisub/context.h"
+#include "../main.h"
+#include "../options.h"
 #include "../video_context.h"
 
 namespace {
diff --git a/aegisub/src/command/subtitle.cpp b/aegisub/src/command/subtitle.cpp
index a802e1036..78a3482c6 100644
--- a/aegisub/src/command/subtitle.cpp
+++ b/aegisub/src/command/subtitle.cpp
@@ -57,10 +57,11 @@
 #include "../frame_main.h"
 #include "../include/aegisub/context.h"
 #include "../main.h"
+#include "../options.h"
 #include "../subs_grid.h"
 #include "../subtitle_format.h"
-#include "../video_context.h"
 #include "../utils.h"
+#include "../video_context.h"
 
 namespace {
 	using cmd::Command;
diff --git a/aegisub/src/command/time.cpp b/aegisub/src/command/time.cpp
index 534505213..2b3fc8c59 100644
--- a/aegisub/src/command/time.cpp
+++ b/aegisub/src/command/time.cpp
@@ -47,7 +47,7 @@
 #include "../dialog_manager.h"
 #include "../dialog_shift_times.h"
 #include "../include/aegisub/context.h"
-#include "../main.h"
+#include "../options.h"
 #include "../selection_controller.h"
 #include "../subs_grid.h"
 #include "../video_context.h"
diff --git a/aegisub/src/command/timecode.cpp b/aegisub/src/command/timecode.cpp
index bf937278d..60f728755 100644
--- a/aegisub/src/command/timecode.cpp
+++ b/aegisub/src/command/timecode.cpp
@@ -41,9 +41,9 @@
 
 #include "command.h"
 
-#include "../include/aegisub/context.h"
 #include "../compat.h"
-#include "../main.h"
+#include "../include/aegisub/context.h"
+#include "../options.h"
 #include "../video_context.h"
 
 namespace {
diff --git a/aegisub/src/command/tool.cpp b/aegisub/src/command/tool.cpp
index a72d97e35..8b215388b 100644
--- a/aegisub/src/command/tool.cpp
+++ b/aegisub/src/command/tool.cpp
@@ -41,22 +41,21 @@
 
 #include "command.h"
 
-#include "../include/aegisub/context.h"
-
-#include "../dialog_fonts_collector.h"
-#include "../standard_paths.h" // tool_assdraw
-#include "../video_context.h" // tool_font_collector
 #include "../compat.h"
 #include "../dialog_export.h"
+#include "../dialog_fonts_collector.h"
+#include "../dialog_kara_timing_copy.h"
 #include "../dialog_manager.h"
 #include "../dialog_resample.h"
 #include "../dialog_selection.h"
-#include "../dialog_styling_assistant.h"
 #include "../dialog_style_manager.h"
+#include "../dialog_styling_assistant.h"
 #include "../dialog_timing_processor.h"
 #include "../dialog_translation.h"
-#include "../dialog_kara_timing_copy.h"
+#include "../include/aegisub/context.h"
+#include "../standard_paths.h"
 #include "../subs_grid.h"
+#include "../video_context.h"
 
 namespace {
 	using cmd::Command;
diff --git a/aegisub/src/command/video.cpp b/aegisub/src/command/video.cpp
index 21f232e56..7a9bac113 100644
--- a/aegisub/src/command/video.cpp
+++ b/aegisub/src/command/video.cpp
@@ -47,14 +47,15 @@
 #include "../ass_dialogue.h"
 #include "../ass_time.h"
 #include "../compat.h"
-#include "../frame_main.h"
-#include "../main.h"
-#include "../include/aegisub/context.h"
 #include "../dialog_detached_video.h"
 #include "../dialog_dummy_video.h"
-#include "../dialog_manager.h"
 #include "../dialog_jumpto.h"
+#include "../dialog_manager.h"
 #include "../dialog_video_details.h"
+#include "../frame_main.h"
+#include "../include/aegisub/context.h"
+#include "../main.h"
+#include "../options.h"
 #include "../selection_controller.h"
 #include "../standard_paths.h"
 #include "../subs_grid.h"
diff --git a/aegisub/src/compat.cpp b/aegisub/src/compat.cpp
index b9ddd1e3c..c6b0bf96d 100644
--- a/aegisub/src/compat.cpp
+++ b/aegisub/src/compat.cpp
@@ -1,5 +1,5 @@
 #include "compat.h"
-#include "main.h"
+#include "options.h"
 
 #include <algorithm>
 
diff --git a/aegisub/src/dialog_attachments.cpp b/aegisub/src/dialog_attachments.cpp
index 9c5b1358c..920078f40 100644
--- a/aegisub/src/dialog_attachments.cpp
+++ b/aegisub/src/dialog_attachments.cpp
@@ -48,7 +48,7 @@
 #include "compat.h"
 #include "help_button.h"
 #include "libresrc/libresrc.h"
-#include "main.h"
+#include "options.h"
 #include "utils.h"
 
 #include <libaegisub/of_type_adaptor.h>
diff --git a/aegisub/src/dialog_automation.cpp b/aegisub/src/dialog_automation.cpp
index 164b1b8f8..33b379823 100644
--- a/aegisub/src/dialog_automation.cpp
+++ b/aegisub/src/dialog_automation.cpp
@@ -35,15 +35,6 @@
 
 #include "config.h"
 
-#include <algorithm>
-
-#include <wx/button.h>
-#include <wx/filedlg.h>
-#include <wx/filename.h>
-#include <wx/listctrl.h>
-#include <wx/log.h>
-#include <wx/msgdlg.h>
-
 #include "dialog_automation.h"
 
 #include "auto4_base.h"
@@ -52,9 +43,19 @@
 #include "help_button.h"
 #include "include/aegisub/context.h"
 #include "libresrc/libresrc.h"
+#include "options.h"
 #include "main.h"
 #include "subtitle_format.h"
 
+#include <algorithm>
+
+#include <wx/button.h>
+#include <wx/filedlg.h>
+#include <wx/filename.h>
+#include <wx/listctrl.h>
+#include <wx/log.h>
+#include <wx/msgdlg.h>
+
 using std::placeholders::_1;
 
 DialogAutomation::DialogAutomation(agi::Context *c)
diff --git a/aegisub/src/dialog_autosave.cpp b/aegisub/src/dialog_autosave.cpp
index b7b73b819..75beee9b1 100644
--- a/aegisub/src/dialog_autosave.cpp
+++ b/aegisub/src/dialog_autosave.cpp
@@ -20,7 +20,7 @@
 
 #include "compat.h"
 #include "libresrc/libresrc.h"
-#include "main.h"
+#include "options.h"
 #include "standard_paths.h"
 
 #include <boost/range/adaptor/map.hpp>
diff --git a/aegisub/src/dialog_colorpicker.cpp b/aegisub/src/dialog_colorpicker.cpp
index c6fa212ef..2d67787c9 100644
--- a/aegisub/src/dialog_colorpicker.cpp
+++ b/aegisub/src/dialog_colorpicker.cpp
@@ -67,7 +67,7 @@
 #include "dialog_colorpicker.h"
 #include "help_button.h"
 #include "libresrc/libresrc.h"
-#include "main.h"
+#include "options.h"
 #include "persist_location.h"
 #include "utils.h"
 
diff --git a/aegisub/src/dialog_detached_video.cpp b/aegisub/src/dialog_detached_video.cpp
index 555ebe83e..96249d53c 100644
--- a/aegisub/src/dialog_detached_video.cpp
+++ b/aegisub/src/dialog_detached_video.cpp
@@ -34,22 +34,22 @@
 
 #include "config.h"
 
-#include <wx/filename.h>
-#include <wx/sizer.h>
-#include <wx/display.h> /// Must be included last.
-
 #include "dialog_detached_video.h"
 
 #include "include/aegisub/context.h"
 #include "include/aegisub/hotkey.h"
 
-#include "main.h"
+#include "options.h"
 #include "persist_location.h"
 #include "utils.h"
 #include "video_box.h"
 #include "video_context.h"
 #include "video_display.h"
 
+#include <wx/filename.h>
+#include <wx/sizer.h>
+#include <wx/display.h> /// Must be included last.
+
 DialogDetachedVideo::DialogDetachedVideo(agi::Context *context)
 : wxDialog(context->parent, -1, "Detached Video", wxDefaultPosition, wxSize(400,300), wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER | wxMAXIMIZE_BOX | wxMINIMIZE_BOX | wxWANTS_CHARS)
 , context(context)
diff --git a/aegisub/src/dialog_dummy_video.cpp b/aegisub/src/dialog_dummy_video.cpp
index a1fe8dfcb..1ecabd7ea 100644
--- a/aegisub/src/dialog_dummy_video.cpp
+++ b/aegisub/src/dialog_dummy_video.cpp
@@ -38,7 +38,7 @@
 #include "colour_button.h"
 #include "help_button.h"
 #include "libresrc/libresrc.h"
-#include "main.h"
+#include "options.h"
 #include "video_provider_dummy.h"
 
 namespace {
diff --git a/aegisub/src/dialog_export_ebu3264.cpp b/aegisub/src/dialog_export_ebu3264.cpp
index c85393a7c..cfb8b9652 100644
--- a/aegisub/src/dialog_export_ebu3264.cpp
+++ b/aegisub/src/dialog_export_ebu3264.cpp
@@ -25,7 +25,7 @@
 
 #include <libaegisub/charset_conv.h>
 
-#include "main.h"
+#include "options.h"
 #include "text_file_writer.h"
 
 #include <wx/checkbox.h>
diff --git a/aegisub/src/dialog_fonts_collector.cpp b/aegisub/src/dialog_fonts_collector.cpp
index 6fd88e0c6..3a39b5199 100644
--- a/aegisub/src/dialog_fonts_collector.cpp
+++ b/aegisub/src/dialog_fonts_collector.cpp
@@ -31,7 +31,7 @@
 #include "help_button.h"
 #include "include/aegisub/context.h"
 #include "libresrc/libresrc.h"
-#include "main.h"
+#include "options.h"
 #include "scintilla_text_ctrl.h"
 #include "selection_controller.h"
 #include "standard_paths.h"
diff --git a/aegisub/src/dialog_kara_timing_copy.cpp b/aegisub/src/dialog_kara_timing_copy.cpp
index 5a8d24583..f9d26abb3 100644
--- a/aegisub/src/dialog_kara_timing_copy.cpp
+++ b/aegisub/src/dialog_kara_timing_copy.cpp
@@ -58,7 +58,7 @@
 #include "include/aegisub/context.h"
 #include "kana_table.h"
 #include "libresrc/libresrc.h"
-#include "main.h"
+#include "options.h"
 #include "selection_controller.h"
 #include "utils.h"
 
diff --git a/aegisub/src/dialog_paste_over.cpp b/aegisub/src/dialog_paste_over.cpp
index d8c998032..680fc1d65 100644
--- a/aegisub/src/dialog_paste_over.cpp
+++ b/aegisub/src/dialog_paste_over.cpp
@@ -44,7 +44,7 @@
 #include <wx/stattext.h>
 
 #include "help_button.h"
-#include "main.h"
+#include "options.h"
 
 DialogPasteOver::DialogPasteOver(wxWindow *parent)
 : wxDialog (parent, -1, _("Select Fields to Paste Over"))
diff --git a/aegisub/src/dialog_search_replace.cpp b/aegisub/src/dialog_search_replace.cpp
index d14606245..348c261f6 100644
--- a/aegisub/src/dialog_search_replace.cpp
+++ b/aegisub/src/dialog_search_replace.cpp
@@ -49,7 +49,7 @@
 #include "compat.h"
 #include "dialog_search_replace.h"
 #include "include/aegisub/context.h"
-#include "main.h"
+#include "options.h"
 #include "selection_controller.h"
 #include "text_selection_controller.h"
 #include "subs_edit_ctrl.h"
diff --git a/aegisub/src/dialog_selection.cpp b/aegisub/src/dialog_selection.cpp
index 6562295be..6b1eb7b9c 100644
--- a/aegisub/src/dialog_selection.cpp
+++ b/aegisub/src/dialog_selection.cpp
@@ -23,16 +23,6 @@
 
 #include "dialog_selection.h"
 
-#include <algorithm>
-
-#include <wx/checkbox.h>
-#include <wx/combobox.h>
-#include <wx/msgdlg.h>
-#include <wx/radiobox.h>
-#include <wx/radiobut.h>
-#include <wx/regex.h>
-#include <wx/textctrl.h>
-
 #include "ass_dialogue.h"
 #include "ass_file.h"
 #include "compat.h"
@@ -41,10 +31,21 @@
 #include "include/aegisub/context.h"
 #include "libresrc/libresrc.h"
 #include "main.h"
+#include "options.h"
 #include "selection_controller.h"
 
 #include <libaegisub/of_type_adaptor.h>
 
+#include <algorithm>
+
+#include <wx/checkbox.h>
+#include <wx/combobox.h>
+#include <wx/msgdlg.h>
+#include <wx/radiobox.h>
+#include <wx/radiobut.h>
+#include <wx/regex.h>
+#include <wx/textctrl.h>
+
 enum {
 	ACTION_SET = 0,
 	ACTION_ADD,
diff --git a/aegisub/src/dialog_shift_times.cpp b/aegisub/src/dialog_shift_times.cpp
index 5da7a7250..da1f62b8e 100644
--- a/aegisub/src/dialog_shift_times.cpp
+++ b/aegisub/src/dialog_shift_times.cpp
@@ -49,7 +49,7 @@
 #include "include/aegisub/context.h"
 #include "help_button.h"
 #include "libresrc/libresrc.h"
-#include "main.h"
+#include "options.h"
 #include "standard_paths.h"
 #include "timeedit_ctrl.h"
 #include "video_context.h"
diff --git a/aegisub/src/dialog_spellchecker.cpp b/aegisub/src/dialog_spellchecker.cpp
index 2f79aacf7..f7489d9b0 100644
--- a/aegisub/src/dialog_spellchecker.cpp
+++ b/aegisub/src/dialog_spellchecker.cpp
@@ -30,7 +30,7 @@
 #include "include/aegisub/context.h"
 #include "include/aegisub/spellchecker.h"
 #include "libresrc/libresrc.h"
-#include "main.h"
+#include "options.h"
 #include "selection_controller.h"
 #include "text_selection_controller.h"
 #include "subs_edit_ctrl.h"
diff --git a/aegisub/src/dialog_style_editor.cpp b/aegisub/src/dialog_style_editor.cpp
index 71f50036e..6ed551a16 100644
--- a/aegisub/src/dialog_style_editor.cpp
+++ b/aegisub/src/dialog_style_editor.cpp
@@ -53,7 +53,7 @@
 #include "include/aegisub/context.h"
 #include "include/aegisub/subtitles_provider.h"
 #include "libresrc/libresrc.h"
-#include "main.h"
+#include "options.h"
 #include "persist_location.h"
 #include "selection_controller.h"
 #include "subs_grid.h"
diff --git a/aegisub/src/dialog_style_manager.cpp b/aegisub/src/dialog_style_manager.cpp
index 84bc3e64f..bce13eed0 100644
--- a/aegisub/src/dialog_style_manager.cpp
+++ b/aegisub/src/dialog_style_manager.cpp
@@ -58,7 +58,7 @@
 #include "include/aegisub/context.h"
 #include "help_button.h"
 #include "libresrc/libresrc.h"
-#include "main.h"
+#include "options.h"
 #include "persist_location.h"
 #include "selection_controller.h"
 #include "standard_paths.h"
diff --git a/aegisub/src/dialog_text_import.cpp b/aegisub/src/dialog_text_import.cpp
index a6d4dfc53..cd864fb75 100644
--- a/aegisub/src/dialog_text_import.cpp
+++ b/aegisub/src/dialog_text_import.cpp
@@ -41,7 +41,7 @@
 #include <wx/textctrl.h>
 
 #include "compat.h"
-#include "main.h"
+#include "options.h"
 
 DialogTextImport::DialogTextImport()
 : wxDialog(nullptr , -1, _("Text import options"))
diff --git a/aegisub/src/dialog_timing_processor.cpp b/aegisub/src/dialog_timing_processor.cpp
index 4f0fbcef0..991354066 100644
--- a/aegisub/src/dialog_timing_processor.cpp
+++ b/aegisub/src/dialog_timing_processor.cpp
@@ -57,7 +57,7 @@
 #include "help_button.h"
 #include "include/aegisub/context.h"
 #include "libresrc/libresrc.h"
-#include "main.h"
+#include "options.h"
 #include "selection_controller.h"
 #include "utils.h"
 #include "video_context.h"
diff --git a/aegisub/src/dialog_version_check.cpp b/aegisub/src/dialog_version_check.cpp
index 867711818..f35f61571 100644
--- a/aegisub/src/dialog_version_check.cpp
+++ b/aegisub/src/dialog_version_check.cpp
@@ -66,7 +66,7 @@
 #include <wx/sstream.h>
 
 #include "compat.h"
-#include "main.h"
+#include "options.h"
 #include "string_codec.h"
 #include "version.h"
 
diff --git a/aegisub/src/ffmpegsource_common.cpp b/aegisub/src/ffmpegsource_common.cpp
index 7618c9e2e..106bb157a 100644
--- a/aegisub/src/ffmpegsource_common.cpp
+++ b/aegisub/src/ffmpegsource_common.cpp
@@ -41,6 +41,7 @@
 #include "dialog_progress.h"
 #include "frame_main.h"
 #include "main.h"
+#include "options.h"
 #include "standard_paths.h"
 #include "utils.h"
 
diff --git a/aegisub/src/frame_main.cpp b/aegisub/src/frame_main.cpp
index a1b33c669..a5bcf8680 100644
--- a/aegisub/src/frame_main.cpp
+++ b/aegisub/src/frame_main.cpp
@@ -64,6 +64,7 @@
 #include "help_button.h"
 #include "libresrc/libresrc.h"
 #include "main.h"
+#include "options.h"
 #include "standard_paths.h"
 #include "subs_edit_box.h"
 #include "subs_edit_ctrl.h"
@@ -231,7 +232,6 @@ FrameMain::FrameMain (wxArrayString args)
 	StartupLog("Initializing context frames");
 	context->parent = this;
 	context->previousFocus = 0;
-	wxGetApp().frame = this;
 
 	StartupLog("Install PNG handler");
 	wxImage::AddHandler(new wxPNGHandler);
diff --git a/aegisub/src/hotkey.cpp b/aegisub/src/hotkey.cpp
index 50fec7a1c..6431985cc 100644
--- a/aegisub/src/hotkey.cpp
+++ b/aegisub/src/hotkey.cpp
@@ -25,7 +25,7 @@
 #include "libresrc/libresrc.h"
 #include "command/command.h"
 #include "compat.h"
-#include "main.h"
+#include "options.h"
 #include "standard_paths.h"
 
 namespace {
diff --git a/aegisub/src/main.cpp b/aegisub/src/main.cpp
index 249aeaba2..e45983b83 100644
--- a/aegisub/src/main.cpp
+++ b/aegisub/src/main.cpp
@@ -34,16 +34,7 @@
 
 #include "config.h"
 
-#include <sstream>
-
-#include <wx/clipbrd.h>
-#include <wx/config.h>
-#include <wx/datetime.h>
-#include <wx/filefn.h>
-#include <wx/filename.h>
-#include <wx/msgdlg.h>
-#include <wx/stdpaths.h>
-#include <wx/utils.h>
+#include "main.h"
 
 #include "include/aegisub/menu.h"
 #include "command/command.h"
@@ -61,8 +52,8 @@
 #include "export_fixstyle.h"
 #include "export_framerate.h"
 #include "frame_main.h"
-#include "main.h"
 #include "libresrc/libresrc.h"
+#include "options.h"
 #include "plugin_manager.h"
 #include "standard_paths.h"
 #include "subtitle_format.h"
@@ -75,6 +66,17 @@
 #include <libaegisub/hotkey.h>
 #include <libaegisub/scoped_ptr.h>
 
+#include <sstream>
+
+#include <wx/clipbrd.h>
+#include <wx/config.h>
+#include <wx/datetime.h>
+#include <wx/filefn.h>
+#include <wx/filename.h>
+#include <wx/msgdlg.h>
+#include <wx/stdpaths.h>
+#include <wx/utils.h>
+
 namespace config {
 	agi::Options *opt = 0;
 	agi::MRUManager *mru = 0;
diff --git a/aegisub/src/main.h b/aegisub/src/main.h
index 49d84ccc7..20c137804 100644
--- a/aegisub/src/main.h
+++ b/aegisub/src/main.h
@@ -37,9 +37,6 @@
 #include <wx/stackwalk.h>
 
 #include "aegisublocale.h"
-#include <libaegisub/mru.h>
-#include <libaegisub/option.h>
-#include <libaegisub/option_value.h>
 
 #ifndef wxUSE_EXCEPTIONS
 #error wxWidgets is compiled without exceptions support. Aegisub requires exceptions support in wxWidgets to run safely.
@@ -48,23 +45,8 @@
 class FrameMain;
 class PluginManager;
 
-/// For holding all configuration-related objects and values.
-namespace config {
-	extern agi::Options *opt; 		///< Options
-	extern agi::MRUManager *mru;	///< Most Recently Used
-}
-
 namespace Automation4 { class AutoloadScriptManager; }
 
-/// Macro to get OptionValue object.
-#define OPT_GET(x) const_cast<const agi::OptionValue*>(config::opt->Get(x))
-
-/// Macro to set OptionValue object.
-#define OPT_SET(x) config::opt->Get(x)
-
-/// Macro to subscribe to OptionValue changes
-#define OPT_SUB(x, ...) config::opt->Get(x)->Subscribe(__VA_ARGS__)
-
 class AegisubApp: public wxApp {
 	PluginManager *plugins;
 
diff --git a/aegisub/src/menu.cpp b/aegisub/src/menu.cpp
index 4c743dd96..f968b13b9 100644
--- a/aegisub/src/menu.cpp
+++ b/aegisub/src/menu.cpp
@@ -28,6 +28,7 @@
 #include "compat.h"
 #include "libresrc/libresrc.h"
 #include "main.h"
+#include "options.h"
 #include "standard_paths.h"
 
 #include <libaegisub/hotkey.h>
diff --git a/aegisub/src/options.h b/aegisub/src/options.h
new file mode 100644
index 000000000..6c3261fc5
--- /dev/null
+++ b/aegisub/src/options.h
@@ -0,0 +1,34 @@
+// Copyright (c) 2011, Thomas Goyne <plorkyeran@aegisub.org>
+//
+// Permission to use, copy, modify, and distribute this software for any
+// purpose with or without fee is hereby granted, provided that the above
+// copyright notice and this permission notice appear in all copies.
+//
+// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+//
+// Aegisub Project http://www.aegisub.org/
+
+#include <libaegisub/mru.h>
+#include <libaegisub/option.h>
+#include <libaegisub/option_value.h>
+
+/// For holding all configuration-related objects and values.
+namespace config {
+	extern agi::Options *opt;    ///< Options
+	extern agi::MRUManager *mru; ///< Most Recently Used
+}
+
+/// Macro to get OptionValue object
+#define OPT_GET(x) const_cast<const agi::OptionValue*>(config::opt->Get(x))
+
+/// Macro to set OptionValue object
+#define OPT_SET(x) config::opt->Get(x)
+
+/// Macro to subscribe to OptionValue changes
+#define OPT_SUB(x, ...) config::opt->Get(x)->Subscribe(__VA_ARGS__)
diff --git a/aegisub/src/pen.cpp b/aegisub/src/pen.cpp
index fed982b30..f51fdedc3 100644
--- a/aegisub/src/pen.cpp
+++ b/aegisub/src/pen.cpp
@@ -19,7 +19,7 @@
 #include "pen.h"
 
 #include "compat.h"
-#include "main.h"
+#include "options.h"
 
 void Pen::OnColourChanged(agi::OptionValue const& opt) {
 	impl.SetColour(to_wx(opt.GetColor()));
diff --git a/aegisub/src/persist_location.cpp b/aegisub/src/persist_location.cpp
index 901bf63df..4db24aac8 100644
--- a/aegisub/src/persist_location.cpp
+++ b/aegisub/src/persist_location.cpp
@@ -22,7 +22,7 @@
 
 #include "persist_location.h"
 
-#include "main.h"
+#include "options.h"
 
 #include <wx/dialog.h>
 #include <wx/display.h>
diff --git a/aegisub/src/preferences.cpp b/aegisub/src/preferences.cpp
index e067feca2..c6c3eed93 100644
--- a/aegisub/src/preferences.cpp
+++ b/aegisub/src/preferences.cpp
@@ -50,7 +50,7 @@
 #include "include/aegisub/hotkey.h"
 #include "include/aegisub/subtitles_provider.h"
 #include "libresrc/libresrc.h"
-#include "main.h"
+#include "options.h"
 #include "preferences_base.h"
 #include "video_provider_manager.h"
 
diff --git a/aegisub/src/preferences_base.cpp b/aegisub/src/preferences_base.cpp
index ec77942ee..bdc4f24ea 100644
--- a/aegisub/src/preferences_base.cpp
+++ b/aegisub/src/preferences_base.cpp
@@ -39,7 +39,7 @@
 #include "include/aegisub/audio_player.h"
 #include "include/aegisub/audio_provider.h"
 #include "libresrc/libresrc.h"
-#include "main.h"
+#include "options.h"
 #include "preferences.h"
 #include "standard_paths.h"
 #include "video_provider_manager.h"
diff --git a/aegisub/src/spellchecker.cpp b/aegisub/src/spellchecker.cpp
index 28e4ffbc3..01073f730 100644
--- a/aegisub/src/spellchecker.cpp
+++ b/aegisub/src/spellchecker.cpp
@@ -40,7 +40,7 @@
 
 #include "compat.h"
 #include "include/aegisub/spellchecker.h"
-#include "main.h"
+#include "options.h"
 
 agi::SpellChecker *SpellCheckerFactory::GetSpellChecker() {
 	std::vector<std::string> list = GetClasses(OPT_GET("Tool/Spell Checker/Backend")->GetString());
diff --git a/aegisub/src/spellchecker_hunspell.cpp b/aegisub/src/spellchecker_hunspell.cpp
index 468f54a80..fd71c0359 100644
--- a/aegisub/src/spellchecker_hunspell.cpp
+++ b/aegisub/src/spellchecker_hunspell.cpp
@@ -39,7 +39,7 @@
 
 #include "charset_conv.h"
 #include "compat.h"
-#include "main.h"
+#include "options.h"
 #include "standard_paths.h"
 
 HunspellSpellChecker::HunspellSpellChecker()
diff --git a/aegisub/src/subs_edit_box.cpp b/aegisub/src/subs_edit_box.cpp
index fd156ffb2..e992cbd0c 100644
--- a/aegisub/src/subs_edit_box.cpp
+++ b/aegisub/src/subs_edit_box.cpp
@@ -57,7 +57,7 @@
 #include "include/aegisub/context.h"
 #include "include/aegisub/hotkey.h"
 #include "libresrc/libresrc.h"
-#include "main.h"
+#include "options.h"
 #include "placeholder_ctrl.h"
 #include "scintilla_text_selection_controller.h"
 #include "subs_edit_ctrl.h"
diff --git a/aegisub/src/subs_edit_ctrl.cpp b/aegisub/src/subs_edit_ctrl.cpp
index af64ad997..3ec4c5544 100644
--- a/aegisub/src/subs_edit_ctrl.cpp
+++ b/aegisub/src/subs_edit_ctrl.cpp
@@ -47,7 +47,7 @@
 #include "ass_file.h"
 #include "command/command.h"
 #include "compat.h"
-#include "main.h"
+#include "options.h"
 #include "include/aegisub/context.h"
 #include "include/aegisub/spellchecker.h"
 #include "selection_controller.h"
diff --git a/aegisub/src/subs_grid.cpp b/aegisub/src/subs_grid.cpp
index c68f4bedc..f5b872543 100644
--- a/aegisub/src/subs_grid.cpp
+++ b/aegisub/src/subs_grid.cpp
@@ -48,7 +48,7 @@
 
 #include "ass_dialogue.h"
 #include "ass_file.h"
-#include "main.h"
+#include "options.h"
 #include "utils.h"
 #include "video_context.h"
 
diff --git a/aegisub/src/subtitle_format_ebu3264.cpp b/aegisub/src/subtitle_format_ebu3264.cpp
index 183343083..babac3f5d 100644
--- a/aegisub/src/subtitle_format_ebu3264.cpp
+++ b/aegisub/src/subtitle_format_ebu3264.cpp
@@ -40,7 +40,7 @@
 #include "ass_style.h"
 #include "compat.h"
 #include "dialog_export_ebu3264.h"
-#include "main.h"
+#include "options.h"
 #include "text_file_writer.h"
 
 namespace
diff --git a/aegisub/src/subtitle_format_ttxt.cpp b/aegisub/src/subtitle_format_ttxt.cpp
index 464927217..ea5d41998 100644
--- a/aegisub/src/subtitle_format_ttxt.cpp
+++ b/aegisub/src/subtitle_format_ttxt.cpp
@@ -42,7 +42,7 @@
 #include "ass_file.h"
 #include "ass_time.h"
 #include "compat.h"
-#include "main.h"
+#include "options.h"
 
 #include <libaegisub/of_type_adaptor.h>
 #include <boost/range/adaptor/reversed.hpp>
diff --git a/aegisub/src/subtitle_format_txt.cpp b/aegisub/src/subtitle_format_txt.cpp
index 99449811b..8d0cce74a 100644
--- a/aegisub/src/subtitle_format_txt.cpp
+++ b/aegisub/src/subtitle_format_txt.cpp
@@ -40,7 +40,7 @@
 #include "ass_file.h"
 #include "compat.h"
 #include "dialog_text_import.h"
-#include "main.h"
+#include "options.h"
 #include "text_file_reader.h"
 #include "text_file_writer.h"
 #include "utils.h"
diff --git a/aegisub/src/subtitles_provider.cpp b/aegisub/src/subtitles_provider.cpp
index 426209adf..163451433 100644
--- a/aegisub/src/subtitles_provider.cpp
+++ b/aegisub/src/subtitles_provider.cpp
@@ -35,7 +35,7 @@
 #include "config.h"
 
 #include "compat.h"
-#include "main.h"
+#include "options.h"
 #ifdef WITH_CSRI
 #include "subtitles_provider_csri.h"
 #endif
diff --git a/aegisub/src/text_file_writer.cpp b/aegisub/src/text_file_writer.cpp
index 815c52fde..98a95b04d 100644
--- a/aegisub/src/text_file_writer.cpp
+++ b/aegisub/src/text_file_writer.cpp
@@ -40,7 +40,7 @@
 
 #include "charset_conv.h"
 #include "compat.h"
-#include "main.h"
+#include "options.h"
 #include "text_file_writer.h"
 
 TextFileWriter::TextFileWriter(wxString const& filename, wxString encoding)
diff --git a/aegisub/src/thesaurus.cpp b/aegisub/src/thesaurus.cpp
index 53708b160..4607d71f0 100644
--- a/aegisub/src/thesaurus.cpp
+++ b/aegisub/src/thesaurus.cpp
@@ -31,7 +31,7 @@
 #include <libaegisub/util.h>
 
 #include "compat.h"
-#include "main.h"
+#include "options.h"
 #include "standard_paths.h"
 
 Thesaurus::Thesaurus()
diff --git a/aegisub/src/timeedit_ctrl.cpp b/aegisub/src/timeedit_ctrl.cpp
index ef4366a84..67c53e016 100644
--- a/aegisub/src/timeedit_ctrl.cpp
+++ b/aegisub/src/timeedit_ctrl.cpp
@@ -46,7 +46,7 @@
 #include "ass_time.h"
 #include "compat.h"
 #include "include/aegisub/context.h"
-#include "main.h"
+#include "options.h"
 #include "utils.h"
 #include "video_context.h"
 
diff --git a/aegisub/src/toolbar.cpp b/aegisub/src/toolbar.cpp
index 5cd6e1eed..40b772888 100644
--- a/aegisub/src/toolbar.cpp
+++ b/aegisub/src/toolbar.cpp
@@ -25,7 +25,7 @@
 #include "include/aegisub/context.h"
 #include "include/aegisub/hotkey.h"
 #include "libresrc/libresrc.h"
-#include "main.h"
+#include "options.h"
 
 #include <libaegisub/hotkey.h>
 #include <libaegisub/json.h>
diff --git a/aegisub/src/utils.cpp b/aegisub/src/utils.cpp
index f8351f197..e0a18df10 100644
--- a/aegisub/src/utils.cpp
+++ b/aegisub/src/utils.cpp
@@ -54,7 +54,7 @@
 #endif
 
 #include "compat.h"
-#include "main.h"
+#include "options.h"
 
 wxDEFINE_EVENT(EVT_CALL_THUNK, wxThreadEvent);
 
diff --git a/aegisub/src/utils.h b/aegisub/src/utils.h
index 4330b845c..1ed48b3b3 100644
--- a/aegisub/src/utils.h
+++ b/aegisub/src/utils.h
@@ -44,6 +44,7 @@
 
 #include <wx/app.h>
 #include <wx/icon.h>
+#include <wx/event.h>
 #include <wx/thread.h>
 
 class wxMouseEvent;
diff --git a/aegisub/src/video_box.cpp b/aegisub/src/video_box.cpp
index 7835805e1..035b085e2 100644
--- a/aegisub/src/video_box.cpp
+++ b/aegisub/src/video_box.cpp
@@ -54,7 +54,7 @@
 #include "command/command.h"
 #include "compat.h"
 #include "libresrc/libresrc.h"
-#include "main.h"
+#include "options.h"
 #include "selection_controller.h"
 #include "toggle_bitmap.h"
 #include "tooltip_manager.h"
diff --git a/aegisub/src/video_context.cpp b/aegisub/src/video_context.cpp
index a79490690..5970e68de 100644
--- a/aegisub/src/video_context.cpp
+++ b/aegisub/src/video_context.cpp
@@ -53,8 +53,8 @@
 #include "compat.h"
 #include "include/aegisub/context.h"
 #include "include/aegisub/video_provider.h"
-#include "main.h"
 #include "mkv_wrap.h"
+#include "options.h"
 #include "selection_controller.h"
 #include "standard_paths.h"
 #include "time_range.h"
diff --git a/aegisub/src/video_display.cpp b/aegisub/src/video_display.cpp
index 6f937b3ea..ce1963b89 100644
--- a/aegisub/src/video_display.cpp
+++ b/aegisub/src/video_display.cpp
@@ -57,7 +57,7 @@
 #include "include/aegisub/context.h"
 #include "include/aegisub/hotkey.h"
 #include "include/aegisub/menu.h"
-#include "main.h"
+#include "options.h"
 #include "spline_curve.h"
 #include "threaded_frame_source.h"
 #include "utils.h"
diff --git a/aegisub/src/video_provider_avs.cpp b/aegisub/src/video_provider_avs.cpp
index 670d8b238..3fd4a0df1 100644
--- a/aegisub/src/video_provider_avs.cpp
+++ b/aegisub/src/video_provider_avs.cpp
@@ -49,7 +49,7 @@
 
 #include "charset_conv.h"
 #include "compat.h"
-#include "main.h"
+#include "options.h"
 #include "standard_paths.h"
 
 AvisynthVideoProvider::AvisynthVideoProvider(wxString filename)
diff --git a/aegisub/src/video_provider_cache.cpp b/aegisub/src/video_provider_cache.cpp
index 9c929a27b..9891210d8 100644
--- a/aegisub/src/video_provider_cache.cpp
+++ b/aegisub/src/video_provider_cache.cpp
@@ -36,7 +36,7 @@
 
 #include "video_provider_cache.h"
 
-#include "main.h"
+#include "options.h"
 #include "video_frame.h"
 
 #include <algorithm>
diff --git a/aegisub/src/video_provider_ffmpegsource.cpp b/aegisub/src/video_provider_ffmpegsource.cpp
index 3d2cb9418..cd9f810c4 100644
--- a/aegisub/src/video_provider_ffmpegsource.cpp
+++ b/aegisub/src/video_provider_ffmpegsource.cpp
@@ -35,10 +35,7 @@
 #include "config.h"
 
 #ifdef WITH_FFMS2
-
-#ifdef __WINDOWS__
-#include <objbase.h>
-#endif
+#include "video_provider_ffmpegsource.h"
 
 #include <map>
 
@@ -48,10 +45,9 @@
 
 #include "aegisub_endian.h"
 #include "compat.h"
-#include "main.h"
+#include "options.h"
 #include "utils.h"
 #include "video_context.h"
-#include "video_provider_ffmpegsource.h"
 
 /// @brief Constructor
 /// @param filename The filename to open
diff --git a/aegisub/src/video_provider_manager.cpp b/aegisub/src/video_provider_manager.cpp
index 070c7c340..7f630f6c6 100644
--- a/aegisub/src/video_provider_manager.cpp
+++ b/aegisub/src/video_provider_manager.cpp
@@ -37,7 +37,7 @@
 #include <libaegisub/log.h>
 
 #include "compat.h"
-#include "main.h"
+#include "options.h"
 
 #ifdef WITH_AVISYNTH
 #include "video_provider_avs.h"
diff --git a/aegisub/src/video_slider.cpp b/aegisub/src/video_slider.cpp
index 2162c46c1..05da82f77 100644
--- a/aegisub/src/video_slider.cpp
+++ b/aegisub/src/video_slider.cpp
@@ -39,7 +39,7 @@
 
 #include "include/aegisub/context.h"
 #include "include/aegisub/hotkey.h"
-#include "main.h"
+#include "options.h"
 #include "subs_grid.h"
 #include "utils.h"
 #include "video_context.h"
diff --git a/aegisub/src/visual_tool.cpp b/aegisub/src/visual_tool.cpp
index 82a2b8d04..ad6d37b0a 100644
--- a/aegisub/src/visual_tool.cpp
+++ b/aegisub/src/visual_tool.cpp
@@ -30,7 +30,7 @@
 #include "ass_time.h"
 #include "compat.h"
 #include "include/aegisub/context.h"
-#include "main.h"
+#include "options.h"
 #include "utils.h"
 #include "video_context.h"
 #include "video_display.h"
diff --git a/aegisub/src/visual_tool_drag.cpp b/aegisub/src/visual_tool_drag.cpp
index 2297525b7..29c3b97c4 100644
--- a/aegisub/src/visual_tool_drag.cpp
+++ b/aegisub/src/visual_tool_drag.cpp
@@ -32,7 +32,7 @@
 #include "ass_file.h"
 #include "include/aegisub/context.h"
 #include "libresrc/libresrc.h"
-#include "main.h"
+#include "options.h"
 #include "utils.h"
 #include "video_context.h"
 #include "video_display.h"
diff --git a/aegisub/src/visual_tool_vector_clip.cpp b/aegisub/src/visual_tool_vector_clip.cpp
index d63beec7a..5039396c7 100644
--- a/aegisub/src/visual_tool_vector_clip.cpp
+++ b/aegisub/src/visual_tool_vector_clip.cpp
@@ -29,7 +29,7 @@
 #include "ass_dialogue.h"
 #include "include/aegisub/context.h"
 #include "libresrc/libresrc.h"
-#include "main.h"
+#include "options.h"
 #include "selection_controller.h"
 #include "utils.h"
 
-- 
GitLab