Merge with default

This commit is contained in:
berkeviktor@aol.com
2011-04-16 19:33:59 +02:00
178 changed files with 34570 additions and 529 deletions

View File

@@ -39,6 +39,7 @@
#include "../common/xchat.h"
#include "../common/util.h"
#include "../common/wdkutil.h"
#include "palette.h"
#include "pixmaps.h"
#include "gtkutil.h"
@@ -87,6 +88,19 @@ menu_about (GtkWidget * wid, gpointer sess)
char buf[512];
const char *locale = NULL;
extern GtkWindow *parent_window; /* maingui.c */
SYSTEM_INFO si;
unsigned short int cpu_arch;
GetSystemInfo (&si);
if (si.wProcessorArchitecture == 9)
{
cpu_arch = 64;
}
else
{
cpu_arch = 86;
}
if (about)
{
@@ -95,7 +109,7 @@ menu_about (GtkWidget * wid, gpointer sess)
}
about = gtk_dialog_new ();
gtk_window_set_position (GTK_WINDOW (about), GTK_WIN_POS_CENTER);
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)
@@ -114,35 +128,42 @@ menu_about (GtkWidget * wid, gpointer sess)
g_get_charset (&locale);
(snprintf) (buf, sizeof (buf),
"<span size=\"x-large\"><b>"DISPLAY_NAME" "PACKAGE_VERSION"</b></span>\n\n"
"%s\n\n"
#ifdef WIN32
/* leave this message to avoid time wasting bug reports! */
"This version is unofficial and comes with no support.\n\n"
#endif
"<b>XChat Release</b>: "XCHAT_RELEASE"\n\n"
"<b>OS</b>: %s\n"
"<b>Charset</b>: %s "
"<b>GTK+</b>: %i.%i.%i\n"
"<b>Compiled</b>: "__DATE__"\n"
"<b>Portable Mode</b>: %s\n"
"<b>Build Type</b>: x%d\n\n"
"<small>This version is unofficial and comes with no support.\n"
"\302\251 1998-2010 Peter \305\275elezn\303\275 &lt;zed@xchat.org>"
/* "\n<a href=\"http://code.google.com/p/xchat-wdk/\">http://code.google.com/p/xchat-wdk/</a>" this is broken in gtk ATM */
"</small>",
get_cpu_str (),
locale,
gtk_major_version,
gtk_minor_version,
gtk_micro_version,
(portable_mode () ? "Yes" : "No"),
cpu_arch
#else
"%s\n\n"
"%s\n"
"<b>Charset</b>: %s "
#ifdef WIN32
"<b>GTK+</b>: %i.%i.%i\n"
#else
"<b>Renderer</b>: %s\n"
#endif
"<b>Compiled</b>: "__DATE__"\n\n"
"<small>\302\251 1998-2010 Peter \305\275elezn\303\275 &lt;zed@xchat.org></small>",
_("A multiplatform IRC Client"),
get_cpu_str(),
locale,
#ifdef WIN32
gtk_major_version,
gtk_minor_version,
gtk_micro_version
#else
_("A multiplatform IRC Client"),
get_cpu_str (),
locale,
#ifdef USE_XFT
"Xft"
"Xft"
#else
"Pango"
"Pango"
#endif
#endif
);
);
gtk_label_set_markup (GTK_LABEL (label), buf);
gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_CENTER);

View File

@@ -19,7 +19,6 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <time.h>

View File

@@ -19,7 +19,6 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <time.h>

View File

@@ -144,8 +144,8 @@ tab_scroll_left_up_clicked (GtkWidget *widget, chanview *cv)
for (i = adj->value; ((i > new_value) && (tab_left_is_moving)); i -= 0.1)
{
gtk_adjustment_set_value (adj, i);
while (g_main_pending ())
g_main_iteration (TRUE);
while (g_main_context_pending (NULL))
g_main_context_iteration (NULL, TRUE);
}
gtk_adjustment_set_value (adj, new_value);
@@ -191,8 +191,8 @@ tab_scroll_right_down_clicked (GtkWidget *widget, chanview *cv)
for (i = adj->value; ((i < new_value) && (tab_right_is_moving)); i += 0.1)
{
gtk_adjustment_set_value (adj, i);
while (g_main_pending ())
g_main_iteration (TRUE);
while (g_main_context_pending (NULL))
g_main_context_iteration (NULL, TRUE);
}
gtk_adjustment_set_value (adj, new_value);

View File

@@ -19,7 +19,6 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>

View File

