X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=radiant%2Fgroupdialog.cpp;h=d96bc7c271bea3be9beae9c5f8974eb08d7bd0d0;hb=1e6c548b5786d6fda97ba3d6d138e4a60a4911cc;hp=f6847dd90253d30dc0f60319c8d09ba1b293615c;hpb=fea0d2e6575b21945c4800805d66e43a2247ded5;p=xonotic%2Fnetradiant.git diff --git a/radiant/groupdialog.cpp b/radiant/groupdialog.cpp index f6847dd9..d96bc7c2 100644 --- a/radiant/groupdialog.cpp +++ b/radiant/groupdialog.cpp @@ -41,10 +41,12 @@ #include "multimon.h" #include "console.h" #include "commands.h" - - #include "gtkutil/window.h" +#if defined(WORKAROUND_WINDOWS_GTK2_GLWIDGET) || defined(WORKAROUND_MACOS_GTK2_GLWIDGET) +#include "texwindow.h" +#endif // WORKAROUND_WINDOWS_GTK2_GLWIDGET || WORKAROUND_MACOS_GTK2_GLWIDGET + class GroupDlg { public: @@ -74,20 +76,34 @@ std::size_t g_current_page; std::vector &)>> g_pages; } +static void workaround_macos_show_hide(){ +#ifdef WORKAROUND_MACOS_GTK2_GLWIDGET + if ( g_current_page == 2 ) + { + TextureBrowser_showGLWidget(); + } + else + { + TextureBrowser_hideGLWidget(); + } +#endif // WORKAROUND_MACOS_GTK2_GLWIDGET +} + void GroupDialog_updatePageTitle( ui::Window window, std::size_t pageIndex ){ if ( pageIndex < g_pages.size() ) { g_pages[pageIndex]( PointerCaller( window ) ); } + + workaround_macos_show_hide(); } static gboolean switch_page( GtkNotebook *notebook, gpointer page, guint page_num, gpointer data ){ - GroupDialog_updatePageTitle( ui::Window::from(data), page_num ); g_current_page = page_num; - + GroupDialog_updatePageTitle( ui::Window::from(data), page_num ); return FALSE; } -GroupDlg::GroupDlg() : m_window( 0 ){ +GroupDlg::GroupDlg() : m_window( ui::null ){ m_position_tracker.setPosition( c_default_window_pos ); } @@ -112,7 +128,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 ); @@ -122,17 +138,15 @@ void GroupDlg::Create( ui::Window parent ){ } } - 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; } - bool GroupDialog_isShown(){ return g_GroupDlg.m_window.visible(); } @@ -152,7 +166,6 @@ void GroupDialog_destroyWindow(){ g_GroupDlg.m_window = ui::Window{ui::null}; } - ui::Window GroupDialog_getWindow(){ return ui::Window(g_GroupDlg.m_window); } @@ -161,28 +174,46 @@ 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 ){ g_current_page = gtk_notebook_page_num( GTK_NOTEBOOK( g_GroupDlg.m_pNotebook ), page ); gtk_notebook_set_current_page( GTK_NOTEBOOK( g_GroupDlg.m_pNotebook ), gint( g_current_page ) ); + + workaround_macos_show_hide(); +} + +#ifdef WORKAROUND_WINDOWS_GTK2_GLWIDGET +void GroupDialog_cycle(){ + g_current_page = ( g_current_page + 1 ) % g_pages.size(); + gtk_notebook_set_current_page( GTK_NOTEBOOK( g_GroupDlg.m_pNotebook ), gint( g_current_page ) ); } +#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 { g_GroupDlg.m_window.show(); GroupDialog_setPage( page ); } -} -void GroupDialog_cycle(){ - g_current_page = ( g_current_page + 1 ) % g_pages.size(); - gtk_notebook_set_current_page( GTK_NOTEBOOK( g_GroupDlg.m_pNotebook ), gint( g_current_page ) ); + workaround_macos_show_hide(); } void GroupDialog_updatePageTitle( ui::Widget page ){ @@ -191,7 +222,6 @@ void GroupDialog_updatePageTitle( ui::Widget page ){ } } - #include "preferencesystem.h" void GroupDialog_Construct(){