try to fix main wnd splits being set before window is actually maximized/fullscreened

(in "window-state-event")(doesn't work)
This commit is contained in:
Garux
2020-12-30 12:38:23 +03:00
parent 2f2140efa4
commit 6612b6ba9b
3 changed files with 43 additions and 8 deletions
+36
View File
@@ -178,5 +178,41 @@ inline void WindowPositionTracker_exportString( const WindowPositionTracker& sel
typedef ConstReferenceCaller1<WindowPositionTracker, const StringImportCallback&, WindowPositionTracker_exportString> WindowPositionTrackerExportStringCaller;
class WindowMaximizer
{
GtkWindow* m_window;
int m_state;
Callback m_onMaximized;
public:
void connect( GtkWindow* window, int state, Callback&& onMaximized ){
if( state & ( GDK_WINDOW_STATE_MAXIMIZED | GDK_WINDOW_STATE_ICONIFIED | GDK_WINDOW_STATE_FULLSCREEN ) ){
m_window = window;
m_state = 0;
m_onMaximized = onMaximized;
g_signal_connect( G_OBJECT( window ), "window-state-event", G_CALLBACK( window_state_event ), this );
if ( state & GDK_WINDOW_STATE_MAXIMIZED ||
state & GDK_WINDOW_STATE_ICONIFIED ) {
gtk_window_maximize( window );
m_state |= GDK_WINDOW_STATE_MAXIMIZED;
}
if ( state & GDK_WINDOW_STATE_FULLSCREEN ) {
gtk_window_fullscreen( window );
m_state |= GDK_WINDOW_STATE_FULLSCREEN;
}
}
else{
onMaximized();
}
}
static gboolean window_state_event( GtkWidget* widget, GdkEvent* event, WindowMaximizer* self ){
if( ( ( (GdkEventWindowState*)event )->new_window_state & self->m_state ) == self->m_state ){
g_signal_handlers_disconnect_by_data( G_OBJECT( self->m_window ), self );
self->m_onMaximized();
}
return FALSE;
}
};
#endif
+5 -8
View File
@@ -3315,14 +3315,12 @@ void MainFrame::Create(){
EverySecondTimer_enable();
if ( g_layout_globals.nState & GDK_WINDOW_STATE_MAXIMIZED ||
g_layout_globals.nState & GDK_WINDOW_STATE_ICONIFIED ) {
gtk_window_maximize( window );
}
if ( g_layout_globals.nState & GDK_WINDOW_STATE_FULLSCREEN ) {
gtk_window_fullscreen( window );
}
m_windowMaximizer.connect( window, g_layout_globals.nState, MemberCaller<MainFrame, &MainFrame::SetWindowInfo>( *this ) );
//GlobalShortcuts_reportUnregistered();
}
void MainFrame::SetWindowInfo(){
if ( !FloatingGroupDialog() ) {
gtk_paned_set_position( GTK_PANED( m_vSplit ), g_layout_globals.nXYHeight );
@@ -3336,7 +3334,6 @@ void MainFrame::Create(){
gtk_paned_set_position( GTK_PANED( m_vSplit2 ), g_layout_globals.nCamHeight );
}
//GlobalShortcuts_reportUnregistered();
}
void MainFrame::SaveWindowInfo(){
+2
View File
@@ -67,6 +67,7 @@ GtkWindow* m_window;
private:
void Create();
void SetWindowInfo();
void SaveWindowInfo();
void Shutdown();
@@ -90,6 +91,7 @@ GtkWidget *m_statusLabel[c_status__count];
EViewStyle m_nCurrentStyle;
WindowPositionTracker m_position_tracker;
WindowMaximizer m_windowMaximizer;
IdleDraw m_idleRedrawStatusText;