Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
_ff-addon-snippet-Gtk_SetWindowUrgency - Bring attention to a window using Gtk libraries. [gtk] [jsctypes] [unix]
Components.utils.import('resource://gre/modules/Services.jsm');
var browserWindow = Services.wm.getMostRecentWindow('navigator:browser');
if (!browserWindow) {
throw new Error('No browser window found');
}
var baseWindow = browserWindow.QueryInterface(Ci.nsIInterfaceRequestor)
.getInterface(Ci.nsIWebNavigation)
.QueryInterface(Ci.nsIDocShellTreeItem)
.treeOwner
.QueryInterface(Ci.nsIInterfaceRequestor)
.getInterface(Ci.nsIBaseWindow);
var GDKWindowPtrString = baseWindow.nativeHandle;
Components.utils.import('resource://gre/modules/ctypes.jsm');
var gdk = ctypes.open('libgdk-x11-2.0.so.0');
var gtk = ctypes.open('libgtk-x11-2.0.so.0');
// types
let GdkWindow = ctypes.StructType('GdkWindow');
let gpointer = ctypes.voidptr_t;
let gboolean = ctypes.bool;
let GtkWindow = ctypes.StructType('GtkWindow');
//let GtkWidget = ctypes.StructType('GtkWidget');
var gdk_window_get_user_data = gdk.declare('gdk_window_get_user_data', ctypes.default_abi, ctypes.void_t, GdkWindow.ptr, gpointer.ptr);
//var gtk_widget_get_window = gtk.declare('gtk_widget_get_window', ctypes.default_abi, GtkWidget.ptr); // for getGdkWindowFromGtkWindow
var gtk_window_set_urgency_hint = gtk.declare('gtk_window_set_urgency_hint', ctypes.default_abi, ctypes.void_t, GtkWindow.ptr, gboolean)
var browserWindow_madeIntoGdkWinPtr = GdkWindow.ptr(ctypes.UInt64(GDKWindowPtrString));
var gptr = gpointer();
var rez_gwgud = gdk_window_get_user_data(browserWindow_madeIntoGdkWinPtr, gptr.address());
console.info('rez_gwgud:', rez_gwgud, /*rez_gwgud.toString(),*/ uneval(rez_gwgud)); // return is void so cant do .toString on it
var browserWindow_madeIntoGtkWindowPtr = ctypes.cast(gptr, GtkWindow.ptr);
var rez_gwsuh = gtk_window_set_urgency_hint(browserWindow_madeIntoGtkWindowPtr, true); // returns void
console.info('rez_gwsuh:', rez_gwsuh, uneval(rez_gwsuh)); // is void so cant do .toString() on it
gdk.close();
gtk.close();
Owner

Noitidart commented Mar 30, 2015

README

Rev1

  • Works, but it does not work on subsequent calls i dont know why, weird
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment