From b76e6562bd8ebf28168fa5f6853be777dee37452 Mon Sep 17 00:00:00 2001 From: Pierre Pronchery Date: Wed, 29 Sep 2021 09:23:10 +0200 Subject: [PATCH] Build fixes for Gtk+ 4 --- include/Desktop/accel.h | 4 ++++ include/Desktop/compat.h | 23 ++++++++++++++++++++++- include/Desktop/toolbar.h | 6 ++++++ src/compat.c | 36 ++++++++++++++++++++++++++++++++---- src/message.c | 4 +++- src/mime.c | 5 +++++ tools/widget.c | 2 +- 7 files changed, 73 insertions(+), 7 deletions(-) diff --git a/include/Desktop/accel.h b/include/Desktop/accel.h index bec83bc..595620f 100644 --- a/include/Desktop/accel.h +++ b/include/Desktop/accel.h @@ -41,6 +41,10 @@ typedef struct _DesktopAccel unsigned int accel; } DesktopAccel; +# if GTK_CHECK_VERSION(4, 0, 0) +typedef void GtkAccelGroup; +# endif + /* functions */ void desktop_accel_create(DesktopAccel const * accel, gpointer data, diff --git a/include/Desktop/compat.h b/include/Desktop/compat.h index 45674b7..3a7cd9f 100644 --- a/include/Desktop/compat.h +++ b/include/Desktop/compat.h @@ -107,8 +107,29 @@ # define GDK_KEY_uparrow GDK_uparrow # endif +/* Gtk+ 4.0 */ +# if GTK_CHECK_VERSION(4, 0, 0) +void gtk_box_pack_end(GtkBox * box, GtkWidget * child, + gboolean fill, gboolean expand, gint padding); +void gtk_box_pack_start(GtkBox * box, GtkWidget * child, + gboolean fill, gboolean expand, gint padding); + +# define GTK_CONTAINER(a) GTK_WIDGET(a) +void gtk_container_add(GtkWidget * container, GtkWidget * child); + +# define GTK_ICON_LOOKUP_USE_BUILTIN 0 +# define GTK_ICON_LOOKUP_GENERIC_FALLBACK 0 +GdkPixbuf * gtk_icon_theme_load_icon(GtkIconTheme * theme, char const * name, + GtkIconSize size, guint flags, gpointer data); + +void gtk_main(void); + +# define GTK_STOCK_DIRECTORY "gtk-directory" +# define GTK_STOCK_FILE "gtk-file" +# define GTK_STOCK_MISSING_IMAGE "gtk-missing-image" + +# elif !GTK_CHECK_VERSION(3, 0, 0) /* Gtk+ 3.0 */ -# if !GTK_CHECK_VERSION(3, 0, 0) /* types */ typedef struct _GdkRGBA { diff --git a/include/Desktop/toolbar.h b/include/Desktop/toolbar.h index 55b0926..90a7eb4 100644 --- a/include/Desktop/toolbar.h +++ b/include/Desktop/toolbar.h @@ -31,6 +31,8 @@ #ifndef LIBDESKTOP_DESKTOP_TOOLBAR_H # define LIBDESKTOP_DESKTOP_TOOLBAR_H +# include "accel.h" + /* Toolbar */ /* types */ @@ -41,7 +43,11 @@ typedef struct _DesktopToolbar const char * stock; GdkModifierType modifier; unsigned int accel; +# if GTK_CHECK_VERSION(4, 0, 0) + GtkWidget * widget; +# else GtkToolItem * widget; +# endif } DesktopToolbar; diff --git a/src/compat.c b/src/compat.c index 865e436..727be29 100644 --- a/src/compat.c +++ b/src/compat.c @@ -28,13 +28,41 @@ -#include +#include +#if GTK_CHECK_VERSION(4, 0, 0) +# include +#else +# include +#endif #include "Desktop.h" /* Compat */ +#if GTK_CHECK_VERSION(4, 0, 0) +/* Gtk+ 4 */ +/* gtk_icon_theme_load_icon */ +GdkPixbuf * gtk_icon_theme_load_icon(GtkIconTheme * theme, char const * name, + GtkIconSize size, guint flags, gpointer data) +{ + GtkWidget * image; + (void) theme; + + image = gtk_image_new_from_icon_name(name); + gtk_image_set_icon_size(GTK_IMAGE(image), size); + return image; +} + + +/* gtk_main */ +void gtk_main(void) +{ + while(g_list_model_get_n_items(gtk_window_get_toplevels()) > 0) + g_main_context_iteration(NULL, TRUE); +} + + +#elif GTK_CHECK_VERSION(3, 0, 0) /* Gtk+ 3 */ -#if GTK_CHECK_VERSION(3, 0, 0) /* gdk_window_clear */ void gdk_window_clear(GdkWindow * window) { @@ -47,10 +75,10 @@ void gdk_window_clear(GdkWindow * window) XClearWindow(display, wid); gdk_error_trap_pop(); } -#endif -#if !GTK_CHECK_VERSION(3, 0, 0) +#elif GTK_CHECK_VERSION(2, 0, 0) +/* Gtk+ 2.0 */ /* gtk_box_new */ GtkWidget * gtk_box_new(GtkOrientation orientation, gint spacing) { diff --git a/src/message.c b/src/message.c index 0be2b52..addb280 100644 --- a/src/message.c +++ b/src/message.c @@ -37,7 +37,9 @@ #include #include #include -#if GTK_CHECK_VERSION(3, 0, 0) +#if GTK_CHECK_VERSION(4, 0, 0) +# include +#elif GTK_CHECK_VERSION(3, 0, 0) # include #else # include diff --git a/src/mime.c b/src/mime.c index 3dd4e3a..2262122 100644 --- a/src/mime.c +++ b/src/mime.c @@ -110,7 +110,12 @@ Mime * mime_new(GtkIconTheme * theme) if((mime = object_new(sizeof(*mime))) == NULL) return NULL; if(theme == NULL) +#if GTK_CHECK_VERSION(4, 0, 0) + theme = gtk_icon_theme_get_for_display( + gdk_display_get_default()); +#else theme = gtk_icon_theme_get_default(); +#endif mime->theme = theme; for(g = globs2; *g != NULL; g++) if((fp = fopen(*g, "r")) != NULL) diff --git a/tools/widget.c b/tools/widget.c index e3f0972..a3bce84 100644 --- a/tools/widget.c +++ b/tools/widget.c @@ -142,7 +142,7 @@ int main(int argc, char * argv[]) memset(&prefs, 0, sizeof(prefs)); #if GTK_CHECK_VERSION(4, 0, 0) - gtk_init(&argc, &argv); + gtk_init(); #else gtk_init(&argc, &argv); #endif