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.EnableNewSocketLoop="Enable new networking code"
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.DisableHotkeysOutOfFocus="Disable hotkeys when main window is not in focus"
Basic.Settings.Advanced.AutoRemux="Automatically remux to mp4"
Basic.Settings.Advanced.AutoRemux.MP4="(record as mkv)"

View File

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

View File

@ -432,6 +432,9 @@ bool OBSApp::InitGlobalConfigDefaults()
"CurrentTheme", DEFAULT_THEME);
}
config_set_default_string(globalConfig, "General", "HotkeyFocusType",
"NeverDisableHotkeys");
config_set_default_bool(globalConfig, "BasicWindow",
"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")) {
uint32_t lastVersion =
config_get_int(globalConfig, "General", "LastVersion");
bool useOldDefaults = lastVersion &&
lastVersion <
MAKE_SEMANTIC_VERSION(19, 0, 0);
@ -712,8 +716,6 @@ bool OBSApp::InitGlobalConfig()
}
if (!config_has_user_value(globalConfig, "General", "Pre21Defaults")) {
uint32_t lastVersion =
config_get_int(globalConfig, "General", "LastVersion");
bool useOldDefaults = lastVersion &&
lastVersion <
MAKE_SEMANTIC_VERSION(21, 0, 0);
@ -724,8 +726,6 @@ bool OBSApp::InitGlobalConfig()
}
if (!config_has_user_value(globalConfig, "General", "Pre23Defaults")) {
uint32_t lastVersion =
config_get_int(globalConfig, "General", "LastVersion");
bool useOldDefaults = lastVersion &&
lastVersion <
MAKE_SEMANTIC_VERSION(23, 0, 0);
@ -742,6 +742,16 @@ bool OBSApp::InitGlobalConfig()
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)
config_save_safe(globalConfig, "tmp", nullptr);
@ -1227,8 +1237,7 @@ void OBSApp::AppInit()
EnableOSXVSync(false);
#endif
enableHotkeysInFocus = !config_get_bool(globalConfig, "General",
"DisableHotkeysInFocus");
UpdateHotkeyFocusSetting(false);
move_basic_to_profiles();
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)
{
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);
}

View File

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

View File

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