X-Git-Url: http://winboard.nl/cgi-bin?p=xboard.git;a=blobdiff_plain;f=gtk%2Fxoptions.c;h=fbe1c232b4cc10be5e8cf25c0e15880da90f3541;hp=4b72904a8b5f870c0185a85e27f514da61318d0d;hb=6487eb595b4ee51f8eab706698333e57c5dc4ff8;hpb=f7f09e5d0b183a416c4069f2c28f865c680045c7 diff --git a/gtk/xoptions.c b/gtk/xoptions.c index 4b72904..fbe1c23 100644 --- a/gtk/xoptions.c +++ b/gtk/xoptions.c @@ -503,7 +503,7 @@ CreateMenuPopup (Option *opt, int n, int def) } else entry = gtk_menu_item_new_with_label(msg); gtk_signal_connect_object (GTK_OBJECT (entry), "activate", GTK_SIGNAL_FUNC(MenuSelect), (gpointer) (intptr_t) ((n<<16)+i)); - g_signal_connect(entry, "button-release-event", G_CALLBACK (HelpEvent), (gpointer) mb[i].string ); + g_signal_connect(entry, "button-release-event", G_CALLBACK (HelpEvent), (gpointer) (mb[i].proc ? mb[i].string : "Recently Used Engines")); if(mb[i].accel) { guint accelerator_key; GdkModifierType accelerator_mods; @@ -845,6 +845,8 @@ MemoEvent(GtkWidget *widget, GdkEvent *event, gpointer gdata) #endif } +int messedUp; + int PopDown (DialogClass n) { @@ -874,6 +876,7 @@ PopDown (DialogClass n) RaiseWindow(parents[n]); // automatic in GTK? if(parents[n] == BoardWindow) XtSetKeyboardFocus(shellWidget, formWidget); // also automatic??? #endif + if(messedUp) Preview(0, NULL); messedUp = FALSE; // Board Options dialog can need this to cancel preview return 1; } @@ -1101,14 +1104,29 @@ void GenericCallback(GtkWidget *widget, gpointer gdata) shells[dlg] = oldSh; // in case of multiple instances, restore previous (as this one could be popped down now) } +int +BrowseCallback (GtkFileChooser *chooser, gpointer data) +{ + char *name = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(chooser)); + Option *opt = currentOption + (int)(intptr_t) data; + int n = (int) (intptr_t) opt->choice; + if(name) { + Preview(n, name); + messedUp = TRUE; + g_free(name); + } + return FALSE; +} + void BrowseGTK(GtkWidget *widget, gpointer gdata) { GtkWidget *entry; GtkWidget *dialog; GtkFileFilter *gtkfilter; GtkFileFilter *gtkfilter_all; - int opt_i = (intptr_t) gdata; + int n, opt_i = (intptr_t) gdata; GtkFileChooserAction fc_action; + char buf[MSG_SIZ], *p; gtkfilter = gtk_file_filter_new(); gtkfilter_all = gtk_file_filter_new(); @@ -1132,7 +1150,13 @@ void BrowseGTK(GtkWidget *widget, gpointer gdata) GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL); + if(*chessDir && (!(p = strstr(chessDir, "/home/")) || strchr(p+6, '/'))) + gtk_file_chooser_add_shortcut_folder(GTK_FILE_CHOOSER(dialog), chessDir, 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, "*"); @@ -1157,6 +1181,13 @@ void BrowseGTK(GtkWidget *widget, gpointer gdata) else gtk_file_chooser_set_filter (GTK_FILE_CHOOSER(dialog),gtkfilter_all); + messedUp = FALSE; + n = (int)(intptr_t) currentOption[opt_i].choice; + if (n && !currentCps) { + g_signal_connect (GTK_DIALOG (dialog), "selection-changed", G_CALLBACK(BrowseCallback), (gpointer)(intptr_t) opt_i); + gtk_window_set_title(GTK_WINDOW(dialog), _("*** Board window shows preview of selection ***")); + } + if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) { char *filename; @@ -1166,7 +1197,10 @@ void BrowseGTK(GtkWidget *widget, gpointer gdata) StartDir(filter, filename); // back to original, and remember this one g_free (filename); } - else StartDir(filter, ""); // change back to original directory + else { + StartDir(filter, ""); // change back to original directory + if(n && messedUp) Preview(n, old); // undo any board preview of the parameter browsed for + } gtk_widget_destroy (dialog); dialog = NULL; } @@ -1831,7 +1865,7 @@ 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 || dlgNr == BoardWindow && option[i].handle) { + for(i=0; option[i].type != EndMark; i++) if(option[i].type == Graph || dlgNr == BoardWindow && option[i].handle && !appData.fixedSize) { 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); }