|
|
commit b6e0122926b9bae1b9400ba3bf01e5b7d977b758
Author: ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>
AuthorDate: Tue May 10 16:52:46 2022 +0200
Commit: ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>
CommitDate: Tue May 10 16:52:46 2022 +0200
Fix for issue #441: Some minor regressions with borderless+fullscreen (Wayland).
libdecor/src/plugins/gtk/libdecor-gtk.c | 10 +++++++---
src/drivers/Wayland/Fl_Wayland_Window_Driver.cxx | 5 ++++-
2 files changed, 11 insertions(+), 4 deletions(-)
diff --git libdecor/src/plugins/gtk/libdecor-gtk.c libdecor/src/plugins/gtk/libdecor-gtk.c
index e23115c..40f7d59 100644
--- libdecor/src/plugins/gtk/libdecor-gtk.c
+++ 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 src/drivers/Wayland/Fl_Wayland_Window_Driver.cxx src/drivers/Wayland/Fl_Wayland_Window_Driver.cxx
index 4cd6142..cabf831 100644
--- src/drivers/Wayland/Fl_Wayland_Window_Driver.cxx
+++ 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();
}
}
[ Direct Link to Message ] | |
|
| |