[telegnome] Port from libgnome and libgnomeui



commit 88af03391c7079c496d875266a457e68c104bf06
Author: Colin Watson <cjwatson debian org>
Date:   Tue Feb 2 04:35:13 2016 +0000

    Port from libgnome and libgnomeui
    
    * src/gui.c (tg_gui_create_channel_menu): Rename to ...
    (tg_gui_populate_channel_menu): ... this.  Repopulate an existing
    menu rather than creating a new one.
    (tg_gui_refresh_channel_menu): Likewise.
    (tg_gui_print_in_statusbar): Adjust for GtkStatusbar.  Accept a NULL
    parameter to indicate a request to clear the status bar.
    (tg_gui_new): Build user interface using GtkUIManager rather than
    GnomeApp.  Adjust users of various interface elements elsewhere.
    Get the logo from a resource rather than using GnomeProgram to get
    it from the file system.
    (tg_gui_get_app): Rename to ...
    (tg_gui_get_window): ... this.  Adjust caller.
    (tg_gui_cb_help_contents): New function.
    * src/gui.h (tg_gui_cb_help_contents): New prototype.
    (tg_gui_get_app): Rename to ...
    (tg_gui_get_window): ... this.
    * src/http.c: Include <stdlib.h>.
    * src/main.c: Include <libintl.h>.
    (main): Call gtk_init rather than gnome_program_init.
    * src/main.h (TG_MENU_XML): New definition.
    (TG_NOTFOUND_PIXMAP, TG_LOGO_PIXMAP): Change to refer to resource
    paths rather than relative file paths.
    * src/menu.h: Rewrite using GtkActionEntry.
    * src/menu.xml: New file.
    * src/telegnome.gresource.xml: New file.
    * src/view.c (tg_view_update_page): Get the not-found image from a
    resource rather than using GnomeProgram to get it from the file
    system.
    
    * configure.ac: Use AM_PATH_GLIB_2_0.  Remove libgnomeui-2.0.
    Require gdk-pixbuf-2.0 >= 2.26.  Check for xmllint.
    * pixmaps/Makefile.am (pixmapdir, pixmap_DATA): Remove; images are
    now built into the binary as resources instead.
    * src/Makefile.am (AM_CPPFLAGS): Add $(GLIB_CFLAGS).
    (telegnome_built, BUILT_SOURCES, nodist_telegnome_SOURCES): New
    variables.
    (resources.c, resources.h): Build from telegnome.gresource.xml.
    (telegnome_LDADD): Add $(GLIB_LIBS).
    * src/.gitignore: Add resources.c and resources.h.
    * po/POTFILES.in: Add src/menu.xml.

 NEWS                        |    2 +
 configure.ac                |    9 ++-
 pixmaps/Makefile.am         |    4 -
 po/POTFILES.in              |    1 +
 src/.gitignore              |    2 +
 src/Makefile.am             |   18 +++-
 src/gui.c                   |  202 ++++++++++++++++++++++++++-----------------
 src/gui.h                   |    4 +-
 src/http.c                  |    3 +-
 src/main.c                  |    8 +-
 src/main.h                  |    5 +-
 src/menu.h                  |   41 ++++-----
 src/menu.xml                |   15 +++
 src/telegnome.gresource.xml |   25 ++++++
 src/view.c                  |   12 +--
 15 files changed, 227 insertions(+), 124 deletions(-)
---
diff --git a/NEWS b/NEWS
index 0914cce..b881046 100644
--- a/NEWS
+++ b/NEWS
@@ -2,6 +2,8 @@ Changes in TeleGNOME 0.2.1
 ==========================
 
  * Don't reset current-channel to the first configured channel on startup.
+ * Port from libgnome and libgnomeui to less-deprecated equivalents, mostly
+   GResource and GtkUIManager.
 
 Changes in TeleGNOME 0.2.0
 ==========================
diff --git a/configure.ac b/configure.ac
index 0b7126b..8299330 100644
--- a/configure.ac
+++ b/configure.ac
@@ -22,7 +22,14 @@ AC_PROG_INSTALL
 
 AC_DEFINE_UNQUOTED([SYSCONFDIR], "$sysconfdir", [System configuration directory.])
 
