mirror of
https://github.com/moparisthebest/FireTray
synced 2024-08-13 15:53:47 -04:00
* add unregisterWindow()
* cleaning
This commit is contained in:
parent
88bf1451e0
commit
79e043e9a4
@ -54,10 +54,13 @@ firetray.Main = {
|
||||
// Remove observer
|
||||
let that = this;
|
||||
firetray.Utils.prefService.removeObserver("", that);
|
||||
LOG('Firetray UNLOADED !');
|
||||
|
||||
firetray.Handler.unregisterWindow(window);
|
||||
|
||||
/* NOTE: don't firetray.Handler.initialized=false here, otherwise after a
|
||||
window close, a new window will create a new handler (and hence, a new
|
||||
tray icon) */
|
||||
LOG('Firetray UNLOADED !');
|
||||
},
|
||||
|
||||
/* GTK TEST
|
||||
|
@ -46,11 +46,6 @@ firetray.Handler = {
|
||||
this.FILENAME_NEWMAIL = firetray.Utils.chromeToPath(
|
||||
"chrome://firetray/skin/message-mail-new.png");
|
||||
|
||||
/* GTK TEST
|
||||
// init all handled windows
|
||||
this._updateHandledDOMWindows();
|
||||
*/
|
||||
|
||||
// OS/platform checks
|
||||
this.runtimeABI = Services.appinfo.XPCOMABI;
|
||||
this.runtimeOS = Services.appinfo.OS; // "WINNT", "Linux", "Darwin"
|
||||
|
@ -43,25 +43,19 @@ var _find_data_t = ctypes.StructType("_find_data_t", [
|
||||
|
||||
|
||||
firetray.Handler.registerWindow = function(win) {
|
||||
LOG("register window");
|
||||
let that = this;
|
||||
|
||||
/* GTK TEST. */
|
||||
// register
|
||||
let [gtkWin, gdkWin, xid] = firetray.Window.getWindowsFromChromeWindow(win);
|
||||
/* NOTE: it should not be necessary to gtk_widget_add_events(gtkWin,
|
||||
gdk.GDK_ALL_EVENTS_MASK); */
|
||||
this.windows[xid] = {}; // windows.hasOwnProperty(xid) is true, remove with: delete windows[xid]
|
||||
this.windows[xid].gtkWin = gtkWin;
|
||||
this.windows[xid].gdkWin = gdkWin;
|
||||
|
||||
try {
|
||||
|
||||
let gtkWin = firetray.Window.getGtkWindowHandle(win);
|
||||
LOG("gtkWin="+gtkWin);
|
||||
let gdkWin = gtk.gtk_widget_get_window(ctypes.cast(gtkWin, gtk.GtkWidget.ptr));
|
||||
LOG("gdkWin="+gdkWin);
|
||||
/* NOTE: it should not be necessary to gtk_widget_add_events(gtkWin,
|
||||
gdk.GDK_ALL_EVENTS_MASK); */
|
||||
|
||||
// register
|
||||
let xid = gdk.gdk_x11_drawable_get_xid(ctypes.cast(gdkWin, gdk.GdkDrawable.ptr));
|
||||
LOG("XID="+xid);
|
||||
this.windows[xid] = {}; // windows.hasOwnProperty(xid) is true, remove with: delete windows[xid]
|
||||
this.windows[xid].gtkWin = gtkWin;
|
||||
this.windows[xid].gdkWin = gdkWin;
|
||||
|
||||
/* delete_event_cb (in gtk2/nsWindow.cpp) prevents us from catching
|
||||
"delete-event" */
|
||||
let deleteEventId = gobject.g_signal_lookup("delete-event", gtk.gtk_window_get_type());
|
||||
@ -82,6 +76,7 @@ firetray.Handler.registerWindow = function(win) {
|
||||
LOG("g_connect window-state-event="+res);
|
||||
|
||||
} catch (x) {
|
||||
this._unregisterWindowByXID(xid);
|
||||
ERROR(x);
|
||||
return false;
|
||||
}
|
||||
@ -89,7 +84,22 @@ firetray.Handler.registerWindow = function(win) {
|
||||
return true;
|
||||
};
|
||||
|
||||
firetray.Handler.unregisterWindow = function(win) {};
|
||||
firetray.Handler.unregisterWindow = function(win) {
|
||||
LOG("unregister window");
|
||||
|
||||
let [gtkWin, gdkWin, xid] = firetray.Window.getWindowsFromChromeWindow(win);
|
||||
return this._unregisterWindowByXID(xid);
|
||||
};
|
||||
|
||||
firetray.Handler._unregisterWindowByXID = function(xid) {
|
||||
if (this.windows.hasOwnProperty(xid))
|
||||
delete this.windows[xid];
|
||||
else {
|
||||
ERROR("can't unregister unknown window "+xid);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
};
|
||||
|
||||
firetray.Handler.showHideToTray = function(gtkStatusIcon, userData) {
|
||||
LOG("showHideToTray: "+userData);
|
||||
@ -181,32 +191,30 @@ firetray.Window = {
|
||||
}
|
||||
},
|
||||
|
||||
// FIXME: it may not be worth wrapping gtk_widget_get_window...
|
||||
getGdkWindowFromGtkWindow: function(gtkWin) {
|
||||
try {
|
||||
let gtkWid = ctypes.cast(gtkWin, gtk.GtkWidget.ptr);
|
||||
var gdkWin = gtk.gtk_widget_get_window(gtkWid);
|
||||
} catch (x) {
|
||||
ERROR(x);
|
||||
}
|
||||
return gdkWin;
|
||||
},
|
||||
|
||||
getGdkWindowHandle: function(win) {
|
||||
try {
|
||||
let gtkWin = firetray.Window.getGtkWindowHandle(win);
|
||||
LOG("FOUND: "+gtk.gtk_window_get_title(gtkWin).readString());
|
||||
let gdkWin = this.getGdkWindowFromGtkWindow(gtkWin);
|
||||
if (!gdkWin.isNull()) {
|
||||
LOG("has window");
|
||||
return gdkWin;
|
||||
}
|
||||
return gtk.gtk_widget_get_window(gtkWid);
|
||||
} catch (x) {
|
||||
ERROR(x);
|
||||
}
|
||||
return null;
|
||||
},
|
||||
|
||||
getXIDFromGdkWindow: function(gdkWin) {
|
||||
return gdk.gdk_x11_drawable_get_xid(ctypes.cast(gdkWin, gdk.GdkDrawable.ptr));
|
||||
},
|
||||
|
||||
getWindowsFromChromeWindow: function(win) {
|
||||
let gtkWin = firetray.Window.getGtkWindowHandle(win);
|
||||
LOG("gtkWin="+gtkWin);
|
||||
let gdkWin = firetray.Window.getGdkWindowFromGtkWindow(gtkWin);
|
||||
LOG("gdkWin="+gdkWin);
|
||||
let xid = firetray.Window.getXIDFromGdkWindow(gdkWin);
|
||||
LOG("XID="+xid);
|
||||
return [gtkWin, gdkWin, xid];
|
||||
},
|
||||
|
||||
windowDelete: function(gtkWidget, gdkEv, userData){
|
||||
LOG("gtk_widget_hide: "+gtkWidget+", "+gdkEv+", "+userData);
|
||||
try{
|
||||
|
Loading…
Reference in New Issue
Block a user