UI: Add ability to disable hotkeys when not in focus

master
Jonathan Baecker 2019-07-22 01:20:12 -07:00 committed by jp9000
parent 985772d915
commit 19464e6552
5 changed files with 89 additions and 38 deletions

View File

@ -831,7 +831,10 @@ Basic.Settings.Advanced.Network="Network"
Basic.Settings.Advanced.Network.BindToIP="Bind to IP" Basic.Settings.Advanced.Network.BindToIP="Bind to IP"
Basic.Settings.Advanced.Network.EnableNewSocketLoop="Enable new networking code" Basic.Settings.Advanced.Network.EnableNewSocketLoop="Enable new networking code"
Basic.Settings.Advanced.Network.EnableLowLatencyMode="Low latency mode" Basic.Settings.Advanced.Network.EnableLowLatencyMode="Low latency mode"
Basic.Settings.Advanced.Hotkeys.HotkeyFocusBehavior="Hotkey Focus Behavior"
Basic.Settings.Advanced.Hotkeys.NeverDisableHotkeys="Never disable hotkeys"
Basic.Settings.Advanced.Hotkeys.DisableHotkeysInFocus="Disable hotkeys when main window is in focus" Basic.Settings.Advanced.Hotkeys.DisableHotkeysInFocus="Disable hotkeys when main window is in focus"
Basic.Settings.Advanced.Hotkeys.DisableHotkeysOutOfFocus="Disable hotkeys when main window is not in focus"
Basic.Settings.Advanced.AutoRemux="Automatically remux to mp4" Basic.Settings.Advanced.AutoRemux="Automatically remux to mp4"
Basic.Settings.Advanced.AutoRemux.MP4="(record as mkv)" Basic.Settings.Advanced.AutoRemux.MP4="(record as mkv)"

View File

@ -151,8 +151,8 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>806</width> <width>803</width>
<height>1225</height> <height>954</height>
</rect> </rect>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout_19"> <layout class="QVBoxLayout" name="verticalLayout_19">
@ -1173,8 +1173,8 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>813</width> <width>601</width>
<height>761</height> <height>631</height>
</rect> </rect>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout_21"> <layout class="QVBoxLayout" name="verticalLayout_21">
@ -3621,8 +3621,8 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>767</width> <width>555</width>
<height>582</height> <height>469</height>
</rect> </rect>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout_50"> <layout class="QVBoxLayout" name="verticalLayout_50">
@ -4436,9 +4436,9 @@
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>-114</y>
<width>806</width> <width>803</width>
<height>933</height> <height>761</height>
</rect> </rect>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout_23"> <layout class="QVBoxLayout" name="verticalLayout_23">
@ -5136,17 +5136,23 @@
<string>Basic.Settings.Hotkeys</string> <string>Basic.Settings.Hotkeys</string>
</property> </property>
<layout class="QFormLayout" name="formLayout_33"> <layout class="QFormLayout" name="formLayout_33">
<property name="labelAlignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="topMargin"> <property name="topMargin">
<number>2</number> <number>2</number>
</property> </property>
<item row="0" column="1"> <item row="0" column="0">
<widget class="QCheckBox" name="disableFocusHotkeys"> <widget class="QLabel" name="label_21">
<property name="text"> <property name="text">
<string>Basic.Settings.Advanced.Hotkeys.DisableHotkeysInFocus</string> <string>Basic.Settings.Advanced.Hotkeys.HotkeyFocusBehavior</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="0" column="0"> <item row="0" column="1">
<widget class="QComboBox" name="hotkeyFocusType"/>
</item>
<item row="1" column="0">
<spacer name="horizontalSpacer_14"> <spacer name="horizontalSpacer_14">
<property name="orientation"> <property name="orientation">
<enum>Qt::Horizontal</enum> <enum>Qt::Horizontal</enum>
@ -5154,7 +5160,7 @@
<property name="sizeHint" stdset="0"> <property name="sizeHint" stdset="0">
<size> <size>
<width>170</width> <width>170</width>
<height>20</height> <height>0</height>
</size> </size>
</property> </property>
</spacer> </spacer>
@ -5399,7 +5405,6 @@
<tabstop>enableNewSocketLoop</tabstop> <tabstop>enableNewSocketLoop</tabstop>
<tabstop>enableLowLatencyMode</tabstop> <tabstop>enableLowLatencyMode</tabstop>
<tabstop>browserHWAccel</tabstop> <tabstop>browserHWAccel</tabstop>
<tabstop>disableFocusHotkeys</tabstop>
</tabstops> </tabstops>
<resources> <resources>
<include location="obs.qrc"/> <include location="obs.qrc"/>

