Compare commits
17 Commits
Author | SHA1 | Date | |
---|---|---|---|
02c92599fa | |||
26acd02e9f | |||
e7da3a052d | |||
b6426a1e9f | |||
f2d93f5abe | |||
9ab03c5d23 | |||
3118df2042 | |||
c7849a8921 | |||
13f6d9265a | |||
241dd69b08 | |||
539949973c | |||
e7c88e0f83 | |||
85bdb06cad | |||
a0e80ebda2 | |||
1186236ac1 | |||
217fa9d0f9 | |||
6c8b6ce23f |
24
configure.ac
24
configure.ac
@ -1,6 +1,6 @@
|
||||
dnl Process this file with autoconf to produce a configure script.
|
||||
|
||||
AC_INIT([HexChat],[2.12.3])
|
||||
AC_INIT([HexChat],[2.12.4])
|
||||
|
||||
AC_PREREQ([2.64])
|
||||
AC_COPYRIGHT([Copyright (C) 1998-2010 Peter Zelezny])
|
||||
@ -134,10 +134,6 @@ AC_ARG_ENABLE(checksum,
|
||||
[AS_HELP_STRING([--disable-checksum],[disable the Checksum plugin])],
|
||||
checksum=$enableval, checksum=yes)
|
||||
|
||||
AC_ARG_ENABLE(doat,
|
||||
[AS_HELP_STRING([--disable-doat],[disable the Do At plugin])],
|
||||
doat=$enableval, doat=yes)
|
||||
|
||||
AC_ARG_ENABLE(fishlim,
|
||||
[AS_HELP_STRING([--disable-fishlim],[disable the FiSHLiM plugin])],
|
||||
fishlim=$enableval, fishlim=yes)
|
||||
@ -457,21 +453,6 @@ AS_IF([test "$checksum" != "no"], [
|
||||
])
|
||||
])
|
||||
|
||||
dnl *********************************************************************
|
||||
dnl ** DO AT ************************************************************
|
||||
dnl *********************************************************************
|
||||
|
||||
AS_IF([test "$doat" != "no"], [
|
||||
AC_MSG_CHECKING(for plugin interface used by Do At)
|
||||
doat=no
|
||||
AS_IF([test "$plugin" = yes], [
|
||||
doat=yes
|
||||
AC_MSG_RESULT([yes])
|
||||
], [
|
||||
AC_MSG_RESULT([plugins are disabled, use the --enable-plugin option for Do At])
|
||||
])
|
||||
])
|
||||
|
||||
dnl *********************************************************************
|
||||
dnl ** FiSHLiM **********************************************************
|
||||
dnl *********************************************************************
|
||||
@ -609,7 +590,6 @@ AM_CONDITIONAL(DO_LUA, test "x$lua" = "xyes")
|
||||
AM_CONDITIONAL(DO_PYTHON, test "x$python" != "xno")
|
||||
AM_CONDITIONAL(DO_PLUGIN, test "x$plugin" = "xyes")
|
||||
AM_CONDITIONAL(DO_CHECKSUM, test "x$checksum" = "xyes")
|
||||
AM_CONDITIONAL(DO_DOAT, test "x$doat" = "xyes")
|
||||
AM_CONDITIONAL(DO_FISHLIM, test "x$fishlim" = "xyes")
|
||||
AM_CONDITIONAL(DO_SYSINFO, test "x$sysinfo" = "xyes")
|
||||
AM_CONDITIONAL(DO_STATIC_ANALYSIS, test "x$analyze" = "xyes")
|
||||
@ -767,7 +747,6 @@ plugins/lua/Makefile
|
||||
plugins/python/Makefile
|
||||
plugins/perl/Makefile
|
||||
plugins/checksum/Makefile
|
||||
plugins/doat/Makefile
|
||||
plugins/fishlim/Makefile
|
||||
plugins/sysinfo/Makefile
|
||||
po/Makefile.in
|
||||
@ -794,7 +773,6 @@ echo Perl .................. : $perl
|
||||
echo Python ................ : $python
|
||||
echo
|
||||
echo Checksum .............. : $checksum
|
||||
echo Do At ................. : $doat
|
||||
echo FiSHLiM ............... : $fishlim
|
||||
echo SysInfo ............... : $sysinfo
|
||||
echo
|
||||
|
@ -22,5 +22,35 @@
|
||||
<_caption>Main Chat Window</_caption>
|
||||
</screenshot>
|
||||
</screenshots>
|
||||
<releases>
|
||||
<release date="2016-12-10" version="2.12.4">
|
||||
<description>
|
||||
<p>This is another bug fix release:</p>
|
||||
<ul>
|
||||
<li>Fix issue with timers causing ping timeouts</li>
|
||||
<li>Fix building against OpenSSL 1.1</li>
|
||||
<li>Fix /exec output printing invalid utf8</li>
|
||||
<li>Replace doat plugin with an internal command</li>
|
||||
<li>Change how tab colors interact with plugins</li>
|
||||
<li>Enable filtering the beep character by default</li>
|
||||
</ul>
|
||||
</description>
|
||||
</release>
|
||||
<release date="2016-10-22" version="2.12.3">
|
||||
<description>
|
||||
<p>This is a minor bug fix release just cleaning up a few issues:</p>
|
||||
<ul>
|
||||
<li>Fix crash with bad translations</li>
|
||||
<li>Add new mhop command</li>
|
||||
<li>Change ping timeout to 60 by default</li>
|
||||
</ul>
|
||||
</description>
|
||||
</release>
|
||||
</releases>
|
||||
<kudos>
|
||||
<kudo>UserDocs</kudo>
|
||||
<kudo>HiDpiIcon</kudo>
|
||||
<kudo>Notifications</kudo>
|
||||
</kudos>
|
||||
<update_contact>tingping_at_fedoraproject.org</update_contact>
|
||||
</component>
|
||||
|
@ -10,10 +10,6 @@ if DO_PERL
|
||||
perldir = perl
|
||||
endif
|
||||
|
||||
if DO_DOAT
|
||||
doatdir = doat
|
||||
endif
|
||||
|
||||
if DO_FISHLIM
|
||||
fishlimdir = fishlim
|
||||
endif
|
||||
@ -26,4 +22,4 @@ if DO_SYSINFO
|
||||
sysinfodir = sysinfo
|
||||
endif
|
||||
|
||||
SUBDIRS = $(lua) $(pythondir) $(perldir) $(checksumdir) $(doatdir) $(fishlimdir) $(sysinfodir)
|
||||
SUBDIRS = $(lua) $(pythondir) $(perldir) $(checksumdir) $(fishlimdir) $(sysinfodir)
|
||||
|
@ -1,9 +0,0 @@
|
||||
libdir = $(hexchatlibdir)
|
||||
|
||||
lib_LTLIBRARIES = doat.la
|
||||
doat_la_SOURCES = doat.c
|
||||
doat_la_LDFLAGS = $(PLUGIN_LDFLAGS) -module
|
||||
doat_la_LIBADD = $(GLIB_LIBS)
|
||||
doat_la_CPPFLAGS = -I$(top_srcdir)/src/common
|
||||
doat_la_CFLAGS = $(GLIB_CFLAGS)
|
||||
|
@ -1,92 +0,0 @@
|
||||
/* This program is free software. It comes without any warranty, to
|
||||
* the extent permitted by applicable law. You can redistribute it
|
||||
* and/or modify it under the terms of the Do What The Fuck You Want
|
||||
* To Public License, Version 2, as published by Sam Hocevar. See
|
||||
* http://sam.zoy.org/wtfpl/COPYING or http://lwsitu.com/xchat/COPYING
|
||||
* for more details. */
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#include <glib.h>
|
||||
#include "hexchat-plugin.h"
|
||||
|
||||
static hexchat_plugin *ph;
|
||||
|
||||
static int
|
||||
parse_command( char *word[], char *word_eol[], void *userdata ) {
|
||||
char *channel = NULL, *server = NULL, *token = NULL;
|
||||
/* char *save_ptr1 = NULL;*/
|
||||
char *str1 = NULL;
|
||||
char *delimiter = NULL;
|
||||
|
||||
hexchat_context *ctx = NULL;
|
||||
|
||||
if( word[2] != NULL && word[3] != NULL ) {
|
||||
for( str1 = word[2]; ; str1 = NULL ) {
|
||||
/* token = strtok_r( str1, ",", &save_ptr1 );*/
|
||||
token = strtok( str1, "," );
|
||||
/* printf( "token: %s\n", token );*/
|
||||
|
||||
if( token == NULL ) {
|
||||
break;
|
||||
}
|
||||
|
||||
channel = g_strdup( token );
|
||||
|
||||
delimiter = strchr( channel, '/' );
|
||||
|
||||
server = NULL;
|
||||
if( delimiter != NULL ) {
|
||||
*delimiter = '\0';
|
||||
|
||||
if( strlen( delimiter + 1 ) > 0 ) {
|
||||
server = g_strdup( delimiter + 1 );
|
||||
}
|
||||
}
|
||||
|
||||
/* /Network form */
|
||||
if( strlen( channel ) == 0 ) {
|
||||
g_free( channel );
|
||||
channel = NULL;
|
||||
}
|
||||
|
||||
/* printf( "channel[%s] server[%s]\n", channel, server );*/
|
||||
|
||||
if( (ctx = hexchat_find_context( ph, server, channel ) ) != NULL ) {
|
||||
if( hexchat_set_context( ph, ctx ) ) {
|
||||
hexchat_command( ph, word_eol[3] );
|
||||
}
|
||||
}
|
||||
|
||||
g_free( channel );
|
||||
g_free( server );
|
||||
}
|
||||
}
|
||||
return HEXCHAT_EAT_HEXCHAT;
|
||||
}
|
||||
|
||||
int
|
||||
hexchat_plugin_init( hexchat_plugin * plugin_handle, char **plugin_name,
|
||||
char **plugin_desc, char **plugin_version, char *arg ) {
|
||||
|
||||
ph = plugin_handle;
|
||||
*plugin_name = "Do At";
|
||||
*plugin_version = "1.0001";
|
||||
*plugin_desc = "Perform an arbitrary command on multiple channels";
|
||||
|
||||
hexchat_hook_command( ph, "doat", HEXCHAT_PRI_NORM, parse_command, "DOAT [channel,list,/network] [command], perform a command on multiple contexts", NULL );
|
||||
|
||||
hexchat_print (ph, "Do At plugin loaded\n");
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int
|
||||
hexchat_plugin_deinit (void)
|
||||
{
|
||||
hexchat_print (ph, "Do At plugin unloaded\n");
|
||||
return 1;
|
||||
}
|
@ -1,3 +0,0 @@
|
||||
EXPORTS
|
||||
hexchat_plugin_init
|
||||
hexchat_plugin_deinit
|
@ -1,59 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup Label="Configuration">
|
||||
<PlatformToolset>v140</PlatformToolset>
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<ProjectGuid>{4980AF24-9D42-427D-A8E6-0DF3B97C455D}</ProjectGuid>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
<RootNamespace>doat</RootNamespace>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
<Import Project="..\..\win32\hexchat.props" />
|
||||
<PropertyGroup>
|
||||
<TargetName>hcdoat</TargetName>
|
||||
<OutDir>$(HexChatRel)plugins\</OutDir>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;DOAT_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories>..\..\src\common;$(HexChatLib);$(Glib);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<AdditionalLibraryDirectories>$(DepsRoot)\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
<AdditionalDependencies>$(DepLibs);%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<ModuleDefinitionFile>doat.def</ModuleDefinitionFile>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ClCompile>
|
||||
<PreprocessorDefinitions>WIN32;_WIN64;_AMD64_;NDEBUG;_WINDOWS;_USRDLL;DOAT_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories>..\..\src\common;$(HexChatLib);$(Glib);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<AdditionalLibraryDirectories>$(DepsRoot)\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
<AdditionalDependencies>$(DepLibs);%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<ModuleDefinitionFile>doat.def</ModuleDefinitionFile>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="doat.c" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="doat.def" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
</Project>
|
@ -1,23 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup>
|
||||
<Filter Include="Source Files">
|
||||
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Resource Files">
|
||||
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
|
||||
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="doat.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="doat.def">
|
||||
<Filter>Resource Files</Filter>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
</Project>
|
@ -64,12 +64,23 @@ dh1080_init (void)
|
||||
if ((g_dh = DH_new()))
|
||||
{
|
||||
int codes;
|
||||
BIGNUM *p, *g;
|
||||
|
||||
g_dh->p = BN_bin2bn (prime1080, DH1080_PRIME_BYTES, NULL);
|
||||
g_dh->g = BN_new ();
|
||||
p = BN_bin2bn (prime1080, DH1080_PRIME_BYTES, NULL);
|
||||
g = BN_new ();
|
||||
|
||||
g_assert (g_dh->p != NULL && g_dh->g != NULL);
|
||||
BN_set_word(g_dh->g, 2);
|
||||
if (p == NULL || g == NULL)
|
||||
return 1;
|
||||
|
||||
BN_set_word (g, 2);
|
||||
|
||||
#if OPENSSL_VERSION_NUMBER < 0x10100000L
|
||||
g_dh->p = p;
|
||||
g_dh->g = g;
|
||||
#else
|
||||
if (!DH_set0_pqg (g_dh, p, NULL, g))
|
||||
return 1;
|
||||
#endif
|
||||
|
||||
if (DH_check (g_dh, &codes))
|
||||
return codes == 0;
|
||||
@ -136,6 +147,7 @@ dh1080_generate_key (char **priv_key, char **pub_key)
|
||||
guchar buf[DH1080_PRIME_BYTES];
|
||||
int len;
|
||||
DH *dh;
|
||||
const BIGNUM *dh_priv_key, *dh_pub_key;
|
||||
|
||||
g_assert (priv_key != NULL);
|
||||
g_assert (pub_key != NULL);
|
||||
@ -150,12 +162,19 @@ dh1080_generate_key (char **priv_key, char **pub_key)
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if OPENSSL_VERSION_NUMBER < 0x10100000L
|
||||
dh_pub_key = dh->pub_key;
|
||||
dh_priv_key = dh->priv_key;
|
||||
#else
|
||||
DH_get0_key (dh, &dh_pub_key, &dh_priv_key);
|
||||
#endif
|
||||
|
||||
MEMZERO (buf);
|
||||
len = BN_bn2bin (dh->priv_key, buf);
|
||||
len = BN_bn2bin (dh_priv_key, buf);
|
||||
*priv_key = dh1080_encode_b64 (buf, len);
|
||||
|
||||
MEMZERO (buf);
|
||||
len = BN_bn2bin(dh->pub_key, buf);
|
||||
len = BN_bn2bin (dh_pub_key, buf);
|
||||
*pub_key = dh1080_encode_b64 (buf, len);
|
||||
|
||||
OPENSSL_cleanse (buf, sizeof (buf));
|
||||
@ -190,9 +209,15 @@ dh1080_compute_key (const char *priv_key, const char *pub_key, char **secret_key
|
||||
char *priv_key_data;
|
||||
gsize priv_key_len;
|
||||
int shared_len;
|
||||
BIGNUM *priv_key_num;
|
||||
|
||||
priv_key_data = dh1080_decode_b64 (priv_key, &priv_key_len);
|
||||
dh->priv_key = BN_bin2bn(priv_key_data, priv_key_len, NULL);
|
||||
priv_key_num = BN_bin2bn(priv_key_data, priv_key_len, NULL);
|
||||
#if OPENSSL_VERSION_NUMBER < 0x10100000L
|
||||
dh->priv_key = priv_key_num;
|
||||
#else
|
||||
DH_set0_key (dh, NULL, priv_key_num);
|
||||
#endif
|
||||
|
||||
shared_len = DH_compute_key (shared_key, pk, dh);
|
||||
SHA256(shared_key, shared_len, sha256);
|
||||
|
@ -260,7 +260,7 @@ static int handle_keyx_notice(char *word[], char *word_eol[], void *userdata) {
|
||||
char *pub_key;
|
||||
|
||||
if (cbc) {
|
||||
hexchat_print(ph, "Recieved key exchange for CBC mode which is not supported.");
|
||||
hexchat_print(ph, "Received key exchange for CBC mode which is not supported.");
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
@ -280,12 +280,12 @@ static int handle_keyx_notice(char *word[], char *word_eol[], void *userdata) {
|
||||
g_free(sender_lower);
|
||||
|
||||
if (cbc) {
|
||||
hexchat_print(ph, "Recieved key exchange for CBC mode which is not supported.");
|
||||
hexchat_print(ph, "Received key exchange for CBC mode which is not supported.");
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if (!priv_key) {
|
||||
hexchat_printf(ph, "Recieved a key exchange response for unknown user: %s", sender);
|
||||
hexchat_printf(ph, "Received a key exchange response for unknown user: %s", sender);
|
||||
goto cleanup;
|
||||
}
|
||||
} else {
|
||||
|
@ -772,6 +772,7 @@ load_default_config(void)
|
||||
prefs.hex_gui_ulist_icons = 1;
|
||||
prefs.hex_gui_ulist_style = 1;
|
||||
prefs.hex_gui_win_save = 1;
|
||||
prefs.hex_input_filter_beep = 1;
|
||||
prefs.hex_input_flash_hilight = 1;
|
||||
prefs.hex_input_flash_priv = 1;
|
||||
prefs.hex_input_tray_hilight = 1;
|
||||
|
@ -13,7 +13,12 @@ EXTRA_DIST = \
|
||||
BUILT_SOURCES = \
|
||||
remote-object-glue.h
|
||||
|
||||
CLEANFILES = $(BUILT_SOURCES)
|
||||
# Dbus service file
|
||||
servicedir = $(DBUS_SERVICES_DIR)
|
||||
service_in_files = org.hexchat.service.service.in
|
||||
service_DATA = $(service_in_files:.service.in=.service)
|
||||
|
||||
CLEANFILES = $(BUILT_SOURCES) $(service_DATA)
|
||||
|
||||
AM_CPPFLAGS = -I$(top_srcdir)/src/common $(COMMON_CFLAGS) $(DBUS_CFLAGS)
|
||||
|
||||
@ -24,11 +29,6 @@ example_LDADD = $(DBUS_LIBS) $(GLIB_LIBS)
|
||||
remote-object-glue.h: remote-object.xml
|
||||
$(AM_V_GEN) $(LIBTOOL) --mode=execute $(DBUS_BINDING_TOOL) --prefix=remote_object --mode=glib-server --output=$@ $<
|
||||
|
||||
# Dbus service file
|
||||
servicedir = $(DBUS_SERVICES_DIR)
|
||||
service_in_files = org.hexchat.service.service.in
|
||||
service_DATA = $(service_in_files:.service.in=.service)
|
||||
|
||||
# Rule to make the service file with bindir expanded
|
||||
$(service_DATA): $(service_in_files) Makefile
|
||||
@sed -e "s|\@bindir\@|$(bindir)|" $< > $@
|
||||
|
@ -126,11 +126,11 @@ lastact_update(session *sess)
|
||||
int newidx = LACT_NONE;
|
||||
int dia = (sess->type == SESS_DIALOG);
|
||||
|
||||
if (sess->nick_said)
|
||||
if (sess->tab_state & TAB_STATE_NEW_HILIGHT)
|
||||
newidx = dia? LACT_QUERY_HI: LACT_CHAN_HI;
|
||||
else if (sess->msg_said)
|
||||
else if (sess->tab_state & TAB_STATE_NEW_MSG)
|
||||
newidx = dia? LACT_QUERY: LACT_CHAN;
|
||||
else if (sess->new_data)
|
||||
else if (sess->tab_state & TAB_STATE_NEW_DATA)
|
||||
newidx = dia? LACT_QUERY: LACT_CHAN_DATA;
|
||||
|
||||
/* If already first at the right position, just return */
|
||||
@ -383,7 +383,7 @@ hexchat_reinit_timers (void)
|
||||
notify_tag = fe_timeout_add_seconds (prefs.hex_notify_timeout,
|
||||
notify_checklist, NULL);
|
||||
}
|
||||
else if (notify_tag != 0)
|
||||
else if (!prefs.hex_notify_timeout && notify_tag != 0)
|
||||
{
|
||||
fe_timeout_remove (notify_tag);
|
||||
notify_tag = 0;
|
||||
@ -394,7 +394,7 @@ hexchat_reinit_timers (void)
|
||||
{
|
||||
away_tag = fe_timeout_add_seconds (prefs.hex_away_timeout, away_check, NULL);
|
||||
}
|
||||
else if (away_tag != 0)
|
||||
else if (!prefs.hex_away_track && away_tag != 0)
|
||||
{
|
||||
fe_timeout_remove (away_tag);
|
||||
away_tag = 0;
|
||||
@ -405,7 +405,7 @@ hexchat_reinit_timers (void)
|
||||
{
|
||||
lag_check_update_tag = fe_timeout_add (500, hexchat_lag_check_update, NULL);
|
||||
}
|
||||
else if (lag_check_update_tag != 0)
|
||||
else if (!prefs.hex_gui_lagometer && lag_check_update_tag != 0)
|
||||
{
|
||||
fe_timeout_remove (lag_check_update_tag);
|
||||
lag_check_update_tag = 0;
|
||||
@ -417,7 +417,8 @@ hexchat_reinit_timers (void)
|
||||
{
|
||||
lag_check_tag = fe_timeout_add_seconds (30, hexchat_lag_check, NULL);
|
||||
}
|
||||
else if (lag_check_tag != 0)
|
||||
else if ((!prefs.hex_net_ping_timeout && !prefs.hex_gui_lagometer)
|
||||
&& lag_check_tag != 0)
|
||||
{
|
||||
fe_timeout_remove (lag_check_tag);
|
||||
lag_check_tag = 0;
|
||||
|
@ -352,6 +352,13 @@ typedef enum gtk_xtext_search_flags_e {
|
||||
regexp = 16
|
||||
} gtk_xtext_search_flags;
|
||||
|
||||
typedef enum {
|
||||
TAB_STATE_NONE = 0,
|
||||
TAB_STATE_NEW_DATA = (1 << 0),
|
||||
TAB_STATE_NEW_MSG = (1 << 1),
|
||||
TAB_STATE_NEW_HILIGHT = (1 << 2),
|
||||
} tab_state_flags;
|
||||
|
||||
typedef struct session
|
||||
{
|
||||
/* Per-Channel Alerts */
|
||||
@ -406,16 +413,14 @@ typedef struct session
|
||||
int lastact_idx; /* the sess_list_by_lastact[] index of the list we're in.
|
||||
* For valid values, see defines of LACT_*. */
|
||||
|
||||
int new_data:1; /* new data avail? (purple tab) */
|
||||
int nick_said:1; /* your nick mentioned? (blue tab) */
|
||||
int msg_said:1; /* new msg available? (red tab) */
|
||||
|
||||
int ignore_date:1;
|
||||
int ignore_mode:1;
|
||||
int ignore_names:1;
|
||||
int end_of_names:1;
|
||||
int doing_who:1; /* /who sent on this channel */
|
||||
int done_away_check:1; /* done checking for away status changes */
|
||||
tab_state_flags tab_state;
|
||||
tab_state_flags last_tab_state; /* before event is handled */
|
||||
gtk_xtext_search_flags lastlog_flags;
|
||||
void (*scrollback_replay_marklast) (struct session *sess);
|
||||
} session;
|
||||
|
@ -316,7 +316,7 @@ is_hilight (char *from, char *text, session *sess, server *serv)
|
||||
g_free (text);
|
||||
if (sess != current_tab)
|
||||
{
|
||||
sess->nick_said = TRUE;
|
||||
sess->tab_state |= TAB_STATE_NEW_HILIGHT;
|
||||
lastact_update (sess);
|
||||
}
|
||||
return 1;
|
||||
@ -373,14 +373,9 @@ inbound_action (session *sess, char *chan, char *from, char *ip, char *text,
|
||||
if (sess != current_tab)
|
||||
{
|
||||
if (fromme)
|
||||
{
|
||||
sess->msg_said = FALSE;
|
||||
sess->new_data = TRUE;
|
||||
} else
|
||||
{
|
||||
sess->msg_said = TRUE;
|
||||
sess->new_data = FALSE;
|
||||
}
|
||||
sess->tab_state |= TAB_STATE_NEW_DATA;
|
||||
else
|
||||
sess->tab_state |= TAB_STATE_NEW_MSG;
|
||||
lastact_update (sess);
|
||||
}
|
||||
|
||||
@ -448,8 +443,7 @@ inbound_chanmsg (server *serv, session *sess, char *chan, char *from,
|
||||
|
||||
if (sess != current_tab)
|
||||
{
|
||||
sess->msg_said = TRUE;
|
||||
sess->new_data = FALSE;
|
||||
sess->tab_state |= TAB_STATE_NEW_MSG;
|
||||
lastact_update (sess);
|
||||
}
|
||||
|
||||
|
@ -631,7 +631,7 @@ cmd_clear (struct session *sess, char *tbuf, char *word[], char *word_eol[])
|
||||
while (list)
|
||||
{
|
||||
sess = list->data;
|
||||
if (!sess->nick_said)
|
||||
if (!(sess->tab_state & TAB_STATE_NEW_HILIGHT))
|
||||
fe_text_clear (list->data, 0);
|
||||
list = list->next;
|
||||
}
|
||||
@ -1447,6 +1447,41 @@ cmd_dns (struct session *sess, char *tbuf, char *word[], char *word_eol[])
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static int
|
||||
cmd_doat (struct session *sess, char *tbuf, char *word[], char *word_eol[])
|
||||
{
|
||||
GStrv channels;
|
||||
guint i;
|
||||
|
||||
if (!word[2] || !*word[2] || !word[3] || !*word[3])
|
||||
return FALSE;
|
||||
|
||||
channels = g_strsplit (word[2], ",", -1);
|
||||
for (i = 0; channels[i] && *channels[i]; ++i)
|
||||
{
|
||||
char *chan = channels[i];
|
||||
char *serv;
|
||||
session *ctx;
|
||||
|
||||
/* Split channel and network, either may be empty */
|
||||
if ((serv = strchr (chan, '/')))
|
||||
{
|
||||
*serv = '\0';
|
||||
serv++;
|
||||
if (!strlen (serv))
|
||||
serv = NULL;
|
||||
}
|
||||
if (!strlen (chan))
|
||||
chan = NULL;
|
||||
|
||||
if ((ctx = plugin_find_context (serv, chan, sess->server)))
|
||||
handle_command (ctx, word_eol[3], FALSE);
|
||||
}
|
||||
g_strfreev (channels);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static int
|
||||
cmd_echo (struct session *sess, char *tbuf, char *word[], char *word_eol[])
|
||||
{
|
||||
@ -1682,6 +1717,25 @@ memrchr (const void *block, int c, size_t size)
|
||||
}
|
||||
#endif
|
||||
|
||||
static void
|
||||
exec_print_line (session *sess, char *data, gssize len, gboolean tochannel)
|
||||
{
|
||||
char *valid;
|
||||
exec_handle_colors (data, len);
|
||||
valid = text_fixup_invalid_utf8 (data, len, NULL);
|
||||
if (tochannel)
|
||||
{
|
||||
/* must turn off auto-completion temporarily */
|
||||
const unsigned int old = prefs.hex_completion_auto;
|
||||
prefs.hex_completion_auto = 0;
|
||||
handle_multiline (sess, valid, FALSE, TRUE);
|
||||
prefs.hex_completion_auto = old;
|
||||
}
|
||||
else
|
||||
PrintText (sess, valid);
|
||||
g_free (valid);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
exec_data (GIOChannel *source, GIOCondition condition, struct nbexec *s)
|
||||
{
|
||||
@ -1708,17 +1762,7 @@ exec_data (GIOChannel *source, GIOCondition condition, struct nbexec *s)
|
||||
kill(s->childpid, SIGKILL);
|
||||
if (len) {
|
||||
buf[len] = '\0';
|
||||
exec_handle_colors(buf, len);
|
||||
if (s->tochannel)
|
||||
{
|
||||
/* must turn off auto-completion temporarily */
|
||||
unsigned int old = prefs.hex_completion_auto;
|
||||
prefs.hex_completion_auto = 0;
|
||||
handle_multiline (s->sess, buf, FALSE, TRUE);
|
||||
prefs.hex_completion_auto = old;
|
||||
}
|
||||
else
|
||||
PrintText (s->sess, buf);
|
||||
exec_print_line(s->sess, buf, len, s->tochannel);
|
||||
}
|
||||
g_free(buf);
|
||||
waitpid (s->childpid, NULL, 0);
|
||||
@ -1747,11 +1791,7 @@ exec_data (GIOChannel *source, GIOCondition condition, struct nbexec *s)
|
||||
s->buffill = 0;
|
||||
|
||||
if (len) {
|
||||
exec_handle_colors (buf, len);
|
||||
if (s->tochannel)
|
||||
handle_multiline (s->sess, buf, FALSE, TRUE);
|
||||
else
|
||||
PrintText (s->sess, buf);
|
||||
exec_print_line(s->sess, buf, len, s->tochannel);
|
||||
}
|
||||
|
||||
g_free (buf);
|
||||
@ -3931,6 +3971,7 @@ const struct commands xc_cmds[] = {
|
||||
N_("DEVOICE <nick>, removes voice status from the nick on the current channel (needs chanop)")},
|
||||
{"DISCON", cmd_discon, 0, 0, 1, N_("DISCON, Disconnects from server")},
|
||||
{"DNS", cmd_dns, 0, 0, 1, N_("DNS <nick|host|ip>, Resolves an IP or hostname")},
|
||||
{"DOAT", cmd_doat, 0, 0, 1, N_("DOAT <channel,list,/network> <command>")},
|
||||
{"ECHO", cmd_echo, 0, 0, 1, N_("ECHO <text>, Prints text locally")},
|
||||
#ifndef WIN32
|
||||
{"EXEC", cmd_exec, 0, 0, 1,
|
||||
|
@ -146,7 +146,7 @@ identd_read_ready (GDataInputStream *in_stream, GAsyncResult *res, ident_info *i
|
||||
if (!local || !remote || local > G_MAXUINT16 || remote > G_MAXUINT16)
|
||||
{
|
||||
g_strlcat (buf, "ERROR : INVALID-PORT\r\n", sizeof (buf));
|
||||
g_debug ("Identd: Recieved invalid port");
|
||||
g_debug ("Identd: Received invalid port");
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -154,7 +154,7 @@ identd_read_ready (GDataInputStream *in_stream, GAsyncResult *res, ident_info *i
|
||||
if (!info->username)
|
||||
{
|
||||
g_strlcat (buf, "ERROR : NO-USER\r\n", sizeof (buf));
|
||||
g_debug ("Identd: Recieved invalid local port");
|
||||
g_debug ("Identd: Received invalid local port");
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -452,7 +452,6 @@ plugin_auto_load (session *sess)
|
||||
/* a long list of bundled plugins that should be loaded automatically,
|
||||
* user plugins should go to <config>, leave Program Files alone! */
|
||||
for_files (lib_dir, "hcchecksum.dll", plugin_auto_load_cb);
|
||||
for_files (lib_dir, "hcdoat.dll", plugin_auto_load_cb);
|
||||
for_files (lib_dir, "hcexec.dll", plugin_auto_load_cb);
|
||||
for_files (lib_dir, "hcfishlim.dll", plugin_auto_load_cb);
|
||||
for_files(lib_dir, "hclua.dll", plugin_auto_load_cb);
|
||||
@ -871,6 +870,67 @@ plugin_show_help (session *sess, char *cmd)
|
||||
return 0;
|
||||
}
|
||||
|
||||
session *
|
||||
plugin_find_context (const char *servname, const char *channel, server *current_server)
|
||||
{
|
||||
GSList *slist, *clist, *sessions = NULL;
|
||||
server *serv;
|
||||
session *sess;
|
||||
char *netname;
|
||||
|
||||
if (servname == NULL && channel == NULL)
|
||||
return current_sess;
|
||||
|
||||
slist = serv_list;
|
||||
while (slist)
|
||||
{
|
||||
serv = slist->data;
|
||||
netname = server_get_network (serv, TRUE);
|
||||
|
||||
if (servname == NULL ||
|
||||
rfc_casecmp (servname, serv->servername) == 0 ||
|
||||
g_ascii_strcasecmp (servname, serv->hostname) == 0 ||
|
||||
g_ascii_strcasecmp (servname, netname) == 0)
|
||||
{
|
||||
if (channel == NULL)
|
||||
return serv->front_session;
|
||||
|
||||
clist = sess_list;
|
||||
while (clist)
|
||||
{
|
||||
sess = clist->data;
|
||||
if (sess->server == serv)
|
||||
{
|
||||
if (rfc_casecmp (channel, sess->channel) == 0)
|
||||
{
|
||||
if (sess->server == current_server)
|
||||
{
|
||||
g_slist_free (sessions);
|
||||
return sess;
|
||||
} else
|
||||
{
|
||||
sessions = g_slist_prepend (sessions, sess);
|
||||
}
|
||||
}
|
||||
}
|
||||
clist = clist->next;
|
||||
}
|
||||
}
|
||||
slist = slist->next;
|
||||
}
|
||||
|
||||
if (sessions)
|
||||
{
|
||||
sessions = g_slist_reverse (sessions);
|
||||
sess = sessions->data;
|
||||
g_slist_free (sessions);
|
||||
return sess;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
/* ========================================================= */
|
||||
/* ===== these are the functions plugins actually call ===== */
|
||||
/* ========================================================= */
|
||||
@ -1038,61 +1098,7 @@ hexchat_set_context (hexchat_plugin *ph, hexchat_context *context)
|
||||
hexchat_context *
|
||||
hexchat_find_context (hexchat_plugin *ph, const char *servname, const char *channel)
|
||||
{
|
||||
GSList *slist, *clist, *sessions = NULL;
|
||||
server *serv;
|
||||
session *sess;
|
||||
char *netname;
|
||||
|
||||
if (servname == NULL && channel == NULL)
|
||||
return current_sess;
|
||||
|
||||
slist = serv_list;
|
||||
while (slist)
|
||||
{
|
||||
serv = slist->data;
|
||||
netname = server_get_network (serv, TRUE);
|
||||
|
||||
if (servname == NULL ||
|
||||
rfc_casecmp (servname, serv->servername) == 0 ||
|
||||
g_ascii_strcasecmp (servname, serv->hostname) == 0 ||
|
||||
g_ascii_strcasecmp (servname, netname) == 0)
|
||||
{
|
||||
if (channel == NULL)
|
||||
return serv->front_session;
|
||||
|
||||
clist = sess_list;
|
||||
while (clist)
|
||||
{
|
||||
sess = clist->data;
|
||||
if (sess->server == serv)
|
||||
{
|
||||
if (rfc_casecmp (channel, sess->channel) == 0)
|
||||
{
|
||||
if (sess->server == ph->context->server)
|
||||
{
|
||||
g_slist_free (sessions);
|
||||
return sess;
|
||||
} else
|
||||
{
|
||||
sessions = g_slist_prepend (sessions, sess);
|
||||
}
|
||||
}
|
||||
}
|
||||
clist = clist->next;
|
||||
}
|
||||
}
|
||||
slist = slist->next;
|
||||
}
|
||||
|
||||
if (sessions)
|
||||
{
|
||||
sessions = g_slist_reverse (sessions);
|
||||
sess = sessions->data;
|
||||
g_slist_free (sessions);
|
||||
return sess;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
return plugin_find_context (servname, channel, ph->context->server);
|
||||
}
|
||||
|
||||
const char *
|
||||
|
@ -179,5 +179,6 @@ int plugin_emit_keypress (session *sess, unsigned int state, unsigned int keyval
|
||||
GList* plugin_command_list(GList *tmp_list);
|
||||
int plugin_show_help (session *sess, char *cmd);
|
||||
void plugin_command_foreach (session *sess, void *userdata, void (*cb) (session *sess, void *userdata, char *name, char *usage));
|
||||
session *plugin_find_context (const char *servname, const char *channel, server *current_server);
|
||||
|
||||
#endif
|
||||
|
@ -152,9 +152,9 @@ int
|
||||
_SSL_get_cert_info (struct cert_info *cert_info, SSL * ssl)
|
||||
{
|
||||
X509 *peer_cert;
|
||||
X509_PUBKEY *key;
|
||||
X509_ALGOR *algor = NULL;
|
||||
EVP_PKEY *peer_pkey;
|
||||
/* EVP_PKEY *ca_pkey; */
|
||||
/* EVP_PKEY *tmp_pkey; */
|
||||
char notBefore[64];
|
||||
char notAfter[64];
|
||||
int alg;
|
||||
@ -171,8 +171,16 @@ _SSL_get_cert_info (struct cert_info *cert_info, SSL * ssl)
|
||||
broke_oneline (cert_info->subject, cert_info->subject_word);
|
||||
broke_oneline (cert_info->issuer, cert_info->issuer_word);
|
||||
|
||||
alg = OBJ_obj2nid (peer_cert->cert_info->key->algor->algorithm);
|
||||
key = X509_get_X509_PUBKEY(peer_cert);
|
||||
if (!X509_PUBKEY_get0_param(NULL, NULL, 0, &algor, key))
|
||||
return 1;
|
||||
|
||||
alg = OBJ_obj2nid (algor->algorithm);
|
||||
#if OPENSSL_VERSION_NUMBER < 0x10100000L
|
||||
sign_alg = OBJ_obj2nid (peer_cert->sig_alg->algorithm);
|
||||
#else
|
||||
sign_alg = X509_get_signature_nid (peer_cert);
|
||||
#endif
|
||||
ASN1_TIME_snprintf (notBefore, sizeof (notBefore),
|
||||
X509_get_notBefore (peer_cert));
|
||||
ASN1_TIME_snprintf (notAfter, sizeof (notAfter),
|
||||
@ -290,14 +298,20 @@ SSL *
|
||||
_SSL_socket (SSL_CTX *ctx, int sd)
|
||||
{
|
||||
SSL *ssl;
|
||||
|
||||
const SSL_METHOD *method;
|
||||
|
||||
if (!(ssl = SSL_new (ctx)))
|
||||
/* FATAL */
|
||||
__SSL_critical_error ("SSL_new");
|
||||
|
||||
SSL_set_fd (ssl, sd);
|
||||
if (ctx->method == SSLv23_client_method())
|
||||
|
||||
#if OPENSSL_VERSION_NUMBER < 0x10100000L
|
||||
method = ctx->method;
|
||||
#else
|
||||
method = SSL_CTX_get_ssl_method (ctx);
|
||||
#endif
|
||||
if (method == SSLv23_client_method())
|
||||
SSL_set_connect_state (ssl);
|
||||
else
|
||||
SSL_set_accept_state(ssl);
|
||||
|
@ -2008,6 +2008,8 @@ text_emit (int index, session *sess, char *a, char *b, char *c, char *d,
|
||||
{
|
||||
char *word[PDIWORDS];
|
||||
int i;
|
||||
tab_state_flags current_state = sess->tab_state;
|
||||
tab_state_flags plugin_state = sess->last_tab_state;
|
||||
unsigned int stripcolor_args = (chanopt_is_set (prefs.hex_text_stripcolor_msg, sess->text_strip) ? 0xFFFFFFFF : 0);
|
||||
char tbuf[NICKLEN + 4];
|
||||
|
||||
@ -2026,9 +2028,18 @@ text_emit (int index, session *sess, char *a, char *b, char *c, char *d,
|
||||
for (i = 5; i < PDIWORDS; i++)
|
||||
word[i] = "\000";
|
||||
|
||||
/* We want to ignore the tab state if the plugin emits new events
|
||||
* and restore it if it doesn't eat the current one */
|
||||
sess->tab_state = plugin_state;
|
||||
if (plugin_emit_print (sess, word, timestamp))
|
||||
return;
|
||||
|
||||
/* The plugin may have changed the state which we should respect.
|
||||
* If the state is NEW_DATA we don't actually know if that was on
|
||||
* purpose though as print() sets it, so for now we ignore that. FIXME */
|
||||
if (sess->tab_state == plugin_state || sess->tab_state == TAB_STATE_NEW_DATA)
|
||||
sess->tab_state = current_state;
|
||||
|
||||
/* If a plugin's callback executes "/close", 'sess' may be invalid */
|
||||
if (!is_session (sess))
|
||||
return;
|
||||
@ -2061,7 +2072,6 @@ text_emit (int index, session *sess, char *a, char *b, char *c, char *d,
|
||||
/* ===Highlighted message=== */
|
||||
case XP_TE_HCHANACTION:
|
||||
case XP_TE_HCHANMSG:
|
||||
fe_set_tab_color (sess, 3);
|
||||
if (chanopt_is_set (prefs.hex_input_beep_hilight, sess->alert_beep) && (!prefs.hex_away_omit_alerts || !sess->server->is_away))
|
||||
sound_beep (sess);
|
||||
if (chanopt_is_set (prefs.hex_input_flash_hilight, sess->alert_taskbar) && (!prefs.hex_away_omit_alerts || !sess->server->is_away))
|
||||
|
@ -660,16 +660,17 @@ fe_print_text (struct session *sess, char *text, time_t stamp,
|
||||
{
|
||||
PrintTextRaw (sess->res->buffer, (unsigned char *)text, prefs.hex_text_indent, stamp);
|
||||
|
||||
if (!no_activity && !sess->new_data && sess != current_tab &&
|
||||
sess->gui->is_tab && !sess->nick_said)
|
||||
{
|
||||
sess->new_data = TRUE;
|
||||
lastact_update (sess);
|
||||
if (sess->msg_said)
|
||||
fe_set_tab_color (sess, 2);
|
||||
else
|
||||
fe_set_tab_color (sess, 1);
|
||||
}
|
||||
if (no_activity || !sess->gui->is_tab)
|
||||
return;
|
||||
|
||||
if (sess == current_tab)
|
||||
fe_set_tab_color (sess, 0);
|
||||
else if (sess->tab_state & TAB_STATE_NEW_HILIGHT)
|
||||
fe_set_tab_color (sess, 3);
|
||||
else if (sess->tab_state & TAB_STATE_NEW_MSG)
|
||||
fe_set_tab_color (sess, 2);
|
||||
else
|
||||
fe_set_tab_color (sess, 1);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -178,62 +178,50 @@ fe_set_tab_color (struct session *sess, int col)
|
||||
switch (col)
|
||||
{
|
||||
case 0: /* no particular color (theme default) */
|
||||
sess->new_data = FALSE;
|
||||
sess->msg_said = FALSE;
|
||||
sess->nick_said = FALSE;
|
||||
sess->tab_state = TAB_STATE_NONE;
|
||||
chan_set_color (sess->res->tab, plain_list);
|
||||
break;
|
||||
case 1: /* new data has been displayed (dark red) */
|
||||
sess->new_data = TRUE;
|
||||
sess->msg_said = FALSE;
|
||||
sess->nick_said = FALSE;
|
||||
sess->tab_state = TAB_STATE_NEW_DATA;
|
||||
chan_set_color (sess->res->tab, newdata_list);
|
||||
|
||||
if (chan_is_collapsed (sess->res->tab)
|
||||
&& !(server_sess->msg_said || server_sess->nick_said)
|
||||
&& !((server_sess->tab_state & TAB_STATE_NEW_MSG)
|
||||
|| (server_sess->tab_state & TAB_STATE_NEW_HILIGHT))
|
||||
&& !(server_sess == current_tab))
|
||||
{
|
||||
server_sess->new_data = TRUE;
|
||||
server_sess->msg_said = FALSE;
|
||||
server_sess->nick_said = FALSE;
|
||||
server_sess->tab_state = TAB_STATE_NEW_DATA;
|
||||
chan_set_color (chan_get_parent (sess->res->tab), newdata_list);
|
||||
}
|
||||
|
||||
|
||||
break;
|
||||
case 2: /* new message arrived in channel (light red) */
|
||||
sess->new_data = FALSE;
|
||||
sess->msg_said = TRUE;
|
||||
sess->nick_said = FALSE;
|
||||
sess->tab_state = TAB_STATE_NEW_MSG;
|
||||
chan_set_color (sess->res->tab, newmsg_list);
|
||||
|
||||
if (chan_is_collapsed (sess->res->tab)
|
||||
&& !server_sess->nick_said
|
||||
|
||||
if (chan_is_collapsed (sess->res->tab)
|
||||
&& !(server_sess->tab_state & TAB_STATE_NEW_HILIGHT)
|
||||
&& !(server_sess == current_tab))
|
||||
{
|
||||
server_sess->new_data = FALSE;
|
||||
server_sess->msg_said = TRUE;
|
||||
server_sess->nick_said = FALSE;
|
||||
server_sess->tab_state = TAB_STATE_NEW_MSG;
|
||||
chan_set_color (chan_get_parent (sess->res->tab), newmsg_list);
|
||||
}
|
||||
|
||||
|
||||
break;
|
||||
case 3: /* your nick has been seen (blue) */
|
||||
sess->new_data = FALSE;
|
||||
sess->msg_said = FALSE;
|
||||
sess->nick_said = TRUE;
|
||||
sess->tab_state = TAB_STATE_NEW_HILIGHT;
|
||||
chan_set_color (sess->res->tab, nickseen_list);
|
||||
|
||||
if (chan_is_collapsed (sess->res->tab) && !(server_sess == current_tab))
|
||||
{
|
||||
server_sess->new_data = FALSE;
|
||||
server_sess->msg_said = FALSE;
|
||||
server_sess->nick_said = TRUE;
|
||||
server_sess->tab_state = TAB_STATE_NEW_MSG;
|
||||
chan_set_color (chan_get_parent (sess->res->tab), nickseen_list);
|
||||
}
|
||||
|
||||
|
||||
break;
|
||||
}
|
||||
lastact_update (sess);
|
||||
sess->last_tab_state = sess->tab_state; /* For plugins handling future prints */
|
||||
}
|
||||
}
|
||||
|
||||
@ -540,17 +528,10 @@ mg_focus (session *sess)
|
||||
sess->server->server_session = sess;
|
||||
}
|
||||
|
||||
if (sess->new_data || sess->nick_said || sess->msg_said)
|
||||
{
|
||||
sess->nick_said = FALSE;
|
||||
sess->msg_said = FALSE;
|
||||
sess->new_data = FALSE;
|
||||
lastact_update (sess);
|
||||
/* when called via mg_changui_new, is_tab might be true, but
|
||||
sess->res->tab is still NULL. */
|
||||
if (sess->res->tab)
|
||||
fe_set_tab_color (sess, 0);
|
||||
}
|
||||
/* when called via mg_changui_new, is_tab might be true, but
|
||||
sess->res->tab is still NULL. */
|
||||
if (sess->res->tab)
|
||||
fe_set_tab_color (sess, 0);
|
||||
}
|
||||
|
||||
static int
|
||||
|
@ -29,11 +29,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "python2", "..\plugins\pytho
|
||||
{87554B59-006C-4D94-9714-897B27067BA3} = {87554B59-006C-4D94-9714-897B27067BA3}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "doat", "..\plugins\doat\doat.vcxproj", "{4980AF24-9D42-427D-A8E6-0DF3B97C455D}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{87554B59-006C-4D94-9714-897B27067BA3} = {87554B59-006C-4D94-9714-897B27067BA3}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "checksum", "..\plugins\checksum\checksum.vcxproj", "{5EF7F47D-D09C-43C4-BF64-B28B11A0FF91}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{87554B59-006C-4D94-9714-897B27067BA3} = {87554B59-006C-4D94-9714-897B27067BA3}
|
||||
@ -87,7 +82,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "installer", "installer\inst
|
||||
{C2321A03-0BA7-45B3-8740-ABD82B36B0BF} = {C2321A03-0BA7-45B3-8740-ABD82B36B0BF}
|
||||
{19C52A0A-A790-409E-A28A-9745FF990F5C} = {19C52A0A-A790-409E-A28A-9745FF990F5C}
|
||||
{BF0EBC16-68AD-4CD1-864C-5B56836EBE2A} = {BF0EBC16-68AD-4CD1-864C-5B56836EBE2A}
|
||||
{4980AF24-9D42-427D-A8E6-0DF3B97C455D} = {4980AF24-9D42-427D-A8E6-0DF3B97C455D}
|
||||
{17E4BE39-76F7-4A06-AD21-EFD0C5091F76} = {17E4BE39-76F7-4A06-AD21-EFD0C5091F76}
|
||||
{4C0F3940-2EEE-4646-82F7-6CE75B9A72F4} = {4C0F3940-2EEE-4646-82F7-6CE75B9A72F4}
|
||||
{B10A2C41-344C-43E0-A32D-B9587C198D8B} = {B10A2C41-344C-43E0-A32D-B9587C198D8B}
|
||||
@ -156,10 +150,6 @@ Global
|
||||
{19C52A0A-A790-409E-A28A-9745FF990F5C}.Release|Win32.Build.0 = Release|Win32
|
||||
{19C52A0A-A790-409E-A28A-9745FF990F5C}.Release|x64.ActiveCfg = Release|x64
|
||||
{19C52A0A-A790-409E-A28A-9745FF990F5C}.Release|x64.Build.0 = Release|x64
|
||||
{4980AF24-9D42-427D-A8E6-0DF3B97C455D}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{4980AF24-9D42-427D-A8E6-0DF3B97C455D}.Release|Win32.Build.0 = Release|Win32
|
||||
{4980AF24-9D42-427D-A8E6-0DF3B97C455D}.Release|x64.ActiveCfg = Release|x64
|
||||
{4980AF24-9D42-427D-A8E6-0DF3B97C455D}.Release|x64.Build.0 = Release|x64
|
||||
{5EF7F47D-D09C-43C4-BF64-B28B11A0FF91}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{5EF7F47D-D09C-43C4-BF64-B28B11A0FF91}.Release|Win32.Build.0 = Release|Win32
|
||||
{5EF7F47D-D09C-43C4-BF64-B28B11A0FF91}.Release|x64.ActiveCfg = Release|x64
|
||||
@ -237,7 +227,6 @@ Global
|
||||
{E4BDB4C8-2335-415A-ACEE-BA88B19BFE82} = {AAACEB12-9475-410E-AF5A-FDFF907E9043}
|
||||
{E93E1255-95D1-4B08-8FDF-B53CC6A21280} = {AAACEB12-9475-410E-AF5A-FDFF907E9043}
|
||||
{19C52A0A-A790-409E-A28A-9745FF990F5C} = {D237DA6B-BD5F-46C0-8BEA-50E9A1340240}
|
||||
{4980AF24-9D42-427D-A8E6-0DF3B97C455D} = {561126F4-FA18-45FC-A2BF-8F858F161D6D}
|
||||
{5EF7F47D-D09C-43C4-BF64-B28B11A0FF91} = {561126F4-FA18-45FC-A2BF-8F858F161D6D}
|
||||
{17E4BE39-76F7-4A06-AD21-EFD0C5091F76} = {561126F4-FA18-45FC-A2BF-8F858F161D6D}
|
||||
{3C4F42FC-292A-420B-B63D-C03DFBDD8E4E} = {561126F4-FA18-45FC-A2BF-8F858F161D6D}
|
||||
|
@ -64,7 +64,6 @@ Name: "translations"; Description: "Translations"; Types: normal custom; Flags:
|
||||
Name: "spell"; Description: "Spelling Dictionaries"; Types: custom; Flags: disablenouninstallwarning
|
||||
Name: "plugins"; Description: "Plugins"; Types: custom; Flags: disablenouninstallwarning
|
||||
Name: "plugins\checksum"; Description: "Checksum"; Types: custom; Flags: disablenouninstallwarning
|
||||
Name: "plugins\doat"; Description: "Do At"; Types: normal custom; Flags: disablenouninstallwarning
|
||||
Name: "plugins\exec"; Description: "Exec"; Types: custom; Flags: disablenouninstallwarning
|
||||
Name: "plugins\fishlim"; Description: "FiSHLiM"; Types: custom; Flags: disablenouninstallwarning
|
||||
Name: "plugins\mpcinfo"; Description: "mpcInfo"; Types: custom; Flags: disablenouninstallwarning
|
||||
@ -167,7 +166,6 @@ Source: "share\lua\lgi\*.lua"; DestDir: "{app}\share\lua\lgi"; Flags: ignorevers
|
||||
Source: "share\lua\lgi\override\*.lua"; DestDir: "{app}\share\lua\lgi\override"; Flags: ignoreversion; Components: langs\lua
|
||||
|
||||
Source: "plugins\hcchecksum.dll"; DestDir: "{app}\plugins"; Flags: ignoreversion; Components: plugins\checksum
|
||||
Source: "plugins\hcdoat.dll"; DestDir: "{app}\plugins"; Flags: ignoreversion; Components: plugins\doat
|
||||
Source: "plugins\hcexec.dll"; DestDir: "{app}\plugins"; Flags: ignoreversion; Components: plugins\exec
|
||||
Source: "plugins\hcfishlim.dll"; DestDir: "{app}\plugins"; Flags: ignoreversion; Components: plugins\fishlim
|
||||
Source: "share\music.png"; DestDir: "{app}\share"; Flags: ignoreversion; Components: plugins\winamp or plugins\mpcinfo
|
||||
|
@ -1 +1 @@
|
||||
2.12.2
|
||||
2.12.3
|
Reference in New Issue
Block a user