epiphany r7927 - trunk/src



Author: xan
Date: Sun Feb 10 18:26:22 2008
New Revision: 7927
URL: http://svn.gnome.org/viewvc/epiphany?rev=7927&view=rev

Log:
Use G_DEFINE_TYPE* when possible in src/ (#515601)


Modified:
   trunk/src/ephy-cert-manager-dialog.c
   trunk/src/ephy-completion-model.c
   trunk/src/ephy-dbus.c
   trunk/src/ephy-encoding-dialog.c
   trunk/src/ephy-encoding-menu.c
   trunk/src/ephy-extensions-manager.c
   trunk/src/ephy-find-toolbar.c
   trunk/src/ephy-fullscreen-popup.c
   trunk/src/ephy-go-action.c
   trunk/src/ephy-history-window.c
   trunk/src/ephy-home-action.c
   trunk/src/ephy-link-action.c
   trunk/src/ephy-link.c
   trunk/src/ephy-location-action.c
   trunk/src/ephy-lockdown.c
   trunk/src/ephy-navigation-action.c
   trunk/src/ephy-net-monitor.c
   trunk/src/ephy-python-extension.c
   trunk/src/ephy-python-loader.c
   trunk/src/ephy-session.c
   trunk/src/ephy-shell.c
   trunk/src/ephy-statusbar.c
   trunk/src/ephy-toolbar-editor.c
   trunk/src/ephy-toolbar.c
   trunk/src/ephy-toolbars-model.c
   trunk/src/pdm-dialog.c
   trunk/src/ppview-toolbar.c
   trunk/src/prefs-dialog.c

Modified: trunk/src/ephy-cert-manager-dialog.c
==============================================================================
--- trunk/src/ephy-cert-manager-dialog.c	(original)
+++ trunk/src/ephy-cert-manager-dialog.c	Sun Feb 10 18:26:22 2008
@@ -53,8 +53,6 @@
 tree_view_selection_changed_cb (GtkTreeSelection *selection,
 				CertsManagerDialog *dialog);
 
-static GObjectClass *parent_class = NULL;
-
 #define EPHY_CERTIFICATE_MANAGER_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), EPHY_TYPE_CERTS_MANAGER_DIALOG, CertsManagerDialogPrivate))
 
 struct _CertsManagerDialogPrivate
@@ -463,7 +461,7 @@
 
 	/* TODO free certs in the treeviews */
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (certs_manager_dialog_parent_class)->finalize (object);
 
 	shell = ephy_embed_shell_get_default ();
 	g_object_unref (shell);
@@ -474,8 +472,6 @@
 {
 	GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
-	parent_class = g_type_class_peek_parent (klass);
-
 	object_class->finalize = certs_manager_dialog_finalize;
 
 	g_type_class_add_private (object_class, sizeof (CertsManagerDialogPrivate));
@@ -483,34 +479,7 @@
 
 /* public functions */
 
-GType 
-certs_manager_dialog_get_type (void)
-{
-	static GType certs_manager_dialog_type = 0;
-
-	if (certs_manager_dialog_type == 0)
-	{
-		const GTypeInfo our_info =
-		{
-			sizeof (CertsManagerDialogClass),
-			NULL, /* base_init */
-			NULL, /* base_finalize */
-			(GClassInitFunc) certs_manager_dialog_class_init,
-			NULL,
-			NULL, /* class_data */
-			sizeof (CertsManagerDialog),
-			0, /* n_preallocs */
-			(GInstanceInitFunc) certs_manager_dialog_init
-		};
-
-		certs_manager_dialog_type = g_type_register_static (EPHY_TYPE_DIALOG,
-								    "CertsManagerDialog",
-								    &our_info, 0);
-	}
-
-	return certs_manager_dialog_type;
-
-}
+G_DEFINE_TYPE (CertsManagerDialog, certs_manager_dialog, EPHY_TYPE_DIALOG)
 
 EphyDialog *
 certs_manager_dialog_new (void)

Modified: trunk/src/ephy-completion-model.c
==============================================================================
--- trunk/src/ephy-completion-model.c	(original)
+++ trunk/src/ephy-completion-model.c	Sun Feb 10 18:26:22 2008
@@ -50,54 +50,15 @@
 	BOOKMARKS_GROUP
 };
 
-static GObjectClass *parent_class = NULL;
-
-GType
-ephy_completion_model_get_type (void)
-{
-	static GType type = 0;
-
-	if (G_UNLIKELY (type == 0))
-	{
-		const GTypeInfo our_info =
-		{
-			sizeof (EphyCompletionModelClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) ephy_completion_model_class_init,
-			NULL,
-			NULL,
-			sizeof (EphyCompletionModel),
-			0,
-			(GInstanceInitFunc) ephy_completion_model_init
-		};
-
-		const GInterfaceInfo tree_model_info =
-		{
-			(GInterfaceInitFunc) ephy_completion_model_tree_model_init,
-			NULL,
-			NULL
-		};
-
-		type = g_type_register_static (G_TYPE_OBJECT,
-					       "EphyCompletionModel",
-					       &our_info, 0);
-
-		g_type_add_interface_static (type,
-					     GTK_TYPE_TREE_MODEL,
-					     &tree_model_info);
-	}
-
-	return type;
-}
+G_DEFINE_TYPE_WITH_CODE (EphyCompletionModel, ephy_completion_model, G_TYPE_OBJECT,
+			 G_IMPLEMENT_INTERFACE (GTK_TYPE_TREE_MODEL,
+						ephy_completion_model_tree_model_init))
 
 static void
 ephy_completion_model_class_init (EphyCompletionModelClass *klass)
 {
 	GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
-	parent_class = g_type_class_peek_parent (klass);
-
 	g_type_class_add_private (object_class, sizeof (EphyCompletionModelPrivate));
 }
 

Modified: trunk/src/ephy-dbus.c
==============================================================================
--- trunk/src/ephy-dbus.c	(original)
+++ trunk/src/ephy-dbus.c	Sun Feb 10 18:26:22 2008
@@ -77,7 +77,6 @@
 static EphyDbus *ephy_dbus_instance;
 
 static guint signals[LAST_SIGNAL];
-static GObjectClass *parent_class;
 GQuark ephy_dbus_error_quark;
 
 /* Filter signals form session bus */
@@ -344,28 +343,7 @@
 
 /* Class implementation */
 
-static void
-ephy_dbus_init (EphyDbus *dbus)
-{
-	dbus->priv = EPHY_DBUS_GET_PRIVATE (dbus);
-
-	LOG ("EphyDbus initialising");
-}
-
-static void
-ephy_dbus_finalize (GObject *object)
-{
-	EphyDbus *dbus = EPHY_DBUS (object);
-
-	/* Have to do this after the object's weak ref notifiers have
-	 * been called, see https://bugs.freedesktop.org/show_bug.cgi?id=5688
-	 */
-	ephy_dbus_shutdown (dbus);
-
-	LOG ("EphyDbus finalised");
-
-	parent_class->finalize (object);
-}
+G_DEFINE_TYPE (EphyDbus, ephy_dbus, G_TYPE_OBJECT)
 
 static void
 ephy_dbus_get_property (GObject *object,
@@ -395,12 +373,33 @@
 }
 
 static void
+ephy_dbus_finalize (GObject *object)
+{
+	EphyDbus *dbus = EPHY_DBUS (object);
+
+	/* Have to do this after the object's weak ref notifiers have
+	 * been called, see https://bugs.freedesktop.org/show_bug.cgi?id=5688
+	 */
+	ephy_dbus_shutdown (dbus);
+
+	LOG ("EphyDbus finalised");
+
+	G_OBJECT_CLASS (ephy_dbus_parent_class)->finalize (object);
+}
+
+static void
+ephy_dbus_init (EphyDbus *dbus)
+{
+	dbus->priv = EPHY_DBUS_GET_PRIVATE (dbus);
+
+	LOG ("EphyDbus initialising");
+}
+
+static void
 ephy_dbus_class_init (EphyDbusClass *klass)
 {
 	GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
-	parent_class = g_type_class_peek_parent (klass);
-
 	object_class->get_property = ephy_dbus_get_property;
 	object_class->set_property = ephy_dbus_set_property;
 	object_class->finalize = ephy_dbus_finalize;
@@ -439,34 +438,6 @@
 	g_type_class_add_private (object_class, sizeof(EphyDbusPrivate));
 }
 
-GType
-ephy_dbus_get_type (void)
-{
-	static GType type = 0;
-
-	if (G_UNLIKELY (type == 0))
-	{
-		const GTypeInfo our_info =
-		{
-			sizeof (EphyDbusClass),
-			NULL, /* base_init */
-			NULL, /* base_finalize */
-			(GClassInitFunc) ephy_dbus_class_init,
-			NULL,
-			NULL, /* class_data */
-			sizeof (EphyDbus),
-			0, /* n_preallocs */
-			(GInstanceInitFunc) ephy_dbus_init
-		};
-
-		type = g_type_register_static (G_TYPE_OBJECT,
-					       "EphyDbus",
-					       &our_info, 0);
-	}
-
-	return type;
-}
-
 EphyDbus *
 ephy_dbus_get_default (void)
 {

Modified: trunk/src/ephy-encoding-dialog.c
==============================================================================
--- trunk/src/ephy-encoding-dialog.c	(original)
+++ trunk/src/ephy-encoding-dialog.c	Sun Feb 10 18:26:22 2008
@@ -78,35 +78,7 @@
 static void	ephy_encoding_dialog_class_init		(EphyEncodingDialogClass *klass);
 static void	ephy_encoding_dialog_init		(EphyEncodingDialog *ge);
 
-static GObjectClass *parent_class = NULL;
-
-GType
-ephy_encoding_dialog_get_type (void)
-{
-	static GType type = 0;
-
-	if (G_UNLIKELY (type == 0))
-	{
-		const GTypeInfo our_info =
-		{
-			sizeof (EphyEncodingDialogClass),
-			NULL, /* base_init */
-			NULL, /* base_finalize */
-			(GClassInitFunc) ephy_encoding_dialog_class_init,
-			NULL,
-			NULL, /* class_data */
-			sizeof (EphyEncodingDialog),
-			0, /* n_preallocs */
-			(GInstanceInitFunc) ephy_encoding_dialog_init
-		};
-
-		type = g_type_register_static (EPHY_TYPE_EMBED_DIALOG,
-					       "EphyEncodingDialog",
-					       &our_info, 0);
-	}
-
-	return type;
-}
+G_DEFINE_TYPE (EphyEncodingDialog, ephy_encoding_dialog, EPHY_TYPE_EMBED_DIALOG)
 
 static void
 sync_encoding_against_embed (EphyEncodingDialog *dialog)
@@ -408,7 +380,7 @@
 
 	g_object_unref (dialog->priv->filter);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (ephy_encoding_dialog_parent_class)->finalize (object);
 }
 
 static void
@@ -416,8 +388,6 @@
 {
 	GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
-	parent_class = g_type_class_peek_parent (klass);
-
 	object_class->finalize = ephy_encoding_dialog_finalize;
 
 	g_type_class_add_private (object_class, sizeof(EphyEncodingDialogPrivate));

Modified: trunk/src/ephy-encoding-menu.c
==============================================================================
--- trunk/src/ephy-encoding-menu.c	(original)
+++ trunk/src/ephy-encoding-menu.c	Sun Feb 10 18:26:22 2008
@@ -64,35 +64,7 @@
 	PROP_WINDOW
 };
 
-static GObjectClass *parent_class = NULL;
-
-GType
-ephy_encoding_menu_get_type (void)
-{
-	static GType type = 0;
-
-	if (G_UNLIKELY (type == 0))
-	{
-		const GTypeInfo our_info =
-		{
-			sizeof (EphyEncodingMenuClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) ephy_encoding_menu_class_init,
-			NULL,
-			NULL,
-			sizeof (EphyEncodingMenu),
-			0,
-			(GInstanceInitFunc) ephy_encoding_menu_init
-		};
-
-		type = g_type_register_static (G_TYPE_OBJECT,
-					       "EphyEncodingMenu",
-					       &our_info, 0);
-	}
-
-	return type;
-}
+G_DEFINE_TYPE (EphyEncodingMenu, ephy_encoding_menu, G_TYPE_OBJECT)
 
 static void
 ephy_encoding_menu_init (EphyEncodingMenu *menu)
@@ -459,7 +431,7 @@
 		g_object_unref (menu->priv->dialog);
 	}
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (ephy_encoding_menu_parent_class)->finalize (object);
 }
 
 static void
