X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=gtk%2Fxoptions.c;h=67675ffbb8c5d6a7b2ab6b74212693ab93db1635;hb=8cadd120c307bb1049f6d08d9ae23f67432bd038;hp=6c7784161ee27857392d7a4bcb9473fd60bd0f76;hpb=336aafa3deed7607b7e4e3f40852fa42bee8104f;p=xboard.git diff --git a/gtk/xoptions.c b/gtk/xoptions.c index 6c77841..67675ff 100644 --- a/gtk/xoptions.c +++ b/gtk/xoptions.c @@ -51,7 +51,7 @@ extern char *getenv(); #include #include #include -#ifdef __APPLE__ +#ifdef OSXAPP # include #endif @@ -138,16 +138,6 @@ static Arg formArgs[] = { }; #endif -void -MarkMenuItem (char *menuRef, int state) -{ - MenuItem *item = MenuNameToItem(menuRef); - - if(item && item->handle) { - ((GtkCheckMenuItem *) (item->handle))->active = state; - } -} - void GetWidgetTextGTK(GtkWidget *w, char **buf) { GtkTextIter start; @@ -260,6 +250,15 @@ SetDialogTitle (DialogClass dlg, char *title) } void +SetWidgetFont (GtkWidget *w, char **s) +{ + PangoFontDescription *pfd; + if (!s || !*s || !**s) return; // uses no font, no font spec or empty font spec + pfd = pango_font_description_from_string(*s); + gtk_widget_modify_font(w, pfd); +} + +void SetListBoxItem (GtkListStore *store, int n, char *msg) { GtkTreeIter iter; @@ -426,7 +425,7 @@ CreateMenuPopup (Option *opt, int n, int def) { char *msg = mb[i].string; if(!msg) break; -#ifdef __APPLE__ +#ifdef OSXAPP if(!strcmp(msg, "Quit ")) continue; // Quit item will appear automatically in App menu if(!strcmp(msg, "About XBoard")) msg = "About"; // 'XBoard' will be appended automatically when moved to App menu 1st item #endif @@ -444,7 +443,7 @@ CreateMenuPopup (Option *opt, int n, int def) GdkModifierType accelerator_mods; gtk_accelerator_parse(mb[i].accel, &accelerator_key, &accelerator_mods); -#ifdef __APPLE__ +#ifdef OSXAPP if(accelerator_mods & GDK_CONTROL_MASK) { // in OSX use Meta where Linux uses Ctrl accelerator_mods &= ~GDK_CONTROL_MASK; // clear Ctrl flag accelerator_mods |= GDK_META_MASK; // set Meta flag @@ -558,7 +557,7 @@ AppendColorized (Option *opt, char *s, int count) static GtkTextTag *fgTags[8], *bgTags[8], *font, *bold, *normal, *attr = NULL; if(!font) { - font = gtk_text_buffer_create_tag(opt->handle, NULL, "font", "Monospace normal", NULL); + font = gtk_text_buffer_create_tag(opt->handle, NULL, "font", appData.icsFont, NULL); gtk_widget_modify_base(GTK_WIDGET(opt->textValue), GTK_STATE_NORMAL, &backgroundColor); } @@ -870,6 +869,7 @@ GraphEventProc(GtkWidget *widget, GdkEvent *event, gpointer gdata) GdkEventExpose *eevent = (GdkEventExpose *) event; GdkEventButton *bevent = (GdkEventButton *) event; GdkEventMotion *mevent = (GdkEventMotion *) event; + GdkEventScroll *sevent = (GdkEventScroll *) event; GtkAllocation a; cairo_t *cr; @@ -926,6 +926,10 @@ GraphEventProc(GtkWidget *widget, GdkEvent *event, gpointer gdata) cairo_destroy(cr); default: return; + case GDK_SCROLL: + if(sevent->direction == GDK_SCROLL_UP) button = 4; + if(sevent->direction == GDK_SCROLL_DOWN) button = 5; + break; case GDK_MOTION_NOTIFY: f = 0; w = mevent->x; h = mevent->y; @@ -1344,6 +1348,7 @@ if(appData.debugMode) printf("n=%d, h=%d, w=%d\n",n,height,width); /* no label so let textview occupy all columns */ Pack(hbox, table, sw, left, left+r, top, GTK_EXPAND); } + SetWidgetFont(textview, option[i].font); if ( *(char**)option[i].target != NULL ) gtk_text_buffer_set_text (textbuffer, *(char**)option[i].target, -1); else @@ -1410,6 +1415,7 @@ if(appData.debugMode) printf("n=%d, h=%d, w=%d\n",n,height,width); option[i].handle = (void *) (label = gtk_label_new(option[i].name)); /* Left Justify */ gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); + SetWidgetFont(label, option[i].font); if(option[i].min & BORDER) { GtkWidget *frame = gtk_frame_new(NULL); gtk_container_add(GTK_CONTAINER(frame), label); @@ -1424,11 +1430,12 @@ if(appData.debugMode) printf("n=%d, h=%d, w=%d\n",n,height,width); g_signal_connect(label, "button-press-event", G_CALLBACK(MemoEvent), (gpointer) &option[i]); gtk_widget_set_sensitive(label, TRUE); } - Pack(hbox, table, label, left, left+2, top, 0); + Pack(hbox, table, label, left, left+3, top, 0); break; case SaveButton: case Button: button = gtk_button_new_with_label (option[i].name); + SetWidgetFont(gtk_bin_get_child(GTK_BIN(button)), option[i].font); /* set button color on view board dialog */ if(option[i].choice && ((char*)option[i].choice)[0] == '#' && !currentCps) { @@ -1438,10 +1445,14 @@ if(appData.debugMode) printf("n=%d, h=%d, w=%d\n",n,height,width); /* set button color on new variant dialog */ if(option[i].textValue) { + static char *b = "Bold"; gdk_color_parse( option[i].textValue, &color ); gtk_widget_modify_bg ( GTK_WIDGET(button), GTK_STATE_NORMAL, &color ); gtk_widget_set_sensitive(button, option[i].value >= 0 && (appData.noChessProgram || strstr(first.variants, VariantName(option[i].value)))); + if(engineVariant[100] ? !strcmp(engineVariant+100, option[i].name) : + gameInfo.variant ? option[i].value == gameInfo.variant : !strcmp(option[i].name, "Normal")) + SetWidgetFont(gtk_bin_get_child(GTK_BIN(button)), &b); } Pack(hbox, table, button, left, left+1, top, 0); @@ -1490,6 +1501,7 @@ if(appData.debugMode) printf("n=%d, h=%d, w=%d\n",n,height,width); GtkListStore *store; option[i].handle = (void *) (list = gtk_tree_view_new()); + SetWidgetFont(option[i].handle, option[i].font); gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(list), FALSE); renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes("List Items", renderer, "text", 0, NULL); @@ -1517,7 +1529,7 @@ if(appData.debugMode) printf("n=%d, h=%d, w=%d\n",n,height,width); break; case Graph: option[i].handle = (void*) (graph = gtk_drawing_area_new()); -// gtk_widget_set_size_request(graph, option[i].max, option[i].value); + gtk_widget_set_size_request(graph, option[i].max, option[i].value); if(0){ GtkAllocation a; a.x = 0; a.y = 0; a.width = option[i].max, a.height = option[i].value; gtk_widget_set_allocation(graph, &a); @@ -1527,6 +1539,7 @@ if(appData.debugMode) printf("n=%d, h=%d, w=%d\n",n,height,width); g_signal_connect (graph, "button-press-event", G_CALLBACK (GraphEventProc), (gpointer) &option[i]); g_signal_connect (graph, "button-release-event", G_CALLBACK (GraphEventProc), (gpointer) &option[i]); g_signal_connect (graph, "motion-notify-event", G_CALLBACK (GraphEventProc), (gpointer) &option[i]); + g_signal_connect (graph, "scroll-event", G_CALLBACK (GraphEventProc), (gpointer) &option[i]); if(option[i].min & FIX_H) { // logo GtkWidget *frame = gtk_aspect_frame_new(NULL, 0.5, 0.5, option[i].max/(float)option[i].value, FALSE); gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_NONE); @@ -1549,7 +1562,7 @@ if(appData.debugMode) printf("n=%d, h=%d, w=%d\n",n,height,width); case DropDown: top--; msg = _(option[i].name); // write name on the menu button -#ifndef __APPLE__ +#ifndef OSXAPP if(tinyLayout) { strcpy(def, msg); def[tinyLayout] = NULLCHAR; msg = def; } // clip menu text to keep menu bar small #endif // XtSetArg(args[j], XtNmenuName, XtNewString(option[i].name)); j++; @@ -1577,7 +1590,7 @@ if(appData.debugMode) printf("n=%d, h=%d, w=%d\n",n,height,width); break; case BarEnd: top--; -#ifndef __APPLE__ +#ifndef OSXAPP gtk_table_attach(GTK_TABLE(table), menuBar, left, left+r, top, top+1, GTK_FILL | GTK_EXPAND, GTK_FILL, 2, 1); if(option[i].target) ((ButtonCallback*)option[i].target)(boxStart); // callback that can make sizing decisions @@ -1614,6 +1627,11 @@ if(appData.debugMode) printf("n=%d, h=%d, w=%d\n",n,height,width); } gtk_table_resize(GTK_TABLE(table), top+1, r); + if(dlgNr == BoardWindow && appData.fixedSize) { // inhibit sizing + GtkWidget *h = gtk_hbox_new(FALSE, 0); + gtk_box_pack_start (GTK_BOX (h), table, TRUE, FALSE, 2); + table = h; + } if(pane) gtk_box_pack_start (GTK_BOX (pane), table, expandable, TRUE, 0); else @@ -1653,6 +1671,9 @@ if(appData.debugMode) printf("n=%d, h=%d, w=%d\n",n,height,width); gtk_window_resize(GTK_WINDOW(dialog), wp[dlgNr]->width, wp[dlgNr]->height); } + for(i=0; option[i].type != EndMark; i++) if(option[i].type == Graph) + gtk_widget_set_size_request(option[i].handle, -1, -1); // remove size requests after realization, so user can shrink + return 1; // tells caller he must do initialization (e.g. add specific event handlers) }