mozilla-enable-csd.patch
author Wolfgang Rosenauer <wr@rosenauer.org>
Fri, 09 Feb 2018 13:20:55 +0100
branchfirefox58
changeset 1030 cd02d400c081
parent 1027 7071f6ebfda6
permissions -rw-r--r--
correct requires and provides handling (boo#1076907)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1027
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
     1
diff -up firefox-58.0/browser/base/moz.build.1399611 firefox-58.0/browser/base/moz.build
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
     2
--- firefox-58.0/browser/base/moz.build.1399611	2017-11-02 17:16:30.000000000 +0100
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
     3
+++ firefox-58.0/browser/base/moz.build	2018-01-24 10:57:03.717031953 +0100
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
     4
@@ -57,7 +57,7 @@ DEFINES['APP_LICENSE_BLOCK'] = '%s/conte
1024
d14085eee2b2 bring back CSD (but not ported yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     5
 if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'gtk2', 'gtk3', 'cocoa'):
d14085eee2b2 bring back CSD (but not ported yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     6
     DEFINES['CONTEXT_COPY_IMAGE_CONTENTS'] = 1
d14085eee2b2 bring back CSD (but not ported yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     7
 
d14085eee2b2 bring back CSD (but not ported yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     8
-if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'cocoa'):
d14085eee2b2 bring back CSD (but not ported yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     9
+if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'cocoa', 'gtk3'):
d14085eee2b2 bring back CSD (but not ported yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    10
     DEFINES['CAN_DRAW_IN_TITLEBAR'] = 1
d14085eee2b2 bring back CSD (but not ported yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    11
 
d14085eee2b2 bring back CSD (but not ported yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    12
 if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'gtk2', 'gtk3'):
1027
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    13
diff -up firefox-58.0/browser/themes/linux/browser.css.1399611 firefox-58.0/browser/themes/linux/browser.css
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    14
--- firefox-58.0/browser/themes/linux/browser.css.1399611	2018-01-11 21:16:54.000000000 +0100
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    15
+++ firefox-58.0/browser/themes/linux/browser.css	2018-01-24 10:57:03.718031950 +0100
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    16
@@ -717,7 +717,7 @@ html|span.ac-emphasize-text-url {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    17
   :root[tabsintitlebar] > #titlebar:-moz-lwtheme {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    18
     visibility: hidden;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    19
   }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    20
-  :root[tabsintitlebar] > #titlebar-content:-moz-lwtheme {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    21
+  :root[tabsintitlebar] #titlebar-content:-moz-lwtheme {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    22
     visibility: visible;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    23
   }
1024
d14085eee2b2 bring back CSD (but not ported yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    24
 
1027
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    25
diff -up firefox-58.0/layout/style/nsMediaFeatures.cpp.1399611 firefox-58.0/layout/style/nsMediaFeatures.cpp
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    26
--- firefox-58.0/layout/style/nsMediaFeatures.cpp.1399611	2018-01-11 21:17:01.000000000 +0100
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    27
+++ firefox-58.0/layout/style/nsMediaFeatures.cpp	2018-01-24 10:57:03.718031950 +0100
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    28
@@ -831,6 +831,42 @@ nsMediaFeatures::features[] = {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    29
     GetSystemMetric
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    30
   },
1024
d14085eee2b2 bring back CSD (but not ported yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    31
 
1027
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    32
+  {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    33
+    &nsGkAtoms::_moz_gtk_csd_available,
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    34
+    nsMediaFeature::eMinMaxNotAllowed,
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    35
+    nsMediaFeature::eBoolInteger,
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    36
+    nsMediaFeature::eNoRequirements,
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    37
+    { &nsGkAtoms::gtk_csd_available },
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    38
+    GetSystemMetric
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    39
+  },
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    40
+
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    41
+  {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    42
+    &nsGkAtoms::_moz_gtk_csd_minimize_button,
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    43
+    nsMediaFeature::eMinMaxNotAllowed,
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    44
+    nsMediaFeature::eBoolInteger,
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    45
+    nsMediaFeature::eNoRequirements,
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    46
+    { &nsGkAtoms::gtk_csd_minimize_button },
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    47
+    GetSystemMetric
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    48
+  },
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    49
+
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    50
+  {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    51
+    &nsGkAtoms::_moz_gtk_csd_maximize_button,
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    52
+    nsMediaFeature::eMinMaxNotAllowed,
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    53
+    nsMediaFeature::eBoolInteger,
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    54
+    nsMediaFeature::eNoRequirements,
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    55
+    { &nsGkAtoms::gtk_csd_maximize_button },
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    56
+    GetSystemMetric
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    57
+  },
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    58
+
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    59
+  {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    60
+    &nsGkAtoms::_moz_gtk_csd_close_button,
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    61
+    nsMediaFeature::eMinMaxNotAllowed,
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    62
+    nsMediaFeature::eBoolInteger,
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    63
+    nsMediaFeature::eNoRequirements,
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    64
+    { &nsGkAtoms::gtk_csd_close_button },
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    65
+    GetSystemMetric
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    66
+  },
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    67
+
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    68
   // Internal -moz-is-glyph media feature: applies only inside SVG glyphs.
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    69
   // Internal because it is really only useful in the user agent anyway
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    70
   //  and therefore not worth standardizing.
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    71
diff -up firefox-58.0/toolkit/modules/moz.build.1399611 firefox-58.0/toolkit/modules/moz.build
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    72
--- firefox-58.0/toolkit/modules/moz.build.1399611	2018-01-11 21:17:05.000000000 +0100
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    73
+++ firefox-58.0/toolkit/modules/moz.build	2018-01-24 10:57:03.718031950 +0100
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    74
@@ -259,7 +259,7 @@ EXTRA_JS_MODULES.sessionstore += [
1024
d14085eee2b2 bring back CSD (but not ported yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    75
 ]
d14085eee2b2 bring back CSD (but not ported yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    76
 
d14085eee2b2 bring back CSD (but not ported yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    77
 DEFINES['INSTALL_COMPACT_THEMES'] = 1
d14085eee2b2 bring back CSD (but not ported yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    78
-if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'cocoa'):
d14085eee2b2 bring back CSD (but not ported yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    79
+if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'cocoa', 'gtk3'):
d14085eee2b2 bring back CSD (but not ported yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    80
     DEFINES['CAN_DRAW_IN_TITLEBAR'] = 1
d14085eee2b2 bring back CSD (but not ported yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    81
 
d14085eee2b2 bring back CSD (but not ported yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    82
 if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'gtk2', 'gtk3'):
1027
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    83
diff -up firefox-58.0/widget/gtk/mozgtk/mozgtk.c.1399611 firefox-58.0/widget/gtk/mozgtk/mozgtk.c
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    84
--- firefox-58.0/widget/gtk/mozgtk/mozgtk.c.1399611	2018-01-11 21:17:06.000000000 +0100
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    85
+++ firefox-58.0/widget/gtk/mozgtk/mozgtk.c	2018-01-24 10:11:58.638648276 +0100
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    86
@@ -391,6 +391,7 @@ STUB(gtk_separator_menu_item_new)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    87
 STUB(gtk_separator_tool_item_new)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    88
 STUB(gtk_settings_get_default)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    89
 STUB(gtk_settings_get_for_screen)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    90
+STUB(gtk_show_uri)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    91
 STUB(gtk_socket_add_id)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    92
 STUB(gtk_socket_get_id)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    93
 STUB(gtk_socket_get_type)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    94
@@ -407,6 +408,7 @@ STUB(gtk_target_list_add_image_targets)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    95
 STUB(gtk_target_list_new)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    96
 STUB(gtk_target_list_unref)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    97
 STUB(gtk_targets_include_image)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    98
+STUB(gtk_targets_include_text)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
    99
 STUB(gtk_target_table_free)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   100
 STUB(gtk_target_table_new_from_list)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   101
 STUB(gtk_text_view_new)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   102
@@ -479,6 +481,7 @@ STUB(gtk_widget_show_all)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   103
 STUB(gtk_widget_size_allocate)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   104
 STUB(gtk_widget_style_get)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   105
 STUB(gtk_widget_unparent)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   106
+STUB(gtk_widget_unrealize)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   107
 STUB(gtk_window_deiconify)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   108
 STUB(gtk_window_fullscreen)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   109
 STUB(gtk_window_get_group)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   110
@@ -582,6 +585,8 @@ STUB(gtk_style_context_set_state)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   111
 STUB(gtk_style_properties_lookup_property)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   112
 STUB(gtk_tree_view_column_get_button)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   113
 STUB(gtk_widget_get_preferred_size)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   114
+STUB(gtk_widget_get_preferred_width)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   115
+STUB(gtk_widget_get_preferred_height)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   116
 STUB(gtk_widget_get_state_flags)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   117
 STUB(gtk_widget_get_style_context)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   118
 STUB(gtk_widget_path_append_type)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   119
diff -up firefox-58.0/widget/gtk/nsLookAndFeel.cpp.1399611 firefox-58.0/widget/gtk/nsLookAndFeel.cpp
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   120
--- firefox-58.0/widget/gtk/nsLookAndFeel.cpp.1399611	2018-01-11 21:17:06.000000000 +0100
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   121
+++ firefox-58.0/widget/gtk/nsLookAndFeel.cpp	2018-01-24 10:57:03.718031950 +0100
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   122
@@ -24,6 +24,7 @@
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   123
 #include "nsStyleConsts.h"
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   124
 #include "gfxFontConstants.h"
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   125
 #include "WidgetUtils.h"
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   126
+#include "nsWindow.h"
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   127
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   128
 #include <dlfcn.h>
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   129
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   130
@@ -740,7 +741,7 @@ GetSystemFontInfo(GtkStyleContext *aStyl
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   131
     // Scale fonts up on HiDPI displays.
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   132
     // This would be done automatically with cairo, but we manually manage
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   133
     // the display scale for platform consistency.
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   134
-    size *= ScreenHelperGTK::GetGTKMonitorScaleFactor();
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   135
+    size *= mozilla::widget::ScreenHelperGTK::GetGTKMonitorScaleFactor();
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   136
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   137
     // |size| is now pixels
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   138
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   139
@@ -1076,17 +1077,13 @@ nsLookAndFeel::EnsureInit()
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   140
     gtk_widget_destroy(window);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   141
     g_object_unref(labelWidget);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   142
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   143
-    // Require GTK 3.20 for client-side decoration support.
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   144
-    mCSDAvailable = gtk_check_version(3, 20, 0) == nullptr;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   145
-    if (mCSDAvailable) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   146
-        mCSDAvailable =
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   147
-            mozilla::Preferences::GetBool("widget.allow-client-side-decoration",
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   148
-                                          false);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   149
-    }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   150
+    // Require GTK 3.10 for GtkHeaderBar support and compatible window manager.
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   151
+    mCSDAvailable = (gtk_check_version(3, 10, 0) == nullptr &&
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   152
+        nsWindow::GetCSDSupportLevel() != nsWindow::CSD_SUPPORT_NONE);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   153
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   154
     // We need to initialize whole CSD config explicitly because it's queried
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   155
     // as -moz-gtk* media features.
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   156
-    mCSDCloseButton = false;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   157
+    mCSDCloseButton = true;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   158
     mCSDMaximizeButton = false;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   159
     mCSDMinimizeButton = false;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   160
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   161
@@ -1095,18 +1092,24 @@ nsLookAndFeel::EnsureInit()
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   162
           (const gchar* (*)(GtkWidget*))
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   163
           dlsym(RTLD_DEFAULT, "gtk_header_bar_get_decoration_layout");
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   164
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   165
-        GtkWidget* headerBar = GetWidget(MOZ_GTK_HEADER_BAR);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   166
-        const gchar* decorationLayout =
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   167
-            sGtkHeaderBarGetDecorationLayoutPtr(headerBar);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   168
-        if (!decorationLayout) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   169
-            g_object_get(settings, "gtk-decoration-layout", &decorationLayout,
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   170
-                         nullptr);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   171
-        }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   172
+        if (sGtkHeaderBarGetDecorationLayoutPtr) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   173
+            GtkWidget* headerBar = GetWidget(MOZ_GTK_HEADER_BAR);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   174
+            const gchar* decorationLayout =
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   175
+                sGtkHeaderBarGetDecorationLayoutPtr(headerBar);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   176
+            if (!decorationLayout) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   177
+                g_object_get(settings, "gtk-decoration-layout",
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   178
+                             &decorationLayout,
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   179
+                             nullptr);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   180
+            }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   181
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   182
-        if (decorationLayout) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   183
-            mCSDCloseButton = (strstr(decorationLayout, "close") != nullptr);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   184
-            mCSDMaximizeButton = (strstr(decorationLayout, "maximize") != nullptr);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   185
-            mCSDMinimizeButton = (strstr(decorationLayout, "minimize") != nullptr);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   186
+            if (decorationLayout) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   187
+                mCSDCloseButton =
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   188
+                    (strstr(decorationLayout, "close") != nullptr);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   189
+                mCSDMaximizeButton =
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   190
+                    (strstr(decorationLayout, "maximize") != nullptr);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   191
+                mCSDMinimizeButton =
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   192
+                    (strstr(decorationLayout, "minimize") != nullptr);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   193
+            }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   194
         }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   195
     }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   196
 }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   197
diff -up firefox-58.0/widget/gtk/nsNativeThemeGTK.cpp.1399611 firefox-58.0/widget/gtk/nsNativeThemeGTK.cpp
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   198
--- firefox-58.0/widget/gtk/nsNativeThemeGTK.cpp.1399611	2018-01-11 21:17:06.000000000 +0100
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   199
+++ firefox-58.0/widget/gtk/nsNativeThemeGTK.cpp	2018-01-24 10:57:03.719031946 +0100
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   200
@@ -29,6 +29,7 @@
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   201
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   202
 #include <gdk/gdkprivate.h>
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   203
 #include <gtk/gtk.h>
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   204
+#include <gtk/gtkx.h>
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   205
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   206
 #include "gfxContext.h"
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   207
 #include "gfxPlatformGtk.h"
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   208
@@ -51,6 +52,7 @@
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   209
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   210
 using namespace mozilla;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   211
 using namespace mozilla::gfx;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   212
+using namespace mozilla::widget;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   213
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   214
 NS_IMPL_ISUPPORTS_INHERITED(nsNativeThemeGTK, nsNativeTheme, nsITheme,
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   215
                                                              nsIObserver)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   216
@@ -1375,6 +1377,10 @@ nsNativeThemeGTK::GetWidgetPadding(nsDev
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   217
   switch (aWidgetType) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   218
     case NS_THEME_BUTTON_FOCUS:
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   219
     case NS_THEME_TOOLBARBUTTON:
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   220
+    case NS_THEME_WINDOW_BUTTON_CLOSE:
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   221
+    case NS_THEME_WINDOW_BUTTON_MINIMIZE:
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   222
+    case NS_THEME_WINDOW_BUTTON_MAXIMIZE:
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   223
+    case NS_THEME_WINDOW_BUTTON_RESTORE:
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   224
     case NS_THEME_DUALBUTTON:
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   225
     case NS_THEME_TAB_SCROLL_ARROW_BACK:
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   226
     case NS_THEME_TAB_SCROLL_ARROW_FORWARD:
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   227
diff -up firefox-58.0/widget/gtk/nsWindow.cpp.1399611 firefox-58.0/widget/gtk/nsWindow.cpp
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   228
--- firefox-58.0/widget/gtk/nsWindow.cpp.1399611	2018-01-24 10:57:03.714031963 +0100
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   229
+++ firefox-58.0/widget/gtk/nsWindow.cpp	2018-01-24 10:57:03.720031943 +0100
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   230
@@ -178,13 +178,8 @@ static int    is_parent_ungrab_enter(Gdk
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   231
 static int    is_parent_grab_leave(GdkEventCrossing *aEvent);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   232
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   233
 /* callbacks from widgets */
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   234
-#if (MOZ_WIDGET_GTK == 2)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   235
-static gboolean expose_event_cb           (GtkWidget *widget,
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   236
-                                           GdkEventExpose *event);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   237
-#else
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   238
 static gboolean expose_event_cb           (GtkWidget *widget,
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   239
                                            cairo_t *rect);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   240
-#endif
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   241
 static gboolean configure_event_cb        (GtkWidget *widget,
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   242
                                            GdkEventConfigure *event);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   243
 static void     container_unrealize_cb    (GtkWidget *widget);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   244
@@ -230,11 +225,9 @@ static void     screen_composited_change
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   245
 static void     widget_composited_changed_cb     (GtkWidget* widget,
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   246
                                                   gpointer user_data);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   247
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   248
-#if (MOZ_WIDGET_GTK == 3)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   249
 static void     scale_changed_cb          (GtkWidget* widget,
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   250
                                            GParamSpec* aPSpec,
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   251
                                            gpointer aPointer);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   252
-#endif
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   253
 #if GTK_CHECK_VERSION(3,4,0)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   254
 static gboolean touch_event_cb            (GtkWidget* aWidget,
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   255
                                            GdkEventTouch* aEvent);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   256
@@ -390,7 +383,7 @@ static guint gButtonState;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   257
 static inline int32_t
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   258
 GetBitmapStride(int32_t width)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   259
 {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   260
-#if defined(MOZ_X11) || (MOZ_WIDGET_GTK == 2)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   261
+#if defined(MOZ_X11)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   262
   return (width+7)/8;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   263
 #else
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   264
   return cairo_format_stride_for_width(CAIRO_FORMAT_A1, width);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   265
@@ -458,11 +451,23 @@ nsWindow::nsWindow()
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   266
     mXVisual  = nullptr;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   267
     mXDepth   = 0;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   268
 #endif /* MOZ_X11 */
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   269
+
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   270
     if (!gGlobalsInitialized) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   271
         gGlobalsInitialized = true;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   272
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   273
         // It's OK if either of these fail, but it may not be one day.
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   274
         initialize_prefs();
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   275
+
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   276
+#ifdef MOZ_WAYLAND
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   277
+        // Wayland provides clipboard data to application on focus-in event
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   278
+        // so we need to init our clipboard hooks before we create window
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   279
+        // and get focus.
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   280
+        if (!mIsX11Display) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   281
+            nsCOMPtr<nsIClipboard> clipboard =
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   282
+                do_GetService("@mozilla.org/widget/clipboard;1");
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   283
+            NS_ASSERTION(clipboard, "Failed to init clipboard!");
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   284
+        }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   285
+#endif
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   286
     }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   287
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   288
     mLastMotionPressure = 0;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   289
@@ -1521,7 +1526,7 @@ nsWindow::UpdateClientOffset()
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   290
 {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   291
     AUTO_PROFILER_LABEL("nsWindow::UpdateClientOffset", GRAPHICS);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   292
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   293
-    if (!mIsTopLevel || !mShell || !mGdkWindow || !mIsX11Display ||
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   294
+    if (!mIsTopLevel || !mShell || !mIsX11Display ||
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   295
         gtk_window_get_window_type(GTK_WINDOW(mShell)) == GTK_WINDOW_POPUP) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   296
         mClientOffset = nsIntPoint(0, 0);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   297
         return;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   298
@@ -1534,7 +1539,7 @@ nsWindow::UpdateClientOffset()
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   299
     int length_returned;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   300
     long *frame_extents;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   301
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   302
-    if (!gdk_property_get(mGdkWindow,
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   303
+    if (!gdk_property_get(gtk_widget_get_window(mShell),
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   304
                           gdk_atom_intern ("_NET_FRAME_EXTENTS", FALSE),
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   305
                           cardinal_atom,
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   306
                           0, // offset
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   307
@@ -1710,16 +1715,22 @@ nsWindow::GetNativeData(uint32_t aDataTy
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   308
 #ifdef MOZ_X11
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   309
         GdkDisplay* gdkDisplay = gdk_display_get_default();
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   310
         if (GDK_IS_X11_DISPLAY(gdkDisplay)) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   311
-          return GDK_DISPLAY_XDISPLAY(gdkDisplay);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   312
+            return GDK_DISPLAY_XDISPLAY(gdkDisplay);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   313
         }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   314
 #endif /* MOZ_X11 */
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   315
+        // Don't bother to return native display on Wayland as it's for
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   316
+        // X11 only NPAPI plugins.
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   317
         return nullptr;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   318
     }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   319
     case NS_NATIVE_SHELLWIDGET:
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   320
         return GetToplevelWidget();
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   321
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   322
     case NS_NATIVE_SHAREABLE_WINDOW:
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   323
-        return (void *) GDK_WINDOW_XID(gdk_window_get_toplevel(mGdkWindow));
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   324
+        if (mIsX11Display) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   325
+            return (void *) GDK_WINDOW_XID(gdk_window_get_toplevel(mGdkWindow));
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   326
+        }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   327
+        NS_WARNING("nsWindow::GetNativeData(): NS_NATIVE_SHAREABLE_WINDOW is not handled on Wayland!");
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   328
+        return nullptr;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   329
     case NS_RAW_NATIVE_IME_CONTEXT: {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   330
         void* pseudoIMEContext = GetPseudoIMEContext();
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   331
         if (pseudoIMEContext) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   332
@@ -1800,18 +1811,18 @@ nsWindow::SetIcon(const nsAString& aIcon
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   333
         // The last two entries (for the old XPM format) will be ignored unless
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   334
         // no icons are found using other suffixes. XPM icons are deprecated.
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   335
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   336
-        const char extensions[6][7] = { ".png", "16.png", "32.png", "48.png",
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   337
-                                    ".xpm", "16.xpm" };
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   338
+        const char16_t extensions[9][8] = { u".png", u"16.png", u"32.png",
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   339
+                                            u"48.png", u"64.png", u"128.png",
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   340
+                                            u"256.png",
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   341
+                                            u".xpm", u"16.xpm" };
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   342
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   343
         for (uint32_t i = 0; i < ArrayLength(extensions); i++) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   344
             // Don't bother looking for XPM versions if we found a PNG.
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   345
             if (i == ArrayLength(extensions) - 2 && foundIcon)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   346
                 break;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   347
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   348
-            nsAutoString extension;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   349
-            extension.AppendASCII(extensions[i]);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   350
-
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   351
-            ResolveIconName(aIconSpec, extension, getter_AddRefs(iconFile));
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   352
+            ResolveIconName(aIconSpec, nsDependentString(extensions[i]),
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   353
+                            getter_AddRefs(iconFile));
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   354
             if (iconFile) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   355
                 iconFile->GetNativePath(path);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   356
                 GdkPixbuf *icon = gdk_pixbuf_new_from_file(path.get(), nullptr);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   357
@@ -2024,30 +2035,6 @@ gdk_window_flash(GdkWindow *    aGdkWind
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   358
 #endif // DEBUG
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   359
 #endif
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   360
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   361
-#if (MOZ_WIDGET_GTK == 2)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   362
-static bool
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   363
-ExtractExposeRegion(LayoutDeviceIntRegion& aRegion, GdkEventExpose* aEvent)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   364
-{
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   365
-  GdkRectangle* rects;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   366
-  gint nrects;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   367
-  gdk_region_get_rectangles(aEvent->region, &rects, &nrects);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   368
-
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   369
-  if (nrects > MAX_RECTS_IN_REGION) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   370
-      // Just use the bounding box
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   371
-      rects[0] = aEvent->area;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   372
-      nrects = 1;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   373
-  }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   374
-
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   375
-  for (GdkRectangle* r = rects; r < rects + nrects; r++) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   376
-      aRegion.Or(aRegion, LayoutDeviceIntRect(r->x, r->y, r->width, r->height));
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   377
-      LOGDRAW(("\t%d %d %d %d\n", r->x, r->y, r->width, r->height));
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   378
-  }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   379
-
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   380
-  g_free(rects);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   381
-  return true;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   382
-}
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   383
-
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   384
-#else
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   385
 # ifdef cairo_copy_clip_rectangle_list
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   386
 #  error "Looks like we're including Mozilla's cairo instead of system cairo"
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   387
 # endif
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   388
@@ -2069,15 +2056,9 @@ ExtractExposeRegion(LayoutDeviceIntRegio
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   389
   cairo_rectangle_list_destroy(rects);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   390
   return true;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   391
 }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   392
-#endif
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   393
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   394
-#if (MOZ_WIDGET_GTK == 2)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   395
-gboolean
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   396
-nsWindow::OnExposeEvent(GdkEventExpose *aEvent)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   397
-#else
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   398
 gboolean
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   399
 nsWindow::OnExposeEvent(cairo_t *cr)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   400
-#endif
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   401
 {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   402
     // Send any pending resize events so that layout can update.
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   403
     // May run event loop.
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   404
@@ -2096,11 +2077,7 @@ nsWindow::OnExposeEvent(cairo_t *cr)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   405
         return FALSE;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   406
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   407
     LayoutDeviceIntRegion exposeRegion;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   408
-#if (MOZ_WIDGET_GTK == 2)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   409
-    if (!ExtractExposeRegion(exposeRegion, aEvent)) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   410
-#else
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   411
     if (!ExtractExposeRegion(exposeRegion, cr)) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   412
-#endif
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   413
         return FALSE;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   414
     }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   415
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   416
@@ -2141,7 +2118,7 @@ nsWindow::OnExposeEvent(cairo_t *cr)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   417
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   418
     LOGDRAW(("sending expose event [%p] %p 0x%lx (rects follow):\n",
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   419
              (void *)this, (void *)mGdkWindow,
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   420
-             gdk_x11_window_get_xid(mGdkWindow)));
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   421
+             mIsX11Display ? gdk_x11_window_get_xid(mGdkWindow) : 0));
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   422
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   423
     // Our bounds may have changed after calling WillPaintWindow.  Clip
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   424
     // to the new bounds here.  The region is relative to this
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   425
@@ -2304,19 +2281,11 @@ nsWindow::OnExposeEvent(cairo_t *cr)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   426
     listener->DidPaintWindow();
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   427
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   428
     // Synchronously flush any new dirty areas
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   429
-#if (MOZ_WIDGET_GTK == 2)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   430
-    GdkRegion* dirtyArea = gdk_window_get_update_area(mGdkWindow);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   431
-#else
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   432
     cairo_region_t* dirtyArea = gdk_window_get_update_area(mGdkWindow);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   433
-#endif
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   434
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   435
     if (dirtyArea) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   436
         gdk_window_invalidate_region(mGdkWindow, dirtyArea, false);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   437
-#if (MOZ_WIDGET_GTK == 2)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   438
-        gdk_region_destroy(dirtyArea);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   439
-#else
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   440
         cairo_region_destroy(dirtyArea);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   441
-#endif
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   442
         gdk_window_process_updates(mGdkWindow, false);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   443
     }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   444
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   445
@@ -2466,7 +2435,7 @@ nsWindow::OnSizeAllocate(GtkAllocation *
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   446
     mBounds.SizeTo(size);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   447
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   448
 #ifdef MOZ_X11
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   449
-    // Notify the X11CompositorWidget of a ClientSizeChange
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   450
+    // Notify the GtkCompositorWidget of a ClientSizeChange
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   451
     if (mCompositorWidgetDelegate) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   452
       mCompositorWidgetDelegate->NotifyClientSizeChanged(GetClientSize());
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   453
     }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   454
@@ -3550,21 +3519,9 @@ CreateGdkWindow(GdkWindow *parent, GtkWi
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   455
     attributes.visual = gtk_widget_get_visual(widget);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   456
     attributes.window_type = GDK_WINDOW_CHILD;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   457
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   458
-#if (MOZ_WIDGET_GTK == 2)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   459
-    attributes_mask |= GDK_WA_COLORMAP;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   460
-    attributes.colormap = gtk_widget_get_colormap(widget);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   461
-#endif
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   462
-
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   463
     GdkWindow *window = gdk_window_new(parent, &attributes, attributes_mask);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   464
     gdk_window_set_user_data(window, widget);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   465
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   466
-// GTK3 TODO?
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   467
-#if (MOZ_WIDGET_GTK == 2)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   468
-    /* set the default pixmap to None so that you don't end up with the
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   469
-       gtk default which is BlackPixel. */
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   470
-    gdk_window_set_back_pixmap(window, nullptr, FALSE);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   471
-#endif
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   472
-
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   473
     return window;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   474
 }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   475
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   476
@@ -3653,10 +3610,14 @@ nsWindow::Create(nsIWidget* aParent,
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   477
         // which will use a Window with the override-redirect attribute
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   478
         // (for temporary windows).
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   479
         // For long-lived windows, their stacking order is managed by the
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   480
-        // window manager, as indicated by GTK_WINDOW_TOPLEVEL ...
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   481
-        GtkWindowType type =
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   482
-            mWindowType != eWindowType_popup || aInitData->mNoAutoHide ?
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   483
-              GTK_WINDOW_TOPLEVEL : GTK_WINDOW_POPUP;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   484
+        // window manager, as indicated by GTK_WINDOW_TOPLEVEL.
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   485
+        // For Wayland we have to always use GTK_WINDOW_POPUP to control
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   486
+        // popup window position.
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   487
+        GtkWindowType type = GTK_WINDOW_TOPLEVEL;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   488
+        if (mWindowType == eWindowType_popup) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   489
+            type = (mIsX11Display && aInitData->mNoAutoHide) ?
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   490
+                GTK_WINDOW_TOPLEVEL : GTK_WINDOW_POPUP;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   491
+        }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   492
         mShell = gtk_window_new(type);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   493
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   494
         bool useAlphaVisual = (mWindowType == eWindowType_popup &&
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   495
@@ -3674,13 +3635,8 @@ nsWindow::Create(nsIWidget* aParent,
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   496
         if (useAlphaVisual) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   497
             GdkScreen *screen = gtk_widget_get_screen(mShell);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   498
             if (gdk_screen_is_composited(screen)) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   499
-#if (MOZ_WIDGET_GTK == 2)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   500
-                GdkColormap *colormap = gdk_screen_get_rgba_colormap(screen);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   501
-                gtk_widget_set_colormap(mShell, colormap);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   502
-#else
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   503
                 GdkVisual *visual = gdk_screen_get_rgba_visual(screen);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   504
                 gtk_widget_set_visual(mShell, visual);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   505
-#endif
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   506
             }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   507
         }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   508
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   509
@@ -3728,9 +3684,11 @@ nsWindow::Create(nsIWidget* aParent,
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   510
 #ifdef MOZ_X11
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   511
                 // ... but when the window manager offers focus through
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   512
                 // WM_TAKE_FOCUS, focus is requested on the parent window.
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   513
-                gtk_widget_realize(mShell);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   514
-                gdk_window_add_filter(gtk_widget_get_window(mShell),
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   515
-                                      popup_take_focus_filter, nullptr);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   516
+                if (mIsX11Display) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   517
+                    gtk_widget_realize(mShell);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   518
+                    gdk_window_add_filter(gtk_widget_get_window(mShell),
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   519
+                                          popup_take_focus_filter, nullptr);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   520
+                }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   521
 #endif
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   522
             }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   523
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   524
@@ -3742,7 +3700,11 @@ nsWindow::Create(nsIWidget* aParent,
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   525
             else {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   526
                 switch (aInitData->mPopupHint) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   527
                     case ePopupTypeMenu:
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   528
-                        gtkTypeHint = GDK_WINDOW_TYPE_HINT_POPUP_MENU;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   529
+                        // Use GDK_WINDOW_TYPE_HINT_UTILITY on Wayland which
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   530
+                        // guides Gtk to create the popup as subsurface
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   531
+                        // instead of xdg_shell popup (see Bug 1423598).
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   532
+                        gtkTypeHint = mIsX11Display ? GDK_WINDOW_TYPE_HINT_POPUP_MENU :
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   533
+                                                      GDK_WINDOW_TYPE_HINT_UTILITY;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   534
                         break;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   535
                     case ePopupTypeTooltip:
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   536
                         gtkTypeHint = GDK_WINDOW_TYPE_HINT_TOOLTIP;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   537
@@ -3769,13 +3731,11 @@ nsWindow::Create(nsIWidget* aParent,
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   538
             gtk_window_group_add_window(group, GTK_WINDOW(mShell));
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   539
             g_object_unref(group);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   540
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   541
-            if (GetCSDSupportLevel() != CSD_SUPPORT_NONE) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   542
-                int32_t isCSDAvailable = false;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   543
-                nsresult rv = LookAndFeel::GetInt(LookAndFeel::eIntID_GTKCSDAvailable,
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   544
-                                                &isCSDAvailable);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   545
-                if (NS_SUCCEEDED(rv)) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   546
-                   mIsCSDAvailable = isCSDAvailable;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   547
-                }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   548
+            int32_t isCSDAvailable = false;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   549
+            nsresult rv = LookAndFeel::GetInt(LookAndFeel::eIntID_GTKCSDAvailable,
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   550
+                                              &isCSDAvailable);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   551
+            if (NS_SUCCEEDED(rv)) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   552
+               mIsCSDAvailable = isCSDAvailable;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   553
             }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   554
         }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   555
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   556
@@ -3783,7 +3743,6 @@ nsWindow::Create(nsIWidget* aParent,
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   557
         GtkWidget *container = moz_container_new();
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   558
         mContainer = MOZ_CONTAINER(container);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   559
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   560
-#if (MOZ_WIDGET_GTK == 3)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   561
         // "csd" style is set when widget is realized so we need to call
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   562
         // it explicitly now.
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   563
         gtk_widget_realize(mShell);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   564
@@ -3793,16 +3752,22 @@ nsWindow::Create(nsIWidget* aParent,
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   565
          * 1) We're running on Gtk+ without client side decorations.
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   566
          *    Content is rendered to mShell window and we listen
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   567
          *    to the Gtk+ events on mShell
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   568
-         * 2) We're running on Gtk+ > 3.20 and client side decorations
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   569
+         * 2) We're running on Gtk+ and client side decorations
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   570
          *    are drawn by Gtk+ to mShell. Content is rendered to mContainer
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   571
          *    and we listen to the Gtk+ events on mContainer.
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   572
+         * 3) We're running on Wayland. All gecko content is rendered
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   573
+         *    to mContainer and we listen to the Gtk+ events on mContainer.
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   574
          */
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   575
         GtkStyleContext* style = gtk_widget_get_style_context(mShell);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   576
-        drawToContainer = gtk_style_context_has_class(style, "csd");
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   577
-#endif
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   578
+        drawToContainer =
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   579
+            !mIsX11Display ||
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   580
+            (mIsCSDAvailable && GetCSDSupportLevel() == CSD_SUPPORT_FLAT ) ||
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   581
+            gtk_style_context_has_class(style, "csd");
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   582
         eventWidget = (drawToContainer) ? container : mShell;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   583
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   584
         gtk_widget_add_events(eventWidget, kEvents);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   585
+        if (drawToContainer)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   586
+            gtk_widget_add_events(mShell, GDK_PROPERTY_CHANGE_MASK);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   587
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   588
         // Prevent GtkWindow from painting a background to avoid flickering.
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   589
         gtk_widget_set_app_paintable(eventWidget, TRUE);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   590
@@ -3839,19 +3804,11 @@ nsWindow::Create(nsIWidget* aParent,
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   591
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   592
             // If the popup ignores mouse events, set an empty input shape.
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   593
             if (aInitData->mMouseTransparent) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   594
-#if (MOZ_WIDGET_GTK == 2)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   595
-              GdkRectangle rect = { 0, 0, 0, 0 };
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   596
-              GdkRegion *region = gdk_region_rectangle(&rect);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   597
-
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   598
-              gdk_window_input_shape_combine_region(mGdkWindow, region, 0, 0);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   599
-              gdk_region_destroy(region);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   600
-#else
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   601
               cairo_rectangle_int_t rect = { 0, 0, 0, 0 };
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   602
               cairo_region_t *region = cairo_region_create_rectangle(&rect);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   603
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   604
               gdk_window_input_shape_combine_region(mGdkWindow, region, 0, 0);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   605
               cairo_region_destroy(region);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   606
-#endif
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   607
             }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   608
         }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   609
     }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   610
@@ -3893,6 +3850,12 @@ nsWindow::Create(nsIWidget* aParent,
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   611
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   612
     // label the drawing window with this object so we can find our way home
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   613
     g_object_set_data(G_OBJECT(mGdkWindow), "nsWindow", this);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   614
+    if (drawToContainer) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   615
+        // Also label mShell toplevel window,
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   616
+        // property_notify_event_cb callback also needs to find its way home
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   617
+        g_object_set_data(G_OBJECT(gtk_widget_get_window(mShell)),
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   618
+                          "nsWindow", this);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   619
+    }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   620
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   621
     if (mContainer)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   622
         g_object_set_data(G_OBJECT(mContainer), "nsWindow", this);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   623
@@ -3910,12 +3873,12 @@ nsWindow::Create(nsIWidget* aParent,
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   624
                          G_CALLBACK(window_state_event_cb), nullptr);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   625
         g_signal_connect(mShell, "check-resize",
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   626
                          G_CALLBACK(check_resize_cb), nullptr);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   627
-
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   628
-        GdkScreen *screen = gtk_widget_get_screen(mShell);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   629
-
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   630
         g_signal_connect(mShell, "composited-changed",
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   631
                          G_CALLBACK(widget_composited_changed_cb), nullptr);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   632
+        g_signal_connect(mShell, "property-notify-event",
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   633
+                         G_CALLBACK(property_notify_event_cb), nullptr);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   634
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   635
+        GdkScreen *screen = gtk_widget_get_screen(mShell);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   636
         if (!g_signal_handler_find(screen, G_SIGNAL_MATCH_FUNC,
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   637
                                    0, 0, nullptr,
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   638
                                    FuncToGpointer(screen_composited_changed_cb), 0)) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   639
@@ -3940,21 +3903,14 @@ nsWindow::Create(nsIWidget* aParent,
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   640
                                G_CALLBACK(size_allocate_cb), nullptr);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   641
         g_signal_connect(mContainer, "hierarchy-changed",
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   642
                          G_CALLBACK(hierarchy_changed_cb), nullptr);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   643
-#if (MOZ_WIDGET_GTK == 3)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   644
         g_signal_connect(mContainer, "notify::scale-factor",
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   645
                          G_CALLBACK(scale_changed_cb), nullptr);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   646
-#endif
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   647
         // Initialize mHasMappedToplevel.
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   648
         hierarchy_changed_cb(GTK_WIDGET(mContainer), nullptr);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   649
         // Expose, focus, key, and drag events are sent even to GTK_NO_WINDOW
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   650
         // widgets.
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   651
-#if (MOZ_WIDGET_GTK == 2)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   652
-        g_signal_connect(mContainer, "expose_event",
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   653
-                         G_CALLBACK(expose_event_cb), nullptr);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   654
-#else
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   655
         g_signal_connect(G_OBJECT(mContainer), "draw",
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   656
                          G_CALLBACK(expose_event_cb), nullptr);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   657
-#endif
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   658
         g_signal_connect(mContainer, "focus_in_event",
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   659
                          G_CALLBACK(focus_in_event_cb), nullptr);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   660
         g_signal_connect(mContainer, "focus_out_event",
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   661
@@ -4006,10 +3962,6 @@ nsWindow::Create(nsIWidget* aParent,
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   662
     }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   663
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   664
     if (eventWidget) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   665
-#if (MOZ_WIDGET_GTK == 2)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   666
-        // Don't let GTK mess with the shapes of our GdkWindows
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   667
-        GTK_PRIVATE_SET_FLAG(eventWidget, GTK_HAS_SHAPE_MASK);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   668
-#endif
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   669
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   670
         // These events are sent to the owning widget of the relevant window
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   671
         // and propagate up to the first widget that handles the events, so we
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   672
@@ -4025,8 +3977,6 @@ nsWindow::Create(nsIWidget* aParent,
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   673
                          G_CALLBACK(button_press_event_cb), nullptr);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   674
         g_signal_connect(eventWidget, "button-release-event",
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   675
                          G_CALLBACK(button_release_event_cb), nullptr);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   676
-        g_signal_connect(eventWidget, "property-notify-event",
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   677
-                         G_CALLBACK(property_notify_event_cb), nullptr);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   678
         g_signal_connect(eventWidget, "scroll-event",
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   679
                          G_CALLBACK(scroll_event_cb), nullptr);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   680
 #if GTK_CHECK_VERSION(3,4,0)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   681
@@ -4039,7 +3989,7 @@ nsWindow::Create(nsIWidget* aParent,
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   682
     if (mShell) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   683
         LOG(("\tmShell %p mContainer %p mGdkWindow %p 0x%lx\n",
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   684
              mShell, mContainer, mGdkWindow,
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   685
-             gdk_x11_window_get_xid(mGdkWindow)));
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   686
+             mIsX11Display ? gdk_x11_window_get_xid(mGdkWindow) : 0));
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   687
     } else if (mContainer) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   688
         LOG(("\tmContainer %p mGdkWindow %p\n", mContainer, mGdkWindow));
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   689
     }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   690
@@ -4063,8 +4013,12 @@ nsWindow::Create(nsIWidget* aParent,
1024
d14085eee2b2 bring back CSD (but not ported yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   691
 
1027
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   692
       mSurfaceProvider.Initialize(mXDisplay, mXWindow, mXVisual, mXDepth);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   693
     }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   694
+#ifdef MOZ_WAYLAND
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   695
+    else if (!mIsX11Display) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   696
+      mSurfaceProvider.Initialize(this);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   697
+    }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   698
+#endif
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   699
 #endif
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   700
-
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   701
     return NS_OK;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   702
 }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   703
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   704
@@ -4099,7 +4053,8 @@ nsWindow::SetWindowClass(const nsAString
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   705
   res_name[0] = toupper(res_name[0]);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   706
   if (!role) role = res_name;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   707
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   708
-  gdk_window_set_role(mGdkWindow, role);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   709
+  GdkWindow* gdkWindow = gtk_widget_get_window(mShell);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   710
+  gdk_window_set_role(gdkWindow, role);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   711
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   712
 #ifdef MOZ_X11
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   713
   if (mIsX11Display) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   714
@@ -4115,7 +4070,7 @@ nsWindow::SetWindowClass(const nsAString
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   715
       // a warning & refuses to make the change.
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   716
       GdkDisplay *display = gdk_display_get_default();
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   717
       XSetClassHint(GDK_DISPLAY_XDISPLAY(display),
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   718
-                    gdk_x11_window_get_xid(mGdkWindow),
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   719
+                    gdk_x11_window_get_xid(gdkWindow),
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   720
                     class_hint);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   721
       XFree(class_hint);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   722
   }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   723
@@ -4164,7 +4119,7 @@ nsWindow::NativeResize()
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   724
     }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   725
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   726
 #ifdef MOZ_X11
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   727
-    // Notify the X11CompositorWidget of a ClientSizeChange
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   728
+    // Notify the GtkCompositorWidget of a ClientSizeChange
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   729
     // This is different than OnSizeAllocate to catch initial sizing
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   730
     if (mCompositorWidgetDelegate) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   731
       mCompositorWidgetDelegate->NotifyClientSizeChanged(GetClientSize());
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   732
@@ -4220,7 +4175,7 @@ nsWindow::NativeMoveResize()
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   733
     }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   734
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   735
 #ifdef MOZ_X11
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   736
-    // Notify the X11CompositorWidget of a ClientSizeChange
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   737
+    // Notify the GtkCompositorWidget of a ClientSizeChange
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   738
     // This is different than OnSizeAllocate to catch initial sizing
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   739
     if (mCompositorWidgetDelegate) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   740
       mCompositorWidgetDelegate->NotifyClientSizeChanged(GetClientSize());
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   741
@@ -4529,17 +4484,6 @@ nsWindow::SetWindowClipRegion(const nsTA
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   742
     if (!mGdkWindow)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   743
         return NS_OK;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   744
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   745
-#if (MOZ_WIDGET_GTK == 2)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   746
-    GdkRegion *region = gdk_region_new(); // aborts on OOM
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   747
-    for (uint32_t i = 0; i < newRects->Length(); ++i) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   748
-        const LayoutDeviceIntRect& r = newRects->ElementAt(i);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   749
-        GdkRectangle rect = { r.x, r.y, r.width, r.height };
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   750
-        gdk_region_union_with_rect(region, &rect);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   751
-    }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   752
-
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   753
-    gdk_window_shape_combine_region(mGdkWindow, region, 0, 0);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   754
-    gdk_region_destroy(region);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   755
-#else
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   756
     cairo_region_t *region = cairo_region_create();
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   757
     for (uint32_t i = 0; i < newRects->Length(); ++i) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   758
         const LayoutDeviceIntRect& r = newRects->ElementAt(i);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   759
