diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/common/inbound.c | 7 | ||||
-rw-r--r-- | src/common/outbound.c | 15 | ||||
-rw-r--r-- | src/common/outbound.h | 1 | ||||
-rw-r--r-- | src/common/proto-irc.c | 9 | ||||
-rw-r--r-- | src/common/servlist.c | 2 | ||||
-rw-r--r-- | src/common/text.c | 5 | ||||
-rw-r--r-- | src/common/textevents.in | 6 | ||||
-rw-r--r-- | src/fe-gtk/Makefile.am | 4 | ||||
-rw-r--r-- | src/fe-gtk/about.c | 162 | ||||
-rw-r--r-- | src/fe-gtk/about.h | 25 | ||||
-rw-r--r-- | src/fe-gtk/chanlist.c | 1 | ||||
-rw-r--r-- | src/fe-gtk/fe-gtk.vcxproj | 2 | ||||
-rw-r--r-- | src/fe-gtk/fe-gtk.vcxproj.filters | 6 | ||||
-rw-r--r-- | src/fe-gtk/gtkutil.c | 1 | ||||
-rw-r--r-- | src/fe-gtk/maingui.c | 4 | ||||
-rw-r--r-- | src/fe-gtk/menu.c | 57 | ||||
-rw-r--r-- | src/fe-gtk/notifygui.c | 1 |
17 files changed, 97 insertions, 211 deletions
diff --git a/src/common/inbound.c b/src/common/inbound.c index f57207d1..a8c19504 100644 --- a/src/common/inbound.c +++ b/src/common/inbound.c @@ -1450,7 +1450,12 @@ nowindow: static int inbound_exec_eom_cmd (char *str, void *sess) { - handle_command (sess, (str[0] == '/') ? str + 1 : str, TRUE); + char *cmd; + + cmd = command_insert_vars ((session*)sess, (str[0] == '/') ? str + 1 : str); + handle_command ((session*)sess, cmd, TRUE); + g_free (cmd); + return 1; } diff --git a/src/common/outbound.c b/src/common/outbound.c index 21af2940..158b2b16 100644 --- a/src/common/outbound.c +++ b/src/common/outbound.c @@ -4584,7 +4584,6 @@ handle_command (session *sess, char *cmd, int check_spch) char tbuf_static[TBUFSIZE]; char *pdibuf; char *tbuf; - char *cmd_vars; int len; int ret = TRUE; @@ -4596,9 +4595,7 @@ handle_command (session *sess, char *cmd, int check_spch) command_level++; /* anything below MUST DEC command_level before returning */ - cmd_vars = command_insert_vars (sess, cmd); - - len = strlen (cmd_vars); + len = strlen (cmd); if (len >= sizeof (pdibuf_static)) { pdibuf = malloc (len + 1); @@ -4618,7 +4615,7 @@ handle_command (session *sess, char *cmd, int check_spch) } /* split the text into words and word_eol */ - process_data_init (pdibuf, cmd_vars, word, word_eol, TRUE, TRUE); + process_data_init (pdibuf, cmd, word, word_eol, TRUE, TRUE); /* ensure an empty string at index 32 for cmd_deop etc */ /* (internal use only, plugins can still only read 1-31). */ @@ -4629,12 +4626,12 @@ handle_command (session *sess, char *cmd, int check_spch) /* redo it without quotes processing, for some commands like /JOIN */ if (int_cmd && !int_cmd->handle_quotes) { - process_data_init (pdibuf, cmd_vars, word, word_eol, FALSE, FALSE); + process_data_init (pdibuf, cmd, word, word_eol, FALSE, FALSE); } if (check_spch && prefs.hex_input_perc_color) { - check_special_chars (cmd_vars, prefs.hex_input_perc_ascii); + check_special_chars (cmd, prefs.hex_input_perc_ascii); } if (plugin_emit_command (sess, word[1], word, word_eol)) @@ -4701,7 +4698,7 @@ handle_command (session *sess, char *cmd, int check_spch) } else { - sess->server->p_raw (sess->server, cmd_vars); + sess->server->p_raw (sess->server, cmd); } } @@ -4718,8 +4715,6 @@ xit: free (tbuf); } - g_free (cmd_vars); - return ret; } diff --git a/src/common/outbound.h b/src/common/outbound.h index 7dc1ba97..81a98666 100644 --- a/src/common/outbound.h +++ b/src/common/outbound.h @@ -25,6 +25,7 @@ extern GSList *menu_list; int auto_insert (char *dest, int destlen, unsigned char *src, char *word[], char *word_eol[], char *a, char *c, char *d, char *e, char *h, char *n, char *s, char *u); +char *command_insert_vars (session *sess, char *cmd); int handle_command (session *sess, char *cmd, int check_spch); void process_data_init (char *buf, char *cmd, char *word[], char *word_eol[], gboolean handle_quotes, gboolean allow_escape_quotes); void handle_multiline (session *sess, char *cmd, int history, int nocommand); diff --git a/src/common/proto-irc.c b/src/common/proto-irc.c index 128c0c85..642cd056 100644 --- a/src/common/proto-irc.c +++ b/src/common/proto-irc.c @@ -678,6 +678,15 @@ process_numeric (session * sess, int n, handle_mode (serv, word, word_eol, "", TRUE, tags_data); break; + case 328: /* channel url */ + sess = find_channel (serv, word[4]); + if (sess) + { + EMIT_SIGNAL_TIMESTAMP (XP_TE_CHANURL, sess, word[4], word[5] + 1, + NULL, NULL, 0, tags_data->timestamp); + } + break; + case 329: sess = find_channel (serv, word[4]); if (sess) diff --git a/src/common/servlist.c b/src/common/servlist.c index 51094687..01d66374 100644 --- a/src/common/servlist.c +++ b/src/common/servlist.c @@ -256,6 +256,8 @@ static const struct defaultserver def[] = {0, "chat.freenode.net/+6697"}, #endif {0, "chat.freenode.net"}, + /* irc. points to chat. but many users and urls still reference it */ + {0, "irc.freenode.net"}, /* {"Freeworld", 0}, {0, "kabel.freeworld.nu"}, diff --git a/src/common/text.c b/src/common/text.c index b825faba..b6ad378d 100644 --- a/src/common/text.c +++ b/src/common/text.c @@ -1359,6 +1359,11 @@ static char * const pevt_chanmodes_help[] = { N_("Modes string"), }; +static char * const pevt_chanurl_help[] = { + N_("Channel Name"), + N_("URL"), +}; + static char * const pevt_rawmodes_help[] = { N_("Nickname"), N_("Modes string"), diff --git a/src/common/textevents.in b/src/common/textevents.in index 1f86d90b..b4242ca7 100644 --- a/src/common/textevents.in +++ b/src/common/textevents.in @@ -202,6 +202,12 @@ pevt_chanunquiet_help %C22*%O$t%C26$1%O removes quiet on %C18$2%O 2 +Channel Url +XP_TE_CHANURL +pevt_chanurl_help +%C22*%O$tChannel %C22$1%O url: %C24$2 +2 + Channel Voice XP_TE_CHANVOICE pevt_chanvoice_help diff --git a/src/fe-gtk/Makefile.am b/src/fe-gtk/Makefile.am index 8bbad35d..c8b099af 100644 --- a/src/fe-gtk/Makefile.am +++ b/src/fe-gtk/Makefile.am @@ -7,7 +7,7 @@ AM_CPPFLAGS = $(GUI_CFLAGS) -DLOCALEDIR=\"$(localedir)\" hexchat_LDADD = ../common/libhexchatcommon.a $(GUI_LIBS) EXTRA_DIST = \ - about.h ascii.h banlist.h chanlist.h chanview.h chanview-tabs.c \ + ascii.h banlist.h chanlist.h chanview.h chanview-tabs.c \ chanview-tree.c custom-list.h editlist.h fe-gtk.h fkeys.h gtkutil.h joind.h \ maingui.h menu.h mmx_cmod.S mmx_cmod.h notifygui.h palette.h pixmaps.h \ plugin-tray.h plugingui.c plugingui.h rawlog.h search.h sexy-iso-codes.h \ @@ -26,7 +26,7 @@ sexy_spell = \ sexy-iso-codes.c sexy-marshal.c sexy-spell-entry.c endif -hexchat_SOURCES = about.c ascii.c banlist.c chanlist.c chanview.c custom-list.c \ +hexchat_SOURCES = ascii.c banlist.c chanlist.c chanview.c custom-list.c \ dccgui.c editlist.c fe-gtk.c fkeys.c gtkutil.c ignoregui.c joind.c menu.c \ maingui.c $(mmx_cmod_S) notifygui.c palette.c pixmaps.c plugin-tray.c $(plugingui_c) \ rawlog.c search.c servlistgui.c setup.c $(sexy_spell) textgui.c \ diff --git a/src/fe-gtk/about.c b/src/fe-gtk/about.c deleted file mode 100644 index c47fba4f..00000000 --- a/src/fe-gtk/about.c +++ /dev/null @@ -1,162 +0,0 @@ -/* X-Chat - * Copyright (C) 1998 Peter Zelezny. - * - * 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 your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> - -#include "fe-gtk.h" - -#ifdef USE_XLIB -#include <gdk/gdkx.h> -#endif - -#include "../common/hexchat.h" -#include "../common/util.h" -#include "../common/hexchatc.h" -#include "palette.h" -#include "pixmaps.h" -#include "gtkutil.h" -#include "about.h" - -static GtkWidget *about = 0; - -static int -about_close (void) -{ - about = 0; - return 0; -} - -void -menu_about (GtkWidget * wid, gpointer sess) -{ - GtkWidget *vbox; /* the main vertical box inside the about dialog */ - GtkWidget *hbox_main; /* horizontal box for containing text on the left and logo on the right */ - GtkWidget *vbox_logo; /* vertical box for our logo */ - GtkWidget *vbox_text; /* vertical box for text */ - GtkWidget *label_title; /* label for the main title */ - GtkWidget *label_subtitle; /* label for the subtitle */ - GtkWidget *label_info; /* for the informative text */ - GtkWidget *label_copyright; /* for copyright notices */ - GdkColor color; /* color buffer for our nice paintings */ - char buf[512]; /* text buffer for the labels */ - const char *locale = NULL; - extern GtkWindow *parent_window; /* maingui.c */ - - if (about) - { - gtk_window_present (GTK_WINDOW (about)); - return; - } - - /* general about dialog initialization */ - about = gtk_dialog_new (); - gtk_window_set_position (GTK_WINDOW (about), GTK_WIN_POS_CENTER_ON_PARENT); - gtk_window_set_resizable (GTK_WINDOW (about), FALSE); - gtk_window_set_title (GTK_WINDOW (about), _("About "DISPLAY_NAME)); - if (parent_window) - { - gtk_window_set_transient_for (GTK_WINDOW (about), parent_window); - } - g_signal_connect (G_OBJECT (about), "destroy", G_CALLBACK (about_close), 0); - vbox = GTK_DIALOG (about)->vbox; - - /* main horizontal box, text on the left, logo on the right */ - hbox_main = gtk_hbox_new (FALSE, 0); - gtk_container_add (GTK_CONTAINER (vbox), GTK_WIDGET (hbox_main)); - - /* textbox on the left */ - vbox_text = gtk_vbox_new (FALSE, 0); - gtk_box_pack_start (GTK_BOX (hbox_main), vbox_text, 0, 0, 5); - - /* label for title */ - snprintf (buf, sizeof (buf), "<span size=\"x-large\"><b>"DISPLAY_NAME"</b></span>"); - label_title = gtk_label_new (NULL); - gtk_misc_set_alignment (GTK_MISC (label_title), 0, 0); - gtk_box_pack_start (GTK_BOX (vbox_text), label_title, 0, 0, 10); - color.red = 0xd7d7; - color.green = 0x4343; - color.blue = 0x0404; - gtk_widget_modify_fg (label_title, GTK_STATE_NORMAL, &color); - gtk_label_set_markup (GTK_LABEL (label_title), buf); - - /* label for subtitle */ - snprintf (buf, sizeof (buf), "%s", _("<b>A multiplatform IRC Client</b>")); - label_subtitle = gtk_label_new (NULL); - gtk_misc_set_alignment (GTK_MISC (label_subtitle), 0, 0); - gtk_box_pack_start (GTK_BOX (vbox_text), label_subtitle, 0, 0, 10); - color.red = 0x5555; - color.green = 0x5555; - color.blue = 0x5555; - gtk_widget_modify_fg (label_subtitle, GTK_STATE_NORMAL, &color); - gtk_label_set_markup (GTK_LABEL (label_subtitle), buf); - - /* label for additional info */ - g_get_charset (&locale); - (snprintf) (buf, sizeof (buf), - "<b>Version:</b> "PACKAGE_VERSION"\n" - "<b>Compiled:</b> "__DATE__"\n" -#ifdef WIN32 - "<b>Portable Mode:</b> %s\n" - "<b>Build Type:</b> x%d\n" -#endif - "<b>OS:</b> %s\n" - "<b>Charset:</b> %s", -#ifdef WIN32 - (portable_mode () ? "Yes" : "No"), - get_cpu_arch (), -#endif - get_sys_str (0), - locale); - - label_info = gtk_label_new (NULL); - gtk_misc_set_alignment (GTK_MISC (label_info), 0, 0); - gtk_box_pack_start (GTK_BOX (vbox_text), label_info, 0, 0, 10); - gtk_label_set_selectable (GTK_LABEL (label_info), TRUE); - gtk_label_set_markup (GTK_LABEL (label_info), buf); - - /* label for copyright notices */ - snprintf (buf, sizeof (buf), "<small>\302\251 1998-2010 Peter \305\275elezn\303\275\n\302\251 2009-2013 Berke Viktor</small>"); - label_copyright = gtk_label_new (NULL); - gtk_misc_set_alignment (GTK_MISC (label_copyright), 0, 0); - gtk_box_pack_start (GTK_BOX (vbox_text), label_copyright, 0, 0, 10); - gtk_label_set_markup (GTK_LABEL (label_copyright), buf); - - /* imagebox on the right */ - vbox_logo = gtk_vbox_new (FALSE, 0); - gtk_box_pack_start (GTK_BOX (hbox_main), vbox_logo, 0, 0, 10); - - /* the actual image */ - wid = gtk_image_new_from_pixbuf (pix_hexchat); - gtk_box_pack_start (GTK_BOX (vbox_logo), wid, 0, 0, 10); - - /* our close button on the bottom right */ - wid = gtk_button_new_from_stock (GTK_STOCK_CLOSE); - GTK_WIDGET_SET_FLAGS (GTK_WIDGET (wid), GTK_CAN_DEFAULT); - gtk_box_pack_end (GTK_BOX (GTK_DIALOG (about)->action_area), wid, 0, 0, 0); - gtk_widget_grab_default (wid); - g_signal_connect (G_OBJECT (wid), "clicked", G_CALLBACK (gtkutil_destroy), about); - - /* pure white background for the whole about widget*/ - color.red = color.green = color.blue = 0xffff; - gtk_widget_modify_bg (about, GTK_STATE_NORMAL, &color); - - /* show off! */ - gtk_widget_show_all (about); -} diff --git a/src/fe-gtk/about.h b/src/fe-gtk/about.h deleted file mode 100644 index b4d5cb34..00000000 --- a/src/fe-gtk/about.h +++ /dev/null @@ -1,25 +0,0 @@ -/* HexChat - * Copyright (C) 1998-2010 Peter Zelezny. - * Copyright (C) 2009-2013 Berke Viktor. - * - * 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 your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#ifndef HEXCHAT_ABOUT_H -#define HEXCHAT_ABOUT_H - -void menu_about (GtkWidget * wid, gpointer sess); - -#endif diff --git a/src/fe-gtk/chanlist.c b/src/fe-gtk/chanlist.c index 0f0307b7..d0e0ea40 100644 --- a/src/fe-gtk/chanlist.c +++ b/src/fe-gtk/chanlist.c @@ -747,6 +747,7 @@ chanlist_opengui (server *serv, int do_refresh) serv->gui->chanlist_window = mg_create_generic_tab ("ChanList", tbuf, FALSE, TRUE, chanlist_closegui, serv, 640, 480, &vbox, serv); + gtkutil_destroy_on_esc (serv->gui->chanlist_window); gtk_container_set_border_width (GTK_CONTAINER (vbox), 6); gtk_box_set_spacing (GTK_BOX (vbox), 12); diff --git a/src/fe-gtk/fe-gtk.vcxproj b/src/fe-gtk/fe-gtk.vcxproj index f8c6377a..37630bc9 100644 --- a/src/fe-gtk/fe-gtk.vcxproj +++ b/src/fe-gtk/fe-gtk.vcxproj @@ -98,7 +98,6 @@ </Link> </ItemDefinitionGroup> <ItemGroup> - <ClInclude Include="about.h" /> <ClInclude Include="ascii.h" /> <ClInclude Include="banlist.h" /> <ClInclude Include="chanlist.h" /> @@ -130,7 +129,6 @@ <ClInclude Include="xtext.h" /> </ItemGroup> <ItemGroup> - <ClCompile Include="about.c" /> <ClCompile Include="ascii.c" /> <ClCompile Include="banlist.c" /> <ClCompile Include="chanlist.c" /> diff --git a/src/fe-gtk/fe-gtk.vcxproj.filters b/src/fe-gtk/fe-gtk.vcxproj.filters index a319babd..d78ca2a9 100644 --- a/src/fe-gtk/fe-gtk.vcxproj.filters +++ b/src/fe-gtk/fe-gtk.vcxproj.filters @@ -15,9 +15,6 @@ </Filter> </ItemGroup> <ItemGroup> - <ClInclude Include="about.h"> - <Filter>Header Files</Filter> - </ClInclude> <ClInclude Include="ascii.h"> <Filter>Header Files</Filter> </ClInclude> @@ -107,9 +104,6 @@ </ClInclude> </ItemGroup> <ItemGroup> - <ClCompile Include="about.c"> - <Filter>Source Files</Filter> - </ClCompile> <ClCompile Include="ascii.c"> <Filter>Source Files</Filter> </ClCompile> diff --git a/src/fe-gtk/gtkutil.c b/src/fe-gtk/gtkutil.c index 11206e02..8a3de06f 100644 --- a/src/fe-gtk/gtkutil.c +++ b/src/fe-gtk/gtkutil.c @@ -678,6 +678,7 @@ gtkutil_window_new (char *title, char *role, int width, int height, int flags) { gtk_window_set_type_hint (GTK_WINDOW (win), GDK_WINDOW_TYPE_HINT_DIALOG); gtk_window_set_transient_for (GTK_WINDOW (win), GTK_WINDOW (parent_window)); + gtk_window_set_destroy_with_parent (GTK_WINDOW (win), TRUE); } return win; diff --git a/src/fe-gtk/maingui.c b/src/fe-gtk/maingui.c index 2a486b17..84df4b96 100644 --- a/src/fe-gtk/maingui.c +++ b/src/fe-gtk/maingui.c @@ -2102,8 +2102,8 @@ mg_create_chanmodebuttons (session_gui *gui, GtkWidget *box) gui->flag_k = mg_create_flagbutton (_("Keyword"), box, "K"); gui->key_entry = gtk_entry_new (); gtk_widget_set_name (gui->key_entry, "hexchat-inputbox"); - gtk_entry_set_max_length (GTK_ENTRY (gui->key_entry), 16); - gtk_widget_set_size_request (gui->key_entry, 30, -1); + gtk_entry_set_max_length (GTK_ENTRY (gui->key_entry), 23); + gtk_widget_set_size_request (gui->key_entry, 115, -1); gtk_box_pack_start (GTK_BOX (box), gui->key_entry, 0, 0, 0); g_signal_connect (G_OBJECT (gui->key_entry), "activate", G_CALLBACK (mg_key_entry_cb), NULL); diff --git a/src/fe-gtk/menu.c b/src/fe-gtk/menu.c index 58c28e51..b1f1333d 100644 --- a/src/fe-gtk/menu.c +++ b/src/fe-gtk/menu.c @@ -43,7 +43,6 @@ #include "../common/notify.h" #include "../common/util.h" #include "xtext.h" -#include "about.h" #include "ascii.h" #include "banlist.h" #include "chanlist.h" @@ -1643,6 +1642,62 @@ menu_metres_both (GtkWidget *item, gpointer none) } } +static void +about_dialog_close (GtkDialog *dialog, int response, gpointer data) +{ + gtk_widget_destroy (GTK_WIDGET(dialog)); +} + +static gboolean +about_dialog_openurl (GtkAboutDialog *dialog, char *uri, gpointer data) +{ + fe_open_url (uri); + return TRUE; +} + +static void +menu_about (GtkWidget *wid, gpointer sess) +{ + GtkAboutDialog *dialog = GTK_ABOUT_DIALOG(gtk_about_dialog_new()); + char comment[512]; + char *license = "This program is free software; you can redistribute it and/or modify\n" \ + "it under the terms of the GNU General Public License as published by\n" \ + "the Free Software Foundation; version 2.\n\n" \ + "This program is distributed in the hope that it will be useful,\n" \ + "but WITHOUT ANY WARRANTY; without even the implied warranty of\n" \ + "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" \ + "GNU General Public License for more details.\n\n" \ + "You should have received a copy of the GNU General Public License\n" \ + "along with this program. If not, see <http://www.gnu.org/licenses/>"; + + g_snprintf (comment, sizeof(comment), "Compiled: "__DATE__"\n" +#ifdef WIN32 + "Portable Mode: %s\n" + "Build Type: x%d\n" +#endif + "OS: %s", +#ifdef WIN32 + (portable_mode () ? "Yes" : "No"), + get_cpu_arch (), +#endif + get_sys_str (0)); + + gtk_about_dialog_set_name (dialog, DISPLAY_NAME); + gtk_about_dialog_set_version (dialog, PACKAGE_VERSION); + gtk_about_dialog_set_license (dialog, license); /* gtk3 can use GTK_LICENSE_GPL_2_0 */ + gtk_about_dialog_set_website (dialog, "http://hexchat.github.io"); + gtk_about_dialog_set_website_label (dialog, "Website"); + gtk_about_dialog_set_logo (dialog, pix_hexchat); + gtk_about_dialog_set_copyright (dialog, "\302\251 1998-2010 Peter \305\275elezn\303\275\n\302\251 2009-2013 Berke Viktor"); + gtk_about_dialog_set_comments (dialog, comment); + + gtk_window_set_transient_for (GTK_WINDOW(dialog), GTK_WINDOW(parent_window)); + g_signal_connect (G_OBJECT(dialog), "response", G_CALLBACK(about_dialog_close), NULL); + g_signal_connect (G_OBJECT(dialog), "activate-link", G_CALLBACK(about_dialog_openurl), NULL); + + gtk_widget_show_all (GTK_WIDGET(dialog)); +} + static struct mymenu mymenu[] = { {N_("He_xChat"), 0, 0, M_NEWMENU, 0, 0, 1}, {N_("Network Li_st..."), menu_open_server_list, (char *)&pix_book, M_MENUPIX, 0, 0, 1, GDK_s}, diff --git a/src/fe-gtk/notifygui.c b/src/fe-gtk/notifygui.c index 872fb7ed..c0282ade 100644 --- a/src/fe-gtk/notifygui.c +++ b/src/fe-gtk/notifygui.c @@ -60,6 +60,7 @@ static void notify_closegui (void) { notify_window = 0; + notify_save (); } /* Need this to be able to set the foreground colour property of a row |