[Pkg-mozext-commits] [firetray] 259/399: show how to find GtkWindow from GdkWindow

David Prévot taffit at alioth.debian.org
Tue Oct 29 18:23:55 UTC 2013


This is an automated email from the git hooks/post-receive script.

taffit pushed a commit to branch dfsg-clean
in repository firetray.

commit 3bb6d15fbc7a688d1629d50f32cac7f44b82cc2d
Author: foudfou <foudil.newbie+git at gmail.com>
Date:   Fri Jun 29 17:34:20 2012 +0200

    show how to find GtkWindow from GdkWindow
---
 src/lib/linux/firetray.c             |    8 +++
 src/lib/linux/firetray.h             |    2 +
 src/modules/ctypes/libfiretray.jsm   |    2 +
 src/modules/ctypes/linux/gtk.jsm     |    1 +
 src/modules/linux/FiretrayWindow.jsm |   89 +++++++++++++++++++---------------
 testing/xtypes.c                     |    1 +
 6 files changed, 64 insertions(+), 39 deletions(-)

diff --git a/src/lib/linux/firetray.c b/src/lib/linux/firetray.c
index 7f89af7..e1a09a4 100644
--- a/src/lib/linux/firetray.c
+++ b/src/lib/linux/firetray.c
@@ -6,3 +6,11 @@
 int gdk_is_window(void* obj) {
   return GDK_IS_WINDOW(obj) ? 1 : 0;
 }
+
+int gtk_is_window(void* obj) {
+  return GTK_IS_WINDOW(obj) ? 1 : 0;
+}
+
+int gtk_is_widget(void* obj) {
+  return GTK_IS_WIDGET(obj) ? 1 : 0;
+}
diff --git a/src/lib/linux/firetray.h b/src/lib/linux/firetray.h
index b0ebf83..f393184 100644
--- a/src/lib/linux/firetray.h
+++ b/src/lib/linux/firetray.h
@@ -1 +1,3 @@
 extern int gdk_is_window(void* obj);
+extern int gtk_is_window(void* obj);
+extern int gtk_is_widget(void* obj);
diff --git a/src/modules/ctypes/libfiretray.jsm b/src/modules/ctypes/libfiretray.jsm
index c9f7afb..80ce05b 100644
--- a/src/modules/ctypes/libfiretray.jsm
+++ b/src/modules/ctypes/libfiretray.jsm
@@ -53,6 +53,8 @@ var libfiretray = {
 
   _declare: function() {
     this.gdk_is_window = this._lib.declare("gdk_is_window", ctypes.default_abi, ctypes.int, ctypes.void_t.ptr);
+    this.gtk_is_window = this._lib.declare("gtk_is_window", ctypes.default_abi, ctypes.int, ctypes.void_t.ptr);
+    this.gtk_is_widget = this._lib.declare("gtk_is_widget", ctypes.default_abi, ctypes.int, ctypes.void_t.ptr);
   }
 
 };