@@ -4549,7 +4493,6 @@ nsWindow::SetWindowClipRegion(const nsTA
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   760
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   761
     gdk_window_shape_combine_region(mGdkWindow, region, 0, 0);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   762
     cairo_region_destroy(region);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   763
-#endif
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   764
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   765
     return NS_OK;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   766
 }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   767
@@ -4658,17 +4601,6 @@ nsWindow::ApplyTransparencyBitmap()
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   768
                       maskPixmap, ShapeSet);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   769
     XFreePixmap(xDisplay, maskPixmap);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   770
 #else
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   771
-#if (MOZ_WIDGET_GTK == 2)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   772
-    gtk_widget_reset_shapes(mShell);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   773
-    GdkBitmap* maskBitmap = gdk_bitmap_create_from_data(mGdkWindow,
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   774
-            mTransparencyBitmap,
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   775
-            mTransparencyBitmapWidth, mTransparencyBitmapHeight);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   776
-    if (!maskBitmap)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   777
-        return;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   778
-
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   779
-    gtk_widget_shape_combine_mask(mShell, maskBitmap, 0, 0);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   780
-    g_object_unref(maskBitmap);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   781
-#else
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   782
     cairo_surface_t *maskBitmap;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   783
     maskBitmap = cairo_image_surface_create_for_data((unsigned char*)mTransparencyBitmap,
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   784
                                                      CAIRO_FORMAT_A1,
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   785
@@ -4682,7 +4614,6 @@ nsWindow::ApplyTransparencyBitmap()
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   786
     gtk_widget_shape_combine_region(mShell, maskRegion);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   787
     cairo_region_destroy(maskRegion);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   788
     cairo_surface_destroy(maskBitmap);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   789
-#endif // MOZ_WIDGET_GTK == 2
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   790
 #endif // MOZ_X11
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   791
 }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   792
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   793
@@ -4779,6 +4710,12 @@ nsWindow::GrabPointer(guint32 aTime)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   794
     if (!mGdkWindow)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   795
         return;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   796
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   797
+    if (!mIsX11Display) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   798
+        // Don't to the grab on Wayland as it causes a regression
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   799
+        // from Bug 1377084.
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   800
+        return;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   801
+    }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   802
+
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   803
     gint retval;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   804
     retval = gdk_pointer_grab(mGdkWindow, TRUE,
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   805
                               (GdkEventMask)(GDK_BUTTON_PRESS_MASK |
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   806
@@ -4812,6 +4749,13 @@ nsWindow::ReleaseGrabs(void)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   807
     LOG(("ReleaseGrabs\n"));
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   808
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   809
     mRetryPointerGrab = false;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   810
+
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   811
+    if (!mIsX11Display) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   812
+        // Don't to the ungrab on Wayland as it causes a regression
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   813
+        // from Bug 1377084.
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   814
+        return;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   815
+    }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   816
+
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   817
     gdk_pointer_ungrab(GDK_CURRENT_TIME);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   818
 }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   819
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   820
@@ -5058,7 +5002,7 @@ nsWindow::MakeFullScreen(bool aFullScree
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   821
     LOG(("nsWindow::MakeFullScreen [%p] aFullScreen %d\n",
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   822
          (void *)this, aFullScreen));
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   823
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   824
-    if (!IsFullscreenSupported(mShell)) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   825
+    if (mIsX11Display && !IsFullscreenSupported(mShell)) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   826
         return NS_ERROR_NOT_AVAILABLE;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   827
     }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   828
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   829
@@ -5080,7 +5024,7 @@ nsWindow::MakeFullScreen(bool aFullScree
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   830
 }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   831
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   832
 void
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   833
-nsWindow::HideWindowChrome(bool aShouldHide)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   834
+nsWindow::SetWindowDecoration(nsBorderStyle aStyle)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   835
 {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   836
     if (!mShell) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   837
         // Pass the request to the toplevel window
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   838
@@ -5092,30 +5036,29 @@ nsWindow::HideWindowChrome(bool aShouldH
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   839
         if (!topWindow)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   840
             return;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   841
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   842
-        topWindow->HideWindowChrome(aShouldHide);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   843
+        topWindow->SetWindowDecoration(aStyle);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   844
         return;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   845
     }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   846
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   847
+    // We can't use mGdkWindow directly here as it can be
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   848
+    // derived from mContainer which is not a top-level GdkWindow.
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   849
+    GdkWindow *window = gtk_widget_get_window(mShell);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   850
+
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   851
     // Sawfish, metacity, and presumably other window managers get
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   852
     // confused if we change the window decorations while the window
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   853
     // is visible.
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   854
     bool wasVisible = false;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   855
-    if (gdk_window_is_visible(mGdkWindow)) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   856
-        gdk_window_hide(mGdkWindow);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   857
+    if (gdk_window_is_visible(window)) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   858
+        gdk_window_hide(window);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   859
         wasVisible = true;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   860
     }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   861
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   862
-    gint wmd;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   863
-    if (aShouldHide)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   864
-        wmd = 0;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   865
-    else
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   866
-        wmd = ConvertBorderStyles(mBorderStyle);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   867
-
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   868
+    gint wmd = ConvertBorderStyles(aStyle);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   869
     if (wmd != -1)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   870