View File

@ -432,6 +432,9 @@ bool OBSApp::InitGlobalConfigDefaults()
"CurrentTheme", DEFAULT_THEME); "CurrentTheme", DEFAULT_THEME);
} }
config_set_default_string(globalConfig, "General", "HotkeyFocusType",
"NeverDisableHotkeys");
config_set_default_bool(globalConfig, "BasicWindow", config_set_default_bool(globalConfig, "BasicWindow",
"VerticalVolControl", false); "VerticalVolControl", false);
@ -699,9 +702,10 @@ bool OBSApp::InitGlobalConfig()
} }
} }
uint32_t lastVersion =
config_get_int(globalConfig, "General", "LastVersion");
if (!config_has_user_value(globalConfig, "General", "Pre19Defaults")) { if (!config_has_user_value(globalConfig, "General", "Pre19Defaults")) {
uint32_t lastVersion =
config_get_int(globalConfig, "General", "LastVersion");
bool useOldDefaults = lastVersion && bool useOldDefaults = lastVersion &&
lastVersion < lastVersion <
MAKE_SEMANTIC_VERSION(19, 0, 0); MAKE_SEMANTIC_VERSION(19, 0, 0);
@ -712,8 +716,6 @@ bool OBSApp::InitGlobalConfig()
} }
if (!config_has_user_value(globalConfig, "General", "Pre21Defaults")) { if (!config_has_user_value(globalConfig, "General", "Pre21Defaults")) {
uint32_t lastVersion =
config_get_int(globalConfig, "General", "LastVersion");
bool useOldDefaults = lastVersion && bool useOldDefaults = lastVersion &&
lastVersion < lastVersion <
MAKE_SEMANTIC_VERSION(21, 0, 0); MAKE_SEMANTIC_VERSION(21, 0, 0);
@ -724,8 +726,6 @@ bool OBSApp::InitGlobalConfig()
} }
if (!config_has_user_value(globalConfig, "General", "Pre23Defaults")) { if (!config_has_user_value(globalConfig, "General", "Pre23Defaults")) {
uint32_t lastVersion =
config_get_int(globalConfig, "General", "LastVersion");
bool useOldDefaults = lastVersion && bool useOldDefaults = lastVersion &&
lastVersion < lastVersion <
MAKE_SEMANTIC_VERSION(23, 0, 0); MAKE_SEMANTIC_VERSION(23, 0, 0);
@ -742,6 +742,16 @@ bool OBSApp::InitGlobalConfig()
changed |= UpdatePre22MultiviewLayout(layout); changed |= UpdatePre22MultiviewLayout(layout);
} }
if (lastVersion && lastVersion < MAKE_SEMANTIC_VERSION(24, 0, 0)) {
bool disableHotkeysInFocus = config_get_bool(
globalConfig, "General", "DisableHotkeysInFocus");
if (disableHotkeysInFocus)
config_set_string(globalConfig, "General",
"HotkeyFocusType",
"DisableHotkeysInFocus");
changed = true;
}
if (changed) if (changed)
config_save_safe(globalConfig, "tmp", nullptr); config_save_safe(globalConfig, "tmp", nullptr);
@ -1227,8 +1237,7 @@ void OBSApp::AppInit()
EnableOSXVSync(false); EnableOSXVSync(false);
#endif #endif
enableHotkeysInFocus = !config_get_bool(globalConfig, "General", UpdateHotkeyFocusSetting(false);
"DisableHotkeysInFocus");
move_basic_to_profiles(); move_basic_to_profiles();
move_basic_to_scene_collections(); move_basic_to_scene_collections();
@ -1257,12 +1266,33 @@ static bool StartupOBS(const char *locale, profiler_name_store_t *store)
inline void OBSApp::ResetHotkeyState(bool inFocus) inline void OBSApp::ResetHotkeyState(bool inFocus)
{ {
obs_hotkey_enable_background_press(!inFocus || enableHotkeysInFocus); obs_hotkey_enable_background_press(
(inFocus && enableHotkeysInFocus) ||
(!inFocus && enableHotkeysOutOfFocus));
} }
void OBSApp::EnableInFocusHotkeys(bool enable) void OBSApp::UpdateHotkeyFocusSetting(bool resetState)
{ {
enableHotkeysInFocus = enable; enableHotkeysInFocus = true;
enableHotkeysOutOfFocus = true;
const char *hotkeyFocusType =
config_get_string(globalConfig, "General", "HotkeyFocusType");
if (astrcmpi(hotkeyFocusType, "DisableHotkeysInFocus") == 0) {
enableHotkeysInFocus = false;
} else if (astrcmpi(hotkeyFocusType, "DisableHotkeysOutOfFocus") == 0) {
enableHotkeysOutOfFocus = false;
}
if (resetState)
ResetHotkeyState(applicationState() == Qt::ApplicationActive);
}
void OBSApp::DisableHotkeys()
{
enableHotkeysInFocus = false;
enableHotkeysOutOfFocus = false;
ResetHotkeyState(applicationState() == Qt::ApplicationActive); ResetHotkeyState(applicationState() == Qt::ApplicationActive);
} }

