[mutter] ui: Port to GtkStyleContext



commit 565f002bc430a9e441081a73de1c77a7e3ca363b
Author: Florian Müllner <fmuellner gnome org>
Date:   Thu Dec 9 14:52:16 2010 +0100

    ui: Port to GtkStyleContext
    
    GtkStyle has been deprecated in favor of GtkStyleContext. A full
    port would involve replacing GdkColor with GdkRGBA - leave this
    out for the time being.
    
    Bump the required version of GTK+.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=637761

 src/ui/fixedtip.c       |   12 ++--
 src/ui/frames.c         |   30 +++-----
 src/ui/frames.h         |    2 +-
 src/ui/metaaccellabel.c |   18 +++--
 src/ui/tabpopup.c       |   37 ++++++----
 src/ui/testgradient.c   |   12 +++-
 src/ui/theme-private.h  |    8 +-
 src/ui/theme-viewer.c   |   23 ++++--
 src/ui/theme.c          |  171 ++++++++++++++++++++++++++++------------------
 src/ui/tile-preview.c   |   90 ++++++++++++-------------
 src/ui/ui.c             |    9 ++-
 11 files changed, 230 insertions(+), 182 deletions(-)
---
diff --git a/src/ui/fixedtip.c b/src/ui/fixedtip.c
index a9a14fc..7b0f86a 100644
--- a/src/ui/fixedtip.c
+++ b/src/ui/fixedtip.c
@@ -55,13 +55,11 @@ draw_handler (GtkWidget *tooltips,
               cairo_t   *cr,
               gpointer   user_data)
 {
-  gtk_paint_flat_box (gtk_widget_get_style (tip),
-                      cr,
-                      GTK_STATE_NORMAL, GTK_SHADOW_OUT, 
-                      tip, "tooltip",
-                      0, 0,
-                      gtk_widget_get_allocated_width (tip),
-                      gtk_widget_get_allocated_height (tip));
+  gtk_render_background (gtk_widget_get_style_context (tooltips),
+                         cr,
+                         0, 0,
+                         gtk_widget_get_allocated_width (tooltips),
+                         gtk_widget_get_allocated_height (tooltips));
 
   return FALSE;
 }
diff --git a/src/ui/frames.c b/src/ui/frames.c
index e121623..0c4cb9f 100644
--- a/src/ui/frames.c
+++ b/src/ui/frames.c
@@ -43,12 +43,11 @@
 
 #define DEFAULT_INNER_BUTTON_BORDER 3
 
-static void meta_frames_destroy    (GtkWidget       *object);
-static void meta_frames_finalize   (GObject         *object);
-static void meta_frames_style_set  (GtkWidget       *widget,
-                                    GtkStyle        *prev_style);
-static void meta_frames_map        (GtkWidget       *widget);
-static void meta_frames_unmap      (GtkWidget       *widget);
+static void meta_frames_destroy       (GtkWidget       *object);
+static void meta_frames_finalize      (GObject         *object);
+static void meta_frames_style_updated (GtkWidget       *widget);
+static void meta_frames_map           (GtkWidget       *widget);
+static void meta_frames_unmap         (GtkWidget       *widget);
 
 static void meta_frames_update_prelit_control (MetaFrames      *frames,
                                                MetaUIFrame     *frame,
@@ -137,7 +136,7 @@ meta_frames_class_init (MetaFramesClass *class)
 
   widget_class->destroy = meta_frames_destroy;
 
-  widget_class->style_set = meta_frames_style_set;
+  widget_class->style_updated = meta_frames_style_updated;
 
   widget_class->map = meta_frames_map;
   widget_class->unmap = meta_frames_unmap;
@@ -422,8 +421,7 @@ reattach_style_func (gpointer key, gpointer value, gpointer data)
 }
 
 static void