-      gdk_window_set_decorations(mGdkWindow, (GdkWMDecoration) wmd);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   871
+      gdk_window_set_decorations(window, (GdkWMDecoration) wmd);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   872
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   873
     if (wasVisible)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   874
-        gdk_window_show(mGdkWindow);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   875
+        gdk_window_show(window);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   876
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   877
     // For some window managers, adding or removing window decorations
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   878
     // requires unmapping and remapping our toplevel window.  Go ahead
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   879
@@ -5123,10 +5066,19 @@ nsWindow::HideWindowChrome(bool aShouldH
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   880
     // error later when this happens (when the persistence timer fires
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   881
     // and GetWindowPos is called)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   882
 #ifdef MOZ_X11
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   883
-    XSync(GDK_DISPLAY_XDISPLAY(gdk_display_get_default()) , False);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   884
-#else
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   885
-    gdk_flush ();
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   886
+    if (mIsX11Display) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   887
+        XSync(GDK_DISPLAY_XDISPLAY(gdk_display_get_default()) , False);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   888
+    } else
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   889
 #endif /* MOZ_X11 */
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   890
+    {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   891
+        gdk_flush ();
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   892
+    }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   893
+}
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   894
+
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   895
+void
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   896
+nsWindow::HideWindowChrome(bool aShouldHide)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   897
+{
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   898
+    SetWindowDecoration(aShouldHide ? eBorderStyle_none : mBorderStyle);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   899
 }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   900
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   901
 bool
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   902
@@ -5237,12 +5189,8 @@ is_mouse_in_window (GdkWindow* aWindow,
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   903
         window = gdk_window_get_parent(window);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   904
     }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   905
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   906
-#if (MOZ_WIDGET_GTK == 2)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   907
-    gdk_drawable_get_size(aWindow, &w, &h);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   908
-#else
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   909
     w = gdk_window_get_width(aWindow);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   910
     h = gdk_window_get_height(aWindow);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   911
