Bug 71937 - gdm word wrap problem for CJK
gdm word wrap problem for CJK
Status: CLOSED RAWHIDE
Product: Red Hat Public Beta
Classification: Retired
Component: gdm (Show other bugs)
null
All Linux
medium Severity medium
: ---
: ---
Assigned To: Havoc Pennington
Mike McLean
:
Depends On:
Blocks: 67218
  Show dependency treegraph
 
Reported: 2002-08-20 08:30 EDT by Nakai
Modified: 2007-04-18 12:45 EDT (History)
4 users (show)

See Also:
Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of:
Environment:
Last Closed: 2002-08-28 18:25:56 EDT
Type: ---
Regression: ---
Mount Type: ---
Documentation: ---
CRM:
Verified Versions:
Category: ---
oVirt Team: ---
RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: ---


Attachments (Terms of Use)

  None (edit)
Description Nakai 2002-08-20 08:30:35 EDT
From Bugzilla Helper:
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:0.9.9) Gecko/20020528

Description of problem:
When I input wrong username or password into gdm, it will
show up the long error message on the root window, but
it won't word wrap for CJK strings, so users cannot see
the whole error message.

Version-Release number of selected component (if applicable):


How reproducible:
Always

Steps to Reproduce:
1.Use gdm in Japanese mode
2.Input wrong username/password
3.error messsage is too wide
	

Actual Results:  No word wrap

Expected Results:  It should word wrap

Additional info:
Comment 1 Havoc Pennington 2002-08-21 19:14:15 EDT
Probably just a matter of pango_layout_set_width() on the relevant PangoLayout
Comment 2 George Lebl 2002-08-25 15:02:51 EDT
Perhaps it's just the redhat theme, to me it seems nothing is cut off (but I
can't read japanese so I can't really tell) ... try it with the circles theme.
Comment 3 Havoc Pennington 2002-08-25 15:28:51 EDT
jrb said there was a way to handle this in the theme - alex do you remember how
to do it? we need to let garrett know.
Comment 4 Alexander Larsson 2002-08-26 14:20:35 EDT
I don't understand why it's wrapping the english string but not the japanese.
Comment 5 Havoc Pennington 2002-08-26 14:31:27 EDT
maybe the japanese text is just longer without good word breaks? German also
overflows the boxes.

the fix I had in mind was a way to grow the boxes in the theme as the text grows.
Comment 6 Alexander Larsson 2002-08-26 14:34:39 EDT
Hmm? Isn't the problem already that the box grows to much?
I tried to set the width on the pam-error text, but that didn't seem to help.
Comment 7 Havoc Pennington 2002-08-26 14:47:41 EDT
maybe pango just doesn't word wrap for japanese at all?
Comment 8 Nakai 2002-08-27 00:47:45 EDT
Japanese sentence doesn't need any white space even if it's long.
Comment 9 Havoc Pennington 2002-08-27 00:55:46 EDT
Right but Pango's word wrap code is way more complicated than just a whitespace
thing. It has special cases for Japanese as recommended by the Unicode book.

Maybe look at pango/pango/break.c and see if it is working correctly. Does it work 
in message and error dialogs? If it works there it should work in gdm, if gdm
enables word wrap.

The relevant pango code is:

     case G_UNICODE_LOWERCASE_LETTER:
            case G_UNICODE_MODIFIER_LETTER:
            case G_UNICODE_OTHER_LETTER:
            case G_UNICODE_TITLECASE_LETTER:
            case G_UNICODE_UPPERCASE_LETTER:
              if (current_word_type == WordLetters)
                {
                  /* Japanese special cases for ending the word */
                  if (JAPANESE (last_word_letter) ||
                      JAPANESE (wc))
                    {
                      if ((HIRAGANA (last_word_letter) &&
                           !HIRAGANA (wc)) ||
                          (KATAKANA (last_word_letter) &&
                           !(KATAKANA (wc) || HIRAGANA (wc))) ||
                          (KANJI (last_word_letter) &&
                           !(HIRAGANA (wc) || KANJI (wc))) ||
                          (JAPANESE (last_word_letter) &&
                           !JAPANESE (wc)) ||
                          (!JAPANESE (last_word_letter) &&
                           JAPANESE (wc)))
                        attrs[i].is_word_end = TRUE;
                    }
                }
Comment 10 Havoc Pennington 2002-08-28 17:18:51 EDT
Eh, bad alex - not using Pango. I'm working on a hack here.

static char *
break_at (const char *orig, int len)
{
  char *text, *p, *newline;
  int i;

  text = g_strdup (orig);
  
  p = text;
  
  while (strlen (p) > len)
    {
      newline = strchr (p, '\n');
      if (newline &&
	  ((newline - p) < len))
	{
	  p = newline + 1;
	  continue;
	}

      for (i = MIN (len, strlen (p)-1); i > 0; i--)
	{
	  if (p[i] == ' ')
	    {
	      p[i] = '\n';
	      p = p + i + 1;
	      goto out;
	    }
	}
      /* No place to break. give up */
      p = p + 80;
    out:
    }
  return text;
}
Comment 11 Havoc Pennington 2002-08-28 18:25:49 EDT
2.4.0.7-8 should fix.
Comment 12 Jay Turner 2002-09-03 16:03:56 EDT
Fix confirmed with gdm-2.4.0.7-10.

Note You need to log in before you can comment on or make changes to this bug.