-PKG_CHECK_MODULES([TELEGNOME], [glib-2.0 >= 2.34 gobject-2.0 >= 2.44 gtk+-2.0 >= 2.20 gdk-pixbuf-2.0 
libgnomeui-2.0 gio-2.0 dconf uuid])
+AM_PATH_GLIB_2_0([2.44.0], [], [AC_MSG_ERROR([GLib >= 2.44.0 is required])], [gobject gio])
+PKG_CHECK_MODULES([TELEGNOME], [gtk+-2.0 >= 2.20 gdk-pixbuf-2.0 >= 2.26 dconf uuid])
+
+AC_ARG_VAR([XMLLINT], [the xmllint program])
+AC_PATH_PROG([XMLLINT], [xmllint])
+if test -z "$XMLLINT"; then
+  AC_MSG_ERROR([xmllint not found])
+fi
 
 PROGRAMS_TELEGNOME="telegnome"
 AC_SUBST(PROGRAMS_TELEGNOME)
diff --git a/pixmaps/Makefile.am b/pixmaps/Makefile.am
index 67b9782..9f76a73 100644
--- a/pixmaps/Makefile.am
+++ b/pixmaps/Makefile.am
@@ -1,5 +1 @@
 EXTRA_DIST = telegnome-logo.png testbeeld.png telegnome-icon.png
-
-pixmapdir = $(datadir)/pixmaps/telegnome
-
-pixmap_DATA = telegnome-logo.png testbeeld.png telegnome-icon.png
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 31dfbf1..a5b23a7 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -7,4 +7,5 @@ src/main.c
 src/prefs.c
 src/view.c
 src/channel.c
+src/menu.xml
 telegnome.desktop.in
diff --git a/src/.gitignore b/src/.gitignore
index 63bf2c6..3bd8fd9 100644
--- a/src/.gitignore
+++ b/src/.gitignore
@@ -1,3 +1,5 @@
 *.o
 .deps
+resources.c
+resources.h
 telegnome
diff --git a/src/Makefile.am b/src/Makefile.am
index 80b89cd..a3ffc4b 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1,7 +1,8 @@
-AM_CPPFLAGS = -I. -I$(srcdir)/ $(TELEGNOME_CFLAGS)
+AM_CPPFLAGS = -I. -I$(srcdir)/ $(GLIB_CFLAGS) $(TELEGNOME_CFLAGS)
 
-bin_PROGRAMS=telegnome
-telegnome_SOURCES= \
+bin_PROGRAMS = telegnome
+
+telegnome_SOURCES = \
        main.h \
        main.c \
        http.h \
@@ -20,5 +21,14 @@ telegnome_SOURCES= \
        legacy-config.c \
        legacy-config.h
 
+telegnome_built = \
+       resources.c \
+       resources.h
+BUILT_SOURCES = $(telegnome_built)
+nodist_telegnome_SOURCES = $(telegnome_built)
+
+resources.c resources.h: telegnome.gresource.xml Makefile $(shell $(GLIB_COMPILE_RESOURCES) 
--generate-dependencies --sourcedir $(srcdir) $(srcdir)/telegnome.gresource.xml)
+       $(AM_V_GEN) XMLLINT=$(XMLLINT) $(GLIB_COMPILE_RESOURCES) --target $@ --sourcedir $(srcdir) --generate 
--c-name tg $<
+
 LINK_FLAGS= $(GNOME_LIBDIR) $(INTLLIBS) $(GHTTP_LIB)
-telegnome_LDADD=$(LINK_FLAGS) $(GNOME_LIBDIR) $(TELEGNOME_LIBS)
+telegnome_LDADD=$(LINK_FLAGS) $(GNOME_LIBDIR) $(GLIB_LIBS) $(TELEGNOME_LIBS)
diff --git a/src/gui.c b/src/gui.c
index a87bb8b..ed91b57 100644
--- a/src/gui.c
+++ b/src/gui.c
@@ -28,10 +28,9 @@
 #include <glib/gi18n.h>
 #include <glib-object.h>
 #include <gio/gio.h>
+#include <gdk/gdk.h>
 #include <gdk/gdkkeysyms.h>
 #include <gtk/gtk.h>
-#include <libgnome/libgnome.h>
-#include <libgnomeui/libgnomeui.h>
 
 #include "gui.h"
 #include "main.h"
