I looked at the above-mentioned "porting guide" and optimistically
started on the C code changes, which appear easy enough. Please see
attached patch which at least compiles. For testing it I tried
gtk-builder-convert but this was not enough, see error messages below.
Maybe someone familiar with this can help? Apart from that conversion
the larger work is probably fixing up the autotools files.

I suppose upstream does not care about supporting GTK pre-2.12 so that
the old libglade stuff can go away unconditionally?

Regards,
Tormod

$ gtk-builder-convert xscreensaver-demo.glade2 xscreensaver-demo.gtkbuilder
WARNING: duplicate id "file"
WARNING: duplicate id "activate_menu"
WARNING: duplicate id "lock_menu"
WARNING: duplicate id "kill_menu"
WARNING: duplicate id "restart"
WARNING: duplicate id "separator1"
WARNING: duplicate id "exit_menu"
WARNING: duplicate id "help"
WARNING: duplicate id "about_menu"
WARNING: duplicate id "doc_menu"
Wrote xscreensaver-demo.gtkbuilder
$ ./xscreensaver-demo-Gtk
xscreensaver-demo-Gtk: 20:46:44: Gtk-warning: Unknown property:
GtkOptionMenu.history
xscreensaver-demo-Gtk: 20:46:44: XScreenSaver-warning: Couldn't load
builder file: Unknown internal child: menu
xscreensaver-demo-Gtk: 20:46:44: could not load "xscreensaver-demo.gtkbuilder"
    from /usr/share/xscreensaver/glade/ or current directory.
diff --git a/driver/demo-Gtk.c b/driver/demo-Gtk.c
index da98c53..02770b6 100644
--- a/driver/demo-Gtk.c
+++ b/driver/demo-Gtk.c
@@ -92,7 +92,6 @@
 #include <gdk/gdkx.h>
 
 #ifdef HAVE_GTK2
-# include <glade/glade-xml.h>
 # include <gmodule.h>
 #else  /* !HAVE_GTK2 */
 # define G_MODULE_EXPORT /**/
@@ -208,7 +207,8 @@ typedef struct {
   conf_data *cdata;		/* private data for per-hack configuration */
 
 #ifdef HAVE_GTK2
-  GladeXML *glade_ui;           /* Glade UI file */
+  GtkBuilder *builder;
+  Bool gtk_ui_loaded;
 #endif /* HAVE_GTK2 */
 
   Bool debug_p;			/* whether to print diagnostics */
@@ -339,25 +339,35 @@ name_to_widget (state *s, const char *name)
   if (!*name) abort();
 
 #ifdef HAVE_GTK2
-  if (!s->glade_ui)
+  if (!s->gtk_ui_loaded)
     {
       /* First try to load the Glade file from the current directory;
          if there isn't one there, check the installed directory.
        */
-# define GLADE_FILE_NAME "xscreensaver-demo.glade2"
+# define GLADE_FILE_NAME "xscreensaver-demo.gtkbuilder"
       const char * const files[] = { GLADE_FILE_NAME,
                                      GLADE_DIR "/" GLADE_FILE_NAME };
+      s->builder = gtk_builder_new ();
       int i;
       for (i = 0; i < countof (files); i++)
         {
           struct stat st;
           if (!stat (files[i], &st))
             {
-              s->glade_ui = glade_xml_new (files[i], NULL, NULL);
+              GError* error = NULL;
+              if (gtk_builder_add_from_file (s->builder, files[i], &error))
+                {
+                  s->gtk_ui_loaded = True;
+                }
+              else
+                {
+                  g_warning ("Couldn't load builder file: %s", error->message);
+                  g_error_free (error);
+                }
               break;
             }
         }
-      if (!s->glade_ui)
+      if (!s->gtk_ui_loaded)
 	{
 	  fprintf (stderr,
                    "%s: could not load \"" GLADE_FILE_NAME "\"\n"
@@ -367,10 +377,10 @@ name_to_widget (state *s, const char *name)
 	}
 # undef GLADE_FILE_NAME
 
-      glade_xml_signal_autoconnect (s->glade_ui);
+      gtk_builder_connect_signals(s->builder, NULL);
     }
 
-  w = glade_xml_get_widget (s->glade_ui, name);
+  w = GTK_WIDGET (gtk_builder_get_object (s->builder, name));
 
 #else /* !HAVE_GTK2 */
 

Reply via email to