use the preview widget here
2002-02-14 Havoc Pennington <hp@pobox.com> * src/theme-viewer.c: use the preview widget here * src/preview-widget.h, src/preview-widget.c: make the theme preview into a nice widget * src/frames.c (meta_frames_ensure_layout): replace frame layout if the frame style changes, this only ends up mattering if you e.g. changed the font size for windows in a different state such as maximized, which is crack, but the code may as well be correct * src/theme.c (meta_theme_get_frame_style): new function so we can detect an invalid cache of the PangoLayout in a frame
This commit is contained in:

committed by
Havoc Pennington

parent
813e6f459f
commit
a7378b709b
34
src/frames.c
34
src/frames.c
@ -281,29 +281,49 @@ meta_frames_ensure_layout (MetaFrames *frames,
|
||||
MetaUIFrame *frame)
|
||||
{
|
||||
GtkWidget *widget;
|
||||
MetaFrameFlags flags;
|
||||
MetaFrameType type;
|
||||
MetaFrameStyle *style;
|
||||
|
||||
g_return_if_fail (GTK_WIDGET_REALIZED (frames));
|
||||
|
||||
widget = GTK_WIDGET (frames);
|
||||
|
||||
flags = meta_core_get_frame_flags (gdk_display, frame->xwindow);
|
||||
type = meta_core_get_frame_type (gdk_display, frame->xwindow);
|
||||
|
||||
style = meta_theme_get_frame_style (meta_theme_get_current (),
|
||||
type, flags);
|
||||
|
||||
if (style != frame->cache_style)
|
||||
{
|
||||
if (frame->layout)
|
||||
{
|
||||
/* save title to recreate layout */
|
||||
g_free (frame->title);
|
||||
|
||||
frame->title = g_strdup (pango_layout_get_text (frame->layout));
|
||||
|
||||
g_object_unref (G_OBJECT (frame->layout));
|
||||
frame->layout = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
frame->cache_style = style;
|
||||
|
||||
if (frame->layout == NULL)
|
||||
{
|
||||
gpointer key, value;
|
||||
PangoFontDescription *font_desc;
|
||||
MetaFrameFlags flags;
|
||||
MetaFrameType type;
|
||||
double scale;
|
||||
int size;
|
||||
|
||||
flags = meta_core_get_frame_flags (gdk_display, frame->xwindow);
|
||||
type = meta_core_get_frame_type (gdk_display, frame->xwindow);
|
||||
|
||||
scale = meta_theme_get_title_scale (meta_theme_get_current (),
|
||||
type,
|
||||
flags);
|
||||
|
||||
frame->layout = gtk_widget_create_pango_layout (widget, frame->title);
|
||||
|
||||
|
||||
font_desc = meta_gtk_widget_get_font_desc (widget, scale);
|
||||
|
||||
size = pango_font_description_get_size (font_desc);
|
||||
@ -346,6 +366,7 @@ meta_frames_ensure_layout (MetaFrames *frames,
|
||||
|
||||
pango_font_description_free (font_desc);
|
||||
|
||||
/* Save some RAM */
|
||||
g_free (frame->title);
|
||||
frame->title = NULL;
|
||||
}
|
||||
@ -404,6 +425,7 @@ meta_frames_manage_window (MetaFrames *frames,
|
||||
/* Don't set event mask here, it's in frame.c */
|
||||
|
||||
frame->xwindow = xwindow;
|
||||
frame->cache_style = NULL;
|
||||
frame->layout = NULL;
|
||||
frame->text_height = -1;
|
||||
frame->title = NULL;
|
||||
|
Reference in New Issue
Block a user