Subject: [PATCH] Add GTK+ 2.0 support to FvwmGtk

From: Eric Gillespie <[email-masked]>
Date: Thu, 26 Sep 2002 16:57:13 -0500

This patch adds support for GTK+ 2.0 to FvwmGtk in addition to
1.2, not replacing it.  If you have both versions installed, it
defaults to 2.0 unless you pass --without-gtk2 to configure.
When using GTK+ 2.0, Imlib is not necessary and thus not used.
As for GNOME, that could be used, but i don't care to install it.
If someone wants to add GNOME 2.0 support, that can easily be
done separately.

I have made one change in the 1.2 code.  Previously, FvwmGtk
menus handled accelerators the same way Fvwm built-in menus do.
That is, '&Foo' would cause the F to be underlined and to become
the shortcut key.  This is inconsistent with the way GTK+
normally handles accelerators, using an underscore character
instead of ampersand (i.e. '_Foo').  I changed the 1.2 code to
use underscores instead of ampersands; the 2.0 code is handling
accelerators automatically, so i didn't have to do anything
special with it.

Now, i have a question.  What on earth is the r_label parameter
to the FvwmGtk menu items supposed to be?  I didn't bother to
handle this in the 2.0 code because i don't know what it is for.
Supporting it would take a bit more work, since this is not
normally a thing you do with menu items; i would have to use
weird custom code (this is, as a matter of fact, what FvwmGtk
currently has to do to support this).  I'm not sure this is a
good idea.  Suggestions?

-- 
Eric Gillespie, Jr. <*> [email-masked]

Build a fire for a man, and he'll be warm for a day.  Set a man on
fire, and he'll be warm for the rest of his life. -Terry Pratchett
Index: configure.in
===================================================================
RCS file: /home/cvs/fvwm/fvwm/configure.in,v
retrieving revision 1.245
diff -a -u -r1.245 configure.in
--- configure.in	2002/09/18 13:55:17	1.245
+++ configure.in	2002/09/26 20:44:40
@@ -874,27 +874,50 @@

 dnl ********* GTK, IMLIB, GNOME
-dnl Check the availability of gtk
-AM_PATH_GTK(1.1.0,[FVWMGTK=FvwmGtk AC_SUBST(FVWMGTK)],)
-if test x"$no_gtk" = x; then
-  with_gtk=yes
-  problem_gtk=""
-else
-  with_gtk=no
-  problem_gtk=": Failed to detect GTK, see config.log"
-fi
+with_gtk=no
 
-dnl Check the availability of gdk-imlib
-AM_PATH_GDK_IMLIB(1.8.0, AC_DEFINE(GDK_IMLIB),)
-if test x"$no_imlib" = x; then
-  with_gdkimlib=yes
-  problem_gdkimlib=""
-else
-  with_gdkimlib=no
-  problem_gdkimlib=": Failed on gdk-imlib, see config.log"
+AC_ARG_WITH(gtk2, AC_HELP_STRING([--with-gtk2], [use GTK+ 2.0]),
+            [try_gtk2=${withval}], [try_gtk2=yes])
+
+dnl First look for GTK+ 2.0, unless --without-gtk2.
+if test "x${try_gtk2}" = 'xyes'; then
+    AC_PATH_TOOL(PKG_CONFIG, pkg-config, no)
+    if test "x${PKG_CONFIG}" != 'xno'; then
+        AC_MSG_CHECKING([for GTK+ 2.0])
+        GTK_CFLAGS=`${PKG_CONFIG} --cflags gtk+-x11-2.0`
+        if test $? -eq 0; then
+            AC_MSG_RESULT(yes)
+            with_gtk='yes (version 2.0)'
+            GTK_LIBS=`${PKG_CONFIG} --libs gtk+-x11-2.0`
+            FVWMGTK=FvwmGtk
+            AC_SUBST(FVWMGTK)
+        fi
+    fi
 fi
+
+dnl Failing that, look for GTK+ 1.2.
+if test "x${with_gtk}" = 'xno'; then
+    AM_PATH_GTK(1.1.0,[FVWMGTK=FvwmGtk AC_SUBST(FVWMGTK)],)
+    if test x"$no_gtk" = x; then
+        with_gtk='yes (version 1.2)'
+        problem_gtk=""
+    else
+        with_gtk=no
+        problem_gtk=": Failed to detect GTK, see config.log"
+    fi
+
+    dnl Check the availability of gdk-imlib
+    AM_PATH_GDK_IMLIB(1.8.0, AC_DEFINE(GDK_IMLIB),)
+    if test x"$no_imlib" = x; then
+        with_gdkimlib=yes
+        problem_gdkimlib=""
+    else
+        with_gdkimlib=no
+        problem_gdkimlib=": Failed on gdk-imlib, see config.log"
+    fi
 
