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:
parent
d85edced00
commit
890c4579c3
@ -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);
|
||||||
|
|
||||||
|
@ -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,
|
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user