Skip to content

Commit

Permalink
WIP: Add a new set of icons for connection states and notifications
Browse files Browse the repository at this point in the history
- The notification icons and status window and menu item states
  can now optionally use icons that resemble the main application icon.

  New icons for five states (disconnected, connecting, connected,
  connected_with_errors, idle_error) are loaded though we currently
  use only the first three.

  TODO: Indicate connected-with-errors state using the corresponding
  icon, and improve how states are reported when there are multiple
  connections with conflicting states.

Signed-off-by: Selva Nair <[email protected]>
  • Loading branch information
selvanair committed Mar 16, 2023
1 parent c51a37c commit 789aeeb
Show file tree
Hide file tree
Showing 15 changed files with 46 additions and 5 deletions.
30 changes: 27 additions & 3 deletions localization.c
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
#include "options.h"
#include "registry.h"
#include "misc.h"
#include "tray.h"

extern options_t o;

Expand Down Expand Up @@ -304,8 +305,27 @@ LoadLocalizedIconEx(const UINT iconId, int cxDesired, int cyDesired)
{
LANGID langId = GetGUILanguage();

UINT iconId_pref = iconId;
if (o.use_legacy_icons)
{
switch(iconId)
{
case ID_ICO_CONNECTED:
iconId_pref = ID_ICO_CONNECTED_LEGACY;
break;
case ID_ICO_DISCONNECTED:
case ID_ICO_IDLE_ERR:
iconId_pref = ID_ICO_DISCONNECTED_LEGACY;
break;
case ID_ICO_CONNECTING:
case ID_ICO_CONNECTED_ERR:
iconId_pref = ID_ICO_CONNECTING_LEGACY;
break;
}
}

HICON hIcon =
(HICON) LoadImage (o.hInstance, MAKEINTRESOURCE(iconId),
(HICON) LoadImage (o.hInstance, MAKEINTRESOURCE(iconId_pref),
IMAGE_ICON, cxDesired, cyDesired, LR_DEFAULTSIZE|LR_SHARED);
if (hIcon)
return hIcon;
Expand All @@ -316,7 +336,7 @@ LoadLocalizedIconEx(const UINT iconId, int cxDesired, int cyDesired)
* from the first image in the resource
*/
/* find group icon resource */
HRSRC res = FindResourceLang(RT_GROUP_ICON, MAKEINTRESOURCE(iconId), langId);
HRSRC res = FindResourceLang(RT_GROUP_ICON, MAKEINTRESOURCE(iconId_pref), langId);
if (res == NULL)
return NULL;

Expand Down Expand Up @@ -553,6 +573,8 @@ GeneralSettingsDlgProc(HWND hwndDlg, UINT msg, UNUSED WPARAM wParam, LPARAM lPar
Button_SetCheck(GetDlgItem(hwndDlg, ID_CHK_PLAP_REG), BST_CHECKED);
if (o.enable_auto_restart)
Button_SetCheck(GetDlgItem(hwndDlg, ID_CHK_AUTO_RESTART), BST_CHECKED);
if (o.use_legacy_icons)
Button_SetCheck(GetDlgItem(hwndDlg, ID_CHK_LEGACY_ICONS), BST_CHECKED);

break;

Expand Down Expand Up @@ -601,7 +623,9 @@ GeneralSettingsDlgProc(HWND hwndDlg, UINT msg, UNUSED WPARAM wParam, LPARAM lPar
(Button_GetCheck(GetDlgItem(hwndDlg, ID_CHK_SHOW_SCRIPT_WIN)) == BST_CHECKED);
o.enable_auto_restart =
(Button_GetCheck(GetDlgItem(hwndDlg, ID_CHK_AUTO_RESTART)) == BST_CHECKED);

o.use_legacy_icons =
(Button_GetCheck(GetDlgItem(hwndDlg, ID_CHK_LEGACY_ICONS)) == BST_CHECKED);
CheckAndSetTrayIcon(); /* in case icons changed */

SaveRegistryKeys();

Expand Down
8 changes: 8 additions & 0 deletions openvpn-gui-res.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,11 @@
#define ID_ICO_CONNECTED 91
#define ID_ICO_CONNECTING 92
#define ID_ICO_DISCONNECTED 93
#define ID_ICO_CONNECTED_ERR 94
#define ID_ICO_IDLE_ERR 95
#define ID_ICO_CONNECTED_LEGACY 96
#define ID_ICO_CONNECTING_LEGACY 97
#define ID_ICO_DISCONNECTED_LEGACY 98

/* About Dialog */
#define ID_DLG_ABOUT 100
Expand Down Expand Up @@ -124,6 +129,9 @@
#define ID_EDT_PROXY_USER 251
#define ID_EDT_PROXY_PASS 252

/* General Settings continued */
#define ID_CHK_LEGACY_ICONS 260

/* Advanced dialog */
#define ID_DLG_ADVANCED 270
#define ID_TXT_FOLDER 271
Expand Down
1 change: 1 addition & 0 deletions options.c
Original file line number Diff line number Diff line change
Expand Up @@ -379,6 +379,7 @@ InitOptions(options_t *opt)
opt->version = MakeVersion (PACKAGE_VERSION_RESOURCE);
opt->clr_warning = RGB(0xff, 0, 0);
opt->clr_error = RGB(0xff, 0, 0);
opt->use_legacy_icons = 1;
}


Expand Down
1 change: 1 addition & 0 deletions options.h
Original file line number Diff line number Diff line change
Expand Up @@ -245,6 +245,7 @@ typedef struct {
TCHAR *action_arg;
HANDLE session_semaphore;
HANDLE event_log;
DWORD use_legacy_icons;
} options_t;

void InitOptions(options_t *);
Expand Down
3 changes: 2 additions & 1 deletion registry.c
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,8 @@ struct regkey_int {
{L"management_port_offset", &o.mgmt_port_offset, 25340},
{L"enable_peristent_connections", &o.enable_persistent, 2},
{L"enable_auto_restart", &o.enable_auto_restart, 1},
{L"ovpn_engine", &o.ovpn_engine, OPENVPN_ENGINE_OVPN2}
{L"ovpn_engine", &o.ovpn_engine, OPENVPN_ENGINE_OVPN2},
{L"use_legacy_icons", &o.use_legacy_icons, 1},
};

static int
Expand Down
Binary file modified res/connected.ico
Binary file not shown.
Binary file added res/connected_error.ico
Binary file not shown.
Binary file added res/connected_old.ico
Binary file not shown.
Binary file modified res/connecting.ico
Binary file not shown.
Binary file added res/connecting_old.ico
Binary file not shown.
Binary file modified res/disconnected.ico
Binary file not shown.
Binary file added res/disconnected_old.ico
Binary file not shown.
Binary file added res/idle_error.ico
Binary file not shown.
3 changes: 2 additions & 1 deletion res/openvpn-gui-res-en.rc
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,7 @@ BEGIN
GROUPBOX "Startup", 202, 6, 47, 235, 30
AUTOCHECKBOX "Launch on User &Logon", ID_CHK_STARTUP, 17, 59, 100, 12

GROUPBOX "Preferences", ID_GROUPBOX3, 6, 82, 235, 165
GROUPBOX "Preferences", ID_GROUPBOX3, 6, 82, 235, 180
AUTOCHECKBOX "A&ppend to log", ID_CHK_LOG_APPEND, 17, 95, 60, 10
AUTOCHECKBOX "Show script &window", ID_CHK_SHOW_SCRIPT_WIN, 17, 110, 200, 10
AUTOCHECKBOX "S&ilent connection", ID_CHK_SILENT, 17, 125, 200, 10
Expand All @@ -189,6 +189,7 @@ BEGIN
AUTORADIOBUTTON "&Disable", ID_RB_BALLOON5, 181, 200, 40, 10
AUTOCHECKBOX "Enable Pre-Logon A&ccess Provider (requires admin access)", ID_CHK_PLAP_REG, 17, 215, 200, 10
AUTOCHECKBOX "Enable auto restart of active connections", ID_CHK_AUTO_RESTART, 17, 230, 200, 10
AUTOCHECKBOX "Use legacy icons", ID_CHK_LEGACY_ICONS, 17, 245, 200, 10
END

/* Advanced Dialog */
Expand Down
5 changes: 5 additions & 0 deletions res/openvpn-gui-res.rc
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,11 @@ ID_ICO_APP ICON DISCARDABLE "openvpn-gui.ico"
ID_ICO_CONNECTED ICON DISCARDABLE "connected.ico"
ID_ICO_CONNECTING ICON DISCARDABLE "connecting.ico"
ID_ICO_DISCONNECTED ICON DISCARDABLE "disconnected.ico"
ID_ICO_CONNECTED_ERR ICON DISCARDABLE "connected_error.ico"
ID_ICO_IDLE_ERR ICON DISCARDABLE "idle_error.ico"
ID_ICO_CONNECTED_LEGACY ICON DISCARDABLE "connected_old.ico"
ID_ICO_CONNECTING_LEGACY ICON DISCARDABLE "connecting_old.ico"
ID_ICO_DISCONNECTED_LEGACY ICON DISCARDABLE "disconnected_old.ico"

#ifdef ENABLE_OVPN3
#define ADVANCED_DIALOG_HEIGHT 320
Expand Down

0 comments on commit 789aeeb

Please sign in to comment.