File mozilla-fullscreen_part_3.patch of Package MozillaFirefox
# HG changeset patch
# Parent 664cde3b388a4f852afc13eb982668d327d9a9e2
bsc#992549, merged in FF46
mozilla-release:
changeset: 316477:8e52730bd8ee
user: Xidorn Quan <quanxunzhen@gmail.com>
date: Tue Jan 12 15:18:47 2016 +1100
files: widget/gtk/mozgtk/mozgtk.c widget/gtk/nsWindow.cpp
description:
Bug 1189622 part 3 - Return failure if fullscreen support is not available for the X11 desktop. r=karlt
diff --git a/widget/gtk/mozgtk/mozgtk.c b/widget/gtk/mozgtk/mozgtk.c
--- a/widget/gtk/mozgtk/mozgtk.c
+++ b/widget/gtk/mozgtk/mozgtk.c
@@ -122,16 +122,17 @@ STUB(gdk_x11_display_get_user_time)
STUB(gdk_x11_display_get_xdisplay)
STUB(gdk_x11_get_default_root_xwindow)
STUB(gdk_x11_get_default_xdisplay)
STUB(gdk_x11_get_server_time)
STUB(gdk_x11_get_xatom_by_name)
STUB(gdk_x11_get_xatom_by_name_for_display)
STUB(gdk_x11_lookup_xdisplay)
STUB(gdk_x11_screen_get_xscreen)
+STUB(gdk_x11_screen_supports_net_wm_hint)
STUB(gdk_x11_visual_get_xvisual)
STUB(gdk_x11_window_foreign_new_for_display)
STUB(gdk_x11_window_lookup_for_display)
STUB(gdk_x11_window_set_user_time)
STUB(gdk_x11_xatom_to_atom)
STUB(gtk_accel_label_new)
STUB(gtk_alignment_get_type)
STUB(gtk_alignment_new)
diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp
--- a/widget/gtk/nsWindow.cpp
+++ b/widget/gtk/nsWindow.cpp
@@ -4985,22 +4985,39 @@ nsWindow::PerformFullscreenTransition(Fu
auto transitionData = new FullscreenTransitionData(aStage, aDuration,
aCallback, data);
g_timeout_add_full(G_PRIORITY_HIGH,
FullscreenTransitionData::sInterval,
FullscreenTransitionData::TimeoutCallback,
transitionData, nullptr);
}
+static bool
+IsFullscreenSupported(GtkWidget* aShell)
+{
+#ifdef MOZ_X11
+ GdkScreen* screen = gtk_widget_get_screen(aShell);
+ GdkAtom atom = gdk_atom_intern("_NET_WM_STATE_FULLSCREEN", FALSE);
+ if (!gdk_x11_screen_supports_net_wm_hint(screen, atom)) {
+ return false;
+ }
+#endif
+ return true;
+}
+
NS_IMETHODIMP
nsWindow::MakeFullScreen(bool aFullScreen, nsIScreen* aTargetScreen)
{
LOG(("nsWindow::MakeFullScreen [%p] aFullScreen %d\n",
(void *)this, aFullScreen));
+ if (!IsFullscreenSupported(mShell)) {
+ return NS_ERROR_NOT_AVAILABLE;
+ }
+
if (aFullScreen) {
if (mSizeMode != nsSizeMode_Fullscreen)
mLastSizeMode = mSizeMode;
mSizeMode = nsSizeMode_Fullscreen;
gtk_window_fullscreen(GTK_WINDOW(mShell));
}
else {