diff options
author | Owen Taylor <otaylor@redhat.com> | 2002-08-01 23:43:13 +0000 |
---|---|---|
committer | Owen Taylor <otaylor@src.gnome.org> | 2002-08-01 23:43:13 +0000 |
commit | 63489392e6c1e452054eb930fa7bd493e51cba9a (patch) | |
tree | 3ad603c3bbd2ea819fa025229dd02658fa08fd0e /gtk | |
parent | 615deb3e4ad2411c61c6b5ed4c5e445218b139bf (diff) | |
download | gtk+-63489392e6c1e452054eb930fa7bd493e51cba9a.tar.gz |
New demo for window migration between different displays and screens.
Thu Aug 1 19:09:39 2002 Owen Taylor <otaylor@redhat.com>
* demos/gtk-demo/changedisplay.c: New demo for
window migration between different displays and screens.
* gtk/gtkrc.c gtkstyle.[ch]: Add
_gtk_style_init_for_settings(), so that gtkrc.c
can initialize the styles it creates for the
right display.
* gdk/gdkdisplaymanager.c (gdk_screen_get_default)
* gtk/gtksettings.c (gtk_settings_get_default)
* gtk/gtkstyle.c (gtk_style_init): Handle absence of
a default screen.
* gdk/x11/gdkmain-x11.c (_gdk_windowing_set_default_display):
Handle display == NULL.x
* gdk/gdkdisplay.c (gdk_display_dispose): Free the
event queue.
* gdk/x11/gdkevents-x11.c gdk/x11/gdkdisplay-x11.c:
Remove the event source when closing a display.
* gdk/gdkdisplay.[ch]: Add a ::closed signal, dispose()
isn't convenient enough by itself.
* gdk/x11/gdkevents-x11.c (gdk_xsettings_watch_cb):
Create foreign windows for watch windows if there isn't
an existing window, instead of installing a global filter.
* gdk/x11/gdkscreen-x11.c gdk/x11/gdkprivate-x11.h
gdk/x11/gdkevents-x11.c (_gdk_x11_events_uninit_screen):
Clean up the xsettings_client when we are done with
it.
* gdk/x11/gdkevents-x11.c (_gdk_events_init): Remove
excess call to _gdk_x11_events_init_screen()
Diffstat (limited to 'gtk')
-rw-r--r-- | gtk/gtkrc.c | 24 | ||||
-rw-r--r-- | gtk/gtkrc.h | 1 | ||||
-rw-r--r-- | gtk/gtksettings.c | 10 | ||||
-rw-r--r-- | gtk/gtkstyle.c | 39 | ||||
-rw-r--r-- | gtk/gtkstyle.h | 3 |
5 files changed, 61 insertions, 16 deletions
diff --git a/gtk/gtkrc.c b/gtk/gtkrc.c index 5fd9fc88fa..4fb271694d 100644 --- a/gtk/gtkrc.c +++ b/gtk/gtkrc.c @@ -119,8 +119,10 @@ static GSList * gtk_rc_styles_match (GSList *rc_styles guint path_length, const gchar *path, const gchar *path_reversed); -static GtkStyle * gtk_rc_style_to_style (GtkRcStyle *rc_style); -static GtkStyle* gtk_rc_init_style (GSList *rc_styles); +static GtkStyle * gtk_rc_style_to_style (GtkRcContext *context, + GtkRcStyle *rc_style); +static GtkStyle* gtk_rc_init_style (GtkRcContext *context, + GSList *rc_styles); static void gtk_rc_parse_default_files (GtkRcContext *context); static void gtk_rc_parse_named (GtkRcContext *context, const gchar *name, @@ -1635,11 +1637,14 @@ gtk_rc_get_style (GtkWidget *widget) rc_styles = g_slist_prepend (rc_styles, widget_rc_style); if (rc_styles) - return gtk_rc_init_style (rc_styles); + return gtk_rc_init_style (context, rc_styles); else { if (!context->default_style) - context->default_style = gtk_style_new (); + { + context->default_style = gtk_style_new (); + _gtk_style_init_for_settings (context->default_style, context->settings); + } return context->default_style; } @@ -1741,7 +1746,7 @@ gtk_rc_get_style_by_paths (GtkSettings *settings, rc_styles = sort_and_dereference_sets (rc_styles); if (rc_styles) - return gtk_rc_init_style (rc_styles); + return gtk_rc_init_style (context, rc_styles); return NULL; } @@ -1967,11 +1972,13 @@ gtk_rc_style_find (GtkRcContext *context, } static GtkStyle * -gtk_rc_style_to_style (GtkRcStyle *rc_style) +gtk_rc_style_to_style (GtkRcContext *context, + GtkRcStyle *rc_style) { GtkStyle *style; style = GTK_RC_STYLE_GET_CLASS (rc_style)->create_style (rc_style); + _gtk_style_init_for_settings (style, context->settings); style->rc_style = rc_style; @@ -1984,7 +1991,8 @@ gtk_rc_style_to_style (GtkRcStyle *rc_style) /* Reuses or frees rc_styles */ static GtkStyle * -gtk_rc_init_style (GSList *rc_styles) +gtk_rc_init_style (GtkRcContext *context, + GSList *rc_styles) { GtkStyle *style = NULL; gint i; @@ -2069,7 +2077,7 @@ gtk_rc_init_style (GSList *rc_styles) proto_style->bg_pixmap_name[i] = NULL; } - style = gtk_rc_style_to_style (proto_style); + style = gtk_rc_style_to_style (context, proto_style); gtk_rc_style_unref (proto_style); g_hash_table_insert (realized_style_ht, rc_styles, style); diff --git a/gtk/gtkrc.h b/gtk/gtkrc.h index 9b582337e3..770760097e 100644 --- a/gtk/gtkrc.h +++ b/gtk/gtkrc.h @@ -37,7 +37,6 @@ extern "C" { /* Forward declarations */ typedef struct _GtkIconFactory GtkIconFactory; typedef struct _GtkRcContext GtkRcContext; -typedef struct _GtkSettings GtkSettings; typedef struct _GtkRcStyleClass GtkRcStyleClass; diff --git a/gtk/gtksettings.c b/gtk/gtksettings.c index a9b4d8b633..8d06dad8ad 100644 --- a/gtk/gtksettings.c +++ b/gtk/gtksettings.c @@ -266,12 +266,18 @@ gtk_settings_get_for_screen (GdkScreen *screen) * Gets the #GtkSettings object for the default GDK screen, creating * it if necessary. See gtk_settings_get_for_screen(). * - * Return value: a #GtkSettings object + * Return value: a #GtkSettings object. If there is no default + * screen, then returns %NULL. **/ GtkSettings* gtk_settings_get_default (void) { - return gtk_settings_get_for_screen (gdk_screen_get_default ()); + GdkScreen *screen = gdk_screen_get_default (); + + if (screen) + return gtk_settings_get_for_screen (screen); + else + return NULL; } static void diff --git a/gtk/gtkstyle.c b/gtk/gtkstyle.c index b7b39e6e51..06216faace 100644 --- a/gtk/gtkstyle.c +++ b/gtk/gtkstyle.c @@ -481,14 +481,30 @@ gtk_style_get_type (void) return style_type; } -static void -gtk_style_init (GtkStyle *style) +/** + * _gtk_style_init_for_settings: + * @style: a #GtkStyle + * @settings: a #GtkSettings + * + * Initializes the font description in @style accoridng to the default + * font name of @settings. This is called for gtk_style_new() with + * the settings for the default screen (if any); if we are creating + * a style for a particular screen, we then call it again in a + * location where we know the correct settings. + * The reason for this is that gtk_rc_style_create_style() doesn't + * take the screen for an argument. + **/ +void +_gtk_style_init_for_settings (GtkStyle *style, + GtkSettings *settings) { - gint i; - const gchar *font_name = _gtk_rc_context_get_default_font_name (gtk_settings_get_default ()); + const gchar *font_name = _gtk_rc_context_get_default_font_name (settings); + if (style->font_desc) + pango_font_description_free (style->font_desc); + style->font_desc = pango_font_description_from_string (font_name); - + if (!pango_font_description_get_family (style->font_desc)) { g_warning ("Default font does not have a family set"); @@ -499,6 +515,19 @@ gtk_style_init (GtkStyle *style) g_warning ("Default font does not have a positive size"); pango_font_description_set_size (style->font_desc, 10 * PANGO_SCALE); } +} + +static void +gtk_style_init (GtkStyle *style) +{ + gint i; + + GtkSettings *settings = gtk_settings_get_default (); + + if (settings) + _gtk_style_init_for_settings (style, settings); + else + style->font_desc = pango_font_description_from_string ("Sans 10"); style->attach_count = 0; style->colormap = NULL; diff --git a/gtk/gtkstyle.h b/gtk/gtkstyle.h index ce4c3901c1..0fbdf06fdb 100644 --- a/gtk/gtkstyle.h +++ b/gtk/gtkstyle.h @@ -56,6 +56,7 @@ typedef struct _GtkRcStyle GtkRcStyle; typedef struct _GtkIconSet GtkIconSet; typedef struct _GtkIconSource GtkIconSource; typedef struct _GtkRcProperty GtkRcProperty; +typedef struct _GtkSettings GtkSettings; typedef gboolean (*GtkRcPropertyParser) (const GParamSpec *pspec, const GString *rc_string, GValue *property_value); @@ -861,6 +862,8 @@ const GValue* _gtk_style_peek_property_value (GtkStyle *style, GParamSpec *pspec, GtkRcPropertyParser parser); +void _gtk_style_init_for_settings (GtkStyle *style, + GtkSettings *settings); /* deprecated */ #ifndef GTK_DISABLE_DEPRECATED |