mirror of
https://github.com/moparisthebest/FireTray
synced 2025-01-09 04:28:16 -05:00
use 'focus-in' event for unsetting urgency hint
Unsetting urgency hint can't be base on MapNotify when working on a single desktop.
This commit is contained in:
parent
419ac2d0f0
commit
6615219f95
@ -277,13 +277,11 @@ firetray.Handler = {
|
||||
if (enabled) {
|
||||
firetray.Chat.init();
|
||||
for (let winId in firetray.Handler.windows) {
|
||||
firetray.ChatStatusIcon.attachOnFocusInCallback(winId);
|
||||
firetray.Chat.attachSelectListeners(firetray.Handler.windows[winId].chromeWin);
|
||||
}
|
||||
|
||||
} else {
|
||||
for (let winId in firetray.Handler.windows) {
|
||||
firetray.ChatStatusIcon.detachOnFocusInCallback(winId);
|
||||
firetray.Chat.detachSelectListeners(firetray.Handler.windows[winId].chromeWin);
|
||||
}
|
||||
firetray.Chat.shutdown();
|
||||
|
@ -52,29 +52,6 @@ Cu.import("resource://firetray/ctypes/linux/glib.jsm");
|
||||
|
||||
function gobject_defines(lib) {
|
||||
|
||||
this.GdkEventMask = ctypes.int; // enum
|
||||
this.GDK_EXPOSURE_MASK = 1 << 1;
|
||||
this.GDK_POINTER_MOTION_MASK = 1 << 2;
|
||||
this.GDK_POINTER_MOTION_HINT_MASK = 1 << 3;
|
||||
this.GDK_BUTTON_MOTION_MASK = 1 << 4;
|
||||
this.GDK_BUTTON1_MOTION_MASK = 1 << 5;
|
||||
this.GDK_BUTTON2_MOTION_MASK = 1 << 6;
|
||||
this.GDK_BUTTON3_MOTION_MASK = 1 << 7;
|
||||
this.GDK_BUTTON_PRESS_MASK = 1 << 8;
|
||||
this.GDK_BUTTON_RELEASE_MASK = 1 << 9;
|
||||
this.GDK_KEY_PRESS_MASK = 1 << 10;
|
||||
this.GDK_KEY_RELEASE_MASK = 1 << 11;
|
||||
this.GDK_ENTER_NOTIFY_MASK = 1 << 12;
|
||||
this.GDK_LEAVE_NOTIFY_MASK = 1 << 13;
|
||||
this.GDK_FOCUS_CHANGE_MASK = 1 << 14;
|
||||
this.GDK_STRUCTURE_MASK = 1 << 15;
|
||||
this.GDK_PROPERTY_CHANGE_MASK = 1 << 16;
|
||||
this.GDK_VISIBILITY_NOTIFY_MASK = 1 << 17;
|
||||
this.GDK_PROXIMITY_IN_MASK = 1 << 18;
|
||||
this.GDK_PROXIMITY_OUT_MASK = 1 << 19;
|
||||
this.GDK_SUBSTRUCTURE_MASK = 1 << 20;
|
||||
this.GDK_SCROLL_MASK = 1 << 21;
|
||||
this.GDK_ALL_EVENTS_MASK = 0x3FFFFE;
|
||||
this.GSignalMatchType = ctypes.int; // enum
|
||||
this.G_SIGNAL_MATCH_ID = 1 << 0;
|
||||
this.G_SIGNAL_MATCH_DETAIL = 1 << 1;
|
||||
|
@ -38,7 +38,6 @@ firetray.ChatStatusIcon = {
|
||||
return o;
|
||||
})(),
|
||||
themedIconNameCurrent: null,
|
||||
signals: {'focus-in': {callback: {}, handler: {}}},
|
||||
timers: {},
|
||||
|
||||
init: function() {
|
||||
@ -113,34 +112,6 @@ firetray.ChatStatusIcon = {
|
||||
|
||||
setIconTooltipDefault: function() {
|
||||
this.setIconTooltip(firetray.Handler.appName+" Chat");
|
||||
},
|
||||
|
||||
attachOnFocusInCallback: function(xid) {
|
||||
log.debug("attachOnFocusInCallback xid="+xid);
|
||||
this.signals['focus-in'].callback[xid] =
|
||||
gtk.GCallbackWidgetFocusEvent_t(firetray.ChatStatusIcon.onFocusIn);
|
||||
this.signals['focus-in'].handler[xid] = gobject.g_signal_connect(
|
||||
firetray.Handler.gtkWindows.get(xid), "focus-in-event",
|
||||
firetray.ChatStatusIcon.signals['focus-in'].callback[xid], null);
|
||||
log.debug("focus-in handler="+this.signals['focus-in'].handler[xid]);
|
||||
},
|
||||
|
||||
detachOnFocusInCallback: function(xid) {
|
||||
log.debug("detachOnFocusInCallback xid="+xid);
|
||||
let gtkWin = firetray.Handler.gtkWindows.get(xid);
|
||||
gobject.g_signal_handler_disconnect(gtkWin, this.signals['focus-in'].handler[xid]);
|
||||
delete this.signals['focus-in'].callback[xid];
|
||||
delete this.signals['focus-in'].handler[xid];
|
||||
},
|
||||
|
||||
// NOTE: fluxbox issues a FocusIn event when switching workspace
|
||||
// by hotkey, which means 2 FocusIn events when switching to a moz app :(
|
||||
// (http://sourceforge.net/tracker/index.php?func=detail&aid=3190205&group_id=35398&atid=413960)
|
||||
onFocusIn: function(widget, event, data) {
|
||||
log.debug("onFocusIn");
|
||||
let xid = firetray.Window.getXIDFromGtkWidget(widget);
|
||||
log.debug("xid="+xid);
|
||||
firetray.Chat.stopGetAttentionMaybe(xid);
|
||||
}
|
||||
|
||||
// FIXME: TODO: onclick/activate -> chatHandler.showCurrentConversation()
|
||||
|
@ -58,6 +58,7 @@ firetray.Handler.gtkPopupMenuWindowItems = new ctypesMap(gtk.GtkImageMenuItem.pt
|
||||
|
||||
|
||||
firetray.Window = {
|
||||
signals: {'focus-in': {callback: {}, handler: {}}},
|
||||
|
||||
init: function() {
|
||||
let gtkVersionCheck = gtk.gtk_check_version(
|
||||
@ -215,8 +216,8 @@ firetray.Window = {
|
||||
return false;
|
||||
}
|
||||
|
||||
firetray.Window.detachOnFocusInCallback(xid);
|
||||
if (firetray.Handler.isChatEnabled() && firetray.Chat.initialized) {
|
||||
firetray.ChatStatusIcon.detachOnFocusInCallback(xid);
|
||||
firetray.Chat.detachSelectListeners(firetray.Handler.windows[xid].chromeWin);
|
||||
}
|
||||
|
||||
@ -408,6 +409,7 @@ firetray.Window = {
|
||||
},
|
||||
|
||||
setUrgency: function(xid, urgent) {
|
||||
log.debug("setUrgency: "+urgent);
|
||||
gtk.gtk_window_set_urgency_hint(firetray.Handler.gtkWindows.get(xid), urgent);
|
||||
},
|
||||
|
||||
@ -557,9 +559,6 @@ firetray.Window = {
|
||||
firetray.Window.updateVisibility(xid, true);
|
||||
log.debug("visibleWindowsCount="+firetray.Handler.visibleWindowsCount);
|
||||
}
|
||||
|
||||
if (xid === firetray.Handler.getActiveWindow())
|
||||
firetray.Window.setUrgency(xid, false);
|
||||
break;
|
||||
|
||||
case x11.UnmapNotify: // for catching 'iconify'
|
||||
@ -619,8 +618,40 @@ firetray.Window = {
|
||||
|
||||
for(var key in firetray.Handler.windows);
|
||||
firetray.Window.activate(key);
|
||||
}
|
||||
},
|
||||
|
||||
attachOnFocusInCallback: function(xid) {
|
||||
log.debug("attachOnFocusInCallback xid="+xid);
|
||||
this.signals['focus-in'].callback[xid] =
|
||||
gtk.GCallbackWidgetFocusEvent_t(firetray.Window.onFocusIn);
|
||||
this.signals['focus-in'].handler[xid] = gobject.g_signal_connect(
|
||||
firetray.Handler.gtkWindows.get(xid), "focus-in-event",
|
||||
firetray.Window.signals['focus-in'].callback[xid], null);
|
||||
log.debug("focus-in handler="+this.signals['focus-in'].handler[xid]);
|
||||
},
|
||||
|
||||
detachOnFocusInCallback: function(xid) {
|
||||
log.debug("detachOnFocusInCallback xid="+xid);
|
||||
let gtkWin = firetray.Handler.gtkWindows.get(xid);
|
||||
gobject.g_signal_handler_disconnect(gtkWin, this.signals['focus-in'].handler[xid]);
|
||||
delete this.signals['focus-in'].callback[xid];
|
||||
delete this.signals['focus-in'].handler[xid];
|
||||
},
|
||||
|
||||
// NOTE: fluxbox issues a FocusIn event when switching workspace
|
||||
// by hotkey, which means 2 FocusIn events when switching to a moz app :(
|
||||
// (http://sourceforge.net/tracker/index.php?func=detail&aid=3190205&group_id=35398&atid=413960)
|
||||
onFocusIn: function(widget, event, data) {
|
||||
log.debug("onFocusIn");
|
||||
let xid = firetray.Window.getXIDFromGtkWidget(widget);
|
||||
log.debug("xid="+xid);
|
||||
|
||||
firetray.Window.setUrgency(xid, false);
|
||||
|
||||
if (firetray.Handler.isChatEnabled() && firetray.Chat.initialized) {
|
||||
firetray.Chat.stopGetAttentionMaybe(xid);
|
||||
}
|
||||
}
|
||||
|
||||
}; // firetray.Window
|
||||
|
||||
@ -671,8 +702,8 @@ firetray.Handler.registerWindow = function(win) {
|
||||
this.windows[xid].startupFilterCb = gdk.GdkFilterFunc_t(firetray.Window.startupFilter);
|
||||
gdk.gdk_window_add_filter(gdkWin, this.windows[xid].startupFilterCb, null);
|
||||
|
||||
firetray.Window.attachOnFocusInCallback(xid);
|
||||
if (firetray.Handler.isChatEnabled() && firetray.Chat.initialized) {
|
||||
firetray.ChatStatusIcon.attachOnFocusInCallback(xid);
|
||||
firetray.Chat.attachSelectListeners(win);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user