@@ -467,8 +439,6 @@
 {
 	GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
-	parent_class = g_type_class_peek_parent (klass);
-
 	object_class->finalize = ephy_encoding_menu_finalize;
 	object_class->set_property = ephy_encoding_menu_set_property;
 	object_class->get_property = ephy_encoding_menu_get_property;

Modified: trunk/src/ephy-extensions-manager.c
==============================================================================
--- trunk/src/ephy-extensions-manager.c	(original)
+++ trunk/src/ephy-extensions-manager.c	Sun Feb 10 18:26:22 2008
@@ -129,50 +129,13 @@
 
 static guint signals[LAST_SIGNAL] = { 0 };
 
-static GObjectClass *parent_class = NULL;
-
 static void ephy_extensions_manager_class_init	(EphyExtensionsManagerClass *klass);
 static void ephy_extensions_manager_iface_init	(EphyExtensionIface *iface);
 static void ephy_extensions_manager_init	(EphyExtensionsManager *manager);
 
-GType
-ephy_extensions_manager_get_type (void)
-{
-	static GType type = 0;
-
-	if (G_UNLIKELY (type == 0))
-	{
-		const GTypeInfo our_info =
-		{
-			sizeof (EphyExtensionsManagerClass),
-			NULL, /* base_init */
-			NULL, /* base_finalize */
-			(GClassInitFunc) ephy_extensions_manager_class_init,
-			NULL,
-			NULL, /* class_data */
-			sizeof (EphyExtensionsManager),
-			0, /* n_preallocs */
-			(GInstanceInitFunc) ephy_extensions_manager_init
-		};
-
-		const GInterfaceInfo extension_info =
-		{
-			(GInterfaceInitFunc) ephy_extensions_manager_iface_init,
-			NULL,
-			NULL
-		};
-
-		type = g_type_register_static (G_TYPE_OBJECT,
-					       "EphyExtensionsManager",
-					       &our_info, 0);
-
-		g_type_add_interface_static (type,
-					     EPHY_TYPE_EXTENSION,
-					     &extension_info);
-	}
-
-	return type;
-}
+G_DEFINE_TYPE_WITH_CODE (EphyExtensionsManager, ephy_extensions_manager, G_TYPE_OBJECT,
+			 G_IMPLEMENT_INTERFACE (EPHY_TYPE_EXTENSION,
+						ephy_extensions_manager_iface_init))
 
 /**
  * ephy_extensions_manager_load:
@@ -1193,7 +1156,7 @@
 		priv->windows = NULL;
 	}
 
-	parent_class->dispose (object);
+	G_OBJECT_CLASS (ephy_extensions_manager_parent_class)->dispose (object);
 }
 
 static void
@@ -1300,8 +1263,6 @@
 {
 	GObjectClass *object_class = G_OBJECT_CLASS (class);
 
-	parent_class = (GObjectClass *) g_type_class_peek_parent (class);
-
 	object_class->dispose = ephy_extensions_manager_dispose;
 
 	signals[CHANGED] =

Modified: trunk/src/ephy-find-toolbar.c
==============================================================================
--- trunk/src/ephy-find-toolbar.c	(original)
+++ trunk/src/ephy-find-toolbar.c	Sun Feb 10 18:26:22 2008
@@ -81,9 +81,7 @@
 	LAST_SIGNAL
 };
 
-static guint signals[LAST_SIGNAL] = { 0 };
-
-static GObjectClass *parent_class = NULL;
+static guint signals[LAST_SIGNAL];
 
 /* private functions */
 
@@ -522,6 +520,8 @@
 			  G_CALLBACK (case_sensitive_toggled_cb), toolbar);
 }
 
+G_DEFINE_TYPE (EphyFindToolbar, ephy_find_toolbar, GTK_TYPE_TOOLBAR)
+
 static void
 ephy_find_toolbar_dispose (GObject *object)
 {
@@ -546,7 +546,7 @@
 		priv->find_again_source_id = 0;
 	}
 
-	parent_class->dispose (object);
+	G_OBJECT_CLASS (ephy_find_toolbar_parent_class)->dispose (object);
 }
 
 static void
@@ -581,8 +581,6 @@
 	GObjectClass *object_class = G_OBJECT_CLASS (klass);
         GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
 
-        parent_class = g_type_class_peek_parent (klass);
-
 	object_class->dispose = ephy_find_toolbar_dispose;
 	object_class->get_property = ephy_find_toolbar_get_property;
 	object_class->set_property = ephy_find_toolbar_set_property;
@@ -634,34 +632,6 @@
 
 /* public functions */
 
-GType
-ephy_find_toolbar_get_type (void)
-{
-	static GType type = 0;
-
-	if (G_UNLIKELY (type == 0))
-	{
-		const GTypeInfo our_info =
-		{
-			sizeof (EphyFindToolbarClass),
-			NULL, /* base_init */
-			NULL, /* base_finalize */
-			(GClassInitFunc) ephy_find_toolbar_class_init,
-			NULL,
-			NULL, /* class_data */
-			sizeof (EphyFindToolbar),
-			0, /* n_preallocs */
-			(GInstanceInitFunc) ephy_find_toolbar_init
-		};
-	
-		type = g_type_register_static (GTK_TYPE_TOOLBAR,
-					       "EphyFindToolbar",
-					       &our_info, 0);
-	}
-
-	return type;
-}
-
 EphyFindToolbar *
 ephy_find_toolbar_new (EphyWindow *window)
 {

Modified: trunk/src/ephy-fullscreen-popup.c
==============================================================================
--- trunk/src/ephy-fullscreen-popup.c	(original)
+++ trunk/src/ephy-fullscreen-popup.c	Sun Feb 10 18:26:22 2008
@@ -65,9 +65,9 @@
 	LAST_SIGNAL
 };
 
-static guint signals[LAST_SIGNAL] = { 0 };
+static guint signals[LAST_SIGNAL];
 
-static GObjectClass *parent_class = NULL;
+G_DEFINE_TYPE (EphyFullscreenPopup, ephy_fullscreen_popup, GTK_TYPE_WINDOW)
 
 static void
 exit_button_clicked_cb (GtkWidget *button,
@@ -227,8 +227,9 @@
 	GtkWindow *window;
 	GtkWidget *hbox, *frame_hbox, *icon;
 
-	object = parent_class->constructor (type, n_construct_properties,
-					    construct_params);
+	object = G_OBJECT_CLASS (ephy_fullscreen_popup_parent_class)->constructor (type,
+                                                                                   n_construct_properties,
+                                                                                   construct_params);
 
 	window = GTK_WINDOW (object);
 	popup = EPHY_FULLSCREEN_POPUP (window);
@@ -296,7 +297,7 @@
 	g_signal_handlers_disconnect_matched (priv->window, G_SIGNAL_MATCH_DATA,
 					      0, 0, NULL, NULL, popup);
 
-	parent_class->finalize (object);
+	G_OBJECT_CLASS (ephy_fullscreen_popup_parent_class)->finalize (object);
 }
 
 static void