@@ -19,7 +19,6 @@
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include "fe-gtk.h"
@@ -32,6 +31,8 @@
#include <gtk/gtkmessagedialog.h>
#include <gtk/gtkversion.h>
#include <gdk/gdkwin32.h>
#include "../common/xchat.h"
#include "../common/fe.h"
#include "../common/util.h"
@@ -39,6 +40,7 @@
#include "../common/cfgfiles.h"
#include "../common/xchatc.h"
#include "../common/plugin.h"
#include "../common/server.h"
#include "gtkutil.h"
#include "maingui.h"
#include "pixmaps.h"
@@ -136,11 +138,26 @@ static const GOptionEntry gopt_entries[] =
{NULL}
};
#ifdef WIN32
static void
create_msg_dialog (gchar *title, gchar *message)
{
GtkWidget *dialog;
dialog = gtk_message_dialog_new (NULL, GTK_DIALOG_MODAL, GTK_MESSAGE_INFO, GTK_BUTTONS_CLOSE, message);
gtk_window_set_title (GTK_WINDOW (dialog), title);
gtk_dialog_run (GTK_DIALOG (dialog));
gtk_widget_destroy (dialog);
}
#endif
int
fe_args (int argc, char *argv[])
{
GError *error = NULL;
GOptionContext *context;
#ifdef WIN32
char *buffer[2048];
#endif
#ifdef ENABLE_NLS
bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
@@ -149,22 +166,67 @@ fe_args (int argc, char *argv[])
#endif
context = g_option_context_new (NULL);
#ifdef WIN32
g_option_context_set_help_enabled (context, FALSE); /* disable stdout help as stdout is unavailable for subsystem:windows */
#endif
g_option_context_add_main_entries (context, gopt_entries, GETTEXT_PACKAGE);
g_option_context_add_group (context, gtk_get_option_group (FALSE));
g_option_context_parse (context, &argc, &argv, &error);
#ifdef WIN32
if (error) /* workaround for argv not being available when using subsystem:windows */
{
if (error->message) /* the error message contains argv so search for patterns in that */
{
if (strstr (error->message, "--help-all") != NULL)
{
if (snprintf (buffer, 2048, g_option_context_get_help (context, FALSE, NULL)))
{
gtk_init (&argc, &argv);
create_msg_dialog ("Long Help", buffer);
}
return 0;
} else if (strstr (error->message, "--help") != NULL || strstr (error->message, "-?") != NULL)
{
if (snprintf (buffer, 2048, g_option_context_get_help (context, TRUE, NULL)))
{
gtk_init (&argc, &argv);
create_msg_dialog ("Help", buffer);
}
return 0;
} else
{
if (snprintf (buffer, 2048, "%s\n", error->message))
{
gtk_init (&argc, &argv);
create_msg_dialog ("Error", buffer);
}
return 1;
}
}
}
#else
if (error)
{
if (error->message)
printf ("%s\n", error->message);
return 1;
}
#endif
g_option_context_free (context);
if (arg_show_version)
{
#ifdef WIN32
if (snprintf (buffer, 2048, DISPLAY_NAME" "PACKAGE_VERSION"\n"))
{
gtk_init (&argc, &argv);
create_msg_dialog ("Version Information", buffer);
}
#else
printf (PACKAGE_TARNAME" "PACKAGE_VERSION"\n");
#endif
return 0;
}
@@ -177,7 +239,18 @@ fe_args (int argc, char *argv[])
if (sl)
{
*sl = 0;
printf ("%s\\plugins\n", exe);
if (snprintf (buffer, 2048, "%s\\plugins\n", exe))
{
gtk_init (&argc, &argv);
create_msg_dialog ("Plugin Auto-load Directory", buffer);
}
} else
{
if (snprintf (buffer, 2048, ".\\plugins\n"))
{
gtk_init (&argc, &argv);
create_msg_dialog ("Plugin Auto-load Directory", buffer);
}
}
#else
printf ("%s\n", XCHATLIBDIR"/plugins");
@@ -187,7 +260,15 @@ fe_args (int argc, char *argv[])
if (arg_show_config)
{
#ifdef WIN32
if (snprintf (buffer, 2048, "%s\n", get_xdir_fs ()))
{
gtk_init (&argc, &argv);
create_msg_dialog ("User Config Directory", buffer);
}
#else
printf ("%s\n", get_xdir_fs ());
#endif
return 0;
}
@@ -330,7 +411,7 @@ log_handler (const gchar *log_domain,
{
session *sess;
if (getenv ("XCHAT_WARNING_IGNORE"))
/* if (getenv ("XCHAT_WARNING_IGNORE")) */
return;
sess = find_dialog (serv_list->data, "(warnings)");

View File

@@ -4,7 +4,7 @@
/* If you're compiling this for Windows, your release is un-official
* and not condoned. Please don't use the XChat name. Make up your
* own name! */
#define DISPLAY_NAME "XChat-Unofficial"
#define DISPLAY_NAME "XChat-WDK"
#else
#define DISPLAY_NAME "XChat"
#endif

View File

@@ -20,7 +20,6 @@
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <string.h>
#include <fcntl.h>
#include <ctype.h>

View File

@@ -22,7 +22,6 @@
#include <stdarg.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include "fe-gtk.h"
@@ -51,6 +50,10 @@
#include "../common/util.h"
#include "gtkutil.h"
#include "pixmaps.h"
#ifdef WIN32
#include "../common/fe.h"
#include "../common/thread.h"
#endif
/* gtkutil.c, just some gtk wrappers */
@@ -63,6 +66,13 @@ struct file_req
void *userdata;
filereqcallback callback;
int flags; /* FRF_* flags */
#ifdef WIN32
int multiple;
thread *th;
char *title; /* native locale */
char *filter;
#endif
};
static char last_dir[256] = "";
@@ -164,6 +174,190 @@ gtkutil_file_req_response (GtkWidget *dialog, gint res, struct file_req *freq)
}
}
#ifdef WIN32
static int
win32_openfile (char *file_buf, int file_buf_len, char *title_text, char *filter,
int multiple)
{
OPENFILENAME o;
memset (&o, 0, sizeof (o));
o.lStructSize = sizeof (o);
o.lpstrFilter = filter;
o.lpstrFile = file_buf;
o.nMaxFile = file_buf_len;
o.lpstrTitle = title_text;
o.Flags = 0x02000000 | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY |
OFN_NOCHANGEDIR | OFN_EXPLORER | OFN_LONGNAMES | OFN_NONETWORKBUTTON;
if (multiple)
{
o.Flags |= OFN_ALLOWMULTISELECT;
}
return GetOpenFileName (&o);
}
static int
win32_savefile (char *file_buf, int file_buf_len, char *title_text, char *filter,
int multiple)
{
/* we need the filter to get the default filename. it is from fe-gtk.c (fe_confirm);
* but that filter is actually the whole filename, so apply an empty filter and all good.
* in win32_thread2 we copy the filter ( = the filename) after the last dir into our
* LPTSTR file buffer to make it actually work. the docs for this amazingly retard api:
*
* http://msdn.microsoft.com/en-us/library/ms646839%28VS.85%29.aspx
*/
OPENFILENAME o;
memset (&o, 0, sizeof (o));
o.lStructSize = sizeof (o);
o.lpstrFilter = "All files\0*.*\0\0";
o.lpstrFile = file_buf;
o.nMaxFile = file_buf_len;
o.lpstrTitle = title_text;
o.Flags = 0x02000000 | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY |
OFN_NOCHANGEDIR | OFN_EXPLORER | OFN_LONGNAMES | OFN_NONETWORKBUTTON;
if (multiple)
{
o.Flags |= OFN_ALLOWMULTISELECT;
}
return GetSaveFileName (&o);
}
static void *
win32_thread (struct file_req *freq)
{
char buf[1024 + 32];
char file[1024];
memset (file, 0, sizeof (file));
safe_strcpy (file, last_dir, sizeof (file));
if (win32_openfile (file, sizeof (file), freq->title, freq->filter, freq->multiple))
{
if (freq->multiple)
{
char *f = file;
if (f[strlen (f) + 1] == 0) /* only selected one file */
{
snprintf (buf, sizeof (buf), "1\n%s\n", file);
write (freq->th->pipe_fd[1], buf, strlen (buf));
} else
{
f += strlen (f) + 1; /* skip first, it's only the dir */
while (f[0])
{
snprintf (buf, sizeof (buf), "1\n%s\\%s\n", /*dir!*/file, f);
write (freq->th->pipe_fd[1], buf, strlen (buf));
f += strlen (f) + 1;
}
}
} else
{
snprintf (buf, sizeof (buf), "1\n%s\n", file);
write (freq->th->pipe_fd[1], buf, strlen (buf));
}
}
write (freq->th->pipe_fd[1], "0\n", 2);
Sleep (2000);
return NULL;
}
static void *
win32_thread2 (struct file_req *freq)
{
char buf[1024 + 32];
char file[1024];
memset (file, 0, sizeof (file));
safe_strcpy (file, last_dir, sizeof (file));
safe_strcpy (file, freq->filter, sizeof (file));
if (win32_savefile (file, sizeof (file), freq->title, NULL, freq->multiple))
{
if (freq->multiple)
{
char *f = file;
if (f[strlen (f) + 1] == 0) /* only selected one file */
{
snprintf (buf, sizeof (buf), "1\n%s\n", file);
write (freq->th->pipe_fd[1], buf, strlen (buf));
} else
{
f += strlen (f) + 1; /* skip first, it's only the dir */
while (f[0])
{
snprintf (buf, sizeof (buf), "1\n%s\\%s\n", /*dir!*/file, f);
write (freq->th->pipe_fd[1], buf, strlen (buf));
f += strlen (f) + 1;
}
}
} else
{
snprintf (buf, sizeof (buf), "1\n%s\n", file);
write (freq->th->pipe_fd[1], buf, strlen (buf));
}
}
write (freq->th->pipe_fd[1], "0\n", 2);
Sleep (2000);
return NULL;
}
static gboolean
win32_close_pipe (int fd)
{
close (fd);
return 0;
}
static gboolean
win32_read_thread (GIOChannel *source, GIOCondition cond, struct file_req *freq)
{
char buf[512];
char *file;
waitline2 (source, buf, sizeof buf);
switch (buf[0])
{
case '0': /* filedialog has closed */
freq->callback (freq->userdata, NULL);
break;
case '1': /* got a filename! */
waitline2 (source, buf, sizeof buf);
file = g_filename_to_utf8 (buf, -1, 0, 0, 0);
freq->callback (freq->userdata, file);
g_free (file);
return TRUE;
}
/* it doesn't work to close them here, because of the weird
way giowin32 works. We must _return_ before closing them */
g_timeout_add(3000, (GSourceFunc)win32_close_pipe, freq->th->pipe_fd[0]);
g_timeout_add(2000, (GSourceFunc)win32_close_pipe, freq->th->pipe_fd[1]);
g_free (freq->title);
free (freq->th);
free (freq);
return FALSE;
}
#endif
void
gtkutil_file_req (const char *title, void *callback, void *userdata, char *filter,
int flags)
@@ -172,6 +366,58 @@ gtkutil_file_req (const char *title, void *callback, void *userdata, char *filte
GtkWidget *dialog;
extern char *get_xdir_fs (void);
#ifdef WIN32
if (!(flags & FRF_WRITE))
{
freq = malloc (sizeof (struct file_req));
freq->th = thread_new ();
freq->flags = 0;
freq->multiple = (flags & FRF_MULTIPLE);
freq->callback = callback;
freq->userdata = userdata;
freq->title = g_locale_from_utf8 (title, -1, 0, 0, 0);
if (!filter)
{
freq->filter = "All files\0*.*\0"
"Executables\0*.exe\0"
"ZIP files\0*.zip\0\0";
}
else
{
freq->filter = filter;
}
thread_start (freq->th, win32_thread, freq);
fe_input_add (freq->th->pipe_fd[0], FIA_FD|FIA_READ, win32_read_thread, freq);
return;
}
else {
freq = malloc (sizeof (struct file_req));
freq->th = thread_new ();
freq->flags = 0;
freq->multiple = (flags & FRF_MULTIPLE);
freq->callback = callback;
freq->userdata = userdata;
freq->title = g_locale_from_utf8 (title, -1, 0, 0, 0);
if (!filter)
{
freq->filter = "All files\0*.*\0\0";
}
else
{
freq->filter = filter;
}
thread_start (freq->th, win32_thread2, freq);
fe_input_add (freq->th->pipe_fd[0], FIA_FD|FIA_READ, win32_read_thread, freq);
return;
}
#endif
if (flags & FRF_WRITE)
{
dialog = gtk_file_chooser_dialog_new (title, NULL,

View File

@@ -9,7 +9,6 @@
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <string.h>
#include <stdio.h>

View File

@@ -53,6 +53,7 @@
#include "../common/plugin.h"
#include "../common/modes.h"
#include "../common/url.h"
#include "../common/wdkutil.h"
#include "fe-gtk.h"
#include "banlist.h"
#include "gtkutil.h"
@@ -214,60 +215,10 @@ mg_create_tab_colors (void)
away_list = mg_attr_list_create (&colors[COL_AWAY], FALSE);
}
#ifdef WIN32
#define WINVER 0x0501 /* needed for vc6? */
#include <windows.h>
#include <gdk/gdkwin32.h>
/* Flash the taskbar button on Windows when there's a highlight event. */
static void
flash_window (GtkWidget *win)
{
FLASHWINFO fi;
static HMODULE user = NULL;
static BOOL (*flash) (PFLASHWINFO) = NULL;
if (!user)
{
user = GetModuleHandleA ("USER32");
if (!user)
return; /* this should never fail */
}
if (!flash)
{
flash = (void *)GetProcAddress (user, "FlashWindowEx");
if (!flash)
return; /* this fails on NT4.0 and Win95 */
}
fi.cbSize = sizeof (fi);
fi.hwnd = GDK_WINDOW_HWND (win->window);
fi.dwFlags = FLASHW_ALL | FLASHW_TIMERNOFG;
fi.uCount = 0;
fi.dwTimeout = 500;
flash (&fi);
/*FlashWindowEx (&fi);*/
}
#else
#ifdef USE_XLIB
#include <gdk/gdkx.h>
static void
set_window_urgency (GtkWidget *win, gboolean set)
{
XWMHints *hints;
hints = XGetWMHints(GDK_WINDOW_XDISPLAY(win->window), GDK_WINDOW_XWINDOW(win->window));
if (set)
hints->flags |= XUrgencyHint;
else
hints->flags &= ~XUrgencyHint;
XSetWMHints(GDK_WINDOW_XDISPLAY(win->window),
GDK_WINDOW_XWINDOW(win->window), hints);
XFree(hints);
gtk_window_set_urgency_hint (GTK_WINDOW (win), set);
}
static void
@@ -281,18 +232,14 @@ unflash_window (GtkWidget *win)
{
set_window_urgency (win, FALSE);
}
#endif
#endif
/* flash the taskbar button */
void
fe_flash_window (session *sess)
{
#if defined(WIN32) || defined(USE_XLIB)
if (fe_gui_info (sess, 0) != 1) /* only do it if not focused */
flash_window (sess->gui->window);
#endif
}
/* set a tab plain, red, light-red, or blue */
@@ -1334,7 +1281,7 @@ mg_open_quit_dialog (gboolean minimize_button)
gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area1),
GTK_BUTTONBOX_END);
if (minimize_button)
if (minimize_button && !xtray_mode ())
{
button = gtk_button_new_with_mnemonic (_("_Minimize to Tray"));
gtk_widget_show (button);
@@ -2972,11 +2919,7 @@ mg_tabwin_focus_cb (GtkWindow * win, GdkEventFocus *event, gpointer userdata)
gtk_xtext_check_marker_visibility (GTK_XTEXT (current_sess->gui->xtext));
plugin_emit_dummy_print (current_sess, "Focus Window");
}
#ifndef WIN32
#ifdef USE_XLIB
unflash_window (GTK_WIDGET (win));
#endif
#endif
return FALSE;
}
@@ -2987,11 +2930,7 @@ mg_topwin_focus_cb (GtkWindow * win, GdkEventFocus *event, session *sess)
if (!sess->server->server_session)
sess->server->server_session = sess;
gtk_xtext_check_marker_visibility(GTK_XTEXT (current_sess->gui->xtext));
#ifndef WIN32
#ifdef USE_XLIB
unflash_window (GTK_WIDGET (win));
#endif
#endif
plugin_emit_dummy_print (sess, "Focus Window");
return FALSE;
}

