diff --git a/src/gui_gtk_f.c b/src/gui_gtk_f.c
index 04e25aa..3f376c0 100644
--- a/src/gui_gtk_f.c
+++ b/src/gui_gtk_f.c
@@ -150,21 +150,13 @@
      * that gtk_widget_set_parent() realizes the widget if it's visible
      * and its parent is mapped.
      */
-#if GTK_CHECK_VERSION(3,0,0)
     if (gtk_widget_get_realized(GTK_WIDGET(form)))
-#else
-    if (GTK_WIDGET_REALIZED(form))
-#endif
 	gtk_form_attach_child_window(form, child);
 
     gtk_widget_set_parent(child_widget, GTK_WIDGET(form));
 
-#if GTK_CHECK_VERSION(3,0,0)
     if (gtk_widget_get_realized(GTK_WIDGET(form))
 	    && !gtk_widget_get_realized(child_widget))
-#else
-    if (GTK_WIDGET_REALIZED(form) && !GTK_WIDGET_REALIZED(child_widget))
-#endif
 	gtk_form_realize_child(form, child);
 
     gtk_form_position_child(form, child, TRUE);
@@ -300,32 +292,19 @@
     GtkForm *form;
     GdkWindowAttr attributes;
     gint attributes_mask;
+    GtkAllocation allocation;
 
     g_return_if_fail(GTK_IS_FORM(widget));
 
     form = GTK_FORM(widget);
-#if GTK_CHECK_VERSION(3,0,0)
     gtk_widget_set_realized(widget, TRUE);
-#else
-    GTK_WIDGET_SET_FLAGS(form, GTK_REALIZED);
-#endif
 
+    gtk_widget_get_allocation(widget, &allocation);
     attributes.window_type = GDK_WINDOW_CHILD;
-#if GTK_CHECK_VERSION(3,0,0)
-    {
-	GtkAllocation allocation;
-	gtk_widget_get_allocation(widget, &allocation);
-	attributes.x = allocation.x;
-	attributes.y = allocation.y;
-	attributes.width = allocation.width;
-	attributes.height = allocation.height;
-    }
-#else
-    attributes.x = widget->allocation.x;
-    attributes.y = widget->allocation.y;
-    attributes.width = widget->allocation.width;
-    attributes.height = widget->allocation.height;
-#endif
+    attributes.x = allocation.x;
+    attributes.y = allocation.y;
+    attributes.width = allocation.width;
+    attributes.height = allocation.height;
     attributes.wclass = GDK_INPUT_OUTPUT;
     attributes.visual = gtk_widget_get_visual(widget);
 #if GTK_CHECK_VERSION(3,0,0)
@@ -341,14 +320,9 @@
     attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;
 #endif
 
-#if GTK_CHECK_VERSION(3,0,0)
     gtk_widget_set_window(widget,
 			  gdk_window_new(gtk_widget_get_parent_window(widget),
 					 &attributes, attributes_mask));
-#else
-    widget->window = gdk_window_new(gtk_widget_get_parent_window(widget),
-				    &attributes, attributes_mask);
-#endif
     gdk_window_set_user_data(gtk_widget_get_window(widget), widget);
 
     attributes.x = 0;
@@ -382,11 +356,7 @@
 
 	gtk_form_attach_child_window(form, child);
 
-#if GTK_CHECK_VERSION(3,0,0)
 	if (gtk_widget_get_visible(child->widget))
-#else
-	if (GTK_WIDGET_VISIBLE(child->widget))
-#endif
 	    gtk_form_realize_child(form, child);
     }
 }
@@ -410,11 +380,7 @@
 
     form = GTK_FORM(widget);
 
-#if GTK_CHECK_VERSION(3,0,0)
     gtk_widget_set_mapped(widget, TRUE);
-#else
-    GTK_WIDGET_SET_FLAGS(widget, GTK_MAPPED);
-#endif
 
     gdk_window_show(gtk_widget_get_window(widget));
     gdk_window_show(form->bin_window);
@@ -423,13 +389,8 @@
     {
 	GtkFormChild *child = tmp_list->data;
 
-#if GTK_CHECK_VERSION(3,0,0)
 	if (gtk_widget_get_visible(child->widget)
 		&& !gtk_widget_get_mapped(child->widget))
-#else
-	if (GTK_WIDGET_VISIBLE(child->widget)
-		&& !GTK_WIDGET_MAPPED(child->widget))
-#endif
 	    gtk_widget_map(child->widget);
     }
 }
