Pārlūkot izejas kodu

Workaround options window appearing behind viewer

FLTK's fullscreen_x() function will always put the window on a high
level (NSStatusWindowLevel = 25), even if the window doesn't have focus.
This causes the OptionsDialog to end up behind the DesktopWindow when
the fullscreen function is called. Until we can rest assured that most
people building TigerVNC will use a fixed version of FLTK, we will need
this workaround.
tags/v1.12.90
Samuel Mannehed pirms 2 gadiem
vecāks
revīzija
9023a2ec18
3 mainītis faili ar 29 papildinājumiem un 4 dzēšanām
  1. 12
    4
      vncviewer/DesktopWindow.cxx
  2. 3
    0
      vncviewer/cocoa.h
  3. 14
    0
      vncviewer/cocoa.mm

+ 12
- 4
vncviewer/DesktopWindow.cxx Parādīt failu

@@ -918,12 +918,11 @@ void DesktopWindow::fullscreen_on()
{
bool allMonitors = !strcasecmp(fullScreenMode, "all");
bool selectedMonitors = !strcasecmp(fullScreenMode, "selected");
int top, bottom, left, right;

if (not selectedMonitors and not allMonitors) {
int n = Fl::screen_num(x(), y(), w(), h());
fullscreen_screens(n, n, n, n);
top = bottom = left = right = Fl::screen_num(x(), y(), w(), h());
} else {
int top, bottom, left, right;
int top_y, bottom_y, left_x, right_x;

int sx, sy, sw, sh;
@@ -983,8 +982,17 @@ void DesktopWindow::fullscreen_on()
}
}

fullscreen_screens(top, bottom, left, right);
}
#ifdef __APPLE__
// This is a workaround for a bug in FLTK, see: https://github.com/fltk/fltk/pull/277
int savedLevel;
savedLevel = cocoa_get_level(this);
#endif
fullscreen_screens(top, bottom, left, right);
#ifdef __APPLE__
// This is a workaround for a bug in FLTK, see: https://github.com/fltk/fltk/pull/277
cocoa_set_level(this, savedLevel);
#endif

if (!fullscreen_active())
fullscreen();

+ 3
- 0
vncviewer/cocoa.h Parādīt failu

@@ -21,6 +21,9 @@

class Fl_Window;

int cocoa_get_level(Fl_Window *win);
void cocoa_set_level(Fl_Window *win, int level);

int cocoa_capture_displays(Fl_Window *win);
void cocoa_release_displays(Fl_Window *win);


+ 14
- 0
vncviewer/cocoa.mm Parādīt failu

@@ -50,6 +50,20 @@ const int kVK_Menu = 0x6E;

static bool captured = false;

int cocoa_get_level(Fl_Window *win)
{
NSWindow *nsw;
nsw = (NSWindow*)fl_xid(win);
return [nsw level];
}

void cocoa_set_level(Fl_Window *win, int level)
{
NSWindow *nsw;
nsw = (NSWindow*)fl_xid(win);
[nsw setLevel:level];
}

int cocoa_capture_displays(Fl_Window *win)
{
NSWindow *nsw;

Notiek ielāde…
Atcelt
Saglabāt