-GNOME_INIT_HOOK
+    GNOME_INIT_HOOK
+fi
 
 dnl Unfortunately we have 2 gnome supports: WM hints and gnome libs.
 dnl The $with_gnomehints below refers to the first, not GNOME_INIT_HOOK.
@@ -1053,7 +1076,7 @@
 test x"$FVWM_PERLLIB" = x && my_plldir="(Not installed) $my_plldir"
 
 case "$with_gtk" in
-  yes) fvwmgtk_msg="
+  *1.2*) fvwmgtk_msg="
   With GDK image support in FvwmGtk?  $with_gdkimlib$problem_gdkimlib
   With GNOME libs support in FvwmGtk? $with_gnomelibs$problem_gnomelibs" ;;
   no) fvwmgtk_msg="" ;;
Index: modules/FvwmGtk/FvwmGtk.1
===================================================================
RCS file: /home/cvs/fvwm/fvwm/modules/FvwmGtk/FvwmGtk.1,v
retrieving revision 1.20
diff -a -u -r1.20 FvwmGtk.1
--- modules/FvwmGtk/FvwmGtk.1	2002/05/19 02:20:47	1.20
+++ modules/FvwmGtk/FvwmGtk.1	2002/09/26 20:44:41
@@ -69,8 +69,8 @@
 
 .SH MENUS
 The following commands define menus. For all arguments named "label"
-in the following menu commands, FvwmGtk looks for embedded ampersands
-in the same way fvwm does for its menus.
+in the following menu commands, FvwmGtk looks for embedded underscores
+in the same way fvwm looks for ampersands in the built-in menus.
 
 .IP "*FvwmGtk: Menu \fBname\fP"
 Instructs \fBFvwmGtk\fP to append subsequent items to the menu named
@@ -83,7 +83,7 @@
 is given, it should be the name of an xpm file in the ImagePath. The
 icon will appear to the left of the text. If FvwmGtk has been compiled
 with imlib support, icon can of any image format imlib can read. The label
-can contain an ampersand to mark the following character as an accelerator to
+can contain an underscore to mark the following character as an accelerator to
 be underlined. Underlined accelerators work in the same way as they do in fvwm
 native menus. If r_label is given, it will be right-justified.
 
@@ -92,7 +92,7 @@
 text that will appear in the item, the second argument will be sent to
 fvwm when the item is activated. If the optional argument is given, it
 should be the name of an xpm file in the ImagePath. The icon will appear
-to the left of the text. The label can contain an ampersand
+to the left of the text. The label can contain an underscore
 to mark the following character as an accelerator to be underlined.
 Underlined accelerators work in the same way as they do in fvwm native menus.
 If r_label is given, it will be right-justified.
@@ -103,7 +103,7 @@
 the sub menu that will be opened when the item is selected. If the sub menu
 doesn't exist yet, it will be created. If the optional argument is given,
 it should be the name of an xpm file in the ImagePath. The icon will
-appear to the left of the text. The label can contain an ampersand
+appear to the left of the text. The label can contain an underscore
 to mark the following character as an accelerator to be underlined.
 Underlined accelerators work in the same way as they do in fvwm native menus.
 