@@ -456,21 +417,12 @@
 
 	if (child->window != NULL)
 	{
-#if GTK_CHECK_VERSION(3,0,0)
 	    g_signal_handlers_disconnect_by_func(G_OBJECT(child->widget),
 		    FUNC2GENERIC(gtk_form_child_map),
 		    child);
 	    g_signal_handlers_disconnect_by_func(G_OBJECT(child->widget),
 		    FUNC2GENERIC(gtk_form_child_unmap),
 		    child);
-#else
-	    gtk_signal_disconnect_by_func(GTK_OBJECT(child->widget),
-		    GTK_SIGNAL_FUNC(gtk_form_child_map),
-		    child);
-	    gtk_signal_disconnect_by_func(GTK_OBJECT(child->widget),
-		    GTK_SIGNAL_FUNC(gtk_form_child_unmap),
-		    child);
-#endif
 
 	    gdk_window_set_user_data(child->window, NULL);
 	    gdk_window_destroy(child->window);
@@ -534,34 +486,20 @@
     GList *tmp_list;
     GtkForm *form;
     gboolean need_reposition;
-#if GTK_CHECK_VERSION(3,0,0)
     GtkAllocation cur_alloc;
-#endif
 
     g_return_if_fail(GTK_IS_FORM(widget));
 
-#if GTK_CHECK_VERSION(3,0,0)
     gtk_widget_get_allocation(widget, &cur_alloc);
 
     if (cur_alloc.x == allocation->x
 	    && cur_alloc.y == allocation->y
 	    && cur_alloc.width == allocation->width
 	    && cur_alloc.height == allocation->height)
-#else
-    if (widget->allocation.x == allocation->x
-	    && widget->allocation.y == allocation->y
-	    && widget->allocation.width == allocation->width
-	    && widget->allocation.height == allocation->height)
-#endif
 	return;
 
-#if GTK_CHECK_VERSION(3,0,0)
     need_reposition = cur_alloc.width != allocation->width
 		   || cur_alloc.height != allocation->height;
-#else
-    need_reposition = widget->allocation.width != allocation->width
-		   || widget->allocation.height != allocation->height;
-#endif
     form = GTK_FORM(widget);
 
     if (need_reposition)
@@ -577,11 +515,7 @@
 	}
     }
 
-#if GTK_CHECK_VERSION(3,0,0)
     if (gtk_widget_get_realized(widget))
-#else
-    if (GTK_WIDGET_REALIZED(widget))
-#endif
     {
 	gdk_window_move_resize(gtk_widget_get_window(widget),
 			       allocation->x, allocation->y,
@@ -590,11 +524,7 @@
 			       0, 0,
 			       allocation->width, allocation->height);
     }
-#if GTK_CHECK_VERSION(3,0,0)
     gtk_widget_set_allocation(widget, allocation);
-#else
-    widget->allocation = *allocation;
-#endif
     if (need_reposition)
 	gtk_form_send_configure(form);
 }
