[Xfce4-commits] <libxfce4ui:master> Compile GTK+-3 version of libxfce4ui when possible.

Nick Schermer noreply at xfce.org
Fri Sep 21 19:14:01 CEST 2012


Updating branch refs/heads/master
         to c2054ccb6cf01fa7c171174769fcf04c2dc340b7 (commit)
       from 163435879ff61423da8960df486402a8db06ffdf (commit)

commit c2054ccb6cf01fa7c171174769fcf04c2dc340b7
Author: Nick Schermer <nick at xfce.org>
Date:   Wed Sep 19 18:57:55 2012 +0200

    Compile GTK+-3 version of libxfce4ui when possible.
    
    Provide a GTK3 version of the library next to the GTK2
    version if GTK3 is found on the system. The same code
    is compiled twice.
    
    Porting of this code is also work of Stephan Arts.

 configure.ac.in                                    |   11 +-
 libxfce4kbd-private/Makefile.am                    |    4 +-
 libxfce4ui/Makefile.am                             |   64 ++++++--
 .../{libxfce4ui-1.pc.in => libxfce4ui-2.pc.in}     |    6 +-
 libxfce4ui/xfce-gdk-extensions.c                   |   15 ++-
 libxfce4ui/xfce-heading.c                          |  189 ++++++++++++++++----
 libxfce4ui/xfce-sm-client.c                        |    7 +-
 libxfce4ui/xfce-spawn.c                            |   13 +-
 libxfce4ui/xfce-titled-dialog.c                    |   27 ++-
 xfce4-about/Makefile.am                            |    4 +-
 10 files changed, 271 insertions(+), 69 deletions(-)

diff --git a/configure.ac.in b/configure.ac.in
index 414bcdb..9889a15 100644
--- a/configure.ac.in
+++ b/configure.ac.in
@@ -126,9 +126,17 @@ dnl ***********************************
 dnl *** Check for required packages ***
 dnl ***********************************
 XDT_CHECK_PACKAGE([GOBJECT], [gobject-2.0], [2.24.0])
-XDT_CHECK_PACKAGE([GTK], [gtk+-2.0], [2.20.0])
+XDT_CHECK_PACKAGE([GTK2], [gtk+-2.0], [2.20.0])
 XDT_CHECK_PACKAGE([LIBXFCE4UTIL], [libxfce4util-1.0], [4.9.0])
 
+dnl ***********************************************************
+dnl *** Optional support for a GTK+3 version of the library ***
+dnl ***********************************************************
+XDT_CHECK_OPTIONAL_PACKAGE([GTK3],
+                           [gtk+-3.0], [3.2.0], [gtk3],
+                           [GTK+ 3 support])
+AM_CONDITIONAL([ENABLE_GTK3_LIBRARY], [test "x$GTK3_FOUND" = "xyes"])
+
 dnl *************************************************
 dnl *** Optional support for startup notification ***
 dnl *************************************************
@@ -301,6 +309,7 @@ icons/48x48/Makefile
 libxfce4kbd-private/libxfce4kbd-private-2.pc
 libxfce4kbd-private/Makefile
 libxfce4ui/libxfce4ui-1.pc
+libxfce4ui/libxfce4ui-2.pc
 libxfce4ui/libxfce4ui-config.h
 libxfce4ui/Makefile
 xfce4-about/Makefile
diff --git a/libxfce4kbd-private/Makefile.am b/libxfce4kbd-private/Makefile.am
index abff01e..284cf21 100644
--- a/libxfce4kbd-private/Makefile.am
+++ b/libxfce4kbd-private/Makefile.am
@@ -40,7 +40,7 @@ libxfce4kbd_private_2_la_SOURCES = \
 libxfce4kbd_private_2_la_CFLAGS = \
 	$(PLATFORM_CFLAGS) \
 	$(GLIB_CFLAGS)  \
