1
0
mirror of https://github.com/moparisthebest/FireTray synced 2024-11-16 05:45:01 -05:00

Revert "new version of LibGtkStatusIcon.js with XPCOMUtils.defineLazyGetter()"

This reverts commit d85edced00.

First, it'll be easier to merge with hide/show feature. Then we prefer to keep
2 examples of js-ctypes libs: we still aren't clear about when/how to call
lib.close()...
This commit is contained in:
foudfou 2011-08-03 15:48:56 +02:00
parent d85edced00
commit 890c4579c3
2 changed files with 57 additions and 66 deletions

View File

@ -23,14 +23,15 @@ mozt.Main = {
return false; return false;
} }
LibGtkStatusIcon.init();
this.tray_icon = LibGtkStatusIcon.gtk_status_icon_new(); this.tray_icon = LibGtkStatusIcon.gtk_status_icon_new();
var mozApp = mozt.Utils.appInfoService.name; var mozApp = mozt.Utils.appInfoService.name;
var icon_filename = MOZT_ICON_DIR + mozApp.toLowerCase() + MOZT_ICON_SUFFIX; var icon_filename = MOZT_ICON_DIR + mozApp.toLowerCase() + MOZT_ICON_SUFFIX;
LibGtkStatusIcon.gtk_status_icon_set_from_file(this.tray_icon, LibGtkStatusIcon.gtk_status_icon_set_from_file(this.tray_icon,
icon_filename); icon_filename);
// FIXME: hover on icno produces: // TODO: produces:
// (firefox-bin:5302): Gdk-CRITICAL **: IA__gdk_window_get_root_coords: // (firefox-bin:5302): Gdk-CRITICAL **: IA__gdk_window_get_root_coords: assertion `GDK_IS_WINDOW (window)' failed
// assertion `GDK_IS_WINDOW (window)' failed // (thunderbird-bin:5380): Gdk-CRITICAL **: IA__gdk_window_get_root_coords: assertion `GDK_IS_WINDOW (window)' failed
LibGtkStatusIcon.gtk_status_icon_set_tooltip_text(this.tray_icon, LibGtkStatusIcon.gtk_status_icon_set_tooltip_text(this.tray_icon,
mozApp); mozApp);

View File

@ -2,91 +2,81 @@
var EXPORTED_SYMBOLS = ["LibGtkStatusIcon"]; var EXPORTED_SYMBOLS = ["LibGtkStatusIcon"];
const LIB_GTK = "libgtk-x11-2.0.so";
const Cc = Components.classes; const Cc = Components.classes;
const Ci = Components.interfaces; const Ci = Components.interfaces;
const Cu = Components.utils; const Cu = Components.utils;
Cu.import("resource://gre/modules/ctypes.jsm"); const LIB_GTK = "libgtk-x11-2.0.so";
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
XPCOMUtils.defineLazyGetter(this, "libgtk", function() { var LibGtkStatusIcon = {
var libgtk = ctypes.open(LIB_GTK);
if (!libgtk)
throw "libgtk is unavailable";
return libgtk; _lib: null,
});
// Types init: function() {
XPCOMUtils.defineLazyGetter(this, "GtkStatusIcon", function() { // If ctypes doesn't exist, try to get it
return ctypes.StructType("GtkStatusIcon"); 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");
}
// Functions try {
XPCOMUtils.defineLazyGetter(this, "gtk_status_icon_new", function() { // Try to start up dependencies - if they fail, they'll throw
var gtk_status_icon_new = libgtk.declare( // exceptions. ex: GObjectLib.init();
"gtk_status_icon_new",
ctypes.default_abi,
this.GtkStatusIcon.ptr
);
if (!gtk_status_icon_new) this._lib = ctypes.open(LIB_GTK);
throw "gtk_status_icon_new is unavailable"; if (!this._lib)
throw ("Could not load " + LIB_GTK);
return gtk_status_icon_new; } catch (e) {
}); this.shutdown();
throw(e);
}
XPCOMUtils.defineLazyGetter(this, "gtk_status_icon_set_from_file", function() { // Ok, we got everything - let's declare.
var gtk_status_icon_set_from_file = libgtk.declare( this._declare();
},
shutdown: function() {
// Close our connection to the library.
if (this._lib)
this._lib.close();
},
_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);
// Consts
// this.INDICATOR_MESSAGES_SERVER_TYPE = "message";
// Functions
this.gtk_status_icon_new = this._lib.declare(
"gtk_status_icon_new",
ctypes.default_abi,
this.GtkStatusIconRef
);
this.gtk_status_icon_set_from_file = this._lib.declare(
"gtk_status_icon_set_from_file", "gtk_status_icon_set_from_file",
ctypes.default_abi, ctypes.default_abi,
ctypes.void_t, ctypes.void_t,
this.GtkStatusIcon.ptr, this.GtkStatusIconRef,
ctypes.char.ptr ctypes.char.ptr
); );
if (!gtk_status_icon_new) this.gtk_status_icon_set_tooltip_text = this._lib.declare(
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", "gtk_status_icon_set_tooltip_text",
ctypes.default_abi, ctypes.default_abi,
ctypes.void_t, ctypes.void_t,
this.GtkStatusIcon.ptr, this.GtkStatusIconRef,
ctypes.char.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,
}; };