Skip to content

A native module that propagates click events to draggable areas in Electron on macOS.

License

Notifications You must be signed in to change notification settings

viviedu/electron-drag-click

 
 

Repository files navigation

electron-drag-click

Description

$ npm i electron-drag-click

This Native Node Module allows you to change the behavior of how frameless Electron browser windows handle pointer events on macOS. Chromium's built-in mechanism ignores pointer events in draggable regions in frameless windows. This module changes the built-in hit testing so in frameless windows pointer events are propagated even in draggable regions.

It is based on my earlier PR in the Electron repository (electron/electron#38208), which after some discussion with maintainers was decided not to be merged in, and rather be handled in a separate Native Module.

The code is using ObjectiveC's runtime method swizzling capability, which allows you to alter the implementation of an existing selector. Shoutout to @tzahola, who helped me dealing with these APIs.

Usage

const { app, BrowserWindow } = require('electron');
const electronDragClick = require('electron-drag-click');

electronDragClick();

app.on('ready', () => {
  const win = new BrowserWindow({
    width: 800,
    height: 600,
    frame: false,
  });

  win.loadFile('./index.html');
});

About

A native module that propagates click events to draggable areas in Electron on macOS.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Objective-C++ 52.8%
  • HTML 25.0%
  • Python 12.9%
  • JavaScript 9.3%