Duplicate bg_pixmap_name when merging RC styles. Report new share/themes

Sat Oct 17 00:40:51 1998  Owen Taylor  <otaylor@redhat.com>

	* gtk/gtkrc.c (gtk_rc_style_init): Duplicate bg_pixmap_name when
	merging RC styles. Report new share/themes path for
	themes directory. Deref theme engines when appropriate.

	* gtk/gtkclist.c: Set all backgrounds in _style_set().
	Make sure that pixel for xor_gc is never 0.

	* gtk/gtkctree.c: Choose colors for plus/minus more
	carefully, in a hopefully style-independent fashion.
	(Still needs a bit more work)

	* gtk/gtkwidget.c: Don't send expose events to widgets
	which are about to be resized and redrawn. (Needs a
	bit more thought.)

	* gtk/gtknotebook.c (gtk_notebook_draw_tab): Avoid
	drawing on tabs for newly allocated, un-sized
	pages - we'll get the size wrong.
This commit is contained in:
Owen Taylor
1998-10-17 04:39:35 +00:00
committed by Owen Taylor
parent 55f17ae647
commit b20db730ea
15 changed files with 209 additions and 44 deletions

View File

@@ -1,3 +1,24 @@
Sat Oct 17 00:40:51 1998 Owen Taylor <otaylor@redhat.com>
* gtk/gtkrc.c (gtk_rc_style_init): Duplicate bg_pixmap_name when
merging RC styles. Report new share/themes path for
themes directory. Deref theme engines when appropriate.
* gtk/gtkclist.c: Set all backgrounds in _style_set().
Make sure that pixel for xor_gc is never 0.
* gtk/gtkctree.c: Choose colors for plus/minus more
carefully, in a hopefully style-independent fashion.
(Still needs a bit more work)
* gtk/gtkwidget.c: Don't send expose events to widgets
which are about to be resized and redrawn. (Needs a
bit more thought.)
* gtk/gtknotebook.c (gtk_notebook_draw_tab): Avoid
drawing on tabs for newly allocated, un-sized
pages - we'll get the size wrong.
Thu Oct 1 17:38:07 1998 Owen Taylor <otaylor@redhat.com>
* gtk/gtkwidget.c (gtk_widget_redraw_queue_remove): Fixed

View File

@@ -1,3 +1,24 @@
Sat Oct 17 00:40:51 1998 Owen Taylor <otaylor@redhat.com>
* gtk/gtkrc.c (gtk_rc_style_init): Duplicate bg_pixmap_name when
merging RC styles. Report new share/themes path for
themes directory. Deref theme engines when appropriate.
* gtk/gtkclist.c: Set all backgrounds in _style_set().
Make sure that pixel for xor_gc is never 0.
* gtk/gtkctree.c: Choose colors for plus/minus more
carefully, in a hopefully style-independent fashion.
(Still needs a bit more work)
* gtk/gtkwidget.c: Don't send expose events to widgets
which are about to be resized and redrawn. (Needs a
bit more thought.)
* gtk/gtknotebook.c (gtk_notebook_draw_tab): Avoid
drawing on tabs for newly allocated, un-sized
pages - we'll get the size wrong.
Thu Oct 1 17:38:07 1998 Owen Taylor <otaylor@redhat.com>
* gtk/gtkwidget.c (gtk_widget_redraw_queue_remove): Fixed

View File

@@ -1,3 +1,24 @@
Sat Oct 17 00:40:51 1998 Owen Taylor <otaylor@redhat.com>
* gtk/gtkrc.c (gtk_rc_style_init): Duplicate bg_pixmap_name when
merging RC styles. Report new share/themes path for
themes directory. Deref theme engines when appropriate.
* gtk/gtkclist.c: Set all backgrounds in _style_set().
Make sure that pixel for xor_gc is never 0.
* gtk/gtkctree.c: Choose colors for plus/minus more
carefully, in a hopefully style-independent fashion.
(Still needs a bit more work)
* gtk/gtkwidget.c: Don't send expose events to widgets
which are about to be resized and redrawn. (Needs a
bit more thought.)
* gtk/gtknotebook.c (gtk_notebook_draw_tab): Avoid
drawing on tabs for newly allocated, un-sized
pages - we'll get the size wrong.
Thu Oct 1 17:38:07 1998 Owen Taylor <otaylor@redhat.com>
* gtk/gtkwidget.c (gtk_widget_redraw_queue_remove): Fixed

View File

