chiark / gitweb /
GTK 3.16 deprecation: stop using gtk_misc_set_alignment.
[sgt-puzzles.git] / gtk.c
diff --git a/gtk.c b/gtk.c
index c3c10a5af611e931f5267d84604966d2e8e3475a..659d581a0c404640d1eb930a73697cddec77fb29 100644 (file)
--- a/gtk.c
+++ b/gtk.c
 # 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
@@ -1379,6 +1401,16 @@ static int win_key_press(GtkWidget *widget, GdkEventKey *event, gpointer data)
 
 enum { MB_OK, MB_YESNO };
 
+static void align_label(GtkLabel *label, double x, double y)
+{
+#if GTK_CHECK_VERSION(3,16,0)
+    gtk_label_set_xalign(label, x);
+    gtk_label_set_yalign(label, y);
+#else
+    gtk_misc_set_alignment(GTK_MISC(label), x, y);
+#endif
+}
+
 int message_box(GtkWidget *parent, char *title, char *msg, int centre,
                int type)
 {
@@ -1388,7 +1420,7 @@ int message_box(GtkWidget *parent, char *title, char *msg, int centre,
 
     window = gtk_dialog_new();
     text = gtk_label_new(msg);
-    gtk_misc_set_alignment(GTK_MISC(text), 0.0, 0.0);
+    align_label(GTK_LABEL(text), 0.0, 0.0);
     hbox = gtk_hbox_new(FALSE, 0);
     gtk_box_pack_start(GTK_BOX(hbox), text, FALSE, FALSE, 20);
     gtk_box_pack_start
@@ -1400,18 +1432,18 @@ int message_box(GtkWidget *parent, char *title, char *msg, int centre,
     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);
@@ -1530,7 +1562,7 @@ static int get_config(frontend *fe, int which)
     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);
@@ -1539,7 +1571,7 @@ static int get_config(frontend *fe, int which)
                      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);
@@ -1572,7 +1604,7 @@ static int get_config(frontend *fe, int which)
             */
 
            w = gtk_label_new(i->name);
-           gtk_misc_set_alignment(GTK_MISC(w), 0.0, 0.5);
+           align_label(GTK_LABEL(w), 0.0, 0.5);
 #if GTK_CHECK_VERSION(3,0,0)
             gtk_grid_attach(GTK_GRID(table), w, 0, y, 1, 1);
 #else
@@ -1628,7 +1660,7 @@ static int get_config(frontend *fe, int which)
             */
 
            w = gtk_label_new(i->name);
-           gtk_misc_set_alignment(GTK_MISC(w), 0.0, 0.5);
+           align_label(GTK_LABEL(w), 0.0, 0.5);
 #if GTK_CHECK_VERSION(3,0,0)
             gtk_grid_attach(GTK_GRID(table), w, 0, y, 1, 1);
 #else
@@ -1867,8 +1899,6 @@ static void resize_fe(frontend *fe)
 #if GTK_CHECK_VERSION(3,0,0)
     gtk_window_resize_to_geometry(GTK_WINDOW(fe->window), x, y);
 #else
-    fe->w = x;
-    fe->h = y;
     fe->drawing_area_shrink_pending = FALSE;
     gtk_drawing_area_size(GTK_DRAWING_AREA(fe->area), x, y);
     {
@@ -2024,8 +2054,8 @@ static char *file_selector(frontend *fe, char *title, int save)
                                    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);
 
@@ -2540,17 +2570,18 @@ static frontend *new_window(char *arg, int argtype, char **error)
        fe->statusctx = gtk_statusbar_get_context_id
            (GTK_STATUSBAR(fe->statusbar), "game");
        gtk_statusbar_push(GTK_STATUSBAR(fe->statusbar), fe->statusctx,
-                          "test");
+                          DEFAULT_STATUSBAR_TEXT);
+#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
     {
@@ -2559,6 +2590,8 @@ static frontend *new_window(char *arg, int argtype, char **error)
         gtk_window_set_geometry_hints(GTK_WINDOW(fe->window), fe->area,
                                       &geom, GDK_HINT_BASE_SIZE);
     }
+    fe->w = -1;
+    fe->h = -1;
     get_size(fe, &x, &y);
 #if GTK_CHECK_VERSION(3,0,0)
     gtk_window_set_default_geometry(GTK_WINDOW(fe->window), x, y);
@@ -2566,8 +2599,6 @@ static frontend *new_window(char *arg, int argtype, char **error)
     fe->drawing_area_shrink_pending = FALSE;
     gtk_drawing_area_size(GTK_DRAWING_AREA(fe->area), x, y);
 #endif
-    fe->w = x;
-    fe->h = y;
 
     gtk_box_pack_end(vbox, fe->area, TRUE, TRUE, 0);