mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-11-12 20:00:09 +00:00
Update to describe submitting patches and bug reports to
Mon Feb 26 16:34:33 2001 Owen Taylor <otaylor@redhat.com> * README: Update to describe submitting patches and bug reports to bugzilla.gnome.org. Tue Feb 20 23:48:16 2001 Owen Taylor <otaylor@redhat.com> * gdk/gdkim.c,gdk/gdkprivate.h: Add private function _gdk_wcstombs_len() which takes a length. * gdk/gdkfont.c,gdk/gdkprivate.h,gdk/gdkdraw.c: Consistently handle calls to _wc() font for GDK_FONT_FONT routines by: a) for 8-bit fonts, converting to chars via wcstombs (Will make GtkLabel handle using GDK_FONT_FONT for non-iso-8859-1 a wee bit better, though GDK_FONT_FONTSET is still the only supported way to get correct i18n. #50834) b) for 16-bit fonts, assuming each wchar is a glyph index. (Broken, but no more broken than anything else)
This commit is contained in:
parent
46e0b468ed
commit
8875974d18
23
ChangeLog
23
ChangeLog
@ -1,3 +1,26 @@
|
||||
Mon Feb 26 16:34:33 2001 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* README: Update to describe submitting patches
|
||||
and bug reports to bugzilla.gnome.org.
|
||||
|
||||
Tue Feb 20 23:48:16 2001 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* gdk/gdkim.c,gdk/gdkprivate.h: Add private function
|
||||
_gdk_wcstombs_len() which takes a length.
|
||||
|
||||
* gdk/gdkfont.c,gdk/gdkprivate.h,gdk/gdkdraw.c:
|
||||
Consistently handle calls to _wc() font for GDK_FONT_FONT
|
||||
routines by:
|
||||
|
||||
a) for 8-bit fonts, converting to chars via wcstombs
|
||||
(Will make GtkLabel handle using GDK_FONT_FONT for
|
||||
non-iso-8859-1 a wee bit better, though GDK_FONT_FONTSET
|
||||
is still the only supported way to get correct i18n.
|
||||
#50834)
|
||||
|
||||
b) for 16-bit fonts, assuming each wchar is a glyph
|
||||
index. (Broken, but no more broken than anything else)
|
||||
|
||||
Mon Feb 26 21:36:11 2001 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* gtk/gtkwindow.[ch] (gtk_window_focus_in/out_event): We can't
|
||||
|
@ -1,3 +1,26 @@
|
||||
Mon Feb 26 16:34:33 2001 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* README: Update to describe submitting patches
|
||||
and bug reports to bugzilla.gnome.org.
|
||||
|
||||
Tue Feb 20 23:48:16 2001 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* gdk/gdkim.c,gdk/gdkprivate.h: Add private function
|
||||
_gdk_wcstombs_len() which takes a length.
|
||||
|
||||
* gdk/gdkfont.c,gdk/gdkprivate.h,gdk/gdkdraw.c:
|
||||
Consistently handle calls to _wc() font for GDK_FONT_FONT
|
||||
routines by:
|
||||
|
||||
a) for 8-bit fonts, converting to chars via wcstombs
|
||||
(Will make GtkLabel handle using GDK_FONT_FONT for
|
||||
non-iso-8859-1 a wee bit better, though GDK_FONT_FONTSET
|
||||
is still the only supported way to get correct i18n.
|
||||
#50834)
|
||||
|
||||
b) for 16-bit fonts, assuming each wchar is a glyph
|
||||
index. (Broken, but no more broken than anything else)
|
||||
|
||||
Mon Feb 26 21:36:11 2001 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* gtk/gtkwindow.[ch] (gtk_window_focus_in/out_event): We can't
|
||||
|
@ -1,3 +1,26 @@
|
||||
Mon Feb 26 16:34:33 2001 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* README: Update to describe submitting patches
|
||||
and bug reports to bugzilla.gnome.org.
|
||||
|
||||
Tue Feb 20 23:48:16 2001 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* gdk/gdkim.c,gdk/gdkprivate.h: Add private function
|
||||
_gdk_wcstombs_len() which takes a length.
|
||||
|
||||
* gdk/gdkfont.c,gdk/gdkprivate.h,gdk/gdkdraw.c:
|
||||
Consistently handle calls to _wc() font for GDK_FONT_FONT
|
||||
routines by:
|
||||
|
||||
a) for 8-bit fonts, converting to chars via wcstombs
|
||||
(Will make GtkLabel handle using GDK_FONT_FONT for
|
||||
non-iso-8859-1 a wee bit better, though GDK_FONT_FONTSET
|
||||
is still the only supported way to get correct i18n.
|
||||
#50834)
|
||||
|
||||
b) for 16-bit fonts, assuming each wchar is a glyph
|
||||
index. (Broken, but no more broken than anything else)
|
||||
|
||||
Mon Feb 26 21:36:11 2001 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* gtk/gtkwindow.[ch] (gtk_window_focus_in/out_event): We can't
|
||||
|
@ -1,3 +1,26 @@
|
||||
Mon Feb 26 16:34:33 2001 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* README: Update to describe submitting patches
|
||||
and bug reports to bugzilla.gnome.org.
|
||||
|
||||
Tue Feb 20 23:48:16 2001 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* gdk/gdkim.c,gdk/gdkprivate.h: Add private function
|
||||
_gdk_wcstombs_len() which takes a length.
|
||||
|
||||
* gdk/gdkfont.c,gdk/gdkprivate.h,gdk/gdkdraw.c:
|
||||
Consistently handle calls to _wc() font for GDK_FONT_FONT
|
||||
routines by:
|
||||
|
||||
a) for 8-bit fonts, converting to chars via wcstombs
|
||||
(Will make GtkLabel handle using GDK_FONT_FONT for
|
||||
non-iso-8859-1 a wee bit better, though GDK_FONT_FONTSET
|
||||
is still the only supported way to get correct i18n.
|
||||
#50834)
|
||||
|
||||
b) for 16-bit fonts, assuming each wchar is a glyph
|
||||
index. (Broken, but no more broken than anything else)
|
||||
|
||||
Mon Feb 26 21:36:11 2001 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* gtk/gtkwindow.[ch] (gtk_window_focus_in/out_event): We can't
|
||||
|
@ -1,3 +1,26 @@
|
||||
Mon Feb 26 16:34:33 2001 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* README: Update to describe submitting patches
|
||||
and bug reports to bugzilla.gnome.org.
|
||||
|
||||
Tue Feb 20 23:48:16 2001 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* gdk/gdkim.c,gdk/gdkprivate.h: Add private function
|
||||
_gdk_wcstombs_len() which takes a length.
|
||||
|
||||
* gdk/gdkfont.c,gdk/gdkprivate.h,gdk/gdkdraw.c:
|
||||
Consistently handle calls to _wc() font for GDK_FONT_FONT
|
||||
routines by:
|
||||
|
||||
a) for 8-bit fonts, converting to chars via wcstombs
|
||||
(Will make GtkLabel handle using GDK_FONT_FONT for
|
||||
non-iso-8859-1 a wee bit better, though GDK_FONT_FONTSET
|
||||
is still the only supported way to get correct i18n.
|
||||
#50834)
|
||||
|
||||
b) for 16-bit fonts, assuming each wchar is a glyph
|
||||
index. (Broken, but no more broken than anything else)
|
||||
|
||||
Mon Feb 26 21:36:11 2001 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* gtk/gtkwindow.[ch] (gtk_window_focus_in/out_event): We can't
|
||||
|
@ -1,3 +1,26 @@
|
||||
Mon Feb 26 16:34:33 2001 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* README: Update to describe submitting patches
|
||||
and bug reports to bugzilla.gnome.org.
|
||||
|
||||
Tue Feb 20 23:48:16 2001 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* gdk/gdkim.c,gdk/gdkprivate.h: Add private function
|
||||
_gdk_wcstombs_len() which takes a length.
|
||||
|
||||
* gdk/gdkfont.c,gdk/gdkprivate.h,gdk/gdkdraw.c:
|
||||
Consistently handle calls to _wc() font for GDK_FONT_FONT
|
||||
routines by:
|
||||
|
||||
a) for 8-bit fonts, converting to chars via wcstombs
|
||||
(Will make GtkLabel handle using GDK_FONT_FONT for
|
||||
non-iso-8859-1 a wee bit better, though GDK_FONT_FONTSET
|
||||
is still the only supported way to get correct i18n.
|
||||
#50834)
|
||||
|
||||
b) for 16-bit fonts, assuming each wchar is a glyph
|
||||
index. (Broken, but no more broken than anything else)
|
||||
|
||||
Mon Feb 26 21:36:11 2001 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* gtk/gtkwindow.[ch] (gtk_window_focus_in/out_event): We can't
|
||||
|
@ -1,3 +1,26 @@
|
||||
Mon Feb 26 16:34:33 2001 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* README: Update to describe submitting patches
|
||||
and bug reports to bugzilla.gnome.org.
|
||||
|
||||
Tue Feb 20 23:48:16 2001 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* gdk/gdkim.c,gdk/gdkprivate.h: Add private function
|
||||
_gdk_wcstombs_len() which takes a length.
|
||||
|
||||
* gdk/gdkfont.c,gdk/gdkprivate.h,gdk/gdkdraw.c:
|
||||
Consistently handle calls to _wc() font for GDK_FONT_FONT
|
||||
routines by:
|
||||
|
||||
a) for 8-bit fonts, converting to chars via wcstombs
|
||||
(Will make GtkLabel handle using GDK_FONT_FONT for
|
||||
non-iso-8859-1 a wee bit better, though GDK_FONT_FONTSET
|
||||
is still the only supported way to get correct i18n.
|
||||
#50834)
|
||||
|
||||
b) for 16-bit fonts, assuming each wchar is a glyph
|
||||
index. (Broken, but no more broken than anything else)
|
||||
|
||||
Mon Feb 26 21:36:11 2001 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* gtk/gtkwindow.[ch] (gtk_window_focus_in/out_event): We can't
|
||||
|
17
HACKING
17
HACKING
@ -41,16 +41,15 @@ to autogen.sh and they will be passed on to configure.
|
||||
If at all possible, please use CVS to get the latest development version of
|
||||
gtk+ and glib. You can do the following to get glib and gtk+ from cvs:
|
||||
|
||||
$ export CVSROOT=':pserver:anonymous@cvs.gimp.org:/debian/home/gnomecvs'
|
||||
$ export CVSROOT=':pserver:anonymous@cvs.gnome.org:/cvs/gnome'
|
||||
$ cvs login
|
||||
(there is no password, just hit return)
|
||||
$ cvs -z9 checkout glib
|
||||
$ cvs -z9 checkout gtk+
|
||||
$ cvs -z3 checkout glib
|
||||
$ cvs -z3 checkout gtk+
|
||||
|
||||
For information about submitting patches and commiting changes
|
||||
to CVS, see the README and README.cvs-commits files. In particular,
|
||||
don't, under any circumstances, commit anything to CVS before
|
||||
reading and understanding README.cvs-commmits.
|
||||
|
||||
Please submit patches to the gtk-list@redhat.com mailing list (you must
|
||||
subscribe before you post, e-mail gtk-list-request@redhat.com with a
|
||||
subject of "subscribe"). All kinds of contributions are accepted.
|
||||
Patches that you wish to go into the distribution should also be uploaded
|
||||
to ftp://ftp.gimp.org/incoming. Follow the rules there for naming your
|
||||
patches.
|
||||
|
||||
|
65
README
65
README
@ -12,11 +12,8 @@ The official ftp site is:
|
||||
The official web site is:
|
||||
http://www.gtk.org/
|
||||
|
||||
A mailing list is located at:
|
||||
gtk-list@redhat.com
|
||||
|
||||
To subscribe: mail -s subscribe gtk-list-request@redhat.com < /dev/null
|
||||
(Send mail to gtk-list-request@redhat.com with the subject "subscribe")
|
||||
Information about mailing lists can be found at
|
||||
http://www.gtk.org/mailinglists.html
|
||||
|
||||
Installation
|
||||
============
|
||||
@ -26,23 +23,11 @@ See the file 'INSTALL'
|
||||
How to report bugs
|
||||
==================
|
||||
|
||||
Bugs should be reported to the GNOME bug tracking
|
||||
system. (http://bugs.gnome.org). To report a problem
|
||||
about GTK+, send mail to submit@bugs.gnome.org.
|
||||
Bugs should be reported to the GNOME bug tracking system.
|
||||
(http://bugzilla.gnome.org, product gtk+.) You will need
|
||||
to create an account for yourself.
|
||||
|
||||
The subject of the mail should describe your problem.
|
||||
In the body of the mail, you should first include
|
||||
a "pseudo-header" that gives the package and
|
||||
version number. This should be separated by a blank
|
||||
line from the actual headers.
|
||||
|
||||
Package: gtk+
|
||||
Version: 1.2.9
|
||||
|
||||
[ Please substitute 1.2.9 with the version of GTK+ that
|
||||
you have installed ]
|
||||
|
||||
Then describe the bug. Include:
|
||||
In the bug report please include:
|
||||
|
||||
* Information about your system. For instance:
|
||||
|
||||
@ -60,11 +45,6 @@ Then describe the bug. Include:
|
||||
As a last resort, you can also provide a pointer to a larger piece
|
||||
of software that can be downloaded.
|
||||
|
||||
(Bugs that can be reproduced within the GIMP are almost as good
|
||||
as bugs that can be reproduced in testgtk. If you are reporting a
|
||||
bug found with the GIMP, please include the version number of the GIMP
|
||||
you are using)
|
||||
|
||||
* If the bug was a crash, the exact text that was printed out
|
||||
when the crash occured.
|
||||
|
||||
@ -74,28 +54,19 @@ Then describe the bug. Include:
|
||||
is produced running the test program with the --sync command
|
||||
line option.
|
||||
|
||||
An example of a bug report:
|
||||
|
||||
====
|
||||
To: submit@bugs.gnome.org
|
||||
From: yourname@your.address.org
|
||||
Subject: handlebox test in testgtk is misnamed.
|
||||
|
||||
Package: gtk+
|
||||
Version: 1.2.9
|
||||
|
||||
When I run gtk/testgtk, the button "handle box"
|
||||
is misnamed. There are multiple handle boxes in
|
||||
the demo, so it should be "handle boxes", to
|
||||
be like "buttons" or "check buttons".
|
||||
===
|
||||
|
||||
Patches
|
||||
=======
|
||||
|
||||
Patches can be uploaded to the incoming/ directory on
|
||||
ftp.gtk.org. Please follow the instructions there, and include
|
||||
your name and email address in the README file.
|
||||
Patches should also be submitted to bugzilla.gnome.org. If the
|
||||
patch fixes an existing bug, add the patch as an attachment
|
||||
to that bug report.
|
||||
|
||||
If the patch fixes a bug, it is usually a good idea to include
|
||||
all the information described in "How to Report Bugs".
|
||||
Otherwise, enter a new bug report that describes the patch,
|
||||
and attach the patch to that bug report.
|
||||
|
||||
Bug reports containing patches should include the PATCH keyword
|
||||
in their keyword fields. If the patch adds to or changes the GTK+
|
||||
programming interface, the API keyword should also be included.
|
||||
|
||||
Patches should be in unified diff form. (The -u option to GNU
|
||||
diff.)
|
||||
|
@ -327,15 +327,15 @@ gdk_draw_text_wc (GdkDrawable *drawable,
|
||||
|
||||
if (font->type == GDK_FONT_FONT)
|
||||
{
|
||||
XFontStruct *xfont = (XFontStruct *) font_private->xfont;
|
||||
gchar *text_8bit;
|
||||
gint i;
|
||||
XSetFont(drawable_private->xdisplay, gc_private->xgc, xfont->fid);
|
||||
text_8bit = g_new (gchar, text_length);
|
||||
for (i=0; i<text_length; i++) text_8bit[i] = text[i];
|
||||
XDrawString (drawable_private->xdisplay, drawable_private->xwindow,
|
||||
gc_private->xgc, x, y, text_8bit, text_length);
|
||||
g_free (text_8bit);
|
||||
gchar *glyphs;
|
||||
int glyphs_len;
|
||||
|
||||
_gdk_font_wc_to_glyphs (font, text, text_length,
|
||||
&glyphs, &glyphs_len);
|
||||
|
||||
gdk_draw_text (drawable, font, gc, x, y, glyphs, glyphs_len);
|
||||
|
||||
g_free (glyphs);
|
||||
}
|
||||
else if (font->type == GDK_FONT_FONTSET)
|
||||
{
|
||||
|
152
gdk/gdkfont.c
152
gdk/gdkfont.c
@ -374,7 +374,6 @@ gdk_text_width_wc (GdkFont *font,
|
||||
{
|
||||
GdkFontPrivate *private;
|
||||
gint width;
|
||||
XFontStruct *xfont;
|
||||
XFontSet fontset;
|
||||
|
||||
g_return_val_if_fail (font != NULL, -1);
|
||||
@ -385,21 +384,19 @@ gdk_text_width_wc (GdkFont *font,
|
||||
switch (font->type)
|
||||
{
|
||||
case GDK_FONT_FONT:
|
||||
xfont = (XFontStruct *) private->xfont;
|
||||
if ((xfont->min_byte1 == 0) && (xfont->max_byte1 == 0))
|
||||
{
|
||||
gchar *text_8bit;
|
||||
gint i;
|
||||
text_8bit = g_new (gchar, text_length);
|
||||
for (i=0; i<text_length; i++) text_8bit[i] = text[i];
|
||||
width = XTextWidth (xfont, text_8bit, text_length);
|
||||
g_free (text_8bit);
|
||||
}
|
||||
else
|
||||
{
|
||||
width = 0;
|
||||
}
|
||||
break;
|
||||
{
|
||||
gchar *glyphs;
|
||||
int glyphs_len;
|
||||
|
||||
_gdk_font_wc_to_glyphs (font, text, text_length,
|
||||
&glyphs, &glyphs_len);
|
||||
|
||||
width = gdk_text_width (font, glyphs, glyphs_len);
|
||||
|
||||
g_free (glyphs);
|
||||
|
||||
break;
|
||||
}
|
||||
case GDK_FONT_FONTSET:
|
||||
if (sizeof(GdkWChar) == sizeof(wchar_t))
|
||||
{
|
||||
@ -475,10 +472,7 @@ gdk_char_width_wc (GdkFont *font,
|
||||
GdkWChar character)
|
||||
{
|
||||
GdkFontPrivate *private;
|
||||
XCharStruct *chars;
|
||||
gint width;
|
||||
guint ch = character & 0xff; /* get rid of sign-extension */
|
||||
XFontStruct *xfont;
|
||||
XFontSet fontset;
|
||||
|
||||
g_return_val_if_fail (font != NULL, -1);
|
||||
@ -488,25 +482,18 @@ gdk_char_width_wc (GdkFont *font,
|
||||
switch (font->type)
|
||||
{
|
||||
case GDK_FONT_FONT:
|
||||
/* only 8 bits characters are considered here */
|
||||
xfont = (XFontStruct *) private->xfont;
|
||||
if ((xfont->min_byte1 == 0) &&
|
||||
(xfont->max_byte1 == 0) &&
|
||||
(ch >= xfont->min_char_or_byte2) &&
|
||||
(ch <= xfont->max_char_or_byte2))
|
||||
{
|
||||
chars = xfont->per_char;
|
||||
if (chars)
|
||||
width = chars[ch - xfont->min_char_or_byte2].width;
|
||||
else
|
||||
width = xfont->min_bounds.width;
|
||||
}
|
||||
else
|
||||
{
|
||||
char ch2 = character;
|
||||
width = XTextWidth (xfont, &ch2, 1);
|
||||
}
|
||||
break;
|
||||
{
|
||||
gchar *glyphs;
|
||||
int glyphs_len;
|
||||
|
||||
_gdk_font_wc_to_glyphs (font, &character, 1, &glyphs, &glyphs_len);
|
||||
|
||||
width = gdk_text_width (font, glyphs, glyphs_len);
|
||||
|
||||
g_free (glyphs);
|
||||
|
||||
break;
|
||||
}
|
||||
case GDK_FONT_FONTSET:
|
||||
fontset = (XFontSet) private->xfont;
|
||||
{
|
||||
@ -610,13 +597,8 @@ gdk_text_extents_wc (GdkFont *font,
|
||||
gint *descent)
|
||||
{
|
||||
GdkFontPrivate *private;
|
||||
XCharStruct overall;
|
||||
XFontStruct *xfont;
|
||||
XFontSet fontset;
|
||||
XRectangle ink, logical;
|
||||
int direction;
|
||||
int font_ascent;
|
||||
int font_descent;
|
||||
|
||||
g_return_if_fail (font != NULL);
|
||||
g_return_if_fail (text != NULL);
|
||||
@ -627,31 +609,17 @@ gdk_text_extents_wc (GdkFont *font,
|
||||
{
|
||||
case GDK_FONT_FONT:
|
||||
{
|
||||
gchar *text_8bit;
|
||||
gint i;
|
||||
gchar *glyphs;
|
||||
int glyphs_len;
|
||||
|
||||
xfont = (XFontStruct *) private->xfont;
|
||||
g_return_if_fail ((xfont->min_byte1 == 0) && (xfont->max_byte1 == 0));
|
||||
_gdk_font_wc_to_glyphs (font, text, text_length,
|
||||
&glyphs, &glyphs_len);
|
||||
|
||||
text_8bit = g_new (gchar, text_length);
|
||||
for (i=0; i<text_length; i++)
|
||||
text_8bit[i] = text[i];
|
||||
gdk_text_extents (font, glyphs, glyphs_len,
|
||||
lbearing, rbearing, width, ascent, descent);
|
||||
|
||||
g_free (glyphs);
|
||||
|
||||
XTextExtents (xfont, text_8bit, text_length,
|
||||
&direction, &font_ascent, &font_descent,
|
||||
&overall);
|
||||
g_free (text_8bit);
|
||||
|
||||
if (lbearing)
|
||||
*lbearing = overall.lbearing;
|
||||
if (rbearing)
|
||||
*rbearing = overall.rbearing;
|
||||
if (width)
|
||||
*width = overall.width;
|
||||
if (ascent)
|
||||
*ascent = overall.ascent;
|
||||
if (descent)
|
||||
*descent = overall.descent;
|
||||
break;
|
||||
}
|
||||
case GDK_FONT_FONTSET:
|
||||
@ -827,3 +795,57 @@ gdk_char_height (GdkFont *font,
|
||||
|
||||
return gdk_text_height (font, &character, 1);
|
||||
}
|
||||
|
||||
void
|
||||
_gdk_font_wc_to_glyphs (GdkFont *font,
|
||||
const GdkWChar *text,
|
||||
gint text_length,
|
||||
gchar **result,
|
||||
gint *result_length)
|
||||
{
|
||||
XFontStruct *xfont;
|
||||
GdkFontPrivate *font_private = (GdkFontPrivate*) font;
|
||||
|
||||
g_return_if_fail (font != NULL);
|
||||
g_return_if_fail (font->type == GDK_FONT_FONT);
|
||||
|
||||
xfont = (XFontStruct *) font_private->xfont;
|
||||
|
||||
if ((xfont->min_byte1 == 0) && (xfont->max_byte1 == 0))
|
||||
{
|
||||
/* 8-bit font, assume that we are in a 8-bit locale,
|
||||
* and convert to bytes using wcstombs.
|
||||
*/
|
||||
char *mbstr = _gdk_wcstombs_len (text, text_length);
|
||||
|
||||
if (result_length)
|
||||
*result_length = strlen (mbstr);
|
||||
|
||||
if (result)
|
||||
*result = mbstr;
|
||||
else
|
||||
g_free (mbstr);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* 16-bit font. Who knows what was intended? Make a random
|
||||
* guess.
|
||||
*/
|
||||
XChar2b *result2b = g_new (XChar2b, text_length + 1);
|
||||
gint i;
|
||||
|
||||
for (i = 0; i < text_length; i++)
|
||||
{
|
||||
result2b[i].byte1 = text[i] / 256;
|
||||
result2b[i].byte2 = text[i] % 256;
|
||||
}
|
||||
|
||||
result2b[i].byte1 = result2b[i].byte2 = 0;
|
||||
|
||||
if (result)
|
||||
*result = (gchar *)result2b;
|
||||
|
||||
if (result_length)
|
||||
*result_length = text_length;
|
||||
}
|
||||
}
|
||||
|
129
gdk/gdkim.c
129
gdk/gdkim.c
@ -1479,6 +1479,82 @@ gdk_ic_get_events (GdkIC *ic)
|
||||
|
||||
#endif /* USE_XIM */
|
||||
|
||||
/*
|
||||
* gdk_wcstombs
|
||||
*
|
||||
* Returns a multi-byte string converted from the specified array
|
||||
* of wide characters. The string is newly allocated. The array of
|
||||
* wide characters is nul-terminated, if len < 0
|
||||
*/
|
||||
gchar *
|
||||
_gdk_wcstombs_len (const GdkWChar *src,
|
||||
int len)
|
||||
{
|
||||
gchar *mbstr = NULL;
|
||||
gint length;
|
||||
|
||||
if (len < 0)
|
||||
{
|
||||
length = 0;
|
||||
|
||||
while (src[length] != 0)
|
||||
length++;
|
||||
}
|
||||
else
|
||||
length = len;
|
||||
|
||||
if (gdk_use_mb)
|
||||
{
|
||||
XTextProperty tpr;
|
||||
wchar_t *src_wc;
|
||||
|
||||
/* The len < 0 part is to ensure nul termination
|
||||
*/
|
||||
if (len < 0 && sizeof(wchar_t) == sizeof(GdkWChar))
|
||||
{
|
||||
src_wc = (wchar_t *)src;
|
||||
}
|
||||
else
|
||||
{
|
||||
gint i;
|
||||
|
||||
src_wc = g_new (wchar_t, length + 1);
|
||||
|
||||
for (i = 0; i < length; i++)
|
||||
src_wc[i] = src[i];
|
||||
|
||||
src_wc[i] = 0;
|
||||
}
|
||||
|
||||
if (XwcTextListToTextProperty (gdk_display, &src_wc, 1,
|
||||
XTextStyle, &tpr) == Success)
|
||||
{
|
||||
/*
|
||||
* We must copy the string into an area allocated by glib, because
|
||||
* the string 'tpr.value' must be freed by XFree().
|
||||
*/
|
||||
mbstr = g_strdup(tpr.value);
|
||||
XFree (tpr.value);
|
||||
}
|
||||
|
||||
if (src_wc != (wchar_t *)src)
|
||||
g_free (src_wc);
|
||||
}
|
||||
else
|
||||
{
|
||||
gint i;
|
||||
|
||||
mbstr = g_new (gchar, length + 1);
|
||||
|
||||
for (i=0; i < length; i++)
|
||||
mbstr[i] = src[i];
|
||||
|
||||
mbstr[i] = '\0';
|
||||
}
|
||||
|
||||
return mbstr;
|
||||
}
|
||||
|
||||
/*
|
||||
* gdk_wcstombs
|
||||
*
|
||||
@ -1490,58 +1566,7 @@ gdk_ic_get_events (GdkIC *ic)
|
||||
gchar *
|
||||
gdk_wcstombs (const GdkWChar *src)
|
||||
{
|
||||
gchar *mbstr;
|
||||
|
||||
if (gdk_use_mb)
|
||||
{
|
||||
XTextProperty tpr;
|
||||
|
||||
if (sizeof(wchar_t) != sizeof(GdkWChar))
|
||||
{
|
||||
gint i;
|
||||
wchar_t *src_alt;
|
||||
for (i=0; src[i]; i++);
|
||||
src_alt = g_new (wchar_t, i+1);
|
||||
for (; i>=0; i--)
|
||||
src_alt[i] = src[i];
|
||||
if (XwcTextListToTextProperty (gdk_display, &src_alt, 1, XTextStyle, &tpr)
|
||||
!= Success)
|
||||
{
|
||||
g_free (src_alt);
|
||||
return NULL;
|
||||
}
|
||||
g_free (src_alt);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (XwcTextListToTextProperty (gdk_display, (wchar_t**)&src, 1,
|
||||
XTextStyle, &tpr) != Success)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
/*
|
||||
* We must copy the string into an area allocated by glib, because
|
||||
* the string 'tpr.value' must be freed by XFree().
|
||||
*/
|
||||
mbstr = g_strdup(tpr.value);
|
||||
XFree (tpr.value);
|
||||
}
|
||||
else
|
||||
{
|
||||
gint length = 0;
|
||||
gint i;
|
||||
|
||||
while (src[length] != 0)
|
||||
length++;
|
||||
|
||||
mbstr = g_new (gchar, length + 1);
|
||||
|
||||
for (i=0; i<length+1; i++)
|
||||
mbstr[i] = src[i];
|
||||
}
|
||||
|
||||
return mbstr;
|
||||
return _gdk_wcstombs_len (src, -1);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -322,6 +322,14 @@ extern GdkWindow *gdk_xim_window; /* currently using Window */
|
||||
extern guint gdk_debug_flags;
|
||||
|
||||
|
||||
void _gdk_font_wc_to_glyphs (GdkFont *font,
|
||||
const GdkWChar *text,
|
||||
gint text_length,
|
||||
gchar **result,
|
||||
gint *result_length);
|
||||
gchar *_gdk_wcstombs_len (const GdkWChar *src,
|
||||
int length);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
Loading…
Reference in New Issue
Block a user