OK, I eventually got my Ogre + Gtk app to work. For those interested, have a look at the GtkOgre app on the Ogre wiki, and replace gtk_ogre_realize() with this version (which creates a GdkWindow first, then passes it as external window handle to Ogre when creating the RenderWindow) :
static void gtk_ogre_realize(GtkWidget *widget) { GtkOgre* ogre; g_return_if_fail(widget != NULL); g_return_if_fail(GTK_IS_OGRE(widget)); ogre = GTK_OGRE(widget); g_return_if_fail(ogre->mRenderWindowName != NULL); g_return_if_fail(ogre->mRenderWindow == NULL); GdkWindow* parent = gtk_widget_get_parent_window(widget); //Create the GdkWindow: GdkWindowAttr attributes; memset(&attributes, 0, sizeof(attributes)); //Set initial position and size of the Gdk::Window: attributes.x = widget->allocation.x; attributes.y = widget->allocation.y; attributes.width = widget->allocation.width; attributes.height = widget->allocation.height; //Set event mask as needed here attributes.event_mask = GDK_ALL_EVENTS_MASK; attributes.window_type = GDK_WINDOW_CHILD; attributes.wclass = GDK_INPUT_OUTPUT; GTK_WIDGET_UNSET_FLAGS(widget, GTK_NO_WINDOW); widget->window = GDK_DRAWABLE(gdk_window_new(parent, &attributes, GDK_WA_X | GDK_WA_Y)); Ogre::NameValuePairList params; params["externalWindowHandle"] = Ogre::StringConverter::toString((unsigned long)GDK_WINDOW_HWND(widget->window)); ogre->mRenderWindow = Ogre::Root::getSingleton().createRenderWindow("GtkOgreWidget" + Ogre::StringConverter::toString(++s_wid), widget->allocation.width, widget->allocation.height, false, ¶ms); gtk_widget_set_double_buffered(widget, FALSE); gdk_window_set_user_data(widget->window, G_OBJECT(widget)); gdk_window_set_back_pixmap(widget->window, NULL, FALSE); /* Set realized flag */ GTK_WIDGET_SET_FLAGS(widget, GTK_REALIZED); } Also, see this thread for details : http://www.ogre3d.org/phpBB2/viewtopic.php?t=21731&postdays=0&postorder=asc&start=0 Vincent Delannoy a écrit : > Hi, > > I'm looking for a way to embed an Ogre3D visualisation in a GTK child > widget while still being able to receive keyboard/mouse events in such > a widget. > > The ogre-gtk example app from the Ogre wiki successfully displays Ogre > in child widgets, but for some reason, events can't be received > anymore, despite gtk-signal-connect'ing them, as well as setting > GDK_ALL_EVENTS_MASK on these widgets > > There must be a way around this problem since I know it to be working > with GTKmm. > > Does anyone have suggestions/sample code regarding this issue? > _______________________________________________ gtk-app-devel-list mailing list gtk-app-devel-list@gnome.org http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list