@@ -1,3 +1,24 @@
Sat Oct 17 00:40:51 1998 Owen Taylor <otaylor@redhat.com>
* gtk/gtkrc.c (gtk_rc_style_init): Duplicate bg_pixmap_name when
merging RC styles. Report new share/themes path for
themes directory. Deref theme engines when appropriate.
* gtk/gtkclist.c: Set all backgrounds in _style_set().
Make sure that pixel for xor_gc is never 0.
* gtk/gtkctree.c: Choose colors for plus/minus more
carefully, in a hopefully style-independent fashion.
(Still needs a bit more work)
* gtk/gtkwidget.c: Don't send expose events to widgets
which are about to be resized and redrawn. (Needs a
bit more thought.)
* gtk/gtknotebook.c (gtk_notebook_draw_tab): Avoid
drawing on tabs for newly allocated, un-sized
pages - we'll get the size wrong.
Thu Oct 1 17:38:07 1998 Owen Taylor <otaylor@redhat.com>
* gtk/gtkwidget.c (gtk_widget_redraw_queue_remove): Fixed

View File

@@ -1,3 +1,24 @@
Sat Oct 17 00:40:51 1998 Owen Taylor <otaylor@redhat.com>
* gtk/gtkrc.c (gtk_rc_style_init): Duplicate bg_pixmap_name when
merging RC styles. Report new share/themes path for
themes directory. Deref theme engines when appropriate.
* gtk/gtkclist.c: Set all backgrounds in _style_set().
Make sure that pixel for xor_gc is never 0.
* gtk/gtkctree.c: Choose colors for plus/minus more
carefully, in a hopefully style-independent fashion.
(Still needs a bit more work)
* gtk/gtkwidget.c: Don't send expose events to widgets
which are about to be resized and redrawn. (Needs a
bit more thought.)
* gtk/gtknotebook.c (gtk_notebook_draw_tab): Avoid
drawing on tabs for newly allocated, un-sized
pages - we'll get the size wrong.
Thu Oct 1 17:38:07 1998 Owen Taylor <otaylor@redhat.com>
* gtk/gtkwidget.c (gtk_widget_redraw_queue_remove): Fixed

View File

@@ -1,3 +1,24 @@
Sat Oct 17 00:40:51 1998 Owen Taylor <otaylor@redhat.com>
* gtk/gtkrc.c (gtk_rc_style_init): Duplicate bg_pixmap_name when
merging RC styles. Report new share/themes path for
themes directory. Deref theme engines when appropriate.
* gtk/gtkclist.c: Set all backgrounds in _style_set().
Make sure that pixel for xor_gc is never 0.
* gtk/gtkctree.c: Choose colors for plus/minus more
carefully, in a hopefully style-independent fashion.
(Still needs a bit more work)
* gtk/gtkwidget.c: Don't send expose events to widgets
which are about to be resized and redrawn. (Needs a
bit more thought.)
* gtk/gtknotebook.c (gtk_notebook_draw_tab): Avoid
drawing on tabs for newly allocated, un-sized
pages - we'll get the size wrong.
Thu Oct 1 17:38:07 1998 Owen Taylor <otaylor@redhat.com>
* gtk/gtkwidget.c (gtk_widget_redraw_queue_remove): Fixed

View File

@@ -1,3 +1,24 @@
Sat Oct 17 00:40:51 1998 Owen Taylor <otaylor@redhat.com>
* gtk/gtkrc.c (gtk_rc_style_init): Duplicate bg_pixmap_name when
merging RC styles. Report new share/themes path for
themes directory. Deref theme engines when appropriate.
* gtk/gtkclist.c: Set all backgrounds in _style_set().
Make sure that pixel for xor_gc is never 0.
* gtk/gtkctree.c: Choose colors for plus/minus more
carefully, in a hopefully style-independent fashion.
(Still needs a bit more work)
* gtk/gtkwidget.c: Don't send expose events to widgets
which are about to be resized and redrawn. (Needs a
bit more thought.)
* gtk/gtknotebook.c (gtk_notebook_draw_tab): Avoid
drawing on tabs for newly allocated, un-sized
pages - we'll get the size wrong.
Thu Oct 1 17:38:07 1998 Owen Taylor <otaylor@redhat.com>
* gtk/gtkwidget.c (gtk_widget_redraw_queue_remove): Fixed

View File

