/*
* xoptions.c -- Move list window, part of X front end for XBoard
*
- * Copyright 2000, 2009, 2010, 2011, 2012, 2013, 2014, 2015 Free Software Foundation, Inc.
+ * Copyright 2000, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 Free Software Foundation, Inc.
* ------------------------------------------------------------------------
*
* GNU XBoard is free software: you can redistribute it and/or modify
}
if(memo->value == 250 // kludge to recognize ICS Console and Chat panes
&& gtk_text_buffer_get_selection_bounds(memo->handle, NULL, NULL) ) {
-printf("*** selected\n");
gtk_text_buffer_get_selection_bounds(memo->handle, &start, &end); // only return selected text
- index = -1; // kludge to indicate omething was selected
+ index = -1; // kludge to indicate something was selected
} else {
+ if(abs(button) == 3 && gtk_text_buffer_get_selection_bounds(memo->handle, NULL, NULL)) return FALSE; // normal context menu
// GTK_TODO: is this really the most efficient way to get the character at the mouse cursor???
gtk_text_view_window_to_buffer_coords(GTK_TEXT_VIEW(widget), GTK_TEXT_WINDOW_WIDGET, w, h, &x, &y);
gtk_text_view_get_iter_at_location(GTK_TEXT_VIEW(widget), &start, x, y);
}
/* get text from textbuffer */
val = gtk_text_buffer_get_text (memo->handle, &start, &end, FALSE);
- break;
+ if(strlen(val) != index) break; // if we clicked behind all text, fall through to do default action
default:
return FALSE; // should not happen
}
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;
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);
}
}
+ 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);