@@ -42,16 +41,17 @@
 struct _TgGui {
     GObject parent_instance;
 
-    GtkWidget *app;
+    GtkWidget *window;
+    GtkAccelGroup *accel_group;
+    GtkWidget *vbox;
+    GtkWidget *progress_bar;
+    GtkWidget *status_bar;
 
     GSettings *settings;
 
-    GtkWidget *statusbar;
     GtkWidget *entry;
     GtkWidget *pixmap;
 
-    GtkProgressBar *progress;
-
     GtkWidget *zoomlabel;
 
     GtkWidget *zoombutton;
@@ -103,7 +103,7 @@ tg_gui_update_title_bar(void)
            currentview->channel, "name", &name, "description", &desc, NULL);
        if (name != NULL && desc != NULL) {
            sprintf(buf, _("TeleGNOME: %s (%s)"), name, desc);
-           gtk_window_set_title(GTK_WINDOW(gui->app), buf);
+           gtk_window_set_title(GTK_WINDOW(gui->window), buf);
        }
        g_free(desc);
        g_free(name);
@@ -181,15 +181,19 @@ tg_gui_channel_menu_item_activate(GtkWidget *w, gpointer data)
 /*************************
  * create the channel menu
  */
-static GtkWidget *
-tg_gui_create_channel_menu(void)
+static void
+tg_gui_populate_channel_menu(void)
 {
-    GtkWidget *menu, *item;
+    GList *children, *iter;
+    GtkWidget *item;
     int i;
     TgChannel *channel;
 
     g_assert(gui->channels != NULL);
-    menu = gtk_menu_new();
+
+    children = gtk_container_get_children(GTK_CONTAINER(gui->channel_menu));
+    for (iter = children; iter; iter = iter->next)
+       gtk_widget_destroy(GTK_WIDGET(iter->data));
 
     for (i=0; i<g_slist_length(gui->channels); i++) {
        gchar *name;
@@ -202,17 +206,11 @@ tg_gui_create_channel_menu(void)
        g_signal_connect(G_OBJECT(item), "activate",
                         G_CALLBACK(tg_gui_channel_menu_item_activate),
                         (gpointer)channel);
-       gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
+       gtk_menu_shell_append(GTK_MENU_SHELL(gui->channel_menu), item);
        gtk_widget_show(item);
 
        g_free(name);
     }
-
-    item = gtk_menu_item_new_with_label(_("Channels"));
-    gtk_widget_show(item);
-    gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), menu);
-
-    return item;
 }
 
 /*************************
@@ -320,21 +318,11 @@ tg_gui_reload_channels(void)
 static void
 tg_gui_refresh_channel_menu(void)
 {
-    /* dispose the menu if it was already added */
-    if (gui->channel_menu != NULL) {
-       gtk_container_remove(
-           GTK_CONTAINER(GNOME_APP(gui->app)->menubar), gui->channel_menu);
-    }
-    
     /* load the channels from disk */
     tg_gui_reload_channels();
 