-	$(GTK_CFLAGS) \
+	$(GTK2_CFLAGS) \
 	$(LIBX11_CFLAGS) \
 	$(LIBXFCE4UTIL_CFLAGS) \
 	$(XFCONF_CFLAGS)
@@ -56,7 +56,7 @@ libxfce4kbd_private_2_la_LDFLAGS = \
 libxfce4kbd_private_2_la_LIBADD = \
 	$(top_builddir)/libxfce4ui/libxfce4ui-$(LIBXFCE4UI_VERSION_API).la \
 	$(GLIB_LIBS) \
-	$(GTK_LIBS) \
+	$(GTK2_LIBS) \
 	$(LIBX11_LIBS) \
 	$(LIBXFCE4UTIL_LIBS) \
 	$(XFCONF_LIBS)
diff --git a/libxfce4ui/Makefile.am b/libxfce4ui/Makefile.am
index 0c3b8f9..d70f161 100644
--- a/libxfce4ui/Makefile.am
+++ b/libxfce4ui/Makefile.am
@@ -11,8 +11,6 @@ INCLUDES = \
 	-DPACKAGE_LOCALE_DIR=\"$(localedir)\" \
 	$(PLATFORM_CPPFLAGS)
 
-lib_LTLIBRARIES = libxfce4ui-1.la
-
 libxfce4ui_enum_headers = \
 	xfce-sm-client.h
 
@@ -35,13 +33,7 @@ libxfce4ui_built_sources = \
 	libxfce4ui-marshal.c \
 	libxfce4ui-marshal.h
 
-libxfce4ui_includedir = \
-	$(includedir)/xfce4/libxfce4ui-$(LIBXFCE4UI_VERSION_API)/libxfce4ui
-
-libxfce4ui_include_HEADERS = \
-	$(libxfce4ui_headers)
-
-libxfce4ui_1_la_SOURCES = \
+libxfce4ui_sources = \
 	$(libxfce4ui_headers) \
 	$(libxfce4ui_built_sources) \
 	libxfce4ui-config.c \
@@ -55,9 +47,20 @@ libxfce4ui_1_la_SOURCES = \
 	xfce-spawn.c \
 	xfce-titled-dialog.c
 
+libxfce4ui_includedir = \
+	$(includedir)/xfce4/libxfce4ui-$(LIBXFCE4UI_VERSION_API)/libxfce4ui
+
+libxfce4ui_include_HEADERS = \
+	$(libxfce4ui_headers)
+
+lib_LTLIBRARIES = libxfce4ui-1.la
+
+libxfce4ui_1_la_SOURCES = \
+	$(libxfce4ui_sources)
+
 libxfce4ui_1_la_CFLAGS = \
 	$(LIBSM_CFLAGS) \
-	$(GTK_CFLAGS) \
+	$(GTK2_CFLAGS) \
 	$(LIBSTARTUP_NOTIFICATION_CFLAGS) \
 	$(LIBXFCE4UTIL_CFLAGS) \
 	$(PLATFORM_CFLAGS)
@@ -71,13 +74,52 @@ libxfce4ui_1_la_LDFLAGS = \
 
 libxfce4ui_1_la_LIBADD = \
 	$(LIBSM_LIBS) \
-	$(GTK_LIBS) \
+	$(GTK2_LIBS) \
 	$(LIBSTARTUP_NOTIFICATION_LIBS) \
 	$(LIBXFCE4UTIL_LIBS)
 
 pkgconfigdir = $(libdir)/pkgconfig
 pkgconfig_DATA = libxfce4ui-1.pc
 
