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 "debugging/debugging.h"
inline void widget_set_visible( GtkWidget* widget, bool shown ){
if ( shown ) {
inline bool widget_is_visible( GtkWidget* widget ){
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 );
}
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 ){
widget_set_visible( widget, !widget_is_visible( widget ) );

View File

@@ -29,12 +29,18 @@
inline void CHECK_RESTORE( GtkWidget* w ){
if ( gpointer_to_int( g_object_get_data( G_OBJECT( w ), "was_mapped" ) ) != 0 ) {
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 ){
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 ){
@@ -90,6 +96,23 @@ GtkWindow* create_floating_window( const char* title, GtkWindow* 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_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;