#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,
char installDir[] = "."; // [HGM] UCI: needed for UCI; probably needs run-time initializtion
+/* pixbufs */
+static GdkPixbuf *mainwindowIcon=NULL;
+static GdkPixbuf *WhiteIcon=NULL;
+static GdkPixbuf *BlackIcon=NULL;
+
typedef unsigned int BoardSize;
BoardSize boardSize;
Boolean chessProgram;
InitMenuMarkers();
/*
- * Create an icon.
+ * Create an icon. (Use two icons, to indicate whther it is white's or black's turn.)
*/
-#ifdef TODO_GTK
- ReadBitmap(&wIconPixmap, "icon_white.bm",
- icon_white_bits, icon_white_width, icon_white_height);
- ReadBitmap(&bIconPixmap, "icon_black.bm",
- icon_black_bits, icon_black_width, icon_black_height);
- iconPixmap = wIconPixmap;
- i = 0;
- XtSetArg(args[i], XtNiconPixmap, iconPixmap); i++;
- XtSetValues(shellWidget, args, i);
-#endif
+ WhiteIcon = gdk_pixbuf_new_from_file(SVGDIR "/icon_white.svg", NULL);
+ BlackIcon = gdk_pixbuf_new_from_file(SVGDIR "/icon_black.svg", NULL);
+ mainwindowIcon = WhiteIcon;
+ gtk_window_set_icon(GTK_WINDOW(shellWidget), mainwindowIcon);
+
/*
* Create a cursor for the board widget.
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 ) {
}
}
-#ifdef TODO_GTK
gboolean KeyPressProc(window, eventkey, data)
GtkWindow *window;
GdkEventKey *eventkey;
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;
- }
- }
-
+#ifdef TODO_GTK
/* check for other key values */
switch(eventkey->keyval) {
case GDK_question:
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
}
#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;
{
g_free(markup);
}
-#ifdef TODO_GTK
-static Pixmap *clockIcons[] = { &wIconPixmap, &bIconPixmap };
-#endif
+static GdkPixbuf **clockIcons[] = { &WhiteIcon, &BlackIcon };
void
SetClockIcon (int color)
{
-#ifdef TODO_GTK
- Arg args[16];
- Pixmap pm = *clockIcons[color];
- if (iconPixmap != pm) {
- iconPixmap = pm;
- XtSetArg(args[0], XtNiconPixmap, iconPixmap);
- XtSetValues(shellWidget, args, 1);
+ GdkPixbuf *pm = *clockIcons[color];
+ if (mainwindowIcon != pm) {
+ mainwindowIcon = pm;
+ gtk_window_set_icon(GTK_WINDOW(shellWidget), mainwindowIcon);
}
-#endif
}
#define INPUT_SOURCE_BUF_SIZE 8192
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;
+
+}
+