View File

@ -80,6 +80,7 @@ private:
int sleepInhibitRefs = 0; int sleepInhibitRefs = 0;
bool enableHotkeysInFocus = true; bool enableHotkeysInFocus = true;
bool enableHotkeysOutOfFocus = true;
std::deque<obs_frontend_translate_ui_cb> translatorHooks; std::deque<obs_frontend_translate_ui_cb> translatorHooks;
@ -105,7 +106,8 @@ public:
void AppInit(); void AppInit();
bool OBSInit(); bool OBSInit();
void EnableInFocusHotkeys(bool enable); void UpdateHotkeyFocusSetting(bool reset = true);
void DisableHotkeys();
inline bool HotkeysEnabledInFocus() const inline bool HotkeysEnabledInFocus() const
{ {

View File

@ -463,10 +463,20 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent)
HookWidget(ui->bindToIP, COMBO_CHANGED, ADV_CHANGED); HookWidget(ui->bindToIP, COMBO_CHANGED, ADV_CHANGED);
HookWidget(ui->enableNewSocketLoop, CHECK_CHANGED, ADV_CHANGED); HookWidget(ui->enableNewSocketLoop, CHECK_CHANGED, ADV_CHANGED);
HookWidget(ui->enableLowLatencyMode, CHECK_CHANGED, ADV_CHANGED); HookWidget(ui->enableLowLatencyMode, CHECK_CHANGED, ADV_CHANGED);
HookWidget(ui->disableFocusHotkeys, CHECK_CHANGED, ADV_CHANGED); HookWidget(ui->hotkeyFocusType, COMBO_CHANGED, ADV_CHANGED);
HookWidget(ui->autoRemux, CHECK_CHANGED, ADV_CHANGED); HookWidget(ui->autoRemux, CHECK_CHANGED, ADV_CHANGED);
/* clang-format on */ /* clang-format on */
#define ADD_HOTKEY_FOCUS_TYPE(s) \
ui->hotkeyFocusType->addItem( \
QTStr("Basic.Settings.Advanced.Hotkeys." s), s)
ADD_HOTKEY_FOCUS_TYPE("NeverDisableHotkeys");
ADD_HOTKEY_FOCUS_TYPE("DisableHotkeysInFocus");
ADD_HOTKEY_FOCUS_TYPE("DisableHotkeysOutOfFocus");
#undef ADD_HOTKEY_FOCUS_TYPE
ui->simpleOutputVBitrate->setSingleStep(50); ui->simpleOutputVBitrate->setSingleStep(50);
ui->simpleOutputVBitrate->setSuffix(" Kbps"); ui->simpleOutputVBitrate->setSuffix(" Kbps");
ui->advOutFFVBitrate->setSingleStep(50); ui->advOutFFVBitrate->setSingleStep(50);
@ -741,16 +751,15 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent)
UpdateAutomaticReplayBufferCheckboxes(); UpdateAutomaticReplayBufferCheckboxes();
App()->EnableInFocusHotkeys(false); App()->DisableHotkeys();
} }
OBSBasicSettings::~OBSBasicSettings() OBSBasicSettings::~OBSBasicSettings()
{ {
bool disableHotkeysInFocus = config_get_bool(
App()->GlobalConfig(), "General", "DisableHotkeysInFocus");
delete ui->filenameFormatting->completer(); delete ui->filenameFormatting->completer();
main->EnableOutputs(true); main->EnableOutputs(true);
App()->EnableInFocusHotkeys(!disableHotkeysInFocus);
App()->UpdateHotkeyFocusSetting();
EnableThreadedMessageBoxes(false); EnableThreadedMessageBoxes(false);
} }
@ -2243,6 +2252,8 @@ void OBSBasicSettings::LoadAdvancedSettings()
int rbTime = config_get_int(main->Config(), "AdvOut", "RecRBTime"); int rbTime = config_get_int(main->Config(), "AdvOut", "RecRBTime");
int rbSize = config_get_int(main->Config(), "AdvOut", "RecRBSize"); int rbSize = config_get_int(main->Config(), "AdvOut", "RecRBSize");
bool autoRemux = config_get_bool(main->Config(), "Video", "AutoRemux"); bool autoRemux = config_get_bool(main->Config(), "Video", "AutoRemux");
const char *hotkeyFocusType = config_get_string(
App()->GlobalConfig(), "General", "HotkeyFocusType");
loading = true; loading = true;
@ -2315,9 +2326,7 @@ void OBSBasicSettings::LoadAdvancedSettings()
ui->browserHWAccel->setChecked(browserHWAccel); ui->browserHWAccel->setChecked(browserHWAccel);
#endif #endif
bool disableFocusHotkeys = config_get_bool( SetComboByValue(ui->hotkeyFocusType, hotkeyFocusType);
App()->GlobalConfig(), "General", "DisableHotkeysInFocus");
ui->disableFocusHotkeys->setChecked(disableFocusHotkeys);
loading = false; loading = false;
} }
@ -2917,9 +2926,11 @@ void OBSBasicSettings::SaveAdvancedSettings()
browserHWAccel); browserHWAccel);
#endif #endif
bool disableFocusHotkeys = ui->disableFocusHotkeys->isChecked(); if (WidgetChanged(ui->hotkeyFocusType)) {
config_set_bool(App()->GlobalConfig(), "General", QString str = GetComboData(ui->hotkeyFocusType);
"DisableHotkeysInFocus", disableFocusHotkeys); config_set_string(App()->GlobalConfig(), "General",
"HotkeyFocusType", QT_TO_UTF8(str));
}
#ifdef __APPLE__ #ifdef __APPLE__
if (WidgetChanged(ui->disableOSXVSync)) { if (WidgetChanged(ui->disableOSXVSync)) {