X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=xboard.c;h=68dd7ca62ecf8404596ed1c34fa1395794ebe96d;hb=d2cf7f334d5525ed43002f974dd4c6e727956584;hp=4a4cdad42b6fba776769951ea16f8f2cc22607b9;hpb=b766f10fe10fc786b5793a010d777bacc4349820;p=xboard.git diff --git a/xboard.c b/xboard.c index 4a4cdad..68dd7ca 100644 --- a/xboard.c +++ b/xboard.c @@ -197,6 +197,7 @@ char *FindFont P((char *pattern, int targetPxlSize)); #endif void DelayedDrag P((void)); void ICSInputBoxPopUp P((void)); +gboolean KeyPressProc P((GtkWindow *window, GdkEventKey *eventkey, gpointer data)); #ifdef TODO_GTK static void MoveTypeInProc P((Widget widget, caddr_t unused, XEvent *event)); void HandlePV P((Widget w, XEvent * event, @@ -1359,6 +1360,7 @@ main (int argc, char **argv) XtAddEventHandler(shellWidget, StructureNotifyMask, False, (XtEventHandler) EventProc, NULL); #endif + g_signal_connect(shells[BoardWindow], "key-press-event", G_CALLBACK(KeyPressProc), NULL); /* [AS] Restore layout */ if( wpMoveHistory.visible ) { @@ -1633,7 +1635,6 @@ SetMenuEnables (Enables *enab) } } -#ifdef TODO_GTK gboolean KeyPressProc(window, eventkey, data) GtkWindow *window; GdkEventKey *eventkey; @@ -1642,25 +1643,7 @@ gboolean KeyPressProc(window, eventkey, 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; - } - } - +#ifdef TODO_GTK /* check for other key values */ switch(eventkey->keyval) { case GDK_question: @@ -1669,8 +1652,10 @@ gboolean KeyPressProc(window, eventkey, data) default: break; } +#endif return False; } +#ifdef TODO_GTK 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 @@ -2097,23 +2082,6 @@ 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; -} - void MoveTypeInProc(eventkey) GdkEventKey *eventkey; { @@ -2484,3 +2452,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; + +} +