From 80014bacf4f997f8976f70d9f1dc556833765363 Mon Sep 17 00:00:00 2001 From: "Jan D." Date: Sun, 11 Apr 2010 20:25:09 +0200 Subject: 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. --- src/xmenu.c | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) (limited to 'src/xmenu.c') diff --git a/src/xmenu.c b/src/xmenu.c index de2f4eb6815..c8067a47deb 100644 --- a/src/xmenu.c +++ b/src/xmenu.c @@ -953,6 +953,19 @@ update_frame_menubar (f) } #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 @@ apply_systemfont_to_menu (w) 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 @@ create_and_show_dialog (f, first_wv) 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; -- cgit v1.2.1