[Glade-devel] [glade-3] Problem with undo/redo menu getting too long

Damon Chaplin damon@karuna.uklinux.net
25 Apr 2004 15:45:36 +0100


--=-2CLnYLjMLYDivhyiuInj
Content-Type: text/plain
Content-Transfer-Encoding: 7bit

On Fri, 2004-04-23 at 16:44, Joaquin Cuenca Abela wrote:

> It seems more sensible to me to chop the string
> representation of the property in
> glade_command_set_{property,name} if it's too long,
> and in this case just display the begin ... end of the
> property.

Yes, that would be possible. Though handling Unicode strings nicely may
be slightly awkward.

There is also a problem with '_' characters, which get converted into
underlined accelerator keys in the menu item.

I've attached a patch that only uses the value string if it is non-NULL,
less than 10 bytes long and doesn't contain any '_' characters.

I think that is good enough for now. If someone wants to do a better fix
later they can.

Damon


--=-2CLnYLjMLYDivhyiuInj
Content-Disposition: attachment; filename=glade3.patch
Content-Type: text/x-patch; name=glade3.patch; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit

Index: glade-command.c
===================================================================
RCS file: /cvs/gnome/glade3/src/glade-command.c,v
retrieving revision 1.30
diff -u -r1.30 glade-command.c
--- glade-command.c	21 Apr 2004 21:03:40 -0000	1.30
+++ glade-command.c	25 Apr 2004 14:41:56 -0000
@@ -355,6 +355,9 @@
 	glade_project_window_refresh_undo_redo ();
 }
 
+
+#define MAX_UNDO_MENU_ITEM_VALUE_LEN	10
+
 void
 glade_command_set_property (GladeProperty *property, const GValue* pvalue)
 {
@@ -378,8 +381,18 @@
 	g_value_copy (pvalue, me->arg_value);
 
 	value_name = glade_property_class_make_string_from_gvalue (property->class, pvalue);
-	cmd->description = g_strdup_printf (_("Setting %s of %s to %s"),
-					    property->class->name, gwidget->name, value_name);
+	if (!value_name || strlen (value_name) > MAX_UNDO_MENU_ITEM_VALUE_LEN
+	    || strchr (value_name, '_')) {
+		cmd->description = g_strdup_printf (_("Setting %s of %s"),
+						    property->class->name,
+						    gwidget->name);
+
+	} else {
+		cmd->description = g_strdup_printf (_("Setting %s of %s to %s"),
+						    property->class->name,
+						    gwidget->name, value_name);
+	}
+
 	g_assert (cmd->description);
 	g_free (value_name);
 

--=-2CLnYLjMLYDivhyiuInj--