summaryrefslogtreecommitdiff
path: root/gtk
diff options
context:
space:
mode:
authorOwen Taylor <otaylor@redhat.com>2002-08-01 23:43:13 +0000
committerOwen Taylor <otaylor@src.gnome.org>2002-08-01 23:43:13 +0000
commit63489392e6c1e452054eb930fa7bd493e51cba9a (patch)
tree3ad603c3bbd2ea819fa025229dd02658fa08fd0e /gtk
parent615deb3e4ad2411c61c6b5ed4c5e445218b139bf (diff)
downloadgtk+-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.c24
-rw-r--r--gtk/gtkrc.h1
-rw-r--r--gtk/gtksettings.c10
-rw-r--r--gtk/gtkstyle.c39
-rw-r--r--gtk/gtkstyle.h3
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