banshee r3424 - in trunk/banshee: . src/Libraries/Hyena.Gui/Hyena.Gui



Author: abock
Date: Tue Mar 11 23:02:14 2008
New Revision: 3424
URL: http://svn.gnome.org/viewvc/banshee?rev=3424&view=rev

Log:
2008-03-11  Aaron Bockover  <abock gnome org>

    * src/Libraries/Hyena.Gui/Hyena.Gui/CairoExtensions.cs: Do not crash
    if the native Cairo pop/push group functions do not exist



Modified:
   trunk/banshee/ChangeLog
   trunk/banshee/src/Libraries/Hyena.Gui/Hyena.Gui/CairoExtensions.cs

Modified: trunk/banshee/src/Libraries/Hyena.Gui/Hyena.Gui/CairoExtensions.cs
==============================================================================
--- trunk/banshee/src/Libraries/Hyena.Gui/Hyena.Gui/CairoExtensions.cs	(original)
+++ trunk/banshee/src/Libraries/Hyena.Gui/Hyena.Gui/CairoExtensions.cs	Tue Mar 11 23:02:14 2008
@@ -300,14 +300,24 @@
             return false;
         }
         
+        private static bool native_push_pop_exists = true;
+        
         [DllImport ("libcairo.so.2")]
         private static extern void cairo_push_group (IntPtr ptr);
         private static CairoInteropCall cairo_push_group_call = new CairoInteropCall ("PushGroup");
         
         public static void PushGroup (Cairo.Context cr)
         {
-            if (!CallCairoMethod (cr, ref cairo_push_group_call)) {
-                cairo_push_group (cr.Handle);
+            if (!native_push_pop_exists) {
+                return;
+            }
+            
+            try {
+                if (!CallCairoMethod (cr, ref cairo_push_group_call)) {
+                    cairo_push_group (cr.Handle);
+                }
+            } catch {
+                native_push_pop_exists = false;
             }
         }
         
@@ -317,8 +327,16 @@
         
         public static void PopGroupToSource (Cairo.Context cr)
         {
-            if (!CallCairoMethod (cr, ref cairo_pop_group_to_source_call)) {
-                cairo_pop_group_to_source (cr.Handle);
+            if (!native_push_pop_exists) {
+                return;
+            }
+            
+            try {
+                if (!CallCairoMethod (cr, ref cairo_pop_group_to_source_call)) {
+                    cairo_pop_group_to_source (cr.Handle);
+                }
+            } catch (EntryPointNotFoundException) {
+                native_push_pop_exists = false;
             }
         }
     }



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]