-const char w32log_rcs[] = "$Id: w32log.c,v 1.1.1.1 2001/05/15 13:59:07 oes Exp $";
/*********************************************************************
*
* File : $Source: /cvsroot/ijbswa/current/w32log.c,v $
*
* Purpose : Functions for creating and destroying the log window,
- * ouputting strings, processing messages and so on.
+ * outputting 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. https://www.privoxy.org/
*
* Written by and Copyright (C) 1999 Adam Lock
* <locka@iol.ie>
*
- * This program is free software; you can redistribute it
+ * This program is free software; you can redistribute it
* and/or modify it under the terms of the GNU General
* Public License as published by the Free Software
* Foundation; either version 2 of the License, or (at
* or write to the Free Software Foundation, Inc., 59
* Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
- * Revisions :
- * $Log: w32log.c,v $
- * Revision 1.1.1.1 2001/05/15 13:59:07 oes
- * Initial import of version 2.9.3 source tree
- *
- *
*********************************************************************/
-\f
+
#include "config.h"
#include <assert.h>
#include <stdio.h>
+#ifndef STRICT
+#define STRICT
+#endif
+#include <winsock2.h>
#include <windows.h>
#include <richedit.h>
#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;
-
-#ifdef __MINGW32__
-#include "cygwin.h"
-const char cygwin_h_rcs[] = CYGWIN_H_VERSION;
-#endif
-
-const char w32log_h_rcs[] = W32LOG_H_VERSION;
+#ifndef _WIN_CONSOLE /* entire file */
/*
* Timers and the various durations
/* 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;
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_default_filterfile = NULL;
+const char * g_user_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]*"
{ 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 },
+ { "Connect: Found reusable socket", STYLE_HIGHLIGHT },
+ { "Connect: Reusing server socket", STYLE_HIGHLIGHT },
+ { "Connect: Created new connection to", STYLE_HIGHLIGHT },
+ { "hung up on us", STYLE_HIGHLIGHT },
+ { "Info: Loading actions file:", STYLE_HIGHLIGHT },
+ { "Info: Loading filter file:", STYLE_HIGHLIGHT },
+ { "Info: Now toggled ", STYLE_HIGHLIGHT },
+ { "Crunching Referer:", STYLE_HIGHLIGHT },
+ /* what are all the possible error strings?? */
+ { "Error:", STYLE_HIGHLIGHT },
/* http headers */
{ "referer:", STYLE_HEADER },
{ "proxy-connection:", STYLE_HEADER },
/* this is the terminator statement - do not delete! */
{ NULL, STYLE_NONE }
};
-#endif /* def REGEX */
-
/*
* Public variables
*/
HWND g_hwndLogFrame;
+HICON g_hiconApp;
/*
* Private variables
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;
static void LogCreatePatternMatchingBuffers(void);
static void LogDestroyPatternMatchingBuffers(void);
static int LogPutStringNoMatch(const char *pszText, int style);
+static void SetIdleIcon(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();
TrayDeleteIcon(g_hwndTray, 1);
DeleteObject(g_hiconApp);
DeleteObject(g_hiconIdle);
+ DeleteObject(g_hiconOff);
for (i = 0; i < ANIM_FRAMES; i++)
{
DeleteObject(g_hiconAnim[i]);
*********************************************************************/
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
-
}
*********************************************************************/
void LogDestroyPatternMatchingBuffers(void)
{
-#ifdef REGEX
int i;
for (i = 0; patterns_to_highlight[i].str != NULL; i++)
{
regfree(&patterns_to_highlight[i].buffer);
}
-#endif
-
-}
-
-
-/*********************************************************************
- *
- * Function : LogGetURLUnderCursor
- *
- * Description : Returns the URL from under the cursor (remember to free it!).
- *
- * Parameters : None
- *
- * Returns : NULL or a pointer to an URL string.
- *
- *********************************************************************/
-char *LogGetURLUnderCursor(void)
-{
- char *szResult = NULL;
-#ifdef REGEX
- regex_t re;
- POINT ptCursor;
- POINTL ptl;
- DWORD nPos;
- DWORD nWordStart = 0;
- DWORD nWordEnd = 0;
-
- regcomp(&re, RE_URL, REG_ICASE);
-
- /* Get the position of the cursor over the text window */
- GetCursorPos(&ptCursor);
- ScreenToClient(g_hwndLogBox, &ptCursor);
- ptl.x = ptCursor.x;
- ptl.y = ptCursor.y;
-
- /* Search backwards and fowards to obtain the word that is highlighted */
- nPos = LOWORD(SendMessage(g_hwndLogBox, EM_CHARFROMPOS, 0, (LPARAM) &ptl));
- nWordStart = SendMessage(g_hwndLogBox, EM_FINDWORDBREAK, WB_LEFT, nPos);
- nWordEnd = SendMessage(g_hwndLogBox, EM_FINDWORDBREAK, WB_RIGHTBREAK, nPos);
-
- /* Compare the string to the pattern */
- if (nWordEnd > nWordStart)
- {
- TEXTRANGE range;
- regmatch_t match;
-
- range.chrg.cpMin = nWordStart;
- range.chrg.cpMax = nWordEnd;
- range.lpstrText = (LPSTR)zalloc(nWordEnd - nWordStart + 1);
- SendMessage(g_hwndLogBox, EM_GETTEXTRANGE, 0, (LPARAM) &range);
-
- if (regexec(&re, range.lpstrText, 1, &match, 0) == 0)
- {
- szResult = range.lpstrText;
- }
- else
- {
- free(range.lpstrText);
- }
-
- regfree(&re);
- }
-#endif
- return szResult;
-
}
* 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
*********************************************************************/
int LogPutString(const char *pszText)
{
-#ifdef REGEX
int i;
-#endif
int result = 0;
- if (pszText == NULL || strlen(pszText) == 0)
+ if (!g_bLogMessages)
{
return 1;
}
- if (!g_bLogMessages)
+ if (pszText == NULL || strlen(pszText) == 0)
{
return 1;
}
*/
EnterCriticalSection(&g_criticalsection);
-#ifdef REGEX
if (g_bHighlightMessages)
{
regmatch_t match;
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]);
}
}
}
}
-#endif
result = LogPutStringNoMatch(pszText, STYLE_NONE);
-#ifdef REGEX
end:
-#endif
LeaveCriticalSection(&g_criticalsection);
return result;
/* 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 */
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);
+
}
}
*********************************************************************/
HWND CreateHiddenLogOwnerWindow(HINSTANCE hInstance)
{
- static const char *szWndName = "JunkbusterLogLogOwner";
+ static const char *szWndName = "PrivoxyLogOwner";
WNDCLASS wc;
HWND hwnd;
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;
hwnd = CreateWindow(szWndName, szWndName,
WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
- CW_USEDEFAULT, NULL, NULL, hInstance, NULL );
+ CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
return hwnd;
*********************************************************************/
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;
/* SendMessage(g_hwndLogBox, EM_SETWORDWRAPMODE, 0, 0); */
/* Subclass the control to catch certain messages */
- g_fnLogBox = (WNDPROC) GetWindowLong(g_hwndLogBox, GWL_WNDPROC);
- SetWindowLong(g_hwndLogBox, GWL_WNDPROC, (LONG) LogRichEditProc);
+ g_fnLogBox = (WNDPROC) GetWindowLongPtr(g_hwndLogBox, GWLP_WNDPROC);
+ SetWindowLongPtr(g_hwndLogBox, GWLP_WNDPROC, (LONG_PTR) LogRichEditProc);
/* Minimizing looks stupid when the log window is not on the task bar, so hide instead */
if (!g_bShowOnTaskBar &&
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);
{
SetForegroundWindow(g_hwndLogFrame);
SetWindowPos(g_hwndLogFrame, HWND_TOP, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE | SWP_NOMOVE);
+
}
else if (g_bShowOnTaskBar)
{
{
ShowWindow(g_hwndLogFrame, SW_HIDE);
}
-
}
* 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
*
if (hMenu != NULL)
{
HMENU hMenuPopup = GetSubMenu(hMenu, 0);
- char *szURL;
/* Check if there is a selection */
CHARRANGE range;
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);
{
switch (nCommand)
{
- case ID_SHOWWINDOW:
- ShowLogWindow(TRUE);
+ case ID_TOGGLE_SHOWWINDOW:
+ g_bShowLogWindow = !g_bShowLogWindow;
+
+ ShowLogWindow(g_bShowLogWindow);
break;
case ID_FILE_EXIT:
/* SaveLogSettings(); */
break;
-#ifdef TOGGLE
- /* by haroon - change toggle to its opposite value */
- case ID_TOGGLE_IJB:
- g_bToggleIJB = !g_bToggleIJB;
- if (g_bToggleIJB)
- {
- log_error(LOG_LEVEL_INFO, "Now toggled ON.");
- }
- else
- {
- log_error(LOG_LEVEL_INFO, "Now toggled OFF.");
- }
+#ifdef FEATURE_TOGGLE
+ case ID_TOGGLE_ENABLED:
+ global_toggle_state = !global_toggle_state;
+ log_error(LOG_LEVEL_INFO,
+ "Now toggled %s", global_toggle_state ? "ON" : "OFF");
+ /*
+ * Leverage TIMER_ANIMSTOP_ID to set the idle icon through the
+ * "application queue". According to MSDN, 10 milliseconds are
+ * the lowest value possible and seem to be close enough to
+ * "instantly".
+ */
+ SetTimer(g_hwndLogFrame, TIMER_ANIMSTOP_ID, 10, NULL);
break;
-#endif
-
- case ID_RELOAD_CONFIG:
- configret = 0;
- load_config( 1 );
+#endif /* def FEATURE_TOGGLE */
- 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);
+ case ID_TOOLS_EDITDEFAULTACTIONS:
+ EditFile(g_default_actions_file);
break;
- case ID_TOOLS_EDITPERMISSIONS:
- EditFile(permissions_file);
+ case ID_TOOLS_EDITUSERACTIONS:
+ EditFile(g_user_actions_file);
break;
- case ID_TOOLS_EDITFORWARD:
- EditFile(forwardfile);
+ case ID_TOOLS_EDITDEFAULTFILTERS:
+ EditFile(g_default_filterfile);
break;
-#ifdef ACL_FILES
- case ID_TOOLS_EDITACLS:
- EditFile(aclfile);
+ case ID_TOOLS_EDITUSERFILTERS:
+ EditFile(g_user_filterfile);
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 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:
void OnLogInitMenu(HMENU hmenu)
{
/* Only enable editors if there is a file to edit */
- EnableMenuItem(hmenu, ID_TOOLS_EDITPERMISSIONS, MF_BYCOMMAND | (permissions_file ? 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 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_EDITDEFAULTFILTERS, MF_BYCOMMAND | (g_default_filterfile ? MF_ENABLED : MF_GRAYED));
+ EnableMenuItem(hmenu, ID_TOOLS_EDITUSERFILTERS, MF_BYCOMMAND | (g_user_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));
}
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;
}
+/*********************************************************************
+ *
+ * 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);
+ }
+ else
+#endif /* def FEATURE_TOGGLE */
+ TraySetIcon(g_hwndTray, 1, g_hiconIdle);
+}
+
+
/*********************************************************************
*
* Function : LogRichEditProc
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);
return 0;
case WM_CLOSE:
- /* This is the end - beautiful friend - the end */
+ /* This is the end - my only friend - the end */
DestroyWindow(g_hwndLogBox);
DestroyWindow(g_hwndLogFrame);
return 0;
return 0;
case WM_SHOWWINDOW:
- case WM_SIZE:
+ g_bShowLogWindow = wParam;
+ case WM_SIZE: /* note: implicit-fallthrough */
/* Resize the logging window to fit the new frame */
if (g_hwndLogBox)
{
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: