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

Re: Gtk2::MozEmbed + DOM



Using just-uploaded Mozilla::DOM 0.04 and the small attached
patch against CVS HEAD of Gtk2::MozEmbed, you can access the
DOM Window with

  $browser = $embed->get_nsIWebBrowser();
  $window = $browser->get_content_domwindow();

(Please see the XXX in pumzilla for a segfault problem, though.)
It isn't very functional yet, but it's getting there.
diff -ur cvs/gtk2-perl-xs/Gtk2-MozEmbed/examples/pumzilla Gtk2-MozEmbed-0.03/examples/pumzilla
--- cvs/gtk2-perl-xs/Gtk2-MozEmbed/examples/pumzilla	2005-04-05 13:53:19.000000000 +0000
+++ Gtk2-MozEmbed-0.03/examples/pumzilla	2005-04-06 12:33:50.291954312 +0000
@@ -133,6 +133,19 @@
     $forward -> set_sensitive($embed -> can_go_forward());
 
     $progress -> set_fraction(0);
+
+    # XXX: calling get_content_domwindow before $pumzilla->show_all()
+    # (at bottom) causes a segfault - not sure why
+    my $browser = $embed -> get_nsIWebBrowser();
+    my $window = $browser -> get_content_domwindow();
+    if (defined $window) {
+      print "original window name: ", $window -> get_name, $/;
+      $window -> set_name('pummy');
+      print "new window name: ", $window -> get_name, $/;
+    } else {
+      print "browser has no DOM Window\n";
+    }
+
   });
 
   $embed -> signal_connect(progress => sub {
@@ -167,7 +180,8 @@
         my %props = ();
         foreach my $prop (qw(char_code key_code
                              ctrl_key shift_key alt_key meta_key
-                             event_phase bubbles cancelable detail)) {
+                             event_phase bubbles cancelable
+                             type time_stamp detail)) {
           my $method = "get_$prop";
           $props{$prop} = $event -> $method;
         }
@@ -191,7 +205,8 @@
         my %props = ();
         foreach my $prop (qw(screen_x screen_y client_x client_y
                              ctrl_key shift_key alt_key meta_key button
-                             event_phase bubbles cancelable detail)) {
+                             event_phase bubbles cancelable
+                             type detail)) {
           next if ($prop eq 'button' or $prop eq 'detail')
                    and ($signal eq 'dom_mouse_over' or $signal eq 'dom_mouse_out');
           my $method = "get_$prop";
diff -ur cvs/gtk2-perl-xs/Gtk2-MozEmbed/gtkmozembed2perl.h Gtk2-MozEmbed-0.03/gtkmozembed2perl.h
--- cvs/gtk2-perl-xs/Gtk2-MozEmbed/gtkmozembed2perl.h	2005-04-05 13:53:19.000000000 +0000
+++ Gtk2-MozEmbed-0.03/gtkmozembed2perl.h	2005-04-06 12:27:32.441396328 +0000
@@ -35,6 +35,7 @@
 #endif
 
 #include <gtkmozembed.h>
+#include <gtkmozembed_internal.h>   /* XXX: uneasy that it says "internal" */
 #include "gtkmozembed2perl-version.h"
 
 #if 1 /* FIXME: !GTK_MOZ_EMBED_CHECK_VERSION (x, y, z) */
diff -ur cvs/gtk2-perl-xs/Gtk2-MozEmbed/xs/GtkMozEmbed.xs Gtk2-MozEmbed-0.03/xs/GtkMozEmbed.xs
--- cvs/gtk2-perl-xs/Gtk2-MozEmbed/xs/GtkMozEmbed.xs	2005-04-05 13:53:19.000000000 +0000
+++ Gtk2-MozEmbed-0.03/xs/GtkMozEmbed.xs	2005-04-06 12:29:38.316260440 +0000
@@ -537,6 +537,34 @@
     OUTPUT:
 	RETVAL
 
+=for apidoc
+
+This method gets the nsIWebBrowser for this window.
+It is only available if Mozilla::DOM was installed
+before building Gtk2::MozEmbed.
+
+Note: it seems that this will return NULL before you've called `show_all'
+on your Gtk2::Window object, so check if this returns undef.
+
+=cut
+
+##  void  gtk_moz_embed_get_nsIWebBrowser (GtkMozEmbed *embed, nsIWebBrowser **retval)
+
+#ifdef __cplusplus   /* implies Mozilla::DOM is installed */
+
+nsIWebBrowser *
+gtk_moz_embed_get_nsIWebBrowser (embed)
+	GtkMozEmbed *embed
+    PREINIT:
+	nsIWebBrowser *browser;
+    CODE:
+	gtk_moz_embed_get_nsIWebBrowser (embed, &browser);
+	RETVAL = browser;
+    OUTPUT:
+	RETVAL
+
+#endif
+
 # --------------------------------------------------------------------------- #
 
 =for object Gtk2::MozEmbed::main


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