[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