Hi everyone, I just pushed a couple of patches for cdebconf-gtk. Besides removing conditional code to handle old versions of glib, the main change is for the display of text in the banner, done directly with cairo, thus removing the last bit of deprecated GDK code. I believe I've reproduced the same behaviour ; but if you notice something different I might have missed, please shout.
The next patch could be the one attached. It makes it possible to chose at configure time to compile for either GTK+2 or GTK+3, and in this version compiles the udeb for GTK+2, and the deb for GTK+3. Unfortunately the #if in the code are rather ugly ; but my attempts at making it cleaner ended with something even less readable, so I left them that way. And there's only 6 occurrences, so it's not that bad. Any thought about whether I should merge this patch ? If yes, about enabling GTK+3 for the deb ? Thanks, Regis
>From d7c6920fc2293c4d3782988990234a29ab079ccb Mon Sep 17 00:00:00 2001 From: Regis Boudin <[email protected]> Date: Sat, 9 Jan 2016 18:11:39 +0000 Subject: [PATCH] First shot at being able to build for either GTK+2 or GTK+3 --- configure.ac | 13 ++++++++----- debian/control | 1 + debian/rules | 2 +- src/modules/frontend/gtk/Makefile.in | 6 +++--- src/modules/frontend/gtk/align_text_renderer.c | 14 ++++++++++++++ src/modules/frontend/gtk/screenshot.c | 4 ++++ src/modules/frontend/gtk/ui.c | 8 ++++++++ 7 files changed, 39 insertions(+), 9 deletions(-) diff --git a/configure.ac b/configure.ac index 1defce9..0982f0e 100644 --- a/configure.ac +++ b/configure.ac @@ -148,15 +148,18 @@ if test -z "$FRONTEND_MODULES"; then PKG_CHECK_EXISTS([slang], [FRONTEND_MODULES="$FRONTEND_MODULES slang"], [AC_MSG_WARN([cannot build Slang frontend])]) fi +FRONTEND_MODULES_BUILD="" for frontend in $FRONTEND_MODULES; do case $frontend in - gtk) PKG_CHECK_MODULES([GTK_X11],[glib-2.0 >= 2.31 gtk+-x11-2.0 >= 2.24 pango gdk-pixbuf-2.0]);; - ncurses) PKG_CHECK_MODULES([NCURSES],[ncurses]);; - newt) PKG_CHECK_MODULES([NEWT],[libnewt slang]);; - slang) PKG_CHECK_MODULES([SLANG],[slang]);; - *);; + gtk|gtk2) PKG_CHECK_MODULES([GTK_X11],[glib-2.0 >= 2.31 gtk+-x11-2.0 >= 2.24 pango gdk-pixbuf-2.0], [FRONTEND_MODULES_BUILD="$FRONTEND_MODULES_BUILD gtk"]);; + gtk3) PKG_CHECK_MODULES([GTK_X11],[glib-2.0 >= 2.31 gtk+-x11-3.0 pango gdk-pixbuf-2.0], [FRONTEND_MODULES_BUILD="$FRONTEND_MODULES_BUILD gtk"]);; + ncurses) PKG_CHECK_MODULES([NCURSES],[ncurses], [FRONTEND_MODULES_BUILD="$FRONTEND_MODULES_BUILD ncurses"]);; + newt) PKG_CHECK_MODULES([NEWT],[libnewt slang], [FRONTEND_MODULES_BUILD="$FRONTEND_MODULES_BUILD newt"]);; + slang) PKG_CHECK_MODULES([SLANG],[slang], [FRONTEND_MODULES_BUILD="$FRONTEND_MODULES_BUILD slang"]);; + *) FRONTEND_MODULES_BUILD="$FRONTEND_MODULES_BUILD $frontend";; esac done +FRONTEND_MODULES="$FRONTEND_MODULES_BUILD" AC_SUBST([FRONTEND_MODULES]) AC_SUBST([DB_MODULES]) diff --git a/debian/control b/debian/control index 5a6625b..c57d8eb 100644 --- a/debian/control +++ b/debian/control @@ -10,6 +10,7 @@ Build-Depends: libdebian-installer4-dev (>= 0.41) | libdebian-installer-dev, libglib2.0-dev (>= 2.31), libgtk2.0-dev (>= 2.24), + libgtk3.0-dev, libcairo2-dev (>= 1.8.10-3), libselinux1-dev (>= 2.3) [linux-any] | libselinux-dev [linux-any], dh-autoreconf, diff --git a/debian/rules b/debian/rules index b2b35f4..d00bbb7 100755 --- a/debian/rules +++ b/debian/rules @@ -18,7 +18,7 @@ CONFFILE=/etc/cdebconf.conf LIBDEBCONFDEV=libdebconfclient0-dev LIBDEBCONF=libdebconfclient0 -DEB_FRONTENDS=passthrough text newt gtk +DEB_FRONTENDS=passthrough text newt gtk3 UDEB_FRONTENDS=passthrough text newt gtk ifeq ($(DEB_HOST_ARCH_OS),linux) diff --git a/src/modules/frontend/gtk/Makefile.in b/src/modules/frontend/gtk/Makefile.in index 09fc801..aa45ede 100644 --- a/src/modules/frontend/gtk/Makefile.in +++ b/src/modules/frontend/gtk/Makefile.in @@ -19,9 +19,9 @@ endif MODCFLAGS = @GTK_X11_CFLAGS@ LIBS = @GTK_X11_LIBS@ -MODCFLAGS += -DGTK_DISABLE_DEPRECATED -MODCFLAGS += -DGDK_DISABLE_DEPRECATED -MODCFLAGS += -DGSEAL_ENABLE +#MODCFLAGS += -DGTK_DISABLE_DEPRECATED +#MODCFLAGS += -DGDK_DISABLE_DEPRECATED +#MODCFLAGS += -DGSEAL_ENABLE # XXX: Does not work because of a path issue, needs to be fixed. #MODLDFLAGS += -Wl,--version-script=linker-script diff --git a/src/modules/frontend/gtk/align_text_renderer.c b/src/modules/frontend/gtk/align_text_renderer.c index e85832c..ff5cbf8 100644 --- a/src/modules/frontend/gtk/align_text_renderer.c +++ b/src/modules/frontend/gtk/align_text_renderer.c @@ -203,7 +203,11 @@ static PangoLayout * get_layout(AlignTextRenderer * renderer, } static void align_text_renderer_get_size( +#if GTK_CHECK_VERSION(3,0,0) + GtkCellRenderer * cell, GtkWidget * widget, const GdkRectangle * cell_area, +#else GtkCellRenderer * cell, GtkWidget * widget, GdkRectangle * cell_area, +#endif gint * x_offset, gint * y_offset, gint * width, gint * height) { AlignTextRenderer * renderer = ALIGN_TEXT_RENDERER(cell); @@ -291,9 +295,15 @@ static void find_renderer_glyphs(AlignTextRenderer * renderer, GtkWidget * widge } static void align_text_renderer_render( +#if GTK_CHECK_VERSION(3,0,0) + GtkCellRenderer * cell, cairo_t *cr, GtkWidget * widget, + const GdkRectangle * background_area, const GdkRectangle * cell_area, + GtkCellRendererState flags) +#else GtkCellRenderer * cell, GdkWindow * window, GtkWidget * widget, GdkRectangle * background_area, GdkRectangle * cell_area, GdkRectangle * expose_area, guint flags) +#endif { AlignTextRenderer * renderer = ALIGN_TEXT_RENDERER(cell); PangoLayout * layout; @@ -310,7 +320,11 @@ static void align_text_renderer_render( state = get_state(cell, widget, flags); gtk_cell_renderer_get_padding(cell, &x_padding, &y_padding); +#if GTK_CHECK_VERSION(3,0,0) + gtk_paint_layout(gtk_widget_get_style(widget), cr, state, TRUE, +#else gtk_paint_layout(gtk_widget_get_style(widget), window, state, TRUE, expose_area, +#endif widget, "align_text_renderer", cell_area->x + x_offset + x_padding, cell_area->y + y_offset + y_padding, diff --git a/src/modules/frontend/gtk/screenshot.c b/src/modules/frontend/gtk/screenshot.c index fde55cc..db444d1 100644 --- a/src/modules/frontend/gtk/screenshot.c +++ b/src/modules/frontend/gtk/screenshot.c @@ -71,9 +71,13 @@ static gboolean save_screenshot(GdkWindow * gdk_window, width = gdk_window_get_width(gdk_window); height = gdk_window_get_height(gdk_window); +#if GTK_CHECK_VERSION(3,0,0) pixbuf = gdk_pixbuf_get_from_drawable( NULL /* allocate a new pixbuf */, gdk_window, gdk_colormap_get_system(), 0 /* src_x */, 0 /* src_y */, +#else + pixbuf = gdk_pixbuf_get_from_window(gdk_window, +#endif 0 /* dest_x */, 0 /* dest_y */, width, height); if (NULL == pixbuf) { g_warning("gdk_pixbuf_get_from_drawable failed."); diff --git a/src/modules/frontend/gtk/ui.c b/src/modules/frontend/gtk/ui.c index 7d8fc30..0ba95b9 100644 --- a/src/modules/frontend/gtk/ui.c +++ b/src/modules/frontend/gtk/ui.c @@ -224,7 +224,11 @@ static void create_banner(struct frontend * fe, GtkWidget * container) } fe_data->logo_widget = logo; +#if GTK_CHECK_VERSION(3,0,0) + g_signal_connect_after(G_OBJECT(banner), "draw", +#else g_signal_connect_after(G_OBJECT(banner), "expose_event", +#endif G_CALLBACK(handle_exposed_banner), fe); gtk_box_pack_start(GTK_BOX(container), banner, @@ -409,7 +413,11 @@ struct shortcut { * @param widget destroyed widget * @param shortcut shortcut data */ +#if GTK_CHECK_VERSION(3,0,0) +static void remove_shortcut(GtkWidget * widget, struct shortcut * shortcut) +#else static void remove_shortcut(GtkObject * widget, struct shortcut * shortcut) +#endif { g_signal_handler_disconnect(G_OBJECT(shortcut->window), shortcut->handler_id); -- 2.7.0.rc3

