From: H.G.Muller Date: Fri, 1 Apr 2016 14:34:15 +0000 (+0200) Subject: Use the official GTK font selector X-Git-Url: http://winboard.nl/cgi-bin?p=xboard.git;a=commitdiff_plain;h=169e15efffbcdb9d4fb55adfa6bce6cca208e7b5;hp=6f3c9bba464d20c0abff140f3f7a6ccd0291253b Use the official GTK font selector A gtk_font_button is now put in the Fonts dialog to allow selection of a general font. The individual window fonts got a button marked * to assign this font to them. To implement the selector button some kludgy code had to be added in the generic dialog constructor, to recognize these Button Options by name, and use the special GTK widget to implement them, or assign an unusual callback. --- diff --git a/dialogs.c b/dialogs.c index fddc8fd..1e3cc1a 100644 --- a/dialogs.c +++ b/dialogs.c @@ -1649,37 +1649,45 @@ static Option fontOptions[] = { { 2, SAME_ROW, 0, NULL, (void*) &AdjustFont, NULL, NULL, Button, N_("-") }, { 3, SAME_ROW, 0, NULL, (void*) &AdjustFont, NULL, NULL, Button, N_("B") }, { 4, SAME_ROW, 0, NULL, (void*) &AdjustFont, NULL, NULL, Button, N_("I") }, + { 666, SAME_ROW, 0, NULL, (void*) &AdjustFont, NULL, NULL, Button, N_("*") }, { 0, 60, 70, NULL, (void*) &appData.font, NULL, NULL, TextBox, N_("Message (above board):") }, { 1, SAME_ROW, 0, NULL, (void*) &AdjustFont, NULL, NULL, Button, N_("+") }, { 2, SAME_ROW, 0, NULL, (void*) &AdjustFont, NULL, NULL, Button, N_("-") }, { 3, SAME_ROW, 0, NULL, (void*) &AdjustFont, NULL, NULL, Button, N_("B") }, { 4, SAME_ROW, 0, NULL, (void*) &AdjustFont, NULL, NULL, Button, N_("I") }, + { 666, SAME_ROW, 0, NULL, (void*) &AdjustFont, NULL, NULL, Button, N_("*") }, { 0, 60, 70, NULL, (void*) &appData.icsFont, NULL, NULL, TextBox, N_("ICS Chat/Console:") }, { 1, SAME_ROW, 0, NULL, (void*) &AdjustFont, NULL, NULL, Button, N_("+") }, { 2, SAME_ROW, 0, NULL, (void*) &AdjustFont, NULL, NULL, Button, N_("-") }, { 3, SAME_ROW, 0, NULL, (void*) &AdjustFont, NULL, NULL, Button, N_("B") }, { 4, SAME_ROW, 0, NULL, (void*) &AdjustFont, NULL, NULL, Button, N_("I") }, + { 666, SAME_ROW, 0, NULL, (void*) &AdjustFont, NULL, NULL, Button, N_("*") }, { 0, 60, 70, NULL, (void*) &appData.tagsFont, NULL, NULL, TextBox, N_("Edit tags / book / engine list:") }, { 1, SAME_ROW, 0, NULL, (void*) &AdjustFont, NULL, NULL, Button, N_("+") }, { 2, SAME_ROW, 0, NULL, (void*) &AdjustFont, NULL, NULL, Button, N_("-") }, { 3, SAME_ROW, 0, NULL, (void*) &AdjustFont, NULL, NULL, Button, N_("B") }, { 4, SAME_ROW, 0, NULL, (void*) &AdjustFont, NULL, NULL, Button, N_("I") }, + { 666, SAME_ROW, 0, NULL, (void*) &AdjustFont, NULL, NULL, Button, N_("*") }, { 0, 60, 70, NULL, (void*) &appData.commentFont, NULL, NULL, TextBox, N_("Edit comments:") }, { 1, SAME_ROW, 0, NULL, (void*) &AdjustFont, NULL, NULL, Button, N_("+") }, { 2, SAME_ROW, 0, NULL, (void*) &AdjustFont, NULL, NULL, Button, N_("-") }, { 3, SAME_ROW, 0, NULL, (void*) &AdjustFont, NULL, NULL, Button, N_("B") }, { 4, SAME_ROW, 0, NULL, (void*) &AdjustFont, NULL, NULL, Button, N_("I") }, + { 666, SAME_ROW, 0, NULL, (void*) &AdjustFont, NULL, NULL, Button, N_("*") }, { 0, 60, 70, NULL, (void*) &appData.historyFont, NULL, NULL, TextBox, N_("Move history / Engine Output:") }, { 1, SAME_ROW, 0, NULL, (void*) &AdjustFont, NULL, NULL, Button, N_("+") }, { 2, SAME_ROW, 0, NULL, (void*) &AdjustFont, NULL, NULL, Button, N_("-") }, { 3, SAME_ROW, 0, NULL, (void*) &AdjustFont, NULL, NULL, Button, N_("B") }, { 4, SAME_ROW, 0, NULL, (void*) &AdjustFont, NULL, NULL, Button, N_("I") }, + { 666, SAME_ROW, 0, NULL, (void*) &AdjustFont, NULL, NULL, Button, N_("*") }, { 0, 60, 70, NULL, (void*) &appData.gameListFont, NULL, NULL, TextBox, N_("Game list:") }, { 1, SAME_ROW, 0, NULL, (void*) &AdjustFont, NULL, NULL, Button, N_("+") }, { 2, SAME_ROW, 0, NULL, (void*) &AdjustFont, NULL, NULL, Button, N_("-") }, { 3, SAME_ROW, 0, NULL, (void*) &AdjustFont, NULL, NULL, Button, N_("B") }, { 4, SAME_ROW, 0, NULL, (void*) &AdjustFont, NULL, NULL, Button, N_("I") }, - { 0, 0, 0, NULL, NULL, NULL, NULL, Label, N_("\nGeneric type-face names are Sans, Monospace and Serif") }, + { 666, SAME_ROW, 0, NULL, (void*) &AdjustFont, NULL, NULL, Button, N_("*") }, + { 0, 0, 0, NULL, NULL, NULL, NULL, Label, N_("\nThe * buttons will set the font to the one selected below:") }, + { 0, 0, 0, NULL, NULL, NULL, NULL, Button, "fontsel" }, { 0, 0, 0, NULL, (void*) &FontsOK, "", NULL, EndMark , "" } }; @@ -1734,7 +1742,7 @@ FontsProc () int i; if(strstr(appData.font, "-*-")) { DisplayNote(_("This only works in the GTK build")); return; } GenericPopUp(fontOptions, _("Fonts"), TransientDlg, BoardWindow, MODAL, 0); - for(i=0; i<6; i++) ApplyFont(&fontOptions[5*i], *(char**)fontOptions[5*i].target); + for(i=0; i<6; i++) ApplyFont(&fontOptions[6*i], *(char**)fontOptions[6*i].target); } //------------------------------------------------------ Time Control ----------------------------------- diff --git a/gtk/xoptions.c b/gtk/xoptions.c index 9dbb7ec..c643d64 100644 --- a/gtk/xoptions.c +++ b/gtk/xoptions.c @@ -285,6 +285,17 @@ ApplyFont (Option *opt, char *font) if(w && font) SetWidgetFont(w, &font); } +GtkWidget *fbutton; + +void +FontCallback (GtkWidget *widget, gpointer gdata) +{ + Option *opt = (Option *) gdata; + gchar *p = (char *) gtk_font_button_get_font_name(GTK_FONT_BUTTON(fbutton)); + SetWidgetText(opt, p, TransientDlg); + ApplyFont(opt, p); +} + void SetListBoxItem (GtkListStore *store, int n, char *msg) { @@ -1520,6 +1531,11 @@ if(appData.debugMode) printf("n=%d, h=%d, w=%d\n",n,height,width); break; case SaveButton: case Button: + if(!strcmp(option[i].name, "fontsel")) { + option[i].handle = (void *) (fbutton = gtk_font_button_new()); + Pack(hbox, table, fbutton, left, left+r, top, 0); + break; + } button = gtk_button_new_with_label (_(option[i].name)); SetWidgetFont(gtk_bin_get_child(GTK_BIN(button)), option[i].font); @@ -1544,6 +1560,9 @@ if(appData.debugMode) printf("n=%d, h=%d, w=%d\n",n,height,width); } Pack(hbox, table, button, left, left+1, top, 0); + if(option[i].value == 666 && !strcmp(option[i].name, "*")) // font-assignment buttons + g_signal_connect (button, "clicked", G_CALLBACK (FontCallback), (gpointer) &option[i-5]); + else g_signal_connect (button, "clicked", G_CALLBACK (GenericCallback), (gpointer)(intptr_t) i + (dlgNr<<16)); g_signal_connect(button, "button-press-event", G_CALLBACK (HelpEvent), (gpointer) option[i].name ); option[i].handle = (void*)button;