[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

More cdebconf patches



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 <regis@boudin.name>
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


Reply to: