mozilla-bmo1609538.patch
author Wolfgang Rosenauer <wr@rosenauer.org>
Mon, 30 Mar 2020 21:49:01 +0200
branchfirefox74
changeset 1123 7fa561e5d7c7
permissions -rw-r--r--
Firefox 74.0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1123
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     1
# HG changeset patch
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     2
# Parent  047fa9d20b78759029e87c48f0d64f819e889e4c
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     3
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     4
diff --git a/widget/gtk/mozcontainer.cpp b/widget/gtk/mozcontainer.cpp
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     5
--- a/widget/gtk/mozcontainer.cpp
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     6
+++ b/widget/gtk/mozcontainer.cpp
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     7
@@ -159,23 +159,25 @@ void moz_container_move(MozContainer* co
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     8
 
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     9
   // Wayland subsurface is not created yet.
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    10
   if (!container->subsurface) {
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    11
     return;
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    12
   }
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    13
 
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    14
   // wl_subsurface_set_position is actually property of parent surface
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    15
   // which is effective when parent surface is commited.
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    16
-  wl_surface* parent_surface =
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    17
-      moz_gtk_widget_get_wl_surface(GTK_WIDGET(container));
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    18
-  if (parent_surface) {
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    19
-    wl_subsurface_set_position(container->subsurface, container->subsurface_dx,
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    20
-                               container->subsurface_dy);
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    21
-    wl_surface_commit(parent_surface);
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    22
-    container->surface_position_needs_update = false;
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    23
+  wl_subsurface_set_position(container->subsurface, container->subsurface_dx,
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    24
+                             container->subsurface_dy);
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    25
+  container->surface_position_needs_update = false;
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    26
+
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    27
+  GdkWindow* window = gtk_widget_get_window(GTK_WIDGET(container));
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    28
+  if (window) {
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    29
+    GdkRectangle rect = (GdkRectangle){0, 0, gdk_window_get_width(window),
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    30
+                                       gdk_window_get_height(window)};
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    31
+    gdk_window_invalidate_rect(window, &rect, false);
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    32
   }
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    33
 }
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    34
 
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    35
 // This is called from layout/compositor code only with
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    36
 // size equal to GL rendering context. Otherwise there are
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    37
 // rendering artifacts as wl_egl_window size does not match
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    38
 // GL rendering pipeline setup.
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    39
 void moz_container_egl_window_set_size(MozContainer* container, int width,
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    40
@@ -217,16 +219,17 @@ void moz_container_init(MozContainer* co
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    41
   container->subsurface = nullptr;
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    42
   container->eglwindow = nullptr;
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    43
   container->frame_callback_handler = nullptr;
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    44
   container->frame_callback_handler_surface_id = -1;
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    45
   // We can draw to x11 window any time.
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    46
   container->ready_to_draw = gfxPlatformGtk::GetPlatform()->IsX11Display();
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    47
   container->opaque_region_needs_update = false;
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    48
   container->opaque_region_subtract_corners = false;
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    49
+  container->opaque_region_fullscreen = false;
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    50
   container->surface_needs_clear = true;
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    51
   container->subsurface_dx = 0;
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    52
   container->subsurface_dy = 0;
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    53
   container->surface_position_needs_update = 0;
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    54
   container->initial_draw_cbs.clear();
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    55
 #endif
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    56
 
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    57
   LOG(("%s [%p]\n", __FUNCTION__, (void*)container));
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    58
@@ -569,22 +572,26 @@ static void moz_container_add(GtkContain
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    59
   moz_container_put(MOZ_CONTAINER(container), widget, 0, 0);
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    60
 }
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    61
 
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    62
 #ifdef MOZ_WAYLAND
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    63
 static void moz_container_set_opaque_region(MozContainer* container) {
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    64
   GtkAllocation allocation;
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    65
   gtk_widget_get_allocation(GTK_WIDGET(container), &allocation);
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    66
 
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    67
-  // Set region to mozcontainer which does not have any offset
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    68
-  wl_region* region =
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    69
-      CreateOpaqueRegionWayland(0, 0, allocation.width, allocation.height,
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    70
-                                container->opaque_region_subtract_corners);
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    71
-  wl_surface_set_opaque_region(container->surface, region);
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    72
-  wl_region_destroy(region);
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    73
+  // Set region to mozcontainer for normal state only
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    74
+  if (!container->opaque_region_fullscreen) {
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    75
+    wl_region* region =
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    76
+        CreateOpaqueRegionWayland(0, 0, allocation.width, allocation.height,
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    77
+                                  container->opaque_region_subtract_corners);
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    78
+    wl_surface_set_opaque_region(container->surface, region);
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    79
+    wl_region_destroy(region);
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    80
+  } else {
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    81
+    wl_surface_set_opaque_region(container->surface, nullptr);
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    82
+  }
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    83
 }
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    84
 
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    85
 struct wl_surface* moz_container_get_wl_surface(MozContainer* container) {
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    86
   LOGWAYLAND(("%s [%p] surface %p ready_to_draw %d\n", __FUNCTION__,
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    87
               (void*)container, (void*)container->surface,
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    88
               container->ready_to_draw));
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    89
 
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    90
   if (!container->surface) {
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    91
@@ -670,17 +677,19 @@ gboolean moz_container_has_wl_egl_window
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    92
 
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    93
 gboolean moz_container_surface_needs_clear(MozContainer* container) {
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    94
   int ret = container->surface_needs_clear;
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    95
   container->surface_needs_clear = false;
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    96
   return ret;
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    97
 }
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    98
 
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    99
 void moz_container_update_opaque_region(MozContainer* container,
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   100
-                                        bool aSubtractCorners) {
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   101
+                                        bool aSubtractCorners,
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   102
+                                        bool aFullScreen) {
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   103
   container->opaque_region_needs_update = true;
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   104
   container->opaque_region_subtract_corners = aSubtractCorners;
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   105
+  container->opaque_region_fullscreen = aFullScreen;
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   106
 }
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   107
 #endif
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   108
 
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   109
 void moz_container_force_default_visual(MozContainer* container) {
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   110
   container->force_default_visual = true;
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   111
 }
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   112
diff --git a/widget/gtk/mozcontainer.h b/widget/gtk/mozcontainer.h
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   113
--- a/widget/gtk/mozcontainer.h
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   114
+++ b/widget/gtk/mozcontainer.h
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   115
@@ -77,16 +77,17 @@ struct _MozContainer {
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   116
   struct wl_surface* surface;
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   117
   struct wl_subsurface* subsurface;
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   118
   int subsurface_dx, subsurface_dy;
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   119
   struct wl_egl_window* eglwindow;
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   120
   struct wl_callback* frame_callback_handler;
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   121
   int frame_callback_handler_surface_id;
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   122
   gboolean opaque_region_needs_update;
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   123
   gboolean opaque_region_subtract_corners;
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   124
+  gboolean opaque_region_fullscreen;
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   125
   gboolean surface_position_needs_update;
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   126
   gboolean surface_needs_clear;
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   127
   gboolean ready_to_draw;
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   128
   std::vector<std::function<void(void)>> initial_draw_cbs;
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   129
 #endif
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   130
   gboolean force_default_visual;
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   131
 };
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   132
 
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   133
@@ -112,12 +113,13 @@ void moz_container_move_resize(MozContai
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   134
 void moz_container_egl_window_set_size(MozContainer* container, int width,
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   135
                                        int height);
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   136
 void moz_container_scale_changed(MozContainer* container,
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   137
                                  GtkAllocation* aAllocation);
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   138
 void moz_container_add_initial_draw_callback(
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   139
     MozContainer* container, const std::function<void(void)>& initial_draw_cb);
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   140
 wl_surface* moz_gtk_widget_get_wl_surface(GtkWidget* aWidget);
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   141
 void moz_container_update_opaque_region(MozContainer* container,
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   142
-                                        bool aSubtractCorners);
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   143
+                                        bool aSubtractCorners,
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   144
+                                        bool aFullScreen);
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   145
 #endif
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   146
 
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   147
 #endif /* __MOZ_CONTAINER_H__ */
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   148
diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   149
--- a/widget/gtk/nsWindow.cpp
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   150
+++ b/widget/gtk/nsWindow.cpp
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   151
@@ -4860,27 +4860,34 @@ void nsWindow::UpdateTopLevelOpaqueRegio
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   152
   int width = DevicePixelsToGdkCoordRoundDown(mBounds.width);
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   153
   int height = DevicePixelsToGdkCoordRoundDown(mBounds.height);
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   154
 
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   155
   GdkRectangle rect = {x, y, width, height};
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   156
   if (!mToplevelOpaqueRegionState.NeedsUpdate(rect, aSubtractCorners)) {
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   157
     return;
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   158
   }
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   159
 
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   160
-  wl_region* region =
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   161
-      CreateOpaqueRegionWayland(x, y, width, height, aSubtractCorners);
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   162
-  wl_surface_set_opaque_region(surface, region);
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   163
-  wl_region_destroy(region);
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   164
-
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   165
+  // Set opaque region to toplevel window only in fullscreen mode.
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   166
+  bool fullScreen = mSizeState != nsSizeMode_Normal && !mIsTiled;
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   167
+  if (fullScreen) {
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   168
+    wl_region* region =
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   169
+        CreateOpaqueRegionWayland(x, y, width, height, aSubtractCorners);
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   170
+    wl_surface_set_opaque_region(surface, region);
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   171
+    wl_region_destroy(region);
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   172
+  } else {
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   173
+    wl_surface_set_opaque_region(surface, nullptr);
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   174
+  }
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   175
+
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   176
+  // TODO -> create a function for it
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   177
   GdkWindow* window = gtk_widget_get_window(mShell);
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   178
   if (window) {
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   179
     gdk_window_invalidate_rect(window, &rect, false);
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   180
   }
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   181
 
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   182
-  moz_container_update_opaque_region(mContainer, aSubtractCorners);
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   183
+  moz_container_update_opaque_region(mContainer, aSubtractCorners, fullScreen);
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   184
 }
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   185
 #endif
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   186
 
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   187
 static void GdkWindowSetOpaqueRegion(GdkWindow* aGdkWindow,
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   188
                                      cairo_region_t* aRegion) {
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   189
   // Available as of GTK 3.10+
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   190
   static auto sGdkWindowSetOpaqueRegion =
7fa561e5d7c7 Firefox 74.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   191
       (void (*)(GdkWindow*, cairo_region_t*))dlsym(