@@ -330,7 +331,7 @@
 {
 	EphyFullscreenPopup *popup = EPHY_FULLSCREEN_POPUP (widget);
 
-	GTK_WIDGET_CLASS (parent_class)->show (widget);
+	GTK_WIDGET_CLASS (ephy_fullscreen_popup_parent_class)->show (widget);
 
 	ephy_fullscreen_popup_update_spinner (popup);
 }
@@ -340,7 +341,7 @@
 {
 	EphyFullscreenPopup *popup = EPHY_FULLSCREEN_POPUP (widget);
 
-	GTK_WIDGET_CLASS (parent_class)->hide (widget);
+	GTK_WIDGET_CLASS (ephy_fullscreen_popup_parent_class)->hide (widget);
 
 	ephy_fullscreen_popup_update_spinner (popup);
 }
@@ -351,7 +352,7 @@
 {
 	EphyFullscreenPopup *popup = EPHY_FULLSCREEN_POPUP (widget);
 
-	GTK_WIDGET_CLASS (parent_class)->size_request (widget, requisition);
+	GTK_WIDGET_CLASS (ephy_fullscreen_popup_parent_class)->size_request (widget, requisition);
 
 	if (GTK_WIDGET_REALIZED (widget))
 	{
@@ -364,7 +365,7 @@
 {
 	EphyFullscreenPopup *popup = EPHY_FULLSCREEN_POPUP (widget);
 
-	GTK_WIDGET_CLASS (parent_class)->realize (widget);
+	GTK_WIDGET_CLASS (ephy_fullscreen_popup_parent_class)->realize (widget);
 
 	ephy_fullscreen_popup_update_position (popup);
 }
@@ -375,8 +376,6 @@
 	GObjectClass *object_class = G_OBJECT_CLASS (klass);
 	GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
 
-	parent_class = g_type_class_peek_parent (klass);
-
 	object_class->constructor = ephy_fullscreen_popup_constructor;
 	object_class->finalize = ephy_fullscreen_popup_finalize;
 	object_class->get_property = ephy_fullscreen_popup_get_property;
@@ -420,34 +419,6 @@
 	g_type_class_add_private (object_class, sizeof (EphyFullscreenPopupPrivate));
 }
 
-GType
-ephy_fullscreen_popup_get_type (void)
-{
-	static GType type = 0;
-
-	if (G_UNLIKELY (type == 0))
-	{
-		const GTypeInfo our_info =
-		{
-			sizeof (EphyFullscreenPopupClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) ephy_fullscreen_popup_class_init,
-			NULL,
-			NULL,
-			sizeof (EphyFullscreenPopup),
-			0,
-			(GInstanceInitFunc) ephy_fullscreen_popup_init
-		};
-
-		type = g_type_register_static (GTK_TYPE_WINDOW,
-					       "EphyFullscreenPopup",
-					       &our_info, 0);
-	}
-
-	return type;
-}
-
 GtkWidget *
 ephy_fullscreen_popup_new (EphyWindow *window)
 {

Modified: trunk/src/ephy-go-action.c
==============================================================================
--- trunk/src/ephy-go-action.c	(original)
+++ trunk/src/ephy-go-action.c	Sun Feb 10 18:26:22 2008
@@ -30,35 +30,7 @@
 
 static void ephy_go_action_class_init (EphyGoActionClass *class);
 
-static GObjectClass *parent_class = NULL;
-
-GType
-ephy_go_action_get_type (void)
-{
-	static GType type = 0;
-
-	if (G_UNLIKELY (type == 0))
-	{
-		const GTypeInfo type_info =
-		{
-			sizeof (EphyGoActionClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) ephy_go_action_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (EphyGoAction),
-			0, /* n_preallocs */
-			(GInstanceInitFunc) NULL,
-		};
-
-		type = g_type_register_static (EPHY_TYPE_LINK_ACTION,
-					       "EphyGoAction",
-					       &type_info, 0);
-	}
-
-	return type;
-}
+G_DEFINE_TYPE (EphyGoAction, ephy_go_action, EPHY_TYPE_LINK_ACTION)
 
 static GtkWidget *
 create_tool_item (GtkAction *action)
@@ -93,7 +65,7 @@
 connect_proxy (GtkAction *action,
 	       GtkWidget *proxy)
 {      
-	GTK_ACTION_CLASS (parent_class)->connect_proxy (action, proxy);
+	GTK_ACTION_CLASS (ephy_go_action_parent_class)->connect_proxy (action, proxy);
 
 	if (GTK_IS_TOOL_ITEM (proxy))
 	{
@@ -110,7 +82,7 @@
 	g_signal_handlers_disconnect_by_func
 		(proxy, G_CALLBACK (gtk_action_activate), action);
 
-	GTK_ACTION_CLASS (parent_class)->disconnect_proxy (action, proxy);
+	GTK_ACTION_CLASS (ephy_go_action_parent_class)->disconnect_proxy (action, proxy);
 }
 
 static void
@@ -118,9 +90,14 @@
 {
 	GtkActionClass *action_class = GTK_ACTION_CLASS (class);
 
-	parent_class = g_type_class_peek_parent (class);
-
 	action_class->create_tool_item = create_tool_item;
 	action_class->connect_proxy = connect_proxy;
 	action_class->disconnect_proxy = disconnect_proxy;
 }
+
+static void
+ephy_go_action_init (EphyGoAction *action)
+{
+        /* Empty, needed for G_DEFINE_TYPE macro */
+}
+

Modified: trunk/src/ephy-history-window.c
==============================================================================
--- trunk/src/ephy-history-window.c	(original)
+++ trunk/src/ephy-history-window.c	Sun Feb 10 18:26:22 2008
@@ -164,8 +164,6 @@
 #define TIME_LAST_TWO_DAYS_STRING "last_two_days"
 #define TIME_LAST_THREE_DAYS_STRING "last_three_days"
 
-static GObjectClass *parent_class = NULL;
-
 static const GtkActionEntry ephy_history_ui_entries [] = {
 	/* Toplevel */
 	{ "File", NULL, N_("_File") },
@@ -590,33 +588,7 @@
 	g_slist_free (svalues);
 }
 
-GType
-ephy_history_window_get_type (void)
-{
-	static GType type = 0;
-
-	if (G_UNLIKELY (type == 0))
-	{
-		const GTypeInfo our_info =
-		{
-			sizeof (EphyHistoryWindowClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) ephy_history_window_class_init,
-			NULL,
-			NULL,
-			sizeof (EphyHistoryWindow),
-			0,
-			(GInstanceInitFunc) ephy_history_window_init
-		};
-
-		type = g_type_register_static (GTK_TYPE_WINDOW,
-					       "EphyHistoryWindow",
-					       &our_info, 0);
-	}
-
-	return type;
-}
+G_DEFINE_TYPE (EphyHistoryWindow, ephy_history_window, GTK_TYPE_WINDOW)
 
 static void
 ephy_history_window_show (GtkWidget *widget)
@@ -625,7 +597,7 @@
 
 	gtk_widget_grab_focus (window->priv->search_entry);
 
-	GTK_WIDGET_CLASS (parent_class)->show (widget);
+	GTK_WIDGET_CLASS (ephy_history_window_parent_class)->show (widget);
 }
 
 static void
@@ -634,8 +606,6 @@
 	GObjectClass *object_class = G_OBJECT_CLASS (klass);
 	GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
 
-	parent_class = g_type_class_peek_parent (klass);
-
 	object_class->finalize = ephy_history_window_finalize;
 
 	object_class->set_property = ephy_history_window_set_property;
@@ -674,7 +644,7 @@
                          (gpointer *)window);
 	}
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (ephy_history_window_parent_class)->finalize (object);
 }
 
 static void
@@ -1649,5 +1619,5 @@
 		save_date_filter (editor);
 	}
 
-	G_OBJECT_CLASS (parent_class)->dispose (object);
+	G_OBJECT_CLASS (ephy_history_window_parent_class)->dispose (object);
 }

Modified: trunk/src/ephy-home-action.c
==============================================================================
--- trunk/src/ephy-home-action.c	(original)
+++ trunk/src/ephy-home-action.c	Sun Feb 10 18:26:22 2008
@@ -40,14 +40,14 @@
 	EphyLinkFlags flags;
 } ClipboardCtx;
 
+G_DEFINE_TYPE (EphyHomeAction, ephy_home_action, EPHY_TYPE_LINK_ACTION)
+
 static const GtkTargetEntry url_drag_types [] = 
 {
 	{ EPHY_DND_URI_LIST_TYPE,   0, 0 },
 	{ EPHY_DND_URL_TYPE,        0, 1 }
 };
 
