From 35309c8c6c534bd9b646d2cfe4046d5add6c75de Mon Sep 17 00:00:00 2001 From: Garux Date: Fri, 5 Jun 2020 23:49:04 +0300 Subject: [PATCH] fix Gdk-CRITICAL **: IA__gdk_window_get_window_type: assertion 'GDK_IS_WINDOW (window)' failed --- contrib/bobtoolz/dialogs/dialogs-gtk.cpp | 28 ++++++------------------ contrib/hydratoolz/plugin.cpp | 3 +-- contrib/prtview/AboutDialog.cpp | 2 -- contrib/prtview/ConfigDialog.cpp | 4 ---- contrib/prtview/LoadPortalFileDialog.cpp | 2 -- libs/gtkutil/dialog.cpp | 3 +-- radiant/mainframe.cpp | 14 +++++------- 7 files changed, 14 insertions(+), 42 deletions(-) diff --git a/contrib/bobtoolz/dialogs/dialogs-gtk.cpp b/contrib/bobtoolz/dialogs/dialogs-gtk.cpp index 1f40edfd..954703a6 100644 --- a/contrib/bobtoolz/dialogs/dialogs-gtk.cpp +++ b/contrib/bobtoolz/dialogs/dialogs-gtk.cpp @@ -313,12 +313,10 @@ EMessageBoxReturn DoMessageBox( const char* lpText, const char* lpCaption, EMess gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER_ON_PARENT ); gtk_widget_show( window ); - gtk_grab_add( window ); while ( loop ) gtk_main_iteration(); - gtk_grab_remove( window ); gtk_widget_destroy( window ); return ret; @@ -397,9 +395,9 @@ EMessageBoxReturn DoIntersectBox( IntersectRS* rs ){ // ---- /vbox ---- + gtk_window_set_modal( GTK_WINDOW( window ), TRUE ); gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER ); gtk_widget_show( window ); - gtk_grab_add( window ); while ( loop ) gtk_main_iteration(); @@ -414,7 +412,6 @@ EMessageBoxReturn DoIntersectBox( IntersectRS* rs ){ rs->bUseDetail = gtk_toggle_button_get_active( (GtkToggleButton*)check1 ) ? true : false; rs->bDuplicateOnly = gtk_toggle_button_get_active( (GtkToggleButton*)check2 ) ? true : false; - gtk_grab_remove( window ); gtk_widget_destroy( window ); return ret; @@ -561,7 +558,6 @@ EMessageBoxReturn DoPolygonBox( PolygonRS* rs ){ gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER_ON_PARENT ); gtk_window_set_modal( GTK_WINDOW( window ), TRUE ); gtk_widget_show( window ); - gtk_grab_add( window ); bool dialogError = TRUE; while ( dialogError ) @@ -589,7 +585,6 @@ EMessageBoxReturn DoPolygonBox( PolygonRS* rs ){ } } - gtk_grab_remove( window ); gtk_widget_destroy( window ); return ret; @@ -787,9 +782,9 @@ EMessageBoxReturn DoBuildStairsBox( BuildStairsRS* rs ){ ret = eIDCANCEL; // +djbob: need our "little" modal loop mars :P + gtk_window_set_modal( GTK_WINDOW( window ), TRUE ); gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER ); gtk_widget_show( window ); - gtk_grab_add( window ); bool dialogError = TRUE; while ( dialogError ) @@ -835,7 +830,6 @@ EMessageBoxReturn DoBuildStairsBox( BuildStairsRS* rs ){ } } - gtk_grab_remove( window ); gtk_widget_destroy( window ); return ret; @@ -1028,9 +1022,9 @@ EMessageBoxReturn DoDoorsBox( DoorRS* rs ){ // ----------------- // //+djbob + gtk_window_set_modal( GTK_WINDOW( window ), TRUE ); gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER ); gtk_widget_show( window ); - gtk_grab_add( window ); while ( loop ) gtk_main_iteration(); @@ -1050,7 +1044,6 @@ EMessageBoxReturn DoDoorsBox( DoorRS* rs ){ rs->nOrientation = DIRECTION_EW; } - gtk_grab_remove( window ); gtk_widget_destroy( window ); return ret; @@ -1195,9 +1188,9 @@ EMessageBoxReturn DoPathPlotterBox( PathPlotterRS* rs ){ // ----------------- // + gtk_window_set_modal( GTK_WINDOW( window ), TRUE ); gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER ); gtk_widget_show( window ); - gtk_grab_add( window ); bool dialogError = TRUE; while ( dialogError ) @@ -1226,7 +1219,6 @@ EMessageBoxReturn DoPathPlotterBox( PathPlotterRS* rs ){ } } - gtk_grab_remove( window ); gtk_widget_destroy( window ); return ret; @@ -1287,14 +1279,13 @@ EMessageBoxReturn DoCTFColourChangeBox(){ // ---- /vbox ---- + gtk_window_set_modal( GTK_WINDOW( window ), TRUE ); gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER ); gtk_widget_show( window ); - gtk_grab_add( window ); while ( loop ) gtk_main_iteration(); - gtk_grab_remove( window ); gtk_widget_destroy( window ); return ret; @@ -1570,7 +1561,6 @@ EMessageBoxReturn DoResetTextureBox( ResetTextureRS* rs ){ gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER_ON_PARENT ); gtk_widget_show( window ); - gtk_grab_add( window ); Update_TextureReseter(); @@ -1627,7 +1617,6 @@ EMessageBoxReturn DoResetTextureBox( ResetTextureRS* rs ){ } } - gtk_grab_remove( window ); gtk_widget_destroy( window ); return ret; @@ -1849,10 +1838,9 @@ EMessageBoxReturn DoTrainThingBox( TrainThingRS* rs ){ // ---- /hbox ---- - + gtk_window_set_modal( GTK_WINDOW( window ), TRUE ); gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER ); gtk_widget_show( window ); - gtk_grab_add( window ); bool dialogError = TRUE; while ( dialogError ) @@ -1894,7 +1882,6 @@ EMessageBoxReturn DoTrainThingBox( TrainThingRS* rs ){ } } - gtk_grab_remove( window ); gtk_widget_destroy( window ); return ret; @@ -1985,9 +1972,9 @@ EMessageBoxReturn DoMakeChainBox( MakeChainRS* rs ){ ret = eIDCANCEL; + gtk_window_set_modal( GTK_WINDOW( window ), TRUE ); gtk_window_set_position( GTK_WINDOW( window ),GTK_WIN_POS_CENTER ); gtk_widget_show( window ); - gtk_grab_add( window ); bool dialogError = TRUE; while ( dialogError ) @@ -2006,7 +1993,6 @@ EMessageBoxReturn DoMakeChainBox( MakeChainRS* rs ){ } } - gtk_grab_remove( window ); gtk_widget_destroy( window ); return ret; diff --git a/contrib/hydratoolz/plugin.cpp b/contrib/hydratoolz/plugin.cpp index 0caf635c..4f8cc6c9 100644 --- a/contrib/hydratoolz/plugin.cpp +++ b/contrib/hydratoolz/plugin.cpp @@ -85,6 +85,7 @@ int DoMessageBox( const char* lpText, const char* lpCaption, guint32 uType ){ int mode = ( uType & MB_TYPEMASK ), ret, loop = 1; window = gtk_window_new( GTK_WINDOW_TOPLEVEL ); + gtk_window_set_modal( GTK_WINDOW( window ), TRUE ); g_signal_connect( G_OBJECT( window ), "delete_event", G_CALLBACK( dialog_delete_callback ), NULL ); g_signal_connect( G_OBJECT( window ), "destroy", @@ -179,12 +180,10 @@ int DoMessageBox( const char* lpText, const char* lpCaption, guint32 uType ){ } gtk_widget_show( window ); - gtk_grab_add( window ); while ( loop ) gtk_main_iteration(); - gtk_grab_remove( window ); gtk_widget_destroy( window ); return ret; diff --git a/contrib/prtview/AboutDialog.cpp b/contrib/prtview/AboutDialog.cpp index 953ed622..533823b1 100644 --- a/contrib/prtview/AboutDialog.cpp +++ b/contrib/prtview/AboutDialog.cpp @@ -89,13 +89,11 @@ void DoAboutDlg(){ G_CALLBACK( dialog_button_callback ), GINT_TO_POINTER( IDOK ) ); gtk_widget_set_size_request( button, 60, -1 ); - gtk_grab_add( dlg ); gtk_widget_show( dlg ); while ( loop ) gtk_main_iteration(); - gtk_grab_remove( dlg ); gtk_widget_destroy( dlg ); } diff --git a/contrib/prtview/ConfigDialog.cpp b/contrib/prtview/ConfigDialog.cpp index 758fc62c..24084150 100644 --- a/contrib/prtview/ConfigDialog.cpp +++ b/contrib/prtview/ConfigDialog.cpp @@ -76,14 +76,12 @@ static int DoColor( PackedColour *c ){ g_object_set_data( G_OBJECT( dlg ), "ret", &ret ); gtk_widget_show( dlg ); - gtk_grab_add( dlg ); while ( loop ) gtk_main_iteration(); gtk_color_selection_get_current_color( GTK_COLOR_SELECTION( gtk_color_selection_dialog_get_color_selection( GTK_COLOR_SELECTION_DIALOG( dlg ) ) ), &clr ); - gtk_grab_remove( dlg ); gtk_widget_destroy( dlg ); if ( ret == IDOK ) { @@ -473,12 +471,10 @@ void DoConfigDialog(){ Set3DTransText( translabel ); SetClipText( cliplabel ); - gtk_grab_add( dlg ); gtk_widget_show( dlg ); while ( loop ) gtk_main_iteration(); - gtk_grab_remove( dlg ); gtk_widget_destroy( dlg ); } diff --git a/contrib/prtview/LoadPortalFileDialog.cpp b/contrib/prtview/LoadPortalFileDialog.cpp index 5263e420..58fb553a 100644 --- a/contrib/prtview/LoadPortalFileDialog.cpp +++ b/contrib/prtview/LoadPortalFileDialog.cpp @@ -135,7 +135,6 @@ int DoLoadPortalFileDialog(){ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( check2d ), portals.show_2d ); gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( check3d ), portals.show_3d ); - gtk_grab_add( dlg ); gtk_widget_show( dlg ); while ( loop ) @@ -150,7 +149,6 @@ int DoLoadPortalFileDialog(){ portals.show_2d = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( check2d ) ) ? true : false; } - gtk_grab_remove( dlg ); gtk_widget_destroy( dlg ); return ret; diff --git a/libs/gtkutil/dialog.cpp b/libs/gtkutil/dialog.cpp index 5aaecf3f..5e8d17aa 100644 --- a/libs/gtkutil/dialog.cpp +++ b/libs/gtkutil/dialog.cpp @@ -86,7 +86,7 @@ gboolean modal_dialog_delete( GtkWidget *widget, GdkEvent* event, ModalDialog* d } EMessageBoxReturn modal_dialog_show( GtkWindow* window, ModalDialog& dialog ){ - gtk_grab_add( GTK_WIDGET( window ) ); + gtk_window_set_modal( GTK_WINDOW( window ), TRUE ); gtk_widget_show( GTK_WIDGET( window ) ); dialog.loop = true; @@ -96,7 +96,6 @@ EMessageBoxReturn modal_dialog_show( GtkWindow* window, ModalDialog& dialog ){ } gtk_widget_hide( GTK_WIDGET( window ) ); - gtk_grab_remove( GTK_WIDGET( window ) ); return dialog.ret; } diff --git a/radiant/mainframe.cpp b/radiant/mainframe.cpp index 94990ac7..52814553 100644 --- a/radiant/mainframe.cpp +++ b/radiant/mainframe.cpp @@ -1823,9 +1823,8 @@ void EverySecondTimer_disable(){ } } -gint window_realize_remove_decoration( GtkWidget* widget, gpointer data ){ +void window_realize_remove_decoration( GtkWidget* widget, gpointer data ){ gdk_window_set_decorations( gtk_widget_get_window( widget ), (GdkWMDecoration)( GDK_DECOR_ALL | GDK_DECOR_MENU | GDK_DECOR_MINIMIZE | GDK_DECOR_MAXIMIZE ) ); - return FALSE; } class WaitDialog @@ -1835,10 +1834,11 @@ GtkWindow* m_window; GtkLabel* m_label; }; -WaitDialog create_wait_dialog( const char* title, const char* text ){ +WaitDialog create_wait_dialog( const char* title, const char* text, bool modal ){ WaitDialog dialog; dialog.m_window = create_floating_window( title, MainFrame_getWindow() ); + gtk_window_set_modal( dialog.m_window, modal ); gtk_window_set_resizable( dialog.m_window, FALSE ); gtk_container_set_border_width( GTK_CONTAINER( dialog.m_window ), 0 ); gtk_window_set_position( dialog.m_window, GTK_WIN_POS_CENTER_ON_PARENT ); @@ -1916,11 +1916,8 @@ void ScreenUpdates_Disable( const char* message, const char* title ){ bool isActiveApp = MainFrame_isActiveApp(); - g_wait = create_wait_dialog( title, message ); - if( !XYWnd::m_mnuDrop || !gtk_widget_get_visible( GTK_WIDGET( XYWnd::m_mnuDrop ) ) ){ - gtk_grab_add( GTK_WIDGET( g_wait.m_window ) ); - //globalOutputStream() << "grab grab grab\n"; - } + g_wait = create_wait_dialog( title, message, + !XYWnd::m_mnuDrop || !gtk_widget_get_visible( GTK_WIDGET( XYWnd::m_mnuDrop ) ) ); //hack: avoid hiding entity menu, clicked with ctrl, by tex/model loading popup if ( isActiveApp ) { gtk_widget_show( GTK_WIDGET( g_wait.m_window ) ); @@ -1941,7 +1938,6 @@ void ScreenUpdates_Enable(){ EverySecondTimer_enable(); //gtk_widget_set_sensitive(GTK_WIDGET(MainFrame_getWindow()), TRUE); - gtk_grab_remove( GTK_WIDGET( g_wait.m_window ) ); destroy_floating_window( g_wait.m_window ); g_wait.m_window = 0;