[gtk+] gtkdnd: Use RGBA windows when dragging if possible



commit 0296f1a43a803c0783781f9941a840256304641f
Author: Alexander Larsson <alexl redhat com>
Date:   Mon Aug 5 16:49:18 2013 +0200

    gtkdnd: Use RGBA windows when dragging if possible
    
    If we have rgba visuals and a composited screen we should
    just use a RGBA window rather than shaped windows.

 gtk/gtkdnd.c |   12 +++++++++++-
 1 files changed, 11 insertions(+), 1 deletions(-)
---
diff --git a/gtk/gtkdnd.c b/gtk/gtkdnd.c
index c3f842c..d9d888f 100644
--- a/gtk/gtkdnd.c
+++ b/gtk/gtkdnd.c
@@ -3378,6 +3378,8 @@ gtk_drag_set_icon_surface (GdkDragContext    *context,
   GdkScreen *screen;
   GdkRectangle extents;
   cairo_pattern_t *pattern;
+  GdkVisual *rgba_visual;
+  gboolean has_rgba;
       
   g_return_if_fail (GDK_IS_DRAG_CONTEXT (context));
   g_return_if_fail (surface != NULL);
@@ -3386,8 +3388,15 @@ gtk_drag_set_icon_surface (GdkDragContext    *context,
 
 
   screen = gdk_window_get_screen (gdk_drag_context_get_source_window (context));
+  rgba_visual = gdk_screen_get_rgba_visual (screen);
 
   window = gtk_window_new (GTK_WINDOW_POPUP);
+  has_rgba =
+    rgba_visual != NULL &&
+    gdk_screen_is_composited (screen);
+  if (has_rgba)
+    gtk_widget_set_visual (GTK_WIDGET (window), rgba_visual);
+
   gtk_window_set_type_hint (GTK_WINDOW (window), GDK_WINDOW_TYPE_HINT_DND);
   gtk_window_set_screen (GTK_WINDOW (window), screen);
   set_can_change_screen (window, TRUE);
@@ -3398,7 +3407,8 @@ gtk_drag_set_icon_surface (GdkDragContext    *context,
   gtk_widget_set_size_request (window, extents.width, extents.height);
   gtk_widget_realize (window);
 
-  if (cairo_surface_get_content (surface) != CAIRO_CONTENT_COLOR)
+  if (cairo_surface_get_content (surface) != CAIRO_CONTENT_COLOR &&
+      !has_rgba)
     {
       cairo_surface_t *saturated;
       cairo_region_t *region;


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