]> git.saurik.com Git - wxWidgets.git/commitdiff
Avoid setting attributes in GTK wxDataViewRenderer if not supported.
authorVadim Zeitlin <vadim@wxwidgets.org>
Tue, 10 Nov 2009 17:41:22 +0000 (17:41 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Tue, 10 Nov 2009 17:41:22 +0000 (17:41 +0000)
If the native renderer doesn't support the properties which we map our
attributes to, trying to set them is useless and results in GTK+ warnings so
don't do it.

Add wxDataViewRenderer::GtkSupportsAttrs() which can be overridden to indicate
whether the renderer supports attributes or not. We probably could use
g_object_class_find_property() instead to detect it automatically but for now
these properties are all supported only by GtkCellRendererText and not
supported anywhere else so using a single virtual function seems tidier.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@62591 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/gtk/dvrenderer.h
include/wx/gtk/dvrenderers.h
src/gtk/dataview.cpp

index 9513104c1c8e1284d108f9f7630dcc58b2b88815..e019c00883b2f5320d0b9d2addd6e1e2bcb6c886 100644 (file)
@@ -53,6 +53,14 @@ public:
     void GtkInitHandlers();
     void GtkUpdateAlignment();
 
+    // should be overridden to return true if the renderer supports properties
+    // corresponding to wxDataViewItemAttr field, see wxGtkTreeCellDataFunc()
+    // for details
+    virtual bool GtkSupportsAttrs() const { return false; }
+
+    // these functions are only called if GtkSupportsAttrs() returns true and
+    // are used to remember whether the renderer currently uses the default
+    // attributes or if we changed (and not reset them)
     bool GtkIsUsingDefaultAttrs() const { return m_usingDefaultAttrs; }
     void GtkSetUsingDefaultAttrs(bool def) { m_usingDefaultAttrs = def; }
 
index 74c866ed402e2b6e637846ea9d9ebee1b3f720f0..845a938d34d8a66c328fb50753c5cdc275382853 100644 (file)
@@ -41,6 +41,8 @@ public:
 
     virtual void SetAlignment( int align );
 
+    virtual bool GtkSupportsAttrs() const { return true; }
+
 protected:
     // implementation of Set/GetValue()
     bool SetTextValue(const wxString& str);
index 26a3f53f282f5d97b0ae8dbedc2e06ac7fd47d10..5a5b89c2daecf00ae1c71d75648e5f0f8bf9b30e 100644 (file)
@@ -2587,7 +2587,15 @@ static void wxGtkTreeCellDataFunc( GtkTreeViewColumn *WXUNUSED(column),
     cell->SetValue( value );
 
 
-    // deal with attributes
+    // deal with attributes if we can handle them here: currently this is only
+    // the case for wxDataViewTextRenderer (and derived) class(es) because
+    // GtkCellRendererText is the only GTK renderer that we use which supports
+    // the properties below (foreground_gdk, style, weight) -- if any other
+    // renderers added in the future support them too, they should simply
+    // override their GtkSupportsAttrs() to return true
+    if ( !cell->GtkSupportsAttrs() )
+        return;
+
     wxDataViewItemAttr attr;
     if ( !wx_model->GetAttr( item, cell->GetOwner()->GetModelColumn(), attr )
             && cell->GtkIsUsingDefaultAttrs() )