1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /* vim:expandtab:shiftwidth=4:tabstop=4:
4 /* This Source Code Form is subject to the terms of the Mozilla Public
5 * License, v. 2.0. If a copy of the MPL was not distributed with this
6 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
10 #include "nsBidiKeyboard.h"
13 #if (MOZ_WIDGET_GTK == 2)
14 typedef gboolean (*GdkKeymapHaveBidiLayoutsType
)(GdkKeymap
*keymap
);
15 static GdkKeymapHaveBidiLayoutsType GdkKeymapHaveBidiLayouts
= nullptr;
18 NS_IMPL_ISUPPORTS(nsBidiKeyboard
, nsIBidiKeyboard
)
20 nsBidiKeyboard::nsBidiKeyboard()
26 nsBidiKeyboard::Reset()
28 #if (MOZ_WIDGET_GTK == 2)
29 PRLibrary
*gtklib
= nullptr;
31 if (!GdkKeymapHaveBidiLayouts
) {
32 GdkKeymapHaveBidiLayouts
= (GdkKeymapHaveBidiLayoutsType
)
33 PR_FindFunctionSymbolAndLibrary("gdk_keymap_have_bidi_layouts",
36 PR_UnloadLibrary(gtklib
);
40 mHaveBidiKeyboards
= false;
41 if (GdkKeymapHaveBidiLayouts
)
42 mHaveBidiKeyboards
= (*GdkKeymapHaveBidiLayouts
)(nullptr);
44 mHaveBidiKeyboards
= gdk_keymap_have_bidi_layouts(gdk_keymap_get_default());
49 nsBidiKeyboard::~nsBidiKeyboard()
51 #if (MOZ_WIDGET_GTK == 2)
52 GdkKeymapHaveBidiLayouts
= nullptr;
57 nsBidiKeyboard::IsLangRTL(bool *aIsRTL
)
59 if (!mHaveBidiKeyboards
)
60 return NS_ERROR_FAILURE
;
62 *aIsRTL
= (gdk_keymap_get_direction(gdk_keymap_get_default()) == PANGO_DIRECTION_RTL
);
67 NS_IMETHODIMP
nsBidiKeyboard::GetHaveBidiKeyboards(bool* aResult
)
69 // not implemented yet
70 return NS_ERROR_NOT_IMPLEMENTED
;