[Pkg-mozext-commits] [firetray] 119/399: * pass current window to onLoad() and onQuit() in order to register/unregister window properly * "delete-event" callbacks use GdkEventWindowState (not GdkEvent) * begin implementation of window position/size/state save/restore
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 8ec4d995b8fa44e197892c9cd2ae8b13e39f85c3
Author: foudfou <foudil.newbie+git at gmail.com>
Date: Thu Dec 22 17:19:59 2011 +0100
* pass current window to onLoad() and onQuit() in order to register/unregister
window properly
* "delete-event" callbacks use GdkEventWindowState (not GdkEvent)
* begin implementation of window position/size/state save/restore
NOTE: this revision is *very* unstable. I think I should drop the GTK
"delete-event" handling and revert back to onClose().
---
src/chrome/content/overlay.js | 16 ++--
src/modules/FiretrayHandler.jsm | 2 +-
src/modules/gdk.jsm | 63 ++++++++++++++-
src/modules/gobject.jsm | 1 +
src/modules/gtk.jsm | 12 +++
src/modules/gtk2/FiretrayStatusIcon.jsm | 4 +-
src/modules/gtk2/FiretrayWindow.jsm | 135 +++++++++++++++++++++++++------
7 files changed, 196 insertions(+), 37 deletions(-)
diff --git a/src/chrome/content/overlay.js b/src/chrome/content/overlay.js
index 88d4c3f..28aecf0 100644
--- a/src/chrome/content/overlay.js
+++ b/src/chrome/content/overlay.js
@@ -16,7 +16,7 @@ if ("undefined" == typeof(firetray)) {
firetray.Main = {
- onLoad: function(e) {
+ onLoad: function(win) {
// initialization code
this.strings = document.getElementById("firetray-strings");
@@ -32,7 +32,7 @@ firetray.Main = {
}
let init = firetray.Handler.initialized || firetray.Handler.init();
- firetray.Handler.registerWindow(window);
+ firetray.Handler.registerWindow(win);
// update unread messages count
if (firetray.Handler.inMailApp && firetray.Messaging.initialized)
@@ -50,12 +50,12 @@ firetray.Main = {
return true;
},
- onQuit: function(e) {
+ onQuit: function(win) {
// Remove observer
let that = this;
firetray.Utils.prefService.removeObserver("", that);
- firetray.Handler.unregisterWindow(window);
+ firetray.Handler.unregisterWindow(win);
/* 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
@@ -64,8 +64,7 @@ firetray.Main = {
},
/* GTK TEST
- // TODO: prevent preceding warning about closing multiple tabs
- // (browser.tabs.warnOnClose)
+ // TODO: prevent preceding warning about closing multiple tabs (browser.tabs.warnOnClose)
onClose: function(event) {
LOG('Firetray CLOSE');
let hides_on_close = firetray.Utils.prefService.getBoolPref('hides_on_close');
@@ -90,13 +89,14 @@ firetray.Main = {
// https://developer.mozilla.org/en/Extensions/Performance_best_practices_in_extensions
// https://developer.mozilla.org/en/XUL_School/JavaScript_Object_Management.html
// https://developer.mozilla.org/en/Extensions/Performance_best_practices_in_extensions#Removing_Event_Listeners
+let thatWindow = window;
window.addEventListener(
'load', function (e) {
removeEventListener('load', arguments.callee, true);
- firetray.Main.onLoad(); },
+ firetray.Main.onLoad(thatWindow); },
false);
window.addEventListener(
'unload', function (e) {
removeEventListener('unload', arguments.callee, true);
- firetray.Main.onQuit(); },
+ firetray.Main.onQuit(thatWindow); },
false);
diff --git a/src/modules/FiretrayHandler.jsm b/src/modules/FiretrayHandler.jsm
index d09e234..c061b4c 100644
--- a/src/modules/FiretrayHandler.jsm
+++ b/src/modules/FiretrayHandler.jsm
@@ -113,7 +113,7 @@ firetray.Handler = {
setText: function(text, color) {},
setTooltip: function(localizedMessage) {},
setTooltipDefault: function() {},
- showHideToTray: function() {},
+ showHideAllWindows: function() {},
registerWindow: function(win) {},
unregisterWindow: function(win) {},
diff --git a/src/modules/gdk.jsm b/src/modules/gdk.jsm
index 4726bc9..1743f00 100644
--- a/src/modules/gdk.jsm
+++ b/src/modules/gdk.jsm
@@ -61,8 +61,53 @@ function gdk_defines(lib) {
this.GDK_FILTER_TRANSLATE = 1;
this.GDK_FILTER_REMOVE = 2;
this.GdkWindowState = ctypes.int; // enum
- this.GDK_WINDOW_STATE_ICONIFIED = 2;
- this.GDK_WINDOW_STATE_MAXIMIZED = 4;
+ this.GDK_WINDOW_STATE_WITHDRAWN = 1 << 0,
+ this.GDK_WINDOW_STATE_ICONIFIED = 1 << 1,
+ this.GDK_WINDOW_STATE_MAXIMIZED = 1 << 2,
+ this.GDK_WINDOW_STATE_STICKY = 1 << 3,
+ this.GDK_WINDOW_STATE_FULLSCREEN = 1 << 4,
+ this.GDK_WINDOW_STATE_ABOVE = 1 << 5,
+ this.GDK_WINDOW_STATE_BELOW = 1 << 6;
+ this.GdkEventType = ctypes.int; // enum
+ this.GDK_NOTHING = -1;
+ this.GDK_DELETE = 0;
+ this.GDK_DESTROY = 1;
+ this.GDK_EXPOSE = 2;
+ this.GDK_MOTION_NOTIFY = 3;
+ this.GDK_BUTTON_PRESS = 4;
+ this.GDK_2BUTTON_PRESS = 5;
+ this.GDK_3BUTTON_PRESS = 6;
+ this.GDK_BUTTON_RELEASE = 7;
+ this.GDK_KEY_PRESS = 8;
+ this.GDK_KEY_RELEASE = 9;
+ this.GDK_ENTER_NOTIFY = 10;
+ this.GDK_LEAVE_NOTIFY = 11;
+ this.GDK_FOCUS_CHANGE = 12;
+ this.GDK_CONFIGURE = 13;
+ this.GDK_MAP = 14;
+ this.GDK_UNMAP = 15;
+ this.GDK_PROPERTY_NOTIFY = 16;
+ this.GDK_SELECTION_CLEAR = 17;
+ this.GDK_SELECTION_REQUEST = 18;
+ this.GDK_SELECTION_NOTIFY = 19;
+ this.GDK_PROXIMITY_IN = 20;
+ this.GDK_PROXIMITY_OUT = 21;
+ this.GDK_DRAG_ENTER = 22;
+ this.GDK_DRAG_LEAVE = 23;
+ this.GDK_DRAG_MOTION = 24;
+ this.GDK_DRAG_STATUS = 25;
+ this.GDK_DROP_START = 26;
+ this.GDK_DROP_FINISHED = 27;
+ this.GDK_CLIENT_EVENT = 28;
+ this.GDK_VISIBILITY_NOTIFY = 29;
+ this.GDK_NO_EXPOSE = 30;
+ this.GDK_SCROLL = 31;
+ this.GDK_WINDOW_STATE = 32;
+ this.GDK_SETTING = 33;
+ this.GDK_OWNER_CHANGE = 34;
+ this.GDK_GRAB_BROKEN = 35;
+ this.GDK_DAMAGE = 36;
+ this.GDK_EVENT_LAST = 37; /* helper variable for decls */
this.GdkWindow = ctypes.StructType("GdkWindow");
this.GdkByteOrder = ctypes.int; // enum
@@ -124,6 +169,13 @@ function gdk_defines(lib) {
this.GdkEvent = ctypes.void_t;
this.GdkDisplay = ctypes.StructType("GdkDisplay");
this.GdkFilterFunc = ctypes.voidptr_t;
+ this.GdkEventWindowState = ctypes.StructType("GdkEventWindowState", [
+ { "type": this.GdkEventType },
+ { "window": this.GdkWindow.ptr },
+ { "send_event": gobject.gint8 },
+ { "changed_mask": this.GdkWindowState },
+ { "new_window_state": this.GdkWindowState },
+ ]);
this.GdkFilterFunc_t = ctypes.FunctionType(
ctypes.default_abi, this.GdkFilterReturn,
@@ -134,7 +186,7 @@ function gdk_defines(lib) {
lib.lazy_bind("gdk_window_destroy", ctypes.void_t, this.GdkWindow.ptr);
lib.lazy_bind("gdk_x11_window_set_user_time", ctypes.void_t, this.GdkWindow.ptr, gobject.guint32);
lib.lazy_bind("gdk_window_hide", ctypes.void_t, this.GdkWindow.ptr);
- lib.lazy_bind("gdk_window_show", ctypes.void_t, this.GdkWindow.ptr);
+ lib.lazy_bind("gdk_window_show_unraised", ctypes.void_t, this.GdkWindow.ptr);
lib.lazy_bind("gdk_screen_get_default", this.GdkScreen.ptr);
lib.lazy_bind("gdk_screen_get_toplevel_windows", gobject.GList.ptr, this.GdkScreen.ptr);
lib.lazy_bind("gdk_pixbuf_new_from_file", this.GdkPixbuf.ptr, gobject.gchar.ptr, glib.GError.ptr.ptr);
@@ -169,6 +221,11 @@ function gdk_defines(lib) {
lib.lazy_bind("gdk_display_get_default", this.GdkDisplay.ptr);
lib.lazy_bind("gdk_x11_display_get_xdisplay", x11.Display.ptr, this.GdkDisplay.ptr);
lib.lazy_bind("gdk_window_get_state", this.GdkWindowState, this.GdkWindow.ptr);
+ lib.lazy_bind("gdk_window_get_position", ctypes.void_t, this.GdkWindow.ptr, gobject.gint.ptr, gobject.gint.ptr);
+ 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);
+
}
if (!gdk) {
diff --git a/src/modules/gobject.jsm b/src/modules/gobject.jsm
index d20f9c5..0854c1a 100644
--- a/src/modules/gobject.jsm
+++ b/src/modules/gobject.jsm
@@ -89,6 +89,7 @@ function gobject_defines(lib) {
this.guint32 = ctypes.uint32_t;
this.guint16 = ctypes.uint16_t;
this.gint = ctypes.int;
+ this.gint8 = ctypes.int8_t;
this.gchar = ctypes.char;
this.guchar = ctypes.unsigned_char;
this.gboolean = this.gint;
diff --git a/src/modules/gtk.jsm b/src/modules/gtk.jsm
index 7a36814..89543f0 100644
--- a/src/modules/gtk.jsm
+++ b/src/modules/gtk.jsm
@@ -63,6 +63,9 @@ function gtk_defines(lib) {
this.GCallbackGenericEvent_t = ctypes.FunctionType(
ctypes.default_abi, gobject.gboolean,
[this.GtkWidget.ptr, gdk.GdkEvent.ptr, gobject.gpointer]).ptr;
+ this.GCallbackWindowStateEvent_t = ctypes.FunctionType(
+ ctypes.default_abi, gobject.gboolean,
+ [this.GtkWidget.ptr, gdk.GdkEventWindowState.ptr, gobject.gpointer]).ptr;
lib.lazy_bind("gtk_status_icon_new", this.GtkStatusIcon.ptr);
lib.lazy_bind("gtk_status_icon_set_from_file", ctypes.void_t,
@@ -110,6 +113,15 @@ function gtk_defines(lib) {
lib.lazy_bind("gtk_widget_get_events", gobject.gint, this.GtkWidget.ptr);
lib.lazy_bind("gtk_widget_add_events", ctypes.void_t, this.GtkWidget.ptr, gobject.gint);
lib.lazy_bind("gtk_window_get_type", gobject.GType);
+ lib.lazy_bind("gtk_window_get_position", ctypes.void_t, this.GtkWindow.ptr, gobject.gint.ptr, gobject.gint.ptr);
+ lib.lazy_bind("gtk_window_move", ctypes.void_t, this.GtkWindow.ptr, gobject.gint, gobject.gint);
+ lib.lazy_bind("gtk_window_get_size", ctypes.void_t, this.GtkWindow.ptr, gobject.gint.ptr, gobject.gint.ptr);
+ lib.lazy_bind("gtk_window_resize", ctypes.void_t, this.GtkWindow.ptr, gobject.gint, gobject.gint);
+ lib.lazy_bind("gtk_window_iconify", gobject.gint, this.GtkWindow.ptr);
+ lib.lazy_bind("gtk_window_stick", gobject.gint, this.GtkWindow.ptr);
+ lib.lazy_bind("gtk_window_maximize", gobject.gint, this.GtkWindow.ptr);
+ lib.lazy_bind("gtk_window_fullscreen", gobject.gint, this.GtkWindow.ptr);
+
}
if (!gtk) {
diff --git a/src/modules/gtk2/FiretrayStatusIcon.jsm b/src/modules/gtk2/FiretrayStatusIcon.jsm
index d6ae933..977aae2 100644
--- a/src/modules/gtk2/FiretrayStatusIcon.jsm
+++ b/src/modules/gtk2/FiretrayStatusIcon.jsm
@@ -47,8 +47,8 @@ firetray.StatusIcon = {
firetray.Handler.setTooltipDefault();
- LOG("showHideToTray: "+firetray.Handler.hasOwnProperty("showHideToTray"));
- firetray_iconActivateCb = gtk.GCallbackStatusIconActivate_t(firetray.Handler.showHideToTray);
+ LOG("showHideAllWindows: "+firetray.Handler.hasOwnProperty("showHideAllWindows"));
+ firetray_iconActivateCb = gtk.GCallbackStatusIconActivate_t(firetray.Handler.showHideAllWindows);
let res = gobject.g_signal_connect(firetray.StatusIcon.trayIcon, "activate", firetray_iconActivateCb, null);
LOG("g_connect activate="+res);
diff --git a/src/modules/gtk2/FiretrayWindow.jsm b/src/modules/gtk2/FiretrayWindow.jsm
index 58017b1..3cd83a9 100644
--- a/src/modules/gtk2/FiretrayWindow.jsm
+++ b/src/modules/gtk2/FiretrayWindow.jsm
@@ -48,11 +48,13 @@ firetray.Handler.registerWindow = function(win) {
// 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] = {};
+ this.windows[xid].win = win;
this.windows[xid].gtkWin = gtkWin;
this.windows[xid].gdkWin = gdkWin;
+ LOG("window "+xid+" registered");
+ /* NOTE: it should not be necessary to gtk_widget_add_events(gtkWin,
+ gdk.GDK_ALL_EVENTS_MASK); */
try {
@@ -60,20 +62,21 @@ firetray.Handler.registerWindow = function(win) {
"delete-event" */
let deleteEventId = gobject.g_signal_lookup("delete-event", gtk.gtk_window_get_type());
LOG("deleteEventId="+deleteEventId);
- let mozDeleteEventCb = gobject.g_signal_handler_find(gtkWin, gobject.G_SIGNAL_MATCH_ID, deleteEventId, 0, null, null, null);
- LOG("mozDeleteEventCb="+mozDeleteEventCb);
- gobject.g_signal_handler_block(gtkWin, mozDeleteEventCb); // not _disconnect !
- this.windows[xid].mozDeleteEventCb = mozDeleteEventCb; // FIXME: cb should be unblocked
+ let mozDeleteEventCbId = gobject.g_signal_handler_find(gtkWin, gobject.G_SIGNAL_MATCH_ID, deleteEventId, 0, null, null, null);
+ LOG("mozDeleteEventCbId="+mozDeleteEventCbId);
+ gobject.g_signal_handler_block(gtkWin, mozDeleteEventCbId); // not _disconnect !
+ this.windows[xid].mozDeleteEventCbId = mozDeleteEventCbId;
this.windows[xid].windowDeleteCb = gtk.GCallbackGenericEvent_t(firetray.Window.windowDelete);
- res = gobject.g_signal_connect(gtkWin, "delete-event", that.windows[xid].windowDeleteCb, null);
- LOG("g_connect delete-event="+res);
+ // NOTE: it'd be nice to pass the xid to g_signal_connect...
+ this.windows[xid].windowDeleteCbId = gobject.g_signal_connect(gtkWin, "delete-event", that.windows[xid].windowDeleteCb, null);
+ LOG("g_connect delete-event="+this.windows[xid].windowDeleteCbId);
/* we'll catch minimize events with Gtk:
http://stackoverflow.com/questions/8018328/what-is-the-gtk-event-called-when-a-window-minimizes */
- this.windows[xid].windowStateCb = gtk.GCallbackGenericEvent_t(firetray.Window.windowState);
- res = gobject.g_signal_connect(gtkWin, "window-state-event", this.windows[xid].windowStateCb, null);
- LOG("g_connect window-state-event="+res);
+ this.windows[xid].windowStateCb = gtk.GCallbackWindowStateEvent_t(firetray.Window.windowState);
+ this.windows[xid].windowStateCbId = gobject.g_signal_connect(gtkWin, "window-state-event", this.windows[xid].windowStateCb, null);
+ LOG("g_connect window-state-event="+this.windows[xid].windowStateCbId);
} catch (x) {
this._unregisterWindowByXID(xid);
@@ -87,30 +90,55 @@ firetray.Handler.registerWindow = function(win) {
firetray.Handler.unregisterWindow = function(win) {
LOG("unregister window");
- let [gtkWin, gdkWin, xid] = firetray.Window.getWindowsFromChromeWindow(win);
- return this._unregisterWindowByXID(xid);
+ try {
+ let [gtkWin, gdkWin, xid] = firetray.Window.getWindowsFromChromeWindow(win);
+
+ // unblock Moz original delete-event handler
+ gobject.g_signal_handler_disconnect(gtkWin, this.windows[xid].windowDeleteCbId);
+ gobject.g_signal_handler_unblock(gtkWin, this.windows[xid].mozDeleteEventCbId);
+
+ return this._unregisterWindowByXID(xid);
+ } catch (x) {
+ ERROR(x);
+ }
+ return null;
};
firetray.Handler._unregisterWindowByXID = function(xid) {
+ try {
if (this.windows.hasOwnProperty(xid))
delete this.windows[xid];
else {
ERROR("can't unregister unknown window "+xid);
return false;
}
+ } catch (x) {
+ ERROR(x);
+ }
+ LOG("window "+xid+" unregistered");
return true;
};
-firetray.Handler.showHideToTray = function(gtkStatusIcon, userData) {
- LOG("showHideToTray: "+userData);
-
- for (let xid in firetray.Handler.windows) {
- LOG(xid);
+firetray.Handler.showSingleWindow = function(xid) {
try {
- gdk.gdk_window_show(firetray.Handler.windows[xid].gdkWin);
+ // keep z-order - and try to restore previous state
+ LOG("gdkWin="+firetray.Handler.windows[xid].gdkWin);
+ gdk.gdk_window_show_unraised(firetray.Handler.windows[xid].gdkWin);
+ // need to restore *after* showing for correction
+ // firetray.Window._restoreWindowPositionSizeState(xid);
} catch (x) {
ERROR(x);
}
+};
+
+firetray.Handler.showHideAllWindows = function(gtkStatusIcon, userData) {
+ LOG("showHideAllWindows: "+userData);
+
+ // NOTE: showHideAllWindows being a callback, we need to use 'firetray.Handler'
+ // explicitely instead of 'this'
+ for (let xid in firetray.Handler.windows) {
+ LOG("show xid="+xid);
+ firetray.Handler.showSingleWindow(xid);
}
let stopPropagation = true;
@@ -136,6 +164,7 @@ firetray.Window = {
// Tag the base window
let oldTitle = baseWindow.title;
+ LOG("oldTitle="+oldTitle);
baseWindow.title = Services2.uuid.generateUUID().toString();
try {
@@ -205,6 +234,16 @@ firetray.Window = {
return gdk.gdk_x11_drawable_get_xid(ctypes.cast(gdkWin, gdk.GdkDrawable.ptr));
},
+ getXIDFromGtkWidget: function(gtkWid) {
+ try {
+ let gdkWin = gtk.gtk_widget_get_window(gtkWid);
+ return gdk.gdk_x11_drawable_get_xid(ctypes.cast(gdkWin, gdk.GdkDrawable.ptr));
+ } catch (x) {
+ ERROR(x);
+ }
+ return null;
+ },
+
getWindowsFromChromeWindow: function(win) {
let gtkWin = firetray.Window.getGtkWindowHandle(win);
LOG("gtkWin="+gtkWin);
@@ -217,18 +256,68 @@ firetray.Window = {
windowDelete: function(gtkWidget, gdkEv, userData){
LOG("gtk_widget_hide: "+gtkWidget+", "+gdkEv+", "+userData);
- try{
+ let xid = firetray.Window.getXIDFromGtkWidget(gtkWidget);
+ LOG("windowDelete XID="+xid);
+
+ try {
+ firetray.Window._saveWindowPositionSizeState(xid);
+
+ // hide window - NOTE: we don't use BaseWindow.visibility to have full
+ // control
let gdkWin = firetray.Window.getGdkWindowFromGtkWindow(gtkWidget);
gdk.gdk_window_hide(gdkWin);
} catch (x) {
ERROR(x);
}
+
let stopPropagation = true;
return stopPropagation;
},
- windowState: function(gtkWidget, gdkEv, userData){
- LOG("window-state-event");
+ _saveWindowPositionSizeState: function(xid) {
+ let gdkWin = firetray.Handler.windows[xid].gdkWin;
+
+ try {
+ let gx = new gobject.gint; let gy = new gobject.gint;
+ // gtk.gtk_window_get_position(gtkWin, gx.address(), gy.address());
+ gdk.gdk_window_get_position(gdkWin, gx.address(), gy.address());
+ let gwidth = new gobject.gint; let gheight = new gobject.gint;
+ // gtk.gtk_window_get_size(gtkWin, gwidth.address(), gheight.address());
+ gdk.gdk_drawable_get_size(ctypes.cast(gdkWin, gdk.GdkDrawable.ptr), gwidth.address(), gheight.address());
+ let windowState = gdk.gdk_window_get_state(firetray.Handler.windows[xid].gdkWin);
+ LOG("gx="+gx+", gy="+gy+", gwidth="+gwidth+", gheight="+gheight+", windowState="+windowState);
+ firetray.Handler.windows[xid].savedX = gx;
+ firetray.Handler.windows[xid].savedY = gy;
+ firetray.Handler.windows[xid].savedWidth = gwidth;
+ firetray.Handler.windows[xid].savedHeight = gheight;
+ firetray.Handler.windows[xid].savedState = windowState;
+ } catch (x) {
+ ERROR(x);
+ }
+
+ },
+
+ _restoreWindowPositionSizeState: function(xid) {
+ let gdkWin = firetray.Handler.windows[xid].gdkWin;
+ if (!firetray.Handler.windows[xid].savedX)
+ return; // windows[xid].saved* may not be initialized
+
+ LOG("restore gdkWin: "+gdkWin+", x="+firetray.Handler.windows[xid].savedX+", y="+firetray.Handler.windows[xid].savedY+", w="+firetray.Handler.windows[xid].savedWidth+", h="+firetray.Handler.windows[xid].savedHeight);
+ try {
+ gdk.gdk_window_move_resize(gdkWin,
+ firetray.Handler.windows[xid].savedX,
+ firetray.Handler.windows[xid].savedY,
+ firetray.Handler.windows[xid].savedWidth,
+ firetray.Handler.windows[xid].savedHeight);
+ // firetray.Handler.windows[xid].savedState
+ } catch (x) {
+ ERROR(x);
+ }
+ },
+
+ windowState: function(gtkWidget, gdkEventState, userData){
+ // LOG("window-state-event");
+ // if(event->new_window_state & GDK_WINDOW_STATE_ICONIFIED){
let stopPropagation = true;
return stopPropagation;
}
--
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