Giter Club home page Giter Club logo

Comments (1)

eserrose avatar eserrose commented on August 30, 2024 1

My attempt at a workaround.
Add an object listeners that keeps track of the added handlers in bridge. When calling windowManager.eventEmitter.addListener, store the function inside listeners.

I tried returning the handler within listeners, but it gets turned into "remoteFunction". Hence, instead of returning the handler itself, I am returning the index of the handler inside listeners. Then instead of using splice or something to remove it, I set it to null. If you are constantly adding and removing handlers, the object may get too big, but it's a working solution.

'bridge': {
            /**
             * The event listeners
             * */
            listeners : {},

            /**
             * Sets the callback to trigger whenever an event is emitted
             * @param event The name of the event
             * @param callback The callback to trigger, this callback will be given the data passed (if any), and
             * the name of the targeted window and finally the name of the window that triggered/emitted the event
             * @return the handler that add into the event listeners array
             * */
            'on': function(event, callback){
                let id = 0;

                if(this.listeners[event]){
                    id = this.listeners[event].length;
                } else {
                    this.listeners[event] = [null]
                }

                windowManager.eventEmitter.addListener(event, this.listeners[event][id] = function(event){
                    callback.call(null, event.data, event.target, event.emittedBy);
                });

                return id;
            },

            /**
             * Remove a event listener returned by windowManger.bridge.on
             * or windowManager.bridge.addListener
             * @param event The name of the event
             * @param id the index of the listen handler returned by
             *        windowManager.bridge.on
             */
            'removeListener': function(event, id) {
                let handler;

                if(this.listeners[event] && this.listeners[event].length > id){
                    handler = this.listeners[event][id];
                }
                if(handler){
                    windowManager.eventEmitter.removeListener(event, handler);
                    this.listeners[event][id] = undefined;
                }
            },


            'removeListeners': function(event) {
                this.listeners[event] = undefined;
                windowManager.eventEmitter.removeAllListeners(event);
            },

from electron-window-manager.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.