diff options
Diffstat (limited to 'apps/plugins/puzzles/gtk.c')
-rw-r--r-- | apps/plugins/puzzles/gtk.c | 35 |
1 files changed, 32 insertions, 3 deletions
diff --git a/apps/plugins/puzzles/gtk.c b/apps/plugins/puzzles/gtk.c index aa3ba06eed..e132c3db58 100644 --- a/apps/plugins/puzzles/gtk.c +++ b/apps/plugins/puzzles/gtk.c | |||
@@ -1935,6 +1935,24 @@ static gint configure_window(GtkWidget *widget, | |||
1935 | return FALSE; | 1935 | return FALSE; |
1936 | } | 1936 | } |
1937 | 1937 | ||
1938 | #if GTK_CHECK_VERSION(3,0,0) | ||
1939 | static int window_extra_height(frontend *fe) | ||
1940 | { | ||
1941 | int ret = 0; | ||
1942 | if (fe->menubar) { | ||
1943 | GtkRequisition req; | ||
1944 | gtk_widget_get_preferred_size(fe->menubar, &req, NULL); | ||
1945 | ret += req.height; | ||
1946 | } | ||
1947 | if (fe->statusbar) { | ||
1948 | GtkRequisition req; | ||
1949 | gtk_widget_get_preferred_size(fe->statusbar, &req, NULL); | ||
1950 | ret += req.height; | ||
1951 | } | ||
1952 | return ret; | ||
1953 | } | ||
1954 | #endif | ||
1955 | |||
1938 | static void resize_fe(frontend *fe) | 1956 | static void resize_fe(frontend *fe) |
1939 | { | 1957 | { |
1940 | int x, y; | 1958 | int x, y; |
@@ -1942,7 +1960,7 @@ static void resize_fe(frontend *fe) | |||
1942 | get_size(fe, &x, &y); | 1960 | get_size(fe, &x, &y); |
1943 | 1961 | ||
1944 | #if GTK_CHECK_VERSION(3,0,0) | 1962 | #if GTK_CHECK_VERSION(3,0,0) |
1945 | gtk_window_resize_to_geometry(GTK_WINDOW(fe->window), x, y); | 1963 | gtk_window_resize(GTK_WINDOW(fe->window), x, y + window_extra_height(fe)); |
1946 | #else | 1964 | #else |
1947 | fe->drawing_area_shrink_pending = FALSE; | 1965 | fe->drawing_area_shrink_pending = FALSE; |
1948 | gtk_drawing_area_size(GTK_DRAWING_AREA(fe->area), x, y); | 1966 | gtk_drawing_area_size(GTK_DRAWING_AREA(fe->area), x, y); |
@@ -1970,6 +1988,7 @@ static void menu_preset_event(GtkMenuItem *menuitem, gpointer data) | |||
1970 | midend_new_game(fe->me); | 1988 | midend_new_game(fe->me); |
1971 | changed_preset(fe); | 1989 | changed_preset(fe); |
1972 | resize_fe(fe); | 1990 | resize_fe(fe); |
1991 | midend_redraw(fe->me); | ||
1973 | } | 1992 | } |
1974 | 1993 | ||
1975 | GdkAtom compound_text_atom, utf8_string_atom; | 1994 | GdkAtom compound_text_atom, utf8_string_atom; |
@@ -2213,6 +2232,7 @@ static void menu_load_event(GtkMenuItem *menuitem, gpointer data) | |||
2213 | 2232 | ||
2214 | changed_preset(fe); | 2233 | changed_preset(fe); |
2215 | resize_fe(fe); | 2234 | resize_fe(fe); |
2235 | midend_redraw(fe->me); | ||
2216 | } | 2236 | } |
2217 | } | 2237 | } |
2218 | 2238 | ||
@@ -2250,6 +2270,7 @@ static void menu_config_event(GtkMenuItem *menuitem, gpointer data) | |||
2250 | 2270 | ||
2251 | midend_new_game(fe->me); | 2271 | midend_new_game(fe->me); |
2252 | resize_fe(fe); | 2272 | resize_fe(fe); |
2273 | midend_redraw(fe->me); | ||
2253 | } | 2274 | } |
2254 | 2275 | ||
2255 | static void menu_about_event(GtkMenuItem *menuitem, gpointer data) | 2276 | static void menu_about_event(GtkMenuItem *menuitem, gpointer data) |
@@ -2648,15 +2669,23 @@ static frontend *new_window(char *arg, int argtype, char **error) | |||
2648 | #endif | 2669 | #endif |
2649 | { | 2670 | { |
2650 | GdkGeometry geom; | 2671 | GdkGeometry geom; |
2651 | geom.base_width = geom.base_height = 0; | 2672 | geom.base_width = 0; |
2673 | #if GTK_CHECK_VERSION(3,0,0) | ||
2674 | geom.base_height = window_extra_height(fe); | ||
2675 | gtk_window_set_geometry_hints(GTK_WINDOW(fe->window), NULL, | ||
2676 | &geom, GDK_HINT_BASE_SIZE); | ||
2677 | #else | ||
2678 | geom.base_height = 0; | ||
2652 | gtk_window_set_geometry_hints(GTK_WINDOW(fe->window), fe->area, | 2679 | gtk_window_set_geometry_hints(GTK_WINDOW(fe->window), fe->area, |
2653 | &geom, GDK_HINT_BASE_SIZE); | 2680 | &geom, GDK_HINT_BASE_SIZE); |
2681 | #endif | ||
2654 | } | 2682 | } |
2655 | fe->w = -1; | 2683 | fe->w = -1; |
2656 | fe->h = -1; | 2684 | fe->h = -1; |
2657 | get_size(fe, &x, &y); | 2685 | get_size(fe, &x, &y); |
2658 | #if GTK_CHECK_VERSION(3,0,0) | 2686 | #if GTK_CHECK_VERSION(3,0,0) |
2659 | gtk_window_set_default_geometry(GTK_WINDOW(fe->window), x, y); | 2687 | gtk_window_set_default_size(GTK_WINDOW(fe->window), |
2688 | x, y + window_extra_height(fe)); | ||
2660 | #else | 2689 | #else |
2661 | fe->drawing_area_shrink_pending = FALSE; | 2690 | fe->drawing_area_shrink_pending = FALSE; |
2662 | gtk_drawing_area_size(GTK_DRAWING_AREA(fe->area), x, y); | 2691 | gtk_drawing_area_size(GTK_DRAWING_AREA(fe->area), x, y); |