widget/gtk/nsBidiKeyboard.cpp

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/widget/gtk/nsBidiKeyboard.cpp	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,71 @@
     1.4 +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
     1.5 +/* vim:expandtab:shiftwidth=4:tabstop=4:
     1.6 + */
     1.7 +/* This Source Code Form is subject to the terms of the Mozilla Public
     1.8 + * License, v. 2.0. If a copy of the MPL was not distributed with this
     1.9 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
    1.10 +
    1.11 +#include "prlink.h"
    1.12 +
    1.13 +#include "nsBidiKeyboard.h"
    1.14 +#include <gtk/gtk.h>
    1.15 +
    1.16 +#if (MOZ_WIDGET_GTK == 2)
    1.17 +typedef gboolean (*GdkKeymapHaveBidiLayoutsType)(GdkKeymap *keymap);
    1.18 +static GdkKeymapHaveBidiLayoutsType GdkKeymapHaveBidiLayouts = nullptr;
    1.19 +#endif
    1.20 +
    1.21 +NS_IMPL_ISUPPORTS(nsBidiKeyboard, nsIBidiKeyboard)
    1.22 +
    1.23 +nsBidiKeyboard::nsBidiKeyboard()
    1.24 +{
    1.25 +    Reset();
    1.26 +}
    1.27 +
    1.28 +NS_IMETHODIMP
    1.29 +nsBidiKeyboard::Reset()
    1.30 +{
    1.31 +#if (MOZ_WIDGET_GTK == 2)
    1.32 +    PRLibrary *gtklib = nullptr;
    1.33 +#if defined(MOZ_X11)
    1.34 +    if (!GdkKeymapHaveBidiLayouts) {
    1.35 +        GdkKeymapHaveBidiLayouts = (GdkKeymapHaveBidiLayoutsType) 
    1.36 +            PR_FindFunctionSymbolAndLibrary("gdk_keymap_have_bidi_layouts",
    1.37 +                                            &gtklib);
    1.38 +        if (gtklib)
    1.39 +            PR_UnloadLibrary(gtklib);
    1.40 +    }
    1.41 +#endif
    1.42 +
    1.43 +    mHaveBidiKeyboards = false;
    1.44 +    if (GdkKeymapHaveBidiLayouts)
    1.45 +        mHaveBidiKeyboards = (*GdkKeymapHaveBidiLayouts)(nullptr);
    1.46 +#else
    1.47 +    mHaveBidiKeyboards = gdk_keymap_have_bidi_layouts(gdk_keymap_get_default());
    1.48 +#endif
    1.49 +    return NS_OK;
    1.50 +}
    1.51 +
    1.52 +nsBidiKeyboard::~nsBidiKeyboard()
    1.53 +{
    1.54 +#if (MOZ_WIDGET_GTK == 2)
    1.55 +    GdkKeymapHaveBidiLayouts = nullptr;
    1.56 +#endif
    1.57 +}
    1.58 +
    1.59 +NS_IMETHODIMP
    1.60 +nsBidiKeyboard::IsLangRTL(bool *aIsRTL)
    1.61 +{
    1.62 +    if (!mHaveBidiKeyboards)
    1.63 +        return NS_ERROR_FAILURE;
    1.64 +
    1.65 +    *aIsRTL = (gdk_keymap_get_direction(gdk_keymap_get_default()) == PANGO_DIRECTION_RTL);
    1.66 +
    1.67 +    return NS_OK;
    1.68 +}
    1.69 +
    1.70 +NS_IMETHODIMP nsBidiKeyboard::GetHaveBidiKeyboards(bool* aResult)
    1.71 +{
    1.72 +  // not implemented yet
    1.73 +  return NS_ERROR_NOT_IMPLEMENTED;
    1.74 +}

mercurial