1 --- vcl/unx/gtk/app/gtkdata.cxx (.../tags/DEV300_m46/vcl) (Revision 271422)
2 +++ vcl/unx/gtk/app/gtkdata.cxx (.../cws/vcl101/vcl) (Revision 271422)
4 pDisp->screenSizeChanged( pScreen );
7 +void signalMonitorsChanged( GdkScreen* pScreen, gpointer data )
9 + GtkSalDisplay* pDisp = (GtkSalDisplay*)data;
10 + pDisp->monitorsChanged( pScreen );
15 GdkFilterReturn GtkSalDisplay::filterGdkEvent( GdkXEvent* sys_event,
20 rSD.m_aSize = Size( gdk_screen_get_width( pScreen ),
21 gdk_screen_get_height( pScreen ) );
22 + if( ! m_aFrames.empty() )
23 + m_aFrames.front()->CallCallback( SALEVENT_DISPLAYCHANGED, 0 );
31 +void GtkSalDisplay::monitorsChanged( GdkScreen* pScreen )
35 + if( gdk_display_get_n_screens(m_pGdkDisplay) == 1 )
37 + int nScreen = gdk_screen_get_number( pScreen );
38 + if( nScreen == m_nDefaultScreen ) //To-Do, make m_aXineramaScreens a per-screen thing ?
40 + gint nMonitors = gdk_screen_get_n_monitors(pScreen);
41 + m_aXineramaScreens = std::vector<Rectangle>();
42 + for (gint i = 0; i < nMonitors; ++i)
45 + gdk_screen_get_monitor_geometry(pScreen, i, &dest);
46 + m_aXineramaScreens.push_back( Rectangle( Point(dest.x,
47 + dest.y ), Size( dest.width, dest.height ) ) );
49 + m_bXinerama = m_aXineramaScreens.size() > 1;
50 + if( ! m_aFrames.empty() )
51 + m_aFrames.front()->CallCallback( SALEVENT_DISPLAYCHANGED, 0 );
55 + DBG_ERROR( "monitors for non-default screen changed, extend-me" );
61 void GtkSalDisplay::initScreen( int nScreen ) const
63 if( nScreen < 0 || nScreen >= static_cast<int>(m_aScreens.size()) )
66 GdkScreen *pScreen = gdk_display_get_screen( pGdkDisp, n );
69 g_signal_connect( G_OBJECT(pScreen), "size-changed", G_CALLBACK(signalScreenSizeChanged), m_pGtkSalDisplay );
70 + g_signal_connect( G_OBJECT(pScreen), "monitors-changed", G_CALLBACK(signalMonitorsChanged), m_pGtkSalDisplay );
75 --- vcl/unx/inc/plugins/gtk/gtkdata.hxx (.../tags/DEV300_m46/vcl) (Revision 271422)
76 +++ vcl/unx/inc/plugins/gtk/gtkdata.hxx (.../cws/vcl101/vcl) (Revision 271422)
78 void startupNotificationCompleted() { m_bStartupCompleted = true; }
80 void screenSizeChanged( GdkScreen* );
81 + void monitorsChanged( GdkScreen* );