} 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;
#endif
}
+int messedUp;
+
int
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;
}
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();
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, "*");
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;
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;
}
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);
}