X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=gtk%2Fxoptions.c;h=d3a8835d8ecc01cd6d7ba7ca35e65b0b41e75429;hb=093d989d136cc87cbb1c739b3ddea5337cf2b702;hp=525d00bfadf2e12292e7ab7b52eee0e3f62911ea;hpb=ebd7f78161504e46896f7d96bb41e29714b2fd53;p=xboard.git diff --git a/gtk/xoptions.c b/gtk/xoptions.c index 525d00b..d3a8835 100644 --- a/gtk/xoptions.c +++ b/gtk/xoptions.c @@ -845,6 +845,16 @@ gboolean GenericPopDown(w, resptype, gdata) return TRUE; } +gboolean PopDownProxy(w, gdata) + GtkWidget *w; + gpointer gdata; +{ + GtkResponseType resp = GTK_RESPONSE_ACCEPT; + int dlg = (intptr_t) gdata; + if(dlg >= 3000) dlg -= 3000, resp = GTK_RESPONSE_REJECT; + return GenericPopDown(gtk_widget_get_toplevel(w), resp, (gpointer)(intptr_t)dlg); +} + int AppendText(Option *opt, char *s) { char *v; @@ -1312,7 +1322,7 @@ if(appData.debugMode) printf("n=%d, h=%d, w=%d\n",n,height,width); top = breakType = 0; expandable = FALSE; } if(!SameRow(&option[i])) { - if(SameRow(&option[i+1])) { + if(SameRow(&option[i+1]) || topLevel && option[i].type == Button && option[i+1].type == EndMark && option[i+1].min & SAME_ROW) { 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); @@ -1656,6 +1666,21 @@ if(appData.debugMode) printf("n=%d, h=%d, w=%d\n",n,height,width); } } + if(topLevel && !(option[i].min & NO_OK)) { // buttons requested in top-level window + button = gtk_button_new_with_label (_("OK")); + g_signal_connect (button, "clicked", G_CALLBACK (PopDownProxy), (gpointer)(intptr_t) dlgNr); + if(!(option[i].min & NO_CANCEL)) { + GtkWidget *button2 = gtk_button_new_with_label (_("Cancel")); + g_signal_connect (button2, "clicked", G_CALLBACK (PopDownProxy), (gpointer)(intptr_t) dlgNr + 3000); + if(!hbox) { + hbox = gtk_hbox_new (False, 0); + gtk_table_attach(GTK_TABLE(table), hbox, left, left+r, top+1, top+2, GTK_FILL | GTK_EXPAND, GTK_FILL, 2, 1); + } + Pack(hbox, table, button, left, left+1, top+1, 0); + Pack(hbox, table, button2, left, left+1, top+1, 0); + } else Pack(hbox, table, button, left, left+1, ++top, 0); + } + gtk_table_resize(GTK_TABLE(table), top+1, r); if(dlgNr == BoardWindow && appData.fixedSize) { // inhibit sizing GtkWidget *h = gtk_hbox_new(FALSE, 0);