@@ -697,17 +627,10 @@
 #endif
 	if (child->window)
 	{
-#if GTK_CHECK_VERSION(3,0,0)
 	    g_signal_handlers_disconnect_by_func(G_OBJECT(child->widget),
 		    FUNC2GENERIC(&gtk_form_child_map), child);
 	    g_signal_handlers_disconnect_by_func(G_OBJECT(child->widget),
 		    FUNC2GENERIC(&gtk_form_child_unmap), child);
-#else
-	    gtk_signal_disconnect_by_func(GTK_OBJECT(child->widget),
-		    GTK_SIGNAL_FUNC(&gtk_form_child_map), child);
-	    gtk_signal_disconnect_by_func(GTK_OBJECT(child->widget),
-		    GTK_SIGNAL_FUNC(&gtk_form_child_unmap), child);
-#endif
 
 	    /* FIXME: This will cause problems for reparenting NO_WINDOW
 	     * widgets out of a GtkForm
@@ -760,34 +683,25 @@
     if (child->window != NULL)
 	return; /* been there, done that */
 
-#if GTK_CHECK_VERSION(3,0,0)
     if (!gtk_widget_get_has_window(child->widget))
-#else
-    if (GTK_WIDGET_NO_WINDOW(child->widget))
-#endif
     {
 	GtkWidget	*widget;
 	GdkWindowAttr	attributes;
 	gint		attributes_mask;
+	GtkRequisition	requisition;
 
 	widget = GTK_WIDGET(form);
 
+#if GTK_CHECK_VERSION(3,0,0)
+	gtk_widget_get_preferred_size(child->widget, &requisition, NULL);
+#else
+	requisition = child->widget->requisition;
+#endif
 	attributes.window_type = GDK_WINDOW_CHILD;
 	attributes.x = child->x;
 	attributes.y = child->y;
-#if GTK_CHECK_VERSION(3,0,0)
-	{
-	    GtkRequisition requisition;
-
-	    gtk_widget_get_preferred_size(child->widget, &requisition, NULL);
-
-	    attributes.width = requisition.width;
-	    attributes.height = requisition.height;
-	}
-#else
-	attributes.width = child->widget->requisition.width;
-	attributes.height = child->widget->requisition.height;
-#endif
+	attributes.width = requisition.width;
+	attributes.height = requisition.height;
 	attributes.wclass = GDK_INPUT_OUTPUT;
 	attributes.visual = gtk_widget_get_visual(widget);
 #if !GTK_CHECK_VERSION(3,0,0)
@@ -824,23 +738,12 @@
 	 * Install signal handlers to map/unmap child->window
 	 * alongside with the actual widget.
 	 */
-#if GTK_CHECK_VERSION(3,0,0)
 	g_signal_connect(G_OBJECT(child->widget), "map",
 			 G_CALLBACK(&gtk_form_child_map), child);
 	g_signal_connect(G_OBJECT(child->widget), "unmap",
 			 G_CALLBACK(&gtk_form_child_unmap), child);
-#else
-	gtk_signal_connect(GTK_OBJECT(child->widget), "map",
-			   GTK_SIGNAL_FUNC(&gtk_form_child_map), child);
-	gtk_signal_connect(GTK_OBJECT(child->widget), "unmap",
-			   GTK_SIGNAL_FUNC(&gtk_form_child_unmap), child);
-#endif
     }
-#if GTK_CHECK_VERSION(3,0,0)
     else if (!gtk_widget_get_realized(child->widget))
-#else
-    else if (!GTK_WIDGET_REALIZED(child->widget))
-#endif
     {
 	gtk_widget_set_parent_window(child->widget, form->bin_window);
     }
@@ -868,18 +771,10 @@
     {
 	if (!child->mapped)
 	{
-#if GTK_CHECK_VERSION(3,0,0)
 	    if (gtk_widget_get_mapped(GTK_WIDGET(form))
 		    && gtk_widget_get_visible(child->widget))
-#else
-	    if (GTK_WIDGET_MAPPED(form) && GTK_WIDGET_VISIBLE(child->widget))
-#endif
 	    {
-#if GTK_CHECK_VERSION(3,0,0)
 		if (!gtk_widget_get_mapped(child->widget))
-#else
-		if (!GTK_WIDGET_MAPPED(child->widget))
-#endif
 		    gtk_widget_map(child->widget);
 
 		child->mapped = TRUE;
@@ -890,31 +785,22 @@
 	if (force_allocate)
 	{
 	    GtkAllocation allocation;
-#if GTK_CHECK_VERSION(3,0,0)
 	    GtkRequisition requisition;
 
+#if GTK_CHECK_VERSION(3,0,0)
 	    gtk_widget_get_preferred_size(child->widget, &requisition, NULL);
+#else
+	    requisition = child->widget->requisition;
 #endif
 
-#if GTK_CHECK_VERSION(3,0,0)
 	    if (!gtk_widget_get_has_window(child->widget))
-#else
-	    if (GTK_WIDGET_NO_WINDOW(child->widget))
-#endif
 	    {
 		if (child->window)
 		{
-#if GTK_CHECK_VERSION(3,0,0)
 		    gdk_window_move_resize(child->window,
 			    x, y,
 			    requisition.width,
 			    requisition.height);
-#else
-		    gdk_window_move_resize(child->window,
-			    x, y,
-			    child->widget->requisition.width,
-			    child->widget->requisition.height);
-#endif
 		}
 
 		allocation.x = 0;
@@ -926,13 +812,8 @@
 		allocation.y = y;
 	    }
 
-#if GTK_CHECK_VERSION(3,0,0)
 	    allocation.width = requisition.width;
 	    allocation.height = requisition.height;
-#else
-	    allocation.width = child->widget->requisition.width;
-	    allocation.height = child->widget->requisition.height;
-#endif
 
 	    gtk_widget_size_allocate(child->widget, &allocation);
 	}
@@ -943,11 +824,7 @@
 	{
 	    child->mapped = FALSE;
 
-#if GTK_CHECK_VERSION(3,0,0)
 	    if (gtk_widget_get_mapped(child->widget))
-#else
-	    if (GTK_WIDGET_MAPPED(child->widget))
-#endif
 		gtk_widget_unmap(child->widget);
 	}
     }
@@ -981,28 +858,17 @@
 {
     GtkWidget *widget;
     GdkEventConfigure event;
+    GtkAllocation allocation;
 
     widget = GTK_WIDGET(form);
 
+    gtk_widget_get_allocation(widget, &allocation);
     event.type = GDK_CONFIGURE;
-#if GTK_CHECK_VERSION(3,0,0)
     event.window = gtk_widget_get_window(widget);
-    {
-	GtkAllocation allocation;
-
-	gtk_widget_get_allocation(widget, &allocation);
-	event.x = allocation.x;
-	event.y = allocation.y;
-	event.width = allocation.width;
-	event.height = allocation.height;
-    }
-#else
-    event.window = widget->window;
-    event.x = widget->allocation.x;
-    event.y = widget->allocation.y;
-    event.width = widget->allocation.width;
-    event.height = widget->allocation.height;
-#endif
+    event.x = allocation.x;
+    event.y = allocation.y;
+    event.width = allocation.width;
+    event.height = allocation.height;
 
     gtk_main_do_event((GdkEvent*)&event);
 }
