[Pkg-mozext-commits] [firetray] 118/399: * add unregisterWindow() * cleaning
David Prévot
taffit at alioth.debian.org
Tue Oct 29 18:23:25 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 79e043e9a4de33eee0abc03274b014a1043f1080
Author: foudfou <foudil.newbie+git at gmail.com>
Date: Sun Dec 18 19:39:56 2011 +0100
* add unregisterWindow()
* cleaning
---
src/chrome/content/overlay.js | 5 ++-
src/modules/FiretrayHandler.jsm | 5 ---
src/modules/gtk2/FiretrayWindow.jsm | 72 +++++++++++++++++++----------------
3 files changed, 44 insertions(+), 38 deletions(-)
diff --git a/src/chrome/content/overlay.js b/src/chrome/content/overlay.js
index 8210a58..88d4c3f 100644
--- a/src/chrome/content/overlay.js
+++ b/src/chrome/content/overlay.js
@@ -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
diff --git a/src/modules/FiretrayHandler.jsm b/src/modules/FiretrayHandler.jsm
index ad6b705..d09e234 100644
--- a/src/modules/FiretrayHandler.jsm
+++ b/src/modules/FiretrayHandler.jsm
@@ -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"
diff --git a/src/modules/gtk2/FiretrayWindow.jsm b/src/modules/gtk2/FiretrayWindow.jsm
index 9a72d6b..58017b1 100644
--- a/src/modules/gtk2/FiretrayWindow.jsm
+++ b/src/modules/gtk2/FiretrayWindow.jsm
@@ -43,24 +43,18 @@ var _find_data_t = ctypes.StructType("_find_data_t", [
firetray.Handler.registerWindow = function(win) {
+ LOG("register window");
let that = this;
- /* GTK TEST. */
- try {
+ // 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;
- 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;
+ try {
/* delete_event_cb (in gtk2/nsWindow.cpp) prevents us from catching
"delete-event" */
@@ -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,30 +191,28 @@ 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);
+ return gtk.gtk_widget_get_window(gtkWid);
} catch (x) {
ERROR(x);
}
- return gdkWin;
+ return null;
},
- 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;
- }
- } 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){
--
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