60
src/fe-gtk/makefile.mak Normal file
View File

@@ -0,0 +1,60 @@
include "..\makeinc.mak"
FEGTK_OBJECTS = \
about.obj \
ascii.obj \
banlist.obj \
chanlist.obj \
chanview.obj \
custom-list.obj \
dccgui.obj \
editlist.obj \
fe-gtk.obj \
fkeys.obj \
gtkutil.obj \
ignoregui.obj \
joind.obj \
maingui.obj \
menu.obj \
notifygui.obj \
palette.obj \
pixmaps.obj \
plugingui.obj \
plugin-tray.obj \
rawlog.obj \
search.obj \
servlistgui.obj \
setup.obj \
sexy-spell-entry.obj \
textgui.obj \
urlgrab.obj \
userlistgui.obj \
xtext.obj
!ifdef X64
MACHINE_FLAG = /MACHINE:X64
!else
MACHINE_FLAG = /MACHINE:X86
!endif
COMLIB = ..\common\xchatcommon.lib
PROG = xchat.exe
all: $(PROG)
.c.obj::
$(CC) $(CFLAGS) -I..\..\plugins $(GLIB) $(GTK) $<
$(PROG): $(FEGTK_OBJECTS) $(COMLIB) xchat-icon.obj
$(LINK) /out:$(PROG) /entry:mainCRTStartup $(LDFLAGS) $(LIBS) $(FEGTK_OBJECTS) $(COMLIB) xchat-icon.obj
xchat.res: xchat.rc ../../xchat.ico
rc /nologo /r xchat.rc
xchat-icon.obj: xchat.res
cvtres /nologo $(MACHINE_FLAG) /OUT:xchat-icon.obj xchat.res
clean:
@del *.obj
@del $(PROG)
@del xchat.res