-static GObjectClass *parent_class = NULL;
-	
 static void
 clipboard_text_received_cb (GtkClipboard *clipboard,
 			    const char *text,
@@ -236,7 +236,7 @@
 {      
 	gchar *action_name;
 	
-	GTK_ACTION_CLASS (parent_class)->connect_proxy (action, proxy);
+	GTK_ACTION_CLASS (ephy_home_action_parent_class)->connect_proxy (action, proxy);
 	
 	 g_object_get (action, "name", &action_name, NULL);
 
@@ -259,7 +259,7 @@
 	g_signal_handlers_disconnect_by_func
 		(proxy, G_CALLBACK (gtk_action_activate), action);
 
-	GTK_ACTION_CLASS (parent_class)->disconnect_proxy (action, proxy);
+	GTK_ACTION_CLASS (ephy_home_action_parent_class)->disconnect_proxy (action, proxy);
 }
 
 static void
@@ -267,37 +267,13 @@
 {
 	GtkActionClass *action_class = GTK_ACTION_CLASS (class);
 	
-	parent_class = g_type_class_peek_parent (class);
-
 	action_class->activate = ephy_home_action_activate;
 	action_class->connect_proxy = connect_proxy;
 	action_class->disconnect_proxy = disconnect_proxy;
 }
 
-GType
-ephy_home_action_get_type (void)
+static void
+ephy_home_action_init (EphyHomeAction *action)
 {
-	static GType type = 0;
-
-	if (G_UNLIKELY (type == 0))
-	{
-		const GTypeInfo type_info =
-		{
-			sizeof (EphyHomeActionClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) ephy_home_action_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (EphyHomeAction),
-			0, /* n_preallocs */
-			(GInstanceInitFunc) NULL,
-		};
-
-		type = g_type_register_static (EPHY_TYPE_LINK_ACTION,
-					       "EphyHomeAction",
-					       &type_info, 0);
-	}
-
-	return type;
+        /* Empty, needed for G_DEFINE_TYPE macro */
 }

Modified: trunk/src/ephy-link-action.c
==============================================================================
--- trunk/src/ephy-link-action.c	(original)
+++ trunk/src/ephy-link-action.c	Sun Feb 10 18:26:22 2008
@@ -32,7 +32,9 @@
 #include <gtk/gtkmenuitem.h>
 #include <gtk/gtkmenutoolbutton.h>
 
-static GObjectClass *parent_class;
+G_DEFINE_TYPE_WITH_CODE (EphyLinkAction, ephy_link_action, GTK_TYPE_ACTION,
+                         G_IMPLEMENT_INTERFACE (EPHY_TYPE_LINK,
+                                                NULL))
 
 static gboolean
 proxy_button_press_event_cb (GtkButton *button,
@@ -126,7 +128,7 @@
 				  action);
 	}
 
-	GTK_ACTION_CLASS (parent_class)->connect_proxy (action, proxy);
+	GTK_ACTION_CLASS (ephy_link_action_parent_class)->connect_proxy (action, proxy);
 }
 
 static void
@@ -147,7 +149,13 @@
 						      action);
 	}
 
-	GTK_ACTION_CLASS (parent_class)->disconnect_proxy (action, proxy);
+	GTK_ACTION_CLASS (ephy_link_action_parent_class)->disconnect_proxy (action, proxy);
+}
+
+static void
+ephy_link_action_init (EphyLinkAction *action)
+{
+        /* Empty, needed for G_DEFINE_TYPE macro */
 }
 
 static void
@@ -155,86 +163,26 @@
 {
 	GtkActionClass *action_class = GTK_ACTION_CLASS (class);
 
-	parent_class = g_type_class_peek_parent (class);
-
 	action_class->connect_proxy = ephy_link_action_connect_proxy;
 	action_class->disconnect_proxy = ephy_link_action_disconnect_proxy;
 }
 
-GType
-ephy_link_action_get_type (void)
+static void
+ephy_link_action_group_class_init (EphyLinkActionGroupClass *klass)
 {
-	static GType type = 0;
-
-	if (G_UNLIKELY (type == 0))
-	{
-		const GTypeInfo our_info =
-		{
-			sizeof (EphyLinkActionClass),
-			NULL, /* base_init */
-			NULL, /* base_finalize */
-			(GClassInitFunc) ephy_link_action_class_init,
-			NULL,
-			NULL, /* class_data */
-			sizeof (EphyLinkAction),
-			0,   /* n_preallocs */
-			NULL /* instance_init */
-		};
-		const GInterfaceInfo link_info = 
-		{
-			NULL,
-			NULL,
-			NULL
-		};
-
-		type = g_type_register_static (GTK_TYPE_ACTION,
-					       "EphyLinkAction",
-					       &our_info, G_TYPE_FLAG_ABSTRACT);
-		g_type_add_interface_static (type,
-					     EPHY_TYPE_LINK,
-					     &link_info);
-	}
-
-	return type;
-}
-
-GType
-ephy_link_action_group_get_type (void)
-{
-	static GType type = 0;
-
-	if (G_UNLIKELY (type == 0))
-	{
-		const GTypeInfo our_info =
-		{
-			sizeof (EphyLinkActionGroupClass),
-			NULL, /* base_init */
-			NULL, /* base_finalize */
-			NULL, /* class_init */
-			NULL,
-			NULL, /* class_data */
-			sizeof (EphyLinkActionGroup),
-			0,   /* n_preallocs */
-			NULL /* instance_init */
-		};
-		const GInterfaceInfo link_info = 
-		{
-			NULL,
-			NULL,
-			NULL
-		};
-
-		type = g_type_register_static (GTK_TYPE_ACTION_GROUP,
-					       "EphyLinkActionGroup",
-					       &our_info, 0);
-		g_type_add_interface_static (type,
-					     EPHY_TYPE_LINK,
-					     &link_info);
-	}
+        /* Empty, needed for G_DEFINE_TYPE macro */
+}
 
-	return type;
+static void
+ephy_link_action_group_init (EphyLinkActionGroup *action_group)
+{
+        /* Empty, needed for G_DEFINE_TYPE macro */
 }
 
+G_DEFINE_TYPE_WITH_CODE (EphyLinkActionGroup, ephy_link_action_group, GTK_TYPE_ACTION_GROUP,
+                         G_IMPLEMENT_INTERFACE (EPHY_TYPE_LINK,
+                                                NULL))
+
 EphyLinkActionGroup *
 ephy_link_action_group_new (const char * name)
 {

Modified: trunk/src/ephy-link.c
==============================================================================
--- trunk/src/ephy-link.c	(original)
+++ trunk/src/ephy-link.c	Sun Feb 10 18:26:22 2008
@@ -34,7 +34,7 @@
 	LAST_SIGNAL
 };
 
-static guint signals[LAST_SIGNAL] = { 0 };
+static guint signals[LAST_SIGNAL];
 
 static void
 ephy_link_base_init (gpointer g_class)

Modified: trunk/src/ephy-location-action.c
==============================================================================
--- trunk/src/ephy-location-action.c	(original)
+++ trunk/src/ephy-location-action.c	Sun Feb 10 18:26:22 2008
@@ -87,9 +87,9 @@
 	LOCK_CLICKED,
 	LAST_SIGNAL
 };
-static guint signals[LAST_SIGNAL] = { 0 };
+static guint signals[LAST_SIGNAL];
 
-static GObjectClass *parent_class = NULL;
+G_DEFINE_TYPE (EphyLocationAction, ephy_location_action, EPHY_TYPE_LINK_ACTION)
 
 static const struct
 {
@@ -220,34 +220,6 @@
 	return ret;
 }
 
-GType
-ephy_location_action_get_type (void)
-{
-	static GType type = 0;
-
-	if (G_UNLIKELY (type == 0))
-	{
-		const GTypeInfo type_info =
-		{
-			sizeof (EphyLocationActionClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) ephy_location_action_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (EphyLocationAction),
-			0, /* n_preallocs */
-			(GInstanceInitFunc) ephy_location_action_init,
-		};
-
-		type = g_type_register_static (EPHY_TYPE_LINK_ACTION,
-					       "EphyLocationAction",
-					       &type_info, 0);
-	}
-
-	return type;
-}
-
 static void
 action_activated_cb (GtkEntryCompletion *completion,
                      gint index,
@@ -552,13 +524,13 @@
 					 G_CALLBACK (get_title_cb), action, 0);
 	}
 
-	GTK_ACTION_CLASS (parent_class)->connect_proxy (action, proxy);
+	GTK_ACTION_CLASS (ephy_location_action_parent_class)->connect_proxy (action, proxy);
 }
 
 static void
 disconnect_proxy (GtkAction *action, GtkWidget *proxy)
 {
-	GTK_ACTION_CLASS (parent_class)->disconnect_proxy (action, proxy);
+	GTK_ACTION_CLASS (ephy_location_action_parent_class)->disconnect_proxy (action, proxy);
 
 	if (EPHY_IS_LOCATION_ENTRY (proxy))
 	{
@@ -664,8 +636,6 @@
 	GObjectClass *object_class = G_OBJECT_CLASS (class);
 	GtkActionClass *action_class = GTK_ACTION_CLASS (class);
 
-	parent_class = g_type_class_peek_parent (class);
-
 	object_class->finalize = ephy_location_action_finalize;
 	object_class->get_property = ephy_location_action_get_property;
 	object_class->set_property = ephy_location_action_set_property;
@@ -904,7 +874,7 @@
 	g_free (priv->lock_stock_id);
 	g_free (priv->lock_tooltip);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (ephy_location_action_parent_class)->finalize (object);
 }
 
 const char *

Modified: trunk/src/ephy-lockdown.c
==============================================================================
--- trunk/src/ephy-lockdown.c	(original)
+++ trunk/src/ephy-lockdown.c	Sun Feb 10 18:26:22 2008
@@ -36,6 +36,8 @@
 
 #include <string.h>
 
+static void ephy_lockdown_iface_init (EphyExtensionIface *iface);
+
 /* Make sure these don't overlap with those in ephy-window.c and ephy-toolbar.c */
 enum
 {
@@ -63,8 +65,6 @@
 	GList *windows;
 };
 
-static GObjectClass *parent_class = NULL;
-
 static int
 find_name (GtkActionGroup *action_group,
 	   const char *name)
@@ -255,6 +255,10 @@
 	eel_gconf_monitor_add ("/desktop/gnome/lockdown");
 }
 
