From 355b796d5ca55674abc799517b74feb7e11c078f Mon Sep 17 00:00:00 2001 From: "Kirill A. Korinsky" Date: Sat, 7 Oct 2017 16:13:35 +0400 Subject: [PATCH] Added setting 'hide menubar icon' to panel, and implemented support at menubar app --- .../DNSCrypt-Menubar/AppDelegate.h | 1 + .../DNSCrypt-Menubar/AppDelegate.m | 21 +++++++++++++ .../DNSCrypt-Menubar/en.lproj/MainMenu.xib | 18 +++++++---- DNSCrypt-Preference-Pane/DNSCrypt/DNSCrypt.h | 3 ++ DNSCrypt-Preference-Pane/DNSCrypt/DNSCrypt.m | 30 +++++++++++++++++++ .../DNSCrypt/en.lproj/DNSCrypt.xib | 25 ++++++++++++---- .../DNSCrypt/extra/usr/scripts/common.inc | 1 + .../scripts/get-hide-menubar-icon-status.sh | 9 ++++++ .../scripts/switch-hide-menubar-icon-off.sh | 5 ++++ .../scripts/switch-hide-menubar-icon-on.sh | 5 ++++ 10 files changed, 106 insertions(+), 12 deletions(-) create mode 100755 DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/scripts/get-hide-menubar-icon-status.sh create mode 100755 DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/scripts/switch-hide-menubar-icon-off.sh create mode 100755 DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/scripts/switch-hide-menubar-icon-on.sh diff --git a/DNSCrypt-Menubar/DNSCrypt-Menubar/AppDelegate.h b/DNSCrypt-Menubar/DNSCrypt-Menubar/AppDelegate.h index 81d0e30..b4b7b77 100644 --- a/DNSCrypt-Menubar/DNSCrypt-Menubar/AppDelegate.h +++ b/DNSCrypt-Menubar/DNSCrypt-Menubar/AppDelegate.h @@ -34,5 +34,6 @@ typedef enum { - (IBAction)preferencesMenuItemPushed:(NSMenuItem *)sender; - (IBAction)dnscryptMenuItemPushed:(NSMenuItem *)sender; +- (IBAction)hideMenubarIconMenuItemPushed:(NSMenuItem *)sender; @end diff --git a/DNSCrypt-Menubar/DNSCrypt-Menubar/AppDelegate.m b/DNSCrypt-Menubar/DNSCrypt-Menubar/AppDelegate.m index 73c1197..fab40d6 100644 --- a/DNSCrypt-Menubar/DNSCrypt-Menubar/AppDelegate.m +++ b/DNSCrypt-Menubar/DNSCrypt-Menubar/AppDelegate.m @@ -101,6 +101,14 @@ BOOL appUpdated = FALSE; } [self updateLedStatus]; + NSString *hideMenuBar = [self fromCommand: @"/bin/csh" withArguments: [NSArray arrayWithObjects: @"-c", @"cd '" kDNSCRIPT_SCRIPTS_BASE_DIR @"' && ./get-hide-menubar-icon-status.sh | ./get-upstream-resolvers.sh", nil]]; + + if ([hideMenuBar isEqualToString: @"yes"]) { + _statusItem.visible = FALSE; + } else if ([hideMenuBar isEqualToString: @"no"]) { + _statusItem.visible = TRUE; + } + NSString *currentResolvers = [self fromCommand: @"/bin/csh" withArguments: [NSArray arrayWithObjects: @"-c", @"cd '" kDNSCRIPT_SCRIPTS_BASE_DIR @"' && ./get-current-resolvers.sh | ./get-upstream-resolvers.sh", nil]]; _statusResolversMenuItem.title = currentResolvers; @@ -213,4 +221,17 @@ BOOL appUpdated = FALSE; } } +- (BOOL) setHideMenubarIconOn { + [self showSpinners]; + NSString *res = [self fromCommand: @"/bin/csh" withArguments: [NSArray arrayWithObjects: @"-c", @"cd '" kDNSCRIPT_SCRIPTS_BASE_DIR @"' && ./create-ticket.sh && ./switch-hide-menubar-icon-on.sh", nil]]; + (void) res; + _statusItem.visible = FALSE; + return TRUE; +} + +- (IBAction)hideMenubarIconMenuItemPushed:(NSMenuItem *)sender +{ + [self setHideMenubarIconOn]; +} + @end diff --git a/DNSCrypt-Menubar/DNSCrypt-Menubar/en.lproj/MainMenu.xib b/DNSCrypt-Menubar/DNSCrypt-Menubar/en.lproj/MainMenu.xib index 816b48e..5d30452 100644 --- a/DNSCrypt-Menubar/DNSCrypt-Menubar/en.lproj/MainMenu.xib +++ b/DNSCrypt-Menubar/DNSCrypt-Menubar/en.lproj/MainMenu.xib @@ -1,8 +1,8 @@ - - + + - - + + @@ -11,7 +11,7 @@ - + @@ -45,12 +45,18 @@ - + + + + + + + diff --git a/DNSCrypt-Preference-Pane/DNSCrypt/DNSCrypt.h b/DNSCrypt-Preference-Pane/DNSCrypt/DNSCrypt.h index 793e9ce..027daf0 100644 --- a/DNSCrypt-Preference-Pane/DNSCrypt/DNSCrypt.h +++ b/DNSCrypt-Preference-Pane/DNSCrypt/DNSCrypt.h @@ -42,6 +42,7 @@ typedef enum { NSTabViewItem *_releaseNotesTabViewItem; NSButton *_dnscryptButton; + NSButton *_hideMenubarIcon; NSButton *_disableIPv6Button; NSTextField *_currentResolverTextField; @@ -65,6 +66,7 @@ typedef enum { @property (nonatomic, strong) IBOutlet NSTabViewItem *releaseNotesTabViewItem; @property (nonatomic, strong) IBOutlet NSButton *dnscryptButton; +@property (nonatomic, strong) IBOutlet NSButton *hideMenubarIcon; @property (nonatomic, strong) IBOutlet NSButton *disableIPv6Button; @property (nonatomic, strong) IBOutlet NSTextField *currentResolverTextField; @@ -90,6 +92,7 @@ typedef enum { - (void) mainViewDidLoad; - (IBAction)dnscryptButtonPressed:(NSButton *)sender; +- (IBAction)hideMenubarIcon:(NSButton *)sender; - (IBAction)disableIPv6ButtonPressed:(NSButton *)sender; - (IBAction)providerLinkPushed:(NSButton *)sender; - (IBAction)uninstallPushed:(NSButton *)sender; diff --git a/DNSCrypt-Preference-Pane/DNSCrypt/DNSCrypt.m b/DNSCrypt-Preference-Pane/DNSCrypt/DNSCrypt.m index eeb5630..ea5f229 100644 --- a/DNSCrypt-Preference-Pane/DNSCrypt/DNSCrypt.m +++ b/DNSCrypt-Preference-Pane/DNSCrypt/DNSCrypt.m @@ -16,6 +16,7 @@ @synthesize blockedQueryLoggingButton = _blockedQueryLoggingButton; @synthesize dnscryptButton = _dnscryptButton; @synthesize disableIPv6Button = _disableIPv6Button; +@synthesize hideMenubarIcon = _hideMenubarIcon; @synthesize statusImageView = _statusImageView; @synthesize statusText = _statusText; @synthesize currentResolverTextField = _currentResolverTextField; @@ -31,6 +32,7 @@ BOOL exceptionsUpdated = FALSE; - (void) setCheckBoxesEnabled: (BOOL) enabled { [_dnscryptButton setEnabled: enabled]; + [_hideMenubarIcon setEnabled: enabled]; [_disableIPv6Button setEnabled: enabled]; [_resolverNamesButton setEnabled: enabled]; } @@ -59,6 +61,7 @@ BOOL exceptionsUpdated = FALSE; NSString *res; _dnscryptButton.state = 0; + _hideMenubarIcon.state = 0; _disableIPv6Button.state = 0; [_blacklistIPsTextView setPlaceHolderText: @"IP addresses to block.\n\nExamples:\n\n203.0.113.7\n198.51.100.*"]; @@ -69,6 +72,10 @@ BOOL exceptionsUpdated = FALSE; if ([res isEqualToString: @"yes"]) { [_dnscryptButton setState: 1]; } + res = [self fromCommand: @"/bin/csh" withArguments: [NSArray arrayWithObjects: @"-f", @"-c", @"cd '" kDNSCRYPT_SCRIPTS_BASE_DIR @"' && exec ./get-hide-menubar-icon-status.sh", nil]]; + if ([res isEqualToString: @"yes"]) { + [_hideMenubarIcon setState: 1]; + } res = [self fromCommand: @"/bin/csh" withArguments: [NSArray arrayWithObjects: @"-f", @"-c", @"cd '" kDNSCRYPT_SCRIPTS_BASE_DIR @"' && exec ./get-aaaa-blocking-status.sh", nil]]; if ([res isEqualToString: @"yes"]) { [_disableIPv6Button setState: 1]; @@ -201,6 +208,20 @@ BOOL exceptionsUpdated = FALSE; return TRUE; } +- (BOOL) setHideMenubarIconOn { + [self showSpinners]; + NSString *res = [self fromCommand: @"/bin/csh" withArguments: [NSArray arrayWithObjects: @"-f", @"-c", @"cd '" kDNSCRYPT_SCRIPTS_BASE_DIR @"' && ./create-ticket.sh && ./switch-hide-menubar-icon-on.sh", nil]]; + (void) res; + return TRUE; +} + +- (BOOL) setHideMenubarIconOff { + [self showSpinners]; + NSString *res = [self fromCommand: @"/bin/csh" withArguments: [NSArray arrayWithObjects: @"-f", @"-c", @"cd '" kDNSCRYPT_SCRIPTS_BASE_DIR @"' && ./create-ticket.sh && ./switch-hide-menubar-icon-off.sh", nil]]; + (void) res; + return TRUE; +} + - (BOOL) setDisableIPv6On { [self showSpinners]; NSString *res = [self fromCommand: @"/bin/csh" withArguments: [NSArray arrayWithObjects: @"-f", @"-c", @"cd '" kDNSCRYPT_SCRIPTS_BASE_DIR @"' && ./create-ticket.sh && ./switch-aaaa-blocking-on.sh", nil]]; @@ -224,6 +245,15 @@ BOOL exceptionsUpdated = FALSE; } } +- (IBAction)hideMenubarIcon:(NSButton *)sender +{ + if (sender.state != 0) { + [self setHideMenubarIconOn]; + } else { + [self setHideMenubarIconOff]; + } +} + - (IBAction)disableIPv6ButtonPressed:(NSButton *)sender { if (sender.state != 0) { diff --git a/DNSCrypt-Preference-Pane/DNSCrypt/en.lproj/DNSCrypt.xib b/DNSCrypt-Preference-Pane/DNSCrypt/en.lproj/DNSCrypt.xib index 96473d8..41139e9 100644 --- a/DNSCrypt-Preference-Pane/DNSCrypt/en.lproj/DNSCrypt.xib +++ b/DNSCrypt-Preference-Pane/DNSCrypt/en.lproj/DNSCrypt.xib @@ -1,9 +1,9 @@ - + - - + + @@ -20,6 +20,7 @@ + @@ -186,6 +187,18 @@ + @@ -292,7 +305,7 @@ - + @@ -325,7 +338,7 @@ - + @@ -358,7 +371,7 @@ - + diff --git a/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/scripts/common.inc b/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/scripts/common.inc index 341bbe4..acd5522 100644 --- a/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/scripts/common.inc +++ b/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/scripts/common.inc @@ -16,6 +16,7 @@ STATES_DIR="${DNSCRYPT_VAR_BASE_DIR}/states" DNSCRYPT_RESOLVER_NAME_FILE="${CONTROL_DIR}/dnscrypt-resolver-name" DNSCRYPT_FILE="${CONTROL_DIR}/dnscrypt" +HIDE_MENUBAR_ICON_FILE="${CONTROL_DIR}/hide-menubar-icon" HANDLERS_LOCK_FILE="${DNSCRYPT_VAR_RUN_BASE_DIR}/dnscrypt-handlers.lock" DNSCRYPT_PROXY_PLUGINS_BASE_FILE="${CONTROL_DIR}/plugin" STATIC_RESOLVERS_FILE="${CONTROL_DIR}/static-resolvers" diff --git a/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/scripts/get-hide-menubar-icon-status.sh b/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/scripts/get-hide-menubar-icon-status.sh new file mode 100755 index 0000000..4e22896 --- /dev/null +++ b/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/scripts/get-hide-menubar-icon-status.sh @@ -0,0 +1,9 @@ +#! /bin/sh + +. ./common.inc + +if [ -e "$HIDE_MENUBAR_ICON_FILE" ]; then + echo 'yes' +else + echo 'no' +fi diff --git a/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/scripts/switch-hide-menubar-icon-off.sh b/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/scripts/switch-hide-menubar-icon-off.sh new file mode 100755 index 0000000..20da33e --- /dev/null +++ b/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/scripts/switch-hide-menubar-icon-off.sh @@ -0,0 +1,5 @@ +#! /bin/sh + +. ./common.inc + +rm -f "$HIDE_MENUBAR_ICON_FILE" diff --git a/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/scripts/switch-hide-menubar-icon-on.sh b/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/scripts/switch-hide-menubar-icon-on.sh new file mode 100755 index 0000000..e54ab10 --- /dev/null +++ b/DNSCrypt-Preference-Pane/DNSCrypt/extra/usr/scripts/switch-hide-menubar-icon-on.sh @@ -0,0 +1,5 @@ +#! /bin/sh + +. ./common.inc + +echo "libdcplugin_example_ldns_hide_menubar_icon.la" > "$HIDE_MENUBAR_ICON_FILE"