]> de.git.xonotic.org Git - xonotic/netradiant.git/blobdiff - libs/gtkutil/widget.h
Merge branch 'NateEag-master-patch-12920' into 'master'
[xonotic/netradiant.git] / libs / gtkutil / widget.h
index a81054d449927b0344259154cd294a4af7b6a283..ff93211dc632e46e85983530be09c7f13b4d98ba 100644 (file)
 #include "generic/callback.h"
 #include "warnings.h"
 #include "debugging/debugging.h"
+#include "property.h"
 
-void widget_set_visible(ui::Widget widget, bool shown);
-
-bool widget_is_visible(ui::Widget widget);
+#define GARUX_GTK_WORKAROUND
+#ifndef GARUX_GTK_WORKAROUND
+inline bool widget_is_visible( GtkWidget* widget ){
+       return GTK_WIDGET_VISIBLE( widget ) != FALSE;
+}
 
-inline void widget_toggle_visible(ui::Widget widget)
-{
-    widget_set_visible(widget, !widget_is_visible(widget));
+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
+       {
+               gtk_widget_hide( widget );
+       }
 }
+#endif
 
 class ToggleItem {
-    BoolExportCallback m_exportCallback;
-    typedef std::list<BoolImportCallback> ImportCallbacks;
+    Callback<void(const Callback<void(bool)> &)> m_exportCallback;
+    typedef std::list<Callback<void(bool)>> ImportCallbacks;
     ImportCallbacks m_importCallbacks;
 public:
-    ToggleItem(const BoolExportCallback &exportCallback) : m_exportCallback(exportCallback)
+    ToggleItem(const Callback<void(const Callback<void(bool)> &)> &exportCallback) : m_exportCallback(exportCallback)
     {
     }
 
@@ -54,13 +71,13 @@ public:
         }
     }
 
-    void addCallback(const BoolImportCallback &callback)
+    void addCallback(const Callback<void(bool)> &callback)
     {
         m_importCallbacks.push_back(callback);
         m_exportCallback(callback);
     }
 
-    typedef MemberCaller1<ToggleItem, const BoolImportCallback &, &ToggleItem::addCallback> AddCallbackCaller;
+    typedef MemberCaller<ToggleItem, void(const Callback<void(bool)> &), &ToggleItem::addCallback> AddCallbackCaller;
 };
 
 class ToggleShown {
@@ -78,7 +95,7 @@ public:
     ToggleItem m_item;
 
     ToggleShown(bool shown)
-            : m_shownDeferred(shown), m_widget(0), m_item(ActiveCaller(*this))
+            : m_shownDeferred(shown), m_widget(ui::null), m_item(ActiveCaller(*this))
     {
     }
 
@@ -86,15 +103,15 @@ public:
 
     bool active() const;
 
-    void exportActive(const BoolImportCallback &importCallback);
+    void exportActive(const Callback<void(bool)> &importCallback);
 
-    typedef MemberCaller1<ToggleShown, const BoolImportCallback &, &ToggleShown::exportActive> ActiveCaller;
+    typedef MemberCaller<ToggleShown, void(const Callback<void(bool)> &), &ToggleShown::exportActive> ActiveCaller;
 
     void set(bool shown);
 
     void toggle();
 
-    typedef MemberCaller<ToggleShown, &ToggleShown::toggle> ToggleCaller;
+    typedef MemberCaller<ToggleShown, void(), &ToggleShown::toggle> ToggleCaller;
 
     void connect(ui::Widget widget);
 };
@@ -102,7 +119,7 @@ public:
 
 void widget_queue_draw(ui::Widget &widget);
 
-typedef ReferenceCaller<ui::Widget, widget_queue_draw> WidgetQueueDrawCaller;
+typedef ReferenceCaller<ui::Widget, void(), widget_queue_draw> WidgetQueueDrawCaller;
 
 
 void widget_make_default(ui::Widget widget);