[Pkg-mozext-commits] [firetray] 163/399: add option to activate windows when showing

David Prévot taffit at alioth.debian.org
Tue Oct 29 18:23:35 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 616025d5deeb09af04e0b34d28e022685adc19fd
Author: foudfou <foudil.newbie+git at gmail.com>
Date:   Sat Feb 4 01:15:36 2012 +0100

    add option to activate windows when showing
    
    This is the closest behaviour to "raise on top", because most window managers
    do not honor XRaiseWindow()/gtd_window_raise().
    http://sourceforge.net/tracker/?func=detail&aid=3020907&group_id=35398&atid=413960
---
 src/chrome/content/options.xul      |   10 ++++-----
 src/chrome/locale/en-US/options.dtd |    6 +++---
 src/defaults/preferences/prefs.js   |    2 +-
 src/modules/ctypes/gdk.jsm          |    1 -
 src/modules/ctypes/x11.jsm          |    9 ++++++--
 src/modules/gtk2/FiretrayWindow.jsm |   39 ++++++++++++++++++++++++++---------
 6 files changed, 45 insertions(+), 22 deletions(-)

diff --git a/src/chrome/content/options.xul b/src/chrome/content/options.xul
index 0065e4c..d068558 100644
--- a/src/chrome/content/options.xul
+++ b/src/chrome/content/options.xul
@@ -23,7 +23,7 @@
       <preference id="pref_bool_hides_on_minimize" name="extensions.firetray.hides_on_minimize" type="bool"/>
       <preference id="pref_bool_hides_single_window" name="extensions.firetray.hides_single_window" type="bool"/>
       <preference id="pref_bool_start_hidden" name="extensions.firetray.start_hidden" type="bool"/>
-      <preference id="pref_bool_show_raised" name="extensions.firetray.show_raised" type="bool"/>
+      <preference id="pref_bool_show_activates" name="extensions.firetray.show_activates" type="bool"/>
       <preference id="pref_bool_show_icon_on_hide" name="extensions.firetray.show_icon_on_hide" type="bool"/>
       <preference id="pref_bool_scroll_hides" name="extensions.firetray.scroll_hides" type="bool" />
       <preference id="pref_string_scroll_mode" name="extensions.firetray.scroll_mode" type="string" />
@@ -59,10 +59,10 @@
             <checkbox id="ui_start_hidden" preference="pref_bool_start_hidden"
                       label="&bool_start_hidden.label;"
                       accesskey="&bool_start_hidden.accesskey;"/>
-            <checkbox id="ui_show_raised" preference="pref_bool_show_raised"
-                      label="&bool_show_raised.label;"
-                      accesskey="&bool_show_raised.accesskey;"
-                      tooltiptext="&bool_show_raised.tooltip;"/>
+            <checkbox id="ui_show_activates" preference="pref_bool_show_activates"
+                      label="&bool_show_activates.label;"
+                      accesskey="&bool_show_activates.accesskey;"
+                      tooltiptext="&bool_show_activates.tooltip;"/>
           </groupbox>
 
           <groupbox>
diff --git a/src/chrome/locale/en-US/options.dtd b/src/chrome/locale/en-US/options.dtd
index 79cad26..8c0c46e 100644
--- a/src/chrome/locale/en-US/options.dtd
+++ b/src/chrome/locale/en-US/options.dtd
@@ -16,9 +16,9 @@
 <!ENTITY bool_hides_single_window.accesskey "H">
 <!ENTITY bool_start_hidden.label "Start application hidden to tray">
 <!ENTITY bool_start_hidden.accesskey "S">
-<!ENTITY bool_show_raised.label "Ensure windows are restored on top">
-<!ENTITY bool_show_raised.accesskey "E">
-<!ENTITY bool_show_raised.tooltip "otherwise let the window manager handle it">
+<!ENTITY bool_show_activates.label "Activate restored windows">
+<!ENTITY bool_show_activates.accesskey "e">
+<!ENTITY bool_show_activates.tooltip "restored windows raise on top and get focus">
 
 <!ENTITY icon_settings "Icon settings">
 <!ENTITY bool_show_icon_on_hide.label "Show tray icon only if a window is hidden">
diff --git a/src/defaults/preferences/prefs.js b/src/defaults/preferences/prefs.js
index 9e7fdc9..7affa6a 100644
--- a/src/defaults/preferences/prefs.js
+++ b/src/defaults/preferences/prefs.js
@@ -11,7 +11,7 @@ pref("extensions.firetray.hides_on_close", true);
 pref("extensions.firetray.hides_on_minimize", true);
 pref("extensions.firetray.hides_single_window", false);
 pref("extensions.firetray.start_hidden", false);
-pref("extensions.firetray.show_raised", false);
+pref("extensions.firetray.show_activates", false);
 
 pref("extensions.firetray.show_icon_on_hide", false);
 pref("extensions.firetray.scroll_hides", true);
