Browse Source

Wayland: implement scale factor windows as popups - cont'd

pull/823/head
ManoloFLTK 2 years ago
parent
commit
0636c0b3e6
  1. 3
      src/Fl_Screen_Driver.H
  2. 4
      src/Fl_Screen_Driver.cxx
  3. 8
      src/drivers/Wayland/Fl_Wayland_Window_Driver.cxx

3
src/Fl_Screen_Driver.H

@ -79,8 +79,9 @@ public:
static const int fl_YValue; static const int fl_YValue;
static const int fl_XNegative; static const int fl_XNegative;
static const int fl_YNegative; static const int fl_YNegative;
// Used when transient scale windows are implemented as popups // Next 2 are used when transient scale windows are implemented as popups
static Fl_Window *transient_scale_parent; static Fl_Window *transient_scale_parent;
static void del_transient_window(void *);
// key_table and key_table_size are used in fl_shortcut to translate key names // key_table and key_table_size are used in fl_shortcut to translate key names
struct Keyname { struct Keyname {
unsigned int key; unsigned int key;

4
src/Fl_Screen_Driver.cxx

@ -388,8 +388,8 @@ static Fl_Window *transient_scale_window = NULL;
Fl_Window *Fl_Screen_Driver::transient_scale_parent = NULL; Fl_Window *Fl_Screen_Driver::transient_scale_parent = NULL;
static void del_transient_window(void *) { void Fl_Screen_Driver::del_transient_window(void *) {
Fl_Screen_Driver::transient_scale_parent = NULL; transient_scale_parent = NULL;
delete (Fl_Image*)transient_scale_window->shape(); delete (Fl_Image*)transient_scale_window->shape();
delete transient_scale_window; delete transient_scale_window;
transient_scale_window = NULL; transient_scale_window = NULL;

8
src/drivers/Wayland/Fl_Wayland_Window_Driver.cxx

@ -435,9 +435,11 @@ static void destroy_surface_caution_pointer_focus(struct wl_surface *surface,
void Fl_Wayland_Window_Driver::hide() { void Fl_Wayland_Window_Driver::hide() {
if (pWindow == Fl_Screen_Driver::transient_scale_parent) { if (pWindow == Fl_Screen_Driver::transient_scale_parent) {
// Don't hide the parent of a running transient scale window // Delete also the running transient scale window
// because the transient is a popup and MUST be deleted first. // because the transient is a popup and MUST be deleted
return; // before its parent.
Fl::remove_timeout(Fl_Screen_Driver::del_transient_window);
Fl_Screen_Driver::del_transient_window(NULL);
} }
Fl_X* ip = Fl_X::flx(pWindow); Fl_X* ip = Fl_X::flx(pWindow);
if (hide_common()) return; if (hide_common()) return;

Loading…
Cancel
Save