Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Noitidart/4a55eb617f32fd727c4d to your computer and use it in GitHub Desktop.
Save Noitidart/4a55eb617f32fd727c4d to your computer and use it in GitHub Desktop.
_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();
@Noitidart
Copy link
Author

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