/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #include "WidgetUtilsGtk.h" #include "nsWindow.h" #include #include namespace mozilla { namespace widget { int32_t WidgetUtilsGTK::IsTouchDeviceSupportPresent() { int32_t result = 0; GdkDisplay* display = gdk_display_get_default(); if (!display) { return 0; } GdkDeviceManager* manager = gdk_display_get_device_manager(display); if (!manager) { return 0; } GList* devices = gdk_device_manager_list_devices(manager, GDK_DEVICE_TYPE_SLAVE); GList* list = devices; while (devices) { GdkDevice* device = static_cast(devices->data); if (gdk_device_get_source(device) == GDK_SOURCE_TOUCHSCREEN) { result = 1; break; } devices = devices->next; } if (list) { g_list_free(list); } return result; } bool IsMainWindowTransparent() { return nsWindow::IsToplevelWindowTransparent(); } // We avoid linking gdk_*_display_get_type directly in order to avoid a runtime // dependency on GTK built with both backends. Other X11- and Wayland-specific // functions get stubbed out by libmozgtk and crash when called, but those // should only be called when the matching backend is already in use. bool GdkIsWaylandDisplay(GdkDisplay* display) { static auto sGdkWaylandDisplayGetType = (GType(*)())dlsym(RTLD_DEFAULT, "gdk_wayland_display_get_type"); return sGdkWaylandDisplayGetType && G_TYPE_CHECK_INSTANCE_TYPE(display, sGdkWaylandDisplayGetType()); } bool GdkIsX11Display(GdkDisplay* display) { static auto sGdkX11DisplayGetType = (GType(*)())dlsym(RTLD_DEFAULT, "gdk_x11_display_get_type"); return sGdkX11DisplayGetType && G_TYPE_CHECK_INSTANCE_TYPE(display, sGdkX11DisplayGetType()); } bool GdkIsWaylandDisplay() { return GdkIsWaylandDisplay(gdk_display_get_default()); } bool GdkIsX11Display() { return GdkIsX11Display(gdk_display_get_default()); } } // namespace widget } // namespace mozilla