-    /* create the menu */
-    gui->channel_menu = tg_gui_create_channel_menu();
-    
-    /* and add it to the menu bar */
-    gtk_menu_shell_insert(
-       GTK_MENU_SHELL(GNOME_APP(gui->app)->menubar), gui->channel_menu, 2);
+    /* re-populate the menu */
+    tg_gui_populate_channel_menu();
 }
 
 /*******************************
@@ -343,9 +331,13 @@ tg_gui_refresh_channel_menu(void)
 static void
 tg_gui_print_in_statusbar(const char *buf)  /*FIXME: buffersize*/
 {
-    g_assert(buf != NULL);
-    gnome_appbar_set_status(GNOME_APPBAR(gui->statusbar), buf);
-    gtk_widget_show(GTK_WIDGET(gui->statusbar));
+    guint context_id;
+
+    context_id = gtk_statusbar_get_context_id(GTK_STATUSBAR(gui->status_bar),
+                                             "errors");
+    gtk_statusbar_remove_all(GTK_STATUSBAR(gui->status_bar), context_id);
+    if (buf)
+       gtk_statusbar_push(GTK_STATUSBAR(gui->status_bar), context_id, buf);
 }
 
 /******************************* 
@@ -380,11 +372,11 @@ static gint
 tg_gui_pager_timer(gpointer g)
 {
     gui->page_progress += gui->page_msecs/100;
-    gtk_progress_bar_set_fraction(gui->progress, gui->page_progress / (gdouble)gui->page_msecs);
+    gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(gui->progress_bar), gui->page_progress / 
(gdouble)gui->page_msecs);
 
     if (gui->page_progress >= gui->page_msecs) {
        gui->page_progress = 0;
-       gtk_progress_bar_set_fraction(gui->progress, 0.0);
+       gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(gui->progress_bar), 0.0);
        tg_gui_cb_next_page(NULL, NULL);
     }
     return 1;
@@ -393,7 +385,7 @@ tg_gui_pager_timer(gpointer g)
 static void 
 tg_gui_cb_toggle_paging(GtkWidget *w, gpointer data) 
 {
-    gtk_progress_bar_set_fraction(gui->progress, 0.0);
+    gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(gui->progress_bar), 0.0);
     if (gui->page_status) {
        if (gui->page_timer != -1) gtk_timeout_remove(gui->page_timer);
        gui->page_timer = -1;
@@ -582,7 +574,7 @@ tg_gui_finalize (GObject *object)
 {
     TgGui *gui = TG_GUI (object);
 
-    g_clear_pointer (&gui->app, gtk_widget_destroy);
+    g_clear_pointer (&gui->window, gtk_widget_destroy);
     g_clear_object (&gui->settings);
     g_clear_pointer (&gui->channel_children, g_strfreev);
     if (gui->channels != NULL) {
@@ -663,28 +655,65 @@ TgGui *
 tg_gui_new (GSettings *settings, gchar *startpage)
 {
     GtkWidget *toolbar;
+    GtkUIManager *ui_manager;
+    GtkActionGroup *action_group;
+    GtkAccelGroup *accel_group;
+    GBytes *menu_data;
+    GtkWidget *menu_bar;
+    GtkWidget *progress_status_box;
+    GtkWidget *status_frame;
     GdkPixbuf *pixbuf;
     GError *error = NULL;
 
     gui = g_object_new (TG_TYPE_GUI, NULL);
 
     /* the app */
-    gui->app = gnome_app_new (PACKAGE, _("TeleGNOME: Teletext for GNOME"));
-    /* gtk_window_set_policy (GTK_WINDOW (gui->app), FALSE, FALSE, TRUE); */
-    gtk_widget_realize (GTK_WIDGET (gui->app));
+    gui->window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+    gtk_window_set_title (GTK_WINDOW (gui->window),
+                         _("TeleGNOME: Teletext for GNOME"));
+    gtk_window_set_resizable (GTK_WINDOW (gui->window), FALSE);
+    gui->accel_group = gtk_accel_group_new ();
+    gtk_window_add_accel_group (GTK_WINDOW (gui->window), gui->accel_group);
+    gui->vbox = gtk_vbox_new (FALSE, 0);
+    gtk_container_add (GTK_CONTAINER (gui->window), gui->vbox);
+
+    gtk_widget_realize (GTK_WIDGET (gui->window));
 
     toolbar = tg_gui_new_toolbar();
 
     /* attach a keyboard event */
