X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=gtk%2Fxoptions.c;h=d84d425d14cb6626b48df387bbd3c5932e69103f;hb=b43ae6d0c5d6e3f89236153b0f61c908dd86f551;hp=6e029aa8fc2e8e075943905ba721876f38db5ce3;hpb=981710835fb91625593928380d26952642118781;p=xboard.git diff --git a/gtk/xoptions.c b/gtk/xoptions.c index 6e029aa..d84d425 100644 --- a/gtk/xoptions.c +++ b/gtk/xoptions.c @@ -1109,13 +1109,16 @@ void BrowseGTK(GtkWidget *widget, gpointer gdata) GtkFileFilter *gtkfilter_all; int opt_i = (intptr_t) gdata; GtkFileChooserAction fc_action; + char buf[MSG_SIZ]; gtkfilter = gtk_file_filter_new(); gtkfilter_all = gtk_file_filter_new(); - char fileext[MSG_SIZ], *filter = currentOption[opt_i].textValue; + char fileext[MSG_SIZ], *filter = currentOption[opt_i].textValue, *old = NULL; - StartDir(filter, NULL); // change to start directory for this file type + if(currentCps) filter = NULL; else if(currentOption[opt_i].type == PathName && filter) filter = "dir"; + GetWidgetText(¤tOption[opt_i], &old); // start in same directory as current widget contents + StartDir(filter, old); // change to start directory for this file type /* select file or folder depending on option_type */ if (currentOption[opt_i].type == PathName) @@ -1130,13 +1133,19 @@ void BrowseGTK(GtkWidget *widget, gpointer gdata) GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL); + gtk_file_chooser_add_shortcut_folder(GTK_FILE_CHOOSER(dialog), dataDir, NULL); + snprintf(buf, MSG_SIZ, "%s/themes", dataDir); + gtk_file_chooser_add_shortcut_folder(GTK_FILE_CHOOSER(dialog), buf, NULL); + snprintf(buf, MSG_SIZ, "%s/themes/textures", dataDir); + gtk_file_chooser_add_shortcut_folder(GTK_FILE_CHOOSER(dialog), buf, NULL); + /* one filter to show everything */ gtk_file_filter_add_pattern(gtkfilter_all, "*"); gtk_file_filter_set_name (gtkfilter_all, "All Files"); gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog),gtkfilter_all); /* filter for specific filetypes e.g. pgn or fen */ - if (currentOption[opt_i].textValue != NULL) + if (currentOption[opt_i].textValue != NULL && !currentCps) // no filters for engine options! { char *q, *p = currentOption[opt_i].textValue; gtk_file_filter_set_name (gtkfilter, p); @@ -1392,7 +1401,7 @@ if(appData.debugMode) printf("n=%d, h=%d, w=%d\n",n,height,width); GtkAttachOptions x = GTK_FILL; // make sure hbox is always available when we have more options on same row hbox = gtk_hbox_new (option[i].type == Button && option[i].textValue || option[i].type == Graph, 0); - if(!currentCps && option[i].value > 80) x |= GTK_EXPAND; // only vertically extended widgets should size vertically + if(!currentCps && option[i].value > 80 && option[i].type == TextBox) x |= GTK_EXPAND; // only vertically extended widgets should size vertically if (strcmp(option[i].name, "") == 0 || option[i].type == Label || option[i].type == Button) // for Label and Button name is contained inside option gtk_table_attach(GTK_TABLE(table), hbox, left, left+r, top, top+1, GTK_FILL | GTK_EXPAND, x, 2, 1); @@ -1524,12 +1533,12 @@ if(appData.debugMode) printf("n=%d, h=%d, w=%d\n",n,height,width); /* Left Justify */ gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); SetWidgetFont(label, option[i].font); + gtk_widget_set_size_request(label, option[i].max ? option[i].max : -1, -1); if(option[i].min & BORDER) { GtkWidget *frame = gtk_frame_new(NULL); gtk_container_add(GTK_CONTAINER(frame), label); label = frame; } - gtk_widget_set_size_request(label, option[i].max ? option[i].max : -1, -1); if(option[i].target || dlgNr != ErrorDlg && option[i].name) { // allow user to specify event handler for button presses button = gtk_event_box_new(); gtk_container_add(GTK_CONTAINER(button), label); @@ -1549,7 +1558,8 @@ if(appData.debugMode) printf("n=%d, h=%d, w=%d\n",n,height,width); Pack(hbox, table, fbutton, left, left+r, top, 0); break; } - if(!strcmp(option[i].name, "R") || !strcmp(option[i].name, "G") || !strcmp(option[i].name, "B")) { + if(!strcmp(option[i].name, "R") || !strcmp(option[i].name, "G") || + !strcmp(option[i].name, "B") && !strcmp(option[i+1].name, "D")) { break; } else if(!strcmp(option[i].name, "D")) { @@ -1670,10 +1680,6 @@ if(appData.debugMode) printf("n=%d, h=%d, w=%d\n",n,height,width); case Graph: option[i].handle = (void*) (graph = gtk_drawing_area_new()); 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); - } g_signal_connect (graph, "expose-event", G_CALLBACK (GraphEventProc), (gpointer) &option[i]); gtk_widget_add_events(GTK_WIDGET(graph), GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK); g_signal_connect (graph, "button-press-event", G_CALLBACK (GraphEventProc), (gpointer) &option[i]); @@ -1830,8 +1836,10 @@ 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) + for(i=0; option[i].type != EndMark; i++) if(option[i].type == Graph || dlgNr == BoardWindow && option[i].handle) { gtk_widget_set_size_request(option[i].handle, -1, -1); // remove size requests after realization, so user can shrink + if(option[i].type == Label) gtk_label_set_ellipsize(option[i].handle, PANGO_ELLIPSIZE_END); + } return 1; // tells caller he must do initialization (e.g. add specific event handlers) }