-#endif
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   912
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   913
     if (aMouseX > x && aMouseX < x + w &&
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   914
         aMouseY > y && aMouseY < y + h)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   915
@@ -5498,18 +5446,6 @@ get_gtk_cursor(nsCursor aCursor)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   916
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   917
 // gtk callbacks
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   918
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   919
-#if (MOZ_WIDGET_GTK == 2)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   920
-static gboolean
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   921
-expose_event_cb(GtkWidget *widget, GdkEventExpose *event)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   922
-{
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   923
-    RefPtr<nsWindow> window = get_window_for_gdk_window(event->window);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   924
-    if (!window)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   925
-        return FALSE;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   926
-
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   927
-    window->OnExposeEvent(event);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   928
-    return FALSE;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   929
-}
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   930
-#else
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   931
 void
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   932
 draw_window_of_widget(GtkWidget *widget, GdkWindow *aWindow, cairo_t *cr)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   933
 {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   934
@@ -5561,7 +5497,6 @@ expose_event_cb(GtkWidget *widget, cairo
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   935
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   936
     return FALSE;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   937
 }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   938
-#endif //MOZ_WIDGET_GTK == 2
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   939
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   940
 static gboolean
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   941
 configure_event_cb(GtkWidget *widget,
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   942
@@ -5980,7 +5915,6 @@ widget_composited_changed_cb (GtkWidget*
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   943
     window->OnCompositedChanged();
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   944
 }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   945
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   946
-#if (MOZ_WIDGET_GTK == 3)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   947
 static void
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   948
 scale_changed_cb (GtkWidget* widget, GParamSpec* aPSpec, gpointer aPointer)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   949
 {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   950
@@ -5996,7 +5930,6 @@ scale_changed_cb (GtkWidget* widget, GPa
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   951
     gtk_widget_get_allocation(widget, &allocation);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   952
     window->OnSizeAllocate(&allocation);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   953
 }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   954
-#endif
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   955
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   956
 #if GTK_CHECK_VERSION(3,4,0)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   957
 static gboolean
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   958
@@ -6174,11 +6107,7 @@ get_inner_gdk_window (GdkWindow *aWindow
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   959
          child = g_list_previous(child)) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   960
         auto *childWindow = (GdkWindow *) child->data;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   961
         if (get_window_for_gdk_window(childWindow)) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   962
-#if (MOZ_WIDGET_GTK == 2)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   963
-            gdk_window_get_geometry(childWindow, &cx, &cy, &cw, &ch, nullptr);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   964
-#else
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   965
             gdk_window_get_geometry(childWindow, &cx, &cy, &cw, &ch);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   966
-#endif
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   967
             if ((cx < x) && (x < (cx + cw)) &&
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   968
                 (cy < y) && (y < (cy + ch)) &&
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   969
                 gdk_window_is_visible(childWindow)) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   970
@@ -6386,53 +6315,6 @@ nsWindow::GetEditCommands(NativeKeyBindi
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   971
     keyBindings->GetEditCommands(aEvent, aCommands);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   972
 }
1024
d14085eee2b2 bring back CSD (but not ported yet)
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   973
 
1027
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   974
-#if defined(MOZ_X11) && (MOZ_WIDGET_GTK == 2)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   975
-/* static */ already_AddRefed<DrawTarget>
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   976
-nsWindow::GetDrawTargetForGdkDrawable(GdkDrawable* aDrawable,
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   977
-                                      const IntSize& aSize)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   978
-{
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   979
-    GdkVisual* visual = gdk_drawable_get_visual(aDrawable);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   980
-    Screen* xScreen =
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   981
-        gdk_x11_screen_get_xscreen(gdk_drawable_get_screen(aDrawable));
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   982
-    Display* xDisplay = DisplayOfScreen(xScreen);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   983
-    Drawable xDrawable = gdk_x11_drawable_get_xid(aDrawable);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   984
-
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   985
-    RefPtr<gfxASurface> surface;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   986
-
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   987
-    if (visual) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   988
-        Visual* xVisual = gdk_x11_visual_get_xvisual(visual);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   989
-
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   990
-        surface = new gfxXlibSurface(xDisplay, xDrawable, xVisual, aSize);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   991
-    } else {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   992
-        // no visual? we must be using an xrender format.  Find a format
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   993
-        // for this depth.
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   994
-        XRenderPictFormat *pf = nullptr;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   995
-        switch (gdk_drawable_get_depth(aDrawable)) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   996
-            case 32:
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   997
-                pf = XRenderFindStandardFormat(xDisplay, PictStandardARGB32);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   998
-                break;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
   999
-            case 24:
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1000
-                pf = XRenderFindStandardFormat(xDisplay, PictStandardRGB24);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1001
-                break;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1002
-            default:
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1003
-                NS_ERROR("Don't know how to handle the given depth!");
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1004
-                break;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1005
-        }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1006
-
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1007
-        surface = new gfxXlibSurface(xScreen, xDrawable, pf, aSize);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1008
-    }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1009
-
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1010
-    RefPtr<DrawTarget> dt =
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1011
-        gfxPlatform::GetPlatform()->CreateDrawTargetForSurface(surface, aSize);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1012
-
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1013
-    if (!dt || !dt->IsValid()) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1014
-        return nullptr;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1015
-    }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1016
-
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1017
-    return dt.forget();
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1018
-}
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1019
-#endif
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1020
-
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1021
 already_AddRefed<DrawTarget>
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1022
 nsWindow::StartRemoteDrawingInRegion(LayoutDeviceIntRegion& aInvalidRegion, BufferMode* aBufferMode)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1023
 {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1024
@@ -6649,9 +6531,66 @@ nsWindow::SetDrawsInTitlebar(bool aState
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1025
       return;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1026
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1027
   if (mShell) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1028
-      gint wmd = aState ? GDK_DECOR_BORDER : ConvertBorderStyles(mBorderStyle);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1029
-      gdk_window_set_decorations(gtk_widget_get_window(mShell),
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1030
-                                 (GdkWMDecoration) wmd);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1031
+      if (GetCSDSupportLevel() == CSD_SUPPORT_FULL) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1032
+          SetWindowDecoration(aState ? eBorderStyle_border : mBorderStyle);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1033
+      }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1034
+      else {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1035
+          /* Window manager does not support GDK_DECOR_BORDER,
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1036
+           * emulate it by CSD.
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1037
+           *
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1038
+           * gtk_window_set_titlebar() works on unrealized widgets only,
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1039
+           * we need to handle mShell carefully here.
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1040
+           * When CSD is enabled mGdkWindow is owned by mContainer which is good
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1041
+           * as we can't delete our mGdkWindow. To make mShell unrealized while
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1042
+           * mContainer is preserved we temporary reparent mContainer to an
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1043
+           * invisible GtkWindow.
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1044
+           */
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1045
+          NativeShow(false);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1046
+
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1047
+          // Using GTK_WINDOW_POPUP rather than
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1048
+          // GTK_WINDOW_TOPLEVEL in the hope that POPUP results in less
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1049
+          // initialization and window manager interaction.
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1050
+          GtkWidget* tmpWindow = gtk_window_new(GTK_WINDOW_POPUP);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1051
+          gtk_widget_realize(tmpWindow);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1052
+
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1053
+          gtk_widget_reparent(GTK_WIDGET(mContainer), tmpWindow);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1054
+          gtk_widget_unrealize(GTK_WIDGET(mShell));
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1055
+
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1056
+          // Available as of GTK 3.10+
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1057
+          static auto sGtkWindowSetTitlebar = (void (*)(GtkWindow*, GtkWidget*))
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1058
+              dlsym(RTLD_DEFAULT, "gtk_window_set_titlebar");
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1059
+          MOZ_ASSERT(sGtkWindowSetTitlebar,
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1060
+              "Missing gtk_window_set_titlebar(), old Gtk+ library?");
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1061
+
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1062
+          if (aState) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1063
+              // Add a hidden titlebar widget to trigger CSD, but disable the default
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1064
+              // titlebar.  GtkFixed is a somewhat random choice for a simple unused
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1065
+              // widget. gtk_window_set_titlebar() takes ownership of the titlebar
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1066
+              // widget.
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1067
+              sGtkWindowSetTitlebar(GTK_WINDOW(mShell), gtk_fixed_new());
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1068
+          } else {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1069
+              sGtkWindowSetTitlebar(GTK_WINDOW(mShell), nullptr);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1070
+          }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1071
+
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1072
+          /* A workaround for https://bugzilla.gnome.org/show_bug.cgi?id=791081
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1073
+           * gtk_widget_realize() throws:
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1074
+           * "In pixman_region32_init_rect: Invalid rectangle passed"
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1075
+           * when mShell has default 1x1 size.
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1076
+           */
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1077
+          GtkAllocation allocation = {0, 0, 0, 0};
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1078
+          gtk_widget_get_preferred_width(GTK_WIDGET(mShell), nullptr,
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1079
+                                         &allocation.width);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1080
+          gtk_widget_get_preferred_height(GTK_WIDGET(mShell), nullptr,
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1081
+                                          &allocation.height);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1082
+          gtk_widget_size_allocate(GTK_WIDGET(mShell), &allocation);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1083
+
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1084
+          gtk_widget_realize(GTK_WIDGET(mShell));
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1085
+          gtk_widget_reparent(GTK_WIDGET(mContainer), GTK_WIDGET(mShell));
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1086
+          mNeedsShow = true;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1087
+          NativeResize();
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1088
+
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1089
+          gtk_widget_destroy(tmpWindow);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1090
+      }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1091
   }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1092
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1093
   mIsCSDEnabled = aState;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1094
