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.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)"
|
||||
|
||||
|
|
|
@ -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"/>
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
{
|
||||
|
|
|
@ -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)) {
|
||||
|
|
Loading…
Reference in New Issue