[metacity] theme: don't use meta_prefs_get_theme to detect theme type



commit 4f36eb12f9fef06dc44122d310cba0ce5c886ffa
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date:   Sun Apr 5 15:26:48 2015 +0300

    theme: don't use meta_prefs_get_theme to detect theme type
    
    While this works fine with metacity it will not work in compiz
    gtk-window-decorator as this function will return only default
    value - NULL.

 src/ui/frames.c |   13 +++++++++----
 src/ui/theme.c  |   42 +++++++++++++++++++++++++++++-------------
 src/ui/theme.h  |    2 ++
 src/ui/ui.c     |    7 +++++--
 4 files changed, 45 insertions(+), 19 deletions(-)
---
diff --git a/src/ui/frames.c b/src/ui/frames.c
index 7864c4b..5691d24 100644
--- a/src/ui/frames.c
+++ b/src/ui/frames.c
@@ -507,6 +507,7 @@ meta_frames_ensure_layout (MetaFrames  *frames,
   if (frame->text_layout == NULL)
     {
       gpointer key, value;
+      MetaTheme *current;
       PangoFontDescription *font_desc;
       int size;
 
@@ -516,12 +517,13 @@ meta_frames_ensure_layout (MetaFrames  *frames,
       pango_layout_set_auto_dir (frame->text_layout, FALSE);
       pango_layout_set_single_paragraph_mode (frame->text_layout, TRUE);
 
-      if (meta_prefs_get_theme ())
+      current = meta_theme_get_current ();
+
+      if (current->is_gtk_theme == FALSE)
         {
           double scale;
 
-          scale = meta_theme_get_title_scale (meta_theme_get_current (),
-                                              type, flags);
+          scale = meta_theme_get_title_scale (current, type, flags);
 
           font_desc = meta_gtk_widget_get_font_desc (widget, scale,
                                                      meta_prefs_get_titlebar_font ());
@@ -2465,6 +2467,7 @@ meta_frames_draw (GtkWidget *widget,
 {
   MetaUIFrame *frame;
   MetaFrames *frames;
+  MetaTheme *current;
   CachedPixels *pixels;
   cairo_region_t *region;
   cairo_rectangle_int_t clip;
@@ -2486,7 +2489,9 @@ meta_frames_draw (GtkWidget *widget,
 
   populate_cache (frames, frame);
 
-  if (meta_prefs_get_theme ())
+  current = meta_theme_get_current ();
+
+  if (current->is_gtk_theme == FALSE)
     {
       MetaFrameGeometry fgeom;
 
diff --git a/src/ui/theme.c b/src/ui/theme.c
index fc16f9f..04a8ec8 100644
--- a/src/ui/theme.c
+++ b/src/ui/theme.c
@@ -666,13 +666,16 @@ meta_frame_layout_sync_with_style (MetaFrameLayout *layout,
                                    MetaStyleInfo   *style_info,
                                    MetaFrameFlags   flags)
 {
+  MetaTheme *current;
   GtkStyleContext *style;
   GtkBorder border;
   gboolean compositing_manager;
   int border_radius, max_radius;
 
+  current = meta_theme_get_current ();
+
   /* We don't want GTK+ info for metacity theme */
-  if (meta_prefs_get_theme ())
+  if (current->is_gtk_theme == FALSE)
     return;
 
   compositing_manager = meta_prefs_get_compositing_manager ();
@@ -765,6 +768,7 @@ meta_frame_layout_calc_geometry (MetaFrameLayout        *layout,
                                  MetaFrameGeometry      *fgeom,
                                  MetaTheme              *theme)
 {
+  MetaTheme *current;
   int i, n_left, n_right, n_left_spacers, n_right_spacers;
   int x;
   int button_y;
@@ -773,6 +777,8 @@ meta_frame_layout_calc_geometry (MetaFrameLayout        *layout,
   int button_width, button_height;
   int min_size_for_rounding;
 
+  current = meta_theme_get_current ();
+
   /* the left/right rects in order; the max # of rects
    * is the number of button functions
    */
@@ -917,7 +923,7 @@ meta_frame_layout_calc_geometry (MetaFrameLayout        *layout,
 
       space_used_by_buttons += button_width * n_left;
       space_used_by_buttons += (button_width * 0.75) * n_left_spacers;
-      if (meta_prefs_get_theme ())
+      if (current->is_gtk_theme == FALSE)
         {
           space_used_by_buttons += layout->button_border.left * n_left;
           space_used_by_buttons += layout->button_border.right * n_left;
@@ -927,7 +933,7 @@ meta_frame_layout_calc_geometry (MetaFrameLayout        *layout,
 
       space_used_by_buttons += button_width * n_right;
       space_used_by_buttons += (button_width * 0.75) * n_right_spacers;
-      if (meta_prefs_get_theme ())
+      if (current->is_gtk_theme == FALSE)
         {
           space_used_by_buttons += layout->button_border.left * n_right;
           space_used_by_buttons += layout->button_border.right * n_right;
@@ -1030,7 +1036,7 @@ meta_frame_layout_calc_geometry (MetaFrameLayout        *layout,
         break;
 
       rect = right_func_rects[i];
-      if (meta_prefs_get_theme ())
+      if (current->is_gtk_theme == FALSE)
         rect->visible.x = x - layout->button_border.right - button_width;
       else
         rect->visible.x = x - button_width;
@@ -1052,7 +1058,7 @@ meta_frame_layout_calc_geometry (MetaFrameLayout        *layout,
 
           if (i == n_right - 1)
             {
-              if (meta_prefs_get_theme ())
+              if (current->is_gtk_theme == FALSE)
                 rect->clickable.width += layout->right_titlebar_edge + layout->right_width + 
layout->button_border.right;
               else
                 rect->clickable.width += layout->right_titlebar_edge + layout->right_width;
@@ -1064,7 +1070,7 @@ meta_frame_layout_calc_geometry (MetaFrameLayout        *layout,
 
       *(right_bg_rects[i]) = rect->visible;
 
-      if (meta_prefs_get_theme ())
+      if (current->is_gtk_theme == FALSE)
         x = rect->visible.x - layout->button_border.left;
       else
         {
@@ -1090,7 +1096,7 @@ meta_frame_layout_calc_geometry (MetaFrameLayout        *layout,
 
       rect = left_func_rects[i];
 
-      if (meta_prefs_get_theme ())
+      if (current->is_gtk_theme == FALSE)
         rect->visible.x = x + layout->button_border.left;
       else
         rect->visible.x = x;
@@ -1108,7 +1114,7 @@ meta_frame_layout_calc_geometry (MetaFrameLayout        *layout,
       else
         g_memmove (&(rect->clickable), &(rect->visible), sizeof(rect->clickable));
 
-      if (meta_prefs_get_theme ())
+      if (current->is_gtk_theme == FALSE)
         x = rect->visible.x + rect->visible.width + layout->button_border.right;
       else
         {
@@ -5404,6 +5410,8 @@ theme_set_current_metacity (const gchar *name,
     }
   else
     {
+      new_theme->is_gtk_theme = FALSE;
+
       if (meta_current_theme)
         meta_theme_free (meta_current_theme);
 
@@ -5414,15 +5422,21 @@ theme_set_current_metacity (const gchar *name,
 }
 
 static void
-theme_set_current_gtk (const gchar *name)
+theme_set_current_gtk (const gchar *name,
+                       gboolean     force_reload)
 {
   int i, j, frame_type;
 
   meta_topic (META_DEBUG_THEMES, "Setting current theme to \"%s\"\n", name);
 
-  if (meta_current_theme)
+  if (!force_reload && meta_current_theme)
     return;
+
+  if (force_reload && meta_current_theme)
+    meta_theme_free (meta_current_theme);
+
   meta_current_theme = meta_theme_new ();
+  meta_current_theme->is_gtk_theme = TRUE;
 
   for (frame_type = 0; frame_type < META_FRAME_TYPE_LAST; frame_type++)
     {
@@ -5491,13 +5505,13 @@ void
 meta_theme_set_current (const char *name,
                         gboolean    force_reload)
 {
-  if (meta_prefs_get_theme ())
+  if (name != NULL && strcmp (name, "") != 0)
     {
       theme_set_current_metacity (name, force_reload);
     }
   else
     {
-      theme_set_current_gtk (name);
+      theme_set_current_gtk (name, force_reload);
     }
 }
 
@@ -5508,6 +5522,8 @@ meta_theme_new (void)
 
   theme = g_new0 (MetaTheme, 1);
 
+  theme->is_gtk_theme = FALSE;
+
   theme->images_by_filename =
     g_hash_table_new_full (g_str_hash,
                            g_str_equal,
@@ -6084,7 +6100,7 @@ meta_theme_draw_frame (MetaTheme              *theme,
                                    &fgeom,
                                    theme);
 
-  if (meta_prefs_get_theme ())
+  if (theme->is_gtk_theme == FALSE)
     {
       meta_frame_style_draw_with_style (style,
                                         style_info,
diff --git a/src/ui/theme.h b/src/ui/theme.h
index 2c85496..f1981f2 100644
--- a/src/ui/theme.h
+++ b/src/ui/theme.h
@@ -838,6 +838,8 @@ struct _MetaTheme
    */
   guint format_version;
 
+  gboolean is_gtk_theme;
+
   /** Symbol table of integer constants. */
   GHashTable *integer_constants;
   /** Symbol table of float constants. */
diff --git a/src/ui/ui.c b/src/ui/ui.c
index f4bee09..ccde3f5 100644
--- a/src/ui/ui.c
+++ b/src/ui/ui.c
@@ -678,15 +678,18 @@ meta_ui_theme_get_frame_borders (MetaUI           *ui,
       GdkDisplay *display = gdk_x11_lookup_xdisplay (ui->xdisplay);
       GdkScreen *screen = gdk_display_get_screen (display, XScreenNumberOfScreen (ui->xscreen));
       MetaStyleInfo *style_info = NULL;
+      MetaTheme *current;
 
       style_info = meta_theme_create_style_info (screen, NULL);
 
       context = gtk_widget_get_pango_context (GTK_WIDGET (ui->frames));
       font_desc = meta_prefs_get_titlebar_font ();
 
+      current = meta_theme_get_current ();
+
       if (!font_desc)
         {
-          if (meta_prefs_get_theme ())
+          if (current->is_gtk_theme == FALSE)
             {
               GtkStyleContext *style = NULL;
               GtkWidgetPath *widget_path;
@@ -715,7 +718,7 @@ meta_ui_theme_get_frame_borders (MetaUI           *ui,
 
       text_height = meta_pango_font_desc_get_text_height (font_desc, context);
 
-      meta_theme_get_frame_borders (meta_theme_get_current (),
+      meta_theme_get_frame_borders (current,
                                     style_info,
                                     type, text_height, flags,
                                     borders);


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