+##
+## GTK+ 3 support library
+##
+if ENABLE_GTK3_LIBRARY
+
+libxfce4ui2_includedir = \
+	$(includedir)/xfce4/libxfce4ui-2/libxfce4ui
+
+libxfce4ui2_include_HEADERS = \
+	$(libxfce4ui_headers)
+
+lib_LTLIBRARIES += libxfce4ui-2.la
+
+libxfce4ui_2_la_SOURCES = \
+	$(libxfce4ui_sources)
+
+libxfce4ui_2_la_CFLAGS = \
+	$(LIBSM_CFLAGS) \
+	$(GTK3_CFLAGS) \
+	$(LIBSTARTUP_NOTIFICATION_CFLAGS) \
+	$(LIBXFCE4UTIL_CFLAGS) \
+	$(PLATFORM_CFLAGS)
+
+libxfce4ui_2_la_LDFLAGS = \
+	-version-info $(LIBXFCE4UI_VERINFO) \
+	-export-symbols-regex "^[^_].*" \
+	-no-undefined \
+	$(LIBSM_LDFLAGS) \
+	$(PLATFORM_LDFLAGS)
+
+libxfce4ui_2_la_LIBADD = \
+	$(LIBSM_LIBS) \
+	$(GTK3_LIBS) \
+	$(LIBSTARTUP_NOTIFICATION_LIBS) \
+	$(LIBXFCE4UTIL_LIBS)
+
+pkgconfig_DATA += libxfce4ui-2.pc
+
+endif
 
 ##
 ## Rules to auto-generate built sources
diff --git a/libxfce4ui/libxfce4ui-1.pc.in b/libxfce4ui/libxfce4ui-2.pc.in
similarity index 64%
copy from libxfce4ui/libxfce4ui-1.pc.in
copy to libxfce4ui/libxfce4ui-2.pc.in
index cb6a507..0be7b80 100644
--- a/libxfce4ui/libxfce4ui-1.pc.in
+++ b/libxfce4ui/libxfce4ui-2.pc.in
@@ -9,7 +9,7 @@ glade_moduledir=@GLADEUI_PIXMAPDIR@
 
 Name: libxfce4ui
 Description: Widgets library for Xfce
-Requires: gtk+-2.0 libxfce4util-1.0
+Requires: gtk+-3.0 libxfce4util-1.0
 Version: @PACKAGE_VERSION@
