mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-18 14:56:07 +00:00
enable toolbar item to render UTF8 text. Change several XmString related function in RDFUtils.c to also return a font list associated with the XmString. approved by slamm
This commit is contained in:
parent
61c4871164
commit
f098211cb5
@ -580,7 +580,7 @@ XFE_RDFMenuToolbarBase::createCascadeButton(Widget menu,
|
||||
&pulldown);
|
||||
|
||||
// Set the item's label
|
||||
XFE_RDFUtils::setItemLabelString(_frame->getContext(),cascade,entry);
|
||||
XFE_RDFUtils::setItemLabelString(cascade,entry);
|
||||
|
||||
// Configure the new cascade button
|
||||
XFE_RDFUtils::configureMenuCascadeButton(cascade,entry);
|
||||
@ -642,7 +642,7 @@ XFE_RDFMenuToolbarBase::createPushButton(Widget menu, HT_Resource entry)
|
||||
XFE_RDFUtils::configureMenuPushButton(button,entry);
|
||||
|
||||
// Set the item's label
|
||||
XFE_RDFUtils::setItemLabelString(_frame->getContext(),button,entry);
|
||||
XFE_RDFUtils::setItemLabelString(button,entry);
|
||||
|
||||
// Create a new bookmark data structure for the callbacks
|
||||
data = XP_NEW_ZAP(ItemCallbackStruct);
|
||||
|
@ -56,8 +56,6 @@
|
||||
|
||||
extern "C" {
|
||||
extern RDF_NCVocab gNavCenter;
|
||||
extern XmString fe_ConvertToXmString(unsigned char *, int16, fe_Font, XmFontType, XmFontList * );
|
||||
extern INTL_CharSetInfo LO_GetDocumentCharacterSetInfo(MWContext *);
|
||||
}
|
||||
|
||||
typedef struct _tbarTooltipCBStruct {
|
||||
@ -517,7 +515,8 @@ XFE_RDFToolbar::createCascade(Widget parent,HT_Resource entry)
|
||||
|
||||
|
||||
// Set the item's label
|
||||
XFE_RDFUtils::setItemLabelString(_frame->getContext(),cascade,entry);
|
||||
// ftang- i18n issue
|
||||
XFE_RDFUtils::setItemLabelString(cascade,entry);
|
||||
|
||||
configureXfeCascade(cascade,entry);
|
||||
|
||||
@ -529,11 +528,14 @@ XFE_RDFToolbar::createCascade(Widget parent,HT_Resource entry)
|
||||
|
||||
/* Set the tooltip callback */
|
||||
XfeTipStringAdd(cascade);
|
||||
// ftang- i18n issue
|
||||
XfeTipStringSetObtainCallback(cascade, (XfeTipStringObtainCallback)tooltipCB, (XtPointer) data);
|
||||
|
||||
/* Set up the status bar text */
|
||||
XfeDocStringAdd(cascade);
|
||||
// ftang- i18n issue
|
||||
XfeDocStringSetObtainCallback(cascade, docStringSetCB, (XtPointer)data);
|
||||
// ftang- i18n issue
|
||||
XfeDocStringSetCallback(cascade, docStringCB, (XtPointer)data);
|
||||
|
||||
|
||||
@ -588,7 +590,7 @@ XFE_RDFToolbar::updateAppearance()
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
/* static */
|
||||
void
|
||||
XFE_RDFToolbar::tooltipCB(Widget /* w */,
|
||||
XFE_RDFToolbar::tooltipCB(Widget w ,
|
||||
XtPointer client_data,
|
||||
XmString * string_return,
|
||||
Boolean * need_to_free_string)
|
||||
@ -599,79 +601,63 @@ XFE_RDFToolbar::tooltipCB(Widget /* w */,
|
||||
HT_Resource entry = (HT_Resource) ttip->entry;
|
||||
|
||||
void * data=NULL;
|
||||
XmFontList font_list;
|
||||
XmString str = NULL;
|
||||
|
||||
HT_GetTemplateData(HT_TopNode(HT_GetView(entry)), gNavCenter->buttonTooltipText, HT_COLUMN_STRING, &data);
|
||||
XmFontList dummyFontListForNow = NULL;
|
||||
if (data) {
|
||||
MWContext * context = (obj->getFrame())->getContext();
|
||||
INTL_CharSetInfo charSetInfo =
|
||||
LO_GetDocumentCharacterSetInfo(context);
|
||||
|
||||
str = fe_ConvertToXmString((unsigned char *) data,
|
||||
INTL_GetCSIWinCSID(charSetInfo) ,
|
||||
NULL, XmFONT_IS_FONT, &font_list);
|
||||
|
||||
|
||||
*string_return = str;
|
||||
*need_to_free_string = True;
|
||||
XFE_RDFUtils::utf8ToXmStringAndFontList((char*)data, XtDisplay(w),
|
||||
string_return, &dummyFontListForNow);
|
||||
XmFontListFree(dummyFontListForNow);
|
||||
}
|
||||
else
|
||||
{
|
||||
MWContext * context = (obj->getFrame())->getContext();
|
||||
|
||||
*string_return = XFE_RDFUtils::getStringFromResource(context,entry);
|
||||
*need_to_free_string = True;
|
||||
XFE_RDFUtils::entryToXmStringAndFontList(entry, XtDisplay(w),
|
||||
string_return, &dummyFontListForNow);
|
||||
XmFontListFree(dummyFontListForNow);
|
||||
}
|
||||
*need_to_free_string = True;
|
||||
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
/* static */
|
||||
// ftang- i18n issue
|
||||
void
|
||||
XFE_RDFToolbar::docStringSetCB(Widget /* w */,
|
||||
XFE_RDFToolbar::docStringSetCB(Widget w ,
|
||||
XtPointer client_data,
|
||||
XmString * string_return,
|
||||
Boolean * need_to_free_string)
|
||||
{
|
||||
|
||||
ItemCallbackStruct * ttip = (ItemCallbackStruct * )client_data;
|
||||
XFE_RDFToolbar * obj = (XFE_RDFToolbar *) ttip->object;
|
||||
HT_Resource entry = (HT_Resource) ttip->entry;
|
||||
|
||||
void * data=NULL;
|
||||
XmFontList font_list;
|
||||
XmString str = NULL;
|
||||
XmFontList dummyFontListForNow = NULL;
|
||||
|
||||
HT_GetTemplateData(HT_TopNode(HT_GetView(entry)), gNavCenter->buttonStatusbarText, HT_COLUMN_STRING, &data);
|
||||
if (data) {
|
||||
D(printf("Doc string obtained from HT = %s\n", (char *) data););
|
||||
MWContext * context = (obj->getFrame())->getContext();
|
||||
|
||||
INTL_CharSetInfo charSetInfo =
|
||||
LO_GetDocumentCharacterSetInfo(context);
|
||||
|
||||
str = fe_ConvertToXmString((unsigned char *) data,
|
||||
INTL_GetCSIWinCSID(charSetInfo) ,
|
||||
NULL, XmFONT_IS_FONT, &font_list);
|
||||
|
||||
|
||||
*string_return = str;
|
||||
*need_to_free_string = True;
|
||||
XFE_RDFUtils::utf8ToXmStringAndFontList((char*)data, XtDisplay(w),
|
||||
string_return, &dummyFontListForNow);
|
||||
XmFontListFree(dummyFontListForNow);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
// Boolean isContainer = HT_IsContainer(entry);
|
||||
MWContext * context = (obj->getFrame())->getContext();
|
||||
|
||||
*string_return = XFE_RDFUtils::getStringFromResource(context,entry);
|
||||
XFE_RDFUtils::entryToXmStringAndFontList(entry, XtDisplay(w),
|
||||
string_return, &dummyFontListForNow);
|
||||
XmFontListFree(dummyFontListForNow);
|
||||
|
||||
*need_to_free_string = True;
|
||||
}
|
||||
*need_to_free_string = True;
|
||||
}
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
/* static */ void
|
||||
// ftang- i18n issue
|
||||
XFE_RDFToolbar::docStringCB(Widget /* w */,
|
||||
XtPointer client_data,
|
||||
unsigned char reason,
|
||||
|
@ -741,7 +741,7 @@ XFE_RDFTreeView::initCell(HT_Resource node, int row, int column)
|
||||
|
||||
if (column == 0)
|
||||
{
|
||||
xmstr = XFE_RDFUtils::formatItem(node, charset);
|
||||
xmstr = XFE_RDFUtils::formatItem(node);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -300,112 +300,57 @@ XFE_RDFUtils::guessTitle(MWContext * context,
|
||||
// XmString hackery
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
/* static */ XmString
|
||||
XFE_RDFUtils::entryToXmString(HT_Resource entry,
|
||||
INTL_CharSetInfo char_set_info)
|
||||
/* static */ void
|
||||
XFE_RDFUtils::entryToXmStringAndFontList(HT_Resource entry,
|
||||
Display* dpy,
|
||||
XmString* pStr,
|
||||
XmFontList* pFontList)
|
||||
{
|
||||
XP_ASSERT( entry != NULL );
|
||||
char *name = HT_GetNodeName(entry);
|
||||
XFE_RDFUtils::utf8ToXmStringAndFontList(name, dpy, pStr, pFontList);
|
||||
}
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
/* static */ void
|
||||
XFE_RDFUtils::utf8ToXmStringAndFontList(char* utf8str,
|
||||
Display* dpy,
|
||||
XmString* pXmStr,
|
||||
XmFontList* pFontList)
|
||||
{
|
||||
|
||||
XmString result = NULL;
|
||||
XmString tmp;
|
||||
char * psz;
|
||||
fe_Font fe_font;
|
||||
XmFontList dontFreeFontList;
|
||||
|
||||
int16 charset = INTL_GetCSIWinCSID(char_set_info);
|
||||
// need to perform mid truncation here
|
||||
// need to replace with UTF8 to XmString conversion and get FontList here
|
||||
|
||||
tmp = XFE_RDFUtils::formatItem(entry,charset);
|
||||
|
||||
// Mid truncate the name
|
||||
if (XmStringGetLtoR(tmp,XmSTRING_DEFAULT_CHARSET,&psz))
|
||||
{
|
||||
XmStringFree(tmp);
|
||||
fe_font = fe_LoadUnicodeFont(NULL, "", 0, 2, 0,0,0, 0,dpy);
|
||||
|
||||
INTL_MidTruncateString(charset, psz, psz, 40);
|
||||
|
||||
result = XmStringCreateLtoR(psz,XmSTRING_DEFAULT_CHARSET);
|
||||
|
||||
if (psz)
|
||||
{
|
||||
XtFree(psz);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
result = tmp;
|
||||
}
|
||||
|
||||
return result;
|
||||
*pXmStr = fe_ConvertToXmString((unsigned char*) utf8str, CS_UTF8, fe_font,
|
||||
XmFONT_IS_FONT, &dontFreeFontList);
|
||||
*pFontList = XmFontListCopy(dontFreeFontList);
|
||||
}
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
/* static */ XmString
|
||||
XFE_RDFUtils::formatItem(HT_Resource entry, int16 charset)
|
||||
XFE_RDFUtils::formatItem(HT_Resource entry)
|
||||
{
|
||||
XmString xmstring;
|
||||
char buf [1024];
|
||||
char *name = HT_GetNodeName(entry);
|
||||
char *url = HT_GetNodeURL(entry);
|
||||
XmFontList font_list;
|
||||
char *data;
|
||||
|
||||
if (HT_IsSeparator(entry))
|
||||
{
|
||||
strcpy (buf, "-------------------------");
|
||||
}
|
||||
else if (name || url)
|
||||
{
|
||||
fe_FormatDocTitle (name, url, buf, 1024);
|
||||
}
|
||||
data = "-------------------------";
|
||||
else
|
||||
data = HT_GetNodeName(entry);
|
||||
|
||||
if (!*buf)
|
||||
{
|
||||
xmstring = 0;
|
||||
}
|
||||
else if (name || url)
|
||||
{
|
||||
xmstring = fe_ConvertToXmString ((unsigned char *) buf, charset,
|
||||
NULL, XmFONT_IS_FONT, &font_list);
|
||||
}
|
||||
else
|
||||
{
|
||||
char *loc;
|
||||
|
||||
loc = (char *) fe_ConvertToLocaleEncoding (charset,
|
||||
(unsigned char *) buf);
|
||||
|
||||
xmstring = XmStringSegmentCreate (loc, "HEADING",
|
||||
XmSTRING_DIRECTION_L_TO_R, False);
|
||||
if (loc != buf)
|
||||
{
|
||||
XP_FREE(loc);
|
||||
}
|
||||
}
|
||||
|
||||
if (!xmstring)
|
||||
{
|
||||
xmstring = XmStringCreateLtoR ("", XmFONTLIST_DEFAULT_TAG);
|
||||
}
|
||||
// need to replace with UTF8 to XmString conversion and get FontList here
|
||||
|
||||
xmstring = XmStringCreateLtoR(data ,XmSTRING_DEFAULT_CHARSET);
|
||||
|
||||
return (xmstring);
|
||||
}
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
/* static */ XmString
|
||||
XFE_RDFUtils::getStringFromResource(MWContext * context,
|
||||
HT_Resource entry)
|
||||
{
|
||||
XmString xmname;
|
||||
|
||||
XP_ASSERT( context != NULL );
|
||||
XP_ASSERT( entry != NULL );
|
||||
|
||||
INTL_CharSetInfo charSetInfo = LO_GetDocumentCharacterSetInfo(context);
|
||||
|
||||
// Create am XmString from the entry
|
||||
xmname = XFE_RDFUtils::entryToXmString(entry, charSetInfo);
|
||||
|
||||
return xmname;
|
||||
}
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
/* static */ void
|
||||
XFE_RDFUtils::setItemLabelString(MWContext * context,
|
||||
Widget item,
|
||||
XFE_RDFUtils::setItemLabelString(Widget item,
|
||||
HT_Resource entry)
|
||||
{
|
||||
XP_ASSERT( XfeIsAlive(item) );
|
||||
@ -416,16 +361,18 @@ XFE_RDFUtils::setItemLabelString(MWContext * context,
|
||||
XmIsLabelGadget(item) ||
|
||||
XfeIsLabel(item) );
|
||||
|
||||
INTL_CharSetInfo charSetInfo = LO_GetDocumentCharacterSetInfo(context);
|
||||
|
||||
// Create am XmString from the entry
|
||||
XmString xmname = XFE_RDFUtils::entryToXmString(entry,charSetInfo);
|
||||
XmString xmname;
|
||||
XmFontList fontlist = NULL;
|
||||
XFE_RDFUtils::entryToXmStringAndFontList(entry, XtDisplay(item), &xmname, &fontlist);
|
||||
|
||||
if (xmname != NULL)
|
||||
{
|
||||
XtVaSetValues(item,XmNlabelString,xmname,NULL);
|
||||
XtVaSetValues(item,XmNlabelString,xmname,XmNfontList, fontlist, NULL);
|
||||
|
||||
XmStringFree(xmname);
|
||||
XmFontListFree(fontlist);
|
||||
}
|
||||
}
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
@ -91,21 +91,21 @@ public:
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
|
||||
// Format item blah blah blah
|
||||
static XmString formatItem (HT_Resource entry,
|
||||
int16 charset);
|
||||
static XmString formatItem (HT_Resource entry);
|
||||
|
||||
// Obtain an internationallized XmString from an entry
|
||||
static XmString entryToXmString (HT_Resource entry,
|
||||
INTL_CharSetInfo char_set_info);
|
||||
|
||||
|
||||
static XmString getStringFromResource (MWContext * context,
|
||||
HT_Resource entry);
|
||||
static void entryToXmStringAndFontList (HT_Resource entry,
|
||||
Display* dsp,
|
||||
XmString* pStr,
|
||||
XmFontList* pFontList);
|
||||
static void utf8ToXmStringAndFontList (char* utf8str,
|
||||
Display* dsp,
|
||||
XmString* pStr,
|
||||
XmFontList* pFontList);
|
||||
|
||||
|
||||
// Set the XmNlabelString for a widget
|
||||
static void setItemLabelString (MWContext * context,
|
||||
Widget item,
|
||||
static void setItemLabelString (Widget item,
|
||||
HT_Resource entry);
|
||||
|
||||
|
||||
|
@ -125,8 +125,7 @@ XFE_ToolbarButton::configure()
|
||||
// XtVaSetValues(m_widget,XmNforceDimensionToMax,False,NULL);
|
||||
|
||||
// Set the item's label
|
||||
XFE_RDFUtils::setItemLabelString(getAncestorContext(),
|
||||
m_widget,
|
||||
XFE_RDFUtils::setItemLabelString( m_widget,
|
||||
getHtResource());
|
||||
|
||||
// Set the item's style and layout
|
||||
|
@ -220,40 +220,29 @@ XFE_ToolbarItem::tipStringObtain(XmString * stringReturn,
|
||||
Boolean * needToFreeString)
|
||||
{
|
||||
HT_Resource entry = getHtResource();
|
||||
MWContext * context = getAncestorContext();
|
||||
|
||||
XP_ASSERT( entry != NULL );
|
||||
XP_ASSERT( context != NULL );
|
||||
|
||||
void * data = NULL;
|
||||
XmFontList font_list = NULL;
|
||||
XmString xmstr = NULL;
|
||||
|
||||
HT_GetTemplateData(HT_TopNode(HT_GetView(entry)),
|
||||
gNavCenter->buttonTooltipText,
|
||||
HT_COLUMN_STRING,
|
||||
&data);
|
||||
|
||||
XmFontList dummyFontListForNow = NULL;
|
||||
if (data != NULL)
|
||||
{
|
||||
MWContext * context = getAncestorContext();
|
||||
|
||||
INTL_CharSetInfo charSetInfo = LO_GetDocumentCharacterSetInfo(context);
|
||||
|
||||
xmstr = fe_ConvertToXmString((unsigned char *) data,
|
||||
INTL_GetCSIWinCSID(charSetInfo) ,
|
||||
NULL,
|
||||
XmFONT_IS_FONT,
|
||||
&font_list);
|
||||
|
||||
*stringReturn = xmstr;
|
||||
*needToFreeString = True;
|
||||
{
|
||||
XFE_RDFUtils::utf8ToXmStringAndFontList((char*)data, XtDisplay(m_parent),
|
||||
stringReturn, &dummyFontListForNow);
|
||||
}
|
||||
else
|
||||
{
|
||||
*stringReturn = XFE_RDFUtils::getStringFromResource(context,entry);
|
||||
*needToFreeString = True;
|
||||
XFE_RDFUtils::entryToXmStringAndFontList(entry, XtDisplay(m_parent),
|
||||
stringReturn, &dummyFontListForNow);
|
||||
}
|
||||
XmFontListFree(dummyFontListForNow);
|
||||
*needToFreeString = True;
|
||||
}
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
/* virtual */ void
|
||||
@ -261,40 +250,28 @@ XFE_ToolbarItem::docStringObtain(XmString * stringReturn,
|
||||
Boolean * needToFreeString)
|
||||
{
|
||||
HT_Resource entry = getHtResource();
|
||||
MWContext * context = getAncestorContext();
|
||||
|
||||
XP_ASSERT( entry != NULL );
|
||||
XP_ASSERT( context != NULL );
|
||||
|
||||
void * data = NULL;
|
||||
XmFontList font_list = NULL;
|
||||
XmString xmstr = NULL;
|
||||
|
||||
HT_GetTemplateData(HT_TopNode(HT_GetView(entry)),
|
||||
gNavCenter->buttonStatusbarText,
|
||||
HT_COLUMN_STRING,
|
||||
&data);
|
||||
|
||||
XmFontList dummyFontListForNow = NULL;
|
||||
if (data != NULL)
|
||||
{
|
||||
MWContext * context = getAncestorContext();
|
||||
|
||||
INTL_CharSetInfo charSetInfo = LO_GetDocumentCharacterSetInfo(context);
|
||||
|
||||
xmstr = fe_ConvertToXmString((unsigned char *) data,
|
||||
INTL_GetCSIWinCSID(charSetInfo) ,
|
||||
NULL,
|
||||
XmFONT_IS_FONT,
|
||||
&font_list);
|
||||
|
||||
*stringReturn = xmstr;
|
||||
*needToFreeString = True;
|
||||
{
|
||||
XFE_RDFUtils::utf8ToXmStringAndFontList((char*)data, XtDisplay(m_parent),
|
||||
stringReturn, &dummyFontListForNow);
|
||||
}
|
||||
else
|
||||
{
|
||||
*stringReturn = XFE_RDFUtils::getStringFromResource(context,entry);
|
||||
*needToFreeString = True;
|
||||
XFE_RDFUtils::entryToXmStringAndFontList(entry, XtDisplay(m_parent),
|
||||
stringReturn, &dummyFontListForNow);
|
||||
}
|
||||
XmFontListFree(dummyFontListForNow);
|
||||
|
||||
}
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
/* virtual */ void
|
||||
|
Loading…
x
Reference in New Issue
Block a user