aboutsummaryrefslogtreecommitdiffstats
path: root/src/xmenu.c
diff options
context:
space:
mode:
authorJan Djärv2010-04-11 20:25:09 +0200
committerJan Djärv2010-04-11 20:25:09 +0200
commit1ecb2d3f03cc83ce7fa3349458f8cf83c97181f2 (patch)
treebd3902f19cf65c1221dab180493360b0ffe3e873 /src/xmenu.c
parent97e53006f6c56bcbe190c56dadb350759644bfaa (diff)
downloademacs-1ecb2d3f03cc83ce7fa3349458f8cf83c97181f2.tar.gz
emacs-1ecb2d3f03cc83ce7fa3349458f8cf83c97181f2.zip
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.
Diffstat (limited to 'src/xmenu.c')
-rw-r--r--src/xmenu.c23
1 files changed, 19 insertions, 4 deletions
diff --git a/src/xmenu.c b/src/xmenu.c
index de2f4eb6815..c8067a47deb 100644
--- a/src/xmenu.c
+++ b/src/xmenu.c
@@ -954,6 +954,19 @@ update_frame_menubar (f)
954 954
955#ifdef USE_LUCID 955#ifdef USE_LUCID
956static void 956static void
957apply_systemfont_to_dialog (w)
958 Widget w;
959{
960 const char *fn = xsettings_get_system_normal_font ();
961 if (fn)
962 {
963 XrmDatabase db = XtDatabase (XtDisplay (w));
964 if (db)
965 XrmPutStringResource (&db, "*dialog.faceName", fn);
966 }
967}
968
969static void
957apply_systemfont_to_menu (w) 970apply_systemfont_to_menu (w)
958 Widget w; 971 Widget w;
959{ 972{
@@ -964,15 +977,15 @@ apply_systemfont_to_menu (w)
964 977
965 if (XtIsShell (w)) /* popup menu */ 978 if (XtIsShell (w)) /* popup menu */
966 { 979 {
967 Widget *childs[1]; 980 Widget *childs = NULL;
968 int num = 0; 981 int num = 0;
969 982
970 XtVaGetValues (w, XtNnumChildren, &num, NULL); 983 XtVaGetValues (w, XtNnumChildren, &num, NULL);
971 if (num != 1) return; /* Should only be one. */ 984 if (num != 1) return; /* Should only be one. */
972 985
973 childs[0] = 0; 986 childs[0] = 0;
974 XtVaGetValues (w, XtNchildren, childs, NULL); 987 XtVaGetValues (w, XtNchildren, &childs, NULL);
975 if (childs[0] && *childs[0]) w = *childs[0]; 988 if (childs && *childs) w = *childs;
976 } 989 }
977 990
978 /* Only use system font if the default is used for the menu. */ 991 /* Only use system font if the default is used for the menu. */
@@ -2047,11 +2060,13 @@ create_and_show_dialog (f, first_wv)
2047 abort(); 2060 abort();
2048 2061
2049 dialog_id = widget_id_tick++; 2062 dialog_id = widget_id_tick++;
2063#ifdef HAVE_XFT
2064 apply_systemfont_to_dialog (f->output_data.x->widget);
2065#endif
2050 lw_create_widget (first_wv->name, "dialog", dialog_id, first_wv, 2066 lw_create_widget (first_wv->name, "dialog", dialog_id, first_wv,
2051 f->output_data.x->widget, 1, 0, 2067 f->output_data.x->widget, 1, 0,
2052 dialog_selection_callback, 0, 0); 2068 dialog_selection_callback, 0, 0);
2053 lw_modify_all_widgets (dialog_id, first_wv->contents, True); 2069 lw_modify_all_widgets (dialog_id, first_wv->contents, True);
2054
2055 /* Display the dialog box. */ 2070 /* Display the dialog box. */
2056 lw_pop_up_all_widgets (dialog_id); 2071 lw_pop_up_all_widgets (dialog_id);
2057 popup_activated_flag = 1; 2072 popup_activated_flag = 1;