Index: modules/FvwmGtk/FvwmGtk.c
===================================================================
RCS file: /home/cvs/fvwm/fvwm/modules/FvwmGtk/FvwmGtk.c,v
retrieving revision 1.35
diff -a -u -r1.35 FvwmGtk.c
--- modules/FvwmGtk/FvwmGtk.c	2002/09/20 20:43:14	1.35
+++ modules/FvwmGtk/FvwmGtk.c	2002/09/26 20:44:41
@@ -244,14 +244,24 @@
 
 void widget_not_found(char *name)
 {
-	GtkWidget *dialog, *box, *item;
+	GtkWidget *dialog;
+
+#if !GTK_CHECK_VERSION(2, 0, 0)
+	GtkWidget *box, *item;
 	char buf[200];
+#endif
 
 	SendText(fvwm_fd, "Beep", 0);
+#if GTK_CHECK_VERSION(2, 0, 0)
+	dialog = gtk_message_dialog_new(NULL, 0,
+					GTK_MESSAGE_ERROR, GTK_BUTTONS_OK,
+					"No such menu or dialog: %s",
+					name);
+	g_signal_connect_swapped(GTK_OBJECT(dialog), "response",
+				 G_CALLBACK(gtk_widget_destroy),
+				 GTK_OBJECT(dialog));
+#else
 	dialog = gtk_window_new(GTK_WINDOW_DIALOG);
-	gtk_window_set_title(GTK_WINDOW(dialog), "Error");
-	gtk_window_set_wmclass(GTK_WINDOW(dialog), "Error", "FvwmGtk");
-
 	box = gtk_vbox_new(FALSE, 10);
 	gtk_container_add(GTK_CONTAINER(dialog), box);
 	gtk_container_border_width(GTK_CONTAINER(dialog), 30);
@@ -264,6 +274,9 @@
 		GTK_OBJECT(item), "clicked",
 		GTK_SIGNAL_FUNC(gtk_widget_destroy), GTK_OBJECT(dialog));
 	gtk_widget_show_all(box);
+#endif
+	gtk_window_set_title(GTK_WINDOW(dialog), "Error");
+	gtk_window_set_wmclass(GTK_WINDOW(dialog), "Error", "FvwmGtk");
 	gtk_widget_show(dialog);
 }
 
Index: modules/FvwmGtk/dialog.c
===================================================================
RCS file: /home/cvs/fvwm/fvwm/modules/FvwmGtk/dialog.c,v
retrieving revision 1.6
diff -a -u -r1.6 dialog.c
--- modules/FvwmGtk/dialog.c	2002/06/26 13:42:48	1.6
+++ modules/FvwmGtk/dialog.c	2002/09/26 20:44:41
@@ -27,6 +27,8 @@
 
 #include <glib.h>
 #include <gtk/gtk.h>
+#include <gdk/gdk.h>
+#include <gdk/gdkx.h>
 #include <gdk/gdkprivate.h>
 
 #include "libs/fvwmlib.h"
@@ -72,9 +74,15 @@
     }
   else if (GTK_IS_SCALE (w))
     {
+#if GTK_CHECK_VERSION(2, 0, 0)
       g_snprintf (buf, sizeof (buf), "%.*f",
+		  GTK_RANGE (w)->round_digits,
+		  gtk_range_get_adjustment (GTK_RANGE (w))->value);
+#else
+      g_snprintf (buf, sizeof (buf), "%.*f",
 		  GTK_RANGE (w)->digits,
 		  gtk_range_get_adjustment (GTK_RANGE (w))->value);
+#endif
       return buf;
     }
   else if (GTK_IS_COLOR_SELECTION (w))
