banshee r3424 - in trunk/banshee: . src/Libraries/Hyena.Gui/Hyena.Gui
- From: abock svn gnome org
 
- To: svn-commits-list gnome org
 
- Subject: banshee r3424 - in trunk/banshee: . src/Libraries/Hyena.Gui/Hyena.Gui
 
- Date: Tue, 11 Mar 2008 23:02:14 +0000 (GMT)
 
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]