X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=xboard.c;h=5c42dba0dc80d3099d85b25865fe8173ca75e96f;hb=0aa6203676d6c3e1bfb8fb6a17d801ebecf4c317;hp=6e385692c23abb4620c168a4ea40198581173588;hpb=0f32fca875e4604334a72bc6367acba6c7e10076;p=xboard.git diff --git a/xboard.c b/xboard.c index 6e38569..5c42dba 100644 --- a/xboard.c +++ b/xboard.c @@ -1634,6 +1634,43 @@ SetMenuEnables (Enables *enab) } #ifdef TODO_GTK +gboolean KeyPressProc(window, eventkey, data) + GtkWindow *window; + GdkEventKey *eventkey; + gpointer data; +{ + + MoveTypeInProc(eventkey); // pop up for typed in moves + + // handle shift+ 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 @@ -1680,10 +1717,7 @@ do_flash_delay (unsigned long msec) void FlashDelay (int flash_delay) { -#ifdef TODO_GTK - XSync(xDisplay, False); if(flash_delay) do_flash_delay(flash_delay); -#endif } double @@ -1814,54 +1848,6 @@ DrawPositionProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) #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; @@ -2111,56 +2097,23 @@ QuitWrapper (Widget w, XEvent *event, String *prms, Cardinal *nprms) } #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) { @@ -2479,6 +2432,8 @@ FrameDelay (int time) #ifdef TODO_GTK XSync(xDisplay, False); #endif +// gtk_main_iteration_do(False); + if (time > 0) usleep(time * 1000); } @@ -2512,3 +2467,104 @@ UpdateLogos (int displ) 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; + +} +