-    g_signal_connect (G_OBJECT (gui->app),
-                     "key_press_event",
+    g_signal_connect (G_OBJECT (gui->window), "key-press-event",
                      G_CALLBACK (tg_cb_keypress), NULL);
     
     /* attach the menu */
-    gnome_app_create_menus (GNOME_APP (gui->app), menubar);
-
-    gnome_app_add_toolbar (GNOME_APP (gui->app), GTK_TOOLBAR (toolbar),
-                          "nav_toolbar", 0, BONOBO_DOCK_TOP, 2, 0, 0);
+    ui_manager = gtk_ui_manager_new ();
+    action_group = gtk_action_group_new ("TeleGNOMEActions");
+    gtk_action_group_set_translation_domain (action_group, NULL);
+    gtk_action_group_add_actions (action_group, entries,
+                                 G_N_ELEMENTS (entries), gui->window);
+    gtk_ui_manager_insert_action_group (ui_manager, action_group, 0);
+    accel_group = gtk_ui_manager_get_accel_group (ui_manager);
+    gtk_window_add_accel_group (GTK_WINDOW (gui->window), accel_group);
+
+    error = NULL;
+    menu_data = g_resources_lookup_data (TG_MENU_XML, 0, &error);
+    g_assert_no_error (error);
+    error = NULL;
+    gtk_ui_manager_add_ui_from_string (ui_manager,
+                                      g_bytes_get_data (menu_data, NULL),
+                                      g_bytes_get_size (menu_data),
+                                      &error);
+    g_assert_no_error (error);
+    g_bytes_unref (menu_data);
+
+    menu_bar = gtk_ui_manager_get_widget (ui_manager, "/MenuBar");
+    gtk_box_pack_start (GTK_BOX (gui->vbox), menu_bar, FALSE, FALSE, 0);
+    gtk_box_pack_start (GTK_BOX (gui->vbox), toolbar, FALSE, FALSE, 0);
+
+    gui->channel_menu = gtk_menu_item_get_submenu (
+       GTK_MENU_ITEM (gtk_ui_manager_get_widget (ui_manager,
+                                                 "/MenuBar/ChannelsMenu")));
+    g_object_unref (ui_manager);
 
     /* the view */
     currentview = tg_view_new();
@@ -707,22 +736,28 @@ tg_gui_new (GSettings *settings, gchar *startpage)
     g_settings_bind (gui->settings, "current-subpage-number", gui, "current-subpage-number",
                     G_SETTINGS_BIND_DEFAULT);
 
-    /* the statusbar */
-    gui->statusbar = gnome_appbar_new (TRUE, TRUE, GNOME_PREFERENCES_NEVER);
-    gnome_app_set_statusbar (GNOME_APP (gui->app), gui->statusbar);
-
-    /* make menu hints display on the appbar */
-    gnome_app_install_menu_hints (GNOME_APP (gui->app), menubar);
-
     /* all the contents */
-    gnome_app_set_contents (GNOME_APP (gui->app),
-                           tg_view_get_widget (currentview));
-
-    g_signal_connect (G_OBJECT (gui->app), "delete_event",
-                     G_CALLBACK (tg_gui_cb_quit),
-                     NULL);
-
-    gtk_widget_show_all (gui->app);
+    gtk_box_pack_start (GTK_BOX (gui->vbox), tg_view_get_widget (currentview),
+                       TRUE, TRUE, 0);
+
+    /* the progress and status bars */
+    progress_status_box = gtk_hbox_new (FALSE, 4);
+    gui->progress_bar = gtk_progress_bar_new ();
+    gtk_box_pack_start (GTK_BOX (progress_status_box), gui->progress_bar,
+                       FALSE, FALSE, 0);
+    status_frame = gtk_frame_new (NULL);
+    gtk_frame_set_shadow_type (GTK_FRAME (status_frame), GTK_SHADOW_IN);
+    gui->status_bar = gtk_statusbar_new ();
+    gtk_container_add (GTK_CONTAINER (status_frame), gui->status_bar);
+    gtk_box_pack_start (GTK_BOX (progress_status_box), status_frame,
+                       TRUE, TRUE, 0);
+    gtk_box_pack_end (GTK_BOX (gui->vbox), progress_status_box,
+                     FALSE, FALSE, 0);
+
+    g_signal_connect (G_OBJECT (gui->window), "delete-event",
+                     G_CALLBACK (tg_gui_cb_quit), NULL);
+
+    gtk_widget_show_all (gui->window);
 
     gui->kb_timer = -1;
     gui->kb_status = INPUT_NEW;
@@ -730,8 +765,7 @@ tg_gui_new (GSettings *settings, gchar *startpage)
     gui->page_progress = 0;
     gui->page_timer = -1;
 
-    gui->progress = gnome_appbar_get_progress(GNOME_APPBAR(gui->statusbar));
-    gtk_progress_bar_set_fraction(gui->progress, 0.0);
+    gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(gui->progress_bar), 0.0);
 
 #if 0
     /* the zoom button */
@@ -743,7 +777,6 @@ tg_gui_new (GSettings *settings, gchar *startpage)
     /* g_print("Number: %d/%d\n", currentview->page_nr, currentview->subpage_nr); */
 
     gui->channels = NULL;
-    gui->channel_menu = NULL;
 
     tg_gui_refresh_channel_menu();
 
@@ -757,10 +790,9 @@ tg_gui_new (GSettings *settings, gchar *startpage)
        load up the last page we were visiting. Otherwise,
        start with a logo */
     tg_gui_update_entry(0,0);
-    pixbuf = gdk_pixbuf_new_from_file(
-       gnome_program_locate_file(NULL, GNOME_FILE_DOMAIN_PIXMAP,
-                                 TG_LOGO_PIXMAP, TRUE, NULL),
-       &error);
+    error = NULL;
+    pixbuf = gdk_pixbuf_new_from_resource (TG_LOGO_PIXMAP, &error);
+    g_assert_no_error (error);
     tg_view_update_pixmap(currentview, pixbuf);
     g_object_unref(pixbuf);
     
