update ooo310-m15
[ooovba.git] / applied_patches / 0825-vcl-gtk-multimonitor-detect.diff
blobee4755fec4e8d52670487acc5e0c2e1fd9fbc9cc
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)
3 @@ -126,8 +126,14 @@
4 pDisp->screenSizeChanged( pScreen );
7 +void signalMonitorsChanged( GdkScreen* pScreen, gpointer data )
8 +{
9 + GtkSalDisplay* pDisp = (GtkSalDisplay*)data;
10 + pDisp->monitorsChanged( pScreen );
15 GdkFilterReturn GtkSalDisplay::filterGdkEvent( GdkXEvent* sys_event,
16 GdkEvent*,
17 gpointer data )
18 @@ -192,6 +198,8 @@
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 );
26 else
27 @@ -201,6 +209,36 @@
31 +void GtkSalDisplay::monitorsChanged( GdkScreen* pScreen )
33 + if( pScreen )
34 + {
35 + if( gdk_display_get_n_screens(m_pGdkDisplay) == 1 )
36 + {
37 + int nScreen = gdk_screen_get_number( pScreen );
38 + if( nScreen == m_nDefaultScreen ) //To-Do, make m_aXineramaScreens a per-screen thing ?
39 + {
40 + gint nMonitors = gdk_screen_get_n_monitors(pScreen);
41 + m_aXineramaScreens = std::vector<Rectangle>();
42 + for (gint i = 0; i < nMonitors; ++i)
43 + {
44 + GdkRectangle dest;
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 ) ) );
48 + }
49 + m_bXinerama = m_aXineramaScreens.size() > 1;
50 + if( ! m_aFrames.empty() )
51 + m_aFrames.front()->CallCallback( SALEVENT_DISPLAYCHANGED, 0 );
52 + }
53 + else
54 + {
55 + DBG_ERROR( "monitors for non-default screen changed, extend-me" );
56 + }
57 + }
58 + }
61 void GtkSalDisplay::initScreen( int nScreen ) const
63 if( nScreen < 0 || nScreen >= static_cast<int>(m_aScreens.size()) )
64 @@ -626,7 +664,10 @@
66 GdkScreen *pScreen = gdk_display_get_screen( pGdkDisp, n );
67 if( pScreen )
68 + {
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 );
71 + }
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)
77 @@ -85,6 +85,7 @@
78 void startupNotificationCompleted() { m_bStartupCompleted = true; }
80 void screenSizeChanged( GdkScreen* );
81 + void monitorsChanged( GdkScreen* );