mirror of
https://github.com/Garux/netradiant-custom.git
synced 2026-09-28 00:00:03 +02:00
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:
@@ -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
|
||||
|
||||
@@ -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(){
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user