Age | Commit message (Collapse) | Author | |
---|---|---|---|
2018-03-13 | Revert "xtext: Always use Pango to get correct glyph width on Unix" | Patrick Griffis | |
This reverts commit d3f1ab78138a1f9256ec02842799ed6cd1e3ec1e. The performance even on Linux is just too poor in many cases. | |||
2018-03-09 | win32: Update to build against gvsbuild | Patrick Griffis | |
2018-03-09 | Various fixes for mingw | Patrick Griffis | |
2018-03-09 | win32: Respond to WM_TIMECHANGE by updating the CRT timezone info | Mark Jansen | |
Closes #2090 Fixes #1851 | |||
2018-02-11 | xtext: Fix accidental truncation | Patrick Griffis | |
Fixes #2121 | |||
2018-02-06 | xtext: Always use Pango to get correct glyph width on Unix | Peng Wu | |
This should be slower but pango seems to be reasonably fast on Unix though extremely slow on Windows. https://bugzilla.redhat.com/show_bug.cgi?id=1536298 | |||
2018-02-06 | xtext: Fix invalid utf-8 from truncation | Patrick Griffis | |
2018-02-06 | xtext: Remove unused code | Patrick Griffis | |
2018-02-06 | Fix Enchant 2.1.3+ support | Patrick Griffis | |
They changed the lib name yet again... Closes #2117 | |||
2018-01-18 | This patch hopefully solves a bug that causes that when a tab (channel or ↵ | Rodri | |
private) is left with the scrollbar at the bottom, and some new text arrives, and then we select again that tab, sometimes the scrollbar is not completely down and there is hidden text and we have to scroll manually to the bottom to show all text. This was previously submitted as an issue in: https://github.com/hexchat/hexchat/issues/1948 Maybe it isn't the ideal way to solve it, but at least I tested it and it seems to work. | |||
2018-01-18 | Prevent undefined behaviour on memcpy | Francisco Couzo | |
2017-12-24 | Rename app-id to io.github.Hexchat | Patrick Griffis | |
RDNS syntax is recommended for applications and this matches the existing flatpak. Note that the dbus service and icons still need renaming though the former is an API breakage. Closes #2104 Closes #2103 | |||
2017-11-24 | spell-entry: Improve robustness of enchant loading and fix 2.0 support | Patrick Griffis | |
- Add logging and error handling to loading symbols - Don't load unversioned symbol - Handle new function names in Enchant 2.0 Closes #2095 | |||
2017-09-16 | Spelling: SOCKS5, Byte per second (#2056) | Allan Nordhøy | |
* Spelling: SOCKS5 * SOCKS4/5, Byte per second As per https://en.wikipedia.org/wiki/Data_rate_units | |||
2017-09-15 | Use localized "HexChat" in window titles | Chase Patterson | |
Also allow rearranging of "HexChat" in window titles | |||
2017-09-15 | Change windows from starting with "Hexchat: " to ending with " - Hexchat" | Chase Patterson | |
2017-08-31 | Improve detection of system tray support | Patrick Griffis | |
Closes #2045 | |||
2017-08-19 | UI text consistency, capitalization etc. | torhus | |
2017-08-18 | Adjust use of ellipsis (...) in menus according to Gnome HIG (#2035) | torhus | |
* Adjust use of ellipses (...) in menus according to Gnome HIG https://developer.gnome.org/hig/stable/writing-style.html.en | |||
2017-07-20 | Add mnemonic for URL Grabber | Patrick Griffis | |
2017-07-01 | Support changing tray icon only with tray_normal image | Bilal Elmoussaoui | |
Previously making a hexchat icon would override all hexchat icons not just the tray. Fixes #2017 Closes #2018 | |||
2017-06-26 | Fix crash when notification backend fails | Patrick Griffis | |
Most notably on Win7 | |||
2017-06-13 | build: Replace Autotools with Meson | Patrick Griffis | |
Quick rundown of benefits: - Much faster: - Autotools (with autogen): 22 seconds - Meson: 7 seconds - Meson (with ccache): 2 seconds - Simpler: - ~1000 lines smaller - Single simple language - Potentially better Windows (Visual Studio) support What is not done: - Complete Windows support - OSX support (easy) Closes #2013 Closes #1937 Closes #1803 | |||
2017-05-12 | Fix input theming with Adwaita-dark also | Patrick Griffis | |
2017-04-28 | Fix signature of other notification backends | Patrick Griffis | |
Why isn't this a compiler error in the first place.. | |||
2017-04-28 | winrt: Show some exceptions | Mark Jansen | |
2017-02-27 | Removed ctrl+w keybinding from close menu. Closes #397. | Poke | |
2016-12-27 | Tweak shadow in preferences | Patrick Griffis | |
2016-12-22 | Use a scrolled window for large preference pages | Patrick Griffis | |
Closes #1722 | |||
2016-11-11 | Further tab color improvements | Patrick Griffis | |
- Combine the three properties into a single one - Finally fully fix the handling with plugins handling events TODO: Look into lastact handling of these, seems wrong | |||
2016-11-11 | More fixes for tab color handling with plugins | Patrick Griffis | |
Part 2 of 03767ee0f9826222 So how the colors work should be pretty straight forward: - A message comes in and is handled, this sets the state flags: nick_said, msg_said, new_data. These map to tab colors. - This state is reset under one of these conditions: - It is commited to the UI when actually printed on unfocused tab - Event is interupted by a plugin hook - The tab focus is changed | |||
2016-11-11 | Fix private highlights not setting tab color | Patrick Griffis | |
Caused by 03767ee0f98 Fixes #1871 | |||
2016-09-26 | build: Reorder includes to avoid installed plugin header | Rainer Müller | |
When hexchat is already installed into a non-default prefix, a new build could pick up ${prefix}/include/hexchat-plugin.h from the installed version instead of the local header, as configuration variables such as $(GLIB_CFLAGS) would point to -I${prefix}/include. Reordering the includes and moving -I arguments to CPPFLAGS prevents this, as it ensures the local directories are always searched first. This was no problem when compiling for /usr or /usr/local as these directories in the compiler search path are always searched last. Closes #1822 | |||
2016-08-20 | Remove unused preference | Patrick Griffis | |
I can't really think of a reason this would be needed and since it doesn't do anything, and didn't since xchat, might as well remove it. | |||
2016-07-24 | Fix crashes when plugins modify UI during Close Context | Patrick Griffis | |
This probably doesn't catch them all but setting tab color and printing text at least do not crash in the common case. | |||
2016-07-24 | Fix leak | Patrick Griffis | |
2016-07-24 | Kill fe_set_hilight() | Patrick Griffis | |
It just duplicates functionality and this fixes: - alert_taskbar chanopt not being respected - tab color being incorrect when highlight print events are eaten | |||
2016-07-05 | setup: Disabling input styling requires restarting | Patrick Griffis | |
2016-07-05 | Fix input styling with Adwaita 3.20 theme | Patrick Griffis | |
2016-06-30 | dcc: Introduce dcc_type and dcc_state enums | Ben Gamari | |
Closes #1705 | |||
2016-06-29 | fkeys: Change unprintable characters to octal notation | Rastus Vernon | |
- ^O is \017 - ^B is \002 - ^C is \003 - ^] is \035 - ^_ is \037 - ^V is \026 See ASCII(7) for an octal and hexadecimal table. | |||
2016-06-29 | Add keybinding for reverse video text | Rastus Vernon | |
This adds the Ctrl+R keybinding by default to insert \026, the character used for the reverse video text attribute. | |||
2016-06-29 | menu: Ensure that toggling lag-o-meter changes timer state | Ben Gamari | |
2016-06-29 | Apply timeout changes made in preferences dialog | Ben Gamari | |
Just involves a bit of refactoring. | |||
2016-06-29 | Introduce and use fe_timeout_add_seconds | Ben Gamari | |
This should allow the operating system to be a bit more lax about timeouts, allowing more efficient power management. | |||
2016-06-21 | notifications-winrt: Fix all uses of "" to L"". | Arnavion | |
The API uses Platform::String^. String's constructor takes in char16*. Fixes #1755 | |||
2016-06-12 | servlistgui: Error if nicks left empty | Patrick Griffis | |
2016-05-16/* Copyright (c) 2005 Peter Zelezny
All Rights Reserved.
joind.c - The Join Dialog.
Popups up when you connect without any autojoin channels and helps you
to find or join a channel.
*/
#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>
#include <stdio.h>
#ifndef WIN32
#include <unistd.h>
#endif
#include <gtk/gtk.h>
#include <gtk/gtkbbox.h>
#include <gtk/gtkbutton.h>
#include <gtk/gtkdialog.h>
#include <gtk/gtkentry.h>
#include <gtk/gtkhbox.h>
#include <gtk/gtkimage.h>
#include <gtk/gtklabel.h>
#include <gtk/gtkradiobutton.h>
#include <gtk/gtkvbox.h>
#include <gtk/gtkwindow.h>
#include "../common/hexchat.h"
#include "../common/hexchatc.h"
#include "../common/server.h"
#include "../common/fe.h"
#include "fe-gtk.h"
#include "chanlist.h"
static void
joind_radio2_cb (GtkWidget *radio, server *serv)
{
if (GTK_TOGGLE_BUTTON (radio)->active)
{
gtk_widget_grab_focus (serv->gui->joind_entry);
gtk_editable_set_position (GTK_EDITABLE (serv->gui->joind_entry), 999);
}
}
static void
joind_entryenter_cb (GtkWidget *entry, GtkWidget *ok)
{
gtk_widget_grab_focus (ok);
}
static void
joind_entryfocus_cb (GtkWidget *entry, GdkEventFocus *event, server *serv)
{
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (serv->gui->joind_radio2), TRUE);
}
static void
joind_destroy_cb (GtkWidget *win, server *serv)
{
if (is_server (serv))
serv->gui->joind_win = NULL;
}
static void
joind_ok_cb (GtkWidget *ok, server *serv)
{
if (!is_server (serv))
{
gtk_widget_destroy (gtk_widget_get_toplevel (ok));
return;
}
/* do nothing */
if (GTK_TOGGLE_BUTTON (serv->gui->joind_radio1)->active)
goto xit;
/* join specific channel */
if (GTK_TOGGLE_BUTTON (serv->gui->joind_radio2)->active)
{
char *text = GTK_ENTRY (serv->gui->joind_entry)->text;
if (strlen (text) < 2)
{
fe_message (_("Channel name too short, try again."), FE_MSG_ERROR);
return;
}
serv->p_join (serv, text, "");
goto xit;
}
/* channel list */
chanlist_opengui (serv, TRUE);
xit:
prefs.hex_gui_join_dialog = 0;
if (GTK_TOGGLE_BUTTON (serv->gui->joind_check)->active)
prefs.hex_gui_join_dialog = 1;
gtk_widget_destroy (serv->gui->joind_win);
serv->gui->joind_win = NULL;
}
static void
joind_show_dialog (server *serv)
{
GtkWidget *dialog1;
GtkWidget *dialog_vbox1;
GtkWidget *vbox1;
GtkWidget *hbox1;
GtkWidget *image1;
GtkWidget *vbox2;
GtkWidget *label;
GtkWidget *radiobutton1;
GtkWidget *radiobutton2;
GtkWidget *radiobutton3;
GSList *radiobutton1_group;
GtkWidget *hbox2;
GtkWidget *entry1;
GtkWidget *checkbutton1;
GtkWidget *dialog_action_area1;
GtkWidget *okbutton1;
char buf[256];
char buf2[256];
serv->gui->joind_win = dialog1 = gtk_dialog_new ();
gtk_window_set_title (GTK_WINDOW (dialog1), _(DISPLAY_NAME": Connection Complete"));
gtk_window_set_type_hint (GTK_WINDOW (dialog1), GDK_WINDOW_TYPE_HINT_DIALOG);
gtk_window_set_position (GTK_WINDOW (dialog1), GTK_WIN_POS_MOUSE);
dialog_vbox1 = GTK_DIALOG (dialog1)->vbox;
gtk_widget_show (dialog_vbox1);
vbox1 = gtk_vbox_new (FALSE, 0);
gtk_widget_show (vbox1);
gtk_box_pack_start (GTK_BOX (dialog_vbox1), vbox1, TRUE, TRUE, 0);
hbox1 = gtk_hbox_new (FALSE, 0);
gtk_widget_show (hbox1);
gtk_box_pack_start (GTK_BOX (vbox1), hbox1, TRUE, TRUE, 0);
image1 = gtk_image_new_from_stock (GTK_STOCK_NETWORK, GTK_ICON_SIZE_LARGE_TOOLBAR);
gtk_widget_show (image1);
gtk_box_pack_start (GTK_BOX (hbox1), image1, FALSE, TRUE, 24);
gtk_misc_set_alignment (GTK_MISC (image1), 0.5, 0.06);
vbox2 = gtk_vbox_new (FALSE, 10);
gtk_container_set_border_width (GTK_CONTAINER (vbox2), 6);
gtk_widget_show (vbox2);
gtk_box_pack_start (GTK_BOX (hbox1), vbox2, TRUE, TRUE, 0);
snprintf (buf2, sizeof (buf2), _("Connection to %s complete."),
server_get_network (serv, TRUE));
snprintf (buf, sizeof (buf), "\n<b>%s</b>", buf2);
label = gtk_label_new (buf);
gtk_widget_show (label);
gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, FALSE, 0);
gtk_label_set_use_markup (GTK_LABEL (label), TRUE);
gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
label = gtk_label_new (_("In the Server-List window, no channel (chat room) has been entered to be automatically joined for this network."));
gtk_widget_show (label);
gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, FALSE, 0);
GTK_LABEL (label)->wrap = TRUE;
gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
label = gtk_label_new (_("What would you like to do next?"));
gtk_widget_show (label);
gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, FALSE, 0);
gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
serv->gui->joind_radio1 = radiobutton1 = gtk_radio_button_new_with_mnemonic (NULL, _("_Nothing, I'll join a channel later."));
gtk_widget_show (radiobutton1);
gtk_box_pack_start (GTK_BOX (vbox2), radiobutton1, FALSE, FALSE, 0);
radiobutton1_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (radiobutton1));
hbox2 = gtk_hbox_new (FALSE, 0);
gtk_widget_show (hbox2);
gtk_box_pack_start (GTK_BOX (vbox2), hbox2, FALSE, FALSE, 0);
serv->gui->joind_radio2 = radiobutton2 = gtk_radio_button_new_with_mnemonic (NULL, _("_Join this channel:"));
gtk_widget_show (radiobutton2);
gtk_box_pack_start (GTK_BOX (hbox2), radiobutton2, FALSE, FALSE, 0);
gtk_radio_button_set_group (GTK_RADIO_BUTTON (radiobutton2), radiobutton1_group);
radiobutton1_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (radiobutton2));
serv->gui->joind_entry = entry1 = gtk_entry_new ();
gtk_entry_set_text (GTK_ENTRY (entry1), "#");
gtk_widget_show (entry1);
gtk_box_pack_start (GTK_BOX (hbox2), entry1, TRUE, TRUE, 8);
snprintf (buf, sizeof (buf), "<small> %s</small>",
_("If you know the name of the channel you want to join, enter it here."));
label = gtk_label_new (buf);
gtk_widget_show (label);
gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, FALSE, 0);
gtk_label_set_use_markup (GTK_LABEL (label), TRUE);
gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
radiobutton3 = gtk_radio_button_new_with_mnemonic (NULL, _("O_pen the Channel-List window."));
gtk_widget_show (radiobutton3);
gtk_box_pack_start (GTK_BOX (vbox2), radiobutton3, FALSE, FALSE, 0);
gtk_radio_button_set_group (GTK_RADIO_BUTTON (radiobutton3), radiobutton1_group);
radiobutton1_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (radiobutton3));
snprintf (buf, sizeof (buf), "<small> %s</small>",
_("Retrieving the Channel-List may take a minute or two."));
label = gtk_label_new (buf);
gtk_widget_show (label);
gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, FALSE, 0);
gtk_label_set_use_markup (GTK_LABEL (label), TRUE);
gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
serv->gui->joind_check = checkbutton1 = gtk_check_button_new_with_mnemonic (_("_Always show this dialog after connecting."));
if (prefs.hex_gui_join_dialog)
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (checkbutton1), TRUE);
gtk_widget_show (checkbutton1);
gtk_box_pack_start (GTK_BOX (vbox1), checkbutton1, FALSE, FALSE, 0);
dialog_action_area1 = GTK_DIALOG (dialog1)->action_area;
gtk_widget_show (dialog_action_area1);
gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area1), GTK_BUTTONBOX_END);
okbutton1 = gtk_button_new_from_stock ("gtk-ok");
gtk_widget_show (okbutton1);
gtk_box_pack_end (GTK_BOX (GTK_DIALOG (dialog1)->action_area), okbutton1, FALSE, TRUE, 0);
GTK_WIDGET_SET_FLAGS (okbutton1, GTK_CAN_DEFAULT);
g_signal_connect (G_OBJECT (dialog1), "destroy",
G_CALLBACK (joind_destroy_cb), serv);
g_signal_connect (G_OBJECT (entry1), "focus_in_event",
G_CALLBACK (joind_entryfocus_cb), serv);
g_signal_connect (G_OBJECT (entry1), "activate",
G_CALLBACK (joind_entryenter_cb), okbutton1);
g_signal_connect (G_OBJECT (radiobutton2), "toggled",
G_CALLBACK (joind_radio2_cb), serv);
g_signal_connect (G_OBJECT (okbutton1), "clicked",
G_CALLBACK (joind_ok_cb), serv);
gtk_widget_grab_focus (okbutton1);
gtk_widget_show_all (dialog1);
}
void
joind_open (server *serv)
{
if (prefs.hex_gui_join_dialog)
joind_show_dialog (serv);
}
void
joind_close (server *serv)
{
if (serv->gui->joind_win)
{
gtk_widget_destroy (serv->gui->joind_win);
serv->gui->joind_win = NULL;
}
}
|