-meta_frames_style_set  (GtkWidget *widget,
-                        GtkStyle  *prev_style)
+meta_frames_style_updated  (GtkWidget *widget)
 {
   MetaFrames *frames;
 
@@ -434,7 +432,7 @@ meta_frames_style_set  (GtkWidget *widget,
   g_hash_table_foreach (frames->frames,
                         reattach_style_func, frames);
 
-  GTK_WIDGET_CLASS (meta_frames_parent_class)->style_set (widget, prev_style);
+  GTK_WIDGET_CLASS (meta_frames_parent_class)->style_updated (widget);
 }
 
 static void
@@ -577,12 +575,9 @@ meta_frames_attach_style (MetaFrames  *frames,
                           MetaUIFrame *frame)
 {
   if (frame->style != NULL)
-    gtk_style_detach (frame->style);
+    g_object_unref (frame->style);
 
-  /* Weirdly, gtk_style_attach() steals a reference count from the style passed in */
-  g_object_ref (gtk_widget_get_style (GTK_WIDGET (frames)));
-  frame->style = gtk_style_attach (gtk_widget_get_style (GTK_WIDGET (frames)),
-                                   frame->window);
+  frame->style = g_object_ref (gtk_widget_get_style_context (GTK_WIDGET (frames)));
 }
 
 void
@@ -653,7 +648,7 @@ meta_frames_unmanage_window (MetaFrames *frames,
       
       g_hash_table_remove (frames->frames, &frame->xwindow);
 
-      gtk_style_detach (frame->style);
+      g_object_unref (frame->style);
 
       gdk_window_destroy (frame->window);
 
@@ -2469,8 +2464,7 @@ meta_frames_set_window_background (MetaFrames   *frames,
     }
   else
     {
-      gtk_style_set_background (frame->style,
-                                frame->window, GTK_STATE_NORMAL);
+      gtk_style_context_set_background (frame->style, frame->window);
     }
  }
 
diff --git a/src/ui/frames.h b/src/ui/frames.h
index 8889096..6ab3a60 100644
--- a/src/ui/frames.h
+++ b/src/ui/frames.h
@@ -75,7 +75,7 @@ struct _MetaUIFrame
 {
   Window xwindow;
   GdkWindow *window;
-  GtkStyle *style;
+  GtkStyleContext *style;
   MetaFrameStyle *cache_style;
   PangoLayout *layout;
   int text_height;
diff --git a/src/ui/metaaccellabel.c b/src/ui/metaaccellabel.c
index 05abf6b..18b659f 100644
--- a/src/ui/metaaccellabel.c
+++ b/src/ui/metaaccellabel.c
@@ -255,6 +255,7 @@ meta_accel_label_draw (GtkWidget *widget,
 
   if (allocation.width >= requisition.width + ac_width)
     {
+      GtkStyleContext *style;
       PangoLayout *label_layout;
       PangoLayout *accel_layout;
       GtkLabel *label = GTK_LABEL (widget);
@@ -302,14 +303,15 @@ meta_accel_label_draw (GtkWidget *widget,
 
       y = (allocation.height - (requisition.height - ypad * 2)) * yalign + 1.5;
 
-      gtk_paint_layout (gtk_widget_get_style (widget),
-                        cr,
-                        gtk_widget_get_state (widget),
-                        FALSE,
-                        widget,
-                        "accellabel",
-                        x, y,
-                        accel_layout);                            
+      style = gtk_widget_get_style_context (widget);
+      gtk_style_context_save (style);
+      gtk_style_context_set_state (style,
+                                   gtk_widget_get_state_flags (widget));
+      gtk_render_layout (gtk_widget_get_style_context (widget),
+                         cr,
+                         x, y,
+                         accel_layout);
+      gtk_style_context_restore (style);
 
       g_object_unref (accel_layout);
     }
diff --git a/src/ui/tabpopup.c b/src/ui/tabpopup.c
index 2bc3fe0..5136cb5 100644
--- a/src/ui/tabpopup.c
+++ b/src/ui/tabpopup.c
@@ -78,7 +78,6 @@ outline_window_draw (GtkWidget *widget,
 {
   MetaTabPopup *popup;
   TabEntry *te;
-  GtkStyle *style;
   
   popup = data;
 
@@ -86,10 +85,9 @@ outline_window_draw (GtkWidget *widget,
     return FALSE;
 
   te = popup->current_selected_entry;
-  style = gtk_widget_get_style (widget);
 
   cairo_set_line_width (cr, 1.0);
-  gdk_cairo_set_source_color (cr, &style->white);
+  cairo_set_source_rgb (cr, 1.0, 1.0, 1.0);
 
   cairo_rectangle (cr,
                    0.5, 0.5,
@@ -479,6 +477,7 @@ display_entry (MetaTabPopup *popup,
     {
       cairo_region_t *region;
       cairo_region_t *inner_region;
+      GdkRGBA black = { 0.0, 0.0, 0.0, 1.0 };
 
       window = gtk_widget_get_window (popup->outline_window);
 
@@ -495,9 +494,7 @@ display_entry (MetaTabPopup *popup,
                               te->rect.x, te->rect.y,
                               te->rect.width, te->rect.height);
   
-      gdk_window_set_background (window,
-                                 &gtk_widget_get_style (popup->outline_window)->black);
-
+      gdk_window_set_background_rgba (window, &black);
 
 
       region = cairo_region_create_rectangle (&rect);
@@ -709,9 +706,9 @@ meta_select_image_draw (GtkWidget *widget,
     {
       GtkMisc *misc;
       GtkRequisition requisition;
-      GtkStyle *style;
-      GtkStateType state;
+      GtkStyleContext *context;
       GdkWindow *window;
+      GdkRGBA color;
       int x, y, w, h;
       gint xpad, ypad;
       gfloat xalign, yalign;
@@ -732,11 +729,15 @@ meta_select_image_draw (GtkWidget *widget,
       h = requisition.height - OUTSIDE_SELECT_RECT * 2 - 1;
 
       window = gtk_widget_get_window (widget);
-      style = gtk_widget_get_style (widget);
-      state = gtk_widget_get_state (widget);
+      context = gtk_widget_get_style_context (widget);
+
+      gtk_style_context_set_state (context,
+                                   gtk_widget_get_state_flags (widget));
+
+      gtk_style_context_lookup_color (context, "color", &color);
 
       cairo_set_line_width (cr, 2.0);
-      gdk_cairo_set_source_color (cr, &style->fg[state]);
+      cairo_set_source_rgb (cr, color.red, color.green, color.blue);
 
       cairo_rectangle (cr, x, y, w + 1, h + 1);
       cairo_stroke (cr);
@@ -891,7 +892,6 @@ meta_select_workspace_draw (GtkWidget *widget,
   MetaWorkspace *workspace;
   WnckWindowDisplayInfo *windows;
   GtkAllocation allocation;
-  GtkStyle *style;
   int i, n_windows;
   GList *tmp, *list;
 
@@ -949,11 +949,18 @@ meta_select_workspace_draw (GtkWidget *widget,
   
   if (META_SELECT_WORKSPACE (widget)->selected)
     {
-      style = gtk_widget_get_style (widget);
+      GtkStyleContext *context;
+      GdkRGBA color;
+
+      context = gtk_widget_get_style_context (widget);
+
+      gtk_style_context_set_state (context,
+                                   gtk_widget_get_state_flags (widget));
+
+      gtk_style_context_lookup_color (context, "color", &color);
 
-      gdk_cairo_set_source_color (cr,
-                                  &style->fg[gtk_widget_get_state (widget)]);
       cairo_set_line_width (cr, SELECT_OUTLINE_WIDTH);
+      cairo_set_source_rgb (cr, color.red, color.green, color.blue);
 
       cairo_rectangle (cr,
                        SELECT_OUTLINE_WIDTH / 2.0, SELECT_OUTLINE_WIDTH / 2.0,
diff --git a/src/ui/testgradient.c b/src/ui/testgradient.c
index eb20fa9..a07c77d 100644
--- a/src/ui/testgradient.c
+++ b/src/ui/testgradient.c
@@ -224,11 +224,17 @@ draw_callback (GtkWidget *widget,
                gpointer   data)
 {
   RenderGradientFunc func = data;
-  GtkStyle *style;
+  GtkStyleContext *style;
+  GdkRGBA color;
 
-  style = gtk_widget_get_style (widget);
+  style = gtk_widget_get_style_context (widget);
 
-  gdk_cairo_set_source_color (cr, &style->fg[gtk_widget_get_state (widget)]);
+  gtk_style_context_save (style);
+  gtk_style_context_set_state (style, gtk_widget_get_state_flags (widget));
+  gtk_style_context_lookup_color (style, "foreground-color", &color);
+  gtk_style_context_restore (style);
+
+  cairo_set_source_rgba (cr, color.red, color.green, color.blue, color.alpha);
 
   (* func) (cr,
             gtk_widget_get_allocated_width (widget),
diff --git a/src/ui/theme-private.h b/src/ui/theme-private.h
index 78f6549..a942056 100644
--- a/src/ui/theme-private.h
+++ b/src/ui/theme-private.h
@@ -975,7 +975,7 @@ void           meta_draw_op_draw (const MetaDrawOp    *op,
                                   MetaRectangle        logical_region);
 
 void           meta_draw_op_draw_with_style (const MetaDrawOp    *op,
-                                             GtkStyle            *style_gtk,
+                                             GtkStyleContext     *style_gtk,
                                              GtkWidget           *widget,
                                              cairo_t             *cr,
                                              const MetaDrawInfo  *info,
@@ -991,7 +991,7 @@ void            meta_draw_op_list_draw  (const MetaDrawOpList *op_list,
                                          const MetaDrawInfo   *info,
                                          MetaRectangle         rect);
 void            meta_draw_op_list_draw_with_style  (const MetaDrawOpList *op_list,
-                                                    GtkStyle             *style_gtk,
+                                                    GtkStyleContext      *style_gtk,
                                                     GtkWidget            *widget,
                                                     cairo_t              *cr,
                                                     const MetaDrawInfo   *info,
@@ -1035,7 +1035,7 @@ void meta_frame_style_draw (MetaFrameStyle          *style,
 
 
 void meta_frame_style_draw_with_style (MetaFrameStyle          *style,
-                                       GtkStyle                *style_gtk,
+                                       GtkStyleContext         *style_gtk,
                                        GtkWidget               *widget,
                                        cairo_t                 *cr,
                                        const MetaFrameGeometry *fgeom,
@@ -1101,7 +1101,7 @@ void meta_theme_draw_frame_by_name (MetaTheme              *theme,
                                     GdkPixbuf              *icon);
 
 void meta_theme_draw_frame_with_style (MetaTheme              *theme,
-                                       GtkStyle               *style_gtk,
+                                       GtkStyleContext        *style_gtk,
                                        GtkWidget              *widget,
                                        cairo_t                *cr,
                                        MetaFrameType           type,
diff --git a/src/ui/theme-viewer.c b/src/ui/theme-viewer.c
index 4f973ea..c2addb1 100644
--- a/src/ui/theme-viewer.c
+++ b/src/ui/theme-viewer.c
@@ -472,7 +472,7 @@ get_window_flags (MetaFrameType type)
 
 static GtkWidget*
 preview_collection (int font_size,
-                    PangoFontDescription *base_desc)
+                    const PangoFontDescription *base_desc)
 {
   GtkWidget *box;
   GtkWidget *sw;
@@ -780,7 +780,8 @@ benchmark_summary (void)
 int
 main (int argc, char **argv)
 {
-  GtkStyle *style;
+  GtkStyleContext *style;
+  const PangoFontDescription *font_desc;
   GtkWidget *window;
   GtkWidget *collection;
   GError *err;
@@ -857,28 +858,29 @@ main (int argc, char **argv)
                     G_CALLBACK (gtk_main_quit), NULL);
 
   gtk_widget_realize (window);
-  style = gtk_widget_get_style (window);
+  style = gtk_widget_get_style_context (window);
+  font_desc = gtk_style_context_get_font (style, 0);
 
   g_assert (style);
-  g_assert (style->font_desc);
+  g_assert (font_desc);
   
   notebook = gtk_notebook_new ();
   gtk_container_add (GTK_CONTAINER (window), notebook);
 
   collection = preview_collection (FONT_SIZE_NORMAL,
-                                   style->font_desc);
+                                   font_desc);
   gtk_notebook_append_page (GTK_NOTEBOOK (notebook),
                             collection,
                             gtk_label_new (_("Normal Title Font")));
   
   collection = preview_collection (FONT_SIZE_SMALL,
-                                   style->font_desc);
+                                   font_desc);
   gtk_notebook_append_page (GTK_NOTEBOOK (notebook),
                             collection,
                             gtk_label_new (_("Small Title Font")));
   
   collection = preview_collection (FONT_SIZE_LARGE,
-                                   style->font_desc);
+                                   font_desc);
   gtk_notebook_append_page (GTK_NOTEBOOK (notebook),
                             collection,
                             gtk_label_new (_("Large Title Font")));
@@ -929,7 +931,12 @@ get_flags (GtkWidget *widget)
 static int
 get_text_height (GtkWidget *widget)
 {
-  return meta_pango_font_desc_get_text_height (gtk_widget_get_style (widget)->font_desc,
+  GtkStyleContext *style;
+  const PangoFontDescription *font_desc;
+
+  style = gtk_widget_get_style_context (widget);
+  font_desc = gtk_style_context_get_font (style, 0);
+  return meta_pango_font_desc_get_text_height (font_desc,
                                                gtk_widget_get_pango_context (widget));
 }
 
diff --git a/src/ui/theme.c b/src/ui/theme.c
index ad17910..589d749 100644
--- a/src/ui/theme.c
+++ b/src/ui/theme.c
@@ -3472,6 +3472,30 @@ fill_env (MetaPositionExprEnv *env,
   env->theme = meta_current_theme;
 }
 
+static GtkStateFlags
+state_flags_from_gtk_state (GtkStateType state)
+{
+  switch (state)
+    {
+    case GTK_STATE_NORMAL:
+      return 0;
+    case GTK_STATE_PRELIGHT:
+      return GTK_STATE_FLAG_PRELIGHT;
+    case GTK_STATE_ACTIVE:
+      return GTK_STATE_FLAG_ACTIVE;
+    case GTK_STATE_SELECTED:
+      return GTK_STATE_FLAG_SELECTED;
+    case GTK_STATE_INSENSITIVE:
+      return GTK_STATE_FLAG_INSENSITIVE;
+    case GTK_STATE_INCONSISTENT:
+      return GTK_STATE_FLAG_INCONSISTENT;
+    case GTK_STATE_FOCUSED:
+      return GTK_STATE_FLAG_FOCUSED;
+    }
+  return 0;
+}
+
+
 /* This code was originally rendering anti-aliased using X primitives, and
  * now has been switched to draw anti-aliased using cairo. In general, the
  * closest correspondence between X rendering and cairo rendering is given
@@ -3485,7 +3509,7 @@ fill_env (MetaPositionExprEnv *env,
  */
 static void
 meta_draw_op_draw_with_env (const MetaDrawOp    *op,
-                            GtkStyle            *style_gtk,
+                            GtkStyleContext     *style_gtk,
                             GtkWidget           *widget,
                             cairo_t             *cr,
                             const MetaDrawInfo  *info,
@@ -3495,6 +3519,7 @@ meta_draw_op_draw_with_env (const MetaDrawOp    *op,
   GdkColor color;
 
   cairo_save (cr);
+  gtk_style_context_save (style_gtk);
 
   cairo_set_line_width (cr, 1.0);
 
@@ -3744,21 +3769,36 @@ meta_draw_op_draw_with_env (const MetaDrawOp    *op,
     case META_DRAW_GTK_ARROW:
       {
         int rx, ry, rwidth, rheight;
+        double angle = 0, size;
 
         rx = parse_x_position_unchecked (op->data.gtk_arrow.x, env);
         ry = parse_y_position_unchecked (op->data.gtk_arrow.y, env);
         rwidth = parse_size_unchecked (op->data.gtk_arrow.width, env);
         rheight = parse_size_unchecked (op->data.gtk_arrow.height, env);
 
-        gtk_paint_arrow (style_gtk,
-                         cr,
-                         op->data.gtk_arrow.state,
-                         op->data.gtk_arrow.shadow,
-                         widget,
-                         "metacity",
-                         op->data.gtk_arrow.arrow,
-                         op->data.gtk_arrow.filled,
-                         rx, ry, rwidth, rheight);
+        size = MAX(rwidth, rheight);
+
+        switch (op->data.gtk_arrow.arrow)
+          {
+          case GTK_ARROW_UP:
+            angle = 0;
+            break;
+          case GTK_ARROW_RIGHT:
+            angle = M_PI / 2;
+            break;
+          case GTK_ARROW_DOWN:
+            angle = M_PI;
+            break;
+          case GTK_ARROW_LEFT:
+            angle = 3 * M_PI / 2;
+            break;
+          case GTK_ARROW_NONE:
+            return;
+          }
+
+        gtk_style_context_set_state (style_gtk,
+                                     state_flags_from_gtk_state (op->data.gtk_arrow.state));
+        gtk_render_arrow (style_gtk, cr, angle, rx, ry, size);
       }
       break;
 
@@ -3771,13 +3811,10 @@ meta_draw_op_draw_with_env (const MetaDrawOp    *op,
         rwidth = parse_size_unchecked (op->data.gtk_box.width, env);
         rheight = parse_size_unchecked (op->data.gtk_box.height, env);
 
-        gtk_paint_box (style_gtk,
-                       cr,
-                       op->data.gtk_box.state,
-                       op->data.gtk_box.shadow,
-                       widget,
-                       "metacity",
-                       rx, ry, rwidth, rheight);
+        gtk_style_context_set_state (style_gtk,
+                                     state_flags_from_gtk_state (op->data.gtk_box.state));
+        gtk_render_background (style_gtk, cr, rx, ry, rwidth, rheight);
+        gtk_render_frame (style_gtk, cr, rx, ry, rwidth, rheight);
       }
       break;
 
@@ -3789,12 +3826,9 @@ meta_draw_op_draw_with_env (const MetaDrawOp    *op,
         ry1 = parse_y_position_unchecked (op->data.gtk_vline.y1, env);
         ry2 = parse_y_position_unchecked (op->data.gtk_vline.y2, env);
         
-        gtk_paint_vline (style_gtk,
-                          cr,
-                          op->data.gtk_vline.state,
-                          widget,
-                          "metacity",
-                          ry1, ry2, rx);
+        gtk_style_context_set_state (style_gtk,
+                                     state_flags_from_gtk_state (op->data.gtk_vline.state));
+        gtk_render_line (style_gtk, cr, rx, ry1, rx, ry2);
       }
       break;
 
@@ -3939,15 +3973,16 @@ meta_draw_op_draw_with_env (const MetaDrawOp    *op,
     }
 
   cairo_restore (cr);
+  gtk_style_context_restore (style_gtk);
 }
 
 void
 meta_draw_op_draw_with_style (const MetaDrawOp    *op,
-                              GtkStyle            *style_gtk,
-                   GtkWidget           *widget,
-                   cairo_t             *cr,
-                   const MetaDrawInfo  *info,
-                   MetaRectangle        logical_region)
+                              GtkStyleContext     *style_gtk,
+                              GtkWidget           *widget,
+                              cairo_t             *cr,
+                              const MetaDrawInfo  *info,
+                              MetaRectangle        logical_region)
 {
   MetaPositionExprEnv env;
 
@@ -3966,8 +4001,8 @@ meta_draw_op_draw (const MetaDrawOp    *op,
                    const MetaDrawInfo  *info,
                    MetaRectangle        logical_region)
 {
-  meta_draw_op_draw_with_style (op, gtk_widget_get_style (widget), widget,
-                                cr, info, logical_region);
+  meta_draw_op_draw_with_style (op, gtk_widget_get_style_context (widget),
+                                widget, cr, info, logical_region);
 }
 
 /**
@@ -4023,11 +4058,11 @@ meta_draw_op_list_unref (MetaDrawOpList *op_list)
 
 void
 meta_draw_op_list_draw_with_style  (const MetaDrawOpList *op_list,
-                                    GtkStyle             *style_gtk,
-                         GtkWidget            *widget,
-                         cairo_t              *cr,
-                         const MetaDrawInfo   *info,
-                         MetaRectangle         rect)
+                                    GtkStyleContext      *style_gtk,
+                                    GtkWidget            *widget,
+                                    cairo_t              *cr,
+                                    const MetaDrawInfo   *info,
+                                    MetaRectangle         rect)
 {
   int i;
   MetaPositionExprEnv env;
@@ -4088,7 +4123,7 @@ meta_draw_op_list_draw  (const MetaDrawOpList *op_list,
                          MetaRectangle         rect)
 
 {
-  meta_draw_op_list_draw_with_style (op_list, gtk_widget_get_style (widget), widget,
+  meta_draw_op_list_draw_with_style (op_list, gtk_widget_get_style_context (widget), widget,
                                      cr, info, rect);
 }
 
@@ -4472,17 +4507,17 @@ button_rect (MetaButtonType           type,
 
 void
 meta_frame_style_draw_with_style (MetaFrameStyle          *style,
-                                  GtkStyle                *style_gtk,
-                       GtkWidget               *widget,
-                       cairo_t                 *cr,
-                       const MetaFrameGeometry *fgeom,
-                       int                      client_width,
-                       int                      client_height,
-                       PangoLayout             *title_layout,
-                       int                      text_height,
-                       MetaButtonState          button_states[META_BUTTON_TYPE_LAST],
-                       GdkPixbuf               *mini_icon,
-                       GdkPixbuf               *icon)
+                                  GtkStyleContext         *style_gtk,
+                                  GtkWidget               *widget,
+                                  cairo_t                 *cr,
+                                  const MetaFrameGeometry *fgeom,
+                                  int                      client_width,
+                                  int                      client_height,
+                                  PangoLayout             *title_layout,
+                                  int                      text_height,
+                                  MetaButtonState          button_states[META_BUTTON_TYPE_LAST],
+                                  GdkPixbuf               *mini_icon,
+                                  GdkPixbuf               *icon)
 {
   int i, j;
   GdkRectangle titlebar_rect;
@@ -4640,10 +4675,10 @@ meta_frame_style_draw_with_style (MetaFrameStyle          *style,
               m_rect = meta_rect (rect.x, rect.y, rect.width, rect.height);
               meta_draw_op_list_draw_with_style (op_list,
                                                  style_gtk,
-                                      widget,
-                                      cr,
-                                      &draw_info,
-                                      m_rect);
+                                                 widget,
+                                                 cr,
+                                                 &draw_info,
+                                                 m_rect);
             }
         }
 
@@ -4723,7 +4758,7 @@ meta_frame_style_draw (MetaFrameStyle          *style,
                        GdkPixbuf               *mini_icon,
                        GdkPixbuf               *icon)
 {
-  meta_frame_style_draw_with_style (style, gtk_widget_get_style (widget), widget,
+  meta_frame_style_draw_with_style (style, gtk_widget_get_style_context (widget), widget,
                                     cr, fgeom, client_width, client_height,
                                     title_layout, text_height,
                                     button_states, mini_icon, icon);
@@ -5336,19 +5371,19 @@ meta_theme_get_title_scale (MetaTheme     *theme,
 
 void
 meta_theme_draw_frame_with_style (MetaTheme              *theme,
-                                  GtkStyle               *style_gtk,
-                       GtkWidget              *widget,
-                       cairo_t                *cr,
-                       MetaFrameType           type,
-                       MetaFrameFlags          flags,
-                       int                     client_width,
-                       int                     client_height,
-                       PangoLayout            *title_layout,
-                       int                     text_height,
-                       const MetaButtonLayout *button_layout,
-                       MetaButtonState         button_states[META_BUTTON_TYPE_LAST],
-                       GdkPixbuf              *mini_icon,
-                       GdkPixbuf              *icon)
+                                  GtkStyleContext        *style_gtk,
+                                  GtkWidget              *widget,
+                                  cairo_t                *cr,
+                                  MetaFrameType           type,
+                                  MetaFrameFlags          flags,
+                                  int                     client_width,
+                                  int                     client_height,
+                                  PangoLayout            *title_layout,
+                                  int                     text_height,
+                                  const MetaButtonLayout *button_layout,
+                                  MetaButtonState         button_states[META_BUTTON_TYPE_LAST],
+                                  GdkPixbuf              *mini_icon,
+                                  GdkPixbuf              *icon)
 {
   MetaFrameGeometry fgeom;
   MetaFrameStyle *style;
@@ -5396,7 +5431,7 @@ meta_theme_draw_frame (MetaTheme              *theme,
                        GdkPixbuf              *mini_icon,
                        GdkPixbuf              *icon)
 {
-  meta_theme_draw_frame_with_style (theme, gtk_widget_get_style (widget), widget,
+  meta_theme_draw_frame_with_style (theme, gtk_widget_get_style_context (widget), widget,
                                     cr, type,flags,
                                     client_width, client_height,
                                     title_layout, text_height,
@@ -5783,11 +5818,13 @@ meta_gtk_widget_get_font_desc (GtkWidget *widget,
                                double     scale,
 			       const PangoFontDescription *override)
 {
+  GtkStyleContext *style;
   PangoFontDescription *font_desc;
   
   g_return_val_if_fail (gtk_widget_get_realized (widget), NULL);
 
-  font_desc = pango_font_description_copy (gtk_widget_get_style (widget)->font_desc);
+  style = gtk_widget_get_style_context (widget);
+  font_desc = pango_font_description_copy (gtk_style_context_get_font (style, 0));
 
   if (override)
     pango_font_description_merge (font_desc, override, TRUE);
diff --git a/src/ui/tile-preview.c b/src/ui/tile-preview.c
index 3a0bbbd..f955fe8 100644
--- a/src/ui/tile-preview.c
+++ b/src/ui/tile-preview.c
@@ -36,8 +36,7 @@ struct _MetaTilePreview {
   GtkWidget     *preview_window;
   gulong         create_serial;
 
-  GdkColor      *preview_color;
-  guchar         preview_alpha;
+  GdkRGBA       *preview_color;
 
   MetaRectangle  tile_rect;
 
@@ -57,22 +56,23 @@ meta_tile_preview_draw (GtkWidget *widget,
     {
       /* Fill the preview area with a transparent color */
       cairo_set_source_rgba (cr,
-                             (double)preview->preview_color->red   / 0xFFFF,
-                             (double)preview->preview_color->green / 0xFFFF,
-                             (double)preview->preview_color->blue  / 0xFFFF,
-                             (double)preview->preview_alpha / 0xFF);
+                             preview->preview_color->red,
+                             preview->preview_color->green,
+                             preview->preview_color->blue,
+                             preview->preview_color->alpha);
 
       cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE);
       cairo_paint (cr);
 
       /* Use the opaque color for the border */
-      gdk_cairo_set_source_color (cr, preview->preview_color);
+      cairo_set_source_rgb (cr,
+                            preview->preview_color->red,
+                            preview->preview_color->green,
+                            preview->preview_color->blue);
     }
   else
     {
-      GtkStyle *style = gtk_widget_get_style (preview->preview_window);
-
-      gdk_cairo_set_source_color (cr, &style->white);
+      cairo_set_source_rgb (cr, 1.0, 1.0, 1.0);
 
       cairo_rectangle (cr,
                        OUTLINE_WIDTH - 0.5, OUTLINE_WIDTH - 0.5,
@@ -90,37 +90,6 @@ meta_tile_preview_draw (GtkWidget *widget,
   return FALSE;
 }
 
-static void
-on_preview_window_style_set (GtkWidget *widget,
-                             GtkStyle  *previous,
-                             gpointer   user_data)
-{
-  MetaTilePreview *preview = user_data;
-  GtkStyle *style;
-
-  style = gtk_rc_get_style_by_paths (gtk_widget_get_settings (widget),
-                                     "GtkWindow.GtkIconView",
-                                     "GtkWindow.GtkIconView",
-                                     GTK_TYPE_ICON_VIEW);
-
-  if (style != NULL)
-    g_object_ref (style);
-  else
-    style = gtk_style_new ();
-
-  gtk_style_get (style, GTK_TYPE_ICON_VIEW,
-                 "selection-box-color", &preview->preview_color,
-                 "selection-box-alpha", &preview->preview_alpha,
-                 NULL);
-  if (!preview->preview_color)
-    {
-      GdkColor selection = style->base[GTK_STATE_SELECTED];
-      preview->preview_color = gdk_color_copy (&selection);
-    }
-
-  g_object_unref (style);
-}
-
 MetaTilePreview *
 meta_tile_preview_new (int      screen_number,
                        gboolean composited)
@@ -138,7 +107,6 @@ meta_tile_preview_new (int      screen_number,
   gtk_widget_set_app_paintable (preview->preview_window, TRUE);
 
   preview->preview_color = NULL;
-  preview->preview_alpha = 0xFF;
 
   preview->tile_rect.x = preview->tile_rect.y = 0;
   preview->tile_rect.width = preview->tile_rect.height = 0;
@@ -148,11 +116,38 @@ meta_tile_preview_new (int      screen_number,
 
   if (preview->has_alpha)
     {
+      GtkStyleContext *context;
+      GtkWidgetPath *path;
+      guchar selection_alpha = 0xFF;
+
       gtk_widget_set_visual (preview->preview_window,
                              gdk_screen_get_rgba_visual (screen));
 
-      g_signal_connect (preview->preview_window, "style-set",
-                        G_CALLBACK (on_preview_window_style_set), preview);
+      path = gtk_widget_path_new ();
+      gtk_widget_path_append_type (path, GTK_TYPE_ICON_VIEW);
+
+      context = gtk_style_context_new ();
+      gtk_style_context_set_path (context, path);
+      gtk_style_context_add_class (context,
+                                   GTK_STYLE_CLASS_RUBBERBAND);
+
+      gtk_widget_path_free (path);
+
+      gtk_style_context_get (context, GTK_STATE_FLAG_SELECTED,
+                             "background-color", &preview->preview_color,
+                             NULL);
+
+      /* The background-color for the .rubberband class should probably
+       * contain the correct alpha value - unfortunately, at least for now
+       * it doesn't. Hopefully the following workaround can be removed
+       * when GtkIconView gets ported to GtkStyleContext.
+       */
+      gtk_style_context_get_style (context,
+                                   "selection-box-alpha", &selection_alpha,
+                                   NULL);
+      preview->preview_color->alpha = (double)selection_alpha / 0xFF;
+
+      g_object_unref (context);
     }
 
   /* We make an assumption that XCreateWindow will be the first operation
@@ -173,7 +168,7 @@ meta_tile_preview_free (MetaTilePreview *preview)
   gtk_widget_destroy (preview->preview_window);
 
   if (preview->preview_color)
-    gdk_color_free (preview->preview_color);
+    gdk_rgba_free (preview->preview_color);
 
   g_free (preview);
 }
@@ -214,10 +209,9 @@ meta_tile_preview_show (MetaTilePreview *preview,
     {
       cairo_region_t *outer_region, *inner_region;
       GdkRectangle outer_rect, inner_rect;
-      GdkColor black;
+      GdkRGBA black = { 0.0, 0.0, 0.0, 1.0 };
 
-      black = gtk_widget_get_style (preview->preview_window)->black;
-      gdk_window_set_background (window, &black);
+      gdk_window_set_background_rgba (window, &black);
 
       outer_rect.x = outer_rect.y = 0;
       outer_rect.width = preview->tile_rect.width;
diff --git a/src/ui/ui.c b/src/ui/ui.c
index 34d0d5c..4221a27 100644
--- a/src/ui/ui.c
+++ b/src/ui/ui.c
@@ -713,9 +713,9 @@ meta_ui_theme_get_frame_borders (MetaUI *ui,
                                  int               *right_width)
 {
   int text_height;
+  GtkStyleContext *style = NULL;
   PangoContext *context;
   const PangoFontDescription *font_desc;
-  GtkStyle *default_style;
 
   if (meta_ui_have_a_theme ())
     {
@@ -724,8 +724,8 @@ meta_ui_theme_get_frame_borders (MetaUI *ui,
 
       if (!font_desc)
         {
-          default_style = gtk_widget_get_default_style ();
-          font_desc = default_style->font_desc;
+          style = gtk_style_context_new ();
+          font_desc = gtk_style_context_get_font (style, 0);
         }
 
       text_height = meta_pango_font_desc_get_text_height (font_desc, context);
@@ -739,6 +739,9 @@ meta_ui_theme_get_frame_borders (MetaUI *ui,
     {
       *top_height = *bottom_height = *left_width = *right_width = 0;
     }
+
+  if (style != NULL)
+    g_object_unref (style);
 }
 
 void



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