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;