-Libs: -L${libdir} -lxfce4ui- at LIBXFCE4UI_VERSION_API@
-Cflags: -I${includedir}/xfce4/libxfce4ui- at LIBXFCE4UI_VERSION_API@
+Libs: -L${libdir} -lxfce4ui-2
+Cflags: -I${includedir}/xfce4/libxfce4ui-2
diff --git a/libxfce4ui/xfce-gdk-extensions.c b/libxfce4ui/xfce-gdk-extensions.c
index 402da5b..90599a0 100644
--- a/libxfce4ui/xfce-gdk-extensions.c
+++ b/libxfce4ui/xfce-gdk-extensions.c
@@ -49,12 +49,21 @@
 GdkScreen *
 xfce_gdk_screen_get_active (gint *monitor_return)
 {
-  GdkDisplay *display;
-  gint        rootx, rooty;
-  GdkScreen  *screen;
+  GdkDisplay       *display;
+  gint              rootx, rooty;
+  GdkScreen        *screen;
 
+#if GTK_CHECK_VERSION (3, 0, 0)
+  GdkDeviceManager *manager;
+
+  display = gdk_display_get_default ();
+  manager = gdk_display_get_device_manager (display);
+  gdk_device_get_position (gdk_device_manager_get_client_pointer (manager),
+                           &screen, &rootx, &rooty);
+#else
   display = gdk_display_get_default ();
   gdk_display_get_pointer (display, &screen, &rootx, &rooty, NULL);
+#endif
 
   if (G_UNLIKELY (screen == NULL))
     {
diff --git a/libxfce4ui/xfce-heading.c b/libxfce4ui/xfce-heading.c
index 064becc..83e1de7 100644
--- a/libxfce4ui/xfce-heading.c
+++ b/libxfce4ui/xfce-heading.c
@@ -39,17 +39,29 @@
 #define XFCE_HEADING_ICON_SIZE  48
 
 
-static void         _xfce_heading_finalize       (GObject          *object);
-static void         _xfce_heading_realize        (GtkWidget        *widget);
-static void         _xfce_heading_size_request   (GtkWidget        *widget,
-                                                  GtkRequisition   *requisition);
-static void         _xfce_heading_style_set      (GtkWidget        *widget,
-                                                  GtkStyle         *previous_style);
-static gboolean     _xfce_heading_expose_event   (GtkWidget        *widget,
-                                                  GdkEventExpose   *event);
-static AtkObject   *_xfce_heading_get_accessible (GtkWidget        *widget);
-static PangoLayout *_xfce_heading_make_layout    (XfceHeading      *heading);
-static GdkPixbuf   *_xfce_heading_make_pixbuf    (XfceHeading      *heading);
+static void         _xfce_heading_finalize             (GObject          *object);
+static void         _xfce_heading_realize              (GtkWidget        *widget);
+static void         _xfce_heading_size_request         (GtkWidget        *widget,
+                                                        GtkRequisition   *requisition);
+#if GTK_CHECK_VERSION (3, 0, 0)
+static void         _xfce_heading_get_preferred_width  (GtkWidget        *widget,
+                                                        gint             *min,
+                                                        gint             *natural);
+static void         _xfce_heading_get_preferred_height (GtkWidget        *widget,
+                                                        gint             *min,
+                                                        gint             *natural);
+static gboolean     _xfce_heading_draw                 (GtkWidget        *widget,
+                                                        cairo_t          *ctx);
+#else
+static void         _xfce_heading_style_set            (GtkWidget        *widget,
+                                                        GtkStyle         *previous_style);
+static gboolean     _xfce_heading_expose_event         (GtkWidget        *widget,
+                                                        GdkEventExpose   *event);
+#endif
+static AtkObject   *_xfce_heading_get_accessible       (GtkWidget        *widget);
+static PangoLayout *_xfce_heading_make_layout          (XfceHeading      *heading);
+static GdkPixbuf   *_xfce_heading_make_pixbuf          (XfceHeading      *heading);
+
 
 
 
@@ -62,12 +74,12 @@ struct _XfceHeadingClass
 struct _XfceHeading
 {
   /*< private >*/
-  GtkWidget  __parent__;
+  GtkWidget       __parent__;
 
-  GdkPixbuf *icon;
-  gchar     *icon_name;
-  gchar     *subtitle;
-  gchar     *title;
+  GdkPixbuf       *icon;
+  gchar           *icon_name;
+  gchar           *subtitle;
+  gchar           *title;
 };
 
 
@@ -87,10 +99,16 @@ _xfce_heading_class_init (XfceHeadingClass *klass)
 
   gtkwidget_class = GTK_WIDGET_CLASS (klass);
   gtkwidget_class->realize = _xfce_heading_realize;
+  gtkwidget_class->get_accessible = _xfce_heading_get_accessible;
+#if GTK_CHECK_VERSION (3, 0, 0)
+  gtkwidget_class->get_preferred_width = _xfce_heading_get_preferred_width;
+  gtkwidget_class->get_preferred_height = _xfce_heading_get_preferred_height;
+  gtkwidget_class->draw = _xfce_heading_draw;
+#else
   gtkwidget_class->size_request = _xfce_heading_size_request;
   gtkwidget_class->style_set = _xfce_heading_style_set;
   gtkwidget_class->expose_event = _xfce_heading_expose_event;
-  gtkwidget_class->get_accessible = _xfce_heading_get_accessible;
+#endif
 }
 
 
@@ -99,7 +117,7 @@ static void
 _xfce_heading_init (XfceHeading *heading)
 {
   /* setup the widget parameters */
-  GTK_WIDGET_UNSET_FLAGS (heading, GTK_NO_WINDOW);
+  gtk_widget_set_has_window (GTK_WIDGET (heading), TRUE);
 }
 
 
@@ -125,34 +143,138 @@ _xfce_heading_finalize (GObject *object)
 static void
 _xfce_heading_realize (GtkWidget *widget)
 {
-  GdkWindowAttr attributes;
+  GdkWindowAttr  attributes;
+  GtkAllocation  allocation;
+  GdkWindow     *window;
 
   /* mark the widget as realized */
-  GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED);
+  gtk_widget_set_realized (widget, TRUE);
+  gtk_widget_get_allocation (widget, &allocation);
 
   /* setup the window attributes */
-  attributes.x = widget->allocation.x;
-  attributes.y = widget->allocation.y;
-  attributes.width = widget->allocation.width;
-  attributes.height = widget->allocation.height;
+  attributes.x = allocation.x;
+  attributes.y = allocation.y;
+  attributes.width = allocation.width;
+  attributes.height = allocation.height;
   attributes.wclass = GDK_INPUT_OUTPUT;
   attributes.window_type = GDK_WINDOW_CHILD;
   attributes.visual = gtk_widget_get_visual (widget);
-  attributes.colormap = gtk_widget_get_colormap (widget);
   attributes.event_mask = gtk_widget_get_events (widget)
                         | GDK_EXPOSURE_MASK;
 
   /* allocate the widget window */
-  widget->window = gdk_window_new (gtk_widget_get_parent_window (widget), &attributes,
-                                   GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP);
-  gdk_window_set_user_data (widget->window, widget);
+  window = gdk_window_new (gtk_widget_get_parent_window (widget), &attributes,
+                           GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL);
+  gtk_widget_set_window (widget, window);
+  gdk_window_set_user_data (window, widget);
+}
+
+
+#if GTK_CHECK_VERSION (3, 0, 0)
+static void
+_xfce_heading_get_preferred_width (GtkWidget *widget,
+                                   gint      *min,
+                                   gint      *natural)
+{
+  GtkRequisition requisition;
+
+  _xfce_heading_size_request (widget, &requisition);
+
+  *min = *natural = requisition.width;
+}
+
+
+
+static void
+_xfce_heading_get_preferred_height (GtkWidget *widget,
+                                    gint      *min,
+                                    gint      *natural)
+{
+
+  GtkRequisition requisition;
+
+  _xfce_heading_size_request (widget, &requisition);
+
+  *min = *natural = requisition.height;
+}
+
+
+
+static gboolean
+_xfce_heading_draw (GtkWidget *widget,
+                    cairo_t   *ctx)
+{
+  XfceHeading     *heading = XFCE_HEADING (widget);
+  PangoLayout     *layout;
+  GdkPixbuf       *pixbuf;
+  gboolean         rtl;
+  gint             width;
+  gint             height;
+  gint             x;
+  gint             y;
+  GtkAllocation    allocation;
+  GtkStyleContext *context;
+
+  gtk_widget_get_allocation (widget, &allocation);
+
+  context = gtk_widget_get_style_context (widget);
+
+  gtk_style_context_save (context);
+  gtk_style_context_add_class (context, GTK_STYLE_CLASS_HIGHLIGHT);
+
+  /* check if we should render from right to left */
+  rtl = (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL);
+
+  /* determine the initial horizontal position */
+  x = (rtl ? allocation.width - XFCE_HEADING_BORDER : XFCE_HEADING_BORDER);
+
+  gtk_render_background (context, ctx,
+                         allocation.x, allocation.y,
+                         allocation.x + allocation.width,
+                         allocation.y + allocation.height);
+
+  /* check if we have a pixbuf to render */
+  pixbuf = _xfce_heading_make_pixbuf (heading);
+  if (G_LIKELY (pixbuf != NULL))
+    {
+      /* determine the pixbuf dimensions */
+      width = gdk_pixbuf_get_width (pixbuf);
+      height = gdk_pixbuf_get_height (pixbuf);
+
+      /* determine the vertical position */
+      y = (allocation.height - height) / 2;
+
+      gtk_render_icon (context, ctx,
+                       pixbuf,
+                       rtl ? x - width : x,
+                       y);
+
+      /* release the pixbuf */
+      g_object_unref (G_OBJECT (pixbuf));
+
+      /* advance the horizontal position */
+      x += (rtl ? -1 : 1) * (width + XFCE_HEADING_SPACING);
+    }
+
+  /* generate the title layout */
+  layout = _xfce_heading_make_layout (heading);
+  pango_layout_get_pixel_size (layout, &width, &height);
+
+  /* determine the vertical position */
+  y = (allocation.height - height) / 2;
 
-  /* connect the style to the window */
-  widget->style = gtk_style_attach (widget->style, widget->window);
+  gtk_render_layout (context, ctx,
+                     rtl ? x - width : x, y,
+                     layout);
 
-  /* set background color (using the base color) */
-  gdk_window_set_background (widget->window, &widget->style->base[GTK_STATE_NORMAL]);
+  /* release the layout */
+  g_object_unref (G_OBJECT (layout));
+
+  gtk_style_context_restore (context);
+
+  return FALSE;
 }
