# endif
#endif
+#if GTK_CHECK_VERSION(3,0,0)
+/* The old names are still more concise! */
+#define gtk_hbox_new(x,y) gtk_box_new(GTK_ORIENTATION_HORIZONTAL,y)
+#define gtk_vbox_new(x,y) gtk_box_new(GTK_ORIENTATION_VERTICAL,y)
+/* GTK 3 has retired stock button labels */
+#define LABEL_OK "_OK"
+#define LABEL_CANCEL "_Cancel"
+#define LABEL_NO "_No"
+#define LABEL_YES "_Yes"
+#define LABEL_SAVE "_Save"
+#define LABEL_OPEN "_Open"
+#define gtk_button_new_with_our_label gtk_button_new_with_mnemonic
+#else
+#define LABEL_OK GTK_STOCK_OK
+#define LABEL_CANCEL GTK_STOCK_CANCEL
+#define LABEL_NO GTK_STOCK_NO
+#define LABEL_YES GTK_STOCK_YES
+#define LABEL_SAVE GTK_STOCK_SAVE
+#define LABEL_OPEN GTK_STOCK_OPEN
+#define gtk_button_new_with_our_label gtk_button_new_from_stock
+#endif
+
/* #undef USE_CAIRO */
/* #define NO_THICK_LINE */
#ifdef DEBUGGING
void frontend_default_colour(frontend *fe, float *output)
{
+#if !GTK_CHECK_VERSION(3,0,0)
+ /*
+ * Use the widget style's default background colour as the
+ * background for the puzzle drawing area.
+ */
GdkColor col = gtk_widget_get_style(fe->window)->bg[GTK_STATE_NORMAL];
output[0] = col.red / 65535.0;
output[1] = col.green / 65535.0;
output[2] = col.blue / 65535.0;
+#else
+ /*
+ * GTK 3 has decided that there's no such thing as a 'default
+ * background colour' any more, because widget styles might set
+ * the background to something more complicated like a background
+ * image. We don't want to get into overlaying our entire puzzle
+ * on an arbitrary background image, so we'll just make up a
+ * reasonable shade of grey.
+ */
+ output[0] = output[1] = output[2] = 0.9F;
+#endif
}
void gtk_status_bar(void *handle, char *text)
static void set_window_background(frontend *fe, int colour)
{
+#if GTK_CHECK_VERSION(3,0,0)
+ GdkRGBA rgba;
+ rgba.red = fe->colours[3*colour + 0];
+ rgba.green = fe->colours[3*colour + 1];
+ rgba.blue = fe->colours[3*colour + 2];
+ rgba.alpha = 1.0;
+ gdk_window_set_background_rgba(gtk_widget_get_window(fe->area), &rgba);
+ gdk_window_set_background_rgba(gtk_widget_get_window(fe->window), &rgba);
+#else
GdkColormap *colmap;
colmap = gdk_colormap_get_system();
&fe->background);
gdk_window_set_background(gtk_widget_get_window(fe->window),
&fe->background);
+#endif
}
static PangoLayout *make_pango_layout(frontend *fe)
gtk_label_set_line_wrap(GTK_LABEL(text), TRUE);
if (type == MB_OK) {
- titles = GTK_STOCK_OK "\0";
+ titles = LABEL_OK "\0";
def = cancel = 0;
} else {
assert(type == MB_YESNO);
- titles = GTK_STOCK_NO "\0" GTK_STOCK_YES "\0";
+ titles = LABEL_NO "\0" LABEL_YES "\0";
def = 1;
cancel = 0;
}
i = 0;
while (*titles) {
- button = gtk_button_new_from_stock(titles);
+ button = gtk_button_new_with_our_label(titles);
gtk_box_pack_end
(GTK_BOX(gtk_dialog_get_action_area(GTK_DIALOG(window))),
button, FALSE, FALSE, 0);
gtk_window_set_title(GTK_WINDOW(fe->cfgbox), title);
sfree(title);
- w = gtk_button_new_from_stock(GTK_STOCK_CANCEL);
+ w = gtk_button_new_with_our_label(LABEL_CANCEL);
gtk_box_pack_end
(GTK_BOX(gtk_dialog_get_action_area(GTK_DIALOG(fe->cfgbox))),
w, FALSE, FALSE, 0);
G_CALLBACK(config_cancel_button_clicked), fe);
cancel = w;
- w = gtk_button_new_from_stock(GTK_STOCK_OK);
+ w = gtk_button_new_with_our_label(LABEL_OK);
gtk_box_pack_end
(GTK_BOX(gtk_dialog_get_action_area(GTK_DIALOG(fe->cfgbox))),
w, FALSE, FALSE, 0);
GTK_WINDOW(fe->window),
save ? GTK_FILE_CHOOSER_ACTION_SAVE :
GTK_FILE_CHOOSER_ACTION_OPEN,
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- save ? GTK_STOCK_SAVE : GTK_STOCK_OPEN,
+ LABEL_CANCEL, GTK_RESPONSE_CANCEL,
+ save ? LABEL_SAVE : LABEL_OPEN,
GTK_RESPONSE_ACCEPT,
NULL);
(GTK_STATUSBAR(fe->statusbar), "game");
gtk_statusbar_push(GTK_STATUSBAR(fe->statusbar), fe->statusctx,
"test");
+#if GTK_CHECK_VERSION(3,0,0)
+ gtk_widget_get_preferred_size(fe->statusbar, &req, NULL);
+#else
gtk_widget_size_request(fe->statusbar, &req);
-#if 0
- /* For GTK 2.0, should we be using gtk_widget_set_size_request? */
#endif
- gtk_widget_set_usize(viewport, -1, req.height);
+ gtk_widget_set_size_request(viewport, -1, req.height);
} else
fe->statusbar = NULL;
fe->area = gtk_drawing_area_new();
-#if GTK_CHECK_VERSION(2,0,0)
+#if GTK_CHECK_VERSION(2,0,0) && !GTK_CHECK_VERSION(3,0,0)
gtk_widget_set_double_buffered(fe->area, FALSE);
#endif
{