+G_DEFINE_TYPE_WITH_CODE (EphyLockdown, ephy_lockdown, G_TYPE_OBJECT,
+			 G_IMPLEMENT_INTERFACE (EPHY_TYPE_EXTENSION,
+						ephy_lockdown_iface_init))
+
 static void
 ephy_lockdown_finalize (GObject *object)
 {
@@ -272,7 +276,7 @@
 		eel_gconf_notification_remove (priv->notifier_id[i]);
 	}
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (ephy_lockdown_parent_class)->finalize (object);
 }
 
 static void
@@ -313,46 +317,8 @@
 {
 	GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
-	parent_class = (GObjectClass *) g_type_class_peek_parent (klass);
-
 	object_class->finalize = ephy_lockdown_finalize;
 
 	g_type_class_add_private (object_class, sizeof (EphyLockdownPrivate));
 }
 
-GType
-ephy_lockdown_get_type (void)
-{
-	static GType type = 0;
-
-	if (G_UNLIKELY (type == 0))
-	{
-		const GTypeInfo our_info =
-		{
-			sizeof (EphyLockdownClass),
-			NULL, /* base_init */
-			NULL, /* base_finalize */
-			(GClassInitFunc) ephy_lockdown_class_init,
-			NULL,
-			NULL, /* class_data */
-			sizeof (EphyLockdown),
-			0, /* n_preallocs */
-			(GInstanceInitFunc) ephy_lockdown_init
-		};
-		const GInterfaceInfo extension_info =
-		{
-			(GInterfaceInitFunc) ephy_lockdown_iface_init,
-			NULL,
-			NULL
-		};
-
-		type = g_type_register_static (G_TYPE_OBJECT,
-					       "EphyLockdown",
-					       &our_info, 0);
-		g_type_add_interface_static (type,
-					     EPHY_TYPE_EXTENSION,
-					     &extension_info);
-	}
-
-	return type;
-}

Modified: trunk/src/ephy-navigation-action.c
==============================================================================
--- trunk/src/ephy-navigation-action.c	(original)
+++ trunk/src/ephy-navigation-action.c	Sun Feb 10 18:26:22 2008
@@ -68,35 +68,7 @@
 static void ephy_navigation_action_init       (EphyNavigationAction *action);
 static void ephy_navigation_action_class_init (EphyNavigationActionClass *class);
 
-static GObjectClass *parent_class = NULL;
-
-GType
-ephy_navigation_action_get_type (void)
-{
-	static GType type = 0;
-
-	if (G_UNLIKELY (type == 0))
-	{
-		const GTypeInfo type_info =
-		{
-			sizeof (EphyNavigationActionClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) ephy_navigation_action_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,
-			sizeof (EphyNavigationAction),
-			0, /* n_preallocs */
-			(GInstanceInitFunc) ephy_navigation_action_init,
-		};
-
-		type = g_type_register_static (EPHY_TYPE_LINK_ACTION,
-					       "EphyNavigationAction",
-					       &type_info, 0);
-	}
-
-	return type;
-}
+G_DEFINE_TYPE (EphyNavigationAction, ephy_navigation_action, EPHY_TYPE_LINK_ACTION)
 
 #define MAX_LABEL_LENGTH 48
 
@@ -379,7 +351,7 @@
 				  G_CALLBACK (menu_activated_cb), gaction);
 	}
 
-	GTK_ACTION_CLASS (parent_class)->connect_proxy (gaction, proxy);
+	GTK_ACTION_CLASS (ephy_navigation_action_parent_class)->connect_proxy (gaction, proxy);
 }
 
 static void
@@ -440,7 +412,7 @@
 
 	g_free (action->priv->arrow_tooltip);
 
-	parent_class->finalize (object);
+	G_OBJECT_CLASS (ephy_navigation_action_parent_class)->finalize (object);
 }
 
 static void
@@ -509,8 +481,6 @@
 	object_class->set_property = ephy_navigation_action_set_property;
 	object_class->get_property = ephy_navigation_action_get_property;
 
-	parent_class = g_type_class_peek_parent (class);
-
 	action_class->toolbar_item_type = GTK_TYPE_MENU_TOOL_BUTTON;
 	action_class->connect_proxy = connect_proxy;
 	action_class->activate = ephy_navigation_action_activate;

Modified: trunk/src/ephy-net-monitor.c
==============================================================================
--- trunk/src/ephy-net-monitor.c	(original)
+++ trunk/src/ephy-net-monitor.c	Sun Feb 10 18:26:22 2008
@@ -56,7 +56,7 @@
 	PROP_NETWORK_STATUS
 };
 
-static GObjectClass *parent_class;
+G_DEFINE_TYPE (EphyNetMonitor, ephy_net_monitor, G_TYPE_OBJECT)
 
 static void
 ephy_net_monitor_set_net_status (EphyNetMonitor *monitor,
@@ -331,7 +331,7 @@
 		priv->notify_id = 0;
 	}
 
-	parent_class->dispose (object);
+	G_OBJECT_CLASS (ephy_net_monitor_parent_class)->dispose (object);
 }
 
 static void
