[metacity] More fixes from mutter 1) https://git.gnome.org/browse/mutter/commit/src/ui/ui.c?id=f1620abfad0caf85



commit c9099b4a90932a22c86b960c8b4dc7cd1458defe
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date:   Tue Jun 3 20:07:15 2014 +0300

    More fixes from mutter
    1) https://git.gnome.org/browse/mutter/commit/src/ui/ui.c?id=f1620abfad0caf85b5958e32736accb3fecef7f1
    2) https://git.gnome.org/browse/mutter/commit/src/ui/ui.c?id=4e21d5d61010b0aa5ddc3acccd9598384c3e8f01
    3) https://git.gnome.org/browse/mutter/commit/?id=28deea44d45808c846fa674d80497ee6408a3e6f
    4) https://git.gnome.org/browse/mutter/commit/?id=b4344b5ab5ace489640d8477a07f71574a6dabd6
    5) https://git.gnome.org/browse/mutter/commit/?id=d95da2dfbe493e0718644e53789f0f110cc48ed5
    6) https://git.gnome.org/browse/mutter/commit/?id=e8209e7b221a4a108c132fa3a8ad27e9a8018a6d
    7) https://git.gnome.org/browse/mutter/commit/?id=6900128b2f51e670146107c50abf3ee227123acf
    8) https://git.gnome.org/browse/mutter/commit/?id=b58366d3ad380ccf391d4bc6d98e2cbd7830f449
    9) https://git.gnome.org/browse/mutter/commit/?id=8b64a951c9c61b2f8b319121c6feaa6d8f3dac26
    10) https://git.gnome.org/browse/mutter/commit/?id=b98e4e37addac48e09db817fda2ea0601a8bc54d
    11) https://git.gnome.org/browse/mutter/commit/?id=4e21d5d61010b0aa5ddc3acccd9598384c3e8f01
    12) https://git.gnome.org/browse/mutter/commit/?id=526bc34bba20b5f8d3055f2fb668a36a21357443

 src/ui/frames.c       |   38 +++++++-----------------
 src/ui/theme-parser.c |    6 ++--
 src/ui/theme-viewer.c |   21 +++++++++----
 src/ui/theme.c        |   76 +++++++++++++++++--------------------------------
 src/ui/theme.h        |   51 ++++-----------------------------
 src/ui/ui.c           |   17 ++++++++++-
 6 files changed, 77 insertions(+), 132 deletions(-)
---
diff --git a/src/ui/frames.c b/src/ui/frames.c
index 7ea0ff2..af0af5c 100644
--- a/src/ui/frames.c
+++ b/src/ui/frames.c
@@ -304,7 +304,7 @@ invalidate_cache (MetaFrames *frames,
   
   for (i = 0; i < 4; i++)
     if (pixels->piece[i].pixmap)
-      g_object_unref (pixels->piece[i].pixmap);
+      cairo_surface_destroy (pixels->piece[i].pixmap);
   
   g_free (pixels);
   g_hash_table_remove (frames->cache, frame);
@@ -1518,7 +1518,6 @@ meta_frames_button_press_event (GtkWidget      *widget,
             control == META_FRAME_CONTROL_RESIZE_W))
     {
       MetaGrabOp op;
-      gboolean titlebar_is_onscreen;
       
       op = META_GRAB_OP_NONE;
       
@@ -1553,28 +1552,16 @@ meta_frames_button_press_event (GtkWidget      *widget,
           break;
         }
 
-      meta_core_get (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), frame->xwindow,
-                     META_CORE_IS_TITLEBAR_ONSCREEN, &titlebar_is_onscreen,
-                     META_CORE_GET_END);
-
-      if (!titlebar_is_onscreen)
-        meta_core_show_window_menu (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()),
-                                    frame->xwindow,
-                                    event->x_root,
-                                    event->y_root,
-                                    event->button,
-                                    event->time);
-      else
-        meta_core_begin_grab_op (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()),
-                                 frame->xwindow,
-                                 op,
-                                 TRUE,
-                                 TRUE,
-                                 event->button,
-                                 0,
-                                 event->time,
-                                 event->x_root,
-                                 event->y_root);
+      meta_core_begin_grab_op (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()),
+                               frame->xwindow,
+                               op,
+                               TRUE,
+                               TRUE,
+                               event->button,
+                               0,
+                               event->time,
+                               event->x_root,
+                               event->y_root);
     }
   else if (control == META_FRAME_CONTROL_TITLE &&
            event->button == 1)
