misc...
	* fix of 2.24 related: minimize floating window = whole app minimizes + can't restore
	* fix of 2.24 related: glwidgets inside floating windows were not shown after hide/show of parent widgets
	* tex bro: menubar = toolbar
This commit is contained in:
Garux 2017-08-01 14:06:00 +03:00
parent dfc3e9c2a5
commit 2de8ee725b
10 changed files with 131 additions and 19 deletions

View File

@ -28,8 +28,20 @@
#include "warnings.h" #include "warnings.h"
#include "debugging/debugging.h" #include "debugging/debugging.h"
inline void widget_set_visible( GtkWidget* widget, bool shown ){ inline bool widget_is_visible( GtkWidget* widget ){
if ( shown ) { return GTK_WIDGET_VISIBLE( widget ) != FALSE;
}
inline void widget_set_visible( GtkWidget* widget, bool show ){
if ( show ) {
/* workaround for gtk 2.24 issue: not displayed glwidget after toggle */
GtkWidget* glwidget = GTK_WIDGET( g_object_get_data( G_OBJECT( widget ), "glwidget" ) );
if ( glwidget ){
//if ( widget_is_visible( glwidget ) )
//globalOutputStream() << "glwidget have been already visible :0\n"; /* is not hidden aswell, according to this */
gtk_widget_hide( glwidget );
gtk_widget_show( glwidget );
}
gtk_widget_show( widget ); gtk_widget_show( widget );
} }
else else
@ -38,9 +50,6 @@ inline void widget_set_visible( GtkWidget* widget, bool shown ){
} }
} }
inline bool widget_is_visible( GtkWidget* widget ){
return GTK_WIDGET_VISIBLE( widget ) != FALSE;
}
inline void widget_toggle_visible( GtkWidget* widget ){ inline void widget_toggle_visible( GtkWidget* widget ){
widget_set_visible( widget, !widget_is_visible( widget ) ); widget_set_visible( widget, !widget_is_visible( widget ) );

View File

@ -29,12 +29,18 @@
inline void CHECK_RESTORE( GtkWidget* w ){ inline void CHECK_RESTORE( GtkWidget* w ){
if ( gpointer_to_int( g_object_get_data( G_OBJECT( w ), "was_mapped" ) ) != 0 ) { if ( gpointer_to_int( g_object_get_data( G_OBJECT( w ), "was_mapped" ) ) != 0 ) {
gtk_widget_show( w ); gtk_widget_show( w );
/* workaround for gtk 2.24 issue: not displayed glwidget after min/restore */
GtkWidget* glwidget = GTK_WIDGET( g_object_get_data( G_OBJECT( w ), "glwidget" ) );
if ( glwidget ){
gtk_widget_hide( glwidget );
gtk_widget_show( glwidget );
}
} }
} }
inline void CHECK_MINIMIZE( GtkWidget* w ){ inline void CHECK_MINIMIZE( GtkWidget* w ){
g_object_set_data( G_OBJECT( w ), "was_mapped", gint_to_pointer( GTK_WIDGET_VISIBLE( w ) ) ); g_object_set_data( G_OBJECT( w ), "was_mapped", gint_to_pointer( GTK_WIDGET_VISIBLE( w ) ) );
gtk_widget_hide( w ); //gtk_widget_hide( w ); //fix for gtk 2.24 + the whole scheme isn't needed with gtk 2.16, 2.24; they do it all alone
} }
static gboolean main_window_iconified( GtkWidget* widget, GdkEventWindowState* event, gpointer data ){ static gboolean main_window_iconified( GtkWidget* widget, GdkEventWindowState* event, gpointer data ){
@ -90,6 +96,23 @@ GtkWindow* create_floating_window( const char* title, GtkWindow* parent ){
connect_floating_window_destroy_present( window, parent ); connect_floating_window_destroy_present( window, parent );
g_object_set_data( G_OBJECT( window ), "floating_handler", gint_to_pointer( connect_floating( parent, window ) ) ); g_object_set_data( G_OBJECT( window ), "floating_handler", gint_to_pointer( connect_floating( parent, window ) ) );
g_signal_connect( G_OBJECT( window ), "destroy", G_CALLBACK( destroy_disconnect_floating ), parent ); g_signal_connect( G_OBJECT( window ), "destroy", G_CALLBACK( destroy_disconnect_floating ), parent );
/*
//gtk_window_set_type_hint (window,GDK_WINDOW_TYPE_HINT_UTILITY);
//gtk_window_set_type_hint (window,GDK_WINDOW_TYPE_HINT_DIALOG);
gtk_window_set_keep_above ( window, TRUE );
GtkWidget* widget = GTK_WIDGET( window );
gtk_widget_realize ( widget );
GdkWindow* gdk_window = gtk_widget_get_window( widget );
//gdk_window_set_decorations ( gdk_window, (GdkWMDecoration)(GDK_DECOR_BORDER|GDK_DECOR_RESIZEH|GDK_DECOR_TITLE|GDK_DECOR_MENU|GDK_DECOR_MINIMIZE|GDK_DECOR_MAXIMIZE) );
//gdk_window_set_functions ( gdk_window, (GdkWMFunction)( GDK_FUNC_RESIZE|GDK_FUNC_MOVE|GDK_FUNC_MINIMIZE|GDK_FUNC_MAXIMIZE|GDK_FUNC_CLOSE ) );
//gdk_window_set_decorations ( gdk_window, (GdkWMDecoration)( GDK_DECOR_ALL ) );
//gdk_window_set_functions ( gdk_window, (GdkWMFunction)( GDK_FUNC_ALL ) );
//gdk_window_set_type_hint ( gdk_window, GDK_WINDOW_TYPE_HINT_DIALOG );
//gdk_window_set_type_hint ( gdk_window, GDK_WINDOW_TYPE_HINT_UTILITY );
//gdk_window_set_type_hint ( gdk_window, GDK_WINDOW_TYPE_HINT_NORMAL );
gdk_window_set_skip_taskbar_hint ( gdk_window, TRUE );
gdk_window_set_skip_pager_hint ( gdk_window, TRUE );
*/
} }
return window; return window;

View File

@ -61,6 +61,14 @@ void Create( GtkWindow* parent );
void Show(){ void Show(){
// workaround for strange gtk behaviour - modifying the contents of a window while it is not visible causes the window position to change without sending a configure_event // workaround for strange gtk behaviour - modifying the contents of a window while it is not visible causes the window position to change without sending a configure_event
m_position_tracker.sync( m_window ); m_position_tracker.sync( m_window );
/* workaround for gtk 2.24 issue: not displayed glwidget after toggle */
GtkWidget* glwidget = GTK_WIDGET( g_object_get_data( G_OBJECT( m_window ), "glwidget" ) );
if ( glwidget ){
//if ( widget_is_visible( glwidget ) )
//globalOutputStream() << "glwidget have been already visible :0\n"; /* is not hidden aswell, according to this */
gtk_widget_hide( glwidget );
gtk_widget_show( glwidget );
}
gtk_widget_show( GTK_WIDGET( m_window ) ); gtk_widget_show( GTK_WIDGET( m_window ) );
} }
void Hide(){ void Hide(){

View File

@ -573,6 +573,7 @@ int main( int argc, char* argv[] ){
#endif #endif
gtk_disable_setlocale(); gtk_disable_setlocale();
gtk_init( &argc, &argv ); gtk_init( &argc, &argv );
// redirect Gtk warnings to the console // redirect Gtk warnings to the console

View File

@ -2918,6 +2918,8 @@ void MainFrame::Create(){
gtk_container_add( GTK_CONTAINER( window ), GTK_WIDGET( frame ) ); gtk_container_add( GTK_CONTAINER( window ), GTK_WIDGET( frame ) );
} }
CamWnd_setParent( *m_pCamWnd, window ); CamWnd_setParent( *m_pCamWnd, window );
/* workaround for gtk 2.24 issue: not displayed glwidget after toggle */
g_object_set_data( G_OBJECT( window ), "glwidget", CamWnd_getWidget( *m_pCamWnd ) );
g_floating_windows.push_back( GTK_WIDGET( window ) ); g_floating_windows.push_back( GTK_WIDGET( window ) );
} }
@ -2937,6 +2939,8 @@ void MainFrame::Create(){
gtk_container_add( GTK_CONTAINER( window ), GTK_WIDGET( frame ) ); gtk_container_add( GTK_CONTAINER( window ), GTK_WIDGET( frame ) );
} }
XY_Top_Shown_Construct( window ); XY_Top_Shown_Construct( window );
/* workaround for gtk 2.24 issue: not displayed glwidget after toggle */
g_object_set_data( G_OBJECT( window ), "glwidget", m_pXYWnd->GetWidget() );
g_floating_windows.push_back( GTK_WIDGET( window ) ); g_floating_windows.push_back( GTK_WIDGET( window ) );
} }
@ -2956,6 +2960,8 @@ void MainFrame::Create(){
} }
XZ_Front_Shown_Construct( window ); XZ_Front_Shown_Construct( window );
/* workaround for gtk 2.24 issue: not displayed glwidget after toggle */
g_object_set_data( G_OBJECT( window ), "glwidget", m_pXZWnd->GetWidget() );
g_floating_windows.push_back( GTK_WIDGET( window ) ); g_floating_windows.push_back( GTK_WIDGET( window ) );
} }
@ -2975,6 +2981,8 @@ void MainFrame::Create(){
} }
YZ_Side_Shown_Construct( window ); YZ_Side_Shown_Construct( window );
/* workaround for gtk 2.24 issue: not displayed glwidget after toggle */
g_object_set_data( G_OBJECT( window ), "glwidget", m_pYZWnd->GetWidget() );
g_floating_windows.push_back( GTK_WIDGET( window ) ); g_floating_windows.push_back( GTK_WIDGET( window ) );
} }
@ -2982,6 +2990,9 @@ void MainFrame::Create(){
{ {
GtkFrame* frame = create_framed_widget( TextureBrowser_constructWindow( GroupDialog_getWindow() ) ); GtkFrame* frame = create_framed_widget( TextureBrowser_constructWindow( GroupDialog_getWindow() ) );
g_page_textures = GroupDialog_addPage( "Textures", GTK_WIDGET( frame ), TextureBrowserExportTitleCaller() ); g_page_textures = GroupDialog_addPage( "Textures", GTK_WIDGET( frame ), TextureBrowserExportTitleCaller() );
/* workaround for gtk 2.24 issue: not displayed glwidget after toggle */
g_object_set_data( G_OBJECT( GroupDialog_getWindow() ), "glwidget", TextureBrowser_getGLWidget() );
} }
GroupDialog_show(); GroupDialog_show();
@ -3015,6 +3026,8 @@ void MainFrame::Create(){
{ {
GtkFrame* frame = create_framed_widget( TextureBrowser_constructWindow( window ) ); GtkFrame* frame = create_framed_widget( TextureBrowser_constructWindow( window ) );
g_page_textures = GroupDialog_addPage( "Textures", GTK_WIDGET( frame ), TextureBrowserExportTitleCaller() ); g_page_textures = GroupDialog_addPage( "Textures", GTK_WIDGET( frame ), TextureBrowserExportTitleCaller() );
/* workaround for gtk 2.24 issue: not displayed glwidget after toggle */
g_object_set_data( G_OBJECT( GroupDialog_getWindow() ), "glwidget", TextureBrowser_getGLWidget() );
} }
} }

