summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorberkeviktor@aol.com <berkeviktor@aol.com>2011-01-08 09:56:33 +0100
committerberkeviktor@aol.com <berkeviktor@aol.com>2011-01-08 09:56:33 +0100
commit304136efae8e23f7993d375c503570997f5dce83 (patch)
tree95b7860e97132b288ce254a867b9b5bb36277b53
parenta98b333a4d4987b5209977e52d0cc2b29d77a34e (diff)
improved command-line argument handling
-rw-r--r--xchat-wdk.patch104
1 files changed, 80 insertions, 24 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 <sys/stat.h>
 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 <stdio.h>
  #include <string.h>
@@ -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 @@
- 	if (error)
- 	{
- 		if (error->message)
-+		{
+@@ -149,22 +166,67 @@
+ #endif
+ 
+ 	context = g_option_context_new (NULL);
 +#ifdef WIN32
-+			if (snprintf (buffer, 512, "%s\n", error->message))
++	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)
 +			{
-+				MessageBox (NULL, buffer, "Error", MB_OK);
++				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);
-+#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;