From 304136efae8e23f7993d375c503570997f5dce83 Mon Sep 17 00:00:00 2001 From: "berkeviktor@aol.com" Date: Sat, 8 Jan 2011 09:56:33 +0100 Subject: [PATCH] improved command-line argument handling --- xchat-wdk.patch | 106 ++++++++++++++++++++++++++++++++++++------------ 1 file changed, 81 insertions(+), 25 deletions(-) diff --git a/xchat-wdk.patch b/xchat-wdk.patch index cb7365eb..a3d3f4fb 100644 --- a/xchat-wdk.patch +++ b/xchat-wdk.patch @@ -965,7 +965,7 @@ diff -ruN --strip-trailing-cr xchat-wdk.orig/src/fe-gtk/editlist.c xchat-wdk/src #include diff -ruN --strip-trailing-cr xchat-wdk.orig/src/fe-gtk/fe-gtk.c xchat-wdk/src/fe-gtk/fe-gtk.c --- xchat-wdk.orig/src/fe-gtk/fe-gtk.c 2010-08-14 03:46:21 +0200 -+++ xchat-wdk/src/fe-gtk/fe-gtk.c 2010-12-31 05:23:47 +0100 ++++ xchat-wdk/src/fe-gtk/fe-gtk.c 2011-01-08 09:54:34 +0100 @@ -19,7 +19,6 @@ #include #include @@ -991,41 +991,94 @@ diff -ruN --strip-trailing-cr xchat-wdk.orig/src/fe-gtk/fe-gtk.c xchat-wdk/src/f #include "gtkutil.h" #include "maingui.h" #include "pixmaps.h" -@@ -141,6 +143,9 @@ +@@ -136,11 +138,26 @@ + {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[512]; ++ char *buffer[2048]; +#endif #ifdef ENABLE_NLS bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR); -@@ -156,7 +161,16 @@ +@@ -149,22 +166,67 @@ + #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) -+ { -+#ifdef WIN32 -+ if (snprintf (buffer, 512, "%s\n", error->message)) -+ { -+ MessageBox (NULL, buffer, "Error", MB_OK); -+ } -+#else printf ("%s\n", error->message); -+#endif -+ } return 1; } ++#endif -@@ -164,7 +178,14 @@ + g_option_context_free (context); if (arg_show_version) { +#ifdef WIN32 -+ if (snprintf (buffer, 512, DISPLAY_NAME" "PACKAGE_VERSION"\n")) ++ if (snprintf (buffer, 2048, DISPLAY_NAME" "PACKAGE_VERSION"\n")) + { -+ MessageBox (NULL, buffer, "Version Information", MB_OK); ++ gtk_init (&argc, &argv); ++ create_msg_dialog ("Version Information", buffer); + } +#else printf (PACKAGE_TARNAME" "PACKAGE_VERSION"\n"); @@ -1033,32 +1086,35 @@ diff -ruN --strip-trailing-cr xchat-wdk.orig/src/fe-gtk/fe-gtk.c xchat-wdk/src/f return 0; } -@@ -177,7 +198,16 @@ +@@ -177,7 +239,18 @@ if (sl) { *sl = 0; - printf ("%s\\plugins\n", exe); -+ if (snprintf (buffer, 512, "%s\\plugins\n", exe)) ++ if (snprintf (buffer, 2048, "%s\\plugins\n", exe)) + { -+ MessageBox (NULL, buffer, "Plugin Auto-load Directory", MB_OK); ++ gtk_init (&argc, &argv); ++ create_msg_dialog ("Plugin Auto-load Directory", buffer); + } + } else + { -+ if (snprintf (buffer, 512, ".\\plugins\n")) ++ if (snprintf (buffer, 2048, ".\\plugins\n")) + { -+ MessageBox (NULL, buffer, "Plugin Auto-load Directory", MB_OK); ++ gtk_init (&argc, &argv); ++ create_msg_dialog ("Plugin Auto-load Directory", buffer); + } } #else printf ("%s\n", XCHATLIBDIR"/plugins"); -@@ -187,7 +217,14 @@ +@@ -187,7 +260,15 @@ if (arg_show_config) { +#ifdef WIN32 -+ if (snprintf (buffer, 512, "%s\n", get_xdir_fs ())) ++ if (snprintf (buffer, 2048, "%s\n", get_xdir_fs ())) + { -+ MessageBox (NULL, buffer, "User Config Directory", MB_OK); ++ gtk_init (&argc, &argv); ++ create_msg_dialog ("User Config Directory", buffer); + } +#else printf ("%s\n", get_xdir_fs ()); @@ -1066,7 +1122,7 @@ diff -ruN --strip-trailing-cr xchat-wdk.orig/src/fe-gtk/fe-gtk.c xchat-wdk/src/f return 0; } -@@ -330,7 +367,7 @@ +@@ -330,7 +411,7 @@ { session *sess;