Mercurial > emacs
diff src/xmenu.c @ 107827:aa85632b7860
Use XFT in Lucid dialogs if available.
* xmenu.c (apply_systemfont_to_dialog): New.
(create_and_show_dialog): Call apply_systemfont_to_dialog if HAVE_XFT.
* lwlib-Xaw.c (widget_xft_data): New for Xft data.
(fill_xft_data, openFont, get_text_width_and_height)
(draw_text, set_text, find_xft_data, command_press)
(command_reset): New functions.
(xaw_update_one_widget): Call set_text for dialog and buttons
if HAVE_XFT. Also set internalHeight for buttons.
(xaw_destroy_instance): Free all Xft related data.
(button_actions, buttonTrans): New structures.
(make_dialog): Call XtAppAddActions for button_actions.
Find xft font to use and call fill_xft_data for widgets.
(xaw_create_dialog): Pass instance parameter to make_dialog.
* lwlib-int.h (_widget_instance): Add Xft data if HAVE_XFT.
Override translations for buttons. If depth is 16 or more, tell
Xaw3d to not be nice to colormap.
Remove separator widget, use XtNhorizDistance on first right button
instead.
* xresources.texi (Lucid Resources): Mention faceName for dialogs.
author | Jan D. <jan.h.d@swipnet.se> |
---|---|
date | Sun, 11 Apr 2010 20:25:09 +0200 |
parents | 24c4451bcaf7 |
children | faaa7a6517a8 |
line wrap: on
line diff
--- a/src/xmenu.c Sun Apr 11 12:15:09 2010 -0400 +++ b/src/xmenu.c Sun Apr 11 20:25:09 2010 +0200 @@ -954,6 +954,19 @@ #ifdef USE_LUCID static void +apply_systemfont_to_dialog (w) + Widget w; +{ + const char *fn = xsettings_get_system_normal_font (); + if (fn) + { + XrmDatabase db = XtDatabase (XtDisplay (w)); + if (db) + XrmPutStringResource (&db, "*dialog.faceName", fn); + } +} + +static void apply_systemfont_to_menu (w) Widget w; { @@ -964,15 +977,15 @@ if (XtIsShell (w)) /* popup menu */ { - Widget *childs[1]; + Widget *childs = NULL; int num = 0; XtVaGetValues (w, XtNnumChildren, &num, NULL); if (num != 1) return; /* Should only be one. */ childs[0] = 0; - XtVaGetValues (w, XtNchildren, childs, NULL); - if (childs[0] && *childs[0]) w = *childs[0]; + XtVaGetValues (w, XtNchildren, &childs, NULL); + if (childs && *childs) w = *childs; } /* Only use system font if the default is used for the menu. */ @@ -2047,11 +2060,13 @@ abort(); dialog_id = widget_id_tick++; +#ifdef HAVE_XFT + apply_systemfont_to_dialog (f->output_data.x->widget); +#endif lw_create_widget (first_wv->name, "dialog", dialog_id, first_wv, f->output_data.x->widget, 1, 0, dialog_selection_callback, 0, 0); lw_modify_all_widgets (dialog_id, first_wv->contents, True); - /* Display the dialog box. */ lw_pop_up_all_widgets (dialog_id); popup_activated_flag = 1;