X-Git-Url: http://www.privoxy.org/gitweb/?p=privoxy.git;a=blobdiff_plain;f=w32log.c;h=1314462f05e4e2640725123579cac7b695943c7b;hp=975c5e0f91d282027d2f36c1c34216db5a2a841b;hb=e72b401da5537a14b29e945944926373cb251825;hpb=c75584ebcc79f939fb4ec9c8f842cef6692640c7 diff --git a/w32log.c b/w32log.c index 975c5e0f..1314462f 100644 --- a/w32log.c +++ b/w32log.c @@ -1,13 +1,13 @@ -const char w32log_rcs[] = "$Id: w32log.c,v 1.1 2001/05/13 21:57:07 administrator Exp $"; +const char w32log_rcs[] = "$Id: w32log.c,v 1.33 2009/03/09 19:02:09 fabiankeil Exp $"; /********************************************************************* * - * File : $Source: /home/administrator/cvs/ijb/w32log.c,v $ + * File : $Source: /cvsroot/ijbswa/current/w32log.c,v $ * * Purpose : Functions for creating and destroying the log window, * ouputting strings, processing messages and so on. * - * Copyright : Written by and Copyright (C) 2001 the SourceForge - * IJBSWA team. http://ijbswa.sourceforge.net + * Copyright : Written by and Copyright (C) 2001-2009 members of + * the Privoxy team. http://www.privoxy.org/ * * Written by and Copyright (C) 1999 Adam Lock * @@ -30,29 +30,29 @@ const char w32log_rcs[] = "$Id: w32log.c,v 1.1 2001/05/13 21:57:07 administrator * or write to the Free Software Foundation, Inc., 59 * Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - * Revisions : - * $Log: w32log.c,v $ - * *********************************************************************/ - + #include "config.h" #include #include +#ifndef STRICT +#define STRICT +#endif #include #include #include "project.h" #include "w32log.h" #include "w32taskbar.h" -#include "w32rulesdlg.h" #include "win32.h" #include "w32res.h" #include "jcc.h" #include "miscutil.h" #include "errlog.h" +#include "loadcfg.h" const char w32res_h_rcs[] = W32RES_H_VERSION; @@ -63,6 +63,8 @@ const char cygwin_h_rcs[] = CYGWIN_H_VERSION; const char w32log_h_rcs[] = W32LOG_H_VERSION; +#ifndef _WIN_CONSOLE /* entire file */ + /* * Timers and the various durations */ @@ -101,6 +103,9 @@ const char w32log_h_rcs[] = W32LOG_H_VERSION; /* Indicates whether task bar shows activity animation */ BOOL g_bShowActivityAnimation = 1; +/* Indicates whether the log window is shown */ +BOOL g_bShowLogWindow = 1; + /* Indicates if the log window appears on the task bar */ BOOL g_bShowOnTaskBar = 0; @@ -120,13 +125,23 @@ BOOL g_bLimitBufferSize = 1; int g_nMaxBufferLines = DEFAULT_MAX_BUFFER_LINES; /* Font to use */ -char g_szFontFaceName[255] = DEFAULT_LOG_FONT_NAME; +char g_szFontFaceName[32] = DEFAULT_LOG_FONT_NAME; /* Size of font to use */ int g_nFontSize = DEFAULT_LOG_FONT_SIZE; -#ifdef REGEX +/* FIXME: this is a kludge */ + +const char * g_default_actions_file = NULL; +const char * g_user_actions_file = NULL; +const char * g_re_filterfile = NULL; +#ifdef FEATURE_TRUST +const char * g_trustfile = NULL; +#endif /* def FEATURE_TRUST */ + +/* FIXME: end kludge */ + /* Regular expression for detected URLs */ #define RE_URL "http:[^ \n\r]*" @@ -144,7 +159,16 @@ static struct _Pattern { RE_URL, STYLE_LINK }, /* { "[a-zA-Z0-9]+\\.[a-zA-Z0-9]+\\.[a-zA-Z0-9]+\\.[^ \n\r]*", STYLE_LINK }, */ /* interesting text to highlight */ - { "crunch!", STYLE_HIGHLIGHT }, + /* see jcc.c crunch_reason for the full list */ + { "Crunch: Blocked:", STYLE_HIGHLIGHT }, + { "Crunch: Untrusted", STYLE_HIGHLIGHT }, + { "Crunch: Redirected:", STYLE_HIGHLIGHT }, + { "Crunch: DNS failure", STYLE_HIGHLIGHT }, + { "Crunch: Forwarding failed", STYLE_HIGHLIGHT }, + { "Crunch: Connection failure", STYLE_HIGHLIGHT }, + { "Crunch: Out of memory", STYLE_HIGHLIGHT }, + /* what are all the possible error strings?? */ + { "Error:", STYLE_HIGHLIGHT }, /* http headers */ { "referer:", STYLE_HEADER }, { "proxy-connection:", STYLE_HEADER }, @@ -172,13 +196,12 @@ static struct _Pattern /* this is the terminator statement - do not delete! */ { NULL, STYLE_NONE } }; -#endif /* def REGEX */ - /* * Public variables */ HWND g_hwndLogFrame; +HICON g_hiconApp; /* * Private variables @@ -189,7 +212,7 @@ static HWND g_hwndLogBox; static WNDPROC g_fnLogBox; static HICON g_hiconAnim[ANIM_FRAMES]; static HICON g_hiconIdle; -static HICON g_hiconApp; +static HICON g_hiconOff; static int g_nAnimFrame; static BOOL g_bClipPending = FALSE; static int g_nRichEditVersion = 0; @@ -207,6 +230,7 @@ static void LogClipBuffer(void); static void LogCreatePatternMatchingBuffers(void); static void LogDestroyPatternMatchingBuffers(void); static int LogPutStringNoMatch(const char *pszText, int style); +static void SetIdleIcon(void); /********************************************************************* @@ -226,16 +250,17 @@ BOOL InitLogWindow(void) /* Load the icons */ g_hiconIdle = LoadIcon(g_hInstance, MAKEINTRESOURCE(IDI_IDLE)); + g_hiconOff = LoadIcon(g_hInstance, MAKEINTRESOURCE(IDI_OFF)); for (i = 0; i < ANIM_FRAMES; i++) { - g_hiconAnim[i] = LoadIcon(g_hInstance, MAKEINTRESOURCE(IDI_JUNKBUSTER1 + i)); + g_hiconAnim[i] = LoadIcon(g_hInstance, MAKEINTRESOURCE(IDI_ANIMATED1 + i)); } - g_hiconApp = LoadIcon(g_hInstance, MAKEINTRESOURCE(IDI_JUNKBUSTER)); + g_hiconApp = LoadIcon(g_hInstance, MAKEINTRESOURCE(IDI_MAINICON)); /* Create the user interface */ g_hwndLogFrame = CreateLogWindow(g_hInstance, g_nCmdShow); g_hwndTray = CreateTrayWindow(g_hInstance); - TrayAddIcon(g_hwndTray, 1, g_hiconApp, "Junkbuster"); + TrayAddIcon(g_hwndTray, 1, g_hiconApp, "Privoxy"); /* Create pattern matching buffers (for highlighting */ LogCreatePatternMatchingBuffers(); @@ -268,6 +293,7 @@ void TermLogWindow(void) TrayDeleteIcon(g_hwndTray, 1); DeleteObject(g_hiconApp); DeleteObject(g_hiconIdle); + DeleteObject(g_hiconOff); for (i = 0; i < ANIM_FRAMES; i++) { DeleteObject(g_hiconAnim[i]); @@ -289,14 +315,11 @@ void TermLogWindow(void) *********************************************************************/ void LogCreatePatternMatchingBuffers(void) { -#ifdef REGEX int i; for (i = 0; patterns_to_highlight[i].str != NULL; i++) { regcomp(&patterns_to_highlight[i].buffer, patterns_to_highlight[i].str, REG_ICASE); } -#endif - } @@ -313,14 +336,11 @@ void LogCreatePatternMatchingBuffers(void) *********************************************************************/ void LogDestroyPatternMatchingBuffers(void) { -#ifdef REGEX int i; for (i = 0; patterns_to_highlight[i].str != NULL; i++) { regfree(&patterns_to_highlight[i].buffer); } -#endif - } @@ -338,7 +358,6 @@ void LogDestroyPatternMatchingBuffers(void) char *LogGetURLUnderCursor(void) { char *szResult = NULL; -#ifdef REGEX regex_t re; POINT ptCursor; POINTL ptl; @@ -381,7 +400,6 @@ char *LogGetURLUnderCursor(void) regfree(&re); } -#endif return szResult; } @@ -392,7 +410,7 @@ char *LogGetURLUnderCursor(void) * Function : LogPutString * * Description : Inserts text into the logging window. This is really - * a REGEXP aware wrapper function to `LogPutStringNoMatch'. + * a regexp aware wrapper function to `LogPutStringNoMatch'. * * Parameters : * 1 : pszText = pointer to string going to the log window @@ -404,9 +422,7 @@ char *LogGetURLUnderCursor(void) *********************************************************************/ int LogPutString(const char *pszText) { -#ifdef REGEX int i; -#endif int result = 0; if (pszText == NULL || strlen(pszText) == 0) @@ -424,7 +440,6 @@ int LogPutString(const char *pszText) */ EnterCriticalSection(&g_criticalsection); -#ifdef REGEX if (g_bHighlightMessages) { regmatch_t match; @@ -448,7 +463,7 @@ int LogPutString(const char *pszText) memset(pszBefore, 0, (match.rm_so + 1) * sizeof(char)); strncpy(pszBefore, pszText, match.rm_so); } - if (match.rm_eo < strlen(pszText)) + if (match.rm_eo < (regoff_t)strlen(pszText)) { pszAfter = strdup(&pszText[match.rm_eo]); } @@ -479,13 +494,10 @@ int LogPutString(const char *pszText) } } } -#endif result = LogPutStringNoMatch(pszText, STYLE_NONE); -#ifdef REGEX end: -#endif LeaveCriticalSection(&g_criticalsection); return result; @@ -531,9 +543,11 @@ int LogPutStringNoMatch(const char *pszText, int style) /* Apply a formatting style */ memset(&format, 0, sizeof(format)); format.cbSize = sizeof(format); - format.dwMask = CFM_BOLD | CFM_UNDERLINE | CFM_STRIKEOUT | CFM_ITALIC | CFM_COLOR | CFM_FACE | CFM_SIZE; + format.dwMask = CFM_BOLD | CFM_UNDERLINE | CFM_STRIKEOUT | + CFM_ITALIC | CFM_COLOR | CFM_FACE | CFM_SIZE | CFM_CHARSET; + format.bCharSet = DEFAULT_CHARSET; format.yHeight = (g_nFontSize * 1440) / 72; - strcpy(format.szFaceName, g_szFontFaceName); + strlcpy(format.szFaceName, g_szFontFaceName, sizeof(format.szFaceName)); if (style == STYLE_NONE) { /* DO NOTHING */ @@ -635,10 +649,17 @@ void LogClipBuffer(void) SendMessage(g_hwndLogBox, EM_REPLACESEL, FALSE, (LPARAM) ""); SendMessage(g_hwndLogBox, EM_SETOPTIONS, ECOOP_XOR, ECO_AUTOVSCROLL); - /* Restore old selection */ + /* reposition (back to) the end of the log content */ + range.cpMin = SendMessage (g_hwndLogBox, WM_GETTEXTLENGTH, 0, 0); + range.cpMax = -1; + SendMessage(g_hwndLogBox, EM_EXSETSEL, 0, (LPARAM) &range); + + /* restore vertical ScrollBar stuff (messed up by AUTOVSCROLL) */ + SendMessage (g_hwndLogBox, EM_SCROLL, SB_LINEDOWN, 0); + } -} +} /********************************************************************* @@ -656,7 +677,7 @@ void LogClipBuffer(void) *********************************************************************/ HWND CreateHiddenLogOwnerWindow(HINSTANCE hInstance) { - static const char *szWndName = "JunkbusterLogLogOwner"; + static const char *szWndName = "PrivoxyLogOwner"; WNDCLASS wc; HWND hwnd; @@ -665,7 +686,7 @@ HWND CreateHiddenLogOwnerWindow(HINSTANCE hInstance) wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; - wc.hIcon = 0; + wc.hIcon = g_hiconApp; wc.hCursor = 0; wc.hbrBackground = 0; wc.lpszMenuName = 0; @@ -719,12 +740,11 @@ LRESULT CALLBACK LogOwnerWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM *********************************************************************/ HWND CreateLogWindow(HINSTANCE hInstance, int nCmdShow) { - static const char *szWndName = "JunkbusterLogWindow"; - static const char *szWndTitle = "Junkbuster"; + static const char *szWndName = "PrivoxyLogWindow"; + static const char *szWndTitle = "Privoxy"; HWND hwnd = NULL; HWND hwndOwner = (g_bShowOnTaskBar) ? NULL : CreateHiddenLogOwnerWindow(hInstance); - HWND hwndChild = NULL; RECT rcClient; WNDCLASSEX wc; @@ -768,12 +788,14 @@ HWND CreateLogWindow(HINSTANCE hInstance, int nCmdShow) nCmdShow == SW_MINIMIZE || nCmdShow == SW_SHOWMINNOACTIVE)) { + g_bShowLogWindow = FALSE; nCmdShow = SW_HIDE; } ShowWindow(hwnd, nCmdShow); UpdateWindow(hwnd); + GetClientRect(g_hwndLogFrame, &rcClient); SetWindowPos(g_hwndLogBox, NULL, rcClient.left, rcClient.top, rcClient.right - rcClient.left, rcClient.bottom - rcClient.top, SWP_NOZORDER); @@ -839,6 +861,7 @@ void ShowLogWindow(BOOL bShow) { SetForegroundWindow(g_hwndLogFrame); SetWindowPos(g_hwndLogFrame, HWND_TOP, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE | SWP_NOMOVE); + } else if (g_bShowOnTaskBar) { @@ -848,7 +871,6 @@ void ShowLogWindow(BOOL bShow) { ShowWindow(g_hwndLogFrame, SW_HIDE); } - } @@ -857,9 +879,11 @@ void ShowLogWindow(BOOL bShow) * Function : EditFile * * Description : Opens the specified setting file for editing. + * FIXME: What if the file has no associated application. Check for return values +* from ShellExecute?? * * Parameters : - * 1 : filename = filename from the config (aka junkbstr.txt) file. + * 1 : filename = filename from the config (aka config.txt) file. * * Returns : N/A * @@ -899,7 +923,6 @@ void OnLogRButtonUp(int nModifier, int x, int y) if (hMenu != NULL) { HMENU hMenuPopup = GetSubMenu(hMenu, 0); - char *szURL; /* Check if there is a selection */ CHARRANGE range; @@ -913,38 +936,6 @@ void OnLogRButtonUp(int nModifier, int x, int y) EnableMenuItem(hMenuPopup, ID_EDIT_COPY, MF_BYCOMMAND | MF_ENABLED); } - /* Check if cursor is over a link */ - szURL = LogGetURLUnderCursor(); - if (szURL) - { - MENUITEMINFO item; - TCHAR szMenuItemTemplate[1000]; - char *szMenuItem; - - memset(&item, 0, sizeof(item)); - item.cbSize = sizeof(item); - item.fMask = MIIM_TYPE | MIIM_ID | MIIM_STATE; - item.fType = MFT_STRING; - item.fState = MFS_ENABLED; - item.wID = ID_NEW_BLOCKER; - - /* Put the item into the menu */ - memset(szMenuItemTemplate, 0, sizeof(szMenuItemTemplate)); - LoadString(g_hInstance, IDS_NEW_BLOCKER, szMenuItemTemplate, sizeof(szMenuItemTemplate) / sizeof(szMenuItemTemplate[0])); - - szMenuItem = (char *)malloc(strlen(szMenuItemTemplate) + strlen(szURL) + 1); - sprintf(szMenuItem, szMenuItemTemplate, szURL); - - item.dwTypeData = szMenuItem; - item.cch = strlen(szMenuItem); - - InsertMenuItem(hMenuPopup, 1, TRUE, &item); - - SetDefaultRule(szURL); - - free(szURL); - } - /* Display the popup */ TrackPopupMenu(hMenuPopup, TPM_LEFTALIGN | TPM_TOPALIGN | TPM_RIGHTBUTTON, x, y, 0, g_hwndLogFrame, NULL); DestroyMenu(hMenu); @@ -969,8 +960,10 @@ void OnLogCommand(int nCommand) { switch (nCommand) { - case ID_SHOWWINDOW: - ShowLogWindow(TRUE); + case ID_TOGGLE_SHOWWINDOW: + g_bShowLogWindow = !g_bShowLogWindow; + + ShowLogWindow(g_bShowLogWindow); break; case ID_FILE_EXIT: @@ -1005,11 +998,11 @@ void OnLogCommand(int nCommand) /* SaveLogSettings(); */ break; -#ifdef TOGGLE +#ifdef FEATURE_TOGGLE /* by haroon - change toggle to its opposite value */ - case ID_TOGGLE_IJB: - g_bToggleIJB = !g_bToggleIJB; - if (g_bToggleIJB) + case ID_TOGGLE_ENABLED: + global_toggle_state = !global_toggle_state; + if (global_toggle_state) { log_error(LOG_LEVEL_INFO, "Now toggled ON."); } @@ -1017,91 +1010,50 @@ void OnLogCommand(int nCommand) { log_error(LOG_LEVEL_INFO, "Now toggled OFF."); } + SetIdleIcon(); break; -#endif +#endif /* def FEATURE_TOGGLE */ - case ID_RELOAD_CONFIG: - configret = 0; - load_config( 1 ); - - if ( configret ) - { - log_error(LOG_LEVEL_ERROR, "load_config encountered a problem! You should probably restart IJB."); - } - else - { - log_error(LOG_LEVEL_INFO, "Configuration has been reloaded."); - } - break; - - case ID_TOOLS_EDITJUNKBUSTER: + case ID_TOOLS_EDITCONFIG: EditFile(configfile); break; - case ID_TOOLS_EDITBLOCKERS: - EditFile(blockfile); - break; - - case ID_TOOLS_EDITCOOKIES: - EditFile(cookiefile); - break; - - case ID_TOOLS_EDITFORWARD: - EditFile(forwardfile); + case ID_TOOLS_EDITDEFAULTACTIONS: + EditFile(g_default_actions_file); break; -#ifdef ACL_FILES - case ID_TOOLS_EDITACLS: - EditFile(aclfile); + case ID_TOOLS_EDITUSERACTIONS: + EditFile(g_user_actions_file); break; -#endif /* def ACL_FILES */ - -#ifdef USE_IMAGE_LIST - case ID_TOOLS_EDITIMAGE: - EditFile(imagefile); - break; -#endif /* def USE_IMAGE_LIST */ - -#ifdef PCRS - case ID_TOOLS_EDITPERLRE: - EditFile(re_filterfile); - break; -#endif -#ifdef KILLPOPUPS - case ID_TOOLS_EDITPOPUPS: - EditFile(popupfile); + case ID_TOOLS_EDITFILTERS: + EditFile(g_re_filterfile); break; -#endif /* def KILLPOPUPS */ -#ifdef TRUST_FILES +#ifdef FEATURE_TRUST case ID_TOOLS_EDITTRUST: - EditFile(trustfile); - break; -#endif /* def TRUST_FILES */ - - case ID_NEW_BLOCKER: - ShowRulesDialog(g_hwndLogFrame); + EditFile(g_trustfile); break; +#endif /* def FEATURE_TRUST */ case ID_HELP_GPL: - ShellExecute(g_hwndLogFrame, "open", "gpl.html", NULL, NULL, SW_SHOWNORMAL); + ShellExecute(g_hwndLogFrame, "open", "LICENSE.txt", NULL, NULL, SW_SHOWNORMAL); break; case ID_HELP_FAQ: - ShellExecute(g_hwndLogFrame, "open", "ijbfaq.html", NULL, NULL, SW_SHOWNORMAL); + ShellExecute(g_hwndLogFrame, "open", "doc\\faq\\index.html", NULL, NULL, SW_SHOWNORMAL); break; case ID_HELP_MANUAL: - ShellExecute(g_hwndLogFrame, "open", "ijbman.html", NULL, NULL, SW_SHOWNORMAL); + ShellExecute(g_hwndLogFrame, "open", "doc\\user-manual\\index.html", NULL, NULL, SW_SHOWNORMAL); break; case ID_HELP_STATUS: - ShellExecute(g_hwndLogFrame, "open", "Junkbuster Status.URL", NULL, NULL, SW_SHOWNORMAL); + ShellExecute(g_hwndLogFrame, "open", CGI_PREFIX "show-status", NULL, NULL, SW_SHOWNORMAL); break; - case ID_HELP_ABOUTJUNKBUSTER: - MessageBox(g_hwndLogFrame, win32_blurb, "Junkbuster Information", MB_OK); + case ID_HELP_ABOUT: + MessageBox(g_hwndLogFrame, win32_blurb, "About Privoxy", MB_OK); break; default: @@ -1128,34 +1080,23 @@ void OnLogCommand(int nCommand) void OnLogInitMenu(HMENU hmenu) { /* Only enable editors if there is a file to edit */ - EnableMenuItem(hmenu, ID_TOOLS_EDITCOOKIES, MF_BYCOMMAND | (cookiefile ? MF_ENABLED : MF_GRAYED)); - EnableMenuItem(hmenu, ID_TOOLS_EDITBLOCKERS, MF_BYCOMMAND | (blockfile ? MF_ENABLED : MF_GRAYED)); - EnableMenuItem(hmenu, ID_TOOLS_EDITFORWARD, MF_BYCOMMAND | (forwardfile ? MF_ENABLED : MF_GRAYED)); -#ifdef ACL_FILES - EnableMenuItem(hmenu, ID_TOOLS_EDITACLS, MF_BYCOMMAND | (aclfile ? MF_ENABLED : MF_GRAYED)); -#endif /* def ACL_FILES */ -#ifdef USE_IMAGE_LIST - EnableMenuItem(hmenu, ID_TOOLS_EDITIMAGE, MF_BYCOMMAND | (imagefile ? MF_ENABLED : MF_GRAYED)); -#endif /* def USE_IMAGE_LIST */ -#ifdef KILLPOPUPS - EnableMenuItem(hmenu, ID_TOOLS_EDITPOPUPS, MF_BYCOMMAND | (popupfile ? MF_ENABLED : MF_GRAYED)); -#endif /* def KILLPOPUPS */ -#ifdef PCRS - EnableMenuItem(hmenu, ID_TOOLS_EDITPERLRE, MF_BYCOMMAND | (re_filterfile ? MF_ENABLED : MF_GRAYED)); -#endif -#ifdef TRUST_FILES - EnableMenuItem(hmenu, ID_TOOLS_EDITTRUST, MF_BYCOMMAND | (trustfile ? MF_ENABLED : MF_GRAYED)); -#endif /* def TRUST_FILES */ + EnableMenuItem(hmenu, ID_TOOLS_EDITDEFAULTACTIONS, MF_BYCOMMAND | (g_default_actions_file ? MF_ENABLED : MF_GRAYED)); + EnableMenuItem(hmenu, ID_TOOLS_EDITUSERACTIONS, MF_BYCOMMAND | (g_user_actions_file ? MF_ENABLED : MF_GRAYED)); + EnableMenuItem(hmenu, ID_TOOLS_EDITFILTERS, MF_BYCOMMAND | (g_re_filterfile ? MF_ENABLED : MF_GRAYED)); +#ifdef FEATURE_TRUST + EnableMenuItem(hmenu, ID_TOOLS_EDITTRUST, MF_BYCOMMAND | (g_trustfile ? MF_ENABLED : MF_GRAYED)); +#endif /* def FEATURE_TRUST */ /* Check/uncheck options */ CheckMenuItem(hmenu, ID_VIEW_LOGMESSAGES, MF_BYCOMMAND | (g_bLogMessages ? MF_CHECKED : MF_UNCHECKED)); CheckMenuItem(hmenu, ID_VIEW_MESSAGEHIGHLIGHTING, MF_BYCOMMAND | (g_bHighlightMessages ? MF_CHECKED : MF_UNCHECKED)); CheckMenuItem(hmenu, ID_VIEW_LIMITBUFFERSIZE, MF_BYCOMMAND | (g_bLimitBufferSize ? MF_CHECKED : MF_UNCHECKED)); CheckMenuItem(hmenu, ID_VIEW_ACTIVITYANIMATION, MF_BYCOMMAND | (g_bShowActivityAnimation ? MF_CHECKED : MF_UNCHECKED)); -#ifdef TOGGLE +#ifdef FEATURE_TOGGLE /* by haroon - menu item for Enable toggle on/off */ - CheckMenuItem(hmenu, ID_TOGGLE_IJB, MF_BYCOMMAND | (g_bToggleIJB ? MF_CHECKED : MF_UNCHECKED)); -#endif + CheckMenuItem(hmenu, ID_TOGGLE_ENABLED, MF_BYCOMMAND | (global_toggle_state ? MF_CHECKED : MF_UNCHECKED)); +#endif /* def FEATURE_TOGGLE */ + CheckMenuItem(hmenu, ID_TOGGLE_SHOWWINDOW, MF_BYCOMMAND | (g_bShowLogWindow ? MF_CHECKED : MF_UNCHECKED)); } @@ -1182,7 +1123,7 @@ void OnLogTimer(int nTimer) case TIMER_ANIMSTOP_ID: g_nAnimFrame = 0; - TraySetIcon(g_hwndTray, 1, g_hiconIdle); + SetIdleIcon(); KillTimer(g_hwndLogFrame, TIMER_ANIM_ID); KillTimer(g_hwndLogFrame, TIMER_ANIMSTOP_ID); break; @@ -1203,6 +1144,31 @@ void OnLogTimer(int nTimer) } +/********************************************************************* + * + * Function : SetIdleIcon + * + * Description : Sets the tray icon to either idle or off + * + * Parameters : none + * + * Returns : N/A + * + *********************************************************************/ +void SetIdleIcon() +{ +#ifdef FEATURE_TOGGLE + if (!global_toggle_state) + { + TraySetIcon(g_hwndTray, 1, g_hiconOff); + /* log_error(LOG_LEVEL_INFO, "Privoxy OFF icon selected."); */ + } + else +#endif /* def FEATURE_TOGGLE */ + TraySetIcon(g_hwndTray, 1, g_hiconIdle); +} + + /********************************************************************* * * Function : LogRichEditProc @@ -1229,8 +1195,16 @@ LRESULT CALLBACK LogRichEditProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lPa pt.y = HIWORD(lParam); ClientToScreen(hwnd, &pt); OnLogRButtonUp(wParam, pt.x, pt.y); + return 0; + } + case WM_CHAR: + { + if ((GetKeyState(VK_CONTROL) != 0) && (wParam == 4)) /* ctrl+d */ + { + OnLogCommand(ID_VIEW_CLEARLOG); + return 0; + } } - return 0; } return CallWindowProc(g_fnLogBox, hwnd, uMsg, wParam, lParam); @@ -1270,6 +1244,7 @@ LRESULT CALLBACK LogWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lPara return 0; case WM_SHOWWINDOW: + g_bShowLogWindow = wParam; case WM_SIZE: /* Resize the logging window to fit the new frame */ if (g_hwndLogBox) @@ -1307,12 +1282,21 @@ LRESULT CALLBACK LogWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lPara return 0; } break; + + case WM_CHAR: + if ((GetKeyState(VK_CONTROL) != 0) && (wParam == 4)) /* ctrl+d */ + { + OnLogCommand(ID_VIEW_CLEARLOG); + return 0; + } + break; } return DefWindowProc(hwnd, uMsg, wParam, lParam); } +#endif /* ndef _WIN_CONSOLE - entire file */ /* Local Variables: