|
From: <br...@us...> - 2008-10-03 22:28:34
|
Revision: 3711
http://openvrml.svn.sourceforge.net/openvrml/?rev=3711&view=rev
Author: braden
Date: 2008-10-03 22:28:24 +0000 (Fri, 03 Oct 2008)
Log Message:
-----------
Revert to using libglade rather than GtkBuilder in openvrml-player.
Modified Paths:
--------------
branches/0.17/ChangeLog
branches/0.17/configure.ac
branches/0.17/src/Makefile.am
branches/0.17/src/openvrml-player/player.cpp
Added Paths:
-----------
branches/0.17/src/openvrml-player/openvrml-player.glade
Removed Paths:
-------------
branches/0.17/src/openvrml-player/openvrml-player.ui
Modified: branches/0.17/ChangeLog
===================================================================
--- branches/0.17/ChangeLog 2008-10-03 17:32:36 UTC (rev 3710)
+++ branches/0.17/ChangeLog 2008-10-03 22:28:24 UTC (rev 3711)
@@ -1,3 +1,32 @@
+2008-10-03 Braden McDaniel <br...@en...>
+
+ Revert to using libglade rather than GtkBuilder in openvrml-player.
+
+ * configure.ac: Don't require Gtk+ 2.12; check for libglade.
+ * src/Makefile.am
+ (openvrml_player_openvrml_player_CXXFLAGS): Added GLADE_CFLAGS.
+ (openvrml_player_openvrml_player_LDFLAGS): Added GLADE_LIBS.
+ (openvrml_player_gladedir): Glade XML installation directory;
+ replaces openvrml_player_uidir.
+ (dist_openvrml_player_glade_DATA): Glade XML; replaces
+ dist_openvrml_player_ui_DATA.
+ * src/openvrml-player/openvrml-player.glade: Added; Glade XML.
+ * src/openvrml-player/openvrml-player.ui: Removed.
+ * src/openvrml-player/player.cpp
+ (main(int, char *[])): Use libglade instead of GtkBuilder.
+ (xml_new(GnomeProgram &)): Replaces builder_new; create the
+ GladeXML structure.
+ (openvrml_player_build_file_chooser_dialog(GladeXML *, GType,
+ GladeWidgetInfo *)): Create an OpenvrmlPlayerFileChooserDialog for
+ libglade.
+ (openvrml_player_build_curl_browser_host(GladeXML *, GType,
+ GladeWidgetInfo *)): Create an OpenvrmlPlayerCurlBrowserHost for
+ libglade.
+ (openvrml_player_connect_func(const gchar *, GObject *, const
+ gchar *, const gchar *, GObject *, gboolean, gpointer)):
+ Connection callback function passed to
+ glade_xml_signal_autoconnect_full.
+
2008-10-02 Braden McDaniel <br...@en...>
Keep track of host instances in openvrml-xembed and shut down when
Modified: branches/0.17/configure.ac
===================================================================
--- branches/0.17/configure.ac 2008-10-03 17:32:36 UTC (rev 3710)
+++ branches/0.17/configure.ac 2008-10-03 22:28:24 UTC (rev 3711)
@@ -147,11 +147,9 @@
session_bus_servicesdir=`$PKG_CONFIG --variable=session_bus_services_dir dbus-1`
AC_SUBST([session_bus_servicesdir])
-#
-# openvrml-player uses GtkBuilder, which was introduced in GTK+ 2.12.
-#
-PKG_CHECK_MODULES([GTK], [gtk+-2.0 >= 2.12 gthread-2.0 glib-2.0 >= 2.6], ,
+PKG_CHECK_MODULES([GTK], [gtk+-2.0 gthread-2.0 glib-2.0 >= 2.6], ,
[have_gtk=no])
+PKG_CHECK_MODULES([GLADE], [libglade-2.0], , [have_libglade=no])
#
# openvrml-player uses GNOME_PARAM_GOPTION_CONTEXT, which was
# introduced in libgnome 2.14.
Modified: branches/0.17/src/Makefile.am
===================================================================
--- branches/0.17/src/Makefile.am 2008-10-03 17:32:36 UTC (rev 3710)
+++ branches/0.17/src/Makefile.am 2008-10-03 22:28:24 UTC (rev 3711)
@@ -237,15 +237,17 @@
openvrml_player_openvrml_player_CXXFLAGS = \
$(DBUS_G_CFLAGS) \
$(GNOMEUI_CFLAGS) \
+ $(GLADE_CFLAGS) \
$(CURL_CFLAGS)
openvrml_player_openvrml_player_LDFLAGS = \
-export-dynamic \
$(GNOMEUI_LIBS) \
$(DBUS_G_LIBS) \
+ $(GLADE_LIBS) \
$(CURL_LIBS)
-openvrml_player_uidir = $(datadir)/openvrml-player/ui
-dist_openvrml_player_ui_DATA = openvrml-player/openvrml-player.ui
+openvrml_player_gladedir = $(datadir)/openvrml-player/glade
+dist_openvrml_player_glade_DATA = openvrml-player/openvrml-player.glade
openvrml_player_openvrml_player_SOURCES = \
openvrml-player/filechooserdialog.cpp \
Copied: branches/0.17/src/openvrml-player/openvrml-player.glade (from rev 3583, branches/0.17/src/openvrml-player/openvrml-player.glade)
===================================================================
--- branches/0.17/src/openvrml-player/openvrml-player.glade (rev 0)
+++ branches/0.17/src/openvrml-player/openvrml-player.glade 2008-10-03 22:28:24 UTC (rev 3711)
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
+<glade-interface>
+ <widget class="GtkWindow" id="window">
+ <property name="default-width">640</property>
+ <property name="default-height">480</property>
+ <signal name="delete-event" handler="openvrml_player_quit"/>
+ <child>
+ <widget class="GtkVBox" id="vbox1">
+ <property name="visible">True</property>
+ <child>
+ <widget class="GtkMenuBar" id="menubar1">
+ <property name="visible">True</property>
+ <child>
+ <widget class="GtkMenuItem" id="menuitem1">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_File</property>
+ <property name="use_underline">True</property>
+ <child>
+ <widget class="GtkMenu" id="menu1">
+ <property name="visible">True</property>
+ <child>
+ <widget class="GtkImageMenuItem" id="imagemenuitemopen">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">gtk-open</property>
+ <property name="use_underline">True</property>
+ <property name="use_stock">True</property>
+ <signal name="activate" handler="openvrml_player_on_file_open_activated" />
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkSeparatorMenuItem" id="separatormenuitem1">
+ <property name="visible">True</property>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkImageMenuItem" id="imagemenuitem5">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">gtk-quit</property>
+ <property name="use_underline">True</property>
+ <property name="use_stock">True</property>
+ <signal name="activate" handler="openvrml_player_quit"/>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkMenuItem" id="menuitem4">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Help</property>
+ <property name="use_underline">True</property>
+ <child>
+ <widget class="GtkMenu" id="menu3">
+ <property name="visible">True</property>
+ <child>
+ <widget class="GtkImageMenuItem" id="imagemenuitem10">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">gtk-about</property>
+ <property name="use_underline">True</property>
+ <property name="use_stock">True</property>
+ <signal name="activate" handler="openvrml_player_on_about_activated" object="window"/>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkHBox" id="hbox1">
+ <property name="visible">True</property>
+ <child>
+ <widget class="GtkEntry" id="locationentry">
+ <property name="visible">True</property>
+ <signal name="activate" handler="openvrml_player_on_locationentry_activated"/>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="OpenvrmlPlayerCurlBrowserHost" id="browserhost">
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="has-focus">True</property>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkStatusbar" id="statusbar1">
+ <property name="visible">True</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <widget class="OpenvrmlPlayerFileChooserDialog" id="filechooserdialog">
+ </widget>
+</glade-interface>
Deleted: branches/0.17/src/openvrml-player/openvrml-player.ui
===================================================================
--- branches/0.17/src/openvrml-player/openvrml-player.ui 2008-10-03 17:32:36 UTC (rev 3710)
+++ branches/0.17/src/openvrml-player/openvrml-player.ui 2008-10-03 22:28:24 UTC (rev 3711)
@@ -1,109 +0,0 @@
-<?xml version="1.0"?>
-<interface>
- <object class="GtkUIManager" id="uimanager1">
- <child>
- <object class="GtkActionGroup" id="actiongroup1">
- <child>
- <object class="GtkAction" id="menuitem1">
- <property name="name">menuitem1</property>
- <property name="label" translatable="yes">_File</property>
- </object>
- </child>
- <child>
- <object class="GtkAction" id="imagemenuitemopen">
- <property name="stock_id" translatable="yes">gtk-open</property>
- <property name="name">imagemenuitemopen</property>
- <signal handler="openvrml_player_on_file_open_activated" name="activate"/>
- </object>
- </child>
- <child>
- <object class="GtkAction" id="imagemenuitem5">
- <property name="stock_id" translatable="yes">gtk-quit</property>
- <property name="name">imagemenuitem5</property>
- <signal handler="openvrml_player_quit" name="activate"/>
- </object>
- </child>
- <child>
- <object class="GtkAction" id="menuitem4">
- <property name="name">menuitem4</property>
- <property name="label" translatable="yes">_Help</property>
- </object>
- </child>
- <child>
- <object class="GtkAction" id="imagemenuitem10">
- <property name="stock_id" translatable="yes">gtk-about</property>
- <property name="name">imagemenuitem10</property>
- <signal handler="openvrml_player_on_about_activated" name="activate" object="window"/>
- </object>
- </child>
- </object>
- </child>
- <ui>
- <menubar name="menubar1">
- <menu action="menuitem1">
- <menuitem action="imagemenuitemopen"/>
- <separator/>
- <menuitem action="imagemenuitem5"/>
- </menu>
- <menu action="menuitem4">
- <menuitem action="imagemenuitem10"/>
- </menu>
- </menubar>
- </ui>
- </object>
- <object class="GtkWindow" id="window">
- <property name="default-width">640</property>
- <property name="default-height">480</property>
- <signal handler="openvrml_player_quit" name="delete-event"/>
- <child>
- <object class="GtkVBox" id="vbox1">
- <property name="visible">True</property>
- <child>
- <object class="GtkMenuBar" constructor="uimanager1" id="menubar1">
- <property name="visible">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- </packing>
- </child>
- <child>
- <object class="GtkHBox" id="hbox1">
- <property name="visible">True</property>
- <child>
- <object class="GtkEntry" id="locationentry">
- <property name="visible">True</property>
- <signal handler="openvrml_player_on_locationentry_activated" name="activate"/>
- </object>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <object class="OpenvrmlPlayerCurlBrowserHost" id="browserhost">
- <property name="visible">True</property>
- <property name="can-focus">True</property>
- <property name="has-focus">True</property>
- </object>
- <packing>
- <property name="expand">True</property>
- <property name="position">2</property>
- </packing>
- </child>
- <child>
- <object class="GtkStatusbar" id="statusbar1">
- <property name="visible">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="position">3</property>
- </packing>
- </child>
- </object>
- </child>
- </object>
- <object class="OpenvrmlPlayerFileChooserDialog" id="filechooserdialog">
- </object>
-</interface>
Modified: branches/0.17/src/openvrml-player/player.cpp
===================================================================
--- branches/0.17/src/openvrml-player/player.cpp 2008-10-03 17:32:36 UTC (rev 3710)
+++ branches/0.17/src/openvrml-player/player.cpp 2008-10-03 22:28:24 UTC (rev 3711)
@@ -26,7 +26,8 @@
# include <dbus/dbus-glib.h>
# include <libgnomevfs/gnome-vfs.h>
# include <libgnomeui/libgnomeui.h>
-# include <gtk/gtkbuilder.h>
+# include <glade/glade.h>
+# include <glade/glade-build.h>
# include <openvrml-config.h>
# include "curlbrowserhost.h"
@@ -40,7 +41,7 @@
extern "C" {
//
- // GTK+ signal handlers; GtkBuilder needs them to have external linkage in
+ // GTK+ signal handlers; libglade needs them to have external linkage in
// order to connect them.
//
OPENVRML_API void openvrml_player_on_about_activated(GtkWindow * window);
@@ -57,8 +58,28 @@
OPENVRML_API void openvrml_player_quit();
G_GNUC_INTERNAL
+ void
+ openvrml_player_connect_func(const gchar * handler_name,
+ GObject * object,
+ const gchar * signal_name,
+ const gchar * signal_data,
+ GObject * connect_object,
+ gboolean after,
+ gpointer user_data);
+
+ G_GNUC_INTERNAL
void openvrml_player_on_browserhost_realize(GtkWidget * widget,
gpointer user_data);
+ G_GNUC_INTERNAL
+ GtkWidget *
+ openvrml_player_build_file_chooser_dialog(GladeXML * xml,
+ GType widget_type,
+ GladeWidgetInfo * info);
+ G_GNUC_INTERNAL
+ GtkWidget *
+ openvrml_player_build_curl_browser_host(GladeXML * xml,
+ GType widget_type,
+ GladeWidgetInfo * info);
}
namespace {
@@ -71,8 +92,7 @@
OpenvrmlPlayerFileChooserDialog * file_chooser;
};
- G_GNUC_INTERNAL GtkBuilder * builder_new(GnomeProgram & program,
- GError ** error);
+ G_GNUC_INTERNAL GladeXML * xml_new(GnomeProgram & program);
}
int main(int argc, char * argv[])
@@ -128,36 +148,39 @@
GNOME_PARAM_APP_DATADIR, OPENVRML_PLAYER_PKGDATADIR_,
GNOME_PARAM_NONE);
- GError * error = 0;
- scope_guard error_guard = make_guard(g_error_free, ref(error));
- GtkBuilder * const builder = builder_new(*program, &error);
- if (!builder) {
- g_critical("Failed to create UI builder: %s", error->message);
- return EXIT_FAILURE;
- }
+ glade_init();
+ glade_register_widget(OPENVRML_PLAYER_TYPE_FILE_CHOOSER_DIALOG,
+ openvrml_player_build_file_chooser_dialog,
+ 0,
+ 0);
+ glade_register_widget(OPENVRML_PLAYER_TYPE_CURL_BROWSER_HOST,
+ openvrml_player_build_curl_browser_host,
+ 0,
+ 0);
- GtkWidget * const app_window =
- GTK_WIDGET(gtk_builder_get_object(builder, "window"));
+ GladeXML * const xml = xml_new(*program);
+ GtkWidget * const app_window = glade_xml_get_widget(xml, "window");
+
GtkWidget * const file_chooser_dialog =
- GTK_WIDGET(gtk_builder_get_object(builder, "filechooserdialog"));
+ glade_xml_get_widget(xml, "filechooserdialog");
signal_data data = {};
data.browser_host =
OPENVRML_PLAYER_CURL_BROWSER_HOST(
- gtk_builder_get_object(builder, "browserhost"));
+ glade_xml_get_widget(xml, "browserhost"));
g_assert(OPENVRML_PLAYER_IS_CURL_BROWSER_HOST(data.browser_host));
data.location_entry =
- GTK_WIDGET(gtk_builder_get_object(builder, "locationentry"));
+ GTK_WIDGET(glade_xml_get_widget(xml, "locationentry"));
data.file_chooser =
OPENVRML_PLAYER_FILE_CHOOSER_DIALOG(
- gtk_builder_get_object(builder, "filechooserdialog"));
+ glade_xml_get_widget(xml, "filechooserdialog"));
+ glade_xml_signal_autoconnect_full(xml, openvrml_player_connect_func, &data);
+
gtk_window_set_transient_for(GTK_WINDOW(data.file_chooser),
GTK_WINDOW(app_window));
- gtk_builder_connect_signals(builder, &data);
-
g_signal_connect(file_chooser_dialog,
"response",
G_CALLBACK(openvrml_player_on_filechooserdialog_response),
@@ -173,42 +196,35 @@
gtk_widget_show_all(app_window);
gtk_main();
-
- error_guard.dismiss();
}
namespace {
- GtkBuilder * builder_new(GnomeProgram & program, GError ** error)
+ GladeXML * xml_new(GnomeProgram & program)
{
using std::string;
- const gchar * const uidir = g_getenv("OPENVRML_PLAYER_UIDIR");
- string ui_file_str;
- const gchar * ui_file = 0;
- if (uidir) {
- ui_file_str = string(uidir) + "/openvrml-player.ui";
- ui_file = ui_file_str.c_str();
+ const gchar * const gladedir = g_getenv("OPENVRML_PLAYER_GLADEDIR");
+ string glade_file_str;
+ const gchar * glade_file = 0;
+ if (gladedir) {
+ glade_file_str = string(gladedir) + "/openvrml-player.glade";
+ glade_file = glade_file_str.c_str();
}
- if (!ui_file) {
+ if (!glade_file) {
static const gboolean only_if_exists = true;
- ui_file =
+ glade_file =
gnome_program_locate_file(&program,
GNOME_FILE_DOMAIN_APP_DATADIR,
- "/ui/openvrml-player.ui",
+ "/glade/openvrml-player.glade",
only_if_exists,
0);
}
- g_return_val_if_fail(ui_file, 0);
+ g_return_val_if_fail(glade_file, 0);
- GtkBuilder * builder = gtk_builder_new();
- if (!gtk_builder_add_from_file(builder, ui_file, error)) {
- return 0;
- }
-
- return builder;
+ return glade_xml_new(glade_file, 0, 0);
}
}
@@ -301,3 +317,57 @@
OPENVRML_PLAYER_CURL_BROWSER_HOST(widget),
static_cast<const char *>(user_data));
}
+
+GtkWidget *
+openvrml_player_build_file_chooser_dialog(GladeXML * /* xml */,
+ GType /* widget_type */,
+ GladeWidgetInfo * /* info */)
+{
+ GtkWidget * widget =
+ GTK_WIDGET(g_object_new(OPENVRML_PLAYER_TYPE_FILE_CHOOSER_DIALOG, 0));
+ return widget;
+}
+
+GtkWidget *
+openvrml_player_build_curl_browser_host(GladeXML * /* xml */,
+ GType /* widget_type */,
+ GladeWidgetInfo * /* info */)
+{
+ GtkWidget * widget =
+ GTK_WIDGET(g_object_new(OPENVRML_PLAYER_TYPE_CURL_BROWSER_HOST, 0));
+ return widget;
+}
+
+void
+openvrml_player_connect_func(const gchar * const handler_name,
+ GObject * const object,
+ const gchar * const signal_name,
+ const gchar * const signal_data,
+ GObject * const connect_object,
+ const gboolean after,
+ const gpointer user_data)
+{
+ static GModule * const this_module = g_module_open(0, GModuleFlags(0));
+ gpointer handler;
+ if (g_module_symbol(this_module, handler_name, &handler)) {
+ if (connect_object) {
+ g_signal_connect_object(
+ object,
+ signal_name,
+ G_CALLBACK(handler),
+ connect_object,
+ GConnectFlags((after ? G_CONNECT_AFTER : 0)
+ | G_CONNECT_SWAPPED));
+ } else {
+ if (after) {
+ g_signal_connect_after(object, signal_name, G_CALLBACK(handler),
+ user_data);
+ } else {
+ g_signal_connect(object, signal_name, G_CALLBACK(handler),
+ user_data);
+ }
+ }
+ } else {
+ g_warning("signal handler \"%s\" not found", handler_name);
+ }
+}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|