diff --git a/src/modules/ctypes/linux/gtk.jsm b/src/modules/ctypes/linux/gtk.jsm
index 8b52561..55c62a1 100644
--- a/src/modules/ctypes/linux/gtk.jsm
+++ b/src/modules/ctypes/linux/gtk.jsm
@@ -117,6 +117,7 @@ function gtk_defines(lib) {
   lib.lazy_bind("gtk_widget_get_events", gobject.gint, this.GtkWidget.ptr);
   lib.lazy_bind("gtk_widget_get_events", gobject.gint, this.GtkWidget.ptr);
   lib.lazy_bind("gtk_widget_add_events", ctypes.void_t, this.GtkWidget.ptr, gobject.gint);
+  lib.lazy_bind("gtk_widget_get_toplevel", this.GtkWidget.ptr, this.GtkWidget.ptr);
   lib.lazy_bind("gtk_window_get_type", gobject.GType);
   lib.lazy_bind("gtk_window_get_position", ctypes.void_t, this.GtkWindow.ptr, gobject.gint.ptr, gobject.gint.ptr);
   lib.lazy_bind("gtk_window_move", ctypes.void_t, this.GtkWindow.ptr, gobject.gint, gobject.gint);
diff --git a/src/modules/linux/FiretrayWindow.jsm b/src/modules/linux/FiretrayWindow.jsm
index 60104d4..2f76e19 100644
--- a/src/modules/linux/FiretrayWindow.jsm
+++ b/src/modules/linux/FiretrayWindow.jsm
@@ -530,78 +530,89 @@ firetray.Handler.registerWindow = function(win) {
 
   try { // TESTing nativeHandle
     Cu.import("resource://firetray/ctypes/libfiretray.jsm");
-    libfiretray.init();
+libfiretray.init();
     F.WARN("libfiretray available");
 
     function addrPointedBy(ptr) {
-      return ctypes.cast(ptr, ctypes.uintptr_t.ptr).contents;
+      return ctypes.cast(ptr, ctypes.uintptr_t.ptr).contents.toString(16);
     }
 
     F.WARN("TEST gdkWin="+gdkWin+" gdkWin is actually a pointer to a GdkWindow");
-    F.WARN("TEST *gdkWin=0x"+addrPointedBy(gdkWin).toString(16));
+    F.WARN("TEST *gdkWin=0x"+addrPointedBy(gdkWin));
 
     let nativeHandle = this.windows[xid].baseWin.nativeHandle;
     if ("undefined" === typeof(nativeHandle)) {
       F.WARN("nativeHandle undefined");
     } else {
-      F.WARN("TEST nativeHandle=0x"+nativeHandle.toString(16)+" this is the (address of the) actual GdkWindow !");
-
-      // actual check
-      if (firetray.js.strEquals(nativeHandle, addrPointedBy(gdkWin)))
-        F.WARN("OK: nativeHandle == *gdkWin");
-      else
-        F.WARN("NOT OK: nativeHandle != *gdkWin");
+      F.WARN("TEST nativeHandle="+nativeHandle+" this is Moz' private pointer to the GdkWindow !");
 
       // construct GdkWindow.ptr from nativeHandle
-      // let gdkwPtr = ctypes.uintptr_t(nativeHandle).address();
-      // F.WARN(gdkwPtr);
-      // let gdkw = ctypes.cast(gdkwPtr, gdk.GdkWindow.ptr);
-      let gdkw = ctypes.cast(ctypes.uintptr_t(nativeHandle).address(), gdk.GdkWindow.ptr);
+      let gdkw = new gdk.GdkWindow.ptr(ctypes.UInt64(nativeHandle));
       F.WARN("TEST gdkw="+gdkw+" a new pointer to a GdkWindow");
-      let isGdkWin = libfiretray.gdk_is_window(ctypes.cast(gdkw, ctypes.void_t.ptr));
-      F.WARN("gdkw isGdkWin="+isGdkWin);
-libfiretray.shutdown();
+      F.WARN("gdkw isGdkWin="+libfiretray.gdk_is_window(ctypes.cast(gdkw, ctypes.void_t.ptr)));
 
-      // re-check
+      // check
       if (firetray.js.strEquals(addrPointedBy(gdkWin), addrPointedBy(gdkw)))
-        F.WARN("OK: Re-check");
+        F.WARN("OK: check");
       else
-        F.WARN("NOT OK: Re-check");
+        F.WARN("NOT OK: check");
       F.WARN("gdkWin="+gdkWin+" gdkw="+gdkw+" *gdkWin=0x"+addrPointedBy(gdkWin).toString(16)+" *gdkw=0x"+addrPointedBy(gdkw).toString(16));
 
       // gdk.gdk_window_set_title(gdkw, "FOUDIL WAS HERE");
 
       // getting the GtkWin from GdkWindow user_data
-      F.WARN("TEST *gtkWin=0x"+addrPointedBy(gtkWin).toString(16)); // reference
+      F.WARN("TEST *gtkWin=0x"+addrPointedBy(gtkWin)+" = REFERENCE");
 
       let gptr = new gobject.gpointer;
       gdk.gdk_window_get_user_data(gdkWin, gptr.address());
-      F.WARN("TEST gptr-gdkWin="+gptr);
-      F.WARN("TEST *gptr-gdkWin=0x"+addrPointedBy(gptr).toString(16));
+      F.WARN("\nTEST gptr-gdkWin="+gptr);
+      F.WARN("TEST *gptr-gdkWin=0x"+addrPointedBy(gptr));
 
       gdk.gdk_window_get_user_data(gdkw, gptr.address());
-      F.WARN("TEST gptr-gdkw="+gptr);
-      // F.WARN("TEST *gptr-gdkWin="+addrPointedBy(gptr).toString(16));
+      F.WARN("\nTEST gptr-gdkw="+gptr);
+      F.WARN("TEST *gptr-gdkw=0x"+addrPointedBy(gptr));
+
+      let gtkw = ctypes.cast(gptr, gtk.GtkWindow.ptr);
+      let gtkw_voidp = ctypes.cast(gtkw, ctypes.void_t.ptr);
+      F.WARN("gtkw isGtkWin="+libfiretray.gtk_is_window(gtkw_voidp));
+      F.WARN("gtkw isGtkWid="+libfiretray.gtk_is_widget(gtkw_voidp));
+      let gtkwid_top = gtk.gtk_widget_get_toplevel(ctypes.cast(gtkw, gtk.GtkWidget.ptr));
+      F.WARN("gtkwid_top="+gtkwid_top);
+      gtkw = ctypes.cast(gtkwid_top, gtk.GtkWindow.ptr);
+      F.WARN("gtkw isGtkWin="+libfiretray.gtk_is_window(ctypes.cast(gtkw, ctypes.void_t.ptr)));
+
+      if (firetray.js.strEquals(addrPointedBy(gtkWin), addrPointedBy(gtkw)))
+        F.WARN("OK: gtk");
+      else
+        F.WARN("NOT OK: gtk");
 
-      // let gtkw = ctypes.cast(gptr, gtk.GtkWidget.ptr);
-      // F.WARN("TEST gtkw="+gtkw);
-      // F.WARN("TEST *gtkw="+ctypes.cast(gtkw, ctypes.uintptr_t.ptr).contents.toString(16));
+      gtk.gtk_window_set_decorated(gtkw, false);
+
+libfiretray.shutdown();
       F.WARN("OK");
     }
+
   } catch (x) {F.ERROR(x);}
 // *** WARN firetray: libfiretray available
-// *** WARN firetray: TEST gdkWin=GdkWindow.ptr(ctypes.UInt64("0x9387830")) gdkWin is actually a pointer to a GdkWindow
-// *** WARN firetray: TEST *gdkWin=0x9113f00
-// *** WARN firetray: TEST nativeHandle=0x9113f00 this is the (address of the) actual GdkWindow !
-// *** WARN firetray: OK: nativeHandle == *gdkWin
-// *** WARN firetray: TEST gdkw=GdkWindow.ptr(ctypes.UInt64("0x95f73d0")) a new pointer to a GdkWindow
+// *** WARN firetray: TEST gdkWin=GdkWindow.ptr(ctypes.UInt64("0xa1d2830")) gdkWin is actually a pointer to a GdkWindow
+// *** WARN firetray: TEST *gdkWin=0x9f5df00
+// *** WARN firetray: TEST nativeHandle=0x9f63440 this is Moz' private pointer to the GdkWindow !
+// *** WARN firetray: TEST gdkw=GdkWindow.ptr(ctypes.UInt64("0x9f63440")) a new pointer to a GdkWindow
 // *** WARN firetray: gdkw isGdkWin=1
-// *** WARN firetray: OK: Re-check
-// *** WARN firetray: gdkWin=GdkWindow.ptr(ctypes.UInt64("0x9387830")) gdkw=GdkWindow.ptr(ctypes.UInt64("0x95f73d0")) *gdkWin=0x9113f00 *gdkw=0x9113f00
-// *** WARN firetray: TEST *gtkWin=0x932b600
-// *** WARN firetray: TEST gptr-gdkWin=ctypes.voidptr_t(ctypes.UInt64("0x93878e0"))
-// *** WARN firetray: TEST *gptr-gdkWin=0x932b600
-// *** WARN firetray: TEST gptr-gdkw=ctypes.voidptr_t(ctypes.UInt64("0x19"))
+// *** WARN firetray: OK: check
+// *** WARN firetray: gdkWin=GdkWindow.ptr(ctypes.UInt64("0xa1d2830")) gdkw=GdkWindow.ptr(ctypes.UInt64("0x9f63440")) *gdkW
+// in=0x9f5df00 *gdkw=0x9f5df00
+// *** WARN firetray: TEST *gtkWin=0xa17bd18 = REFERENCE
+// *** WARN firetray:
+// TEST gptr-gdkWin=ctypes.voidptr_t(ctypes.UInt64("0xa1d28e0"))
+// *** WARN firetray: TEST *gptr-gdkWin=0xa17bd18
+// *** WARN firetray:
+// TEST gptr-gdkw=ctypes.voidptr_t(ctypes.UInt64("0x9f5d168"))
+// *** WARN firetray: TEST *gptr-gdkw=0xabe8b00
+// *** WARN firetray: gtkw isGtkWin=0
+// *** WARN firetray: gtkw isGtkWid=1
+// *** WARN firetray: gtkwid_top=GtkWidget.ptr(ctypes.UInt64("0xa1d28e0"))
+// *** WARN firetray: gtkw isGtkWin=1
 // *** WARN firetray: OK
 
   try {
diff --git a/testing/xtypes.c b/testing/xtypes.c
index 8d71f0d..26e8841 100644
--- a/testing/xtypes.c
+++ b/testing/xtypes.c
@@ -5,6 +5,7 @@
 #include <X11/Xmd.h>
 
 int main(int argc, char **argv) {
+  printf("sizeof(void*)=%d\n",sizeof(void*));
   printf("sizeof(char)=%d\n",sizeof(char));
   printf("sizeof(int)=%d\n",sizeof(int));
   printf("sizeof(long)=%d\n",sizeof(long));

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-mozext/firetray.git



More information about the Pkg-mozext-commits mailing list