X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=gtk%2Fgtkfontsel.c;h=4c2318c2c0f1e70366b81dda0a23f8eee003211d;hb=10ba4fd066042b4335ae45e7560565872f71ba9b;hp=1171c6eb1a09937a448540c87fe14eeade7f3f87;hpb=74d88d870aea60625b8f1ed522e86faa223ca487;p=~andy%2Fgtk diff --git a/gtk/gtkfontsel.c b/gtk/gtkfontsel.c index 1171c6eb1..4c2318c2c 100644 --- a/gtk/gtkfontsel.c +++ b/gtk/gtkfontsel.c @@ -1453,18 +1453,20 @@ gtk_font_selection_show_available_sizes (GtkFontSelection *fontsel) can_match = TRUE; if (nbitmapped_sizes) - if (fontsel->metric == GTK_FONT_METRIC_POINTS) - { - if (*bitmapped_sizes % 10 != 0) - can_match = FALSE; - bitmap_size = *bitmapped_sizes / 10; - bitmap_size_float = *bitmapped_sizes / 10; - } - else - { - bitmap_size = *bitmapped_sizes; - bitmap_size_float = *bitmapped_sizes; - } + { + if (fontsel->metric == GTK_FONT_METRIC_POINTS) + { + if (*bitmapped_sizes % 10 != 0) + can_match = FALSE; + bitmap_size = *bitmapped_sizes / 10; + bitmap_size_float = *bitmapped_sizes / 10; + } + else + { + bitmap_size = *bitmapped_sizes; + bitmap_size_float = *bitmapped_sizes; + } + } if (can_match && nstandard_sizes && nbitmapped_sizes && *standard_sizes == bitmap_size) @@ -1758,6 +1760,7 @@ gtk_font_selection_load_font (GtkFontSelection *fontsel) { GdkFont *font; gchar *fontname, *label_text; + XFontStruct *xfs; if (fontsel->font) gdk_font_unref (fontsel->font); @@ -1773,7 +1776,22 @@ gtk_font_selection_load_font (GtkFontSelection *fontsel) #ifdef FONTSEL_DEBUG g_message("Loading: %s\n", fontname); #endif +#ifndef GDK_WINDOWING_WIN32 font = gdk_font_load (fontname); + xfs = GDK_FONT_XFONT(font); + if (xfs->min_byte1 != 0 || xfs->max_byte1 != 0) + { + gchar *tmp_name; + + gdk_font_unref (font); + tmp_name = g_strconcat (fontname, ",*", NULL); + font = gdk_fontset_load (tmp_name); + g_free(tmp_name); + } +#else + /* Load as a fontset so that gtkentry uses wide chars for it */ + font = gdk_fontset_load (fontname); +#endif g_free(fontname); if (font) @@ -1920,30 +1938,41 @@ gtk_font_selection_show_font_info (GtkFontSelection *fontsel) #ifdef GDK_WINDOWING_X11 if (fontsel->font) { - font_atom = XInternAtom(GDK_DISPLAY(), "FONT", True); - if (font_atom != None) + font_atom = gdk_atom_intern ("FONT", FALSE); + + if (fontsel->font->type == GDK_FONT_FONTSET) + { + XFontStruct **font_structs; + gint num_fonts; + gchar **font_names; + + num_fonts = XFontsOfFontSet (GDK_FONT_XFONT(fontsel->font), + &font_structs, &font_names); + status = XGetFontProperty(font_structs[0], font_atom, &atom); + } + else { status = XGetFontProperty(GDK_FONT_XFONT(fontsel->font), font_atom, &atom); - if (status == True) + } + + if (status == True) + { + name = gdk_atom_name (atom); + gtk_entry_set_text (GTK_ENTRY (fontsel->actual_font_name), name); + + for (i = 0; i < GTK_XLFD_NUM_FIELDS; i++) { - name = XGetAtomName(GDK_DISPLAY(), atom); - gtk_entry_set_text(GTK_ENTRY(fontsel->actual_font_name), name); - - for (i = 0; i < GTK_XLFD_NUM_FIELDS; i++) - { - field = gtk_font_selection_get_xlfd_field (name, i, - field_buffer); - if (i == XLFD_SLANT) - field = gtk_font_selection_expand_slant_code(field); - else if (i == XLFD_SPACING) - field = gtk_font_selection_expand_spacing_code(field); - gtk_clist_set_text(GTK_CLIST(fontsel->info_clist), i, 2, - field ? field : ""); - } - shown_actual_fields = TRUE; - XFree(name); + field = gtk_font_selection_get_xlfd_field (name, i, field_buffer); + if (i == XLFD_SLANT) + field = gtk_font_selection_expand_slant_code(field); + else if (i == XLFD_SPACING) + field = gtk_font_selection_expand_spacing_code(field); + gtk_clist_set_text(GTK_CLIST(fontsel->info_clist), i, 2, + field ? field : ""); } + shown_actual_fields = TRUE; + g_free (name); } } #elif defined (GDK_WINDOWING_WIN32) @@ -2915,17 +2944,8 @@ gtk_font_selection_get_fonts (void) fontsel_info->nfonts = 0; for (i = 0; i < num_fonts; i++) { -#ifdef FONTSEL_DEBUG - g_message("%s\n", xfontnames[i]); -#endif if (gtk_font_selection_is_xlfd_font_name (xfontnames[i])) gtk_font_selection_insert_font (fontnames, &fontsel_info->nfonts, xfontnames[i]); - else - { -#ifdef FONTSEL_DEBUG - g_warning("Skipping invalid font: %s", xfontnames[i]); -#endif - } }