diff options
| author | ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com> | 2022-05-10 16:52:46 +0200 |
|---|---|---|
| committer | ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com> | 2022-05-10 16:52:46 +0200 |
| commit | b6e0122926b9bae1b9400ba3bf01e5b7d977b758 (patch) | |
| tree | 07970ff1bf2123ffbb27d88b08623b17050b48e4 | |
| parent | ad27da578a952548dd16f8be4bbd871fccc423c7 (diff) | |
Fix for issue #441: Some minor regressions with borderless+fullscreen (Wayland).
| -rw-r--r-- | libdecor/src/plugins/gtk/libdecor-gtk.c | 10 | ||||
| -rw-r--r-- | src/drivers/Wayland/Fl_Wayland_Window_Driver.cxx | 5 |
2 files changed, 11 insertions, 4 deletions
diff --git a/libdecor/src/plugins/gtk/libdecor-gtk.c b/libdecor/src/plugins/gtk/libdecor-gtk.c index e23115c23..40f7d5954 100644 --- a/libdecor/src/plugins/gtk/libdecor-gtk.c +++ b/libdecor/src/plugins/gtk/libdecor-gtk.c @@ -670,7 +670,7 @@ libdecor_plugin_gtk_frame_free(struct libdecor_plugin *plugin, (struct libdecor_frame_gtk *) frame; #if APPLY_FLTK_CHANGES - if (!frame_gtk->header) return; /* happens with SSD */ + if (!frame_gtk->header || !GTK_IS_WIDGET(frame_gtk->header)) return; /* happens with SSD (or not)*/ #endif gtk_widget_destroy(frame_gtk->header); #if APPLY_FLTK_CHANGES @@ -1783,7 +1783,11 @@ libdecor_plugin_gtk_frame_get_border_size(struct libdecor_plugin *plugin, GtkWidget *header = ((struct libdecor_frame_gtk *)frame)->header; enum decoration_type type = window_state_to_decoration_type(window_state); - if (header && (type != DECORATION_TYPE_NONE)) + if (header && (type != DECORATION_TYPE_NONE) +#if APPLY_FLTK_CHANGES + && GTK_IS_WIDGET(header) +#endif + ) *top = gtk_widget_get_allocated_height(header); else *top = 0; @@ -2298,7 +2302,7 @@ pointer_button(void *data, state == WL_POINTER_BUTTON_STATE_PRESSED && seat->pointer_focus == frame_gtk->headerbar.wl_surface) { #if APPLY_FLTK_CHANGES - const int title_height = frame_gtk->header ? gtk_widget_get_allocated_height(frame_gtk->header) : 0; + const int title_height = frame_gtk->header && GTK_IS_WIDGET(frame_gtk->header) ? gtk_widget_get_allocated_height(frame_gtk->header) : 0; #else const int title_height = gtk_widget_get_allocated_height(frame_gtk->header); #endif diff --git a/src/drivers/Wayland/Fl_Wayland_Window_Driver.cxx b/src/drivers/Wayland/Fl_Wayland_Window_Driver.cxx index 4cd614293..cabf831f7 100644 --- a/src/drivers/Wayland/Fl_Wayland_Window_Driver.cxx +++ b/src/drivers/Wayland/Fl_Wayland_Window_Driver.cxx @@ -876,6 +876,7 @@ static void xdg_surface_configure(void *data, struct xdg_surface *xdg_surface, u } window->configured_width = window->fl_win->w(); window->configured_height = window->fl_win->h(); + Fl::handle(FL_FOCUS, window->fl_win); window->fl_win->redraw(); Fl_Window_Driver::driver(window->fl_win)->flush(); } @@ -1303,10 +1304,12 @@ void Fl_Wayland_Window_Driver::update_scale() void Fl_Wayland_Window_Driver::use_border() { if (!shown() || pWindow->parent()) return; struct libdecor_frame *frame = fl_xid(pWindow)->frame; - if (frame && Fl_Wayland_Screen_Driver::compositor != Fl_Wayland_Screen_Driver::KDE) { + if (frame && Fl_Wayland_Screen_Driver::compositor != Fl_Wayland_Screen_Driver::KDE && + && fl_xid(pWindow)->xdg_surface) { libdecor_frame_set_visibility(frame, pWindow->border()); pWindow->redraw(); } else { + pWindow->wait_for_expose(); // useful for border(0) just after show() Fl_Window_Driver::use_border(); } } |
