label->label should be the mb text _after_ removing the underlines, not

Wed Dec 23 13:58:14 1998  Owen Taylor  <otaylor@redhat.com>

	* gtk/gtklabel.c (gtk_label_parse_uline):
	label->label should be the mb text _after_ removing
	the underlines, not before.

	* gtk/gtkmenu.c: Reverted Elliot's tearoff-menu-item
	title hack. If it deserves being done, it deserves
	being done right.
This commit is contained in:
Owen Taylor 1998-12-23 19:16:21 +00:00 committed by Owen Taylor
parent fb833c477b
commit c6cf882eee
9 changed files with 125 additions and 40 deletions

View File

@ -1,3 +1,13 @@
Wed Dec 23 13:58:14 1998 Owen Taylor <otaylor@redhat.com>
* gtk/gtklabel.c (gtk_label_parse_uline):
label->label should be the mb text _after_ removing
the underlines, not before.
* gtk/gtkmenu.c: Reverted Elliot's tearoff-menu-item
title hack. If it deserves being done, it deserves
being done right.
1998-12-23 Elliot Lee <sopwith@redhat.com> 1998-12-23 Elliot Lee <sopwith@redhat.com>
* gtk/gtkmenu.c: Allow programmer to gtk_object_set_data(obj, * gtk/gtkmenu.c: Allow programmer to gtk_object_set_data(obj,

View File

@ -1,3 +1,13 @@
Wed Dec 23 13:58:14 1998 Owen Taylor <otaylor@redhat.com>
* gtk/gtklabel.c (gtk_label_parse_uline):
label->label should be the mb text _after_ removing
the underlines, not before.
* gtk/gtkmenu.c: Reverted Elliot's tearoff-menu-item
title hack. If it deserves being done, it deserves
being done right.
1998-12-23 Elliot Lee <sopwith@redhat.com> 1998-12-23 Elliot Lee <sopwith@redhat.com>
* gtk/gtkmenu.c: Allow programmer to gtk_object_set_data(obj, * gtk/gtkmenu.c: Allow programmer to gtk_object_set_data(obj,

View File

@ -1,3 +1,13 @@
Wed Dec 23 13:58:14 1998 Owen Taylor <otaylor@redhat.com>
* gtk/gtklabel.c (gtk_label_parse_uline):
label->label should be the mb text _after_ removing
the underlines, not before.
* gtk/gtkmenu.c: Reverted Elliot's tearoff-menu-item
title hack. If it deserves being done, it deserves
being done right.
1998-12-23 Elliot Lee <sopwith@redhat.com> 1998-12-23 Elliot Lee <sopwith@redhat.com>
* gtk/gtkmenu.c: Allow programmer to gtk_object_set_data(obj, * gtk/gtkmenu.c: Allow programmer to gtk_object_set_data(obj,

View File

@ -1,3 +1,13 @@
Wed Dec 23 13:58:14 1998 Owen Taylor <otaylor@redhat.com>
* gtk/gtklabel.c (gtk_label_parse_uline):
label->label should be the mb text _after_ removing
the underlines, not before.
* gtk/gtkmenu.c: Reverted Elliot's tearoff-menu-item
title hack. If it deserves being done, it deserves
being done right.
1998-12-23 Elliot Lee <sopwith@redhat.com> 1998-12-23 Elliot Lee <sopwith@redhat.com>
* gtk/gtkmenu.c: Allow programmer to gtk_object_set_data(obj, * gtk/gtkmenu.c: Allow programmer to gtk_object_set_data(obj,

View File

@ -1,3 +1,13 @@
Wed Dec 23 13:58:14 1998 Owen Taylor <otaylor@redhat.com>
* gtk/gtklabel.c (gtk_label_parse_uline):
label->label should be the mb text _after_ removing
the underlines, not before.
* gtk/gtkmenu.c: Reverted Elliot's tearoff-menu-item
title hack. If it deserves being done, it deserves
being done right.
1998-12-23 Elliot Lee <sopwith@redhat.com> 1998-12-23 Elliot Lee <sopwith@redhat.com>
* gtk/gtkmenu.c: Allow programmer to gtk_object_set_data(obj, * gtk/gtkmenu.c: Allow programmer to gtk_object_set_data(obj,

View File

@ -1,3 +1,13 @@
Wed Dec 23 13:58:14 1998 Owen Taylor <otaylor@redhat.com>
* gtk/gtklabel.c (gtk_label_parse_uline):
label->label should be the mb text _after_ removing
the underlines, not before.
* gtk/gtkmenu.c: Reverted Elliot's tearoff-menu-item
title hack. If it deserves being done, it deserves
being done right.
1998-12-23 Elliot Lee <sopwith@redhat.com> 1998-12-23 Elliot Lee <sopwith@redhat.com>
* gtk/gtkmenu.c: Allow programmer to gtk_object_set_data(obj, * gtk/gtkmenu.c: Allow programmer to gtk_object_set_data(obj,

View File

@ -1,3 +1,13 @@
Wed Dec 23 13:58:14 1998 Owen Taylor <otaylor@redhat.com>
* gtk/gtklabel.c (gtk_label_parse_uline):
label->label should be the mb text _after_ removing
the underlines, not before.
* gtk/gtkmenu.c: Reverted Elliot's tearoff-menu-item
title hack. If it deserves being done, it deserves
being done right.
1998-12-23 Elliot Lee <sopwith@redhat.com> 1998-12-23 Elliot Lee <sopwith@redhat.com>
* gtk/gtkmenu.c: Allow programmer to gtk_object_set_data(obj, * gtk/gtkmenu.c: Allow programmer to gtk_object_set_data(obj,

View File

@ -215,29 +215,18 @@ gtk_label_new (const char *str)
return GTK_WIDGET (label); return GTK_WIDGET (label);
} }
void static void
gtk_label_set_text (GtkLabel *label, gtk_label_set_text_internal (GtkLabel *label,
const char *str) char *str,
GdkWChar *str_wc)
{ {
guint len;
guint wc_len;
g_return_if_fail (label != NULL);
g_return_if_fail (GTK_IS_LABEL (label));
g_return_if_fail (str != NULL);
if (label->label) if (label->label)
g_free (label->label); g_free (label->label);
if (label->label_wc) if (label->label_wc)
g_free (label->label_wc); g_free (label->label_wc);
label->label = g_strdup (str); label->label = str;
label->label_wc = str_wc;
/* Convert text to wide characters */
len = strlen (str);
label->label_wc = g_new (GdkWChar, len + 1);
wc_len = gdk_mbstowcs (label->label_wc, str, len + 1);
label->label_wc[wc_len] = '\0';
gtk_label_free_words (label); gtk_label_free_words (label);
@ -250,6 +239,27 @@ gtk_label_set_text (GtkLabel *label,
} }
} }
void
gtk_label_set_text (GtkLabel *label,
const char *str)
{
GdkWChar *str_wc;
gint len;
gint wc_len;
g_return_if_fail (label != NULL);
g_return_if_fail (GTK_IS_LABEL (label));
g_return_if_fail (str != NULL);
/* Convert text to wide characters */
len = strlen (str);
str_wc = g_new (GdkWChar, len + 1);
wc_len = gdk_mbstowcs (str_wc, str, len + 1);
str_wc[wc_len] = '\0';
gtk_label_set_text_internal (label, g_strdup (str), str_wc);
}
void void
gtk_label_set_pattern (GtkLabel *label, gtk_label_set_pattern (GtkLabel *label,
const gchar *pattern) const gchar *pattern)
@ -445,6 +455,7 @@ gtk_label_split_text (GtkLabel *label)
max_line_width = 0; max_line_width = 0;
tailp = &label->words; tailp = &label->words;
str = label->label_wc; str = label->label_wc;
while (*str) while (*str)
{ {
word = gtk_label_word_alloc (); word = gtk_label_word_alloc ();
@ -493,6 +504,21 @@ gtk_label_split_text (GtkLabel *label)
tailp = &word->next; tailp = &word->next;
} }
/* Add an empty word to represent an empty line
*/
if ((str == label->label_wc) || (str[-1] == '\n'))
{
word = gtk_label_word_alloc ();
word->space = 0;
word->beginning = str;
word->length = 0;
word->width = 0;
*tailp = word;
tailp = &word->next;
}
return MAX (line_width, max_line_width); return MAX (line_width, max_line_width);
} }
@ -918,21 +944,23 @@ gtk_label_parse_uline (GtkLabel *label,
const gchar *string) const gchar *string)
{ {
guint accel_key = GDK_VoidSymbol; guint accel_key = GDK_VoidSymbol;
GdkWChar *p, *q; GdkWChar *p, *q, *string_wc;
gchar *r; gchar *r;
gchar *pattern; gchar *pattern;
gint length, wc_length;
gint length;
gboolean underscore; gboolean underscore;
/* Convert text to wide characters */
length = strlen (string); length = strlen (string);
string_wc = g_new (GdkWChar, length + 1);
wc_length = gdk_mbstowcs (string_wc, string, length + 1);
string_wc[wc_length] = '\0';
gtk_label_set_text (label, string);
pattern = g_new (gchar, length+1); pattern = g_new (gchar, length+1);
underscore = FALSE; underscore = FALSE;
p = q = label->label_wc; p = q = string_wc;
r = pattern; r = pattern;
while (*p) while (*p)
@ -966,6 +994,7 @@ gtk_label_parse_uline (GtkLabel *label,
*q = 0; *q = 0;
*r = 0; *r = 0;
gtk_label_set_text_internal (label, gdk_wcstombs (string_wc), string_wc);
gtk_label_set_pattern (label, pattern); gtk_label_set_pattern (label, pattern);
g_free (pattern); g_free (pattern);

View File

@ -616,23 +616,9 @@ gtk_menu_set_tearoff_state (GtkMenu *menu,
GtkWidget *child = GTK_BIN (attach_widget)->child; GtkWidget *child = GTK_BIN (attach_widget)->child;
if (GTK_IS_LABEL (child)) if (GTK_IS_LABEL (child))
{ {
gchar *ret, *retdup = NULL, *ctmp; gchar *ret;
ret = gtk_object_get_data(GTK_OBJECT(attach_widget),
"GtkTearoffMenuItem_window_title");
if(!ret) {
gtk_label_get (GTK_LABEL (child), &ret); gtk_label_get (GTK_LABEL (child), &ret);
gdk_window_set_title (menu->tearoff_window->window, ret);
retdup = ctmp = g_strdup(ret);
/* Get rid of all the _'s from menu item hotkeys */
while((ctmp = strchr(ctmp, '_')))
g_memmove(ctmp, ctmp+1, strlen(ctmp+1)+1);
}
gdk_window_set_title (menu->tearoff_window->window,
retdup?retdup:ret);
g_free(retdup);
} }
} }