@@ -6762,11 +6701,9 @@ nsWindow::SynthesizeNativeMouseEvent(Lay
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1095
     event.button.window = mGdkWindow;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1096
     event.button.time = GDK_CURRENT_TIME;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1097
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1098
-#if (MOZ_WIDGET_GTK == 3)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1099
     // Get device for event source
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1100
     GdkDeviceManager *device_manager = gdk_display_get_device_manager(display);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1101
     event.button.device = gdk_device_manager_get_client_pointer(device_manager);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1102
-#endif
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1103
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1104
     event.button.x_root = DevicePixelsToGdkCoordRoundDown(aPoint.x);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1105
     event.button.y_root = DevicePixelsToGdkCoordRoundDown(aPoint.y);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1106
@@ -6809,12 +6746,10 @@ nsWindow::SynthesizeNativeMouseScrollEve
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1107
   event.type = GDK_SCROLL;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1108
   event.scroll.window = mGdkWindow;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1109
   event.scroll.time = GDK_CURRENT_TIME;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1110
-#if (MOZ_WIDGET_GTK == 3)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1111
   // Get device for event source
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1112
   GdkDisplay* display = gdk_window_get_display(mGdkWindow);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1113
   GdkDeviceManager *device_manager = gdk_display_get_device_manager(display);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1114
   event.scroll.device = gdk_device_manager_get_client_pointer(device_manager);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1115
-#endif
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1116
   event.scroll.x_root = DevicePixelsToGdkCoordRoundDown(aPoint.x);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1117
   event.scroll.y_root = DevicePixelsToGdkCoordRoundDown(aPoint.y);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1118
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1119
@@ -6938,27 +6873,54 @@ nsWindow::GetCSDSupportLevel() {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1120
     if (sCSDSupportLevel != CSD_SUPPORT_UNKNOWN) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1121
         return sCSDSupportLevel;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1122
     }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1123
-    // TODO: MATE
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1124
+
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1125
     const char* currentDesktop = getenv("XDG_CURRENT_DESKTOP");
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1126
     if (currentDesktop) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1127
-        if (strcmp(currentDesktop, "GNOME") == 0) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1128
-            sCSDSupportLevel = CSD_SUPPORT_FULL;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1129
-        } else if (strcmp(currentDesktop, "XFCE") == 0) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1130
+        if (strstr(currentDesktop, "GNOME") != nullptr) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1131
             sCSDSupportLevel = CSD_SUPPORT_FULL;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1132