View File

@@ -20,7 +20,6 @@
#include <stdlib.h>
#include <fcntl.h>
#include <string.h>
#include <unistd.h>
#ifdef WIN32
#include <windows.h>
@@ -1203,6 +1202,12 @@ menu_resetmarker (GtkWidget * wid, gpointer none)
gtk_xtext_reset_marker_pos (GTK_XTEXT (current_sess->gui->xtext));
}
static void
menu_copy_selection (GtkWidget * wid, gpointer none)
{
gtk_xtext_copy_selection (GTK_XTEXT (current_sess->gui->xtext));
}
static void
menu_flushbuffer (GtkWidget * wid, gpointer none)
{
@@ -1645,6 +1650,7 @@ static struct mymenu mymenu[] = {
{N_("URL Grabber..."), url_opengui, 0, M_MENUITEM, 0, 0, 1},
{0, 0, 0, M_SEP, 0, 0, 0},
{N_("Reset Marker Line"), menu_resetmarker, 0, M_MENUITEM, 0, 0, 1, GDK_m},
{N_("_Copy Selection"), menu_copy_selection, 0, M_MENUITEM, 0, 0, 1, GDK_C},
{N_("C_lear Text"), menu_flushbuffer, GTK_STOCK_CLEAR, M_MENUSTOCK, 0, 0, 1, GDK_l},
#define SEARCH_OFFSET 67
{N_("Search Text..."), menu_search, GTK_STOCK_FIND, M_MENUSTOCK, 0, 0, 1, GDK_f},
@@ -2188,7 +2194,9 @@ normalitem:
mymenu[i].key,
mymenu[i].key == GDK_F1 ? 0 :
mymenu[i].key == GDK_w ? close_mask :
GDK_CONTROL_MASK,
(g_ascii_isupper (mymenu[i].key)) ?
GDK_SHIFT_MASK | GDK_CONTROL_MASK :
GDK_CONTROL_MASK,
GTK_ACCEL_VISIBLE);
if (mymenu[i].callback)
g_signal_connect (G_OBJECT (item), "activate",

View File

@@ -18,7 +18,6 @@
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

View File

@@ -1,14 +1,14 @@
/* Copyright (C) 2006-2007 Peter Zelezny. */
#include <string.h>
#include <unistd.h>
#include "../common/xchat-plugin.h"
#include "../../plugins/xchat-plugin.h"
#include "../common/xchat.h"
#include "../common/xchatc.h"
#include "../common/inbound.h"
#include "../common/server.h"
#include "../common/fe.h"
#include "../common/util.h"
#include "../common/wdkutil.h"
#include "fe-gtk.h"
#include "pixmaps.h"
#include "maingui.h"
@@ -217,10 +217,10 @@ tray_stop_flash (void)
nets = tray_count_networks ();
chans = tray_count_channels ();
if (nets)
tray_set_tipf (_("XChat: Connected to %u networks and %u channels"),
tray_set_tipf (_("XChat-WDK: Connected to %u networks and %u channels"),
nets, chans);
else
tray_set_tipf ("XChat: %s", _("Not connected."));
tray_set_tipf ("XChat-WDK: %s", _("Not connected."));
}
if (custom_icon1)
@@ -370,7 +370,7 @@ tray_toggle_visibility (gboolean force_hide)
/* ph may have an invalid context now */
xchat_set_context (ph, xchat_find_context (ph, NULL, NULL));
win = (GtkWindow *)xchat_get_info (ph, "win_ptr");
win = xchat_get_info (ph, "gtkwin_ptr");
tray_stop_flash ();
tray_reset_counts ();
@@ -505,11 +505,12 @@ tray_menu_cb (GtkWidget *widget, guint button, guint time, gpointer userdata)
/*gtk_menu_set_screen (GTK_MENU (menu), gtk_widget_get_screen (widget));*/
if (tray_get_window_status () == WS_HIDDEN)
tray_make_item (menu, _("_Restore"), tray_menu_restore_cb, NULL);
tray_make_item (menu, _("_Restore Window"), tray_menu_restore_cb, NULL);
else
tray_make_item (menu, _("_Hide"), tray_menu_restore_cb, NULL);
tray_make_item (menu, _("_Hide Window"), tray_menu_restore_cb, NULL);
tray_make_item (menu, NULL, tray_menu_quit_cb, NULL);
#if 0
submenu = mg_submenu (menu, _("_Blink on"));
blink_item (&prefs.input_tray_chans, submenu, _("Channel Message"));
blink_item (&prefs.input_tray_priv, submenu, _("Private Message"));
@@ -526,6 +527,7 @@ tray_menu_cb (GtkWidget *widget, guint button, guint time, gpointer userdata)
gtk_widget_set_sensitive (item, FALSE);
tray_make_item (menu, NULL, tray_menu_quit_cb, NULL);
#endif
mg_create_icon_item (_("_Quit"), GTK_STOCK_QUIT, menu, tray_menu_quit_cb, NULL);
menu_add_plugin_items (menu, "\x5$TRAY", NULL);
@@ -551,8 +553,8 @@ tray_init (void)
sticon = gtk_status_icon_new_from_pixbuf (ICON_NORMAL);
if (!sticon)
return;
g_signal_connect (G_OBJECT (sticon), "popup-menu",
G_CALLBACK (tray_menu_cb), sticon);
/* g_signal_connect (G_OBJECT (sticon), "popup-menu",
G_CALLBACK (tray_menu_cb), sticon); */
g_signal_connect (G_OBJECT (sticon), "activate",
G_CALLBACK (tray_menu_restore_cb), NULL);
}
@@ -570,15 +572,15 @@ tray_hilight_cb (char *word[], void *userdata)
/* FIXME: hides any previous private messages */
tray_hilight_count++;
if (tray_hilight_count == 1)
tray_set_tipf (_("XChat: Highlighted message from: %s (%s)"),
tray_set_tipf (_("XChat-WDK: Highlighted message from: %s (%s)"),
word[1], xchat_get_info (ph, "channel"));
else
tray_set_tipf (_("XChat: %u highlighted messages, latest from: %s (%s)"),
tray_set_tipf (_("XChat-WDK: %u highlighted messages, latest from: %s (%s)"),
tray_hilight_count, word[1], xchat_get_info (ph, "channel"));
}
if (prefs.input_balloon_hilight)
tray_set_balloonf (word[2], _("XChat: Highlighted message from: %s (%s)"),
tray_set_balloonf (word[2], _("XChat-WDK: Highlighted message from: %s (%s)"),
word[1], xchat_get_info (ph, "channel"));
return XCHAT_EAT_NONE;
@@ -596,14 +598,14 @@ tray_message_cb (char *word[], void *userdata)
tray_pub_count++;
if (tray_pub_count == 1)
tray_set_tipf (_("XChat: New public message from: %s (%s)"),
tray_set_tipf (_("XChat-WDK: New public message from: %s (%s)"),
word[1], xchat_get_info (ph, "channel"));
else
tray_set_tipf (_("XChat: %u new public messages."), tray_pub_count);
tray_set_tipf (_("XChat-WDK: %u new public messages."), tray_pub_count);
}
if (prefs.input_balloon_chans)
tray_set_balloonf (word[2], _("XChat: New public message from: %s (%s)"),
tray_set_balloonf (word[2], _("XChat-WDK: New public message from: %s (%s)"),
word[1], xchat_get_info (ph, "channel"));
return XCHAT_EAT_NONE;
@@ -625,14 +627,14 @@ tray_priv (char *from, char *text)
tray_priv_count++;
if (tray_priv_count == 1)
tray_set_tipf (_("XChat: Private message from: %s (%s)"),
tray_set_tipf (_("XChat-WDK: Private message from: %s (%s)"),
from, network);
else
tray_set_tipf (_("XChat: %u private messages, latest from: %s (%s)"),
tray_set_tipf (_("XChat-WDK: %u private messages, latest from: %s (%s)"),
tray_priv_count, from, network);
if (prefs.input_balloon_priv)
tray_set_balloonf (text, _("XChat: Private message from: %s (%s)"),
tray_set_balloonf (text, _("XChat-WDK: Private message from: %s (%s)"),
from, network);
}
@@ -678,15 +680,15 @@ tray_dcc_cb (char *word[], void *userdata)
tray_file_count++;
if (tray_file_count == 1)
tray_set_tipf (_("XChat: File offer from: %s (%s)"),
tray_set_tipf (_("XChat-WDK: File offer from: %s (%s)"),
word[1], network);
else
tray_set_tipf (_("XChat: %u file offers, latest from: %s (%s)"),
tray_set_tipf (_("XChat-WDK: %u file offers, latest from: %s (%s)"),
tray_file_count, word[1], network);
}
if (prefs.input_balloon_priv)
tray_set_balloonf ("", _("XChat: File offer from: %s (%s)"),
tray_set_balloonf ("", _("XChat-WDK: File offer from: %s (%s)"),
word[1], network);
return XCHAT_EAT_NONE;
@@ -722,7 +724,7 @@ tray_apply_setup (void)
}
else
{
if (prefs.gui_tray)
if (prefs.gui_tray && !xtray_mode ())
tray_init ();
}
}
@@ -754,7 +756,7 @@ tray_plugin_init (xchat_plugin *plugin_handle, char **plugin_name,
xchat_hook_print (ph, "Focus Window", -1, tray_focus_cb, NULL);
if (prefs.gui_tray)
if (prefs.gui_tray && !xtray_mode ())
tray_init ();
return 1; /* return 1 for success */

View File

@@ -35,7 +35,7 @@
#include "../common/xchat.h"
#define PLUGIN_C
typedef struct session xchat_context;
#include "../common/xchat-plugin.h"
#include "../../plugins/xchat-plugin.h"
#include "../common/plugin.h"
#include "../common/util.h"
#include "../common/outbound.h"
@@ -147,7 +147,9 @@ void
plugingui_load (void)
{
gtkutil_file_req (_("Select a Plugin or Script to load"), plugingui_load_cb,
current_sess, NULL, FRF_ADDFOLDER);
current_sess,
"Plugins and Scripts\0*.dll;*.lua;*.pl;*.py;*.tcl\0"
"All files\0*.*\0\0", 0);
}
static void

View File

@@ -19,7 +19,6 @@
#include <stdio.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
#include "fe-gtk.h"

View File

@@ -153,7 +153,7 @@ search_open (session * sess)
_("_Find"));
g_object_set_data (G_OBJECT (wid), "e", entry);
g_signal_connect (G_OBJECT (win), "key-press-event", G_CALLBACK (search_key_cb), win);
g_signal_connect (G_OBJECT (win), "key_press_event", G_CALLBACK (search_key_cb), win);
gtk_widget_show (win);
}

View File

@@ -109,19 +109,32 @@ static const setting textbox_settings[] =
N_("Give each person on IRC a different color"),0,0},
{ST_TOGGLR, N_("Indent nick names"), P_OFFINTNL(indent_nicks),
N_("Make nick names right-justified"),0,0},
{ST_TOGGLE, N_("Transparent background"), P_OFFINTNL(transparent),0,0,0},
{ST_TOGGLR, N_("Show marker line"), P_OFFINTNL(show_marker),
/* {ST_TOGGLE, N_("Transparent background"), P_OFFINTNL(transparent),0,0,0}, */
{ST_TOGGLE, N_("Show marker line"), P_OFFINTNL(show_marker),
N_("Insert a red line after the last read text."),0,0},
{ST_HEADER, N_("Transparency Settings"), 0,0,0},
/* {ST_HEADER, N_("Transparency Settings"), 0,0,0},
{ST_HSCALE, N_("Red:"), P_OFFINTNL(tint_red),0,0,0},
{ST_HSCALE, N_("Green:"), P_OFFINTNL(tint_green),0,0,0},
{ST_HSCALE, N_("Blue:"), P_OFFINTNL(tint_blue),0,0,0},
{ST_HSCALE, N_("Blue:"), P_OFFINTNL(tint_blue),0,0,0}, */
{ST_HEADER, N_("Time Stamps"),0,0,0},
{ST_TOGGLE, N_("Enable time stamps"), P_OFFINTNL(timestamp),0,0,2},
{ST_ENTRY, N_("Time stamp format:"), P_OFFSETNL(stamp_format),
N_("See strftime manpage for details."),0,sizeof prefs.stamp_format},
{ST_HEADER, N_("Auto-Copy Behavior"),0,0,0},
{ST_TOGGLE, N_("Automatically copy selected text"), P_OFFINTNL(autocopy_text),
N_("Copy selected text to clipboard when left mouse button is released. "
"Otherwise, CONTROL-SHIFT-C will copy the "
"selected text to the clipboard."), 0, 0},
{ST_TOGGLE, N_("Automatically include time stamps"), P_OFFINTNL(autocopy_stamp),
N_("Automatically include time stamps in copied lines of text. Otherwise, "
"include time stamps if the SHIFT key is held down while selecting."), 0, 0},
{ST_TOGGLE, N_("Automatically include color information"), P_OFFINTNL(autocopy_color),
N_("Automatically include color information in copied lines of text. "
"Otherwise, include color information if the CONTROL key is held down "
"while selecting."), 0, 0},
{ST_END, 0, 0, 0, 0, 0}
};
@@ -348,6 +361,24 @@ static const setting alert_settings[] =
{ST_END, 0, 0, 0, 0, 0}
};
static const setting alert_settings_xtray[] =
{
{ST_HEADER, N_("Alerts"),0,0,0},
{ST_ALERTHEAD},
{ST_3OGGLE, N_("Blink task bar on:"), 0, 0, (void *)taskbarlist, 0},
{ST_3OGGLE, N_("Make a beep sound on:"), 0, 0, (void *)beeplist, 0},
{ST_HEADER, N_("Highlighted Messages"),0,0,0},
{ST_LABEL, N_("Highlighted messages are ones where your nickname is mentioned, but also:"), 0, 0, 0, 1},
{ST_ENTRY, N_("Extra words to highlight:"), P_OFFSETNL(irc_extra_hilight), 0, 0, sizeof prefs.irc_extra_hilight},
{ST_ENTRY, N_("Nick names not to highlight:"), P_OFFSETNL(irc_no_hilight), 0, 0, sizeof prefs.irc_no_hilight},
{ST_ENTRY, N_("Nick names to always highlight:"), P_OFFSETNL(irc_nick_hilight), 0, 0, sizeof prefs.irc_nick_hilight},
{ST_LABEL, N_("Separate multiple words with commas.\nWildcards are accepted.")},
{ST_END, 0, 0, 0, 0, 0}
};
static const setting general_settings[] =
{
{ST_HEADER, N_("Default Messages"),0,0,0},
@@ -363,7 +394,6 @@ static const setting general_settings[] =
{ST_END, 0, 0, 0, 0, 0}
};
#if 0
static const setting advanced_settings[] =
{
{ST_HEADER, N_("Advanced Settings"),0,0,0},
@@ -378,7 +408,6 @@ static const setting advanced_settings[] =
{ST_END, 0, 0, 0, 0, 0}
};
#endif
static const setting logging_settings[] =
{
@@ -1711,7 +1740,7 @@ static const char *const cata[] =
N_("General"),
N_("Logging"),
N_("Sound"),
/* N_("Advanced"),*/
N_("Advanced"),
NULL,
N_("Network"),
N_("Network setup"),
@@ -1732,10 +1761,19 @@ setup_create_pages (GtkWidget *box)
setup_add_page (cata[3], book, setup_create_page (userlist_settings));
setup_add_page (cata[4], book, setup_create_page (tabs_settings));
setup_add_page (cata[5], book, setup_create_color_page ());
setup_add_page (cata[8], book, setup_create_page (alert_settings));
if (xtray_mode ())
{
setup_add_page (cata[8], book, setup_create_page (alert_settings_xtray));
} else
{
setup_add_page (cata[8], book, setup_create_page (alert_settings));
}
setup_add_page (cata[9], book, setup_create_page (general_settings));
setup_add_page (cata[10], book, setup_create_page (logging_settings));
setup_add_page (cata[11], book, setup_create_sound_page ());
setup_add_page (cata[12], book, setup_create_page (advanced_settings));
setup_add_page (cata[14], book, setup_create_page (network_settings));
setup_add_page (cata[15], book, setup_create_page (filexfer_settings));

View File

@@ -31,6 +31,8 @@
/*#include "gtkspell-iso-codes.h"
#include "sexy-marshal.h"*/
#include "typedef.h"
/*
* Bunch of poop to make enchant into a runtime dependency rather than a
* compile-time dependency. This makes it so I don't have to hear the
@@ -134,12 +136,10 @@ initialize_enchant ()
GModule *enchant;
gpointer funcptr;
enchant = g_module_open("libenchant", 0);
enchant = g_module_open("libenchant.dll", 0);
if (enchant == NULL)
{
enchant = g_module_open("libenchant.so.1", 0);
if (enchant == NULL)
return;
return;
}
have_enchant = TRUE;

11
src/fe-gtk/typedef.h Normal file
View File

@@ -0,0 +1,11 @@
#ifndef SSIZE_T_DEFINED
#ifdef ssize_t
#undef ssize_t
#endif
#ifdef _WIN64
typedef __int64 ssize_t;
#else
typedef _W64 int ssize_t;
#endif
#define SSIZE_T_DEFINED
#endif

22
src/fe-gtk/xchat.rc Normal file
View File

@@ -0,0 +1,22 @@
#include <winver.h>
#include "../../config.h"
XC_ICON ICON "../../xchat.ico"
VS_VERSION_INFO VERSIONINFO
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904B0"
BEGIN
VALUE "FileDescription", "XChat-WDK IRC Client"
VALUE "ProductName", "XChat-WDK"
VALUE "ProductVersion", PACKAGE_VERSION
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x0409, 0x04B0
END
END

View File

@@ -42,7 +42,6 @@
#include <ctype.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>
#include <gtk/gtkmain.h>
#include <gtk/gtksignal.h>
#include <gtk/gtkselection.h>
@@ -67,6 +66,8 @@
#endif
#include "xtext.h"
#include "../common/xchat.h"
#include "../common/xchatc.h"
#define charlen(str) g_utf8_skip[*(guchar *)(str)]
@@ -1941,7 +1942,7 @@ gtk_xtext_check_mark_stamp (GtkXText *xtext, GdkModifierType mask)
{
gboolean redraw = FALSE;
if ((mask & GDK_SHIFT_MASK))
if (mask & GDK_SHIFT_MASK || prefs.autocopy_stamp)
{
if (!xtext->mark_stamp)
{
@@ -2106,7 +2107,16 @@ gtk_xtext_set_clip_owner (GtkWidget * xtext, GdkEventButton * event)
free (str);
}
gtk_selection_owner_set (xtext, GDK_SELECTION_PRIMARY, event->time);
if (event)
{
gtk_selection_owner_set (xtext, GDK_SELECTION_PRIMARY, event->time);
}
}
void
gtk_xtext_copy_selection (GtkXText *xtext)
{
gtk_xtext_set_clip_owner (xtext, NULL);
}
static void
@@ -2182,9 +2192,12 @@ gtk_xtext_button_release (GtkWidget * widget, GdkEventButton * event)
if (xtext->buffer->last_ent_start)
{
xtext->color_paste = FALSE;
if (event->state & GDK_CONTROL_MASK)
if (event->state & GDK_CONTROL_MASK || prefs.autocopy_color)
xtext->color_paste = TRUE;
gtk_xtext_set_clip_owner (GTK_WIDGET (xtext), event);
if (prefs.autocopy_text)
{
gtk_xtext_set_clip_owner (GTK_WIDGET (xtext), event);
}
}
if (xtext->select_start_x == event->x &&
@@ -2249,7 +2262,10 @@ gtk_xtext_button_press (GtkWidget * widget, GdkEventButton * event)
ent->mark_end = offset + len;
gtk_xtext_selection_render (xtext, ent, offset, ent, offset + len);
xtext->word_or_line_select = TRUE;
gtk_xtext_set_clip_owner (GTK_WIDGET (xtext), event);
if (prefs.autocopy_text)
{
gtk_xtext_set_clip_owner (GTK_WIDGET (xtext), event);
}
}
return FALSE;
@@ -2265,7 +2281,10 @@ gtk_xtext_button_press (GtkWidget * widget, GdkEventButton * event)
ent->mark_end = ent->str_len;
gtk_xtext_selection_render (xtext, ent, 0, ent, ent->str_len);
xtext->word_or_line_select = TRUE;
gtk_xtext_set_clip_owner (GTK_WIDGET (xtext), event);
if (prefs.autocopy_text)
{
gtk_xtext_set_clip_owner (GTK_WIDGET (xtext), event);
}
}
return FALSE;
@@ -3836,7 +3855,7 @@ gtk_xtext_load_trans (GtkXText * xtext)
PaintDesktop (hdc);
ReleaseDC (hwnd, hdc);
gdk_window_get_size (GTK_WIDGET (xtext)->window, &width, &height);
gdk_drawable_get_size (GTK_WIDGET (xtext)->window, &width, &height);
img = gdk_image_get (GTK_WIDGET (xtext)->window, 0, 0, width+128, height);
xtext->pixmap = win32_tint (xtext, img, img->width, img->height);

View File

@@ -270,6 +270,7 @@ void gtk_xtext_set_wordwrap (GtkXText *xtext, gboolean word_wrap);
xtext_buffer *gtk_xtext_buffer_new (GtkXText *xtext);
void gtk_xtext_buffer_free (xtext_buffer *buf);
void gtk_xtext_buffer_show (GtkXText *xtext, xtext_buffer *buf, int render);
void gtk_xtext_copy_selection (GtkXText *xtext);
GType gtk_xtext_get_type (void);
#endif