summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlberts Muktupāvels <alberts.muktupavels@gmail.com>2015-04-05 15:26:48 +0300
committerAlberts Muktupāvels <alberts.muktupavels@gmail.com>2015-04-05 15:26:48 +0300
commit4f36eb12f9fef06dc44122d310cba0ce5c886ffa (patch)
tree02e71a4001ad192236f5587c679ed95ba92f5e3d
parent69f79f09293a55764373c25e6d0ff2fa920bd781 (diff)
downloadmetacity-4f36eb12f9fef06dc44122d310cba0ce5c886ffa.tar.gz
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.
-rw-r--r--src/ui/frames.c13
-rw-r--r--src/ui/theme.c42
-rw-r--r--src/ui/theme.h2
-rw-r--r--src/ui/ui.c7
4 files changed, 45 insertions, 19 deletions
diff --git a/src/ui/frames.c b/src/ui/frames.c
index 7864c4b7..5691d242 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 fc16f9fa..04a8ec8c 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 2c85496f..f1981f26 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 f4bee09d..ccde3f5f 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);