5881
GTK+1で組まれたプログラムをGTK+2に移行しようとしています。  
元のプログラムの中で、フォント選択ダイアログをカスタマイズして表示している部分があるのですが、同様の事はGTK+2でも可能でしょうか？

カスタマイズの内容としては、例えばフォントサイズのリスト部分を自前のリストに置換えたり、他一部部品を非表示にしたりというような事です。  
元のプログラムではダイアログを構成する部品をGtkFontSelectionのmain_vboxメンバから辿っていじれたのですが、GTK+2でどのようにすれば実現できるのかまだ方法を見つけられていません。

ヒントでも良いのでアドバイスいただけると助かります。
CC BY-SA 3.0
2015-02-03T11:10:25.093
5870
2015-02-03T13:36:17.947
2015-02-03T11:51:58.343
49
8063
question
c gtk
GTK+2でのダイアログのカスタマイズ方法
例えば以下のようにすると、family list を非表示にできます。

```

    #include <gtk/gtk.h>
    
    static void print_hier(int indent, GtkWidget *w)
    {
        int i;
        for (i = 0; i < indent * 2; i++)
            putchar(' ');
        printf("%p %s\n", w, g_type_name(((GTypeInstance *)w)->g_class->g_type));
        if (GTK_IS_CONTAINER(w)) {
            GList *children = gtk_container_get_children(GTK_CONTAINER(w));
            GList *p;
            for (p = children; p != NULL; p = g_list_next(p))
                print_hier(indent + 1, p->data);
        }
    }
    
    static void hide_family_list(GtkWidget *sel)
    {
        print_hier(0, sel);
    
        GtkWidget *tbl = gtk_container_get_children(GTK_CONTAINER(sel))->data;
        GtkWidget *scrl = gtk_container_get_children(GTK_CONTAINER(tbl))->next->next->data;
        gtk_widget_hide(scrl);
    }
    
    int main(int argc, char **argv)
    {
        gtk_init(&argc, &argv);
    
        GtkWidget *dialog = gtk_font_selection_dialog_new("font selection");
    
        GtkWidget *fontsel = gtk_font_selection_dialog_get_font_selection(GTK_FONT_SELECTION_DIALOG(dialog));
        hide_family_list(fontsel);
    
        gtk_dialog_run(GTK_DIALOG(dialog));
    
        return 0;
    }
    
```

widget の階層構造を表示する print_hier() を付けておきました。  
いじる際にはこの出力が参考になると思います。
CC BY-SA 3.0
2015-02-03T13:36:17.947
5881
2015-02-03T13:36:17.947
5288
5870
answer