-        } else if (strcmp(currentDesktop, "X-Cinnamon") == 0) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1133
+        } else if (strstr(currentDesktop, "XFCE") != nullptr) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1134
+            sCSDSupportLevel = CSD_SUPPORT_FLAT;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1135
+        } else if (strstr(currentDesktop, "X-Cinnamon") != nullptr) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1136
             sCSDSupportLevel = CSD_SUPPORT_FULL;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1137
-        } else if (strcmp(currentDesktop, "KDE") == 0) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1138
+        } else if (strstr(currentDesktop, "KDE") != nullptr) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1139
             sCSDSupportLevel = CSD_SUPPORT_FLAT;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1140
-        } else if (strcmp(currentDesktop, "LXDE") == 0) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1141
+        } else if (strstr(currentDesktop, "LXDE") != nullptr) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1142
             sCSDSupportLevel = CSD_SUPPORT_FLAT;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1143
-        } else if (strcmp(currentDesktop, "openbox") == 0) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1144
+        } else if (strstr(currentDesktop, "openbox") != nullptr) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1145
             sCSDSupportLevel = CSD_SUPPORT_FLAT;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1146
-        } else if (strcmp(currentDesktop, "i3") == 0) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1147
+        } else if (strstr(currentDesktop, "i3") != nullptr) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1148
             sCSDSupportLevel = CSD_SUPPORT_NONE;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1149
