-
Bug
-
Resolution: Unresolved
-
P3
-
8, 9, 10, 11
-
x86_64
-
linux_ubuntu
ADDITIONAL SYSTEM INFORMATION :
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04.4 LTS
Release: 16.04
Codename: xenial
A DESCRIPTION OF THE PROBLEM :
In Ubuntu Mate desktop I can't move an undecorated java window outside the screen. It seems to be because of marco window manager:
gsettings get org.mate.session.required-components windowmanager --> 'marco'
If I change the window manager to Compiz I can move the window out of the screen but it makes a strange movement.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Build and run the JFrameBug code.
When the window appears try to drag the window outside the screen.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
The windows must be moved outside the screen.
ACTUAL -
The window keeps inside the screen and the following messages appears on console:
Component moved: 1704, 539
Component moved: 1520, 539
Mouse dragged (347, 118)
setLocation (1705, 539)
Component moved: 1705, 539
Component moved: 1520, 539
Mouse dragged (348, 118)
setLocation (1706, 539)
Component moved: 1706, 539
Component moved: 1520, 539
Mouse released
It seems that the Window is moved automatically to fit on screen. For example you can see: "Component moved: 1520, 539".
---------- BEGIN SOURCE ----------
package com.example;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import javax.swing.JFrame;
public class JFrameBug extends JFrame implements MouseListener, MouseMotionListener, ComponentListener {
/**
* Serial version UUID.
*/
private static final long serialVersionUID = 1514585336232663488L;
private int startX = 0;
private int startY = 0;
private int startMouseX = 0;
private int startMouseY = 0;
private int startMouseXdraw = 0;
private int startMouseYdraw = 0;
private boolean clicked = false;
public JFrameBug() {
this.setSize(400, 300);
this.setUndecorated(true);
this.addMouseListener(this);
this.addMouseMotionListener(this);
this.addComponentListener(this);
this.setBackground(Color.WHITE);
}
public void paint(Graphics g) {
super.paint(g);
g.drawString("Drag this window!", 100, 100);
if (clicked) {
g.drawLine(startMouseXdraw-10, startMouseYdraw, startMouseXdraw+10, startMouseYdraw);
g.drawLine(startMouseXdraw, startMouseYdraw-10, startMouseXdraw, startMouseYdraw+10);
}
}
public static void main(String[] args) {
JFrameBug bugtest= new JFrameBug();
bugtest.setVisible(true);
}
@Override
public void mouseDragged(MouseEvent evt) {
if (clicked) {
System.out.println("Mouse dragged ("+evt.getX()+", "+evt.getY()+")");
int diffX = (evt.getX() + this.getX() - startMouseX);
int diffY = (evt.getY() + this.getY() - startMouseY);
int newX = startX + diffX;
int newY = startY + diffY;
System.out.println("setLocation ("+newX+", "+newY+")");
this.setLocation(newX, newY);
this.repaint();
}
}
@Override
public void mouseMoved(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseClicked(MouseEvent evt) {
}
@Override
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent evt) {
System.out.println("Mouse pressed ("+evt.getX()+", "+evt.getY()+")");
startX = this.getX();
startY = this.getY();
startMouseX = evt.getX() + this.getX();
startMouseY = evt.getY() + this.getY();
startMouseXdraw = evt.getX();
startMouseYdraw = evt.getY();
System.out.println("Start ("+startX+", "+startY+")");
clicked = true;
this.repaint();
}
@Override
public void mouseReleased(MouseEvent arg0) {
System.out.println("Mouse released");
clicked = false;
this.repaint();
}
@Override
public void componentResized(ComponentEvent e) {
// TODO Auto-generated method stub
}
@Override
public void componentMoved(ComponentEvent e) {
// TODO Auto-generated method stub
System.out.println("Component moved: "+this.getX()+", "+this.getY());
}
@Override
public void componentShown(ComponentEvent e) {
// TODO Auto-generated method stub
}
@Override
public void componentHidden(ComponentEvent e) {
// TODO Auto-generated method stub
}
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
A workaround for this is to change the window manager to Compiz by using the MATE Tweak tool.
gsettings get org.mate.session.required-components windowmanager --> 'compiz'
FREQUENCY : always
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04.4 LTS
Release: 16.04
Codename: xenial
A DESCRIPTION OF THE PROBLEM :
In Ubuntu Mate desktop I can't move an undecorated java window outside the screen. It seems to be because of marco window manager:
gsettings get org.mate.session.required-components windowmanager --> 'marco'
If I change the window manager to Compiz I can move the window out of the screen but it makes a strange movement.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Build and run the JFrameBug code.
When the window appears try to drag the window outside the screen.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
The windows must be moved outside the screen.
ACTUAL -
The window keeps inside the screen and the following messages appears on console:
Component moved: 1704, 539
Component moved: 1520, 539
Mouse dragged (347, 118)
setLocation (1705, 539)
Component moved: 1705, 539
Component moved: 1520, 539
Mouse dragged (348, 118)
setLocation (1706, 539)
Component moved: 1706, 539
Component moved: 1520, 539
Mouse released
It seems that the Window is moved automatically to fit on screen. For example you can see: "Component moved: 1520, 539".
---------- BEGIN SOURCE ----------
package com.example;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import javax.swing.JFrame;
public class JFrameBug extends JFrame implements MouseListener, MouseMotionListener, ComponentListener {
/**
* Serial version UUID.
*/
private static final long serialVersionUID = 1514585336232663488L;
private int startX = 0;
private int startY = 0;
private int startMouseX = 0;
private int startMouseY = 0;
private int startMouseXdraw = 0;
private int startMouseYdraw = 0;
private boolean clicked = false;
public JFrameBug() {
this.setSize(400, 300);
this.setUndecorated(true);
this.addMouseListener(this);
this.addMouseMotionListener(this);
this.addComponentListener(this);
this.setBackground(Color.WHITE);
}
public void paint(Graphics g) {
super.paint(g);
g.drawString("Drag this window!", 100, 100);
if (clicked) {
g.drawLine(startMouseXdraw-10, startMouseYdraw, startMouseXdraw+10, startMouseYdraw);
g.drawLine(startMouseXdraw, startMouseYdraw-10, startMouseXdraw, startMouseYdraw+10);
}
}
public static void main(String[] args) {
JFrameBug bugtest= new JFrameBug();
bugtest.setVisible(true);
}
@Override
public void mouseDragged(MouseEvent evt) {
if (clicked) {
System.out.println("Mouse dragged ("+evt.getX()+", "+evt.getY()+")");
int diffX = (evt.getX() + this.getX() - startMouseX);
int diffY = (evt.getY() + this.getY() - startMouseY);
int newX = startX + diffX;
int newY = startY + diffY;
System.out.println("setLocation ("+newX+", "+newY+")");
this.setLocation(newX, newY);
this.repaint();
}
}
@Override
public void mouseMoved(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseClicked(MouseEvent evt) {
}
@Override
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent evt) {
System.out.println("Mouse pressed ("+evt.getX()+", "+evt.getY()+")");
startX = this.getX();
startY = this.getY();
startMouseX = evt.getX() + this.getX();
startMouseY = evt.getY() + this.getY();
startMouseXdraw = evt.getX();
startMouseYdraw = evt.getY();
System.out.println("Start ("+startX+", "+startY+")");
clicked = true;
this.repaint();
}
@Override
public void mouseReleased(MouseEvent arg0) {
System.out.println("Mouse released");
clicked = false;
this.repaint();
}
@Override
public void componentResized(ComponentEvent e) {
// TODO Auto-generated method stub
}
@Override
public void componentMoved(ComponentEvent e) {
// TODO Auto-generated method stub
System.out.println("Component moved: "+this.getX()+", "+this.getY());
}
@Override
public void componentShown(ComponentEvent e) {
// TODO Auto-generated method stub
}
@Override
public void componentHidden(ComponentEvent e) {
// TODO Auto-generated method stub
}
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
A workaround for this is to change the window manager to Compiz by using the MATE Tweak tool.
gsettings get org.mate.session.required-components windowmanager --> 'compiz'
FREQUENCY : always