@@ -360,7 +360,6 @@ static void real_sort_list (GtkCList *clist);
/* Fill in data after widget is realized and has style */
static void add_style_data (GtkCList * clist);
static void gtk_clist_style_set (GtkWidget *widget, GtkStyle *previous_style);
static GtkContainerClass *parent_class = NULL;
@@ -2459,7 +2458,10 @@ gtk_clist_realize (GtkWidget * widget)
/* We'll use this gc to do scrolling as well */
gdk_gc_set_exposures (clist->fg_gc, TRUE);
values.foreground = widget->style->white;
if (widget->style->white.pixel == 0)
values.foreground = widget->style->black;
else
values.foreground = widget->style->white;
values.function = GDK_XOR;
values.subwindow_mode = GDK_INCLUDE_INFERIORS;
clist->xor_gc = gdk_gc_new_with_values (widget->window,
@@ -6117,24 +6119,19 @@ static void
gtk_clist_style_set (GtkWidget *widget,
GtkStyle *previous_style)
{
GdkRectangle area;
if (GTK_WIDGET_REALIZED (widget) &&
!GTK_WIDGET_NO_WINDOW (widget))
{
gtk_style_set_background (widget->style, widget->window, widget->state);
if (GTK_WIDGET_DRAWABLE (widget))
gdk_window_clear (widget->window);
GtkCList *clist;
g_return_if_fail (widget != NULL);
g_return_if_fail (GTK_IS_CLIST (widget));
clist = GTK_CLIST (widget);
if (GTK_WIDGET_REALIZED (widget))
{
gtk_style_set_background (widget->style, widget->window, widget->state);
gtk_style_set_background (widget->style, clist->title_window, GTK_STATE_SELECTED);
gdk_window_set_background (clist->clist_window, &widget->style->bg[GTK_STATE_PRELIGHT]);
}
if (GTK_CLIST(widget)->vscrollbar)
gtk_widget_queue_draw(GTK_CLIST(widget)->vscrollbar);
if (GTK_CLIST(widget)->hscrollbar)
gtk_widget_queue_draw(GTK_CLIST(widget)->hscrollbar);
area.x = 0;
area.y = 0;
area.width = widget->allocation.width;
area.height = widget->allocation.height;
gtk_clist_draw(widget, &area);
}
static gint

View File

@@ -1811,7 +1811,7 @@ draw_row (GtkCList *clist,
default:
gdk_draw_rectangle
(clist->clist_window,
GTK_WIDGET (clist)->style->fg_gc[GTK_STATE_SELECTED],
GTK_WIDGET (clist)->style->base_gc[GTK_STATE_NORMAL],
TRUE,
xdest + xoffset,
clip_rectangle.y + yoffset,
@@ -2078,13 +2078,13 @@ draw_row (GtkCList *clist,
if (clist_row->fg_set)
tgc = clist->fg_gc;
else
tgc = widget->style->fg_gc[GTK_STATE_NORMAL];
tgc = widget->style->text_gc[GTK_STATE_NORMAL];
cgc = tgc;
}
else
{
cgc =
GTK_WIDGET(clist)->style->fg_gc[GTK_STATE_SELECTED];
GTK_WIDGET(clist)->style->base_gc[GTK_STATE_NORMAL];
tgc = fg_gc;
}

View File

@@ -2271,7 +2271,8 @@ gtk_notebook_draw_tab (GtkNotebook *notebook,
g_return_if_fail (page != NULL);
g_return_if_fail (area != NULL);
if (!GTK_WIDGET_MAPPED (page->tab_label))
if (!GTK_WIDGET_MAPPED (page->tab_label) ||
(page->allocation.width == 0) || (page->allocation.height == 0))
return;
page_area.x = page->allocation.x;

View File

@@ -201,13 +201,13 @@ gtk_rc_get_theme_dir(void)
var = getenv("GTK_DATA_PREFIX");
if (var)
{
path = g_malloc(strlen(var) + strlen("/share/gtk/themes") +1);
sprintf(path, "%s%s", var, "/share/gtk/themes");
path = g_malloc(strlen(var) + strlen("/share/themes") +1);
sprintf(path, "%s%s", var, "/share/themes");
}
else
{
path = g_malloc(strlen(GTK_DATA_PREFIX) + strlen("/share/gtk/themes") +1);
sprintf(path, "%s%s", GTK_DATA_PREFIX, "/share/gtk/themes");
path = g_malloc(strlen(GTK_DATA_PREFIX) + strlen("/share/themes") +1);
sprintf(path, "%s%s", GTK_DATA_PREFIX, "/share/themes");
}
return path;
}
@@ -442,7 +442,10 @@ gtk_rc_style_unref (GtkRcStyle *rc_style)
if (rc_style->ref_count == 0)
{
if (rc_style->engine)
rc_style->engine->destroy_rc_style (rc_style);
{
rc_style->engine->destroy_rc_style (rc_style);
gtk_theme_engine_unref (rc_style->engine);
}
if (rc_style->name)
g_free (rc_style->name);
@@ -495,13 +498,19 @@ gtk_rc_clear_styles (void)
{
/* Clear out all old rc_styles */
g_hash_table_foreach (rc_style_ht, gtk_rc_clear_hash_node, NULL);
g_hash_table_destroy (rc_style_ht);
rc_style_ht = NULL;
if (rc_style_ht)
{
g_hash_table_foreach (rc_style_ht, gtk_rc_clear_hash_node, NULL);
g_hash_table_destroy (rc_style_ht);
rc_style_ht = NULL;
}
g_hash_table_foreach (realized_style_ht, gtk_rc_clear_realized_node, NULL);
g_hash_table_destroy (realized_style_ht);
realized_style_ht = NULL;
if (realized_style_ht)
{
g_hash_table_foreach (realized_style_ht, gtk_rc_clear_realized_node, NULL);
g_hash_table_destroy (realized_style_ht);
realized_style_ht = NULL;
}
gtk_rc_free_rc_sets (gtk_rc_sets_widget);
g_slist_free (gtk_rc_sets_widget);
@@ -890,6 +899,7 @@ gtk_rc_style_to_style (GtkRcStyle *rc_style)
if (rc_style->engine)
{
style->engine = rc_style->engine;
gtk_theme_engine_ref (style->engine);
rc_style->engine->rc_style_to_style (style, rc_style);
}
@@ -924,7 +934,7 @@ gtk_rc_style_init (GSList *rc_styles)
for (i=0; i<5; i++)
{
if (!proto_style->bg_pixmap_name[i] && rc_style->bg_pixmap_name[i])
proto_style->bg_pixmap_name[i] = rc_style->bg_pixmap_name[i];
proto_style->bg_pixmap_name[i] = g_strdup (rc_style->bg_pixmap_name[i]);
if (!(proto_style->color_flags[i] & GTK_RC_FG) &&
rc_style->color_flags[i] & GTK_RC_FG)
@@ -958,7 +968,10 @@ gtk_rc_style_init (GSList *rc_styles)
proto_style->fontset_name = g_strdup (rc_style->fontset_name);
if (!proto_style->engine && rc_style->engine)
proto_style->engine = rc_style->engine;
{
proto_style->engine = rc_style->engine;
gtk_theme_engine_ref (proto_style->engine);
}
if (proto_style->engine &&
(proto_style->engine == rc_style->engine))

View File

@@ -728,7 +728,10 @@ gtk_style_destroy (GtkStyle *style)
}
if (style->engine)
style->engine->destroy_style (style);
{
style->engine->destroy_style (style);
gtk_theme_engine_unref (style->engine);
}
gdk_font_unref (style->font);
if (style->rc_style)
@@ -745,7 +748,7 @@ gtk_style_set_background (GtkStyle *style,
GdkPixmap *pixmap;
gint parent_relative;
if (style->engine)
if (style->engine && style->engine->set_background)
{
(*style->engine->set_background) (style, window, state_type);
return;

View File

@@ -2537,9 +2537,13 @@ gtk_widget_event (GtkWidget *widget,
signal_num = CLIENT_EVENT;
break;
case GDK_EXPOSE:
/* there is no sense in providing a widget with bogus expose events
/* there is no sense in providing a widget with bogus expose events.
* Widgets that are going to be resized don't need to be
* exposed, since they will be redrawn anyways.
*/
if (!event->any.window)
if (!event->any.window ||
GTK_WIDGET_RESIZE_NEEDED (widget) ||
(widget->parent && GTK_WIDGET_RESIZE_NEEDED (widget->parent)))
{
gtk_widget_unref (widget);
return TRUE;

View File

@@ -10,7 +10,7 @@
# widget <widget_set> style <style_name>
# widget_class <widget_class_set> style <style_name>
#include "/opt/themes/share/gtk/themes/metal/gtkrc"
#include "/opt/themes/share/themes/Motif/gtk/gtkrc"
binding "test1"
{
@@ -31,7 +31,7 @@ binding "test2"
# lowest
# gtk (used by gtk for internal class bindings)
# application (for hard coded bindings on application basis)
# rc (used implicitel by rc files)
# rc (used implicitly by rc files)
# highest
class "GtkButton" binding "test1" # implicit : rc
class "GtkButton" binding : highest "test2" # override "rc" priority

View File

@@ -10,7 +10,7 @@
# widget <widget_set> style <style_name>
# widget_class <widget_class_set> style <style_name>
#include "/opt/themes/share/gtk/themes/metal/gtkrc"
#include "/opt/themes/share/themes/Motif/gtk/gtkrc"
binding "test1"
{
@@ -31,7 +31,7 @@ binding "test2"
# lowest
# gtk (used by gtk for internal class bindings)
# application (for hard coded bindings on application basis)
# rc (used implicitel by rc files)
# rc (used implicitly by rc files)
# highest
class "GtkButton" binding "test1" # implicit : rc
class "GtkButton" binding : highest "test2" # override "rc" priority