X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;f=radiant%2Fgroupdialog.cpp;h=f6d9c4be8080d5137fb589d537a9c37d2da541ad;hb=6998d7a4b8491415a8d01569c58a0e04e5f86dfa;hp=f175bc514c4cba810d0925829d2150cca3196015;hpb=18d60f90d7603cb420150739251cf98519c57406;p=xonotic%2Fnetradiant.git diff --git a/radiant/groupdialog.cpp b/radiant/groupdialog.cpp index f175bc51..f6d9c4be 100644 --- a/radiant/groupdialog.cpp +++ b/radiant/groupdialog.cpp @@ -71,7 +71,7 @@ namespace GroupDlg g_GroupDlg; std::size_t g_current_page; -std::vector g_pages; +std::vector &)>> g_pages; } void GroupDialog_updatePageTitle( ui::Window window, std::size_t pageIndex ){ @@ -87,7 +87,7 @@ static gboolean switch_page( GtkNotebook *notebook, gpointer page, guint page_nu return FALSE; } -GroupDlg::GroupDlg() : m_window( 0 ){ +GroupDlg::GroupDlg() : m_window( ui::null ){ m_position_tracker.setPosition( c_default_window_pos ); } @@ -112,7 +112,7 @@ void GroupDlg::Create( ui::Window parent ){ m_position_tracker.connect( window ); { - ui::Widget notebook = ui::Widget(gtk_notebook_new()); + ui::Widget notebook = ui::Widget::from(gtk_notebook_new()); notebook.show(); window.add(notebook); gtk_notebook_set_tab_pos( GTK_NOTEBOOK( notebook ), GTK_POS_BOTTOM ); @@ -123,10 +123,10 @@ void GroupDlg::Create( ui::Window parent ){ } -ui::Widget GroupDialog_addPage( const char* tabLabel, ui::Widget widget, const StringExportCallback& title ){ +ui::Widget GroupDialog_addPage( const char* tabLabel, ui::Widget widget, const Callback &)>& title ){ ui::Widget w = ui::Label( tabLabel ); w.show(); - ui::Widget page = ui::Widget(gtk_notebook_get_nth_page( GTK_NOTEBOOK( g_GroupDlg.m_pNotebook ), gtk_notebook_insert_page( GTK_NOTEBOOK( g_GroupDlg.m_pNotebook ), widget, w, -1 ) )); + auto page = ui::Widget::from(gtk_notebook_get_nth_page( GTK_NOTEBOOK( g_GroupDlg.m_pNotebook ), gtk_notebook_insert_page( GTK_NOTEBOOK( g_GroupDlg.m_pNotebook ), widget, w, -1 ) )); g_pages.push_back( title ); return page; @@ -161,7 +161,7 @@ void GroupDialog_show(){ } ui::Widget GroupDialog_getPage(){ - return ui::Widget(gtk_notebook_get_nth_page( GTK_NOTEBOOK( g_GroupDlg.m_pNotebook ), gint( g_current_page ) )); + return ui::Widget::from(gtk_notebook_get_nth_page( GTK_NOTEBOOK( g_GroupDlg.m_pNotebook ), gint( g_current_page ) )); } void GroupDialog_setPage( ui::Widget page ){ @@ -169,9 +169,24 @@ void GroupDialog_setPage( ui::Widget page ){ gtk_notebook_set_current_page( GTK_NOTEBOOK( g_GroupDlg.m_pNotebook ), gint( g_current_page ) ); } +#ifdef WORKAROUND_WINDOWS_GTK2_GLWIDGET +void GroupDialog_cycle(); +#endif // WORKAROUND_WINDOWS_GTK2_GLWIDGET + void GroupDialog_showPage( ui::Widget page ){ if ( GroupDialog_getPage() == page ) { GroupDialog_ToggleShow(); + +#ifdef WORKAROUND_WINDOWS_GTK2_GLWIDGET + /* workaround for gtk 2.24 issue: not displayed glwidget after toggle */ + /* this is very ugly: cycle to next tab then return to current tab immediately to force the refresh + * this fixes the drawing of texture tab when window is restored and current tab is texture tab + * this is called for nothing when windows is minimized and called for nothing when current tab + * is not texture tab, hopefully it's a workaround that would disappear with gtk 3 */ + GroupDialog_cycle(); + GroupDialog_setPage( page ); +#endif // WORKAROUND_WINDOWS_GTK2_GLWIDGET + } else { @@ -195,9 +210,9 @@ void GroupDialog_updatePageTitle( ui::Widget page ){ #include "preferencesystem.h" void GroupDialog_Construct(){ - GlobalPreferenceSystem().registerPreference( "EntityWnd", WindowPositionTrackerImportStringCaller( g_GroupDlg.m_position_tracker ), WindowPositionTrackerExportStringCaller( g_GroupDlg.m_position_tracker ) ); + GlobalPreferenceSystem().registerPreference( "EntityWnd", make_property( g_GroupDlg.m_position_tracker ) ); - GlobalCommands_insert( "ViewEntityInfo", FreeCaller(), Accelerator( 'N' ) ); + GlobalCommands_insert( "ViewEntityInfo", makeCallbackF(GroupDialog_ToggleShow), Accelerator( 'N' ) ); } void GroupDialog_Destroy(){ }