@@ -355,8 +355,6 @@
 {
 	GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
-	parent_class = g_type_class_peek_parent (klass);
-
 	object_class->dispose = ephy_net_monitor_dispose;
 	object_class->get_property = ephy_net_monitor_get_property;
 
@@ -379,34 +377,6 @@
 
 /* public API */
 
-GType
-ephy_net_monitor_get_type (void)
-{
-	static GType type = 0;
-
-	if (G_UNLIKELY (type == 0))
-	{
-		const GTypeInfo our_info =
-		{
-			sizeof (EphyShellClass),
-			NULL, /* base_init */
-			NULL, /* base_finalize */
-			(GClassInitFunc) ephy_net_monitor_class_init,
-			NULL,
-			NULL, /* class_data */
-			sizeof (EphyNetMonitor),
-			0, /* n_preallocs */
-			(GInstanceInitFunc) ephy_net_monitor_init
-		};
-
-		type = g_type_register_static (G_TYPE_OBJECT,
-					       "EphyNetMonitor",
-					       &our_info, 0);
-	}
-
-	return type;
-}
-
 EphyNetMonitor *
 ephy_net_monitor_new (void)
 {

Modified: trunk/src/ephy-python-extension.c
==============================================================================
--- trunk/src/ephy-python-extension.c	(original)
+++ trunk/src/ephy-python-extension.c	Sun Feb 10 18:26:22 2008
@@ -35,6 +35,8 @@
 #include "ephy-file-helpers.h"
 #include "ephy-debug.h"
 
+static void ephy_python_extension_iface_init (EphyExtensionIface *iface);
+
 #define EPHY_PYTHON_EXTENSION_GET_PRIVATE(object) (G_TYPE_INSTANCE_GET_PRIVATE ((object), EPHY_TYPE_PYTHON_EXTENSION, EphyPythonExtensionPrivate))
 
 struct _EphyPythonExtensionPrivate
@@ -49,8 +51,6 @@
 	PROP_FILENAME
 };
 
-static GObjectClass *parent_class = NULL;
-
 static int
 set_python_search_path (const char *filename)
 {
@@ -104,86 +104,6 @@
 	extension->priv = EPHY_PYTHON_EXTENSION_GET_PRIVATE (extension);
 }
 
-static GObject *
-ephy_python_extension_constructor (GType type,
-				   guint n_construct_properties,
-				   GObjectConstructParam *construct_params)
-{
-	GObject *object;
-	EphyPythonExtension *ext;
-	char *module_name;	/* filename minus optional ".py" */
-				/* Note: could equally be a directory */
-	PyObject *pModules, *pModule, *pReload;
-			  
-	int num_temp_paths;
-
-	object = parent_class->constructor (type, n_construct_properties,
-					    construct_params);
-
-	ext = EPHY_PYTHON_EXTENSION (object);
-
-	module_name = g_path_get_basename (ext->priv->filename);
-
-	num_temp_paths = set_python_search_path (ext->priv->filename);
-
-	pModules = PySys_GetObject ("modules");
-	g_assert (pModules != NULL);
-
-	pModule = PyDict_GetItemString (pModules, module_name);
-
-	if (pModule == NULL)
-	{
-		pModule = PyImport_ImportModule (module_name);
-
-		if (pModule == NULL)
-		{
-			PyErr_Print ();
-			PyErr_Clear ();
-			g_warning ("Could not initialize Python module '%s'",
-				   module_name);
-		}
-	}
-	else
-	{
-		pReload = PyImport_ReloadModule (pModule);
-
-		if (pReload == NULL)
-		{
-			PyErr_Print ();
-			PyErr_Clear ();
-			g_warning ("Could not reload Python module '%s'\n"
-				   "Falling back to previous version",
-				   module_name);
-		}
-		else
-		{
-			Py_DECREF (pReload);
-		}
-	}
-
-	unset_python_search_path (num_temp_paths);
-
-	ext->priv->module = pModule;
-
-	g_free (module_name);
-
-	return object;
-}
-
-static void
-ephy_python_extension_finalize (GObject *object)
-{
-	EphyPythonExtension *extension =
-			EPHY_PYTHON_EXTENSION (object);
-
-	LOG ("EphyPythonExtension finalizing");
-
-	g_free (extension->priv->filename);
-	Py_XDECREF (extension->priv->module);
-
-	G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
 static void
 call_python_func (EphyExtension *extension,
 		  const char *func_name,
@@ -283,6 +203,91 @@
 	iface->detach_window = impl_detach_window;
 }
 
+G_DEFINE_TYPE_WITH_CODE (EphyPythonExtension, ephy_python_extension, G_TYPE_OBJECT,
+                         G_IMPLEMENT_INTERFACE (EPHY_TYPE_EXTENSION,
+                                                ephy_python_extension_iface_init))
+
+static GObject *
+ephy_python_extension_constructor (GType type,
+				   guint n_construct_properties,
+				   GObjectConstructParam *construct_params)
+{
+	GObject *object;
+	EphyPythonExtension *ext;
+	char *module_name;	/* filename minus optional ".py" */
+				/* Note: could equally be a directory */
+	PyObject *pModules, *pModule, *pReload;
+			  
+	int num_temp_paths;
+
+	object = G_OBJECT_CLASS (ephy_python_extension_parent_class)->constructor (type,
+                                                                                   n_construct_properties,
+                                                                                   construct_params);
+
+	ext = EPHY_PYTHON_EXTENSION (object);
+
+	module_name = g_path_get_basename (ext->priv->filename);
+
+	num_temp_paths = set_python_search_path (ext->priv->filename);
+
+	pModules = PySys_GetObject ("modules");
+	g_assert (pModules != NULL);
+
+	pModule = PyDict_GetItemString (pModules, module_name);
+
+	if (pModule == NULL)
+	{
+		pModule = PyImport_ImportModule (module_name);
+
+		if (pModule == NULL)
+		{
+			PyErr_Print ();
+			PyErr_Clear ();
+			g_warning ("Could not initialize Python module '%s'",
+				   module_name);
+		}
+	}
+	else
+	{
+		pReload = PyImport_ReloadModule (pModule);
+
+		if (pReload == NULL)
+		{
+			PyErr_Print ();
+			PyErr_Clear ();
+			g_warning ("Could not reload Python module '%s'\n"
+				   "Falling back to previous version",
+				   module_name);
+		}
+		else
+		{
+			Py_DECREF (pReload);
+		}
+	}
+
+	unset_python_search_path (num_temp_paths);
+
+	ext->priv->module = pModule;
+
+	g_free (module_name);
+
+	return object;
+}
+
+static void
+ephy_python_extension_finalize (GObject *object)
+{
+	EphyPythonExtension *extension =
+			EPHY_PYTHON_EXTENSION (object);
+
+	LOG ("EphyPythonExtension finalizing");
+
+	g_free (extension->priv->filename);
+	Py_XDECREF (extension->priv->module);
+
+	G_OBJECT_CLASS (ephy_python_extension_parent_class)->finalize (object);
+}
+
 static void
 ephy_python_extension_get_property (GObject *object,
 				    guint prop_id,
@@ -316,8 +321,6 @@
 {
 	GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
-	parent_class = g_type_class_peek_parent (klass);
-
 	object_class->finalize = ephy_python_extension_finalize;
 	object_class->constructor = ephy_python_extension_constructor;
 	object_class->get_property = ephy_python_extension_get_property;
@@ -335,37 +338,3 @@
 	g_type_class_add_private (object_class, sizeof (EphyPythonExtensionPrivate));
 }
 
-GType
-ephy_python_extension_get_type (void)
-{
-	static GType type = 0;
-
-	if (G_UNLIKELY (type == 0))
-	{
-		const GTypeInfo our_info =
-		{
-			sizeof (EphyPythonExtensionClass),
-			NULL, /* base_init */
-			NULL, /* base_finalize */
-			(GClassInitFunc) ephy_python_extension_class_init,
-			NULL,
-			NULL, /* class_data */
-			sizeof (EphyPythonExtension),
-			0, /* n_preallocs */
-			(GInstanceInitFunc) ephy_python_extension_init
-		};
-		const GInterfaceInfo extension_info =
-		{
-			(GInterfaceInitFunc) ephy_python_extension_iface_init,
-			NULL,
-			NULL
-		};
-
-		type = g_type_register_static (G_TYPE_OBJECT, "EphyPythonExtension",
-					       &our_info, 0);
-
-		g_type_add_interface_static (type, EPHY_TYPE_EXTENSION, &extension_info);
-	}
-
-	return type;
-}

Modified: trunk/src/ephy-python-loader.c
==============================================================================
--- trunk/src/ephy-python-loader.c	(original)
+++ trunk/src/ephy-python-loader.c	Sun Feb 10 18:26:22 2008
@@ -35,8 +35,6 @@
 	gpointer dummy;
 };
 
-static GObjectClass *parent_class = NULL;
-
 static GObject *
 impl_get_object (EphyLoader *eloader,
 		 GKeyFile *keyfile)
@@ -80,6 +78,9 @@
 	iface->release_object = impl_release_object;
 }
 
+G_DEFINE_TYPE_WITH_CODE (EphyPythonLoader, ephy_python_loader, G_TYPE_OBJECT,
+                         G_IMPLEMENT_INTERFACE (EPHY_TYPE_LOADER, ephy_python_loader_iface_init))
+
 static void
 ephy_python_loader_init (EphyPythonLoader *loader)
 {
@@ -96,7 +97,7 @@
 {
 	LOG ("EphyPythonLoader finalising");
 
-	parent_class->finalize (object);
+	G_OBJECT_CLASS (ephy_python_loader_parent_class)->finalize (object);
 
 	ephy_python_shutdown ();
 }
@@ -106,44 +107,8 @@
 {
 	GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
-	parent_class = g_type_class_peek_parent (klass);
-
 	object_class->finalize = ephy_python_loader_finalize;
 
 	g_type_class_add_private (object_class, sizeof (EphyPythonLoaderPrivate));
 }
 
-GType
-ephy_python_loader_get_type (void)
-{
-	static GType type = 0;
-
-	if (G_UNLIKELY (type == 0))
-	{
-		const GTypeInfo our_info =
-		{
-			sizeof (EphyPythonLoaderClass),
-			NULL, /* base_init */
-			NULL, /* base_finalize */
-			(GClassInitFunc) ephy_python_loader_class_init,
-			NULL,
-			NULL, /* class_data */
-			sizeof (EphyPythonLoader),
-			0, /* n_preallocs */
-			(GInstanceInitFunc) ephy_python_loader_init
-		};
-		const GInterfaceInfo loader_info =
-		{
-			(GInterfaceInitFunc) ephy_python_loader_iface_init,
-			NULL,
-			NULL
-		};
-
-		type = g_type_register_static (G_TYPE_OBJECT, "EphyPythonLoader",
-					       &our_info, 0);
-
-		g_type_add_interface_static (type, EPHY_TYPE_LOADER, &loader_info);
-	}
-
-	return type;
-}

Modified: trunk/src/ephy-session.c
==============================================================================
--- trunk/src/ephy-session.c	(original)
+++ trunk/src/ephy-session.c	Sun Feb 10 18:26:22 2008
@@ -98,46 +98,9 @@
 	PROP_ACTIVE_WINDOW
 };
 
-static GObjectClass *parent_class = NULL;
-
-GType
-ephy_session_get_type (void)
-{
-	static GType type = 0;
-
-	if (G_UNLIKELY (type == 0))
-	{
-		const GTypeInfo our_info =
-		{
-			sizeof (EphySessionClass),
-			NULL, /* base_init */
-			NULL, /* base_finalize */
-			(GClassInitFunc) ephy_session_class_init,
-			NULL,
-			NULL, /* class_data */
-			sizeof (EphySession),
-			0, /* n_preallocs */
-			(GInstanceInitFunc) ephy_session_init
-		};
-
-		const GInterfaceInfo extension_info =
-		{
-			(GInterfaceInitFunc) ephy_session_iface_init,
-			NULL,
-			NULL
-		};
-
-		type = g_type_register_static (G_TYPE_OBJECT,
-					       "EphySession",
-					       &our_info, 0);
-
-		g_type_add_interface_static (type,
-					     EPHY_TYPE_EXTENSION,
-					     &extension_info);
-	}
-
-	return type;
-}
+G_DEFINE_TYPE_WITH_CODE (EphySession, ephy_session, G_TYPE_OBJECT,
+			 G_IMPLEMENT_INTERFACE (EPHY_TYPE_EXTENSION,
+						ephy_session_iface_init))
 
 /* Gnome session client */
 
@@ -926,7 +889,7 @@
 	g_signal_handlers_disconnect_by_func
 		(client, G_CALLBACK (die_cb), session);
 
-	parent_class->dispose (object);
+	G_OBJECT_CLASS (ephy_session_parent_class)->dispose (object);
 }
 
 static void
@@ -940,7 +903,7 @@
 	g_list_free (session->priv->windows);
 	g_list_free (session->priv->tool_windows);
 
-	parent_class->finalize (object);
+	G_OBJECT_CLASS (ephy_session_parent_class)->finalize (object);
 }
 
 static void
