mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-08 02:14:43 +00:00
Bug 1175171 - Deallocate GTK's KeymapWrapper on shutdown. r=karlt
--HG-- extra : rebase_source : 5ff0e22c28e8349902d4ca0146b63d604a0abd58
This commit is contained in:
parent
4f1073592a
commit
69949017a1
@ -149,6 +149,15 @@ KeymapWrapper::GetInstance()
|
||||
return sInstance;
|
||||
}
|
||||
|
||||
/* static */ void
|
||||
KeymapWrapper::Shutdown()
|
||||
{
|
||||
if (sInstance) {
|
||||
delete sInstance;
|
||||
sInstance = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
KeymapWrapper::KeymapWrapper() :
|
||||
mInitialized(false), mGdkKeymap(gdk_keymap_get_default()),
|
||||
mXKBBaseEventCode(0)
|
||||
@ -160,13 +169,10 @@ KeymapWrapper::KeymapWrapper() :
|
||||
("KeymapWrapper(%p): Constructor, mGdkKeymap=%p",
|
||||
this, mGdkKeymap));
|
||||
|
||||
g_object_ref(mGdkKeymap);
|
||||
g_signal_connect(mGdkKeymap, "keys-changed",
|
||||
(GCallback)OnKeysChanged, this);
|
||||
|
||||
// This is necessary for catching the destroying timing.
|
||||
g_object_weak_ref(G_OBJECT(mGdkKeymap),
|
||||
(GWeakNotify)OnDestroyKeymap, this);
|
||||
|
||||
if (GDK_IS_X11_DISPLAY(gdk_display_get_default()))
|
||||
InitXKBExtension();
|
||||
|
||||
@ -436,6 +442,9 @@ KeymapWrapper::InitBySystemSettings()
|
||||
KeymapWrapper::~KeymapWrapper()
|
||||
{
|
||||
gdk_window_remove_filter(nullptr, FilterEvents, this);
|
||||
g_signal_handlers_disconnect_by_func(mGdkKeymap,
|
||||
FuncToGpointer(OnKeysChanged), this);
|
||||
g_object_unref(mGdkKeymap);
|
||||
NS_IF_RELEASE(sBidiKeyboard);
|
||||
MOZ_LOG(gKeymapWrapperLog, LogLevel::Info,
|
||||
("KeymapWrapper(%p): Destructor", this));
|
||||
@ -512,19 +521,6 @@ KeymapWrapper::FilterEvents(GdkXEvent* aXEvent,
|
||||
return GDK_FILTER_CONTINUE;
|
||||
}
|
||||
|
||||
/* static */ void
|
||||
KeymapWrapper::OnDestroyKeymap(KeymapWrapper* aKeymapWrapper,
|
||||
GdkKeymap *aGdkKeymap)
|
||||
{
|
||||
MOZ_LOG(gKeymapWrapperLog, LogLevel::Info,
|
||||
("KeymapWrapper: OnDestroyKeymap, aGdkKeymap=%p, aKeymapWrapper=%p",
|
||||
aGdkKeymap, aKeymapWrapper));
|
||||
MOZ_ASSERT(aKeymapWrapper == sInstance,
|
||||
"Desroying unexpected instance");
|
||||
delete sInstance;
|
||||
sInstance = nullptr;
|
||||
}
|
||||
|
||||
/* static */ void
|
||||
KeymapWrapper::OnKeysChanged(GdkKeymap *aGdkKeymap,
|
||||
KeymapWrapper* aKeymapWrapper)
|
||||
|
@ -129,6 +129,11 @@ public:
|
||||
*/
|
||||
static bool IsKeyPressEventNecessary(GdkEventKey* aGdkKeyEvent);
|
||||
|
||||
/**
|
||||
* Destroys the singleton KeymapWrapper instance, if it exists.
|
||||
*/
|
||||
static void Shutdown();
|
||||
|
||||
protected:
|
||||
|
||||
/**
|
||||
@ -245,8 +250,6 @@ protected:
|
||||
* Signal handlers.
|
||||
*/
|
||||
static void OnKeysChanged(GdkKeymap* aKeymap, KeymapWrapper* aKeymapWrapper);
|
||||
static void OnDestroyKeymap(KeymapWrapper* aKeymapWrapper,
|
||||
GdkKeymap *aGdkKeymap);
|
||||
|
||||
/**
|
||||
* GetCharCodeFor() Computes what character is inputted by the key event
|
||||
|
@ -12,6 +12,7 @@
|
||||
#include "nsAppShell.h"
|
||||
#include "nsAppShellSingleton.h"
|
||||
#include "nsBaseWidget.h"
|
||||
#include "nsGtkKeyUtils.h"
|
||||
#include "nsLookAndFeel.h"
|
||||
#include "nsWindow.h"
|
||||
#include "nsTransferable.h"
|
||||
@ -308,6 +309,7 @@ nsWidgetGtk2ModuleDtor()
|
||||
nsFilePicker::Shutdown();
|
||||
nsSound::Shutdown();
|
||||
nsWindow::ReleaseGlobals();
|
||||
KeymapWrapper::Shutdown();
|
||||
nsGTKToolkit::Shutdown();
|
||||
nsAppShellShutdown();
|
||||
#ifdef MOZ_ENABLE_DBUS
|
||||
|
Loading…
Reference in New Issue
Block a user