X-Git-Url: http://www.privoxy.org/gitweb/?p=privoxy.git;a=blobdiff_plain;f=w32log.c;h=9c92131a4132530581c3ed30ce1c305a952299cb;hp=0948e4b012e233318250eee6e33950ea28b2abf0;hb=1284f78d7c4454f212d1283695d76d78e23d6b4f;hpb=375061cb39433e194051236d59d496815cc8db9e diff --git a/w32log.c b/w32log.c index 0948e4b0..9c92131a 100644 --- a/w32log.c +++ b/w32log.c @@ -1,4 +1,4 @@ -const char w32log_rcs[] = "$Id: w32log.c,v 1.22 2002/03/24 12:48:23 jongfoster Exp $"; +const char w32log_rcs[] = "$Id: w32log.c,v 1.29 2008/12/20 15:27:40 ler762 Exp $"; /********************************************************************* * * File : $Source: /cvsroot/ijbswa/current/w32log.c,v $ @@ -32,6 +32,53 @@ const char w32log_rcs[] = "$Id: w32log.c,v 1.22 2002/03/24 12:48:23 jongfoster E * * Revisions : * $Log: w32log.c,v $ + * Revision 1.29 2008/12/20 15:27:40 ler762 + * The crunch log message format changed, so update the strings to highlight + * in the log window. + * + * Revision 1.28 2008/11/02 14:37:47 ler762 + * commit the part of the patches I've been using that were written by torford and gjmurphy + * [ 1824315 ] Minor code cleanup + * [ 1781135 ] Patch - Add clear log, select all, and Accelerators for w32 + * http://sourceforge.net/tracker/?func=detail&atid=311118&aid=1781135&group_id=11118 + * The full patch adds control keys A(select all), C(copy) and D(delete all) to the + * Privoxy log window menu. Select all and copy work for me without the patch + * (albeit without showing the accelerator keys on the menu), so the only part of the + * patch I've been using for the last year or so has been the ctrl-d to delete + * everything in the Privoxy log window. + * + * Revision 1.27 2006/07/18 14:48:48 david__schmidt + * Reorganizing the repository: swapping out what was HEAD (the old 3.1 branch) + * with what was really the latest development (the v_3_0_branch branch) + * + * Revision 1.25.2.5 2003/04/04 12:48:51 oes + * Fixed bug #711865: + * - Made tray menu correctly reflect initial window visibility state + * - Hopefully fixed problem where log window contents wasn't visible + * until vertical scroll bar was clicked. Thanks to Guy for the fix! + * + * Revision 1.25.2.4 2003/03/11 11:53:59 oes + * Cosmetic: Renamed cryptic variable + * + * Revision 1.25.2.3 2002/11/20 14:39:05 oes + * Fixed compiler warning + * + * Revision 1.25.2.2 2002/09/25 15:23:10 oes + * Uncheck the "Show Privoxy Window" taskbar menu item when window gets minimized. Fixes bug #606804 + * + * Revision 1.25.2.1 2002/08/21 17:59:05 oes + * - "Show Privoxy Window" now a toggle + * - Temp kludge to let user and default action file be edited through win32 GUI (FR 592080) + * + * Revision 1.25 2002/04/04 00:36:36 gliptak + * always use pcre for matching + * + * Revision 1.24 2002/03/31 17:19:00 jongfoster + * Win32 only: Enabling STRICT to fix a VC++ compile warning. + * + * Revision 1.23 2002/03/26 22:57:10 jongfoster + * Web server name should begin www. + * * Revision 1.22 2002/03/24 12:48:23 jongfoster * Fixing doc links * @@ -150,6 +197,9 @@ const char w32log_rcs[] = "$Id: w32log.c,v 1.22 2002/03/24 12:48:23 jongfoster E #include #include +#ifndef STRICT +#define STRICT +#endif #include #include @@ -212,6 +262,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; @@ -239,7 +292,8 @@ int g_nFontSize = DEFAULT_LOG_FONT_SIZE; /* FIXME: this is a kludge */ -const char * g_actions_file = NULL; +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; @@ -247,8 +301,6 @@ const char * g_trustfile = NULL; /* FIXME: end kludge */ - -#ifdef REGEX /* Regular expression for detected URLs */ #define RE_URL "http:[^ \n\r]*" @@ -266,7 +318,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 }, @@ -294,13 +355,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 @@ -311,7 +371,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; @@ -329,6 +389,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); /********************************************************************* @@ -348,6 +409,7 @@ 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_ANIMATED1 + i)); @@ -390,6 +452,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]); @@ -411,14 +474,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 - } @@ -435,14 +495,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 - } @@ -460,7 +517,6 @@ void LogDestroyPatternMatchingBuffers(void) char *LogGetURLUnderCursor(void) { char *szResult = NULL; -#ifdef REGEX regex_t re; POINT ptCursor; POINTL ptl; @@ -503,7 +559,6 @@ char *LogGetURLUnderCursor(void) regfree(&re); } -#endif return szResult; } @@ -514,7 +569,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 @@ -526,9 +581,7 @@ char *LogGetURLUnderCursor(void) *********************************************************************/ int LogPutString(const char *pszText) { -#ifdef REGEX int i; -#endif int result = 0; if (pszText == NULL || strlen(pszText) == 0) @@ -546,7 +599,6 @@ int LogPutString(const char *pszText) */ EnterCriticalSection(&g_criticalsection); -#ifdef REGEX if (g_bHighlightMessages) { regmatch_t match; @@ -601,13 +653,10 @@ int LogPutString(const char *pszText) } } } -#endif result = LogPutStringNoMatch(pszText, STYLE_NONE); -#ifdef REGEX end: -#endif LeaveCriticalSection(&g_criticalsection); return result; @@ -757,10 +806,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); + } -} +} /********************************************************************* @@ -889,12 +945,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); @@ -960,6 +1018,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) { @@ -969,7 +1028,6 @@ void ShowLogWindow(BOOL bShow) { ShowWindow(g_hwndLogFrame, SW_HIDE); } - } @@ -1059,8 +1117,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: @@ -1098,8 +1158,8 @@ void OnLogCommand(int nCommand) #ifdef FEATURE_TOGGLE /* by haroon - change toggle to its opposite value */ case ID_TOGGLE_ENABLED: - g_bToggleIJB = !g_bToggleIJB; - if (g_bToggleIJB) + global_toggle_state = !global_toggle_state; + if (global_toggle_state) { log_error(LOG_LEVEL_INFO, "Now toggled ON."); } @@ -1107,6 +1167,7 @@ void OnLogCommand(int nCommand) { log_error(LOG_LEVEL_INFO, "Now toggled OFF."); } + SetIdleIcon(); break; #endif /* def FEATURE_TOGGLE */ @@ -1114,8 +1175,12 @@ void OnLogCommand(int nCommand) EditFile(configfile); break; - case ID_TOOLS_EDITACTIONS: - EditFile(g_actions_file); + case ID_TOOLS_EDITDEFAULTACTIONS: + EditFile(g_default_actions_file); + break; + + case ID_TOOLS_EDITUSERACTIONS: + EditFile(g_user_actions_file); break; case ID_TOOLS_EDITFILTERS: @@ -1172,7 +1237,8 @@ void OnLogCommand(int nCommand) void OnLogInitMenu(HMENU hmenu) { /* Only enable editors if there is a file to edit */ - EnableMenuItem(hmenu, ID_TOOLS_EDITACTIONS, MF_BYCOMMAND | (g_actions_file ? MF_ENABLED : MF_GRAYED)); + 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)); @@ -1185,8 +1251,9 @@ void OnLogInitMenu(HMENU hmenu) CheckMenuItem(hmenu, ID_VIEW_ACTIVITYANIMATION, MF_BYCOMMAND | (g_bShowActivityAnimation ? MF_CHECKED : MF_UNCHECKED)); #ifdef FEATURE_TOGGLE /* by haroon - menu item for Enable toggle on/off */ - CheckMenuItem(hmenu, ID_TOGGLE_ENABLED, MF_BYCOMMAND | (g_bToggleIJB ? MF_CHECKED : MF_UNCHECKED)); + 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)); } @@ -1213,7 +1280,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; @@ -1234,6 +1301,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 @@ -1260,8 +1352,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); @@ -1301,6 +1401,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) @@ -1338,6 +1439,14 @@ 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);