Parcourir la source

Avoid triggering a full screen request by accident on X11.


git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@4992 3789f03b-4d11-0410-bbf8-ca57d06f2519
tags/v1.2.90
Pierre Ossman il y a 11 ans
Parent
révision
0e5934631d
1 fichiers modifiés avec 28 ajouts et 8 suppressions
  1. 28
    8
      vncviewer/DesktopWindow.cxx

+ 28
- 8
vncviewer/DesktopWindow.cxx Voir le fichier

@@ -106,14 +106,6 @@ DesktopWindow::DesktopWindow(int w, int h, const char *name,
}
}

// If we are creating a window which is equal to the size on the
// screen on X11, many WMs will treat this as a legacy fullscreen
// request. This is not what we want. Besides, it doesn't really
// make sense to try to create a window which is larger than the
// available work space.
w = __rfbmin(w, Fl::w());
h = __rfbmin(h, Fl::h());
if (force_position()) {
resize(geom_x, geom_y, w, h);
} else {
@@ -275,6 +267,34 @@ void DesktopWindow::resize(int x, int y, int w, int h)
{
bool resizing;

#if ! (defined(WIN32) || defined(__APPLE__))
// X11 window managers will treat a resize to cover the entire
// monitor as a request to go full screen. Make sure we avoid this.
//
// FIXME: If this is an external event then this code will get
// FLTK into a confused state about the window's position/size.
// Unfortunately FLTK doesn't offer an easy way to tell
// what kind of resize it is. Let's hope this corner case
// isn't too common...
#ifdef HAVE_FLTK_FULLSCREEN
if (!fullscreen_active())
#endif
{
for (int i = 0;i < Fl::screen_count();i++) {
int sx, sy, sw, sh;

Fl::screen_xywh(sx, sy, sw, sh, i);

if ((sx == x) && (sy == y) && (sw == w) && (sh == h)) {
vlog.info("Adjusting window size to avoid accidental full screen request");
// Assume a panel of some form and adjust the height
y += 20;
h -= 40;
}
}
}
#endif

if ((this->w() != w) || (this->h() != h))
resizing = true;
else

Chargement…
Annuler
Enregistrer