+#endif
 
 
 
@@ -193,6 +315,7 @@ _xfce_heading_size_request (GtkWidget      *widget,
 
 
 
+#if !GTK_CHECK_VERSION (3, 0, 0)
 static void
 _xfce_heading_style_set (GtkWidget *widget,
                          GtkStyle  *previous_style)
@@ -266,6 +389,7 @@ _xfce_heading_expose_event (GtkWidget      *widget,
 
   return FALSE;
 }
+#endif
 
 
 
@@ -312,6 +436,7 @@ _xfce_heading_make_layout (XfceHeading *heading)
   /* allocate and setup a new layout from the widget's context */
   layout = gtk_widget_create_pango_layout (GTK_WIDGET (heading), text->str);
 
+
   /* allocate an attribute list (large bold title) */
   attr_list = pango_attr_list_new ();
   attribute = pango_attr_scale_new (PANGO_SCALE_LARGE); /* large title */
diff --git a/libxfce4ui/xfce-sm-client.c b/libxfce4ui/xfce-sm-client.c
index c757246..509406b 100644
--- a/libxfce4ui/xfce-sm-client.c
+++ b/libxfce4ui/xfce-sm-client.c
@@ -56,7 +56,8 @@
 #include <X11/SM/SMlib.h>
 #endif
 
-#include <gdk/gdkwindow.h>
+#include <gdk/gdk.h>
+#include <gdk/gdkx.h>
 #include <gtk/gtk.h>
 
 #include <libxfce4util/libxfce4util.h>
@@ -643,7 +644,7 @@ xfce_sm_client_set_client_id(XfceSMClient *sm_client,
     g_free(sm_client->client_id);
     sm_client->client_id = g_strdup(client_id);
 
-    gdk_set_sm_client_id(sm_client->client_id);
+    gdk_x11_set_sm_client_id(sm_client->client_id);
 
     g_object_notify(G_OBJECT(sm_client), "client-id");
 }
@@ -1719,7 +1720,7 @@ xfce_sm_client_disconnect(XfceSMClient *sm_client)
 
     SmcCloseConnection(sm_client->session_connection, 0, NULL);
     sm_client->session_connection = NULL;
-    gdk_set_sm_client_id(NULL);
+    gdk_x11_set_sm_client_id(NULL);
 
     xfce_sm_client_set_state(sm_client, XFCE_SM_CLIENT_STATE_DISCONNECTED);
 #endif
diff --git a/libxfce4ui/xfce-spawn.c b/libxfce4ui/xfce-spawn.c
index 2479d88..e023c55 100644
--- a/libxfce4ui/xfce-spawn.c
+++ b/libxfce4ui/xfce-spawn.c
@@ -210,12 +210,14 @@ xfce_spawn_get_active_workspace_number (GdkScreen *screen)
   _NET_CURRENT_DESKTOP = XInternAtom (GDK_WINDOW_XDISPLAY (root), "_NET_CURRENT_DESKTOP", False);
   _WIN_WORKSPACE = XInternAtom (GDK_WINDOW_XDISPLAY (root), "_WIN_WORKSPACE", False);
 
-  if (XGetWindowProperty (GDK_WINDOW_XDISPLAY (root), GDK_WINDOW_XWINDOW (root),
+  if (XGetWindowProperty (GDK_WINDOW_XDISPLAY (root),
+                          gdk_x11_get_default_root_xwindow(),
                           _NET_CURRENT_DESKTOP, 0, 32, False, XA_CARDINAL,
                           &type_ret, &format_ret, &nitems_ret, &bytes_after_ret,
                           (gpointer) &prop_ret) != Success)
     {
-      if (XGetWindowProperty (GDK_WINDOW_XDISPLAY (root), GDK_WINDOW_XWINDOW (root),
+      if (XGetWindowProperty (GDK_WINDOW_XDISPLAY (root),
+                              gdk_x11_get_default_root_xwindow(),
                               _WIN_WORKSPACE, 0, 32, False, XA_CARDINAL,
                               &type_ret, &format_ret, &nitems_ret, &bytes_after_ret,
                               (gpointer) &prop_ret) != Success)
@@ -235,7 +237,12 @@ xfce_spawn_get_active_workspace_number (GdkScreen *screen)
       XFree (prop_ret);
     }
 
-  gdk_error_trap_pop ();
+#if GTK_CHECK_VERSION (3, 0, 0)
+  gdk_error_trap_pop_ignored ();
+#else
+  if (gdk_error_trap_pop () != 0)
+    return 0;
+#endif
 
   return ws_num;
 }
diff --git a/libxfce4ui/xfce-titled-dialog.c b/libxfce4ui/xfce-titled-dialog.c
index 5c8939d..30a3bb9 100644
--- a/libxfce4ui/xfce-titled-dialog.c
+++ b/libxfce4ui/xfce-titled-dialog.c
@@ -106,8 +106,8 @@ xfce_titled_dialog_class_init (XfceTitledDialogClass *klass)
 
   /* connect additional key bindings to the GtkDialog::close action signal */
   binding_set = gtk_binding_set_by_class (klass);
-  gtk_binding_entry_add_signal (binding_set, GDK_w, GDK_CONTROL_MASK, "close", 0);
-  gtk_binding_entry_add_signal (binding_set, GDK_W, GDK_CONTROL_MASK, "close", 0);
+  gtk_binding_entry_add_signal (binding_set, GDK_KEY_w, GDK_CONTROL_MASK, "close", 0);
+  gtk_binding_entry_add_signal (binding_set, GDK_KEY_W, GDK_CONTROL_MASK, "close", 0);
 }
 
 
@@ -117,16 +117,22 @@ xfce_titled_dialog_init (XfceTitledDialog *titled_dialog)
 {
   GtkWidget *line;
   GtkWidget *vbox;
+  GtkWidget *content_area;
 
   /* connect the private data */
   titled_dialog->priv = XFCE_TITLED_DIALOG_GET_PRIVATE (titled_dialog);
 
   /* remove the main dialog box from the window */
-  g_object_ref (G_OBJECT (GTK_DIALOG (titled_dialog)->vbox));
-  gtk_container_remove (GTK_CONTAINER (titled_dialog), GTK_DIALOG (titled_dialog)->vbox);
+  content_area = gtk_dialog_get_content_area (GTK_DIALOG (titled_dialog));
+  g_object_ref (G_OBJECT (content_area));
+  gtk_container_remove (GTK_CONTAINER (titled_dialog), content_area);
 
   /* add a new vbox w/o border to the main window */
+#if GTK_CHECK_VERSION (3, 0, 0)
+  vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
+#else
   vbox = gtk_vbox_new (FALSE, 0);
+#endif
   gtk_container_add (GTK_CONTAINER (titled_dialog), vbox);
   gtk_widget_show (vbox);
 
@@ -136,13 +142,17 @@ xfce_titled_dialog_init (XfceTitledDialog *titled_dialog)
   gtk_widget_show (titled_dialog->priv->heading);
 
   /* add the separator between header and content */
+#if GTK_CHECK_VERSION (3, 0, 0)
+  line = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL);
+#else
   line = gtk_hseparator_new ();
+#endif
   gtk_box_pack_start (GTK_BOX (vbox), line, FALSE, FALSE, 0);
   gtk_widget_show (line);
 
   /* add the main dialog box to the new vbox */
-  gtk_box_pack_start (GTK_BOX (vbox), GTK_DIALOG (titled_dialog)->vbox, TRUE, TRUE, 0);
-  g_object_unref (G_OBJECT (GTK_DIALOG (titled_dialog)->vbox));
+  gtk_box_pack_start (GTK_BOX (vbox), content_area, TRUE, TRUE, 0);
+  g_object_unref (G_OBJECT(content_area));
 
   /* make sure to update the heading whenever one of the relevant window properties changes */
   g_signal_connect (G_OBJECT (titled_dialog), "notify::icon", G_CALLBACK (xfce_titled_dialog_update_heading), NULL);
@@ -216,11 +226,11 @@ xfce_titled_dialog_close (GtkDialog *dialog)
   GdkEvent *event;
 
   /* verify that the dialog is realized */
-  if (G_LIKELY (GTK_WIDGET_REALIZED (dialog)))
+  if (G_LIKELY (gtk_widget_get_realized (GTK_WIDGET (dialog))))
     {
       /* send a delete event to the dialog */
       event = gdk_event_new (GDK_DELETE);
-      event->any.window = g_object_ref (GTK_WIDGET (dialog)->window);
+      event->any.window = g_object_ref (gtk_widget_get_window(GTK_WIDGET (dialog)));
       event->any.send_event = TRUE;
       gtk_main_do_event (event);
       gdk_event_free (event);
@@ -283,7 +293,6 @@ xfce_titled_dialog_new_with_buttons (const gchar    *title,
   /* allocate the dialog */
   dialog = g_object_new (XFCE_TYPE_TITLED_DIALOG,
                          "destroy-with-parent", ((flags & GTK_DIALOG_DESTROY_WITH_PARENT) != 0),
-                         "has-separator", ((flags & GTK_DIALOG_NO_SEPARATOR) == 0),
                          "modal", ((flags & GTK_DIALOG_MODAL) != 0),
                          "title", title,
                          NULL);
diff --git a/xfce4-about/Makefile.am b/xfce4-about/Makefile.am
index 0187239..7234dd9 100644
--- a/xfce4-about/Makefile.am
+++ b/xfce4-about/Makefile.am
@@ -20,13 +20,13 @@ xfce4_about_SOURCES = \
 
 xfce4_about_CFLAGS = \
 	$(LIBXFCE4UTIL_CFLAGS) \
-	$(GTK_CFLAGS) \
+	$(GTK2_CFLAGS) \
 	$(PLATFORM_CFLAGS)
 
 xfce4_about_LDADD = \
 	$(top_builddir)/libxfce4ui/libxfce4ui-$(LIBXFCE4UI_VERSION_API).la \
 	$(LIBXFCE4UTIL_LIBS) \
-	$(GTK_LIBS)
+	$(GTK2_LIBS)
 
 xfce4_about_DEPENDENCIES = \
 	$(top_builddir)/libxfce4ui/libxfce4ui-$(LIBXFCE4UI_VERSION_API).la


More information about the Xfce4-commits mailing list