+        } else if (strstr(currentDesktop, "MATE") != nullptr) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1150
+            sCSDSupportLevel = CSD_SUPPORT_FLAT;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1151
+        } else if (strstr(currentDesktop, "Unity") != nullptr) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1152
+            sCSDSupportLevel = CSD_SUPPORT_FLAT;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1153
+        } else if (strstr(currentDesktop, "Pantheon") != nullptr) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1154
+            sCSDSupportLevel = CSD_SUPPORT_FULL;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1155
         } else {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1156
+            sCSDSupportLevel = CSD_SUPPORT_FLAT;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1157
+        }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1158
+    } else {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1159
+        sCSDSupportLevel = CSD_SUPPORT_NONE;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1160
+    }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1161
+
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1162
+    // We don't support CSD_SUPPORT_FULL on Wayland
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1163
+    if (!GDK_IS_X11_DISPLAY(gdk_display_get_default()) &&
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1164
+        sCSDSupportLevel == CSD_SUPPORT_FULL) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1165
+        sCSDSupportLevel = CSD_SUPPORT_FLAT;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1166
+    }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1167
+
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1168
+    // Allow MOZ_GTK_TITLEBAR_DECORATION to override our heuristics
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1169
+    const char* decorationOverride = getenv("MOZ_GTK_TITLEBAR_DECORATION");
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1170
+    if (decorationOverride) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1171
+        if (strcmp(decorationOverride, "none") == 0) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1172
             sCSDSupportLevel = CSD_SUPPORT_NONE;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1173
