[Pkg-mozext-commits] [firetray] 13/399: new version of LibGtkStatusIcon.js with XPCOMUtils.defineLazyGetter()

David Prévot taffit at alioth.debian.org
Tue Oct 29 18:23:05 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 d85edced00fd09b71500cd33978b3cc28fe4ac6a
Author: foudfou <foudil.newbie+git at gmail.com>
Date:   Mon Jul 11 18:59:12 2011 +0200

    new version of LibGtkStatusIcon.js with XPCOMUtils.defineLazyGetter()
---
 src/chrome/content/overlay.js   |    7 +--
 src/modules/LibGtkStatusIcon.js |  116 +++++++++++++++++++++------------------
 2 files changed, 66 insertions(+), 57 deletions(-)

diff --git a/src/chrome/content/overlay.js b/src/chrome/content/overlay.js
index a58b7a1..c2baeba 100644
--- a/src/chrome/content/overlay.js
+++ b/src/chrome/content/overlay.js
@@ -23,15 +23,14 @@ mozt.Main = {
       return false;
     }
 
-    LibGtkStatusIcon.init();
     this.tray_icon  = LibGtkStatusIcon.gtk_status_icon_new();
     var mozApp = mozt.Utils.appInfoService.name;
     var icon_filename = MOZT_ICON_DIR + mozApp.toLowerCase() + MOZT_ICON_SUFFIX;
     LibGtkStatusIcon.gtk_status_icon_set_from_file(this.tray_icon,
                                                    icon_filename);
-    // TODO: produces:
-    // (firefox-bin:5302): Gdk-CRITICAL **: IA__gdk_window_get_root_coords: assertion `GDK_IS_WINDOW (window)' failed
-    // (thunderbird-bin:5380): Gdk-CRITICAL **: IA__gdk_window_get_root_coords: assertion `GDK_IS_WINDOW (window)' failed
+    // FIXME: hover on icno produces:
+    // (firefox-bin:5302): Gdk-CRITICAL **: IA__gdk_window_get_root_coords:
+    // assertion `GDK_IS_WINDOW (window)' failed
     LibGtkStatusIcon.gtk_status_icon_set_tooltip_text(this.tray_icon,
                                                       mozApp);
 
diff --git a/src/modules/LibGtkStatusIcon.js b/src/modules/LibGtkStatusIcon.js
index 6e0c74d..d64a1e8 100644
--- a/src/modules/LibGtkStatusIcon.js
+++ b/src/modules/LibGtkStatusIcon.js
@@ -2,81 +2,91 @@
 
 var EXPORTED_SYMBOLS = ["LibGtkStatusIcon"];
 
+const LIB_GTK = "libgtk-x11-2.0.so";
+
 const Cc = Components.classes;
 const Ci = Components.interfaces;
 const Cu = Components.utils;
 
