Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Leap:42.2:Ports
libfm
libfm-1.2.3-Fix-SF921.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File libfm-1.2.3-Fix-SF921.patch of Package libfm
From e9575e91ee7a5ec1e07bd373aa56b4ec8b2580e0 Mon Sep 17 00:00:00 2001 From: Andriy Grytsenko <andrej@rep.kiev.ua> Date: Mon, 11 May 2015 21:50:11 +0300 Subject: [PATCH] [SF#921] Rewrite broken rubberband rendering in icon view for GTK3. With GTK3 using GtkStyle doesn't always give correct results, therefore the GtkStyleContext with GTK_STYLE_CLASS_RUBBERBAND should be used instead. --- NEWS | 2 ++ src/gtk/exo/exo-icon-view.c | 38 +++++++++++++++++++++++++++----------- 2 files changed, 29 insertions(+), 11 deletions(-) diff --git a/NEWS b/NEWS index dee4a17..afbe5f4 100644 --- a/NEWS +++ b/NEWS @@ -25,6 +25,8 @@ * Fixed crash in expand_exec_macros() on missing Exec line. +* Rewritten broken rubberband rendering in icon view for GTK3. + Changes on 1.2.3 since 1.2.2: diff --git a/src/gtk/exo/exo-icon-view.c b/src/gtk/exo/exo-icon-view.c index a2bf042..b01e222 100644 --- a/src/gtk/exo/exo-icon-view.c +++ b/src/gtk/exo/exo-icon-view.c @@ -1859,21 +1859,23 @@ exo_icon_view_expose_event (GtkWidget *widget, GtkTreePath *path; GdkRectangle rubber_rect; GdkRectangle rect; - GtkStyle *style; - GdkColor *fill_color_gdk; - guchar fill_color_alpha = 0; const GList *lp; gint dest_index = -1; #if !GTK_CHECK_VERSION(3, 0, 0) + GdkColor *fill_color_gdk; + guchar fill_color_alpha = 0; gboolean rtl; gint event_area_last; GdkRectangle event_area; cairo_t *cr; + GtkStyle *style; /* verify that the expose happened on the icon window */ if (G_UNLIKELY (event->window != priv->bin_window)) return FALSE; #else + GtkStyleContext *style; + if (!gtk_cairo_should_draw_window (cr, priv->bin_window)) return FALSE; #endif @@ -1976,16 +1978,16 @@ exo_icon_view_expose_event (GtkWidget *widget, #endif } - /* draw the drag indicator */ - if (G_UNLIKELY (dest_item != NULL)) - { + if (G_UNLIKELY (dest_item != NULL || priv->doing_rubberband)) #if GTK_CHECK_VERSION(3, 0, 0) - GtkStyleContext *style = gtk_widget_get_style_context (widget); + style = gtk_widget_get_style_context (widget); #else - GtkStyle *style = gtk_widget_get_style (widget); + style = gtk_widget_get_style (widget); #endif - GdkRectangle rect = { 0 }; + /* draw the drag indicator */ + if (G_UNLIKELY (dest_item != NULL)) + { switch (dest_pos) { case EXO_ICON_VIEW_DROP_INTO: @@ -2015,6 +2017,7 @@ exo_icon_view_expose_event (GtkWidget *widget, rect.width = 2; rect.height = dest_item->area.height; case EXO_ICON_VIEW_NO_DROP: + rect.x = rect.y = rect.width = rect.height = 0; break; default: @@ -2043,7 +2046,6 @@ exo_icon_view_expose_event (GtkWidget *widget, if (gdk_rectangle_intersect (&rubber_rect, &event_area, &rect)) { cr = gdk_cairo_create (event->window); -#endif gtk_widget_style_get (widget, "selection-box-color", &fill_color_gdk, "selection-box-alpha", &fill_color_alpha, @@ -2072,9 +2074,23 @@ exo_icon_view_expose_event (GtkWidget *widget, cairo_set_line_width (cr, 1); cairo_stroke (cr); gdk_color_free (fill_color_gdk); -#if !GTK_CHECK_VERSION(3, 0, 0) cairo_destroy (cr); } +#else + gtk_style_context_save (style); + gtk_style_context_add_class (style, GTK_STYLE_CLASS_RUBBERBAND); + + gdk_cairo_rectangle (cr, &rubber_rect); + cairo_clip (cr); + + gtk_render_background (style, cr, + rubber_rect.x, rubber_rect.y, + rubber_rect.width, rubber_rect.height); + gtk_render_frame (style, cr, + rubber_rect.x, rubber_rect.y, + rubber_rect.width, rubber_rect.height); + + gtk_style_context_restore (style); #endif } -- 2.1.4
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor