From b602e7faa8f3973c5b3c4ae00108eaea982ea196 Mon Sep 17 00:00:00 2001 From: H.G. Muller Date: Wed, 17 Oct 2012 14:33:28 +0200 Subject: [PATCH] Let engine-output memos use new generic callback --- nengineoutput.c | 52 +++++++++++++++++++++++++++++++++------------------- xengineoutput.c | 32 -------------------------------- xoptions.c | 1 + 3 files changed, 34 insertions(+), 51 deletions(-) diff --git a/nengineoutput.c b/nengineoutput.c index c925792..dc84aa4 100644 --- a/nengineoutput.c +++ b/nengineoutput.c @@ -69,26 +69,9 @@ extern char *getenv(); int windowMode = 1; char *mem1, *mem2; // dummies, as this dialog can never be OK'ed +static int currentPV, highTextStart[2], highTextEnd[2]; -void -MemoProc (Option *opt, int n, int x, int y) -{ - static int pressed; // keep track of button 3 state - switch(n) { - case 0: // pointer motion - if(!pressed) return; -// MovePV(x, y, lineGap + BOARD_HEIGHT * (squareSize + lineGap)); - break; - case 3: // press button 3 - pressed = 1; - SelectPV(opt, x, y); - break; - case -3: // release button 3 - pressed = 0; - StopPV(opt); - break; - } -} +int MemoProc P((Option *opt, int n, int x, int y, char *text, int index)); Option engoutOptions[] = { { 0, LL|T2T, 17, NULL, NULL, NULL, NULL, Label, " " }, @@ -107,6 +90,37 @@ Option engoutOptions[] = { { 0, NO_OK, 0, NULL, NULL, "", NULL, EndMark , "" } }; +int +MemoProc (Option *opt, int n, int x, int y, char *text, int index) +{ // user callback for mouse events in memo + static int pressed; // keep track of button 3 state + int start, end, currentPV = (opt != &engoutOptions[5]); + + switch(n) { + case 0: // pointer motion + if(!pressed) return FALSE; // only motion with button 3 down is of interest + MovePV(x, y, 500/*lineGap + BOARD_HEIGHT * (squareSize + lineGap)*/); + break; + case 3: // press button 3 + pressed = 1; + if(LoadMultiPV(x, y, text, index, &start, &end, currentPV)) { +#ifdef TODO_GTK + XawTextSetSelection( w, start, end ); +#endif + highTextStart[currentPV] = start; highTextEnd[currentPV] = end; + } + break; + case -3: // release button 3 + pressed = 0; + highTextStart[currentPV] = highTextEnd[currentPV] = 0; + UnLoadPV(); + break; + default: + return FALSE; // not meant for us; do regular event handler + } + return TRUE; +} + void SetIcon (int which, int field, int nIcon) { // first call into xengineoutput.c to pick up icon pixmap diff --git a/xengineoutput.c b/xengineoutput.c index bdf4928..1c86de3 100644 --- a/xengineoutput.c +++ b/xengineoutput.c @@ -163,38 +163,6 @@ Shift: select-start() extend-end() SelectPV(1) \n \ Any: select-start() extend-end() SelectPV(0) \n \ : StopPV() \n"; -void -SelectPV (Option *opt, int x, int y) -{ // [HGM] pv: translate click to PV line, and load it for display - int start, end, index; - char *val; - int currentPV = (opt->handle != memoWidget); -#ifdef TODO_GTK - XawTextGetSelectionPos(w, &index, &dummy); - XtSetArg(arg, XtNstring, &val); - XtGetValues(w, &arg, 1); -#endif - if(LoadMultiPV(x, y, val, index, &start, &end, currentPV)) { -#ifdef TODO_GTK - XawTextSetSelection( w, start, end ); -#endif - highTextStart[currentPV] = start; highTextEnd[currentPV] = end; - } -} - -void -StopPV (Option *opt) -{ // [HGM] pv: on right-button release, stop displaying PV -#ifdef TODO_GTK - XawTextUnsetSelection( opt->handle ); -#endif - highTextStart[currentPV] = highTextEnd[currentPV] = 0; - UnLoadPV(); -#ifdef TODO_GTK - XtCallActionProc(opt->handle, "beginning-of-file", event, NULL, 0); -#endif -} - //------------------------------- pane switching ----------------------------------- void diff --git a/xoptions.c b/xoptions.c index 04ad077..c213bbc 100644 --- a/xoptions.c +++ b/xoptions.c @@ -568,6 +568,7 @@ MemoEvent(GtkWidget *widget, GdkEvent *event, gpointer gdata) case GDK_BUTTON_RELEASE: f = -1; // release indicated by negative button numbers w = bevent->x; h = bevent->y; + button = bevent->button; break; case GDK_BUTTON_PRESS: w = bevent->x; h = bevent->y; -- 1.7.0.4