@@ -105,7 +113,7 @@
   else if (GTK_IS_ENTRY (w))
     {
       /* this also catches spin buttons */
-      return gtk_entry_get_text (GTK_ENTRY (w));
+      return (gpointer) gtk_entry_get_text (GTK_ENTRY (w));
     }
   else if (GTK_IS_TOGGLE_BUTTON (w))
     {
@@ -249,7 +257,7 @@
 open_dialog (int argc, char **argv)
 {
   GtkWidget *item;
-  char *name;
+  const char *name;
 
   g_return_if_fail (argc >= 2);
 
@@ -260,10 +268,16 @@
     }
   else
     {
+#if GTK_CHECK_VERSION(2, 0, 0)
+      item = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+      gtk_window_set_type_hint (GTK_WINDOW (item),
+                                GDK_WINDOW_TYPE_HINT_DIALOG);
+#else
       item = gtk_window_new (GTK_WINDOW_DIALOG);
+#endif
       gtk_widget_set_name (item, argv[0]);
       name = gtk_widget_get_name (item);
-      g_hash_table_insert (widgets, name, item);
+      g_hash_table_insert (widgets, (char *)name, item);
       gtk_object_ref (GTK_OBJECT (item));
 
       gtk_window_set_title (GTK_WINDOW (item), argv[1]);
@@ -522,9 +536,19 @@
   if (argc >= 2)
     {
       XColor color;
+      Display *display;
+      int screen;
+
+#if GTK_CHECK_VERSION(2, 0, 0)
+      display = gdk_x11_get_default_xdisplay ();
+      screen = gdk_x11_get_default_screen ();
+#else
+      display = gdk_display;
+      screen = gdk_screen;
+#endif
       /* FIXME: get meaningful colormap */
-      if (XParseColor (gdk_display,
-		       DefaultColormap (gdk_display, gdk_screen),
+      if (XParseColor (display,
+		       DefaultColormap (display, screen),
 		       argv[1],
 		       &color))
 	{
Index: modules/FvwmGtk/gtkpixmapmenuitem.c
===================================================================
RCS file: /home/cvs/fvwm/fvwm/modules/FvwmGtk/gtkpixmapmenuitem.c,v
retrieving revision 1.4
diff -a -u -r1.4 gtkpixmapmenuitem.c
--- modules/FvwmGtk/gtkpixmapmenuitem.c	2002/06/26 13:42:48	1.4
+++ modules/FvwmGtk/gtkpixmapmenuitem.c	2002/09/26 20:44:41
@@ -15,6 +15,10 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+#include <gtk/gtk.h>
+
+#if !GTK_CHECK_VERSION(2, 0, 0)
+
 #include "gtkpixmapmenuitem.h"
 #include <gtk/gtkaccellabel.h>
 #include <gtk/gtksignal.h>
@@ -285,3 +289,5 @@
   if (widget_was_visible)
     gtk_widget_queue_resize (GTK_WIDGET (container));
 }
+
+#endif
Index: modules/FvwmGtk/menu.c
===================================================================
RCS file: /home/cvs/fvwm/fvwm/modules/FvwmGtk/menu.c,v
retrieving revision 1.12
diff -a -u -r1.12 menu.c
--- modules/FvwmGtk/menu.c	2002/06/26 13:42:48	1.12
+++ modules/FvwmGtk/menu.c	2002/09/26 20:44:41
@@ -29,7 +29,9 @@
 #include <gtk/gtk.h>
 #include <gdk/gdk.h>
 #include <gdk/gdkprivate.h>
+#if !GTK_CHECK_VERSION(2, 0, 0)
 #include "gtkpixmapmenuitem.h"
+#endif
 #ifdef GDK_IMLIB
 #include <gdk_imlib.h>
 #endif
@@ -65,7 +67,7 @@
 find_or_create_menu (char *name)
 {
   GtkWidget *menu;
-  char *name_copy;
+  const char *name_copy;
 
   menu = g_hash_table_lookup (widgets, name);
 
@@ -78,7 +80,7 @@
       name_copy = gtk_widget_get_name (menu);
       gtk_object_ref (GTK_OBJECT (menu));
       gtk_object_sink (GTK_OBJECT (menu));
-      g_hash_table_insert (widgets, name_copy, menu);
+      g_hash_table_insert (widgets, (char *)name_copy, menu);
       gtk_object_ref (GTK_OBJECT (menu));
     }
   if (GTK_IS_MENU (menu))
@@ -93,12 +95,13 @@
 }

+#if !GTK_CHECK_VERSION(2, 0, 0)
 /* from gtkcauldron.c */
 /* result must be g_free'd */
 static gchar *
-convert_label_with_ampersand (const gchar * _label,
-			      gint * accelerator_key,
-			      gint * underbar_pos)
+convert_label_with_underscore (const gchar * _label,
+			       gint * accelerator_key,
+			       gint * underbar_pos)
 {
     gchar *p;
     gchar *label = g_strdup (_label);
@@ -107,9 +110,9 @@
 	    break;
 	if (!p[1])
 	    break;
-	if (*p == '&') {
+	if (*p == '_') {
 	    memmove (p, p + 1, strlen (p));
-	    if (*p == '&')      /* use && for an actual & */
+	    if (*p == '_')      /* use __ for an actual _ */
 		continue;
 	    *underbar_pos = (unsigned long) p - (unsigned long) label;
 	    *accelerator_key = *p;
@@ -151,30 +154,47 @@
 
 	return ag;
 }
+#endif

 GtkWidget *
 menu_item_new_with_pixmap_and_label (char *file, char *l_label, char *r_label)
 {
-  GtkWidget *item, *label, *icon, *box;
-  GdkPixmap *pixmap = NULL;
-  GdkBitmap *mask = NULL;
+  GtkWidget *item;
   char *path;
+#if GTK_CHECK_VERSION(2, 0, 0)
+  GtkWidget *image;
+#else
+  GtkWidget *label, *box;
   gint accel_key = 0, underbar_pos = -1;
   gchar *pattern, *converted_label;
+  GtkWidget *icon;
+  GdkPixmap *pixmap = NULL;
+  GdkBitmap *mask = NULL;
 #ifdef GDK_IMLIB
   GdkImlibImage *im;
   int w, h;
 #endif
+#endif
 
   path = PictureFindImageFile (file ? file : "", image_path, R_OK);
 
   if (path == NULL)
     {
+#if GTK_CHECK_VERSION(2, 0, 0)
+      item = gtk_menu_item_new_with_mnemonic (l_label);
+#else
       item = gtk_menu_item_new ();
+#endif
     }
   else
     {
+#if GTK_CHECK_VERSION(2, 0, 0)
+      image = gtk_image_new_from_file (path);
+      gtk_widget_show(image);
+      item = gtk_image_menu_item_new_with_mnemonic (l_label);
+      gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), image);
+#else
 #ifdef GDK_IMLIB
       im = gdk_imlib_load_image (path);
       if (im)
@@ -207,12 +227,14 @@
 	{
 	  item = gtk_menu_item_new ();
 	}
+#endif
 
       free (path);
     }
 
-  converted_label = convert_label_with_ampersand (l_label, &accel_key,
-						  &underbar_pos);
+#if !GTK_CHECK_VERSION(2, 0, 0)
+  converted_label = convert_label_with_underscore (l_label, &accel_key,
+						   &underbar_pos);
   label = gtk_label_new (converted_label);
   if (underbar_pos != -1)
     {
@@ -243,6 +265,7 @@
       gtk_container_add (GTK_CONTAINER (item), label);
       gtk_widget_show (label);
     }
+#endif
 
   return item;
 }

---

From: Mikhael Goikhman <[email-masked]>
Date: Fri, 27 Sep 2002 01:40:06 +0000

> If someone wants to add GNOME 2.0 support, that can easily be

I may apply your patch with some exceptions.

Your changes in configure.in are not very good, we should check for a
correctness of the gtk headers and libs found, a user may have pkg-config,
but not the gtk libs. with_gtk should be only "yes" or "no", since it is
used in other places. gnome support should not be special with gtk-2.0,
i.e. if gnome detection still works with gnome-2.0 why to disable it,
with_gdkimlib should be set to "no".

> accelerators automatically, so i didn't have to do anything

It would be possible to still keep '&' and convert it to "_" with
gtk-2.0.0. But I don't care too much here.

> currently has to do to support this).  I'm not sure this is a

In fvwm menus, if you use real tab in the label there are (by default) 3
columns, the first 2 are left justified and the third is right justified
(good for accelerator keys for example). See MenuStyle ItemFormat in
fvwm(1) to learn more. In FvwmGtk menus, only 2 columns may be defined.
Or maybe these are not columns, but right justified texts. I think it
is good to have this functionality. I see this in gtk+ apps.

So waiting for your reply or maybe another patch.

Regards,
Mikhael.
--
Visit the official FVWM web page at <URL:http://www.fvwm.org/>.
To unsubscribe from the list, send "unsubscribe fvwm-workers" in the
body of a message to [email-masked].
To report problems, send mail to [email-masked]

---

From: Eric Gillespie <[email-masked]>
Date: Thu, 26 Sep 2002 21:25:42 -0500

Mikhael Goikhman <[email-masked]> writes:

> Your changes in configure.in are not very good, we should check
> for a correctness of the gtk headers and libs found, a user may
> have pkg-config, but not the gtk libs.

Yes, i tested this case.  Notice that i test the exit code of
pkg-config --cflags gtk+-2.0-x11.

> with_gtk should be only "yes" or "no", since it is
> used in other places.

Whoops, didn't know that.

> gnome support should not be special with gtk-2.0, i.e. if gnome
> detection still works with gnome-2.0 why to disable it,

Well, like i said, i have no interest in GNOME support.  You seem
to think that the current GNOME detection will find GNOME 2.0; i
think that this is not the case, i think pkg-config will also
have to be used.  Aside from that, i know that some changes in
the actual code would be necessary (gnome_init is gone, for
example).  With or without my patch a user can use GNOME 1 but
not GNOME 2, so i don't see why lack of GNOME 2 support should
matter.

> with_gdkimlib should be set to "no".

Yeah, missed that.

> gtk-2.0.0. But I don't care too much here.

Yes.  I just thought it would be better to be consistent with how
GTK normally handles this.  If someone thinks it is important to
use ampersands instead, i will look to see whether it is better
to convert & to _ or just handle all this manually like in the
1.2 code (i'd have to do it all manually anyway to handle
r_label).

> In fvwm menus, if you use real tab in the label there are (by
> default) 3 columns, the first 2 are left justified and the
> third is right justified (good for accelerator keys for

Accelerator keys?  But this is handled automatically (when a
character is preceeded by an underscore it gets underlined and
becomes the accelerator key).

> example). See MenuStyle ItemFormat in fvwm(1) to learn more. In
> FvwmGtk menus, only 2 columns may be defined.  Or maybe these
> are not columns, but right justified texts. I think it is good
> to have this functionality. I see this in gtk+ apps.

OK, i will read up on this.

> So waiting for your reply or maybe another patch.

I will come back with a better patch.

--  
Eric Gillespie <*> [email-masked]

---

From: Mikhael Goikhman <[email-masked]>
Date: Fri, 27 Sep 2002 03:38:24 +0000

> pkg-config --cflags gtk+-2.0-x11.

So, I move /usr/include/gtk+-1.2/ to /tmp/ and pkg-config --cflags gtk+
still returns 0. We in fvwm do not trust anything except for successful
compilation and running (if needed) of some test code.

> not GNOME 2, so i don't see why lack of GNOME 2 support should

I don't know whether gnome-2.0 will be detected using gnome-config, but I
know that if it is detected, it is likely to be usable, because we build a
test code with gnome_init in it.

> > with_gdkimlib should be set to "no".

Try fvwm-config to test this.

> 1.2 code (i'd have to do it all manually anyway to handle

If you do it manually anyway, I think, supporting of '&' may be restored.
Unless you feel strongly to do it otherwise.

> becomes the accelerator key).

I mean, I see in some applications with Ctrl-key labels at the right.
I don't think they are defined using underscores.

Take a look at WindowList implementation in FvwmGtk, it uses 2 columns.
The second is right justified. It would be nice if FvwmGtk may support
3 colums like fvwm, so WindowList would look nicer than it is now
(i.e. both columns are left-justified).

> I will come back with a better patch.

Ok, welcome.

Regards,
Mikhael.

---

From: Eric Gillespie <[email-masked]>
Date: Fri, 27 Sep 2002 05:58:15 -0500

Mikhael Goikhman <[email-masked]> writes:

> So, I move /usr/include/gtk+-1.2/ to /tmp/ and pkg-config
> --cflags gtk+ still returns 0. We in fvwm do not trust anything
> except for successful compilation and running (if needed) of
> some test code.

Er, that's a pretty diabolical case.  If that's how far you want
to go, i will comply.

> I don't know whether gnome-2.0 will be detected using
> gnome-config, but I know that if it is detected, it is likely
> to be usable, because we build a test code with gnome_init in
> it.

No.  gnome-config is a GNOME 1.x thing; 2.x uses pkg-config.  You
can't have a program linking to both GTK+ 1.2 and 2.0, so you
cannot have a program linking to both GTK+ 2.0 and GNOME 1.x.
So, if GTK+ 2.0 is enabled, you cannot look for gnome-config.

> If you do it manually anyway, I think, supporting of '&' may be
> restored.  Unless you feel strongly to do it otherwise.

Yes, that's what i said.

> I mean, I see in some applications with Ctrl-key labels at the
> right.  I don't think they are defined using underscores.

Oh, now i see what you mean.  OK, i guess i will have to handle
all this manually.

> Take a look at WindowList implementation in FvwmGtk, it uses 2
> columns.  The second is right justified. It would be nice if
> FvwmGtk may support 3 colums like fvwm, so WindowList would
> look nicer than it is now (i.e. both columns are
> left-justified).

This is possible in both 1.2 and 2.0; i'm not sure why it wasn't
implemented that way in the first place.  I can fix this.

---

From: Mikhael Goikhman <[email-masked]>
Date: Fri, 27 Sep 2002 18:09:22 +0000

> Er, that's a pretty diabolical case.  If that's how far you want

We do it for every library. For the record, until I added a trivial
gnome test, we had a lot of reports from people with stalled gnome-config.
It is more probably to get a stalled pkg-config output, because it is not
even a part of gtk+ or gnome.

> implemented that way in the first place.  I can fix this.

If you want to be the FvwmGtk maintainer, it is fine.
I have several feature requests. :-) One of which I plan to implement
myself, but it can't be any time soon.

Regards,
Mikhael.