ScrollToCursor (Option *opt, int caretPos)
{
static GtkTextIter iter;
+ static GtkTextMark *mark;
+ if(!mark) mark = gtk_text_mark_new(NULL, 0);
gtk_text_buffer_get_iter_at_offset((GtkTextBuffer *) opt->handle, &iter, caretPos);
- gtk_text_view_scroll_to_iter((GtkTextView *) opt->textValue, &iter, 0.0, 0, 0.5, 0.5);
+ gtk_text_buffer_add_mark((GtkTextBuffer *) opt->handle, mark, &iter);
+ gtk_text_view_scroll_to_mark((GtkTextView *) opt->textValue, mark, 0.0, 0, 0.5, 0.5);
+// gtk_text_view_scroll_to_iter((GtkTextView *) opt->textValue, &iter, 0.0, 0, 0.5, 0.5);
+ gtk_text_buffer_delete_mark((GtkTextBuffer *) opt->handle, mark);
}
int
GtkWidget *shells[NrOfDialogs];
DialogClass parents[NrOfDialogs];
WindowPlacement *wp[NrOfDialogs] = { // Beware! Order must correspond to DialogClass enum
- NULL, &wpComment, &wpTags, NULL, NULL, NULL, NULL, &wpMoveHistory, &wpGameList, &wpEngineOutput, &wpEvalGraph,
+ NULL, &wpComment, &wpTags, NULL, NULL, NULL, &wpDualBoard, &wpMoveHistory, &wpGameList, &wpEngineOutput, &wpEvalGraph,
NULL, NULL, NULL, NULL, &wpMain
};
if(dlgNr && dlgNr < PromoDlg && shells[dlgNr]) { // reusable, and used before (but popped down)
gtk_widget_show(shells[dlgNr]);
shellUp[dlgNr] = True;
+ if(wp[dlgNr]) gtk_window_move(GTK_WINDOW(shells[dlgNr]), wp[dlgNr]->x, wp[dlgNr]->y);
return 0;
}
// if(n > 50) width = 4; else if(n>24) width = 2; else width = 1;
width = n / 20 + 1;
height = n / width + 1;
-printf("n=%d, h=%d, w=%d\n",n,height,width);
+if(appData.debugMode) printf("n=%d, h=%d, w=%d\n",n,height,width);
// if(n && (currentOption[n-1].type == Button || currentOption[n-1].type == SaveButton)) currentOption[n].min = SAME_ROW; // OK on same line
currentOption[n].type = EndMark; currentOption[n].target = NULL; // delimit list by callback-less end mark
}
(gpointer)(intptr_t) dlgNr);
shellUp[dlgNr]++;
- if(dlgNr && wp[dlgNr] && wp[dlgNr]->width > 0) { // if persistent window-info available, reposition
+ if(dlgNr && wp[dlgNr]) { // if persistent window-info available, reposition
+ if(wp[dlgNr]->x > 0 && wp[dlgNr]->y > 0)
gtk_window_move(GTK_WINDOW(dialog), wp[dlgNr]->x, wp[dlgNr]->y);
-//printf("moved %d to (%d,%d)\n", dlgNr, wp[dlgNr]->x, wp[dlgNr]->y);
+ if(wp[dlgNr]->width > 0 && wp[dlgNr]->height > 0)
gtk_window_resize(GTK_WINDOW(dialog), wp[dlgNr]->width, wp[dlgNr]->height);
-//printf("resized %d to %dx%d\n", dlgNr, wp[dlgNr]->width, wp[dlgNr]->height);
}
return 1; // tells caller he must do initialization (e.g. add specific event handlers)
void
SetInsertPos (Option *opt, int pos)
{
-#ifdef TODO_GTK
- Arg args[16];
- XtSetArg(args[0], XtNinsertPosition, pos);
- XtSetValues(opt->handle, args, 1);
-// SetFocus(opt->handle, shells[InputBoxDlg], NULL, False); // No idea why this does not work, and the following is needed:
-// XSetInputFocus(xDisplay, XtWindow(opt->handle), RevertToPointerRoot, CurrentTime);
-#endif
+ if(opt->value > 80) ScrollToCursor(opt, pos);
+ else gtk_editable_set_position(GTK_EDITABLE(opt->handle), pos);
}
void