+        } else if (strcmp(decorationOverride, "client") == 0) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1174
+            sCSDSupportLevel = CSD_SUPPORT_FLAT;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1175
+        } else if (strcmp(decorationOverride, "system") == 0) {
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1176
+            sCSDSupportLevel = CSD_SUPPORT_FULL;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1177
         }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1178
     }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1179
+
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1180
     return sCSDSupportLevel;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1181
 }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1182
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1183
@@ -6991,3 +6953,24 @@ nsWindow::IsComposited() const
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1184
          (gdk_window_get_visual(mGdkWindow)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1185
             == gdk_screen_get_rgba_visual(gdkScreen));
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1186
 }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1187
+
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1188
+#ifdef MOZ_WAYLAND
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1189
+wl_display*
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1190
+nsWindow::GetWaylandDisplay()
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1191
+{
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1192
+  // Available as of GTK 3.8+
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1193
+  static auto sGdkWaylandDisplayGetWlDisplay =
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1194
+      (wl_display *(*)(GdkDisplay *))
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1195
+      dlsym(RTLD_DEFAULT, "gdk_wayland_display_get_wl_display");
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1196
+
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1197
+  GdkDisplay* gdkDisplay = gdk_display_get_default();
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1198
+  return mIsX11Display ? nullptr :
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1199
+                         sGdkWaylandDisplayGetWlDisplay(gdkDisplay);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1200
+}
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1201
+
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1202
+wl_surface*
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1203
+nsWindow::GetWaylandSurface()
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1204
+{
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1205
+  return moz_container_get_wl_surface(MOZ_CONTAINER(mContainer));
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1206
+}
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1207
+#endif
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1208
diff -up firefox-58.0/widget/gtk/nsWindow.h.1399611 firefox-58.0/widget/gtk/nsWindow.h
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1209
--- firefox-58.0/widget/gtk/nsWindow.h.1399611	2018-01-11 21:17:06.000000000 +0100
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1210
+++ firefox-58.0/widget/gtk/nsWindow.h	2018-01-24 10:57:03.720031943 +0100
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1211
@@ -23,7 +23,11 @@
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1212
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1213
 #ifdef MOZ_X11
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1214
 #include <gdk/gdkx.h>
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1215
+#include "X11UndefineNone.h"
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1216
 #endif /* MOZ_X11 */
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1217
+#ifdef MOZ_WAYLAND
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1218
+#include <gdk/gdkwayland.h>
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1219
+#endif
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1220
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1221
 #include "mozilla/widget/WindowSurface.h"
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1222
 #include "mozilla/widget/WindowSurfaceProvider.h"
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1223
@@ -172,11 +176,7 @@ public:
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1224
     GdkRectangle DevicePixelsToGdkRectRoundOut(LayoutDeviceIntRect aRect);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1225
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1226
     // event callbacks
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1227
-#if (MOZ_WIDGET_GTK == 2)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1228
-    gboolean           OnExposeEvent(GdkEventExpose *aEvent);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1229
-#else
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1230
     gboolean           OnExposeEvent(cairo_t *cr);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1231
-#endif
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1232
     gboolean           OnConfigureEvent(GtkWidget *aWidget,
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1233
                                         GdkEventConfigure *aEvent);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1234
     void               OnContainerUnrealize();
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1235
@@ -315,10 +315,6 @@ public:
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1236
    nsresult            UpdateTranslucentWindowAlphaInternal(const nsIntRect& aRect,
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1237
                                                             uint8_t* aAlphas, int32_t aStride);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1238
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1239
-#if (MOZ_WIDGET_GTK == 2)
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1240
-    static already_AddRefed<DrawTarget> GetDrawTargetForGdkDrawable(GdkDrawable* aDrawable,
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1241
-                                                                    const mozilla::gfx::IntSize& aSize);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1242
-#endif
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1243
     virtual void       ReparentNativeWidget(nsIWidget* aNewParent) override;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1244
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1245
     virtual nsresult SynthesizeNativeMouseEvent(LayoutDeviceIntPoint aPoint,
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1246
@@ -348,9 +344,14 @@ public:
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1247
                                                 nsIObserver* aObserver) override;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1248
 #endif
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1249
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1250
+
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1251
 #ifdef MOZ_X11
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1252
     Display* XDisplay() { return mXDisplay; }
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1253
 #endif
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1254
+#ifdef MOZ_WAYLAND
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1255
+    wl_display* GetWaylandDisplay();
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1256
+    wl_surface* GetWaylandSurface();
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1257
+#endif
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1258
     virtual void GetCompositorWidgetInitData(mozilla::widget::CompositorWidgetInitData* aInitData) override;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1259
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1260
     virtual nsresult SetNonClientMargins(LayoutDeviceIntMargin& aMargins) override;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1261
@@ -374,6 +375,18 @@ public:
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1262
     virtual bool WidgetTypeSupportsAcceleration() override;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1263
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1264
     bool DoDrawTitlebar() const;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1265
+
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1266
+    typedef enum { CSD_SUPPORT_FULL,    // CSD including shadows
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1267
+                   CSD_SUPPORT_FLAT,    // CSD without shadows
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1268
+                   CSD_SUPPORT_NONE,    // WM does not support CSD at all
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1269
+                   CSD_SUPPORT_UNKNOWN
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1270
+    } CSDSupportLevel;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1271
+    /**
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1272
+     * Get the support of Client Side Decoration by checking
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1273
+     * the XDG_CURRENT_DESKTOP environment variable.
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1274
+     */
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1275
+    static CSDSupportLevel GetCSDSupportLevel();
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1276
+
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1277
 protected:
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1278
     virtual ~nsWindow();
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1279
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1280
@@ -423,6 +436,7 @@ private:
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1281
     nsWindow          *GetContainerWindow();
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1282
     void               SetUrgencyHint(GtkWidget *top_window, bool state);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1283
     void               SetDefaultIcon(void);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1284
+    void               SetWindowDecoration(nsBorderStyle aStyle);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1285
     void               InitButtonEvent(mozilla::WidgetMouseEvent& aEvent,
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1286
                                        GdkEventButton* aGdkEvent);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1287
     bool               DispatchCommandEvent(nsAtom* aCommand);
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1288
@@ -441,7 +455,6 @@ private:
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1289
     nsIWidgetListener* GetListener();
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1290
     bool               IsComposited() const;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1291
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1292
-
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1293
     GtkWidget          *mShell;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1294
     MozContainer       *mContainer;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1295
     GdkWindow          *mGdkWindow;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1296
@@ -578,16 +591,6 @@ private:
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1297
     RefPtr<mozilla::widget::IMContextWrapper> mIMContext;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1298
 
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1299
     mozilla::UniquePtr<mozilla::CurrentX11TimeGetter> mCurrentTimeGetter;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1300
-    typedef enum { CSD_SUPPORT_FULL,    // CSD including shadows
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1301
-                   CSD_SUPPORT_FLAT,    // CSD without shadows
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1302
-                   CSD_SUPPORT_NONE,    // WM does not support CSD at all
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1303
-                   CSD_SUPPORT_UNKNOWN
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1304
-    } CSDSupportLevel;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1305
-    /**
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1306
-     * Get the support of Client Side Decoration by checking
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1307
-     * the XDG_CURRENT_DESKTOP environment variable.
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1308
-     */
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1309
-    static CSDSupportLevel GetCSDSupportLevel();
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1310
     static CSDSupportLevel sCSDSupportLevel;
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1311
 };
7071f6ebfda6 CSD functionality
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1024
diff changeset
  1312