michael@0: /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ michael@0: /* vim:expandtab:shiftwidth=4:tabstop=4: michael@0: */ michael@0: /* This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: #include "prlink.h" michael@0: michael@0: #include "nsBidiKeyboard.h" michael@0: #include michael@0: michael@0: #if (MOZ_WIDGET_GTK == 2) michael@0: typedef gboolean (*GdkKeymapHaveBidiLayoutsType)(GdkKeymap *keymap); michael@0: static GdkKeymapHaveBidiLayoutsType GdkKeymapHaveBidiLayouts = nullptr; michael@0: #endif michael@0: michael@0: NS_IMPL_ISUPPORTS(nsBidiKeyboard, nsIBidiKeyboard) michael@0: michael@0: nsBidiKeyboard::nsBidiKeyboard() michael@0: { michael@0: Reset(); michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: nsBidiKeyboard::Reset() michael@0: { michael@0: #if (MOZ_WIDGET_GTK == 2) michael@0: PRLibrary *gtklib = nullptr; michael@0: #if defined(MOZ_X11) michael@0: if (!GdkKeymapHaveBidiLayouts) { michael@0: GdkKeymapHaveBidiLayouts = (GdkKeymapHaveBidiLayoutsType) michael@0: PR_FindFunctionSymbolAndLibrary("gdk_keymap_have_bidi_layouts", michael@0: >klib); michael@0: if (gtklib) michael@0: PR_UnloadLibrary(gtklib); michael@0: } michael@0: #endif michael@0: michael@0: mHaveBidiKeyboards = false; michael@0: if (GdkKeymapHaveBidiLayouts) michael@0: mHaveBidiKeyboards = (*GdkKeymapHaveBidiLayouts)(nullptr); michael@0: #else michael@0: mHaveBidiKeyboards = gdk_keymap_have_bidi_layouts(gdk_keymap_get_default()); michael@0: #endif michael@0: return NS_OK; michael@0: } michael@0: michael@0: nsBidiKeyboard::~nsBidiKeyboard() michael@0: { michael@0: #if (MOZ_WIDGET_GTK == 2) michael@0: GdkKeymapHaveBidiLayouts = nullptr; michael@0: #endif michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: nsBidiKeyboard::IsLangRTL(bool *aIsRTL) michael@0: { michael@0: if (!mHaveBidiKeyboards) michael@0: return NS_ERROR_FAILURE; michael@0: michael@0: *aIsRTL = (gdk_keymap_get_direction(gdk_keymap_get_default()) == PANGO_DIRECTION_RTL); michael@0: michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP nsBidiKeyboard::GetHaveBidiKeyboards(bool* aResult) michael@0: { michael@0: // not implemented yet michael@0: return NS_ERROR_NOT_IMPLEMENTED; michael@0: }