summaryrefslogtreecommitdiff
path: root/vcl/unx/gtk/app/gtkdata.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'vcl/unx/gtk/app/gtkdata.cxx')
-rw-r--r--vcl/unx/gtk/app/gtkdata.cxx38
1 files changed, 20 insertions, 18 deletions
diff --git a/vcl/unx/gtk/app/gtkdata.cxx b/vcl/unx/gtk/app/gtkdata.cxx
index 8eb88aaee105..84aa3e8e9253 100644
--- a/vcl/unx/gtk/app/gtkdata.cxx
+++ b/vcl/unx/gtk/app/gtkdata.cxx
@@ -71,6 +71,15 @@ using ::rtl::OUString;
/***************************************************************************
* class GtkDisplay *
***************************************************************************/
+extern "C" {
+GdkFilterReturn call_filterGdkEvent( GdkXEvent* sys_event,
+ GdkEvent* event,
+ gpointer data )
+{
+ GtkSalDisplay *pDisplay = (GtkSalDisplay *)data;
+ return pDisplay->filterGdkEvent( sys_event, event );
+}
+}
GtkSalDisplay::GtkSalDisplay( GdkDisplay* pDisplay )
: SalDisplay( gdk_x11_display_get_xdisplay( pDisplay ) ),
@@ -81,10 +90,14 @@ GtkSalDisplay::GtkSalDisplay( GdkDisplay* pDisplay )
for(int i = 0; i < POINTER_COUNT; i++)
m_aCursors[ i ] = NULL;
Init ();
+
+ gdk_window_add_filter( NULL, call_filterGdkEvent, this );
}
GtkSalDisplay::~GtkSalDisplay()
{
+ gdk_window_remove_filter( NULL, call_filterGdkEvent, this );
+
if( !m_bStartupCompleted )
gdk_notify_startup_complete();
doDestruct();
@@ -107,12 +120,6 @@ void GtkSalDisplay::deregisterFrame( SalFrame* pFrame )
}
extern "C" {
-GdkFilterReturn call_filterGdkEvent( GdkXEvent* sys_event,
- GdkEvent* event,
- gpointer data )
-{
- return GtkSalDisplay::filterGdkEvent( sys_event, event, data );
-}
void signalKeysChanged( GdkKeymap*, gpointer data )
{
@@ -135,13 +142,10 @@ void signalMonitorsChanged( GdkScreen* pScreen, gpointer data )
}
GdkFilterReturn GtkSalDisplay::filterGdkEvent( GdkXEvent* sys_event,
- GdkEvent*,
- gpointer data )
+ GdkEvent* )
{
GdkFilterReturn aFilterReturn = GDK_FILTER_CONTINUE;
-
XEvent *pEvent = (XEvent *)sys_event;
- GtkSalDisplay *pDisplay = (GtkSalDisplay *)data;
// dispatch all XEvents to event callback
if( GetSalData()->m_pInstance->
@@ -150,7 +154,7 @@ GdkFilterReturn GtkSalDisplay::filterGdkEvent( GdkXEvent* sys_event,
GTK_YIELD_GRAB();
- if (pDisplay->GetDisplay() == pEvent->xany.display )
+ if (GetDisplay() == pEvent->xany.display )
{
// #i53471# gtk has no callback mechanism that lets us be notified
// when settings (as in XSETTING and opposed to styles) are changed.
@@ -158,16 +162,16 @@ GdkFilterReturn GtkSalDisplay::filterGdkEvent( GdkXEvent* sys_event,
// these should be rare enough so that we can assume that the settings
// actually change when a corresponding PropertyNotify occurs
if( pEvent->type == PropertyNotify &&
- pEvent->xproperty.atom == pDisplay->getWMAdaptor()->getAtom( WMAdaptor::XSETTINGS ) &&
- ! pDisplay->m_aFrames.empty()
+ pEvent->xproperty.atom == getWMAdaptor()->getAtom( WMAdaptor::XSETTINGS ) &&
+ ! m_aFrames.empty()
)
{
- pDisplay->SendInternalEvent( pDisplay->m_aFrames.front(), NULL, SALEVENT_SETTINGSCHANGED );
+ SendInternalEvent( m_aFrames.front(), NULL, SALEVENT_SETTINGSCHANGED );
}
// let's see if one of our frames wants to swallow these events
// get the frame
- for( std::list< SalFrame* >::const_iterator it = pDisplay->m_aFrames.begin();
- it != pDisplay->m_aFrames.end(); ++it )
+ for( std::list< SalFrame* >::const_iterator it = m_aFrames.begin();
+ it != m_aFrames.end(); ++it )
{
GtkSalFrame* pFrame = static_cast<GtkSalFrame*>(*it);
if( (GdkNativeWindow)pFrame->GetSystemData()->aWindow == pEvent->xany.window ||
@@ -686,8 +690,6 @@ void GtkXLib::Init()
m_pGtkSalDisplay = new GtkSalDisplay( pGdkDisp );
- gdk_window_add_filter( NULL, call_filterGdkEvent, m_pGtkSalDisplay );
-
PushXErrorLevel( true );
SalI18N_KeyboardExtension *pKbdExtension = new SalI18N_KeyboardExtension( pDisp );
XSync( pDisp, False );