Allow <Enter> to apply filter in XB GameList filter edit
authorH.G. Muller <h.g.muller@hccnet.nl>
Sat, 23 Jan 2010 21:24:20 +0000 (22:24 +0100)
committerH.G. Muller <h.g.muller@hccnet.nl>
Sat, 30 Jan 2010 08:48:45 +0000 (09:48 +0100)
Apply a translation to intercept the <Enter> key. Set focus back to the
list display afterwards.

xboard.c
xgamelist.c
xgamelist.h

index d4f6569..a9f8991 100644 (file)
--- a/xboard.c
+++ b/xboard.c
@@ -850,6 +850,7 @@ XtActionsRec boardActions[] = {
     { "LoadNextGameProc", LoadNextGameProc },
     { "LoadPrevGameProc", LoadPrevGameProc },
     { "LoadSelectedProc", LoadSelectedProc },
+    { "SetFilterProc", SetFilterProc },
     { "ReloadGameProc", ReloadGameProc },
     { "LoadPositionProc", LoadPositionProc },
     { "LoadNextPositionProc", LoadNextPositionProc },
index 258eb39..3a04f3f 100644 (file)
@@ -106,6 +106,8 @@ static int listLength;
 char gameListTranslations[] =
   "<Btn1Up>(2): LoadSelectedProc() \n \
    <Key>Return: LoadSelectedProc() \n";
+char filterTranslations[] =
+  "<Key>Return: SetFilterProc() \n";
 
 typedef struct {
     Widget shell;
@@ -254,6 +256,8 @@ GameListCreate(name, callback, client_data)
     filterText =
       XtCreateManagedWidget(_("filtertext"), asciiTextWidgetClass, form, args, j);
     XtAddEventHandler(filterText, ButtonPressMask, False, SetFocus, (XtPointer) shell);
+    XtOverrideTranslations(filterText,
+                         XtParseTranslationTable(filterTranslations));
 
     j = 0;
     XtSetArg(args[j], XtNfromVert, viewport);  j++;
@@ -534,6 +538,29 @@ LoadSelectedProc(w, event, prms, nprms)
     }
 }
 
+void
+SetFilterProc(w, event, prms, nprms)
+     Widget w;
+     XEvent *event;
+     String *prms;
+     Cardinal *nprms;
+{
+       Arg args[16];
+        String name;
+       Widget list;
+        int j = 0;
+        XtSetArg(args[j], XtNstring, &name);  j++;
+       XtGetValues(filterText, args, j);
+        strcpy(filterString, name);
+        if(GameListPrepare()) GameListReplace(); // crashes on empty list...
+       list = XtNameToWidget(glc->shell, "*form.viewport.list");
+       XawListHighlight(list, 0);
+        j = 0;
+       XtSetArg(args[j], XtNdisplayCaret, False); j++;
+       XtSetValues(filterText, args, j);
+       XtSetKeyboardFocus(glc->shell, list);
+}
+
 void
 GameListPopDown()
 {
index 21340aa..0c3fdf8 100644 (file)
@@ -27,6 +27,8 @@ void ShowGameListProc P((Widget w, XEvent *event,
                         String *prms, Cardinal *nprms));
 void LoadSelectedProc P((Widget w, XEvent *event,
                         String *prms, Cardinal *nprms));
+void SetFilterProc P((Widget w, XEvent *event,
+                        String *prms, Cardinal *nprms));
 
 extern Widget gameListShell;
 #endif /* _XGAMEL_H */