#include <cairo/cairo-xlib.h>
#include <gtk/gtk.h>
#include <gdk/gdkkeysyms.h>
+#ifdef OSX
+# include "gtkmacintegration/gtkosxapplication.h"
+#endif
#include "common.h"
#include "backend.h"
{
char *msg = mb[i].string;
if(!msg) break;
+#ifdef OSX
+ if(!strcmp(msg, "Quit ")) continue; // Quit item will appear automatically in App menu
+ if(!strcmp(msg, "About XBoard")) msg = "About"; // 'XBoard' will be appended automatically when moved to App menu 1st item
+#endif
if(strcmp(msg, "----")) { //
if(!(opt->min & NO_GETTEXT)) msg = _(msg);
if(mb[i].handle) {
GdkModifierType accelerator_mods;
gtk_accelerator_parse(mb[i].accel, &accelerator_key, &accelerator_mods);
+#ifdef OSX
+ if(accelerator_mods & GDK_CONTROL_MASK) { // in OSX use Meta where Linux uses Ctrl
+ accelerator_mods &= ~GDK_CONTROL_MASK; // clear Ctrl flag
+ accelerator_mods |= GDK_META_MASK; // set Meta flag
+ }
+#endif
gtk_widget_add_accelerator (GTK_WIDGET(entry), "activate",GtkAccelerators,
accelerator_key, accelerator_mods, GTK_ACCEL_VISIBLE);
- };
- gtk_widget_show(entry);
+ }
} else entry = gtk_separator_menu_item_new();
+ gtk_widget_show(entry);
gtk_menu_append(GTK_MENU (menu), entry);
//CreateMenuItem(menu, opt->min & NO_GETTEXT ? msg : _(msg), (XtCallbackProc) ComboSelect, (n<<16)+i);
mb[i].handle = (void*) entry; // save item ID, for enabling / checkmarking
// to give drawing routines opportunity to use it before first expose event
// (which are only processed when main gets to the event loop, so after all init!)
// so only change when size is no longer good
+ cairo_t *cr;
if(graph->choice) cairo_surface_destroy((cairo_surface_t *) graph->choice);
graph->choice = (char**) cairo_image_surface_create (CAIRO_FORMAT_ARGB32, w, h);
+ // paint white, to prevent weirdness when people maximize window and drag pieces over space next to board
+ cr = cairo_create ((cairo_surface_t *) graph->choice);
+ cairo_rectangle (cr, 0, 0, w, h);
+ cairo_set_source_rgba(cr, 1.0, 1.0, 1.0, 1.0);
+ cairo_fill(cr);
+ cairo_destroy (cr);
break;
}
w = eevent->area.width;
break;
case BarEnd:
top--;
+#ifndef OSX
gtk_table_attach(GTK_TABLE(table), menuBar, left, left+r, top, top+1, GTK_FILL | GTK_EXPAND, GTK_FILL, 2, 1);
if(option[i].target) ((ButtonCallback*)option[i].target)(boxStart); // callback that can make sizing decisions
+#else
+ top--; // in OSX menu bar is not put in window, so also don't count it
+ { // in stead, offer it to OSX, and move About item to top of App menu
+ GtkosxApplication *theApp = g_object_new(GTKOSX_TYPE_APPLICATION, NULL);
+ extern MenuItem helpMenu[]; // oh, well... Adding items in help menu breaks this anyway
+ gtk_widget_hide (menuBar);
+ gtkosx_application_set_menu_bar(theApp, GTK_MENU_SHELL(menuBar));
+ gtkosx_application_insert_app_menu_item(theApp, GTK_MENU_ITEM(helpMenu[8].handle), 0); // hack
+ gtkosx_application_sync_menubar(theApp);
+ }
+#endif
break;
case BoxEnd:
// XtManageChildren(&form, 1);