@@ -776,9 +808,9 @@ tg_gui_new (GSettings *settings, gchar *startpage)
 }
 
 GtkWidget *
-tg_gui_get_app (TgGui *gui)
+tg_gui_get_window (TgGui *gui)
 {
-    return gui->app;
+    return gui->window;
 }
 
 
@@ -809,7 +841,7 @@ tg_gui_get_the_page (gboolean redraw)
 {
     /* hide the app */
     if (redraw)
-       gtk_widget_hide(GTK_WIDGET(gui->app));
+       gtk_widget_hide(gui->window);
 
     /* stop the logo timer */
     if (gui->logo_timer != -1)
@@ -820,10 +852,10 @@ tg_gui_get_the_page (gboolean redraw)
        tg_view_update_page(currentview, &currentview->page_nr, &currentview->subpage_nr);
 
     tg_gui_update_entry(currentview->page_nr, currentview->subpage_nr);
-    tg_gui_print_in_statusbar ("");
+    tg_gui_print_in_statusbar (NULL);
 
     if (redraw) 
-      gtk_widget_show_all (GTK_WIDGET(gui->app));
+      gtk_widget_show_all (gui->window);
 }
 
 
@@ -845,6 +877,21 @@ tg_gui_cb_quit (GtkWidget* widget, gpointer data)
 }
 
 void
+tg_gui_cb_help_contents (GtkWidget* widget, gpointer data)
+{
+    GError *error;
+    gboolean ret;
+
+    error = NULL;
+    ret = gtk_show_uri (gtk_widget_get_screen (gui->window), "ghelp:" PACKAGE,
+                       GDK_CURRENT_TIME, &error);
+    if (!ret && error) {
+       g_warning ("Error displaying help: %s", error->message);
+       g_error_free (error);
+    }
+}
+
+void
 tg_gui_cb_about (GtkWidget* widget, gpointer data)
 {
     static GtkWidget *about;
@@ -874,7 +921,7 @@ tg_gui_cb_about (GtkWidget* widget, gpointer data)
        "translator-credits", _("translator-credits"),
        NULL);
 
