Hello Moz, thanks for your answer

The code snippets i have posted are not very clear, sry for this. In 
fact 'window' and 'nativeWindowHandle' are the same handles.


But maybe i have bigger problems than i thought. I compiled xulrunner in 
Debug mode (shame on me that i havent done this before) and get the 
following error when calling XRE_InitEmbedding():

* Call to xpconnect wrapped JSObject produced this error:  *
[Exception... "Component returned failure code: 0x80570016 
(NS_ERROR_XPC_GS_RETURNED_FAILURE) [nsIJSCID.getService]"

Now im not sure wether Gecko is properly initialized at all, maybe this 
is the problem with the segfault when trying to create a msBaseWindow.


What i did so far:

I compiled xulrunner from source and execute my small sample application 
inside the mozilla/obj-xulrunner/dist/bin directory (without make 
install - ubuntu has some bugs in the xulrunner packages and i dont want 
to mess up my firefox installation). For the xul directory and the app 
directory i use the same absolute paths as the execution directory:


std::string appRuntimeDir("/home/schmelly/mozilla/obj-xulrunner/dist/bin");
std::string xulRuntimeDir("/home/schmelly/mozilla/obj-xulrunner/dist/bin");

nsCOMPtr< nsILocalFile > xulDir;
nsCOMPtr< nsILocalFile > appDir;

NS_NewNativeLocalFile(nsCString(xulRuntimeDir.c_str() ), PR_FALSE, 
getter_AddRefs(xulDir ) );
S_NewNativeLocalFile(nsCString(appRuntimeDir.c_str() ), PR_FALSE, 
getter_AddRefs(appDir ) );

XRE_InitEmbedding()(xulDir, appDir, nsnull, nsnull, 0);


Is this supposed to work at all? Am i missing additional dependencies or 
  configuration?


thanks in advance and best regards,
David

-------------------------------------------------------------------
for completeness the whole source code of my small sample app:


#include <gtk/gtk.h>
#include <nsXULAppAPI.h>
#include <nsISupports.h>
#include <nsILocalFile.h>
#include <nsIPref.h>
#include <nsString.h>

#include <iostream>

static void on_destroy(GtkWidget * widget, gpointer data) {
     gtk_main_quit ();
}

int main(int argc, char *argv[]) {
     GtkWidget *window;
     GtkWidget *label;

     gtk_init (&argc, &argv);

     /* create the main, top level, window */
     window = gtk_window_new (GTK_WINDOW_TOPLEVEL);

     /* give the window a 20px wide border */
     gtk_container_set_border_width (GTK_CONTAINER (window), 20);

     /* give it the title */
     gtk_window_set_title (GTK_WINDOW (window), "Test");

     /* open it a bit wider so that both the label and title show up */
     gtk_window_set_default_size (GTK_WINDOW (window), 200, 50);

     /* Connect the destroy event of the window with our on_destroy function
      * When the window is about to be destroyed we get a notificaiton and
      * stop the main GTK loop
      */
     g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK 
(on_destroy),
             NULL);

     /* Create the "Hello, World" label  */
     label = gtk_label_new ("Hello, World");

     /* and insert it into the main window  */
     gtk_container_add (GTK_CONTAINER (window), label);

     std::string 
appRuntimeDir("/home/schmelly/Dateien/Projekte/Cpp/mozilla/obj-xulrunner/dist/bin");
     std::string 
xulRuntimeDir("/home/schmelly/Dateien/Projekte/Cpp/mozilla/obj-xulrunner/dist/bin");

     nsCOMPtr< nsILocalFile > xulDir;
     nsresult result = 
NS_NewNativeLocalFile(nsCString(xulRuntimeDir.c_str() ),
             PR_FALSE, getter_AddRefs(xulDir ) );
     if (NS_FAILED(result ) ) {
         return -1;
     };

     nsCOMPtr< nsILocalFile > appDir;
     result = NS_NewNativeLocalFile(nsCString(appRuntimeDir.c_str() ), 
PR_FALSE,
             getter_AddRefs(appDir ) );
     if (NS_FAILED(result ) ) {
         return -1;
     };

     result = XRE_InitEmbedding()(xulDir, appDir, nsnull, nsnull, 0);
     if (NS_FAILED(result ) ) {
         return -1;
     };

     XRE_TermEmbedding();

     /* make sure that everything, window and label, are visible */
     gtk_widget_show_all (window);

     /* start the main loop */
     gtk_main ();

     return 0;
}
-------------------------------------------------------------------

Moz Toddler schrieb:
> :
> :
>> gtk_init (&argc, &argv);
>> GtkWidget *window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
> :
> :
>> baseWindow = do_QueryInterface(webBrowser);
>> baseWindow->InitWindow(nativeWindowHandle, nsnull, 0, 0, 50, 50);
> 
> I think you should pass GtkWidget* 'window' as first argument to
> 'InitWindow'
> 
> 
> 
_______________________________________________
dev-embedding mailing list
[email protected]
https://lists.mozilla.org/listinfo/dev-embedding

Reply via email to