-const LIB_GTK = "libgtk-x11-2.0.so";
-
-var LibGtkStatusIcon = {
-
-  _lib: null,
+Cu.import("resource://gre/modules/ctypes.jsm");
+Cu.import("resource://gre/modules/XPCOMUtils.jsm");
 
-  init: function() {
-    // If ctypes doesn't exist, try to get it
-    Cu.import("resource://gre/modules/ctypes.jsm");
-      // If we still don't have ctypes, this isn't going to work...
-    if (typeof(ctypes) == "undefined") {
-      throw ("Could not load JS-Ctypes");
-    }
+XPCOMUtils.defineLazyGetter(this, "libgtk", function() {
+  var libgtk = ctypes.open(LIB_GTK);
+  if (!libgtk)
+    throw "libgtk is unavailable";
 
-    try {
-      // Try to start up dependencies - if they fail, they'll throw
-      // exceptions. ex: GObjectLib.init();
-
-      this._lib = ctypes.open(LIB_GTK);
-      if (!this._lib)
-        throw ("Could not load " + LIB_GTK);
-
-    } catch (e) {
-      this.shutdown();
-      throw(e);
-    }
-
-    // Ok, we got everything - let's declare.
-    this._declare();
-  },
-
-  shutdown: function() {
-    // Close our connection to the library.
-    if (this._lib)
-      this._lib.close();
-  },
+  return libgtk;
+});
 
-  _declare: function() {
-    // Types
-    this.GtkStatusIcon = ctypes.StructType("GtkStatusIcon");
-    this.GtkStatusIconRef = ctypes.PointerType(this.GtkStatusIcon);
-    this.GdkPixbuf = ctypes.StructType("GdkPixbuf");
-    this.GdkPixbufRef = ctypes.PointerType(this.GdkPixbuf);
+// Types
+XPCOMUtils.defineLazyGetter(this, "GtkStatusIcon", function() {
+  return ctypes.StructType("GtkStatusIcon");
+});
 
-    // Consts
-    // this.INDICATOR_MESSAGES_SERVER_TYPE = "message";
+// Functions
+XPCOMUtils.defineLazyGetter(this, "gtk_status_icon_new", function() {
+  var gtk_status_icon_new = libgtk.declare(
+    "gtk_status_icon_new",
+    ctypes.default_abi,
+    this.GtkStatusIcon.ptr
+  );
 
-    // Functions
+  if (!gtk_status_icon_new)
+    throw "gtk_status_icon_new is unavailable";
 
-    this.gtk_status_icon_new = this._lib.declare(
-      "gtk_status_icon_new",
-      ctypes.default_abi,
-      this.GtkStatusIconRef
-    );
+  return gtk_status_icon_new;
+});
 
-    this.gtk_status_icon_set_from_file = this._lib.declare(
+XPCOMUtils.defineLazyGetter(this, "gtk_status_icon_set_from_file", function() {
+    var gtk_status_icon_set_from_file = libgtk.declare(
       "gtk_status_icon_set_from_file",
       ctypes.default_abi,
       ctypes.void_t,
-      this.GtkStatusIconRef,
+      this.GtkStatusIcon.ptr,
       ctypes.char.ptr
     );
 
-    this.gtk_status_icon_set_tooltip_text = this._lib.declare(
+  if (!gtk_status_icon_new)
+    throw "gtk_status_icon_set_from_file is unavailable";
+
+  return gtk_status_icon_set_from_file;
+});
+
+XPCOMUtils.defineLazyGetter(this, "gtk_status_icon_set_tooltip_text", function() {
+    var gtk_status_icon_set_tooltip_text = libgtk.declare(
       "gtk_status_icon_set_tooltip_text",
       ctypes.default_abi,
       ctypes.void_t,
-      this.GtkStatusIconRef,
+      this.GtkStatusIcon.ptr,
       ctypes.char.ptr
     );
 
-  }
+  if (!gtk_status_icon_set_tooltip_text)
+    throw "gtk_status_icon_set_tooltip_text is unavailable";
+
+  return gtk_status_icon_set_tooltip_text;
+});
+
+var LibGtkStatusIcon = {
+  /*
+   * FIXME: for now, we manually close the lib, but m_conley said: well, the
+   * first idea that comes to mind is to add an "unload" or "shutdown" function
+   * to the main MessagingMenu object that listens for an xpcom shutdown event,
+   * and then unloads the library
+   */
+  shutdown: function() {
+    if (libgtk) libgtk.close();
+  },
+
+  // Types
+  GtkStatusIcon: GtkStatusIcon,
+
+  // Constants
+  // INDICATOR_MESSAGES_SERVER_TYPE: "message",
 
+  // Functions
+  gtk_status_icon_new: gtk_status_icon_new,
+  gtk_status_icon_set_from_file: gtk_status_icon_set_from_file,
+  gtk_status_icon_set_tooltip_text: gtk_status_icon_set_tooltip_text,
 };

-- 
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