View File

@ -646,7 +646,7 @@ public:
void realise(){ void realise(){
m_realiseCallbacks(); m_realiseCallbacks();
/* texturebrowser tree update on vfs restart */ /* texturebrowser tree update on vfs restart */
TextureBrowser_constructTreeStore(); // TextureBrowser_constructTreeStore();
} }
void unrealise(){ void unrealise(){
} }
@ -1764,6 +1764,10 @@ GtkMenuItem* TextureBrowser_constructViewMenu( GtkMenu* menu ){
return textures_menu_item; return textures_menu_item;
} }
void Popup_View_Menu( GtkWidget *widget, GtkMenu *menu ){
gtk_menu_popup( menu, NULL, NULL, NULL, NULL, 1, gtk_get_current_event_time() );
}
GtkMenuItem* TextureBrowser_constructToolsMenu( GtkMenu* menu ){ GtkMenuItem* TextureBrowser_constructToolsMenu( GtkMenu* menu ){
GtkMenuItem* textures_menu_item = new_sub_menu_item_with_mnemonic( "_Tools" ); GtkMenuItem* textures_menu_item = new_sub_menu_item_with_mnemonic( "_Tools" );
@ -2071,25 +2075,54 @@ GtkWidget* TextureBrowser_constructWindow( GtkWindow* toplevel ){
GtkWidget* table = gtk_table_new( 3, 3, FALSE ); GtkWidget* table = gtk_table_new( 3, 3, FALSE );
GtkWidget* frame_table = NULL; GtkWidget* frame_table = NULL;
GtkWidget* vbox = gtk_vbox_new( FALSE, 0 ); GtkWidget* vbox = gtk_vbox_new( FALSE, 0 );
gtk_table_attach( GTK_TABLE( table ), vbox, 0, 1, 1, 3, GTK_FILL, GTK_FILL, 0, 0 ); gtk_table_attach( GTK_TABLE( table ), vbox, 0, 1, 0, 3, GTK_FILL, GTK_FILL, 0, 0 );
gtk_widget_show( vbox ); gtk_widget_show( vbox );
GtkWidget* menu_bar; //GtkWidget* menu_bar;
GtkToolbar* toolbar;
{ // menu bar { // menu bar
menu_bar = gtk_menu_bar_new(); //menu_bar = gtk_menu_bar_new();
GtkWidget* menu_view = gtk_menu_new(); GtkWidget* menu_view = gtk_menu_new();
GtkWidget* view_item = (GtkWidget*)TextureBrowser_constructViewMenu( GTK_MENU( menu_view ) ); //GtkWidget* view_item = (GtkWidget*)
gtk_menu_item_set_submenu( GTK_MENU_ITEM( view_item ), menu_view ); TextureBrowser_constructViewMenu( GTK_MENU( menu_view ) );
gtk_menu_bar_append( GTK_MENU_BAR( menu_bar ), view_item ); //gtk_menu_item_set_submenu( GTK_MENU_ITEM( view_item ), menu_view );
//gtk_menu_bar_append( GTK_MENU_BAR( menu_bar ), view_item );
toolbar = GTK_TOOLBAR( gtk_toolbar_new() );
//gtk_table_attach( GTK_TABLE( table ), GTK_WIDGET( toolbar ), 0, 1, 0, 1, GTK_FILL, GTK_FILL, 0, 0 );
gtk_box_pack_start( GTK_BOX( vbox ), GTK_WIDGET( toolbar ), FALSE, FALSE, 0 );
//view menu button
GtkButton* button = GTK_BUTTON( gtk_button_new() );
button_set_icon( button, "texbro_view.png" );
gtk_widget_show( GTK_WIDGET( button ) );
gtk_button_set_relief( button, GTK_RELIEF_NONE );
gtk_widget_set_size_request( GTK_WIDGET( button ), 22, 22 );
GTK_WIDGET_UNSET_FLAGS( GTK_WIDGET( button ), GTK_CAN_FOCUS );
GTK_WIDGET_UNSET_FLAGS( GTK_WIDGET( button ), GTK_CAN_DEFAULT );
gtk_toolbar_append_element( toolbar, GTK_TOOLBAR_CHILD_WIDGET, GTK_WIDGET( button ), "", "View", "", 0, 0, 0 );
g_signal_connect( G_OBJECT( button ), "clicked", G_CALLBACK( Popup_View_Menu ), menu_view );
button = toolbar_append_button( toolbar, "Find / Replace...", "texbro_gtk-find-and-replace.png", "FindReplaceTextures" );
gtk_widget_set_size_request( GTK_WIDGET( button ), 22, 22 );
button = toolbar_append_button( toolbar, "Flush & Reload Shaders", "texbro_refresh.png", "RefreshShaders" );
gtk_widget_set_size_request( GTK_WIDGET( button ), 22, 22 );
gtk_widget_show( GTK_WIDGET( toolbar ) );
/*
GtkWidget* menu_tools = gtk_menu_new(); GtkWidget* menu_tools = gtk_menu_new();
GtkWidget* tools_item = (GtkWidget*)TextureBrowser_constructToolsMenu( GTK_MENU( menu_tools ) ); GtkWidget* tools_item = (GtkWidget*)TextureBrowser_constructToolsMenu( GTK_MENU( menu_tools ) );
gtk_menu_item_set_submenu( GTK_MENU_ITEM( tools_item ), menu_tools ); gtk_menu_item_set_submenu( GTK_MENU_ITEM( tools_item ), menu_tools );
gtk_menu_bar_append( GTK_MENU_BAR( menu_bar ), tools_item ); gtk_menu_bar_append( GTK_MENU_BAR( menu_bar ), tools_item );
*/
gtk_table_attach( GTK_TABLE( table ), menu_bar, 0, 3, 0, 1, GTK_FILL, GTK_SHRINK, 0, 0 ); //gtk_table_attach( GTK_TABLE( table ), menu_bar, 0, 3, 0, 1, GTK_FILL, GTK_SHRINK, 0, 0 );
gtk_widget_show( menu_bar ); //gtk_widget_show( menu_bar );
} }
{ // Texture TreeView { // Texture TreeView
g_TextureBrowser.m_scr_win_tree = gtk_scrolled_window_new( NULL, NULL ); g_TextureBrowser.m_scr_win_tree = gtk_scrolled_window_new( NULL, NULL );
@ -2147,9 +2180,24 @@ GtkWidget* TextureBrowser_constructWindow( GtkWindow* toplevel ){
} }
{ // tag menu bar { // tag menu bar
GtkWidget* menu_tags = gtk_menu_new(); GtkWidget* menu_tags = gtk_menu_new();
GtkWidget* tags_item = (GtkWidget*)TextureBrowser_constructTagsMenu( GTK_MENU( menu_tags ) ); //GtkWidget* tags_item = (GtkWidget*)
gtk_menu_item_set_submenu( GTK_MENU_ITEM( tags_item ), menu_tags ); TextureBrowser_constructTagsMenu( GTK_MENU( menu_tags ) );
gtk_menu_bar_append( GTK_MENU_BAR( menu_bar ), tags_item ); //gtk_menu_item_set_submenu( GTK_MENU_ITEM( tags_item ), menu_tags );
//gtk_menu_bar_append( GTK_MENU_BAR( menu_bar ), tags_item );
GtkButton* button = GTK_BUTTON( gtk_button_new() );
//button_set_icon( button, "texbro_tags.png" );
GtkWidget *label = gtk_label_new (">t");
gtk_container_add (GTK_CONTAINER (button), label);
gtk_widget_show (label);
gtk_widget_show( GTK_WIDGET( button ) );
gtk_button_set_relief( button, GTK_RELIEF_NONE );
gtk_widget_set_size_request( GTK_WIDGET( button ), 22, 22 );
GTK_WIDGET_UNSET_FLAGS( GTK_WIDGET( button ), GTK_CAN_FOCUS );
GTK_WIDGET_UNSET_FLAGS( GTK_WIDGET( button ), GTK_CAN_DEFAULT );
gtk_toolbar_append_element( toolbar, GTK_TOOLBAR_CHILD_WIDGET, GTK_WIDGET( button ), "", "Tags", "", 0, 0, 0 );
g_signal_connect( G_OBJECT( button ), "clicked", G_CALLBACK( Popup_View_Menu ), menu_tags );
} }
{ // Tag TreeView { // Tag TreeView
g_TextureBrowser.m_scr_win_tags = gtk_scrolled_window_new( NULL, NULL ); g_TextureBrowser.m_scr_win_tags = gtk_scrolled_window_new( NULL, NULL );
@ -2497,6 +2545,8 @@ void RefreshShaders(){
ScopeDisableScreenUpdates disableScreenUpdates( "Processing...", "Loading Shaders" ); ScopeDisableScreenUpdates disableScreenUpdates( "Processing...", "Loading Shaders" );
GlobalShaderSystem().refresh(); GlobalShaderSystem().refresh();
/* texturebrowser tree update on vfs restart */
TextureBrowser_constructTreeStore();
UpdateAllWindows(); UpdateAllWindows();
TextureBrowser_ShowDirectory( GlobalTextureBrowser(), dirName ); TextureBrowser_ShowDirectory( GlobalTextureBrowser(), dirName );
@ -2505,6 +2555,8 @@ void RefreshShaders(){
else{ else{
ScopeDisableScreenUpdates disableScreenUpdates( "Processing...", "Loading Shaders" ); ScopeDisableScreenUpdates disableScreenUpdates( "Processing...", "Loading Shaders" );
GlobalShaderSystem().refresh(); GlobalShaderSystem().refresh();
/* texturebrowser tree update on vfs restart */
TextureBrowser_constructTreeStore();
UpdateAllWindows(); UpdateAllWindows();
} }
@ -2762,3 +2814,7 @@ void TextureBrowser_Destroy(){
Textures_setModeChangedNotify( Callback() ); Textures_setModeChangedNotify( Callback() );
} }
GtkWidget* TextureBrowser_getGLWidget(){
return GlobalTextureBrowser().m_gl_widget;
}

View File

@ -59,4 +59,6 @@ void TextureBrowser_setBackgroundColour( TextureBrowser& textureBrowser, const V
void TextureBrowser_addActiveShadersChangedCallback( const SignalHandler& handler ); void TextureBrowser_addActiveShadersChangedCallback( const SignalHandler& handler );
void TextureBrowser_addShadersRealiseCallback( const SignalHandler& handler ); void TextureBrowser_addShadersRealiseCallback( const SignalHandler& handler );
GtkWidget* TextureBrowser_getGLWidget();
#endif #endif

Binary file not shown.

After

Width:  |  Height:  |  Size: 875 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 783 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 781 B