[Pkg-mozext-commits] [firetray] 46/84: Add popup menu items for hidden windows.

David Prévot taffit at moszumanska.debian.org
Sun Jul 20 01:42:45 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 74ac8d54d787bc3681850c7ca28301cd04946d95
Author: foudfou <foudil.newbie+git at gmail.com>
Date:   Sat Apr 5 17:10:55 2014 +0200

    Add popup menu items for hidden windows.
    
    Still need to handle 'hides_single_window' switching.
---
 src/modules/FiretrayHandler.jsm              |  3 ++
 src/modules/FiretrayWindow.jsm               | 16 +++++++++
 src/modules/ctypes/winnt/user32.jsm          |  3 ++
 src/modules/linux/FiretrayChatStatusIcon.jsm |  1 -
 src/modules/linux/FiretrayPopupMenu.jsm      |  6 ++--
 src/modules/linux/FiretrayWindow.jsm         | 16 ---------
 src/modules/winnt/FiretrayPopupMenu.jsm      | 54 +++++++++++++++++++++++++---
 src/modules/winnt/FiretrayWindow.jsm         |  2 ++
 8 files changed, 76 insertions(+), 25 deletions(-)

diff --git a/src/modules/FiretrayHandler.jsm b/src/modules/FiretrayHandler.jsm
index 107f8cf..88c4541 100644
--- a/src/modules/FiretrayHandler.jsm
+++ b/src/modules/FiretrayHandler.jsm
@@ -340,6 +340,9 @@ firetray.Handler = {
   activateLastWindowCb: function(gtkStatusIcon, gdkEvent, userData) {},
   getActiveWindow: function() {},
   windowGetAttention: function(winId) {},
+  showHidePopupMenuItems: function() {}, // linux
+  addPopupWindowItemAndSeparatorMaybe: function(wid) {}, // winnt
+  removePopupWindowItemAndSeparatorMaybe: function(wid) {}, // winnt
 
   showAllWindows: function() {
     log.debug("showAllWindows");
diff --git a/src/modules/FiretrayWindow.jsm b/src/modules/FiretrayWindow.jsm
index cf8ce76..2b7aaaa 100644
--- a/src/modules/FiretrayWindow.jsm
+++ b/src/modules/FiretrayWindow.jsm
@@ -24,4 +24,20 @@ FiretrayWindow.prototype = {
     return null;
   },
 
+  getWindowTitle: function(wid) {
+    let title = firetray.Handler.windows[wid].baseWin.title;
+    log.debug("|baseWin.title="+title+"|");
+    let tailIndex;
+    tailIndex = title.indexOf(" - Mozilla "+firetray.Handler.appName);
+    if (tailIndex === -1)
+      tailIndex = title.indexOf(" - "+firetray.Handler.appName);
+
+    if (tailIndex !== -1)
+      return title.substring(0, tailIndex);
+    else if (title === "Mozilla "+firetray.Handler.appName)
+      return title;
+    else
+      return null;
+  }
+
 };
diff --git a/src/modules/ctypes/winnt/user32.jsm b/src/modules/ctypes/winnt/user32.jsm
index c1fb5a8..8f4c783 100644
--- a/src/modules/ctypes/winnt/user32.jsm
+++ b/src/modules/ctypes/winnt/user32.jsm
@@ -299,6 +299,7 @@ function user32_defines(lib) {
   this.MIIM_FTYPE      = 0x00000100;
 
   lib.lazy_bind("InsertMenuW", win32.BOOL, win32.HMENU, win32.UINT, win32.UINT, win32.UINT_PTR, win32.LPCTSTR);
+  lib.lazy_bind("DeleteMenu", win32.BOOL, win32.HMENU, win32.UINT, win32.UINT);
 
   this.MF_INSERT          = 0x00000000;
   this.MF_CHANGE          = 0x00000080;
@@ -353,6 +354,8 @@ function user32_defines(lib) {
   this.TPM_HORIZONTAL   = 0x0000;
   this.TPM_VERTICAL     = 0x0040;
 
+  lib.lazy_bind("GetMenuItemCount", ctypes.int, win32.HMENU);
+
   lib.lazy_bind("CalculatePopupWindowPosition", win32.BOOL, win32.POINT.ptr, win32.SIZE, win32.UINT, win32.RECT.ptr, win32.RECT.ptr);
   lib.lazy_bind("TrackPopupMenu", win32.BOOL, win32.HMENU, win32.UINT, ctypes.int, ctypes.int, ctypes.int, win32.HWND, win32.RECT.ptr);
   lib.lazy_bind("SetForegroundWindow", win32.BOOL, win32.HWND);
diff --git a/src/modules/linux/FiretrayChatStatusIcon.jsm b/src/modules/linux/FiretrayChatStatusIcon.jsm
index 1c4358a..0e98ab4 100644
--- a/src/modules/linux/FiretrayChatStatusIcon.jsm
+++ b/src/modules/linux/FiretrayChatStatusIcon.jsm
@@ -204,7 +204,6 @@ firetray.ChatStatusIcon = {
           { notify: firetray.ChatStatusIcon.fadeStep },
           ALPHA_STEP_SLEEP_MILLISECONDS, Ci.nsITimer.TYPE_ONE_SHOT);
 
-
     } catch (e if e instanceof StopIteration) {
 
       if (firetray.ChatStatusIcon.events['stop-fade']) {
diff --git a/src/modules/linux/FiretrayPopupMenu.jsm b/src/modules/linux/FiretrayPopupMenu.jsm
index 36a481a..79da00f 100644
--- a/src/modules/linux/FiretrayPopupMenu.jsm
+++ b/src/modules/linux/FiretrayPopupMenu.jsm
@@ -172,8 +172,7 @@ firetray.PopupMenu = {
   },
 
   hideWindowItemAndSeparatorMaybe: function(xid) {
-    if (!this.windowItemsHandled())
-      return;
+    if (!this.windowItemsHandled()) return;
 
     this.hideWindowItem(xid);
     if (firetray.Handler.visibleWindowsCount === firetray.Handler.windowsCount)
@@ -212,4 +211,5 @@ firetray.PopupMenu = {
 
 }; // firetray.PopupMenu
 
-firetray.Handler.showHidePopupMenuItems = firetray.PopupMenu.showHideWindowItems;
+firetray.Handler.showHidePopupMenuItems =
+  firetray.PopupMenu.showHideWindowItems.bind(firetray.PopupMenu);
diff --git a/src/modules/linux/FiretrayWindow.jsm b/src/modules/linux/FiretrayWindow.jsm
index 577114d..040c9f0 100644
--- a/src/modules/linux/FiretrayWindow.jsm
+++ b/src/modules/linux/FiretrayWindow.jsm
@@ -498,22 +498,6 @@ firetray.Window.getXWindowDesktop = function(xwin) {
   return desktop;
 };
 
-firetray.Window.getWindowTitle = function(xid) {
-  let title = firetray.Handler.windows[xid].baseWin.title;
-  log.debug("|baseWin.title="+title+"|");
-  let tailIndex;
-  tailIndex = title.indexOf(" - Mozilla "+firetray.Handler.appName);
-  if (tailIndex === -1)
-    tailIndex = title.indexOf(" - "+firetray.Handler.appName);
-
-  if (tailIndex !== -1)
-    return title.substring(0, tailIndex);
-  else if (title === "Mozilla "+firetray.Handler.appName)
-    return title;
-  else
-    return null;
-};
-
 firetray.Window.checkSubscribedEventMasks = function(xid) {
   let xWindowAttributes = new x11.XWindowAttributes;
   let status = x11.XGetWindowAttributes(x11.current.Display, xid, xWindowAttributes.address());
diff --git a/src/modules/winnt/FiretrayPopupMenu.jsm b/src/modules/winnt/FiretrayPopupMenu.jsm
index 8a93a2d..0b49b48 100644
--- a/src/modules/winnt/FiretrayPopupMenu.jsm
+++ b/src/modules/winnt/FiretrayPopupMenu.jsm
@@ -46,23 +46,23 @@ firetray.PopupMenu = {
   },
 
   create: function() {
-    this.menu = user32.CreatePopupMenu(); // FIXME: destroy
+    this.menu = user32.CreatePopupMenu();
     log.debug("menu="+this.menu);
 
     this.insertMenuItem('Quit', 'quit', IDM_QUIT);
-    user32.InsertMenuW(this.menu, 0, user32.MF_BYPOSITION|user32.MF_SEPARATOR, 0, null);
+    this.insertSeparator();
     this.insertMenuItem('Preferences', 'prefs', IDM_PREF);
 
     let menuSeparatorAdded = false;
     if (firetray.Handler.inBrowserApp) {
-      user32.InsertMenuW(this.menu, 0, user32.MF_BYPOSITION|user32.MF_SEPARATOR, 0, null);
+      this.insertSeparator();
       menuSeparatorAdded = true;
       this.insertMenuItem('NewWindow', 'new-wnd', IDM_NEW_WND);
     }
 
     if (firetray.Handler.inMailApp) {
       if (!menuSeparatorAdded) {
-        user32.InsertMenuW(this.menu, 0, user32.MF_BYPOSITION|user32.MF_SEPARATOR, 0, null);
+        this.insertSeparator();
       }
       this.insertMenuItem('NewMessage', 'new-msg', IDM_NEW_MSG);
       this.insertMenuItem('ResetIcon', 'reset', IDM_RESET);
@@ -99,7 +99,48 @@ firetray.PopupMenu = {
     }
   },
 
+  insertSeparator: function() {
+    user32.InsertMenuW(this.menu, 0, user32.MF_BYPOSITION|user32.MF_SEPARATOR,
+                       0, null);
+  },
+
+  // FIXME: need to handle hides_single_window=false
+  addWindowItemAndSeparatorMaybe: function(wid) {
+    if (firetray.Handler.visibleWindowsCount === firetray.Handler.windowsCount)
+      this.insertSeparator();
+    this.addWindowItem(wid);
+  },
+  removeWindowItemAndSeparatorMaybe: function(wid) {
+    this.removeWindowItem(wid);
+    if (firetray.Handler.visibleWindowsCount === firetray.Handler.windowsCount - 1)
+      user32.DeleteMenu(this.menu, 0, user32.MF_BYPOSITION);
+  },
+
+  addWindowItem: function(wid) {
+    let title = firetray.Window.getWindowTitle(wid);
+    let mii = new user32.MENUITEMINFOW();
+    mii.cbSize = user32.MENUITEMINFOW.size;
+    mii.fMask = user32.MIIM_ID | user32.MIIM_STRING | user32.MIIM_DATA;
+    mii.wID = ctypes.UInt64(wid);
+    mii.dwTypeData = win32._T(title);
+    if (!user32.InsertMenuItemW(this.menu, 0, true, mii.address())) {
+      log.error("InsertMenuItemW failed winLastError="+ctypes.winLastError);
+    }
+  },
+  removeWindowItem: function(wid) {
+    let itemId = ctypes.UInt64(wid);
+    if (!user32.DeleteMenu(this.menu, itemId, user32.MF_BYCOMMAND)) {
+      log.error("DeleteMenu failed winLastError="+ctypes.winLastError);
+    }
+  },
+
   processMenuItem: function(itemId) {
+    let wid = firetray.Win32.hwndToHexStr(win32.HWND(itemId));
+    if (firetray.Handler.windows[wid]) {
+      firetray.Handler.showWindow(wid);
+      return;
+    }
+
     switch (itemId) {
     case IDM_PREF: firetray.Handler.openPrefWindow(); break;
     case IDM_QUIT: firetray.Handler.quitApplication(); break;
@@ -113,4 +154,7 @@ firetray.PopupMenu = {
 
 }; // firetray.PopupMenu
 
-firetray.Handler.showHidePopupMenuItems = firetray.PopupMenu.showHideWindowItems;
+firetray.Handler.addPopupMenuWindowItemAndSeparatorMaybe =
+  firetray.PopupMenu.addWindowItemAndSeparatorMaybe.bind(firetray.PopupMenu);
+firetray.Handler.removePopupMenuWindowItemAndSeparatorMaybe =
+  firetray.PopupMenu.removeWindowItemAndSeparatorMaybe.bind(firetray.PopupMenu);
diff --git a/src/modules/winnt/FiretrayWindow.jsm b/src/modules/winnt/FiretrayWindow.jsm
index eed2bd1..7750dab 100644
--- a/src/modules/winnt/FiretrayWindow.jsm
+++ b/src/modules/winnt/FiretrayWindow.jsm
@@ -201,9 +201,11 @@ firetray.Handler.unregisterWindow = function(win) {
 };
 
 firetray.Handler.showWindow = function(wid) {
+  firetray.Handler.removePopupMenuWindowItemAndSeparatorMaybe(wid);
   return firetray.Window.setVisibility(wid, true);
 };
 firetray.Handler.hideWindow = function(wid) {
+  firetray.Handler.addPopupMenuWindowItemAndSeparatorMaybe(wid);
   return firetray.Window.setVisibility(wid, false);
 };
 

-- 
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