}
#ifdef TODO_GTK
+gboolean KeyPressProc(window, eventkey, data)
+ GtkWindow *window;
+ GdkEventKey *eventkey;
+ gpointer data;
+{
+
+ MoveTypeInProc(eventkey); // pop up for typed in moves
+
+ // handle shift+<number> cases
+ if (eventkey->state & GDK_SHIFT_MASK) {
+ guint keyval;
+
+ gdk_keymap_translate_keyboard_state(NULL, eventkey->hardware_keycode,
+ 0, eventkey->group,
+ &keyval, NULL, NULL, NULL);
+ switch(keyval) {
+ case GDK_1:
+ AskQuestionEvent("Direct command", "Send to chess program:", "", "1");
+ break;
+ case GDK_2:
+ AskQuestionEvent("Direct command", "Send to second chess program:", "", "2");
+ break;
+ default:
+ break;
+ }
+ }
+
+ /* check for other key values */
+ switch(eventkey->keyval) {
+ case GDK_question:
+ AboutGameEvent();
+ break;
+ default:
+ break;
+ }
+ return False;
+}
void
KeyBindingProc (Widget w, XEvent *event, String *prms, Cardinal *nprms)
{ // [HGM] new method of key binding: specify MenuItem(FlipView) in stead of FlipViewProc in translation string
void
FlashDelay (int flash_delay)
{
-#ifdef TODO_GTK
- XSync(xDisplay, False);
if(flash_delay) do_flash_delay(flash_delay);
-#endif
}
double
#endif
-#ifdef TODO_GTK
-void
-HandlePV (Widget w, XEvent * event, String * params, Cardinal * nParams)
-{ // [HGM] pv: walk PV
- MovePV(event->xmotion.x, event->xmotion.y, lineGap + BOARD_HEIGHT * (squareSize + lineGap));
-}
-#endif
-
-static int savedIndex; /* gross that this is global */
-
-#ifdef TODO_GTK
-void
-CommentClick (Widget w, XEvent * event, String * params, Cardinal * nParams)
-{
- String val;
- XawTextPosition index, dummy;
- Arg arg;
-
- XawTextGetSelectionPos(w, &index, &dummy);
- XtSetArg(arg, XtNstring, &val);
- XtGetValues(w, &arg, 1);
- ReplaceComment(savedIndex, val);
- if(savedIndex != currentMove) ToNrEvent(savedIndex);
- LoadVariation( index, val ); // [HGM] also does the actual moving to it, now
-}
-#endif
-
-void
-EditCommentPopUp (int index, char *title, char *text)
-{
- savedIndex = index;
- if (text == NULL) text = "";
- NewCommentPopup(title, text, index);
-}
-
-void
-CommentPopUp (char *title, char *text)
-{
- savedIndex = currentMove; // [HGM] vari
- NewCommentPopup(title, text, currentMove);
-}
-
-void
-CommentPopDown ()
-{
- PopDown(CommentDlg);
-}
-
/* Disable all user input other than deleting the window */
static int frozen = 0;
}
#endif
-int
-ShiftKeys ()
-{ // bassic primitive for determining if modifier keys are pressed
- int i,j, k=0;
-#ifdef TODO_GTK
- long int codes[] = { XK_Meta_L, XK_Meta_R, XK_Control_L, XK_Control_R, XK_Shift_L, XK_Shift_R };
- char keys[32];
- XQueryKeymap(xDisplay,keys);
- for(i=0; i<6; i++) {
- k <<= 1;
- j = XKeysymToKeycode(xDisplay, codes[i]);
- k += ( (keys[j>>3]&1<<(j&7)) != 0 );
- }
-#endif
- return k;
-}
-
-#ifdef TODO_GTK
-static void
-MoveTypeInProc (Widget widget, caddr_t unused, XEvent *event)
+void MoveTypeInProc(eventkey)
+ GdkEventKey *eventkey;
{
char buf[10];
- KeySym sym;
- int n = XLookupString(&(event->xkey), buf, 10, &sym, NULL);
- if ( n == 1 && *buf >= 32 // printable
- && !(ShiftKeys() & 0x3C) // no Alt, Ctrl
- ) BoxAutoPopUp (buf);
-}
-#endif
-#ifdef TODO_GTK
-static void
-UpKeyProc (Widget w, XEvent *event, String *prms, Cardinal *nprms)
-{ // [HGM] input: let up-arrow recall previous line from history
- IcsKey(1);
-}
-
-static void
-DownKeyProc (Widget w, XEvent *event, String *prms, Cardinal *nprms)
-{ // [HGM] input: let down-arrow recall next line from history
- IcsKey(-1);
-}
+ // ingnore if ctrl or alt is pressed
+ if (eventkey->state & (GDK_CONTROL_MASK | GDK_MOD1_MASK)) {
+ return;
+ }
-static void
-EnterKeyProc (Widget w, XEvent *event, String *prms, Cardinal *nprms)
-{
- IcsKey(0);
+ buf[0]=eventkey->keyval;
+ buf[1]='\0';
+ if (*buf >= 32)
+ BoxAutoPopUp (buf);
}
-
+#ifdef TODO_GTK
void
TempBackwardProc (Widget w, XEvent *event, String *prms, Cardinal *nprms)
{
#ifdef TODO_GTK
XSync(xDisplay, False);
#endif
+// gtk_main_iteration_do(False);
+
if (time > 0)
usleep(time * 1000);
}
return;
}
+void FileNamePopUpGTK(label, def, filter, proc, pathFlag, openMode, name, fp)
+ char *label;
+ char *def;
+ char *filter;
+ FileProc proc;
+ char *openMode;
+ Boolean pathFlag;
+ char **name;
+ FILE **fp;
+{
+ GtkWidget *dialog;
+ GtkFileFilter *gtkfilter;
+ GtkFileFilter *gtkfilter_all;
+ char space[] = " ";
+ char fileext[10] = "";
+ char *result = NULL;
+ char *cp;
+
+ /* make a copy of the filter string, so that strtok can work with it*/
+ cp = strndup(filter,strlen(filter));
+
+ /* add filters for file extensions */
+ gtkfilter = gtk_file_filter_new();
+ gtkfilter_all = gtk_file_filter_new();
+
+ /* one filter to show everything */
+ gtk_file_filter_add_pattern(gtkfilter_all, "*.*");
+ gtk_file_filter_set_name (gtkfilter_all, "All Files");
+
+ /* add filter if present */
+ result = strtok(cp, space);
+ while( result != NULL ) {
+ snprintf(fileext,10,"*%s",result);
+ result = strtok( NULL, space );
+ gtk_file_filter_add_pattern(gtkfilter, fileext);
+ };
+
+ /* second filter to only show what's useful */
+ gtk_file_filter_set_name (gtkfilter,filter);
+
+ if (openMode[0] == 'r')
+ {
+ dialog = gtk_file_chooser_dialog_new (label,
+ NULL,
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+ GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
+ NULL);
+ }
+ else
+ {
+ dialog = gtk_file_chooser_dialog_new (label,
+ NULL,
+ GTK_FILE_CHOOSER_ACTION_SAVE,
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+ GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
+ NULL);
+ /* add filename suggestions */
+ if (strlen(def) > 0 )
+ gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(dialog), def);
+
+ //gtk_file_chooser_set_create_folders(GTK_FILE_CHOOSER (dialog),TRUE);
+ }
+
+ /* add filters */
+ gtk_file_chooser_add_filter (GTK_FILE_CHOOSER(dialog),gtkfilter_all);
+ gtk_file_chooser_add_filter (GTK_FILE_CHOOSER(dialog),gtkfilter);
+ /* activate filter */
+ gtk_file_chooser_set_filter (GTK_FILE_CHOOSER(dialog),gtkfilter);
+
+ if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT)
+ {
+ char *filename;
+ FILE *f;
+
+ filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
+
+ //see loadgamepopup
+ f = fopen(filename, openMode);
+ if (f == NULL)
+ {
+ DisplayError(_("Failed to open file"), errno);
+ }
+ else
+ {
+ /* TODO add indec */
+ *fp = f;
+ ASSIGN(*name, filename);
+ ScheduleDelayedEvent(DelayedLoad, 50);
+ }
+ g_free (filename);
+ };
+
+ gtk_widget_destroy (dialog);
+ ModeHighlight();
+
+ free(cp);
+ return;
+
+}
+