diff --git a/src/modules/ctypes/gdk.jsm b/src/modules/ctypes/gdk.jsm
index e858514..84df88e 100644
--- a/src/modules/ctypes/gdk.jsm
+++ b/src/modules/ctypes/gdk.jsm
@@ -248,7 +248,6 @@ function gdk_defines(lib) {
   lib.lazy_bind("gdk_drawable_get_size", ctypes.void_t, this.GdkDrawable.ptr, gobject.gint.ptr, gobject.gint.ptr);
   // lib.lazy_bind("gdk_window_get_geometry", ctypes.void_t, this.GdkWindow.ptr, gobject.gint.ptr, gobject.gint.ptr, gobject.gint.ptr, gobject.gint.ptr, gobject.gint.ptr);
   lib.lazy_bind("gdk_window_move_resize", ctypes.void_t, this.GdkWindow.ptr, gobject.gint, gobject.gint, gobject.gint, gobject.gint);
-  lib.lazy_bind("gdk_window_raise", ctypes.void_t, this.GdkWindow.ptr);
   lib.lazy_bind("gdk_atom_intern", this.GdkAtom, gobject.gchar.ptr, gobject.gboolean);
   lib.lazy_bind("gdk_property_change", ctypes.void_t, this.GdkWindow.ptr, this.GdkAtom, this.GdkAtom, gobject.gint, this.GdkPropMode, gobject.guchar.ptr, gobject.gint);
 
diff --git a/src/modules/ctypes/x11.jsm b/src/modules/ctypes/x11.jsm
index af41410..1e1c95b 100644
--- a/src/modules/ctypes/x11.jsm
+++ b/src/modules/ctypes/x11.jsm
@@ -34,8 +34,12 @@ const XATOMS_EWMH_WM_STATES =  [
   "_NET_WM_STATE_FULLSCREEN", "_NET_WM_STATE_ABOVE", "_NET_WM_STATE_BELOW",
   "_NET_WM_STATE_DEMANDS_ATTENTION"
 ];
-const XATOMS = XATOMS_ICCCM.concat(XATOMS_EWMH_WM_STATES)
-  .concat(XATOMS_EWMH_GENERAL).concat(["CARDINAL"]);
+const XATOMS_EWMH_ROOT = [ "_NET_ACTIVE_WINDOW" ]
+const XATOMS = XATOMS_ICCCM
+  .concat(XATOMS_EWMH_WM_STATES)
+  .concat(XATOMS_EWMH_GENERAL)
+  .concat(XATOMS_EWMH_ROOT)
+  .concat(["CARDINAL"]);
 
 
 function x11_defines(lib) {
@@ -127,6 +131,7 @@ function x11_defines(lib) {
   lib.lazy_bind("XChangeProperty", ctypes.int, this.Display.ptr, this.Window, this.Atom, this.Atom, ctypes.int, ctypes.int, ctypes.unsigned_char.ptr, ctypes.int);
   lib.lazy_bind("XDefaultRootWindow", this.Window, this.Display.ptr);
   lib.lazy_bind("XSendEvent", this.Status, this.Display.ptr, this.Window, this.Bool, ctypes.long, this.XEvent.ptr);
+  lib.lazy_bind("XRaiseWindow", ctypes.int, this.Display.ptr, this.Window);
 
 }
 
diff --git a/src/modules/gtk2/FiretrayWindow.jsm b/src/modules/gtk2/FiretrayWindow.jsm
index fe2d603..9d430f5 100644
--- a/src/modules/gtk2/FiretrayWindow.jsm
+++ b/src/modules/gtk2/FiretrayWindow.jsm
@@ -245,12 +245,23 @@ firetray.Window = {
     let desktopDest = firetray.Handler.windows[xid].savedDesktop;
     if (desktopDest === null) return;
 
+    let dataSize = 1;
+    let data = ctypes.long(dataSize);
+    data[0] = desktopDest;
+    this.xSendClientMessgeEvent(xid, x11.current.Atoms._NET_WM_DESKTOP, data, dataSize);
+
+    LOG("restored to desktop: "+desktopDest);
+    delete firetray.Handler.windows[xid].savedDesktop;
+  },
+
+  xSendClientMessgeEvent: function(xid, atom, data, dataSize) {
     let xev = new x11.XClientMessageEvent;
     xev.type = x11.ClientMessage;
     xev.window = x11.Window(xid);
-    xev.message_type = x11.current.Atoms._NET_WM_DESKTOP;
+    xev.message_type = atom;
     xev.format = 32;
-    xev.data[0] = desktopDest;
+    for (let i=0; i<dataSize; ++i)
+      xev.data[i] = data[i];
 
     let rootWin = x11.XDefaultRootWindow(x11.current.Display);
     let propagate = false;
@@ -258,16 +269,24 @@ firetray.Window = {
     // fortunately, it's OK not to cast xev. ctypes.cast to a void_t doesn't work (length pb)
     let status = x11.XSendEvent(x11.current.Display, rootWin, propagate, mask, xev.address());
     // always returns 1 (BadRequest as a coincidence)
-
-    LOG("restored to desktop: "+desktopDest);
-    delete firetray.Handler.windows[xid].savedDesktop;
   },
 
-  ensureRaised: function(xid) {
-    if (!firetray.Utils.prefService.getBoolPref('show_raised'));
+
+  /**
+   * raises window on top and give focus.
+   */
+  activate: function(xid) {
+    if (!firetray.Utils.prefService.getBoolPref('show_activates'))
       return;
-    let gdkWin = firetray.Handler.gdkWindows.get(xid);
-    gdk.gdk_window_raise(gdkWin);
+
+    let dataSize = 3;
+    let data = ctypes.long(dataSize);
+    data[0] = 1; // source indication (0=none, 1=app, 2=pager)
+    data[1] = 0; // timestamp
+    data[2] = 0; // requestor's currently active window, 0 if none
+    this.xSendClientMessgeEvent(xid, x11.current.Atoms._NET_ACTIVE_WINDOW, data, dataSize);
+
+    LOG("window raised");
   },
 
   /**
@@ -487,7 +506,7 @@ firetray.Handler.showSingleWindow = function(xid) {
   firetray.Window.restoreWindowStates(xid);
   firetray.Handler.windows[xid].baseWin.visibility = true; // show
   firetray.Window.restoreWindowDesktop(xid);               // after show
-  firetray.Window.ensureRaised(xid);
+  firetray.Window.activate(xid);
   // TODO: we need want to restore to the original monitor (screen)
 
   firetray.Handler.windows[xid].visibility = true;

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