[JCEF][OSR] Mouse click events not passed to browser

Having problems with building or using CEF's C/C++ APIs? This forum is here to help. Please do not post bug reports or feature requests here.

[JCEF][OSR] Mouse click events not passed to browser

Postby FriwiDev » Sun Jul 09, 2017 4:40 am

Hey there,

I'm currently trying to embed a browser into my Java GL1.1 application using OSR mode. Everything works fine so far, I am able to process mouse move, press and release events, scrolling and keyboard input. The only issue I have is, that mouse clicks for some reason wont work, no matter which parameters I choose for my mouse event.

Here is my mouse processing part:

Code: Select all
        boolean left_down = false;
   boolean right_down = false;
   int lastx = 0;
   int lasty = 0;
   boolean entered = false;
   int min_scroll = 20000;
   
   public void keyLogic(int i, int j, int displayWidth, int displayHeight) {
      if(!entered){
         entered = true;
         sendMouseEventP(new MouseEvent(getUIComponent(), MouseEvent.MOUSE_ENTERED, System.currentTimeMillis(), 0, 0, 0, 0, false));
      }
      if(mouseInputs){
         int keysCombined = 0;
         if(Keyboard.isKeyDown(Keyboard.KEY_LCONTROL))keysCombined |= MouseEvent.CTRL_DOWN_MASK;
         if(Keyboard.isKeyDown(Keyboard.KEY_RCONTROL))keysCombined |= MouseEvent.CTRL_DOWN_MASK;
         if(Keyboard.isKeyDown(Keyboard.KEY_RSHIFT))keysCombined |= MouseEvent.SHIFT_DOWN_MASK;
         if(Keyboard.isKeyDown(Keyboard.KEY_LSHIFT))keysCombined |= MouseEvent.SHIFT_DOWN_MASK;
         if(Mouse.isButtonDown(0))keysCombined |= MouseEvent.BUTTON1_DOWN_MASK;
         if(Mouse.isButtonDown(1))keysCombined |= MouseEvent.BUTTON2_DOWN_MASK;
         
         int x = Mouse.getX()-xoffs;
         int y = displayHeight-Mouse.getY()-yoffs;
         
         if(x!=lastx||y!=lasty){
            sendMouseEventP(new MouseEvent(getUIComponent(), MouseEvent.MOUSE_MOVED, System.currentTimeMillis(), 0, x, y, 0, false));
         }
         
         if(Mouse.isButtonDown(0)&&!left_down){
            sendMouseEventP(new MouseEvent(getUIComponent(), MouseEvent.MOUSE_PRESSED, System.currentTimeMillis(), keysCombined, x, y, x, y, 0, false, MouseEvent.BUTTON1));
         }
         if(Mouse.isButtonDown(1)&&!right_down){
            sendMouseEventP(new MouseEvent(getUIComponent(), MouseEvent.MOUSE_PRESSED, System.currentTimeMillis(), keysCombined, x, y, x, y, 0, false, MouseEvent.BUTTON2));
         }
         if(!Mouse.isButtonDown(0)&&left_down){
            System.out.println("CLICK");
            sendMouseEventP(new MouseEvent(getUIComponent(), MouseEvent.MOUSE_RELEASED, System.currentTimeMillis(), keysCombined, x, y, x, y, 1, false, MouseEvent.BUTTON1));
            sendMouseEventP(new MouseEvent(getUIComponent(), MouseEvent.MOUSE_CLICKED, System.currentTimeMillis(), keysCombined, x, y, x, y, 1, false, MouseEvent.BUTTON1));
         }
         if(!Mouse.isButtonDown(1)&&right_down){
            sendMouseEventP(new MouseEvent(getUIComponent(), MouseEvent.MOUSE_RELEASED, System.currentTimeMillis(), keysCombined, x, y, x, y, 1, false, MouseEvent.BUTTON2));
            sendMouseEventP(new MouseEvent(getUIComponent(), MouseEvent.MOUSE_CLICKED, System.currentTimeMillis(), keysCombined, x, y, x, y, 1, false, MouseEvent.BUTTON2));
         }
         
         left_down = Mouse.isButtonDown(0);
         right_down = Mouse.isButtonDown(1);
         
         lastx = x;
         lasty = y;
      }
      
      if(wheelInputs){
         int x = Mouse.getX()-xoffs;
         int y = displayHeight-Mouse.getY()-yoffs;
         int mx = Mouse.getDWheel();
         if(mx!=0){
            if(Math.abs(mx)<min_scroll)min_scroll = Math.abs(mx);
            sendMouseWheelEventP(new MouseWheelEvent(getUIComponent(), MouseWheelEvent.MOUSE_WHEEL, System.currentTimeMillis(), 0, x, y, 0, false, MouseWheelEvent.WHEEL_UNIT_SCROLL, Math.abs(mx/2), mx/min_scroll));
         }
      }
   }


sendMouseEventP is a public wrapper method for sendMouseEvent from CefBrowser_N, simply redirecting the event to the private method. getUIComponent() returns a faked JPanel, which is unique to the browser but only initialized as a new JPanel().

Any ideas about what the issue could be would be highly appreciated :)

Thanks in advance,

FriwiDev
Maintainer of jcefmaven on GitHub.
FriwiDev
Techie
 
Posts: 41
Joined: Sun Jul 09, 2017 4:18 am

Return to Support Forum

Who is online

Users browsing this forum: Google [Bot] and 30 guests