[Pkg-mozext-commits] [firetray] 18/84: don't cache and update windows[wid].visible, windowsCount, visibleWindowsCount
David Prévot
taffit at moszumanska.debian.org
Sun Jul 20 01:42:42 UTC 2014
This is an automated email from the git hooks/post-receive script.
taffit pushed a commit to branch master
in repository firetray.
commit 705b0ffb59d6f916f79dcfa2719975e1fac16cf2
Author: foudfou <foudil.newbie+git at gmail.com>
Date: Thu Feb 6 00:17:28 2014 +0100
don't cache and update windows[wid].visible, windowsCount, visibleWindowsCount
Because the number of windows will generally be small, this is not worth the
effort.
---
src/chrome/content/overlay.xul | 2 +-
src/modules/FiretrayHandler.jsm | 41 ++++++++++++++++++++++----------
src/modules/FiretrayWindow.jsm | 12 ----------
src/modules/ctypes/linux/gtk.jsm | 1 +
src/modules/linux/FiretrayStatusIcon.jsm | 8 ++++++-
src/modules/linux/FiretrayWindow.jsm | 39 +++++++-----------------------
src/modules/winnt/FiretrayWindow.jsm | 37 +++++++---------------------
7 files changed, 56 insertions(+), 84 deletions(-)
diff --git a/src/chrome/content/overlay.xul b/src/chrome/content/overlay.xul
index b5ec2ad..3ffea10 100644
--- a/src/chrome/content/overlay.xul
+++ b/src/chrome/content/overlay.xul
@@ -2,7 +2,7 @@
<?xml-stylesheet href="chrome://firetray/skin/overlay.css" type="text/css"?>
<!DOCTYPE overlay SYSTEM "chrome://firetray/locale/overlay.dtd">
<overlay id="firetray-overlay" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
- <script type="application/javascript;version=1.7" src="overlay.js"/>
+ <script type="application/javascript;version=1.8" src="overlay.js"/>
<stringbundleset id="stringbundleset">
<stringbundle id="firetray-strings" src="chrome://firetray/locale/overlay.properties"/>
diff --git a/src/modules/FiretrayHandler.jsm b/src/modules/FiretrayHandler.jsm
index e89b7c0..e8424fa 100644
--- a/src/modules/FiretrayHandler.jsm
+++ b/src/modules/FiretrayHandler.jsm
@@ -1,4 +1,5 @@
/* -*- Mode: js2; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+"use strict";
var EXPORTED_SYMBOLS = [ "firetray" ];
@@ -36,13 +37,15 @@ firetray.Handler = {
inMailApp: false,
appHasChat: false,
appStarted: false,
- /* TODO: we should rewrite firetray.Handler[wid].visible,
- firetray.Handler.windowsCount, firetray.Handler.visibleWindowsCount as
- getters. They mainly serve as a cache for computing the visibilityRate but
- tend to be a bit heavy to handle. */
windows: {},
- windowsCount: 0,
- visibleWindowsCount: 0,
+ get windowsCount() {return Object.keys(this.windows).length;},
+ get visibleWindowsCount() {
+ let count = 0;
+ for (let wid in firetray.Handler.windows) {
+ if (firetray.Handler.windows[wid].visible) count += 1;
+ }
+ return count;
+ },
observedTopics: {},
ctypesLibs: {}, // {"lib1": lib1, "lib2": lib2}
@@ -69,17 +72,17 @@ firetray.Handler = {
switch (this.runtimeOS) {
case "Linux":
Cu.import("resource://firetray/linux/FiretrayStatusIcon.jsm");
- log.debug('FiretrayStatusIcon imported');
+ log.debug('FiretrayStatusIcon Linux imported');
Cu.import("resource://firetray/linux/FiretrayWindow.jsm");
- log.debug('FiretrayWindow imported');
+ log.debug('FiretrayWindow Linux imported');
break;
case "WINNT":
Cu.import("resource://firetray/winnt/FiretrayWin32.jsm");
log.debug('FiretrayWin32 imported');
Cu.import("resource://firetray/winnt/FiretrayStatusIcon.jsm");
- log.debug('FiretrayStatusIcon imported');
+ log.debug('FiretrayStatusIcon WINNT imported');
Cu.import("resource://firetray/winnt/FiretrayWindow.jsm");
- log.debug('FiretrayWindow imported');
+ log.debug('FiretrayWindow WINNT imported');
break;
default:
log.error("FIRETRAY: only Linux and WINNT platforms supported at this"
@@ -196,7 +199,7 @@ firetray.Handler = {
tryCloseLibs: function() {
try {
- for (libName in this.ctypesLibs) {
+ for (let libName in this.ctypesLibs) {
let lib = this.ctypesLibs[libName];
if (lib.available())
lib.close();
@@ -333,7 +336,6 @@ firetray.Handler = {
unregisterWindow: function(win) {},
hideWindow: function(winId) {},
showWindow: function(winId) {},
- showHideAllWindows: function() {},
activateLastWindowCb: function(gtkStatusIcon, gdkEvent, userData) {},
getActiveWindow: function() {},
@@ -352,6 +354,21 @@ firetray.Handler = {
}
},
+ showHideAllWindows: function() {
+ log.debug("showHideAllWindows");
+ log.debug(" visibleWindowsCount="+firetray.Handler.visibleWindowsCount +
+ " / windowsCount="+firetray.Handler.windowsCount);
+ let visibilityRate = firetray.Handler.visibleWindowsCount /
+ firetray.Handler.windowsCount;
+ log.debug(" visibilityRate="+visibilityRate);
+ if ((0.5 < visibilityRate) && (visibilityRate < 1)
+ || visibilityRate === 0) { // TODO: should be configurable
+ firetray.Handler.showAllWindows();
+ } else {
+ firetray.Handler.hideAllWindows();
+ }
+ },
+
showHideIcon: function() {
if (firetray.Utils.prefService.getBoolPref('show_icon_on_hide'))
firetray.Handler.setIconVisibility(
diff --git a/src/modules/FiretrayWindow.jsm b/src/modules/FiretrayWindow.jsm
index 4312267..cf8ce76 100644
--- a/src/modules/FiretrayWindow.jsm
+++ b/src/modules/FiretrayWindow.jsm
@@ -17,18 +17,6 @@ if ("undefined" == typeof(firetray.Handler))
function FiretrayWindow () {}
FiretrayWindow.prototype = {
- updateVisibility: function(winId, visibility) {
- let win = firetray.Handler.windows[winId];
- if (win.visible === visibility)
- log.warn("window (winId="+winId+") was already visible="+win.visible);
-
- firetray.Handler.visibleWindowsCount = visibility ?
- firetray.Handler.visibleWindowsCount + 1 :
- firetray.Handler.visibleWindowsCount - 1 ;
-
- win.visible = visibility; // nsIBaseWin.visibility always true :-(
- },
-
getRegisteredWinIdFromChromeWindow: function(win) {
for (let wid in firetray.Handler.windows)
if (firetray.Handler.windows[wid].chromeWin === win) return wid;
diff --git a/src/modules/ctypes/linux/gtk.jsm b/src/modules/ctypes/linux/gtk.jsm
index ea3f5f6..fc70953 100644
--- a/src/modules/ctypes/linux/gtk.jsm
+++ b/src/modules/ctypes/linux/gtk.jsm
@@ -145,6 +145,7 @@ function gtk_defines(lib) {
lib.lazy_bind("gtk_widget_is_focus", gobject.gboolean, this.GtkWidget.ptr);
lib.lazy_bind("gtk_widget_has_focus", gobject.gboolean, this.GtkWidget.ptr);
+ lib.lazy_bind("gtk_widget_get_visible", gobject.gboolean, this.GtkWidget.ptr);
lib.lazy_bind("gtk_widget_hide_on_delete", gobject.gboolean, this.GtkWidget.ptr);
lib.lazy_bind("gtk_widget_hide", ctypes.void_t, this.GtkWidget.ptr);
lib.lazy_bind("gtk_widget_show", ctypes.void_t, this.GtkWidget.ptr);
diff --git a/src/modules/linux/FiretrayStatusIcon.jsm b/src/modules/linux/FiretrayStatusIcon.jsm
index 78981bb..b29dffc 100644
--- a/src/modules/linux/FiretrayStatusIcon.jsm
+++ b/src/modules/linux/FiretrayStatusIcon.jsm
@@ -135,7 +135,7 @@ firetray.StatusIcon = {
log.debug("showHideAllWindows: "+firetray.Handler.hasOwnProperty("showHideAllWindows"));
this.callbacks.iconActivate = gtk.GCallbackStatusIconActivate_t(
- firetray.Handler.showHideAllWindows);
+ firetray.StatusIcon.onClick);
let handlerId = gobject.g_signal_connect(firetray.StatusIcon.trayIcon,
"activate", firetray.StatusIcon.callbacks.iconActivate, null);
log.debug("g_connect activate="+handlerId);
@@ -176,6 +176,12 @@ firetray.StatusIcon = {
}
},
+ onClick: function(gtkStatusIcon, userData) {
+ firetray.Handler.showHideAllWindows();
+ let stopPropagation = true;
+ return stopPropagation;
+ },
+
setIconImageFromFile: function(filename) {
if (!firetray.StatusIcon.trayIcon)
log.error("Icon missing");
diff --git a/src/modules/linux/FiretrayWindow.jsm b/src/modules/linux/FiretrayWindow.jsm
index 3ff7ec5..9a6fed4 100644
--- a/src/modules/linux/FiretrayWindow.jsm
+++ b/src/modules/linux/FiretrayWindow.jsm
@@ -219,8 +219,6 @@ firetray.Window.unregisterWindowByXID = function(xid) {
throw new DeleteError();
firetray.Handler.gtkWindows.remove(xid);
firetray.Handler.gdkWindows.remove(xid);
- firetray.Handler.windowsCount -= 1;
- firetray.Handler.visibleWindowsCount -= 1;
firetray.PopupMenu.removeWindowItem(xid);
@@ -357,6 +355,12 @@ firetray.Window.restoreDesktop = function(xid) {
delete firetray.Handler.windows[xid].savedDesktop;
};
+firetray.Window.getVisibility = function(xid) {
+ let gtkWidget = ctypes.cast(firetray.Handler.gtkWindows.get(xid), gtk.GtkWidget.ptr);
+ // nsIBaseWin.visibility always true
+ return gtk.gtk_widget_get_visible(gtkWidget);
+};
+
firetray.Window.setVisibility = function(xid, visibility) {
log.debug("setVisibility="+visibility);
let gtkWidget = ctypes.cast(firetray.Handler.gtkWindows.get(xid), gtk.GtkWidget.ptr);
@@ -364,10 +368,7 @@ firetray.Window.setVisibility = function(xid, visibility) {
gtk.gtk_widget_show_all(gtkWidget);
else
gtk.gtk_widget_hide(gtkWidget);
-
- this.updateVisibility(xid, visibility);
};
-// firetray.Window.updateVisibility inherited
firetray.Window.xSendClientMessgeEvent = function(xid, atom, data, dataSize) {
let xev = new x11.XClientMessageEvent;
@@ -544,7 +545,6 @@ firetray.Window.filterWindow = function(xev, gdkEv, data) {
// when app hidden at startup, then called from command line without
// any argument (not through FireTray that is)
log.warn("window not visible, correcting visibility");
- firetray.Window.updateVisibility(xid, true);
log.debug("visibleWindowsCount="+firetray.Handler.visibleWindowsCount);
}
break;
@@ -656,6 +656,9 @@ firetray.Handler.registerWindow = function(win) {
this.windows[xid] = {};
this.windows[xid].chromeWin = win;
this.windows[xid].baseWin = baseWin;
+ Object.defineProperties(this.windows[xid], {
+ "visible": { get: function(){return firetray.Window.getVisibility(xid);} }
+ });
firetray.Window.checkSubscribedEventMasks(xid);
try {
this.gtkWindows.insert(xid, gtkWin);
@@ -667,10 +670,6 @@ firetray.Handler.registerWindow = function(win) {
+" windows open. This breaks FireTray and most probably "
+firetray.Handler.appName+".");
}
- this.windowsCount += 1;
- // NOTE: no need to check for window state to set visibility because all
- // windows *are* shown at startup
- firetray.Window.updateVisibility(xid, true);
log.debug("window "+xid+" registered");
// NOTE: shouldn't be necessary to gtk_widget_add_events(gtkWin, gdk.GDK_ALL_EVENTS_MASK);
@@ -710,26 +709,6 @@ firetray.Handler.unregisterWindow = function(win) {
firetray.Handler.showWindow = firetray.Window.show;
firetray.Handler.hideWindow = firetray.Window.hide;
-firetray.Handler.showHideAllWindows = function(gtkStatusIcon, userData) {
- log.debug("showHideAllWindows: "+userData);
- // NOTE: showHideAllWindows being a callback, we need to use
- // 'firetray.Handler' explicitely instead of 'this'
-
- log.debug("visibleWindowsCount="+firetray.Handler.visibleWindowsCount);
- log.debug("windowsCount="+firetray.Handler.windowsCount);
- let visibilityRate = firetray.Handler.visibleWindowsCount/firetray.Handler.windowsCount;
- log.debug("visibilityRate="+visibilityRate);
- if ((0.5 < visibilityRate) && (visibilityRate < 1)
- || visibilityRate === 0) { // TODO: should be configurable
- firetray.Handler.showAllWindows();
- } else {
- firetray.Handler.hideAllWindows();
- }
-
- let stopPropagation = true;
- return stopPropagation;
-};
-
firetray.Handler.showAllWindowsAndActivate = firetray.Window.showAllWindowsAndActivate;
firetray.Handler.activateLastWindowCb = function(gtkStatusIcon, gdkEvent, userData) {
log.debug("activateLastWindowCb");
diff --git a/src/modules/winnt/FiretrayWindow.jsm b/src/modules/winnt/FiretrayWindow.jsm
index 723270d..4951016 100644
--- a/src/modules/winnt/FiretrayWindow.jsm
+++ b/src/modules/winnt/FiretrayWindow.jsm
@@ -39,22 +39,19 @@ firetray.Window.shutdown = function() {
this.initialized = false;
};
-firetray.Window.getVisibility = function(hwnd) {
+firetray.Window.getVisibility = function(wid) {
+ let hwnd = firetray.Win32.hexStrToHwnd(wid);
let style = user32.GetWindowLongW(hwnd, user32.GWL_STYLE);
- let visible = ((style & user32.WS_VISIBLE) != 0); // user32.IsWindowVisible(hwnd);
- log.debug("visible="+visible);
- return visible;
+ return ((style & user32.WS_VISIBLE) != 0); // user32.IsWindowVisible(hwnd);
};
-// firetray.Window.{show,hide} useless
+// firetray.Window.{show,hide} useless as we don't need to restore position and size
firetray.Window.setVisibility = function(wid, visible) {
log.debug("setVisibility="+visible);
let hwnd = firetray.Win32.hexStrToHwnd(wid);
let ret = user32.ShowWindow(hwnd, visible ? user32.SW_SHOW : user32.SW_HIDE);
log.debug(" ShowWindow="+ret+" winLastError="+ctypes.winLastError);
- this.updateVisibility(wid, visible);
};
-// firetray.Window.updateVisibility inherited
firetray.Window.wndProc = function(hWnd, uMsg, wParam, lParam) { // filterWindow
// log.debug("wndProc CALLED: hWnd="+hWnd+", uMsg="+uMsg+", wParam="+wParam+", lParam="+lParam);
@@ -120,14 +117,15 @@ firetray.Handler.registerWindow = function(win) {
this.windows[wid] = {};
this.windows[wid].chromeWin = win;
this.windows[wid].baseWin = baseWin;
+ Object.defineProperties(this.windows[wid], {
+ "visible": { get: function(){return firetray.Window.getVisibility(wid);} }
+ });
+
+ log.debug("window "+wid+" registered");
// SetupWnd(hwnd);
try {
- this.windowsCount += 1;
- firetray.Window.updateVisibility(wid, true); // windows *are* visible at startup
- log.debug("window "+wid+" registered");
-
let wndProc = user32.WNDPROC(firetray.Window.wndProc);
log.debug("proc="+wndProc);
this.wndProcs.insert(wid, wndProc);
@@ -167,8 +165,6 @@ firetray.Handler.unregisterWindow = function(win) {
if (!delete firetray.Handler.windows[wid])
throw new DeleteError();
- firetray.Handler.windowsCount -= 1;
- firetray.Handler.visibleWindowsCount -= 1;
log.debug("window "+wid+" unregistered");
return true;
@@ -180,18 +176,3 @@ firetray.Handler.showWindow = function(wid) {
firetray.Handler.hideWindow = function(wid) {
return firetray.Window.setVisibility(wid, false);
};
-
-firetray.Handler.showHideAllWindows = function() {
- log.debug("showHideAllWindows");
-
- log.debug(" visibleWindowsCount="+firetray.Handler.visibleWindowsCount);
- log.debug(" windowsCount="+firetray.Handler.windowsCount);
- let visibilityRate = firetray.Handler.visibleWindowsCount/firetray.Handler.windowsCount;
- log.debug(" visibilityRate="+visibilityRate);
- if ((0.5 < visibilityRate) && (visibilityRate < 1)
- || visibilityRate === 0) { // TODO: should be configurable
- firetray.Handler.showAllWindows();
- } else {
- firetray.Handler.hideAllWindows();
- }
-};
--
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