@@ -983,8 +946,6 @@
 {
 	GObjectClass *object_class = G_OBJECT_CLASS (class);
 
-	parent_class = g_type_class_peek_parent (class);
-
 	object_class->dispose = ephy_session_dispose;
 	object_class->finalize = ephy_session_finalize;
 	object_class->get_property = ephy_session_get_property;

Modified: trunk/src/ephy-shell.c
==============================================================================
--- trunk/src/ephy-shell.c	(original)
+++ trunk/src/ephy-shell.c	Sun Feb 10 18:26:22 2008
@@ -90,35 +90,7 @@
 static void ephy_shell_finalize		(GObject *object);
 static GObject *impl_get_embed_single   (EphyEmbedShell *embed_shell);
 
-static GObjectClass *parent_class;
-
-GType
-ephy_shell_get_type (void)
-{
-	static GType type = 0;
-
-	if (G_UNLIKELY (type == 0))
-	{
-		const GTypeInfo our_info =
-		{
-			sizeof (EphyShellClass),
-			NULL, /* base_init */
-			NULL, /* base_finalize */
-			(GClassInitFunc) ephy_shell_class_init,
-			NULL,
-			NULL, /* class_data */
-			sizeof (EphyShell),
-			0, /* n_preallocs */
-			(GInstanceInitFunc) ephy_shell_init
-		};
-
-		type = g_type_register_static (EPHY_TYPE_EMBED_SHELL,
-					       "EphyShell",
-					       &our_info, 0);
-	}
-
-	return type;
-}
+G_DEFINE_TYPE (EphyShell, ephy_shell, EPHY_TYPE_EMBED_SHELL)
 
 static void
 ephy_shell_class_init (EphyShellClass *klass)
@@ -126,8 +98,6 @@
 	GObjectClass *object_class = G_OBJECT_CLASS (klass);
 	EphyEmbedShellClass *embed_shell_class = EPHY_EMBED_SHELL_CLASS (klass);
 
-	parent_class = g_type_class_peek_parent (klass);
-
 	object_class->dispose = ephy_shell_dispose;
 	object_class->finalize = ephy_shell_finalize;
 
@@ -241,7 +211,7 @@
 	EphyShellPrivate *priv = shell->priv;
 	GObject *embed_single;
 
-	embed_single = EPHY_EMBED_SHELL_CLASS (parent_class)->get_embed_single (embed_shell);
+	embed_single = EPHY_EMBED_SHELL_CLASS (ephy_shell_parent_class)->get_embed_single (embed_shell);
 
 	if (embed_single != NULL &&
 	    priv->embed_single_connected == FALSE)
@@ -370,13 +340,13 @@
 	}
 #endif /* ENABLE_NETWORK_MANAGER */
 
-	G_OBJECT_CLASS (parent_class)->dispose (object);
+	G_OBJECT_CLASS (ephy_shell_parent_class)->dispose (object);
 }
 
 static void
 ephy_shell_finalize (GObject *object)
 {
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (ephy_shell_parent_class)->finalize (object);
 
 	LOG ("Ephy shell finalised");
 }

Modified: trunk/src/ephy-statusbar.c
==============================================================================
--- trunk/src/ephy-statusbar.c	(original)
+++ trunk/src/ephy-statusbar.c	Sun Feb 10 18:26:22 2008
@@ -60,43 +60,14 @@
 };
 
 static guint signals[LAST_SIGNAL];
-static GObjectClass *parent_class;
 
-GType
-ephy_statusbar_get_type (void)
-{
-	static GType type = 0;
-
-	if (G_UNLIKELY (type == 0))
-	{
-		const GTypeInfo our_info =
-		{
-			sizeof (EphyStatusbarClass),
-			NULL, /* base_init */
-			NULL, /* base_finalize */
-			(GClassInitFunc) ephy_statusbar_class_init,
-			NULL,
-			NULL, /* class_data */
-			sizeof (EphyStatusbar),
-			0, /* n_preallocs */
-			(GInstanceInitFunc) ephy_statusbar_init
-		};
-
-		type = g_type_register_static (GTK_TYPE_STATUSBAR,
-					       "EphyStatusbar",
-					       &our_info, 0);
-	}
-
-	return type;
-}
+G_DEFINE_TYPE (EphyStatusbar, ephy_statusbar, GTK_TYPE_STATUSBAR)
 
 static void
 ephy_statusbar_class_init (EphyStatusbarClass *klass)
 {
 	GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
-	parent_class = g_type_class_peek_parent (klass);
-
 	signals[LOCK_CLICKED] =
 		g_signal_new
 			("lock-clicked",

Modified: trunk/src/ephy-toolbar-editor.c
==============================================================================
--- trunk/src/ephy-toolbar-editor.c	(original)
+++ trunk/src/ephy-toolbar-editor.c	Sun Feb 10 18:26:22 2008
@@ -93,7 +93,7 @@
 	PROP_WINDOW
 };
 
-static GObjectClass *parent_class = NULL;
+G_DEFINE_TYPE (EphyToolbarEditor, ephy_toolbar_editor, GTK_TYPE_DIALOG)
 
 static gboolean
 row_is_separator (GtkTreeModel *model,
@@ -180,8 +180,9 @@
 	char *pref;
 	int i;
 
-	object = parent_class->constructor (type, n_construct_properties,
-					    construct_params);
+	object = G_OBJECT_CLASS (ephy_toolbar_editor_parent_class)->constructor (type,
+                                                                                 n_construct_properties,
+                                                                                 construct_params);
 
 	dialog = GTK_WIDGET (object);
 	priv = EPHY_TOOLBAR_EDITOR (object)->priv;
@@ -305,7 +306,7 @@
 
 	g_object_set_data (G_OBJECT (priv->window), DATA_KEY, NULL);
 
-	parent_class->finalize (object);
+	G_OBJECT_CLASS (ephy_toolbar_editor_parent_class)->finalize (object);
 }
 
 static void
@@ -340,8 +341,6 @@
 	GObjectClass *object_class = G_OBJECT_CLASS (klass);
 	GtkDialogClass *dialog_class = GTK_DIALOG_CLASS (klass);
 
-	parent_class = g_type_class_peek_parent (klass);
-
 	object_class->constructor = ephy_toolbar_editor_constructor;
 	object_class->finalize = ephy_toolbar_editor_finalize;
 	object_class->get_property = ephy_toolbar_editor_get_property;
@@ -361,34 +360,6 @@
 	g_type_class_add_private (object_class, sizeof (EphyToolbarEditorPrivate));
 }
 
-GType
-ephy_toolbar_editor_get_type (void)
-{
-	static GType type = 0;
-
-	if (G_UNLIKELY (type == 0))
-	{
-		const GTypeInfo our_info =
-		{
-			sizeof (EphyToolbarEditorClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) ephy_toolbar_editor_class_init,
-			NULL,
-			NULL,
-			sizeof (EphyToolbarEditor),
-			0,
-			(GInstanceInitFunc) ephy_toolbar_editor_init
-		};
-
-		type = g_type_register_static (GTK_TYPE_DIALOG,
-					       "EphyToolbarEditor",
-					       &our_info, 0);
-	}
-
-	return type;
-}
-
 GtkWidget *
 ephy_toolbar_editor_show (EphyWindow *window)
 {

Modified: trunk/src/ephy-toolbar.c
==============================================================================
--- trunk/src/ephy-toolbar.c	(original)
+++ trunk/src/ephy-toolbar.c	Sun Feb 10 18:26:22 2008
@@ -105,9 +105,16 @@
 	LAST_SIGNAL
 };
 
-static guint signals[LAST_SIGNAL] = { 0 };
+static guint signals[LAST_SIGNAL];
 
-static GObjectClass *parent_class = NULL;
+static void
+ephy_toolbar_iface_init (EphyLinkIface *iface)
+{
+}
+
+G_DEFINE_TYPE_WITH_CODE (EphyToolbar, ephy_toolbar, EGG_TYPE_EDITABLE_TOOLBAR,
+                         G_IMPLEMENT_INTERFACE (EPHY_TYPE_LINK,
+                                                ephy_toolbar_iface_init))
 
 /* helper functions */
 
@@ -524,13 +531,13 @@
 static void
 ephy_toolbar_realize (GtkWidget *widget)
 {
-	GTK_WIDGET_CLASS (parent_class)->realize (widget);
+	GTK_WIDGET_CLASS (ephy_toolbar_parent_class)->realize (widget);
 }
 
 static void
 ephy_toolbar_unrealize (GtkWidget *widget)
 {
-	GTK_WIDGET_CLASS (parent_class)->unrealize (widget);
+	GTK_WIDGET_CLASS (ephy_toolbar_parent_class)->unrealize (widget);
 }
 
 static void
@@ -538,7 +545,7 @@
 {
 	EphyToolbar *toolbar = EPHY_TOOLBAR (widget);
 
-	GTK_WIDGET_CLASS (parent_class)->show (widget);
+	GTK_WIDGET_CLASS (ephy_toolbar_parent_class)->show (widget);
 
 	ephy_toolbar_update_spinner (toolbar);
 }
@@ -548,7 +555,7 @@
 {
 	EphyToolbar *toolbar = EPHY_TOOLBAR (widget);
 
-	GTK_WIDGET_CLASS (parent_class)->hide (widget);
+	GTK_WIDGET_CLASS (ephy_toolbar_parent_class)->hide (widget);
 
 	ephy_toolbar_update_spinner (toolbar);
 }
@@ -571,8 +578,9 @@
 	EphyToolbarPrivate *priv;
 	GtkToolbar *gtoolbar;
 
-	object = parent_class->constructor (type, n_construct_properties,
-					    construct_params);
+	object = G_OBJECT_CLASS (ephy_toolbar_parent_class)->constructor (type,
+                                                                          n_construct_properties,
+                                                                          construct_params);
 
 	toolbar = EPHY_TOOLBAR (object);
 	priv = toolbar->priv;
