Skip to content

Commit

Permalink
Merge pull request #3803 from pqrs-org/jwodnicki-settings_disable_not…
Browse files Browse the repository at this point in the history
…ifications

Added System setting to disable notifications #2
  • Loading branch information
tekezo committed May 4, 2024
2 parents ef127ac + f92da5e commit c33f6ed
Show file tree
Hide file tree
Showing 11 changed files with 191 additions and 61 deletions.
@@ -0,0 +1,12 @@
{
"images" : [
{
"filename" : "notification-window.png",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
26 changes: 20 additions & 6 deletions src/apps/SettingsWindow/src/View/ContentMainView.swift
Expand Up @@ -8,7 +8,8 @@ enum NavigationTag: String {
case devices
case virtualKeyboard
case profiles
case ui
case ui1
case ui2
case update
case misc
case uninstall
Expand Down Expand Up @@ -141,14 +142,25 @@ struct ContentMainView: View {

Button(
action: {
contentViewStates.navigationSelection = .ui
contentViewStates.navigationSelection = .ui1
},
label: {
SidebarLabelView(text: "UI", systemImage: "switch.2", padding: 2.0)
SidebarLabelView(text: "UI #1", systemImage: "switch.2", padding: 2.0)
}
)
.sidebarButtonStyle(
selected: contentViewStates.navigationSelection == .ui)
selected: contentViewStates.navigationSelection == .ui1)

Button(
action: {
contentViewStates.navigationSelection = .ui2
},
label: {
SidebarLabelView(text: "UI #2", systemImage: "switch.2", padding: 2.0)
}
)
.sidebarButtonStyle(
selected: contentViewStates.navigationSelection == .ui2)
}

Divider()
Expand Down Expand Up @@ -261,8 +273,10 @@ struct ContentMainView: View {
VirtualKeyboardView()
case .profiles:
ProfilesView()
case .ui:
UIView()
case .ui1:
UI1View()
case .ui2:
UI2View()
case .update:
UpdateView()
case .misc:
Expand Down
98 changes: 98 additions & 0 deletions src/apps/SettingsWindow/src/View/UI1View.swift
@@ -0,0 +1,98 @@
import SwiftUI

struct UI1View: View {
@ObservedObject private var settings = LibKrbn.Settings.shared

var body: some View {
VStack(alignment: .leading, spacing: 24.0) {
GroupBox(label: Text("Menu bar")) {
VStack(alignment: .leading, spacing: 12.0) {
HStack {
Toggle(isOn: $settings.showIconInMenuBar) {
Text("Show icon in menu bar (Default: on)")
}
.switchToggleStyle()

Spacer()
}

HStack {
Toggle(isOn: $settings.showProfileNameInMenuBar) {
Text("Show profile name in menu bar (Default: off)")
}
.switchToggleStyle()

Spacer()
}

HStack {
Toggle(isOn: $settings.askForConfirmationBeforeQuitting) {
Text("Ask for confirmation when quitting (Default: on)")
}
.switchToggleStyle()

Spacer()
}

}
.padding(6.0)
}

GroupBox(label: Text("Karabiner Notification Window")) {
VStack(alignment: .leading, spacing: 12.0) {
HStack {
Toggle(isOn: $settings.enableNotificationWindow) {
Text("Enable Karabiner Notification Window (Default: on)")
}
.switchToggleStyle()

Spacer()
}

HStack {
Toggle(isOn: $settings.virtualHIDKeyboardIndicateStickyModifierKeysState) {
Text("Indicate sticky modifier keys state (Default: on)")
}
.switchToggleStyle()

Spacer()
}

VStack(alignment: .leading, spacing: 12.0) {
Label(
"What is the Karabiner Notification Window?",
systemImage: "lightbulb"
)
VStack(alignment: .leading, spacing: 0.0) {
Text(
"Karabiner Notification Window is a window that displays messages, located at the bottom right of the screen. "
)
Text(
"It is used for temporary alerts, displaying the status of sticky modifiers, and showing messages for some complex modifications."
)
}

Image(decorative: "notification-window")
.resizable()
.aspectRatio(contentMode: .fit)
.frame(height: 150)

}
.padding()
.foregroundColor(Color.warningForeground)
.background(Color.warningBackground)
}
.padding(6.0)
}

Spacer()
}
.padding()
}
}

struct UI1View_Previews: PreviewProvider {
static var previews: some View {
UI1View()
}
}
@@ -1,58 +1,10 @@
import SwiftUI

struct UIView: View {
struct UI2View: View {
@ObservedObject private var appIcons = AppIcons.shared
@ObservedObject private var settings = LibKrbn.Settings.shared

var body: some View {
VStack(alignment: .leading, spacing: 24.0) {
GroupBox(label: Text("Menu bar")) {
VStack(alignment: .leading, spacing: 12.0) {
HStack {
Toggle(isOn: $settings.showIconInMenuBar) {
Text("Show icon in menu bar (Default: on)")
}
.switchToggleStyle()

Spacer()
}

HStack {
Toggle(isOn: $settings.showProfileNameInMenuBar) {
Text("Show profile name in menu bar (Default: off)")
}
.switchToggleStyle()

Spacer()
}

HStack {
Toggle(isOn: $settings.askForConfirmationBeforeQuitting) {
Text("Ask for confirmation when quitting (Default: on)")
}
.switchToggleStyle()

Spacer()
}

}
.padding(6.0)
}

GroupBox(label: Text("Sticky modifier keys")) {
VStack(alignment: .leading, spacing: 12.0) {
HStack {
Toggle(isOn: $settings.virtualHIDKeyboardIndicateStickyModifierKeysState) {
Text("Indicate sticky modifier keys state (Default: on)")
}
.switchToggleStyle()

Spacer()
}
}
.padding(6.0)
}

GroupBox(label: Text("App icon")) {
VStack(alignment: .leading, spacing: 12.0) {
VStack {
Expand Down Expand Up @@ -113,8 +65,8 @@ struct UIView: View {
}
}

struct UIView_Previews: PreviewProvider {
struct UI2View_Previews: PreviewProvider {
static var previews: some View {
UIView()
UI2View()
}
}
13 changes: 13 additions & 0 deletions src/apps/share/swift/LibKrbn/Settings.swift
Expand Up @@ -119,6 +119,8 @@ extension LibKrbn {
showIconInMenuBar = libkrbn_core_configuration_get_global_configuration_show_in_menu_bar()
showProfileNameInMenuBar =
libkrbn_core_configuration_get_global_configuration_show_profile_name_in_menu_bar()
enableNotificationWindow =
libkrbn_core_configuration_get_global_configuration_enable_notification_window()
askForConfirmationBeforeQuitting =
libkrbn_core_configuration_get_global_configuration_ask_for_confirmation_before_quitting()
unsafeUI = libkrbn_core_configuration_get_global_configuration_unsafe_ui()
Expand Down Expand Up @@ -649,6 +651,17 @@ extension LibKrbn {
}
}

@Published var enableNotificationWindow: Bool = false {
didSet {
if didSetEnabled {
libkrbn_core_configuration_set_global_configuration_enable_notification_window(
enableNotificationWindow
)
save()
}
}
}

@Published var askForConfirmationBeforeQuitting: Bool = false {
didSet {
if didSetEnabled {
Expand Down
Expand Up @@ -209,15 +209,16 @@ class components_manager final : public pqrs::dispatcher::extra::dispatcher_clie
void start_child_components(void) {
configuration_monitor_ = std::make_shared<configuration_monitor>(constants::get_user_core_configuration_file_path(),
geteuid());
configuration_monitor_->core_configuration_updated.connect([](auto&& weak_core_configuration) {
if (auto c = weak_core_configuration.lock()) {
launchctl_utility::manage_notification_window(c->get_global_configuration().get_enable_notification_window());
}
});

// menu_process_manager_

menu_process_manager_ = std::make_unique<menu_process_manager>(configuration_monitor_);

// Restart NotificationWindow

launchctl_utility::restart_notification_window();

// Run MultitouchExtension

application_launcher::launch_multitouch_extension(true);
Expand Down
2 changes: 2 additions & 0 deletions src/lib/libkrbn/include/libkrbn/libkrbn.h
Expand Up @@ -83,6 +83,8 @@ bool libkrbn_core_configuration_get_global_configuration_show_in_menu_bar(void);
void libkrbn_core_configuration_set_global_configuration_show_in_menu_bar(bool value);
bool libkrbn_core_configuration_get_global_configuration_show_profile_name_in_menu_bar(void);
void libkrbn_core_configuration_set_global_configuration_show_profile_name_in_menu_bar(bool value);
bool libkrbn_core_configuration_get_global_configuration_enable_notification_window(void);
void libkrbn_core_configuration_set_global_configuration_enable_notification_window(bool value);
bool libkrbn_core_configuration_get_global_configuration_ask_for_confirmation_before_quitting(void);
void libkrbn_core_configuration_set_global_configuration_ask_for_confirmation_before_quitting(bool value);
bool libkrbn_core_configuration_get_global_configuration_unsafe_ui(void);
Expand Down
13 changes: 13 additions & 0 deletions src/lib/libkrbn/src/libkrbn_configuration.cpp
Expand Up @@ -98,6 +98,19 @@ void libkrbn_core_configuration_set_global_configuration_show_profile_name_in_me
}
}

bool libkrbn_core_configuration_get_global_configuration_enable_notification_window(void) {
if (auto c = get_current_core_configuration()) {
return c->get_global_configuration().get_enable_notification_window();
}
return false;
}

void libkrbn_core_configuration_set_global_configuration_enable_notification_window(bool value) {
if (auto c = get_current_core_configuration()) {
return c->get_global_configuration().set_enable_notification_window(value);
}
}

bool libkrbn_core_configuration_get_global_configuration_ask_for_confirmation_before_quitting(void) {
if (auto c = get_current_core_configuration()) {
return c->get_global_configuration().get_ask_for_confirmation_before_quitting();
Expand Down
20 changes: 20 additions & 0 deletions src/share/core_configuration/details/global_configuration.hpp
Expand Up @@ -7,10 +7,13 @@ namespace core_configuration {
namespace details {
class global_configuration final {
public:
static constexpr bool enable_notification_window_default_value = true;

global_configuration(const nlohmann::json& json) : json_(json),
check_for_updates_on_startup_(true),
show_in_menu_bar_(true),
show_profile_name_in_menu_bar_(false),
enable_notification_window_(enable_notification_window_default_value),
ask_for_confirmation_before_quitting(true),
unsafe_ui_(false) {
if (auto v = pqrs::json::find<bool>(json, "check_for_updates_on_startup")) {
Expand All @@ -25,6 +28,10 @@ class global_configuration final {
show_profile_name_in_menu_bar_ = *v;
}

if (auto v = pqrs::json::find<bool>(json, "enable_notification_window")) {
enable_notification_window_ = *v;
}

if (auto v = pqrs::json::find<bool>(json, "ask_for_confirmation_before_quitting")) {
ask_for_confirmation_before_quitting = *v;
}
Expand All @@ -39,6 +46,11 @@ class global_configuration final {
j["check_for_updates_on_startup"] = check_for_updates_on_startup_;
j["show_in_menu_bar"] = show_in_menu_bar_;
j["show_profile_name_in_menu_bar"] = show_profile_name_in_menu_bar_;

if (enable_notification_window_ != enable_notification_window_default_value) {
j["enable_notification_window"] = enable_notification_window_;
}

j["ask_for_confirmation_before_quitting"] = ask_for_confirmation_before_quitting;
j["unsafe_ui"] = unsafe_ui_;
return j;
Expand All @@ -65,6 +77,13 @@ class global_configuration final {
show_profile_name_in_menu_bar_ = value;
}

bool get_enable_notification_window(void) const {
return enable_notification_window_;
}
void set_enable_notification_window(bool value) {
enable_notification_window_ = value;
}

bool get_ask_for_confirmation_before_quitting(void) const {
return ask_for_confirmation_before_quitting;
}
Expand All @@ -84,6 +103,7 @@ class global_configuration final {
bool check_for_updates_on_startup_;
bool show_in_menu_bar_;
bool show_profile_name_in_menu_bar_;
bool enable_notification_window_;
bool ask_for_confirmation_before_quitting;
bool unsafe_ui_;
};
Expand Down

0 comments on commit c33f6ed

Please sign in to comment.