UI: Add ability to disable hotkeys when not in focus
parent
985772d915
commit
19464e6552
|
@ -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)"
|
||||||
|
|
||||||
|
|
|
@ -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"/>
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
{
|
{
|
||||||
|
|
|
@ -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)) {
|
||||||
|
|
Loading…
Reference in New Issue