@@ -614,7 +622,7 @@
 					     priv->set_focus_handler);
 	}
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (ephy_toolbar_parent_class)->finalize (object);
 }
 
 static void
@@ -649,8 +657,6 @@
 	GObjectClass *object_class = G_OBJECT_CLASS (klass);
 	GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
 
-	parent_class = g_type_class_peek_parent (klass);
-
 	object_class->constructor = ephy_toolbar_constructor;
 	object_class->finalize = ephy_toolbar_finalize;
 	object_class->set_property = ephy_toolbar_set_property;
@@ -705,43 +711,6 @@
 	g_type_class_add_private (object_class, sizeof(EphyToolbarPrivate));
 }
 
-GType
-ephy_toolbar_get_type (void)
-{
-	static GType type = 0;
-
-	if (G_UNLIKELY (type == 0))
-	{
-		const GTypeInfo our_info =
-		{
-			sizeof (EphyToolbarClass),
-			NULL, /* base_init */
-			NULL, /* base_finalize */
-			(GClassInitFunc) ephy_toolbar_class_init,
-			NULL,
-			NULL, /* class_data */
-			sizeof (EphyToolbar),
-			0, /* n_preallocs */
-			(GInstanceInitFunc) ephy_toolbar_init
-		};
-		const GInterfaceInfo link_info = 
-		{
-			NULL,
-			NULL,
-			NULL
-		};
-
-		type = g_type_register_static (EGG_TYPE_EDITABLE_TOOLBAR,
-					       "EphyToolbar",
-					       &our_info, 0);
-		g_type_add_interface_static (type,
-					     EPHY_TYPE_LINK,
-					     &link_info);
-	}
-
-	return type;
-}
-
 EphyToolbar *
 ephy_toolbar_new (EphyWindow *window)
 {

Modified: trunk/src/ephy-toolbars-model.c
==============================================================================
--- trunk/src/ephy-toolbars-model.c	(original)
+++ trunk/src/ephy-toolbars-model.c	Sun Feb 10 18:26:22 2008
@@ -46,34 +46,7 @@
 static void ephy_toolbars_model_class_init (EphyToolbarsModelClass *klass);
 static void ephy_toolbars_model_init       (EphyToolbarsModel *model);
 
-static GObjectClass *parent_class = NULL;
-
-GType
-ephy_toolbars_model_get_type (void)
-{
-	static GType type = 0;
-
-	if (G_UNLIKELY (type == 0))
-	{
-		const GTypeInfo our_info = {
-		sizeof (EphyToolbarsModelClass),
-		NULL,			/* base_init */
-		NULL,			/* base_finalize */
-		(GClassInitFunc) ephy_toolbars_model_class_init,
-		NULL,
-		NULL,			/* class_data */
-		sizeof (EphyToolbarsModel),
-		0,			/* n_preallocs */
-		(GInstanceInitFunc) ephy_toolbars_model_init
-	};
-
-	type = g_type_register_static (EGG_TYPE_TOOLBARS_MODEL,
-				       "EphyToolbarsModel",
-				       &our_info, 0);
-	}
-
-	return type;
-}
+G_DEFINE_TYPE (EphyToolbarsModel, ephy_toolbars_model, EGG_TYPE_TOOLBARS_MODEL)
 
 static gboolean
 save_changes_idle (EphyToolbarsModel *model)
@@ -282,7 +255,7 @@
 
 	save_changes_idle (model);
 
-	G_OBJECT_CLASS (parent_class)->dispose (object);
+	G_OBJECT_CLASS (ephy_toolbars_model_parent_class)->dispose (object);
 }
 
 static void
@@ -303,7 +276,7 @@
 
 	g_free (priv->xml_file);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (ephy_toolbars_model_parent_class)->finalize (object);
 }
 
 static void
@@ -311,8 +284,6 @@
 {
 	GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
-	parent_class = g_type_class_peek_parent (klass);
-
 	object_class->dispose = ephy_toolbars_model_dispose;
 	object_class->finalize = ephy_toolbars_model_finalize;
 

Modified: trunk/src/pdm-dialog.c
==============================================================================
--- trunk/src/pdm-dialog.c	(original)
+++ trunk/src/pdm-dialog.c	Sun Feb 10 18:26:22 2008
@@ -155,43 +155,13 @@
 						 PdmDialog *dialog);
 
 
-static GObjectClass *parent_class = NULL;
-
-GType 
-pdm_dialog_get_type (void)
-{
-	static GType type = 0;
-
-	if (G_UNLIKELY (type == 0))
-	{
-		const GTypeInfo our_info =
-		{
-			sizeof (PdmDialogClass),
-			NULL, /* base_init */
-			NULL, /* base_finalize */
-			(GClassInitFunc) pdm_dialog_class_init,
-			NULL,
-			NULL, /* class_data */
-			sizeof (PdmDialog),
-			0, /* n_preallocs */
-			(GInstanceInitFunc) pdm_dialog_init
-		};
-
-		type = g_type_register_static (EPHY_TYPE_DIALOG,
-					       "PdmDialog",
-					       &our_info, 0);
-	}
-
-	return type;
-}
+G_DEFINE_TYPE (PdmDialog, pdm_dialog, EPHY_TYPE_DIALOG)
 
 static void
 pdm_dialog_class_init (PdmDialogClass *klass)
 {
 	GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
-	parent_class = g_type_class_peek_parent (klass);
-
 	object_class->finalize = pdm_dialog_finalize;
 
 	g_type_class_add_private (object_class, sizeof(PdmDialogPrivate));
@@ -1553,7 +1523,7 @@
 	g_free (dialog->priv->passwords);
 	g_free (dialog->priv->cookies);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (pdm_dialog_parent_class)->finalize (object);
 }
 
 void

Modified: trunk/src/ppview-toolbar.c
==============================================================================
--- trunk/src/ppview-toolbar.c	(original)
+++ trunk/src/ppview-toolbar.c	Sun Feb 10 18:26:22 2008
@@ -54,8 +54,6 @@
 	PROP_WINDOW
 };
 
-static GObjectClass *parent_class = NULL;
-
 #define EPHY_PPVIEW_TOOLBAR_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), EPHY_TYPE_PPVIEW_TOOLBAR, PPViewToolbarPrivate))
 
 struct PPViewToolbarPrivate
@@ -121,41 +119,13 @@
 "</toolbar>"
 "</ui>\n";
 
-GType
-ppview_toolbar_get_type (void)
-{
-	static GType type = 0;
-
-	if (G_UNLIKELY (type == 0))
-	{
-		const GTypeInfo our_info =
-		{
-			sizeof (PPViewToolbarClass),
-			NULL, /* base_init */
-			NULL, /* base_finalize */
-			(GClassInitFunc) ppview_toolbar_class_init,
-			NULL,
-			NULL, /* class_data */
-			sizeof (PPViewToolbar),
-			0, /* n_preallocs */
-			(GInstanceInitFunc) ppview_toolbar_init
-		};
-
-		type = g_type_register_static (G_TYPE_OBJECT,
-					       "PPViewToolbar",
-					       &our_info, 0);
-        }
-
-	return type;
-}
+G_DEFINE_TYPE (PPViewToolbar, ppview_toolbar, G_TYPE_OBJECT)
 
 static void
 ppview_toolbar_class_init (PPViewToolbarClass *klass)
 {
         GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
-        parent_class = g_type_class_peek_parent (klass);
-
         object_class->finalize = ppview_toolbar_finalize;
 
 	object_class->set_property = ppview_toolbar_set_property;
@@ -286,7 +256,7 @@
 					    t->priv->action_group);
 	g_object_unref (t->priv->action_group);
 
-        G_OBJECT_CLASS (parent_class)->finalize (object);
+        G_OBJECT_CLASS (ppview_toolbar_parent_class)->finalize (object);
 }
 
 PPViewToolbar *

Modified: trunk/src/prefs-dialog.c
==============================================================================
--- trunk/src/prefs-dialog.c	(original)
+++ trunk/src/prefs-dialog.c	Sun Feb 10 18:26:22 2008
@@ -293,35 +293,7 @@
 	GHashTable *iso_3166_table;
 };
 
-static GObjectClass *parent_class = NULL;
-
-GType
-prefs_dialog_get_type (void)
-{
-	static GType type = 0;
-
-	if (G_UNLIKELY (type == 0))
-	{
-		const GTypeInfo our_info =
-		{
-			sizeof (PrefsDialogClass),
-			NULL, /* base_init */
-			NULL, /* base_finalize */
-			(GClassInitFunc) prefs_dialog_class_init,
-			NULL,
-			NULL, /* class_data */
-			sizeof (PrefsDialog),
-			0, /* n_preallocs */
-			(GInstanceInitFunc) prefs_dialog_init
-		};
-
-		type = g_type_register_static (EPHY_TYPE_DIALOG,
-					       "PrefsDialog",
-					       &our_info, 0);
-	}
-
-	return type;
-}
+G_DEFINE_TYPE (PrefsDialog, prefs_dialog, EPHY_TYPE_DIALOG)
 
 static void
 prefs_dialog_finalize (GObject *object)
@@ -352,7 +324,7 @@
 	g_hash_table_destroy (priv->iso_639_table);
 	g_hash_table_destroy (priv->iso_3166_table);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (prefs_dialog_parent_class)->finalize (object);
 }
 
 static void
@@ -360,8 +332,6 @@
 {
 	GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
-	parent_class = g_type_class_peek_parent (klass);
-
 	object_class->finalize = prefs_dialog_finalize;
 
 	g_type_class_add_private (object_class, sizeof(PrefsDialogPrivate));



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