-    gtk_window_set_transient_for(GTK_WINDOW(about), GTK_WINDOW(gui->app));
+    gtk_window_set_transient_for(GTK_WINDOW(about), GTK_WINDOW(gui->window));
     gtk_window_set_destroy_with_parent(GTK_WINDOW(about), TRUE);
 
     g_signal_connect(about, "destroy", G_CALLBACK(gtk_widget_destroyed),
@@ -888,10 +935,9 @@ tg_gui_cb_about (GtkWidget* widget, gpointer data)
 static void
 tg_gui_refresh_timer (void)
 {
-    gdouble perc = gtk_progress_bar_get_fraction(gui->progress);
+    gdouble perc = gtk_progress_bar_get_fraction(GTK_PROGRESS_BAR(gui->progress_bar));
 
-    gui->progress = gnome_appbar_get_progress(GNOME_APPBAR(gui->statusbar));
-    gtk_progress_bar_set_fraction(gui->progress, perc);
+    gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(gui->progress_bar), perc);
 
     if (gui->page_status) {
        gtk_timeout_remove(gui->page_timer);
@@ -911,7 +957,7 @@ tg_gui_prefs_close_cb (GtkDialog *dialog, gint response_id, gpointer user_data)
 void
 tg_gui_cb_preferences (GtkWidget* widget, gpointer data)
 {
-    tg_prefs_show(GTK_WINDOW(gui->app), G_CALLBACK(tg_gui_prefs_close_cb));
+    tg_prefs_show(GTK_WINDOW(gui->window), G_CALLBACK(tg_gui_prefs_close_cb));
 }
 
 void
diff --git a/src/gui.h b/src/gui.h
index f488a3f..426ad74 100644
--- a/src/gui.h
+++ b/src/gui.h
@@ -34,7 +34,6 @@
 #include <glib-object.h>
 #include <gio/gio.h>
 #include <gtk/gtk.h>
-#include <libgnomeui/libgnomeui.h>
 #include "view.h"
 
 #define TG_MAX_CHANNELS 100
@@ -45,6 +44,7 @@ void tg_gui_get_the_page (gboolean redraw);
 
 /* event handler callbacks */
 void tg_gui_cb_quit (GtkWidget* widget, gpointer data);
+void tg_gui_cb_help_contents (GtkWidget *widget, gpointer data);
 void tg_gui_cb_about (GtkWidget* widget, gpointer data);
 void tg_gui_cb_preferences (GtkWidget* widget, gpointer data);
 void tg_gui_cb_next_page (GtkWidget* widget, gpointer data);
@@ -61,7 +61,7 @@ GType tg_gui_get_type (void);
 
 TgGui *tg_gui_new (GSettings *settings, gchar *startpage);
 
-GtkWidget *tg_gui_get_app (TgGui *gui);
+GtkWidget *tg_gui_get_window (TgGui *gui);
 
 /* DnD target types */
 enum {
diff --git a/src/http.c b/src/http.c
index a8af6f7..8c18790 100644
--- a/src/http.c
+++ b/src/http.c
@@ -20,7 +20,8 @@
 ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 **  
 */
-  
+
+#include <stdlib.h>
 #include <string.h>
 
 #include <gio/gio.h>
diff --git a/src/main.c b/src/main.c
index 094a44c..9e2ccf3 100644
--- a/src/main.c
+++ b/src/main.c
@@ -31,9 +31,10 @@
 #include <stdio.h>
 #include <string.h>
 
+#include <libintl.h>
+
 #include <gio/gio.h>
 #include <gtk/gtk.h>
-#include <libgnome/libgnome.h>
 
 #include "main.h"
 #include "http.h"
@@ -51,8 +52,7 @@ main (int argc, char **argv)
        bindtextdomain(PACKAGE,GNOMELOCALEDIR);
        textdomain(PACKAGE);
 
-       gnome_program_init (PACKAGE, VERSION, LIBGNOMEUI_MODULE, argc, argv,
-                           NULL);
+       gtk_init (&argc, &argv);
 
        settings = g_settings_new ("org.gnome.telegnome");
        legacy_convert (settings);
@@ -64,7 +64,7 @@ main (int argc, char **argv)
                gui = tg_gui_new (settings, "100");
        } 
 
-       gtk_widget_show_all (tg_gui_get_app (gui));
+       gtk_widget_show_all (tg_gui_get_window (gui));
        gtk_main();
 
        return 0;
diff --git a/src/main.h b/src/main.h
index dff50e7..27b6fdc 100644
--- a/src/main.h
+++ b/src/main.h
@@ -51,8 +51,9 @@ typedef struct _TeleGnome{
 #define TG_ERR_VFS 2
 #define TG_ERR_HTTPQUERY 3     /* error getting http query */
 
-#define TG_NOTFOUND_PIXMAP     "telegnome/testbeeld.png"
-#define TG_LOGO_PIXMAP                 "telegnome/telegnome-logo.png"
+#define TG_MENU_XML            "/org/gnome/telegnome/menu.xml"
+#define TG_NOTFOUND_PIXMAP     "/org/gnome/telegnome/pixmaps/testbeeld.png"
+#define TG_LOGO_PIXMAP                 "/org/gnome/telegnome/pixmaps/telegnome-logo.png"
 
 #define TG_KB_TIMEOUT          2500    /* the timeout before the input fields resets */
 #define TG_LOGO_TIMEOUT                7500    /* the time the logo gets displayed */
diff --git a/src/menu.h b/src/menu.h
index ce76ce7..5b50aeb 100644
--- a/src/menu.h
+++ b/src/menu.h
@@ -6,30 +6,29 @@
 #ifndef __MENU_H__
 #define __MENU_H__
 
-#include <libgnomeui/gnome-app-helper.h>
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
 
-/* the menu */
-static GnomeUIInfo file_menu[] = {
-    GNOMEUIINFO_MENU_QUIT_ITEM(tg_gui_cb_quit, NULL),
-    GNOMEUIINFO_END
-};
+static const GtkActionEntry entries[] = {
+    /* Top level */
+    { "FileMenu", GTK_STOCK_FILE, N_("_File") },
+    { "SettingsMenu", NULL, N_("_Settings") },
+    { "ChannelsMenu", NULL, N_("_Channels") },
+    { "HelpMenu", GTK_STOCK_HELP },
 
-static GnomeUIInfo settings_menu[] = {
-    GNOMEUIINFO_MENU_PREFERENCES_ITEM(tg_gui_cb_preferences, NULL),
-    GNOMEUIINFO_END
-};
+    /* File menu */
+    { "FileQuit", GTK_STOCK_QUIT, NULL, "<control>Q", NULL,
+      G_CALLBACK (tg_gui_cb_quit) },
 
-static GnomeUIInfo help_menu[] = {
-    GNOMEUIINFO_HELP(PACKAGE),
-    GNOMEUIINFO_MENU_ABOUT_ITEM(tg_gui_cb_about, NULL),
-    GNOMEUIINFO_END
-};
+    /* Settings menu */
+    { "SettingsPreferences", GTK_STOCK_PREFERENCES, NULL, NULL, NULL,
+      G_CALLBACK (tg_gui_cb_preferences) },
 
-static GnomeUIInfo menubar[] = {
-    GNOMEUIINFO_MENU_FILE_TREE(file_menu),
-    GNOMEUIINFO_MENU_SETTINGS_TREE(settings_menu),
-    GNOMEUIINFO_MENU_HELP_TREE(help_menu),
-    GNOMEUIINFO_END
- };
+    /* Help menu */
+    { "HelpContents", GTK_STOCK_HELP, N_("_Contents"), "F1", NULL,
+      G_CALLBACK (tg_gui_cb_help_contents) },
+    { "HelpAbout", GTK_STOCK_ABOUT, NULL, NULL, NULL,
+      G_CALLBACK (tg_gui_cb_about) }
+};
 
 #endif
diff --git a/src/menu.xml b/src/menu.xml
new file mode 100644
index 0000000..880396b
--- /dev/null
+++ b/src/menu.xml
@@ -0,0 +1,15 @@
+<ui>
+  <menubar name="MenuBar">
+    <menu action="FileMenu">
+      <menuitem action="FileQuit" />
+    </menu>
+    <menu action="SettingsMenu">
+      <menuitem action="SettingsPreferences" />
+    </menu>
+    <menu action="ChannelsMenu" />
+    <menu action="HelpMenu">
+      <menuitem action="HelpContents" />
+      <menuitem action="HelpAbout" />
+    </menu>
+  </menubar>
+</ui>
diff --git a/src/telegnome.gresource.xml b/src/telegnome.gresource.xml
new file mode 100644
index 0000000..b0c9994
--- /dev/null
+++ b/src/telegnome.gresource.xml
@@ -0,0 +1,25 @@
+<!--
+ * Copyright (C) 2016 Colin Watson <cjwatson debian org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+-->
+
+<gresources>
+  <gresource prefix="/org/gnome/telegnome">
+    <file alias="pixmaps/telegnome-logo.png">../pixmaps/telegnome-logo.png</file>
+    <file alias="pixmaps/testbeeld.png">../pixmaps/testbeeld.png</file>
+    <file>menu.xml</file>
+  </gresource>
+</gresources>
diff --git a/src/view.c b/src/view.c
index 45e9fc0..519d0bc 100644
--- a/src/view.c
+++ b/src/view.c
@@ -27,7 +27,6 @@
 
 #include <glib.h>
 #include <glib/gi18n.h>
-#include <libgnome/libgnome.h>
 
 #include "view.h"
 #include "prefs.h"
@@ -90,7 +89,7 @@ tg_view_update_page(TgView *view, int *major_nr, int *minor_nr)
 {
        gint retval;
        GdkPixbuf *pixbuf;
-       GError *error = NULL;
+       GError *error;
 
        /* save these and restore them, if necessary */
        gint old_page= *major_nr;
@@ -121,11 +120,10 @@ tg_view_update_page(TgView *view, int *major_nr, int *minor_nr)
                            *major_nr= old_page;  /* restore */
                            *minor_nr= old_subpage;
                            tg_gui_update_entry(*major_nr, *minor_nr);
-                           pixbuf = gdk_pixbuf_new_from_file(
-                               gnome_program_locate_file(
-                                   NULL, GNOME_FILE_DOMAIN_PIXMAP,
-                                   TG_NOTFOUND_PIXMAP, TRUE, NULL),
-                               &error);
+                           error = NULL;
+                           pixbuf = gdk_pixbuf_new_from_resource(
+                               TG_NOTFOUND_PIXMAP, &error);
+                           g_assert_no_error(error);
                            tg_view_update_pixmap(view, pixbuf);
                            g_object_unref(pixbuf);
                            return -1;


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