@@ -2281,7 +2268,6 @@ meta_frames_paint (MetaFrames   *frames,
                    MetaUIFrame  *frame,
                    cairo_t      *cr)
 {
-  GtkWidget *widget;
   MetaFrameFlags flags;
   MetaFrameType type;
   GdkPixbuf *mini_icon;
@@ -2294,7 +2280,6 @@ meta_frames_paint (MetaFrames   *frames,
   MetaGrabOp grab_op;
   Display *display;
 
-  widget = GTK_WIDGET (frames);
   display = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ());
 
   for (i = 0; i < META_BUTTON_TYPE_LAST; i++)
@@ -2393,7 +2378,6 @@ meta_frames_paint (MetaFrames   *frames,
 
   meta_theme_draw_frame_with_style (meta_theme_get_current (),
                                     frame->style,
-                                    widget,
                                     cr,
                                     type,
                                     flags,
diff --git a/src/ui/theme-parser.c b/src/ui/theme-parser.c
index 7e24764..3db225f 100644
--- a/src/ui/theme-parser.c
+++ b/src/ui/theme-parser.c
@@ -2245,7 +2245,7 @@ parse_draw_op_element (GMarkupParseContext  *context,
       const char *height;
       const char *filled;
       gboolean filled_val;
-      GtkStateType state_val;
+      GtkStateFlags state_val;
       GtkShadowType shadow_val;
       GtkArrowType arrow_val;
       
@@ -2335,7 +2335,7 @@ parse_draw_op_element (GMarkupParseContext  *context,
       const char *y;
       const char *width;
       const char *height;
-      GtkStateType state_val;
+      GtkStateFlags state_val;
       GtkShadowType shadow_val;
       
       if (!locate_attributes (context, element_name, attribute_names, attribute_values,
@@ -2403,7 +2403,7 @@ parse_draw_op_element (GMarkupParseContext  *context,
       const char *x;
       const char *y1;
       const char *y2;
-      GtkStateType state_val;
+      GtkStateFlags state_val;
       
       if (!locate_attributes (context, element_name, attribute_names, attribute_values,
                               error,
diff --git a/src/ui/theme-viewer.c b/src/ui/theme-viewer.c
index 47417b2..1de96a8 100644
--- a/src/ui/theme-viewer.c
+++ b/src/ui/theme-viewer.c
@@ -760,7 +760,7 @@ main (int argc, char **argv)
   GtkWidget *window;
   GtkWidget *collection;
   GtkStyleContext *style;
-  const PangoFontDescription *font_desc;
+  PangoFontDescription *font_desc;
   GError *err;
   clock_t start, end;
   GtkWidget *notebook;
@@ -836,7 +836,7 @@ main (int argc, char **argv)
 
   gtk_widget_realize (window);
   style = gtk_widget_get_style_context (window);
-  font_desc = gtk_style_context_get_font (style, 0);
+  gtk_style_context_get (style, GTK_STATE_FLAG_NORMAL, "font", &font_desc, NULL);
 
   g_assert (style);
   g_assert (font_desc);
@@ -871,7 +871,9 @@ main (int argc, char **argv)
   gtk_notebook_append_page (GTK_NOTEBOOK (notebook),
                             collection,
                             gtk_label_new (_("Benchmark")));
-  
+
+  pango_font_description_free (font_desc);
+
   i = 0;
   while (i < (int) G_N_ELEMENTS (previews))
     {
@@ -908,9 +910,16 @@ get_flags (GtkWidget *widget)
 static int
 get_text_height (GtkWidget *widget)
 {
-  GtkStyleContext *style = gtk_widget_get_style_context (widget);
-  return meta_pango_font_desc_get_text_height (gtk_style_context_get_font (style, 0),
-                                               gtk_widget_get_pango_context (widget));
+  GtkStyleContext      *style;
+  PangoFontDescription *font_desc;
+  int                   text_height;
+
+  style = gtk_widget_get_style_context (widget);
+  gtk_style_context_get (style, GTK_STATE_FLAG_NORMAL, "font", &font_desc, NULL);
+  text_height = meta_pango_font_desc_get_text_height (font_desc, gtk_widget_get_pango_context (widget));
+  pango_font_description_free (font_desc);
+
+  return text_height;
 }
 
 static PangoLayout*
diff --git a/src/ui/theme.c b/src/ui/theme.c
index 515c049..eab6c17 100644
--- a/src/ui/theme.c
+++ b/src/ui/theme.c
@@ -405,10 +405,7 @@ meta_frame_layout_get_borders (const MetaFrameLayout *layout,
 {
   int buttons_height, title_height;
   
-  g_return_if_fail (top_height != NULL);
-  g_return_if_fail (bottom_height != NULL);
-  g_return_if_fail (left_width != NULL);
-  g_return_if_fail (right_width != NULL);
+  g_return_if_fail (layout != NULL);
 
   if (!layout->has_title)
     text_height = 0;
@@ -608,7 +605,7 @@ strip_button (MetaButtonSpace *func_rects[MAX_BUTTONS_PER_CORNER],
   return FALSE; /* did not strip anything */
 }
 
-void
+static void
 meta_frame_layout_calc_geometry (const MetaFrameLayout  *layout,
                                  int                     text_height,
                                  MetaFrameFlags          flags,
@@ -1165,7 +1162,7 @@ meta_color_spec_new_from_string (const char *str,
       const char *bracket;
       const char *end_bracket;
       char *tmp;
-      GtkStateType state;
+      GtkStateFlags state;
       MetaGtkColorComponent component;
       
       bracket = str;
@@ -1224,7 +1221,6 @@ meta_color_spec_new_from_string (const char *str,
       spec = meta_color_spec_new (META_COLOR_SPEC_GTK);
       spec->data.gtk.state = state;
       spec->data.gtk.component = component;
-      g_assert (spec->data.gtk.state < N_GTK_STATES);
       g_assert (spec->data.gtk.component < META_GTK_COLOR_LAST);
     }
   else if (str[0] == 'b' && str[1] == 'l' && str[2] == 'e' && str[3] == 'n' &&
@@ -1376,7 +1372,7 @@ meta_color_spec_new_from_string (const char *str,
 
 MetaColorSpec*
 meta_color_spec_new_gtk (MetaGtkColorComponent component,
-                         GtkStateType          state)
+                         GtkStateFlags         state)
 {
   MetaColorSpec *spec;
 
@@ -3467,7 +3463,6 @@ fill_env (MetaPositionExprEnv *env,
 static void
 meta_draw_op_draw_with_env (const MetaDrawOp    *op,
                             GtkStyleContext     *style_gtk,
-                            GtkWidget           *widget,
                             cairo_t             *cr,
                             const MetaDrawInfo  *info,
                             MetaRectangle        rect,
@@ -3849,7 +3844,7 @@ meta_draw_op_draw_with_env (const MetaDrawOp    *op,
         d_rect.height = parse_size_unchecked (op->data.op_list.height, env);
 
         meta_draw_op_list_draw_with_style (op->data.op_list.op_list,
-                                           style_gtk, widget, cr, info,
+                                           style_gtk, cr, info,
                                            d_rect);
       }
       break;
@@ -3887,7 +3882,7 @@ meta_draw_op_draw_with_env (const MetaDrawOp    *op,
             while (tile.y < (ry + rheight))
               {
                 meta_draw_op_list_draw_with_style (op->data.tile.op_list,
-                                                   style_gtk, widget, cr, info,
+                                                   style_gtk, cr, info,
                                         tile);
 
                 tile.y += tile.height;
@@ -3954,7 +3949,6 @@ meta_draw_op_list_unref (MetaDrawOpList *op_list)
 void
 meta_draw_op_list_draw_with_style  (const MetaDrawOpList *op_list,
                                     GtkStyleContext      *style_gtk,
-                                    GtkWidget            *widget,
                                     cairo_t              *cr,
                                     const MetaDrawInfo   *info,
                                     MetaRectangle         rect)
@@ -3996,7 +3990,7 @@ meta_draw_op_list_draw_with_style  (const MetaDrawOpList *op_list,
         }
       else if (gdk_cairo_get_clip_rectangle (cr, NULL))
         {
-          meta_draw_op_draw_with_env (op, style_gtk, widget, cr, info, rect, &env);
+          meta_draw_op_draw_with_env (op, style_gtk, cr, info, rect, &env);
         }
     }
 
@@ -4362,10 +4356,9 @@ button_rect (MetaButtonType           type,
     }
 }
 
-void
+static void
 meta_frame_style_draw_with_style (MetaFrameStyle          *style,
                                   GtkStyleContext         *style_gtk,
-                                  GtkWidget               *widget,
                                   cairo_t                 *cr,
                                   const MetaFrameGeometry *fgeom,
                                   int                      client_width,
@@ -4532,7 +4525,6 @@ 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);
@@ -4571,7 +4563,6 @@ meta_frame_style_draw_with_style (MetaFrameStyle          *style,
                                           rect.width, rect.height);
                       meta_draw_op_list_draw_with_style (op_list,
                                                          style_gtk,
-                                                         widget,
                                                          cr,
                                                          &draw_info,
                                                          m_rect);
@@ -4598,25 +4589,6 @@ meta_frame_style_draw_with_style (MetaFrameStyle          *style,
     }
 }
 
-void
-meta_frame_style_draw (MetaFrameStyle          *style,
-                       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)
-{
-  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);
-}
-
 MetaFrameStyleSet*
 meta_frame_style_set_new (MetaFrameStyleSet *parent)
 {
@@ -5166,7 +5138,6 @@ meta_theme_get_title_scale (MetaTheme     *theme,
 void
 meta_theme_draw_frame_with_style (MetaTheme              *theme,
                                   GtkStyleContext        *style_gtk,
-                                  GtkWidget              *widget,
                                   cairo_t                *cr,
                                   MetaFrameType           type,
                                   MetaFrameFlags          flags,
@@ -5200,7 +5171,6 @@ meta_theme_draw_frame_with_style (MetaTheme              *theme,
 
   meta_frame_style_draw_with_style (style,
                                     style_gtk,
-                                    widget,
                                     cr,
                                     &fgeom,
                                     client_width, client_height,
@@ -5225,7 +5195,7 @@ meta_theme_draw_frame (MetaTheme              *theme,
                        GdkPixbuf              *mini_icon,
                        GdkPixbuf              *icon)
 {
-  meta_theme_draw_frame_with_style (theme, gtk_widget_get_style_context (widget), widget,
+  meta_theme_draw_frame_with_style (theme, gtk_widget_get_style_context (widget),
                                     cr, type, flags,
                                     client_width, client_height,
                                     title_layout, text_height,
@@ -5945,19 +5915,25 @@ meta_gradient_type_from_string (const char *str)
     return META_GRADIENT_LAST;
 }
 
-GtkStateType
+GtkStateFlags
 meta_gtk_state_from_string (const char *str)
 {
-  if (strcmp ("normal", str) == 0 || strcmp ("NORMAL", str) == 0)
-    return GTK_STATE_NORMAL;
-  else if (strcmp ("prelight", str) == 0 || strcmp ("PRELIGHT", str) == 0)
-    return GTK_STATE_PRELIGHT;
-  else if (strcmp ("active", str) == 0 || strcmp ("ACTIVE", str) == 0)
-    return GTK_STATE_ACTIVE;
-  else if (strcmp ("selected", str) == 0 || strcmp ("SELECTED", str) == 0)
-    return GTK_STATE_SELECTED;
-  else if (strcmp ("insensitive", str) == 0 || strcmp ("INSENSITIVE", str) == 0)
-    return GTK_STATE_INSENSITIVE;
+  if (g_ascii_strcasecmp ("normal", str) == 0)
+    return GTK_STATE_FLAG_NORMAL;
+  else if (g_ascii_strcasecmp ("prelight", str) == 0)
+    return GTK_STATE_FLAG_PRELIGHT;
+  else if (g_ascii_strcasecmp ("active", str) == 0)
+    return GTK_STATE_FLAG_ACTIVE;
+  else if (g_ascii_strcasecmp ("selected", str) == 0)
+    return GTK_STATE_FLAG_SELECTED;
+  else if (g_ascii_strcasecmp ("insensitive", str) == 0)
+    return GTK_STATE_FLAG_INSENSITIVE;
+  else if (g_ascii_strcasecmp ("inconsistent", str) == 0)
+    return GTK_STATE_FLAG_INCONSISTENT;
+  else if (g_ascii_strcasecmp ("focused", str) == 0)
+    return GTK_STATE_FLAG_FOCUSED;
+  else if (g_ascii_strcasecmp ("backdrop", str) == 0)
+    return GTK_STATE_FLAG_BACKDROP;
   else
     return -1; /* hack */
 }
diff --git a/src/ui/theme.h b/src/ui/theme.h
index ca8d808..af50e81 100644
--- a/src/ui/theme.h
+++ b/src/ui/theme.h
@@ -255,7 +255,7 @@ struct _MetaColorSpec
     } basic;
     struct {
       MetaGtkColorComponent component;
-      GtkStateType state;
+      GtkStateFlags state;
     } gtk;
     struct {
       MetaColorSpec *foreground;
@@ -497,7 +497,7 @@ struct _MetaDrawOp
     } image;
     
     struct {
-      GtkStateType state;
+      GtkStateFlags state;
       GtkShadowType shadow;
       GtkArrowType arrow;
       gboolean filled;
@@ -509,7 +509,7 @@ struct _MetaDrawOp
     } gtk_arrow;
 
     struct {
-      GtkStateType state;
+      GtkStateFlags state;
       GtkShadowType shadow;
       MetaDrawSpec *x;
       MetaDrawSpec *y;
@@ -518,7 +518,7 @@ struct _MetaDrawOp
     } gtk_box;
 
     struct {
-      GtkStateType state;
+      GtkStateFlags state;
       MetaDrawSpec *x;
       MetaDrawSpec *y1;
       MetaDrawSpec *y2;  
@@ -662,8 +662,6 @@ typedef enum
   META_FRAME_PIECE_LAST
 } MetaFramePiece;
 
-#define N_GTK_STATES 5
-
 /**
  * How to draw a frame in a particular state (say, a focussed, non-maximised,
  * resizable frame). This corresponds closely to the <frame_style> tag
@@ -856,14 +854,6 @@ void             meta_frame_layout_get_borders   (const MetaFrameLayout *layout,
                                                   int                   *bottom_height,
                                                   int                   *left_width,
                                                   int                   *right_width);
-void             meta_frame_layout_calc_geometry (const MetaFrameLayout  *layout,
-                                                  int                     text_height,
-                                                  MetaFrameFlags          flags,
-                                                  int                     client_width,
-                                                  int                     client_height,
-                                                  const MetaButtonLayout *button_layout,
-                                                  MetaFrameGeometry      *fgeom,
-                                                  MetaTheme              *theme);
 
 gboolean         meta_frame_layout_validate      (const MetaFrameLayout *layout,
                                                   GError               **error);
@@ -887,7 +877,7 @@ MetaColorSpec* meta_color_spec_new             (MetaColorSpecType  type);
 MetaColorSpec* meta_color_spec_new_from_string (const char        *str,
                                                 GError           **err);
 MetaColorSpec* meta_color_spec_new_gtk         (MetaGtkColorComponent component,
-                                                GtkStateType          state);
+                                                GtkStateFlags         state);
 void           meta_color_spec_free            (MetaColorSpec     *spec);
 void           meta_color_spec_render          (MetaColorSpec     *spec,
                                                 GtkStyleContext   *style_gtk,
@@ -902,7 +892,6 @@ void            meta_draw_op_list_ref   (MetaDrawOpList       *op_list);
 void            meta_draw_op_list_unref (MetaDrawOpList       *op_list);
 void            meta_draw_op_list_draw_with_style  (const MetaDrawOpList *op_list,
                                                     GtkStyleContext      *style_gtk,
-                                                    GtkWidget            *widget,
                                                     cairo_t              *cr,
                                                     const MetaDrawInfo   *info,
                                                     MetaRectangle         rect);
@@ -931,33 +920,6 @@ MetaFrameStyle* meta_frame_style_new   (MetaFrameStyle *parent);
 void            meta_frame_style_ref   (MetaFrameStyle *style);
 void            meta_frame_style_unref (MetaFrameStyle *style);
 
-void meta_frame_style_draw (MetaFrameStyle          *style,
-                            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);
-
-
-void meta_frame_style_draw_with_style (MetaFrameStyle          *style,
-                                       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);
-
-
 gboolean       meta_frame_style_validate (MetaFrameStyle    *style,
                                           guint              current_theme_version,
                                           GError           **error);
@@ -1006,7 +968,6 @@ void meta_theme_draw_frame (MetaTheme              *theme,
 
 void meta_theme_draw_frame_with_style (MetaTheme              *theme,
                                        GtkStyleContext        *style_gtk,
-                                       GtkWidget              *widget,
                                        cairo_t                *cr,
                                        MetaFrameType           type,
                                        MetaFrameFlags          flags,
@@ -1110,7 +1071,7 @@ const char*           meta_frame_focus_to_string       (MetaFrameFocus         f
 MetaFrameType         meta_frame_type_from_string      (const char            *str);
 const char*           meta_frame_type_to_string        (MetaFrameType          type);
 MetaGradientType      meta_gradient_type_from_string   (const char            *str);
-GtkStateType          meta_gtk_state_from_string       (const char            *str);
+GtkStateFlags         meta_gtk_state_from_string       (const char            *str);
 GtkShadowType         meta_gtk_shadow_from_string      (const char            *str);
 GtkArrowType          meta_gtk_arrow_from_string       (const char            *str);
 MetaImageFillType     meta_image_fill_type_from_string (const char            *str);
diff --git a/src/ui/ui.c b/src/ui/ui.c
index 29607c1..45d0575 100644
--- a/src/ui/ui.c
+++ b/src/ui/ui.c
@@ -706,6 +706,7 @@ meta_ui_theme_get_frame_borders (MetaUI *ui,
   PangoContext *context;
   const PangoFontDescription *font_desc;
   GtkStyleContext *style = NULL;
+  PangoFontDescription *free_font_desc = NULL;
 
   if (meta_ui_have_a_theme ())
     {
@@ -714,8 +715,19 @@ meta_ui_theme_get_frame_borders (MetaUI *ui,
 
       if (!font_desc)
         {
+          GdkDisplay *display = gdk_x11_lookup_xdisplay (ui->xdisplay);
+          GdkScreen *screen = gdk_display_get_screen (display, XScreenNumberOfScreen (ui->xscreen));
+          GtkWidgetPath *widget_path;
+
           style = gtk_style_context_new ();
-          gtk_style_context_get (style, GTK_STATE_FLAG_NORMAL, "font", &font_desc, NULL);
+          gtk_style_context_set_screen (style, screen);
+          widget_path = gtk_widget_path_new ();
+          gtk_widget_path_append_type (widget_path, GTK_TYPE_WINDOW);
+          gtk_style_context_set_path (style, widget_path);
+          gtk_widget_path_free (widget_path);
+
+          gtk_style_context_get (style, GTK_STATE_FLAG_NORMAL, "font", &free_font_desc, NULL);
+          font_desc = (const PangoFontDescription *) free_font_desc;
         }
 
       text_height = meta_pango_font_desc_get_text_height (font_desc, context);
@@ -724,6 +736,9 @@ meta_ui_theme_get_frame_borders (MetaUI *ui,
                                     type, text_height, flags,
                                     top_height, bottom_height,
                                     left_width, right_width);
+
+      if (free_font_desc)
+        pango_font_description_free (free_font_desc);
     }
   else
     {


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